fix: refs #7404 filter an rounding issues #3196

Merged
pablone merged 1 commits from 7404-fix-stockBoughtDetailFilter into master 2024-11-13 11:24:19 +00:00
3 changed files with 26 additions and 12 deletions

View File

@ -59,7 +59,7 @@ proc: BEGIN
INSERT INTO stockBought(workerFk, bought, dated)
SELECT tb.workerFk,
ROUND(GREATEST(tb.bought - IFNULL(ts.sold, 0), 0), 1),
ROUND(GREATEST(tb.bought - IFNULL(ts.sold, 0), 0), 2),
vDated
FROM tStockBought tb
LEFT JOIN tStockSold ts ON ts.workerFk = tb.workerFk;

View File

@ -6,6 +6,9 @@ module.exports = Self => {
arg: 'workerFk',
type: 'number',
description: 'The id for a buyer',
}, {
arg: 'filter',
type: 'object',
},
{
arg: 'dated',
@ -23,7 +26,7 @@ module.exports = Self => {
}
});
Self.getStockBought = async(workerFk, dated = Date.vnNew()) => {
Self.getStockBought = async(workerFk, filter, dated = Date.vnNew()) => {
const models = Self.app.models;
const today = Date.vnNew();
dated.setHours(0, 0, 0, 0);
@ -31,7 +34,7 @@ module.exports = Self => {
await models.StockBought.rawSql(`CALL vn.stockBought_calculate(?)`, [dated]);
const filter = {
const defaultFilter = {
where: {dated},
include: [
{
@ -53,6 +56,6 @@ module.exports = Self => {
if (workerFk) filter.where.workerFk = workerFk;
return models.StockBought.find(filter);
return models.StockBought.find({...filter, ...defaultFilter});
};
};

View File

@ -1,3 +1,4 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
module.exports = Self => {
Self.remoteMethod('getStockBoughtDetail', {
description: 'Returns the detail of stock bought for a given date and a worker',
@ -12,6 +13,9 @@ module.exports = Self => {
type: 'string',
description: 'The date to filter',
required: true,
}, {
arg: 'filter',
type: 'object',
}
],
returns: {
@ -24,11 +28,10 @@ module.exports = Self => {
}
});
Self.getStockBoughtDetail = async(workerFk, dated) => {
const models = Self.app.models;
Self.getStockBoughtDetail = async(workerFk, dated, filter, options) => {
const conn = Self.dataSource.connector;
const myOptions = {};
let tx;
let result;
if (typeof options == 'object')
Object.assign(myOptions, options);
@ -39,8 +42,10 @@ module.exports = Self => {
}
try {
await models.StockBought.rawSql(`CALL vn.item_calculateStock(?)`, [dated], myOptions);
result = await Self.rawSql(
const stmts = [];
stmts.push(new ParameterizedSQL(`CALL vn.item_calculateStock(?)`, [dated]));
const query = new ParameterizedSQL(
`SELECT b.entryFk entryFk,
i.id itemFk,
i.name itemName,
@ -61,11 +66,17 @@ module.exports = Self => {
JOIN volumeConfig vc
WHERE ic.display
AND w.id = ?`,
[workerFk], myOptions
[workerFk]
);
await Self.rawSql(`DROP TEMPORARY TABLE tmp.item, tmp.buyUltimate;`, [], myOptions);
stmts.push(query.merge(conn.makeSuffix(filter)));
stmts.push(new ParameterizedSQL(`DROP TEMPORARY TABLE tmp.item, tmp.buyUltimate`));
const sql = ParameterizedSQL.join(stmts, ';');
const result = await conn.executeStmt(sql, myOptions);
if (tx) await tx.commit();
return result;
return result[1];
} catch (e) {
await tx.rollback();
throw e;