From b23a441f31d96b9c703bec82cc2a140a7c165ae9 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 23 Nov 2020 12:20:58 +0100 Subject: [PATCH 01/29] 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 ad8474e38..da2bbe30b 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 6e7a9a665..7b7dadc30 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": { -- 2.40.1 From 963db11686314ec2cf850dabbe8f878e5845a033 Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 16 Dec 2020 08:33:08 +0100 Subject: [PATCH 02/29] 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 796793342..18b3ae52b 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 eb349477b..80ad026e4 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 000000000..517e12413 --- /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 da2bbe30b..920502510 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 bd00af58e..31f16d6b6 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 0081af429..d66126ad4 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 f75b1778e..7545eb10a 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 000000000..cbfe8ec15 --- /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 340ddeb18..1f18f4963 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 000000000..be2d258f9 --- /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 6cc767e2c..b37dfb9a3 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 c953ae507..3207546a3 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 000000000..a8c7dfd3f --- /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 a2775164d..296bcb2ee 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 8b01cab4a..fedc2d7c4 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 9f85387c8..e88d1e820 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 166bdbe1b..82cbb129e 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 d4fad8e96..6af031a23 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' -- 2.40.1 From 9abf23072ada530a945e79ee75931429d0bd18c3 Mon Sep 17 00:00:00 2001 From: "LaptopVerdnatura\\Javi" Date: Wed, 16 Dec 2020 16:25:19 +0100 Subject: [PATCH 03/29] 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 e88d1e820..a68f6c8a6 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'); + }); + }); }); }); -- 2.40.1 From 3a6d62ac7dcad8b09b42bd7d1c490bffe976866b Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 21 Dec 2020 09:52:27 +0100 Subject: [PATCH 04/29] 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 517e12413..000000000 --- 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 94667b317..246e41107 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 cbfe8ec15..eb199f518 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 000000000..64190b43d --- /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 + }); +}); -- 2.40.1 From 0c7ddd863d6b766e49da81feefcb8e9aaa7610ee Mon Sep 17 00:00:00 2001 From: jgallego Date: Tue, 22 Dec 2020 10:08:11 +0100 Subject: [PATCH 05/29] 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 eb199f518..cc2ce27e6 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, -- 2.40.1 From 3db3d6560033d9811414a26e3def12725cee9161 Mon Sep 17 00:00:00 2001 From: jgallego Date: Tue, 29 Dec 2020 17:00:22 +0100 Subject: [PATCH 06/29] 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 64190b43d..f0fa00b5c 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(); -- 2.40.1 From cfc538d9bfcf5524263f97ae27aa999f1700c05c Mon Sep 17 00:00:00 2001 From: jgallego Date: Thu, 31 Dec 2020 07:50:12 +0100 Subject: [PATCH 07/29] 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 ff4135141..861c917d0 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 0bb835dd8..0e1bc8e32 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", -- 2.40.1 From 1291fc4b6c9e96250b243839a4b4bad3ad1dc281 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 4 Jan 2021 11:49:32 +0100 Subject: [PATCH 08/29] 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 e72e6fa73..f8afe706c 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 0ed3607ad..cfc50dc0b 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 1de02662e..7595957c4 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 2b671c69a..c89bdf6a5 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> -- 2.40.1 From 1884dc8789e27fa418429f89ac8c332866852106 Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 8 Jan 2021 09:43:36 +0100 Subject: [PATCH 09/29] 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 b8e9ef06e..7f62a576d 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 2c07e341c..e0264a252 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 -- 2.40.1 From a9ec319d4ff84073bd09252dd871e32f1270afdd Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 8 Jan 2021 15:22:41 +0100 Subject: [PATCH 10/29] 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 f0fa00b5c..95117a055 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(); -- 2.40.1 From ea6e234cde44c6ce184d41a0a8fd5f8d85bda443 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 11 Jan 2021 08:01:57 +0100 Subject: [PATCH 11/29] 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 8f86c5f66..1e55ac1a2 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 95117a055..35ed79c0d 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 a8c7dfd3f..370bec1ec 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" } }, -- 2.40.1 From d3b5300553742792a303ffd63e8e5d7050f97df1 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 11 Jan 2021 16:30:14 +0100 Subject: [PATCH 12/29] 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 5e4cc23a2..7759c32fa 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 000000000..20c797575 --- /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 000000000..2f5d3af63 --- /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 cdca379ad..2a8abff82 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 35ed79c0d..d2f802906 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 370bec1ec..06f021daf 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", -- 2.40.1 From 6acfe7f1cff6139f96de1e3c46532637900c9d00 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 11 Jan 2021 17:18:37 +0100 Subject: [PATCH 13/29] 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 000000000..59b51075e --- /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 2a8abff82..cdca379ad 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 6855d8e18..a30dcc96d 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 cc2ce27e6..75ad02373 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 d2f802906..8ef77e74e 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 296bcb2ee..a8ccfb7d8 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/29] 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 18c277f06..a50bd8612 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 a8ccfb7d8..1da25c8cb 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 fedc2d7c4..e1b474452 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 000000000..53750799c --- /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 -- 2.40.1 From e47e5b9ec4dd040f99890730668c3c20620deff5 Mon Sep 17 00:00:00 2001 From: jgallego Date: Tue, 19 Jan 2021 11:32:47 +0100 Subject: [PATCH 15/29] 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 59b51075e..000000000 --- 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 000000000..3c3eae190 --- /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 2f5d3af63..d1021ae42 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)) -- 2.40.1 From a6dfdc971afc6cfd1bbe002641cb237be424197d Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 20 Jan 2021 13:54:55 +0100 Subject: [PATCH 16/29] 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 000000000..9b08a302f --- /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 ; -- 2.40.1 From 9fc14c70ae6f0a21512a67aeefdda7fbd3ac0f0a Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 10:25:25 +0100 Subject: [PATCH 17/29] 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 b37dfb9a3..02976a973 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 1da25c8cb..89ec3b049 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 e1b474452..dfda85ca7 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() { -- 2.40.1 From a53231c72132f4f758fa28e2179f3aead6f94a73 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 10:44:43 +0100 Subject: [PATCH 18/29] 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 1e55ac1a2..ef7055c3d 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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 -- 2.40.1 From bf9f5bba49963e59f71ece41c3130e5e43418c1b Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 11:02:48 +0100 Subject: [PATCH 19/29] 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 18b3ae52b..86befe2ea 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 20c797575..7eca36e4d 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" -- 2.40.1 From 90c6d2fe3e7d87d7477565ccbcffd63b4535bb62 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 21 Jan 2021 11:30:22 +0100 Subject: [PATCH 20/29] 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 f8afe706c..83b8aded6 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 3c3eae190..000000000 --- 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 d955e6ec8..000000000 --- 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 40e47b1a3..9c07c4a7e 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 -- 2.40.1 From 161514582dd27dbf7c286c79888d63a23f938998 Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 22 Jan 2021 14:41:40 +0100 Subject: [PATCH 21/29] 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 8ef77e74e..59bf8f52a 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: { -- 2.40.1 From 93417e96766605bf7bf4276531dd464b6458316b Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 22 Jan 2021 14:45:02 +0100 Subject: [PATCH 22/29] 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 9c07c4a7e..f16d77b22 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 02976a973..99e5c67f3 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 dfda85ca7..f5d6e7abf 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!'))); } -- 2.40.1 From 16931693c7563b5d5d73bd78bce2dd6ae9d7fc44 Mon Sep 17 00:00:00 2001 From: jgallego Date: Fri, 22 Jan 2021 15:46:03 +0100 Subject: [PATCH 23/29] 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 1e500ab11..26b20ef48 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 99e5c67f3..400bc8505 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 a68f6c8a6..90015be19 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(); -- 2.40.1 From 54a2ea31fa99ffd3107c4ca0b27fdd54dc63cb48 Mon Sep 17 00:00:00 2001 From: joan Date: Mon, 25 Jan 2021 09:21:27 +0100 Subject: [PATCH 24/29] #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 a50bd8612..56b30667e 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); } } } -- 2.40.1 From 22af1ce989d50fe4fff15d6e896d1b0b7f2702ae Mon Sep 17 00:00:00 2001 From: carlosjr Date: Mon, 25 Jan 2021 15:27:57 +0100 Subject: [PATCH 25/29] 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 ae19d93ad..f59904d8f 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 7595957c4..19d8208b7 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!'); -- 2.40.1 From 4b302915b56d0c6ddf669eecd6f2dc85f66279d1 Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 27 Jan 2021 09:14:37 +0100 Subject: [PATCH 26/29] 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 400bc8505..88b7bfb5b 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) { -- 2.40.1 From 0e0ff94b43d232e872d292a294f04e4d4deeb8b0 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Fri, 29 Jan 2021 16:33:23 +0100 Subject: [PATCH 27/29] 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 f59904d8f..2d54e31d6 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 19d8208b7..4917937fa 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'); -- 2.40.1 From ebbeee6af4987cb555cd32b8bbf083209f96af28 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Mon, 1 Feb 2021 09:52:16 +0100 Subject: [PATCH 28/29] 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 2d54e31d6..3fdbb47f4 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 4c6799dcb..2292898b5 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(); -- 2.40.1 From a08c5c6ff744e9ad9d1132a2e48d76dd9ff64769 Mon Sep 17 00:00:00 2001 From: jgallego Date: Mon, 1 Feb 2021 10:51:17 +0100 Subject: [PATCH 29/29] 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 f5d6e7abf..22426a269 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 ac9c39d7f..468ac98c3 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"> -- 2.40.1