4270-route.create #1023

Merged
joan merged 13 commits from 4270-route.create into dev 2022-08-03 07:09:11 +00:00
8 changed files with 133 additions and 1 deletions

View File

@ -0,0 +1,10 @@
UPDATE `vn`.`route` r
JOIN(SELECT r.id, wl.workcenterFk
FROM `vn`.`route` r
JOIN `vn`.`routeLog` rl ON rl.originFk = r.id
JOIN `vn`.`workerLabour` wl ON wl.workerFk = rl.userFk
AND r.created BETWEEN wl.started AND IFNULL(wl.ended, r.created)
WHERE r.created BETWEEN '2021-12-01' AND CURDATE()
AND rl.action = 'insert'
)sub ON sub.id = r.id
SET r.commissionWorkCenterFk = sub.workcenterFk;

View File

@ -2620,3 +2620,7 @@ INSERT INTO `vn`.`sectorCollectionSaleGroup` (`sectorCollectionFk`, `saleGroupFk
INSERT INTO `vn`.`workerTimeControlConfig` (`id`, `dayBreak`, `dayBreakDriver`, `shortWeekBreak`, `longWeekBreak`, `weekScope`, `mailPass`, `mailHost`, `mailSuccessFolder`, `mailErrorFolder`, `mailUser`, `minHoursToBreak`, `breakHours`, `hoursCompleteWeek`, `startNightlyHours`, `endNightlyHours`, `maxTimePerDay`, `breakTime`, `timeToBreakTime`, `dayMaxTime`, `shortWeekDays`, `longWeekDays`)
VALUES
(1, 43200, 32400, 129600, 259200, 604800, '', '', 'Leidos.exito', 'Leidos.error', 'timeControl', 5.33, 0.33, 40, '22:00:00', '06:00:00', 57600, 1200, 18000, 57600, 6, 13);
INSERT INTO `vn`.`routeConfig` (`id`, `defaultWorkCenterFk`)
VALUES
(1, 9);

View File

@ -34349,6 +34349,7 @@ CREATE TABLE `route` (
`priority` int(11) NOT NULL DEFAULT '0',
`invoiceInFk` mediumint(8) unsigned DEFAULT NULL,
`beachFk` int(11) DEFAULT NULL,
`commissionWorkCenterFk` int(11) DEFAULT NULL COMMENT 'WorkerCenter que gestiona la ruta',
PRIMARY KEY (`id`),
KEY `Id_Agencia` (`agencyModeFk`),
KEY `Fecha` (`created`),
@ -34357,7 +34358,9 @@ CREATE TABLE `route` (
KEY `fk_route_1_idx` (`zoneFk`),
KEY `asdfasdf_idx` (`invoiceInFk`),
KEY `route_idxIsOk` (`isOk`),
KEY `route_WorkCenterFk_idx` (`commissionWorkCenterFk`),
CONSTRAINT `fk_route_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `route_WorkCenterFk` FOREIGN KEY (`commissionWorkCenterFk`) REFERENCES `workCenter` (`id`) ON UPDATE CASCADE,
CONSTRAINT `route_fk5` FOREIGN KEY (`agencyModeFk`) REFERENCES `agencyMode` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `route_ibfk_1` FOREIGN KEY (`gestdocFk`) REFERENCES `dms` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `route_ibfk_2` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`) ON UPDATE CASCADE,
@ -34514,6 +34517,7 @@ CREATE TABLE `routeConfig` (
`plusCategory1Concept` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`plusCategory2Concept` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`defaultCompanyFk` smallint(5) unsigned DEFAULT '442',
`defaultWorkCenterFk` int(11) DEFAULT 9 COMMENT 'Para el cálculo de las comisiones, en caso de el creador de la ruta no tenga workCenter',
PRIMARY KEY (`id`),
KEY `routeConfig_FK` (`defaultCompanyFk`),
CONSTRAINT `routeConfig_FK` FOREIGN KEY (`defaultCompanyFk`) REFERENCES `company` (`id`)

View File

@ -0,0 +1,51 @@
const models = require('vn-loopback/server/server').models;
describe('route updateWorkCenter()', () => {
const routeId = 1;
it('should set the commission work center if the worker has workCenter', async() => {
const tx = await models.Route.beginTransaction({});
try {
const developerId = 9;
const ctx = {
req: {
accessToken: {userId: developerId}
}
};
const options = {transaction: tx};
const expectedResult = 1;
const updatedRoute = await models.Route.updateWorkCenter(ctx, routeId, options);
expect(updatedRoute.commissionWorkCenterFk).toEqual(expectedResult);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
it(`shoul set the default commision work center if that worker didn't have one yet`, async() => {
const tx = await models.Route.beginTransaction({});
try {
const userWithoutWorkCenter = 2;
const ctx = {
req: {
accessToken: {userId: userWithoutWorkCenter}
}
};
const options = {transaction: tx};
const expectedResult = 9;
const updatedRoute = await models.Route.updateWorkCenter(ctx, routeId, options);
expect(updatedRoute.commissionWorkCenterFk).toEqual(expectedResult);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});

View File

@ -0,0 +1,54 @@
module.exports = Self => {
Self.remoteMethodCtx('updateWorkCenter', {
description: 'Update the commission work center through user salix connected',
accessType: 'WRITE',
accepts: {
arg: 'id',
type: 'number',
description: 'Route Id',
http: {source: 'path'}
},
returns: {
type: 'object',
root: true
},
http: {
path: `/:id/updateWorkCenter`,
verb: 'POST'
}
});
Self.updateWorkCenter = async(ctx, id, options) => {
const models = Self.app.models;
const myOptions = {};
let tx;
const userId = ctx.req.accessToken.userId;
if (typeof options == 'object')
Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
myOptions.transaction = tx;
}
try {
const [result] = await Self.rawSql(`
SELECT IFNULL(wl.workCenterFk, r.defaultWorkCenterFk) AS commissionWorkCenter
FROM vn.routeConfig r
LEFT JOIN vn.workerLabour wl ON wl.workerFk = ?
AND CURDATE() BETWEEN wl.started AND IFNULL(wl.ended, CURDATE());
`, [userId], myOptions);
const route = await models.Route.findById(id, null, myOptions);
await route.updateAttribute('commissionWorkCenterFk', result.commissionWorkCenter, myOptions);
if (tx) await tx.commit();
return route;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
};

View File

@ -9,6 +9,7 @@ module.exports = Self => {
require('../methods/route/clone')(Self);
require('../methods/route/getSuggestedTickets')(Self);
require('../methods/route/unlink')(Self);
require('../methods/route/updateWorkCenter')(Self);
Self.validate('kmStart', validateDistance, {
message: 'Distance must be lesser than 1000'

View File

@ -47,6 +47,9 @@
},
"description": {
"type": "string"
},
"commissionWorkCenterFk": {
"type": "number"
}
},
"relations": {

View File

@ -4,7 +4,12 @@ import Section from 'salix/components/section';
export default class Controller extends Section {
onSubmit() {
this.$.watcher.submit().then(
res => this.$state.go('route.card.summary', {id: res.data.id})
res => {
this.$http.post(`Routes/${res.data.id}/updateWorkCenter`, null)
.then(() => {
this.$state.go('route.card.summary', {id: res.data.id});
});
}
);
}
}