From b23a441f31d96b9c703bec82cc2a140a7c165ae9 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 23 Nov 2020 12:20:58 +0100 Subject: [PATCH 01/32] fixtures --- db/dump/fixtures.sql | 14 +++++++------- package-lock.json | 26 +++++++++++++------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index ad8474e38e..da2bbe30b7 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -266,17 +266,17 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`) INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`fax`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`,`clientTypeFk`,`mailAddress`,`cplusTerIdNifFk`,`hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`) VALUES (101, 'Bruce Wayne', '84612325V', 'Batman', 'Alfred', '1007 Mountain Drive, Gotham', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (102, 'Petter Parker', '87945234L', 'Spider man', 'Aunt May', '20 Ingram Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (103, 'Clark Kent', '06815934E', 'Super man', 'lois lane', '344 Clinton Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 0, 19, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (104, 'Tony Stark', '06089160W', 'Iron man', 'Pepper Potts', '10880 Malibu Point', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (102, 'Petter Parker', '87945234L', 'Spider man', 'Aunt May', '20 Ingram Street, Queens, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (103, 'Clark Kent', '06815934E', 'Super man', 'lois lane', '344 Clinton Street, Apartamento 3-D', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 0, 19, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (104, 'Tony Stark', '06089160W', 'Iron man', 'Pepper Potts', '10880 Malibu Point, 90265', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), (105, 'Max Eisenhardt', '251628698', 'Magneto', 'Rogue', 'Unknown Whereabouts', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 8, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 18, 0, 1), - (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'Evil hideout', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), - (107, 'Hank Pym', '09854837G', 'Ant man', 'Hawk', 'Anthill', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), + (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'Ciudad de Nueva York, Nueva York, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), + (107, 'Hank Pym', '09854837G', 'Ant man', 'Hawk', 'Anthill, San Francisco, California', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), (108, 'Charles Xavier', '22641921P', 'Professor X', 'Beast', '3800 Victory Pkwy, Cincinnati, OH 45207, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1), (109, 'Bruce Banner', '16104829E', 'Hulk', 'Black widow', 'Somewhere in New York', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), (110, 'Jessica Jones', '58282869H', 'Jessica Jones', 'Luke Cage', 'NYCC 2015 Poster', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'JessicaJones@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, NULL, 0, 1), - (111, 'Missing', NULL, 'Missing man', 'Anton', 'The space', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1), - (112, 'Trash', NULL, 'Garbage man', 'Unknown name', 'New York city', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1); + (111, 'Missing', NULL, 'Missing man', 'Anton', 'The space, Universe far away', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1), + (112, 'Trash', NULL, 'Garbage man', 'Unknown name', 'New York city, Underground', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, NULL, NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 4, NULL, 1, 0, 1, 0, NULL, 1, 0, NULL, 0, 1); INSERT INTO `vn`.`client`(`id`, `name`, `fi`, `socialName`, `contact`, `street`, `city`, `postcode`, `isRelevant`, `email`, `iban`,`dueDay`,`accountingAccount`, `isEqualizated`, `provinceFk`, `hasToInvoice`, `credit`, `countryFk`, `isActive`, `gestdocFk`, `quality`, `payMethodFk`,`created`, `isTaxDataChecked`) SELECT id, name, CONCAT(RPAD(CONCAT(id,9),8,id),'A'), CONCAT(name, 'Social'), CONCAT(name, 'Contact'), CONCAT(name, 'Street'), 'SILLA', 46460, 1, CONCAT(name,'@mydomain.com'), NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1,NULL, 10, 5, CURDATE(), 1 diff --git a/package-lock.json b/package-lock.json index 6e7a9a665e..7b7dadc300 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7235,7 +7235,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { "base64-js": "^1.0.2", @@ -7436,7 +7436,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -8710,7 +8710,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -11226,7 +11226,7 @@ }, "globby": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { @@ -13346,7 +13346,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-path-cwd": { @@ -18776,7 +18776,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -19719,7 +19719,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { @@ -19744,7 +19744,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -20193,7 +20193,7 @@ }, "multipipe": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "resolved": "http://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "dev": true, "requires": { @@ -21106,7 +21106,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -21122,7 +21122,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -23078,7 +23078,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -24763,7 +24763,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { From 963db11686314ec2cf850dabbe8f878e5845a033 Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 16 Dec 2020 08:33:08 +0100 Subject: [PATCH 02/32] funcionalidad --- back/models/accounting-type.json | 3 + back/models/company.json | 3 + .../10260-holidays/00-accountingType.sql | 3 + db/dump/fixtures.sql | 16 +-- e2e/paths/02-client/14_balance.spec.js | 1 + loopback/locale/en.json | 4 +- loopback/locale/es.json | 4 +- .../back/methods/receipt/createReceipt.js | 101 ++++++++++++++++++ modules/client/back/model-config.json | 3 + modules/client/back/models/XDiario.json | 84 +++++++++++++++ modules/client/back/models/receipt.js | 35 +++++- modules/client/back/models/receipt.json | 21 +++- modules/client/back/models/till.json | 64 +++++++++++ .../client/front/balance/create/index.html | 41 +++++-- modules/client/front/balance/create/index.js | 15 ++- .../client/front/balance/create/index.spec.js | 2 +- modules/client/front/locale/es.yml | 5 +- modules/zone/back/models/zone-event.js | 2 - 18 files changed, 380 insertions(+), 27 deletions(-) create mode 100644 db/changes/10260-holidays/00-accountingType.sql create mode 100644 modules/client/back/methods/receipt/createReceipt.js create mode 100644 modules/client/back/models/XDiario.json create mode 100644 modules/client/back/models/till.json diff --git a/back/models/accounting-type.json b/back/models/accounting-type.json index 7967933428..18b3ae52b6 100644 --- a/back/models/accounting-type.json +++ b/back/models/accounting-type.json @@ -19,6 +19,9 @@ "receiptDescription": { "type": "String", "required": true + }, + "code": { + "type": "String" } }, "acls": [{ diff --git a/back/models/company.json b/back/models/company.json index eb349477b4..80ad026e4e 100644 --- a/back/models/company.json +++ b/back/models/company.json @@ -18,6 +18,9 @@ }, "expired": { "type": "date" + }, + "isOfficial": { + "type": "boolean" } }, diff --git a/db/changes/10260-holidays/00-accountingType.sql b/db/changes/10260-holidays/00-accountingType.sql new file mode 100644 index 0000000000..517e12413d --- /dev/null +++ b/db/changes/10260-holidays/00-accountingType.sql @@ -0,0 +1,3 @@ +ALTER TABLE `vn`.`accountingType` +ADD COLUMN `code` VARCHAR(20) NULL DEFAULT NULL AFTER `receiptDescription`; + diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index da2bbe30b7..9205025105 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -141,13 +141,14 @@ INSERT INTO `vn`.`shelving` (`code`, `parkingFk`, `isPrinted`, `priority`, `park ('GVC', '1', '0', '1', '0', '106'), ('HEJ', '2', '0', '1', '0', '106'); -INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`) +INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`, `code`) VALUES - (1, 'Digital money', ''), - (2, 'Cash', 'Cash'), - (3, 'Card', 'Pay on receipt'), - (4, 'Stolen Money', ''), - (5, 'Miscellaneous', ''); + (1, 'Digital money', '', NULL), + (2, 'Cash', 'Cash', 'cash'), + (3, 'Card', 'Pay on receipt', NULL), + (4, 'Stolen Money', '', NULL), + (5, 'Miscellaneous', '', NULL), + (7, 'Compensation', '', 'compensation'); INSERT INTO `vn`.`currency`(`id`, `code`, `name`, `ratio`) VALUES @@ -159,7 +160,8 @@ INSERT INTO `vn`.`currency`(`id`, `code`, `name`, `ratio`) INSERT INTO `vn`.`bank`(`id`, `bank`, `account`, `cash`, `entityFk`, `isActive`, `currencyFk`) VALUES (1, 'Pay on receipt', '0000000000', 3, 0, 1, 1), - (2, 'Cash', '1111111111', 2, 0, 1, 1); + (2, 'Cash', '1111111111', 2, 0, 1, 1), + (3, 'Compensation', '0000000000', 7, 0, 1, 1); INSERT INTO `vn`.`deliveryMethod`(`id`, `code`, `description`) VALUES diff --git a/e2e/paths/02-client/14_balance.spec.js b/e2e/paths/02-client/14_balance.spec.js index bd00af58ea..31f16d6b66 100644 --- a/e2e/paths/02-client/14_balance.spec.js +++ b/e2e/paths/02-client/14_balance.spec.js @@ -96,6 +96,7 @@ describe('Client balance path', () => { it('should create a new payment that sets the balance back to the original negative value', async() => { await page.waitToClick(selectors.clientBalance.newPaymentButton); + await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Pay on receipt'); await page.overwrite(selectors.clientBalance.newPaymentAmount, '-150'); await page.waitToClick(selectors.clientBalance.saveButton); const message = await page.waitForSnackbar(); diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 0081af429b..d66126ad46 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -84,5 +84,7 @@ "companyFk": "Company", "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" + "The nif cannot be empty": "The nif cannot be empty", + "Amount cannot be zero": "Amount cannot be zero", + "Company has to be official": "Company has to be official" } \ No newline at end of file diff --git a/loopback/locale/es.json b/loopback/locale/es.json index f75b1778eb..7545eb10a9 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -160,5 +160,7 @@ "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" + "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" } \ No newline at end of file diff --git a/modules/client/back/methods/receipt/createReceipt.js b/modules/client/back/methods/receipt/createReceipt.js new file mode 100644 index 0000000000..cbfe8ec155 --- /dev/null +++ b/modules/client/back/methods/receipt/createReceipt.js @@ -0,0 +1,101 @@ +const UserError = require('vn-loopback/util/user-error'); + +module.exports = function(Self) { + Self.remoteMethodCtx('createReceipt', { + description: 'Creates receipt and its compensation if necessary', + accepts: [{ + arg: 'clientFk', + type: 'number', + description: 'The client id', + http: {source: 'path'} + }, + { + arg: 'payed', + type: 'Date', + required: true + }, + { + arg: 'companyFk', + type: 'number', + required: true + }, + { + arg: 'bankFk', + type: 'number', + required: true + }, + { + arg: 'amountPaid', + type: 'number', + required: true + }, + { + arg: 'description', + type: 'string', + required: true + }, + { + arg: 'compensationAccount', + type: 'any' + }], + returns: { + root: true, + type: 'Object' + }, + http: { + verb: 'post', + path: '/:clientFk/createReceipt' + } + }); + + Self.createReceipt = async ctx => { + const models = Self.app.models; + const args = ctx.args; + const tx = await models.Address.beginTransaction({}); + + try { + const options = {transaction: tx}; + + delete args.ctx; // Remove unwanted properties + const newReceipt = await models.Receipt.create(args, options); + + if (args.compensationAccount) { + const clientOriginal = await models.Client.findById(args.clientFk); + const supplierCompensation = await models.Supplier.findOne({ + where: { + account: args.compensationAccount + } + }); + let clientCompensation = {}; + if (!supplierCompensation) { + clientCompensation = await models.Client.findOne({ + where: { + accountingAccount: args.compensationAccount + } + }); + } + if (!supplierCompensation && !clientCompensation) + throw new UserError('Invalid account'); + + await Self.rawSql( + `CALL vn.ledger_doCompensation(?, ?, ?, ?, ?, ?, ?)`, + [ + Date(), + args.compensationAccount, + args.bankFk, + 'compensar(tabla) ' + args.compensationAccount, + args.amountPaid, + args.companyFk, + clientOriginal.accountingAccount + ], + options); + } + + await tx.commit(); + return newReceipt; + } catch (e) { + await tx.rollback(); + throw e; + } + }; +}; diff --git a/modules/client/back/model-config.json b/modules/client/back/model-config.json index 340ddeb18d..1f18f4963e 100644 --- a/modules/client/back/model-config.json +++ b/modules/client/back/model-config.json @@ -104,6 +104,9 @@ "ClientDms": { "dataSource": "vn" }, + "Till": { + "dataSource": "vn" + }, "CustomsAgent": { "dataSource": "vn" }, diff --git a/modules/client/back/models/XDiario.json b/modules/client/back/models/XDiario.json new file mode 100644 index 0000000000..be2d258f98 --- /dev/null +++ b/modules/client/back/models/XDiario.json @@ -0,0 +1,84 @@ +{ + "name": "XDiario", + "base": "VnModel", + "options": { + "mysql": { + "table": "XDiario" + } + }, + "properties": { + "ASIEN": { + "type": "number", + "id": true, + "description": "Identifier" + }, + "FECHA": { + "type": "date" + }, + "SUBCTA": { + "type": "string" + }, + "CONTRA": { + "type": "string" + }, + "CONCEPTO": { + "type": "string" + }, + "EURODEBE": { + "type": "number" + }, + "EUROHABER": { + "type": "number" + }, + "BASEEURO": { + "type": "number" + }, + "SERIE": { + "type": "string" + }, + "CAMBIO": { + "type": "number" + }, + "DEBEME": { + "type": "number" + }, + "HABERME": { + "type": "number" + }, + "FACTURA": { + "type": "string" + }, + "IVA": { + "type": "number" + }, + "RECEQUIV": { + "type": "number" + }, + "METAL": { + "type": "number" + }, + "METALIMP": { + "type": "number" + }, + "CLIENTE": { + "type": "string" + }, + "METALEJE": { + "type": "string" + }, + "AUXILIAR": { + "type": "string" + }, + "MONEDAUSO": { + "type": "string" + } + }, + "relations": { + "company": { + "type": "belongsTo", + "model": "Company", + "foreignKey": "empresa_id" + } + } +} + \ No newline at end of file diff --git a/modules/client/back/models/receipt.js b/modules/client/back/models/receipt.js index 6cc767e2c9..b37dfb9a30 100644 --- a/modules/client/back/models/receipt.js +++ b/modules/client/back/models/receipt.js @@ -1,13 +1,44 @@ module.exports = function(Self) { require('../methods/receipt/filter')(Self); + require('../methods/receipt/createReceipt')(Self); + + Self.validateBinded('amountPaid', isNotZero, { + message: 'Amount cannot be zero', + allowNull: false, + allowBlank: false + }); + + function isNotZero(value) { + return !isNaN(value) && value != 0; + } + + Self.validateBinded('companyFk', isOfficialCompany, { + message: 'Company has to be official' + }); + + async function isOfficialCompany(value) { + const company = await Self.app.models.Company.findById(value); + return company.isOfficial; + } Self.observe('before save', async function(ctx) { if (ctx.isNewInstance) { let token = ctx.options.accessToken; let userId = token && token.userId; - let worker = await Self.app.models.Worker.findOne({where: {userFk: userId}}); - ctx.instance.workerFk = worker.id; + ctx.instance.workerFk = userId; + + await Self.app.models.Till.create({ + workerFk: userId, + bankFk: ctx.instance.bankFk, + in: ctx.instance.amountPaid, + concept: ctx.instance.description, + dated: ctx.instance.payed, + serie: 'A', + isAccountable: true, + number: ctx.instance.clientFk, + companyFk: ctx.instance.companyFk + }); } }); }; diff --git a/modules/client/back/models/receipt.json b/modules/client/back/models/receipt.json index c953ae5078..3207546a30 100644 --- a/modules/client/back/models/receipt.json +++ b/modules/client/back/models/receipt.json @@ -9,17 +9,19 @@ "properties": { "id": { "id": true, - "type": "Number", + "type": "number", "description": "Identifier" }, "amountPaid": { - "type": "Number" + "type": "number", + "required": true }, "amountUnpaid": { - "type": "Number" + "type": "number" }, "payed": { - "type": "date" + "type": "date", + "required": true }, "created": { "type": "date" @@ -31,7 +33,16 @@ "type": "string", "mysql": { "columnName": "invoiceFk" - } + }, + "required": true + }, + "bankFk": { + "type": "number", + "required": true + }, + "companyFk": { + "type": "number", + "required": true } }, "relations": { diff --git a/modules/client/back/models/till.json b/modules/client/back/models/till.json new file mode 100644 index 0000000000..a8c7dfd3fc --- /dev/null +++ b/modules/client/back/models/till.json @@ -0,0 +1,64 @@ +{ + "name": "Till", + "base": "VnModel", + "options": { + "mysql": { + "table": "till" + } + }, + "properties": { + "id": { + "type": "number", + "id": true, + "description": "Identifier" + }, + "dated": { + "type": "date", + "required": true + }, + "isAccountable": { + "type": "boolean" + }, + "serie": { + "type": "string", + "required": true + }, + "number": { + "type": "number" + }, + "concept": { + "type": "string", + "required": true + }, + "in": { + "type": "number" + }, + "out": { + "type": "number" + }, + "created": { + "type": "date" + }, + "isConciliated": { + "type": "boolean" + } + }, + "relations": { + "bank": { + "type": "belongsTo", + "model": "BankEntity", + "foreignKey": "bankEntityFk" + }, + "salesPersonUser": { + "type": "belongsTo", + "model": "Account", + "foreignKey": "salesPersonFk" + }, + "company": { + "type": "belongsTo", + "model": "Company", + "foreignKey": "companyFk" + } + } +} + \ No newline at end of file diff --git a/modules/client/front/balance/create/index.html b/modules/client/front/balance/create/index.html index a2775164d8..296bcb2ee6 100644 --- a/modules/client/front/balance/create/index.html +++ b/modules/client/front/balance/create/index.html @@ -6,19 +6,23 @@ auto-load="true" url="Companies" data="companies" - order="code"> + order="code" + required="true"> + ng-model="$ctrl.receipt.payed" + required="true"> + ng-model="$ctrl.receipt.companyFk" + required="true" + rule> @@ -32,7 +36,8 @@ ng-model="$ctrl.receipt.bankFk" search-function="{or: [{id: $search}, {bank: {like: '%'+ $search +'%'}}]}" selection="$ctrl.bankSelection" - order="id"> + order="id" + required="true"> {{id}}: {{bank}} + rule + required="true"> + rule + required="true"> + +
Cash
+ + + + + + +
+ +
Compensation
+ + +
diff --git a/modules/client/front/balance/create/index.js b/modules/client/front/balance/create/index.js index 8b01cab4a7..fedc2d7c40 100644 --- a/modules/client/front/balance/create/index.js +++ b/modules/client/front/balance/create/index.js @@ -63,6 +63,19 @@ class Controller extends Dialog { } } + set deliveredAmount(value) { + this._deliveredAmount = value; + this.amountToReturn = value - this.receipt.amountPaid; + } + + get deliveredAmount() { + return this._deliveredAmount; + } + + accountShortToStandard(value) { + this.receipt.compensationAccount = value.replace('.', '0'.repeat(11 - value.length)); + } + getAmountPaid() { const filter = { where: { @@ -80,7 +93,7 @@ class Controller extends Dialog { if (response !== 'accept') return super.responseHandler(response); - return this.$http.post(`Receipts`, this.receipt) + return this.$http.post(`Receipts/${this.$params.id}/createReceipt`, this.receipt) .then(() => super.responseHandler(response)) .then(() => this.vnApp.showSuccess(this.$t('Data saved!'))); } diff --git a/modules/client/front/balance/create/index.spec.js b/modules/client/front/balance/create/index.spec.js index 9f85387c8b..e88d1e820d 100644 --- a/modules/client/front/balance/create/index.spec.js +++ b/modules/client/front/balance/create/index.spec.js @@ -65,7 +65,7 @@ describe('Client', () => { controller.$params = {id: 101}; - $httpBackend.expect('POST', `Receipts`).respond({id: 1}); + $httpBackend.expect('POST', `Receipts/101/createReceipt`).respond({id: 1}); controller.responseHandler('accept'); $httpBackend.flush(); diff --git a/modules/client/front/locale/es.yml b/modules/client/front/locale/es.yml index 166bdbe1b7..82cbb129e9 100644 --- a/modules/client/front/locale/es.yml +++ b/modules/client/front/locale/es.yml @@ -57,4 +57,7 @@ Contacts: Contactos Samples: Plantillas Send sample: Enviar plantilla Log: Historial -Consumption: Consumo \ No newline at end of file +Consumption: Consumo +Compensation Account: Cuenta para compensar +Amount to return: Cantidad a devolver +Delivered amount: Cantidad entregada \ No newline at end of file diff --git a/modules/zone/back/models/zone-event.js b/modules/zone/back/models/zone-event.js index d4fad8e965..6af031a239 100644 --- a/modules/zone/back/models/zone-event.js +++ b/modules/zone/back/models/zone-event.js @@ -1,5 +1,3 @@ -const app = require('vn-loopback/server/server'); - module.exports = Self => { Self.validate('range', function(err) { if (this.type == 'range' From 9abf23072ada530a945e79ee75931429d0bd18c3 Mon Sep 17 00:00:00 2001 From: "LaptopVerdnatura\\Javi" Date: Wed, 16 Dec 2020 16:25:19 +0100 Subject: [PATCH 03/32] frontTest --- .../client/front/balance/create/index.spec.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/modules/client/front/balance/create/index.spec.js b/modules/client/front/balance/create/index.spec.js index e88d1e820d..a68f6c8a6d 100644 --- a/modules/client/front/balance/create/index.spec.js +++ b/modules/client/front/balance/create/index.spec.js @@ -72,5 +72,23 @@ describe('Client', () => { expect(controller.vnApp.showSuccess).toHaveBeenCalled(); }); }); + + describe('deliveredAmount() setter', () => { + it('should set the deliveredAmount property', () => { + controller.amountPaid = 999; + controller.deliveredAmount = 1000; + + expect(controller.amountToReturn).toEqual(1); + }); + }); + + describe('accountShortToStandard()', () => { + it('should get de account in stardard format', () => { + const shortAccount = '4.3'; + controller.accountShortToStandard(shortAccount); + + expect(controller.receipt.compensationAccount).toEqual('4000000003'); + }); + }); }); }); From 3a6d62ac7dcad8b09b42bd7d1c490bffe976866b Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 21 Dec 2020 09:52:27 +0100 Subject: [PATCH 04/32] xdiario --- .../10260-holidays/00-accountingType.sql | 3 - db/dump/fixtures.sql | 12 +- .../back/methods/receipt/createReceipt.js | 49 ++++++- .../receipt/specs/createReceipt.spec.js | 122 ++++++++++++++++++ 4 files changed, 176 insertions(+), 10 deletions(-) delete mode 100644 db/changes/10260-holidays/00-accountingType.sql create mode 100644 modules/client/back/methods/receipt/specs/createReceipt.spec.js diff --git a/db/changes/10260-holidays/00-accountingType.sql b/db/changes/10260-holidays/00-accountingType.sql deleted file mode 100644 index 517e12413d..0000000000 --- a/db/changes/10260-holidays/00-accountingType.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE `vn`.`accountingType` -ADD COLUMN `code` VARCHAR(20) NULL DEFAULT NULL AFTER `receiptDescription`; - diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 94667b3174..246e41107d 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -148,12 +148,6 @@ INSERT INTO `vn`.`shelving` (`code`, `parkingFk`, `isPrinted`, `priority`, `park ('GVC', '1', '0', '1', '0', '106'), ('HEJ', '2', '0', '1', '0', '106'); -INSERT INTO `vn`.`bank`(`id`, `bank`, `account`, `cash`, `entityFk`, `isActive`, `currencyFk`) - VALUES - (1, 'Pay on receipt', '0000000000', 3, 0, 1, 1), - (2, 'Cash', '1111111111', 2, 0, 1, 1), - (3, 'Compensation', '0000000000', 7, 0, 1, 1); - INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`,`code`) VALUES (1, 'CC y Polizas de crédito', NULL, NULL), @@ -166,6 +160,12 @@ INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`,`cod (8, 'Compensaciones', 'Compensation', 'compensation'), (9, 'Cash', 'Cash', 'cash'), (10, 'Card', 'Pay on receipt', NULL); + +INSERT INTO `vn`.`bank`(`id`, `bank`, `account`, `cash`, `entityFk`, `isActive`, `currencyFk`) + VALUES + (1, 'Pay on receipt', '0000000000', 3, 0, 1, 1), + (2, 'Cash', '1111111111', 2, 0, 1, 1), + (3, 'Compensation', '0000000000', 7, 0, 1, 1); INSERT INTO `vn`.`deliveryMethod`(`id`, `code`, `description`) VALUES diff --git a/modules/client/back/methods/receipt/createReceipt.js b/modules/client/back/methods/receipt/createReceipt.js index cbfe8ec155..eb199f518f 100644 --- a/modules/client/back/methods/receipt/createReceipt.js +++ b/modules/client/back/methods/receipt/createReceipt.js @@ -77,18 +77,65 @@ module.exports = function(Self) { if (!supplierCompensation && !clientCompensation) throw new UserError('Invalid account'); + const accountingType = await models.AccountingType.findOne({ + where: { + code: 'compensation' + } + }); + await Self.rawSql( `CALL vn.ledger_doCompensation(?, ?, ?, ?, ?, ?, ?)`, [ Date(), args.compensationAccount, args.bankFk, - 'compensar(tabla) ' + args.compensationAccount, + accountingType.receiptDescription + args.compensationAccount, args.amountPaid, args.companyFk, clientOriginal.accountingAccount ], options); + } else { + const bank = await models.Bank.findById(args.bankFk); + const ledger = await Self.rawSql( + `SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`, + [ + null, + Date(), + bank.account, + clientOriginal.accountingAccount, + clientOriginal.id + ':' + clientOriginal.nickname, '-', accountingType.receiptDescription, + args.amountPaid, + 0, + 0, + '', + '', + null, + null, + false, + args.companyFk + ], + options); + + await Self.rawSql( + `SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`, + [ + ledger, + Date(), + clientOriginal.accountingAccount, + bank.account, + clientOriginal.id + ':' + clientOriginal.nickname, '-', accountingType.receiptDescription, + 0, + args.amountPaid, + 0, + '', + '', + null, + null, + false, + args.companyFk + ], + options); } await tx.commit(); diff --git a/modules/client/back/methods/receipt/specs/createReceipt.spec.js b/modules/client/back/methods/receipt/specs/createReceipt.spec.js new file mode 100644 index 0000000000..64190b43d1 --- /dev/null +++ b/modules/client/back/methods/receipt/specs/createReceipt.spec.js @@ -0,0 +1,122 @@ +const app = require('vn-loopback/server/server'); + +fdescribe('Receipt createReceipt', () => { + const clientFk = 108; + const payed = Date(); + const companyFk = 442; + const amountPaid = 12.50; + const description = 'Receipt description'; + + it('should create a new receipt', async() => { + const ctx = { + args: { + clientFk: clientFk, + payed: payed, + companyFk: companyFk, + bankFk: 1, + amountPaid: amountPaid, + description: description + } + }; + + const receipt = await app.models.Receipt.createReceipt(ctx); + console.log(receipt); + console.log(ctx.args); + + expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); + + // restores + await receipt.destroy(); + // destroy till + }); + + it('should throw Invalid account if compensationAccount does not belongs to a client nor a supplier', async() => { + const ctx = { + args: { + clientFk: clientFk, + payed: payed, + companyFk: companyFk, + bankFk: 3, + amountPaid: amountPaid, + description: description, + compensationAccount: 'non existing account' + } + }; + + try { + await app.models.Receipt.createReceipt(ctx); + } catch (e) { + err = e; + } + + expect(err).toBeDefined(); + expect(err.message).toEqual('Invalid account'); + // validar que no ha creado el receipt porque el rollback ha funcionado + }); + + it('should create a new receipt with a compensation for a client', async() => { + const ctx = { + args: { + clientFk: clientFk, + payed: payed, + companyFk: companyFk, + bankFk: 3, + amountPaid: amountPaid, + description: description, + compensationAccount: '4300000001' + } + }; + const receipt = await app.models.Receipt.createReceipt(ctx); + const receiptCompensated = await app.models.Receipt.findOne({ + where: { + clientFk: ctx.args.clientFk, + payed: ctx.args.payed, + amountPaid: ctx.args.amountPaid, + bankFk: ctx.args.bankFk + } + }); + + expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); + expect(receiptCompensated.amountPaid).toEqual(-receiptCompensated.amountPaid); + // jasmine.objectContaining vs expect.objectContaining + + // restores + await receipt.destroy(); + await receiptCompensated.destroy(); + // destroy till + // destroy XDiario + }); + + it('should create a new receipt with a compensation for a supplier', async() => { + const ctx = { + args: { + payed: payed, + companyFk: companyFk, + bankFk: 3, + amountPaid: amountPaid, + description: description, + compensationAccount: '4100000001' + } + }; + const receipt = await app.models.Receipt.createReceipt(ctx); + /* esperar a que payment este en vn + const receiptCompensated = await app.models.Payment.findOne({ + where: { + clientFk: ctx.args.sale, + payed: ctx.args.payed, + amountPaid: ctx.args.amountPaid, + bankFk: ctx.args.bankFk + } + });*/ + + expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); + // expect(receiptCompensated.amountPaid).toEqual(receiptCompensated.amountPaid); + // jasmine.objectContaining vs expect.objectContaining + + // restores + await receipt.destroy(); + // destroy payment + // destroy till + // destroy XDiario + }); +}); From 0c7ddd863d6b766e49da81feefcb8e9aaa7610ee Mon Sep 17 00:00:00 2001 From: jgallego Date: Tue, 22 Dec 2020 10:08:11 +0100 Subject: [PATCH 05/32] xdiario test ok --- e2e/dms/8f1/7.jpeg | Bin 0 -> 13518 bytes .../back/methods/receipt/createReceipt.js | 21 +++++++----------- 2 files changed, 8 insertions(+), 13 deletions(-) create mode 100644 e2e/dms/8f1/7.jpeg diff --git a/e2e/dms/8f1/7.jpeg b/e2e/dms/8f1/7.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fb2483f69669a8f3ac8238a0ec0e135b074609c1 GIT binary patch literal 13518 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 literal 0 HcmV?d00001 diff --git a/modules/client/back/methods/receipt/createReceipt.js b/modules/client/back/methods/receipt/createReceipt.js index eb199f518f..cc2ce27e6c 100644 --- a/modules/client/back/methods/receipt/createReceipt.js +++ b/modules/client/back/methods/receipt/createReceipt.js @@ -58,9 +58,11 @@ module.exports = function(Self) { delete args.ctx; // Remove unwanted properties const newReceipt = await models.Receipt.create(args, options); + const clientOriginal = await models.Client.findById(args.clientFk); + const bank = await models.Bank.findById(args.bankFk); + const accountingType = await models.AccountingType.findById(bank.accountingTypeFk); if (args.compensationAccount) { - const clientOriginal = await models.Client.findById(args.clientFk); const supplierCompensation = await models.Supplier.findOne({ where: { account: args.compensationAccount @@ -77,12 +79,6 @@ module.exports = function(Self) { if (!supplierCompensation && !clientCompensation) throw new UserError('Invalid account'); - const accountingType = await models.AccountingType.findOne({ - where: { - code: 'compensation' - } - }); - await Self.rawSql( `CALL vn.ledger_doCompensation(?, ?, ?, ?, ?, ?, ?)`, [ @@ -96,15 +92,14 @@ module.exports = function(Self) { ], options); } else { - const bank = await models.Bank.findById(args.bankFk); - const ledger = await Self.rawSql( - `SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`, + const [xdiarioNew] = await Self.rawSql( + `SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ledger;`, [ null, Date(), bank.account, clientOriginal.accountingAccount, - clientOriginal.id + ':' + clientOriginal.nickname, '-', accountingType.receiptDescription, + clientOriginal.id + ':' + clientOriginal.nickname + '-' + accountingType.receiptDescription, args.amountPaid, 0, 0, @@ -120,11 +115,11 @@ module.exports = function(Self) { await Self.rawSql( `SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`, [ - ledger, + xdiarioNew.ledger, Date(), clientOriginal.accountingAccount, bank.account, - clientOriginal.id + ':' + clientOriginal.nickname, '-', accountingType.receiptDescription, + clientOriginal.id + ':' + clientOriginal.nickname + '-' + accountingType.receiptDescription, 0, args.amountPaid, 0, From 3db3d6560033d9811414a26e3def12725cee9161 Mon Sep 17 00:00:00 2001 From: jgallego Date: Tue, 29 Dec 2020 17:00:22 +0100 Subject: [PATCH 06/32] test --- .../receipt/specs/createReceipt.spec.js | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/modules/client/back/methods/receipt/specs/createReceipt.spec.js b/modules/client/back/methods/receipt/specs/createReceipt.spec.js index 64190b43d1..f0fa00b5ca 100644 --- a/modules/client/back/methods/receipt/specs/createReceipt.spec.js +++ b/modules/client/back/methods/receipt/specs/createReceipt.spec.js @@ -8,35 +8,44 @@ fdescribe('Receipt createReceipt', () => { const description = 'Receipt description'; it('should create a new receipt', async() => { - const ctx = { + const bankFk = 1; + let ctx = { args: { clientFk: clientFk, payed: payed, companyFk: companyFk, - bankFk: 1, + bankFk: bankFk, amountPaid: amountPaid, description: description } }; const receipt = await app.models.Receipt.createReceipt(ctx); - console.log(receipt); - console.log(ctx.args); - + delete ctx.args.payed; expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); + const till = await models.Till.findOne({ + where: { + bankFk: bankFk, + in: amountPaid, + dated: payed, + number: clientFk + } + }); + // restores await receipt.destroy(); - // destroy till + await till.destroy(); }); it('should throw Invalid account if compensationAccount does not belongs to a client nor a supplier', async() => { + const bankFk = 3; const ctx = { args: { clientFk: clientFk, payed: payed, companyFk: companyFk, - bankFk: 3, + bankFk: bankFk, amountPaid: amountPaid, description: description, compensationAccount: 'non existing account' @@ -51,16 +60,16 @@ fdescribe('Receipt createReceipt', () => { expect(err).toBeDefined(); expect(err.message).toEqual('Invalid account'); - // validar que no ha creado el receipt porque el rollback ha funcionado }); it('should create a new receipt with a compensation for a client', async() => { + const bankFk = 3; const ctx = { args: { clientFk: clientFk, payed: payed, companyFk: companyFk, - bankFk: 3, + bankFk: bankFk, amountPaid: amountPaid, description: description, compensationAccount: '4300000001' @@ -76,20 +85,28 @@ fdescribe('Receipt createReceipt', () => { } }); + const till = await models.Till.findOne({ + where: { + bankFk: bankFk, + in: amountPaid, + dated: payed, + number: clientFk + } + }); + expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); - expect(receiptCompensated.amountPaid).toEqual(-receiptCompensated.amountPaid); - // jasmine.objectContaining vs expect.objectContaining + expect(receipt.amountPaid).toEqual(-receiptCompensated.amountPaid); // restores await receipt.destroy(); await receiptCompensated.destroy(); - // destroy till - // destroy XDiario + await till.destroy(); }); it('should create a new receipt with a compensation for a supplier', async() => { const ctx = { args: { + clientFk: clientFk, payed: payed, companyFk: companyFk, bankFk: 3, @@ -111,7 +128,6 @@ fdescribe('Receipt createReceipt', () => { expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); // expect(receiptCompensated.amountPaid).toEqual(receiptCompensated.amountPaid); - // jasmine.objectContaining vs expect.objectContaining // restores await receipt.destroy(); From cfc538d9bfcf5524263f97ae27aa999f1700c05c Mon Sep 17 00:00:00 2001 From: jgallego Date: Thu, 31 Dec 2020 07:50:12 +0100 Subject: [PATCH 07/32] npm i --- package-lock.json | 135 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 66 insertions(+), 71 deletions(-) diff --git a/package-lock.json b/package-lock.json index ff41351411..861c917d09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5893,7 +5893,7 @@ }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -6864,7 +6864,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { "cache-base": "^1.0.1", @@ -7185,7 +7185,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -7376,7 +7376,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { "collection-visit": "^1.0.0", @@ -7584,7 +7584,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { "arr-union": "^3.1.0", @@ -10021,7 +10021,7 @@ }, "file-loader": { "version": "1.1.11", - "resolved": "http://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { @@ -10143,11 +10143,6 @@ "parse-filepath": "^1.0.1" } }, - "first-chunk-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-0.1.0.tgz", - "integrity": "sha1-dV0+wU1JqG49L8wIvurVwMornAo=" - }, "flagged-respawn": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", @@ -11207,7 +11202,7 @@ "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", "dev": true, "requires": { "global-prefix": "^1.0.1", @@ -13100,9 +13095,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "internal-ip": { "version": "4.3.0", @@ -13394,7 +13389,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { "isobject": "^3.0.1" @@ -13478,7 +13473,8 @@ "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "is-valid-glob": { "version": "1.0.0", @@ -22352,7 +22348,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -22694,7 +22690,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -22908,7 +22904,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -23369,7 +23365,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { "define-property": "^1.0.0", @@ -23420,7 +23416,7 @@ "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { "kind-of": "^3.2.0" @@ -23438,40 +23434,43 @@ } }, "soap": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/soap/-/soap-0.26.0.tgz", - "integrity": "sha512-tTS3lnGl6lfjQQuJgNnWOgC0Xa6qYQSwl2G7DX3kCdGmek/FTNmHDM/7icKP1KBMFfCrKpAWEbZiGefa92SCYw==", + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/soap/-/soap-0.35.0.tgz", + "integrity": "sha512-nRzW37ZdsdPKW8AtRKj6ibK+xVqgN8HFeowf+7NiJUtrHUbdiES3pFtRN0ZNU4q9Z1c75Epg77+9ENrtx9ulTw==", "requires": { - "bluebird": "^3.5.0", - "concat-stream": "^1.5.1", - "debug": "^2.6.9", - "ejs": "~2.5.5", - "finalhandler": "^1.0.3", + "debug": "^4.1.1", + "get-stream": "^6.0.0", "httpntlm": "^1.5.2", - "lodash": "^4.17.5", + "lodash": "^4.17.19", "request": ">=2.9.0", "sax": ">=0.6", - "serve-static": "^1.11.1", - "strip-bom": "~0.3.1", - "uuid": "^3.1.0", - "xml-crypto": "~0.8.0" + "strip-bom": "^3.0.0", + "uuid": "^8.3.0", + "xml-crypto": "^2.0.0" }, "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "ms": "2.1.2" } }, - "ejs": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", - "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" + "get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, @@ -23704,7 +23703,7 @@ "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { "extend-shallow": "^3.0.0" @@ -23958,13 +23957,9 @@ } }, "strip-bom": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-0.3.1.tgz", - "integrity": "sha1-noo57/RW/5q8LwWfXyIluw8/fKU=", - "requires": { - "first-chunk-stream": "^0.1.0", - "is-utf8": "^0.2.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-eof": { "version": "1.0.0", @@ -25006,7 +25001,7 @@ "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=", "dev": true, "requires": { "nopt": "~1.0.10" @@ -25088,7 +25083,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -26779,12 +26774,12 @@ "dev": true }, "xml-crypto": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.8.5.tgz", - "integrity": "sha1-K7z7PrM/OoKiGLgiv2craxwg5Tg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-2.0.0.tgz", + "integrity": "sha512-/a04qr7RpONRZHOxROZ6iIHItdsQQjN3sj8lJkYDDss8tAkEaAs0VrFjb3tlhmS5snQru5lTs9/5ISSMdPDHlg==", "requires": { - "xmldom": "=0.1.19", - "xpath.js": ">=0.0.3" + "xmldom": "0.1.27", + "xpath": "0.0.27" } }, "xml-name-validator": { @@ -26811,7 +26806,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlchars": { @@ -26826,14 +26821,14 @@ "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=" }, "xmldom": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz", - "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=" + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" }, - "xpath.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", - "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==" + "xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" }, "xtend": { "version": "1.0.3", diff --git a/package.json b/package.json index 0bb835dd85..0e1bc8e32c 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "require-yaml": "0.0.1", "sharp": "^0.25.4", "smbhash": "0.0.1", - "soap": "^0.26.0", + "soap": "^0.35.0", "strong-error-handler": "^2.3.2", "uuid": "^3.3.3", "vn-loopback": "file:./loopback", From 1291fc4b6c9e96250b243839a4b4bad3ad1dc281 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 4 Jan 2021 11:49:32 +0100 Subject: [PATCH 08/32] acl --- db/changes/10260-holidays/00-ACL.sql | 3 ++- e2e/helpers/selectors.js | 1 + e2e/paths/02-client/14_balance.spec.js | 2 ++ modules/client/front/fiscal-data/index.html | 1 - 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/db/changes/10260-holidays/00-ACL.sql b/db/changes/10260-holidays/00-ACL.sql index e72e6fa73b..f8afe706ce 100644 --- a/db/changes/10260-holidays/00-ACL.sql +++ b/db/changes/10260-holidays/00-ACL.sql @@ -1,2 +1,3 @@ INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId) VALUES ('Image', '*', 'WRITE', 'ALLOW', 'ROLE', 'employee'); -INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('PayDem', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); \ No newline at end of file +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('PayDem', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 0ed3607ad4..cfc50dc0b5 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -188,6 +188,7 @@ export default { newPaymentButton: `vn-float-button`, newPaymentBank: '.vn-dialog.shown vn-autocomplete[ng-model="$ctrl.receipt.bankFk"]', newPaymentAmount: '.vn-dialog.shown vn-input-number[ng-model="$ctrl.receipt.amountPaid"]', + newDescription: 'vn-textfield[ng-model="$ctrl.receipt.description"]', saveButton: '.vn-dialog.shown [response="accept"]', firstLineBalance: 'vn-client-balance-index vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(8)', firstLineReference: 'vn-client-balance-index vn-tbody > vn-tr:nth-child(1) > vn-td-editable', diff --git a/e2e/paths/02-client/14_balance.spec.js b/e2e/paths/02-client/14_balance.spec.js index 1de02662ea..7595957c4d 100644 --- a/e2e/paths/02-client/14_balance.spec.js +++ b/e2e/paths/02-client/14_balance.spec.js @@ -47,6 +47,7 @@ describe('Client balance path', () => { await page.closePopup(); await page.waitToClick(selectors.clientBalance.newPaymentButton); await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Pay on receipt'); + await page.write(selectors.clientBalance.newDescription, 'Description'); await page.waitToClick(selectors.clientBalance.saveButton); const message = await page.waitForSnackbar(); @@ -98,6 +99,7 @@ describe('Client balance path', () => { await page.waitToClick(selectors.clientBalance.newPaymentButton); await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Pay on receipt'); await page.overwrite(selectors.clientBalance.newPaymentAmount, '-150'); + await page.write(selectors.clientBalance.newDescription, 'Description'); await page.waitToClick(selectors.clientBalance.saveButton); const message = await page.waitForSnackbar(); diff --git a/modules/client/front/fiscal-data/index.html b/modules/client/front/fiscal-data/index.html index 2b671c69a4..c89bdf6a5a 100644 --- a/modules/client/front/fiscal-data/index.html +++ b/modules/client/front/fiscal-data/index.html @@ -85,7 +85,6 @@ value-field="id" label="Previous client" info="In case of a company succession, specify the grantor company" - vn-acl="salesAssistant" rule> From 1884dc8789e27fa418429f89ac8c332866852106 Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 8 Jan 2021 09:43:36 +0100 Subject: [PATCH 09/32] fixtures --- db/dump/fixtures.sql | 10 ++++------ loopback/locale/es.json | 3 ++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index b8e9ef06e4..7f62a576d8 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -151,21 +151,19 @@ INSERT INTO `vn`.`shelving` (`code`, `parkingFk`, `isPrinted`, `priority`, `park INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`,`code`) VALUES (1, 'CC y Polizas de crédito', NULL, NULL), - (2, 'Caja registradora', NULL, NULL), - (3, 'Tarjeta de credito', NULL, NULL), + (2, 'Caja registradora', NULL, 'cash'), + (3, 'Tarjeta de credito', NULL, 'creditCard'), (4, 'Lineas de financiacion', NULL, NULL), (5, 'Otros productos', NULL, NULL), (6, 'Prestamos', NULL, NULL), (7, 'Leasing', NULL, NULL), - (8, 'Compensaciones', 'Compensation', 'compensation'), - (9, 'Cash', 'Cash', 'cash'), - (10, 'Card', 'Pay on receipt', NULL); + (8, 'Compensaciones', 'Compensation', 'compensation'); INSERT INTO `vn`.`bank`(`id`, `bank`, `account`, `cash`, `entityFk`, `isActive`, `currencyFk`) VALUES (1, 'Pay on receipt', '0000000000', 3, 0, 1, 1), (2, 'Cash', '1111111111', 2, 0, 1, 1), - (3, 'Compensation', '0000000000', 7, 0, 1, 1); + (3, 'Compensation', '0000000000', 8, 0, 1, 1); INSERT INTO `vn`.`deliveryMethod`(`id`, `code`, `description`) VALUES diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 2c07e341c7..e0264a252e 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -166,5 +166,6 @@ "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", "You can't upload images on the test environment": "No puedes subir imágenes en el entorno de pruebas", "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta", - "Sorts whole route": "Reordena ruta entera" + "Sorts whole route": "Reordena ruta entera", + "Invalid account": "Cuenta inválida" } \ No newline at end of file From a9ec319d4ff84073bd09252dd871e32f1270afdd Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 8 Jan 2021 15:22:41 +0100 Subject: [PATCH 10/32] test --- .../client/back/methods/receipt/specs/createReceipt.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/client/back/methods/receipt/specs/createReceipt.spec.js b/modules/client/back/methods/receipt/specs/createReceipt.spec.js index f0fa00b5ca..95117a055d 100644 --- a/modules/client/back/methods/receipt/specs/createReceipt.spec.js +++ b/modules/client/back/methods/receipt/specs/createReceipt.spec.js @@ -22,7 +22,6 @@ fdescribe('Receipt createReceipt', () => { const receipt = await app.models.Receipt.createReceipt(ctx); delete ctx.args.payed; - expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); const till = await models.Till.findOne({ where: { @@ -33,6 +32,8 @@ fdescribe('Receipt createReceipt', () => { } }); + expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); + // restores await receipt.destroy(); await till.destroy(); From ea6e234cde44c6ce184d41a0a8fd5f8d85bda443 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 11 Jan 2021 08:01:57 +0100 Subject: [PATCH 11/32] minor fixes --- db/dump/fixtures.sql | 12 ++++++------ .../back/methods/receipt/specs/createReceipt.spec.js | 4 ++-- modules/client/back/models/till.json | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 8f86c5f664..1e55ac1a2d 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -211,13 +211,13 @@ UPDATE `vn`.`agencyMode` SET `web` = 1; UPDATE `vn`.`agencyMode` SET `code` = 'refund' WHERE `id` = 23; -INSERT INTO `vn`.`payMethod`(`id`, `name`, `graceDays`, `outstandingDebt`, `ibanRequired`) +INSERT INTO `vn`.`payMethod`(`id`,`code`, `name`, `graceDays`, `outstandingDebt`, `ibanRequired`) VALUES - (1, 'PayMethod one', 0, 001, 0), - (2, 'PayMethod two', 10, 001, 0), - (3, 'PayMethod three', 0, 001, 0), - (4, 'PayMethod with IBAN', 0, 001, 1), - (5, 'PayMethod five', 10, 001, 0); + (1, NULL, 'PayMethod one', 0, 001, 0), + (2, NULL, 'PayMethod two', 10, 001, 0), + (3, 'compensation', 'PayMethod three', 0, 001, 0), + (4, NULL, 'PayMethod with IBAN', 0, 001, 1), + (5, NULL, 'PayMethod five', 10, 001, 0); INSERT INTO `vn`.`payDem`(`id`, `payDem`) VALUES diff --git a/modules/client/back/methods/receipt/specs/createReceipt.spec.js b/modules/client/back/methods/receipt/specs/createReceipt.spec.js index 95117a055d..35ed79c0d5 100644 --- a/modules/client/back/methods/receipt/specs/createReceipt.spec.js +++ b/modules/client/back/methods/receipt/specs/createReceipt.spec.js @@ -23,7 +23,7 @@ fdescribe('Receipt createReceipt', () => { const receipt = await app.models.Receipt.createReceipt(ctx); delete ctx.args.payed; - const till = await models.Till.findOne({ + const till = await app.models.Till.findOne({ where: { bankFk: bankFk, in: amountPaid, @@ -86,7 +86,7 @@ fdescribe('Receipt createReceipt', () => { } }); - const till = await models.Till.findOne({ + const till = await app.models.Till.findOne({ where: { bankFk: bankFk, in: amountPaid, diff --git a/modules/client/back/models/till.json b/modules/client/back/models/till.json index a8c7dfd3fc..370bec1ec8 100644 --- a/modules/client/back/models/till.json +++ b/modules/client/back/models/till.json @@ -39,7 +39,7 @@ "created": { "type": "date" }, - "isConciliated": { + "isConciliate": { "type": "boolean" } }, From d3b5300553742792a303ffd63e8e5d7050f97df1 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 11 Jan 2021 16:30:14 +0100 Subject: [PATCH 12/32] test --- back/model-config.json | 53 ++++++------ back/models/payment.json | 64 +++++++++++++++ .../00-ledger_doCompensation.sql | 81 +++++++++++++++++++ e2e/paths/10-travel/03_descriptor.spec.js | 1 + .../receipt/specs/createReceipt.spec.js | 35 +++++--- modules/client/back/models/till.json | 8 +- 6 files changed, 200 insertions(+), 42 deletions(-) create mode 100644 back/models/payment.json create mode 100644 db/changes/10270-wiseMen/00-ledger_doCompensation.sql diff --git a/back/model-config.json b/back/model-config.json index 5e4cc23a25..7759c32fad 100644 --- a/back/model-config.json +++ b/back/model-config.json @@ -35,6 +35,15 @@ "DmsContainer": { "dataSource": "dmsStorage" }, + "Dms": { + "dataSource": "vn" + }, + "DmsType": { + "dataSource": "vn" + }, + "EmailUser": { + "dataSource": "vn" + }, "Image": { "dataSource": "vn" }, @@ -53,38 +62,32 @@ "Province": { "dataSource": "vn" }, - "TempContainer": { - "dataSource": "tempStorage" - }, - "UserConfig": { - "dataSource": "vn" - }, - "Warehouse": { - "dataSource": "vn" - }, - "SageWithholding": { - "dataSource": "vn" - }, - "UserConfigView": { - "dataSource": "vn" - }, - "EmailUser": { - "dataSource": "vn" - }, - "Dms": { - "dataSource": "vn" - }, - "DmsType": { - "dataSource": "vn" - }, - "Town": { + "Payment": { "dataSource": "vn" }, "Postcode": { "dataSource": "vn" }, + "SageWithholding": { + "dataSource": "vn" + }, + "TempContainer": { + "dataSource": "tempStorage" + }, + "Town": { + "dataSource": "vn" + }, + "UserConfig": { + "dataSource": "vn" + }, + "UserConfigView": { + "dataSource": "vn" + }, "UserLog": { "dataSource": "vn" + }, + "Warehouse": { + "dataSource": "vn" } } diff --git a/back/models/payment.json b/back/models/payment.json new file mode 100644 index 0000000000..20c7975750 --- /dev/null +++ b/back/models/payment.json @@ -0,0 +1,64 @@ +{ + "name": "Payment", + "base": "VnModel", + "options": { + "mysql": { + "table": "payment" + } + }, + "properties": { + "id": { + "type": "Number", + "id": true, + "description": "Identifier" + }, + "received": { + "type": "date" + }, + "amount": { + "type": "number" + }, + "divisa": { + "type": "number" + }, + "concept": { + "type": "string" + }, + "created": { + "type": "date" + }, + "isConciliated": { + "type": "date" + }, + "dueDated": { + "type": "date" + } + }, + "relations": { + "supplier": { + "type": "belongsTo", + "model": "Supplier", + "foreignKey": "supplierFk" + }, + "currency": { + "type": "belongsTo", + "model": "Currency", + "foreignKey": "currencyFk" + }, + "bank": { + "type": "belongsTo", + "model": "Bank", + "foreignKey": "bankFk" + }, + "payMethod": { + "type": "belongsTo", + "model": "PayMethodFk", + "foreignKey": "payMethodFk" + }, + "company": { + "type": "belongsTo", + "model": "Company", + "foreignKey": "companyFk" + } + } +} \ No newline at end of file diff --git a/db/changes/10270-wiseMen/00-ledger_doCompensation.sql b/db/changes/10270-wiseMen/00-ledger_doCompensation.sql new file mode 100644 index 0000000000..2f5d3af63f --- /dev/null +++ b/db/changes/10270-wiseMen/00-ledger_doCompensation.sql @@ -0,0 +1,81 @@ +DROP PROCEDURE IF EXISTS vn.ledger_doCompensation; + +DELIMITER $$ +$$ +CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`ledger_doCompensation`(vDated DATE, vCompensationAccount VARCHAR(10) , vBankFk VARCHAR(10), vConcept VARCHAR(255), vAmount DECIMAL(10,2), vCompanyFk INT, vOriginalAccount VARCHAR(10)) +BEGIN +/** + * Compensa un pago o un recibo insertando en contabilidad + * + * @param vDated fecha en la cual se anota + * @param vCompensationAccount cuenta contable contra la que se compensa + * @param vBankFk banco de la compensacion + * @param vConcept descripcion + * @param vAmount cantidad que se compensa + * @param vCompany empresa + * @param vOriginalAccount cuenta contable desde la cual se compensa + * + */ + DECLARE vNewBookEntry INT; + DECLARE vIsClientCompensation INT; + DECLARE vClientFk INT; + DECLARE vSupplierFk INT; + DECLARE vIsOriginalAClient BOOL; + DECLARE vPayMethodCompensation INT; + + CALL ledger_next(vNewBookEntry); + + SELECT COUNT(id) INTO vIsOriginalAClient FROM client WHERE accountingAccount LIKE vOriginalAccount COLLATE utf8_general_ci; + + SELECT id, COUNT(id) INTO vClientFk, vIsClientCompensation + FROM client + WHERE accountingAccount LIKE vCompensationAccount COLLATE utf8_general_ci; + + SET @vAmount1:= 0.0; + SET @vAmount2:= 0.0; + + INSERT INTO XDiario (ASIEN, FECHA, SUBCTA, CONTRA, CONCEPTO, EURODEBE, EUROHABER, empresa_id) + VALUES ( vNewBookEntry, + vDated, + vOriginalAccount, + vCompensationAccount, + vConcept, + @vAmount1:= IF( + (vIsOriginalAClient OR NOT vIsOriginalAClient) + AND vAmount > 0, + 0, + ABS(vAmount) + ), + @vAmount2:= IF(@vAmount1, + 0, + ABS(vAmount) + ), + vCompanyFk + ), + ( vNewBookEntry, + vDated, + vCompensationAccount, + vOriginalAccount, + vConcept, + @vAmount2, + @vAmount1, + vCompanyFk); + + IF vIsClientCompensation THEN + IF vIsOriginalAClient THEN + SET vAmount = -vAmount; + END IF; + INSERT INTO receipt(invoiceFk, amountPaid, payed, bankFk, companyFk, clientFk, isConciliate) + VALUES (vConcept, vAmount, vDated, vBankFk, vCompanyFk, vClientFk, TRUE); + ELSE + IF NOT vIsOriginalAClient THEN + SET vAmount = -vAmount; + END IF; + SELECT id INTO vSupplierFk FROM supplier WHERE `account` LIKE vCompensationAccount COLLATE utf8_general_ci; + SELECT id INTO vPayMethodCompensation FROM payMethod WHERE `code` = 'compensation'; + + INSERT INTO payment (received, dueDated, supplierFk, amount, bankFk, payMethodFk, concept, companyFk, isConciliated) + VALUES(vDated, vDated, vSupplierFk, vAmount, vBankFk, vPayMethodCompensation, vConcept, vCompanyFk, TRUE); + END IF; +END$$ +DELIMITER ; diff --git a/e2e/paths/10-travel/03_descriptor.spec.js b/e2e/paths/10-travel/03_descriptor.spec.js index cdca379ad8..2a8abff822 100644 --- a/e2e/paths/10-travel/03_descriptor.spec.js +++ b/e2e/paths/10-travel/03_descriptor.spec.js @@ -82,6 +82,7 @@ describe('Travel descriptor path', () => { await page.waitToClick('vn-icon[icon="preview"]'); // summary icon await page.waitForState('travel.card.summary'); await page.waitToClick(selectors.travelDescriptor.dotMenu); + await page.waitToClick(selectors.travelDescriptor.dotMenuCloneWithEntries); await page.waitToClick(selectors.travelDescriptor.acceptClonation); await page.waitForState('travel.card.basicData'); diff --git a/modules/client/back/methods/receipt/specs/createReceipt.spec.js b/modules/client/back/methods/receipt/specs/createReceipt.spec.js index 35ed79c0d5..d2f802906c 100644 --- a/modules/client/back/methods/receipt/specs/createReceipt.spec.js +++ b/modules/client/back/methods/receipt/specs/createReceipt.spec.js @@ -1,6 +1,6 @@ const app = require('vn-loopback/server/server'); -fdescribe('Receipt createReceipt', () => { +describe('Receipt createReceipt', () => { const clientFk = 108; const payed = Date(); const companyFk = 442; @@ -27,7 +27,6 @@ fdescribe('Receipt createReceipt', () => { where: { bankFk: bankFk, in: amountPaid, - dated: payed, number: clientFk } }); @@ -79,9 +78,7 @@ fdescribe('Receipt createReceipt', () => { const receipt = await app.models.Receipt.createReceipt(ctx); const receiptCompensated = await app.models.Receipt.findOne({ where: { - clientFk: ctx.args.clientFk, - payed: ctx.args.payed, - amountPaid: ctx.args.amountPaid, + clientFk: 1, bankFk: ctx.args.bankFk } }); @@ -90,14 +87,16 @@ fdescribe('Receipt createReceipt', () => { where: { bankFk: bankFk, in: amountPaid, - dated: payed, number: clientFk } }); + delete ctx.args.payed; + expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); expect(receipt.amountPaid).toEqual(-receiptCompensated.amountPaid); + console.log(till); // restores await receipt.destroy(); await receiptCompensated.destroy(); @@ -117,23 +116,33 @@ fdescribe('Receipt createReceipt', () => { } }; const receipt = await app.models.Receipt.createReceipt(ctx); - /* esperar a que payment este en vn - const receiptCompensated = await app.models.Payment.findOne({ + + const paymentCompensated = await app.models.Payment.findOne({ where: { clientFk: ctx.args.sale, payed: ctx.args.payed, amountPaid: ctx.args.amountPaid, bankFk: ctx.args.bankFk } - });*/ + }); + + const till = await app.models.Till.findOne({ + where: { + bankFk: ctx.args.bankFk, + in: amountPaid, + number: clientFk + } + }); + + delete ctx.args.payed; expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); - // expect(receiptCompensated.amountPaid).toEqual(receiptCompensated.amountPaid); + + expect(paymentCompensated.amountPaid).toEqual(paymentCompensated.amountPaid); // restores await receipt.destroy(); - // destroy payment - // destroy till - // destroy XDiario + await paymentCompensated.destroy(); + await till.destroy(); }); }); diff --git a/modules/client/back/models/till.json b/modules/client/back/models/till.json index 370bec1ec8..06f021dafe 100644 --- a/modules/client/back/models/till.json +++ b/modules/client/back/models/till.json @@ -46,13 +46,13 @@ "relations": { "bank": { "type": "belongsTo", - "model": "BankEntity", - "foreignKey": "bankEntityFk" + "model": "Bank", + "foreignKey": "bankFk" }, - "salesPersonUser": { + "worker": { "type": "belongsTo", "model": "Account", - "foreignKey": "salesPersonFk" + "foreignKey": "workerFk" }, "company": { "type": "belongsTo", From 6acfe7f1cff6139f96de1e3c46532637900c9d00 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 11 Jan 2021 17:18:37 +0100 Subject: [PATCH 13/32] minorBugs --- db/changes/10270-wise-men/00-ACL.sql | 1 + .../00-ledger_doCompensation.sql | 0 e2e/paths/10-travel/03_descriptor.spec.js | 1 - .../back/methods/client/specs/updateAddress.spec.js | 2 ++ modules/client/back/methods/receipt/createReceipt.js | 5 +++-- .../back/methods/receipt/specs/createReceipt.spec.js | 8 ++++---- modules/client/front/balance/create/index.html | 4 ++-- 7 files changed, 12 insertions(+), 9 deletions(-) create mode 100644 db/changes/10270-wise-men/00-ACL.sql rename db/changes/{10270-wiseMen => 10270-wise-men}/00-ledger_doCompensation.sql (100%) diff --git a/db/changes/10270-wise-men/00-ACL.sql b/db/changes/10270-wise-men/00-ACL.sql new file mode 100644 index 0000000000..59b51075ea --- /dev/null +++ b/db/changes/10270-wise-men/00-ACL.sql @@ -0,0 +1 @@ +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); \ No newline at end of file diff --git a/db/changes/10270-wiseMen/00-ledger_doCompensation.sql b/db/changes/10270-wise-men/00-ledger_doCompensation.sql similarity index 100% rename from db/changes/10270-wiseMen/00-ledger_doCompensation.sql rename to db/changes/10270-wise-men/00-ledger_doCompensation.sql diff --git a/e2e/paths/10-travel/03_descriptor.spec.js b/e2e/paths/10-travel/03_descriptor.spec.js index 2a8abff822..cdca379ad8 100644 --- a/e2e/paths/10-travel/03_descriptor.spec.js +++ b/e2e/paths/10-travel/03_descriptor.spec.js @@ -82,7 +82,6 @@ describe('Travel descriptor path', () => { await page.waitToClick('vn-icon[icon="preview"]'); // summary icon await page.waitForState('travel.card.summary'); await page.waitToClick(selectors.travelDescriptor.dotMenu); - await page.waitToClick(selectors.travelDescriptor.dotMenuCloneWithEntries); await page.waitToClick(selectors.travelDescriptor.acceptClonation); await page.waitForState('travel.card.basicData'); diff --git a/modules/client/back/methods/client/specs/updateAddress.spec.js b/modules/client/back/methods/client/specs/updateAddress.spec.js index 6855d8e180..a30dcc96dd 100644 --- a/modules/client/back/methods/client/specs/updateAddress.spec.js +++ b/modules/client/back/methods/client/specs/updateAddress.spec.js @@ -8,6 +8,7 @@ describe('Address updateAddress', () => { const customAgentOneId = 1; it('should throw the non uee member error if no incoterms is defined', async() => { + let err; const ctx = { args: { provinceFk: provinceId, @@ -26,6 +27,7 @@ describe('Address updateAddress', () => { }); it('should throw a non uee member error if no customsAgent is defined', async() => { + let err; const ctx = { args: { provinceFk: provinceId, diff --git a/modules/client/back/methods/receipt/createReceipt.js b/modules/client/back/methods/receipt/createReceipt.js index cc2ce27e6c..75ad02373c 100644 --- a/modules/client/back/methods/receipt/createReceipt.js +++ b/modules/client/back/methods/receipt/createReceipt.js @@ -92,6 +92,7 @@ module.exports = function(Self) { ], options); } else { + const description = `${clientOriginal.id} : ${clientOriginal.nickname} - ${accountingType.receiptDescription}`; const [xdiarioNew] = await Self.rawSql( `SELECT xdiario_new(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ledger;`, [ @@ -99,7 +100,7 @@ module.exports = function(Self) { Date(), bank.account, clientOriginal.accountingAccount, - clientOriginal.id + ':' + clientOriginal.nickname + '-' + accountingType.receiptDescription, + description, args.amountPaid, 0, 0, @@ -119,7 +120,7 @@ module.exports = function(Self) { Date(), clientOriginal.accountingAccount, bank.account, - clientOriginal.id + ':' + clientOriginal.nickname + '-' + accountingType.receiptDescription, + description, 0, args.amountPaid, 0, diff --git a/modules/client/back/methods/receipt/specs/createReceipt.spec.js b/modules/client/back/methods/receipt/specs/createReceipt.spec.js index d2f802906c..8ef77e74ee 100644 --- a/modules/client/back/methods/receipt/specs/createReceipt.spec.js +++ b/modules/client/back/methods/receipt/specs/createReceipt.spec.js @@ -39,6 +39,7 @@ describe('Receipt createReceipt', () => { }); it('should throw Invalid account if compensationAccount does not belongs to a client nor a supplier', async() => { + let error; const bankFk = 3; const ctx = { args: { @@ -55,11 +56,11 @@ describe('Receipt createReceipt', () => { try { await app.models.Receipt.createReceipt(ctx); } catch (e) { - err = e; + error = e; } - expect(err).toBeDefined(); - expect(err.message).toEqual('Invalid account'); + expect(error).toBeDefined(); + expect(error.message).toEqual('Invalid account'); }); it('should create a new receipt with a compensation for a client', async() => { @@ -96,7 +97,6 @@ describe('Receipt createReceipt', () => { expect(receipt).toEqual(jasmine.objectContaining(ctx.args)); expect(receipt.amountPaid).toEqual(-receiptCompensated.amountPaid); - console.log(till); // restores await receipt.destroy(); await receiptCompensated.destroy(); diff --git a/modules/client/front/balance/create/index.html b/modules/client/front/balance/create/index.html index 296bcb2ee6..a8ccfb7d85 100644 --- a/modules/client/front/balance/create/index.html +++ b/modules/client/front/balance/create/index.html @@ -58,7 +58,7 @@ -
Cash
+
Cash
-
Compensation
+
Compensation
Date: Tue, 19 Jan 2021 09:27:15 +0100 Subject: [PATCH 14/32] refactor autocomplete --- front/core/components/autocomplete/index.js | 3 +++ .../client/front/balance/create/index.html | 2 +- modules/client/front/balance/create/index.js | 19 ++++++++++++------- modules/client/front/balance/locale/es.yml | 2 ++ 4 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 modules/client/front/balance/locale/es.yml diff --git a/front/core/components/autocomplete/index.js b/front/core/components/autocomplete/index.js index 18c277f062..a50bd8612e 100755 --- a/front/core/components/autocomplete/index.js +++ b/front/core/components/autocomplete/index.js @@ -149,6 +149,9 @@ export default class Autocomplete extends Field { where: where }; + if (this.include) + filter.include = this.include; + let json = encodeURIComponent(JSON.stringify(filter)); this.$http.get(`${this.url}?filter=${json}`).then( json => this.onSelectionRequest(json.data), diff --git a/modules/client/front/balance/create/index.html b/modules/client/front/balance/create/index.html index a8ccfb7d85..1da25c8cbc 100644 --- a/modules/client/front/balance/create/index.html +++ b/modules/client/front/balance/create/index.html @@ -33,7 +33,7 @@ value-field="id" fields="['accountingTypeFk']" include="{relation: 'accountingType'}" - ng-model="$ctrl.receipt.bankFk" + ng-model="$ctrl.bankFk" search-function="{or: [{id: $search}, {bank: {like: '%'+ $search +'%'}}]}" selection="$ctrl.bankSelection" order="id" diff --git a/modules/client/front/balance/create/index.js b/modules/client/front/balance/create/index.js index fedc2d7c40..e1b4744521 100644 --- a/modules/client/front/balance/create/index.js +++ b/modules/client/front/balance/create/index.js @@ -7,9 +7,7 @@ class Controller extends Dialog { this.receipt = { payed: new Date(), - clientFk: this.$params.id, - companyFk: this.vnConfig.companyFk, - bankFk: this.vnConfig.bankFk + clientFk: this.$params.id }; } @@ -17,10 +15,6 @@ class Controller extends Dialog { this.receipt.payed = value; } - set bankFk(value) { - this.receipt.bankFk = value; - } - set amountPaid(value) { this.receipt.amountPaid = value; } @@ -72,6 +66,17 @@ class Controller extends Dialog { return this._deliveredAmount; } + get bankFk() { + if (!this.receipt.bankFk) + this.receipt.bankFk = this.vnConfig.bankFk; + + return this.receipt.bankFk; + } + + set bankFk(value) { + this.receipt.bankFk = value; + } + accountShortToStandard(value) { this.receipt.compensationAccount = value.replace('.', '0'.repeat(11 - value.length)); } diff --git a/modules/client/front/balance/locale/es.yml b/modules/client/front/balance/locale/es.yml new file mode 100644 index 0000000000..53750799cd --- /dev/null +++ b/modules/client/front/balance/locale/es.yml @@ -0,0 +1,2 @@ +Compensation: Compensación +Cash: Efectivo \ No newline at end of file From e47e5b9ec4dd040f99890730668c3c20620deff5 Mon Sep 17 00:00:00 2001 From: jgallego Date: Tue, 19 Jan 2021 11:32:47 +0100 Subject: [PATCH 15/32] merged carpetas de cambios --- db/changes/10270-wise-men/00-ACL.sql | 1 - db/changes/10270-wisemen/00-ACL.sql | 2 ++ db/changes/{12270-wisemen => 10270-wisemen}/00-itemTag.sql | 0 .../01-doCompensation.sql} | 1 + 4 files changed, 3 insertions(+), 1 deletion(-) delete mode 100644 db/changes/10270-wise-men/00-ACL.sql create mode 100644 db/changes/10270-wisemen/00-ACL.sql rename db/changes/{12270-wisemen => 10270-wisemen}/00-itemTag.sql (100%) rename db/changes/{10270-wise-men/00-ledger_doCompensation.sql => 10270-wisemen/01-doCompensation.sql} (99%) diff --git a/db/changes/10270-wise-men/00-ACL.sql b/db/changes/10270-wise-men/00-ACL.sql deleted file mode 100644 index 59b51075ea..0000000000 --- a/db/changes/10270-wise-men/00-ACL.sql +++ /dev/null @@ -1 +0,0 @@ -INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); \ No newline at end of file diff --git a/db/changes/10270-wisemen/00-ACL.sql b/db/changes/10270-wisemen/00-ACL.sql new file mode 100644 index 0000000000..3c3eae1909 --- /dev/null +++ b/db/changes/10270-wisemen/00-ACL.sql @@ -0,0 +1,2 @@ +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) +VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); diff --git a/db/changes/12270-wisemen/00-itemTag.sql b/db/changes/10270-wisemen/00-itemTag.sql similarity index 100% rename from db/changes/12270-wisemen/00-itemTag.sql rename to db/changes/10270-wisemen/00-itemTag.sql diff --git a/db/changes/10270-wise-men/00-ledger_doCompensation.sql b/db/changes/10270-wisemen/01-doCompensation.sql similarity index 99% rename from db/changes/10270-wise-men/00-ledger_doCompensation.sql rename to db/changes/10270-wisemen/01-doCompensation.sql index 2f5d3af63f..d1021ae429 100644 --- a/db/changes/10270-wise-men/00-ledger_doCompensation.sql +++ b/db/changes/10270-wisemen/01-doCompensation.sql @@ -1,5 +1,6 @@ DROP PROCEDURE IF EXISTS vn.ledger_doCompensation; + DELIMITER $$ $$ CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`ledger_doCompensation`(vDated DATE, vCompensationAccount VARCHAR(10) , vBankFk VARCHAR(10), vConcept VARCHAR(255), vAmount DECIMAL(10,2), vCompanyFk INT, vOriginalAccount VARCHAR(10)) From a6dfdc971afc6cfd1bbe002641cb237be424197d Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 20 Jan 2021 13:54:55 +0100 Subject: [PATCH 16/32] receipt_beforInsert --- db/changes/10270-wisemen/02-triggerReceipt.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 db/changes/10270-wisemen/02-triggerReceipt.sql diff --git a/db/changes/10270-wisemen/02-triggerReceipt.sql b/db/changes/10270-wisemen/02-triggerReceipt.sql new file mode 100644 index 0000000000..9b08a302f1 --- /dev/null +++ b/db/changes/10270-wisemen/02-triggerReceipt.sql @@ -0,0 +1,17 @@ +DROP TRIGGER IF EXISTS vn.receipt_beforInsert; + +DELIMITER $$ +$$ +CREATE TRIGGER receipt_beforInsert +BEFORE INSERT +ON receipt FOR EACH ROW +BEGIN + SELECT isAutoConciliated INTO @isAutoConciliated + FROM accounting a + JOIN accountingType at2 ON at2.id = a.accountingTypeFk + WHERE a.id =NEW.bankFk; + + SET NEW.isConciliate = @isAutoConciliated; +END +$$ +DELIMITER ; From 9fc14c70ae6f0a21512a67aeefdda7fbd3ac0f0a Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 10:25:25 +0100 Subject: [PATCH 17/32] bug fixed --- modules/client/back/models/receipt.js | 2 +- modules/client/front/balance/create/index.html | 3 +-- modules/client/front/balance/create/index.js | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/client/back/models/receipt.js b/modules/client/back/models/receipt.js index b37dfb9a30..02976a9739 100644 --- a/modules/client/back/models/receipt.js +++ b/modules/client/back/models/receipt.js @@ -12,7 +12,7 @@ module.exports = function(Self) { return !isNaN(value) && value != 0; } - Self.validateBinded('companyFk', isOfficialCompany, { + Self.validateAsync('companyFk', isOfficialCompany, { message: 'Company has to be official' }); diff --git a/modules/client/front/balance/create/index.html b/modules/client/front/balance/create/index.html index 1da25c8cbc..89ec3b049e 100644 --- a/modules/client/front/balance/create/index.html +++ b/modules/client/front/balance/create/index.html @@ -43,9 +43,8 @@ diff --git a/modules/client/front/balance/create/index.js b/modules/client/front/balance/create/index.js index e1b4744521..dfda85ca7f 100644 --- a/modules/client/front/balance/create/index.js +++ b/modules/client/front/balance/create/index.js @@ -17,6 +17,7 @@ class Controller extends Dialog { set amountPaid(value) { this.receipt.amountPaid = value; + this.amountToReturn = this.deliveredAmount - value; } get amountPaid() { From a53231c72132f4f758fa28e2179f3aead6f94a73 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 10:44:43 +0100 Subject: [PATCH 18/32] amends --- db/dump/fixtures.sql | 20 ++++++++++---------- e2e/dms/8f1/7.jpeg | Bin 13518 -> 0 bytes 2 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 e2e/dms/8f1/7.jpeg diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 1e55ac1a2d..ef7055c3d8 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -150,14 +150,14 @@ INSERT INTO `vn`.`shelving` (`code`, `parkingFk`, `isPrinted`, `priority`, `park INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`,`code`) VALUES - (1, 'CC y Polizas de crédito', NULL, NULL), - (2, 'Caja registradora', NULL, 'cash'), - (3, 'Tarjeta de credito', NULL, 'creditCard'), - (4, 'Lineas de financiacion', NULL, NULL), - (5, 'Otros productos', NULL, NULL), - (6, 'Prestamos', NULL, NULL), - (7, 'Leasing', NULL, NULL), - (8, 'Compensaciones', 'Compensation', 'compensation'); + (1, 'CC y Polizas de crédito', NULL, NULL), + (2, 'Cash', NULL, 'cash'), + (3, 'Credit card', NULL, 'creditCard'), + (4, 'Finalcial lines', NULL, NULL), + (5, 'Other products', NULL, NULL), + (6, 'Loans', NULL, NULL), + (7, 'Leasing', NULL, NULL), + (8, 'Compensations', 'Compensations', 'Compensations'); INSERT INTO `vn`.`bank`(`id`, `bank`, `account`, `cash`, `entityFk`, `isActive`, `currencyFk`) VALUES @@ -271,10 +271,10 @@ INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city VALUES (101, 'Bruce Wayne', '84612325V', 'Batman', 'Alfred', '1007 Mountain Drive, Gotham', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), (102, 'Petter Parker', '87945234L', 'Spider man', 'Aunt May', '20 Ingram Street, Queens, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), - (103, 'Clark Kent', '06815934E', 'Super man', 'lois lane', '344 Clinton Street, Apartamento 3-D', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 0, 19, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), + (103, 'Clark Kent', '06815934E', 'Super man', 'lois lane', '344 Clinton Street, Apartament 3-D', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 0, 19, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), (104, 'Tony Stark', '06089160W', 'Iron man', 'Pepper Potts', '10880 Malibu Point, 90265', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1), (105, 'Max Eisenhardt', '251628698', 'Magneto', 'Rogue', 'Unknown Whereabouts', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 8, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 18, 0, 1), - (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'Ciudad de Nueva York, Nueva York, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), + (106, 'DavidCharlesHaller', '53136686Q', 'Legion', 'Charles Xavier', 'City of New York, New York, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'DavidCharlesHaller@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 0, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 19, 0, 1), (107, 'Hank Pym', '09854837G', 'Ant man', 'Hawk', 'Anthill, San Francisco, California', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'HankPym@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), (108, 'Charles Xavier', '22641921P', 'Professor X', 'Beast', '3800 Victory Pkwy, Cincinnati, OH 45207, USA', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'CharlesXavier@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, 19, 0, 1), (109, 'Bruce Banner', '16104829E', 'Hulk', 'Black widow', 'Somewhere in New York', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceBanner@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 19, 0, 1), diff --git a/e2e/dms/8f1/7.jpeg b/e2e/dms/8f1/7.jpeg deleted file mode 100644 index fb2483f69669a8f3ac8238a0ec0e135b074609c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13518 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 From bf9f5bba49963e59f71ece41c3130e5e43418c1b Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 11:02:48 +0100 Subject: [PATCH 19/32] corrected model types --- back/models/accounting-type.json | 8 ++++---- back/models/payment.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/back/models/accounting-type.json b/back/models/accounting-type.json index 18b3ae52b6..86befe2ea6 100644 --- a/back/models/accounting-type.json +++ b/back/models/accounting-type.json @@ -8,20 +8,20 @@ }, "properties": { "id": { - "type": "Number", + "type": "number", "id": true, "description": "Identifier" }, "description": { - "type": "String", + "type": "string", "required": true }, "receiptDescription": { - "type": "String", + "type": "string", "required": true }, "code": { - "type": "String" + "type": "string" } }, "acls": [{ diff --git a/back/models/payment.json b/back/models/payment.json index 20c7975750..7eca36e4df 100644 --- a/back/models/payment.json +++ b/back/models/payment.json @@ -8,7 +8,7 @@ }, "properties": { "id": { - "type": "Number", + "type": "number", "id": true, "description": "Identifier" }, @@ -28,7 +28,7 @@ "type": "date" }, "isConciliated": { - "type": "date" + "type": "boolean" }, "dueDated": { "type": "date" From 90c6d2fe3e7d87d7477565ccbcffd63b4535bb62 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 11:30:22 +0100 Subject: [PATCH 20/32] SQLs moved to current version folder --- db/changes/10260-holidays/00-ACL.sql | 4 +--- db/changes/10270-wisemen/00-ACL.sql | 2 -- db/changes/10271-wisemen/.keep | 1 - db/changes/10271-wisemen/00-ACL.sql | 4 +++- .../{10270-wisemen => 10271-wisemen}/01-doCompensation.sql | 0 .../{10270-wisemen => 10271-wisemen}/02-triggerReceipt.sql | 0 6 files changed, 4 insertions(+), 7 deletions(-) delete mode 100644 db/changes/10270-wisemen/00-ACL.sql delete mode 100644 db/changes/10271-wisemen/.keep rename db/changes/{10270-wisemen => 10271-wisemen}/01-doCompensation.sql (100%) rename db/changes/{10270-wisemen => 10271-wisemen}/02-triggerReceipt.sql (100%) diff --git a/db/changes/10260-holidays/00-ACL.sql b/db/changes/10260-holidays/00-ACL.sql index f8afe706ce..83b8aded66 100644 --- a/db/changes/10260-holidays/00-ACL.sql +++ b/db/changes/10260-holidays/00-ACL.sql @@ -1,3 +1 @@ -INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId) VALUES ('Image', '*', 'WRITE', 'ALLOW', 'ROLE', 'employee'); -INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('PayDem', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); -INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); +INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId) VALUES ('Image', '*', 'WRITE', 'ALLOW', 'ROLE', 'employee'); \ No newline at end of file diff --git a/db/changes/10270-wisemen/00-ACL.sql b/db/changes/10270-wisemen/00-ACL.sql deleted file mode 100644 index 3c3eae1909..0000000000 --- a/db/changes/10270-wisemen/00-ACL.sql +++ /dev/null @@ -1,2 +0,0 @@ -INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) -VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); diff --git a/db/changes/10271-wisemen/.keep b/db/changes/10271-wisemen/.keep deleted file mode 100644 index d955e6ec83..0000000000 --- a/db/changes/10271-wisemen/.keep +++ /dev/null @@ -1 +0,0 @@ -12271-wisemen \ No newline at end of file diff --git a/db/changes/10271-wisemen/00-ACL.sql b/db/changes/10271-wisemen/00-ACL.sql index 40e47b1a35..9c07c4a7e3 100644 --- a/db/changes/10271-wisemen/00-ACL.sql +++ b/db/changes/10271-wisemen/00-ACL.sql @@ -1 +1,3 @@ -INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('FixedPrice', '*', '*', 'ALLOW', 'ROLE', 'buyer'); \ No newline at end of file +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('FixedPrice', '*', '*', 'ALLOW', 'ROLE', 'buyer'); +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('PayDem', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); \ No newline at end of file diff --git a/db/changes/10270-wisemen/01-doCompensation.sql b/db/changes/10271-wisemen/01-doCompensation.sql similarity index 100% rename from db/changes/10270-wisemen/01-doCompensation.sql rename to db/changes/10271-wisemen/01-doCompensation.sql diff --git a/db/changes/10270-wisemen/02-triggerReceipt.sql b/db/changes/10271-wisemen/02-triggerReceipt.sql similarity index 100% rename from db/changes/10270-wisemen/02-triggerReceipt.sql rename to db/changes/10271-wisemen/02-triggerReceipt.sql From 161514582dd27dbf7c286c79888d63a23f938998 Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 22 Jan 2021 14:41:40 +0100 Subject: [PATCH 21/32] movido de directorio --- .../back/methods/{receipt => client}/createReceipt.js | 0 .../{receipt => client}/specs/createReceipt.spec.js | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) rename modules/client/back/methods/{receipt => client}/createReceipt.js (100%) rename modules/client/back/methods/{receipt => client}/specs/createReceipt.spec.js (92%) diff --git a/modules/client/back/methods/receipt/createReceipt.js b/modules/client/back/methods/client/createReceipt.js similarity index 100% rename from modules/client/back/methods/receipt/createReceipt.js rename to modules/client/back/methods/client/createReceipt.js diff --git a/modules/client/back/methods/receipt/specs/createReceipt.spec.js b/modules/client/back/methods/client/specs/createReceipt.spec.js similarity index 92% rename from modules/client/back/methods/receipt/specs/createReceipt.spec.js rename to modules/client/back/methods/client/specs/createReceipt.spec.js index 8ef77e74ee..59bf8f52a2 100644 --- a/modules/client/back/methods/receipt/specs/createReceipt.spec.js +++ b/modules/client/back/methods/client/specs/createReceipt.spec.js @@ -1,6 +1,6 @@ const app = require('vn-loopback/server/server'); -describe('Receipt createReceipt', () => { +describe('Client createReceipt', () => { const clientFk = 108; const payed = Date(); const companyFk = 442; @@ -20,7 +20,7 @@ describe('Receipt createReceipt', () => { } }; - const receipt = await app.models.Receipt.createReceipt(ctx); + const receipt = await app.models.Client.createReceipt(ctx); delete ctx.args.payed; const till = await app.models.Till.findOne({ @@ -54,7 +54,7 @@ describe('Receipt createReceipt', () => { }; try { - await app.models.Receipt.createReceipt(ctx); + await app.models.Client.createReceipt(ctx); } catch (e) { error = e; } @@ -76,7 +76,7 @@ describe('Receipt createReceipt', () => { compensationAccount: '4300000001' } }; - const receipt = await app.models.Receipt.createReceipt(ctx); + const receipt = await app.models.Client.createReceipt(ctx); const receiptCompensated = await app.models.Receipt.findOne({ where: { clientFk: 1, @@ -115,7 +115,7 @@ describe('Receipt createReceipt', () => { compensationAccount: '4100000001' } }; - const receipt = await app.models.Receipt.createReceipt(ctx); + const receipt = await app.models.Client.createReceipt(ctx); const paymentCompensated = await app.models.Payment.findOne({ where: { From 93417e96766605bf7bf4276531dd464b6458316b Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 22 Jan 2021 14:45:02 +0100 Subject: [PATCH 22/32] refactor --- db/changes/10271-wisemen/00-ACL.sql | 2 +- modules/client/back/models/receipt.js | 2 +- modules/client/front/balance/create/index.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/db/changes/10271-wisemen/00-ACL.sql b/db/changes/10271-wisemen/00-ACL.sql index 9c07c4a7e3..f16d77b22c 100644 --- a/db/changes/10271-wisemen/00-ACL.sql +++ b/db/changes/10271-wisemen/00-ACL.sql @@ -1,3 +1,3 @@ INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('FixedPrice', '*', '*', 'ALLOW', 'ROLE', 'buyer'); INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('PayDem', '*', 'READ', 'ALLOW', 'ROLE', 'employee'); -INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Receipt', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); \ No newline at end of file +INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Client', 'createReceipt', '*', 'ALLOW', 'ROLE', 'administrative'); \ No newline at end of file diff --git a/modules/client/back/models/receipt.js b/modules/client/back/models/receipt.js index 02976a9739..99e5c67f3a 100644 --- a/modules/client/back/models/receipt.js +++ b/modules/client/back/models/receipt.js @@ -1,6 +1,6 @@ module.exports = function(Self) { require('../methods/receipt/filter')(Self); - require('../methods/receipt/createReceipt')(Self); + require('../methods/client/createReceipt')(Self); Self.validateBinded('amountPaid', isNotZero, { message: 'Amount cannot be zero', diff --git a/modules/client/front/balance/create/index.js b/modules/client/front/balance/create/index.js index dfda85ca7f..f5d6e7abf0 100644 --- a/modules/client/front/balance/create/index.js +++ b/modules/client/front/balance/create/index.js @@ -99,7 +99,7 @@ class Controller extends Dialog { if (response !== 'accept') return super.responseHandler(response); - return this.$http.post(`Receipts/${this.$params.id}/createReceipt`, this.receipt) + return this.$http.post(`Clients/${this.$params.id}/createReceipt`, this.receipt) .then(() => super.responseHandler(response)) .then(() => this.vnApp.showSuccess(this.$t('Data saved!'))); } From 16931693c7563b5d5d73bd78bce2dd6ae9d7fc44 Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 22 Jan 2021 15:46:03 +0100 Subject: [PATCH 23/32] slice error --- modules/client/back/models/client.js | 1 + modules/client/back/models/receipt.js | 1 - modules/client/front/balance/create/index.spec.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js index 1e500ab11d..26b20ef48f 100644 --- a/modules/client/back/models/client.js +++ b/modules/client/back/models/client.js @@ -30,6 +30,7 @@ module.exports = Self => { require('../methods/client/createAddress')(Self); require('../methods/client/updateAddress')(Self); require('../methods/client/consumption')(Self); + require('../methods/client/createReceipt')(Self); // Validations diff --git a/modules/client/back/models/receipt.js b/modules/client/back/models/receipt.js index 99e5c67f3a..400bc8505e 100644 --- a/modules/client/back/models/receipt.js +++ b/modules/client/back/models/receipt.js @@ -1,6 +1,5 @@ module.exports = function(Self) { require('../methods/receipt/filter')(Self); - require('../methods/client/createReceipt')(Self); Self.validateBinded('amountPaid', isNotZero, { message: 'Amount cannot be zero', diff --git a/modules/client/front/balance/create/index.spec.js b/modules/client/front/balance/create/index.spec.js index a68f6c8a6d..90015be19b 100644 --- a/modules/client/front/balance/create/index.spec.js +++ b/modules/client/front/balance/create/index.spec.js @@ -65,7 +65,7 @@ describe('Client', () => { controller.$params = {id: 101}; - $httpBackend.expect('POST', `Receipts/101/createReceipt`).respond({id: 1}); + $httpBackend.expect('POST', `Clients/101/createReceipt`).respond({id: 1}); controller.responseHandler('accept'); $httpBackend.flush(); From 54a2ea31fa99ffd3107c4ca0b27fdd54dc63cb48 Mon Sep 17 00:00:00 2001 From: joan Date: Mon, 25 Jan 2021 09:21:27 +0100 Subject: [PATCH 24/32] #2753 - Don't apply description text to autocomplete --- front/core/components/autocomplete/index.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/front/core/components/autocomplete/index.js b/front/core/components/autocomplete/index.js index a50bd8612e..56b30667e7 100755 --- a/front/core/components/autocomplete/index.js +++ b/front/core/components/autocomplete/index.js @@ -20,7 +20,7 @@ export default class Autocomplete extends Field { constructor($element, $, $compile, $transclude) { super($element, $, $compile); this.$transclude = $transclude; - + this.$compile = $compile; this._selection = null; this.input = this.element.querySelector('input'); } @@ -185,8 +185,14 @@ export default class Autocomplete extends Field { } else { display = this._selection[this.showField]; if (hasTemplate) { - let template = this.$transclude(() => {}, null, 'tplItem').text(); - display = this.$interpolate(template)(this._selection); + let template = this.$transclude(() => {}, null, 'tplItem'); + const element = template[0]; + const description = element.querySelector('.text-secondary'); + if (description) description.remove(); + + const displayElement = angular.element(element); + const displayText = displayElement.text(); + display = this.$interpolate(displayText)(this._selection); } } } From 22af1ce989d50fe4fff15d6e896d1b0b7f2702ae Mon Sep 17 00:00:00 2001 From: carlosjr Date: Mon, 25 Jan 2021 15:27:57 +0100 Subject: [PATCH 25/32] e2e first steps for balance compensations --- e2e/helpers/selectors.js | 2 +- e2e/paths/02-client/14_balance.spec.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index ae19d93ad9..f59904d8f0 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -186,7 +186,7 @@ export default { clientBalance: { company: 'vn-client-balance-index vn-autocomplete[ng-model="$ctrl.companyId"]', newPaymentButton: `vn-float-button`, - newPaymentBank: '.vn-dialog.shown vn-autocomplete[ng-model="$ctrl.receipt.bankFk"]', + newPaymentBank: '.vn-dialog.shown vn-autocomplete[ng-model="$ctrl.bankFk"]', newPaymentAmount: '.vn-dialog.shown vn-input-number[ng-model="$ctrl.receipt.amountPaid"]', newDescription: 'vn-textfield[ng-model="$ctrl.receipt.description"]', saveButton: '.vn-dialog.shown [response="accept"]', diff --git a/e2e/paths/02-client/14_balance.spec.js b/e2e/paths/02-client/14_balance.spec.js index 7595957c4d..19d8208b75 100644 --- a/e2e/paths/02-client/14_balance.spec.js +++ b/e2e/paths/02-client/14_balance.spec.js @@ -1,7 +1,7 @@ import selectors from '../../helpers/selectors'; import getBrowser from '../../helpers/puppeteer'; -describe('Client balance path', () => { +fdescribe('Client balance path', () => { let browser; let page; beforeAll(async() => { @@ -38,7 +38,7 @@ describe('Client balance path', () => { expect(message.text).toContain('Data saved!'); }); - it('should click the new payment button', async() => { + it('should reload the section', async() => { await page.closePopup(); await page.reloadSection('client.card.balance.index'); }); @@ -46,9 +46,9 @@ describe('Client balance path', () => { it('should create a new payment that clears the debt', async() => { await page.closePopup(); await page.waitToClick(selectors.clientBalance.newPaymentButton); - await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Pay on receipt'); + await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Cash'); await page.write(selectors.clientBalance.newDescription, 'Description'); - await page.waitToClick(selectors.clientBalance.saveButton); + await page.waitToClick(selectors.clientBalance.saveButton); // app crashing const message = await page.waitForSnackbar(); expect(message.text).toContain('Data saved!'); From 4b302915b56d0c6ddf669eecd6f2dc85f66279d1 Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 27 Jan 2021 09:14:37 +0100 Subject: [PATCH 26/32] fallo validateasync --- modules/client/back/models/receipt.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/client/back/models/receipt.js b/modules/client/back/models/receipt.js index 400bc8505e..88b7bfb5bb 100644 --- a/modules/client/back/models/receipt.js +++ b/modules/client/back/models/receipt.js @@ -15,9 +15,10 @@ module.exports = function(Self) { message: 'Company has to be official' }); - async function isOfficialCompany(value) { - const company = await Self.app.models.Company.findById(value); - return company.isOfficial; + async function isOfficialCompany(err, done) { + const hasCompany = await Self.app.models.Company.exists(this.companyFk); + if (!hasCompany) err(); + done(); } Self.observe('before save', async function(ctx) { From 0e0ff94b43d232e872d292a294f04e4d4deeb8b0 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Fri, 29 Jan 2021 16:33:23 +0100 Subject: [PATCH 27/32] client balance path updated --- e2e/helpers/selectors.js | 4 +++- e2e/paths/02-client/14_balance.spec.js | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index f59904d8f0..2d54e31d60 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -187,8 +187,10 @@ export default { company: 'vn-client-balance-index vn-autocomplete[ng-model="$ctrl.companyId"]', newPaymentButton: `vn-float-button`, newPaymentBank: '.vn-dialog.shown vn-autocomplete[ng-model="$ctrl.bankFk"]', - newPaymentAmount: '.vn-dialog.shown vn-input-number[ng-model="$ctrl.receipt.amountPaid"]', + newPaymentAmount: '.vn-dialog.shown vn-input-number[ng-model="$ctrl.amountPaid"]', newDescription: 'vn-textfield[ng-model="$ctrl.receipt.description"]', + deliveredAmount: '.vn-dialog vn-input-number[ng-model="$ctrl.deliveredAmount"]', + refundAmount: '.vn-dialog vn-input-number[ng-model="$ctrl.amountToReturn"]', saveButton: '.vn-dialog.shown [response="accept"]', firstLineBalance: 'vn-client-balance-index vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(8)', firstLineReference: 'vn-client-balance-index vn-tbody > vn-tr:nth-child(1) > vn-td-editable', diff --git a/e2e/paths/02-client/14_balance.spec.js b/e2e/paths/02-client/14_balance.spec.js index 19d8208b75..4917937fa4 100644 --- a/e2e/paths/02-client/14_balance.spec.js +++ b/e2e/paths/02-client/14_balance.spec.js @@ -1,7 +1,7 @@ import selectors from '../../helpers/selectors'; import getBrowser from '../../helpers/puppeteer'; -fdescribe('Client balance path', () => { +describe('Client balance path', () => { let browser; let page; beforeAll(async() => { @@ -48,7 +48,7 @@ fdescribe('Client balance path', () => { await page.waitToClick(selectors.clientBalance.newPaymentButton); await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Cash'); await page.write(selectors.clientBalance.newDescription, 'Description'); - await page.waitToClick(selectors.clientBalance.saveButton); // app crashing + await page.waitToClick(selectors.clientBalance.saveButton); const message = await page.waitForSnackbar(); expect(message.text).toContain('Data saved!'); @@ -79,16 +79,24 @@ fdescribe('Client balance path', () => { expect(firstBalanceLine).toContain('0.00'); }); - it('should create a new payment that sets the balance to positive value', async() => { + it('should create a new payment and check the cash comparison works correctly', async() => { + const amountPaid = '100'; + const cashHanded = '500'; + const expectedRefund = '400'; + await page.waitToClick(selectors.clientBalance.newPaymentButton); - await page.overwrite(selectors.clientBalance.newPaymentAmount, '100'); + await page.write(selectors.clientBalance.newPaymentAmount, amountPaid); + await page.write(selectors.clientBalance.newDescription, 'Payment'); + await page.write(selectors.clientBalance.deliveredAmount, cashHanded); + const refund = await page.waitToGetProperty(selectors.clientBalance.refundAmount, 'value'); await page.waitToClick(selectors.clientBalance.saveButton); const message = await page.waitForSnackbar(); + expect(refund).toEqual(expectedRefund); expect(message.text).toContain('Data saved!'); }); - it('should check balance is now -100', async() => { + it('should check the balance value is now -100', async() => { let result = await page .waitToGetProperty(selectors.clientBalance.firstLineBalance, 'innerText'); From 3ec55426ae353efcb8086e6bbbfdd86ec1556f9e Mon Sep 17 00:00:00 2001 From: joan Date: Mon, 1 Feb 2021 07:21:36 +0100 Subject: [PATCH 28/32] Removed params due a docker error --- db/config.ini | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/db/config.ini b/db/config.ini index 8c7e3856cd..0d496deddd 100644 --- a/db/config.ini +++ b/db/config.ini @@ -3,6 +3,4 @@ host = localhost port = 3306 user = root password = root -default-character-set=utf8 -ssl-mode=DISABLED -enable-cleartext-plugin \ No newline at end of file +default-character-set=utf8 \ No newline at end of file From f5f4c5936d956b7c5a4171603d40e92fd55b4bfa Mon Sep 17 00:00:00 2001 From: joan Date: Mon, 1 Feb 2021 09:29:47 +0100 Subject: [PATCH 29/32] 2763 - Notify urgen issues --- back/methods/chat/notifyIssues.js | 39 +++++++++++++++++++ back/methods/chat/spec/notifyIssue.spec.js | 28 +++++++++++++ back/methods/chat/spec/send.spec.js | 2 +- .../chat/spec/sendCheckingPresence.spec.js | 2 +- back/models/chat.js | 1 + .../10280-valentineDay/00-department.sql | 4 ++ loopback/locale/en.json | 3 +- loopback/locale/es.json | 3 +- modules/worker/back/models/department.json | 19 +++++---- 9 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 back/methods/chat/notifyIssues.js create mode 100644 back/methods/chat/spec/notifyIssue.spec.js create mode 100644 db/changes/10280-valentineDay/00-department.sql diff --git a/back/methods/chat/notifyIssues.js b/back/methods/chat/notifyIssues.js new file mode 100644 index 0000000000..54eb41c895 --- /dev/null +++ b/back/methods/chat/notifyIssues.js @@ -0,0 +1,39 @@ +module.exports = Self => { + Self.remoteMethodCtx('notifyIssues', { + description: 'Notifies new urgent issues', + accessType: 'READ', + returns: { + type: 'Object', + root: true + }, + http: { + path: `/notifyIssues`, + verb: 'GET' + } + }); + + Self.notifyIssues = async ctx => { + const models = Self.app.models; + const $t = ctx.req.__; // $translate + const [urgentIssue] = await Self.rawSql(` + SELECT * FROM managedesktop.vn_workOrderInmediata LIMIT 1 + `); + + if (!urgentIssue) return; + + const message = $t(`There's a new urgent ticket`, { + title: urgentIssue.title, + issueId: urgentIssue.workOrderId + }); + + const department = await models.Department.findOne({ + where: {code: 'IT'} + }); + const channelName = department && department.chatName; + + if (channelName) + return Self.send(ctx, `#${channelName}`, `@all ➔ ${message}`); + + return; + }; +}; diff --git a/back/methods/chat/spec/notifyIssue.spec.js b/back/methods/chat/spec/notifyIssue.spec.js new file mode 100644 index 0000000000..19fbbbd56e --- /dev/null +++ b/back/methods/chat/spec/notifyIssue.spec.js @@ -0,0 +1,28 @@ +const app = require('vn-loopback/server/server'); + +describe('Chat notifyIssue()', () => { + const ctx = {req: {accessToken: {userId: 1}}}; + ctx.req.__ = value => { + return value; + }; + const chatModel = app.models.Chat; + const departmentId = 31; + + it(`should call to notifyIssue() method then return a response calling the send() method`, async() => { + spyOn(chatModel, 'send').and.callThrough(); + spyOn(chatModel, 'rawSql').and.returnValue([{title: 'Issue title'}]); + + const department = await app.models.Department.findById(departmentId); + let orgChatName = department.chatName; + await department.updateAttribute('chatName', 'IT'); + + const response = await chatModel.notifyIssues(ctx); + + expect(response.statusCode).toEqual(200); + expect(response.message).toEqual('Fake notification sent'); + expect(chatModel.send).toHaveBeenCalledWith(ctx, '#IT', `@all ➔ There's a new urgent ticket`); + + // restores + await department.updateAttribute('chatName', orgChatName); + }); +}); diff --git a/back/methods/chat/spec/send.spec.js b/back/methods/chat/spec/send.spec.js index 56f2a9c275..2c23bb5918 100644 --- a/back/methods/chat/spec/send.spec.js +++ b/back/methods/chat/spec/send.spec.js @@ -1,6 +1,6 @@ const app = require('vn-loopback/server/server'); -describe('chat send()', () => { +describe('Chat send()', () => { it('should return a "Fake notification sent" as response', async() => { let ctx = {req: {accessToken: {userId: 1}}}; let response = await app.models.Chat.send(ctx, '@salesPerson', 'I changed something'); diff --git a/back/methods/chat/spec/sendCheckingPresence.spec.js b/back/methods/chat/spec/sendCheckingPresence.spec.js index b3e89180ce..aa4a80801e 100644 --- a/back/methods/chat/spec/sendCheckingPresence.spec.js +++ b/back/methods/chat/spec/sendCheckingPresence.spec.js @@ -1,6 +1,6 @@ const app = require('vn-loopback/server/server'); -describe('chat sendCheckingPresence()', () => { +describe('Chat sendCheckingPresence()', () => { const today = new Date(); today.setHours(6, 0); const ctx = {req: {accessToken: {userId: 1}}}; diff --git a/back/models/chat.js b/back/models/chat.js index ab23ef7131..5487569c10 100644 --- a/back/models/chat.js +++ b/back/models/chat.js @@ -1,4 +1,5 @@ module.exports = Self => { require('../methods/chat/send')(Self); require('../methods/chat/sendCheckingPresence')(Self); + require('../methods/chat/notifyIssues')(Self); }; diff --git a/db/changes/10280-valentineDay/00-department.sql b/db/changes/10280-valentineDay/00-department.sql new file mode 100644 index 0000000000..bb30628250 --- /dev/null +++ b/db/changes/10280-valentineDay/00-department.sql @@ -0,0 +1,4 @@ +ALTER TABLE `vn`.`department` + ADD code VARCHAR(45) NULL AFTER id; + +UPDATE `vn`.`department` t SET t.code = 'IT', t.chatName = 'informatica-cau' WHERE t.id = 31; diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 0ac49d5b50..400aa52658 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -88,5 +88,6 @@ "A travel with this data already exists": "A travel with this data already exists", "The observation type can't be repeated": "The observation type can't be repeated", "New ticket request has been created with price": "New ticket request has been created '{{description}}' for day {{shipped}}, with a quantity of {{quantity}} and a price of {{price}} €", - "New ticket request has been created": "New ticket request has been created '{{description}}' for day {{shipped}}, with a quantity of {{quantity}}" + "New ticket request has been created": "New ticket request has been created '{{description}}' for day {{shipped}}, with a quantity of {{quantity}}", + "There's a new urgent ticket": "There's a new urgent ticket: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})" } \ No newline at end of file diff --git a/loopback/locale/es.json b/loopback/locale/es.json index aa54c6b94c..48b89ec0fc 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -167,5 +167,6 @@ "Sorts whole route": "Reordena ruta entera", "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}}", - "That item doesn't exists": "Ese artículo no existe" + "That item doesn't exists": "Ese artículo no existe", + "There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})" } \ No newline at end of file diff --git a/modules/worker/back/models/department.json b/modules/worker/back/models/department.json index 31ebbb09a4..7d6f7a7be6 100644 --- a/modules/worker/back/models/department.json +++ b/modules/worker/back/models/department.json @@ -9,28 +9,31 @@ "properties": { "id": { "id": true, - "type": "Number" + "type": "number" + }, + "code": { + "type": "string" }, "name": { - "type": "String" + "type": "string" }, "parentFk": { - "type": "Number" + "type": "number" }, "lft": { - "type": "Number" + "type": "number" }, "rgt": { - "type": "Number" + "type": "number" }, "sons": { - "type": "Number" + "type": "number" }, "chatName": { - "type": "String" + "type": "string" }, "notificationEmail": { - "type": "String" + "type": "string" } } } From ebbeee6af4987cb555cd32b8bbf083209f96af28 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Mon, 1 Feb 2021 09:52:16 +0100 Subject: [PATCH 30/32] ticket payout e2e updated --- e2e/helpers/selectors.js | 3 ++- e2e/paths/05-ticket/18_index_payout.spec.js | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 2d54e31d60..3fdbb47f4a 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -403,7 +403,8 @@ export default { sixthTicketCheckbox: 'vn-ticket-index vn-tbody > a:nth-child(6) > vn-td:nth-child(1) > vn-check', payoutButton: 'vn-ticket-index vn-button[icon="icon-recovery"]', payoutCompany: '.vn-dialog vn-autocomplete[ng-model="$ctrl.receipt.companyFk"]', - payoutBank: '.vn-dialog vn-autocomplete[ng-model="$ctrl.receipt.bankFk"]', + payoutBank: '.vn-dialog vn-autocomplete[ng-model="$ctrl.bankFk"]', + payoutDescription: 'vn-textfield[ng-model="$ctrl.receipt.description"]', submitPayout: '.vn-dialog button[response="accept"]', searchWeeklyResult: 'vn-ticket-weekly-index vn-table vn-tbody > vn-tr', searchResultDate: 'vn-ticket-summary [label=Landed] span', diff --git a/e2e/paths/05-ticket/18_index_payout.spec.js b/e2e/paths/05-ticket/18_index_payout.spec.js index 4c6799dcb0..2292898b5e 100644 --- a/e2e/paths/05-ticket/18_index_payout.spec.js +++ b/e2e/paths/05-ticket/18_index_payout.spec.js @@ -38,7 +38,10 @@ describe('Ticket index payout path', () => { }); it('should fill the company and bank to perform a payout', async() => { + await page.autocompleteSearch(selectors.ticketsIndex.payoutCompany, 'VNL'); await page.autocompleteSearch(selectors.ticketsIndex.payoutBank, 'cash'); + await page.write(selectors.clientBalance.newPaymentAmount, '100'); + await page.write(selectors.ticketsIndex.payoutDescription, 'Payment'); await page.waitToClick(selectors.ticketsIndex.submitPayout); const message = await page.waitForSnackbar(); From a08c5c6ff744e9ad9d1132a2e48d76dd9ff64769 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 1 Feb 2021 10:51:17 +0100 Subject: [PATCH 31/32] error de ruta arreglado --- modules/client/front/balance/create/index.js | 5 ++--- modules/client/front/balance/index/index.html | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/client/front/balance/create/index.js b/modules/client/front/balance/create/index.js index f5d6e7abf0..22426a2693 100644 --- a/modules/client/front/balance/create/index.js +++ b/modules/client/front/balance/create/index.js @@ -6,8 +6,7 @@ class Controller extends Dialog { super($element, $, $transclude); this.receipt = { - payed: new Date(), - clientFk: this.$params.id + payed: new Date() }; } @@ -99,7 +98,7 @@ class Controller extends Dialog { if (response !== 'accept') return super.responseHandler(response); - return this.$http.post(`Clients/${this.$params.id}/createReceipt`, this.receipt) + return this.$http.post(`Clients/${this.clientFk}/createReceipt`, this.receipt) .then(() => super.responseHandler(response)) .then(() => this.vnApp.showSuccess(this.$t('Data saved!'))); } diff --git a/modules/client/front/balance/index/index.html b/modules/client/front/balance/index/index.html index ac9c39d7f8..468ac98c38 100644 --- a/modules/client/front/balance/index/index.html +++ b/modules/client/front/balance/index/index.html @@ -139,7 +139,8 @@ + company-fk="$ctrl.companyId" + client-fk="$ctrl.$params.id"> From b34e5804aecc4d6aa6494a7ec6ea129cbd118c3d Mon Sep 17 00:00:00 2001 From: joan Date: Tue, 2 Feb 2021 08:15:20 +0100 Subject: [PATCH 32/32] Updated unit test --- back/methods/chat/spec/notifyIssue.spec.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/back/methods/chat/spec/notifyIssue.spec.js b/back/methods/chat/spec/notifyIssue.spec.js index 19fbbbd56e..e23c33859e 100644 --- a/back/methods/chat/spec/notifyIssue.spec.js +++ b/back/methods/chat/spec/notifyIssue.spec.js @@ -8,7 +8,17 @@ describe('Chat notifyIssue()', () => { const chatModel = app.models.Chat; const departmentId = 31; - it(`should call to notifyIssue() method then return a response calling the send() method`, async() => { + it(`should not call to the send() method and neither return a response`, async() => { + spyOn(chatModel, 'send').and.callThrough(); + spyOn(chatModel, 'rawSql').and.returnValue([]); + + const response = await chatModel.notifyIssues(ctx); + + expect(chatModel.send).not.toHaveBeenCalled(); + expect(response).toBeUndefined(); + }); + + it(`should return a response calling the send() method`, async() => { spyOn(chatModel, 'send').and.callThrough(); spyOn(chatModel, 'rawSql').and.returnValue([{title: 'Issue title'}]);