const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; module.exports = Self => { Self.remoteMethod('listSaleTracking', { description: 'Returns all ticket sale trackings', accessType: 'READ', accepts: [{ arg: 'filter', type: 'object', description: 'Filter defining where and paginated data' }], returns: { type: ['object'], root: true }, http: { path: `/listSaleTracking`, verb: 'get' } }); Self.listSaleTracking = async(filter, options) => { const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); const stmt = new ParameterizedSQL(` SELECT st.id, s.ticketFk, s.quantity, s.concept, s.itemFk, st.originalQuantity, st.created, st.workerFk, u.nickname userNickname, ste.name AS state FROM saleTracking st JOIN sale s ON s.id = st.saleFk JOIN worker w ON w.id = st.workerFk JOIN account.user u ON u.id = w.userFk JOIN state ste ON ste.id = st.stateFk`); stmt.merge(Self.makeSuffix(filter)); const trackings = await Self.rawStmt(stmt, myOptions); const salesFilter = { include: [ { relation: 'item' } ], where: {ticketFk: filter.where.ticketFk} }; const sales = await Self.app.models.Sale.find(salesFilter, myOptions); for (const tracking of trackings) { for (const sale of sales) { if (tracking.itemFk == sale.itemFk) tracking.item = sale.item(); } } return trackings; }; };