fix: refs #6553 workerBusiness, workerDescriptor #3484

Merged
carlossa merged 4 commits from 6553-workerBusinessV2 into test 2025-02-25 08:14:14 +00:00
3 changed files with 259 additions and 0 deletions

View File

@ -0,0 +1,3 @@
-- Place your SQL code here
INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
VALUES ('Worker','getWorkerBusiness','READ','ALLOW','ROLE','hr');

View File

@ -0,0 +1,255 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const buildFilter = require('vn-loopback/util/filter').buildFilter;
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
module.exports = Self => {
Self.remoteMethodCtx('getWorkerBusiness', {
description: 'Returns an array of business from an specified worker',
accessType: 'READ',
accepts: [{
arg: 'id',
type: 'number',
required: true,
description: 'The worker id',
http: {source: 'path'}
},
{
arg: 'filter',
type: 'object',
description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string'
},
{
arg: 'started',
type: 'date',
description: 'started',
http: {source: 'query'}
},
{
arg: 'ended',
type: 'date',
description: 'ended',
http: {source: 'query'}
},
{
arg: 'companyCodeFk',
type: 'string',
description: 'companyCodeFk',
http: {source: 'query'}
},
{
arg: 'reasonEndFk',
type: 'number',
description: 'reasonEndFk',
http: {source: 'query'}
},
{
arg: 'reasondEnd',
type: 'string',
description: 'reasondEnd',
http: {source: 'query'}
},
{
arg: 'departmentFk',
type: 'number',
description: 'departmentFk',
http: {source: 'query'}
},
{
arg: 'department',
type: 'string',
description: 'department',
http: {source: 'query'}
},
{
arg: 'workerBusinessProfessionalCategoryFk',
type: 'number',
description: 'workerBusinessProfessionalCategoryFk',
http: {source: 'query'}
},
{
arg: 'workerBusinessProfessionalCategory',
type: 'string',
description: 'workerBusinessProfessionalCategory',
http: {source: 'query'}
},
{
arg: 'calendarTypeFk',
type: 'number',
description: 'calendarTypeFk',
http: {source: 'query'}
},
{
arg: 'calendarType',
type: 'string',
description: 'calendarType',
http: {source: 'query'}
},
{
arg: 'workcenterFk',
type: 'number',
description: 'workcenterFk',
http: {source: 'query'}
},
{
arg: 'workCenter',
type: 'string',
description: 'workCenter',
http: {source: 'query'}
},
{
arg: 'workerBusinessCategoryFk',
type: 'number',
description: 'WorkerBusinessCategoryFk',
http: {source: 'query'}
},
{
arg: 'workerBusinessCategory',
type: 'string',
description: 'workerBusinessCategory',
http: {source: 'query'}
},
{
arg: 'occupationCodeFk',
type: 'number',
description: 'occupationCodeFk',
http: {source: 'query'}
},
{
arg: 'occupationCode',
type: 'string',
description: 'occupationCode',
http: {source: 'query'}
},
{
arg: 'rate',
type: 'number',
description: 'rate',
http: {source: 'query'}
},
{
arg: 'workerBusinessTypeFk',
type: 'number',
description: 'workerBusinessTypeFk',
http: {source: 'query'}
},
{
arg: 'workerBusinessType',
type: 'string',
description: 'workerBusinessType',
http: {source: 'query'}
},
{
arg: 'amount',
type: 'number',
description: 'amount',
http: {source: 'query'}
},
{
arg: 'basicSalary',
type: 'number',
description: 'amount',
http: {source: 'query'}
},
{
arg: 'notes',
type: 'string',
description: 'notes',
http: {source: 'query'}
}],
returns: {
type: ['object'],
root: true
},
http: {
path: '/:id/getWorkerBusiness',
verb: 'GET'
}
});
Self.getWorkerBusiness = async(ctx, id, filter, options) => {
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
let conn = Self.dataSource.connector;
let where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'started':
case 'ended':
case 'companyCodeFk':
case 'reasonEndFk':
case 'reasondEnd':
case 'departmentFk':
case 'department':
case 'workerBusinessProfessionalCategoryFk':
case 'workerBusinessProfessionalCategory':
case 'calendarTypeFk':
case 'calendarType':
case 'workcenterFk':
case 'workCenter':
case 'workerBusinessCategoryFk':
case 'workerBusinessCategory':
case 'occupationCodeFk':
case 'occupationCode':
case 'rate':
case 'workerBusinessTypeFk':
case 'workerBusinessType':
case 'amount':
case 'basicSalary':
case 'notes':
}
});
where = {...where, ...{workerFk: id}};
filter = mergeFilters(filter, {where});
let stmts = [];
let stmt;
stmt = new ParameterizedSQL(
`SELECT * FROM(
carlossa marked this conversation as resolved
Review

perque hi ha un select i dins un altre?

perque hi ha un select i dins un altre?
Review

Per a no tindre que gestionar els alias en les taules, en entryBuys esta aixi també

Per a no tindre que gestionar els alias en les taules, en entryBuys esta aixi també
SELECT b.id,
b.workerFk,
b.started,
b.ended,
b.companyCodeFk,
b.reasonEndFk,
bre.reason,
b.departmentFk,
d.name departmentName,
b.occupationCodeFk,
oc.name occupationName,
b.workerBusinessProfessionalCategoryFk,
pf.description professionalDescription,
b.calendarTypeFk,
ct.description calendarTypeDescription,
b.workcenterFk,
wc.name workCenterName,
b.workerBusinessCategoryFk,
py.description payrollDescription,
b.workerBusinessTypeFk,
wt.name workerBusinessTypeName,
b.amount,
b.basicSalary,
b.notes
FROM business b
LEFT JOIN businessReasonEnd bre ON bre.id = b.reasonEndFk
LEFT JOIN occupationCode oc ON oc.code = b.occupationCodeFk
LEFT JOIN department d ON d.id = b.departmentFk
LEFT JOIN professionalCategory pf ON pf.id = b.workerBusinessProfessionalCategoryFk
JOIN calendarType ct ON ct.id = b.calendarTypeFk
LEFT JOIN workCenter wc ON wc.id = b.workcenterFk
LEFT JOIN payrollCategories py ON py.id = b.workerBusinessCategoryFk
LEFT JOIN workerBusinessType wt ON wt.id = b.workerBusinessTypeFk
) sub
`
);
stmt.merge(conn.makeSuffix(filter));
stmts.push(stmt);
let sql = ParameterizedSQL.join(stmts, ';');
let result = await conn.executeStmt(sql, myOptions);
return result;
};
};

View File

@ -21,6 +21,7 @@ module.exports = Self => {
require('../methods/worker/setPassword')(Self);
require('../methods/worker/getAvailablePda')(Self);
require('../methods/worker/myTeam')(Self);
require('../methods/worker/getWorkerBusiness')(Self);
Self.canModifyAbsenceInPast = async(ctx, time) => {
const hasPrivs = await Self.app.models.ACL.checkAccessAcl(ctx, 'Worker', 'canModifyAbsenceInPast', 'WRITE');