From da9a783843b0b33800d4dedec53dca617fff32e6 Mon Sep 17 00:00:00 2001 From: gerard Date: Tue, 7 Aug 2018 15:48:55 +0200 Subject: [PATCH] Tarea #438 order.line --- .../order/common/methods/order-row/removes.js | 36 +++++++++++++++++++ .../methods/order-row/specs/removes.spec.js | 25 +++++++++++++ .../order/common/methods/order/isEditable.js | 30 ++++++++++++++++ .../methods/order/specs/isEditable.spec.js | 26 ++++++++++++++ services/order/common/models/order-row.js | 4 +++ services/order/common/models/order-row.json | 5 +++ services/order/common/models/order.js | 2 ++ 7 files changed, 128 insertions(+) create mode 100644 services/order/common/methods/order-row/removes.js create mode 100644 services/order/common/methods/order-row/specs/removes.spec.js create mode 100644 services/order/common/methods/order/isEditable.js create mode 100644 services/order/common/methods/order/specs/isEditable.spec.js create mode 100644 services/order/common/models/order-row.js diff --git a/services/order/common/methods/order-row/removes.js b/services/order/common/methods/order-row/removes.js new file mode 100644 index 000000000..b660d4be3 --- /dev/null +++ b/services/order/common/methods/order-row/removes.js @@ -0,0 +1,36 @@ +const UserError = require('vn-loopback/common/helpers').UserError; + +module.exports = Self => { + Self.remoteMethod('removes', { + description: 'Delete an Order Row', + accessType: '', + accepts: [{ + arg: 'params', + type: 'object', + required: true, + description: '[Row IDs], actualOrderId', + http: {source: 'body'} + }], + returns: { + type: 'string', + root: true + }, + http: { + path: `/removes`, + verb: 'post' + } + }); + + Self.removes = async params => { + if (!params.rows || !params.rows.length) + throw new Error('There is nothing delete'); + + await Self.app.models.Order.isEditable(params.actualOrderId); + + let promises = []; + for (let i = 0; i < params.rows.length; i++) { + promises.push(Self.app.models.OrderRow.destroyById(params.rows[i])); + } + return await Promise.all(promises); + }; +}; diff --git a/services/order/common/methods/order-row/specs/removes.spec.js b/services/order/common/methods/order-row/specs/removes.spec.js new file mode 100644 index 000000000..17d760eb3 --- /dev/null +++ b/services/order/common/methods/order-row/specs/removes.spec.js @@ -0,0 +1,25 @@ +const app = require(`../../../../server/server`); + +describe('order removes()', () => { + it('should throw an error if rows property is empty', async() => { + let error; + try { + await app.models.OrderRow.removes({rows: []}); + } catch (e) { + error = e; + } + + expect(error).toEqual(new Error('There is nothing delete')); + }); + + it('should throw an error if the row selected is not editable', async() => { + let error; + try { + await app.models.OrderRow.removes({rows: [2]}); + } catch (e) { + error = e; + } + + expect(error).toEqual(new Error('This order is not editable')); + }); +}); diff --git a/services/order/common/methods/order/isEditable.js b/services/order/common/methods/order/isEditable.js new file mode 100644 index 000000000..503d24418 --- /dev/null +++ b/services/order/common/methods/order/isEditable.js @@ -0,0 +1,30 @@ +const UserError = require('vn-loopback/common/helpers').UserError; + +module.exports = Self => { + Self.remoteMethod('isEditable', { + description: 'Check if an order is editable', + accessType: 'READ', + accepts: [{ + arg: 'orderId', + type: 'number', + required: true, + description: 'orderId', + http: {source: 'path'} + }], + returns: { + type: 'boolean', + root: true + }, + http: { + path: `/:orderId/isEditable`, + verb: 'get' + } + }); + + Self.isEditable = async orderId => { + let exists = await Self.app.models.Order.findOne({where: {id: orderId}, fields: ['isConfirmed']}); + + if (!exists || exists.isConfirmed === 1) + throw new UserError('This order is not editable'); + }; +}; diff --git a/services/order/common/methods/order/specs/isEditable.spec.js b/services/order/common/methods/order/specs/isEditable.spec.js new file mode 100644 index 000000000..515ea29ed --- /dev/null +++ b/services/order/common/methods/order/specs/isEditable.spec.js @@ -0,0 +1,26 @@ +const app = require(`../../../../server/server`); +const UserError = require('vn-loopback/common/helpers').UserError; + +describe('order isEditable()', () => { + it('should throw an error if the order given is not editable', async() => { + let error; + try { + await app.models.Order.isEditable(2); + } catch (e) { + error = e; + } + + expect(error).toEqual(new UserError('This order is not editable')); + }); + + it('should throw an error if the order given does not exists', async() => { + let error; + try { + await app.models.Order.isEditable(99999); + } catch (e) { + error = e; + } + + expect(error).toEqual(new UserError('This order is not editable')); + }); +}); diff --git a/services/order/common/models/order-row.js b/services/order/common/models/order-row.js new file mode 100644 index 000000000..0c629669f --- /dev/null +++ b/services/order/common/models/order-row.js @@ -0,0 +1,4 @@ +module.exports = Self => { + //require('../methods/order-row/new')(Self); + require('../methods/order-row/removes')(Self); +}; diff --git a/services/order/common/models/order-row.json b/services/order/common/models/order-row.json index e28787a31..77c1d654d 100644 --- a/services/order/common/models/order-row.json +++ b/services/order/common/models/order-row.json @@ -50,6 +50,11 @@ "type": "belongsTo", "model": "Order", "foreignKey": "orderFk" + }, + "warehouse": { + "type": "belongsTo", + "model": "Warehouse", + "foreignKey": "warehouseFk" } } } diff --git a/services/order/common/models/order.js b/services/order/common/models/order.js index 00b0326d5..4ab2891d9 100644 --- a/services/order/common/models/order.js +++ b/services/order/common/models/order.js @@ -2,6 +2,8 @@ module.exports = Self => { require('../methods/order/new')(Self); require('../methods/order/getTotalVolume')(Self); require('../methods/order/getVolumes')(Self); + //require('../methods/order/getTaxes')(Self); + require('../methods/order/isEditable')(Self); require('../methods/order/getTotal')(Self); require('../methods/order/itemFilter')(Self); };