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}); }; };