feat: buscar por responsibleFk sin afectar a la consulta principal
gitea/salix/pipeline/head There was a failure building this commit Details

This commit is contained in:
Vicent Llopis 2022-12-12 12:08:30 +01:00
parent 4c0effc48a
commit 9bcef08397
1 changed files with 45 additions and 30 deletions

View File

@ -93,33 +93,34 @@ module.exports = Self => {
Self.filter = async(ctx, filter, options) => { Self.filter = async(ctx, filter, options) => {
const conn = Self.dataSource.connector; const conn = Self.dataSource.connector;
const args = ctx.args;
const myOptions = {}; const myOptions = {};
let to; let to;
if (typeof options == 'object') if (typeof options == 'object')
Object.assign(myOptions, options); Object.assign(myOptions, options);
const where = buildFilter(ctx.args, (param, value) => { const where = buildFilter(args, (param, value) => {
switch (param) { switch (param) {
case 'search': case 'search':
return /^\d+$/.test(value) return /^\d+$/.test(value)
? {'cl.id': value} ? {'cl.id': value}
: { : {
or: [ or: [
{'cl.clientName': {like: `%${value}%`}} {'c.name': {like: `%${value}%`}}
] ]
}; };
case 'clientName': case 'clientName':
return {'cl.clientName': {like: `%${value}%`}}; return {'c.name': {like: `%${value}%`}};
case 'clientFk': case 'clientFk':
case 'id': case 'id':
case 'claimStateFk': case 'claimStateFk':
case 'itemFk':
case 'claimResponsibleFk':
case 'priority': case 'priority':
return {[`cl.${param}`]: value}; return {[`cl.${param}`]: value};
case 'itemFk':
return {[`s.${param}`]: value};
case 'salesPersonFk': case 'salesPersonFk':
return {'cl.salesPersonFk': value}; return {'c.salesPersonFk': value};
case 'attenderFk': case 'attenderFk':
return {'cl.workerFk': value}; return {'cl.workerFk': value};
case 'created': case 'created':
@ -131,36 +132,50 @@ module.exports = Self => {
} }
}); });
filter = mergeFilters(ctx.args.filter, {where}); filter = mergeFilters(args.filter, {where});
const stmts = []; const stmts = [];
const stmt = new ParameterizedSQL( const stmt = new ParameterizedSQL(
`SELECT * `SELECT
FROM ( cl.id,
SELECT DISTINCT cl.clientFk,
cl.id, c.name AS clientName,
cl.clientFk, cl.workerFk,
c.name AS clientName, u.name AS workerName,
cl.workerFk, cs.description,
u.name AS workerName, cl.created,
cs.description, cs.priority,
cl.created, cl.claimStateFk,
cs.priority, c.salesPersonFk,
cl.claimStateFk, s.itemFk
c.salesPersonFk, FROM claim cl
s.itemFk, LEFT JOIN client c ON c.id = cl.clientFk
cd.claimResponsibleFk LEFT JOIN worker w ON w.id = cl.workerFk
FROM claim cl LEFT JOIN account.user u ON u.id = w.userFk
LEFT JOIN client c ON c.id = cl.clientFk LEFT JOIN claimState cs ON cs.id = cl.claimStateFk
LEFT JOIN worker w ON w.id = cl.workerFk LEFT JOIN claimBeginning cb ON cb.claimFk = cl.id
LEFT JOIN account.user u ON u.id = w.userFk LEFT JOIN sale s ON s.id = cb.saleFk`
LEFT JOIN claimState cs ON cs.id = cl.claimStateFk
LEFT JOIN claimBeginning cb ON cb.claimFk = cl.id
LEFT JOIN sale s ON s.id = cb.saleFk
LEFT JOIN claimDevelopment cd ON cd.claimFk = cl.id ) cl`
); );
if (args.claimResponsibleFk) {
query = `SELECT cd.claimFk
FROM claimDevelopment cd
WHERE cd.claimResponsibleFk = ?`;
const claimDevelopments = await Self.rawSql(query, [args.claimResponsibleFk], myOptions);
const claimIds = claimDevelopments.map(claimDevelopment => {
return claimDevelopment.claimFk;
});
stmt.merge({
sql: `LEFT JOIN claimDevelopment cd ON cd.claimFk = cl.id
WHERE cl.id IN (?)
GROUP BY cl.id`,
params: [claimIds],
});
}
stmt.merge(conn.makeSuffix(filter)); stmt.merge(conn.makeSuffix(filter));
const itemsIndex = stmts.push(stmt) - 1; const itemsIndex = stmts.push(stmt) - 1;