From f27420c14aa21db5cbb0dde0fe0366ad9479cc2a Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Tue, 16 Nov 2021 13:56:09 +0100
Subject: [PATCH] refactor(item): activeBuyers

---
 modules/item/back/methods/item/active.js      | 42 -----------------
 .../item/back/methods/item/activeBuyers.js    | 45 +++++++++++++++++++
 .../item/back/methods/item/activeWithBuyer.js | 35 ---------------
 modules/item/back/methods/item/filter.js      |  2 +-
 modules/item/back/models/item.js              |  3 +-
 modules/item/front/search-panel/index.html    |  7 ++-
 6 files changed, 50 insertions(+), 84 deletions(-)
 delete mode 100644 modules/item/back/methods/item/active.js
 create mode 100644 modules/item/back/methods/item/activeBuyers.js
 delete mode 100644 modules/item/back/methods/item/activeWithBuyer.js

diff --git a/modules/item/back/methods/item/active.js b/modules/item/back/methods/item/active.js
deleted file mode 100644
index 4537ab9943..0000000000
--- a/modules/item/back/methods/item/active.js
+++ /dev/null
@@ -1,42 +0,0 @@
-const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
-const buildFilter = require('vn-loopback/util/filter').buildFilter;
-const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
-
-module.exports = Self => {
-    Self.activeWorkers = async(query, filter) => {
-        let conn = Self.dataSource.connector;
-        if (filter.where && filter.where.and && Array.isArray(filter.where.and)) {
-            let where = {};
-            filter.where.and.forEach(element => {
-                where[Object.keys(element)[0]] = Object.values(element)[0];
-            });
-            filter.where = where;
-        }
-        let clientFilter = Object.assign({}, filter);
-        clientFilter.where = buildFilter(filter.where, (param, value) => {
-            switch (param) {
-            case 'role':
-                return {'r.name': value};
-            case 'firstName':
-                return {or: [
-                    {'w.firstName': {like: `%${value}%`}},
-                    {'w.lastName': {like: `%${value}%`}},
-                    {'u.name': {like: `%${value}%`}},
-                    {'u.nickname': {like: `%${value}%`}}
-                ]};
-            case 'id':
-                return {'w.id': value};
-            }
-        });
-
-        let myFilter = {
-            where: {'u.active': true}
-        };
-
-        myFilter = mergeFilters(myFilter, clientFilter);
-
-        let stmt = new ParameterizedSQL(query);
-        stmt.merge(conn.makeSuffix(myFilter));
-        return conn.executeStmt(stmt);
-    };
-};
diff --git a/modules/item/back/methods/item/activeBuyers.js b/modules/item/back/methods/item/activeBuyers.js
new file mode 100644
index 0000000000..ed19dd46be
--- /dev/null
+++ b/modules/item/back/methods/item/activeBuyers.js
@@ -0,0 +1,45 @@
+const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
+const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
+
+module.exports = Self => {
+    Self.remoteMethod('activeBuyers', {
+        description: 'Returns a list of agencies from a warehouse',
+        accepts: [{
+            arg: 'filter',
+            type: 'object',
+            description: `Filter defining where, order, offset, and limit - must be a JSON-encoded string`
+        }],
+        returns: {
+            type: ['object'],
+            root: true
+        },
+        http: {
+            path: `/activeBuyers`,
+            verb: 'GET'
+        }
+    });
+
+    Self.activeBuyers = async(filter, options) => {
+        const conn = Self.dataSource.connector;
+        const where = {isActive: true};
+        let myOptions = {};
+
+        if (typeof options == 'object')
+            Object.assign(myOptions, options);
+
+        filter = mergeFilters(filter, {where});
+
+        let stmt = new ParameterizedSQL(
+            `SELECT DISTINCT w.id workerFk, w.firstName, w.lastName, u.name, u.nickname
+                FROM worker w
+                    JOIN itemType it ON it.workerFk = w.id
+                    JOIN account.user u ON u.id = w.id
+                    JOIN item i ON i.typeFk = it.id`,
+            null, myOptions);
+
+        stmt.merge(conn.makeSuffix(filter));
+        console.log(stmt);
+
+        return conn.executeStmt(stmt);
+    };
+};
diff --git a/modules/item/back/methods/item/activeWithBuyer.js b/modules/item/back/methods/item/activeWithBuyer.js
deleted file mode 100644
index 121079aaa3..0000000000
--- a/modules/item/back/methods/item/activeWithBuyer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-module.exports = Self => {
-    Self.remoteMethod('activeWithBuyer', {
-        description: 'Returns active workers in itemType',
-        accessType: 'READ',
-        accepts: [{
-            arg: 'filter',
-            type: 'Object',
-            description: 'Filter defining where and paginated data',
-            required: false
-        }],
-        returns: {
-            type: ['object'],
-            root: true
-        },
-        http: {
-            path: `/activeWithBuyer`,
-            verb: 'GET'
-        }
-    });
-
-    Self.activeWithBuyer = async(filter, options) => {
-        const myOptions = {};
-
-        if (typeof options == 'object')
-            Object.assign(myOptions, options);
-
-        const query =
-                `SELECT DISTINCT w.id, w.firstName, w.lastName, u.name, u.nickname
-                    FROM worker w
-                        JOIN itemType i ON i.workerFk = w.id
-                        JOIN account.user u ON u.id = w.id`;
-
-        return Self.activeWorkers(query, filter, myOptions);
-    };
-};
diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js
index 8cfefac9f0..99152467a7 100644
--- a/modules/item/back/methods/item/filter.js
+++ b/modules/item/back/methods/item/filter.js
@@ -44,7 +44,7 @@ module.exports = Self => {
                 description: 'Whether the the item is or not active',
             },
             {
-                arg: 'salesPersonFk',
+                arg: 'buyerFk',
                 type: 'integer',
                 description: 'The buyer of the item',
             },
diff --git a/modules/item/back/models/item.js b/modules/item/back/models/item.js
index 887aa0a116..457cce4f2f 100644
--- a/modules/item/back/models/item.js
+++ b/modules/item/back/models/item.js
@@ -14,8 +14,7 @@ module.exports = Self => {
     require('../methods/item/getWasteByWorker')(Self);
     require('../methods/item/getWasteByItem')(Self);
     require('../methods/item/createIntrastat')(Self);
-    require('../methods/item/active')(Self);
-    require('../methods/item/activeWithBuyer')(Self);
+    require('../methods/item/activeBuyers')(Self);
 
     Self.validatesPresenceOf('originFk', {message: 'Cannot be blank'});
 
diff --git a/modules/item/front/search-panel/index.html b/modules/item/front/search-panel/index.html
index 29b2a24fc5..2a8f52827f 100644
--- a/modules/item/front/search-panel/index.html
+++ b/modules/item/front/search-panel/index.html
@@ -40,12 +40,11 @@
         <vn-horizontal>
             <vn-autocomplete 
                 vn-one
-                disabled="false"
-                ng-model="filter.salesPersonFk"
-                url="Items/activeWithBuyer"
+                ng-model="filter.buyerFk"
+                url="Items/activeBuyers"
                 show-field="nickname"
                 search-function="{firstName: $search}"
-                value-field="id"
+                value-field="workerFk"
                 label="Buyer">
             </vn-autocomplete>
         </vn-horizontal>