Merge branch 'test' of https://gitea.verdnatura.es/verdnatura/salix into dev
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
This commit is contained in:
commit
94bc1241e5
|
@ -0,0 +1,2 @@
|
||||||
|
INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
|
||||||
|
VALUES ('Worker','canCreateAbsenceInPast','WRITE','ALLOW','ROLE','hr');
|
|
@ -247,5 +247,5 @@
|
||||||
"The raid information is not correct": "The raid information is not correct",
|
"The raid information is not correct": "The raid information is not correct",
|
||||||
"Payment method is required": "Payment method is required",
|
"Payment method is required": "Payment method is required",
|
||||||
"Sales already moved": "Sales already moved",
|
"Sales already moved": "Sales already moved",
|
||||||
"There are tickets to be invoiced": "There are tickets to be invoiced for this zone, please delete them first"
|
"Holidays to past days not available": "Holidays to past days not available"
|
||||||
}
|
}
|
||||||
|
|
|
@ -391,6 +391,7 @@
|
||||||
"Sales already moved": "Ya han sido transferidas",
|
"Sales already moved": "Ya han sido transferidas",
|
||||||
"The raid information is not correct": "La información de la redada no es correcta",
|
"The raid information is not correct": "La información de la redada no es correcta",
|
||||||
"There are tickets to be invoiced": "Hay tickets para esta zona, borralos primero",
|
"There are tickets to be invoiced": "Hay tickets para esta zona, borralos primero",
|
||||||
"An item type with the same code already exists": "Un tipo con el mismo código ya existe"
|
"An item type with the same code already exists": "Un tipo con el mismo código ya existe",
|
||||||
|
"Holidays to past days not available": "Las vacaciones a días pasados no están disponibles"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ module.exports = Self => {
|
||||||
return /^\d+$/.test(value)
|
return /^\d+$/.test(value)
|
||||||
? {'t.id': value}
|
? {'t.id': value}
|
||||||
: {'t.ref': {like: `%${value}%`}};
|
: {'t.ref': {like: `%${value}%`}};
|
||||||
case 'ref':
|
case 'reference':
|
||||||
return {'t.ref': {like: `%${value}%`}};
|
return {'t.ref': {like: `%${value}%`}};
|
||||||
case 'shippedFrom':
|
case 'shippedFrom':
|
||||||
return {'t.shipped': {gte: value}};
|
return {'t.shipped': {gte: value}};
|
||||||
|
@ -111,7 +111,7 @@ module.exports = Self => {
|
||||||
let stmt;
|
let stmt;
|
||||||
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.travel');
|
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.travel');
|
||||||
stmt = new ParameterizedSQL(
|
stmt = new ParameterizedSQL(
|
||||||
`CREATE TEMPORARY TABLE tmp.travel
|
`CREATE TEMPORARY TABLE tmp.travel
|
||||||
(INDEX (id))
|
(INDEX (id))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT t.id,
|
SELECT t.id,
|
||||||
|
|
|
@ -58,17 +58,24 @@ module.exports = Self => {
|
||||||
if (!isSubordinate || (isSubordinate && userId == id && !isTeamBoss))
|
if (!isSubordinate || (isSubordinate && userId == id && !isTeamBoss))
|
||||||
throw new UserError(`You don't have enough privileges`);
|
throw new UserError(`You don't have enough privileges`);
|
||||||
|
|
||||||
|
const canCreateAbsenceInPast =
|
||||||
|
await models.ACL.checkAccessAcl(ctx, 'Worker', 'canCreateAbsenceInPast', 'WRITE');
|
||||||
|
const now = Date.vnNew();
|
||||||
|
const newDate = new Date(args.dated).getTime();
|
||||||
|
|
||||||
|
if ((now.getTime() > newDate) && !canCreateAbsenceInPast)
|
||||||
|
throw new UserError(`Holidays to past days not available`);
|
||||||
|
|
||||||
const labour = await models.WorkerLabour.findById(args.businessFk,
|
const labour = await models.WorkerLabour.findById(args.businessFk,
|
||||||
{fields: ['started', 'ended', 'businessFk']}, myOptions);
|
{fields: ['started', 'ended', 'businessFk']}, myOptions);
|
||||||
|
|
||||||
if (args.dated < labour.started || (labour.ended != null && args.dated > labour.ended))
|
if (args.dated < labour.started || (labour.ended != null && args.dated > labour.ended))
|
||||||
throw new UserError(`The contract was not active during the selected date`);
|
throw new UserError(`The contract was not active during the selected date`);
|
||||||
|
|
||||||
query = `SELECT *
|
const [hasHoursRecorded] = await Self.rawSql(`SELECT *
|
||||||
FROM vn.workerTimeControl
|
FROM vn.workerTimeControl
|
||||||
WHERE userFk = ? AND timed BETWEEN DATE(?) AND CONCAT(DATE(?), ' 23:59:59')
|
WHERE userFk = ? AND timed BETWEEN DATE(?) AND CONCAT(DATE(?), ' 23:59:59')
|
||||||
LIMIT 1;`;
|
LIMIT 1;`, [id, args.dated, args.dated]);
|
||||||
const [hasHoursRecorded] = await Self.rawSql(query, [id, args.dated, args.dated]);
|
|
||||||
|
|
||||||
const absenceType = await models.AbsenceType.findById(args.absenceTypeId, null, myOptions);
|
const absenceType = await models.AbsenceType.findById(args.absenceTypeId, null, myOptions);
|
||||||
|
|
||||||
|
@ -80,7 +87,6 @@ module.exports = Self => {
|
||||||
throw new UserError(`The worker has hours recorded that day`);
|
throw new UserError(`The worker has hours recorded that day`);
|
||||||
|
|
||||||
const date = Date.vnNew();
|
const date = Date.vnNew();
|
||||||
const now = Date.vnNew();
|
|
||||||
date.setHours(0, 0, 0, 0);
|
date.setHours(0, 0, 0, 0);
|
||||||
const [result] = await Self.rawSql(
|
const [result] = await Self.rawSql(
|
||||||
`SELECT COUNT(*) halfHolidayCounter
|
`SELECT COUNT(*) halfHolidayCounter
|
||||||
|
|
|
@ -162,4 +162,33 @@ describe('Worker createAbsence()', () => {
|
||||||
|
|
||||||
expect(error.message).toEqual(`The worker has hours recorded that day`);
|
expect(error.message).toEqual(`The worker has hours recorded that day`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it(`Should throw an error when adding a "Vacation" absence on a past day`, async() => {
|
||||||
|
const ctx = {
|
||||||
|
req: {accessToken: {userId: 19}},
|
||||||
|
args: {
|
||||||
|
id: 1110,
|
||||||
|
businessFk: 1110,
|
||||||
|
absenceTypeId: 1,
|
||||||
|
dated: '2000-12-27T23:00:00.000Z',
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const workerId = 19;
|
||||||
|
|
||||||
|
const tx = await app.models.Calendar.beginTransaction({});
|
||||||
|
|
||||||
|
let error;
|
||||||
|
try {
|
||||||
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
await app.models.Worker.createAbsence(ctx, workerId, options);
|
||||||
|
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
error = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(error.message).toEqual(`Holidays to past days not available`);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue