From 578685e05e54017b2a74091960f65ecf533e5dba Mon Sep 17 00:00:00 2001
From: vicent <vicent@verdnatura.es>
Date: Fri, 18 Feb 2022 13:56:18 +0100
Subject: [PATCH 1/6] feat(client): add back route 'updatePortfolio'

---
 .../back/methods/client/updatePortfolio.js    | 20 +++++++++++++++++++
 modules/client/back/models/client.js          |  1 +
 modules/client/front/basic-data/index.html    |  3 ++-
 modules/client/front/basic-data/index.js      |  7 +++++++
 4 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 modules/client/back/methods/client/updatePortfolio.js

diff --git a/modules/client/back/methods/client/updatePortfolio.js b/modules/client/back/methods/client/updatePortfolio.js
new file mode 100644
index 0000000000..8224a8aa49
--- /dev/null
+++ b/modules/client/back/methods/client/updatePortfolio.js
@@ -0,0 +1,20 @@
+module.exports = function(Self) {
+    Self.remoteMethodCtx('updatePortfolio', {
+        description: 'Update salesPeson potfolio weight',
+        accessType: 'READ',
+        accepts: [],
+        returns: {
+            type: 'Object',
+            root: true
+        },
+        http: {
+            path: `/updatePortfolio`,
+            verb: 'GET'
+        }
+    });
+
+    Self.updatePortfolio = async() => {
+        query = `CALL bs.vendedores_updatePortfolio()`;
+        return await Self.rawSql(query);
+    };
+};
diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js
index e842c3ea10..9ec45f58dd 100644
--- a/modules/client/back/models/client.js
+++ b/modules/client/back/models/client.js
@@ -29,6 +29,7 @@ module.exports = Self => {
     require('../methods/client/updateAddress')(Self);
     require('../methods/client/consumption')(Self);
     require('../methods/client/createReceipt')(Self);
+    require('../methods/client/updatePortfolio')(Self);
 
     // Validations
 
diff --git a/modules/client/front/basic-data/index.html b/modules/client/front/basic-data/index.html
index a76b448f26..72d09ab49f 100644
--- a/modules/client/front/basic-data/index.html
+++ b/modules/client/front/basic-data/index.html
@@ -68,7 +68,8 @@
                 value-field="id"
                 where="{role: 'salesPerson'}"
                 label="Salesperson"
-                vn-acl="salesAssistant">
+                vn-acl="salesAssistant"
+                on-change="$ctrl.updatePortfolio()">
             </vn-autocomplete>
             <vn-autocomplete 
                 vn-one
diff --git a/modules/client/front/basic-data/index.js b/modules/client/front/basic-data/index.js
index 43b4b0b3b5..674484fd90 100644
--- a/modules/client/front/basic-data/index.js
+++ b/modules/client/front/basic-data/index.js
@@ -7,6 +7,13 @@ export default class Controller extends Section {
             ? {id: $search}
             : {name: {like: '%' + $search + '%'}};
     }
+
+    updatePortfolio() {
+        // if (this.newDiscount != claimedSale.discount) {
+        const query = `Clients/updatePortfolio`;
+        this.$http.get(query);
+        // }
+    }
 }
 
 ngModule.vnComponent('vnClientBasicData', {

From 9e06538fd0cab0bb1a74eec26b76b5d2752a64bb Mon Sep 17 00:00:00 2001
From: vicent <vicent@verdnatura.es>
Date: Wed, 23 Feb 2022 12:57:43 +0100
Subject: [PATCH 2/6] fix: execute updatePortfolio after submit changes

---
 modules/client/front/basic-data/index.html |  5 ++---
 modules/client/front/basic-data/index.js   | 10 +++++-----
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/modules/client/front/basic-data/index.html b/modules/client/front/basic-data/index.html
index 72d09ab49f..a5c8669790 100644
--- a/modules/client/front/basic-data/index.html
+++ b/modules/client/front/basic-data/index.html
@@ -10,7 +10,7 @@
     url="ContactChannels"
     data="contactChannels">
 </vn-crud-model>
-<form name="form" vn-http-submit="watcher.submit()" class="vn-w-md">
+<form name="form" vn-http-submit="$ctrl.onSubmit()" class="vn-w-md">
     <vn-card class="vn-pa-lg">
         <vn-horizontal>
             <vn-textfield
@@ -68,8 +68,7 @@
                 value-field="id"
                 where="{role: 'salesPerson'}"
                 label="Salesperson"
-                vn-acl="salesAssistant"
-                on-change="$ctrl.updatePortfolio()">
+                vn-acl="salesAssistant">
             </vn-autocomplete>
             <vn-autocomplete 
                 vn-one
diff --git a/modules/client/front/basic-data/index.js b/modules/client/front/basic-data/index.js
index 674484fd90..0557332895 100644
--- a/modules/client/front/basic-data/index.js
+++ b/modules/client/front/basic-data/index.js
@@ -8,11 +8,11 @@ export default class Controller extends Section {
             : {name: {like: '%' + $search + '%'}};
     }
 
-    updatePortfolio() {
-        // if (this.newDiscount != claimedSale.discount) {
-        const query = `Clients/updatePortfolio`;
-        this.$http.get(query);
-        // }
+    onSubmit() {
+        return this.$.watcher.submit().then(() => {
+            const query = `Clients/updatePortfolio`;
+            this.$http.get(query);
+        });
     }
 }
 

From dedecb492e640d81c974261d12329b89a6839abd Mon Sep 17 00:00:00 2001
From: vicent <vicent@verdnatura.es>
Date: Wed, 23 Feb 2022 12:58:01 +0100
Subject: [PATCH 3/6] sql modify

---
 .../00-vendedores_updatePortfolio.sql         | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)
 create mode 100644 db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql

diff --git a/db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql b/db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql
new file mode 100644
index 0000000000..f4c8fd7e83
--- /dev/null
+++ b/db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql
@@ -0,0 +1,30 @@
+DROP PROCEDURE IF EXISTS bs.vendedores_updatePortfolio;
+
+DELIMITER $$
+$$
+CREATE DEFINER=`root`@`localhost` PROCEDURE `bs`.`vendedores_updatePortfolio`()
+BEGIN
+	/**
+	 * Actualiza el campo portfolioWeight que indica el peso de la cartera del comercial
+	 *
+	 */  
+	DECLARE vStarted DATE DEFAULT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -17 MONTH), '%Y-%m-01');
+    
+	DELETE v
+		FROM vendedores v
+			JOIN vn.`time` t ON t.`year` = v.año AND t.`month` = v.mes 
+		WHERE t.dated BETWEEN vStarted AND CURDATE();
+	
+	INSERT INTO vendedores(Id_Trabajador, año, mes, portfolioWeight)
+		SELECT c.lastSalesPersonFk
+			, t.`year`
+			, t.`month`
+			, SUM(v.importe) 
+		FROM vn.`time` t
+			STRAIGHT_JOIN bs.ventas v ON t.dated = v.fecha
+			JOIN vn.`client` c ON c.id = v.Id_Cliente
+		WHERE c.lastSalesPersonFk IS NOT NULL
+			AND v.fecha BETWEEN vStarted AND CURDATE()
+		GROUP BY c.lastSalesPersonFk, t.`month`, t.`year`;
+END$$
+DELIMITER ;

From b3263fb97e5803173f7ba586bfd25db5d9e48e62 Mon Sep 17 00:00:00 2001
From: vicent <vicent@verdnatura.es>
Date: Wed, 23 Feb 2022 12:58:09 +0100
Subject: [PATCH 4/6] add fixtures

---
 db/dump/fixtures.sql | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql
index 07eaf23fdd..f3b55a9dc8 100644
--- a/db/dump/fixtures.sql
+++ b/db/dump/fixtures.sql
@@ -2443,3 +2443,16 @@ INSERT INTO `bs`.`defaulter` (`clientFk`, `amount`, `created`, `defaulterSinced`
         (1103,     500,    CURDATE(),  CURDATE()),
         (1107,     500,    CURDATE(),  CURDATE()),
         (1109,     500,    CURDATE(),  CURDATE());
+
+INSERT INTO `bs`.`vendedores` (`Id_Trabajador`, `año`, `mes`, `portfolioWeight`)
+    VALUES
+        (18,     YEAR(CURDATE()),    MONTH(CURDATE()),  807.23),
+        (19,     YEAR(CURDATE()),    MONTH(CURDATE()),  34.40);      
+
+INSERT INTO `bs`.`ventas` (`Id_Movimiento`, `importe`, `fecha`,  `tipo_id`, `Id_Cliente`)
+    VALUES
+        (1,     501.95,    CURDATE(),    2,  1101),
+        (2,     70.7,      CURDATE(),    2,  1101),
+        (3,     200.78,    CURDATE(),    2,  1101),
+        (4,     33.8,      CURDATE(),    1,  1101),
+        (30,    34.4,      CURDATE(),    1,  1108);

From ca40eee5ad7e8516a3d7e980af95d47d0a36522d Mon Sep 17 00:00:00 2001
From: vicent <vicent@verdnatura.es>
Date: Wed, 23 Feb 2022 14:53:49 +0100
Subject: [PATCH 5/6] feat: add backTest

---
 .../client/specs/updatePortfolio.spec.js      | 30 +++++++++++++++++++
 .../back/methods/order/specs/filter.spec.js   |  6 ++--
 2 files changed, 33 insertions(+), 3 deletions(-)
 create mode 100644 modules/client/back/methods/client/specs/updatePortfolio.spec.js

diff --git a/modules/client/back/methods/client/specs/updatePortfolio.spec.js b/modules/client/back/methods/client/specs/updatePortfolio.spec.js
new file mode 100644
index 0000000000..d2362cde92
--- /dev/null
+++ b/modules/client/back/methods/client/specs/updatePortfolio.spec.js
@@ -0,0 +1,30 @@
+const models = require('vn-loopback/server/server').models;
+
+describe('Client updatePortfolio', () => {
+    const salesPersonId = 18;
+    const clienId = 1108;
+    it('should update the portfolioWeight', async() => {
+        const tx = await models.Client.beginTransaction({});
+
+        try {
+            const options = {transaction: tx};
+
+            const expectedResult = 841.63;
+
+            const client = await models.Client.findById(clienId, null, options);
+            // await client.updateAttribute('salesPersonFk', 18);
+            await models.Client.rawSql(`UPDATE vn.client SET salesPersonFk = ${salesPersonId} WHERE id = ${clienId}; `);
+
+            await models.Client.updatePortfolio();
+
+            let [vendedores] = await models.Client.rawSql(`SELECT portfolioWeight FROM bs.vendedores WHERE Id_Trabajador = ${salesPersonId}; `, null, options);
+
+            expect(vendedores.portfolioWeight).toEqual(expectedResult);
+
+            await tx.rollback();
+        } catch (e) {
+            await tx.rollback();
+            throw e;
+        }
+    });
+});
diff --git a/modules/order/back/methods/order/specs/filter.spec.js b/modules/order/back/methods/order/specs/filter.spec.js
index 53b666c102..68de7fe04d 100644
--- a/modules/order/back/methods/order/specs/filter.spec.js
+++ b/modules/order/back/methods/order/specs/filter.spec.js
@@ -53,11 +53,11 @@ describe('order filter()', () => {
         try {
             const options = {transaction: tx};
 
-            const filter = {where: {'o.confirmed': false, 'c.salesPersonFk': 18}};
+            const filter = {where: {'o.confirmed': false, 'c.salesPersonFk': 9}};
             const result = await models.Order.filter(myCtx, filter, options);
 
-            expect(result.length).toEqual(9);
-            expect(result[0].id).toEqual(7);
+            expect(result.length).toEqual(4);
+            expect(result[0].id).toEqual(19);
 
             await tx.rollback();
         } catch (e) {

From 5ea8c5b06c9d7692adc0223181930a1676a7de4b Mon Sep 17 00:00:00 2001
From: vicent <vicent@verdnatura.es>
Date: Thu, 3 Mar 2022 11:38:32 +0100
Subject: [PATCH 6/6] delete vendedores_updatePortfolio.sql

---
 .../00-vendedores_updatePortfolio.sql         | 30 -------------------
 1 file changed, 30 deletions(-)
 delete mode 100644 db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql

diff --git a/db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql b/db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql
deleted file mode 100644
index f4c8fd7e83..0000000000
--- a/db/changes/14030-ashWednesday/00-vendedores_updatePortfolio.sql
+++ /dev/null
@@ -1,30 +0,0 @@
-DROP PROCEDURE IF EXISTS bs.vendedores_updatePortfolio;
-
-DELIMITER $$
-$$
-CREATE DEFINER=`root`@`localhost` PROCEDURE `bs`.`vendedores_updatePortfolio`()
-BEGIN
-	/**
-	 * Actualiza el campo portfolioWeight que indica el peso de la cartera del comercial
-	 *
-	 */  
-	DECLARE vStarted DATE DEFAULT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -17 MONTH), '%Y-%m-01');
-    
-	DELETE v
-		FROM vendedores v
-			JOIN vn.`time` t ON t.`year` = v.año AND t.`month` = v.mes 
-		WHERE t.dated BETWEEN vStarted AND CURDATE();
-	
-	INSERT INTO vendedores(Id_Trabajador, año, mes, portfolioWeight)
-		SELECT c.lastSalesPersonFk
-			, t.`year`
-			, t.`month`
-			, SUM(v.importe) 
-		FROM vn.`time` t
-			STRAIGHT_JOIN bs.ventas v ON t.dated = v.fecha
-			JOIN vn.`client` c ON c.id = v.Id_Cliente
-		WHERE c.lastSalesPersonFk IS NOT NULL
-			AND v.fecha BETWEEN vStarted AND CURDATE()
-		GROUP BY c.lastSalesPersonFk, t.`month`, t.`year`;
-END$$
-DELIMITER ;