From b57106af483b482776f62aec82798d78d3c985f6 Mon Sep 17 00:00:00 2001 From: carlossa Date: Tue, 14 Nov 2023 11:13:33 +0100 Subject: [PATCH 1/7] refs #6291 validateTin --- modules/worker/back/models/worker.js | 21 +++++++++++++++++++++ modules/worker/front/create/index.js | 1 + 2 files changed, 22 insertions(+) diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js index 985d83e9f..8fb4c8a02 100644 --- a/modules/worker/back/models/worker.js +++ b/modules/worker/back/models/worker.js @@ -23,4 +23,25 @@ module.exports = Self => { Self.validatesUniquenessOf('locker', { message: 'This locker has already been assigned' }); + + Self.validateAsync('fi', tinIsValid, { + message: 'Invalid TIN' + }); + + async function tinIsValid(err, done) { + if (!this.isTaxDataChecked) + return done(); + + const filter = { + fields: ['code'], + where: {id: this.countryFk} + }; + const country = await Self.app.models.Country.findOne(filter); + const code = country ? country.code.toLowerCase() : null; + const countryCode = this.fi?.toLowerCase().substring(0, 2); + + if (!this.fi || !validateTin(this.fi, code) || (this.isVies && countryCode == code)) + err(); + done(); + } }; diff --git a/modules/worker/front/create/index.js b/modules/worker/front/create/index.js index e6d65221f..b112fc06f 100644 --- a/modules/worker/front/create/index.js +++ b/modules/worker/front/create/index.js @@ -1,5 +1,6 @@ import ngModule from '../module'; import Section from 'salix/components/section'; +const validateTin = require('vn-loopback/util/validateTin'); export default class Controller extends Section { constructor($element, $) { -- 2.40.1 From 7c6798c56426d38b09b2cad9f21b33a3a0e07dd0 Mon Sep 17 00:00:00 2001 From: carlossa Date: Tue, 21 Nov 2023 16:25:48 +0100 Subject: [PATCH 2/7] refs #6291 dni vn-user --- back/models/vn-user.js | 22 ++++++++++++++++++++++ modules/worker/back/models/worker.js | 21 --------------------- modules/worker/front/create/index.js | 1 - 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/back/models/vn-user.js b/back/models/vn-user.js index de5bf7b63..5ab0c755e 100644 --- a/back/models/vn-user.js +++ b/back/models/vn-user.js @@ -2,6 +2,7 @@ const vnModel = require('vn-loopback/common/models/vn-model'); const {Email} = require('vn-print'); const ForbiddenError = require('vn-loopback/util/forbiddenError'); const LoopBackContext = require('loopback-context'); +const validateTin = require('vn-loopback/util/validateTin'); module.exports = function(Self) { vnModel(Self); @@ -19,6 +20,27 @@ module.exports = function(Self) { // Validations + Self.validateAsync('fi', tinIsValid, { + message: 'Invalid TIN' + }); + + async function tinIsValid(err, done) { + if (!this.isTaxDataChecked) + return done(); + + const filter = { + fields: ['code'], + where: {id: this.countryFk} + }; + const country = await Self.app.models.Country.findOne(filter); + const code = country ? country.code.toLowerCase() : null; + const countryCode = this.fi?.toLowerCase().substring(0, 2); + + if (!this.fi || !validateTin(this.fi, code) || (this.isVies && countryCode == code)) + err(); + done(); + } + Self.validatesFormatOf('email', { message: 'Invalid email', allowNull: true, diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js index 8fb4c8a02..985d83e9f 100644 --- a/modules/worker/back/models/worker.js +++ b/modules/worker/back/models/worker.js @@ -23,25 +23,4 @@ module.exports = Self => { Self.validatesUniquenessOf('locker', { message: 'This locker has already been assigned' }); - - Self.validateAsync('fi', tinIsValid, { - message: 'Invalid TIN' - }); - - async function tinIsValid(err, done) { - if (!this.isTaxDataChecked) - return done(); - - const filter = { - fields: ['code'], - where: {id: this.countryFk} - }; - const country = await Self.app.models.Country.findOne(filter); - const code = country ? country.code.toLowerCase() : null; - const countryCode = this.fi?.toLowerCase().substring(0, 2); - - if (!this.fi || !validateTin(this.fi, code) || (this.isVies && countryCode == code)) - err(); - done(); - } }; diff --git a/modules/worker/front/create/index.js b/modules/worker/front/create/index.js index b112fc06f..e6d65221f 100644 --- a/modules/worker/front/create/index.js +++ b/modules/worker/front/create/index.js @@ -1,6 +1,5 @@ import ngModule from '../module'; import Section from 'salix/components/section'; -const validateTin = require('vn-loopback/util/validateTin'); export default class Controller extends Section { constructor($element, $) { -- 2.40.1 From 6416891918354820969fa2c0768b2a6a04976531 Mon Sep 17 00:00:00 2001 From: carlossa Date: Wed, 13 Dec 2023 13:55:31 +0100 Subject: [PATCH 3/7] refs #6291 tinIsValid worker --- back/models/vn-user.js | 22 ------------------- .../08-route/03_create_and_clone.spec.js | 2 +- modules/worker/back/models/worker.js | 19 ++++++++++++++++ 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/back/models/vn-user.js b/back/models/vn-user.js index 5ab0c755e..de5bf7b63 100644 --- a/back/models/vn-user.js +++ b/back/models/vn-user.js @@ -2,7 +2,6 @@ const vnModel = require('vn-loopback/common/models/vn-model'); const {Email} = require('vn-print'); const ForbiddenError = require('vn-loopback/util/forbiddenError'); const LoopBackContext = require('loopback-context'); -const validateTin = require('vn-loopback/util/validateTin'); module.exports = function(Self) { vnModel(Self); @@ -20,27 +19,6 @@ module.exports = function(Self) { // Validations - Self.validateAsync('fi', tinIsValid, { - message: 'Invalid TIN' - }); - - async function tinIsValid(err, done) { - if (!this.isTaxDataChecked) - return done(); - - const filter = { - fields: ['code'], - where: {id: this.countryFk} - }; - const country = await Self.app.models.Country.findOne(filter); - const code = country ? country.code.toLowerCase() : null; - const countryCode = this.fi?.toLowerCase().substring(0, 2); - - if (!this.fi || !validateTin(this.fi, code) || (this.isVies && countryCode == code)) - err(); - done(); - } - Self.validatesFormatOf('email', { message: 'Invalid email', allowNull: true, diff --git a/e2e/paths/08-route/03_create_and_clone.spec.js b/e2e/paths/08-route/03_create_and_clone.spec.js index 0b8da98b4..31c0cfc18 100644 --- a/e2e/paths/08-route/03_create_and_clone.spec.js +++ b/e2e/paths/08-route/03_create_and_clone.spec.js @@ -26,7 +26,7 @@ describe('Route create path', () => { await page.waitToClick(selectors.createRouteView.submitButton); const message = await page.waitForSnackbar(); - expect(message.text).toContain('Access denied'); + expect(message.text).toContain('Access Denied'); }); }); diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js index 985d83e9f..48ff1da12 100644 --- a/modules/worker/back/models/worker.js +++ b/modules/worker/back/models/worker.js @@ -1,4 +1,5 @@ module.exports = Self => { + const validateTin = require('vn-loopback/util/validateTin'); require('../methods/worker/filter')(Self); require('../methods/worker/mySubordinates')(Self); require('../methods/worker/isSubordinate')(Self); @@ -23,4 +24,22 @@ module.exports = Self => { Self.validatesUniquenessOf('locker', { message: 'This locker has already been assigned' }); + + Self.validateAsync('fi', tinIsValid, { + message: 'Invalid TIN' + }); + + async function tinIsValid(err, done) { + const filter = { + fields: ['code'], + where: {id: this.countryFk} + }; + const country = await Self.app.models.Country.findOne(filter); + const code = country ? country.code.toLowerCase() : null; + const countryCode = this.fi?.toLowerCase().substring(0, 2); + + if (!this.fi || !validateTin(this.fi, code) || (this.isVies && countryCode == code)) + err(); + done(); + } }; -- 2.40.1 From 22a9ffc1638d279a4d55d86c50f4b3a1f997342b Mon Sep 17 00:00:00 2001 From: carlossa Date: Mon, 18 Dec 2023 12:33:04 +0100 Subject: [PATCH 4/7] refs #6291 dni --- db/dump/fixtures.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 499336243..44e6f9843 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -2994,3 +2994,13 @@ INSERT INTO `vn`.`invoiceCorrectionType` (`id`, `description`) (1, 'Error in VAT calculation'), (2, 'Error in sales details'), (3, 'Error in customer data'); + +UPDATE `vn`.`client` + SET fi='65004204V' + WHERE id=1; + +UPDATE `vn`.`client` + SET fi='59328808D' + WHERE id=1106; + + -- 2.40.1 From c4ff4c198420b1565075b931a4635a9182838f7e Mon Sep 17 00:00:00 2001 From: carlossa Date: Thu, 21 Dec 2023 15:07:03 +0100 Subject: [PATCH 5/7] refs #6291 tin valid --- modules/worker/back/models/worker.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js index 48ff1da12..841b610ea 100644 --- a/modules/worker/back/models/worker.js +++ b/modules/worker/back/models/worker.js @@ -34,12 +34,17 @@ module.exports = Self => { fields: ['code'], where: {id: this.countryFk} }; + const country = await Self.app.models.Country.findOne(filter); const code = country ? country.code.toLowerCase() : null; - const countryCode = this.fi?.toLowerCase().substring(0, 2); + const client = (await Self.findById(this.id, { + include: {relation: 'client'}}))?.client(); + if (client) { + const countryCode = client.fi?.toLowerCase().substring(0, 2); - if (!this.fi || !validateTin(this.fi, code) || (this.isVies && countryCode == code)) - err(); + if (!client.fi || !validateTin(client.fi, code) || countryCode == code) + err(); + } done(); } }; -- 2.40.1 From c77715d865713bcc8aa77692e1813397b60738cf Mon Sep 17 00:00:00 2001 From: carlossa Date: Tue, 26 Dec 2023 15:03:10 +0100 Subject: [PATCH 6/7] refs #6291 validation original --- db/dump/fixtures.sql | 2 +- modules/worker/back/models/worker.js | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index a63a7d314..2b339e191 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -3014,7 +3014,7 @@ UPDATE `vn`.`client` SET fi='65004204V' WHERE id=1; -UPDATE `vn`.`client` +UPDATE `vn`.`worker` SET fi='59328808D' WHERE id=1106; diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js index 841b610ea..712f2b09d 100644 --- a/modules/worker/back/models/worker.js +++ b/modules/worker/back/models/worker.js @@ -34,17 +34,12 @@ module.exports = Self => { fields: ['code'], where: {id: this.countryFk} }; - const country = await Self.app.models.Country.findOne(filter); const code = country ? country.code.toLowerCase() : null; - const client = (await Self.findById(this.id, { - include: {relation: 'client'}}))?.client(); - if (client) { - const countryCode = client.fi?.toLowerCase().substring(0, 2); + const countryCode = this.fi?.toLowerCase().substring(0, 2); - if (!client.fi || !validateTin(client.fi, code) || countryCode == code) - err(); - } + if (!this.fi || !validateTin(this.fi, code) || countryCode == code) + err(); done(); } }; -- 2.40.1 From 3fbead7473e79bfd01e519f4113309d2365f2112 Mon Sep 17 00:00:00 2001 From: carlossa Date: Wed, 3 Jan 2024 13:44:20 +0100 Subject: [PATCH 7/7] refs #6291 fix tinIsValid --- modules/worker/back/models/worker.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/worker/back/models/worker.js b/modules/worker/back/models/worker.js index 712f2b09d..b475bf26e 100644 --- a/modules/worker/back/models/worker.js +++ b/modules/worker/back/models/worker.js @@ -36,9 +36,8 @@ module.exports = Self => { }; const country = await Self.app.models.Country.findOne(filter); const code = country ? country.code.toLowerCase() : null; - const countryCode = this.fi?.toLowerCase().substring(0, 2); - if (!this.fi || !validateTin(this.fi, code) || countryCode == code) + if (!this.fi || !validateTin(this.fi, code)) err(); done(); } -- 2.40.1