82 lines
2.0 KiB
JavaScript
82 lines
2.0 KiB
JavaScript
|
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
|
||
|
|
||
|
module.exports = Self => {
|
||
|
Self.remoteMethod('editPrices', {
|
||
|
description: 'Changes the price and bonus of a delivery day',
|
||
|
accessType: 'WRITE',
|
||
|
accepts: [{
|
||
|
arg: 'id',
|
||
|
type: 'Number',
|
||
|
description: 'The zone id',
|
||
|
http: {source: 'path'}
|
||
|
},
|
||
|
{
|
||
|
arg: 'delivered',
|
||
|
type: 'Date',
|
||
|
required: true,
|
||
|
},
|
||
|
{
|
||
|
arg: 'price',
|
||
|
type: 'Number',
|
||
|
required: true,
|
||
|
},
|
||
|
{
|
||
|
arg: 'bonus',
|
||
|
type: 'Number',
|
||
|
required: true,
|
||
|
},
|
||
|
{
|
||
|
arg: 'option',
|
||
|
type: 'String',
|
||
|
required: true,
|
||
|
}],
|
||
|
returns: {
|
||
|
type: 'object',
|
||
|
root: true
|
||
|
},
|
||
|
http: {
|
||
|
path: `/:id/editPrices`,
|
||
|
verb: 'POST'
|
||
|
}
|
||
|
});
|
||
|
|
||
|
Self.editPrices = async(id, delivered, price, bonus, option) => {
|
||
|
const models = Self.app.models;
|
||
|
|
||
|
let filter = {
|
||
|
where: {
|
||
|
zoneFk: id
|
||
|
}
|
||
|
};
|
||
|
|
||
|
let where;
|
||
|
let shouldPropagate = true;
|
||
|
|
||
|
if (option == 'Only this day') {
|
||
|
shouldPropagate = false;
|
||
|
where = {delivered};
|
||
|
} else if (option == 'From this day') {
|
||
|
where = {
|
||
|
delivered: {
|
||
|
gte: delivered
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
filter = mergeFilters(filter, {where});
|
||
|
|
||
|
const days = await models.ZoneCalendar.find(filter);
|
||
|
const areAllFromSameZone = days.every(day => day.zoneFk === id);
|
||
|
|
||
|
if (!areAllFromSameZone)
|
||
|
throw new UserError('All delivery days must belong to the same zone');
|
||
|
|
||
|
if (shouldPropagate) {
|
||
|
const zone = await models.Zone.findById(id);
|
||
|
zone.updateAttributes({price, bonus});
|
||
|
}
|
||
|
|
||
|
return models.ZoneCalendar.updateAll(filter.where, {price, bonus});
|
||
|
};
|
||
|
};
|