module.exports = Self => { Self.remoteMethod('getStockBoughtDetail', { description: 'Returns the detail of stock bought for a given date and a worker', accessType: 'READ', accepts: [{ arg: 'workerFk', type: 'number', description: 'The worker to filter', required: true, }, { arg: 'dated', type: 'string', description: 'The date to filter', required: true, } ], returns: { type: ['object'], root: true }, http: { path: `/getStockBoughtDetail`, verb: 'GET' } }); Self.getStockBoughtDetail = async(workerFk, dated) => { const models = Self.app.models; const myOptions = {}; let tx; let result; if (typeof options == 'object') Object.assign(myOptions, options); if (!myOptions.transaction) { tx = await Self.beginTransaction({}); myOptions.transaction = tx; } try { await models.StockBought.rawSql(`CALL vn.item_calculateStock(?)`, [dated], myOptions); result = await Self.rawSql( `SELECT b.entryFk entryFk, i.id itemFk, i.name itemName, ti.quantity, ROUND((ac.conversionCoefficient * (ti.quantity / b.packing) * buy_getVolume(b.id)) / (vc.trolleyM3 * 1000000),1) volume, b.packagingFk packagingFk, b.packing FROM tmp.item ti JOIN item i ON i.id = ti.itemFk JOIN itemType it ON i.typeFk = it.id JOIN itemCategory ic ON ic.id = it.categoryFk JOIN worker w ON w.id = it.workerFk JOIN auctionConfig ac JOIN tmp.buyUltimate bu ON bu.itemFk = i.id AND bu.warehouseFk = ac.warehouseFk JOIN buy b ON b.id = bu.buyFk JOIN volumeConfig vc WHERE ic.display AND w.id = ?`, [workerFk], myOptions ); await Self.rawSql(`DROP TEMPORARY TABLE tmp.item, tmp.buyUltimate;`, [], myOptions); if (tx) await tx.commit(); return result; } catch (e) { await tx.rollback(); throw e; } }; };