diff --git a/e2e/paths/02-client/12_lock_of_verified_data.spec.js b/e2e/paths/02-client/12_lock_of_verified_data.spec.js index 95818abbf..8e2ff3b88 100644 --- a/e2e/paths/02-client/12_lock_of_verified_data.spec.js +++ b/e2e/paths/02-client/12_lock_of_verified_data.spec.js @@ -57,6 +57,8 @@ describe('Client lock verified data path', () => { }); it('should check the Verified data checkbox', async() => { + await page.autocompleteSearch(selectors.clientFiscalData.sageTax, 'operaciones no sujetas'); + await page.autocompleteSearch(selectors.clientFiscalData.sageTransaction, 'regularización de inversiones'); await page.waitToClick(selectors.clientFiscalData.verifiedDataCheckbox); await page.waitToClick(selectors.clientFiscalData.saveButton); await page.waitToClick(selectors.globalItems.acceptButton); diff --git a/gulpfile.js b/gulpfile.js index 61459c3fd..fe7ecbf03 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -21,6 +21,7 @@ let buildDir = 'dist'; let backSources = [ '!node_modules', + '!loopback/locale/*.json', 'loopback', 'modules/*/back/**', 'modules/*/back/*', diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 3dfb73833..172da6faf 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -81,5 +81,6 @@ "shipped": "Shipped", "landed": "Landed", "addressFk": "Address", - "companyFk": "Company" + "companyFk": "Company", + "You need to fill sage information before you check verified data": "You need to fill sage information before you check verified data" } \ No newline at end of file diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 580bd374f..958c06b6d 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -157,6 +157,5 @@ "landed": "F. entrega", "addressFk": "Consignatario", "companyFk": "Empresa", - "The social name cannot be empty": "La razón social no puede quedar en blanco", - "The nif cannot be empty": "El NIF no puede quedar en blanco" + "You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados" } \ No newline at end of file diff --git a/modules/client/back/methods/client/specs/updateFiscalData.spec.js b/modules/client/back/methods/client/specs/updateFiscalData.spec.js index 288183fb6..0b4425db6 100644 --- a/modules/client/back/methods/client/specs/updateFiscalData.spec.js +++ b/modules/client/back/methods/client/specs/updateFiscalData.spec.js @@ -2,9 +2,11 @@ const app = require('vn-loopback/server/server'); describe('Client updateFiscalData', () => { const clientId = 101; + const employeeId = 1; + const salesAssistantId = 21; + const administrativeId = 5; afterAll(async done => { - const clientId = 101; - const ctx = {req: {accessToken: {userId: 5}}}; + const ctx = {req: {accessToken: {userId: administrativeId}}}; ctx.args = {postcode: 46460}; await app.models.Client.updateFiscalData(ctx, clientId); @@ -12,8 +14,8 @@ describe('Client updateFiscalData', () => { done(); }); - it('should return an error if the user is not administrative and the isTaxDataChecked value is true', async() => { - const ctx = {req: {accessToken: {userId: 1}}}; + it('should return an error if the user is not salesAssistant and the isTaxDataChecked value is true', async() => { + const ctx = {req: {accessToken: {userId: employeeId}}}; ctx.args = {}; let error; @@ -22,11 +24,30 @@ describe('Client updateFiscalData', () => { error = e; }); - expect(error.message).toBeDefined(); + expect(error.message).toEqual(`You can't make changes on a client with verified data`); + }); + + it('should return an error if the salesAssistant did not fill the sage data before checking verified data', async() => { + const client = await app.models.Client.findById(clientId); + await client.updateAttribute('isTaxDataChecked', false); + + const ctx = {req: {accessToken: {userId: salesAssistantId}}}; + ctx.args = {isTaxDataChecked: true}; + + let error; + await app.models.Client.updateFiscalData(ctx, clientId) + .catch(e => { + error = e; + }); + + expect(error.message).toEqual('You need to fill sage information before you check verified data'); + + // Restores + await client.updateAttribute('isTaxDataChecked', true); }); it('should update the client fiscal data and return the count if changes made', async() => { - const ctx = {req: {accessToken: {userId: 5}}}; + const ctx = {req: {accessToken: {userId: administrativeId}}}; ctx.args = {postcode: 46680}; const client = await app.models.Client.findById(clientId); diff --git a/modules/client/back/methods/client/updateFiscalData.js b/modules/client/back/methods/client/updateFiscalData.js index 48cc6df88..a3d40a4d8 100644 --- a/modules/client/back/methods/client/updateFiscalData.js +++ b/modules/client/back/methods/client/updateFiscalData.js @@ -45,15 +45,15 @@ module.exports = Self => { }, { arg: 'sageTaxTypeFk', - type: 'number' + type: 'any' }, { arg: 'sageTransactionTypeFk', - type: 'number' + type: 'any' }, { arg: 'transferorFk', - type: 'number' + type: 'any' }, { arg: 'hasToInvoiceByAddress', @@ -118,6 +118,15 @@ module.exports = Self => { if (!isSalesAssistant && client.isTaxDataChecked) throw new UserError(`You can't make changes on a client with verified data`); + // Sage data validation + const taxDataChecked = args.isTaxDataChecked; + const sageTaxChecked = client.sageTaxTypeFk || args.sageTaxTypeFk; + const sageTransactionChecked = client.sageTransactionTypeFk || args.sageTransactionTypeFk; + const hasSageData = sageTaxChecked && sageTransactionChecked; + + if (taxDataChecked && !hasSageData) + throw new UserError(`You need to fill sage information before you check verified data`); + if (args.despiteOfClient) { const logRecord = { originFk: clientId, diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js index 01e5add6d..b894815b8 100644 --- a/modules/client/back/models/client.js +++ b/modules/client/back/models/client.js @@ -188,7 +188,7 @@ module.exports = Self => { // Validate socialName format const hasChanges = orgData && changes; - const socialName = changes.socialName || orgData.socialName; + const socialName = changes && changes.socialName || orgData && orgData.socialName; const isTaxDataChecked = hasChanges && (changes.isTaxDataChecked || orgData.isTaxDataChecked); const socialNameChanged = hasChanges diff --git a/modules/client/front/fiscal-data/index.html b/modules/client/front/fiscal-data/index.html index 83b82c9ea..0523f9fb6 100644 --- a/modules/client/front/fiscal-data/index.html +++ b/modules/client/front/fiscal-data/index.html @@ -39,7 +39,8 @@ label="Social name" ng-model="$ctrl.client.socialName" rule - info="You can use letters and spaces"> + info="You can use letters and spaces" + required="true">