78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
|
|
|
|
module.exports = Self => {
|
|
Self.remoteMethodCtx('includingExpired', {
|
|
description: 'Returns a list of zones for the given warehouse and user',
|
|
accepts: [{
|
|
arg: 'filter',
|
|
type: 'Object',
|
|
description: `Filter defining where, order, offset, and limit - must be a JSON-encoded string`
|
|
}],
|
|
returns: {
|
|
type: ['object'],
|
|
root: true
|
|
},
|
|
http: {
|
|
path: `/includingExpired`,
|
|
verb: 'GET'
|
|
}
|
|
});
|
|
|
|
Self.includingExpired = async(ctx, filter, options) => {
|
|
const myOptions = {};
|
|
|
|
if (typeof options == 'object')
|
|
Object.assign(myOptions, options);
|
|
|
|
const conn = Self.dataSource.connector;
|
|
const models = Self.app.models;
|
|
const where = filter.where;
|
|
|
|
const stmts = [];
|
|
let stmt;
|
|
|
|
const filterByAvailability = where.shipped && where.addressFk
|
|
&& where.agencyModeFk && where.warehouseFk;
|
|
|
|
if (filterByAvailability) {
|
|
const canSeeExpired = await models.ACL.checkAccessAcl(ctx, 'Agency', 'seeExpired');
|
|
let showExpired = false;
|
|
if (canSeeExpired.length) showExpired = true;
|
|
|
|
stmt = new ParameterizedSQL(`CALL vn.zone_getLanded(?, ?, ?, ?, ?)`, [
|
|
where.shipped,
|
|
where.addressFk,
|
|
where.agencyModeFk,
|
|
where.warehouseFk,
|
|
showExpired
|
|
],
|
|
myOptions);
|
|
|
|
stmts.push(stmt);
|
|
}
|
|
|
|
delete where.shipped;
|
|
delete where.addressFk;
|
|
delete where.warehouseFk;
|
|
|
|
stmt = new ParameterizedSQL(
|
|
`SELECT id, name, agencyModeFk
|
|
FROM vn.zone z`, null, myOptions);
|
|
|
|
if (filterByAvailability)
|
|
stmt.merge(`JOIN tmp.zoneGetLanded zgl ON zgl.zoneFk = z.id`);
|
|
|
|
stmt.merge(conn.makeWhere(filter.where));
|
|
|
|
let index;
|
|
if (stmts.length)
|
|
index = stmts.push(stmt) - 1;
|
|
else stmts.push(stmt);
|
|
|
|
const sql = ParameterizedSQL.join(stmts, ';');
|
|
const result = await conn.executeStmt(sql, myOptions);
|
|
|
|
return index ? result[index] : result;
|
|
};
|
|
};
|