Merge pull request '#5919 createLocker' (!2446) from 5919-createLocker into dev
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
Reviewed-on: #2446 Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
This commit is contained in:
commit
b13c7c0db6
|
@ -3789,4 +3789,6 @@ INSERT INTO vn.workerTeam(id, team, workerFk)
|
|||
(8, 1, 19);
|
||||
|
||||
INSERT INTO vn.workCenter (id, name, payrollCenterFk, counter, warehouseFk, street, geoFk, deliveryManAdjustment)
|
||||
VALUES(100, 'workCenterOne', 1, NULL, 1, 'gotham', NULL, NULL);
|
||||
VALUES(100, 'workCenterOne', 1, NULL, 1, 'gotham', NULL, NULL);
|
||||
|
||||
UPDATE vn.locker SET workerFk = 1110 WHERE id = 147;
|
|
@ -28,5 +28,9 @@ mainLabel:BEGIN
|
|||
UPDATE `client` c
|
||||
SET c.salesPersonFk = null
|
||||
WHERE c.salesPersonFk = vUserId;
|
||||
|
||||
UPDATE locker l
|
||||
SET l.workerFk = NULL
|
||||
WHERE l.workerFk = vUserId;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
-- Eliminar locker
|
||||
ALTER TABLE `vn`.`worker` DROP COLUMN `locker`;
|
||||
|
||||
CREATE TABLE `vn`.`locker` (
|
||||
`id` int(100) auto_increment,
|
||||
`code` varchar(10) DEFAULT NULL,
|
||||
`gender` ENUM('M','F') DEFAULT NULL,
|
||||
`workerFk` int(10) unsigned DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `code` (`code`),
|
||||
UNIQUE KEY `workerFk` (`workerFk`),
|
||||
CONSTRAINT `locker_ibfk_1` FOREIGN KEY (`workerFk`) REFERENCES `worker` (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||
|
||||
ALTER TABLE `vn`.`workerLog`
|
||||
MODIFY COLUMN changedModel enum('Worker','Calendar','WorkerTimeControlMail','Business','WorkerDms','WorkerTimeControl', 'Locker') NOT NULL DEFAULT 'Worker';
|
||||
|
||||
-- Insertar taquillas disponibles para hombres (1A - 73A / 1B - 73B)
|
||||
INSERT INTO `vn`.`locker` (code, gender, workerFk) VALUES
|
||||
('1A', 'M', NULL), ('2A', 'M', NULL), ('3A', 'M', NULL), ('4A', 'M', NULL), ('5A', 'M', NULL),
|
||||
('6A', 'M', NULL), ('7A', 'M', NULL), ('8A', 'M', NULL), ('9A', 'M', NULL), ('10A', 'M', NULL),
|
||||
('11A', 'M', NULL), ('12A', 'M', NULL), ('13A', 'M', NULL), ('14A', 'M', NULL), ('15A', 'M', NULL),
|
||||
('16A', 'M', NULL), ('17A', 'M', NULL), ('18A', 'M', NULL), ('19A', 'M', NULL), ('20A', 'M', NULL),
|
||||
('21A', 'M', NULL), ('22A', 'M', NULL), ('23A', 'M', NULL), ('24A', 'M', NULL), ('25A', 'M', NULL),
|
||||
('26A', 'M', NULL), ('27A', 'M', NULL), ('28A', 'M', NULL), ('29A', 'M', NULL), ('30A', 'M', NULL),
|
||||
('31A', 'M', NULL), ('32A', 'M', NULL), ('33A', 'M', NULL), ('34A', 'M', NULL), ('35A', 'M', NULL),
|
||||
('36A', 'M', NULL), ('37A', 'M', NULL), ('38A', 'M', NULL), ('39A', 'M', NULL), ('40A', 'M', NULL),
|
||||
('41A', 'M', NULL), ('42A', 'M', NULL), ('43A', 'M', NULL), ('44A', 'M', NULL), ('45A', 'M', NULL),
|
||||
('46A', 'M', NULL), ('47A', 'M', NULL), ('48A', 'M', NULL), ('49A', 'M', NULL), ('50A', 'M', NULL),
|
||||
('51A', 'M', NULL), ('52A', 'M', NULL), ('53A', 'M', NULL), ('54A', 'M', NULL), ('55A', 'M', NULL),
|
||||
('56A', 'M', NULL), ('57A', 'M', NULL), ('58A', 'M', NULL), ('59A', 'M', NULL), ('60A', 'M', NULL),
|
||||
('61A', 'M', NULL), ('62A', 'M', NULL), ('63A', 'M', NULL), ('64A', 'M', NULL), ('65A', 'M', NULL),
|
||||
('66A', 'M', NULL), ('67A', 'M', NULL), ('68A', 'M', NULL), ('69A', 'M', NULL), ('70A', 'M', NULL),
|
||||
('71A', 'M', NULL), ('72A', 'M', NULL), ('73A', 'M', NULL),
|
||||
('1B', 'M', NULL), ('2B', 'M', NULL), ('3B', 'M', NULL), ('4B', 'M', NULL), ('5B', 'M', NULL),
|
||||
('6B', 'M', NULL), ('7B', 'M', NULL), ('8B', 'M', NULL), ('9B', 'M', NULL), ('10B', 'M', NULL),
|
||||
('11B', 'M', NULL), ('12B', 'M', NULL), ('13B', 'M', NULL), ('14B', 'M', NULL), ('15B', 'M', NULL),
|
||||
('16B', 'M', NULL), ('17B', 'M', NULL), ('18B', 'M', NULL), ('19B', 'M', NULL), ('20B', 'M', NULL),
|
||||
('21B', 'M', NULL), ('22B', 'M', NULL), ('23B', 'M', NULL), ('24B', 'M', NULL), ('25B', 'M', NULL),
|
||||
('26B', 'M', NULL), ('27B', 'M', NULL), ('28B', 'M', NULL), ('29B', 'M', NULL), ('30B', 'M', NULL),
|
||||
('31B', 'M', NULL), ('32B', 'M', NULL), ('33B', 'M', NULL), ('34B', 'M', NULL), ('35B', 'M', NULL),
|
||||
('36B', 'M', NULL), ('37B', 'M', NULL), ('38B', 'M', NULL), ('39B', 'M', NULL), ('40B', 'M', NULL),
|
||||
('41B', 'M', NULL), ('42B', 'M', NULL), ('43B', 'M', NULL), ('44B', 'M', NULL), ('45B', 'M', NULL),
|
||||
('46B', 'M', NULL), ('47B', 'M', NULL), ('48B', 'M', NULL), ('49B', 'M', NULL), ('50B', 'M', NULL),
|
||||
('51B', 'M', NULL), ('52B', 'M', NULL), ('53B', 'M', NULL), ('54B', 'M', NULL), ('55B', 'M', NULL),
|
||||
('56B', 'M', NULL), ('57B', 'M', NULL), ('58B', 'M', NULL), ('59B', 'M', NULL), ('60B', 'M', NULL),
|
||||
('61B', 'M', NULL), ('62B', 'M', NULL), ('63B', 'M', NULL), ('64B', 'M', NULL), ('65B', 'M', NULL),
|
||||
('66B', 'M', NULL), ('67B', 'M', NULL), ('68B', 'M', NULL), ('69B', 'M', NULL), ('70B', 'M', NULL),
|
||||
('71B', 'M', NULL), ('72B', 'M', NULL), ('73B', 'M', NULL);
|
||||
|
||||
-- Insertar taquillas disponibles para mujeres (200A - 217A / 200B - 217B)
|
||||
INSERT INTO `vn`.`locker` (code, gender, workerFk) VALUES
|
||||
('200A', 'F', NULL), ('201A', 'F', NULL), ('202A', 'F', NULL), ('203A', 'F', NULL), ('204A', 'F', NULL),
|
||||
('205A', 'F', NULL), ('206A', 'F', NULL), ('207A', 'F', NULL), ('208A', 'F', NULL), ('209A', 'F', NULL),
|
||||
('210A', 'F', NULL), ('211A', 'F', NULL), ('212A', 'F', NULL), ('213A', 'F', NULL), ('214A', 'F', NULL),
|
||||
('215A', 'F', NULL), ('216A', 'F', NULL), ('217A', 'F', NULL),
|
||||
('200B', 'F', NULL), ('201B', 'F', NULL), ('202B', 'F', NULL), ('203B', 'F', NULL), ('204B', 'F', NULL),
|
||||
('205B', 'F', NULL), ('206B', 'F', NULL), ('207B', 'F', NULL), ('208B', 'F', NULL), ('209B', 'F', NULL),
|
||||
('210B', 'F', NULL), ('211B', 'F', NULL), ('212B', 'F', NULL), ('213B', 'F', NULL), ('214B', 'F', NULL),
|
||||
('215B', 'F', NULL), ('216B', 'F', NULL), ('217B', 'F', NULL);
|
|
@ -0,0 +1,6 @@
|
|||
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
|
||||
VALUES ('Locker', '__get__codes', 'READ', 'ALLOW', 'ROLE', 'employee'),
|
||||
('Locker', '*', '*', 'ALLOW', 'ROLE', 'hr'),
|
||||
('Locker', '*', '*', 'ALLOW', 'ROLE', 'productionBoss'),
|
||||
('Worker', '__get__locker', 'READ', 'ALLOW', 'ROLE', 'hr'),
|
||||
('Worker', '__get__locker', 'READ', 'ALLOW', 'ROLE', 'productionBoss');
|
|
@ -25,7 +25,6 @@ describe('Worker basic data path', () => {
|
|||
await page.overwrite(selectors.workerBasicData.name, 'David C.');
|
||||
await page.overwrite(selectors.workerBasicData.surname, 'H.');
|
||||
await page.overwrite(selectors.workerBasicData.phone, '444332211');
|
||||
await page.overwrite(selectors.workerBasicData.locker, '1');
|
||||
await page.click(selectors.workerBasicData.saveButton);
|
||||
|
||||
const message = await page.waitForSnackbar();
|
||||
|
@ -37,6 +36,5 @@ describe('Worker basic data path', () => {
|
|||
expect(await page.waitToGetProperty(selectors.workerBasicData.name, 'value')).toEqual('David C.');
|
||||
expect(await page.waitToGetProperty(selectors.workerBasicData.surname, 'value')).toEqual('H.');
|
||||
expect(await page.waitToGetProperty(selectors.workerBasicData.phone, 'value')).toEqual('444332211');
|
||||
expect(await page.waitToGetProperty(selectors.workerBasicData.locker, 'value')).toEqual('1');
|
||||
});
|
||||
});
|
||||
|
|
|
@ -121,6 +121,9 @@
|
|||
},
|
||||
"Operator": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
"Locker": {
|
||||
"dataSource": "vn"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
module.exports = Self => {
|
||||
Self.observe('before save', async ctx => {
|
||||
const models = Self.app.models;
|
||||
const changes = ctx.data || ctx.instance;
|
||||
const instance = ctx.currentInstance;
|
||||
|
||||
const workerFk = changes?.workerFk || instance?.workerFk;
|
||||
if (workerFk) {
|
||||
const locker = await models.Locker.findOne({
|
||||
where: {workerFk}
|
||||
}, ctx.options);
|
||||
|
||||
if (locker) {
|
||||
await Self.rawSql(
|
||||
'UPDATE locker SET workerFk = NULL where workerFk = ?',
|
||||
[workerFk],
|
||||
ctx.options);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"name": "Locker",
|
||||
"base": "VnModel",
|
||||
"description": "Worker's locker",
|
||||
"options": {
|
||||
"mysql": {
|
||||
"table": "locker"
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"code": {
|
||||
"type": "string"
|
||||
},
|
||||
"gender": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"scopes": {
|
||||
"codes": {
|
||||
"fields": ["id","code"]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
const {models} = require('vn-loopback/server/server');
|
||||
|
||||
describe('locker model ', () => {
|
||||
const productionBossId = 50;
|
||||
const hrBuyerId = 124;
|
||||
const hrId = 37;
|
||||
const jessicaJonesId = 1110;
|
||||
const bruceBannerId = 1109;
|
||||
const lockerMaleId = 1;
|
||||
const lockerFemaleId = 147;
|
||||
let ctx;
|
||||
let options;
|
||||
let tx;
|
||||
|
||||
beforeEach(async() => {
|
||||
ctx = {
|
||||
req: {
|
||||
accessToken: {userId: hrId},
|
||||
headers: {origin: 'http://localhost'}
|
||||
},
|
||||
};
|
||||
options = {transaction: tx};
|
||||
tx = await models.Locker.beginTransaction({});
|
||||
options.transaction = tx;
|
||||
});
|
||||
|
||||
afterEach(async() => {
|
||||
await tx.rollback();
|
||||
});
|
||||
|
||||
it('should allocate a locker', async() => {
|
||||
ctx.req.accessToken.userId = productionBossId;
|
||||
|
||||
const locker = await models.Locker.findById(lockerMaleId, null, options);
|
||||
await locker.updateAttributes({workerFk: bruceBannerId}, options);
|
||||
|
||||
expect(locker.workerFk).toEqual(bruceBannerId);
|
||||
});
|
||||
|
||||
it('should take away a locker', async() => {
|
||||
ctx.req.accessToken.userId = hrBuyerId;
|
||||
const locker = await models.Locker.findById(lockerFemaleId, null, options);
|
||||
await locker.updateAttributes({workerFk: null}, options);
|
||||
|
||||
expect(locker.workerFk).toEqual(null);
|
||||
});
|
||||
|
||||
it('should change a locker', async() => {
|
||||
const locker = await models.Locker.findById(148, null, options);
|
||||
await locker.updateAttributes({workerFk: jessicaJonesId}, options);
|
||||
const oldLocker = await models.Locker.findById(lockerFemaleId, null, options);
|
||||
|
||||
expect(locker.workerFk).toEqual(jessicaJonesId);
|
||||
expect(oldLocker.workerFk).toEqual(null);
|
||||
});
|
||||
});
|
|
@ -21,10 +21,6 @@ module.exports = Self => {
|
|||
require('../methods/worker/isAuthorized')(Self);
|
||||
require('../methods/worker/setPassword')(Self);
|
||||
|
||||
Self.validatesUniquenessOf('locker', {
|
||||
message: 'This locker has already been assigned'
|
||||
});
|
||||
|
||||
Self.validateAsync('fi', tinIsValid, {
|
||||
message: 'Invalid TIN'
|
||||
});
|
||||
|
|
|
@ -48,9 +48,6 @@
|
|||
"code": {
|
||||
"type" : "string"
|
||||
},
|
||||
"locker": {
|
||||
"type" : "number"
|
||||
},
|
||||
"fi": {
|
||||
"type" : "string"
|
||||
},
|
||||
|
@ -60,6 +57,9 @@
|
|||
"isF11Allowed": {
|
||||
"type" : "boolean"
|
||||
},
|
||||
"sex": {
|
||||
"type" : "string"
|
||||
},
|
||||
"isFreelance": {
|
||||
"type" : "boolean"
|
||||
}
|
||||
|
@ -94,6 +94,20 @@
|
|||
"type": "hasMany",
|
||||
"model": "WorkerTeamCollegues",
|
||||
"foreignKey": "workerFk"
|
||||
},
|
||||
"locker": {
|
||||
"type": "hasMany",
|
||||
"model": "Locker",
|
||||
"foreignKey": "workerFk"
|
||||
}
|
||||
}
|
||||
},
|
||||
"acls":[
|
||||
{
|
||||
"property": "__get__locker",
|
||||
"accessType": "READ",
|
||||
"permission": "ALLOW",
|
||||
"principalType": "ROLE",
|
||||
"principalId": "$owner"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -75,11 +75,6 @@
|
|||
ng-model="$ctrl.worker.SSN"
|
||||
rule>
|
||||
</vn-textfield>
|
||||
<vn-input-number
|
||||
min="0"
|
||||
label="Locker"
|
||||
ng-model="$ctrl.worker.locker">
|
||||
</vn-input-number>
|
||||
</vn-horizontal>
|
||||
</vn-vertical>
|
||||
</vn-card>
|
||||
|
|
Loading…
Reference in New Issue