75 lines
2.5 KiB
JavaScript
75 lines
2.5 KiB
JavaScript
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,
|
|
(ac.conversionCoefficient * (ti.quantity / b.packing) * buy_getVolume(b.id))
|
|
/ (vc.trolleyM3 * 1000000) 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;
|
|
}
|
|
};
|
|
};
|