Merge pull request 'fix: refs #6553 workerBusiness, workerDescriptor' (!3484) from 6553-workerBusinessV2 into test
gitea/salix/pipeline/head This commit looks good Details

Reviewed-on: #3484
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
This commit is contained in:
Carlos Satorres 2025-02-25 08:14:13 +00:00
commit 380d1f69e5
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(
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/setPassword')(Self);
require('../methods/worker/getAvailablePda')(Self); require('../methods/worker/getAvailablePda')(Self);
require('../methods/worker/myTeam')(Self); require('../methods/worker/myTeam')(Self);
require('../methods/worker/getWorkerBusiness')(Self);
Self.canModifyAbsenceInPast = async(ctx, time) => { Self.canModifyAbsenceInPast = async(ctx, time) => {
const hasPrivs = await Self.app.models.ACL.checkAccessAcl(ctx, 'Worker', 'canModifyAbsenceInPast', 'WRITE'); const hasPrivs = await Self.app.models.ACL.checkAccessAcl(ctx, 'Worker', 'canModifyAbsenceInPast', 'WRITE');