From 48310d24c7c900a28b86e13235a36ca868f7ed86 Mon Sep 17 00:00:00 2001 From: ivanm Date: Wed, 21 Feb 2024 14:36:12 +0100 Subject: [PATCH 01/28] 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 0b7ee89f8..e26e9c829 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 000000000..8609ddc7e --- /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 bc869725c..699233386 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 59d23f106..90b266ba9 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 10a89cb7900c84a76f92f63c1f92edb4e13912cb Mon Sep 17 00:00:00 2001 From: ivanm Date: Wed, 28 Feb 2024 13:32:17 +0100 Subject: [PATCH 02/28] 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 e910f3fab..511f5fe80 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 1d59c7ac0..1c20b46c1 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 4f954ad00..6fab17361 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 000000000..436243ba5 --- /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 744b11a72..e951ec784 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 c5e132ab7..8758c3b05 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 2365f0635..179265b0f 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 b3bf43c5c..dec8d505c 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 9ac373287..5cfc1c9d4 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 e38d1aeec..e2c069d80 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 074cb289a..04fc51a26 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 bf134fbf9..1b5132304 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 580e07351..cf1eafa23 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 d3e9cb9d0..66959e0a7 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 10c2d25cbd0ad65163e140d6183e0711cfc891ad Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 12 Mar 2024 12:57:34 +0100 Subject: [PATCH 03/28] 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 4ad007f5c..77439aaf3 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 000000000..0db018109 --- /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 000000000..2b92eae44 --- /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 000000000..efb45b5fa --- /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 000000000..db2e1ba0a --- /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 000000000..0e786e3e4 --- /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 04/28] 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 2b92eae44..295ae50ae 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 0e786e3e4..d6853f759 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 3e458281e6a5c5a09fc7071de95a564c9297d2a2 Mon Sep 17 00:00:00 2001 From: jorgep Date: Thu, 14 Mar 2024 09:42:54 +0100 Subject: [PATCH 05/28] 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 295ae50ae..176b77726 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 06/28] 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 0db018109..e396e57dc 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 07/28] 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 94ef0b14b..000000000 --- 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 ea631793d..000000000 --- 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 3c2664c0f..000000000 --- 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 94f6d20bb1c42c0e14ea80c850010bd55088f6e5 Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 26 Mar 2024 13:41:53 +0100 Subject: [PATCH 08/28] 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 306fdeb20..801db221e 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 e396e57dc..2f3339bcd 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 9667d31441fe8b1beff0ad33d49f8092b5dcd030 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 27 Mar 2024 17:00:27 +0100 Subject: [PATCH 09/28] 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 02bd9eae4..09cdfe076 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 000000000..39e754563 --- /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 10/28] 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 39e754563..702f2d2aa 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 df271a242d8b1e65a293bc067b24e31996d93b66 Mon Sep 17 00:00:00 2001 From: jorgep Date: Thu, 28 Mar 2024 15:03:33 +0100 Subject: [PATCH 11/28] 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 2f3339bcd..ed4b81104 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 f44e19cae357636f0f929d63d02254f21a9bf03e Mon Sep 17 00:00:00 2001 From: guillermo Date: Thu, 4 Apr 2024 14:15:20 +0200 Subject: [PATCH 12/28] 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 1dad68b2c..a0f78baaa 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 000000000..2c1742482 --- /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 dba430e66..daaa17c71 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 2df95bd4a..8133ee9f2 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 31b954a32..a0e60550f 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 6e20bdd08..00e3ae50f 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 7c3ee7555..75416938a 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 27fd76ceb..e61c6a396 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 0ae534f1e..cef91b873 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 bd77ae406..b7725e7f8 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 68fff7846..cb4de0ab5 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 1fbbb00b1..3bc0a2bf9 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 458d5e831..e773511bf 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 10aa7623a..45bc1823d 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 3115cb451..b5225e6f4 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 23db6a41be0ab02b4b2c498dbe9538b036f7b7da Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 5 Apr 2024 07:42:03 +0200 Subject: [PATCH 13/28] 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 3bc0a2bf9..1fc88df1c 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 14/28] 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 d82baeaa8..a206d7f3e 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 15/28] 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 2c1742482..107500eed 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 000000000..5e36e60be --- /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 ac8ae78f0..6bdc2c13a 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 f374b14dc..8b02f3048 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 5517c29c1cbf2455fa3524e6bd5be8ab508f633d Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 8 Apr 2024 08:37:37 +0200 Subject: [PATCH 16/28] 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 09cdfe076..5f82d72bc 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 17/28] 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 5f82d72bc..e54678037 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 2eb229adf72819078e9a241048c40508f780f26d Mon Sep 17 00:00:00 2001 From: Pako Date: Mon, 8 Apr 2024 14:30:46 +0200 Subject: [PATCH 18/28] 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 b6ec61522..e45fa7ddf 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 2f77b8534..bd791dec7 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 19/28] 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 ef741e5a0..fa3f7fdad 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 4ed91e1c0..32791f1b7 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 9d8554484..69e470a21 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 aefbbcf34..e4cec8002 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:38:28 +0200 Subject: [PATCH 20/28] refs #6276 hotFix:itemShelving_add --- .../vn/procedures/itemShelving_add.sql | 1 - .../item-shelving/specs/upsertItem.spec.js | 29 ++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/db/routines/vn/procedures/itemShelving_add.sql b/db/routines/vn/procedures/itemShelving_add.sql index 2a4676b50..d4c31f09e 100644 --- a/db/routines/vn/procedures/itemShelving_add.sql +++ b/db/routines/vn/procedures/itemShelving_add.sql @@ -21,7 +21,6 @@ BEGIN SELECT barcodeToItem(vBarcode) INTO vItemFk; SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1)); - SET vQuantity = vQuantity * vPacking; IF (SELECT COUNT(*) FROM shelving WHERE code = vShelvingFk COLLATE utf8_unicode_ci) = 0 THEN diff --git a/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js b/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js index 9042b743d..8615b7b86 100644 --- a/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js +++ b/modules/item/back/methods/item-shelving/specs/upsertItem.spec.js @@ -1,4 +1,4 @@ -const {models} = require('vn-loopback/server/server'); +const { models } = require('vn-loopback/server/server'); const LoopBackContext = require('loopback-context'); // #6276 @@ -8,11 +8,11 @@ describe('ItemShelving upsertItem()', () => { let options; let tx; - beforeEach(async() => { + beforeEach(async () => { ctx = { req: { - accessToken: {userId: 9}, - headers: {origin: 'http://localhost'} + accessToken: { userId: 9 }, + headers: { origin: 'http://localhost' } }, args: {} }; @@ -21,36 +21,37 @@ describe('ItemShelving upsertItem()', () => { active: ctx.req }); - options = {transaction: tx}; + options = { transaction: tx }; tx = await models.ItemShelving.beginTransaction({}); options.transaction = tx; }); - afterEach(async() => { + afterEach(async () => { await tx.rollback(); }); - xit('should add two new records', async() => { + it('should add two new records', async () => { const shelvingFk = 'ZPP'; const items = [1, 1, 1, 2]; await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options); - const itemShelvings = await models.ItemShelving.find({where: {shelvingFk}}, options); + const itemShelvings = await models.ItemShelving.find({ where: { shelvingFk } }, options); expect(itemShelvings.length).toEqual(2); }); - xit('should update the visible items', async() => { + it('should update the visible items', async () => { const shelvingFk = 'GVC'; const items = [2, 2]; - const {visible: itemsBefore} = await models.ItemShelving.findOne({ - where: {shelvingFk, itemFk: items[0]} + const { visible: visibleItemsBefore } = await models.ItemShelving.findOne({ + where: { shelvingFk, itemFk: items[0] } }, options); await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options); - const {visible: itemsAfter} = await models.ItemShelving.findOne({ - where: {shelvingFk, itemFk: items[0]} + + const { visible: visibleItemsAfter } = await models.ItemShelving.findOne({ + where: { shelvingFk, itemFk: items[0] } }, options); - expect(itemsAfter).toEqual(itemsBefore + 2); + expect(visibleItemsAfter).toEqual(visibleItemsBefore + 2); }); }); From 500244dbed4112c9300b946f5a736f02bda85a96 Mon Sep 17 00:00:00 2001 From: alexm Date: Tue, 9 Apr 2024 07:51:57 +0200 Subject: [PATCH 21/28] 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 69e470a21..b7802a689 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 22/28] 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 000000000..edb2e76f7 --- /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 23/28] 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 107500eed..0fd944021 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 743dc2144e5a6c315ca5bc4351373aa977f6d6db Mon Sep 17 00:00:00 2001 From: guillermo Date: Tue, 9 Apr 2024 13:05:01 +0200 Subject: [PATCH 24/28] hotfix: refs #6276 Fix send chat msg getSales --- back/methods/collection/getSales.js | 1 + 1 file changed, 1 insertion(+) diff --git a/back/methods/collection/getSales.js b/back/methods/collection/getSales.js index 78945dc80..fd5e3d085 100644 --- a/back/methods/collection/getSales.js +++ b/back/methods/collection/getSales.js @@ -29,6 +29,7 @@ module.exports = Self => { }); Self.getSales = async(ctx, collectionOrTicketFk, print, source, options) => { + const models = Self.app.models; const userId = ctx.req.accessToken.userId; const myOptions = {userId}; const $t = ctx.req.__; From a3c1bceb7ef93e3cd43d39ea66b302a3a0c8a7f9 Mon Sep 17 00:00:00 2001 From: jorgep Date: Tue, 9 Apr 2024 15:57:34 +0200 Subject: [PATCH 25/28] 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 6ea328adf..872d86a1b 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 ed4b81104..8effbd76c 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 efb45b5fa..1da6473b4 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 db2e1ba0a..21743a007 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 000000000..95b7d9c74 --- /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 26/28] 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 e26e9c829..0b7ee89f8 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 daaa17c71..685345273 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 79a9898ca..710ebd8df 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 25bcae1e3..626d78ff8 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 678c384a9..ed57d357a 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 68e635a06..fcdb2a522 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">