65 lines
2.4 KiB
JavaScript
65 lines
2.4 KiB
JavaScript
module.exports = Self => {
|
|
Self.remoteMethod('getExpeditionSummary', {
|
|
description: 'Get summary of expeditions for a given route',
|
|
accepts: [
|
|
{
|
|
arg: 'routeFk',
|
|
type: 'number',
|
|
required: true,
|
|
description: 'Foreign key for Route'
|
|
}
|
|
],
|
|
returns: {
|
|
type: 'object',
|
|
root: true
|
|
},
|
|
http: {
|
|
path: '/getExpeditionSummary',
|
|
verb: 'get'
|
|
}
|
|
});
|
|
|
|
Self.getExpeditionSummary = async(routeFk, options) => {
|
|
const myOptions = {};
|
|
|
|
if (typeof options == 'object')
|
|
Object.assign(myOptions, options);
|
|
|
|
const query = `
|
|
SELECT routeFk,
|
|
addressFk,
|
|
SUM(total) total,
|
|
SUM(delivery) delivery,
|
|
SUM(lost) lost,
|
|
SUM(delivered) delivered,
|
|
GROUP_CONCAT(totalPacking ORDER BY total DESC SEPARATOR ' ') itemPackingType
|
|
FROM (
|
|
SELECT r.id AS routeFk,
|
|
t.addressFk,
|
|
CONCAT (IFNULL(e.itemPackingTypeFk,'-'), '', COUNT(*)) totalPacking,
|
|
COUNT(*) total,
|
|
SUM(est.code = 'ON DELIVERY') delivery,
|
|
SUM(est.code = 'LOST') lost,
|
|
SUM(est.code = 'DELIVERED') delivered,
|
|
t.priority
|
|
FROM vn.ticket t
|
|
JOIN vn.route r ON r.id = t.routeFk
|
|
JOIN vn.expedition e ON e.ticketFk = t.id
|
|
LEFT JOIN vn.expeditionStateType est ON est.id = e.stateTypeFk
|
|
JOIN vn.agencyMode am ON am.id = r.agencyModeFk
|
|
JOIN vn.agency ag ON ag.id = am.agencyFk
|
|
LEFT JOIN vn.userConfig uc ON uc.userFk = account.myUser_getId()
|
|
WHERE (r.created = util.VN_CURDATE() OR r.created = util.yesterday())
|
|
AND t.routeFk = ?
|
|
GROUP BY t.addressFk, e.itemPackingTypeFk
|
|
) sub
|
|
GROUP BY addressFk
|
|
ORDER BY priority DESC
|
|
`;
|
|
|
|
const results = await Self.rawSql(query, [routeFk], myOptions);
|
|
return results;
|
|
};
|
|
};
|
|
|