summaryrefslogtreecommitdiff
path: root/client/components/OrderList.jsx
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2017-04-21 16:03:11 -0400
committerJules Laplace <jules@okfoc.us>2017-04-21 16:03:11 -0400
commitef83dba4a83e23e38b67ee31b79e79c9e25a003d (patch)
treebe0e65ee556d215796f6c64e3df7d8adb5c51554 /client/components/OrderList.jsx
parent5028ad81845308f3b1954dcc1fde664077fa0fa9 (diff)
display orders per product, download as csv
Diffstat (limited to 'client/components/OrderList.jsx')
-rw-r--r--client/components/OrderList.jsx121
1 files changed, 121 insertions, 0 deletions
diff --git a/client/components/OrderList.jsx b/client/components/OrderList.jsx
new file mode 100644
index 0000000..5b0380b
--- /dev/null
+++ b/client/components/OrderList.jsx
@@ -0,0 +1,121 @@
+import React from 'react'
+import state_lookup from '../state_lookup'
+import saveAs from 'browser-saveas'
+import csvStringify from 'csv-stringify'
+
+export default class OrderList extends React.Component {
+ constructor(props) {
+ super()
+ this.downloadCsv = this.downloadCsv.bind(this)
+ }
+ downloadCsv() {
+ const orders = this.parseOrders().map((order) => {
+ return [
+ order.order_id,
+ order.order_date,
+ order.order_checkout_type,
+ order.order_ship_name,
+ order.order_company,
+ order.order_address1,
+ order.order_address2,
+ order.order_city,
+ state_lookup(order.order_state),
+ order.order_zip,
+ order.order_country !== 'United States' ? '' : order.order_country,
+ ]
+ })
+ csvStringify(orders, (err, csv) => {
+ const blob = new Blob([csv], {type : 'text/plain;charset=utf-8'})
+ saveAs(blob, this.props.product.product_name.replace(/\s+/g,"") +'.csv')
+ })
+ }
+ parseOrders() {
+ return this.props.orders.filter( (order) => {
+ // also filter where order.order_status == 3 (paid in full) ?
+ // filter weird blank orders if found
+ return !! order.order_ship_name
+ }).map( (order, i) => {
+ const name = order.order_ship_name
+ .toUpperCase()
+ .replace(/(Sr|Jr|I|II|III|IV)\.?$/i, "")
+ .split(" ")
+ .reverse()[0]
+ return [ name, order ]
+ }).sort((a,b) => {
+ return a[0] < b[0] ? -1 : a[0] === b[0] ? 0 : 1
+ }).map((pair, i) => {
+ return pair[1]
+ })
+ }
+ render() {
+ if (! this.props.product) {
+ return ( <div></div> )
+ }
+ if (! this.props.orders) {
+ return ( <div className='loading'>Loading...</div> )
+ }
+ if (! this.props.orders.length) {
+ return ( <div className='notfound'>No orders found</div> )
+ }
+
+ const items = this.parseOrders().map((order, i) => {
+ const order_link = (
+ <a href={'http://shopping.msana.com/cw4/admin/order-details.php?order_id=' + order.order_id}>
+ (order)
+ </a>
+ )
+ const customer_link = order.order_checkout_type === 'guest' ? '' : (
+ <a href={'http://shopping.msana.com/cw4/admin/customer-details.php?customer_id=' + order.order_customer_id}>
+ (customer)
+ </a>
+ )
+ let order_name, order_address
+ if (order.order_company && order.order_company !== order.order_ship_name) {
+ order_name = (
+ <span>
+ {order.order_ship_name}<br />
+ {order.order_company}
+ </span>
+ )
+ }
+ else {
+ order_name = order.order_ship_name
+ }
+ if (order.order_address2 && order.order_address2 !== order.order_address1) {
+ order_address = (
+ <span>
+ {order.order_address1}<br />
+ {order.order_address2}
+ </span>
+ )
+ }
+ else {
+ order_address = order.order_address1
+ }
+
+ const country = order.order_country !== 'United States' ? order.order_country : ""
+ return (
+ <div key={i}>
+ <div>
+ {order_link} {customer_link}
+ </div>
+ <div>
+ {order_name}<br />
+ {order_address}<br />
+ {order.order_city}, {state_lookup(order.order_state)} {order.order_zip} {country}
+ </div>
+ </div>
+ )
+ })
+
+ return (
+ <div className='orderList'>
+ <a href='#' onClick={() => this.downloadCsv()}>Download CSV</a>
+ {items}
+ <br />
+ <br />
+ <br />
+ </div>
+ )
+ }
+} \ No newline at end of file