From 2ecc464046493b4ae2c21a8a8e8ae6bd00b6902a Mon Sep 17 00:00:00 2001 From: alexm Date: Fri, 25 Aug 2023 14:26:17 +0200 Subject: [PATCH 01/10] refs #5673 feat(claim_development): redirect to lilium --- modules/claim/front/development/index.html | 118 +----------------- modules/claim/front/development/index.js | 15 +-- modules/claim/front/development/index.spec.js | 31 ----- modules/claim/front/development/locale/es.yml | 8 -- modules/claim/front/development/style.scss | 0 5 files changed, 8 insertions(+), 164 deletions(-) delete mode 100644 modules/claim/front/development/index.spec.js delete mode 100644 modules/claim/front/development/locale/es.yml delete mode 100644 modules/claim/front/development/style.scss diff --git a/modules/claim/front/development/index.html b/modules/claim/front/development/index.html index 1684541ea7..7fb3b870e0 100644 --- a/modules/claim/front/development/index.html +++ b/modules/claim/front/development/index.html @@ -1,116 +1,2 @@ - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -
- - - - -
-
- - - - - - -
+ + diff --git a/modules/claim/front/development/index.js b/modules/claim/front/development/index.js index 04569f0aa1..7b31bd17f3 100644 --- a/modules/claim/front/development/index.js +++ b/modules/claim/front/development/index.js @@ -1,17 +1,14 @@ import ngModule from '../module'; import Section from 'salix/components/section'; -import './style.scss'; class Controller extends Section { - onSubmit() { - this.$.watcher.check(); - this.$.model.save().then(() => { - this.$.watcher.notifySaved(); - this.$.watcher.updateOriginalData(); + constructor($element, $) { + super($element, $); + } - if (this.aclService.hasAny(['claimManager'])) - this.$state.go('claim.card.action'); - }); + async $onInit() { + this.$state.go('claim.card.summary', {id: this.$params.id}); + window.location.href = await this.vnApp.getUrl(`claim/${this.$params.id}/development`); } } diff --git a/modules/claim/front/development/index.spec.js b/modules/claim/front/development/index.spec.js deleted file mode 100644 index e2574ccb94..0000000000 --- a/modules/claim/front/development/index.spec.js +++ /dev/null @@ -1,31 +0,0 @@ -import './index.js'; -import watcher from 'core/mocks/watcher'; -import crudModel from 'core/mocks/crud-model'; - -describe('Claim', () => { - describe('Component vnClaimDevelopment', () => { - let controller; - let $scope; - - beforeEach(ngModule('claim')); - - beforeEach(inject(($componentController, $rootScope) => { - $scope = $rootScope.$new(); - $scope.watcher = watcher; - $scope.model = crudModel; - const $element = angular.element(''); - controller = $componentController('vnClaimDevelopment', {$element, $scope}); - })); - - describe('onSubmit()', () => { - it(`should redirect to 'claim.card.action' state`, () => { - jest.spyOn(controller.aclService, 'hasAny').mockReturnValue(true); - jest.spyOn(controller.$state, 'go'); - - controller.onSubmit(); - - expect(controller.$state.go).toHaveBeenCalledWith('claim.card.action'); - }); - }); - }); -}); diff --git a/modules/claim/front/development/locale/es.yml b/modules/claim/front/development/locale/es.yml deleted file mode 100644 index c0c4ed1847..0000000000 --- a/modules/claim/front/development/locale/es.yml +++ /dev/null @@ -1,8 +0,0 @@ -Destination: Destino -Development: Trazabilidad -Reason: Motivo -Result: Consecuencia -Responsible: Responsable -Worker: Trabajador -Redelivery: Devolución -Add line: Añadir Linea \ No newline at end of file diff --git a/modules/claim/front/development/style.scss b/modules/claim/front/development/style.scss deleted file mode 100644 index e69de29bb2..0000000000 From 3d1ee374c28d71a1a03a68b87f03f7ba4423e6ef Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 18 Sep 2023 13:49:45 +0200 Subject: [PATCH 02/10] refs #5673 feat: remove claim_development e2e --- .../{03_detail.spec.js => 02_detail.spec.js} | 2 +- e2e/paths/06-claim/02_development.spec.js | 97 ------------------- ...action.spec.js => 03_claim_action.spec.js} | 2 +- ...{05_summary.spec.js => 04_summary.spec.js} | 2 +- ...scriptor.spec.js => 05_descriptor.spec.js} | 2 +- .../{07_note.spec.js => 06_note.spec.js} | 0 6 files changed, 4 insertions(+), 101 deletions(-) rename e2e/paths/06-claim/{03_detail.spec.js => 02_detail.spec.js} (98%) delete mode 100644 e2e/paths/06-claim/02_development.spec.js rename e2e/paths/06-claim/{04_claim_action.spec.js => 03_claim_action.spec.js} (97%) rename e2e/paths/06-claim/{05_summary.spec.js => 04_summary.spec.js} (98%) rename e2e/paths/06-claim/{06_descriptor.spec.js => 05_descriptor.spec.js} (97%) rename e2e/paths/06-claim/{07_note.spec.js => 06_note.spec.js} (100%) diff --git a/e2e/paths/06-claim/03_detail.spec.js b/e2e/paths/06-claim/02_detail.spec.js similarity index 98% rename from e2e/paths/06-claim/03_detail.spec.js rename to e2e/paths/06-claim/02_detail.spec.js index ddcfd9302d..eb4ac5d710 100644 --- a/e2e/paths/06-claim/03_detail.spec.js +++ b/e2e/paths/06-claim/02_detail.spec.js @@ -1,5 +1,5 @@ import selectors from '../../helpers/selectors.js'; -import getBrowser from '../../helpers/puppeteer'; +import getBrowser from '../../helpers/puppeteer.js'; // #1528 e2e claim/detail xdescribe('Claim detail', () => { diff --git a/e2e/paths/06-claim/02_development.spec.js b/e2e/paths/06-claim/02_development.spec.js deleted file mode 100644 index b7352dcc25..0000000000 --- a/e2e/paths/06-claim/02_development.spec.js +++ /dev/null @@ -1,97 +0,0 @@ -import selectors from '../../helpers/selectors.js'; -import getBrowser from '../../helpers/puppeteer'; - -describe('Claim development', () => { - let browser; - let page; - - beforeAll(async() => { - browser = await getBrowser(); - page = browser.page; - await page.loginAndModule('claimManager', 'claim'); - await page.accessToSearchResult('1'); - await page.accessToSection('claim.card.development'); - }); - - afterAll(async() => { - await browser.close(); - }); - - it('should delete a development and create a new one', async() => { - await page.waitToClick(selectors.claimDevelopment.firstDeleteDevelopmentButton); - await page.waitToClick(selectors.claimDevelopment.addDevelopmentButton); - await page.autocompleteSearch(selectors.claimDevelopment.secondClaimReason, 'Baja calidad'); - await page.autocompleteSearch(selectors.claimDevelopment.secondClaimResult, 'Deshidratacion'); - await page.autocompleteSearch(selectors.claimDevelopment.secondClaimResponsible, 'Calidad general'); - await page.autocompleteSearch(selectors.claimDevelopment.secondClaimWorker, 'deliveryNick'); - await page.autocompleteSearch(selectors.claimDevelopment.secondClaimRedelivery, 'Reparto'); - await page.waitToClick(selectors.claimDevelopment.saveDevelopmentButton); - const message = await page.waitForSnackbar(); - - expect(message.text).toContain('Data saved!'); - }); - - it(`should redirect to the next section of claims as the role is claimManager`, async() => { - await page.waitForState('claim.card.action'); - }); - - it('should edit a development', async() => { - await page.reloadSection('claim.card.development'); - await page.autocompleteSearch(selectors.claimDevelopment.firstClaimReason, 'Calor'); - await page.autocompleteSearch(selectors.claimDevelopment.firstClaimResult, 'Cocido'); - await page.autocompleteSearch(selectors.claimDevelopment.firstClaimResponsible, 'Calidad general'); - await page.autocompleteSearch(selectors.claimDevelopment.firstClaimWorker, 'adminAssistantNick'); - await page.autocompleteSearch(selectors.claimDevelopment.firstClaimRedelivery, 'Cliente'); - await page.waitToClick(selectors.claimDevelopment.saveDevelopmentButton); - const message = await page.waitForSnackbar(); - - expect(message.text).toContain('Data saved!'); - }); - - it('should confirm the first development is the expected one', async() => { - await page.reloadSection('claim.card.development'); - const reason = await page - .waitToGetProperty(selectors.claimDevelopment.firstClaimReason, 'value'); - - const result = await page - .waitToGetProperty(selectors.claimDevelopment.firstClaimResult, 'value'); - - const responsible = await page - .waitToGetProperty(selectors.claimDevelopment.firstClaimResponsible, 'value'); - - const worker = await page - .waitToGetProperty(selectors.claimDevelopment.firstClaimWorker, 'value'); - - const redelivery = await page - .waitToGetProperty(selectors.claimDevelopment.firstClaimRedelivery, 'value'); - - expect(reason).toEqual('Calor'); - expect(result).toEqual('Baboso/Cocido'); - expect(responsible).toEqual('Calidad general'); - expect(worker).toEqual('adminAssistantNick'); - expect(redelivery).toEqual('Cliente'); - }); - - it('should confirm the second development is the expected one', async() => { - const reason = await page - .waitToGetProperty(selectors.claimDevelopment.secondClaimReason, 'value'); - - const result = await page - .waitToGetProperty(selectors.claimDevelopment.secondClaimResult, 'value'); - - const responsible = await page - .waitToGetProperty(selectors.claimDevelopment.secondClaimResponsible, 'value'); - - const worker = await page - .waitToGetProperty(selectors.claimDevelopment.secondClaimWorker, 'value'); - - const redelivery = await page - .waitToGetProperty(selectors.claimDevelopment.secondClaimRedelivery, 'value'); - - expect(reason).toEqual('Baja calidad'); - expect(result).toEqual('Deshidratacion'); - expect(responsible).toEqual('Calidad general'); - expect(worker).toEqual('deliveryNick'); - expect(redelivery).toEqual('Reparto'); - }); -}); diff --git a/e2e/paths/06-claim/04_claim_action.spec.js b/e2e/paths/06-claim/03_claim_action.spec.js similarity index 97% rename from e2e/paths/06-claim/04_claim_action.spec.js rename to e2e/paths/06-claim/03_claim_action.spec.js index 62a0ac232a..ac6f72e378 100644 --- a/e2e/paths/06-claim/04_claim_action.spec.js +++ b/e2e/paths/06-claim/03_claim_action.spec.js @@ -1,5 +1,5 @@ import selectors from '../../helpers/selectors.js'; -import getBrowser from '../../helpers/puppeteer'; +import getBrowser from '../../helpers/puppeteer.js'; describe('Claim action path', () => { let browser; diff --git a/e2e/paths/06-claim/05_summary.spec.js b/e2e/paths/06-claim/04_summary.spec.js similarity index 98% rename from e2e/paths/06-claim/05_summary.spec.js rename to e2e/paths/06-claim/04_summary.spec.js index 1333ed01af..dda8484a67 100644 --- a/e2e/paths/06-claim/05_summary.spec.js +++ b/e2e/paths/06-claim/04_summary.spec.js @@ -1,6 +1,6 @@ import selectors from '../../helpers/selectors.js'; -import getBrowser from '../../helpers/puppeteer'; +import getBrowser from '../../helpers/puppeteer.js'; describe('Claim summary path', () => { let browser; diff --git a/e2e/paths/06-claim/06_descriptor.spec.js b/e2e/paths/06-claim/05_descriptor.spec.js similarity index 97% rename from e2e/paths/06-claim/06_descriptor.spec.js rename to e2e/paths/06-claim/05_descriptor.spec.js index 059bd68dd4..49912b26a6 100644 --- a/e2e/paths/06-claim/06_descriptor.spec.js +++ b/e2e/paths/06-claim/05_descriptor.spec.js @@ -1,5 +1,5 @@ import selectors from '../../helpers/selectors.js'; -import getBrowser from '../../helpers/puppeteer'; +import getBrowser from '../../helpers/puppeteer.js'; describe('Claim descriptor path', () => { let browser; diff --git a/e2e/paths/06-claim/07_note.spec.js b/e2e/paths/06-claim/06_note.spec.js similarity index 100% rename from e2e/paths/06-claim/07_note.spec.js rename to e2e/paths/06-claim/06_note.spec.js From ac3e9c811d124a8ce496e96eeb11960d5bb1ccff Mon Sep 17 00:00:00 2001 From: sergiodt Date: Wed, 27 Sep 2023 14:01:17 +0200 Subject: [PATCH 03/10] refs #5890 feat: itemShelvingSaleAsignado --- db/changes/234001/01-itemShelvingSale.sql | 299 ++++++++++++++++++ loopback/locale/en.json | 3 +- loopback/locale/es.json | 7 +- .../itemShelvingSaleByCollection.js | 22 ++ .../itemShelvingSaleSetQuantity.js | 31 ++ .../item/back/models/item-shelving-sale.js | 2 + 6 files changed, 360 insertions(+), 4 deletions(-) create mode 100644 db/changes/234001/01-itemShelvingSale.sql create mode 100644 modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js create mode 100644 modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js diff --git a/db/changes/234001/01-itemShelvingSale.sql b/db/changes/234001/01-itemShelvingSale.sql new file mode 100644 index 0000000000..af68d465af --- /dev/null +++ b/db/changes/234001/01-itemShelvingSale.sql @@ -0,0 +1,299 @@ + +ALTER TABLE vn.itemShelvingSale ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; + +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addByCollection`( + vCollectionFk INT(11) +) +BEGIN +/** + * Guarda la ubicación para el contenido de una colección + * + * @param vCollectionFk Identificador de collection + */ + CREATE OR REPLACE TEMPORARY TABLE tmp.sale + (INDEX(saleFk)) + ENGINE = MEMORY + SELECT s.id saleFk, NULL userFk + FROM ticketCollection tc + JOIN sale s ON s.ticketFk = tc.ticketFk + LEFT JOIN ( + SELECT DISTINCT saleFk + FROM saleTracking st + JOIN state s ON s.id = st.stateFk + WHERE st.isChecked + AND s.semaphore = 1)st ON st.saleFk = s.id + WHERE tc.collectionFk = vCollectionFk + AND st.saleFk IS NULL + AND NOT s.isPicked; + + CALL itemShelvingSale_addNew(); +END$$ +DELIMITER ; + + +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_setQuantity`( + vItemShelvingSaleFk INT(10), + vQuantity DECIMAL(10,0), + vIsItemShelvingSaleEmpty BOOLEAN +) +BEGIN +/** + * Gestiona la reserva de un itemShelvingFk, actualizando isPicked y quantity + * en vn.itemShelvingSale y vn.sale.isPicked en caso necesario. + * Si la reserva de la ubicación es fallida, se regulariza la situación + * + * @param vItemShelvingSaleFk Id itemShelvingSaleFK + * @param vQuantity Cantidad real que se ha cogido de la ubicación + * @param vIsItemShelvingSaleEmpty determina si ka ubicación itemShelvingSale se ha + * quedado vacio tras el movimiento + */ + DECLARE vSaleFk INT; + DECLARE vCursorSaleFk INT; + DECLARE vItemShelvingFk INT; + DECLARE vReservedQuantity INT; + DECLARE vRemainingQuantity INT; + DECLARE vItemFk INT; + DECLARE vUserFk INT; + DECLARE vDone BOOLEAN DEFAULT FALSE; + DECLARE vSales CURSOR FOR + SELECT iss.saleFk, iss.userFk + FROM itemShelvingSale iss + JOIN sale s ON s.id = iss.saleFk + WHERE iss.id = vItemShelvingSaleFk + AND s.itemFk = vItemFk + AND NOT iss.isPicked; + + DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; + + IF (SELECT isPicked FROM itemShelvingSale WHERE id = vItemShelvingSaleFk) THEN + CALL util.throw('Booking completed'); + END IF; + + SELECT s.itemFk, iss.saleFk, iss.itemShelvingFk + INTO vItemFk, vSaleFk, vItemShelvingFk + FROM itemShelvingSale iss + JOIN sale s ON s.id = iss.saleFk + WHERE iss.id = vItemShelvingSaleFk + AND NOT iss.isPicked; + + UPDATE itemShelvingSale + SET isPicked = TRUE, + quantity = vQuantity + WHERE id = vItemShelvingSaleFk; + + UPDATE itemShelving + SET visible = IF(vIsItemShelvingSaleEmpty, 0, GREATEST(0,visible - vQuantity)) + WHERE id = vItemShelvingFk; + + /*Se podría preguntar por la cantidad correcta de la ubicació o insertar en una tabla + para que lo tenga en cuenta la gente que está haciendo inventario*/ + + IF vIsItemShelvingSaleEmpty THEN + OPEN vSales; +l: LOOP + SET vDone = FALSE; + FETCH vSales INTO vCursorSaleFk, vUserFk; + IF vDone THEN + LEAVE l; + END IF; + + CREATE OR REPLACE TEMPORARY TABLE tmp.sale + (INDEX(saleFk, userFk)) + ENGINE = MEMORY + SELECT vCursorSaleFk, vUserFk; + + CALL itemShelvingSale_addNewWhitUser(); + DROP TEMPORARY TABLE tmp.sale; + + END LOOP; + CLOSE vSales; + + DELETE iss + FROM itemShelvingSale iss + JOIN sale s ON s.id = iss.saleFk + WHERE iss.id = vItemShelvingSaleFk + AND s.itemFk = vItemFk + AND NOT iss.isPicked; + END IF; + + SELECT SUM(quantity) INTO vRemainingQuantity + FROM itemShelvingSale + WHERE saleFk = vSaleFk + AND NOT isPicked; + + IF vRemainingQuantity THEN + CALL itemShelvingSale_addBySale (vSaleFk, vRemainingQuantity, NULL); + + SELECT SUM(quantity) INTO vRemainingQuantity + FROM itemShelvingSale + WHERE saleFk = vSaleFk + AND NOT isPicked; + + IF NOT vRemainingQuantity <=> 0 THEN + SELECT SUM(iss.quantity) + INTO vReservedQuantity + FROM itemShelvingSale iss + WHERE iss.saleFk = vSaleFk; + + CALL saleTracking_new( + vSaleFk, + TRUE, + vReservedQuantity, + `account`.`myUser_getId`(), + NULL, + 'PREPARED', + TRUE); + + UPDATE sale s + SET s.quantity = vReservedQuantity + WHERE s.id = vSaleFk ; + END IF; + END IF; +END$$ +DELIMITER ; + + +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addNew`() +BEGIN +/** + * Guarda la ubicacion para un conjunto de sales del mismo wareHouse + * + * @table tmp.sale(saleFk, userFk) + */ + DECLARE vCalcFk INT; + DECLARE vWarehouseFk INT; + DECLARE vCurrentYear INT DEFAULT YEAR(util.VN_NOW()); + DECLARE vLastPickingOrder INT; + + SELECT t.warehouseFk, MAX(p.pickingOrder) + INTO vWarehouseFk, vLastPickingOrder + FROM ticket t + JOIN sale s ON s.ticketFk = t.id + JOIN tmp.sale ts ON ts.saleFk = s.id + LEFT JOIN itemShelvingSale iss ON iss.saleFk = ts.saleFk + LEFT JOIN itemShelving ish ON ish.id = iss.itemShelvingFk + LEFT JOIN shelving sh ON sh.code = ish.shelvingFk + LEFT JOIN parking p ON p.id = sh.parkingFk + WHERE t.warehouseFk IS NOT NULL; + + IF vWarehouseFk IS NULL THEN + CALL util.throw('Warehouse not set'); + END IF; + + CALL cache.visible_refresh(vCalcFk, FALSE, vWarehouseFk); + + SET @outstanding = 0; + SET @oldsaleFk = 0; + + CREATE OR REPLACE TEMPORARY TABLE tSalePlacementQuantity + (INDEX(saleFk)) + ENGINE = MEMORY + SELECT saleFk, userFk, quantityToReserve, itemShelvingFk + FROM( SELECT saleFk, + sub.userFk, + itemShelvingFk , + IF(saleFk <> @oldsaleFk, @outstanding := quantity, @outstanding), + @qtr := LEAST(@outstanding, available) quantityToReserve, + @outStanding := @outStanding - @qtr, + @oldsaleFk := saleFk + FROM( + SELECT ts.saleFk, + ts.userFk, + s.quantity, + ish.id itemShelvingFk, + ish.visible - IFNULL(ishr.reservedQuantity, 0) available + FROM tmp.sale ts + JOIN sale s ON s.id = ts.saleFk + JOIN itemShelving ish ON ish.itemFk = s.itemFk + LEFT JOIN ( + SELECT itemShelvingFk, SUM(quantity) reservedQuantity + FROM itemShelvingSale + WHERE NOT isPicked + GROUP BY itemShelvingFk) ishr ON ishr.itemShelvingFk = ish.id + JOIN shelving sh ON sh.code = ish.shelvingFk + JOIN parking p ON p.id = sh.parkingFk + JOIN sector sc ON sc.id = p.sectorFk + JOIN warehouse w ON w.id = sc.warehouseFk + JOIN productionConfig pc + WHERE w.id = vWarehouseFk + AND NOT sc.isHideForPickers + ORDER BY + s.id, + p.pickingOrder >= vLastPickingOrder, + sh.priority DESC, + ish.visible >= s.quantity DESC, + s.quantity MOD ish.grouping = 0 DESC, + ish.grouping DESC, + IF(pc.orderMode = 'Location', p.pickingOrder, ish.created) + LIMIT 100000000000000000 + )sub + )sub2 + WHERE quantityToReserve > 0 + ; + + INSERT INTO itemShelvingSale( + itemShelvingFk, + saleFk, + quantity, + userFk) + SELECT itemShelvingFk, + saleFk, + quantityToReserve, + IFNULL(userFk, getUser()) + FROM tSalePlacementQuantity spl; + + DROP TEMPORARY TABLE tmp.sale; +END$$ +DELIMITER ; + + + +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySale`( + vSelf INT , + vQuantity INT, + vUserFk INT +) +BEGIN +/** + * Reserva la ubicación para una saleFk + * + * @param vSelf Identificador de la venta + * @param vQuantity Cantidad a reservar + * @param vUserFk Id de usuario que realiza la reserva + */ + CREATE OR REPLACE TEMPORARY TABLE tmp.sale + ENGINE = MEMORY + SELECT vSelf saleFk, vUserFk userFk; + + CALL itemShelvingSale_addNew(); +END$$ +DELIMITER ; + + + +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`itemShelvingSale_AFTER_INSERT` + AFTER INSERT ON `itemShelvingSale` + FOR EACH ROW +BEGIN + + UPDATE vn.sale + SET isPicked = TRUE + WHERE id = NEW.saleFk; + +END$$ +DELIMITER ; + +ALTER TABLE vn.itemShelvingSale DROP COLUMN IF EXISTS isPicked; + +ALTER TABLE vn.itemShelvingSale + ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; + +ALTER TABLE vn.productionConfig DROP COLUMN IF EXISTS orderMode; + +ALTER TABLE vn.productionConfig + ADD orderMode ENUM('Location', 'Age') NOT NULL DEFAULT 'Location'; \ No newline at end of file diff --git a/loopback/locale/en.json b/loopback/locale/en.json index fb4e72bd64..7e194451f3 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -187,5 +187,6 @@ "This ticket is not editable.": "This ticket is not editable.", "The ticket doesn't exist.": "The ticket doesn't exist.", "The sales do not exists": "The sales do not exists", - "Ticket without Route": "Ticket without route" + "Ticket without Route": "Ticket without route", + "Booking completed": "Booking completed" } diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 756ce301a9..034f267d0f 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -314,8 +314,9 @@ "This ticket is locked.": "Este ticket está bloqueado.", "This ticket is not editable.": "Este ticket no es editable.", "The ticket doesn't exist.": "No existe el ticket.", - "Social name should be uppercase": "La razón social debe ir en mayúscula", + "Social name should be uppercase": "La razón social debe ir en mayúscula", "Street should be uppercase": "La dirección fiscal debe ir en mayúscula", "The response is not a PDF": "La respuesta no es un PDF", - "Ticket without Route": "Ticket sin ruta" -} + "Ticket without Route": "Ticket sin ruta", + "Booking completed": "Reserva completada" +} \ No newline at end of file diff --git a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js new file mode 100644 index 0000000000..2eb61a8753 --- /dev/null +++ b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js @@ -0,0 +1,22 @@ +module.exports = Self => { + Self.remoteMethod('itemShelvingSaleByCollection', { + description: 'Insert sales of the collection in itemShelvingSale', + accessType: 'WRITE', + accepts: [ + { + arg: 'id', + type: 'Number', + description: 'The collection id', + http: {source: 'path'} + } + ], + http: { + path: `/:id/itemShelvingSaleByCollection`, + verb: 'POST' + } + }); + + Self.itemShelvingSaleByCollection = async id => { + await Self.rawSql(`CALL vn.itemShelvingSale_addByCollection(?)`, [id]); + }; +}; diff --git a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js new file mode 100644 index 0000000000..bb2c4db0a2 --- /dev/null +++ b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js @@ -0,0 +1,31 @@ +module.exports = Self => { + Self.remoteMethod('itemShelvingSaleSetQuantity', { + description: 'Set quanitity of a sale in itemShelvingSale', + accessType: 'WRITE', + accepts: [ + { + arg: 'id', + type: 'Number', + description: 'The sale id', + }, + { + arg: 'quantity', + type: 'Number', + description: 'The quantity to set', + }, + { + arg: 'isItemShelvingSaleEmpty', + type: 'Boolean', + description: 'True if the shelvingFk is empty ', + } + ], + http: { + path: `/itemShelvingSaleSetQuantity`, + verb: 'POST' + } + }); + + Self.itemShelvingSaleSetQuantity = async(id, quantity, isItemShelvingSaleEmpty) => { + await Self.rawSql(`CALL vn.itemShelvingSale_setQuantity(?, ?, ? )`, [id, quantity, isItemShelvingSaleEmpty]); + }; +}; diff --git a/modules/item/back/models/item-shelving-sale.js b/modules/item/back/models/item-shelving-sale.js index b89be9f00c..e2d27564a2 100644 --- a/modules/item/back/models/item-shelving-sale.js +++ b/modules/item/back/models/item-shelving-sale.js @@ -1,3 +1,5 @@ module.exports = Self => { require('../methods/item-shelving-sale/filter')(Self); + require('../methods/item-shelving-sale/itemShelvingSaleByCollection')(Self); + require('../methods/item-shelving-sale/itemShelvingSaleSetQuantity')(Self); }; From 4048627c765553f7acb6b804b5b42bbf7a4e5ab5 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Thu, 28 Sep 2023 08:08:40 +0200 Subject: [PATCH 04/10] refs #5890 fix: format --- db/changes/234001/01-itemShelvingSale.sql | 8 ++++---- .../item-shelving-sale/itemShelvingSaleByCollection.js | 3 ++- .../item-shelving-sale/itemShelvingSaleSetQuantity.js | 9 ++++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/db/changes/234001/01-itemShelvingSale.sql b/db/changes/234001/01-itemShelvingSale.sql index af68d465af..3b01f7da7b 100644 --- a/db/changes/234001/01-itemShelvingSale.sql +++ b/db/changes/234001/01-itemShelvingSale.sql @@ -288,12 +288,12 @@ BEGIN END$$ DELIMITER ; -ALTER TABLE vn.itemShelvingSale DROP COLUMN IF EXISTS isPicked; +ALTER TABLE `vn`.`itemShelvingSale` DROP COLUMN IF EXISTS isPicked; -ALTER TABLE vn.itemShelvingSale +ALTER TABLE`vn`.`itemShelvingSale` ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; -ALTER TABLE vn.productionConfig DROP COLUMN IF EXISTS orderMode; +ALTER TABLE `vn`.`productionConfig` DROP COLUMN IF EXISTS orderMode; -ALTER TABLE vn.productionConfig +ALTER TABLE `vn`.`productionConfig` ADD orderMode ENUM('Location', 'Age') NOT NULL DEFAULT 'Location'; \ No newline at end of file diff --git a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js index 2eb61a8753..2128d68a9d 100644 --- a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js +++ b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js @@ -5,8 +5,9 @@ module.exports = Self => { accepts: [ { arg: 'id', - type: 'Number', + type: 'number', description: 'The collection id', + required: true, http: {source: 'path'} } ], diff --git a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js index bb2c4db0a2..6fe0e28a0f 100644 --- a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js +++ b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js @@ -5,17 +5,20 @@ module.exports = Self => { accepts: [ { arg: 'id', - type: 'Number', + type: 'number', + required: true, description: 'The sale id', }, { arg: 'quantity', - type: 'Number', + type: 'number', + required: true, description: 'The quantity to set', }, { arg: 'isItemShelvingSaleEmpty', - type: 'Boolean', + type: 'boolean', + required: true, description: 'True if the shelvingFk is empty ', } ], From 65b0ec387f844bebb502771401161d2399c3d50d Mon Sep 17 00:00:00 2001 From: sergiodt Date: Thu, 28 Sep 2023 08:09:54 +0200 Subject: [PATCH 05/10] refs #5890 fix: format --- db/changes/234001/01-itemShelvingSale.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/changes/234001/01-itemShelvingSale.sql b/db/changes/234001/01-itemShelvingSale.sql index 3b01f7da7b..b98004bc5d 100644 --- a/db/changes/234001/01-itemShelvingSale.sql +++ b/db/changes/234001/01-itemShelvingSale.sql @@ -1,5 +1,5 @@ -ALTER TABLE vn.itemShelvingSale ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; +ALTER TABLE `vn`.`itemShelvingSale` ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addByCollection`( From e51df063d3cdd8d819368f6bdd1f53cae03ac506 Mon Sep 17 00:00:00 2001 From: alexm Date: Thu, 28 Sep 2023 13:26:05 +0200 Subject: [PATCH 06/10] refs #5890 feat: add userId in rawSql --- .../itemShelvingSaleByCollection.js | 11 ++++++++--- .../itemShelvingSaleSetQuantity.js | 13 ++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js index 2128d68a9d..2059c28c9d 100644 --- a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js +++ b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleByCollection.js @@ -1,5 +1,5 @@ module.exports = Self => { - Self.remoteMethod('itemShelvingSaleByCollection', { + Self.remoteMethodCtx('itemShelvingSaleByCollection', { description: 'Insert sales of the collection in itemShelvingSale', accessType: 'WRITE', accepts: [ @@ -17,7 +17,12 @@ module.exports = Self => { } }); - Self.itemShelvingSaleByCollection = async id => { - await Self.rawSql(`CALL vn.itemShelvingSale_addByCollection(?)`, [id]); + Self.itemShelvingSaleByCollection = async(ctx, id, options) => { + const myOptions = {userId: ctx.req.accessToken.userId}; + + if (typeof options == 'object') + Object.assign(myOptions, options); + + await Self.rawSql(`CALL vn.itemShelvingSale_addByCollection(?)`, [id], myOptions); }; }; diff --git a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js index 6fe0e28a0f..90e66c066f 100644 --- a/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js +++ b/modules/item/back/methods/item-shelving-sale/itemShelvingSaleSetQuantity.js @@ -1,5 +1,5 @@ module.exports = Self => { - Self.remoteMethod('itemShelvingSaleSetQuantity', { + Self.remoteMethodCtx('itemShelvingSaleSetQuantity', { description: 'Set quanitity of a sale in itemShelvingSale', accessType: 'WRITE', accepts: [ @@ -28,7 +28,14 @@ module.exports = Self => { } }); - Self.itemShelvingSaleSetQuantity = async(id, quantity, isItemShelvingSaleEmpty) => { - await Self.rawSql(`CALL vn.itemShelvingSale_setQuantity(?, ?, ? )`, [id, quantity, isItemShelvingSaleEmpty]); + Self.itemShelvingSaleSetQuantity = async(ctx, id, quantity, isItemShelvingSaleEmpty, options) => { + const myOptions = {userId: ctx.req.accessToken.userId}; + + if (typeof options == 'object') + Object.assign(myOptions, options); + + await Self.rawSql(`CALL vn.itemShelvingSale_setQuantity(?, ?, ? )`, + [id, quantity, isItemShelvingSaleEmpty], + myOptions); }; }; From 204770c2de88d1e6251c2bc339a7d0426b508f8d Mon Sep 17 00:00:00 2001 From: alexm Date: Thu, 28 Sep 2023 13:53:46 +0200 Subject: [PATCH 07/10] refs #6224 deploy: init version 234201 --- CHANGELOG.md | 5 +++++ db/changes/234201/.gitkeep | 0 package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 db/changes/234201/.gitkeep diff --git a/CHANGELOG.md b/CHANGELOG.md index 79688cb565..e95ac0f642 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2342.01] - 2023-10-19 + +### Added +### Changed +### Fixed ## [2340.01] - 2023-10-05 diff --git a/db/changes/234201/.gitkeep b/db/changes/234201/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package-lock.json b/package-lock.json index 10b5e6b022..c3f88bc2c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "salix-back", - "version": "23.32.02", + "version": "23.42.01", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "salix-back", - "version": "23.26.01", + "version": "23.42.01", "license": "GPL-3.0", "dependencies": { "axios": "^1.2.2", diff --git a/package.json b/package.json index d250071a66..3320705f56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "salix-back", - "version": "23.40.01", + "version": "23.42.01", "author": "Verdnatura Levante SL", "description": "Salix backend", "license": "GPL-3.0", From 934b4c4b364d74b5e00d46af3159e85fe3000406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Fri, 29 Sep 2023 10:53:06 +0200 Subject: [PATCH 08/10] refs #5890 --- db/changes/234002/.gitkeep | 0 .../01-itemShelvingSale.sql | 48 ++++++++----------- 2 files changed, 20 insertions(+), 28 deletions(-) create mode 100644 db/changes/234002/.gitkeep rename db/changes/{234001 => 234002}/01-itemShelvingSale.sql (90%) diff --git a/db/changes/234002/.gitkeep b/db/changes/234002/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/db/changes/234001/01-itemShelvingSale.sql b/db/changes/234002/01-itemShelvingSale.sql similarity index 90% rename from db/changes/234001/01-itemShelvingSale.sql rename to db/changes/234002/01-itemShelvingSale.sql index b98004bc5d..817c6317a6 100644 --- a/db/changes/234001/01-itemShelvingSale.sql +++ b/db/changes/234002/01-itemShelvingSale.sql @@ -1,13 +1,20 @@ +ALTER TABLE `vn`.`itemShelvingSale` DROP COLUMN IF EXISTS isPicked; -ALTER TABLE `vn`.`itemShelvingSale` ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; +ALTER TABLE`vn`.`itemShelvingSale` + ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; + +ALTER TABLE `vn`.`productionConfig` DROP COLUMN IF EXISTS orderMode; + +ALTER TABLE `vn`.`productionConfig` + ADD orderMode ENUM('Location', 'Age') NOT NULL DEFAULT 'Location'; DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addByCollection`( +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_reserveByCollection`( vCollectionFk INT(11) ) BEGIN /** - * Guarda la ubicación para el contenido de una colección + * Reserva cantidades con ubicaciones para el contenido de una colección * * @param vCollectionFk Identificador de collection */ @@ -27,7 +34,7 @@ BEGIN AND st.saleFk IS NULL AND NOT s.isPicked; - CALL itemShelvingSale_addNew(); + CALL itemShelvingSale_reserve(); END$$ DELIMITER ; @@ -87,9 +94,6 @@ BEGIN SET visible = IF(vIsItemShelvingSaleEmpty, 0, GREATEST(0,visible - vQuantity)) WHERE id = vItemShelvingFk; - /*Se podría preguntar por la cantidad correcta de la ubicació o insertar en una tabla - para que lo tenga en cuenta la gente que está haciendo inventario*/ - IF vIsItemShelvingSaleEmpty THEN OPEN vSales; l: LOOP @@ -104,7 +108,7 @@ l: LOOP ENGINE = MEMORY SELECT vCursorSaleFk, vUserFk; - CALL itemShelvingSale_addNewWhitUser(); + CALL itemShelvingSale_reserveWhitUser(); DROP TEMPORARY TABLE tmp.sale; END LOOP; @@ -124,7 +128,7 @@ l: LOOP AND NOT isPicked; IF vRemainingQuantity THEN - CALL itemShelvingSale_addBySale (vSaleFk, vRemainingQuantity, NULL); + CALL itemShelvingSale_reserveBySale (vSaleFk, vRemainingQuantity, NULL); SELECT SUM(quantity) INTO vRemainingQuantity FROM itemShelvingSale @@ -156,10 +160,10 @@ DELIMITER ; DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addNew`() +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_reserve`() BEGIN /** - * Guarda la ubicacion para un conjunto de sales del mismo wareHouse + * Reserva cantidades con ubicaciones para un conjunto de sales del mismo wareHouse * * @table tmp.sale(saleFk, userFk) */ @@ -227,12 +231,10 @@ BEGIN ish.visible >= s.quantity DESC, s.quantity MOD ish.grouping = 0 DESC, ish.grouping DESC, - IF(pc.orderMode = 'Location', p.pickingOrder, ish.created) - LIMIT 100000000000000000 + IF(pc.orderMode = 'Location', p.pickingOrder, ish.created) )sub )sub2 - WHERE quantityToReserve > 0 - ; + WHERE quantityToReserve > 0; INSERT INTO itemShelvingSale( itemShelvingFk, @@ -252,14 +254,14 @@ DELIMITER ; DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_addBySale`( +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelvingSale_reserveBySale`( vSelf INT , vQuantity INT, vUserFk INT ) BEGIN /** - * Reserva la ubicación para una saleFk + * Reserva cantida y ubicación para una saleFk * * @param vSelf Identificador de la venta * @param vQuantity Cantidad a reservar @@ -269,7 +271,7 @@ BEGIN ENGINE = MEMORY SELECT vSelf saleFk, vUserFk userFk; - CALL itemShelvingSale_addNew(); + CALL itemShelvingSale_reserve(); END$$ DELIMITER ; @@ -287,13 +289,3 @@ BEGIN END$$ DELIMITER ; - -ALTER TABLE `vn`.`itemShelvingSale` DROP COLUMN IF EXISTS isPicked; - -ALTER TABLE`vn`.`itemShelvingSale` - ADD isPicked TINYINT(1) DEFAULT FALSE NOT NULL; - -ALTER TABLE `vn`.`productionConfig` DROP COLUMN IF EXISTS orderMode; - -ALTER TABLE `vn`.`productionConfig` - ADD orderMode ENUM('Location', 'Age') NOT NULL DEFAULT 'Location'; \ No newline at end of file From 6e06d21f9eb6e29f15e2b773b8d7dd759a40f231 Mon Sep 17 00:00:00 2001 From: alexm Date: Fri, 29 Sep 2023 12:36:36 +0200 Subject: [PATCH 09/10] refs #5890 deploy: merge dev in test 234002 --- db/changes/234201/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 db/changes/234201/.gitkeep diff --git a/db/changes/234201/.gitkeep b/db/changes/234201/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 From 1d440d5c02557a4273379746ea42b6fa7f591b72 Mon Sep 17 00:00:00 2001 From: alexm Date: Fri, 29 Sep 2023 12:40:11 +0200 Subject: [PATCH 10/10] refs #5890 correct version 234002 --- CHANGELOG.md | 7 ------- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e95ac0f642..bc31f05793 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,17 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2342.01] - 2023-10-19 - -### Added -### Changed -### Fixed - ## [2340.01] - 2023-10-05 ### Added ### Changed - ### Fixed ## [2338.01] - 2023-09-21 diff --git a/package-lock.json b/package-lock.json index c3f88bc2c7..feb7e7165a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "salix-back", - "version": "23.42.01", + "version": "23.40.02", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "salix-back", - "version": "23.42.01", + "version": "23.40.02", "license": "GPL-3.0", "dependencies": { "axios": "^1.2.2", diff --git a/package.json b/package.json index 3320705f56..f142d7179e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "salix-back", - "version": "23.42.01", + "version": "23.40.02", "author": "Verdnatura Levante SL", "description": "Salix backend", "license": "GPL-3.0",