2022-03-02 13:59:30 +00:00
|
|
|
module.exports = Self => {
|
|
|
|
Self.remoteMethod('createInvoiceIn', {
|
2022-03-03 13:42:12 +00:00
|
|
|
description: 'create a invoce in from one or more agency terms',
|
2022-03-02 13:59:30 +00:00
|
|
|
accessType: 'WRITE',
|
|
|
|
accepts: [{
|
|
|
|
arg: 'rows',
|
|
|
|
type: ['object'],
|
|
|
|
required: true,
|
|
|
|
description: `the rows from which the invoice in will be created`,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
arg: 'dms',
|
|
|
|
type: ['object'],
|
|
|
|
required: true,
|
2022-03-03 13:42:12 +00:00
|
|
|
description: 'the dms file'
|
2022-03-02 13:59:30 +00:00
|
|
|
}],
|
|
|
|
returns: {
|
|
|
|
},
|
|
|
|
http: {
|
|
|
|
path: `/createInvoiceIn`,
|
|
|
|
verb: 'POST'
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
Self.createInvoiceIn = async(rows, dms, options) => {
|
|
|
|
const models = Self.app.models;
|
|
|
|
const myOptions = {};
|
|
|
|
|
|
|
|
if (typeof options == 'object')
|
|
|
|
Object.assign(myOptions, options);
|
|
|
|
|
|
|
|
const [firstRow] = rows;
|
|
|
|
const [firstDms] = dms;
|
|
|
|
|
|
|
|
const [reference] = await Self.rawSql(`SELECT reference FROM vn.dms WHERE id = ?`, [firstDms.id]);
|
|
|
|
|
|
|
|
const newInvoiceIn = await models.InvoiceIn.create({
|
|
|
|
supplierFk: firstRow.supplierFk,
|
|
|
|
supplierRef: reference.value,
|
|
|
|
issued: firstRow.created,
|
|
|
|
booked: firstRow.created,
|
|
|
|
operated: firstRow.created,
|
|
|
|
bookEntried: firstRow.created,
|
|
|
|
gestdoc_id: firstDms.id
|
|
|
|
});
|
|
|
|
|
|
|
|
const [expence] = await Self.rawSql(`SELECT expenceFk value FROM vn.agencyTermConfig`);
|
|
|
|
|
|
|
|
const [taxTypeSage] = await Self.rawSql(`
|
|
|
|
SELECT IFNULL(s.taxTypeSageFk, CodigoIva) value
|
|
|
|
FROM vn.supplier s
|
|
|
|
JOIN sage.TiposIva ti ON TRUE
|
|
|
|
JOIN vn.agencyTermConfig atg
|
|
|
|
WHERE s.id = ?
|
|
|
|
AND ti.CuentaIvaSoportado = atg.vatAccountSupported
|
|
|
|
AND ti.PorcentajeIva = atg.vatPercentage
|
|
|
|
`, [firstRow.supplierFk]);
|
|
|
|
|
|
|
|
const [transactionTypeSage] = await Self.rawSql(`
|
|
|
|
SELECT IFNULL(s.transactionTypeSageFk, tt.CodigoTransaccion) value
|
|
|
|
FROM vn.supplier s
|
|
|
|
JOIN sage.TiposTransacciones tt ON TRUE
|
|
|
|
JOIN vn.agencyTermConfig atg
|
|
|
|
WHERE s.id = ?
|
|
|
|
AND tt.Transaccion = atg.transaction
|
|
|
|
`, [firstRow.supplierFk]);
|
|
|
|
|
|
|
|
await models.InvoiceInTax.create({
|
|
|
|
invoiceInFk: newInvoiceIn.id,
|
|
|
|
taxableBase: firstRow.totalPrice,
|
|
|
|
expenseFk: expence.value,
|
|
|
|
taxTypeSageFk: taxTypeSage.value,
|
|
|
|
transactionTypeSageFk: transactionTypeSage.value
|
|
|
|
});
|
|
|
|
|
|
|
|
await Self.rawSql(`CALL invoiceInDueDay_calculate(?)`, [newInvoiceIn.id]);
|
|
|
|
|
|
|
|
for (let agencyTerm of rows) {
|
|
|
|
const route = await models.Route.findById(agencyTerm.routeFk);
|
|
|
|
await Self.rawSql(`
|
|
|
|
UPDATE vn.route SET invoiceInFk = ? WHERE id = ?
|
|
|
|
`, [newInvoiceIn.id, route.id]);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|