From b40b8d931d6f3a12972b5883634b908bf6d98c93 Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 2 May 2022 11:18:39 +0200 Subject: [PATCH] feat(client_credit): remove de old rows --- .../10460-MothersDay/00-clientConfig.sql | 5 +++ db/dump/fixtures.sql | 4 +- modules/client/back/model-config.json | 3 ++ modules/client/back/models/client-config.json | 22 ++++++++++ modules/client/back/models/client-credit.js | 27 ++++++++++++ .../back/models/specs/clientCredit.spec.js | 44 +++++++++++++++++++ 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 db/changes/10460-MothersDay/00-clientConfig.sql create mode 100644 modules/client/back/models/client-config.json create mode 100644 modules/client/back/models/client-credit.js create mode 100644 modules/client/back/models/specs/clientCredit.spec.js diff --git a/db/changes/10460-MothersDay/00-clientConfig.sql b/db/changes/10460-MothersDay/00-clientConfig.sql new file mode 100644 index 0000000000..cd67a57976 --- /dev/null +++ b/db/changes/10460-MothersDay/00-clientConfig.sql @@ -0,0 +1,5 @@ +ALTER TABLE `vn`.`clientConfig` ADD `maxCreditRows` int(11) NULL COMMENT 'Máximo número de registros a mantener en la tabla clientCredit'; + +UPDATE `vn`.`clientConfig` + SET `maxCreditRows` = 10 + WHERE `id` = 1; \ No newline at end of file diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index 0849e67084..1da08156c6 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -342,9 +342,9 @@ INSERT INTO `vn`.`clientManaCache`(`clientFk`, `mana`, `dated`) (1103, 0, DATE_ADD(CURDATE(), INTERVAL -1 MONTH)), (1104, -30, DATE_ADD(CURDATE(), INTERVAL -1 MONTH)); -INSERT INTO `vn`.`clientConfig`(`riskTolerance`) +INSERT INTO `vn`.`clientConfig`(`riskTolerance`, `maxCreditRows`) VALUES - (200); + (200, 10); INSERT INTO `vn`.`address`(`id`, `nickname`, `street`, `city`, `postalCode`, `provinceFk`, `phone`, `mobile`, `isActive`, `clientFk`, `agencyModeFk`, `longitude`, `latitude`, `isEqualizated`, `isDefaultAddress`) VALUES diff --git a/modules/client/back/model-config.json b/modules/client/back/model-config.json index b6bf715b1b..4feb3b1688 100644 --- a/modules/client/back/model-config.json +++ b/modules/client/back/model-config.json @@ -14,6 +14,9 @@ "Client": { "dataSource": "vn" }, + "ClientConfig": { + "dataSource": "vn" + }, "ClientContact": { "dataSource": "vn" }, diff --git a/modules/client/back/models/client-config.json b/modules/client/back/models/client-config.json new file mode 100644 index 0000000000..9d4228ede1 --- /dev/null +++ b/modules/client/back/models/client-config.json @@ -0,0 +1,22 @@ +{ + "name": "ClientConfig", + "base": "VnModel", + "options": { + "mysql": { + "table": "clientConfig" + } + }, + "properties": { + "id": { + "type": "Number", + "id": true, + "description": "Identifier" + }, + "riskTolerance": { + "type": "Number" + }, + "maxCreditRows": { + "type": "Number" + } + } +} \ No newline at end of file diff --git a/modules/client/back/models/client-credit.js b/modules/client/back/models/client-credit.js new file mode 100644 index 0000000000..587ca0adcd --- /dev/null +++ b/modules/client/back/models/client-credit.js @@ -0,0 +1,27 @@ +module.exports = Self => { + Self.observe('after save', async ctx => { + const instance = ctx.instance; + const models = Self.app.models; + + const clientConfig = await models.ClientConfig.findOne({ + where: {id: 1} + }); + const maxCreditRows = clientConfig.maxCreditRows; + + const clientCredit = await models.ClientCredit.find({ + where: {clientFk: instance.clientFk}, + order: 'created DESC' + }); + + if (clientCredit.length > maxCreditRows) { + const creditToDestroy = []; + for (const [index, credit] of clientCredit.entries()) { + if (index >= maxCreditRows) + creditToDestroy.push(credit.id); + } + await models.ClientCredit.destroyAll({ + id: {inq: creditToDestroy} + }); + } + }); +}; diff --git a/modules/client/back/models/specs/clientCredit.spec.js b/modules/client/back/models/specs/clientCredit.spec.js new file mode 100644 index 0000000000..db5004e5c8 --- /dev/null +++ b/modules/client/back/models/specs/clientCredit.spec.js @@ -0,0 +1,44 @@ +const models = require('vn-loopback/server/server').models; + +describe('Client Credit', () => { + const instance = {id: 1101, name: 'Bruce Banner'}; + + describe('after save', () => { + it('should delete old rows of clientCredit', async() => { + const tx = await models.ClientCredit.beginTransaction({}); + const clientConfig = await models.ClientConfig.findOne({ + where: {id: 1} + }); + let rowsBefore; + let rowsAfter; + + try { + const options = {transaction: tx}; + const context = {options}; + + rowsBefore = await models.ClientCredit.find({ + where: {clientFk: instance.id} + }, options); + + const salesAssistant = await models.Account.findOne({ + where: {name: 'salesAssistant'} + }, options); + context.options.accessToken = {userId: salesAssistant.id}; + + await models.Client.changeCredit(context, instance, {credit: 350}); + + rowsAfter = await models.ClientCredit.find({ + where: {clientFk: instance.id} + }, options); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + + expect(rowsBefore.length).toEqual(11); + expect(rowsAfter.length).toEqual(clientConfig.maxCreditRows); + }); + }); +});