From 2469540f661c906e107ef4ad4a671a857f55eaac Mon Sep 17 00:00:00 2001 From: carlosjr Date: Wed, 30 Jun 2021 10:48:19 +0200 Subject: [PATCH 1/3] item category filter is now working again --- .../back/methods/invoiceOut/filter.js | 24 +++--- modules/item/back/methods/item/filter.js | 81 +++++++++++-------- .../back/methods/item/specs/filter.spec.js | 63 +++++++++++---- modules/item/front/index/index.html | 6 +- 4 files changed, 111 insertions(+), 63 deletions(-) diff --git a/modules/invoiceOut/back/methods/invoiceOut/filter.js b/modules/invoiceOut/back/methods/invoiceOut/filter.js index 5df3f76b8..3496c9296 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/filter.js +++ b/modules/invoiceOut/back/methods/invoiceOut/filter.js @@ -10,73 +10,73 @@ module.exports = Self => { accepts: [ { arg: 'filter', - type: 'Object', + type: 'object', description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', http: {source: 'query'} }, { arg: 'search', - type: 'String', + type: 'string', description: 'Searchs the invoiceOut by id', http: {source: 'query'} }, { arg: 'clientFk', - type: 'Integer', + type: 'integer', description: 'The client id', http: {source: 'query'} }, { arg: 'fi', - type: 'String', + type: 'string', description: 'The client fiscal id', http: {source: 'query'} }, { arg: 'hasPdf', - type: 'Boolean', + type: 'boolean', description: 'Whether the the invoiceOut has PDF or not', http: {source: 'query'} }, { arg: 'amount', - type: 'Number', + type: 'number', description: 'The amount filter', http: {source: 'query'} }, { arg: 'min', - type: 'Number', + type: 'number', description: 'The minimun amount flter', http: {source: 'query'} }, { arg: 'max', - type: 'Number', + type: 'number', description: 'The maximun amount flter', http: {source: 'query'} }, { arg: 'issued', - type: 'Date', + type: 'date', description: 'The issued date filter', http: {source: 'query'} }, { arg: 'created', - type: 'Date', + type: 'date', description: 'The created date filter', http: {source: 'query'} }, { arg: 'dued', - type: 'Date', + type: 'date', description: 'The due date filter', http: {source: 'query'} } ], returns: { - type: ['Object'], + type: ['object'], root: true }, http: { diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js index eba0b0f91..1c7b6cd77 100644 --- a/modules/item/back/methods/item/filter.js +++ b/modules/item/back/methods/item/filter.js @@ -10,48 +10,57 @@ module.exports = Self => { accepts: [ { arg: 'filter', - type: 'Object', + type: 'object', description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string', - }, { + }, + { arg: 'tags', - type: ['Object'], + type: ['object'], description: 'List of tags to filter with', - }, { + }, + { arg: 'search', - type: 'String', + type: 'string', description: `If it's and integer searchs by id, otherwise it searchs by name`, - }, { + }, + { arg: 'id', - type: 'Integer', + type: 'integer', description: 'Item id', - }, { + }, + { arg: 'categoryFk', - type: 'Integer', + type: 'integer', description: 'Category id', - }, { + }, + { arg: 'typeFk', - type: 'Integer', + type: 'integer', description: 'Type id', - }, { + }, + { arg: 'isActive', - type: 'Boolean', + type: 'boolean', description: 'Whether the the item is or not active', - }, { + }, + { arg: 'salesPersonFk', - type: 'Integer', + type: 'integer', description: 'The buyer of the item', - }, { + }, + { arg: 'description', - type: 'String', + type: 'string', description: 'The item description', - }, { + }, + { arg: 'stemMultiplier', - type: 'Integer', + type: 'integer', description: 'The item multiplier', } ], returns: { - type: ['Object'], + type: ['object'], root: true }, http: { @@ -60,23 +69,28 @@ module.exports = Self => { } }); - Self.filter = async(ctx, filter) => { - let conn = Self.dataSource.connector; + Self.filter = async(ctx, filter, options) => { + const conn = Self.dataSource.connector; + let myOptions = {}; + + if (typeof options == 'object') + Object.assign(myOptions, options); + let codeWhere; if (ctx.args.search) { - let items = await Self.app.models.ItemBarcode.find({ + const items = await Self.app.models.ItemBarcode.find({ where: {code: ctx.args.search}, fields: ['itemFk'] - }); - let itemIds = []; + }, myOptions); + const itemIds = []; for (const item of items) itemIds.push(item.itemFk); codeWhere = {'i.id': {inq: itemIds}}; } - let where = buildFilter(ctx.args, (param, value) => { + const where = buildFilter(ctx.args, (param, value) => { switch (param) { case 'search': return /^\d+$/.test(value) @@ -90,8 +104,8 @@ module.exports = Self => { return {'i.stemMultiplier': value}; case 'typeFk': return {'i.typeFk': value}; - case 'category': - return {'ic.name': value}; + case 'categoryFk': + return {'ic.id': value}; case 'salesPersonFk': return {'it.workerFk': value}; case 'origin': @@ -104,7 +118,7 @@ module.exports = Self => { }); filter = mergeFilters(filter, {where}); - let stmts = []; + const stmts = []; let stmt; stmt = new ParameterizedSQL( @@ -130,7 +144,7 @@ module.exports = Self => { it.workerFk AS buyerFk, u.name AS userName, ori.code AS origin, - ic.name AS category, + ic.name AS categoryFk, intr.description AS intrastat, b.grouping, b.packing, @@ -173,9 +187,10 @@ module.exports = Self => { stmt.merge(conn.makeWhere(filter.where)); stmt.merge(conn.makePagination(filter)); - let itemsIndex = stmts.push(stmt) - 1; - let sql = ParameterizedSQL.join(stmts, ';'); - let result = await conn.executeStmt(sql); + const itemsIndex = stmts.push(stmt) - 1; + const sql = ParameterizedSQL.join(stmts, ';'); + const result = await conn.executeStmt(sql, myOptions); + return itemsIndex === 0 ? result : result[itemsIndex]; }; }; diff --git a/modules/item/back/methods/item/specs/filter.spec.js b/modules/item/back/methods/item/specs/filter.spec.js index 72175ccc4..340bc0db2 100644 --- a/modules/item/back/methods/item/specs/filter.spec.js +++ b/modules/item/back/methods/item/specs/filter.spec.js @@ -2,29 +2,62 @@ const app = require('vn-loopback/server/server'); describe('item filter()', () => { it('should return 1 result filtering by id', async() => { - let filter = {}; - let result = await app.models.Item.filter({args: {filter: filter, search: 1}}); + const tx = await app.models.Item.beginTransaction({}); + const options = {transaction: tx}; - expect(result.length).toEqual(1); - expect(result[0].id).toEqual(1); + try { + const filter = {}; + const ctx = {args: {filter: filter, search: 1}}; + const result = await app.models.Item.filter(ctx, filter, options); + + expect(result.length).toEqual(1); + expect(result[0].id).toEqual(1); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } }); it('should return 1 result filtering by barcode', async() => { - let filter = {}; - let result = await app.models.Item.filter({args: {filter: filter, search: 4444444444}}); + const tx = await app.models.Item.beginTransaction({}); + const options = {transaction: tx}; - expect(result.length).toEqual(1); - expect(result[0].id).toEqual(2); + try { + const filter = {}; + const ctx = {args: {filter: filter, search: 4444444444}}; + const result = await app.models.Item.filter(ctx, filter, options); + + expect(result.length).toEqual(1); + expect(result[0].id).toEqual(2); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } }); it('should return 2 results using filter and tags', async() => { - let filter = { - order: 'isActive ASC, name', - limit: 8 - }; - let tags = [{value: 'medical box', tagFk: 58}]; - let result = await app.models.Item.filter({args: {filter: filter, typeFk: 5, tags: tags}}); + const tx = await app.models.Item.beginTransaction({}); + const options = {transaction: tx}; - expect(result.length).toEqual(2); + try { + const filter = { + order: 'isActive ASC, name', + limit: 8 + }; + const tags = [{value: 'medical box', tagFk: 58}]; + const ctx = {args: {filter: filter, typeFk: 5, tags: tags}}; + const result = await app.models.Item.filter(ctx, filter, options); + + expect(result.length).toEqual(2); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } }); }); diff --git a/modules/item/front/index/index.html b/modules/item/front/index/index.html index bcebaee48..b119e68f5 100644 --- a/modules/item/front/index/index.html +++ b/modules/item/front/index/index.html @@ -20,7 +20,7 @@ Size Niche Type - Category + Category Intrastat Origin Buyer @@ -67,8 +67,8 @@ {{::item.typeName}} - - {{::item.category}} + + {{::item.categoryFk}} {{::item.intrastat}} From 243636ccf6445856d0726262041be60d95a7ab74 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 1 Jul 2021 12:34:30 +0200 Subject: [PATCH 2/3] item category name as category --- modules/item/back/methods/item/filter.js | 2 +- modules/item/front/index/index.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js index 1c7b6cd77..dca808aa3 100644 --- a/modules/item/back/methods/item/filter.js +++ b/modules/item/back/methods/item/filter.js @@ -144,7 +144,7 @@ module.exports = Self => { it.workerFk AS buyerFk, u.name AS userName, ori.code AS origin, - ic.name AS categoryFk, + ic.name AS category, intr.description AS intrastat, b.grouping, b.packing, diff --git a/modules/item/front/index/index.html b/modules/item/front/index/index.html index b119e68f5..713eba6a9 100644 --- a/modules/item/front/index/index.html +++ b/modules/item/front/index/index.html @@ -67,8 +67,8 @@ {{::item.typeName}} - - {{::item.categoryFk}} + + {{::item.category}} {{::item.intrastat}} From be850571d996a179efedfe1442376c42fc4ffb79 Mon Sep 17 00:00:00 2001 From: carlosjr Date: Thu, 1 Jul 2021 13:14:36 +0200 Subject: [PATCH 3/3] updated the field name --- modules/item/front/index/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/item/front/index/index.html b/modules/item/front/index/index.html index 713eba6a9..bcebaee48 100644 --- a/modules/item/front/index/index.html +++ b/modules/item/front/index/index.html @@ -20,7 +20,7 @@ Size Niche Type - Category + Category Intrastat Origin Buyer