salix/print/templates/reports/delivery-note/delivery-note.js

208 lines
7.5 KiB
JavaScript
Raw Normal View History

2019-10-31 11:43:04 +00:00
const config = require(`${appPath}/core/config`);
const db = require(`${appPath}/core/database`);
2019-10-31 11:43:04 +00:00
const Component = require(`${appPath}/core/component`);
const reportHeader = new Component('report-header');
const reportFooter = new Component('report-footer');
2019-07-23 11:41:28 +00:00
const md5 = require('md5');
2019-02-05 06:58:05 +00:00
module.exports = {
2019-10-31 11:43:04 +00:00
name: 'delivery-note',
async serverPrefetch() {
this.client = await this.fetchClient(this.ticketId);
this.ticket = await this.fetchTicket(this.ticketId);
this.sales = await this.fetchSales(this.ticketId);
this.address = await this.fetchAddress(this.ticketId);
this.services = await this.fetchServices(this.ticketId);
this.taxes = await this.fetchTaxes(this.ticketId);
this.packagings = await this.fetchPackagings(this.ticketId);
this.signature = await this.fetchSignature(this.ticketId);
2019-02-05 06:58:05 +00:00
2019-10-31 11:43:04 +00:00
if (!this.ticket)
throw new Error('Something went wrong');
2019-02-05 06:58:05 +00:00
},
data() {
return {totalBalance: 0.00};
},
2019-02-06 09:53:12 +00:00
computed: {
dmsPath() {
2019-07-23 11:41:28 +00:00
const pathHash = md5(this.signature.id.toString()).substring(0, 3);
const hostPath = `file:///${config.storage.root}/${pathHash}`;
if (this.signature && this.signature.id)
return `${hostPath}/${this.signature.id}.png`;
},
serviceTotal() {
let total = 0.00;
this.services.forEach(service => {
total += parseFloat(service.price) * service.quantity;
});
return total;
}
},
2019-02-05 06:58:05 +00:00
methods: {
2019-10-31 11:43:04 +00:00
fetchClient(ticketId) {
return db.findOne(
2019-02-05 06:58:05 +00:00
`SELECT
c.id,
c.socialName,
2019-02-05 06:58:05 +00:00
c.street,
2019-10-31 11:43:04 +00:00
c.fi
2019-02-05 06:58:05 +00:00
FROM ticket t
JOIN client c ON c.id = t.clientFk
2019-10-31 11:43:04 +00:00
WHERE t.id = ?`, [ticketId]);
2019-02-05 06:58:05 +00:00
},
2019-10-31 11:43:04 +00:00
fetchTicket(ticketId) {
return db.findOne(
`SELECT
t.id,
t.shipped,
t.companyFk
FROM ticket t
2019-10-31 11:43:04 +00:00
WHERE t.id = ?`, [ticketId]);
},
2019-10-31 11:43:04 +00:00
fetchAddress(ticketId) {
return db.findOne(
`SELECT
a.nickname,
a.street,
a.postalCode,
a.city,
p.name province
FROM ticket t
JOIN address a ON a.clientFk = t.clientFk
LEFT JOIN province p ON p.id = a.provinceFk
2019-10-31 11:43:04 +00:00
WHERE t.id = ?`, [ticketId]);
},
2019-10-31 11:43:04 +00:00
fetchSales(ticketId) {
return db.find(
2019-02-07 06:47:09 +00:00
`SELECT
s.id,
s.itemFk,
s.concept,
s.quantity,
s.price,
s.price - SUM(IF(ctr.id = 6,
sc.value,
0)) netPrice,
s.discount,
i.size,
i.stems,
i.category,
it.id itemTypeId,
o.code AS origin,
i.inkFk,
s.ticketFk,
tcl.code vatType,
ibwg.ediBotanic, ppa.denomination, pp.number passportNumber,
be.isProtectedZone, c.code AS countryCode,
i.tag5, i.value5,
i.tag6, i.value6, i.tag7, i.value7
FROM vn.sale s
2019-02-07 06:47:09 +00:00
LEFT JOIN saleComponent sc ON sc.saleFk = s.id
LEFT JOIN component cr ON cr.id = sc.componentFk
LEFT JOIN componentType ctr ON ctr.id = cr.typeFk
2019-02-07 06:47:09 +00:00
LEFT JOIN item i ON i.id = s.itemFk
LEFT JOIN ticket t ON t.id = s.ticketFk
LEFT JOIN origin o ON o.id = i.originFk
LEFT JOIN country c ON c.id = o.countryFk
LEFT JOIN supplier sp ON sp.id = t.companyFk
LEFT JOIN itemType it ON it.id = i.typeFk
LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id
AND itc.countryFk = sp.countryFk
LEFT JOIN taxClass tcl ON tcl.id = itc.taxClassFk
LEFT JOIN plantpassport pp ON pp.producerFk = i.producerFk
LEFT JOIN plantpassportAuthority ppa ON ppa.id = pp.plantpassportAuthorityFk
LEFT JOIN itemBotanicalWithGenus ibwg ON ibwg.itemFk = i.id
LEFT JOIN botanicExport be ON be.restriction = 'pasaporte fitosanitario'
LEFT JOIN ediGenus eg ON eg.id = be.ediGenusFk
LEFT JOIN ediSpecie es ON es.id = be.ediSpecieFk
AND ibwg.ediBotanic LIKE CONCAT(
IFNULL(eg.latinGenusName, ''),
IF(es.latinSpeciesName > '',
CONCAT(' ', es.latinSpeciesName), ''),
'%')
2019-02-07 06:47:09 +00:00
WHERE s.ticketFk = ?
GROUP BY s.id
2019-10-31 11:43:04 +00:00
ORDER BY (it.isPackaging), s.concept, s.itemFk`, [ticketId]);
2019-02-05 06:58:05 +00:00
},
2019-10-31 11:43:04 +00:00
fetchTaxes(ticketId) {
return db.find(`CALL vn.ticketGetTaxAdd(?)`, [ticketId]).then(rows => {
return rows[0];
});
},
2019-10-31 11:43:04 +00:00
fetchPackagings(ticketId) {
return db.find(
`SELECT
tp.quantity,
i.name,
p.itemFk
FROM ticketPackaging tp
JOIN packaging p ON p.id = tp.packagingFk
JOIN item i ON i.id = p.itemFk
WHERE tp.ticketFk = ?
2019-10-31 11:43:04 +00:00
ORDER BY itemFk`, [ticketId]);
},
2019-10-31 11:43:04 +00:00
fetchServices(ticketId) {
return db.find(
`SELECT
tc.description taxDescription,
ts.description,
ts.quantity,
ts.price
FROM ticketService ts
JOIN taxClass tc ON tc.id = ts.taxClassFk
2019-10-31 11:43:04 +00:00
WHERE ts.ticketFk = ?`, [ticketId]);
},
2019-10-31 11:43:04 +00:00
fetchSignature(ticketId) {
return db.findOne(
`SELECT
d.id,
d.created
FROM ticket t
2019-05-01 17:34:08 +00:00
JOIN ticketDms dt ON dt.ticketFk = t.id
JOIN dms d ON d.id = dt.dmsFk
AND d.file LIKE '%.png'
2019-10-31 11:43:04 +00:00
WHERE t.id = ?`, [ticketId]);
},
getSubTotal() {
let subTotal = 0.00;
this.sales.forEach(sale => {
subTotal += sale.quantity * sale.price * (1 - sale.discount / 100);
});
return subTotal;
},
getTotalBase() {
let totalBase = 0.00;
this.taxes.forEach(tax => {
totalBase += parseFloat(tax.Base);
});
return totalBase;
},
getTotalTax() {
let totalTax = 0.00;
this.taxes.forEach(tax => {
totalTax += parseFloat(tax.tax);
});
return totalTax;
},
getTotal() {
return this.getTotalBase() + this.getTotalTax();
2019-02-05 06:58:05 +00:00
},
},
components: {
2019-10-31 11:43:04 +00:00
'report-header': reportHeader.build(),
'report-footer': reportFooter.build()
2019-02-05 06:58:05 +00:00
},
2019-10-31 11:43:04 +00:00
props: {
ticketId: {
type: String,
required: true
}
}
2019-02-05 06:58:05 +00:00
};