mirror of
https://github.com/frappe/books.git
synced 2024-11-08 23:00:56 +00:00
Fix Invoice
This commit is contained in:
parent
edb0924375
commit
4d3122b569
72
models/doctype/Invoice/InvoiceDocument.js
Normal file
72
models/doctype/Invoice/InvoiceDocument.js
Normal file
@ -0,0 +1,72 @@
|
||||
const BaseDocument = require('frappejs/model/document');
|
||||
const frappe = require('frappejs');
|
||||
|
||||
module.exports = class Invoice extends BaseDocument {
|
||||
async getRowTax(row) {
|
||||
if (row.tax) {
|
||||
let tax = await this.getTax(row.tax);
|
||||
let taxAmount = [];
|
||||
for (let d of (tax.details || [])) {
|
||||
taxAmount.push({account: d.account, rate: d.rate, amount: row.amount * d.rate / 100});
|
||||
}
|
||||
return JSON.stringify(taxAmount);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
async getTax(tax) {
|
||||
if (!this._taxes) this._taxes = {};
|
||||
if (!this._taxes[tax]) this._taxes[tax] = await frappe.getDoc('Tax', tax);
|
||||
return this._taxes[tax];
|
||||
}
|
||||
|
||||
makeTaxSummary() {
|
||||
if (!this.taxes) this.taxes = [];
|
||||
|
||||
// reset tax amount
|
||||
this.taxes.map(d => { d.amount = 0; d.rate = 0; });
|
||||
|
||||
// calculate taxes
|
||||
for (let row of this.items) {
|
||||
if (row.taxAmount) {
|
||||
let taxAmount = JSON.parse(row.taxAmount);
|
||||
for (let rowTaxDetail of taxAmount) {
|
||||
let found = false;
|
||||
|
||||
// check if added in summary
|
||||
for (let taxDetail of this.taxes) {
|
||||
if (taxDetail.account === rowTaxDetail.account) {
|
||||
taxDetail.rate = rowTaxDetail.rate;
|
||||
taxDetail.amount += rowTaxDetail.amount;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
// add new row
|
||||
if (!found) {
|
||||
this.taxes.push({
|
||||
account: rowTaxDetail.account,
|
||||
rate: rowTaxDetail.rate,
|
||||
amount: rowTaxDetail.amount
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// clear no taxes
|
||||
this.taxes = this.taxes.filter(d => d.amount);
|
||||
}
|
||||
|
||||
getGrandTotal() {
|
||||
this.makeTaxSummary();
|
||||
let grandTotal = this.netTotal;
|
||||
if (this.taxes) {
|
||||
for (let row of this.taxes) {
|
||||
grandTotal += row.amount;
|
||||
}
|
||||
}
|
||||
return grandTotal;
|
||||
}
|
||||
}
|
13
models/doctype/Invoice/InvoiceList.js
Normal file
13
models/doctype/Invoice/InvoiceList.js
Normal file
@ -0,0 +1,13 @@
|
||||
const BaseList = require('frappejs/client/view/list');
|
||||
const frappe = require('frappejs');
|
||||
|
||||
module.exports = class InvoiceList extends BaseList {
|
||||
getFields() {
|
||||
return ['name', 'customer', 'grandTotal', 'submitted'];
|
||||
}
|
||||
getRowHTML(data) {
|
||||
return `<div class="col-3">${this.getNameHTML(data)}</div>
|
||||
<div class="col-4 text-muted">${data.customer}</div>
|
||||
<div class="col-4 text-muted text-right">${frappe.format(data.grandTotal, "Currency")}</div>`;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user