From 4f6ae220e1773141b8edf34ca96c3535627999c4 Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 19 Feb 2024 15:10:34 +0100 Subject: [PATCH 01/78] feat: refs #6738 crear las Fk de la tabla flight --- db/versions/10894-crimsonEucalyptus/00-firstScript.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 db/versions/10894-crimsonEucalyptus/00-firstScript.sql diff --git a/db/versions/10894-crimsonEucalyptus/00-firstScript.sql b/db/versions/10894-crimsonEucalyptus/00-firstScript.sql new file mode 100644 index 0000000000..167c38f707 --- /dev/null +++ b/db/versions/10894-crimsonEucalyptus/00-firstScript.sql @@ -0,0 +1,3 @@ +-- Place your SQL code here +ALTER TABLE IF EXISTS vn.flight ADD CONSTRAINT flight_airline_FK FOREIGN KEY (airlineFk) + REFERENCES vn.airline(id) ON DELETE CASCADE ON UPDATE CASCADE; \ No newline at end of file From 48310d24c7c900a28b86e13235a36ca868f7ed86 Mon Sep 17 00:00:00 2001 From: ivanm Date: Wed, 21 Feb 2024 14:36:12 +0100 Subject: [PATCH 02/78] refs #6732 change name supplier.isSerious to supplier.isReal --- db/routines/vn2008/views/Proveedores.sql | 2 +- db/versions/10900-redOak/00-firstScript.sql | 1 + modules/supplier/back/methods/supplier/getSummary.js | 2 +- modules/supplier/back/models/supplier.json | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 db/versions/10900-redOak/00-firstScript.sql diff --git a/db/routines/vn2008/views/Proveedores.sql b/db/routines/vn2008/views/Proveedores.sql index 0b7ee89f8e..e26e9c8296 100644 --- a/db/routines/vn2008/views/Proveedores.sql +++ b/db/routines/vn2008/views/Proveedores.sql @@ -23,7 +23,7 @@ AS SELECT `s`.`id` AS `Id_Proveedor`, `s`.`isOfficial` AS `oficial`, `s`.`workerFk` AS `workerFk`, `s`.`payDay` AS `pay_day`, - `s`.`isSerious` AS `serious`, + `s`.`isReal` AS `real`, `s`.`note` AS `notas`, `s`.`taxTypeSageFk` AS `taxTypeSageFk`, `s`.`withholdingSageFk` AS `withholdingSageFk`, diff --git a/db/versions/10900-redOak/00-firstScript.sql b/db/versions/10900-redOak/00-firstScript.sql new file mode 100644 index 0000000000..8609ddc7e1 --- /dev/null +++ b/db/versions/10900-redOak/00-firstScript.sql @@ -0,0 +1 @@ +ALTER TABLE vn.supplier CHANGE COLUMN isSerious isReal tinyint(1) unsigned NOT NULL DEFAULT 0; diff --git a/modules/supplier/back/methods/supplier/getSummary.js b/modules/supplier/back/methods/supplier/getSummary.js index bc869725cb..6992333866 100644 --- a/modules/supplier/back/methods/supplier/getSummary.js +++ b/modules/supplier/back/methods/supplier/getSummary.js @@ -25,7 +25,7 @@ module.exports = Self => { 'id', 'name', 'nickname', - 'isSerious', + 'isReal', 'isActive', 'note', 'nif', diff --git a/modules/supplier/back/models/supplier.json b/modules/supplier/back/models/supplier.json index 59d23f1061..90b266ba9f 100644 --- a/modules/supplier/back/models/supplier.json +++ b/modules/supplier/back/models/supplier.json @@ -48,7 +48,7 @@ "isOfficial": { "type": "boolean" }, - "isSerious": { + "isReal": { "type": "boolean" }, "isTrucker": { From 9c6c5140566c8409c8eb6dff3e8ce4791c3f0776 Mon Sep 17 00:00:00 2001 From: robert Date: Tue, 27 Feb 2024 11:48:49 +0100 Subject: [PATCH 03/78] feat: refs #6738 --- db/versions/10894-crimsonEucalyptus/01-Tramos.sql | 3 +++ db/versions/10894-crimsonEucalyptus/02-dock.sql | 2 ++ .../10894-crimsonEucalyptus/03-Proveedores_cargueras.sql | 2 ++ 3 files changed, 7 insertions(+) create mode 100644 db/versions/10894-crimsonEucalyptus/01-Tramos.sql create mode 100644 db/versions/10894-crimsonEucalyptus/02-dock.sql create mode 100644 db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql diff --git a/db/versions/10894-crimsonEucalyptus/01-Tramos.sql b/db/versions/10894-crimsonEucalyptus/01-Tramos.sql new file mode 100644 index 0000000000..f2ac17ad11 --- /dev/null +++ b/db/versions/10894-crimsonEucalyptus/01-Tramos.sql @@ -0,0 +1,3 @@ +-- Place your SQL code here +ALTER TABLE IF EXISTS `vn2008`.`Tramos` RENAME `vn`.``; + diff --git a/db/versions/10894-crimsonEucalyptus/02-dock.sql b/db/versions/10894-crimsonEucalyptus/02-dock.sql new file mode 100644 index 0000000000..1816ce18ba --- /dev/null +++ b/db/versions/10894-crimsonEucalyptus/02-dock.sql @@ -0,0 +1,2 @@ +-- Place your SQL code here +ALTER TABLE IF EXISTS `vn2008`.`dock` RENAME `vn`.``; \ No newline at end of file diff --git a/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql b/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql new file mode 100644 index 0000000000..45bac972cc --- /dev/null +++ b/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql @@ -0,0 +1,2 @@ +-- Place your SQL code here +ALTER TABLE IF EXISTS `vn2008`.`Proveedores_cargueras` RENAME `vn`.``; From 10a89cb7900c84a76f92f63c1f92edb4e13912cb Mon Sep 17 00:00:00 2001 From: ivanm Date: Wed, 28 Feb 2024 13:32:17 +0100 Subject: [PATCH 04/78] refs #6827 Check usernames special characters --- back/methods/chat/spec/send.spec.js | 4 +-- db/dump/fixtures.before.sql | 26 +++++++++---------- .../account/procedures/user_checkName.sql | 2 +- .../10917-aquaPhormium/00-firstScript.sql | 9 +++++++ e2e/paths/02-client/01_create_client.spec.js | 2 +- .../02-client/07_edit_web_access.spec.js | 4 +-- e2e/paths/02-client/09_add_credit.spec.js | 2 +- e2e/paths/02-client/19_summary.spec.js | 2 +- e2e/paths/05-ticket/05_tracking_state.spec.js | 2 +- .../01_create_and_basic_data.spec.js | 4 +-- .../client/specs/createWithUser.spec.js | 6 ++--- .../client/back/models/specs/client.spec.js | 8 +++--- .../specs/activeWithInheritedRole.spec.js | 2 +- .../back/methods/worker/specs/new.spec.js | 2 +- 14 files changed, 42 insertions(+), 33 deletions(-) create mode 100644 db/versions/10917-aquaPhormium/00-firstScript.sql diff --git a/back/methods/chat/spec/send.spec.js b/back/methods/chat/spec/send.spec.js index e910f3fabe..511f5fe800 100644 --- a/back/methods/chat/spec/send.spec.js +++ b/back/methods/chat/spec/send.spec.js @@ -3,14 +3,14 @@ const {models} = require('vn-loopback/server/server'); describe('Chat send()', () => { it('should return true as response', async() => { let ctx = {req: {accessToken: {userId: 1}}}; - let response = await models.Chat.send(ctx, '@salesPerson', 'I changed something'); + let response = await models.Chat.send(ctx, '@salesperson', 'I changed something'); expect(response).toEqual(true); }); it('should return false as response', async() => { let ctx = {req: {accessToken: {userId: 18}}}; - let response = await models.Chat.send(ctx, '@salesPerson', 'I changed something'); + let response = await models.Chat.send(ctx, '@salesperson', 'I changed something'); expect(response).toEqual(false); }); diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 1d59c7ac0f..1c20b46c1f 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -81,7 +81,7 @@ INSERT INTO `account`.`roleConfig`(`id`, `mysqlPassword`, `rolePrefix`, `userPre CALL `account`.`role_sync`; INSERT INTO `account`.`user`(`id`,`name`, `nickname`, `role`,`active`,`email`, `lang`, `image`, `password`) - SELECT id, name, CONCAT(name, 'Nick'), id, 1, CONCAT(name, '@mydomain.com'), 'en', '4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2' + SELECT id, LOWER(name), CONCAT(name, 'Nick'), id, 1, CONCAT(name, '@mydomain.com'), 'en', '4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2' FROM `account`.`role` ORDER BY id; @@ -118,18 +118,18 @@ INSERT INTO `hedera`.`tpvConfig`(`id`, `currency`, `terminal`, `transactionType` INSERT INTO `account`.`user`(`id`,`name`,`nickname`, `password`,`role`,`active`,`email`,`lang`, `image`) VALUES - (1101, 'BruceWayne', 'Bruce Wayne', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'BruceWayne@mydomain.com', 'es', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1102, 'PetterParker', 'Petter Parker', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'PetterParker@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1103, 'ClarkKent', 'Clark Kent', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'ClarkKent@mydomain.com', 'fr', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1104, 'TonyStark', 'Tony Stark', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'TonyStark@mydomain.com', 'es', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1105, 'MaxEisenhardt', 'Max Eisenhardt', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'MaxEisenhardt@mydomain.com', 'pt', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1106, 'DavidCharlesHaller', 'David Charles Haller', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'DavidCharlesHaller@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1107, 'HankPym', 'Hank Pym', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'HankPym@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1108, 'CharlesXavier', 'Charles Xavier', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'CharlesXavier@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1109, 'BruceBanner', 'Bruce Banner', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'BruceBanner@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), - (1110, 'JessicaJones', 'Jessica Jones', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'JessicaJones@mydomain.com', 'en', NULL), - (1111, 'Missing', 'Missing', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en', NULL), - (1112, 'Trash', 'Trash', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en', NULL); + (1101, 'brucewayne', 'Bruce Wayne', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'BruceWayne@mydomain.com', 'es', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1102, 'petterparker', 'Petter Parker', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'PetterParker@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1103, 'clarkkent', 'Clark Kent', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'ClarkKent@mydomain.com', 'fr', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1104, 'tonystark', 'Tony Stark', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'TonyStark@mydomain.com', 'es', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1105, 'maxeisenhardt', 'Max Eisenhardt', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 1, 'MaxEisenhardt@mydomain.com', 'pt', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1106, 'davidcharleshaller', 'David Charles Haller', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'DavidCharlesHaller@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1107, 'hankpym', 'Hank Pym', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'HankPym@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1108, 'charlesxavier', 'Charles Xavier', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'CharlesXavier@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1109, 'brucebanner', 'Bruce Banner', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'BruceBanner@mydomain.com', 'en', 'e7723f0b24ff05b32ed09d95196f2f29'), + (1110, 'jessicajones', 'Jessica Jones', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 1, 1, 'JessicaJones@mydomain.com', 'en', NULL), + (1111, 'missing', 'Missing', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en', NULL), + (1112, 'trash', 'Trash', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2', 2, 0, NULL, 'en', NULL); UPDATE account.`user` SET passExpired = DATE_SUB(util.VN_CURDATE(), INTERVAL 1 YEAR) diff --git a/db/routines/account/procedures/user_checkName.sql b/db/routines/account/procedures/user_checkName.sql index 4f954ad00f..6fab173615 100644 --- a/db/routines/account/procedures/user_checkName.sql +++ b/db/routines/account/procedures/user_checkName.sql @@ -7,7 +7,7 @@ BEGIN * The user name must only contain lowercase letters or, starting with second * character, numbers or underscores. */ - IF vUserName NOT REGEXP '^[a-z0-9_-]*$' THEN + IF vUserName NOT REGEXP BINARY '^[a-z0-9_-]+$' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'INVALID_USER_NAME'; END IF; diff --git a/db/versions/10917-aquaPhormium/00-firstScript.sql b/db/versions/10917-aquaPhormium/00-firstScript.sql new file mode 100644 index 0000000000..436243ba55 --- /dev/null +++ b/db/versions/10917-aquaPhormium/00-firstScript.sql @@ -0,0 +1,9 @@ +UPDATE account.user +SET name = LOWER(name), + name = REPLACE(name, ' ', ''), + name = REPLACE(name, '.', ''), + name = REPLACE(name, 'ñ', 'n'), + name = REPLACE(name, '*', ''), + name = REPLACE(name, 'ç', 'z'), + name = REPLACE(name, 'ã', 'a') +WHERE NOT active; diff --git a/e2e/paths/02-client/01_create_client.spec.js b/e2e/paths/02-client/01_create_client.spec.js index 744b11a72f..e951ec784b 100644 --- a/e2e/paths/02-client/01_create_client.spec.js +++ b/e2e/paths/02-client/01_create_client.spec.js @@ -32,7 +32,7 @@ describe('Client create path', () => { await page.autocompleteSearch(selectors.createClientView.salesPerson, 'salesPerson'); await page.autocompleteSearch(selectors.createClientView.businessType, 'florist'); await page.write(selectors.createClientView.taxNumber, '74451390E'); - await page.write(selectors.createClientView.userName, 'CaptainMarvel'); + await page.write(selectors.createClientView.userName, 'captainmarvel'); await page.write(selectors.createClientView.email, 'CarolDanvers@verdnatura.es'); await page.waitToClick(selectors.createClientView.createButton); const message = await page.waitForSnackbar(); diff --git a/e2e/paths/02-client/07_edit_web_access.spec.js b/e2e/paths/02-client/07_edit_web_access.spec.js index c5e132ab7f..8758c3b051 100644 --- a/e2e/paths/02-client/07_edit_web_access.spec.js +++ b/e2e/paths/02-client/07_edit_web_access.spec.js @@ -29,7 +29,7 @@ describe('Client web access path', () => { await page.click($.enableWebAccess); await page.click($.saveButton); const enableMessage = await page.waitForSnackbar(); - await page.overwrite($.userName, 'Legion'); + await page.overwrite($.userName, 'legion'); await page.overwrite($.email, 'legion@marvel.com'); await page.click($.saveButton); const modifyMessage = await page.waitForSnackbar(); @@ -47,7 +47,7 @@ describe('Client web access path', () => { expect(modifyMessage.type).toBe('success'); expect(hasAccess).toBe('unchecked'); - expect(userName).toEqual('Legion'); + expect(userName).toEqual('legion'); expect(email).toEqual('legion@marvel.com'); // expect(logName).toEqual('Legion'); diff --git a/e2e/paths/02-client/09_add_credit.spec.js b/e2e/paths/02-client/09_add_credit.spec.js index 2365f06355..179265b0f4 100644 --- a/e2e/paths/02-client/09_add_credit.spec.js +++ b/e2e/paths/02-client/09_add_credit.spec.js @@ -34,6 +34,6 @@ describe('Client Add credit path', () => { const result = await page.waitToGetProperty(selectors.clientCredit.firstCreditText, 'innerText'); expect(result).toContain(999); - expect(result).toContain('salesAssistant'); + expect(result).toContain('salesassistant'); }); }); diff --git a/e2e/paths/02-client/19_summary.spec.js b/e2e/paths/02-client/19_summary.spec.js index b3bf43c5c1..dec8d505c1 100644 --- a/e2e/paths/02-client/19_summary.spec.js +++ b/e2e/paths/02-client/19_summary.spec.js @@ -61,7 +61,7 @@ describe('Client summary path', () => { it('should display web access details', async() => { const result = await page.waitToGetProperty(selectors.clientSummary.userName, 'innerText'); - expect(result).toContain('PetterParker'); + expect(result).toContain('petterparker'); }); it('should display business data', async() => { diff --git a/e2e/paths/05-ticket/05_tracking_state.spec.js b/e2e/paths/05-ticket/05_tracking_state.spec.js index 9ac3732872..5cfc1c9d43 100644 --- a/e2e/paths/05-ticket/05_tracking_state.spec.js +++ b/e2e/paths/05-ticket/05_tracking_state.spec.js @@ -59,7 +59,7 @@ describe('Ticket Create new tracking state path', () => { const result = await page .waitToGetProperty(selectors.createStateView.worker, 'value'); - expect(result).toEqual('salesPerson'); + expect(result).toEqual('salesperson'); }); it(`should succesfully create a valid state`, async() => { diff --git a/e2e/paths/14-account/01_create_and_basic_data.spec.js b/e2e/paths/14-account/01_create_and_basic_data.spec.js index e38d1aeecf..e2c069d800 100644 --- a/e2e/paths/14-account/01_create_and_basic_data.spec.js +++ b/e2e/paths/14-account/01_create_and_basic_data.spec.js @@ -21,7 +21,7 @@ describe('Account create and basic data path', () => { }); it('should fill the form and then save it by clicking the create button', async() => { - await page.write(selectors.accountIndex.newName, 'Remy'); + await page.write(selectors.accountIndex.newName, 'remy'); await page.write(selectors.accountIndex.newNickname, 'Gambit'); await page.write(selectors.accountIndex.newEmail, 'RemyEtienneLeBeau@verdnatura.es'); await page.autocompleteSearch(selectors.accountIndex.newRole, 'Trainee'); @@ -39,7 +39,7 @@ describe('Account create and basic data path', () => { it('should check the name is as expected', async() => { const result = await page.waitToGetProperty(selectors.accountBasicData.name, 'value'); - expect(result).toEqual('Remy'); + expect(result).toEqual('remy'); }); it('should check the nickname is as expected', async() => { diff --git a/modules/client/back/methods/client/specs/createWithUser.spec.js b/modules/client/back/methods/client/specs/createWithUser.spec.js index 074cb289a9..04fc51a265 100644 --- a/modules/client/back/methods/client/specs/createWithUser.spec.js +++ b/modules/client/back/methods/client/specs/createWithUser.spec.js @@ -3,8 +3,8 @@ const LoopBackContext = require('loopback-context'); describe('Client Create', () => { const newAccount = { - userName: 'Deadpool', - email: 'Deadpool@marvel.com', + userName: 'deadpool', + email: 'deadpool@marvel.com', fi: '16195279J', name: 'Wade', socialName: 'DEADPOOL MARVEL', @@ -31,7 +31,7 @@ describe('Client Create', () => { }); }); - it(`should not find Deadpool as he's not created yet`, async() => { + it(`should not find deadpool as he's not created yet`, async() => { const tx = await models.Client.beginTransaction({}); try { diff --git a/modules/client/back/models/specs/client.spec.js b/modules/client/back/models/specs/client.spec.js index bf134fbf90..1b51323045 100644 --- a/modules/client/back/models/specs/client.spec.js +++ b/modules/client/back/models/specs/client.spec.js @@ -31,8 +31,8 @@ describe('Client Model', () => { await models.Client.notifyAssignment(instance, previousWorkerId, currentWorkerId); - expect(chatModel.send).toHaveBeenCalledWith(ctx, '@DavidCharlesHaller', `Client assignment has changed`); - expect(chatModel.send).toHaveBeenCalledWith(ctx, '@HankPym', `Client assignment has changed`); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '@davidcharleshaller', `Client assignment has changed`); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '@hankpym', `Client assignment has changed`); }); it('should call to the Chat send() method for the previous worker', async() => { @@ -40,7 +40,7 @@ describe('Client Model', () => { await models.Client.notifyAssignment(instance, null, currentWorkerId); - expect(chatModel.send).toHaveBeenCalledWith(ctx, '@HankPym', `Client assignment has changed`); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '@hankpym', `Client assignment has changed`); }); it('should call to the Chat send() method for the current worker', async() => { @@ -48,7 +48,7 @@ describe('Client Model', () => { await models.Client.notifyAssignment(instance, previousWorkerId, null); - expect(chatModel.send).toHaveBeenCalledWith(ctx, '@DavidCharlesHaller', `Client assignment has changed`); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '@davidcharleshaller', `Client assignment has changed`); }); }); diff --git a/modules/worker/back/methods/worker/specs/activeWithInheritedRole.spec.js b/modules/worker/back/methods/worker/specs/activeWithInheritedRole.spec.js index 580e073513..cf1eafa23c 100644 --- a/modules/worker/back/methods/worker/specs/activeWithInheritedRole.spec.js +++ b/modules/worker/back/methods/worker/specs/activeWithInheritedRole.spec.js @@ -6,7 +6,7 @@ describe('Worker activeWithInheritedRole', () => { allRolesCount = await app.models.VnRole.count(); }); - it('should return the workers with an inherited role of salesPerson', async() => { + it('should return the workers with an inherited role of salesperson', async() => { const filter = {where: {role: 'salesPerson'}}; const result = await app.models.Worker.activeWithInheritedRole(filter); diff --git a/modules/worker/back/methods/worker/specs/new.spec.js b/modules/worker/back/methods/worker/specs/new.spec.js index d3e9cb9d0d..66959e0a79 100644 --- a/modules/worker/back/methods/worker/specs/new.spec.js +++ b/modules/worker/back/methods/worker/specs/new.spec.js @@ -20,7 +20,7 @@ describe('Worker new', () => { const employeeId = 1; const defaultWorker = { fi: '78457139E', - name: 'DEFAULTERWORKER', + name: 'defaulterworker', firstName: 'DEFAULT', lastNames: 'WORKER', email: 'defaultWorker@mydomain.com', From 09923d2509146c9b9ac42f20b6fac3f0ba90a397 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Mon, 4 Mar 2024 18:35:36 +0100 Subject: [PATCH 05/78] refs #6964 feat:advice for olderItem --- .../methods/item-shelving/hasItemOlder.js | 44 +++++++++++++++++++ modules/item/back/models/item-shelving.js | 1 + 2 files changed, 45 insertions(+) create mode 100644 modules/item/back/methods/item-shelving/hasItemOlder.js diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js new file mode 100644 index 0000000000..48b3b357ac --- /dev/null +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -0,0 +1,44 @@ +module.exports = Self => { + Self.remoteMethod('hasItemOlder', { + description: 'Get boolean if any item of the shelving has older created in another shelving ', + accessType: 'WRITE', + accepts: [{ + arg: 'shelvingFk', + type: 'string', + required: true, + description: 'Shelving code' + }, + { + arg: 'parking', + type: 'string', + required: true, + description: 'Parking code' + }], + returns: { + type: 'boolean', + root: true + }, + http: { + path: `/hasItemOlder`, + verb: 'GET' + } + }); + + Self.hasItemOlder = async(shelvingFk, parking, options) => { + const result = await Self.rawSql(` + SELECT COUNT(ish.id) + FROM vn.itemShelving ish + JOIN ( + SELECT ish.itemFk, created,shelvingFk, p.code + FROM vn.itemShelving ish + JOIN vn.shelving s ON ish.shelvingFk = s.code + JOIN vn.parking p ON p.id = s.parkingFk + WHERE ish.shelvingFk = ? + )sub ON sub.itemFK = ish.itemFk + JOIN vn.shelving s ON s.code = ish.shelvingFk + JOIN vn.parking p ON p.id = s.parkingFk + WHERE ish.shelvingFk <> ? AND sub.created > ish.created AND p.code <> ?`, + [shelvingFk, shelvingFk, parking]); + return result[0]['COUNT(ish.id)'] > 0; + }; +}; diff --git a/modules/item/back/models/item-shelving.js b/modules/item/back/models/item-shelving.js index c031d82714..563dffe66b 100644 --- a/modules/item/back/models/item-shelving.js +++ b/modules/item/back/models/item-shelving.js @@ -2,4 +2,5 @@ module.exports = Self => { require('../methods/item-shelving/deleteItemShelvings')(Self); require('../methods/item-shelving/upsertItem')(Self); require('../methods/item-shelving/getInventory')(Self); + require('../methods/item-shelving/hasItemOlder')(Self); }; From 9a0b4ef6744640b00dca8f6bdfb4bac1dd7812c5 Mon Sep 17 00:00:00 2001 From: robert Date: Tue, 5 Mar 2024 08:36:19 +0100 Subject: [PATCH 06/78] feat: refs #6738 change table vn2008 to vn --- .../vn2008/views/Proveedores_cargueras.sql | 5 ++++ db/routines/vn2008/views/Tramos.sql | 6 +++++ db/routines/vn2008/views/dock.sql | 8 ++++++ .../10894-crimsonEucalyptus/01-Tramos.sql | 4 ++- .../10894-crimsonEucalyptus/02-dock.sql | 3 ++- .../03-Proveedores_cargueras.sql | 5 +++- .../10894-crimsonEucalyptus/04-Permisos.sql | 25 +++++++++++++++++++ 7 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 db/routines/vn2008/views/Proveedores_cargueras.sql create mode 100644 db/routines/vn2008/views/Tramos.sql create mode 100644 db/routines/vn2008/views/dock.sql create mode 100644 db/versions/10894-crimsonEucalyptus/04-Permisos.sql diff --git a/db/routines/vn2008/views/Proveedores_cargueras.sql b/db/routines/vn2008/views/Proveedores_cargueras.sql new file mode 100644 index 0000000000..a1aa2f7f40 --- /dev/null +++ b/db/routines/vn2008/views/Proveedores_cargueras.sql @@ -0,0 +1,5 @@ +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`Proveedores_cargueras` +AS SELECT `fs`.`id` AS `Id_Proveedor` +FROM `vn`.`freightSupplier` `fs` diff --git a/db/routines/vn2008/views/Tramos.sql b/db/routines/vn2008/views/Tramos.sql new file mode 100644 index 0000000000..eda3ff0dbd --- /dev/null +++ b/db/routines/vn2008/views/Tramos.sql @@ -0,0 +1,6 @@ +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`Tramos` +AS SELECT `s`.`id` AS `id`, + `s`.`isFree` AS `Tramo` +FROM `vn`.`section` `s` \ No newline at end of file diff --git a/db/routines/vn2008/views/dock.sql b/db/routines/vn2008/views/dock.sql new file mode 100644 index 0000000000..753e38a6ce --- /dev/null +++ b/db/routines/vn2008/views/dock.sql @@ -0,0 +1,8 @@ +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`dock` +AS SELECT `d`.`id` AS `id`, + `d`.`code` AS `code`, + `d`.`xPos` AS `xPos`, + `d`.`yPos` AS `yPos` +FROM `vn`.`dock` `d` diff --git a/db/versions/10894-crimsonEucalyptus/01-Tramos.sql b/db/versions/10894-crimsonEucalyptus/01-Tramos.sql index f2ac17ad11..ad8e2f9c42 100644 --- a/db/versions/10894-crimsonEucalyptus/01-Tramos.sql +++ b/db/versions/10894-crimsonEucalyptus/01-Tramos.sql @@ -1,3 +1,5 @@ -- Place your SQL code here -ALTER TABLE IF EXISTS `vn2008`.`Tramos` RENAME `vn`.``; +ALTER TABLE IF EXISTS `vn2008`.`Tramos` RENAME `vn`.`section`; +ALTER TABLE IF EXISTS `vn`.`section` +CHANGE COLUMN IF EXISTS `Tramo` `section` time NOT NULL; \ No newline at end of file diff --git a/db/versions/10894-crimsonEucalyptus/02-dock.sql b/db/versions/10894-crimsonEucalyptus/02-dock.sql index 1816ce18ba..23f8f0705d 100644 --- a/db/versions/10894-crimsonEucalyptus/02-dock.sql +++ b/db/versions/10894-crimsonEucalyptus/02-dock.sql @@ -1,2 +1,3 @@ -- Place your SQL code here -ALTER TABLE IF EXISTS `vn2008`.`dock` RENAME `vn`.``; \ No newline at end of file +ALTER TABLE IF EXISTS `vn2008`.`dock` RENAME `vn`.`dock`; + diff --git a/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql b/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql index 45bac972cc..0de477f882 100644 --- a/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql +++ b/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql @@ -1,2 +1,5 @@ -- Place your SQL code here -ALTER TABLE IF EXISTS `vn2008`.`Proveedores_cargueras` RENAME `vn`.``; +ALTER TABLE IF EXISTS `vn2008`.`Proveedores_cargueras` RENAME `vn`.`freightSupplier`; + +ALTER TABLE IF EXISTS `vn`.`freightSupplier` +CHANGE COLUMN IF EXISTS `Id_Proveedor` `supplierFk` int(10) unsigned NOT NULL; \ No newline at end of file diff --git a/db/versions/10894-crimsonEucalyptus/04-Permisos.sql b/db/versions/10894-crimsonEucalyptus/04-Permisos.sql new file mode 100644 index 0000000000..441a6ff8e1 --- /dev/null +++ b/db/versions/10894-crimsonEucalyptus/04-Permisos.sql @@ -0,0 +1,25 @@ +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`Tramos` AS +SELECT 1; + +GRANT SELECT ON TABLE vn2008.Tramos TO `employee`; +GRANT SELECT ON TABLE vn.section TO `employee`; + +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`dock` AS +SELECT 1; + +GRANT SELECT,UPDATE ON TABLE vn2008.dock TO `employee`; +GRANT SELECT ON TABLE vn2008.dock TO `grafana`; +GRANT SELECT,UPDATE ON TABLE vn.dock TO `employee`; +GRANT SELECT ON TABLE vn.dock TO `grafana`; + +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`Proveedores_cargueras` AS +SELECT 1; + +GRANT SELECT ON TABLE vn2008.Proveedores_cargueras TO `buyer`; +GRANT SELECT ON TABLE vn.freightSupplier TO `buyer`; \ No newline at end of file From dc343a7e3bd4aaaadabc24a0863b95dacd587c49 Mon Sep 17 00:00:00 2001 From: robert Date: Tue, 5 Mar 2024 09:33:48 +0100 Subject: [PATCH 07/78] feat: refs #6738 delete vn2008.dock --- db/routines/vn2008/views/dock.sql | 8 -------- db/versions/10894-crimsonEucalyptus/02-dock.sql | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 db/routines/vn2008/views/dock.sql diff --git a/db/routines/vn2008/views/dock.sql b/db/routines/vn2008/views/dock.sql deleted file mode 100644 index 753e38a6ce..0000000000 --- a/db/routines/vn2008/views/dock.sql +++ /dev/null @@ -1,8 +0,0 @@ -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`dock` -AS SELECT `d`.`id` AS `id`, - `d`.`code` AS `code`, - `d`.`xPos` AS `xPos`, - `d`.`yPos` AS `yPos` -FROM `vn`.`dock` `d` diff --git a/db/versions/10894-crimsonEucalyptus/02-dock.sql b/db/versions/10894-crimsonEucalyptus/02-dock.sql index 23f8f0705d..acce9f37cd 100644 --- a/db/versions/10894-crimsonEucalyptus/02-dock.sql +++ b/db/versions/10894-crimsonEucalyptus/02-dock.sql @@ -1,3 +1,3 @@ -- Place your SQL code here -ALTER TABLE IF EXISTS `vn2008`.`dock` RENAME `vn`.`dock`; - +ALTER TABLE IF EXISTS `vn2008`.`dock` RENAME `vn2008`.`dock__`; +ALTER TABLE IF EXISTS vn2008.dock__ COMMENT='refs #6371 deprecated 2024-03-05'; \ No newline at end of file From d668ae9904c3680a86bb799626e44dec5ef506af Mon Sep 17 00:00:00 2001 From: robert Date: Tue, 5 Mar 2024 09:34:30 +0100 Subject: [PATCH 08/78] refs #6738 --- db/versions/10894-crimsonEucalyptus/04-Permisos.sql | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/db/versions/10894-crimsonEucalyptus/04-Permisos.sql b/db/versions/10894-crimsonEucalyptus/04-Permisos.sql index 441a6ff8e1..a7defb75f2 100644 --- a/db/versions/10894-crimsonEucalyptus/04-Permisos.sql +++ b/db/versions/10894-crimsonEucalyptus/04-Permisos.sql @@ -6,16 +6,6 @@ SELECT 1; GRANT SELECT ON TABLE vn2008.Tramos TO `employee`; GRANT SELECT ON TABLE vn.section TO `employee`; -CREATE OR REPLACE DEFINER=`root`@`localhost` - SQL SECURITY DEFINER - VIEW `vn2008`.`dock` AS -SELECT 1; - -GRANT SELECT,UPDATE ON TABLE vn2008.dock TO `employee`; -GRANT SELECT ON TABLE vn2008.dock TO `grafana`; -GRANT SELECT,UPDATE ON TABLE vn.dock TO `employee`; -GRANT SELECT ON TABLE vn.dock TO `grafana`; - CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn2008`.`Proveedores_cargueras` AS From 5f16a9827c9fecc542a3329b98846541b14dae25 Mon Sep 17 00:00:00 2001 From: robert Date: Tue, 5 Mar 2024 14:17:58 +0100 Subject: [PATCH 09/78] feat: refs #6738 move file version --- db/routines/vn2008/views/Proveedores_cargueras.sql | 2 +- db/routines/vn2008/views/Tramos.sql | 2 +- .../00-firstScript.sql | 0 .../01-Tramos.sql | 0 .../{10894-crimsonEucalyptus => 10930-wheatDendro}/02-dock.sql | 0 .../03-Proveedores_cargueras.sql | 0 .../04-Permisos.sql | 0 7 files changed, 2 insertions(+), 2 deletions(-) rename db/versions/{10894-crimsonEucalyptus => 10930-wheatDendro}/00-firstScript.sql (100%) rename db/versions/{10894-crimsonEucalyptus => 10930-wheatDendro}/01-Tramos.sql (100%) rename db/versions/{10894-crimsonEucalyptus => 10930-wheatDendro}/02-dock.sql (100%) rename db/versions/{10894-crimsonEucalyptus => 10930-wheatDendro}/03-Proveedores_cargueras.sql (100%) rename db/versions/{10894-crimsonEucalyptus => 10930-wheatDendro}/04-Permisos.sql (100%) diff --git a/db/routines/vn2008/views/Proveedores_cargueras.sql b/db/routines/vn2008/views/Proveedores_cargueras.sql index a1aa2f7f40..51a02556ab 100644 --- a/db/routines/vn2008/views/Proveedores_cargueras.sql +++ b/db/routines/vn2008/views/Proveedores_cargueras.sql @@ -1,5 +1,5 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn2008`.`Proveedores_cargueras` -AS SELECT `fs`.`id` AS `Id_Proveedor` +AS SELECT `fs`.`supplierFk` AS `Id_Proveedor` FROM `vn`.`freightSupplier` `fs` diff --git a/db/routines/vn2008/views/Tramos.sql b/db/routines/vn2008/views/Tramos.sql index eda3ff0dbd..47a2cb653e 100644 --- a/db/routines/vn2008/views/Tramos.sql +++ b/db/routines/vn2008/views/Tramos.sql @@ -2,5 +2,5 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn2008`.`Tramos` AS SELECT `s`.`id` AS `id`, - `s`.`isFree` AS `Tramo` + `s`.`section` AS `Tramo` FROM `vn`.`section` `s` \ No newline at end of file diff --git a/db/versions/10894-crimsonEucalyptus/00-firstScript.sql b/db/versions/10930-wheatDendro/00-firstScript.sql similarity index 100% rename from db/versions/10894-crimsonEucalyptus/00-firstScript.sql rename to db/versions/10930-wheatDendro/00-firstScript.sql diff --git a/db/versions/10894-crimsonEucalyptus/01-Tramos.sql b/db/versions/10930-wheatDendro/01-Tramos.sql similarity index 100% rename from db/versions/10894-crimsonEucalyptus/01-Tramos.sql rename to db/versions/10930-wheatDendro/01-Tramos.sql diff --git a/db/versions/10894-crimsonEucalyptus/02-dock.sql b/db/versions/10930-wheatDendro/02-dock.sql similarity index 100% rename from db/versions/10894-crimsonEucalyptus/02-dock.sql rename to db/versions/10930-wheatDendro/02-dock.sql diff --git a/db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql b/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql similarity index 100% rename from db/versions/10894-crimsonEucalyptus/03-Proveedores_cargueras.sql rename to db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql diff --git a/db/versions/10894-crimsonEucalyptus/04-Permisos.sql b/db/versions/10930-wheatDendro/04-Permisos.sql similarity index 100% rename from db/versions/10894-crimsonEucalyptus/04-Permisos.sql rename to db/versions/10930-wheatDendro/04-Permisos.sql From 10c2d25cbd0ad65163e140d6183e0711cfc891ad Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 12 Mar 2024 12:57:34 +0100 Subject: [PATCH 10/78] feat: refs #6492 create procedures & grant privileges --- db/dump/fixtures.before.sql | 26 +++++++- .../vn/procedures/addAccountConciliation.sql | 66 +++++++++++++++++++ db/routines/vn/procedures/agencyVolume.sql | 38 +++++++++++ .../00-addConciliationConfig.sql | 10 +++ .../01-addConciliationConfig.vn.sql | 2 + .../10948-azureSalal/02-grantPrivileges.sql | 6 ++ 6 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 db/routines/vn/procedures/addAccountConciliation.sql create mode 100644 db/routines/vn/procedures/agencyVolume.sql create mode 100644 db/versions/10948-azureSalal/00-addConciliationConfig.sql create mode 100644 db/versions/10948-azureSalal/01-addConciliationConfig.vn.sql create mode 100644 db/versions/10948-azureSalal/02-grantPrivileges.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 4ad007f5ce..77439aaf3d 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -3732,4 +3732,28 @@ UPDATE vn.saleTracking SET stateFk = 26 WHERE id = 5; INSERT INTO vn.report (name) VALUES ('LabelCollection'); INSERT INTO vn.parkingLog(originFk, userFk, `action`, creationDate, description, changedModel,oldInstance, newInstance, changedModelId, changedModelValue) - VALUES(1, 18, 'update', util.VN_CURDATE(), NULL, 'SaleGroup', '{"parkingFk":null}', '{"parkingFk":1}', 1, NULL); \ No newline at end of file + VALUES(1, 18, 'update', util.VN_CURDATE(), NULL, 'SaleGroup', '{"parkingFk":null}', '{"parkingFk":1}', 1, NULL); + +INSERT INTO `vn`.`accountReconciliation` ( + supplierAccountFk, + operationDated, + valueDated, + amount, + concept, + debitCredit, + calculatedCode, + created +) + VALUES + (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',19.36,'BEL 1',1,'2','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',30226.43,'BEL 2',1,'1','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',118.81,'RCBO',1,'10','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ',1,'12','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ',1,'12','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',2149.71,'RCBO.AMAZON',1,'122','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',3210.5,'RCBO.VOLVO',1,'121','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',6513.7,'RCBO.ENERPLUS',1,'120','2023-12-14 08:39:53.000'); + +INSERT INTO `vn`.`accountReconciliationConfig`(debitCredit, debitCredit2, currencyFk, warehouseFk) + VALUES + (1, 2, 1, 1); \ No newline at end of file diff --git a/db/routines/vn/procedures/addAccountConciliation.sql b/db/routines/vn/procedures/addAccountConciliation.sql new file mode 100644 index 0000000000..0db018109c --- /dev/null +++ b/db/routines/vn/procedures/addAccountConciliation.sql @@ -0,0 +1,66 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`addAccountReconciliation`() +BEGIN +/** + * Updates duplicate records in the accountReconciliation table, + * by assigning them a new identifier and then inserts a new entry in the till table. + */ + UPDATE accountReconciliation ar + JOIN ( + SELECT id, + calculatedId, + CONCAT( + calculatedId, + '(', + ROW_NUMBER() OVER (PARTITION BY calculatedId ORDER BY id), + ')' + ) newId + FROM accountReconciliation + WHERE calculatedId IN ( + SELECT calculatedId + FROM accountReconciliation + GROUP BY calculatedId + HAVING COUNT(*) > 1 + ) + ORDER BY calculatedId, id + ) sub2 ON ar.id = sub2.id + SET ar.calculatedId = sub2.newId; + + INSERT INTO till( + dated, + isAccountable, + serie, + concept, + `in`, + `out`, + bankFk, + companyFk, + warehouseFk, + supplierAccountFk, + calculatedCode, + InForeignValue, + OutForeignValue, + workerFk + ) + SELECT ar.operationDate dated, + TRUE isAccountable, + 'MB' serie, + ar.concept concept, + @totalIn := IF(ar.debitCredit = arc.debitCredit2 AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `in`, + @totalOut := IF(ar.debitCredit = arc.debitCredit AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `out`, + a.id bankFk, + sa.supplierFk companyFk, + arc.warehouseFk warehouseFk, + ar.supplierAccountFk supplierAccountFk, + ar.calculatedId calculatedCode, + @totalIn InForeignValue, + @totalOut OutForeignValue, + account.myUser_getId() user + FROM accountReconciliation ar + JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk + JOIN accounting a ON a.id = sa.accountingFk + LEFT JOIN till t ON t.calculatedCode = ar.calculatedId + JOIN accountReconciliationConfig arc + WHERE t.id IS NULL; +END$$ +DELIMITER ; \ No newline at end of file diff --git a/db/routines/vn/procedures/agencyVolume.sql b/db/routines/vn/procedures/agencyVolume.sql new file mode 100644 index 0000000000..2b92eae44f --- /dev/null +++ b/db/routines/vn/procedures/agencyVolume.sql @@ -0,0 +1,38 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`agencyVolume`() +BEGIN +/** + * Calcula y presenta información sobre volúmenes de expediciones y empaques + * para agencias que no son propias durante un período específico. + */ + DECLARE vStarted DATETIME DEFAULT util.VN_CURDATE(); + DECLARE vEnded DATETIME DEFAULT util.dayEnd(util.VN_CURDATE()); + + SELECT ag.id agency_id, + CONCAT(RPAD(c.country, 16,' _') ,' ',ag.name) Agencia, + COUNT(*) expediciones, + SUM(t.packages) Bultos, + SUM(tpe.boxes) Faltan + FROM ticket t + JOIN warehouse w ON w.id = t.warehouseFk + JOIN country c ON w.countryFk = c.id + JOIN address a ON a.id = t.addressFk + JOIN agencyMode am ON am.id = t.agencyModeFk + JOIN agency ag ON ag.id = am.agencyFk + JOIN ( + SELECT sv.ticketFk, + CEIL(1000 * SUM(sv.volume) / vc.standardFlowerBox) + FROM ticket t + JOIN saleVolume sv ON sv.ticketFk = t.id + JOIN volumeConfig vc + WHERE t.shipped BETWEEN vStarted AND vEnded + AND (t.packages IS NULL OR NOT t.packages) + GROUP BY t.id + ) tpe ON tpe.ticketFk = t.id + WHERE t.shipped BETWEEN vStarted AND vEnded + AND NOT ag.isOwn + GROUP BY ag.id + ORDER BY Agencia; + +END$$ +DELIMITER ; \ No newline at end of file diff --git a/db/versions/10948-azureSalal/00-addConciliationConfig.sql b/db/versions/10948-azureSalal/00-addConciliationConfig.sql new file mode 100644 index 0000000000..efb45b5fa2 --- /dev/null +++ b/db/versions/10948-azureSalal/00-addConciliationConfig.sql @@ -0,0 +1,10 @@ + CREATE OR REPLACE TABLE `vn`.`accountReconciliationConfig` ( + `id` INT AUTO_INCREMENT, + `debitCredit` INT(6), + `debitCredit2` INT(6), + `currencyFk` TINYINT(3) unsigned, + `warehouseFk` SMALLINT(6) unsigned, + PRIMARY KEY (`id`), + CONSTRAINT `account_fk_currency` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`), + CONSTRAINT `account_fk_warehouse` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; \ No newline at end of file diff --git a/db/versions/10948-azureSalal/01-addConciliationConfig.vn.sql b/db/versions/10948-azureSalal/01-addConciliationConfig.vn.sql new file mode 100644 index 0000000000..db2e1ba0ae --- /dev/null +++ b/db/versions/10948-azureSalal/01-addConciliationConfig.vn.sql @@ -0,0 +1,2 @@ +INSERT INTO `vn`.`accountReconciliationConfig`(debitCredit, debitCredit2, currencyFk, warehouseFk) + VALUES (1, 2, 1, 1); \ No newline at end of file diff --git a/db/versions/10948-azureSalal/02-grantPrivileges.sql b/db/versions/10948-azureSalal/02-grantPrivileges.sql new file mode 100644 index 0000000000..0e786e3e4f --- /dev/null +++ b/db/versions/10948-azureSalal/02-grantPrivileges.sql @@ -0,0 +1,6 @@ +REVOKE EXECUTE ON PROCEDURE `agencia_volume` FROM `agency`; +GRANT EXECUTE ON PROCEDURE `agencyVolume` TO `agency`; + +REVOKE EXECUTE ON PROCEDURE `account_conciliacion_add` FROM `financial`; +GRANT EXECUTE ON PROCEDURE `addAccountConciliation` TO `financial`; + From 9e596e65256cef5de94b5ea2401f41c56b647ce7 Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 12 Mar 2024 15:27:09 +0100 Subject: [PATCH 11/78] fix: refs #6492 file names --- ...ciliation.sql => addAccountReconciliation.sql} | 0 db/routines/vn/procedures/agencyVolume.sql | 4 ++-- ...nConfig.sql => 00-addReconciliationConfig.sql} | 0 ...g.vn.sql => 01-addReconciliationConfig.vn.sql} | 0 .../10948-azureSalal/02-grantPrivileges.sql | 15 +++++++++++---- 5 files changed, 13 insertions(+), 6 deletions(-) rename db/routines/vn/procedures/{addAccountConciliation.sql => addAccountReconciliation.sql} (100%) rename db/versions/10948-azureSalal/{00-addConciliationConfig.sql => 00-addReconciliationConfig.sql} (100%) rename db/versions/10948-azureSalal/{01-addConciliationConfig.vn.sql => 01-addReconciliationConfig.vn.sql} (100%) diff --git a/db/routines/vn/procedures/addAccountConciliation.sql b/db/routines/vn/procedures/addAccountReconciliation.sql similarity index 100% rename from db/routines/vn/procedures/addAccountConciliation.sql rename to db/routines/vn/procedures/addAccountReconciliation.sql diff --git a/db/routines/vn/procedures/agencyVolume.sql b/db/routines/vn/procedures/agencyVolume.sql index 2b92eae44f..295ae50aeb 100644 --- a/db/routines/vn/procedures/agencyVolume.sql +++ b/db/routines/vn/procedures/agencyVolume.sql @@ -2,8 +2,8 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`agencyVolume`() BEGIN /** - * Calcula y presenta información sobre volúmenes de expediciones y empaques - * para agencias que no son propias durante un período específico. + * Calculates and presents information on shipment and packaging volumes + * for agencies that are not owned for a specific period. */ DECLARE vStarted DATETIME DEFAULT util.VN_CURDATE(); DECLARE vEnded DATETIME DEFAULT util.dayEnd(util.VN_CURDATE()); diff --git a/db/versions/10948-azureSalal/00-addConciliationConfig.sql b/db/versions/10948-azureSalal/00-addReconciliationConfig.sql similarity index 100% rename from db/versions/10948-azureSalal/00-addConciliationConfig.sql rename to db/versions/10948-azureSalal/00-addReconciliationConfig.sql diff --git a/db/versions/10948-azureSalal/01-addConciliationConfig.vn.sql b/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql similarity index 100% rename from db/versions/10948-azureSalal/01-addConciliationConfig.vn.sql rename to db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql diff --git a/db/versions/10948-azureSalal/02-grantPrivileges.sql b/db/versions/10948-azureSalal/02-grantPrivileges.sql index 0e786e3e4f..d6853f7592 100644 --- a/db/versions/10948-azureSalal/02-grantPrivileges.sql +++ b/db/versions/10948-azureSalal/02-grantPrivileges.sql @@ -1,6 +1,13 @@ -REVOKE EXECUTE ON PROCEDURE `agencia_volume` FROM `agency`; -GRANT EXECUTE ON PROCEDURE `agencyVolume` TO `agency`; +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`agencyVolume`() +BEGIN +END; -REVOKE EXECUTE ON PROCEDURE `account_conciliacion_add` FROM `financial`; -GRANT EXECUTE ON PROCEDURE `addAccountConciliation` TO `financial`; +REVOKE EXECUTE ON PROCEDURE `vn2008`.`agencia_volume` FROM `agency`; +GRANT EXECUTE ON PROCEDURE `vn`.`agencyVolume` TO `agency`; +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`addAccountReconciliation`() +BEGIN +END; + +REVOKE EXECUTE ON PROCEDURE `vn2008`.`account_conciliacion_add` FROM `financial`; +GRANT EXECUTE ON PROCEDURE `vn`.`addAccountReconciliation` TO `financial`; From a6de9fd370899d82e3e391a9bac8a83a6182c777 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 13 Mar 2024 07:19:06 +0100 Subject: [PATCH 12/78] feat: refs #6738 modificar a nombres propuestos --- db/routines/vn2008/views/Proveedores_cargueras.sql | 2 +- db/routines/vn2008/views/Tramos.sql | 2 +- db/versions/10930-wheatDendro/01-Tramos.sql | 4 ++-- db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql | 4 ++-- db/versions/10930-wheatDendro/04-Permisos.sql | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/db/routines/vn2008/views/Proveedores_cargueras.sql b/db/routines/vn2008/views/Proveedores_cargueras.sql index 51a02556ab..c1dc6ad236 100644 --- a/db/routines/vn2008/views/Proveedores_cargueras.sql +++ b/db/routines/vn2008/views/Proveedores_cargueras.sql @@ -2,4 +2,4 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn2008`.`Proveedores_cargueras` AS SELECT `fs`.`supplierFk` AS `Id_Proveedor` -FROM `vn`.`freightSupplier` `fs` +FROM `vn`.`supplierFreight` `fs` diff --git a/db/routines/vn2008/views/Tramos.sql b/db/routines/vn2008/views/Tramos.sql index 47a2cb653e..6919a610b2 100644 --- a/db/routines/vn2008/views/Tramos.sql +++ b/db/routines/vn2008/views/Tramos.sql @@ -3,4 +3,4 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` VIEW `vn2008`.`Tramos` AS SELECT `s`.`id` AS `id`, `s`.`section` AS `Tramo` -FROM `vn`.`section` `s` \ No newline at end of file +FROM `vn`.`timeSlots` `s` \ No newline at end of file diff --git a/db/versions/10930-wheatDendro/01-Tramos.sql b/db/versions/10930-wheatDendro/01-Tramos.sql index ad8e2f9c42..595aa5dcbe 100644 --- a/db/versions/10930-wheatDendro/01-Tramos.sql +++ b/db/versions/10930-wheatDendro/01-Tramos.sql @@ -1,5 +1,5 @@ -- Place your SQL code here -ALTER TABLE IF EXISTS `vn2008`.`Tramos` RENAME `vn`.`section`; +ALTER TABLE IF EXISTS `vn2008`.`Tramos` RENAME `vn`.`timeSlots`; -ALTER TABLE IF EXISTS `vn`.`section` +ALTER TABLE IF EXISTS `vn`.`timeSlots` CHANGE COLUMN IF EXISTS `Tramo` `section` time NOT NULL; \ No newline at end of file diff --git a/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql b/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql index 0de477f882..148174215a 100644 --- a/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql +++ b/db/versions/10930-wheatDendro/03-Proveedores_cargueras.sql @@ -1,5 +1,5 @@ -- Place your SQL code here -ALTER TABLE IF EXISTS `vn2008`.`Proveedores_cargueras` RENAME `vn`.`freightSupplier`; +ALTER TABLE IF EXISTS `vn2008`.`Proveedores_cargueras` RENAME `vn`.`supplierFreight`; -ALTER TABLE IF EXISTS `vn`.`freightSupplier` +ALTER TABLE IF EXISTS `vn`.`supplierFreight` CHANGE COLUMN IF EXISTS `Id_Proveedor` `supplierFk` int(10) unsigned NOT NULL; \ No newline at end of file diff --git a/db/versions/10930-wheatDendro/04-Permisos.sql b/db/versions/10930-wheatDendro/04-Permisos.sql index a7defb75f2..0c445755ba 100644 --- a/db/versions/10930-wheatDendro/04-Permisos.sql +++ b/db/versions/10930-wheatDendro/04-Permisos.sql @@ -4,7 +4,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SELECT 1; GRANT SELECT ON TABLE vn2008.Tramos TO `employee`; -GRANT SELECT ON TABLE vn.section TO `employee`; +GRANT SELECT ON TABLE vn.timeSlots TO `employee`; CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER @@ -12,4 +12,4 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SELECT 1; GRANT SELECT ON TABLE vn2008.Proveedores_cargueras TO `buyer`; -GRANT SELECT ON TABLE vn.freightSupplier TO `buyer`; \ No newline at end of file +GRANT SELECT ON TABLE vn.supplierFreight TO `buyer`; \ No newline at end of file From ff459ea3be23e076474551f90d18a0fdaf158e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Wed, 13 Mar 2024 12:18:43 +0100 Subject: [PATCH 13/78] fix: closeTicket idem salix refs #6549 --- db/routines/vn/procedures/invoiceOut_new.sql | 9 ++- .../10949-limeLaurel/00-firstScript.sql | 5 ++ .../ticket/back/methods/ticket/closeAll.js | 67 +++++++++++++++++++ .../assets/css/import.js | 11 +++ .../invoice-ticket-closure.html | 13 ++++ .../invoice-ticket-closure.js | 19 ++++++ .../invoice-ticket-closure/locale/en.yml | 5 ++ .../invoice-ticket-closure/locale/es.yml | 4 ++ 8 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 db/versions/10949-limeLaurel/00-firstScript.sql create mode 100644 print/templates/email/invoice-ticket-closure/assets/css/import.js create mode 100644 print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html create mode 100644 print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js create mode 100644 print/templates/email/invoice-ticket-closure/locale/en.yml create mode 100644 print/templates/email/invoice-ticket-closure/locale/es.yml diff --git a/db/routines/vn/procedures/invoiceOut_new.sql b/db/routines/vn/procedures/invoiceOut_new.sql index 8c35ce75ff..1b486df864 100644 --- a/db/routines/vn/procedures/invoiceOut_new.sql +++ b/db/routines/vn/procedures/invoiceOut_new.sql @@ -68,16 +68,21 @@ BEGIN DELETE ti.* FROM tmp.ticketToInvoice ti JOIN ticket t ON t.id = ti.id + LEFT JOIN address a ON a.id = t.addressFk JOIN sale s ON s.ticketFk = t.id JOIN item i ON i.id = s.itemFk JOIN supplier su ON su.id = t.companyFk JOIN client c ON c.id = t.clientFk - LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id AND itc.countryFk = su.countryFk + LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id + AND itc.countryFk = su.countryFk WHERE (YEAR(t.shipped) < 2001 AND t.isDeleted) OR c.isTaxDataChecked = FALSE OR t.isDeleted OR c.hasToInvoice = FALSE - OR itc.id IS NULL; + OR itc.id IS NULL + OR a.id IS NULL + OR (vTaxArea = 'WORLD' + AND (a.customsAgentFk IS NULL OR a.incotermsFk IS NULL)); SELECT SUM(s.quantity * s.price * (100 - s.discount)/100) <> 0 INTO vIsAnySaleToInvoice diff --git a/db/versions/10949-limeLaurel/00-firstScript.sql b/db/versions/10949-limeLaurel/00-firstScript.sql new file mode 100644 index 0000000000..0e2fdaf0c9 --- /dev/null +++ b/db/versions/10949-limeLaurel/00-firstScript.sql @@ -0,0 +1,5 @@ +INSERT INTO util.notification (id, name, description) + SELECT MAX(id) + 1, + 'invoice-ticket-closure', + 'Tickets not invoiced during the nightly closure ticket process' + FROM util.notification; diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js index 46c45aa927..829889e9c4 100644 --- a/modules/ticket/back/methods/ticket/closeAll.js +++ b/modules/ticket/back/methods/ticket/closeAll.js @@ -58,6 +58,73 @@ module.exports = Self => { GROUP BY t.id `, [toDate, toDate]); + await Self.rawSql(` + WITH ticketNotInvoiceable AS( + SELECT JSON_OBJECT( + 'tickets', + JSON_ARRAYAGG( + JSON_OBJECT( + 'ticketId', ticketFk, + 'reason', + LEFT(reason,LENGTH(reason) - 2) + ) + ))errors + FROM ( + SELECT ticketFk, + CONCAT_WS('', + IF(hasErrorToInvoice, 'Facturar, ', ''), + IF(hasErrorTaxDataChecked, 'Datos comprobados, ', ''), + IF(hasErrorDeleted, 'Eliminado, ', ''), + IF(hasErrorItemTaxCountry, 'Impuesto no informado, ', ''), + IF(hasErrorAddress, 'Sin dirección, ', ''), + IF(hasErrorInfoTaxAreaWorld, 'Datos exportaciones, ', '')) reason + FROM ( + SELECT t.id ticketFk, + SUM(NOT c.hasToInvoice) hasErrorToInvoice, + SUM(NOT c.isTaxDataChecked) hasErrorTaxDataChecked, + SUM(t.isDeleted) hasErrorDeleted, + SUM(itc.id IS NULL) hasErrorItemTaxCountry, + SUM(a.id IS NULL) hasErrorAddress, + SUM(ios.code IS NOT NULL + AND(ad.customsAgentFk IS NULL + OR ad.incotermsFk IS NULL)) hasErrorInfoTaxAreaWorld + FROM ticket t + LEFT JOIN address ad ON ad.id = t.addressFk + JOIN sale s ON s.ticketFk = t.id + JOIN item i ON i.id = s.itemFk + JOIN supplier su ON su.id = t.companyFk + JOIN agencyMode am ON am.id = t.agencyModeFk + JOIN warehouse wh ON wh.id = t.warehouseFk AND wh.hasComission + JOIN ticketState ts ON ts.ticketFk = t.id + JOIN alertLevel al ON al.id = ts.alertLevel + JOIN client c ON c.id = t.clientFk + JOIN province p ON p.id = c.provinceFk + LEFT JOIN autonomy a ON a.id = p.autonomyFk + JOIN country co ON co.id = p.countryFk + LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk + LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id + AND itc.countryFk = su.countryFk + LEFT JOIN vn.invoiceOutSerial ios ON ios.taxAreaFk = 'WORLD' + AND ios.code = invoiceSerial(t.clientFk, t.companyFk, 'M') + WHERE (al.code = 'PACKED' + OR (am.code = 'refund' AND al.code != 'delivered')) + AND DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) AND util.dayEnd(?) + AND t.refFk IS NULL + AND IFNULL(a.hasDailyInvoice, co.hasDailyInvoice) + GROUP BY ticketFk + HAVING hasErrorToInvoice + OR NOT hasErrorTaxDataChecked + OR hasErrorDeleted + OR hasErrorItemTaxCountry + OR hasErrorAddress + OR hasErrorInfoTaxAreaWorld + )sub + )sub2 + ) SELECT IF(errors = '{"tickets": null}', + 'No errors', + util.notification_send('invoice-ticket-closure', errors, NULL)) + FROM ticketNotInvoiceable`, [toDate, toDate]); + await closure(ctx, Self, tickets); await Self.rawSql(` diff --git a/print/templates/email/invoice-ticket-closure/assets/css/import.js b/print/templates/email/invoice-ticket-closure/assets/css/import.js new file mode 100644 index 0000000000..4b4bb70869 --- /dev/null +++ b/print/templates/email/invoice-ticket-closure/assets/css/import.js @@ -0,0 +1,11 @@ +const Stylesheet = require(`vn-print/core/stylesheet`); + +const path = require('path'); +const vnPrintPath = path.resolve('print'); + +module.exports = new Stylesheet([ + `${vnPrintPath}/common/css/spacing.css`, + `${vnPrintPath}/common/css/misc.css`, + `${vnPrintPath}/common/css/layout.css`, + `${vnPrintPath}/common/css/email.css`]) + .mergeStyles(); diff --git a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html new file mode 100644 index 0000000000..051fa2cf8d --- /dev/null +++ b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html @@ -0,0 +1,13 @@ + +
+
+

{{ $t('title') }} {{ $t('total') }}: {{tickets.length}}

+
+
+
+

{{ $t('ticketId') }}: {{ticket.ticketId}}

+

{{ $t('description') }}: {{ticket.description}}

+
+
+
+
\ No newline at end of file diff --git a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js new file mode 100644 index 0000000000..6d12aa2476 --- /dev/null +++ b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js @@ -0,0 +1,19 @@ +const Component = require(`vn-print/core/component`); +const emailBody = new Component(); + +module.exports = { + name: 'invoice-ticket-closure', + components: { + 'email-body': emailBody.build(), + }, + props: { + ticketId: { + type: Number, + required: true + }, + description: { + type: String, + required: true + } + } +}; diff --git a/print/templates/email/invoice-ticket-closure/locale/en.yml b/print/templates/email/invoice-ticket-closure/locale/en.yml new file mode 100644 index 0000000000..70345dc81a --- /dev/null +++ b/print/templates/email/invoice-ticket-closure/locale/en.yml @@ -0,0 +1,5 @@ + +subject: Nightly ticket closing process report +title: Nightly ticket closing process report +description: Description +ticketId: Ticket No \ No newline at end of file diff --git a/print/templates/email/invoice-ticket-closure/locale/es.yml b/print/templates/email/invoice-ticket-closure/locale/es.yml new file mode 100644 index 0000000000..e21332f1bc --- /dev/null +++ b/print/templates/email/invoice-ticket-closure/locale/es.yml @@ -0,0 +1,4 @@ +subject: Informe proceso de cierre de tickets nocturno +title: Informe proceso de cierre de tickets nocturno +description: Descripción +ticketId: Ticket nº \ No newline at end of file From 0413707061d32326a92e868b53f40dcb02d2a79d Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 13 Mar 2024 12:50:27 +0100 Subject: [PATCH 14/78] feat: refs #6738 --- db/dump/fixtures.after.sql | 18 +++++++++--------- db/routines/vn2008/views/payrollWorker.sql | 6 ++++++ db/routines/vn2008/views/payroll_centros.sql | 6 ++++++ db/routines/vn2008/views/payroll_conceptos.sql | 9 +++++++++ .../10930-wheatDendro/04-payroll_employee.sql | 13 +++++++++++++ .../10930-wheatDendro/05-payroll_centros.sql | 13 +++++++++++++ .../10930-wheatDendro/06-payroll_conceptos.sql | 6 ++++++ .../{04-Permisos.sql => 07-Permisos.sql} | 0 8 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 db/routines/vn2008/views/payrollWorker.sql create mode 100644 db/routines/vn2008/views/payroll_centros.sql create mode 100644 db/routines/vn2008/views/payroll_conceptos.sql create mode 100644 db/versions/10930-wheatDendro/04-payroll_employee.sql create mode 100644 db/versions/10930-wheatDendro/05-payroll_centros.sql create mode 100644 db/versions/10930-wheatDendro/06-payroll_conceptos.sql rename db/versions/10930-wheatDendro/{04-Permisos.sql => 07-Permisos.sql} (100%) diff --git a/db/dump/fixtures.after.sql b/db/dump/fixtures.after.sql index bda625a960..3d5fbfa904 100644 --- a/db/dump/fixtures.after.sql +++ b/db/dump/fixtures.after.sql @@ -156,16 +156,16 @@ INSERT INTO `vn`.`occupationCode` (`code`, `name`) ('b', 'Representantes de comercio'), ('c', 'Personal de oficios en trabajos de construcción en general, y en instalac.,edificios y obras'); -INSERT INTO `vn2008`.`payroll_employee` (`CodTrabajador`,`nss`,`codpuesto`,`codempresa`,`codcontrato`,`FAntiguedad`,`grupotarifa`,`codcategoria`,`ContratoTemporal`) +INSERT INTO `vn2008`.`payroll_employee` (`CodTrabajador`,`codempresa`) VALUES - (36,'46/10515497-58',6,20,189,'2009-01-02',5,10,0), - (43,'46/10235353-50',7,20,189,'2009-04-21',5,10,0), - (76,'46/10250562-30',1,20,189,'2009-09-07',9,5,0), - (1106,'46/10297768-94',4,20,100,'2021-03-09',7,18,0), - (1107,'46/1627085-11',15,20,402,'2021-03-15',9,6,1), - (1108,'46/10446901-41',25,20,502,'2021-03-22',10,29,1), - (1109,'46/10552113-8',3,20,402,'2021-03-23',9,9,1), - (1110,'46/10723579-75',3,20,402,'2021-03-23',9,9,1); + (36,20), + (43,20), + (76,20), + (1106,20), + (1107,20), + (1108,20), + (1109,20), + (1110,20); INSERT INTO `vn`.`trainingCourseType` (`id`, `name`) VALUES diff --git a/db/routines/vn2008/views/payrollWorker.sql b/db/routines/vn2008/views/payrollWorker.sql new file mode 100644 index 0000000000..83ba02ecfa --- /dev/null +++ b/db/routines/vn2008/views/payrollWorker.sql @@ -0,0 +1,6 @@ +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`payroll_employee` +AS SELECT `pw`.`workerCodeFk` AS `CodTrabajador`, + `pw`.`companyCodeFk` AS `codempresa` +FROM `vn`.`payrollWorker` `pw` diff --git a/db/routines/vn2008/views/payroll_centros.sql b/db/routines/vn2008/views/payroll_centros.sql new file mode 100644 index 0000000000..b7e162f906 --- /dev/null +++ b/db/routines/vn2008/views/payroll_centros.sql @@ -0,0 +1,6 @@ +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`payroll_centros` +AS SELECT `pwc`.`workCenterFkA3` AS `cod_centro`, + `pwc`.`companyFkA3` AS `codempresa` +FROM `vn`.`payrollWorkCenter` `pwc` diff --git a/db/routines/vn2008/views/payroll_conceptos.sql b/db/routines/vn2008/views/payroll_conceptos.sql new file mode 100644 index 0000000000..54be27d0b7 --- /dev/null +++ b/db/routines/vn2008/views/payroll_conceptos.sql @@ -0,0 +1,9 @@ +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`payroll_conceptos` +AS SELECT `pc`.`id` AS `conceptoid`, + `pc`.`concept` AS `concepto`, + `pc`.`isSalaryAgreed` AS `isSalaryAgreed`, + `pc`.`isVariable` AS `isVariable`, + `pc`.`isException` AS `isException` +FROM `vn`.`payrollComponent` `pc` diff --git a/db/versions/10930-wheatDendro/04-payroll_employee.sql b/db/versions/10930-wheatDendro/04-payroll_employee.sql new file mode 100644 index 0000000000..2e128ff591 --- /dev/null +++ b/db/versions/10930-wheatDendro/04-payroll_employee.sql @@ -0,0 +1,13 @@ +-- Place your SQL code here +ALTER TABLE IF EXISTS `vn2008`.`payroll_employee` RENAME `vn`.`payrollWorker`; + +ALTER TABLE IF EXISTS `vn`.`payrollWorker` +CHANGE COLUMN IF EXISTS `CodTrabajador` `workerCodeFk` int(11) NOT NULL, +CHANGE COLUMN IF EXISTS `nss` `nss__` varchar(23) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `codpuesto` `codpuesto__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `codempresa` `companyCodeFk` int(10) NOT NULL, +CHANGE COLUMN IF EXISTS `codcontrato` `codcontrato__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `FAntiguedad` `FAntiguedad__` date NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `grupotarifa` `grupotarifa__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `codcategoria` `codcategoria__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `ContratoTemporal` `ContratoTemporal__` tinyint(1) NOT NULL DEFAULT 0 COMMENT '@Deprecated refs #6738 15/03/2024'; \ No newline at end of file diff --git a/db/versions/10930-wheatDendro/05-payroll_centros.sql b/db/versions/10930-wheatDendro/05-payroll_centros.sql new file mode 100644 index 0000000000..4911c87078 --- /dev/null +++ b/db/versions/10930-wheatDendro/05-payroll_centros.sql @@ -0,0 +1,13 @@ +-- Place your SQL code here +ALTER TABLE IF EXISTS `vn2008`.`payroll_centros` RENAME `vn`.`payrollWorkCenter`; + +ALTER TABLE IF EXISTS `vn`.`payrollWorkCenter` +CHANGE COLUMN IF EXISTS `cod_centro` `workCenterFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.', +CHANGE COLUMN IF EXISTS `Centro` `Centro__` varchar(255) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `nss_cotizacion` `nss_cotizacion__` varchar(15) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `domicilio` `domicilio__` varchar(255) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `poblacion` `poblacion__` varchar(45) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `cp` `cp__` varchar(5) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `empresa_id` `empresa_id__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', +CHANGE COLUMN IF EXISTS `codempresa` `companyFkA3` int(11) DEFAULT NULL COMMENT 'Columna que hace referencia a A3.'; +; \ No newline at end of file diff --git a/db/versions/10930-wheatDendro/06-payroll_conceptos.sql b/db/versions/10930-wheatDendro/06-payroll_conceptos.sql new file mode 100644 index 0000000000..45ab7a374e --- /dev/null +++ b/db/versions/10930-wheatDendro/06-payroll_conceptos.sql @@ -0,0 +1,6 @@ +-- Place your SQL code here +ALTER TABLE IF EXISTS `vn2008`.`payroll_conceptos` RENAME `vn`.`payrollComponent`; + +ALTER TABLE IF EXISTS `vn`.`payrollComponent` +CHANGE COLUMN IF EXISTS `conceptoid` `id` int(11) NOT NULL, +CHANGE COLUMN IF EXISTS `concepto` `concept` varchar(255) DEFAULT NULL; \ No newline at end of file diff --git a/db/versions/10930-wheatDendro/04-Permisos.sql b/db/versions/10930-wheatDendro/07-Permisos.sql similarity index 100% rename from db/versions/10930-wheatDendro/04-Permisos.sql rename to db/versions/10930-wheatDendro/07-Permisos.sql From 2d9a106fabafddcdf2681d6550ad20698a00e570 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 13 Mar 2024 12:59:45 +0100 Subject: [PATCH 15/78] feat: refs #6738 premisos --- db/versions/10930-wheatDendro/07-Permisos.sql | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/db/versions/10930-wheatDendro/07-Permisos.sql b/db/versions/10930-wheatDendro/07-Permisos.sql index 0c445755ba..5a3dc1413b 100644 --- a/db/versions/10930-wheatDendro/07-Permisos.sql +++ b/db/versions/10930-wheatDendro/07-Permisos.sql @@ -12,4 +12,29 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SELECT 1; GRANT SELECT ON TABLE vn2008.Proveedores_cargueras TO `buyer`; -GRANT SELECT ON TABLE vn.supplierFreight TO `buyer`; \ No newline at end of file +GRANT SELECT ON TABLE vn.supplierFreight TO `buyer`; + +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`payroll_employee` AS +SELECT 1; + +GRANT SELECT,INSERT ON TABLE vn2008.payroll_employee TO `hr`; +GRANT SELECT,INSERT ON TABLE vn.payrollWorker TO `hr`; + + +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`payroll_centros` AS +SELECT 1; + +GRANT SELECT ON TABLE vn2008.payroll_centros TO `hr`; +GRANT SELECT ON TABLE vn.payrollWorkCenter TO `hr`; + +CREATE OR REPLACE DEFINER=`root`@`localhost` + SQL SECURITY DEFINER + VIEW `vn2008`.`payroll_conceptos` AS +SELECT 1; + +GRANT SELECT,UPDATE ON TABLE vn2008.payroll_conceptos TO `hr`; +GRANT SELECT,UPDATE ON TABLE vn.payrollComponent TO `hr`; \ No newline at end of file From fad30eb56d2e1e15eabbcb1c7cc828907272ea0d Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 13 Mar 2024 14:08:14 +0100 Subject: [PATCH 16/78] feat: refs #6738 --- db/versions/10930-wheatDendro/04-payroll_employee.sql | 4 ++-- db/versions/10930-wheatDendro/06-payroll_conceptos.sql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/db/versions/10930-wheatDendro/04-payroll_employee.sql b/db/versions/10930-wheatDendro/04-payroll_employee.sql index 2e128ff591..538c636f4f 100644 --- a/db/versions/10930-wheatDendro/04-payroll_employee.sql +++ b/db/versions/10930-wheatDendro/04-payroll_employee.sql @@ -2,10 +2,10 @@ ALTER TABLE IF EXISTS `vn2008`.`payroll_employee` RENAME `vn`.`payrollWorker`; ALTER TABLE IF EXISTS `vn`.`payrollWorker` -CHANGE COLUMN IF EXISTS `CodTrabajador` `workerCodeFk` int(11) NOT NULL, +CHANGE COLUMN IF EXISTS `CodTrabajador` `workerFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.',, CHANGE COLUMN IF EXISTS `nss` `nss__` varchar(23) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', CHANGE COLUMN IF EXISTS `codpuesto` `codpuesto__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', -CHANGE COLUMN IF EXISTS `codempresa` `companyCodeFk` int(10) NOT NULL, +CHANGE COLUMN IF EXISTS `codempresa` `companyFkA3` int(10) NOT NULL COMMENT 'Columna que hace referencia a A3.', CHANGE COLUMN IF EXISTS `codcontrato` `codcontrato__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', CHANGE COLUMN IF EXISTS `FAntiguedad` `FAntiguedad__` date NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', CHANGE COLUMN IF EXISTS `grupotarifa` `grupotarifa__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', diff --git a/db/versions/10930-wheatDendro/06-payroll_conceptos.sql b/db/versions/10930-wheatDendro/06-payroll_conceptos.sql index 45ab7a374e..1803dc2a3b 100644 --- a/db/versions/10930-wheatDendro/06-payroll_conceptos.sql +++ b/db/versions/10930-wheatDendro/06-payroll_conceptos.sql @@ -3,4 +3,4 @@ ALTER TABLE IF EXISTS `vn2008`.`payroll_conceptos` RENAME `vn`.`payrollComponent ALTER TABLE IF EXISTS `vn`.`payrollComponent` CHANGE COLUMN IF EXISTS `conceptoid` `id` int(11) NOT NULL, -CHANGE COLUMN IF EXISTS `concepto` `concept` varchar(255) DEFAULT NULL; \ No newline at end of file +CHANGE COLUMN IF EXISTS `concepto` `name` varchar(255) DEFAULT NULL; \ No newline at end of file From 6163cad8a5184e731c11a8e17dfa831aaaea2ec0 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 13 Mar 2024 14:17:10 +0100 Subject: [PATCH 17/78] refs #6738 --- db/routines/vn2008/views/payrollWorker.sql | 4 ++-- db/routines/vn2008/views/payroll_conceptos.sql | 2 +- db/versions/10930-wheatDendro/04-payroll_employee.sql | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/db/routines/vn2008/views/payrollWorker.sql b/db/routines/vn2008/views/payrollWorker.sql index 83ba02ecfa..d4ada9aa0b 100644 --- a/db/routines/vn2008/views/payrollWorker.sql +++ b/db/routines/vn2008/views/payrollWorker.sql @@ -1,6 +1,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn2008`.`payroll_employee` -AS SELECT `pw`.`workerCodeFk` AS `CodTrabajador`, - `pw`.`companyCodeFk` AS `codempresa` +AS SELECT `pw`.`workerFkA3` AS `CodTrabajador`, + `pw`.`companyFkA3` AS `codempresa` FROM `vn`.`payrollWorker` `pw` diff --git a/db/routines/vn2008/views/payroll_conceptos.sql b/db/routines/vn2008/views/payroll_conceptos.sql index 54be27d0b7..a7c6ece5bd 100644 --- a/db/routines/vn2008/views/payroll_conceptos.sql +++ b/db/routines/vn2008/views/payroll_conceptos.sql @@ -2,7 +2,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vn2008`.`payroll_conceptos` AS SELECT `pc`.`id` AS `conceptoid`, - `pc`.`concept` AS `concepto`, + `pc`.`name` AS `concepto`, `pc`.`isSalaryAgreed` AS `isSalaryAgreed`, `pc`.`isVariable` AS `isVariable`, `pc`.`isException` AS `isException` diff --git a/db/versions/10930-wheatDendro/04-payroll_employee.sql b/db/versions/10930-wheatDendro/04-payroll_employee.sql index 538c636f4f..c346fbf8da 100644 --- a/db/versions/10930-wheatDendro/04-payroll_employee.sql +++ b/db/versions/10930-wheatDendro/04-payroll_employee.sql @@ -2,7 +2,7 @@ ALTER TABLE IF EXISTS `vn2008`.`payroll_employee` RENAME `vn`.`payrollWorker`; ALTER TABLE IF EXISTS `vn`.`payrollWorker` -CHANGE COLUMN IF EXISTS `CodTrabajador` `workerFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.',, +CHANGE COLUMN IF EXISTS `CodTrabajador` `workerFkA3` int(11) NOT NULL COMMENT 'Columna que hace referencia a A3.', CHANGE COLUMN IF EXISTS `nss` `nss__` varchar(23) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', CHANGE COLUMN IF EXISTS `codpuesto` `codpuesto__` int(10) NOT NULL COMMENT '@Deprecated refs #6738 15/03/2024', CHANGE COLUMN IF EXISTS `codempresa` `companyFkA3` int(10) NOT NULL COMMENT 'Columna que hace referencia a A3.', From 77d1a38a87eac61c3ce19fc217b3aaf2aaa29636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Wed, 13 Mar 2024 18:51:11 +0100 Subject: [PATCH 18/78] fix: closeTicket idem salix refs #6549 --- db/versions/10949-limeLaurel/00-firstScript.sql | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/db/versions/10949-limeLaurel/00-firstScript.sql b/db/versions/10949-limeLaurel/00-firstScript.sql index 0e2fdaf0c9..7b17582856 100644 --- a/db/versions/10949-limeLaurel/00-firstScript.sql +++ b/db/versions/10949-limeLaurel/00-firstScript.sql @@ -3,3 +3,12 @@ INSERT INTO util.notification (id, name, description) 'invoice-ticket-closure', 'Tickets not invoiced during the nightly closure ticket process' FROM util.notification; + +INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk) + SELECT MAX(id), 108 + FROM util.notification; + +INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk) + SELECT MAX(id), 108 + FROM util.notification; + \ No newline at end of file From 3e458281e6a5c5a09fc7071de95a564c9297d2a2 Mon Sep 17 00:00:00 2001 From: jorgep Date: Thu, 14 Mar 2024 09:42:54 +0100 Subject: [PATCH 19/78] fix: refs #6492 boxes alias --- db/routines/vn/procedures/agencyVolume.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/routines/vn/procedures/agencyVolume.sql b/db/routines/vn/procedures/agencyVolume.sql index 295ae50aeb..176b777266 100644 --- a/db/routines/vn/procedures/agencyVolume.sql +++ b/db/routines/vn/procedures/agencyVolume.sql @@ -21,7 +21,7 @@ BEGIN JOIN agency ag ON ag.id = am.agencyFk JOIN ( SELECT sv.ticketFk, - CEIL(1000 * SUM(sv.volume) / vc.standardFlowerBox) + CEIL(1000 * SUM(sv.volume) / vc.standardFlowerBox) boxes FROM ticket t JOIN saleVolume sv ON sv.ticketFk = t.id JOIN volumeConfig vc From ff130b773dcb9e6d83694346377e736896fce622 Mon Sep 17 00:00:00 2001 From: jorgep Date: Thu, 14 Mar 2024 11:49:21 +0100 Subject: [PATCH 20/78] fix: refs #6492 drop useless insert --- .../procedures/addAccountReconciliation.sql | 55 +++---------------- 1 file changed, 9 insertions(+), 46 deletions(-) diff --git a/db/routines/vn/procedures/addAccountReconciliation.sql b/db/routines/vn/procedures/addAccountReconciliation.sql index 0db018109c..e396e57dc4 100644 --- a/db/routines/vn/procedures/addAccountReconciliation.sql +++ b/db/routines/vn/procedures/addAccountReconciliation.sql @@ -8,59 +8,22 @@ BEGIN UPDATE accountReconciliation ar JOIN ( SELECT id, - calculatedId, + calculatedCode, CONCAT( - calculatedId, + calculatedCode, '(', - ROW_NUMBER() OVER (PARTITION BY calculatedId ORDER BY id), + ROW_NUMBER() OVER (PARTITION BY calculatedCode ORDER BY id), ')' ) newId - FROM accountReconciliation - WHERE calculatedId IN ( - SELECT calculatedId + FROM accountReconciliation ar + WHERE calculatedCode IN ( + SELECT calculatedCode FROM accountReconciliation - GROUP BY calculatedId + GROUP BY calculatedCode HAVING COUNT(*) > 1 ) - ORDER BY calculatedId, id + ORDER BY calculatedCode, id ) sub2 ON ar.id = sub2.id - SET ar.calculatedId = sub2.newId; - - INSERT INTO till( - dated, - isAccountable, - serie, - concept, - `in`, - `out`, - bankFk, - companyFk, - warehouseFk, - supplierAccountFk, - calculatedCode, - InForeignValue, - OutForeignValue, - workerFk - ) - SELECT ar.operationDate dated, - TRUE isAccountable, - 'MB' serie, - ar.concept concept, - @totalIn := IF(ar.debitCredit = arc.debitCredit2 AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `in`, - @totalOut := IF(ar.debitCredit = arc.debitCredit AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `out`, - a.id bankFk, - sa.supplierFk companyFk, - arc.warehouseFk warehouseFk, - ar.supplierAccountFk supplierAccountFk, - ar.calculatedId calculatedCode, - @totalIn InForeignValue, - @totalOut OutForeignValue, - account.myUser_getId() user - FROM accountReconciliation ar - JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk - JOIN accounting a ON a.id = sa.accountingFk - LEFT JOIN till t ON t.calculatedCode = ar.calculatedId - JOIN accountReconciliationConfig arc - WHERE t.id IS NULL; + SET ar.calculatedCode = sub2.newId; END$$ DELIMITER ; \ No newline at end of file From d7115e40c1b03c23545cbc1f56cac0201be31c26 Mon Sep 17 00:00:00 2001 From: jorgep Date: Thu, 14 Mar 2024 12:10:08 +0100 Subject: [PATCH 21/78] feat: refs #6492 dropping vn2008 procedures --- .../procedures/account_conciliacion_add.sql | 33 -------------- .../vn2008/procedures/agencia_volume.sql | 44 ------------------- db/routines/vn2008/procedures/article.sql | 15 ------- 3 files changed, 92 deletions(-) delete mode 100644 db/routines/vn2008/procedures/account_conciliacion_add.sql delete mode 100644 db/routines/vn2008/procedures/agencia_volume.sql delete mode 100644 db/routines/vn2008/procedures/article.sql diff --git a/db/routines/vn2008/procedures/account_conciliacion_add.sql b/db/routines/vn2008/procedures/account_conciliacion_add.sql deleted file mode 100644 index 94ef0b14b6..0000000000 --- a/db/routines/vn2008/procedures/account_conciliacion_add.sql +++ /dev/null @@ -1,33 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`account_conciliacion_add`() -BEGIN - UPDATE account_conciliacion ac - JOIN - ( - SELECT idaccount_conciliacion, @c:= if(@id = id_calculated, @c + 1, 1) contador, - @id:= id_calculated as id_calculated, concat(id_calculated,'(',@c,')') as new_id - FROM account_conciliacion - JOIN - ( - select id_calculated, count(*) rep, @c:= 0, @id:= concat('-',id_calculated) - from account_conciliacion - group by id_calculated - having rep > 1 - ) sub using(id_calculated) - ) sub2 using(idaccount_conciliacion) - SET ac.id_calculated = sub2.new_id; - - INSERT INTO Cajas(Cajafecha, Partida, Serie, Concepto, Entrada, - Salida, Id_Banco,empresa_id, warehouse_id, - Proveedores_account_id, id_calculated, InForeignValue, OutForeignValue, Id_Trabajador) - SELECT Fechaoperacion, TRUE, 'MB', ac.Concepto, IF(DebeHaber = 2 AND currencyFk = 1, importe,null), - IF(DebeHaber = 1 AND currencyFk = 1, importe, null), a.id, sa.supplierFk, 1, - ac.Id_Proveedores_account, ac.id_calculated, IF(DebeHaber = 2 AND NOT currencyFk = 1, importe, null), - IF(DebeHaber = 1 AND NOT currencyFk = 1, importe, null), account.myUser_getId() - FROM account_conciliacion ac - JOIN vn.supplierAccount sa on sa.id = ac.Id_Proveedores_account - JOIN vn.accounting a ON a.id = sa.accountingFk - LEFT JOIN Cajas c on c.id_calculated = ac.id_calculated - WHERE c.Id_Caja IS NULL; -END$$ -DELIMITER ; diff --git a/db/routines/vn2008/procedures/agencia_volume.sql b/db/routines/vn2008/procedures/agencia_volume.sql deleted file mode 100644 index ea631793d3..0000000000 --- a/db/routines/vn2008/procedures/agencia_volume.sql +++ /dev/null @@ -1,44 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`agencia_volume`() -BEGIN - DECLARE vStarted DATETIME DEFAULT TIMESTAMP(util.VN_CURDATE()); - DECLARE vEnded DATETIME DEFAULT TIMESTAMP(util.VN_CURDATE(), '23:59:59'); - - DROP TEMPORARY TABLE IF EXISTS tmp.ticket_PackagingEstimated; - CREATE TEMPORARY TABLE tmp.ticket_PackagingEstimated - ( - ticketFk INT PRIMARY KEY - ,boxes INT DEFAULT 0 - ); - - INSERT INTO tmp.ticket_PackagingEstimated(ticketFk, boxes) - SELECT sv.ticketFk, CEIL(1000 * sum(sv.volume) / vc.standardFlowerBox) - FROM vn.ticket t - JOIN vn.saleVolume sv ON sv.ticketFk = t.id - JOIN vn.volumeConfig vc - WHERE t.shipped BETWEEN vStarted AND vEnded - AND IFNULL(t.packages,0) = 0 - GROUP BY t.id; - SELECT * FROM - ( - SELECT ag.id agency_id, - CONCAT(RPAD(c.country, 16,' _') ,' ',ag.name) Agencia, - count(*) expediciones, - sum(t.packages) Bultos, - sum(tpe.boxes) Faltan - FROM vn.ticket t - JOIN vn.warehouse w ON w.id = t.warehouseFk - JOIN vn.country c ON w.countryFk = c.id - JOIN vn.address a ON a.id = t.addressFk - JOIN vn.agencyMode am ON am.id = t.agencyModeFk - JOIN vn.agency ag ON ag.id = am.agencyFk - JOIN tmp.ticket_PackagingEstimated tpe ON tpe.ticketFk = t.id - WHERE t.shipped BETWEEN vStarted AND vEnded - AND ag.isOwn = FALSE - GROUP BY ag.id - ) sub - ORDER BY Agencia; - - DROP TEMPORARY TABLE tmp.ticket_PackagingEstimated; -END$$ -DELIMITER ; diff --git a/db/routines/vn2008/procedures/article.sql b/db/routines/vn2008/procedures/article.sql deleted file mode 100644 index 3c2664c0f4..0000000000 --- a/db/routines/vn2008/procedures/article.sql +++ /dev/null @@ -1,15 +0,0 @@ -DELIMITER $$ -CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article`() -BEGIN -/** - * Crea la tabla temporal: article_inventory - */ - DROP TEMPORARY TABLE IF EXISTS article_inventory; - CREATE TEMPORARY TABLE article_inventory - ( - `article_id` INT(11) NOT NULL PRIMARY KEY, - `future` DATETIME - ) - ENGINE = MEMORY; -END$$ -DELIMITER ; From 1315a854a93fc7be7c02c9eab7cf7cca503871d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Mon, 18 Mar 2024 18:15:05 +0100 Subject: [PATCH 22/78] fix: closeTicket idem salix Refs: #6549 --- db/versions/10949-limeLaurel/00-firstScript.sql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/db/versions/10949-limeLaurel/00-firstScript.sql b/db/versions/10949-limeLaurel/00-firstScript.sql index 7b17582856..ca221501e5 100644 --- a/db/versions/10949-limeLaurel/00-firstScript.sql +++ b/db/versions/10949-limeLaurel/00-firstScript.sql @@ -1,14 +1,14 @@ -INSERT INTO util.notification (id, name, description) - SELECT MAX(id) + 1, - 'invoice-ticket-closure', + INSERT INTO util.notification ( name, description) + SELECT 'invoice-ticket-closure', 'Tickets not invoiced during the nightly closure ticket process' FROM util.notification; + +SET @notificationFk =LAST_INSERT_ID(); INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk) - SELECT MAX(id), 108 + SELECT @notificationFk, 108 FROM util.notification; INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk) - SELECT MAX(id), 108 - FROM util.notification; - \ No newline at end of file + SELECT @notificationFk, 108 + FROM util.notification; \ No newline at end of file From ca0d269ee289ce5d36303064c5805caf5ce89dfc Mon Sep 17 00:00:00 2001 From: carlossa Date: Thu, 21 Mar 2024 15:02:09 +0100 Subject: [PATCH 23/78] refs #6074 remove isBlocked --- db/versions/10964-silverDracena/00-firstScript.sql | 2 ++ modules/entry/back/models/entry.json | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 db/versions/10964-silverDracena/00-firstScript.sql diff --git a/db/versions/10964-silverDracena/00-firstScript.sql b/db/versions/10964-silverDracena/00-firstScript.sql new file mode 100644 index 0000000000..400758cb2e --- /dev/null +++ b/db/versions/10964-silverDracena/00-firstScript.sql @@ -0,0 +1,2 @@ +-- Place your SQL code here +ALTER TABLE vn.entry CHANGE isBlocked isBlocked__ tinyint(4) DEFAULT 0 NOT NULL COMMENT 'Deprecado 21/03/2024'; diff --git a/modules/entry/back/models/entry.json b/modules/entry/back/models/entry.json index 0f3e389b6f..ab451219eb 100644 --- a/modules/entry/back/models/entry.json +++ b/modules/entry/back/models/entry.json @@ -57,9 +57,6 @@ "columnName": "evaNotes" } }, - "isBlocked": { - "type": "boolean" - }, "loadPriority": { "type": "number" }, From 027aa8666220c0be94305bbda9f0352703be96be Mon Sep 17 00:00:00 2001 From: sergiodt Date: Fri, 22 Mar 2024 10:08:20 +0100 Subject: [PATCH 24/78] refs #6964 feat:advice for olderItem --- .../methods/item-shelving/hasItemOlder.js | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js index 48b3b357ac..4d82956d48 100644 --- a/modules/item/back/methods/item-shelving/hasItemOlder.js +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -1,9 +1,10 @@ module.exports = Self => { Self.remoteMethod('hasItemOlder', { - description: 'Get boolean if any item of the shelving has older created in another shelving ', + description: + 'Get boolean if any or specific item of the shelving has older created in another shelving or parking', accessType: 'WRITE', accepts: [{ - arg: 'shelvingFk', + arg: 'shelvingFkIn', type: 'string', required: true, description: 'Shelving code' @@ -11,8 +12,17 @@ module.exports = Self => { { arg: 'parking', type: 'string', - required: true, description: 'Parking code' + }, + { + arg: 'shelvingFkOut', + type: 'string', + description: 'Shelving code' + }, + { + arg: 'itemFk', + type: 'int', + description: 'Item id' }], returns: { type: 'boolean', @@ -24,21 +34,24 @@ module.exports = Self => { } }); - Self.hasItemOlder = async(shelvingFk, parking, options) => { + Self.hasItemOlder = async(shelvingFkIn, parking, shelvingFkOut, itemFk, options) => { const result = await Self.rawSql(` SELECT COUNT(ish.id) - FROM vn.itemShelving ish - JOIN ( - SELECT ish.itemFk, created,shelvingFk, p.code - FROM vn.itemShelving ish - JOIN vn.shelving s ON ish.shelvingFk = s.code - JOIN vn.parking p ON p.id = s.parkingFk + FROM vn.itemShelving ish + JOIN ( + SELECT ish.itemFk, created,shelvingFk, p.code + FROM vn.itemShelving ish + JOIN vn.shelving s ON ish.shelvingFk = s.code + LEFT JOIN vn.parking p ON p.id = s.parkingFk WHERE ish.shelvingFk = ? - )sub ON sub.itemFK = ish.itemFk - JOIN vn.shelving s ON s.code = ish.shelvingFk - JOIN vn.parking p ON p.id = s.parkingFk - WHERE ish.shelvingFk <> ? AND sub.created > ish.created AND p.code <> ?`, - [shelvingFk, shelvingFk, parking]); + )sub ON sub.itemFK = ish.itemFk + JOIN vn.shelving s ON s.code = ish.shelvingFk + JOIN vn.parking p ON p.id = s.parkingFk + WHERE sub.created > ish.created + AND (p.code <> ? OR ? IS NULL) + AND (ish.shelvingFk <> ? OR ? IS NULL) + AND (ish.itemFk <> ? OR ? IS NULL)`, + [shelvingFkIn, parking, parking, shelvingFkOut, shelvingFkOut, itemFk, itemFk]); return result[0]['COUNT(ish.id)'] > 0; }; }; From 976c5b7ba8f8bbda1b651a4db4345b6fa51176ac Mon Sep 17 00:00:00 2001 From: sergiodt Date: Fri, 22 Mar 2024 11:42:19 +0100 Subject: [PATCH 25/78] refs #6964 feat:advice for olderItem --- .../item-shelving/specs/hasItemOlder.spec.js | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js diff --git a/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js new file mode 100644 index 0000000000..b6e501d857 --- /dev/null +++ b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js @@ -0,0 +1,45 @@ + +const {models} = require('vn-loopback/server/server'); + +fdescribe('itemShelving hasOlder()', () => { + it('should return false because there are not older items', async() => { + const shelvingFkIn = 'GVC'; + const shelvingFkOut = 'HEJ'; + const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, shelvingFkOut); + + expect(result).toBe(false); + }); + + it('should return false because there are not older items in parking', async() => { + const shelvingFkIn = 'HEJ'; + const parking = '700-01'; + const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, parking); + + expect(result).toBe(false); + }); + + it('should return true because there is an older item', async() => { + const shelvingFkIn = 'UXN'; + const shelvingFkOut = 'PCC'; + const parking = 'A-01-1'; + const itemFk = 1; + + const tx = await models.ItemShelving.beginTransaction({}); + const myOptions = {transaction: tx}; + const filter = {where: {shelvingFk: shelvingFkOut} + }; + try { + const itemShelvingBefore = await models.ItemShelving.findOne(filter, myOptions); + await itemShelvingBefore.updateAttributes({ + itemFk: itemFk + }); + const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, parking); + + expect(result).toBe(true); + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); +}); From 61b649fdc52bd7044b9299fd52cd989fd4e4d9ae Mon Sep 17 00:00:00 2001 From: sergiodt Date: Fri, 22 Mar 2024 11:47:12 +0100 Subject: [PATCH 26/78] refs #6964 feat:advice for olderItem --- db/versions/10967-wheatLilium/00-firstScript.sql | 4 ++++ modules/item/back/methods/item-shelving/hasItemOlder.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 db/versions/10967-wheatLilium/00-firstScript.sql diff --git a/db/versions/10967-wheatLilium/00-firstScript.sql b/db/versions/10967-wheatLilium/00-firstScript.sql new file mode 100644 index 0000000000..40cfe45bdb --- /dev/null +++ b/db/versions/10967-wheatLilium/00-firstScript.sql @@ -0,0 +1,4 @@ +-- Place your SQL code here + +INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId) + VALUES('ItemShelving', 'hasItemOlder', 'READ', 'ALLOW', 'ROLE', 'production'); diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js index 4d82956d48..fc4eb8d4fd 100644 --- a/modules/item/back/methods/item-shelving/hasItemOlder.js +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -2,7 +2,7 @@ module.exports = Self => { Self.remoteMethod('hasItemOlder', { description: 'Get boolean if any or specific item of the shelving has older created in another shelving or parking', - accessType: 'WRITE', + accessType: 'READ', accepts: [{ arg: 'shelvingFkIn', type: 'string', From c4fcb2cd120273147beaf9b074f491439707670c Mon Sep 17 00:00:00 2001 From: sergiodt Date: Fri, 22 Mar 2024 13:04:16 +0100 Subject: [PATCH 27/78] refs #6964 feat:advice for olderItem --- .../item/back/methods/item-shelving/specs/hasItemOlder.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js index b6e501d857..5f217f9bf2 100644 --- a/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js +++ b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js @@ -1,7 +1,7 @@ const {models} = require('vn-loopback/server/server'); -fdescribe('itemShelving hasOlder()', () => { +describe('itemShelving hasOlder()', () => { it('should return false because there are not older items', async() => { const shelvingFkIn = 'GVC'; const shelvingFkOut = 'HEJ'; From f6ba5224e608ef83c66421c15cbf51a69c2559e3 Mon Sep 17 00:00:00 2001 From: jcasado Date: Fri, 22 Mar 2024 15:00:30 +0100 Subject: [PATCH 28/78] refs #7123 first edit pdf --- .../templates/reports/credit-request/assets/css/style.css | 6 +++++- .../templates/reports/credit-request/credit-request.html | 8 ++++++++ print/templates/reports/credit-request/locale/es.yml | 5 +++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/print/templates/reports/credit-request/assets/css/style.css b/print/templates/reports/credit-request/assets/css/style.css index 90bbfd1038..a46a334847 100644 --- a/print/templates/reports/credit-request/assets/css/style.css +++ b/print/templates/reports/credit-request/assets/css/style.css @@ -49,4 +49,8 @@ td { .field { float: none -} \ No newline at end of file +} + +.wide-rectangle { + background-color: rgb(64 64 68); +} diff --git a/print/templates/reports/credit-request/credit-request.html b/print/templates/reports/credit-request/credit-request.html index c8e3f8c347..6b167e95b5 100644 --- a/print/templates/reports/credit-request/credit-request.html +++ b/print/templates/reports/credit-request/credit-request.html @@ -14,6 +14,14 @@ + + {{$t('fields.importCredit')}}: + +
+ +
+ +
diff --git a/print/templates/reports/credit-request/locale/es.yml b/print/templates/reports/credit-request/locale/es.yml index cd6f92dc50..bc0e09528a 100644 --- a/print/templates/reports/credit-request/locale/es.yml +++ b/print/templates/reports/credit-request/locale/es.yml @@ -3,10 +3,11 @@ fields: title: Solicitud de crédito date: Fecha companyName: Nombre de la empresa + importCredit: Importe del crédito solicitado businessType: Tipo de negocio antiquity: Antigüedad surface: Superficie (m²) - numberOfEmployees: Número de empleados + numberOfEmployees: Nº empleados owner: Contacto propietario o Administrador phone: Teléfono payer: Contacto responsable de pagos @@ -15,4 +16,4 @@ fields: forecastedPurchases: Previsión de compras a Verdnatura personFilling: Persona que rellena el formulario companyInfo: Información general sobre la empresa - economicInfo: Información económica \ No newline at end of file + economicInfo: Información económica From 22f78dbb916179040abe755d962ab90874246d39 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Mon, 25 Mar 2024 07:54:51 +0100 Subject: [PATCH 29/78] refs #6964 feat:hasItemOlder --- .../methods/item-shelving/hasItemOlder.js | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js index fc4eb8d4fd..e7609a4dbd 100644 --- a/modules/item/back/methods/item-shelving/hasItemOlder.js +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -1,3 +1,4 @@ +const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { Self.remoteMethod('hasItemOlder', { description: @@ -35,23 +36,24 @@ module.exports = Self => { }); Self.hasItemOlder = async(shelvingFkIn, parking, shelvingFkOut, itemFk, options) => { + if (!parking && !shelvingFkOut) throw new UserError('Missing data: parking or shelving'); const result = await Self.rawSql(` - SELECT COUNT(ish.id) - FROM vn.itemShelving ish - JOIN ( - SELECT ish.itemFk, created,shelvingFk, p.code - FROM vn.itemShelving ish - JOIN vn.shelving s ON ish.shelvingFk = s.code - LEFT JOIN vn.parking p ON p.id = s.parkingFk - WHERE ish.shelvingFk = ? + SELECT COUNT(ish.id) countItemOlder + FROM vn.itemShelving ish + JOIN ( + SELECT ish.itemFk, created,shelvingFk, p.code + FROM vn.itemShelving ish + JOIN vn.shelving s ON ish.shelvingFk = s.code + LEFT JOIN vn.parking p ON p.id = s.parkingFk + WHERE ish.shelvingFk = ? )sub ON sub.itemFK = ish.itemFk - JOIN vn.shelving s ON s.code = ish.shelvingFk - JOIN vn.parking p ON p.id = s.parkingFk - WHERE sub.created > ish.created + JOIN vn.shelving s ON s.code = ish.shelvingFk + JOIN vn.parking p ON p.id = s.parkingFk + WHERE sub.created > ish.created AND (p.code <> ? OR ? IS NULL) AND (ish.shelvingFk <> ? OR ? IS NULL) AND (ish.itemFk <> ? OR ? IS NULL)`, [shelvingFkIn, parking, parking, shelvingFkOut, shelvingFkOut, itemFk, itemFk]); - return result[0]['COUNT(ish.id)'] > 0; + return result[0]['countItemOlder'] > 0; }; }; From a40234ba9b06044de1e78cb3a63e5e1ce5ba8ab4 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Mon, 25 Mar 2024 08:20:08 +0100 Subject: [PATCH 30/78] refs #6964 feat:hasItemOlder --- modules/item/back/methods/item-shelving/hasItemOlder.js | 2 +- .../back/methods/item-shelving/specs/hasItemOlder.spec.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js index e7609a4dbd..b3fb6fa607 100644 --- a/modules/item/back/methods/item-shelving/hasItemOlder.js +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -53,7 +53,7 @@ module.exports = Self => { AND (p.code <> ? OR ? IS NULL) AND (ish.shelvingFk <> ? OR ? IS NULL) AND (ish.itemFk <> ? OR ? IS NULL)`, - [shelvingFkIn, parking, parking, shelvingFkOut, shelvingFkOut, itemFk, itemFk]); + [shelvingFkIn, parking, parking, shelvingFkOut, shelvingFkOut, itemFk, itemFk], options); return result[0]['countItemOlder'] > 0; }; }; diff --git a/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js index 5f217f9bf2..d44998fab6 100644 --- a/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js +++ b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js @@ -5,7 +5,7 @@ describe('itemShelving hasOlder()', () => { it('should return false because there are not older items', async() => { const shelvingFkIn = 'GVC'; const shelvingFkOut = 'HEJ'; - const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, shelvingFkOut); + const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, null, shelvingFkOut); expect(result).toBe(false); }); @@ -33,7 +33,7 @@ describe('itemShelving hasOlder()', () => { await itemShelvingBefore.updateAttributes({ itemFk: itemFk }); - const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, parking); + const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, parking, null, null, myOptions); expect(result).toBe(true); await tx.rollback(); From 8b684442f5c51b060aabee611abda974aeaee150 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Mon, 25 Mar 2024 16:07:20 +0100 Subject: [PATCH 31/78] refs #6276 hotFix: setUserError and return --- loopback/locale/es.json | 703 ++++++++++++++++++++-------------------- 1 file changed, 352 insertions(+), 351 deletions(-) diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 7730d4a8cf..5eb60ce914 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -1,352 +1,353 @@ { - "Phone format is invalid": "El formato del teléfono no es correcto", - "You are not allowed to change the credit": "No tienes privilegios para modificar el crédito", - "Unable to mark the equivalence surcharge": "No se puede marcar el recargo de equivalencia", - "The default consignee can not be unchecked": "No se puede desmarcar el consignatario predeterminado", - "Unable to default a disabled consignee": "No se puede poner predeterminado un consignatario desactivado", - "Can't be blank": "No puede estar en blanco", - "Invalid TIN": "NIF/CIF inválido", - "TIN must be unique": "El NIF/CIF debe ser único", - "A client with that Web User name already exists": "Ya existe un cliente con ese Usuario Web", - "Is invalid": "Es inválido", - "Quantity cannot be zero": "La cantidad no puede ser cero", - "Enter an integer different to zero": "Introduce un entero distinto de cero", - "Package cannot be blank": "El embalaje no puede estar en blanco", - "The company name must be unique": "La razón social debe ser única", - "Invalid email": "Correo electrónico inválido", - "The IBAN does not have the correct format": "El IBAN no tiene el formato correcto", - "That payment method requires an IBAN": "El método de pago seleccionado requiere un IBAN", - "That payment method requires a BIC": "El método de pago seleccionado requiere un BIC", - "State cannot be blank": "El estado no puede estar en blanco", - "Worker cannot be blank": "El trabajador no puede estar en blanco", - "Cannot change the payment method if no salesperson": "No se puede cambiar la forma de pago si no hay comercial asignado", - "can't be blank": "El campo no puede estar vacío", - "Observation type must be unique": "El tipo de observación no puede repetirse", - "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero", - "The grade must be similar to the last one": "El grade debe ser similar al último", - "Only manager can change the credit": "Solo el gerente puede cambiar el credito de este cliente", - "Name cannot be blank": "El nombre no puede estar en blanco", - "Phone cannot be blank": "El teléfono no puede estar en blanco", - "Period cannot be blank": "El periodo no puede estar en blanco", - "Choose a company": "Selecciona una empresa", - "Se debe rellenar el campo de texto": "Se debe rellenar el campo de texto", - "Description should have maximum of 45 characters": "La descripción debe tener maximo 45 caracteres", - "Cannot be blank": "El campo no puede estar en blanco", - "The grade must be an integer greater than or equal to zero": "El grade debe ser un entero mayor o igual a cero", - "Sample type cannot be blank": "El tipo de plantilla no puede quedar en blanco", - "Description cannot be blank": "Se debe rellenar el campo de texto", - "The price of the item changed": "El precio del artículo cambió", - "The value should not be greater than 100%": "El valor no debe de ser mayor de 100%", - "The value should be a number": "El valor debe ser un numero", - "This order is not editable": "Esta orden no se puede modificar", - "You can't create an order for a frozen client": "No puedes crear una orden para un cliente congelado", - "You can't create an order for a client that has a debt": "No puedes crear una orden para un cliente con deuda", - "is not a valid date": "No es una fecha valida", - "Barcode must be unique": "El código de barras debe ser único", - "The warehouse can't be repeated": "El almacén no puede repetirse", - "The tag or priority can't be repeated for an item": "El tag o prioridad no puede repetirse para un item", - "The observation type can't be repeated": "El tipo de observación no puede repetirse", - "A claim with that sale already exists": "Ya existe una reclamación para esta línea", - "You don't have enough privileges to change that field": "No tienes permisos para cambiar ese campo", - "Warehouse cannot be blank": "El almacén no puede quedar en blanco", - "Agency cannot be blank": "La agencia no puede quedar en blanco", - "Not enough privileges to edit a client with verified data": "No tienes permisos para hacer cambios en un cliente con datos comprobados", - "This address doesn't exist": "Este consignatario no existe", - "You must delete the claim id %d first": "Antes debes borrar la reclamación %d", - "You don't have enough privileges": "No tienes suficientes permisos", - "Cannot check Equalization Tax in this NIF/CIF": "No se puede marcar RE en este NIF/CIF", - "You can't make changes on the basic data of an confirmed order or with rows": "No puedes cambiar los datos básicos de una orden con artículos", - "INVALID_USER_NAME": "El nombre de usuario solo debe contener letras minúsculas o, a partir del segundo carácter, números o subguiones, no está permitido el uso de la letra ñ", - "You can't create a ticket for a frozen client": "No puedes crear un ticket para un cliente congelado", - "You can't create a ticket for an inactive client": "No puedes crear un ticket para un cliente inactivo", - "Tag value cannot be blank": "El valor del tag no puede quedar en blanco", - "ORDER_EMPTY": "Cesta vacía", - "You don't have enough privileges to do that": "No tienes permisos para cambiar esto", - "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NO SE PUEDE DESACTIVAR EL CONSIGNAT", - "Error. El NIF/CIF está repetido": "Error. El NIF/CIF está repetido", - "Street cannot be empty": "Dirección no puede estar en blanco", - "City cannot be empty": "Ciudad no puede estar en blanco", - "Code cannot be blank": "Código no puede estar en blanco", - "You cannot remove this department": "No puedes eliminar este departamento", - "The extension must be unique": "La extensión debe ser unica", - "The secret can't be blank": "La contraseña no puede estar en blanco", - "We weren't able to send this SMS": "No hemos podido enviar el SMS", - "This client can't be invoiced": "Este cliente no puede ser facturado", - "You must provide the correction information to generate a corrective invoice": "Debes informar la información de corrección para generar una factura rectificativa", - "This ticket can't be invoiced": "Este ticket no puede ser facturado", - "You cannot add or modify services to an invoiced ticket": "No puedes añadir o modificar servicios a un ticket facturado", - "This ticket can not be modified": "Este ticket no puede ser modificado", - "The introduced hour already exists": "Esta hora ya ha sido introducida", - "INFINITE_LOOP": "Existe una dependencia entre dos Jefes", - "The sales of the receiver ticket can't be modified": "Las lineas del ticket al que envias no pueden ser modificadas", - "NO_AGENCY_AVAILABLE": "No hay una zona de reparto disponible con estos parámetros", - "ERROR_PAST_SHIPMENT": "No puedes seleccionar una fecha de envío en pasado", - "The current ticket can't be modified": "El ticket actual no puede ser modificado", - "The current claim can't be modified": "La reclamación actual no puede ser modificada", - "The sales of this ticket can't be modified": "Las lineas de este ticket no pueden ser modificadas", - "The sales do not exists": "La(s) línea(s) seleccionada(s) no existe(n)", - "Please select at least one sale": "Por favor selecciona al menos una linea", - "All sales must belong to the same ticket": "Todas las lineas deben pertenecer al mismo ticket", - "NO_ZONE_FOR_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", - "This item doesn't exists": "El artículo no existe", - "NOT_ZONE_WITH_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", - "Extension format is invalid": "El formato de la extensión es inválido", - "Invalid parameters to create a new ticket": "Parámetros inválidos para crear un nuevo ticket", - "This item is not available": "Este artículo no está disponible", - "This postcode already exists": "Este código postal ya existe", - "Concept cannot be blank": "El concepto no puede quedar en blanco", - "File doesn't exists": "El archivo no existe", - "You don't have privileges to change the zone": "No tienes permisos para cambiar la zona o para esos parámetros hay más de una opción de envío, hable con las agencias", - "This ticket is already on weekly tickets": "Este ticket ya está en tickets programados", - "Ticket id cannot be blank": "El id de ticket no puede quedar en blanco", - "Weekday cannot be blank": "El día de la semana no puede quedar en blanco", - "You can't delete a confirmed order": "No puedes borrar un pedido confirmado", - "The social name has an invalid format": "El nombre fiscal tiene un formato incorrecto", - "Invalid quantity": "Cantidad invalida", - "This postal code is not valid": "Este código postal no es válido", - "is invalid": "es inválido", - "The postcode doesn't exist. Please enter a correct one": "El código postal no existe. Por favor, introduce uno correcto", - "The department name can't be repeated": "El nombre del departamento no puede repetirse", - "This phone already exists": "Este teléfono ya existe", - "You cannot move a parent to its own sons": "No puedes mover un elemento padre a uno de sus hijos", - "You can't create a claim for a removed ticket": "No puedes crear una reclamación para un ticket eliminado", - "You cannot delete a ticket that part of it is being prepared": "No puedes eliminar un ticket en el que una parte que está siendo preparada", - "You must delete all the buy requests first": "Debes eliminar todas las peticiones de compra primero", - "You should specify a date": "Debes especificar una fecha", - "You should specify at least a start or end date": "Debes especificar al menos una fecha de inicio o de fin", - "Start date should be lower than end date": "La fecha de inicio debe ser menor que la fecha de fin", - "You should mark at least one week day": "Debes marcar al menos un día de la semana", - "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío", - "Customs agent is required for a non UEE member": "El agente de aduanas es requerido para los clientes extracomunitarios", - "Incoterms is required for a non UEE member": "El incoterms es requerido para los clientes extracomunitarios", - "Deleted sales from ticket": "He eliminado las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}", - "Added sale to ticket": "He añadido la siguiente linea al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}", - "Changed sale discount": "He cambiado el descuento de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "Created claim": "He creado la reclamación [{{claimId}}]({{{claimUrl}}}) de las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "Changed sale price": "He cambiado el precio de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* del ticket [{{ticketId}}]({{{ticketUrl}}})", - "Changed sale quantity": "He cambiado la cantidad de [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* del ticket [{{ticketId}}]({{{ticketUrl}}})", - "State": "Estado", - "regular": "normal", - "reserved": "reservado", - "Changed sale reserved state": "He cambiado el estado reservado de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "Bought units from buy request": "Se ha comprado {{quantity}} unidades de [{{itemId}} {{concept}}]({{{urlItem}}}) para el ticket id [{{ticketId}}]({{{url}}})", - "Deny buy request": "Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}", - "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*", - "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})", - "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})", - "Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}", - "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*", - "Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*", - "Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}", - "ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto", - "Distance must be lesser than 4000": "La distancia debe ser inferior a 4000", - "This ticket is deleted": "Este ticket está eliminado", - "Unable to clone this travel": "No ha sido posible clonar este travel", - "This thermograph id already exists": "La id del termógrafo ya existe", - "Choose a date range or days forward": "Selecciona un rango de fechas o días en adelante", - "ORDER_ALREADY_CONFIRMED": "ORDEN YA CONFIRMADA", - "Invalid password": "Invalid password", - "Password does not meet requirements": "La contraseña no cumple los requisitos", - "Role already assigned": "Rol ya asignado", - "Invalid role name": "Nombre de rol no válido", - "Role name must be written in camelCase": "El nombre del rol debe escribirse en camelCase", - "Email already exists": "El correo ya existe", - "User already exists": "El/La usuario/a ya existe", - "Absence change notification on the labour calendar": "Notificación de cambio de ausencia en el calendario laboral", - "Record of hours week": "Registro de horas semana {{week}} año {{year}} ", - "Created absence": "El empleado {{author}} ha añadido una ausencia de tipo '{{absenceType}}' a {{employee}} para el día {{dated}}.", - "Deleted absence": "El empleado {{author}} ha eliminado una ausencia de tipo '{{absenceType}}' a {{employee}} del día {{dated}}.", - "I have deleted the ticket id": "He eliminado el ticket id [{{id}}]({{{url}}})", - "I have restored the ticket id": "He restaurado el ticket id [{{id}}]({{{url}}})", - "You can only restore a ticket within the first hour after deletion": "Únicamente puedes restaurar el ticket dentro de la primera hora después de su eliminación", - "Changed this data from the ticket": "He cambiado estos datos del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "agencyModeFk": "Agencia", - "clientFk": "Cliente", - "zoneFk": "Zona", - "warehouseFk": "Almacén", - "shipped": "F. envío", - "landed": "F. entrega", - "addressFk": "Consignatario", - "companyFk": "Empresa", - "The social name cannot be empty": "La razón social no puede quedar en blanco", - "The nif cannot be empty": "El NIF no puede quedar en blanco", - "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados", - "ASSIGN_ZONE_FIRST": "Asigna una zona primero", - "Amount cannot be zero": "El importe no puede ser cero", - "Company has to be official": "Empresa inválida", - "You can not select this payment method without a registered bankery account": "No se puede utilizar este método de pago si no has registrado una cuenta bancaria", - "Action not allowed on the test environment": "Esta acción no está permitida en el entorno de pruebas", - "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta", - "New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}* y un precio de *{{price}} €*", - "New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}*", - "Swift / BIC cannot be empty": "Swift / BIC no puede estar vacío", - "This BIC already exist.": "Este BIC ya existe.", - "That item doesn't exists": "Ese artículo no existe", - "There's a new urgent ticket:": "Hay un nuevo ticket urgente:", - "Invalid account": "Cuenta inválida", - "Compensation account is empty": "La cuenta para compensar está vacia", - "This genus already exist": "Este genus ya existe", - "This specie already exist": "Esta especie ya existe", - "Client assignment has changed": "He cambiado el comercial ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})", - "None": "Ninguno", - "The contract was not active during the selected date": "El contrato no estaba activo durante la fecha seleccionada", - "Cannot add more than one '1/2 day vacation'": "No puedes añadir más de un 'Vacaciones 1/2 dia'", - "This document already exists on this ticket": "Este documento ya existe en el ticket", - "Some of the selected tickets are not billable": "Algunos de los tickets seleccionados no son facturables", - "You can't invoice tickets from multiple clients": "No puedes facturar tickets de multiples clientes", - "nickname": "nickname", - "INACTIVE_PROVIDER": "Proveedor inactivo", - "This client is not invoiceable": "Este cliente no es facturable", - "serial non editable": "Esta serie no permite asignar la referencia", - "Max shipped required": "La fecha límite es requerida", - "Can't invoice to future": "No se puede facturar a futuro", - "Can't invoice to past": "No se puede facturar a pasado", - "This ticket is already invoiced": "Este ticket ya está facturado", - "A ticket with an amount of zero can't be invoiced": "No se puede facturar un ticket con importe cero", - "A ticket with a negative base can't be invoiced": "No se puede facturar un ticket con una base negativa", - "Global invoicing failed": "[Facturación global] No se han podido facturar algunos clientes", - "Wasn't able to invoice the following clients": "No se han podido facturar los siguientes clientes", - "Can't verify data unless the client has a business type": "No se puede verificar datos de un cliente que no tiene tipo de negocio", - "You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito", - "You can't change the credit set to zero from a financialBoss": "No puedes cambiar el cŕedito establecido a cero por un jefe de finanzas", - "Amounts do not match": "Las cantidades no coinciden", - "The PDF document does not exist": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'", - "The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos", - "You can't create a claim from a ticket delivered more than seven days ago": "No puedes crear una reclamación de un ticket entregado hace más de siete días", - "The worker has hours recorded that day": "El trabajador tiene horas fichadas ese día", - "The worker has a marked absence that day": "El trabajador tiene marcada una ausencia ese día", - "You can not modify is pay method checked": "No se puede modificar el campo método de pago validado", - "The account size must be exactly 10 characters": "El tamaño de la cuenta debe ser exactamente de 10 caracteres", - "Can't transfer claimed sales": "No puedes transferir lineas reclamadas", - "You don't have privileges to create refund": "No tienes permisos para crear un abono", - "The item is required": "El artículo es requerido", - "The agency is already assigned to another autonomous": "La agencia ya está asignada a otro autónomo", - "date in the future": "Fecha en el futuro", - "reference duplicated": "Referencia duplicada", - "This ticket is already a refund": "Este ticket ya es un abono", - "isWithoutNegatives": "Sin negativos", - "routeFk": "routeFk", - "Can't change the password of another worker": "No se puede cambiar la contraseña de otro trabajador", - "No hay un contrato en vigor": "No hay un contrato en vigor", - "No se permite fichar a futuro": "No se permite fichar a futuro", - "No está permitido trabajar": "No está permitido trabajar", - "Fichadas impares": "Fichadas impares", - "Descanso diario 12h.": "Descanso diario 12h.", - "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.", - "Dirección incorrecta": "Dirección incorrecta", - "Modifiable user details only by an administrator": "Detalles de usuario modificables solo por un administrador", - "Modifiable password only via recovery or by an administrator": "Contraseña modificable solo a través de la recuperación o por un administrador", - "Not enough privileges to edit a client": "No tienes suficientes privilegios para editar un cliente", - "This route does not exists": "Esta ruta no existe", - "Claim pickup order sent": "Reclamación Orden de recogida enviada [{{claimId}}]({{{claimUrl}}}) al cliente *{{clientName}}*", - "You don't have grant privilege": "No tienes privilegios para dar privilegios", - "You don't own the role and you can't assign it to another user": "No eres el propietario del rol y no puedes asignarlo a otro usuario", - "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionado con [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})", - "Already has this status": "Ya tiene este estado", - "There aren't records for this week": "No existen registros para esta semana", - "Empty data source": "Origen de datos vacio", - "App locked": "Aplicación bloqueada por el usuario {{userId}}", - "Email verify": "Correo de verificación", - "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment", - "Receipt's bank was not found": "No se encontró el banco del recibo", - "This receipt was not compensated": "Este recibo no ha sido compensado", - "Client's email was not found": "No se encontró el email del cliente", - "Negative basis": "Base negativa", - "This worker code already exists": "Este codigo de trabajador ya existe", - "This personal mail already exists": "Este correo personal ya existe", - "This worker already exists": "Este trabajador ya existe", - "App name does not exist": "El nombre de aplicación no es válido", - "Try again": "Vuelve a intentarlo", - "Aplicación bloqueada por el usuario 9": "Aplicación bloqueada por el usuario 9", - "Failed to upload delivery note": "Error al subir albarán {{id}}", - "The DOCUWARE PDF document does not exists": "El documento PDF Docuware no existe", - "It is not possible to modify tracked sales": "No es posible modificar líneas de pedido que se hayan empezado a preparar", - "It is not possible to modify sales that their articles are from Floramondo": "No es posible modificar líneas de pedido cuyos artículos sean de Floramondo", - "It is not possible to modify cloned sales": "No es posible modificar líneas de pedido clonadas", - "A supplier with the same name already exists. Change the country.": "Un proveedor con el mismo nombre ya existe. Cambie el país.", - "There is no assigned email for this client": "No hay correo asignado para este cliente", - "Exists an invoice with a future date": "Existe una factura con fecha posterior", - "Invoice date can't be less than max date": "La fecha de factura no puede ser inferior a la fecha límite", - "Warehouse inventory not set": "El almacén inventario no está establecido", - "This locker has already been assigned": "Esta taquilla ya ha sido asignada", - "Tickets with associated refunds": "No se pueden borrar tickets con abonos asociados. Este ticket está asociado al abono Nº %d", - "Not exist this branch": "La rama no existe", - "This ticket cannot be signed because it has not been boxed": "Este ticket no puede firmarse porque no ha sido encajado", - "Collection does not exist": "La colección no existe", - "Cannot obtain exclusive lock": "No se puede obtener un bloqueo exclusivo", - "Insert a date range": "Inserte un rango de fechas", - "Added observation": "{{user}} añadió esta observacion: {{text}}", - "Comment added to client": "Observación añadida al cliente {{clientFk}}", - "Invalid auth code": "Código de verificación incorrecto", - "Invalid or expired verification code": "Código de verificación incorrecto o expirado", - "Cannot create a new claimBeginning from a different ticket": "No se puede crear una línea de reclamación de un ticket diferente al origen", - "company": "Compañía", - "country": "País", - "clientId": "Id cliente", - "clientSocialName": "Cliente", - "amount": "Importe", - "taxableBase": "Base", - "ticketFk": "Id ticket", - "isActive": "Activo", - "hasToInvoice": "Facturar", - "isTaxDataChecked": "Datos comprobados", - "comercialId": "Id comercial", - "comercialName": "Comercial", - "Pass expired": "La contraseña ha caducado, cambiela desde Salix", - "Invalid NIF for VIES": "Invalid NIF for VIES", - "Ticket does not exist": "Este ticket no existe", - "Ticket is already signed": "Este ticket ya ha sido firmado", - "Authentication failed": "Autenticación fallida", - "You can't use the same password": "No puedes usar la misma contraseña", - "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono", - "Fecha fuera de rango": "Fecha fuera de rango", - "Error while generating PDF": "Error al generar PDF", - "Error when sending mail to client": "Error al enviar el correo al cliente", - "Mail not sent": "Se ha producido un fallo al enviar la factura al cliente [{{clientId}}]({{{clientUrl}}}), por favor revisa la dirección de correo electrónico", - "The renew period has not been exceeded": "El periodo de renovación no ha sido superado", - "Valid priorities": "Prioridades válidas: %d", - "hasAnyNegativeBase": "Base negativa para los tickets: {{ticketsIds}}", - "hasAnyPositiveBase": "Base positivas para los tickets: {{ticketsIds}}", - "You cannot assign an alias that you are not assigned to": "No puede asignar un alias que no tenga asignado", - "This ticket cannot be left empty.": "Este ticket no se puede dejar vacío. %s", - "The company has not informed the supplier account for bank transfers": "La empresa no tiene informado la cuenta de proveedor para transferencias bancarias", - "You cannot assign/remove an alias that you are not assigned to": "No puede asignar/eliminar un alias que no tenga asignado", - "This invoice has a linked vehicle.": "Esta factura tiene un vehiculo vinculado", - "You don't have enough privileges.": "No tienes suficientes permisos.", - "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", - "Street should be uppercase": "La dirección fiscal debe ir en mayúscula", - "Ticket without Route": "Ticket sin ruta", - "Select a different client": "Seleccione un cliente distinto", - "Fill all the fields": "Rellene todos los campos", - "The response is not a PDF": "La respuesta no es un PDF", - "Booking completed": "Reserva completada", - "The ticket is in preparation": "El ticket [{{ticketId}}]({{{ticketUrl}}}) del comercial {{salesPersonId}} está en preparación", - "The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada", - "User disabled": "Usuario desactivado", - "The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima", - "quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima", - "Cannot past travels with entries": "No se pueden pasar envíos con entradas", - "It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}", - "This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada", - "This user does not have an assigned tablet": "Este usuario no tiene tablet asignada", - "Field are invalid": "El campo '{{tag}}' no es válido", - "Incorrect pin": "Pin incorrecto.", - "You already have the mailAlias": "Ya tienes este alias de correo", - "The alias cant be modified": "Este alias de correo no puede ser modificado", - "No tickets to invoice": "No hay tickets para facturar", - "this warehouse has not dms": "El Almacén no acepta documentos", - "This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado", - "Name should be uppercase": "El nombre debe ir en mayúscula", - "Bank entity must be specified": "La entidad bancaria es obligatoria", - "An email is necessary": "Es necesario un email", - "You cannot update these fields": "No puedes actualizar estos campos", - "CountryFK cannot be empty": "El país no puede estar vacío", - "Cmr file does not exist": "El archivo del cmr no existe", - "You are not allowed to modify the alias": "No estás autorizado a modificar el alias", - "The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas", - "This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario", - "They're not your subordinate": "No es tu subordinado/a." -} + "Phone format is invalid": "El formato del teléfono no es correcto", + "You are not allowed to change the credit": "No tienes privilegios para modificar el crédito", + "Unable to mark the equivalence surcharge": "No se puede marcar el recargo de equivalencia", + "The default consignee can not be unchecked": "No se puede desmarcar el consignatario predeterminado", + "Unable to default a disabled consignee": "No se puede poner predeterminado un consignatario desactivado", + "Can't be blank": "No puede estar en blanco", + "Invalid TIN": "NIF/CIF inválido", + "TIN must be unique": "El NIF/CIF debe ser único", + "A client with that Web User name already exists": "Ya existe un cliente con ese Usuario Web", + "Is invalid": "Es inválido", + "Quantity cannot be zero": "La cantidad no puede ser cero", + "Enter an integer different to zero": "Introduce un entero distinto de cero", + "Package cannot be blank": "El embalaje no puede estar en blanco", + "The company name must be unique": "La razón social debe ser única", + "Invalid email": "Correo electrónico inválido", + "The IBAN does not have the correct format": "El IBAN no tiene el formato correcto", + "That payment method requires an IBAN": "El método de pago seleccionado requiere un IBAN", + "That payment method requires a BIC": "El método de pago seleccionado requiere un BIC", + "State cannot be blank": "El estado no puede estar en blanco", + "Worker cannot be blank": "El trabajador no puede estar en blanco", + "Cannot change the payment method if no salesperson": "No se puede cambiar la forma de pago si no hay comercial asignado", + "can't be blank": "El campo no puede estar vacío", + "Observation type must be unique": "El tipo de observación no puede repetirse", + "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero", + "The grade must be similar to the last one": "El grade debe ser similar al último", + "Only manager can change the credit": "Solo el gerente puede cambiar el credito de este cliente", + "Name cannot be blank": "El nombre no puede estar en blanco", + "Phone cannot be blank": "El teléfono no puede estar en blanco", + "Period cannot be blank": "El periodo no puede estar en blanco", + "Choose a company": "Selecciona una empresa", + "Se debe rellenar el campo de texto": "Se debe rellenar el campo de texto", + "Description should have maximum of 45 characters": "La descripción debe tener maximo 45 caracteres", + "Cannot be blank": "El campo no puede estar en blanco", + "The grade must be an integer greater than or equal to zero": "El grade debe ser un entero mayor o igual a cero", + "Sample type cannot be blank": "El tipo de plantilla no puede quedar en blanco", + "Description cannot be blank": "Se debe rellenar el campo de texto", + "The price of the item changed": "El precio del artículo cambió", + "The value should not be greater than 100%": "El valor no debe de ser mayor de 100%", + "The value should be a number": "El valor debe ser un numero", + "This order is not editable": "Esta orden no se puede modificar", + "You can't create an order for a frozen client": "No puedes crear una orden para un cliente congelado", + "You can't create an order for a client that has a debt": "No puedes crear una orden para un cliente con deuda", + "is not a valid date": "No es una fecha valida", + "Barcode must be unique": "El código de barras debe ser único", + "The warehouse can't be repeated": "El almacén no puede repetirse", + "The tag or priority can't be repeated for an item": "El tag o prioridad no puede repetirse para un item", + "The observation type can't be repeated": "El tipo de observación no puede repetirse", + "A claim with that sale already exists": "Ya existe una reclamación para esta línea", + "You don't have enough privileges to change that field": "No tienes permisos para cambiar ese campo", + "Warehouse cannot be blank": "El almacén no puede quedar en blanco", + "Agency cannot be blank": "La agencia no puede quedar en blanco", + "Not enough privileges to edit a client with verified data": "No tienes permisos para hacer cambios en un cliente con datos comprobados", + "This address doesn't exist": "Este consignatario no existe", + "You must delete the claim id %d first": "Antes debes borrar la reclamación %d", + "You don't have enough privileges": "No tienes suficientes permisos", + "Cannot check Equalization Tax in this NIF/CIF": "No se puede marcar RE en este NIF/CIF", + "You can't make changes on the basic data of an confirmed order or with rows": "No puedes cambiar los datos básicos de una orden con artículos", + "INVALID_USER_NAME": "El nombre de usuario solo debe contener letras minúsculas o, a partir del segundo carácter, números o subguiones, no está permitido el uso de la letra ñ", + "You can't create a ticket for a frozen client": "No puedes crear un ticket para un cliente congelado", + "You can't create a ticket for an inactive client": "No puedes crear un ticket para un cliente inactivo", + "Tag value cannot be blank": "El valor del tag no puede quedar en blanco", + "ORDER_EMPTY": "Cesta vacía", + "You don't have enough privileges to do that": "No tienes permisos para cambiar esto", + "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NO SE PUEDE DESACTIVAR EL CONSIGNAT", + "Error. El NIF/CIF está repetido": "Error. El NIF/CIF está repetido", + "Street cannot be empty": "Dirección no puede estar en blanco", + "City cannot be empty": "Ciudad no puede estar en blanco", + "Code cannot be blank": "Código no puede estar en blanco", + "You cannot remove this department": "No puedes eliminar este departamento", + "The extension must be unique": "La extensión debe ser unica", + "The secret can't be blank": "La contraseña no puede estar en blanco", + "We weren't able to send this SMS": "No hemos podido enviar el SMS", + "This client can't be invoiced": "Este cliente no puede ser facturado", + "You must provide the correction information to generate a corrective invoice": "Debes informar la información de corrección para generar una factura rectificativa", + "This ticket can't be invoiced": "Este ticket no puede ser facturado", + "You cannot add or modify services to an invoiced ticket": "No puedes añadir o modificar servicios a un ticket facturado", + "This ticket can not be modified": "Este ticket no puede ser modificado", + "The introduced hour already exists": "Esta hora ya ha sido introducida", + "INFINITE_LOOP": "Existe una dependencia entre dos Jefes", + "The sales of the receiver ticket can't be modified": "Las lineas del ticket al que envias no pueden ser modificadas", + "NO_AGENCY_AVAILABLE": "No hay una zona de reparto disponible con estos parámetros", + "ERROR_PAST_SHIPMENT": "No puedes seleccionar una fecha de envío en pasado", + "The current ticket can't be modified": "El ticket actual no puede ser modificado", + "The current claim can't be modified": "La reclamación actual no puede ser modificada", + "The sales of this ticket can't be modified": "Las lineas de este ticket no pueden ser modificadas", + "The sales do not exists": "La(s) línea(s) seleccionada(s) no existe(n)", + "Please select at least one sale": "Por favor selecciona al menos una linea", + "All sales must belong to the same ticket": "Todas las lineas deben pertenecer al mismo ticket", + "NO_ZONE_FOR_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", + "This item doesn't exists": "El artículo no existe", + "NOT_ZONE_WITH_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", + "Extension format is invalid": "El formato de la extensión es inválido", + "Invalid parameters to create a new ticket": "Parámetros inválidos para crear un nuevo ticket", + "This item is not available": "Este artículo no está disponible", + "This postcode already exists": "Este código postal ya existe", + "Concept cannot be blank": "El concepto no puede quedar en blanco", + "File doesn't exists": "El archivo no existe", + "You don't have privileges to change the zone": "No tienes permisos para cambiar la zona o para esos parámetros hay más de una opción de envío, hable con las agencias", + "This ticket is already on weekly tickets": "Este ticket ya está en tickets programados", + "Ticket id cannot be blank": "El id de ticket no puede quedar en blanco", + "Weekday cannot be blank": "El día de la semana no puede quedar en blanco", + "You can't delete a confirmed order": "No puedes borrar un pedido confirmado", + "The social name has an invalid format": "El nombre fiscal tiene un formato incorrecto", + "Invalid quantity": "Cantidad invalida", + "This postal code is not valid": "Este código postal no es válido", + "is invalid": "es inválido", + "The postcode doesn't exist. Please enter a correct one": "El código postal no existe. Por favor, introduce uno correcto", + "The department name can't be repeated": "El nombre del departamento no puede repetirse", + "This phone already exists": "Este teléfono ya existe", + "You cannot move a parent to its own sons": "No puedes mover un elemento padre a uno de sus hijos", + "You can't create a claim for a removed ticket": "No puedes crear una reclamación para un ticket eliminado", + "You cannot delete a ticket that part of it is being prepared": "No puedes eliminar un ticket en el que una parte que está siendo preparada", + "You must delete all the buy requests first": "Debes eliminar todas las peticiones de compra primero", + "You should specify a date": "Debes especificar una fecha", + "You should specify at least a start or end date": "Debes especificar al menos una fecha de inicio o de fin", + "Start date should be lower than end date": "La fecha de inicio debe ser menor que la fecha de fin", + "You should mark at least one week day": "Debes marcar al menos un día de la semana", + "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío", + "Customs agent is required for a non UEE member": "El agente de aduanas es requerido para los clientes extracomunitarios", + "Incoterms is required for a non UEE member": "El incoterms es requerido para los clientes extracomunitarios", + "Deleted sales from ticket": "He eliminado las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}", + "Added sale to ticket": "He añadido la siguiente linea al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}", + "Changed sale discount": "He cambiado el descuento de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Created claim": "He creado la reclamación [{{claimId}}]({{{claimUrl}}}) de las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Changed sale price": "He cambiado el precio de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* del ticket [{{ticketId}}]({{{ticketUrl}}})", + "Changed sale quantity": "He cambiado la cantidad de [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* del ticket [{{ticketId}}]({{{ticketUrl}}})", + "State": "Estado", + "regular": "normal", + "reserved": "reservado", + "Changed sale reserved state": "He cambiado el estado reservado de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Bought units from buy request": "Se ha comprado {{quantity}} unidades de [{{itemId}} {{concept}}]({{{urlItem}}}) para el ticket id [{{ticketId}}]({{{url}}})", + "Deny buy request": "Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}", + "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*", + "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})", + "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})", + "Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}", + "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*", + "Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*", + "Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}", + "ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto", + "Distance must be lesser than 4000": "La distancia debe ser inferior a 4000", + "This ticket is deleted": "Este ticket está eliminado", + "Unable to clone this travel": "No ha sido posible clonar este travel", + "This thermograph id already exists": "La id del termógrafo ya existe", + "Choose a date range or days forward": "Selecciona un rango de fechas o días en adelante", + "ORDER_ALREADY_CONFIRMED": "ORDEN YA CONFIRMADA", + "Invalid password": "Invalid password", + "Password does not meet requirements": "La contraseña no cumple los requisitos", + "Role already assigned": "Rol ya asignado", + "Invalid role name": "Nombre de rol no válido", + "Role name must be written in camelCase": "El nombre del rol debe escribirse en camelCase", + "Email already exists": "El correo ya existe", + "User already exists": "El/La usuario/a ya existe", + "Absence change notification on the labour calendar": "Notificación de cambio de ausencia en el calendario laboral", + "Record of hours week": "Registro de horas semana {{week}} año {{year}} ", + "Created absence": "El empleado {{author}} ha añadido una ausencia de tipo '{{absenceType}}' a {{employee}} para el día {{dated}}.", + "Deleted absence": "El empleado {{author}} ha eliminado una ausencia de tipo '{{absenceType}}' a {{employee}} del día {{dated}}.", + "I have deleted the ticket id": "He eliminado el ticket id [{{id}}]({{{url}}})", + "I have restored the ticket id": "He restaurado el ticket id [{{id}}]({{{url}}})", + "You can only restore a ticket within the first hour after deletion": "Únicamente puedes restaurar el ticket dentro de la primera hora después de su eliminación", + "Changed this data from the ticket": "He cambiado estos datos del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "agencyModeFk": "Agencia", + "clientFk": "Cliente", + "zoneFk": "Zona", + "warehouseFk": "Almacén", + "shipped": "F. envío", + "landed": "F. entrega", + "addressFk": "Consignatario", + "companyFk": "Empresa", + "The social name cannot be empty": "La razón social no puede quedar en blanco", + "The nif cannot be empty": "El NIF no puede quedar en blanco", + "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados", + "ASSIGN_ZONE_FIRST": "Asigna una zona primero", + "Amount cannot be zero": "El importe no puede ser cero", + "Company has to be official": "Empresa inválida", + "You can not select this payment method without a registered bankery account": "No se puede utilizar este método de pago si no has registrado una cuenta bancaria", + "Action not allowed on the test environment": "Esta acción no está permitida en el entorno de pruebas", + "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta", + "New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}* y un precio de *{{price}} €*", + "New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}*", + "Swift / BIC cannot be empty": "Swift / BIC no puede estar vacío", + "This BIC already exist.": "Este BIC ya existe.", + "That item doesn't exists": "Ese artículo no existe", + "There's a new urgent ticket:": "Hay un nuevo ticket urgente:", + "Invalid account": "Cuenta inválida", + "Compensation account is empty": "La cuenta para compensar está vacia", + "This genus already exist": "Este genus ya existe", + "This specie already exist": "Esta especie ya existe", + "Client assignment has changed": "He cambiado el comercial ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})", + "None": "Ninguno", + "The contract was not active during the selected date": "El contrato no estaba activo durante la fecha seleccionada", + "Cannot add more than one '1/2 day vacation'": "No puedes añadir más de un 'Vacaciones 1/2 dia'", + "This document already exists on this ticket": "Este documento ya existe en el ticket", + "Some of the selected tickets are not billable": "Algunos de los tickets seleccionados no son facturables", + "You can't invoice tickets from multiple clients": "No puedes facturar tickets de multiples clientes", + "nickname": "nickname", + "INACTIVE_PROVIDER": "Proveedor inactivo", + "This client is not invoiceable": "Este cliente no es facturable", + "serial non editable": "Esta serie no permite asignar la referencia", + "Max shipped required": "La fecha límite es requerida", + "Can't invoice to future": "No se puede facturar a futuro", + "Can't invoice to past": "No se puede facturar a pasado", + "This ticket is already invoiced": "Este ticket ya está facturado", + "A ticket with an amount of zero can't be invoiced": "No se puede facturar un ticket con importe cero", + "A ticket with a negative base can't be invoiced": "No se puede facturar un ticket con una base negativa", + "Global invoicing failed": "[Facturación global] No se han podido facturar algunos clientes", + "Wasn't able to invoice the following clients": "No se han podido facturar los siguientes clientes", + "Can't verify data unless the client has a business type": "No se puede verificar datos de un cliente que no tiene tipo de negocio", + "You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito", + "You can't change the credit set to zero from a financialBoss": "No puedes cambiar el cŕedito establecido a cero por un jefe de finanzas", + "Amounts do not match": "Las cantidades no coinciden", + "The PDF document does not exist": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'", + "The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos", + "You can't create a claim from a ticket delivered more than seven days ago": "No puedes crear una reclamación de un ticket entregado hace más de siete días", + "The worker has hours recorded that day": "El trabajador tiene horas fichadas ese día", + "The worker has a marked absence that day": "El trabajador tiene marcada una ausencia ese día", + "You can not modify is pay method checked": "No se puede modificar el campo método de pago validado", + "The account size must be exactly 10 characters": "El tamaño de la cuenta debe ser exactamente de 10 caracteres", + "Can't transfer claimed sales": "No puedes transferir lineas reclamadas", + "You don't have privileges to create refund": "No tienes permisos para crear un abono", + "The item is required": "El artículo es requerido", + "The agency is already assigned to another autonomous": "La agencia ya está asignada a otro autónomo", + "date in the future": "Fecha en el futuro", + "reference duplicated": "Referencia duplicada", + "This ticket is already a refund": "Este ticket ya es un abono", + "isWithoutNegatives": "Sin negativos", + "routeFk": "routeFk", + "Can't change the password of another worker": "No se puede cambiar la contraseña de otro trabajador", + "No hay un contrato en vigor": "No hay un contrato en vigor", + "No se permite fichar a futuro": "No se permite fichar a futuro", + "No está permitido trabajar": "No está permitido trabajar", + "Fichadas impares": "Fichadas impares", + "Descanso diario 12h.": "Descanso diario 12h.", + "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.", + "Dirección incorrecta": "Dirección incorrecta", + "Modifiable user details only by an administrator": "Detalles de usuario modificables solo por un administrador", + "Modifiable password only via recovery or by an administrator": "Contraseña modificable solo a través de la recuperación o por un administrador", + "Not enough privileges to edit a client": "No tienes suficientes privilegios para editar un cliente", + "This route does not exists": "Esta ruta no existe", + "Claim pickup order sent": "Reclamación Orden de recogida enviada [{{claimId}}]({{{claimUrl}}}) al cliente *{{clientName}}*", + "You don't have grant privilege": "No tienes privilegios para dar privilegios", + "You don't own the role and you can't assign it to another user": "No eres el propietario del rol y no puedes asignarlo a otro usuario", + "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionado con [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})", + "Already has this status": "Ya tiene este estado", + "There aren't records for this week": "No existen registros para esta semana", + "Empty data source": "Origen de datos vacio", + "App locked": "Aplicación bloqueada por el usuario {{userId}}", + "Email verify": "Correo de verificación", + "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment", + "Receipt's bank was not found": "No se encontró el banco del recibo", + "This receipt was not compensated": "Este recibo no ha sido compensado", + "Client's email was not found": "No se encontró el email del cliente", + "Negative basis": "Base negativa", + "This worker code already exists": "Este codigo de trabajador ya existe", + "This personal mail already exists": "Este correo personal ya existe", + "This worker already exists": "Este trabajador ya existe", + "App name does not exist": "El nombre de aplicación no es válido", + "Try again": "Vuelve a intentarlo", + "Aplicación bloqueada por el usuario 9": "Aplicación bloqueada por el usuario 9", + "Failed to upload delivery note": "Error al subir albarán {{id}}", + "The DOCUWARE PDF document does not exists": "El documento PDF Docuware no existe", + "It is not possible to modify tracked sales": "No es posible modificar líneas de pedido que se hayan empezado a preparar", + "It is not possible to modify sales that their articles are from Floramondo": "No es posible modificar líneas de pedido cuyos artículos sean de Floramondo", + "It is not possible to modify cloned sales": "No es posible modificar líneas de pedido clonadas", + "A supplier with the same name already exists. Change the country.": "Un proveedor con el mismo nombre ya existe. Cambie el país.", + "There is no assigned email for this client": "No hay correo asignado para este cliente", + "Exists an invoice with a future date": "Existe una factura con fecha posterior", + "Invoice date can't be less than max date": "La fecha de factura no puede ser inferior a la fecha límite", + "Warehouse inventory not set": "El almacén inventario no está establecido", + "This locker has already been assigned": "Esta taquilla ya ha sido asignada", + "Tickets with associated refunds": "No se pueden borrar tickets con abonos asociados. Este ticket está asociado al abono Nº %d", + "Not exist this branch": "La rama no existe", + "This ticket cannot be signed because it has not been boxed": "Este ticket no puede firmarse porque no ha sido encajado", + "Collection does not exist": "La colección no existe", + "Cannot obtain exclusive lock": "No se puede obtener un bloqueo exclusivo", + "Insert a date range": "Inserte un rango de fechas", + "Added observation": "{{user}} añadió esta observacion: {{text}}", + "Comment added to client": "Observación añadida al cliente {{clientFk}}", + "Invalid auth code": "Código de verificación incorrecto", + "Invalid or expired verification code": "Código de verificación incorrecto o expirado", + "Cannot create a new claimBeginning from a different ticket": "No se puede crear una línea de reclamación de un ticket diferente al origen", + "company": "Compañía", + "country": "País", + "clientId": "Id cliente", + "clientSocialName": "Cliente", + "amount": "Importe", + "taxableBase": "Base", + "ticketFk": "Id ticket", + "isActive": "Activo", + "hasToInvoice": "Facturar", + "isTaxDataChecked": "Datos comprobados", + "comercialId": "Id comercial", + "comercialName": "Comercial", + "Pass expired": "La contraseña ha caducado, cambiela desde Salix", + "Invalid NIF for VIES": "Invalid NIF for VIES", + "Ticket does not exist": "Este ticket no existe", + "Ticket is already signed": "Este ticket ya ha sido firmado", + "Authentication failed": "Autenticación fallida", + "You can't use the same password": "No puedes usar la misma contraseña", + "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono", + "Fecha fuera de rango": "Fecha fuera de rango", + "Error while generating PDF": "Error al generar PDF", + "Error when sending mail to client": "Error al enviar el correo al cliente", + "Mail not sent": "Se ha producido un fallo al enviar la factura al cliente [{{clientId}}]({{{clientUrl}}}), por favor revisa la dirección de correo electrónico", + "The renew period has not been exceeded": "El periodo de renovación no ha sido superado", + "Valid priorities": "Prioridades válidas: %d", + "hasAnyNegativeBase": "Base negativa para los tickets: {{ticketsIds}}", + "hasAnyPositiveBase": "Base positivas para los tickets: {{ticketsIds}}", + "You cannot assign an alias that you are not assigned to": "No puede asignar un alias que no tenga asignado", + "This ticket cannot be left empty.": "Este ticket no se puede dejar vacío. %s", + "The company has not informed the supplier account for bank transfers": "La empresa no tiene informado la cuenta de proveedor para transferencias bancarias", + "You cannot assign/remove an alias that you are not assigned to": "No puede asignar/eliminar un alias que no tenga asignado", + "This invoice has a linked vehicle.": "Esta factura tiene un vehiculo vinculado", + "You don't have enough privileges.": "No tienes suficientes permisos.", + "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", + "Street should be uppercase": "La dirección fiscal debe ir en mayúscula", + "Ticket without Route": "Ticket sin ruta", + "Select a different client": "Seleccione un cliente distinto", + "Fill all the fields": "Rellene todos los campos", + "The response is not a PDF": "La respuesta no es un PDF", + "Booking completed": "Reserva completada", + "The ticket is in preparation": "El ticket [{{ticketId}}]({{{ticketUrl}}}) del comercial {{salesPersonId}} está en preparación", + "The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada", + "User disabled": "Usuario desactivado", + "The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima", + "quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima", + "Cannot past travels with entries": "No se pueden pasar envíos con entradas", + "It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}", + "This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada", + "This user does not have an assigned tablet": "Este usuario no tiene tablet asignada", + "Field are invalid": "El campo '{{tag}}' no es válido", + "Incorrect pin": "Pin incorrecto.", + "You already have the mailAlias": "Ya tienes este alias de correo", + "The alias cant be modified": "Este alias de correo no puede ser modificado", + "No tickets to invoice": "No hay tickets para facturar", + "this warehouse has not dms": "El Almacén no acepta documentos", + "This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado", + "Name should be uppercase": "El nombre debe ir en mayúscula", + "Bank entity must be specified": "La entidad bancaria es obligatoria", + "An email is necessary": "Es necesario un email", + "You cannot update these fields": "No puedes actualizar estos campos", + "CountryFK cannot be empty": "El país no puede estar vacío", + "Cmr file does not exist": "El archivo del cmr no existe", + "You are not allowed to modify the alias": "No estás autorizado a modificar el alias", + "The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas", + "This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario", + "They're not your subordinate": "No es tu subordinado/a.", + "Missing data: parking or shelving": "Faltas datos: parking o carro" +} \ No newline at end of file From 678eb2928f441fe3f86a75b9559c72e71cad3686 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Tue, 26 Mar 2024 10:30:17 +0100 Subject: [PATCH 32/78] refs #6964 feat:hasItemOlder --- modules/item/back/methods/item-shelving/hasItemOlder.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js index b3fb6fa607..72f928ebca 100644 --- a/modules/item/back/methods/item-shelving/hasItemOlder.js +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -37,6 +37,11 @@ module.exports = Self => { Self.hasItemOlder = async(shelvingFkIn, parking, shelvingFkOut, itemFk, options) => { if (!parking && !shelvingFkOut) throw new UserError('Missing data: parking or shelving'); + + const myOptions = {}; + if (typeof options == 'object') + Object.assign(myOptions, options); + const result = await Self.rawSql(` SELECT COUNT(ish.id) countItemOlder FROM vn.itemShelving ish @@ -53,7 +58,7 @@ module.exports = Self => { AND (p.code <> ? OR ? IS NULL) AND (ish.shelvingFk <> ? OR ? IS NULL) AND (ish.itemFk <> ? OR ? IS NULL)`, - [shelvingFkIn, parking, parking, shelvingFkOut, shelvingFkOut, itemFk, itemFk], options); + [shelvingFkIn, parking, parking, shelvingFkOut, shelvingFkOut, itemFk, itemFk], myOptions); return result[0]['countItemOlder'] > 0; }; }; From 94f6d20bb1c42c0e14ea80c850010bd55088f6e5 Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 26 Mar 2024 13:41:53 +0100 Subject: [PATCH 33/78] feat: refs #6942 add Insert --- db/dump/fixtures.before.sql | 11 +----- .../procedures/addAccountReconciliation.sql | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 306fdeb204..801db221e0 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -3738,16 +3738,7 @@ INSERT INTO vn.parkingLog(originFk, userFk, `action`, creationDate, description, INSERT INTO vn.ticketLog (originFk,userFk,`action`,creationDate,changedModel,newInstance,changedModelId,changedModelValue) VALUES (18,9,'insert','2001-01-01 11:01:00.000','Ticket','{"isDeleted":true}',45,'Super Man'); -INSERT INTO `vn`.`accountReconciliation` ( - supplierAccountFk, - operationDated, - valueDated, - amount, - concept, - debitCredit, - calculatedCode, - created -) +INSERT INTO `vn`.`accountReconciliation` (supplierAccountFk,operationDated,valueDated,amount,concept,debitCredit,calculatedCode,created) VALUES (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',19.36,'BEL 1',1,'2','2023-12-14 08:39:53.000'), (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',30226.43,'BEL 2',1,'1','2023-12-14 08:39:53.000'), diff --git a/db/routines/vn/procedures/addAccountReconciliation.sql b/db/routines/vn/procedures/addAccountReconciliation.sql index e396e57dc4..2f3339bcd8 100644 --- a/db/routines/vn/procedures/addAccountReconciliation.sql +++ b/db/routines/vn/procedures/addAccountReconciliation.sql @@ -25,5 +25,42 @@ BEGIN ORDER BY calculatedCode, id ) sub2 ON ar.id = sub2.id SET ar.calculatedCode = sub2.newId; + + INSERT INTO till( + dated, + isAccountable, + serie, + concept, + `in`, + `out`, + bankFk, + companyFk, + warehouseFk, + supplierAccountFk, + calculatedCode, + InForeignValue, + OutForeignValue, + workerFk + ) + SELECT ar.operationDated dated, + TRUE isAccountable, + 'MB' serie, + ar.concept, + @totalIn := IF(ar.debitCredit = arc.debitCredit2 AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `in`, + @totalOut := IF(ar.debitCredit = arc.debitCredit AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `out`, + a.id bankFk, + sa.supplierFk companyFk, + arc.warehouseFk, + ar.supplierAccountFk, + ar.calculatedCode, + @totalIn InForeignValue, + @totalOut OutForeignValue, + account.myUser_getId() user + FROM accountReconciliation ar + JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk + JOIN accounting a ON a.id = sa.accountingFk + LEFT JOIN till t ON t.calculatedCode = ar.calculatedCode + JOIN accountReconciliationConfig arc + WHERE t.id IS NULL; END$$ DELIMITER ; \ No newline at end of file From ff8522cfd1758c698aa525347e3fb691566222ee Mon Sep 17 00:00:00 2001 From: sergiodt Date: Wed, 27 Mar 2024 07:09:18 +0100 Subject: [PATCH 34/78] refs #6964 feat:advice for olderItem --- .../item/back/methods/item-shelving/specs/hasItemOlder.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js index d44998fab6..abffead537 100644 --- a/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js +++ b/modules/item/back/methods/item-shelving/specs/hasItemOlder.spec.js @@ -32,7 +32,7 @@ describe('itemShelving hasOlder()', () => { const itemShelvingBefore = await models.ItemShelving.findOne(filter, myOptions); await itemShelvingBefore.updateAttributes({ itemFk: itemFk - }); + }, myOptions); const result = await models.ItemShelving.hasItemOlder(shelvingFkIn, parking, null, null, myOptions); expect(result).toBe(true); From 9240732c00c0a4b8600451d12fa5a2a49fd6b175 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Wed, 27 Mar 2024 07:49:51 +0100 Subject: [PATCH 35/78] refs #6964 feat:advice for olderItem --- modules/item/back/methods/item-shelving/hasItemOlder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js index 72f928ebca..9502cee672 100644 --- a/modules/item/back/methods/item-shelving/hasItemOlder.js +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -22,7 +22,7 @@ module.exports = Self => { }, { arg: 'itemFk', - type: 'int', + type: 'integer', description: 'Item id' }], returns: { From 97b2500eeafc560cb764d176680fc1a0095c6809 Mon Sep 17 00:00:00 2001 From: carlossa Date: Wed, 27 Mar 2024 14:24:58 +0100 Subject: [PATCH 36/78] refs #6074 fix comment --- db/versions/10964-silverDracena/00-firstScript.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/versions/10964-silverDracena/00-firstScript.sql b/db/versions/10964-silverDracena/00-firstScript.sql index 400758cb2e..dbc4ba8a0b 100644 --- a/db/versions/10964-silverDracena/00-firstScript.sql +++ b/db/versions/10964-silverDracena/00-firstScript.sql @@ -1,2 +1,2 @@ -- Place your SQL code here -ALTER TABLE vn.entry CHANGE isBlocked isBlocked__ tinyint(4) DEFAULT 0 NOT NULL COMMENT 'Deprecado 21/03/2024'; +ALTER TABLE vn.entry CHANGE isBlocked isBlocked__ tinyint(4) DEFAULT 0 NOT NULL COMMENT '@deprecated 27/03/2024'; From 9667d31441fe8b1beff0ad33d49f8092b5dcd030 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 27 Mar 2024 17:00:27 +0100 Subject: [PATCH 37/78] feat: refs #7150 --- .../bi/procedures/greuge_dif_porte_add.sql | 60 ++++++++++--------- .../10971-turquoiseRuscus/00-firstScript.sql | 5 ++ 2 files changed, 37 insertions(+), 28 deletions(-) create mode 100644 db/versions/10971-turquoiseRuscus/00-firstScript.sql diff --git a/db/routines/bi/procedures/greuge_dif_porte_add.sql b/db/routines/bi/procedures/greuge_dif_porte_add.sql index 02bd9eae40..09cdfe0763 100644 --- a/db/routines/bi/procedures/greuge_dif_porte_add.sql +++ b/db/routines/bi/procedures/greuge_dif_porte_add.sql @@ -1,8 +1,14 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`greuge_dif_porte_add`() BEGIN - DECLARE datSTART DATETIME DEFAULT TIMESTAMPADD(DAY,-60,util.VN_CURDATE()); -- '2019-07-01' - DECLARE datEND DATETIME DEFAULT TIMESTAMPADD(DAY,-1,util.VN_CURDATE()); + DECLARE vDateStarted DATETIME; + DECLARE vDateEnded DATETIME DEFAULT TIMESTAMPADD(DAY,-1,util.VN_CURDATE()); + DECLARE vDaysSinceLastRecalculation INT; + + SELECT daysSinceLastRecalculation INTO vDaysSinceLastRecalculation + FROM vn.greugeConfig; + + SET vDateStarted = TIMESTAMPADD(DAY, -vDaysSinceLastRecalculation, util.VN_CURDATE()); DROP TEMPORARY TABLE IF EXISTS tmp.dp; @@ -14,19 +20,17 @@ BEGIN SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) AS teorico, 00000.00 as practico, 00000.00 as greuge, - t.clientFk, - t.shipped - FROM - vn.ticket t + t.clientFk, + t.shipped + FROM vn.ticket t JOIN vn2008.Clientes cli ON cli.Id_cliente = t.clientFk LEFT JOIN vn.expedition e ON e.ticketFk = t.id JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk JOIN vn.zone z ON t.zoneFk = z.id - WHERE - t.shipped between datSTART AND datEND - AND cli.`real` - AND t.companyFk IN (442 , 567) - AND z.isVolumetric = FALSE + WHERE t.shipped between vDateStarted AND vDateEnded + AND cli.`real` + AND t.companyFk IN (442 , 567) + AND z.isVolumetric = FALSE GROUP BY t.id; -- Agencias que cobran por volumen @@ -35,11 +39,11 @@ BEGIN SUM(IFNULL(sv.freight,0)) AS teorico, 00000.00 as practico, 00000.00 as greuge, - sv.clientFk, - sv.shipped + sv.clientFk, + sv.shipped FROM vn.saleVolume sv - JOIN vn.zone z ON z.id = sv.zoneFk - AND sv.shipped BETWEEN datSTART AND datEND + JOIN vn.zone z ON z.id = sv.zoneFk + AND sv.shipped BETWEEN vDateStarted AND vDateEnded AND z.isVolumetric != FALSE GROUP BY sv.ticketFk; @@ -49,11 +53,11 @@ BEGIN (PRIMARY KEY (ticketFk)) ENGINE = MEMORY SELECT dp.ticketFk, sum(Cantidad * Valor) as valor - FROM tmp.dp - JOIN vn2008.Movimientos m ON m.Id_Ticket = dp.ticketFk - JOIN vn2008.Movimientos_componentes mc using(Id_Movimiento) - WHERE mc.Id_Componente = 15 - GROUP BY dp.ticketFk; + FROM tmp.dp + JOIN vn2008.Movimientos m ON m.Id_Ticket = dp.ticketFk + JOIN vn2008.Movimientos_componentes mc using(Id_Movimiento) + WHERE mc.Id_Componente = 15 + GROUP BY dp.ticketFk; UPDATE tmp.dp JOIN tmp.dp_aux USING(ticketFk) @@ -75,17 +79,17 @@ BEGIN SET greuge = IFNULL(Importe,0); INSERT INTO vn.greuge (clientFk,description,amount,shipped,greugeTypeFk,ticketFk) - SELECT dp.clientFk - , concat('dif_porte ', dp.ticketFk) - , round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe - , date(dp.shipped) - , 1 - ,dp.ticketFk + SELECT dp.clientFk, + concat('dif_porte ', dp.ticketFk), + round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe, + date(dp.shipped), + 1, + dp.ticketFk FROM tmp.dp - JOIN vn.client c ON c.id = dp.clientFk + JOIN vn.client c ON c.id = dp.clientFk WHERE ABS(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0)) > 1 AND c.isRelevant; - + DROP TEMPORARY TABLE tmp.dp, tmp.dp_aux; diff --git a/db/versions/10971-turquoiseRuscus/00-firstScript.sql b/db/versions/10971-turquoiseRuscus/00-firstScript.sql new file mode 100644 index 0000000000..39e754563a --- /dev/null +++ b/db/versions/10971-turquoiseRuscus/00-firstScript.sql @@ -0,0 +1,5 @@ +ALTER TABLE IF EXISTS `vn`.`greugeConfig` + ADD COLUMN IF NOT EXISTS `daysSinceLastRecalculation` int(11) NOT NULL; + +INSERT INTO vn.greugeConfig (daysSinceLastRecalculation) + VALUES (15); \ No newline at end of file From ed1bc063014b365b674c434e1ee52f54bb191147 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 27 Mar 2024 17:30:52 +0100 Subject: [PATCH 38/78] feat: refs #7150 --- db/versions/10971-turquoiseRuscus/00-firstScript.sql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/db/versions/10971-turquoiseRuscus/00-firstScript.sql b/db/versions/10971-turquoiseRuscus/00-firstScript.sql index 39e754563a..702f2d2aae 100644 --- a/db/versions/10971-turquoiseRuscus/00-firstScript.sql +++ b/db/versions/10971-turquoiseRuscus/00-firstScript.sql @@ -1,5 +1,4 @@ ALTER TABLE IF EXISTS `vn`.`greugeConfig` ADD COLUMN IF NOT EXISTS `daysSinceLastRecalculation` int(11) NOT NULL; -INSERT INTO vn.greugeConfig (daysSinceLastRecalculation) - VALUES (15); \ No newline at end of file +UPDATE vn.greugeConfig SET daysSinceLastRecalculation=15; \ No newline at end of file From 7634d82d8b0f090776e54a62136a5fa75fd81898 Mon Sep 17 00:00:00 2001 From: sergiodt Date: Thu, 28 Mar 2024 07:15:30 +0100 Subject: [PATCH 39/78] refs #6964 feat:hasItemOlder --- modules/item/back/methods/item-shelving/hasItemOlder.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/item/back/methods/item-shelving/hasItemOlder.js b/modules/item/back/methods/item-shelving/hasItemOlder.js index 9502cee672..ee4cdc8297 100644 --- a/modules/item/back/methods/item-shelving/hasItemOlder.js +++ b/modules/item/back/methods/item-shelving/hasItemOlder.js @@ -46,10 +46,9 @@ module.exports = Self => { SELECT COUNT(ish.id) countItemOlder FROM vn.itemShelving ish JOIN ( - SELECT ish.itemFk, created,shelvingFk, p.code + SELECT ish.itemFk, created,shelvingFk FROM vn.itemShelving ish JOIN vn.shelving s ON ish.shelvingFk = s.code - LEFT JOIN vn.parking p ON p.id = s.parkingFk WHERE ish.shelvingFk = ? )sub ON sub.itemFK = ish.itemFk JOIN vn.shelving s ON s.code = ish.shelvingFk From c1310ada918b98887d92211655f20aaecdccdcde Mon Sep 17 00:00:00 2001 From: alexm Date: Thu, 28 Mar 2024 09:28:42 +0100 Subject: [PATCH 40/78] refs #7152 deploy: init version 24.16 --- CHANGELOG.md | 14 ++------------ package.json | 2 +- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4eed719214..c031a38749 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,22 +5,12 @@ 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). +## [24.16.01] - 2024-04-18 + ## [2414.01] - 2024-04-04 -### Added - -### Changed - -### Fixed - ## [2408.01] - 2024-02-22 -### Added - -### Changed - -### Fixed - ## [2406.01] - 2024-02-08 ### Added diff --git a/package.json b/package.json index be209e737b..39c5e15b75 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "salix-back", - "version": "24.14.0", + "version": "24.16.0", "author": "Verdnatura Levante SL", "description": "Salix backend", "license": "GPL-3.0", From b445d745a534a611e77ed259f1abe4cc75500b2e Mon Sep 17 00:00:00 2001 From: Pako Date: Thu, 28 Mar 2024 11:40:18 +0100 Subject: [PATCH 41/78] cambios --- .../vn/procedures/sale_boxPickingPrint.sql | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 db/routines/vn/procedures/sale_boxPickingPrint.sql diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql new file mode 100644 index 0000000000..e979ee0b4d --- /dev/null +++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql @@ -0,0 +1,283 @@ +DELIMITER $$ +$$ +CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE vn.sale_boxPickingPrint( + IN vPrinterFk INT, + IN vSaleFk INT, + IN vPacking INT, + IN vSectorFk INT, + IN vUserFk INT, + IN vPackagingFk VARCHAR(10), + IN vPackingSiteFk INT) +BEGIN +/** Splits a line of sale to a different ticket and prints the transport sticker + */ + DECLARE vAgencyModeFk INT; + DECLARE vConcept VARCHAR(30); + DECLARE vExpeditionFk INT; + DECLARE vItemFk INT; + DECLARE vItemShelvingFk INT; + DECLARE vItemShelvingSaleFk INT; + DECLARE vItemShelvingSaleFk_old INT; + DECLARE vLastExpeditionTimeStamp DATETIME; + DECLARE vMaxPhoneLength INT DEFAULT 11; + DECLARE vMaxStreetLength INT DEFAULT 36; + DECLARE vNewSaleFk INT; + DECLARE vNewTicketFk INT; + DECLARE vParkingCode VARCHAR(10); + DECLARE vQuantity INT; + DECLARE vRemainder INT DEFAULT 0; + DECLARE vRemainderSaleFk INT; + DECLARE vShelving VARCHAR(10); + DECLARE vTicketFk INT; + + SELECT s.quantity, + s.quantity MOD vPacking, + s.ticketFk, + s.itemFk, + s.concept + INTO vQuantity, + vRemainder, + vTicketFk, + vItemFk, + vConcept + FROM sale s + WHERE s.id = vSaleFk; + + IF vRemainder THEN + UPDATE sale SET quantity = quantity - vRemainder WHERE id = vSaleFk; + + INSERT INTO sale(ticketFk, itemFk, quantity, price, discount, concept) + SELECT ticketFk, itemFk, vRemainder, price, discount, concept + FROM sale + WHERE id = vSaleFk; + + SET vRemainderSaleFk = LAST_INSERT_ID(); + + INSERT INTO saleComponent(saleFk, componentFk, value) + SELECT vRemainderSaleFk, componentFk, value + FROM saleComponent + WHERE saleFk = vSaleFk; + END IF; + +w1: WHILE vQuantity >= vPacking DO + + SET vItemShelvingFk = NULL; + + SELECT sub.id + INTO vItemShelvingFk + FROM productionConfig pc + JOIN ( + SELECT ish.id, + ish.visible - IFNULL(SUM(iss.quantity),0) available, + p.pickingOrder, + ish.created + FROM itemShelving ish + JOIN shelving sh ON sh.code = ish.shelvingFk + JOIN parking p ON p.id = sh.parkingFk + LEFT JOIN itemShelvingSale iss + ON iss.itemShelvingFk = ish.id + AND iss.created >= CURDATE() + AND iss.isPicked = FALSE + WHERE ish.itemFk = vItemFk + AND p.sectorFk = vSectorFk + GROUP BY ish.id + HAVING available >= vPacking) sub + ORDER BY IF(pc.orderMode = 'Location',sub.pickingOrder, sub.created) + LIMIT 1; + + IF vItemShelvingFk THEN + INSERT INTO itemShelvingSale + SET itemShelvingFk = vItemShelvingFk, + saleFk = vSaleFk, + quantity = vPacking, + userFk = vUserFk, + isPicked = TRUE; + + SET vItemShelvingSaleFk = LAST_INSERT_ID(); + + UPDATE sale SET isPicked = FALSE WHERE id = vSaleFk; + ELSE + LEAVE w1; + END IF; + + SET vNewTicketFk = NULL; + + SELECT MAX(t.id) INTO vNewTicketFk + FROM ticket t + JOIN ticketLastState tls ON tls.ticketFk = t.id + JOIN (SELECT addressFk, clientFk, date(shipped) shipped, warehouseFk + FROM ticket + WHERE id = vTicketFk) tt + ON tt.addressFk = t.addressFk + AND tt.clientFk = t.clientFk + AND t.shipped BETWEEN tt.shipped AND util.dayend(tt.shipped) + AND t.warehouseFk = tt.warehouseFk + WHERE tls.name = 'Encajado' ; + + IF ISNULL(vNewTicketFk) THEN + INSERT INTO ticket( clientFk, + shipped, + addressFk, + agencyModeFk, + nickname, + warehouseFk, + companyFk, + landed, + zoneFk, + zonePrice, + zoneBonus, + routeFk, + priority, + hasPriority, + clonedFrom) + SELECT clientFk, + shipped, + addressFk, + agencyModeFk, + nickname, + warehouseFk, + companyFk, + landed, + zoneFk, + zonePrice, + zoneBonus, + routeFk, + priority, + hasPriority, + id + FROM ticket + WHERE id = vTicketFk; + + SET vNewTicketFk = LAST_INSERT_ID(); + + INSERT INTO ticketTracking(ticketFk, stateFk, userFk) + SELECT vNewTicketFk, id, vUserFk + FROM state + WHERE code = 'PACKED'; + END IF; + + UPDATE sale SET quantity = quantity - vPacking WHERE id = vSaleFk; + + UPDATE itemShelving SET visible = visible - vPacking WHERE id = vItemShelvingFk; + + SET vNewSaleFk = NULL; + + SELECT MAX(id) INTO vNewSaleFk + FROM sale + WHERE ticketFk = vNewTicketFk + AND itemFk = vItemFk; + + IF vNewSaleFk THEN + UPDATE sale + SET quantity = quantity + vPacking + WHERE id = vNewSaleFk; + + SET vItemShelvingSaleFk_old = NULL; + + SELECT MAX(id) INTO vItemShelvingSaleFk_old + FROM itemShelvingSale + WHERE itemShelvingFk = vItemShelvingFk + AND saleFk = vNewSaleFk; + + IF vItemShelvingSaleFk_old THEN + UPDATE itemShelvingSale + SET quantity = quantity + vPacking + WHERE id = vItemShelvingSaleFk_old; + + DELETE FROM itemShelvingSale + WHERE id = vItemShelvingSaleFk; + + SET vItemShelvingSaleFk = vItemShelvingSaleFk_old; + ELSE + UPDATE itemShelvingSale + SET saleFk = vNewSaleFk + WHERE id = vItemShelvingSaleFk; + END IF; + ELSE + INSERT INTO sale(ticketFk, itemFk, concept, quantity, discount, price) + SELECT vNewTicketFk, itemFk, concept, vPacking, discount, price + FROM sale + WHERE id = vSaleFk; + + SET vNewSaleFk = LAST_INSERT_ID(); + + INSERT INTO saleComponent(saleFk, componentFk, value, isGreuge) + SELECT vNewSaleFk, componentFk, value, isGreuge + FROM saleComponent + WHERE saleFk = vSaleFk; + + UPDATE itemShelvingSale + SET saleFk = vNewSaleFk + WHERE id = vItemShelvingSaleFk; + END IF; + + INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk) + SELECT vNewSaleFk, TRUE, vUserFk, id + FROM state + WHERE code = 'PREPARED'; + + SELECT agencyModeFk INTO vAgencyModeFk + FROM ticket + WHERE id = vNewTicketFk; + + INSERT INTO expedition( + agencyModeFk, + ticketFk, + freightItemFk, + workerFk, + packagingFk, + itemPackingTypeFk, + hostFk, + packingSiteFk, + monitorId, + started, + ended + ) + SELECT vAgencyModeFk, + vNewTicketFk, + i.id, + vUserFk, + vPackagingFk, + ps.code, + h.code, + vPackingSiteFk, + ps.monitorId, + IFNULL(vLastExpeditionTimeStamp, NOW()), + NOW() + FROM packingSite ps + JOIN host h ON h.id = ps.hostFk + JOIN item i ON i.name = 'Shipping cost' + WHERE ps.id = vPackingSiteFk + LIMIT 1; + + SET vExpeditionFk = LAST_INSERT_ID(); + + SET vLastExpeditionTimeStamp = NOW(); + + CALL dipole.expedition_Add(vExpeditionFk,vPrinterFk, TRUE); + + SELECT shelvingFk, p.code + INTO vShelving, vParkingCode + FROM itemShelving ish + JOIN shelving sh ON sh.code = ish.shelvingFk + JOIN parking p ON p.id = sh.parkingFk + WHERE ish.id = vItemShelvingFk; + + UPDATE dipole.expedition_PrintOut + SET isPrinted = FALSE, + itemFk = vItemFk, + quantity = vPacking, + longName = vConcept, + shelvingFk = vShelving, + parkingCode = vParkingCode, + phone = RIGHT(phone,vMaxPhoneLength), + street = RIGHT(street, vMAxStreetLength) + WHERE expeditionFk = vExpeditionFk; + + DELETE FROM sale + WHERE quantity = 0 + AND id = vSaleFk; + END WHILE; + +END$$ +DELIMITER ; \ No newline at end of file From 1d906c993b8b0ebff3f9e5ba455781aa75a2ea7e Mon Sep 17 00:00:00 2001 From: Pako Date: Thu, 28 Mar 2024 12:43:13 +0100 Subject: [PATCH 42/78] portes --- db/routines/vn/procedures/sale_boxPickingPrint.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql index e979ee0b4d..6cd8eeb205 100644 --- a/db/routines/vn/procedures/sale_boxPickingPrint.sql +++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql @@ -246,7 +246,7 @@ w1: WHILE vQuantity >= vPacking DO NOW() FROM packingSite ps JOIN host h ON h.id = ps.hostFk - JOIN item i ON i.name = 'Shipping cost' + JOIN item i ON i.name = 'Porte Caja' WHERE ps.id = vPackingSiteFk LIMIT 1; From 76c04cb2605bf032d0be16ea9a65aa464f604dbd Mon Sep 17 00:00:00 2001 From: Juanjo Breso Date: Thu, 28 Mar 2024 13:33:21 +0000 Subject: [PATCH 43/78] Restore storage rule --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b741a2d440..895a6a8dc4 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ print.*.json db.json junit.xml .DS_Store +storage \ No newline at end of file From c942786783ea8bc9650e20ba690fcf095e98624b Mon Sep 17 00:00:00 2001 From: Pako Date: Thu, 28 Mar 2024 14:54:30 +0100 Subject: [PATCH 44/78] pruebas --- .../vn/procedures/boxPicking_print.sql | 22 +++++++++++++------ .../vn/procedures/sale_boxPickingPrint.sql | 14 ++++++------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/db/routines/vn/procedures/boxPicking_print.sql b/db/routines/vn/procedures/boxPicking_print.sql index 5eea4ee1ed..31485be1d1 100644 --- a/db/routines/vn/procedures/boxPicking_print.sql +++ b/db/routines/vn/procedures/boxPicking_print.sql @@ -59,6 +59,8 @@ BEGIN WHERE saleFk = vSaleFk; END IF; +SELECT vQuantity , vPacking; + w1: WHILE vQuantity >= vPacking DO SET vItemShelvingFk = NULL; @@ -86,13 +88,13 @@ w1: WHILE vQuantity >= vPacking DO LIMIT 1; IF vItemShelvingFk THEN - INSERT INTO itemShelvingSale + /* INSERT INTO itemShelvingSale SET itemShelvingFk = vItemShelvingFk, saleFk = vSaleFk, quantity = vPacking, userFk = vUserFk, isPicked = TRUE; - +*/ SET vItemShelvingSaleFk = LAST_INSERT_ID(); UPDATE sale SET isPicked = FALSE WHERE id = vSaleFk; @@ -188,10 +190,12 @@ w1: WHILE vQuantity >= vPacking DO WHERE id = vItemShelvingSaleFk; SET vItemShelvingSaleFk = vItemShelvingSaleFk_old; - ELSE - UPDATE itemShelvingSale + /*ELSE + + * UPDATE itemShelvingSale SET saleFk = vNewSaleFk WHERE id = vItemShelvingSaleFk; + */ END IF; ELSE INSERT INTO sale(ticketFk, itemFk, concept, quantity, discount, price) @@ -206,9 +210,11 @@ w1: WHILE vQuantity >= vPacking DO FROM saleComponent WHERE saleFk = vSaleFk; - UPDATE itemShelvingSale + /* + * UPDATE itemShelvingSale SET saleFk = vNewSaleFk WHERE id = vItemShelvingSaleFk; + */ END IF; INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk) @@ -231,7 +237,8 @@ w1: WHILE vQuantity >= vPacking DO packingSiteFk, monitorId, started, - ended + ended, + counter ) SELECT vAgencyModeFk, vNewTicketFk, @@ -243,7 +250,8 @@ w1: WHILE vQuantity >= vPacking DO vPackingSiteFk, ps.monitorId, IFNULL(vLastExpeditionTimeStamp, NOW()), - NOW() + NOW(), + 0 FROM packingSite ps JOIN host h ON h.id = ps.hostFk JOIN item i ON i.name = 'Shipping cost' diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql index 6cd8eeb205..7872ff000a 100644 --- a/db/routines/vn/procedures/sale_boxPickingPrint.sql +++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql @@ -86,7 +86,7 @@ w1: WHILE vQuantity >= vPacking DO LIMIT 1; IF vItemShelvingFk THEN - INSERT INTO itemShelvingSale + /* INSERT INTO itemShelvingSale SET itemShelvingFk = vItemShelvingFk, saleFk = vSaleFk, quantity = vPacking, @@ -94,7 +94,7 @@ w1: WHILE vQuantity >= vPacking DO isPicked = TRUE; SET vItemShelvingSaleFk = LAST_INSERT_ID(); - +*/ UPDATE sale SET isPicked = FALSE WHERE id = vSaleFk; ELSE LEAVE w1; @@ -188,10 +188,10 @@ w1: WHILE vQuantity >= vPacking DO WHERE id = vItemShelvingSaleFk; SET vItemShelvingSaleFk = vItemShelvingSaleFk_old; - ELSE + /* ELSE UPDATE itemShelvingSale SET saleFk = vNewSaleFk - WHERE id = vItemShelvingSaleFk; + WHERE id = vItemShelvingSaleFk; */ END IF; ELSE INSERT INTO sale(ticketFk, itemFk, concept, quantity, discount, price) @@ -206,9 +206,9 @@ w1: WHILE vQuantity >= vPacking DO FROM saleComponent WHERE saleFk = vSaleFk; - UPDATE itemShelvingSale - SET saleFk = vNewSaleFk - WHERE id = vItemShelvingSaleFk; + /* UPDATE itemShelvingSale + SET saleFk = vNewSaleFk */ + END IF; INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk) From df271a242d8b1e65a293bc067b24e31996d93b66 Mon Sep 17 00:00:00 2001 From: jorgep Date: Thu, 28 Mar 2024 15:03:33 +0100 Subject: [PATCH 45/78] fix: refs #6492 procedure --- .../procedures/addAccountReconciliation.sql | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/db/routines/vn/procedures/addAccountReconciliation.sql b/db/routines/vn/procedures/addAccountReconciliation.sql index 2f3339bcd8..ed4b811040 100644 --- a/db/routines/vn/procedures/addAccountReconciliation.sql +++ b/db/routines/vn/procedures/addAccountReconciliation.sql @@ -42,20 +42,20 @@ BEGIN OutForeignValue, workerFk ) - SELECT ar.operationDated dated, - TRUE isAccountable, - 'MB' serie, + SELECT ar.operationDated, + TRUE, + 'MB', ar.concept, - @totalIn := IF(ar.debitCredit = arc.debitCredit2 AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `in`, - @totalOut := IF(ar.debitCredit = arc.debitCredit AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `out`, - a.id bankFk, - sa.supplierFk companyFk, + IF(ar.debitCredit = arc.debitCredit2 AND a.currencyFk = arc.currencyFk, ar.amount, NULL), + IF(ar.debitCredit = arc.debitCredit AND a.currencyFk = arc.currencyFk, ar.amount, NULL), + a.id, + sa.supplierFk, arc.warehouseFk, ar.supplierAccountFk, ar.calculatedCode, - @totalIn InForeignValue, - @totalOut OutForeignValue, - account.myUser_getId() user + IF(ar.debitCredit = arc.debitCredit2 AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL), + IF(ar.debitCredit = arc.debitCredit AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL), + account.myUser_getId() FROM accountReconciliation ar JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk JOIN accounting a ON a.id = sa.accountingFk From 9aae9677e66b3208fd66b1399a578cf1974f6ef2 Mon Sep 17 00:00:00 2001 From: Pako Date: Mon, 1 Apr 2024 08:43:26 +0200 Subject: [PATCH 46/78] modificaciones --- .../vn/procedures/sale_boxPickingPrint.sql | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql index 7872ff000a..8b7f8ecbe6 100644 --- a/db/routines/vn/procedures/sale_boxPickingPrint.sql +++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql @@ -61,6 +61,8 @@ BEGIN w1: WHILE vQuantity >= vPacking DO + SET vQuantity = vQuantity - vPacking; + SET vItemShelvingFk = NULL; SELECT sub.id @@ -86,7 +88,7 @@ w1: WHILE vQuantity >= vPacking DO LIMIT 1; IF vItemShelvingFk THEN - /* INSERT INTO itemShelvingSale + INSERT INTO itemShelvingSale SET itemShelvingFk = vItemShelvingFk, saleFk = vSaleFk, quantity = vPacking, @@ -94,7 +96,7 @@ w1: WHILE vQuantity >= vPacking DO isPicked = TRUE; SET vItemShelvingSaleFk = LAST_INSERT_ID(); -*/ + UPDATE sale SET isPicked = FALSE WHERE id = vSaleFk; ELSE LEAVE w1; @@ -188,10 +190,10 @@ w1: WHILE vQuantity >= vPacking DO WHERE id = vItemShelvingSaleFk; SET vItemShelvingSaleFk = vItemShelvingSaleFk_old; - /* ELSE + ELSE UPDATE itemShelvingSale SET saleFk = vNewSaleFk - WHERE id = vItemShelvingSaleFk; */ + WHERE id = vItemShelvingSaleFk; END IF; ELSE INSERT INTO sale(ticketFk, itemFk, concept, quantity, discount, price) @@ -206,9 +208,10 @@ w1: WHILE vQuantity >= vPacking DO FROM saleComponent WHERE saleFk = vSaleFk; - /* UPDATE itemShelvingSale - SET saleFk = vNewSaleFk */ - + UPDATE itemShelvingSale + SET saleFk = vNewSaleFk + WHERE id = vItemShelvingSaleFk; + END IF; INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk) @@ -277,6 +280,7 @@ w1: WHILE vQuantity >= vPacking DO DELETE FROM sale WHERE quantity = 0 AND id = vSaleFk; + END WHILE; END$$ From 98b1e933f7c0c390440b04ef6f8ad0edab66f542 Mon Sep 17 00:00:00 2001 From: Pako Date: Mon, 1 Apr 2024 08:46:07 +0200 Subject: [PATCH 47/78] prova --- db/routines/vn/procedures/sale_boxPickingPrint.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql index 8b7f8ecbe6..ae0c6451ee 100644 --- a/db/routines/vn/procedures/sale_boxPickingPrint.sql +++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql @@ -58,7 +58,7 @@ BEGIN FROM saleComponent WHERE saleFk = vSaleFk; END IF; - +/* res */ w1: WHILE vQuantity >= vPacking DO SET vQuantity = vQuantity - vPacking; From 547df4704922b475341a9ddffa33e984a619eb22 Mon Sep 17 00:00:00 2001 From: Pako Date: Mon, 1 Apr 2024 08:47:16 +0200 Subject: [PATCH 48/78] delete old proc --- .../vn/procedures/boxPicking_print.sql | 291 ------------------ 1 file changed, 291 deletions(-) delete mode 100644 db/routines/vn/procedures/boxPicking_print.sql diff --git a/db/routines/vn/procedures/boxPicking_print.sql b/db/routines/vn/procedures/boxPicking_print.sql deleted file mode 100644 index 31485be1d1..0000000000 --- a/db/routines/vn/procedures/boxPicking_print.sql +++ /dev/null @@ -1,291 +0,0 @@ -DELIMITER $$ -$$ -CREATE OR REPLACE PROCEDURE vn.sale_boxPickingPrint( - IN vPrinterFk INT, - IN vSaleFk INT, - IN vPacking INT, - IN vSectorFk INT, - IN vUserFk INT, - IN vPackagingFk INT, - IN vPackingSiteFk INT) -BEGIN -/** Splits a line of sale to a different ticket and prints the transport sticker - */ - DECLARE vAgencyModeFk INT; - DECLARE vConcept VARCHAR(30); - DECLARE vExpeditionFk INT; - DECLARE vItemFk INT; - DECLARE vItemShelvingFk INT; - DECLARE vItemShelvingSaleFk INT; - DECLARE vItemShelvingSaleFk_old INT; - DECLARE vLastExpeditionTimeStamp DATETIME; - DECLARE vMaxPhoneLength INT DEFAULT 11; - DECLARE vMaxStreetLength INT DEFAULT 36; - DECLARE vNewSaleFk INT; - DECLARE vNewTicketFk INT; - DECLARE vParkingCode VARCHAR(10); - DECLARE vQuantity INT; - DECLARE vRemainder INT DEFAULT 0; - DECLARE vRemainderSaleFk INT; - DECLARE vShelving VARCHAR(10); - DECLARE vTicketFk INT; - - SELECT s.quantity, - s.quantity MOD vPacking, - s.ticketFk, - s.itemFk, - s.concept - INTO vQuantity, - vRemainder, - vTicketFk, - vItemFk, - vConcept - FROM sale s - WHERE s.id = vSaleFk; - - IF vRemainder THEN - UPDATE sale SET quantity = quantity - vRemainder WHERE id = vSaleFk; - - INSERT INTO sale(ticketFk, itemFk, quantity, price, discount, concept) - SELECT ticketFk, itemFk, vRemainder, price, discount, concept - FROM sale - WHERE id = vSaleFk; - - SET vRemainderSaleFk = LAST_INSERT_ID(); - - INSERT INTO saleComponent(saleFk, componentFk, value) - SELECT vRemainderSaleFk, componentFk, value - FROM saleComponent - WHERE saleFk = vSaleFk; - END IF; - -SELECT vQuantity , vPacking; - -w1: WHILE vQuantity >= vPacking DO - - SET vItemShelvingFk = NULL; - - SELECT sub.id - INTO vItemShelvingFk - FROM productionConfig pc - JOIN ( - SELECT ish.id, - ish.visible - IFNULL(SUM(iss.quantity),0) available, - p.pickingOrder, - ish.created - FROM itemShelving ish - JOIN shelving sh ON sh.code = ish.shelvingFk - JOIN parking p ON p.id = sh.parkingFk - LEFT JOIN itemShelvingSale iss - ON iss.itemShelvingFk = ish.id - AND iss.created >= CURDATE() - AND iss.isPicked = FALSE - WHERE ish.itemFk = vItemFk - AND p.sectorFk = vSectorFk - GROUP BY ish.id - HAVING available >= vPacking) sub - ORDER BY IF(pc.orderMode = 'Location',sub.pickingOrder, sub.created) - LIMIT 1; - - IF vItemShelvingFk THEN - /* INSERT INTO itemShelvingSale - SET itemShelvingFk = vItemShelvingFk, - saleFk = vSaleFk, - quantity = vPacking, - userFk = vUserFk, - isPicked = TRUE; -*/ - SET vItemShelvingSaleFk = LAST_INSERT_ID(); - - UPDATE sale SET isPicked = FALSE WHERE id = vSaleFk; - ELSE - LEAVE w1; - END IF; - - SET vNewTicketFk = NULL; - - SELECT MAX(t.id) INTO vNewTicketFk - FROM ticket t - JOIN ticketLastState tls ON tls.ticketFk = t.id - JOIN (SELECT addressFk, clientFk, date(shipped) shipped, warehouseFk - FROM ticket - WHERE id = vTicketFk) tt - ON tt.addressFk = t.addressFk - AND tt.clientFk = t.clientFk - AND t.shipped BETWEEN tt.shipped AND util.dayend(tt.shipped) - AND t.warehouseFk = tt.warehouseFk - WHERE tls.name = 'Encajado' ; - - IF ISNULL(vNewTicketFk) THEN - INSERT INTO ticket( clientFk, - shipped, - addressFk, - agencyModeFk, - nickname, - warehouseFk, - companyFk, - landed, - zoneFk, - zonePrice, - zoneBonus, - routeFk, - priority, - hasPriority, - clonedFrom) - SELECT clientFk, - shipped, - addressFk, - agencyModeFk, - nickname, - warehouseFk, - companyFk, - landed, - zoneFk, - zonePrice, - zoneBonus, - routeFk, - priority, - hasPriority, - id - FROM ticket - WHERE id = vTicketFk; - - SET vNewTicketFk = LAST_INSERT_ID(); - - INSERT INTO ticketTracking(ticketFk, stateFk, userFk) - SELECT vNewTicketFk, id, vUserFk - FROM state - WHERE code = 'PACKED'; - END IF; - - UPDATE sale SET quantity = quantity - vPacking WHERE id = vSaleFk; - - UPDATE itemShelving SET visible = visible - vPacking WHERE id = vItemShelvingFk; - - SET vNewSaleFk = NULL; - - SELECT MAX(id) INTO vNewSaleFk - FROM sale - WHERE ticketFk = vNewTicketFk - AND itemFk = vItemFk; - - IF vNewSaleFk THEN - UPDATE sale - SET quantity = quantity + vPacking - WHERE id = vNewSaleFk; - - SET vItemShelvingSaleFk_old = NULL; - - SELECT MAX(id) INTO vItemShelvingSaleFk_old - FROM itemShelvingSale - WHERE itemShelvingFk = vItemShelvingFk - AND saleFk = vNewSaleFk; - - IF vItemShelvingSaleFk_old THEN - UPDATE itemShelvingSale - SET quantity = quantity + vPacking - WHERE id = vItemShelvingSaleFk_old; - - DELETE FROM itemShelvingSale - WHERE id = vItemShelvingSaleFk; - - SET vItemShelvingSaleFk = vItemShelvingSaleFk_old; - /*ELSE - - * UPDATE itemShelvingSale - SET saleFk = vNewSaleFk - WHERE id = vItemShelvingSaleFk; - */ - END IF; - ELSE - INSERT INTO sale(ticketFk, itemFk, concept, quantity, discount, price) - SELECT vNewTicketFk, itemFk, concept, vPacking, discount, price - FROM sale - WHERE id = vSaleFk; - - SET vNewSaleFk = LAST_INSERT_ID(); - - INSERT INTO saleComponent(saleFk, componentFk, value, isGreuge) - SELECT vNewSaleFk, componentFk, value, isGreuge - FROM saleComponent - WHERE saleFk = vSaleFk; - - /* - * UPDATE itemShelvingSale - SET saleFk = vNewSaleFk - WHERE id = vItemShelvingSaleFk; - */ - END IF; - - INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk) - SELECT vNewSaleFk, TRUE, vUserFk, id - FROM state - WHERE code = 'PREPARED'; - - SELECT agencyModeFk INTO vAgencyModeFk - FROM ticket - WHERE id = vNewTicketFk; - - INSERT INTO expedition( - agencyModeFk, - ticketFk, - freightItemFk, - workerFk, - packagingFk, - itemPackingTypeFk, - hostFk, - packingSiteFk, - monitorId, - started, - ended, - counter - ) - SELECT vAgencyModeFk, - vNewTicketFk, - i.id, - vUserFk, - vPackagingFk, - ps.code, - h.code, - vPackingSiteFk, - ps.monitorId, - IFNULL(vLastExpeditionTimeStamp, NOW()), - NOW(), - 0 - FROM packingSite ps - JOIN host h ON h.id = ps.hostFk - JOIN item i ON i.name = 'Shipping cost' - WHERE ps.id = vPackingSiteFk - LIMIT 1; - - SET vExpeditionFk = LAST_INSERT_ID(); - - SET vLastExpeditionTimeStamp = NOW(); - - CALL dipole.expedition_Add(vExpeditionFk,vPrinterFk, TRUE); - - SELECT shelvingFk, p.code - INTO vShelving, vParkingCode - FROM itemShelving ish - JOIN shelving sh ON sh.code = ish.shelvingFk - JOIN parking p ON p.id = sh.parkingFk - WHERE ish.id = vItemShelvingFk; - - UPDATE dipole.expedition_PrintOut - SET isPrinted = FALSE, - itemFk = vItemFk, - quantity = vPacking, - longName = vConcept, - shelvingFk = vShelving, - parkingCode = vParkingCode, - phone = RIGHT(phone,vMaxPhoneLength), - street = RIGHT(street, vMAxStreetLength) - WHERE expeditionFk = vExpeditionFk; - - DELETE FROM sale - WHERE quantity = 0 - AND id = vSaleFk; - END WHILE; - -END$$ -DELIMITER ; \ No newline at end of file From df911b9b75e23066f0263e1fcb96379b0ef25412 Mon Sep 17 00:00:00 2001 From: Pako Date: Mon, 1 Apr 2024 08:47:47 +0200 Subject: [PATCH 49/78] fora comentaris --- db/routines/vn/procedures/sale_boxPickingPrint.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql index ae0c6451ee..8b7f8ecbe6 100644 --- a/db/routines/vn/procedures/sale_boxPickingPrint.sql +++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql @@ -58,7 +58,7 @@ BEGIN FROM saleComponent WHERE saleFk = vSaleFk; END IF; -/* res */ + w1: WHILE vQuantity >= vPacking DO SET vQuantity = vQuantity - vPacking; From 7c4fc31b50a8ab0323a8ab510ffa70135d8cfe81 Mon Sep 17 00:00:00 2001 From: Pako Date: Mon, 1 Apr 2024 08:55:21 +0200 Subject: [PATCH 50/78] version productionConfig --- db/routines/vn/procedures/sale_boxPickingPrint.sql | 7 +++---- db/versions/10973-purpleAsparagus/00-firstScript.sql | 2 ++ 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 db/versions/10973-purpleAsparagus/00-firstScript.sql diff --git a/db/routines/vn/procedures/sale_boxPickingPrint.sql b/db/routines/vn/procedures/sale_boxPickingPrint.sql index 8b7f8ecbe6..dbb3b6c14d 100644 --- a/db/routines/vn/procedures/sale_boxPickingPrint.sql +++ b/db/routines/vn/procedures/sale_boxPickingPrint.sql @@ -238,7 +238,7 @@ w1: WHILE vQuantity >= vPacking DO ) SELECT vAgencyModeFk, vNewTicketFk, - i.id, + pc.defaultFreightItemFk, vUserFk, vPackagingFk, ps.code, @@ -249,9 +249,8 @@ w1: WHILE vQuantity >= vPacking DO NOW() FROM packingSite ps JOIN host h ON h.id = ps.hostFk - JOIN item i ON i.name = 'Porte Caja' - WHERE ps.id = vPackingSiteFk - LIMIT 1; + JOIN productionConfig pc + WHERE ps.id = vPackingSiteFk; SET vExpeditionFk = LAST_INSERT_ID(); diff --git a/db/versions/10973-purpleAsparagus/00-firstScript.sql b/db/versions/10973-purpleAsparagus/00-firstScript.sql new file mode 100644 index 0000000000..f5b8385295 --- /dev/null +++ b/db/versions/10973-purpleAsparagus/00-firstScript.sql @@ -0,0 +1,2 @@ +-- Place your SQL code here +ALTER TABLE vn.productionConfig ADD defaultFreightItemFk INT UNSIGNED DEFAULT 71 NOT NULL COMMENT 'Default value for expedition table'; From 09e1e4de19e5829c8993a6a93356049e8bd17af0 Mon Sep 17 00:00:00 2001 From: jcasado Date: Wed, 3 Apr 2024 07:23:36 +0200 Subject: [PATCH 51/78] refactor: #7123 change credit document --- front/core/components/searchbar/style.scss | 4 +- print/common/css/layout.css | 6 +- .../credit-request/assets/css/style.css | 27 ++++--- .../credit-request/credit-request.html | 72 +++++-------------- .../reports/credit-request/locale/es.yml | 1 + 5 files changed, 40 insertions(+), 70 deletions(-) diff --git a/front/core/components/searchbar/style.scss b/front/core/components/searchbar/style.scss index eab9c126b1..b8dff9474c 100644 --- a/front/core/components/searchbar/style.scss +++ b/front/core/components/searchbar/style.scss @@ -61,10 +61,10 @@ vn-searchbar { } vn-icon[icon="info"] { - position: absolute; + position: absolute; top: 2px; right: 2px } } } -} \ No newline at end of file +} diff --git a/print/common/css/layout.css b/print/common/css/layout.css index c1af4807d9..8f4d1fc9e8 100644 --- a/print/common/css/layout.css +++ b/print/common/css/layout.css @@ -178,7 +178,7 @@ table { margin-bottom: 15px } -.column-oriented td, +.column-oriented td, .column-oriented th { padding: 10px } @@ -252,10 +252,10 @@ table { position: absolute; text-align: center; width: 100%; - + } .line span { background-color: #FFF; padding: 5px -} \ No newline at end of file +} diff --git a/print/templates/reports/credit-request/assets/css/style.css b/print/templates/reports/credit-request/assets/css/style.css index a46a334847..ac58e81cf5 100644 --- a/print/templates/reports/credit-request/assets/css/style.css +++ b/print/templates/reports/credit-request/assets/css/style.css @@ -16,7 +16,6 @@ p { td > span { width: 100%; - margin-bottom: 15px } .green-background { @@ -28,7 +27,7 @@ td > span { } .info-panel td, .info-panel th { - padding: 1em 1em; + padding: 1%; } .info-panel { @@ -37,20 +36,28 @@ td > span { table { width: 100%; + text-align: end; } th { - width: 30%; -} - -td { width: 20%; } -.field { - float: none +td { + width: 10%; } -.wide-rectangle { - background-color: rgb(64 64 68); +.field { + width: 100%; + float: none; } + +th > input { + float: none; + border: 0; + background-color: rgb(236, 236, 236); + width: 100%; + height: 3em; +} + + diff --git a/print/templates/reports/credit-request/credit-request.html b/print/templates/reports/credit-request/credit-request.html index 6b167e95b5..2623de5778 100644 --- a/print/templates/reports/credit-request/credit-request.html +++ b/print/templates/reports/credit-request/credit-request.html @@ -9,17 +9,13 @@ {{$t('fields.date')}}: -
- -
+ - {{$t('fields.importCredit')}}: + {{$t('fields.importCredit')}}: -
- -
+ @@ -36,65 +32,47 @@ {{$t('fields.companyName')}}: -
- -
+ {{$t('fields.businessType')}}: -
- -
+ {{$t('fields.antiquity')}}: -
- -
+ {{$t('fields.surface')}}: -
- -
+ {{$t('fields.numberOfEmployees')}}: -
- -
+ {{$t('fields.owner')}}: -
- -
+ {{$t('fields.phone')}}: -
- -
+ {{$t('fields.payer')}}: -
- -
+ {{$t('fields.phone')}}: -
- -
+ @@ -113,27 +91,15 @@ - + - - - - @@ -150,15 +116,11 @@ diff --git a/print/templates/reports/credit-request/locale/es.yml b/print/templates/reports/credit-request/locale/es.yml index bc0e09528a..5a48cfa502 100644 --- a/print/templates/reports/credit-request/locale/es.yml +++ b/print/templates/reports/credit-request/locale/es.yml @@ -17,3 +17,4 @@ fields: personFilling: Persona que rellena el formulario companyInfo: Información general sobre la empresa economicInfo: Información económica + previousSellsVolume: Volumen de ventas del año anterior From de5e954ce20bd0f211346ac7201fb60d896e92cd Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 4 Apr 2024 08:48:58 +0200 Subject: [PATCH 52/78] fix: refs #7145 fix overFlow on driver-route --- .../reports/driver-route/assets/css/style.css | 10 +++ .../reports/driver-route/driver-route.html | 2 +- .../reports/driver-route/sql/routes.sql | 37 ++++---- .../reports/driver-route/sql/tickets.sql | 85 +++++++++---------- 4 files changed, 71 insertions(+), 63 deletions(-) diff --git a/print/templates/reports/driver-route/assets/css/style.css b/print/templates/reports/driver-route/assets/css/style.css index a3bcae7894..0f08f6493a 100644 --- a/print/templates/reports/driver-route/assets/css/style.css +++ b/print/templates/reports/driver-route/assets/css/style.css @@ -1,3 +1,13 @@ +td{ + overflow: hidden; + max-width: 100px; + text-overflow: ellipsis; +} + +/* .text-field{ + text-overflow: ellipsis; +} */ + h1 { text-align: center; } diff --git a/print/templates/reports/driver-route/driver-route.html b/print/templates/reports/driver-route/driver-route.html index 109afd2f58..1391f621c5 100644 --- a/print/templates/reports/driver-route/driver-route.html +++ b/print/templates/reports/driver-route/driver-route.html @@ -103,7 +103,7 @@
{{$t('fields.previousSalesVolume')}}:{{$t('fields.previousSellsVolume')}}: -
- -
+
{{$t('fields.forecastedSalesVolume')}}: -
- -
-
{{$t('fields.forecastedPurchases')}}: -
- -
+
{{$t('fields.personFilling')}}: -
- -
+
{{$t('fields.phone')}}: -
- -
+
- + diff --git a/print/templates/reports/driver-route/sql/routes.sql b/print/templates/reports/driver-route/sql/routes.sql index 79bede5b24..9d2dd5c13f 100644 --- a/print/templates/reports/driver-route/sql/routes.sql +++ b/print/templates/reports/driver-route/sql/routes.sql @@ -1,19 +1,18 @@ -SELECT - r.id, - r.m3, - r.created, - r.time, - u.nickName userNickName, - v.tradeMark vehicleTradeMark, - v.model vehicleModel, - v.numberPlate plateNumber, - IFNULL(s.name, am.name) AS agencyName -FROM route r - LEFT JOIN vehicle v ON v.id = r.vehicleFk - LEFT JOIN worker w ON w.id = r.workerFk - LEFT JOIN account.user u ON u.id = w.id - LEFT JOIN agencyMode am ON am.id = r.agencyModeFk - LEFT JOIN agency a ON a.id = am.agencyFk - LEFT JOIN supplierAgencyTerm sa ON sa.agencyFk = a.id - LEFT JOIN supplier s ON s.id = sa.supplierFk -WHERE r.id IN(?) +SELECT r.id, + r.m3, + r.created, + r.time, + u.nickName userNickName, + v.tradeMark vehicleTradeMark, + v.model vehicleModel, + v.numberPlate plateNumber, + IFNULL(s.name, am.name) agencyName + FROM route r + LEFT JOIN vehicle v ON v.id = r.vehicleFk + LEFT JOIN worker w ON w.id = r.workerFk + LEFT JOIN account.user u ON u.id = w.id + LEFT JOIN agencyMode am ON am.id = r.agencyModeFk + LEFT JOIN agency a ON a.id = am.agencyFk + LEFT JOIN supplierAgencyTerm sa ON sa.agencyFk = a.id + LEFT JOIN supplier s ON s.id = sa.supplierFk + WHERE r.id IN(?) diff --git a/print/templates/reports/driver-route/sql/tickets.sql b/print/templates/reports/driver-route/sql/tickets.sql index 9d548c2b31..1ffb4d6231 100644 --- a/print/templates/reports/driver-route/sql/tickets.sql +++ b/print/templates/reports/driver-route/sql/tickets.sql @@ -1,43 +1,42 @@ -SELECT - t.nickname addressName, - t.packages, - t.priority, - t.id, - t.clientFk, - t.companyFk, - t.routeFk, - if(a.phone, a.phone, c.phone) AS phone, - if(a.mobile, a.mobile, c.mobile) AS mobile, - wh.name warehouseName, - a.city, - a.street, - a.postalCode, - LPAD(a.id, 5, '0') AS addressFk, - p.name province, - 0 AS import, - am.name ticketAgency, - tob.description, - u.nickName salesPersonName, - ipkg.itemPackingTypes -FROM route r - JOIN ticket t ON t.routeFk = r.id - LEFT JOIN address a ON a.id = t.addressFk - LEFT JOIN client c ON c.id = t.clientFk - LEFT JOIN worker w ON w.id = client_getSalesPerson(t.clientFk, CURDATE()) - LEFT JOIN account.user u ON u.id = w.id - LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id AND tob.observationTypeFk = 3 - LEFT JOIN province p ON a.provinceFk = p.id - LEFT JOIN warehouse wh ON wh.id = t.warehouseFk - LEFT JOIN agencyMode am ON am.id = t.agencyModeFk - LEFT JOIN ( - SELECT t.id AS ticketFk, - GROUP_CONCAT(DISTINCT(i.itemPackingTypeFk)) AS itemPackingTypes - FROM route r - JOIN ticket t ON t.routeFk = r.id - JOIN sale s ON s.ticketFk = t.id - JOIN item i ON i.id = s.itemFk - WHERE r.id IN (?) - GROUP BY t.id - ) ipkg ON ipkg.ticketFk = t.id -WHERE r.id IN (?) -ORDER BY t.priority, t.id; \ No newline at end of file +SELECT t.nickname addressName, + t.packages, + t.priority, + t.id, + t.clientFk, + t.companyFk, + t.routeFk, + if(a.phone, a.phone, c.phone) phone, + if(a.mobile, a.mobile, c.mobile) mobile, + wh.name warehouseName, + a.city, + a.street, + a.postalCode, + LPAD(a.id, 5, '0') addressFk, + p.name province, + 0 import, + am.name ticketAgency, + tob.description, + u.nickName salesPersonName, + ipkg.itemPackingTypes + FROM route r + JOIN ticket t ON t.routeFk = r.id + LEFT JOIN address a ON a.id = t.addressFk + LEFT JOIN client c ON c.id = t.clientFk + LEFT JOIN worker w ON w.id = client_getSalesPerson(t.clientFk, CURDATE()) + LEFT JOIN account.user u ON u.id = w.id + LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id AND tob.observationTypeFk = 3 + LEFT JOIN province p ON a.provinceFk = p.id + LEFT JOIN warehouse wh ON wh.id = t.warehouseFk + LEFT JOIN agencyMode am ON am.id = t.agencyModeFk + LEFT JOIN ( + SELECT t.id AS ticketFk, + GROUP_CONCAT(DISTINCT(i.itemPackingTypeFk)) AS itemPackingTypes + FROM route r + JOIN ticket t ON t.routeFk = r.id + JOIN sale s ON s.ticketFk = t.id + JOIN item i ON i.id = s.itemFk + WHERE r.id IN (?) + GROUP BY t.id + ) ipkg ON ipkg.ticketFk = t.id + WHERE r.id IN (?) + ORDER BY t.priority, t.id; \ No newline at end of file From 2a7807a4ab1ba55e900e2d22ff04320537345177 Mon Sep 17 00:00:00 2001 From: pablone Date: Thu, 4 Apr 2024 08:49:47 +0200 Subject: [PATCH 53/78] remove: refs #7145 dev code --- print/templates/reports/driver-route/assets/css/style.css | 4 ---- print/templates/reports/driver-route/driver-route.html | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/print/templates/reports/driver-route/assets/css/style.css b/print/templates/reports/driver-route/assets/css/style.css index 0f08f6493a..02d6778cef 100644 --- a/print/templates/reports/driver-route/assets/css/style.css +++ b/print/templates/reports/driver-route/assets/css/style.css @@ -4,10 +4,6 @@ td{ text-overflow: ellipsis; } -/* .text-field{ - text-overflow: ellipsis; -} */ - h1 { text-align: center; } diff --git a/print/templates/reports/driver-route/driver-route.html b/print/templates/reports/driver-route/driver-route.html index 1391f621c5..109afd2f58 100644 --- a/print/templates/reports/driver-route/driver-route.html +++ b/print/templates/reports/driver-route/driver-route.html @@ -103,7 +103,7 @@
{{$t('street')}}{{$t('street')}} {{ticket.street}} {{$t('postcode')}} {{ticket.postalCode}}
- + From 0f8b80d533477dd0def25a2313cbd8136df5e237 Mon Sep 17 00:00:00 2001 From: jcasado Date: Thu, 4 Apr 2024 09:40:43 +0200 Subject: [PATCH 54/78] refs #6816 remove tittle MicroSip --- front/core/components/link-phone/index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/front/core/components/link-phone/index.html b/front/core/components/link-phone/index.html index 2789ab75ca..58724b0a1e 100644 --- a/front/core/components/link-phone/index.html +++ b/front/core/components/link-phone/index.html @@ -5,7 +5,6 @@ flat round icon="phone" - title="MicroSIP" ng-click="$event.stopPropagation();" > From 980127937094b5d7b53e45acc5e6bb812b93b9a6 Mon Sep 17 00:00:00 2001 From: robert Date: Thu, 4 Apr 2024 13:28:29 +0200 Subject: [PATCH 55/78] refs #169673 item_getSimilar --- db/routines/vn/procedures/item_getSimilar.sql | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/db/routines/vn/procedures/item_getSimilar.sql b/db/routines/vn/procedures/item_getSimilar.sql index a61898756e..f79bed3759 100644 --- a/db/routines/vn/procedures/item_getSimilar.sql +++ b/db/routines/vn/procedures/item_getSimilar.sql @@ -60,7 +60,11 @@ BEGIN (i.value8 <=> its.value8) match8, a.available, IFNULL(ip.counter, 0) `counter`, - IF(b.groupingMode = 1, b.grouping, b.packing) minQuantity, + CASE + WHEN b.groupingMode = 1 THEN b.grouping + WHEN b.groupingMode = 2 THEN b.packing + ELSE 1 + END AS minQuantity, iss.visible located FROM vn.item i JOIN cache.available a ON a.item_id = i.id From f5943e44451c0f034797ba26d41f8af927d62721 Mon Sep 17 00:00:00 2001 From: jcasado Date: Thu, 4 Apr 2024 13:57:23 +0200 Subject: [PATCH 56/78] refs #6324 remove column and dependencies --- db/dump/fixtures.before.sql | 13 +------------ db/myt.config.yml | 11 +++++++++++ db/package.json | 13 +++++++++++++ db/versions/10977-wheatFern/00-firstScript.sql | 2 ++ 4 files changed, 27 insertions(+), 12 deletions(-) create mode 100755 db/myt.config.yml create mode 100644 db/package.json create mode 100644 db/versions/10977-wheatFern/00-firstScript.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 1dad68b2ce..4ed91e1c04 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -3223,7 +3223,6 @@ INSERT INTO vn.buy packing = 20, `grouping` = 1, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3262,7 +3261,6 @@ INSERT INTO vn.buy packing = 40, `grouping` = 5, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3301,7 +3299,6 @@ INSERT INTO vn.buy packing = 10, `grouping` = 5, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3348,7 +3345,6 @@ INSERT INTO vn.buy packing = 20, `grouping` = 4, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3387,7 +3383,6 @@ INSERT INTO vn.buy packing = 20, `grouping` = 1, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3427,7 +3422,6 @@ INSERT INTO vn.buy packing = 200, `grouping` = 30, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3467,7 +3461,6 @@ INSERT INTO vn.buy packing = 500, `grouping` = 10, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3507,7 +3500,6 @@ INSERT INTO vn.buy packing = 300, `grouping` = 50, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3547,7 +3539,6 @@ INSERT INTO vn.buy packing = 50, `grouping` = 5, groupingMode = 1, - packageFk = 94, price1 = 1, price2 = 1, price3 = 1, @@ -3588,7 +3579,6 @@ INSERT vn.buy packing = 5, `grouping` = 2, groupingMode = 1, - packageFk = 94, price1 = 7, price2 = 7, price3 = 7, @@ -3628,7 +3618,6 @@ INSERT vn.buy packing = 100, `grouping` = 5, groupingMode = 1, - packageFk = 94, price1 = 7, price2 = 7, price3 = 7, @@ -3745,4 +3734,4 @@ INSERT INTO vn.ticketLog (originFk,userFk,`action`,creationDate,changedModel,new INSERT INTO `vn`.`supplierDms`(`supplierFk`, `dmsFk`, `editorFk`) VALUES - (1, 10, 9); \ No newline at end of file + (1, 10, 9); diff --git a/db/myt.config.yml b/db/myt.config.yml new file mode 100755 index 0000000000..3fe7ad02fc --- /dev/null +++ b/db/myt.config.yml @@ -0,0 +1,11 @@ +code: my-db +schemas: + - myt + - my_db +fixtures: + myt: + - version + - versionLog + my_db: + - table1 + - table2 diff --git a/db/package.json b/db/package.json new file mode 100644 index 0000000000..0cc0ed1d8a --- /dev/null +++ b/db/package.json @@ -0,0 +1,13 @@ +{ + "name": "my-db", + "version": "1.0.0", + "author": "Me", + "description": "My database project", + "license": "GPL-3.0", + "repository": { + "type": "git" + }, + "dependencies": { + "@verdnatura/myt": "^1.6.9" + } +} \ No newline at end of file diff --git a/db/versions/10977-wheatFern/00-firstScript.sql b/db/versions/10977-wheatFern/00-firstScript.sql new file mode 100644 index 0000000000..53c1a4fa60 --- /dev/null +++ b/db/versions/10977-wheatFern/00-firstScript.sql @@ -0,0 +1,2 @@ +-- Place your SQL code here +ALTER TABLE vn.buy DROP COLUMN packageFk; From f9ef45f1d9f8536b840487f3d6339e89055c15f6 Mon Sep 17 00:00:00 2001 From: jcasado Date: Thu, 4 Apr 2024 14:01:30 +0200 Subject: [PATCH 57/78] refs #6324 remove doc --- db/myt.config.yml | 11 ----------- db/package.json | 13 ------------- 2 files changed, 24 deletions(-) delete mode 100755 db/myt.config.yml delete mode 100644 db/package.json diff --git a/db/myt.config.yml b/db/myt.config.yml deleted file mode 100755 index 3fe7ad02fc..0000000000 --- a/db/myt.config.yml +++ /dev/null @@ -1,11 +0,0 @@ -code: my-db -schemas: - - myt - - my_db -fixtures: - myt: - - version - - versionLog - my_db: - - table1 - - table2 diff --git a/db/package.json b/db/package.json deleted file mode 100644 index 0cc0ed1d8a..0000000000 --- a/db/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "my-db", - "version": "1.0.0", - "author": "Me", - "description": "My database project", - "license": "GPL-3.0", - "repository": { - "type": "git" - }, - "dependencies": { - "@verdnatura/myt": "^1.6.9" - } -} \ No newline at end of file From f44e19cae357636f0f929d63d02254f21a9bf03e Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 4 Apr 2024 14:15:20 +0200 Subject: [PATCH 58/78] feat: refs #6636 Modified updateClaim, model and tests --- db/dump/fixtures.before.sql | 2 +- .../10976-greenCamellia/00-firstScript.sql | 1 + e2e/helpers/selectors.js | 1 - e2e/paths/06-claim/01_basic_data.spec.js | 7 ------- loopback/locale/en.json | 4 +++- loopback/locale/es.json | 4 +++- modules/claim/back/locale/claim/en.yml | 1 - modules/claim/back/locale/claim/es.yml | 1 - .../back/methods/claim/specs/log.spec.js | 2 +- .../methods/claim/specs/updateClaim.spec.js | 6 +++--- .../claim/back/methods/claim/updateClaim.js | 19 ++++++++++--------- modules/claim/back/models/claim.json | 9 +++++++-- modules/claim/front/action/index.spec.js | 2 +- modules/claim/front/basic-data/index.html | 7 ------- modules/claim/front/summary/index.html | 7 ------- 15 files changed, 30 insertions(+), 43 deletions(-) create mode 100644 db/versions/10976-greenCamellia/00-firstScript.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 1dad68b2ce..a0f78baaae 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -1880,7 +1880,7 @@ INSERT INTO `vn`.`claimRatio`(`clientFk`, `yearSale`, `claimAmount`, `claimingRa INSERT INTO `vn`.`claimLog` (`originFk`, userFk, `action`, changedModel, oldInstance, newInstance, changedModelId, `description`) VALUES - (1, 18, 'update', 'Claim', '{"hasToPickUp":false}', '{"hasToPickUp":true}', 1, NULL), + (1, 18, 'update', 'Claim', '{"pickup":null}', '{"pickup":"agency"}', 1, NULL), (1, 18, 'update', 'ClaimObservation', '{}', '{"claimFk":1,"text":"Waiting for customer"}', 1, NULL), (1, 18, 'insert', 'ClaimBeginning', '{}', '{"claimFk":1,"saleFk":1,"quantity":10}', 1, NULL), (1, 18, 'insert', 'ClaimDms', '{}', '{"claimFk":1,"dmsFk":1}', 1, NULL); diff --git a/db/versions/10976-greenCamellia/00-firstScript.sql b/db/versions/10976-greenCamellia/00-firstScript.sql new file mode 100644 index 0000000000..2c1742482b --- /dev/null +++ b/db/versions/10976-greenCamellia/00-firstScript.sql @@ -0,0 +1 @@ +ALTER TABLE vn.claim CHANGE hasToPickUp pickup ENUM('agency', 'delivery') DEFAULT NULL; diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index dba430e663..daaa17c71c 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -762,7 +762,6 @@ export default { claimBasicData: { claimState: 'vn-claim-basic-data vn-autocomplete[ng-model="$ctrl.claim.claimStateFk"]', packages: 'vn-input-number[ng-model="$ctrl.claim.packages"]', - hasToPickUpCheckbox: 'vn-claim-basic-data vn-check[ng-model="$ctrl.claim.hasToPickUp"]', saveButton: `button[type=submit]` }, claimDetail: { diff --git a/e2e/paths/06-claim/01_basic_data.spec.js b/e2e/paths/06-claim/01_basic_data.spec.js index 2df95bd4a4..8133ee9f22 100644 --- a/e2e/paths/06-claim/01_basic_data.spec.js +++ b/e2e/paths/06-claim/01_basic_data.spec.js @@ -36,7 +36,6 @@ describe('Claim edit basic data path', () => { it('should check the "Pick up" checkbox', async() => { await page.reloadSection('claim.card.basicData'); - await page.waitToClick(selectors.claimBasicData.hasToPickUpCheckbox); await page.waitToClick(selectors.claimBasicData.saveButton); const message = await page.waitForSnackbar(); @@ -51,12 +50,6 @@ describe('Claim edit basic data path', () => { expect(result).toEqual('Resuelto'); }); - it('should confirm the "is paid with mana" and "Pick up" checkbox are checked', async() => { - const hasToPickUpCheckbox = await page.checkboxState(selectors.claimBasicData.hasToPickUpCheckbox); - - expect(hasToPickUpCheckbox).toBe('checked'); - }); - it('should confirm the claim packages was edited', async() => { const result = await page .waitToGetProperty(selectors.claimBasicData.packages, 'value'); diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 31b954a32b..a0e60550f8 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -68,7 +68,7 @@ "Changed client paymethod": "I have changed the pay method for client [{{clientName}} ({{clientId}})]({{{url}}})", "Sent units from ticket": "I sent *{{quantity}}* units of [{{concept}} ({{itemId}})]({{{itemUrl}}}) to *\"{{nickname}}\"* coming from ticket id [{{ticketId}}]({{{ticketUrl}}})", "Change quantity": "{{concept}} change of {{oldQuantity}} to {{newQuantity}}", - "Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked", + "Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked, with the pickup type *{{claimPickup}}*", "Claim state has changed to": "The state of the claim [({{claimId}})]({{{claimUrl}}}) from client *{{clientName}}* has changed to *{{newState}}*", "Customs agent is required for a non UEE member": "Customs agent is required for a non UEE member", "Incoterms is required for a non UEE member": "Incoterms is required for a non UEE member", @@ -89,6 +89,8 @@ "landed": "Landed", "addressFk": "Address", "companyFk": "Company", + "agency": "Agency", + "delivery": "Delivery", "You need to fill sage information before you check verified data": "You need to fill sage information before you check verified data", "The social name cannot be empty": "The social name cannot be empty", "The nif cannot be empty": "The nif cannot be empty", diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 6e20bdd080..00e3ae50f3 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -135,7 +135,7 @@ "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})", "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})", "Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}", - "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*", + "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*, con el tipo de recogida *{{claimPickup}}*", "Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*", "Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}", "ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto", @@ -168,6 +168,8 @@ "landed": "F. entrega", "addressFk": "Consignatario", "companyFk": "Empresa", + "agency": "Agencia", + "delivery": "Reparto", "The social name cannot be empty": "La razón social no puede quedar en blanco", "The nif cannot be empty": "El NIF no puede quedar en blanco", "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados", diff --git a/modules/claim/back/locale/claim/en.yml b/modules/claim/back/locale/claim/en.yml index 7c3ee7555e..75416938a1 100644 --- a/modules/claim/back/locale/claim/en.yml +++ b/modules/claim/back/locale/claim/en.yml @@ -6,7 +6,6 @@ columns: isChargedToMana: charged to mana created: created responsibility: responsibility - hasToPickUp: has to pickUp ticketFk: ticket claimStateFk: claim state workerFk: worker diff --git a/modules/claim/back/locale/claim/es.yml b/modules/claim/back/locale/claim/es.yml index 27fd76ceb1..e61c6a3963 100644 --- a/modules/claim/back/locale/claim/es.yml +++ b/modules/claim/back/locale/claim/es.yml @@ -6,7 +6,6 @@ columns: isChargedToMana: cargado al maná created: creado responsibility: responsabilidad - hasToPickUp: es recogida ticketFk: ticket claimStateFk: estado reclamación workerFk: trabajador diff --git a/modules/claim/back/methods/claim/specs/log.spec.js b/modules/claim/back/methods/claim/specs/log.spec.js index 0ae534f1e6..cef91b873a 100644 --- a/modules/claim/back/methods/claim/specs/log.spec.js +++ b/modules/claim/back/methods/claim/specs/log.spec.js @@ -11,7 +11,7 @@ describe('claim log()', () => { model: 'Claim', action: 'update', changes: [ - {property: 'hasToPickUp', before: false, after: true} + {property: 'pickup', before: null, after: 'agency'} ] }; diff --git a/modules/claim/back/methods/claim/specs/updateClaim.spec.js b/modules/claim/back/methods/claim/specs/updateClaim.spec.js index bd77ae406d..b7725e7f82 100644 --- a/modules/claim/back/methods/claim/specs/updateClaim.spec.js +++ b/modules/claim/back/methods/claim/specs/updateClaim.spec.js @@ -86,7 +86,7 @@ describe('Update Claim', () => { args: { observation: 'valid observation', claimStateFk: pendingState, - hasToPickUp: false + pickup: null } }; ctx.req.__ = i18n.__; @@ -124,7 +124,7 @@ describe('Update Claim', () => { args: { observation: 'valid observation', claimStateFk: canceledState, - hasToPickUp: false + pickup: null } }; ctx.req.__ = i18n.__; @@ -163,7 +163,7 @@ describe('Update Claim', () => { claimStateFk: 3, workerFk: 5, observation: 'another valid observation', - hasToPickUp: true + pickup: 'agency' } }; ctx.req.__ = i18n.__; diff --git a/modules/claim/back/methods/claim/updateClaim.js b/modules/claim/back/methods/claim/updateClaim.js index 68fff7846e..cb4de0ab5e 100644 --- a/modules/claim/back/methods/claim/updateClaim.js +++ b/modules/claim/back/methods/claim/updateClaim.js @@ -27,8 +27,8 @@ module.exports = Self => { type: 'string' }, { - arg: 'hasToPickUp', - type: 'boolean' + arg: 'pickup', + type: 'any' }, { arg: 'packages', @@ -72,9 +72,9 @@ module.exports = Self => { // Get sales person from claim client const salesPerson = claim.client().salesPersonUser(); - let changedHasToPickUp = false; - if (args.hasToPickUp) - changedHasToPickUp = true; + let changedPickup; + if (args.pickup != claim.pickup) + changedPickup = true; // Validate when claimState has been changed if (args.claimStateFk) { @@ -82,15 +82,15 @@ module.exports = Self => { const canEditNewState = await models.ClaimState.isEditable(ctx, args.claimStateFk, myOptions); const canEditState = await models.ACL.checkAccessAcl(ctx, 'Claim', 'editState', 'WRITE'); - if (!canEditOldState || !canEditNewState || changedHasToPickUp && !canEditState) + if (!canEditOldState || !canEditNewState || changedPickup && !canEditState) throw new UserError(`You don't have enough privileges to change that field`); } delete args.ctx; const updatedClaim = await claim.updateAttributes(args, myOptions); - // When hasToPickUp has been changed - if (salesPerson && changedHasToPickUp && updatedClaim.hasToPickUp) + // When pickup has been changed + if (salesPerson && changedPickup && updatedClaim.pickup) await notifyPickUp(ctx, salesPerson.id, claim); // When claimState has been changed @@ -132,7 +132,8 @@ module.exports = Self => { const message = $t('Claim will be picked', { claimId: claim.id, clientName: claim.client().name, - claimUrl: `${url}claim/${claim.id}/summary` + claimUrl: `${url}claim/${claim.id}/summary`, + claimPickup: $t(claim.pickup) }); await models.Chat.sendCheckingPresence(ctx, workerId, message); } diff --git a/modules/claim/back/models/claim.json b/modules/claim/back/models/claim.json index 1fbbb00b1b..3bc0a2bf97 100644 --- a/modules/claim/back/models/claim.json +++ b/modules/claim/back/models/claim.json @@ -31,8 +31,13 @@ "responsibility": { "type": "number" }, - "hasToPickUp": { - "type": "boolean" + "pickup": { + "type": "string", + "mysql": { + "columnName": "pickup", + "dataType": "ENUM('agency', 'delivery')", + "default": "null" + } }, "ticketFk": { "type": "number" diff --git a/modules/claim/front/action/index.spec.js b/modules/claim/front/action/index.spec.js index 458d5e8319..e773511bf2 100644 --- a/modules/claim/front/action/index.spec.js +++ b/modules/claim/front/action/index.spec.js @@ -85,7 +85,7 @@ describe('claim', () => { it('should perform a patch query and show a success message', () => { jest.spyOn(controller.vnApp, 'showSuccess'); - const data = {hasToPickUp: true}; + const data = {pickup: 'agency'}; $httpBackend.expect('PATCH', `Claims/1/updateClaimAction`, data).respond({}); controller.save(data); $httpBackend.flush(); diff --git a/modules/claim/front/basic-data/index.html b/modules/claim/front/basic-data/index.html index 10aa7623ae..45bc1823d5 100644 --- a/modules/claim/front/basic-data/index.html +++ b/modules/claim/front/basic-data/index.html @@ -49,13 +49,6 @@ label="Packages received" ng-model="$ctrl.claim.packages"> - - diff --git a/modules/claim/front/summary/index.html b/modules/claim/front/summary/index.html index 3115cb4514..b5225e6f4b 100644 --- a/modules/claim/front/summary/index.html +++ b/modules/claim/front/summary/index.html @@ -49,13 +49,6 @@ label="Attended by" value="{{$ctrl.summary.claim.worker.user.nickname}}"> - -

From 75a4d6947fe07eb3a35da93086eb8ba2b1c66fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Thu, 4 Apr 2024 14:20:55 +0200 Subject: [PATCH 59/78] fix: closeTicket idem salix Refs: #6549 --- .../invoice-ticket-closure/invoice-ticket-closure.html | 4 ++-- .../invoice-ticket-closure/invoice-ticket-closure.js | 10 +++------- .../email/invoice-ticket-closure/locale/en.yml | 3 +-- .../email/invoice-ticket-closure/locale/es.yml | 2 +- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html index 051fa2cf8d..2effa89172 100644 --- a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html +++ b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.html @@ -1,12 +1,12 @@
-

{{ $t('title') }} {{ $t('total') }}: {{tickets.length}}

+

{{ $t('title') }}


{{ $t('ticketId') }}: {{ticket.ticketId}}

-

{{ $t('description') }}: {{ticket.description}}

+

{{ $t('reason') }}: {{ticket.reason}}


diff --git a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js index 6d12aa2476..31690ecbd8 100644 --- a/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js +++ b/print/templates/email/invoice-ticket-closure/invoice-ticket-closure.js @@ -1,5 +1,5 @@ const Component = require(`vn-print/core/component`); -const emailBody = new Component(); +const emailBody = new Component('email-body'); module.exports = { name: 'invoice-ticket-closure', @@ -7,13 +7,9 @@ module.exports = { 'email-body': emailBody.build(), }, props: { - ticketId: { - type: Number, + tickets: { + type: Array, required: true }, - description: { - type: String, - required: true - } } }; diff --git a/print/templates/email/invoice-ticket-closure/locale/en.yml b/print/templates/email/invoice-ticket-closure/locale/en.yml index 70345dc81a..844dada7ab 100644 --- a/print/templates/email/invoice-ticket-closure/locale/en.yml +++ b/print/templates/email/invoice-ticket-closure/locale/en.yml @@ -1,5 +1,4 @@ - subject: Nightly ticket closing process report title: Nightly ticket closing process report -description: Description +reason: Reason ticketId: Ticket No \ No newline at end of file diff --git a/print/templates/email/invoice-ticket-closure/locale/es.yml b/print/templates/email/invoice-ticket-closure/locale/es.yml index e21332f1bc..a8e67f18f2 100644 --- a/print/templates/email/invoice-ticket-closure/locale/es.yml +++ b/print/templates/email/invoice-ticket-closure/locale/es.yml @@ -1,4 +1,4 @@ subject: Informe proceso de cierre de tickets nocturno title: Informe proceso de cierre de tickets nocturno -description: Descripción +reason: Motivo ticketId: Ticket nº \ No newline at end of file From 9fcad457a70fb0d127669e49980350e0236395bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Thu, 4 Apr 2024 14:46:51 +0200 Subject: [PATCH 60/78] fix: closeTicket idem salix Refs: #6549 --- .../ticket/back/methods/ticket/closeAll.js | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js index 61de1cd047..c14f333464 100644 --- a/modules/ticket/back/methods/ticket/closeAll.js +++ b/modules/ticket/back/methods/ticket/closeAll.js @@ -62,14 +62,15 @@ module.exports = Self => { await Self.rawSql(` WITH ticketNotInvoiceable AS( SELECT JSON_OBJECT( - 'tickets', - JSON_ARRAYAGG( - JSON_OBJECT( - 'ticketId', ticketFk, - 'reason', - LEFT(reason,LENGTH(reason) - 2) + 'tickets', + JSON_ARRAYAGG( + JSON_OBJECT( + 'ticketId', ticketFk, + 'reason', + LEFT(reason,LENGTH(reason) - 2) + ) ) - ))errors + )errors FROM ( SELECT ticketFk, CONCAT_WS('', @@ -87,8 +88,8 @@ module.exports = Self => { SUM(itc.id IS NULL) hasErrorItemTaxCountry, SUM(a.id IS NULL) hasErrorAddress, SUM(ios.code IS NOT NULL - AND(ad.customsAgentFk IS NULL - OR ad.incotermsFk IS NULL)) hasErrorInfoTaxAreaWorld + AND(ad.customsAgentFk IS NULL + OR ad.incotermsFk IS NULL)) hasErrorInfoTaxAreaWorld FROM ticket t LEFT JOIN address ad ON ad.id = t.addressFk JOIN sale s ON s.ticketFk = t.id @@ -107,14 +108,13 @@ module.exports = Self => { AND itc.countryFk = su.countryFk LEFT JOIN vn.invoiceOutSerial ios ON ios.taxAreaFk = 'WORLD' AND ios.code = invoiceSerial(t.clientFk, t.companyFk, 'M') - WHERE (al.code = 'PACKED' - OR (am.code = 'refund' AND al.code != 'delivered')) - AND DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) AND util.dayEnd(?) + WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered')) + AND DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) AND util.dayEnd(?) AND t.refFk IS NULL AND IFNULL(a.hasDailyInvoice, co.hasDailyInvoice) GROUP BY ticketFk HAVING hasErrorToInvoice - OR NOT hasErrorTaxDataChecked + OR hasErrorTaxDataChecked OR hasErrorDeleted OR hasErrorItemTaxCountry OR hasErrorAddress @@ -130,12 +130,12 @@ module.exports = Self => { await Self.rawSql(` UPDATE ticket t - JOIN ticketState ts ON t.id = ts.ticketFk - JOIN alertLevel al ON al.id = ts.alertLevel - JOIN agencyMode am ON am.id = t.agencyModeFk - JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk - JOIN zone z ON z.id = t.zoneFk - SET t.routeFk = NULL + JOIN ticketState ts ON t.id = ts.ticketFk + JOIN alertLevel al ON al.id = ts.alertLevel + JOIN agencyMode am ON am.id = t.agencyModeFk + JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk + JOIN zone z ON z.id = t.zoneFk + SET t.routeFk = NULL WHERE DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) AND util.dayEnd(?) AND al.code NOT IN('DELIVERED','PACKED') From fe0afe30bf91c78a5629fcc071de3fd40c99f73f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Thu, 4 Apr 2024 17:50:39 +0200 Subject: [PATCH 61/78] fix: closeTicket idem salix Refs: #6549 --- .../10949-limeLaurel/00-firstScript.sql | 12 +++++---- .../ticket/back/methods/ticket/closeAll.js | 26 +++++++++---------- .../invoice-ticket-closure/locale/en.yml | 2 +- .../invoice-ticket-closure/locale/es.yml | 2 +- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/db/versions/10949-limeLaurel/00-firstScript.sql b/db/versions/10949-limeLaurel/00-firstScript.sql index ca221501e5..58d50e125e 100644 --- a/db/versions/10949-limeLaurel/00-firstScript.sql +++ b/db/versions/10949-limeLaurel/00-firstScript.sql @@ -6,9 +6,11 @@ SET @notificationFk =LAST_INSERT_ID(); INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk) - SELECT @notificationFk, 108 - FROM util.notification; - + SELECT @notificationFk,id + FROM account.role + WHERE name ='administrative'; + INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk) - SELECT @notificationFk, 108 - FROM util.notification; \ No newline at end of file + SELECT @notificationFk, id + FROM account.`user` + WHERE `name` = 'admon'; diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js index c14f333464..3e35c5ebc6 100644 --- a/modules/ticket/back/methods/ticket/closeAll.js +++ b/modules/ticket/back/methods/ticket/closeAll.js @@ -53,8 +53,8 @@ module.exports = Self => { JOIN province p ON p.id = c.provinceFk JOIN country co ON co.id = p.countryFk LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk - WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code != 'delivered')) - AND DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) AND util.dayEnd(?) + WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered')) + AND DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?) AND t.refFk IS NULL GROUP BY t.id `, [toDate, toDate]); @@ -66,20 +66,19 @@ module.exports = Self => { JSON_ARRAYAGG( JSON_OBJECT( 'ticketId', ticketFk, - 'reason', - LEFT(reason,LENGTH(reason) - 2) + 'reason', reason ) ) )errors FROM ( SELECT ticketFk, - CONCAT_WS('', - IF(hasErrorToInvoice, 'Facturar, ', ''), - IF(hasErrorTaxDataChecked, 'Datos comprobados, ', ''), - IF(hasErrorDeleted, 'Eliminado, ', ''), - IF(hasErrorItemTaxCountry, 'Impuesto no informado, ', ''), - IF(hasErrorAddress, 'Sin dirección, ', ''), - IF(hasErrorInfoTaxAreaWorld, 'Datos exportaciones, ', '')) reason + CONCAT_WS(', ', + IF(hasErrorToInvoice, 'Facturar', NULL), + IF(hasErrorTaxDataChecked, 'Datos comprobados', NULL), + IF(hasErrorDeleted, 'Eliminado', NULL), + IF(hasErrorItemTaxCountry, 'Impuesto no informado', NULL), + IF(hasErrorAddress, 'Sin dirección', NULL), + IF(hasErrorInfoTaxAreaWorld, 'Datos exportaciones', NULL)) reason FROM ( SELECT t.id ticketFk, SUM(NOT c.hasToInvoice) hasErrorToInvoice, @@ -109,7 +108,7 @@ module.exports = Self => { LEFT JOIN vn.invoiceOutSerial ios ON ios.taxAreaFk = 'WORLD' AND ios.code = invoiceSerial(t.clientFk, t.companyFk, 'M') WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered')) - AND DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) AND util.dayEnd(?) + AND DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?) AND t.refFk IS NULL AND IFNULL(a.hasDailyInvoice, co.hasDailyInvoice) GROUP BY ticketFk @@ -136,8 +135,7 @@ module.exports = Self => { JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk JOIN zone z ON z.id = t.zoneFk SET t.routeFk = NULL - WHERE DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) - AND util.dayEnd(?) + WHERE DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?) AND al.code NOT IN('DELIVERED','PACKED') AND t.routeFk AND z.name LIKE '%MADRID%'`, [toDate, toDate], {userId: ctx.req.accessToken.userId}); diff --git a/print/templates/email/invoice-ticket-closure/locale/en.yml b/print/templates/email/invoice-ticket-closure/locale/en.yml index 844dada7ab..fef73d23f1 100644 --- a/print/templates/email/invoice-ticket-closure/locale/en.yml +++ b/print/templates/email/invoice-ticket-closure/locale/en.yml @@ -1,4 +1,4 @@ subject: Nightly ticket closing process report title: Nightly ticket closing process report reason: Reason -ticketId: Ticket No \ No newline at end of file +ticketId: Ticket \ No newline at end of file diff --git a/print/templates/email/invoice-ticket-closure/locale/es.yml b/print/templates/email/invoice-ticket-closure/locale/es.yml index a8e67f18f2..7d146b83d0 100644 --- a/print/templates/email/invoice-ticket-closure/locale/es.yml +++ b/print/templates/email/invoice-ticket-closure/locale/es.yml @@ -1,4 +1,4 @@ subject: Informe proceso de cierre de tickets nocturno title: Informe proceso de cierre de tickets nocturno reason: Motivo -ticketId: Ticket nº \ No newline at end of file +ticketId: Ticket \ No newline at end of file From 23db6a41be0ab02b4b2c498dbe9538b036f7b7da Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 5 Apr 2024 07:42:03 +0200 Subject: [PATCH 62/78] feat: refs #6636 Minor change --- modules/claim/back/models/claim.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/claim/back/models/claim.json b/modules/claim/back/models/claim.json index 3bc0a2bf97..1fc88df1c5 100644 --- a/modules/claim/back/models/claim.json +++ b/modules/claim/back/models/claim.json @@ -32,12 +32,7 @@ "type": "number" }, "pickup": { - "type": "string", - "mysql": { - "columnName": "pickup", - "dataType": "ENUM('agency', 'delivery')", - "default": "null" - } + "type": "string" }, "ticketFk": { "type": "number" From 16a6e3d8a6e78abaeb0df0b90331e4a36e996fa7 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 5 Apr 2024 08:18:38 +0200 Subject: [PATCH 63/78] feat: refs #6636 Requested change --- modules/claim/back/methods/claim/updateClaim.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/claim/back/methods/claim/updateClaim.js b/modules/claim/back/methods/claim/updateClaim.js index d82baeaa84..a206d7f3e2 100644 --- a/modules/claim/back/methods/claim/updateClaim.js +++ b/modules/claim/back/methods/claim/updateClaim.js @@ -72,9 +72,7 @@ module.exports = Self => { // Get sales person from claim client const salesPerson = claim.client().salesPersonUser(); - let changedPickup; - if (args.pickup != claim.pickup) - changedPickup = true; + const changedPickup = args.pickup != claim.pickup; // Validate when claimState has been changed if (args.claimStateFk) { From 6c1e44638e2604652cf2fb5b6f2243bfddb15dd7 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 5 Apr 2024 11:01:00 +0200 Subject: [PATCH 64/78] feat: refs #6636 Added getEnumValue method --- .../10976-greenCamellia/00-firstScript.sql | 14 + .../methods/application/getEnumValues.js | 56 ++ loopback/common/models/application.js | 1 + loopback/locale/es.json | 707 +++++++++--------- 4 files changed, 425 insertions(+), 353 deletions(-) create mode 100644 loopback/common/methods/application/getEnumValues.js diff --git a/db/versions/10976-greenCamellia/00-firstScript.sql b/db/versions/10976-greenCamellia/00-firstScript.sql index 2c1742482b..107500eed8 100644 --- a/db/versions/10976-greenCamellia/00-firstScript.sql +++ b/db/versions/10976-greenCamellia/00-firstScript.sql @@ -1 +1,15 @@ +CREATE OR REPLACE TEMPORARY TABLE tmp.claimsWithHasToPickUp + SELECT id + FROM vn.claim + WHERE hasToPickUp; + ALTER TABLE vn.claim CHANGE hasToPickUp pickup ENUM('agency', 'delivery') DEFAULT NULL; + +UPDATE vn.claim c + JOIN tmp.claimsWithHasToPickUp tmp ON tmp.id = c.id + SET c.pickup = 'delivery'; + +DROP TEMPORARY TABLE tmp.claimsWithHasToPickUp; + +INSERT INTO salix.ACL (model,property,accessType,principalId) + VALUES ('Application','getEnumValues','*','employee'); \ No newline at end of file diff --git a/loopback/common/methods/application/getEnumValues.js b/loopback/common/methods/application/getEnumValues.js new file mode 100644 index 0000000000..5e36e60be6 --- /dev/null +++ b/loopback/common/methods/application/getEnumValues.js @@ -0,0 +1,56 @@ +const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; +const UserError = require('vn-loopback/util/user-error'); + +module.exports = Self => { + Self.remoteMethod('getEnumValues', { + description: 'Return enum values of column', + accessType: 'EXECUTE', + accepts: [ + { + arg: 'schema', + type: 'string', + description: 'The schema of db', + required: true, + }, + { + arg: 'table', + type: 'string', + description: 'The table of schema', + required: true, + }, + { + arg: 'column', + type: 'string', + description: 'The column of table', + required: true, + }, + ], + returns: { + type: 'any', + root: true + }, + http: { + path: `/get-enum-values`, + verb: 'GET' + } + }); + + Self.getEnumValues = async(schema, table, column) => { + const stmt = new ParameterizedSQL(` + SELECT COLUMN_TYPE + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ? + AND TABLE_NAME = ? + AND COLUMN_NAME = ? + AND DATA_TYPE = 'enum';`, + [schema, table, column]); + + const conn = Self.dataSource.connector; + const [result] = await conn.executeStmt(stmt); + + if (!result) throw new UserError(`No results found`); + + const regex = /'([^']*)'/g; + return result.COLUMN_TYPE.match(regex).map(match => match.slice(1, -1)); + }; +}; diff --git a/loopback/common/models/application.js b/loopback/common/models/application.js index ac8ae78f0d..6bdc2c13a2 100644 --- a/loopback/common/models/application.js +++ b/loopback/common/models/application.js @@ -5,4 +5,5 @@ module.exports = function(Self) { require('../methods/application/execute')(Self); require('../methods/application/executeProc')(Self); require('../methods/application/executeFunc')(Self); + require('../methods/application/getEnumValues')(Self); }; diff --git a/loopback/locale/es.json b/loopback/locale/es.json index f374b14dc6..8b02f30483 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -1,355 +1,356 @@ { - "Phone format is invalid": "El formato del teléfono no es correcto", - "You are not allowed to change the credit": "No tienes privilegios para modificar el crédito", - "Unable to mark the equivalence surcharge": "No se puede marcar el recargo de equivalencia", - "The default consignee can not be unchecked": "No se puede desmarcar el consignatario predeterminado", - "Unable to default a disabled consignee": "No se puede poner predeterminado un consignatario desactivado", - "Can't be blank": "No puede estar en blanco", - "Invalid TIN": "NIF/CIF inválido", - "TIN must be unique": "El NIF/CIF debe ser único", - "A client with that Web User name already exists": "Ya existe un cliente con ese Usuario Web", - "Is invalid": "Es inválido", - "Quantity cannot be zero": "La cantidad no puede ser cero", - "Enter an integer different to zero": "Introduce un entero distinto de cero", - "Package cannot be blank": "El embalaje no puede estar en blanco", - "The company name must be unique": "La razón social debe ser única", - "Invalid email": "Correo electrónico inválido", - "The IBAN does not have the correct format": "El IBAN no tiene el formato correcto", - "That payment method requires an IBAN": "El método de pago seleccionado requiere un IBAN", - "That payment method requires a BIC": "El método de pago seleccionado requiere un BIC", - "State cannot be blank": "El estado no puede estar en blanco", - "Worker cannot be blank": "El trabajador no puede estar en blanco", - "Cannot change the payment method if no salesperson": "No se puede cambiar la forma de pago si no hay comercial asignado", - "can't be blank": "El campo no puede estar vacío", - "Observation type must be unique": "El tipo de observación no puede repetirse", - "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero", - "The grade must be similar to the last one": "El grade debe ser similar al último", - "Only manager can change the credit": "Solo el gerente puede cambiar el credito de este cliente", - "Name cannot be blank": "El nombre no puede estar en blanco", - "Phone cannot be blank": "El teléfono no puede estar en blanco", - "Period cannot be blank": "El periodo no puede estar en blanco", - "Choose a company": "Selecciona una empresa", - "Se debe rellenar el campo de texto": "Se debe rellenar el campo de texto", - "Description should have maximum of 45 characters": "La descripción debe tener maximo 45 caracteres", - "Cannot be blank": "El campo no puede estar en blanco", - "The grade must be an integer greater than or equal to zero": "El grade debe ser un entero mayor o igual a cero", - "Sample type cannot be blank": "El tipo de plantilla no puede quedar en blanco", - "Description cannot be blank": "Se debe rellenar el campo de texto", - "The price of the item changed": "El precio del artículo cambió", - "The value should not be greater than 100%": "El valor no debe de ser mayor de 100%", - "The value should be a number": "El valor debe ser un numero", - "This order is not editable": "Esta orden no se puede modificar", - "You can't create an order for a frozen client": "No puedes crear una orden para un cliente congelado", - "You can't create an order for a client that has a debt": "No puedes crear una orden para un cliente con deuda", - "is not a valid date": "No es una fecha valida", - "Barcode must be unique": "El código de barras debe ser único", - "The warehouse can't be repeated": "El almacén no puede repetirse", - "The tag or priority can't be repeated for an item": "El tag o prioridad no puede repetirse para un item", - "The observation type can't be repeated": "El tipo de observación no puede repetirse", - "A claim with that sale already exists": "Ya existe una reclamación para esta línea", - "You don't have enough privileges to change that field": "No tienes permisos para cambiar ese campo", - "Warehouse cannot be blank": "El almacén no puede quedar en blanco", - "Agency cannot be blank": "La agencia no puede quedar en blanco", - "Not enough privileges to edit a client with verified data": "No tienes permisos para hacer cambios en un cliente con datos comprobados", - "This address doesn't exist": "Este consignatario no existe", - "You must delete the claim id %d first": "Antes debes borrar la reclamación %d", - "You don't have enough privileges": "No tienes suficientes permisos", - "Cannot check Equalization Tax in this NIF/CIF": "No se puede marcar RE en este NIF/CIF", - "You can't make changes on the basic data of an confirmed order or with rows": "No puedes cambiar los datos básicos de una orden con artículos", - "INVALID_USER_NAME": "El nombre de usuario solo debe contener letras minúsculas o, a partir del segundo carácter, números o subguiones, no está permitido el uso de la letra ñ", - "You can't create a ticket for a frozen client": "No puedes crear un ticket para un cliente congelado", - "You can't create a ticket for an inactive client": "No puedes crear un ticket para un cliente inactivo", - "Tag value cannot be blank": "El valor del tag no puede quedar en blanco", - "ORDER_EMPTY": "Cesta vacía", - "You don't have enough privileges to do that": "No tienes permisos para cambiar esto", - "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NO SE PUEDE DESACTIVAR EL CONSIGNAT", - "Error. El NIF/CIF está repetido": "Error. El NIF/CIF está repetido", - "Street cannot be empty": "Dirección no puede estar en blanco", - "City cannot be empty": "Ciudad no puede estar en blanco", - "Code cannot be blank": "Código no puede estar en blanco", - "You cannot remove this department": "No puedes eliminar este departamento", - "The extension must be unique": "La extensión debe ser unica", - "The secret can't be blank": "La contraseña no puede estar en blanco", - "We weren't able to send this SMS": "No hemos podido enviar el SMS", - "This client can't be invoiced": "Este cliente no puede ser facturado", - "You must provide the correction information to generate a corrective invoice": "Debes informar la información de corrección para generar una factura rectificativa", - "This ticket can't be invoiced": "Este ticket no puede ser facturado", - "You cannot add or modify services to an invoiced ticket": "No puedes añadir o modificar servicios a un ticket facturado", - "This ticket can not be modified": "Este ticket no puede ser modificado", - "The introduced hour already exists": "Esta hora ya ha sido introducida", - "INFINITE_LOOP": "Existe una dependencia entre dos Jefes", - "The sales of the receiver ticket can't be modified": "Las lineas del ticket al que envias no pueden ser modificadas", - "NO_AGENCY_AVAILABLE": "No hay una zona de reparto disponible con estos parámetros", - "ERROR_PAST_SHIPMENT": "No puedes seleccionar una fecha de envío en pasado", - "The current ticket can't be modified": "El ticket actual no puede ser modificado", - "The current claim can't be modified": "La reclamación actual no puede ser modificada", - "The sales of this ticket can't be modified": "Las lineas de este ticket no pueden ser modificadas", - "The sales do not exists": "La(s) línea(s) seleccionada(s) no existe(n)", - "Please select at least one sale": "Por favor selecciona al menos una linea", - "All sales must belong to the same ticket": "Todas las lineas deben pertenecer al mismo ticket", - "NO_ZONE_FOR_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", - "This item doesn't exists": "El artículo no existe", - "NOT_ZONE_WITH_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", - "Extension format is invalid": "El formato de la extensión es inválido", - "Invalid parameters to create a new ticket": "Parámetros inválidos para crear un nuevo ticket", - "This item is not available": "Este artículo no está disponible", - "This postcode already exists": "Este código postal ya existe", - "Concept cannot be blank": "El concepto no puede quedar en blanco", - "File doesn't exists": "El archivo no existe", - "You don't have privileges to change the zone": "No tienes permisos para cambiar la zona o para esos parámetros hay más de una opción de envío, hable con las agencias", - "This ticket is already on weekly tickets": "Este ticket ya está en tickets programados", - "Ticket id cannot be blank": "El id de ticket no puede quedar en blanco", - "Weekday cannot be blank": "El día de la semana no puede quedar en blanco", - "You can't delete a confirmed order": "No puedes borrar un pedido confirmado", - "The social name has an invalid format": "El nombre fiscal tiene un formato incorrecto", - "Invalid quantity": "Cantidad invalida", - "This postal code is not valid": "Este código postal no es válido", - "is invalid": "es inválido", - "The postcode doesn't exist. Please enter a correct one": "El código postal no existe. Por favor, introduce uno correcto", - "The department name can't be repeated": "El nombre del departamento no puede repetirse", - "This phone already exists": "Este teléfono ya existe", - "You cannot move a parent to its own sons": "No puedes mover un elemento padre a uno de sus hijos", - "You can't create a claim for a removed ticket": "No puedes crear una reclamación para un ticket eliminado", - "You cannot delete a ticket that part of it is being prepared": "No puedes eliminar un ticket en el que una parte que está siendo preparada", - "You must delete all the buy requests first": "Debes eliminar todas las peticiones de compra primero", - "You should specify a date": "Debes especificar una fecha", - "You should specify at least a start or end date": "Debes especificar al menos una fecha de inicio o de fin", - "Start date should be lower than end date": "La fecha de inicio debe ser menor que la fecha de fin", - "You should mark at least one week day": "Debes marcar al menos un día de la semana", - "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío", - "Customs agent is required for a non UEE member": "El agente de aduanas es requerido para los clientes extracomunitarios", - "Incoterms is required for a non UEE member": "El incoterms es requerido para los clientes extracomunitarios", - "Deleted sales from ticket": "He eliminado las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}", - "Added sale to ticket": "He añadido la siguiente linea al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}", - "Changed sale discount": "He cambiado el descuento de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "Created claim": "He creado la reclamación [{{claimId}}]({{{claimUrl}}}) de las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "Changed sale price": "He cambiado el precio de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* del ticket [{{ticketId}}]({{{ticketUrl}}})", - "Changed sale quantity": "He cambiado la cantidad de [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* del ticket [{{ticketId}}]({{{ticketUrl}}})", - "State": "Estado", - "regular": "normal", - "reserved": "reservado", - "Changed sale reserved state": "He cambiado el estado reservado de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "Bought units from buy request": "Se ha comprado {{quantity}} unidades de [{{itemId}} {{concept}}]({{{urlItem}}}) para el ticket id [{{ticketId}}]({{{url}}})", - "Deny buy request": "Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}", - "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*", - "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})", - "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})", - "Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}", - "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*, con el tipo de recogida *{{claimPickup}}*", - "Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*", - "Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}", - "ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto", - "Distance must be lesser than 4000": "La distancia debe ser inferior a 4000", - "This ticket is deleted": "Este ticket está eliminado", - "Unable to clone this travel": "No ha sido posible clonar este travel", - "This thermograph id already exists": "La id del termógrafo ya existe", - "Choose a date range or days forward": "Selecciona un rango de fechas o días en adelante", - "ORDER_ALREADY_CONFIRMED": "ORDEN YA CONFIRMADA", - "Invalid password": "Invalid password", - "Password does not meet requirements": "La contraseña no cumple los requisitos", - "Role already assigned": "Rol ya asignado", - "Invalid role name": "Nombre de rol no válido", - "Role name must be written in camelCase": "El nombre del rol debe escribirse en camelCase", - "Email already exists": "El correo ya existe", - "User already exists": "El/La usuario/a ya existe", - "Absence change notification on the labour calendar": "Notificación de cambio de ausencia en el calendario laboral", - "Record of hours week": "Registro de horas semana {{week}} año {{year}} ", - "Created absence": "El empleado {{author}} ha añadido una ausencia de tipo '{{absenceType}}' a {{employee}} para el día {{dated}}.", - "Deleted absence": "El empleado {{author}} ha eliminado una ausencia de tipo '{{absenceType}}' a {{employee}} del día {{dated}}.", - "I have deleted the ticket id": "He eliminado el ticket id [{{id}}]({{{url}}})", - "I have restored the ticket id": "He restaurado el ticket id [{{id}}]({{{url}}})", - "You can only restore a ticket within the first hour after deletion": "Únicamente puedes restaurar el ticket dentro de la primera hora después de su eliminación", - "Changed this data from the ticket": "He cambiado estos datos del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", - "agencyModeFk": "Agencia", - "clientFk": "Cliente", - "zoneFk": "Zona", - "warehouseFk": "Almacén", - "shipped": "F. envío", - "landed": "F. entrega", - "addressFk": "Consignatario", - "companyFk": "Empresa", - "agency": "Agencia", - "delivery": "Reparto", - "The social name cannot be empty": "La razón social no puede quedar en blanco", - "The nif cannot be empty": "El NIF no puede quedar en blanco", - "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados", - "ASSIGN_ZONE_FIRST": "Asigna una zona primero", - "Amount cannot be zero": "El importe no puede ser cero", - "Company has to be official": "Empresa inválida", - "You can not select this payment method without a registered bankery account": "No se puede utilizar este método de pago si no has registrado una cuenta bancaria", - "Action not allowed on the test environment": "Esta acción no está permitida en el entorno de pruebas", - "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta", - "New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}* y un precio de *{{price}} €*", - "New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}*", - "Swift / BIC cannot be empty": "Swift / BIC no puede estar vacío", - "This BIC already exist.": "Este BIC ya existe.", - "That item doesn't exists": "Ese artículo no existe", - "There's a new urgent ticket:": "Hay un nuevo ticket urgente:", - "Invalid account": "Cuenta inválida", - "Compensation account is empty": "La cuenta para compensar está vacia", - "This genus already exist": "Este genus ya existe", - "This specie already exist": "Esta especie ya existe", - "Client assignment has changed": "He cambiado el comercial ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})", - "None": "Ninguno", - "The contract was not active during the selected date": "El contrato no estaba activo durante la fecha seleccionada", - "Cannot add more than one '1/2 day vacation'": "No puedes añadir más de un 'Vacaciones 1/2 dia'", - "This document already exists on this ticket": "Este documento ya existe en el ticket", - "Some of the selected tickets are not billable": "Algunos de los tickets seleccionados no son facturables", - "You can't invoice tickets from multiple clients": "No puedes facturar tickets de multiples clientes", - "nickname": "nickname", - "INACTIVE_PROVIDER": "Proveedor inactivo", - "This client is not invoiceable": "Este cliente no es facturable", - "serial non editable": "Esta serie no permite asignar la referencia", - "Max shipped required": "La fecha límite es requerida", - "Can't invoice to future": "No se puede facturar a futuro", - "Can't invoice to past": "No se puede facturar a pasado", - "This ticket is already invoiced": "Este ticket ya está facturado", - "A ticket with an amount of zero can't be invoiced": "No se puede facturar un ticket con importe cero", - "A ticket with a negative base can't be invoiced": "No se puede facturar un ticket con una base negativa", - "Global invoicing failed": "[Facturación global] No se han podido facturar algunos clientes", - "Wasn't able to invoice the following clients": "No se han podido facturar los siguientes clientes", - "Can't verify data unless the client has a business type": "No se puede verificar datos de un cliente que no tiene tipo de negocio", - "You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito", - "You can't change the credit set to zero from a financialBoss": "No puedes cambiar el cŕedito establecido a cero por un jefe de finanzas", - "Amounts do not match": "Las cantidades no coinciden", - "The PDF document does not exist": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'", - "The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos", - "You can't create a claim from a ticket delivered more than seven days ago": "No puedes crear una reclamación de un ticket entregado hace más de siete días", - "The worker has hours recorded that day": "El trabajador tiene horas fichadas ese día", - "The worker has a marked absence that day": "El trabajador tiene marcada una ausencia ese día", - "You can not modify is pay method checked": "No se puede modificar el campo método de pago validado", - "The account size must be exactly 10 characters": "El tamaño de la cuenta debe ser exactamente de 10 caracteres", - "Can't transfer claimed sales": "No puedes transferir lineas reclamadas", - "You don't have privileges to create refund": "No tienes permisos para crear un abono", - "The item is required": "El artículo es requerido", - "The agency is already assigned to another autonomous": "La agencia ya está asignada a otro autónomo", - "date in the future": "Fecha en el futuro", - "reference duplicated": "Referencia duplicada", - "This ticket is already a refund": "Este ticket ya es un abono", - "isWithoutNegatives": "Sin negativos", - "routeFk": "routeFk", - "Can't change the password of another worker": "No se puede cambiar la contraseña de otro trabajador", - "No hay un contrato en vigor": "No hay un contrato en vigor", - "No se permite fichar a futuro": "No se permite fichar a futuro", - "No está permitido trabajar": "No está permitido trabajar", - "Fichadas impares": "Fichadas impares", - "Descanso diario 12h.": "Descanso diario 12h.", - "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.", - "Dirección incorrecta": "Dirección incorrecta", - "Modifiable user details only by an administrator": "Detalles de usuario modificables solo por un administrador", - "Modifiable password only via recovery or by an administrator": "Contraseña modificable solo a través de la recuperación o por un administrador", - "Not enough privileges to edit a client": "No tienes suficientes privilegios para editar un cliente", - "This route does not exists": "Esta ruta no existe", - "Claim pickup order sent": "Reclamación Orden de recogida enviada [{{claimId}}]({{{claimUrl}}}) al cliente *{{clientName}}*", - "You don't have grant privilege": "No tienes privilegios para dar privilegios", - "You don't own the role and you can't assign it to another user": "No eres el propietario del rol y no puedes asignarlo a otro usuario", - "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionado con [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})", - "Already has this status": "Ya tiene este estado", - "There aren't records for this week": "No existen registros para esta semana", - "Empty data source": "Origen de datos vacio", - "App locked": "Aplicación bloqueada por el usuario {{userId}}", - "Email verify": "Correo de verificación", - "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment", - "Receipt's bank was not found": "No se encontró el banco del recibo", - "This receipt was not compensated": "Este recibo no ha sido compensado", - "Client's email was not found": "No se encontró el email del cliente", - "Negative basis": "Base negativa", - "This worker code already exists": "Este codigo de trabajador ya existe", - "This personal mail already exists": "Este correo personal ya existe", - "This worker already exists": "Este trabajador ya existe", - "App name does not exist": "El nombre de aplicación no es válido", - "Try again": "Vuelve a intentarlo", - "Aplicación bloqueada por el usuario 9": "Aplicación bloqueada por el usuario 9", - "Failed to upload delivery note": "Error al subir albarán {{id}}", - "The DOCUWARE PDF document does not exists": "El documento PDF Docuware no existe", - "It is not possible to modify tracked sales": "No es posible modificar líneas de pedido que se hayan empezado a preparar", - "It is not possible to modify sales that their articles are from Floramondo": "No es posible modificar líneas de pedido cuyos artículos sean de Floramondo", - "It is not possible to modify cloned sales": "No es posible modificar líneas de pedido clonadas", - "A supplier with the same name already exists. Change the country.": "Un proveedor con el mismo nombre ya existe. Cambie el país.", - "There is no assigned email for this client": "No hay correo asignado para este cliente", - "Exists an invoice with a future date": "Existe una factura con fecha posterior", - "Invoice date can't be less than max date": "La fecha de factura no puede ser inferior a la fecha límite", - "Warehouse inventory not set": "El almacén inventario no está establecido", - "This locker has already been assigned": "Esta taquilla ya ha sido asignada", - "Tickets with associated refunds": "No se pueden borrar tickets con abonos asociados. Este ticket está asociado al abono Nº %d", - "Not exist this branch": "La rama no existe", - "This ticket cannot be signed because it has not been boxed": "Este ticket no puede firmarse porque no ha sido encajado", - "Collection does not exist": "La colección no existe", - "Cannot obtain exclusive lock": "No se puede obtener un bloqueo exclusivo", - "Insert a date range": "Inserte un rango de fechas", - "Added observation": "{{user}} añadió esta observacion: {{text}}", - "Comment added to client": "Observación añadida al cliente {{clientFk}}", - "Invalid auth code": "Código de verificación incorrecto", - "Invalid or expired verification code": "Código de verificación incorrecto o expirado", - "Cannot create a new claimBeginning from a different ticket": "No se puede crear una línea de reclamación de un ticket diferente al origen", - "company": "Compañía", - "country": "País", - "clientId": "Id cliente", - "clientSocialName": "Cliente", - "amount": "Importe", - "taxableBase": "Base", - "ticketFk": "Id ticket", - "isActive": "Activo", - "hasToInvoice": "Facturar", - "isTaxDataChecked": "Datos comprobados", - "comercialId": "Id comercial", - "comercialName": "Comercial", - "Pass expired": "La contraseña ha caducado, cambiela desde Salix", - "Invalid NIF for VIES": "Invalid NIF for VIES", - "Ticket does not exist": "Este ticket no existe", - "Ticket is already signed": "Este ticket ya ha sido firmado", - "Authentication failed": "Autenticación fallida", - "You can't use the same password": "No puedes usar la misma contraseña", - "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono", - "Fecha fuera de rango": "Fecha fuera de rango", - "Error while generating PDF": "Error al generar PDF", - "Error when sending mail to client": "Error al enviar el correo al cliente", - "Mail not sent": "Se ha producido un fallo al enviar la factura al cliente [{{clientId}}]({{{clientUrl}}}), por favor revisa la dirección de correo electrónico", - "The renew period has not been exceeded": "El periodo de renovación no ha sido superado", - "Valid priorities": "Prioridades válidas: %d", - "hasAnyNegativeBase": "Base negativa para los tickets: {{ticketsIds}}", - "hasAnyPositiveBase": "Base positivas para los tickets: {{ticketsIds}}", - "You cannot assign an alias that you are not assigned to": "No puede asignar un alias que no tenga asignado", - "This ticket cannot be left empty.": "Este ticket no se puede dejar vacío. %s", - "The company has not informed the supplier account for bank transfers": "La empresa no tiene informado la cuenta de proveedor para transferencias bancarias", - "You cannot assign/remove an alias that you are not assigned to": "No puede asignar/eliminar un alias que no tenga asignado", - "This invoice has a linked vehicle.": "Esta factura tiene un vehiculo vinculado", - "You don't have enough privileges.": "No tienes suficientes permisos.", - "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", - "Street should be uppercase": "La dirección fiscal debe ir en mayúscula", - "Ticket without Route": "Ticket sin ruta", - "Select a different client": "Seleccione un cliente distinto", - "Fill all the fields": "Rellene todos los campos", - "The response is not a PDF": "La respuesta no es un PDF", - "Booking completed": "Reserva completada", - "The ticket is in preparation": "El ticket [{{ticketId}}]({{{ticketUrl}}}) del comercial {{salesPersonId}} está en preparación", - "The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada", - "User disabled": "Usuario desactivado", - "The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima", - "quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima", - "Cannot past travels with entries": "No se pueden pasar envíos con entradas", - "It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}", - "This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada", - "This user does not have an assigned tablet": "Este usuario no tiene tablet asignada", - "Field are invalid": "El campo '{{tag}}' no es válido", - "Incorrect pin": "Pin incorrecto.", - "You already have the mailAlias": "Ya tienes este alias de correo", - "The alias cant be modified": "Este alias de correo no puede ser modificado", - "No tickets to invoice": "No hay tickets para facturar", - "this warehouse has not dms": "El Almacén no acepta documentos", - "This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado", - "Name should be uppercase": "El nombre debe ir en mayúscula", - "Bank entity must be specified": "La entidad bancaria es obligatoria", - "An email is necessary": "Es necesario un email", - "You cannot update these fields": "No puedes actualizar estos campos", - "CountryFK cannot be empty": "El país no puede estar vacío", - "Cmr file does not exist": "El archivo del cmr no existe", - "You are not allowed to modify the alias": "No estás autorizado a modificar el alias", - "The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas", - "The line could not be marked": "La linea no puede ser marcada", - "This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario", - "They're not your subordinate": "No es tu subordinado/a." + "Phone format is invalid": "El formato del teléfono no es correcto", + "You are not allowed to change the credit": "No tienes privilegios para modificar el crédito", + "Unable to mark the equivalence surcharge": "No se puede marcar el recargo de equivalencia", + "The default consignee can not be unchecked": "No se puede desmarcar el consignatario predeterminado", + "Unable to default a disabled consignee": "No se puede poner predeterminado un consignatario desactivado", + "Can't be blank": "No puede estar en blanco", + "Invalid TIN": "NIF/CIF inválido", + "TIN must be unique": "El NIF/CIF debe ser único", + "A client with that Web User name already exists": "Ya existe un cliente con ese Usuario Web", + "Is invalid": "Es inválido", + "Quantity cannot be zero": "La cantidad no puede ser cero", + "Enter an integer different to zero": "Introduce un entero distinto de cero", + "Package cannot be blank": "El embalaje no puede estar en blanco", + "The company name must be unique": "La razón social debe ser única", + "Invalid email": "Correo electrónico inválido", + "The IBAN does not have the correct format": "El IBAN no tiene el formato correcto", + "That payment method requires an IBAN": "El método de pago seleccionado requiere un IBAN", + "That payment method requires a BIC": "El método de pago seleccionado requiere un BIC", + "State cannot be blank": "El estado no puede estar en blanco", + "Worker cannot be blank": "El trabajador no puede estar en blanco", + "Cannot change the payment method if no salesperson": "No se puede cambiar la forma de pago si no hay comercial asignado", + "can't be blank": "El campo no puede estar vacío", + "Observation type must be unique": "El tipo de observación no puede repetirse", + "The credit must be an integer greater than or equal to zero": "The credit must be an integer greater than or equal to zero", + "The grade must be similar to the last one": "El grade debe ser similar al último", + "Only manager can change the credit": "Solo el gerente puede cambiar el credito de este cliente", + "Name cannot be blank": "El nombre no puede estar en blanco", + "Phone cannot be blank": "El teléfono no puede estar en blanco", + "Period cannot be blank": "El periodo no puede estar en blanco", + "Choose a company": "Selecciona una empresa", + "Se debe rellenar el campo de texto": "Se debe rellenar el campo de texto", + "Description should have maximum of 45 characters": "La descripción debe tener maximo 45 caracteres", + "Cannot be blank": "El campo no puede estar en blanco", + "The grade must be an integer greater than or equal to zero": "El grade debe ser un entero mayor o igual a cero", + "Sample type cannot be blank": "El tipo de plantilla no puede quedar en blanco", + "Description cannot be blank": "Se debe rellenar el campo de texto", + "The price of the item changed": "El precio del artículo cambió", + "The value should not be greater than 100%": "El valor no debe de ser mayor de 100%", + "The value should be a number": "El valor debe ser un numero", + "This order is not editable": "Esta orden no se puede modificar", + "You can't create an order for a frozen client": "No puedes crear una orden para un cliente congelado", + "You can't create an order for a client that has a debt": "No puedes crear una orden para un cliente con deuda", + "is not a valid date": "No es una fecha valida", + "Barcode must be unique": "El código de barras debe ser único", + "The warehouse can't be repeated": "El almacén no puede repetirse", + "The tag or priority can't be repeated for an item": "El tag o prioridad no puede repetirse para un item", + "The observation type can't be repeated": "El tipo de observación no puede repetirse", + "A claim with that sale already exists": "Ya existe una reclamación para esta línea", + "You don't have enough privileges to change that field": "No tienes permisos para cambiar ese campo", + "Warehouse cannot be blank": "El almacén no puede quedar en blanco", + "Agency cannot be blank": "La agencia no puede quedar en blanco", + "Not enough privileges to edit a client with verified data": "No tienes permisos para hacer cambios en un cliente con datos comprobados", + "This address doesn't exist": "Este consignatario no existe", + "You must delete the claim id %d first": "Antes debes borrar la reclamación %d", + "You don't have enough privileges": "No tienes suficientes permisos", + "Cannot check Equalization Tax in this NIF/CIF": "No se puede marcar RE en este NIF/CIF", + "You can't make changes on the basic data of an confirmed order or with rows": "No puedes cambiar los datos básicos de una orden con artículos", + "INVALID_USER_NAME": "El nombre de usuario solo debe contener letras minúsculas o, a partir del segundo carácter, números o subguiones, no está permitido el uso de la letra ñ", + "You can't create a ticket for a frozen client": "No puedes crear un ticket para un cliente congelado", + "You can't create a ticket for an inactive client": "No puedes crear un ticket para un cliente inactivo", + "Tag value cannot be blank": "El valor del tag no puede quedar en blanco", + "ORDER_EMPTY": "Cesta vacía", + "You don't have enough privileges to do that": "No tienes permisos para cambiar esto", + "NO SE PUEDE DESACTIVAR EL CONSIGNAT": "NO SE PUEDE DESACTIVAR EL CONSIGNAT", + "Error. El NIF/CIF está repetido": "Error. El NIF/CIF está repetido", + "Street cannot be empty": "Dirección no puede estar en blanco", + "City cannot be empty": "Ciudad no puede estar en blanco", + "Code cannot be blank": "Código no puede estar en blanco", + "You cannot remove this department": "No puedes eliminar este departamento", + "The extension must be unique": "La extensión debe ser unica", + "The secret can't be blank": "La contraseña no puede estar en blanco", + "We weren't able to send this SMS": "No hemos podido enviar el SMS", + "This client can't be invoiced": "Este cliente no puede ser facturado", + "You must provide the correction information to generate a corrective invoice": "Debes informar la información de corrección para generar una factura rectificativa", + "This ticket can't be invoiced": "Este ticket no puede ser facturado", + "You cannot add or modify services to an invoiced ticket": "No puedes añadir o modificar servicios a un ticket facturado", + "This ticket can not be modified": "Este ticket no puede ser modificado", + "The introduced hour already exists": "Esta hora ya ha sido introducida", + "INFINITE_LOOP": "Existe una dependencia entre dos Jefes", + "The sales of the receiver ticket can't be modified": "Las lineas del ticket al que envias no pueden ser modificadas", + "NO_AGENCY_AVAILABLE": "No hay una zona de reparto disponible con estos parámetros", + "ERROR_PAST_SHIPMENT": "No puedes seleccionar una fecha de envío en pasado", + "The current ticket can't be modified": "El ticket actual no puede ser modificado", + "The current claim can't be modified": "La reclamación actual no puede ser modificada", + "The sales of this ticket can't be modified": "Las lineas de este ticket no pueden ser modificadas", + "The sales do not exists": "La(s) línea(s) seleccionada(s) no existe(n)", + "Please select at least one sale": "Por favor selecciona al menos una linea", + "All sales must belong to the same ticket": "Todas las lineas deben pertenecer al mismo ticket", + "NO_ZONE_FOR_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", + "This item doesn't exists": "El artículo no existe", + "NOT_ZONE_WITH_THIS_PARAMETERS": "Para este día no hay ninguna zona configurada", + "Extension format is invalid": "El formato de la extensión es inválido", + "Invalid parameters to create a new ticket": "Parámetros inválidos para crear un nuevo ticket", + "This item is not available": "Este artículo no está disponible", + "This postcode already exists": "Este código postal ya existe", + "Concept cannot be blank": "El concepto no puede quedar en blanco", + "File doesn't exists": "El archivo no existe", + "You don't have privileges to change the zone": "No tienes permisos para cambiar la zona o para esos parámetros hay más de una opción de envío, hable con las agencias", + "This ticket is already on weekly tickets": "Este ticket ya está en tickets programados", + "Ticket id cannot be blank": "El id de ticket no puede quedar en blanco", + "Weekday cannot be blank": "El día de la semana no puede quedar en blanco", + "You can't delete a confirmed order": "No puedes borrar un pedido confirmado", + "The social name has an invalid format": "El nombre fiscal tiene un formato incorrecto", + "Invalid quantity": "Cantidad invalida", + "This postal code is not valid": "Este código postal no es válido", + "is invalid": "es inválido", + "The postcode doesn't exist. Please enter a correct one": "El código postal no existe. Por favor, introduce uno correcto", + "The department name can't be repeated": "El nombre del departamento no puede repetirse", + "This phone already exists": "Este teléfono ya existe", + "You cannot move a parent to its own sons": "No puedes mover un elemento padre a uno de sus hijos", + "You can't create a claim for a removed ticket": "No puedes crear una reclamación para un ticket eliminado", + "You cannot delete a ticket that part of it is being prepared": "No puedes eliminar un ticket en el que una parte que está siendo preparada", + "You must delete all the buy requests first": "Debes eliminar todas las peticiones de compra primero", + "You should specify a date": "Debes especificar una fecha", + "You should specify at least a start or end date": "Debes especificar al menos una fecha de inicio o de fin", + "Start date should be lower than end date": "La fecha de inicio debe ser menor que la fecha de fin", + "You should mark at least one week day": "Debes marcar al menos un día de la semana", + "Swift / BIC can't be empty": "Swift / BIC no puede estar vacío", + "Customs agent is required for a non UEE member": "El agente de aduanas es requerido para los clientes extracomunitarios", + "Incoterms is required for a non UEE member": "El incoterms es requerido para los clientes extracomunitarios", + "Deleted sales from ticket": "He eliminado las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{deletions}}}", + "Added sale to ticket": "He añadido la siguiente linea al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{addition}}}", + "Changed sale discount": "He cambiado el descuento de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Created claim": "He creado la reclamación [{{claimId}}]({{{claimUrl}}}) de las siguientes lineas del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Changed sale price": "He cambiado el precio de [{{itemId}} {{concept}}]({{{itemUrl}}}) ({{quantity}}) de {{oldPrice}}€ ➔ *{{newPrice}}€* del ticket [{{ticketId}}]({{{ticketUrl}}})", + "Changed sale quantity": "He cambiado la cantidad de [{{itemId}} {{concept}}]({{{itemUrl}}}) de {{oldQuantity}} ➔ *{{newQuantity}}* del ticket [{{ticketId}}]({{{ticketUrl}}})", + "State": "Estado", + "regular": "normal", + "reserved": "reservado", + "Changed sale reserved state": "He cambiado el estado reservado de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "Bought units from buy request": "Se ha comprado {{quantity}} unidades de [{{itemId}} {{concept}}]({{{urlItem}}}) para el ticket id [{{ticketId}}]({{{url}}})", + "Deny buy request": "Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}", + "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*", + "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})", + "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})", + "Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}", + "Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*, con el tipo de recogida *{{claimPickup}}*", + "Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*", + "Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}", + "ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto", + "Distance must be lesser than 4000": "La distancia debe ser inferior a 4000", + "This ticket is deleted": "Este ticket está eliminado", + "Unable to clone this travel": "No ha sido posible clonar este travel", + "This thermograph id already exists": "La id del termógrafo ya existe", + "Choose a date range or days forward": "Selecciona un rango de fechas o días en adelante", + "ORDER_ALREADY_CONFIRMED": "ORDEN YA CONFIRMADA", + "Invalid password": "Invalid password", + "Password does not meet requirements": "La contraseña no cumple los requisitos", + "Role already assigned": "Rol ya asignado", + "Invalid role name": "Nombre de rol no válido", + "Role name must be written in camelCase": "El nombre del rol debe escribirse en camelCase", + "Email already exists": "El correo ya existe", + "User already exists": "El/La usuario/a ya existe", + "Absence change notification on the labour calendar": "Notificación de cambio de ausencia en el calendario laboral", + "Record of hours week": "Registro de horas semana {{week}} año {{year}} ", + "Created absence": "El empleado {{author}} ha añadido una ausencia de tipo '{{absenceType}}' a {{employee}} para el día {{dated}}.", + "Deleted absence": "El empleado {{author}} ha eliminado una ausencia de tipo '{{absenceType}}' a {{employee}} del día {{dated}}.", + "I have deleted the ticket id": "He eliminado el ticket id [{{id}}]({{{url}}})", + "I have restored the ticket id": "He restaurado el ticket id [{{id}}]({{{url}}})", + "You can only restore a ticket within the first hour after deletion": "Únicamente puedes restaurar el ticket dentro de la primera hora después de su eliminación", + "Changed this data from the ticket": "He cambiado estos datos del ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", + "agencyModeFk": "Agencia", + "clientFk": "Cliente", + "zoneFk": "Zona", + "warehouseFk": "Almacén", + "shipped": "F. envío", + "landed": "F. entrega", + "addressFk": "Consignatario", + "companyFk": "Empresa", + "agency": "Agencia", + "delivery": "Reparto", + "The social name cannot be empty": "La razón social no puede quedar en blanco", + "The nif cannot be empty": "El NIF no puede quedar en blanco", + "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados", + "ASSIGN_ZONE_FIRST": "Asigna una zona primero", + "Amount cannot be zero": "El importe no puede ser cero", + "Company has to be official": "Empresa inválida", + "You can not select this payment method without a registered bankery account": "No se puede utilizar este método de pago si no has registrado una cuenta bancaria", + "Action not allowed on the test environment": "Esta acción no está permitida en el entorno de pruebas", + "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta", + "New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}* y un precio de *{{price}} €*", + "New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día *{{shipped}}*, con una cantidad de *{{quantity}}*", + "Swift / BIC cannot be empty": "Swift / BIC no puede estar vacío", + "This BIC already exist.": "Este BIC ya existe.", + "That item doesn't exists": "Ese artículo no existe", + "There's a new urgent ticket:": "Hay un nuevo ticket urgente:", + "Invalid account": "Cuenta inválida", + "Compensation account is empty": "La cuenta para compensar está vacia", + "This genus already exist": "Este genus ya existe", + "This specie already exist": "Esta especie ya existe", + "Client assignment has changed": "He cambiado el comercial ~*\"<{{previousWorkerName}}>\"*~ por *\"<{{currentWorkerName}}>\"* del cliente [{{clientName}} ({{clientId}})]({{{url}}})", + "None": "Ninguno", + "The contract was not active during the selected date": "El contrato no estaba activo durante la fecha seleccionada", + "Cannot add more than one '1/2 day vacation'": "No puedes añadir más de un 'Vacaciones 1/2 dia'", + "This document already exists on this ticket": "Este documento ya existe en el ticket", + "Some of the selected tickets are not billable": "Algunos de los tickets seleccionados no son facturables", + "You can't invoice tickets from multiple clients": "No puedes facturar tickets de multiples clientes", + "nickname": "nickname", + "INACTIVE_PROVIDER": "Proveedor inactivo", + "This client is not invoiceable": "Este cliente no es facturable", + "serial non editable": "Esta serie no permite asignar la referencia", + "Max shipped required": "La fecha límite es requerida", + "Can't invoice to future": "No se puede facturar a futuro", + "Can't invoice to past": "No se puede facturar a pasado", + "This ticket is already invoiced": "Este ticket ya está facturado", + "A ticket with an amount of zero can't be invoiced": "No se puede facturar un ticket con importe cero", + "A ticket with a negative base can't be invoiced": "No se puede facturar un ticket con una base negativa", + "Global invoicing failed": "[Facturación global] No se han podido facturar algunos clientes", + "Wasn't able to invoice the following clients": "No se han podido facturar los siguientes clientes", + "Can't verify data unless the client has a business type": "No se puede verificar datos de un cliente que no tiene tipo de negocio", + "You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito", + "You can't change the credit set to zero from a financialBoss": "No puedes cambiar el cŕedito establecido a cero por un jefe de finanzas", + "Amounts do not match": "Las cantidades no coinciden", + "The PDF document does not exist": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'", + "The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos", + "You can't create a claim from a ticket delivered more than seven days ago": "No puedes crear una reclamación de un ticket entregado hace más de siete días", + "The worker has hours recorded that day": "El trabajador tiene horas fichadas ese día", + "The worker has a marked absence that day": "El trabajador tiene marcada una ausencia ese día", + "You can not modify is pay method checked": "No se puede modificar el campo método de pago validado", + "The account size must be exactly 10 characters": "El tamaño de la cuenta debe ser exactamente de 10 caracteres", + "Can't transfer claimed sales": "No puedes transferir lineas reclamadas", + "You don't have privileges to create refund": "No tienes permisos para crear un abono", + "The item is required": "El artículo es requerido", + "The agency is already assigned to another autonomous": "La agencia ya está asignada a otro autónomo", + "date in the future": "Fecha en el futuro", + "reference duplicated": "Referencia duplicada", + "This ticket is already a refund": "Este ticket ya es un abono", + "isWithoutNegatives": "Sin negativos", + "routeFk": "routeFk", + "Can't change the password of another worker": "No se puede cambiar la contraseña de otro trabajador", + "No hay un contrato en vigor": "No hay un contrato en vigor", + "No se permite fichar a futuro": "No se permite fichar a futuro", + "No está permitido trabajar": "No está permitido trabajar", + "Fichadas impares": "Fichadas impares", + "Descanso diario 12h.": "Descanso diario 12h.", + "Descanso semanal 36h. / 72h.": "Descanso semanal 36h. / 72h.", + "Dirección incorrecta": "Dirección incorrecta", + "Modifiable user details only by an administrator": "Detalles de usuario modificables solo por un administrador", + "Modifiable password only via recovery or by an administrator": "Contraseña modificable solo a través de la recuperación o por un administrador", + "Not enough privileges to edit a client": "No tienes suficientes privilegios para editar un cliente", + "This route does not exists": "Esta ruta no existe", + "Claim pickup order sent": "Reclamación Orden de recogida enviada [{{claimId}}]({{{claimUrl}}}) al cliente *{{clientName}}*", + "You don't have grant privilege": "No tienes privilegios para dar privilegios", + "You don't own the role and you can't assign it to another user": "No eres el propietario del rol y no puedes asignarlo a otro usuario", + "Ticket merged": "Ticket [{{originId}}]({{{originFullPath}}}) ({{{originDated}}}) fusionado con [{{destinationId}}]({{{destinationFullPath}}}) ({{{destinationDated}}})", + "Already has this status": "Ya tiene este estado", + "There aren't records for this week": "No existen registros para esta semana", + "Empty data source": "Origen de datos vacio", + "App locked": "Aplicación bloqueada por el usuario {{userId}}", + "Email verify": "Correo de verificación", + "Landing cannot be lesser than shipment": "Landing cannot be lesser than shipment", + "Receipt's bank was not found": "No se encontró el banco del recibo", + "This receipt was not compensated": "Este recibo no ha sido compensado", + "Client's email was not found": "No se encontró el email del cliente", + "Negative basis": "Base negativa", + "This worker code already exists": "Este codigo de trabajador ya existe", + "This personal mail already exists": "Este correo personal ya existe", + "This worker already exists": "Este trabajador ya existe", + "App name does not exist": "El nombre de aplicación no es válido", + "Try again": "Vuelve a intentarlo", + "Aplicación bloqueada por el usuario 9": "Aplicación bloqueada por el usuario 9", + "Failed to upload delivery note": "Error al subir albarán {{id}}", + "The DOCUWARE PDF document does not exists": "El documento PDF Docuware no existe", + "It is not possible to modify tracked sales": "No es posible modificar líneas de pedido que se hayan empezado a preparar", + "It is not possible to modify sales that their articles are from Floramondo": "No es posible modificar líneas de pedido cuyos artículos sean de Floramondo", + "It is not possible to modify cloned sales": "No es posible modificar líneas de pedido clonadas", + "A supplier with the same name already exists. Change the country.": "Un proveedor con el mismo nombre ya existe. Cambie el país.", + "There is no assigned email for this client": "No hay correo asignado para este cliente", + "Exists an invoice with a future date": "Existe una factura con fecha posterior", + "Invoice date can't be less than max date": "La fecha de factura no puede ser inferior a la fecha límite", + "Warehouse inventory not set": "El almacén inventario no está establecido", + "This locker has already been assigned": "Esta taquilla ya ha sido asignada", + "Tickets with associated refunds": "No se pueden borrar tickets con abonos asociados. Este ticket está asociado al abono Nº %d", + "Not exist this branch": "La rama no existe", + "This ticket cannot be signed because it has not been boxed": "Este ticket no puede firmarse porque no ha sido encajado", + "Collection does not exist": "La colección no existe", + "Cannot obtain exclusive lock": "No se puede obtener un bloqueo exclusivo", + "Insert a date range": "Inserte un rango de fechas", + "Added observation": "{{user}} añadió esta observacion: {{text}}", + "Comment added to client": "Observación añadida al cliente {{clientFk}}", + "Invalid auth code": "Código de verificación incorrecto", + "Invalid or expired verification code": "Código de verificación incorrecto o expirado", + "Cannot create a new claimBeginning from a different ticket": "No se puede crear una línea de reclamación de un ticket diferente al origen", + "company": "Compañía", + "country": "País", + "clientId": "Id cliente", + "clientSocialName": "Cliente", + "amount": "Importe", + "taxableBase": "Base", + "ticketFk": "Id ticket", + "isActive": "Activo", + "hasToInvoice": "Facturar", + "isTaxDataChecked": "Datos comprobados", + "comercialId": "Id comercial", + "comercialName": "Comercial", + "Pass expired": "La contraseña ha caducado, cambiela desde Salix", + "Invalid NIF for VIES": "Invalid NIF for VIES", + "Ticket does not exist": "Este ticket no existe", + "Ticket is already signed": "Este ticket ya ha sido firmado", + "Authentication failed": "Autenticación fallida", + "You can't use the same password": "No puedes usar la misma contraseña", + "You can only add negative amounts in refund tickets": "Solo se puede añadir cantidades negativas en tickets abono", + "Fecha fuera de rango": "Fecha fuera de rango", + "Error while generating PDF": "Error al generar PDF", + "Error when sending mail to client": "Error al enviar el correo al cliente", + "Mail not sent": "Se ha producido un fallo al enviar la factura al cliente [{{clientId}}]({{{clientUrl}}}), por favor revisa la dirección de correo electrónico", + "The renew period has not been exceeded": "El periodo de renovación no ha sido superado", + "Valid priorities": "Prioridades válidas: %d", + "hasAnyNegativeBase": "Base negativa para los tickets: {{ticketsIds}}", + "hasAnyPositiveBase": "Base positivas para los tickets: {{ticketsIds}}", + "You cannot assign an alias that you are not assigned to": "No puede asignar un alias que no tenga asignado", + "This ticket cannot be left empty.": "Este ticket no se puede dejar vacío. %s", + "The company has not informed the supplier account for bank transfers": "La empresa no tiene informado la cuenta de proveedor para transferencias bancarias", + "You cannot assign/remove an alias that you are not assigned to": "No puede asignar/eliminar un alias que no tenga asignado", + "This invoice has a linked vehicle.": "Esta factura tiene un vehiculo vinculado", + "You don't have enough privileges.": "No tienes suficientes permisos.", + "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", + "Street should be uppercase": "La dirección fiscal debe ir en mayúscula", + "Ticket without Route": "Ticket sin ruta", + "Select a different client": "Seleccione un cliente distinto", + "Fill all the fields": "Rellene todos los campos", + "The response is not a PDF": "La respuesta no es un PDF", + "Booking completed": "Reserva completada", + "The ticket is in preparation": "El ticket [{{ticketId}}]({{{ticketUrl}}}) del comercial {{salesPersonId}} está en preparación", + "The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada", + "User disabled": "Usuario desactivado", + "The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima", + "quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima", + "Cannot past travels with entries": "No se pueden pasar envíos con entradas", + "It was not able to remove the next expeditions:": "No se pudo eliminar las siguientes expediciones: {{expeditions}}", + "This claim has been updated": "La reclamación con Id: {{claimId}}, ha sido actualizada", + "This user does not have an assigned tablet": "Este usuario no tiene tablet asignada", + "Field are invalid": "El campo '{{tag}}' no es válido", + "Incorrect pin": "Pin incorrecto.", + "You already have the mailAlias": "Ya tienes este alias de correo", + "The alias cant be modified": "Este alias de correo no puede ser modificado", + "No tickets to invoice": "No hay tickets para facturar", + "this warehouse has not dms": "El Almacén no acepta documentos", + "This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado", + "Name should be uppercase": "El nombre debe ir en mayúscula", + "Bank entity must be specified": "La entidad bancaria es obligatoria", + "An email is necessary": "Es necesario un email", + "You cannot update these fields": "No puedes actualizar estos campos", + "CountryFK cannot be empty": "El país no puede estar vacío", + "Cmr file does not exist": "El archivo del cmr no existe", + "You are not allowed to modify the alias": "No estás autorizado a modificar el alias", + "The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas", + "The line could not be marked": "La linea no puede ser marcada", + "This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario", + "They're not your subordinate": "No es tu subordinado/a.", + "No results found": "No se han encontrado resultados" } \ No newline at end of file From cedfdbb421f2dbfacc1855a5bf4d12092551d008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s?= Date: Fri, 5 Apr 2024 13:22:54 +0200 Subject: [PATCH 65/78] fix: closeTicket idem salix Refs: #6549 --- .../10949-limeLaurel/00-firstScript.sql | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/db/versions/10949-limeLaurel/00-firstScript.sql b/db/versions/10949-limeLaurel/00-firstScript.sql index 58d50e125e..cc0bcc96b3 100644 --- a/db/versions/10949-limeLaurel/00-firstScript.sql +++ b/db/versions/10949-limeLaurel/00-firstScript.sql @@ -1,16 +1,15 @@ - INSERT INTO util.notification ( name, description) - SELECT 'invoice-ticket-closure', - 'Tickets not invoiced during the nightly closure ticket process' - FROM util.notification; - -SET @notificationFk =LAST_INSERT_ID(); + INSERT INTO util.notification ( name, description) + SELECT 'invoice-ticket-closure', + 'Tickets not invoiced during the nightly closure ticket process'; + + SET @notificationFk =LAST_INSERT_ID(); -INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk) - SELECT @notificationFk,id - FROM account.role - WHERE name ='administrative'; + INSERT IGNORE INTO util.notificationAcl (notificationFk, roleFk) + SELECT @notificationFk,id + FROM account.role + WHERE name ='administrative'; -INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk) - SELECT @notificationFk, id - FROM account.`user` - WHERE `name` = 'admon'; + INSERT IGNORE INTO util.notificationSubscription (notificationFk, userFk) + SELECT @notificationFk, id + FROM account.`user` + WHERE `name` = 'admon'; From 5517c29c1cbf2455fa3524e6bd5be8ab508f633d Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 8 Apr 2024 08:37:37 +0200 Subject: [PATCH 66/78] fet: refs #7150 greuge_dif_porte_add --- .../bi/procedures/greuge_dif_porte_add.sql | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/db/routines/bi/procedures/greuge_dif_porte_add.sql b/db/routines/bi/procedures/greuge_dif_porte_add.sql index 09cdfe0763..5f82d72bc0 100644 --- a/db/routines/bi/procedures/greuge_dif_porte_add.sql +++ b/db/routines/bi/procedures/greuge_dif_porte_add.sql @@ -1,14 +1,19 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`greuge_dif_porte_add`() BEGIN + +/** + * Calculates the greuge based on a specific date in the 'grievanceConfig' table + */ + DECLARE vDateStarted DATETIME; - DECLARE vDateEnded DATETIME DEFAULT TIMESTAMPADD(DAY,-1,util.VN_CURDATE()); + DECLARE vDateEnded DATETIME DEFAULT (util.VN_CURDATE() - INTERVAL 1 DAY); DECLARE vDaysSinceLastRecalculation INT; SELECT daysSinceLastRecalculation INTO vDaysSinceLastRecalculation FROM vn.greugeConfig; - SET vDateStarted = TIMESTAMPADD(DAY, -vDaysSinceLastRecalculation, util.VN_CURDATE()); + SET vDateStarted = util.VN_CURDATE() - INTERVAL vDaysSinceLastRecalculation DAY; DROP TEMPORARY TABLE IF EXISTS tmp.dp; @@ -17,28 +22,29 @@ BEGIN (PRIMARY KEY (ticketFk)) ENGINE = MEMORY SELECT t.id ticketFk, - SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) AS teorico, - 00000.00 as practico, - 00000.00 as greuge, + SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) teorico, + 00000.00 practico, + 00000.00 greuge, t.clientFk, t.shipped FROM vn.ticket t - JOIN vn2008.Clientes cli ON cli.Id_cliente = t.clientFk + JOIN vn.client c ON c.id = t.clientFk LEFT JOIN vn.expedition e ON e.ticketFk = t.id JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk JOIN vn.zone z ON t.zoneFk = z.id - WHERE t.shipped between vDateStarted AND vDateEnded - AND cli.`real` - AND t.companyFk IN (442 , 567) - AND z.isVolumetric = FALSE + JOIN vn.companyFk cp ON cp.id = t.companyFk + WHERE t.shipped BETWEEN vDateStarted AND vDateEnded + AND c.isRelevant + AND cp.code IN ('VNL', 'VNH') + AND NOT z.isVolumetric GROUP BY t.id; -- Agencias que cobran por volumen INSERT INTO tmp.dp SELECT sv.ticketFk, - SUM(IFNULL(sv.freight,0)) AS teorico, - 00000.00 as practico, - 00000.00 as greuge, + SUM(IFNULL(sv.freight,0)) teorico, + 00000.00 practico, + 00000.00 greuge, sv.clientFk, sv.shipped FROM vn.saleVolume sv @@ -52,11 +58,12 @@ BEGIN CREATE TEMPORARY TABLE tmp.dp_aux (PRIMARY KEY (ticketFk)) ENGINE = MEMORY - SELECT dp.ticketFk, sum(Cantidad * Valor) as valor + SELECT dp.ticketFk, SUM(s.quantity * sc.value) valor FROM tmp.dp - JOIN vn2008.Movimientos m ON m.Id_Ticket = dp.ticketFk - JOIN vn2008.Movimientos_componentes mc using(Id_Movimiento) - WHERE mc.Id_Componente = 15 + JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.saleComponent sc ON sc.saleFk = s.id + JOIN vn.component c ON c.id = sc.componentFk + WHERE c.code = 'delivery' GROUP BY dp.ticketFk; UPDATE tmp.dp @@ -68,10 +75,11 @@ BEGIN CREATE TEMPORARY TABLE tmp.dp_aux (PRIMARY KEY (ticketFk)) ENGINE = MEMORY - SELECT dp.ticketFk, sum(g.amount) Importe + SELECT dp.ticketFk, SUM(g.amount) Importe FROM tmp.dp JOIN vn.greuge g ON g.ticketFk = dp.ticketFk - WHERE g.greugeTypeFk = 1 -- dif_porte + JOIN vn.greugeType gt ON gt.id = g.greugeTypeFk + WHERE gt.code = 'freightDifference' -- dif_porte GROUP BY dp.ticketFk; UPDATE tmp.dp @@ -80,8 +88,8 @@ BEGIN INSERT INTO vn.greuge (clientFk,description,amount,shipped,greugeTypeFk,ticketFk) SELECT dp.clientFk, - concat('dif_porte ', dp.ticketFk), - round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe, + CONCAT('dif_porte ', dp.ticketFk), + ROUND(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) Importe, date(dp.shipped), 1, dp.ticketFk From 657150a9a7e928132ae724b9cf09323007a24b15 Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 8 Apr 2024 08:57:56 +0200 Subject: [PATCH 67/78] feat: refs #7150 greuge_dif_porte_add --- db/routines/bi/procedures/greuge_dif_porte_add.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/routines/bi/procedures/greuge_dif_porte_add.sql b/db/routines/bi/procedures/greuge_dif_porte_add.sql index 5f82d72bc0..e546780376 100644 --- a/db/routines/bi/procedures/greuge_dif_porte_add.sql +++ b/db/routines/bi/procedures/greuge_dif_porte_add.sql @@ -32,7 +32,7 @@ BEGIN LEFT JOIN vn.expedition e ON e.ticketFk = t.id JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk JOIN vn.zone z ON t.zoneFk = z.id - JOIN vn.companyFk cp ON cp.id = t.companyFk + JOIN vn.company cp ON cp.id = t.companyFk WHERE t.shipped BETWEEN vDateStarted AND vDateEnded AND c.isRelevant AND cp.code IN ('VNL', 'VNH') @@ -60,7 +60,7 @@ BEGIN ENGINE = MEMORY SELECT dp.ticketFk, SUM(s.quantity * sc.value) valor FROM tmp.dp - JOIN vn.sale s ON s.ticketFk = t.id + JOIN vn.sale s ON s.ticketFk = dp.ticketFk JOIN vn.saleComponent sc ON sc.saleFk = s.id JOIN vn.component c ON c.id = sc.componentFk WHERE c.code = 'delivery' From 0b96471c7de81e81b932a63ac8d141e38c350f33 Mon Sep 17 00:00:00 2001 From: guillermo Date: Mon, 8 Apr 2024 09:27:07 +0200 Subject: [PATCH 68/78] feat: refs #6714 Added businessType zone_getAddresses --- db/routines/vn/procedures/zone_getAddresses.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/db/routines/vn/procedures/zone_getAddresses.sql b/db/routines/vn/procedures/zone_getAddresses.sql index 1412c7ab35..ce7b0204eb 100644 --- a/db/routines/vn/procedures/zone_getAddresses.sql +++ b/db/routines/vn/procedures/zone_getAddresses.sql @@ -28,7 +28,7 @@ BEGIN SELECT c.id clientFk, c.name, c.phone, - c.mobile, + bt.description, c.salesPersonFk, u.name username, aai.invoiced, @@ -44,10 +44,11 @@ BEGIN LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id JOIN vn.clientType ct ON ct.code = c.typeFk + JOIN vn.businessType bt ON bt.code = c.businessTypeFk WHERE a.isActive AND c.isActive AND ct.code = 'normal' - AND c.businessTypeFk <> 'worker' + AND bt.code <> 'worker' GROUP BY c.id; DROP TEMPORARY TABLE tmp.zoneNodes; From 2eb229adf72819078e9a241048c40508f780f26d Mon Sep 17 00:00:00 2001 From: Pako Date: Mon, 8 Apr 2024 14:30:46 +0200 Subject: [PATCH 69/78] catalogue fixed --- .../floranet/procedures/catalogue_get.sql | 20 +++++++++++++++---- .../floranet/procedures/sliders_get.sql | 3 ++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/db/routines/floranet/procedures/catalogue_get.sql b/db/routines/floranet/procedures/catalogue_get.sql index b6ec615221..e45fa7ddfd 100644 --- a/db/routines/floranet/procedures/catalogue_get.sql +++ b/db/routines/floranet/procedures/catalogue_get.sql @@ -4,7 +4,7 @@ DELIMITER $$ $$ CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.catalogue_get(vLanded DATE, vPostalCode VARCHAR(15)) READS SQL DATA -BEGIN +proc:BEGIN /** * Returns list, price and all the stuff regarding the floranet items * @@ -12,10 +12,22 @@ BEGIN * @param vPostalCode Delivery address postal code */ DECLARE vLastCatalogueFk INT; + DECLARE vLockName VARCHAR(20); + DECLARE vLockTime INT; - START TRANSACTION; + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + DO RELEASE_LOCK(vLockName); - SELECT * FROM catalogue FOR UPDATE; + RESIGNAL; + END; + + SET vLockName = 'catalogue_get'; + SET vLockTime = 15; + + IF NOT GET_LOCK(vLockName, vLockTime) THEN + LEAVE proc; + END IF; SELECT MAX(id) INTO vLastCatalogueFk FROM catalogue; @@ -46,7 +58,7 @@ BEGIN FROM catalogue WHERE id > IFNULL(vLastCatalogueFk,0); - COMMIT; + DO RELEASE_LOCK(vLockName); END$$ DELIMITER ; diff --git a/db/routines/floranet/procedures/sliders_get.sql b/db/routines/floranet/procedures/sliders_get.sql index 2f77b8534b..bd791dec74 100644 --- a/db/routines/floranet/procedures/sliders_get.sql +++ b/db/routines/floranet/procedures/sliders_get.sql @@ -13,7 +13,8 @@ BEGIN i.longName FROM vn.item i JOIN vn.itemType it ON it.id = i.typeFk - WHERE it.code IN ('FNR','FNP'); + WHERE it.code IN ('FNR','FNP') + LIMIT 3; END$$ DELIMITER ; \ No newline at end of file From 913421633267930233cd3614736c78084ad4c00b Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 8 Apr 2024 14:46:35 +0200 Subject: [PATCH 70/78] refactor(workerDms): adapat to lilium --- back/methods/url/getUrl.js | 4 +- db/dump/fixtures.before.sql | 3 +- .../worker/back/methods/worker-dms/filter.js | 67 ++++++++++++------- modules/worker/front/dms/index/index.html | 27 ++++---- modules/worker/front/dms/index/index.js | 39 +++++++++++ 5 files changed, 100 insertions(+), 40 deletions(-) diff --git a/back/methods/url/getUrl.js b/back/methods/url/getUrl.js index ef741e5a03..fa3f7fdad8 100644 --- a/back/methods/url/getUrl.js +++ b/back/methods/url/getUrl.js @@ -19,12 +19,12 @@ module.exports = Self => { } }); Self.getUrl = async(appName = 'salix') => { - const {url} = await Self.app.models.Url.findOne({ + const url = await Self.app.models.Url.findOne({ where: { appName, environment: process.env.NODE_ENV || 'development' } }); - return url; + return url?.url; }; }; diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 4ed91e1c04..32791f1b77 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -2913,7 +2913,8 @@ INSERT INTO `salix`.`url` (`appName`, `environment`, `url`) VALUES ('lilium', 'development', 'http://localhost:9000/#/'), ('hedera', 'development', 'http://localhost:9090/'), - ('salix', 'development', 'http://localhost:5000/#!/'); + ('salix', 'development', 'http://localhost:5000/#!/'), + ('docuware', 'development', 'http://docuware'); INSERT INTO `vn`.`report` (`id`, `name`, `paperSizeFk`, `method`) VALUES diff --git a/modules/worker/back/methods/worker-dms/filter.js b/modules/worker/back/methods/worker-dms/filter.js index 9d85544848..69e470a21d 100644 --- a/modules/worker/back/methods/worker-dms/filter.js +++ b/modules/worker/back/methods/worker-dms/filter.js @@ -1,4 +1,5 @@ const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; +const {mergeFilters, mergeWhere} = require('vn-loopback/util/filter'); module.exports = Self => { Self.remoteMethodCtx('filter', { @@ -33,28 +34,31 @@ module.exports = Self => { const userId = ctx.req.accessToken.userId; const models = Self.app.models; + // Get ids alloweds const account = await models.VnUser.findById(userId); const stmt = new ParameterizedSQL( - `SELECT d.id dmsFk, d.reference, d.description, d.file, d.created, d.hardCopyNumber, d.hasFile + `SELECT d.id, d.id dmsFk FROM workerDocument wd JOIN dms d ON d.id = wd.document JOIN dmsType dt ON dt.id = d.dmsTypeFk LEFT JOIN account.roleRole rr ON rr.inheritsFrom = dt.readRoleFk AND rr.role = ? `, [account.roleFk] ); - const oldWhere = filter.where; const yourOwnDms = {and: [{isReadableByWorker: true}, {worker: userId}]}; + const where = { + or: [yourOwnDms, { + role: { + neq: null + } + }] + }; + stmt.merge(conn.makeSuffix(mergeWhere(filter.where, where))); - filter.where = { - and: [{ - or: [yourOwnDms, { - role: { - neq: null - } - }] - }, oldWhere]}; - stmt.merge(conn.makeSuffix(filter)); - const workerDms = await conn.executeStmt(stmt); + // Get workerDms alloweds + const dmsIds = await conn.executeStmt(stmt); + const allowedIds = dmsIds.map(dms => dms.id); + const allowedFilter = mergeFilters(filter, {where: {dmsFk: {inq: allowedIds}, workerFk: id}}); + let workerDms = await models.WorkerDms.find(allowedFilter); // Get docuware info const docuware = await models.Docuware.findOne({ @@ -63,28 +67,43 @@ module.exports = Self => { }); const docuwareDmsType = docuware.dmsTypeFk; let workerDocuware = []; - if (!docuwareDmsType || (docuwareDmsType && await models.DmsType.hasReadRole(ctx, docuwareDmsType))) { - const worker = await models.Worker.findById(id, {fields: ['fi', 'firstName', 'lastName']}); + if (!filter.skip && (!docuwareDmsType || (docuwareDmsType && await models.DmsType.hasReadRole(ctx, docuwareDmsType)))) { + const worker = await models.Worker.findById(36471, {fields: ['fi', 'firstName', 'lastName']}); const docuwareParse = { 'Filename': 'dmsFk', 'Tipo Documento': 'description', 'Stored on': 'created', - 'Document ID': 'id' + 'Document ID': 'id', + 'URL': 'download', + 'Stored by': 'name', + 'Estado': 'state' }; workerDocuware = - await models.Docuware.getById('hr', worker.lastName + ' ' + worker.firstName, docuwareParse) ?? []; + await models.Docuware.getById('hr', worker.lastName + ' ' + worker.firstName, docuwareParse) ?? []; + const url = (await Self.app.models.Url.getUrl('docuware')) + 'WebClient'; for (document of workerDocuware) { + const docuwareId = document.id; const defaultData = { - file: 'dw' + document.id + '.png', - isDocuware: true, - hardCopyNumber: null, - hasFile: false, - reference: worker.fi, - dmsFk: 'DW' + document.id + id: docuwareId, + workerFk: id, + dmsFk: docuwareId, + dms: { + id: docuwareId, + file: docuwareId + '.pdf', + isDocuware: true, + hasFile: false, + reference: worker.fi, + dmsFk: docuwareId, + url, + description: document.description + ' - ' + document.state, + download: document.download, + created: document.created, + dmsType: {name: 'Docuware'}, + worker: {id: null, user: {name: document.name}}, + } }; - - document = Object.assign(document, defaultData); + Object.assign(document, defaultData); } } return workerDms.concat(workerDocuware); diff --git a/modules/worker/front/dms/index/index.html b/modules/worker/front/dms/index/index.html index aefbbcf345..e4cec8002b 100644 --- a/modules/worker/front/dms/index/index.html +++ b/modules/worker/front/dms/index/index.html @@ -2,6 +2,7 @@ vn-id="model" url="WorkerDms/{{$ctrl.$params.id}}/filter" link="{worker: $ctrl.$params.id}" + filter="$ctrl.filter" limit="20" data="$ctrl.workerDms" order="dmsFk DESC" @@ -28,37 +29,37 @@ - {{::document.dmsFk}} + {{::document.id}} - - {{::document.hardCopyNumber}} + {{::document.dms.hardCopyNumber}} - - {{::document.reference}} + + {{::document.dms.reference}} - - {{::document.description}} + + {{::document.dms.description}} - {{::document.file}} + ng-click="$ctrl.downloadFile(document.dmsFk, document.dms.isDocuware)"> + {{::document.dms.file}} - {{::document.created | date:'dd/MM/yyyy HH:mm'}} + {{::document.dms.created | date:'dd/MM/yyyy HH:mm'}} - + @@ -78,7 +79,7 @@ tabindex="-1"> - + Date: Tue, 9 Apr 2024 07:51:57 +0200 Subject: [PATCH 71/78] fix id --- modules/worker/back/methods/worker-dms/filter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/worker/back/methods/worker-dms/filter.js b/modules/worker/back/methods/worker-dms/filter.js index 69e470a21d..b7802a689d 100644 --- a/modules/worker/back/methods/worker-dms/filter.js +++ b/modules/worker/back/methods/worker-dms/filter.js @@ -68,7 +68,7 @@ module.exports = Self => { const docuwareDmsType = docuware.dmsTypeFk; let workerDocuware = []; if (!filter.skip && (!docuwareDmsType || (docuwareDmsType && await models.DmsType.hasReadRole(ctx, docuwareDmsType)))) { - const worker = await models.Worker.findById(36471, {fields: ['fi', 'firstName', 'lastName']}); + const worker = await models.Worker.findById(id, {fields: ['fi', 'firstName', 'lastName']}); const docuwareParse = { 'Filename': 'dmsFk', 'Tipo Documento': 'description', From 449a06c85cf0f8d415b916f032ce238c396ea49e Mon Sep 17 00:00:00 2001 From: guillermo Date: Tue, 9 Apr 2024 09:43:30 +0200 Subject: [PATCH 72/78] feat: refs #6636 Added tests --- .../application/spec/getEnumValues.spec.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 loopback/common/methods/application/spec/getEnumValues.spec.js diff --git a/loopback/common/methods/application/spec/getEnumValues.spec.js b/loopback/common/methods/application/spec/getEnumValues.spec.js new file mode 100644 index 0000000000..edb2e76f7d --- /dev/null +++ b/loopback/common/methods/application/spec/getEnumValues.spec.js @@ -0,0 +1,35 @@ +const models = require('vn-loopback/server/server').models; + +describe('Application getEnumValues()', () => { + let tx; + + beforeEach(async() => { + tx = await models.Application.beginTransaction({}); + const options = {transaction: tx}; + + await models.Application.rawSql(` + CREATE TABLE tableWithEnum ( + direction enum('in', 'out', 'middle'), + PRIMARY KEY (direction) + ) ENGINE=InnoDB; + `, null, options); + }); + + it('should return three if is ok', async() => { + try { + const options = {transaction: tx}; + const response = await models.Application.getEnumValues( + 'vn', + 'tableWithEnum', + 'direction', + options + ); + + expect(response.length).toEqual(3); + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); +}); From f8be6be7a3133f6113a7d9e7eafd1654ec0a7313 Mon Sep 17 00:00:00 2001 From: guillermo Date: Tue, 9 Apr 2024 10:10:11 +0200 Subject: [PATCH 73/78] feat: refs #6636 Minor change --- db/versions/10976-greenCamellia/00-firstScript.sql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/db/versions/10976-greenCamellia/00-firstScript.sql b/db/versions/10976-greenCamellia/00-firstScript.sql index 107500eed8..0fd9440219 100644 --- a/db/versions/10976-greenCamellia/00-firstScript.sql +++ b/db/versions/10976-greenCamellia/00-firstScript.sql @@ -9,6 +9,11 @@ UPDATE vn.claim c JOIN tmp.claimsWithHasToPickUp tmp ON tmp.id = c.id SET c.pickup = 'delivery'; +-- Solved bug empty value +UPDATE vn.claim + SET pickup = NULL + WHERE pickup = ''; + DROP TEMPORARY TABLE tmp.claimsWithHasToPickUp; INSERT INTO salix.ACL (model,property,accessType,principalId) From a3c1bceb7ef93e3cd43d39ea66b302a3a0c8a7f9 Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 9 Apr 2024 15:57:34 +0200 Subject: [PATCH 74/78] refactor: refs #6492 use enum --- db/dump/fixtures.before.sql | 20 +++++++++---------- .../procedures/addAccountReconciliation.sql | 8 ++++---- .../00-addReconciliationConfig.sql | 2 -- .../01-addReconciliationConfig.vn.sql | 4 ++-- .../10948-azureSalal/03-modifyColumn.sql | 1 + 5 files changed, 17 insertions(+), 18 deletions(-) create mode 100644 db/versions/10948-azureSalal/03-modifyColumn.sql diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql index 6ea328adf4..872d86a1be 100644 --- a/db/dump/fixtures.before.sql +++ b/db/dump/fixtures.before.sql @@ -3739,15 +3739,15 @@ INSERT INTO `vn`.`supplierDms`(`supplierFk`, `dmsFk`, `editorFk`) INSERT INTO `vn`.`accountReconciliation` (supplierAccountFk,operationDated,valueDated,amount,concept,debitCredit,calculatedCode,created) VALUES - (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',19.36,'BEL 1',1,'2','2023-12-14 08:39:53.000'), - (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',30226.43,'BEL 2',1,'1','2023-12-14 08:39:53.000'), - (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',118.81,'RCBO',1,'10','2023-12-14 08:39:53.000'), - (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ',1,'12','2023-12-14 08:39:53.000'), - (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ',1,'12','2023-12-14 08:39:53.000'), - (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',2149.71,'RCBO.AMAZON',1,'122','2023-12-14 08:39:53.000'), - (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',3210.5,'RCBO.VOLVO',1,'121','2023-12-14 08:39:53.000'), - (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',6513.7,'RCBO.ENERPLUS',1,'120','2023-12-14 08:39:53.000'); + (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',19.36,'BEL 1','debit','2','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',30226.43,'BEL 2','debit','1','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',118.81,'RCBO','debit','10','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ','debit','12','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ','debit','12','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',2149.71,'RCBO.AMAZON','debit','122','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',3210.5,'RCBO.VOLVO','debit','121','2023-12-14 08:39:53.000'), + (241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',6513.7,'RCBO.ENERPLUS','debit','120','2023-12-14 08:39:53.000'); -INSERT INTO `vn`.`accountReconciliationConfig`(debitCredit, debitCredit2, currencyFk, warehouseFk) +INSERT INTO `vn`.`accountReconciliationConfig`(currencyFk, warehouseFk) VALUES - (1, 2, 1, 1); + (1, 1); diff --git a/db/routines/vn/procedures/addAccountReconciliation.sql b/db/routines/vn/procedures/addAccountReconciliation.sql index ed4b811040..8effbd76ce 100644 --- a/db/routines/vn/procedures/addAccountReconciliation.sql +++ b/db/routines/vn/procedures/addAccountReconciliation.sql @@ -46,15 +46,15 @@ BEGIN TRUE, 'MB', ar.concept, - IF(ar.debitCredit = arc.debitCredit2 AND a.currencyFk = arc.currencyFk, ar.amount, NULL), - IF(ar.debitCredit = arc.debitCredit AND a.currencyFk = arc.currencyFk, ar.amount, NULL), + IF(ar.debitCredit = 'credit' AND a.currencyFk = arc.currencyFk, ar.amount, NULL), + IF(ar.debitCredit = 'debit' AND a.currencyFk = arc.currencyFk, ar.amount, NULL), a.id, sa.supplierFk, arc.warehouseFk, ar.supplierAccountFk, ar.calculatedCode, - IF(ar.debitCredit = arc.debitCredit2 AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL), - IF(ar.debitCredit = arc.debitCredit AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL), + IF(ar.debitCredit = 'credit' AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL), + IF(ar.debitCredit = 'debit' AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL), account.myUser_getId() FROM accountReconciliation ar JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk diff --git a/db/versions/10948-azureSalal/00-addReconciliationConfig.sql b/db/versions/10948-azureSalal/00-addReconciliationConfig.sql index efb45b5fa2..1da6473b4a 100644 --- a/db/versions/10948-azureSalal/00-addReconciliationConfig.sql +++ b/db/versions/10948-azureSalal/00-addReconciliationConfig.sql @@ -1,7 +1,5 @@ CREATE OR REPLACE TABLE `vn`.`accountReconciliationConfig` ( `id` INT AUTO_INCREMENT, - `debitCredit` INT(6), - `debitCredit2` INT(6), `currencyFk` TINYINT(3) unsigned, `warehouseFk` SMALLINT(6) unsigned, PRIMARY KEY (`id`), diff --git a/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql b/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql index db2e1ba0ae..21743a007d 100644 --- a/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql +++ b/db/versions/10948-azureSalal/01-addReconciliationConfig.vn.sql @@ -1,2 +1,2 @@ -INSERT INTO `vn`.`accountReconciliationConfig`(debitCredit, debitCredit2, currencyFk, warehouseFk) - VALUES (1, 2, 1, 1); \ No newline at end of file +INSERT INTO `vn`.`accountReconciliationConfig`(currencyFk, warehouseFk) + VALUES (1, 1); \ No newline at end of file diff --git a/db/versions/10948-azureSalal/03-modifyColumn.sql b/db/versions/10948-azureSalal/03-modifyColumn.sql new file mode 100644 index 0000000000..95b7d9c747 --- /dev/null +++ b/db/versions/10948-azureSalal/03-modifyColumn.sql @@ -0,0 +1 @@ +ALTER TABLE `vn`.`accountReconciliation` MODIFY debitCredit ENUM('debit', 'credit'); \ No newline at end of file From eedf30a2dd7eb1d9d492a0f4ed7dbc80202a5878 Mon Sep 17 00:00:00 2001 From: ivanm Date: Tue, 9 Apr 2024 17:31:34 +0200 Subject: [PATCH 75/78] refs #6732 salix dependencies and undo changes Proveedores --- db/routines/vn2008/views/Proveedores.sql | 2 +- e2e/helpers/selectors.js | 2 +- e2e/paths/13-supplier/02_basic_data.spec.js | 6 +++--- modules/supplier/back/locale/supplier/en.yml | 2 +- modules/supplier/back/locale/supplier/es.yml | 2 +- modules/supplier/front/basic-data/index.html | 2 +- modules/supplier/front/descriptor/index.html | 2 +- modules/supplier/front/descriptor/index.js | 2 +- modules/supplier/front/descriptor/index.spec.js | 2 +- modules/supplier/front/summary/index.html | 6 +++--- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/db/routines/vn2008/views/Proveedores.sql b/db/routines/vn2008/views/Proveedores.sql index e26e9c8296..0b7ee89f8e 100644 --- a/db/routines/vn2008/views/Proveedores.sql +++ b/db/routines/vn2008/views/Proveedores.sql @@ -23,7 +23,7 @@ AS SELECT `s`.`id` AS `Id_Proveedor`, `s`.`isOfficial` AS `oficial`, `s`.`workerFk` AS `workerFk`, `s`.`payDay` AS `pay_day`, - `s`.`isReal` AS `real`, + `s`.`isSerious` AS `serious`, `s`.`note` AS `notas`, `s`.`taxTypeSageFk` AS `taxTypeSageFk`, `s`.`withholdingSageFk` AS `withholdingSageFk`, diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index daaa17c71c..685345273f 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -1258,7 +1258,7 @@ export default { }, supplierBasicData: { alias: 'vn-supplier-basic-data vn-textfield[ng-model="$ctrl.supplier.nickname"]', - isSerious: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isSerious"]', + isReal: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isReal"]', isActive: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isActive"]', isPayMethodChecked: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isPayMethodChecked"]', notes: 'vn-supplier-basic-data vn-textarea[ng-model="$ctrl.supplier.note"]', diff --git a/e2e/paths/13-supplier/02_basic_data.spec.js b/e2e/paths/13-supplier/02_basic_data.spec.js index 79a9898caa..710ebd8df5 100644 --- a/e2e/paths/13-supplier/02_basic_data.spec.js +++ b/e2e/paths/13-supplier/02_basic_data.spec.js @@ -20,7 +20,7 @@ describe('Supplier basic data path', () => { it('should edit the basic data', async() => { await page.clearInput(selectors.supplierBasicData.alias); await page.write(selectors.supplierBasicData.alias, 'Plants Nick SL'); - await page.waitToClick(selectors.supplierBasicData.isSerious); + await page.waitToClick(selectors.supplierBasicData.isReal); await page.waitToClick(selectors.supplierBasicData.isActive); await page.waitToClick(selectors.supplierBasicData.isPayMethodChecked); await page.write(selectors.supplierBasicData.notes, 'Some notes'); @@ -41,8 +41,8 @@ describe('Supplier basic data path', () => { expect(result).toEqual('Plants Nick SL'); }); - it('should check the isSerious checkbox is now checked', async() => { - const result = await page.checkboxState(selectors.supplierBasicData.isSerious); + it('should check the isReal checkbox is now checked', async() => { + const result = await page.checkboxState(selectors.supplierBasicData.isReal); expect(result).toBe('checked'); }); diff --git a/modules/supplier/back/locale/supplier/en.yml b/modules/supplier/back/locale/supplier/en.yml index 25bcae1e37..626d78ff86 100644 --- a/modules/supplier/back/locale/supplier/en.yml +++ b/modules/supplier/back/locale/supplier/en.yml @@ -11,7 +11,7 @@ columns: postcodeFk: postcode isActive: active isOfficial: official - isSerious: serious + isReal: real isTrucker: trucker note: note street: street diff --git a/modules/supplier/back/locale/supplier/es.yml b/modules/supplier/back/locale/supplier/es.yml index 678c384a98..ed57d357a0 100644 --- a/modules/supplier/back/locale/supplier/es.yml +++ b/modules/supplier/back/locale/supplier/es.yml @@ -11,7 +11,7 @@ columns: postcodeFk: código postal isActive: activo isOfficial: oficial - isSerious: serio + isReal: real isTrucker: camionero note: nota street: calle diff --git a/modules/supplier/front/basic-data/index.html b/modules/supplier/front/basic-data/index.html index 68e635a06f..fcdb2a5224 100644 --- a/modules/supplier/front/basic-data/index.html +++ b/modules/supplier/front/basic-data/index.html @@ -26,7 +26,7 @@ + ng-model="$ctrl.supplier.isReal"> + ng-if="$ctrl.supplier.isReal == false">

{{$t('street')}}{{$t('street')}} {{ticket.street}} {{$t('postcode')}} {{ticket.postalCode}}