From 77d0dcae0de7cc7ad26c88824a446cb5cc315ba3 Mon Sep 17 00:00:00 2001 From: alexm Date: Wed, 2 Feb 2022 08:28:07 +0100 Subject: [PATCH 1/5] feat(setQuantitySale): back route and test --- back/methods/collection/setQuantitySale.js | 33 +++++++ .../collection/spec/setQuantitySale.spec.js | 15 ++++ .../spec/updateCollectionSale.spec.js | 62 ------------- .../collection/updateCollectionSale.js | 90 ------------------- back/models/collection.js | 2 +- 5 files changed, 49 insertions(+), 153 deletions(-) create mode 100644 back/methods/collection/setQuantitySale.js create mode 100644 back/methods/collection/spec/setQuantitySale.spec.js delete mode 100644 back/methods/collection/spec/updateCollectionSale.spec.js delete mode 100644 back/methods/collection/updateCollectionSale.js diff --git a/back/methods/collection/setQuantitySale.js b/back/methods/collection/setQuantitySale.js new file mode 100644 index 000000000..f9448f46a --- /dev/null +++ b/back/methods/collection/setQuantitySale.js @@ -0,0 +1,33 @@ +module.exports = Self => { + Self.remoteMethodCtx('setQuantitySale', { + description: 'Update sale quantity', + accessType: 'WRITE', + accepts: [{ + arg: 'sale', + type: 'Number', + required: true, + description: 'The sale id' + }, + { + arg: 'quantity', + type: 'Number', + required: true, + description: 'The quantity to picked' + }], + returns: { + type: 'Object', + root: true + }, + http: { + path: `/setQuantitySale`, + verb: 'POST' + } + }); + + Self.setQuantitySale = async(sale, quantity) => { + query = `CALL vn.sale_setQuantity(?,?)`; + const result = await Self.rawSql(query, [sale, quantity]); + + return result; + }; +}; diff --git a/back/methods/collection/spec/setQuantitySale.spec.js b/back/methods/collection/spec/setQuantitySale.spec.js new file mode 100644 index 000000000..31c674b18 --- /dev/null +++ b/back/methods/collection/spec/setQuantitySale.spec.js @@ -0,0 +1,15 @@ +const models = require('vn-loopback/server/server').models; + +fdescribe('setQuantitySale()', () => { + it('should change quantity sale', async() => { + const saleId = 1; + const newQuantity = 1; + const originalSale = await models.Sale.findById(saleId); + + await models.Collection.setQuantitySale(saleId, newQuantity); + const updateSale = await models.Sale.findById(saleId); + + expect(updateSale.quantity).toBeLessThan(originalSale.quantity); + expect(updateSale.quantity).toEqual(newQuantity); + }); +}); diff --git a/back/methods/collection/spec/updateCollectionSale.spec.js b/back/methods/collection/spec/updateCollectionSale.spec.js deleted file mode 100644 index 951115e54..000000000 --- a/back/methods/collection/spec/updateCollectionSale.spec.js +++ /dev/null @@ -1,62 +0,0 @@ -const app = require('vn-loopback/server/server'); - -describe('updateCollectionSale()', () => { - it('should return a new collection', async() => { - const sectorOneWarehouseID = 1; - let ctx = {req: {accessToken: {userId: 1106}}}; - ctx.args = { - sale: 1, - originalQuantity: 5, - quantity: 5, - quantityPicked: 5, - ticketFk: 1, - stateFk: 4, - isNicho: false, - shelvingFk: 'UXN', - itemFk: 1, - sectorFk: 1 - }; - let originalSaleTracking = await app.models.SaleTracking.findOne({ - where: { - saleFk: ctx.args.sale, - stateFk: ctx.args.stateFk - } - }); - let itemPlacement = await app.models.ItemPlacement.findOne({ - where: { - itemFk: ctx.args.itemFk, - warehouseFk: sectorOneWarehouseID - } - }); - const originalSale = await app.models.Sale.findById(ctx.args.sale); - const originalItemShelving = await app.models.ItemShelving.findOne({where: {shelvingFk: ctx.args.shelvingFk, itemFk: ctx.args.itemFk}}); - const originalTicketLastState = await app.models.TicketLastState.findById(ctx.args.ticketFk); - - let response = await app.models.Collection.updateCollectionSale(ctx); - - expect(response.length).toBeGreaterThan(0); - expect(response[0][0].id).toEqual(1); - expect(response[0][0].quantity).toEqual(5); - - // restores - if (originalSaleTracking) - await originalSaleTracking.save(); - else { - originalSaleTracking = await app.models.SaleTracking.findOne({ - where: { - saleFk: ctx.args.sale, - stateFk: ctx.args.stateFk - } - }); - await originalSaleTracking.destroy(); - } - await originalSale.save(); - const itemShelvingsToDestroy = await app.models.ItemShelving.find({where: {shelvingFk: ctx.args.shelvingFk, itemFk: ctx.args.itemFk}}); - for (itemShelving of itemShelvingsToDestroy) - await itemShelving.destroy(); - - await originalItemShelving.save(); - await originalTicketLastState.save(); - await itemPlacement.save(); - }); -}); diff --git a/back/methods/collection/updateCollectionSale.js b/back/methods/collection/updateCollectionSale.js deleted file mode 100644 index 608250d18..000000000 --- a/back/methods/collection/updateCollectionSale.js +++ /dev/null @@ -1,90 +0,0 @@ -module.exports = Self => { - Self.remoteMethodCtx('updateCollectionSale', { - description: 'Update sale of a collection', - accessType: 'WRITE', - accepts: [{ - arg: 'sale', - type: 'Number', - required: true, - description: 'The sale id' - }, { - arg: 'originalQuantity', - type: 'Number', - required: true, - description: 'The quantity to sale' - }, - { - arg: 'quantity', - type: 'Number', - required: true, - description: 'The quantity to picked' - }, - { - arg: 'quantityPicked', - type: 'Number', - required: true, - description: 'The quantity to picked' - }, { - arg: 'ticketFk', - type: 'Number', - required: true, - description: 'The ticket id' - }, { - arg: 'stateFk', - type: 'Number', - required: true, - description: 'The state id' - }, { - arg: 'isNicho', - type: 'Boolean', - required: true, - description: 'Determine if sale is picked from nicho or not' - }, { - arg: 'shelvingFk', - type: 'String', - required: false, - description: 'The shelving id' - }, { - arg: 'itemFk', - type: 'Number', - required: true, - description: 'The item id' - }, { - arg: 'sectorFk', - type: 'Number', - required: true, - description: 'The sector id' - }], - returns: { - type: 'Object', - root: true - }, - http: { - path: `/updateCollectionSale`, - verb: 'POST' - } - }); - - Self.updateCollectionSale = async ctx => { - const userId = ctx.req.accessToken.userId; - const args = ctx.args; - - if (args.originalQuantity == args.quantity) { - query = `CALL vn.collection_updateSale(?,?,?,?,?)`; - await Self.rawSql(query, [args.sale, args.originalQuantity, userId, args.stateFk, args.ticketFk]); - } - - if (!args.isNicho) { - query = `CALL vn.collection_faults(?,?,?)`; - await Self.rawSql(query, [args.shelvingFk, args.quantityPicked, args.itemFk]); - } else { - query = `CALL vn.sector_getWarehouse(?)`; - const [result] = await Self.rawSql(query, [args.sectorFk]); - - query = `CALL vn.itemPlacementSave(?,?,?)`; - await Self.rawSql(query, [args.shelvingFk, args.quantityPicked, result[0]['warehouseFk']]); - } - query = `CALL vn.sale_updateOriginalQuantity(?,?)`; - return await Self.rawSql(query, [args.sale, args.quantity]); - }; -}; diff --git a/back/models/collection.js b/back/models/collection.js index d3670d56b..7ac46f263 100644 --- a/back/models/collection.js +++ b/back/models/collection.js @@ -2,6 +2,6 @@ module.exports = Self => { require('../methods/collection/getCollection')(Self); require('../methods/collection/newCollection')(Self); require('../methods/collection/getSectors')(Self); - require('../methods/collection/updateCollectionSale')(Self); + require('../methods/collection/setQuantitySale')(Self); require('../methods/collection/collectionFaults')(Self); }; From 386155f2424931ac8b3950d016e3c7735562ea01 Mon Sep 17 00:00:00 2001 From: alexm Date: Wed, 2 Feb 2022 14:55:21 +0100 Subject: [PATCH 2/5] feat(setQuantitySale): transaction --- back/methods/collection/setQuantitySale.js | 26 ++++++++++++++++--- .../collection/spec/setQuantitySale.spec.js | 26 +++++++++++++------ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/back/methods/collection/setQuantitySale.js b/back/methods/collection/setQuantitySale.js index f9448f46a..9ddec1c18 100644 --- a/back/methods/collection/setQuantitySale.js +++ b/back/methods/collection/setQuantitySale.js @@ -24,10 +24,28 @@ module.exports = Self => { } }); - Self.setQuantitySale = async(sale, quantity) => { - query = `CALL vn.sale_setQuantity(?,?)`; - const result = await Self.rawSql(query, [sale, quantity]); + Self.setQuantitySale = async(sale, quantity, options) => { + const myOptions = {}; + let tx; - return result; + if (typeof options == 'object') + Object.assign(myOptions, options); + + if (!myOptions.transaction) { + tx = await Self.beginTransaction({}); + myOptions.transaction = tx; + } + + try { + query = `CALL vn.sale_setQuantity(?,?)`; + const result = await Self.rawSql(query, [sale, quantity]); + + if (tx) await tx.commit(); + + return result; + } catch (e) { + if (tx) await tx.rollback(); + throw e; + } }; }; diff --git a/back/methods/collection/spec/setQuantitySale.spec.js b/back/methods/collection/spec/setQuantitySale.spec.js index 31c674b18..09fd30e30 100644 --- a/back/methods/collection/spec/setQuantitySale.spec.js +++ b/back/methods/collection/spec/setQuantitySale.spec.js @@ -1,15 +1,25 @@ const models = require('vn-loopback/server/server').models; -fdescribe('setQuantitySale()', () => { +describe('setQuantitySale()', () => { it('should change quantity sale', async() => { - const saleId = 1; - const newQuantity = 1; - const originalSale = await models.Sale.findById(saleId); + const tx = await models.Sale.beginTransaction({}); - await models.Collection.setQuantitySale(saleId, newQuantity); - const updateSale = await models.Sale.findById(saleId); + try { + const options = {transaction: tx}; + const saleId = 30; + const newQuantity = 5; + const originalSale = await models.Sale.findById(saleId); - expect(updateSale.quantity).toBeLessThan(originalSale.quantity); - expect(updateSale.quantity).toEqual(newQuantity); + await models.Collection.setQuantitySale(saleId, newQuantity, options); + const updateSale = await models.Sale.findById(saleId); + + expect(updateSale.quantity).toBeLessThan(originalSale.quantity); + expect(updateSale.quantity).toEqual(newQuantity); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } }); }); From dc78cd2dc524b7e870d90182f32fb17f96b8a520 Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 7 Feb 2022 08:05:05 +0100 Subject: [PATCH 3/5] feat(collection): setQuantitySale --- back/methods/collection/setQuantitySale.js | 18 +++++++++++------- .../collection/spec/setQuantitySale.spec.js | 19 +++++++++++++------ .../10420-valentines/00-aclCollection.sql | 3 +++ 3 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 db/changes/10420-valentines/00-aclCollection.sql diff --git a/back/methods/collection/setQuantitySale.js b/back/methods/collection/setQuantitySale.js index 9ddec1c18..a364c5a74 100644 --- a/back/methods/collection/setQuantitySale.js +++ b/back/methods/collection/setQuantitySale.js @@ -3,19 +3,19 @@ module.exports = Self => { description: 'Update sale quantity', accessType: 'WRITE', accepts: [{ - arg: 'sale', - type: 'Number', + arg: 'saleId', + type: 'number', required: true, description: 'The sale id' }, { arg: 'quantity', - type: 'Number', + type: 'number', required: true, description: 'The quantity to picked' }], returns: { - type: 'Object', + type: 'object', root: true }, http: { @@ -24,8 +24,11 @@ module.exports = Self => { } }); - Self.setQuantitySale = async(sale, quantity, options) => { + Self.setQuantitySale = async(ctx, options) => { + const args = ctx.args; + const models = Self.app.models; const myOptions = {}; + let tx; if (typeof options == 'object') @@ -37,8 +40,9 @@ module.exports = Self => { } try { - query = `CALL vn.sale_setQuantity(?,?)`; - const result = await Self.rawSql(query, [sale, quantity]); + const sale = await models.Sale.findById(args.saleId, null, myOptions); + + const result = await sale.updateAttribute('quantity', args.quantity, myOptions); if (tx) await tx.commit(); diff --git a/back/methods/collection/spec/setQuantitySale.spec.js b/back/methods/collection/spec/setQuantitySale.spec.js index 09fd30e30..2962a4c1d 100644 --- a/back/methods/collection/spec/setQuantitySale.spec.js +++ b/back/methods/collection/spec/setQuantitySale.spec.js @@ -1,17 +1,24 @@ const models = require('vn-loopback/server/server').models; -describe('setQuantitySale()', () => { +fdescribe('setQuantitySale()', () => { it('should change quantity sale', async() => { const tx = await models.Sale.beginTransaction({}); + const saleId = 30; + const newQuantity = 10; try { const options = {transaction: tx}; - const saleId = 30; - const newQuantity = 5; - const originalSale = await models.Sale.findById(saleId); + const ctx = { + args: { + saleId: saleId, + quantity: newQuantity + } + }; - await models.Collection.setQuantitySale(saleId, newQuantity, options); - const updateSale = await models.Sale.findById(saleId); + const originalSale = await models.Sale.findById(30, null, options); + + await models.Collection.setQuantitySale(ctx, options); + const updateSale = await models.Sale.findById(30, null, options); expect(updateSale.quantity).toBeLessThan(originalSale.quantity); expect(updateSale.quantity).toEqual(newQuantity); diff --git a/db/changes/10420-valentines/00-aclCollection.sql b/db/changes/10420-valentines/00-aclCollection.sql new file mode 100644 index 000000000..5c2f1856e --- /dev/null +++ b/db/changes/10420-valentines/00-aclCollection.sql @@ -0,0 +1,3 @@ +INSERT INTO salix.ACL +(model, property, accessType, permission, principalType, principalId) +VALUES('Collection', 'setQuantitySale', '*', 'ALLOW', 'ROLE', 'employee'); From e08a3d31bc1bdffdb2d7df2ca20178a49e81f60e Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 7 Feb 2022 08:23:19 +0100 Subject: [PATCH 4/5] remove f of focus --- back/methods/collection/spec/setQuantitySale.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/methods/collection/spec/setQuantitySale.spec.js b/back/methods/collection/spec/setQuantitySale.spec.js index 2962a4c1d..19c317ae3 100644 --- a/back/methods/collection/spec/setQuantitySale.spec.js +++ b/back/methods/collection/spec/setQuantitySale.spec.js @@ -1,6 +1,6 @@ const models = require('vn-loopback/server/server').models; -fdescribe('setQuantitySale()', () => { +describe('setQuantitySale()', () => { it('should change quantity sale', async() => { const tx = await models.Sale.beginTransaction({}); const saleId = 30; From e09e84c36b5f53e7606b602b7eba70bd2fbe01c4 Mon Sep 17 00:00:00 2001 From: alexm Date: Tue, 8 Feb 2022 12:41:55 +0100 Subject: [PATCH 5/5] refactor(setSaleQuantity): rename, remove transaction --- back/methods/collection/setQuantitySale.js | 55 ------------------- back/methods/collection/setSaleQuantity.js | 34 ++++++++++++ .../collection/spec/setQuantitySale.spec.js | 32 ----------- .../collection/spec/setSaleQuantity.spec.js | 23 ++++++++ back/models/collection.js | 2 +- .../10420-valentines/00-aclCollection.sql | 2 +- loopback/locale/en.json | 3 +- 7 files changed, 61 insertions(+), 90 deletions(-) delete mode 100644 back/methods/collection/setQuantitySale.js create mode 100644 back/methods/collection/setSaleQuantity.js delete mode 100644 back/methods/collection/spec/setQuantitySale.spec.js create mode 100644 back/methods/collection/spec/setSaleQuantity.spec.js diff --git a/back/methods/collection/setQuantitySale.js b/back/methods/collection/setQuantitySale.js deleted file mode 100644 index a364c5a74..000000000 --- a/back/methods/collection/setQuantitySale.js +++ /dev/null @@ -1,55 +0,0 @@ -module.exports = Self => { - Self.remoteMethodCtx('setQuantitySale', { - description: 'Update sale quantity', - accessType: 'WRITE', - accepts: [{ - arg: 'saleId', - type: 'number', - required: true, - description: 'The sale id' - }, - { - arg: 'quantity', - type: 'number', - required: true, - description: 'The quantity to picked' - }], - returns: { - type: 'object', - root: true - }, - http: { - path: `/setQuantitySale`, - verb: 'POST' - } - }); - - Self.setQuantitySale = async(ctx, options) => { - const args = ctx.args; - const models = Self.app.models; - const myOptions = {}; - - let tx; - - if (typeof options == 'object') - Object.assign(myOptions, options); - - if (!myOptions.transaction) { - tx = await Self.beginTransaction({}); - myOptions.transaction = tx; - } - - try { - const sale = await models.Sale.findById(args.saleId, null, myOptions); - - const result = await sale.updateAttribute('quantity', args.quantity, myOptions); - - if (tx) await tx.commit(); - - return result; - } catch (e) { - if (tx) await tx.rollback(); - throw e; - } - }; -}; diff --git a/back/methods/collection/setSaleQuantity.js b/back/methods/collection/setSaleQuantity.js new file mode 100644 index 000000000..82451b8be --- /dev/null +++ b/back/methods/collection/setSaleQuantity.js @@ -0,0 +1,34 @@ +module.exports = Self => { + Self.remoteMethodCtx('setSaleQuantity', { + description: 'Update sale quantity', + accessType: 'WRITE', + accepts: [{ + arg: 'saleId', + type: 'number', + required: true, + description: 'The sale id' + }, + { + arg: 'quantity', + type: 'number', + required: true, + description: 'The quantity to picked' + }], + returns: { + type: 'object', + root: true + }, + http: { + path: `/setSaleQuantity`, + verb: 'POST' + } + }); + + Self.setSaleQuantity = async ctx => { + const args = ctx.args; + const models = Self.app.models; + + const sale = await models.Sale.findById(args.saleId,); + return await sale.updateAttribute('quantity', args.quantity); + }; +}; diff --git a/back/methods/collection/spec/setQuantitySale.spec.js b/back/methods/collection/spec/setQuantitySale.spec.js deleted file mode 100644 index 19c317ae3..000000000 --- a/back/methods/collection/spec/setQuantitySale.spec.js +++ /dev/null @@ -1,32 +0,0 @@ -const models = require('vn-loopback/server/server').models; - -describe('setQuantitySale()', () => { - it('should change quantity sale', async() => { - const tx = await models.Sale.beginTransaction({}); - const saleId = 30; - const newQuantity = 10; - - try { - const options = {transaction: tx}; - const ctx = { - args: { - saleId: saleId, - quantity: newQuantity - } - }; - - const originalSale = await models.Sale.findById(30, null, options); - - await models.Collection.setQuantitySale(ctx, options); - const updateSale = await models.Sale.findById(30, null, options); - - expect(updateSale.quantity).toBeLessThan(originalSale.quantity); - expect(updateSale.quantity).toEqual(newQuantity); - - await tx.rollback(); - } catch (e) { - await tx.rollback(); - throw e; - } - }); -}); diff --git a/back/methods/collection/spec/setSaleQuantity.spec.js b/back/methods/collection/spec/setSaleQuantity.spec.js new file mode 100644 index 000000000..4e3c8c4aa --- /dev/null +++ b/back/methods/collection/spec/setSaleQuantity.spec.js @@ -0,0 +1,23 @@ +const models = require('vn-loopback/server/server').models; + +describe('setSaleQuantity()', () => { + it('should change quantity sale', async() => { + const saleId = 30; + const newQuantity = 10; + + const ctx = { + args: { + saleId: saleId, + quantity: newQuantity + } + }; + + const originalSale = await models.Sale.findById(saleId); + + await models.Collection.setSaleQuantity(ctx); + const updateSale = await models.Sale.findById(saleId); + + expect(updateSale.quantity).toBeLessThan(originalSale.quantity); + expect(updateSale.quantity).toEqual(newQuantity); + }); +}); diff --git a/back/models/collection.js b/back/models/collection.js index 7ac46f263..29a0c4c32 100644 --- a/back/models/collection.js +++ b/back/models/collection.js @@ -2,6 +2,6 @@ module.exports = Self => { require('../methods/collection/getCollection')(Self); require('../methods/collection/newCollection')(Self); require('../methods/collection/getSectors')(Self); - require('../methods/collection/setQuantitySale')(Self); + require('../methods/collection/setSaleQuantity')(Self); require('../methods/collection/collectionFaults')(Self); }; diff --git a/db/changes/10420-valentines/00-aclCollection.sql b/db/changes/10420-valentines/00-aclCollection.sql index 5c2f1856e..81e53049c 100644 --- a/db/changes/10420-valentines/00-aclCollection.sql +++ b/db/changes/10420-valentines/00-aclCollection.sql @@ -1,3 +1,3 @@ INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId) -VALUES('Collection', 'setQuantitySale', '*', 'ALLOW', 'ROLE', 'employee'); +VALUES('Collection', 'setSaleQuantity', '*', 'ALLOW', 'ROLE', 'employee'); \ No newline at end of file diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 7d675cb13..599febc48 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -120,5 +120,6 @@ "This item is not available": "This item is not available", "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}", "The type of business must be filled in basic data": "The type of business must be filled in basic data", - "The worker has hours recorded that day": "The worker has hours recorded that day" + "The worker has hours recorded that day": "The worker has hours recorded that day", + "isWithoutNegatives": "isWithoutNegatives" } \ No newline at end of file