2018-04-26 10:23:27 +00:00
|
|
|
const frappe = require('frappejs');
|
|
|
|
|
|
|
|
class SalesRegister {
|
2019-08-05 09:33:05 +00:00
|
|
|
async run({ fromDate, toDate, customer }) {
|
2019-08-14 07:43:49 +00:00
|
|
|
if (!fromDate && !toDate && !customer) return { rows: [] };
|
|
|
|
|
2019-08-05 09:33:05 +00:00
|
|
|
let filters = {};
|
|
|
|
if (customer) {
|
|
|
|
filters.customer = customer;
|
2018-04-26 10:23:27 +00:00
|
|
|
}
|
2019-08-05 09:33:05 +00:00
|
|
|
|
|
|
|
if (fromDate && toDate) {
|
|
|
|
filters.date = ['>=', fromDate, '<=', toDate];
|
|
|
|
} else if (fromDate) {
|
|
|
|
filters.date = ['>=', fromDate];
|
|
|
|
} else if (toDate) {
|
|
|
|
filters.date = ['<=', toDate];
|
|
|
|
}
|
|
|
|
|
|
|
|
const invoices = await frappe.db.getAll({
|
|
|
|
doctype: 'SalesInvoice',
|
|
|
|
fields: ['name', 'date', 'customer', 'account', 'netTotal', 'grandTotal'],
|
|
|
|
filters: filters,
|
|
|
|
orderBy: 'date',
|
|
|
|
order: 'desc'
|
|
|
|
});
|
|
|
|
|
|
|
|
const invoiceNames = invoices.map(d => d.name);
|
|
|
|
|
|
|
|
const taxes = await frappe.db.getAll({
|
|
|
|
doctype: 'TaxSummary',
|
|
|
|
fields: ['parent', 'amount'],
|
|
|
|
filters: {
|
|
|
|
parenttype: 'Invoice',
|
|
|
|
parent: ['in', invoiceNames]
|
|
|
|
},
|
|
|
|
orderBy: 'name'
|
|
|
|
});
|
|
|
|
|
|
|
|
for (let invoice of invoices) {
|
|
|
|
invoice.totalTax = taxes
|
|
|
|
.filter(tax => tax.parent === invoice.name)
|
|
|
|
.reduce((acc, tax) => {
|
|
|
|
if (tax.amount) {
|
|
|
|
acc = acc + tax.amount;
|
|
|
|
}
|
|
|
|
return acc;
|
|
|
|
}, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return { rows: invoices };
|
|
|
|
}
|
2018-04-26 10:23:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = SalesRegister;
|