diff --git a/modules/entry/back/methods/entry/latestBuysFilter.js b/modules/entry/back/methods/entry/latestBuysFilter.js index 7711bc0f1..0c8ce3f99 100644 --- a/modules/entry/back/methods/entry/latestBuysFilter.js +++ b/modules/entry/back/methods/entry/latestBuysFilter.js @@ -39,6 +39,11 @@ module.exports = Self => { type: 'integer', description: 'The buyer of the item', }, + { + arg: 'supplierFk', + type: 'integer', + description: 'The supplier of the item', + }, { arg: 'active', type: 'boolean', @@ -99,6 +104,8 @@ module.exports = Self => { return {'ic.id': value}; case 'salesPersonFk': return {'it.workerFk': value}; + case 'supplierFk': + return {'s.id': value}; case 'code': return {'it.code': value}; case 'active': @@ -172,7 +179,9 @@ module.exports = Self => { LEFT JOIN itemCategory ic ON ic.id = it.categoryFk LEFT JOIN itemType t ON t.id = i.typeFk LEFT JOIN intrastat intr ON intr.id = i.intrastatFk - LEFT JOIN origin ori ON ori.id = i.originFk` + LEFT JOIN origin ori ON ori.id = i.originFk + LEFT JOIN entry e ON e.id = b.entryFk AND e.created >= DATE_SUB(CURDATE(),INTERVAL 1 YEAR) + LEFT JOIN supplier s ON s.id = e.supplierFk` ); if (ctx.args.tags) { diff --git a/modules/entry/back/methods/entry/specs/latestBuysFilter.spec.js b/modules/entry/back/methods/entry/specs/latestBuysFilter.spec.js index f386894dd..bdd302adb 100644 --- a/modules/entry/back/methods/entry/specs/latestBuysFilter.spec.js +++ b/modules/entry/back/methods/entry/specs/latestBuysFilter.spec.js @@ -136,5 +136,17 @@ describe('Buy latests buys filter()', () => { expect(results.length).toBe(1); }); + + it('should return results matching "supplierFk"', async() => { + let ctx = { + args: { + supplierFk: 1 + } + }; + + let results = await app.models.Buy.latestBuysFilter(ctx); + + expect(results.length).toBe(2); + }); }); diff --git a/modules/entry/front/latest-buys-search-panel/index.html b/modules/entry/front/latest-buys-search-panel/index.html index 4693141f8..7d570f798 100644 --- a/modules/entry/front/latest-buys-search-panel/index.html +++ b/modules/entry/front/latest-buys-search-panel/index.html @@ -46,6 +46,17 @@ where="{role: {inq: ['logistic', 'buyer']}}" label="Buyer"> + + {{name}}: {{nickname}} + { type: 'integer', description: 'The buyer of the item', }, + { + arg: 'supplierFk', + type: 'integer', + description: 'The supplier of the item', + }, { arg: 'description', type: 'string', @@ -119,6 +124,8 @@ module.exports = Self => { return {'ic.id': value}; case 'buyerFk': return {'it.workerFk': value}; + case 'supplierFk': + return {'s.id': value}; case 'origin': return {'ori.code': value}; case 'intrastat': @@ -169,7 +176,9 @@ module.exports = Self => { LEFT JOIN producer pr ON pr.id = i.producerFk LEFT JOIN origin ori ON ori.id = i.originFk LEFT JOIN cache.last_buy lb ON lb.item_id = i.id AND lb.warehouse_id = it.warehouseFk - LEFT JOIN vn.buy b ON b.id = lb.buy_id` + LEFT JOIN buy b ON b.id = lb.buy_id + LEFT JOIN entry e ON e.id = b.entryFk + LEFT JOIN supplier s ON s.id = e.supplierFk` ); if (ctx.args.tags) { diff --git a/modules/item/back/methods/item/specs/filter.spec.js b/modules/item/back/methods/item/specs/filter.spec.js index 7b1fac9ac..30bdcec32 100644 --- a/modules/item/back/methods/item/specs/filter.spec.js +++ b/modules/item/back/methods/item/specs/filter.spec.js @@ -79,4 +79,44 @@ describe('item filter()', () => { throw e; } }); + + it('should return 2 result filtering by buyerFk', async() => { + const tx = await models.Item.beginTransaction({}); + const options = {transaction: tx}; + + try { + const filter = {}; + const ctx = {args: {filter: filter, buyerFk: 16}}; + const result = await models.Item.filter(ctx, filter, options); + + expect(result.length).toEqual(2); + expect(result[0].id).toEqual(16); + expect(result[1].id).toEqual(71); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); + + it('should return 2 result filtering by supplierFk', async() => { + const tx = await models.Item.beginTransaction({}); + const options = {transaction: tx}; + + try { + const filter = {}; + const ctx = {args: {filter: filter, supplierFk: 1}}; + const result = await models.Item.filter(ctx, filter, options); + + expect(result.length).toEqual(2); + expect(result[0].id).toEqual(1); + expect(result[1].id).toEqual(3); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); }); diff --git a/modules/item/front/search-panel/index.html b/modules/item/front/search-panel/index.html index 57f05bb54..7cbe9c56d 100644 --- a/modules/item/front/search-panel/index.html +++ b/modules/item/front/search-panel/index.html @@ -43,10 +43,21 @@ ng-model="filter.buyerFk" url="Items/activeBuyers" show-field="nickname" - search-function="{firstName: $search}" + search-function="{nickname: {like: '%'+ $search +'%'}}" value-field="workerFk" label="Buyer"> + + {{name}}: {{nickname}} +