diff --git a/package.json b/package.json index 3780f34b..3da3c555 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "element-ui": "2.7.0", "file-saver": "2.0.1", "fuse.js": "3.4.4", + "papaparse": "^5.0.2", "js-cookie": "2.2.0", "jsonlint": "1.6.3", "jszip": "3.2.1", diff --git a/src/views/orders/list.vue b/src/views/orders/list.vue index c0bb3fcf..30359a42 100644 --- a/src/views/orders/list.vue +++ b/src/views/orders/list.vue @@ -1,31 +1,100 @@ - + - @@ -75,6 +145,8 @@ const fetchAccountList = require('@/api/account').fetchList import { fetchList } from '@/api/order' import moment from 'moment' +import papa from 'papaparse' +import { saveAs } from 'file-saver' export default { name: 'OrderList', @@ -89,7 +161,7 @@ export default { totalPrice(offers) { let price = 0 offers.forEach(element => { - price += ((element.price * 10) * element.quantityOrdered) + price += element.price * 10 * element.quantityOrdered }) return `€${(price * 1.19).toFixed(2)}` } @@ -108,7 +180,13 @@ export default { orderId: '', buyerAccountId: '', sellerAccountId: '', - dateRange: [moment().startOf('day').startOf('week').toDate(), moment().toDate()] + dateRange: [ + moment() + .startOf('day') + .startOf('week') + .toDate(), + moment().toDate() + ] } } }, @@ -117,14 +195,39 @@ export default { this.getList() }, methods: { + downloadCsv() { + var csvDoc = [] + for (var i = 0; i < this.list.length; i++) { + csvDoc.push({ + Created: this.list[i].created, + 'Order Id': this.list[i].orderId, + Seller: this.list[i].offers[0].seller.name, + Buyer: this.list[i].buyer.name, + Total: this.$options.filters.totalPrice(this.list[i].offers), + Products: this.list[i].offers.length, + Status: this.$options.filters.statusFilter(this.list[i].status) + }) + } + const output = '\ufeff' + papa.unparse(csvDoc) + var blob = new Blob([output], { type: 'text/plain;charset=utf-8' }) + saveAs(blob, 'orders.csv') + }, getRemoteAccountList(query) { query = {} query.platform = 'OLFDE' query.limit = 100 fetchAccountList(query).then(response => { if (!response.data.docs) return - this.sellerAccounts = response.data.docs.filter(a => a.type === 'seller').map(v => { return { name: v.name, id: v._id } }) - this.buyerAccounts = response.data.docs.filter(a => a.type === 'buyer').map(v => { return { name: v.name, id: v._id } }) + this.sellerAccounts = response.data.docs + .filter(a => a.type === 'seller') + .map(v => { + return { name: v.name, id: v._id } + }) + this.buyerAccounts = response.data.docs + .filter(a => a.type === 'buyer') + .map(v => { + return { name: v.name, id: v._id } + }) }) }, getSummary(param) { @@ -134,7 +237,7 @@ export default { let totalPrice = 0 data.forEach(order => { order.offers.forEach(element => { - totalPrice += ((element.price * 10) * element.quantityOrdered) + totalPrice += element.price * 10 * element.quantityOrdered }) }) @@ -165,7 +268,9 @@ export default { // If we have an orderId, that trumps all other fields if (this.listQuery.orderId && this.listQuery.orderId.length > 0) { - this.list = allItems.filter(o => o.orderId.indexOf(this.listQuery.orderId) > -1) + this.list = allItems.filter( + o => o.orderId.indexOf(this.listQuery.orderId) > -1 + ) } else { // We don't have an order id, let's check the other fields to use let newResults = allItems @@ -173,16 +278,23 @@ export default { if (this.listQuery.dateRange.length === 2) { newResults = newResults.filter(o => { const created = new Date(o.created).getTime() - return created > this.listQuery.dateRange[0].getTime() && created < this.listQuery.dateRange[1].getTime() + return ( + created > this.listQuery.dateRange[0].getTime() && + created < this.listQuery.dateRange[1].getTime() + ) }) } if (this.listQuery.sellerAccountId.length > 0) { - newResults = newResults.filter(o => o.offers[0].seller._id === this.listQuery.sellerAccountId) + newResults = newResults.filter( + o => o.offers[0].seller._id === this.listQuery.sellerAccountId + ) } if (this.listQuery.buyerAccountId.length > 0) { - newResults = newResults.filter(o => o.buyer._id === this.listQuery.buyerAccountId) + newResults = newResults.filter( + o => o.buyer._id === this.listQuery.buyerAccountId + ) } this.list = newResults @@ -201,4 +313,8 @@ export default { right: 15px; top: 10px; } + +.el-col { + padding-top: 10px; +}