diff --git a/services/loopback/common/methods/sale/updatePrice.js b/services/loopback/common/methods/sale/updatePrice.js new file mode 100644 index 000000000..be0b5af31 --- /dev/null +++ b/services/loopback/common/methods/sale/updatePrice.js @@ -0,0 +1,64 @@ +module.exports = Self => { + Self.remoteMethod('updatePrice', { + description: 'Changes the discount of a sale', + accessType: '', + accepts: [{ + arg: 'params', + type: 'object', + required: true, + description: 'sale ID, newPrice', + http: {source: 'body'} + }], + returns: { + type: 'string', + root: true + }, + http: { + path: `/updatePrice`, + verb: 'post' + } + }); + + Self.updatePrice = async params => { + if (!params.price) params.price = 0; + let model = Self.app.models; + let thisTicketIsEditable = await model.Ticket.isEditable(params.ticketFk); + + if (!thisTicketIsEditable) + throw new Error(`The sales of this ticket can't be modified`); + + let ticket = await model.Ticket.find({ + where: { + id: params.ticketFk + }, + include: [{ + relation: 'client', + scope: { + fields: ['salesPersonFk'] + } + }], + fields: ['id', 'clientFk'] + }); + + let usesMana = await model.WorkerMana.findOne({where: {workerFk: ticket[0].client().salesPersonFk}, fields: 'amount'}); + let currentLine = await Self.app.models.Sale.findOne({where: {id: params.id}, fields: 'price'}); + let componentToUse; + + if (usesMana) + componentToUse = 37; + else + componentToUse = 34; + + let value = (params.price - currentLine.price); + + let query = `INSERT INTO vn.saleComponent(saleFk, componentFk, value) + VALUES(?, ?, ?) ON DUPLICATE KEY UPDATE value = value + ?`; + + await Self.rawSql(query, [params.id, componentToUse, value, value]); + + await Self.app.models.Sale.update({id: params.id}, {price: params.price}); + query = ` + call vn.manaSpellersRequery(?)`; + await Self.rawSql(query, [ticket[0].client().salesPersonFk]); + }; +};