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}}