diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index f0a5c37b5..bb141de8e 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -305,11 +305,11 @@ export default { anyCreditInsuranceLine: 'vn-client-credit-insurance-insurance-index vn-tbody > vn-tr', }, clientDefaulter: { - anyClient: 'vn-client-defaulter-index vn-tbody > vn-tr', - firstClientName: 'vn-client-defaulter-index vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(2) > span', - firstSalesPersonName: 'vn-client-defaulter-index vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(3) > span', - firstObservation: 'vn-client-defaulter-index vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(6) > vn-textarea[ng-model="defaulter.observation"]', - allDefaulterCheckbox: 'vn-client-defaulter-index vn-thead vn-multi-check', + anyClient: 'vn-client-defaulter-index tbody > tr', + firstClientName: 'vn-client-defaulter-index tbody > tr:nth-child(1) > td:nth-child(2) > span', + firstSalesPersonName: 'vn-client-defaulter-index tbody > tr:nth-child(1) > td:nth-child(3) > span', + firstObservation: 'vn-client-defaulter-index tbody > tr:nth-child(1) > td:nth-child(6) > vn-textarea[ng-model="defaulter.observation"]', + allDefaulterCheckbox: 'vn-client-defaulter-index thead vn-multi-check', addObservationButton: 'vn-client-defaulter-index vn-button[icon="icon-notes"]', observation: '.vn-dialog.shown vn-textarea[ng-model="$ctrl.defaulter.observation"]', saveButton: 'button[response="accept"]' diff --git a/e2e/paths/02-client/21_defaulter.spec.js b/e2e/paths/02-client/21_defaulter.spec.js index 89b5c5761..3630a958a 100644 --- a/e2e/paths/02-client/21_defaulter.spec.js +++ b/e2e/paths/02-client/21_defaulter.spec.js @@ -28,8 +28,8 @@ describe('Client defaulter path', () => { const salesPersonName = await page.waitToGetProperty(selectors.clientDefaulter.firstSalesPersonName, 'innerText'); - expect(clientName).toEqual('Ororo Munroe'); - expect(salesPersonName).toEqual('salesPerson'); + expect(clientName).toEqual('Batman'); + expect(salesPersonName).toEqual('salesPersonNick'); }); it('should first observation not changed', async() => { @@ -65,6 +65,7 @@ describe('Client defaulter path', () => { it('should first observation changed', async() => { const message = await page.waitForSnackbar(); + await page.waitForSelector(selectors.clientDefaulter.firstObservation); const result = await page.waitToGetProperty(selectors.clientDefaulter.firstObservation, 'value'); expect(message.text).toContain('Observation saved!'); diff --git a/modules/client/back/methods/defaulter/filter.js b/modules/client/back/methods/defaulter/filter.js index c06d1c51b..095b9b1c1 100644 --- a/modules/client/back/methods/defaulter/filter.js +++ b/modules/client/back/methods/defaulter/filter.js @@ -56,18 +56,18 @@ module.exports = Self => { FROM ( SELECT DISTINCT c.id clientFk, - c.name clientName, + c.socialName clientName, c.salesPersonFk, - u.name salesPersonName, + u.nickname salesPersonName, d.amount, co.created, - CONCAT(DATE(co.created), ' ', co.text) observation, + co.text observation, uw.id workerFk, - uw.name workerName, + uw.nickname workerName, c.creditInsurance, d.defaulterSinced FROM vn.defaulter d - JOIN vn.client c ON c.id = d.clientFk + JOIN vn.client c ON c.id = d.clientFk LEFT JOIN vn.clientObservation co ON co.clientFk = c.id LEFT JOIN account.user u ON u.id = c.salesPersonFk LEFT JOIN account.user uw ON uw.id = co.workerFk diff --git a/modules/client/back/methods/defaulter/specs/filter.spec.js b/modules/client/back/methods/defaulter/specs/filter.spec.js index 145bb5132..ca14d1e43 100644 --- a/modules/client/back/methods/defaulter/specs/filter.spec.js +++ b/modules/client/back/methods/defaulter/specs/filter.spec.js @@ -47,12 +47,12 @@ describe('defaulter filter()', () => { try { const options = {transaction: tx}; - const ctx = {req: {accessToken: {userId: authUserId}}, args: {search: 'bruce'}}; + const ctx = {req: {accessToken: {userId: authUserId}}, args: {search: 'spider'}}; const result = await models.Defaulter.filter(ctx, null, options); const firstRow = result[0]; - expect(firstRow.clientName).toEqual('Bruce Wayne'); + expect(firstRow.clientName).toEqual('Spider man'); await tx.rollback(); } catch (e) { diff --git a/modules/client/front/defaulter/index.html b/modules/client/front/defaulter/index.html index 121556df2..59f7b7d67 100644 --- a/modules/client/front/defaulter/index.html +++ b/modules/client/front/defaulter/index.html @@ -15,17 +15,18 @@ model="model"> - - - -
+ + + +
Total
+ value="{{$ctrl.balanceDueTotal | currency: 'EUR': 2}}">
@@ -38,90 +39,109 @@ icon="icon-notes">
-
- - - - - - - - Client - Comercial - - Balance D. - - - Author - - Last observation - - Credit I. - - From - - - - - - - - - - - {{::defaulter.clientName}} - - - - - {{::defaulter.salesPersonName | dashIfEmpty}} - - - {{::defaulter.amount}} - - - {{::defaulter.workerName | dashIfEmpty}} - - - - - - - {{::defaulter.creditInsurance}} - {{::defaulter.defaulterSinced | date: 'dd/MM/yyyy'}} - - - -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Client + + Comercial + + Balance D. + + Author + + Last observation + + Last observation D. + + Credit I. + + From +
+ + + + + {{::defaulter.clientName}} + + + + {{::defaulter.salesPersonName | dashIfEmpty}} + + {{::defaulter.amount | currency: 'EUR': 2}} + + {{::defaulter.workerName | dashIfEmpty}} + + + + + + + {{::defaulter.created | date: 'dd/MM/yyyy'}} + + {{::defaulter.creditInsurance | currency: 'EUR': 2}}{{::defaulter.defaulterSinced | date: 'dd/MM/yyyy'}}
+
+ + + vn-id="client-descriptor"> + vn-id="worker-descriptor"> - - - - - Filter by selection - - - Exclude selection - - - Remove filter - - - Remove all filters - - - Copy value - - - - 0) { - for (let defaulter of this.checked) - balanceDueTotal += defaulter.amount; - - return balanceDueTotal; - } + for (let defaulter of defaulters) + balanceDueTotal += defaulter.amount; return balanceDueTotal; } @@ -32,6 +76,22 @@ export default class Controller extends Section { return checkedLines; } + chipColor(date) { + const day = 24 * 60 * 60 * 1000; + const today = new Date(); + today.setHours(0, 0, 0, 0); + + const observationShipped = new Date(date); + observationShipped.setHours(0, 0, 0, 0); + + const difference = today - observationShipped; + + if (difference > (day * 20)) + return 'alert'; + if (difference > (day * 10)) + return 'warning'; + } + onResponse() { if (!this.defaulter.observation) throw new UserError(`The message can't be empty`); @@ -52,7 +112,10 @@ export default class Controller extends Section { exprBuilder(param, value) { switch (param) { + case 'creditInsurance': + case 'amount': case 'clientName': + case 'workerFk': case 'salesPersonFk': return {[`d.${param}`]: value}; } diff --git a/modules/client/front/defaulter/index.spec.js b/modules/client/front/defaulter/index.spec.js index 6428952ec..8d6c8c307 100644 --- a/modules/client/front/defaulter/index.spec.js +++ b/modules/client/front/defaulter/index.spec.js @@ -39,11 +39,7 @@ describe('client defaulter', () => { describe('balanceDueTotal() getter', () => { it('should return balance due total', () => { const data = controller.$.model.data; - data[1].checked = true; - data[2].checked = true; - - const checkedRows = controller.checked; - const expectedAmount = checkedRows[0].amount + checkedRows[1].amount; + const expectedAmount = data[0].amount + data[1].amount + data[2].amount; const result = controller.balanceDueTotal; @@ -51,6 +47,31 @@ describe('client defaulter', () => { }); }); + describe('chipColor()', () => { + it('should return undefined when the date is the present', () => { + let today = new Date(); + let result = controller.chipColor(today); + + expect(result).toEqual(undefined); + }); + + it('should return warning when the date is 10 days in the past', () => { + let pastDate = new Date(); + pastDate = pastDate.setDate(pastDate.getDate() - 11); + let result = controller.chipColor(pastDate); + + expect(result).toEqual('warning'); + }); + + it('should return alert when the date is 20 days in the past', () => { + let pastDate = new Date(); + pastDate = pastDate.setDate(pastDate.getDate() - 21); + let result = controller.chipColor(pastDate); + + expect(result).toEqual('alert'); + }); + }); + describe('onResponse()', () => { it('should return error for empty message', () => { let error; diff --git a/modules/client/front/defaulter/locale/es.yml b/modules/client/front/defaulter/locale/es.yml index 172a3125d..3f046e8d6 100644 --- a/modules/client/front/defaulter/locale/es.yml +++ b/modules/client/front/defaulter/locale/es.yml @@ -1,7 +1,9 @@ -Last observation: Última observación Add observation: Añadir observación -Search client: Buscar clientes Add observation to all selected clients: Añadir observación a {{total}} cliente(s) seleccionado(s) -Credit I.: Crédito A. Balance D.: Saldo V. +Credit I.: Crédito A. +Last observation: Última observación +Last observation D.: Fecha última O. +Last observation date: Fecha última observación +Search client: Buscar clientes Worker who made the last observation: Trabajador que ha realizado la última observación \ No newline at end of file