diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql
index 1ea4fa114..06c6f64f3 100644
--- a/db/dump/fixtures.sql
+++ b/db/dump/fixtures.sql
@@ -1779,7 +1779,7 @@ INSERT INTO `vn`.`claimDestination`(`id`, `description`, `addressFk`)
INSERT INTO `vn`.`claimDevelopment`(`id`, `claimFk`, `claimResponsibleFk`, `workerFk`, `claimReasonFk`, `claimResultFk`, `claimRedeliveryFk`, `claimDestinationFk`)
VALUES
(1, 1, 1, 21, 1, 1, 2, 5),
- (2, 1, 1, 21, 7, 2, 2, 5),
+ (2, 1, 2, 21, 7, 2, 2, 5),
(3, 2, 7, 21, 9, 3, 2, 5),
(4, 3, 7, 21, 15, 8, 2, 5),
(5, 4, 7, 21, 7, 8, 2, 5);
diff --git a/modules/claim/back/methods/claim/filter.js b/modules/claim/back/methods/claim/filter.js
index e86830200..d653229e5 100644
--- a/modules/claim/back/methods/claim/filter.js
+++ b/modules/claim/back/methods/claim/filter.js
@@ -23,7 +23,7 @@ module.exports = Self => {
{
arg: 'search',
type: 'string',
- description: `If it's and integer searchs by id, otherwise it searchs by client name`,
+ description: `If it's a number searchs by id, otherwise it searchs by client name`,
http: {source: 'query'}
},
{
@@ -34,31 +34,31 @@ module.exports = Self => {
},
{
arg: 'id',
- type: 'integer',
+ type: 'number',
description: 'The claim id',
http: {source: 'query'}
},
{
arg: 'clientFk',
- type: 'integer',
+ type: 'number',
description: 'The client id',
http: {source: 'query'}
},
{
arg: 'claimStateFk',
- type: 'integer',
+ type: 'number',
description: 'The claim state id',
http: {source: 'query'}
},
{
arg: 'salesPersonFk',
- type: 'integer',
+ type: 'number',
description: 'The salesPerson id',
http: {source: 'query'}
},
{
arg: 'attenderFk',
- type: 'integer',
+ type: 'number',
description: 'The attender worker id',
http: {source: 'query'}
},
@@ -67,6 +67,18 @@ module.exports = Self => {
type: 'date',
description: 'The to date filter',
http: {source: 'query'}
+ },
+ {
+ arg: 'itemFk',
+ type: 'number',
+ description: 'The item id',
+ http: {source: 'query'}
+ },
+ {
+ arg: 'claimResponsibleFk',
+ type: 'number',
+ description: 'The claimResponsible id',
+ http: {source: 'query'}
}
],
returns: {
@@ -80,33 +92,58 @@ module.exports = Self => {
});
Self.filter = async(ctx, filter, options) => {
+ const models = Self.app.models;
const conn = Self.dataSource.connector;
+ const args = ctx.args;
const myOptions = {};
let to;
if (typeof options == 'object')
Object.assign(myOptions, options);
- const where = buildFilter(ctx.args, (param, value) => {
+ let claimIdsByItemFk = [];
+ let claimIdsByClaimResponsibleFk = [];
+
+ if (args.itemFk) {
+ query = `SELECT cb.claimFk
+ FROM claimBeginning cb
+ LEFT JOIN sale s ON s.id = cb.saleFk
+ WHERE s.itemFk = ?`;
+ const claims = await Self.rawSql(query, [args.itemFk], myOptions);
+ claimIdsByItemFk = claims.map(claim => claim.claimFk);
+ }
+
+ if (args.claimResponsibleFk) {
+ const claims = await models.ClaimDevelopment.find({
+ fields: ['claimFk'],
+ where: {claimResponsibleFk: args.claimResponsibleFk}
+ }, myOptions);
+ claimIdsByClaimResponsibleFk = claims.map(claim => claim.claimFk);
+ }
+
+ const where = buildFilter(args, (param, value) => {
switch (param) {
case 'search':
return /^\d+$/.test(value)
? {'cl.id': value}
: {
or: [
- {'cl.clientName': {like: `%${value}%`}}
+ {'c.name': {like: `%${value}%`}}
]
};
case 'clientName':
- return {'cl.clientName': {like: `%${value}%`}};
+ return {'c.name': {like: `%${value}%`}};
case 'clientFk':
- return {'cl.clientFk': value};
case 'id':
case 'claimStateFk':
case 'priority':
return {[`cl.${param}`]: value};
+ case 'itemFk':
+ return {'cl.id': {inq: claimIdsByItemFk}};
+ case 'claimResponsibleFk':
+ return {'cl.id': {inq: claimIdsByClaimResponsibleFk}};
case 'salesPersonFk':
- return {'cl.salesPersonFk': value};
+ return {'c.salesPersonFk': value};
case 'attenderFk':
return {'cl.workerFk': value};
case 'created':
@@ -118,29 +155,23 @@ module.exports = Self => {
}
});
- filter = mergeFilters(ctx.args.filter, {where});
+ filter = mergeFilters(args.filter, {where});
const stmts = [];
const stmt = new ParameterizedSQL(
- `SELECT *
- FROM (
- SELECT
- cl.id,
- cl.clientFk,
- c.name AS clientName,
- cl.workerFk,
- u.name AS workerName,
- cs.description,
- cl.created,
- cs.priority,
- cl.claimStateFk,
- c.salesPersonFk
- FROM claim cl
- LEFT JOIN client c ON c.id = cl.clientFk
- LEFT JOIN worker w ON w.id = cl.workerFk
- LEFT JOIN account.user u ON u.id = w.userFk
- LEFT JOIN claimState cs ON cs.id = cl.claimStateFk ) cl`
+ `SELECT
+ cl.id,
+ cl.clientFk,
+ c.name AS clientName,
+ cl.workerFk,
+ u.name AS workerName,
+ cs.description,
+ cl.created
+ FROM claim cl
+ LEFT JOIN client c ON c.id = cl.clientFk
+ LEFT JOIN account.user u ON u.id = cl.workerFk
+ LEFT JOIN claimState cs ON cs.id = cl.claimStateFk`
);
stmt.merge(conn.makeSuffix(filter));
diff --git a/modules/claim/back/methods/claim/specs/filter.spec.js b/modules/claim/back/methods/claim/specs/filter.spec.js
index b26afe8c4..49e258505 100644
--- a/modules/claim/back/methods/claim/specs/filter.spec.js
+++ b/modules/claim/back/methods/claim/specs/filter.spec.js
@@ -57,4 +57,44 @@ describe('claim filter()', () => {
throw e;
}
});
+
+ it('should return 3 results filtering by item id', async() => {
+ const tx = await app.models.Claim.beginTransaction({});
+
+ try {
+ const options = {transaction: tx};
+
+ const result = await app.models.Claim.filter({args: {filter: {}, itemFk: 2}}, null, options);
+
+ expect(result.length).toEqual(3);
+ expect(result[0].id).toEqual(1);
+ expect(result[1].id).toEqual(2);
+ expect(result[2].id).toEqual(4);
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+
+ it('should return 3 results filtering by claimResponsible id', async() => {
+ const tx = await app.models.Claim.beginTransaction({});
+
+ try {
+ const options = {transaction: tx};
+
+ const result = await app.models.Claim.filter({args: {filter: {}, claimResponsibleFk: 7}}, null, options);
+
+ expect(result.length).toEqual(3);
+ expect(result[0].id).toEqual(2);
+ expect(result[1].id).toEqual(3);
+ expect(result[2].id).toEqual(4);
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
});
diff --git a/modules/claim/front/search-panel/index.html b/modules/claim/front/search-panel/index.html
index eec8cd727..151a06c8e 100644
--- a/modules/claim/front/search-panel/index.html
+++ b/modules/claim/front/search-panel/index.html
@@ -58,8 +58,28 @@
ng-model="filter.created">
+
+
+ {{::id}} - {{::name}}
+
+
+
+
-
\ No newline at end of file
+
diff --git a/modules/claim/front/search-panel/index.js b/modules/claim/front/search-panel/index.js
index a7e8fb046..2400b8ede 100644
--- a/modules/claim/front/search-panel/index.js
+++ b/modules/claim/front/search-panel/index.js
@@ -1,7 +1,14 @@
import ngModule from '../module';
import SearchPanel from 'core/components/searchbar/search-panel';
+class Controller extends SearchPanel {
+ itemSearchFunc($search) {
+ return /^\d+$/.test($search)
+ ? {id: $search}
+ : {name: {like: '%' + $search + '%'}};
+ }
+}
ngModule.vnComponent('vnClaimSearchPanel', {
template: require('./index.html'),
- controller: SearchPanel
+ controller: Controller
});