salix/modules/item/back/methods/item/getWasteByWorker.js

100 lines
3.3 KiB
JavaScript
Raw Normal View History

2020-01-16 12:39:32 +00:00
module.exports = Self => {
2021-03-30 08:28:44 +00:00
Self.remoteMethod('getWasteByWorker', {
2020-10-14 05:18:39 +00:00
description: 'Returns the details of losses by worker',
2020-01-16 12:39:32 +00:00
accessType: 'READ',
accepts: [],
returns: {
2021-07-12 10:54:59 +00:00
type: ['object'],
2020-01-16 12:39:32 +00:00
root: true
},
http: {
2021-03-30 08:28:44 +00:00
path: `/getWasteByWorker`,
2020-01-16 12:39:32 +00:00
verb: 'GET'
}
});
2021-07-12 10:54:59 +00:00
Self.getWasteByWorker = async options => {
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
2023-01-16 14:18:24 +00:00
const date = Date.vnNew();
2022-06-09 11:33:01 +00:00
date.setHours(0, 0, 0, 0);
2021-03-30 08:28:44 +00:00
const wastes = await Self.rawSql(`
2024-05-10 09:05:20 +00:00
SELECT *, 100 * dwindle / total percentage
FROM (
SELECT u.name buyer,
it.name family,
w.itemFk,
SUM(w.saleTotal) total,
2024-09-16 10:32:52 +00:00
SUM(
w.saleExternalWaste +
w.saleFaultWaste +
w.saleContainerWaste +
w.saleBreakWaste +
w.saleOtherWaste
) dwindle
2024-05-10 09:05:20 +00:00
FROM bs.waste w
JOIN account.user u ON u.id = w.buyerFk
JOIN vn.itemType it ON it.id = w.itemTypeFk
WHERE year = YEAR(TIMESTAMPADD(WEEK, -1, ?))
AND week = WEEK(TIMESTAMPADD(WEEK, -1, ?), 1)
GROUP BY buyerFk, itemTypeFk
) sub
ORDER BY percentage DESC
`, [date, date], myOptions);
2020-01-16 12:39:32 +00:00
const wastesTotal = await Self.rawSql(`
2024-05-10 09:05:20 +00:00
SELECT *, 100 * dwindle / total percentage
FROM (
2024-05-10 09:05:20 +00:00
SELECT u.name buyer,
SUM(w.saleTotal) total,
2024-09-16 10:32:52 +00:00
SUM(
w.saleExternalWaste +
w.saleFaultWaste +
w.saleContainerWaste +
w.saleBreakWaste +
w.saleOtherWaste
) dwindle
2024-05-10 09:05:20 +00:00
FROM bs.waste w
JOIN account.user u ON u.id = w.buyerFk
WHERE w.year = YEAR(TIMESTAMPADD(WEEK, -1, ?))
AND w.week = WEEK(TIMESTAMPADD(WEEK, -1, ?), 1)
GROUP BY w.buyerFk
) sub
2024-05-10 09:05:20 +00:00
ORDER BY percentage DESC
`, [date, date], myOptions);
2020-01-16 12:39:32 +00:00
const details = [];
for (let waste of wastes) {
const buyerName = waste.buyer;
let buyerDetail = details.find(waste => {
return waste.buyer == buyerName;
});
if (!buyerDetail) {
buyerDetail = {
buyer: buyerName,
lines: []
};
details.push(buyerDetail);
}
buyerDetail.lines.push(waste);
}
for (let waste of details) {
let buyerTotal = wastesTotal.find(totals => {
return waste.buyer == totals.buyer;
});
Object.assign(waste, buyerTotal);
}
2020-01-16 12:39:32 +00:00
return details;
};
};