module.exports = Self => { Self.remoteMethod('getTotals', { description: 'Return totals for an invoiceIn', accessType: 'READ', accepts: { arg: 'id', type: 'number', required: true, description: 'invoiceIn id', http: {source: 'path'} }, returns: { type: 'object', root: true }, http: { path: '/:id/getTotals', verb: 'GET' } }); Self.getTotals = async(id, options) => { let tx; const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); if (!myOptions.transaction) { tx = await Self.beginTransaction({}); myOptions.transaction = tx; } try { return (await Self.rawSql(` SELECT iit.*, SUM(iidd.amount) totalDueDay FROM vn.invoiceIn ii LEFT JOIN (SELECT SUM(iit.taxableBase) totalTaxableBase, SUM(iit.taxableBase * (1 + (ti.PorcentajeIva / 100))) totalVat FROM vn.invoiceInTax iit LEFT JOIN sage.TiposIva ti ON ti.CodigoIva = iit.taxTypeSageFk WHERE iit.invoiceInFk = ?) iit ON TRUE LEFT JOIN vn.invoiceInDueDay iidd ON iidd.invoiceInFk = ii.id WHERE ii.id = ?`, [id, id]))[0]; } catch (e) { if (tx) await tx.rollback(); throw e; } }; };