Merge branch 'dev' into 7039-country-country
gitea/salix/pipeline/pr-dev This commit looks good
Details
gitea/salix/pipeline/pr-dev This commit looks good
Details
This commit is contained in:
commit
c6f7a0768a
|
@ -2562,7 +2562,7 @@ REPLACE INTO `vn`.`invoiceIn`(`id`, `serialNumber`,`serial`, `supplierFk`, `issu
|
||||||
(9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 0, 442, 1),
|
(9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 0, 442, 1),
|
||||||
(10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 0, 442, 1);
|
(10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 0, 442, 1);
|
||||||
|
|
||||||
INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageWithholdingFk`, `daysAgo`)
|
INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageFarmerWithholdingFk`, `daysAgo`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, -2, '2% retention', 2, 45);
|
(1, -2, '2% retention', 2, 45);
|
||||||
|
|
||||||
|
@ -3790,3 +3790,5 @@ INSERT INTO vn.workerTeam(id, team, workerFk)
|
||||||
|
|
||||||
INSERT INTO vn.workCenter (id, name, payrollCenterFk, counter, warehouseFk, street, geoFk, deliveryManAdjustment)
|
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;
|
|
@ -9,7 +9,7 @@ BEGIN
|
||||||
* @vItemFk item a buscar
|
* @vItemFk item a buscar
|
||||||
* @vWarehouseFk almacen donde buscar
|
* @vWarehouseFk almacen donde buscar
|
||||||
* @vDate Si la fecha es null, muestra el histórico desde el inventario.
|
* @vDate Si la fecha es null, muestra el histórico desde el inventario.
|
||||||
* Si la fecha no es null, muestra histórico desde la fecha pasada.
|
* Si la fecha no es null, muestra histórico desde la fecha de vDate.
|
||||||
*/
|
*/
|
||||||
DECLARE vDateInventory DATETIME;
|
DECLARE vDateInventory DATETIME;
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ BEGIN
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO tItemDiary
|
INSERT INTO tItemDiary
|
||||||
|
WITH entriesIn AS (
|
||||||
SELECT tr.landed shipped,
|
SELECT tr.landed shipped,
|
||||||
b.quantity `in`,
|
b.quantity `in`,
|
||||||
NULL `out`,
|
NULL `out`,
|
||||||
|
@ -57,89 +58,125 @@ BEGIN
|
||||||
NULL clientType,
|
NULL clientType,
|
||||||
NULL claimFk,
|
NULL claimFk,
|
||||||
ec.inventorySupplierFk
|
ec.inventorySupplierFk
|
||||||
FROM buy b
|
FROM vn.buy b
|
||||||
JOIN entry e ON e.id = b.entryFk
|
JOIN vn.entry e ON e.id = b.entryFk
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN vn.travel tr ON tr.id = e.travelFk
|
||||||
JOIN supplier s ON s.id = e.supplierFk
|
JOIN vn.supplier s ON s.id = e.supplierFk
|
||||||
JOIN state st ON st.`code` = IF( tr.landed < util.VN_CURDATE()
|
JOIN vn.state st ON st.`code` = IF( tr.landed < util.VN_CURDATE()
|
||||||
OR (util.VN_CURDATE() AND tr.isReceived),
|
OR (util.VN_CURDATE() AND tr.isReceived),
|
||||||
'DELIVERED',
|
'DELIVERED',
|
||||||
'FREE')
|
'FREE')
|
||||||
JOIN entryConfig ec
|
JOIN vn.entryConfig ec
|
||||||
WHERE tr.landed >= vDateInventory
|
WHERE tr.landed >= vDateInventory
|
||||||
AND vWarehouseFk = tr.warehouseInFk
|
AND vWarehouseFk = tr.warehouseInFk
|
||||||
AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
|
AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
|
||||||
AND b.itemFk = vItemFk
|
AND b.itemFk = vItemFk
|
||||||
AND e.isExcludedFromAvailable = FALSE
|
AND NOT e.isExcludedFromAvailable
|
||||||
AND e.isRaid = FALSE
|
AND NOT e.isRaid
|
||||||
UNION ALL
|
), entriesOut AS (
|
||||||
SELECT tr.shipped,
|
SELECT tr.shipped,
|
||||||
NULL,
|
NULL,
|
||||||
b.quantity,
|
b.quantity,
|
||||||
st.alertLevel,
|
st.alertLevel,
|
||||||
st.name,
|
st.name stateName,
|
||||||
s.name,
|
s.name ,
|
||||||
e.invoiceNumber,
|
e.invoiceNumber,
|
||||||
e.id,
|
e.id entryFk,
|
||||||
s.id,
|
s.id supplierFk,
|
||||||
IF(st.`code` = 'DELIVERED' , TRUE, FALSE),
|
IF(st.`code` = 'DELIVERED' , TRUE, FALSE),
|
||||||
FALSE,
|
FALSE isTicket,
|
||||||
b.id,
|
b.id,
|
||||||
NULL,
|
NULL `order`,
|
||||||
NULL,
|
NULL clientType,
|
||||||
NULL,
|
NULL claimFk,
|
||||||
ec.inventorySupplierFk
|
ec.inventorySupplierFk
|
||||||
FROM buy b
|
FROM vn.buy b
|
||||||
JOIN entry e ON e.id = b.entryFk
|
JOIN vn.entry e ON e.id = b.entryFk
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN vn.travel tr ON tr.id = e.travelFk
|
||||||
JOIN warehouse w ON w.id = tr.warehouseOutFk
|
JOIN vn.warehouse w ON w.id = tr.warehouseOutFk
|
||||||
JOIN supplier s ON s.id = e.supplierFk
|
JOIN vn.supplier s ON s.id = e.supplierFk
|
||||||
JOIN state st ON st.`code` = IF(tr.shipped < util.VN_CURDATE()
|
JOIN vn.state st ON st.`code` = IF(tr.shipped < util.VN_CURDATE()
|
||||||
OR (tr.shipped = util.VN_CURDATE() AND tr.isReceived),
|
OR (tr.shipped = util.VN_CURDATE() AND tr.isReceived),
|
||||||
'DELIVERED',
|
'DELIVERED',
|
||||||
'FREE')
|
'FREE')
|
||||||
JOIN entryConfig ec
|
JOIN vn.entryConfig ec
|
||||||
WHERE tr.shipped >= vDateInventory
|
WHERE tr.shipped >= vDateInventory
|
||||||
AND vWarehouseFk = tr.warehouseOutFk
|
AND vWarehouseFk = tr.warehouseOutFk
|
||||||
AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
|
AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
|
||||||
AND b.itemFk = vItemFk
|
AND b.itemFk = vItemFk
|
||||||
AND e.isExcludedFromAvailable = FALSE
|
AND NOT e.isExcludedFromAvailable
|
||||||
AND w.isFeedStock = FALSE
|
AND NOT w.isFeedStock
|
||||||
AND e.isRaid = FALSE
|
AND NOT e.isRaid
|
||||||
UNION ALL
|
), sales AS (
|
||||||
SELECT DATE(t.shipped),
|
SELECT DATE(t.shipped) shipped,
|
||||||
NULL,
|
|
||||||
s.quantity,
|
s.quantity,
|
||||||
st2.alertLevel,
|
st2.alertLevel,
|
||||||
st2.name,
|
st2.name,
|
||||||
t.nickname,
|
t.nickname,
|
||||||
t.refFk,
|
t.refFk,
|
||||||
t.id,
|
t.id ticketFk,
|
||||||
t.clientFk,
|
t.clientFk,
|
||||||
stk.id,
|
s.id saleFk,
|
||||||
TRUE,
|
|
||||||
s.id,
|
|
||||||
st.`order`,
|
st.`order`,
|
||||||
c.typeFk,
|
c.typeFk,
|
||||||
cb.claimFk,
|
cb.claimFk
|
||||||
NULL
|
FROM vn.sale s
|
||||||
FROM sale s
|
JOIN vn.ticket t ON t.id = s.ticketFk
|
||||||
JOIN ticket t ON t.id = s.ticketFk
|
LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
|
||||||
LEFT JOIN ticketState ts ON ts.ticketFk = t.id
|
LEFT JOIN vn.state st ON st.`code` = ts.`code`
|
||||||
LEFT JOIN state st ON st.`code` = ts.`code`
|
JOIN vn.client c ON c.id = t.clientFk
|
||||||
JOIN client c ON c.id = t.clientFk
|
JOIN vn.state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(),
|
||||||
JOIN state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(),
|
|
||||||
'DELIVERED',
|
'DELIVERED',
|
||||||
IF (t.shipped > util.dayEnd(util.VN_CURDATE()),
|
IF (t.shipped > util.dayEnd(util.VN_CURDATE()),
|
||||||
'FREE',
|
'FREE',
|
||||||
IFNULL(ts.code, 'FREE')))
|
IFNULL(ts.code, 'FREE')))
|
||||||
LEFT JOIN state stPrep ON stPrep.`code` = 'PREPARED'
|
LEFT JOIN vn.claimBeginning cb ON s.id = cb.saleFk
|
||||||
LEFT JOIN saleTracking stk ON stk.saleFk = s.id
|
|
||||||
AND stk.stateFk = stPrep.id
|
|
||||||
LEFT JOIN claimBeginning cb ON s.id = cb.saleFk
|
|
||||||
WHERE t.shipped >= vDateInventory
|
WHERE t.shipped >= vDateInventory
|
||||||
AND s.itemFk = vItemFk
|
AND s.itemFk = vItemFk
|
||||||
AND vWarehouseFk =t.warehouseFk
|
AND vWarehouseFk = t.warehouseFk
|
||||||
|
),sale AS (
|
||||||
|
SELECT s.shipped,
|
||||||
|
NULL `in`,
|
||||||
|
s.quantity,
|
||||||
|
s.alertLevel,
|
||||||
|
s.name,
|
||||||
|
s.nickname,
|
||||||
|
s.refFk,
|
||||||
|
s.ticketFk,
|
||||||
|
s.clientFk,
|
||||||
|
IF(stk.saleFk, TRUE, NULL),
|
||||||
|
TRUE,
|
||||||
|
s.saleFk,
|
||||||
|
s.`order`,
|
||||||
|
s.typeFk,
|
||||||
|
s.claimFk,
|
||||||
|
NULL
|
||||||
|
FROM sales s
|
||||||
|
LEFT JOIN vn.state stPrep ON stPrep.`code` = 'PREPARED'
|
||||||
|
LEFT JOIN vn.saleTracking stk ON stk.saleFk = s.saleFk
|
||||||
|
AND stk.stateFk = stPrep.id
|
||||||
|
GROUP BY s.saleFk
|
||||||
|
) SELECT shipped,
|
||||||
|
`in`,
|
||||||
|
`out`,
|
||||||
|
alertLevel,
|
||||||
|
stateName,
|
||||||
|
`name`,
|
||||||
|
reference,
|
||||||
|
origin,
|
||||||
|
clientFk,
|
||||||
|
isPicked,
|
||||||
|
isTicket,
|
||||||
|
lineFk,
|
||||||
|
`order`,
|
||||||
|
clientType,
|
||||||
|
claimFk,
|
||||||
|
inventorySupplierFk
|
||||||
|
FROM entriesIn
|
||||||
|
UNION ALL
|
||||||
|
SELECT * FROM entriesOut
|
||||||
|
UNION ALL
|
||||||
|
SELECT * FROM sale
|
||||||
ORDER BY shipped,
|
ORDER BY shipped,
|
||||||
(inventorySupplierFk = clientFk) DESC,
|
(inventorySupplierFk = clientFk) DESC,
|
||||||
alertLevel DESC,
|
alertLevel DESC,
|
||||||
|
|
|
@ -1,121 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`packageInvoicing`(
|
|
||||||
IN vClient INT,
|
|
||||||
IN vDate DATE,
|
|
||||||
IN vCompany INT,
|
|
||||||
IN vIsAllInvoiceable BOOLEAN,
|
|
||||||
OUT vNewTicket INT(11)
|
|
||||||
)
|
|
||||||
BEGIN
|
|
||||||
|
|
||||||
DECLARE vGraceDays INT;
|
|
||||||
DECLARE vDateStart DATE DEFAULT '2017-11-21';
|
|
||||||
DECLARE vIsInvoiceable BOOLEAN;
|
|
||||||
DECLARE vWarehouse INT DEFAULT 13;
|
|
||||||
DECLARE vComponentCost INT DEFAULT 28;
|
|
||||||
DECLARE vGraceDate DATE;
|
|
||||||
DECLARE vDateEnd DATE;
|
|
||||||
|
|
||||||
SET vGraceDays = IF(vIsAllInvoiceable ,0, 30);
|
|
||||||
SET vGraceDate = TIMESTAMPADD(DAY, - vGraceDays, vDate);
|
|
||||||
|
|
||||||
/* Clientes especiales:
|
|
||||||
3240 MADEFLOR
|
|
||||||
992 JAVIER FELIU
|
|
||||||
4 TONI VENDRELL
|
|
||||||
*/
|
|
||||||
|
|
||||||
IF vClient IN (992, 3240, 4) THEN
|
|
||||||
|
|
||||||
SET vGraceDays = 365;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
/* Fin clientes especiales */
|
|
||||||
|
|
||||||
SET vDateEnd = DATE_ADD(vDate, INTERVAL 1 DAY);
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.packageToInvoice;
|
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE tmp.packageToInvoice
|
|
||||||
SELECT p.itemFk,
|
|
||||||
tp.packagingFk,
|
|
||||||
IF(tp.quantity < 0 OR t.shipped < vGraceDate, tp.quantity, 0) quantity,
|
|
||||||
tp.ticketFk,
|
|
||||||
p.price
|
|
||||||
FROM ticketPackaging tp
|
|
||||||
JOIN packaging p ON p.id = tp.packagingFk
|
|
||||||
JOIN ticket t ON t.id = tp.ticketFk
|
|
||||||
WHERE t.shipped BETWEEN vDateStart AND vDateEnd
|
|
||||||
AND t.clientFk = vClient;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.packageToInvoicePositives;
|
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE tmp.packageToInvoicePositives
|
|
||||||
SELECT itemFk, sum(quantity) as totalQuantity
|
|
||||||
FROM tmp.packageToInvoice
|
|
||||||
GROUP BY itemFk
|
|
||||||
HAVING totalQuantity > 0;
|
|
||||||
|
|
||||||
SELECT COUNT(*)
|
|
||||||
INTO vIsInvoiceable
|
|
||||||
FROM tmp.packageToInvoicePositives;
|
|
||||||
|
|
||||||
IF vIsInvoiceable THEN
|
|
||||||
|
|
||||||
CALL ticket_add(vClient,
|
|
||||||
vDateEnd,
|
|
||||||
vWarehouse,
|
|
||||||
vCompany,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
vDateEnd,
|
|
||||||
account.myUser_getId(),
|
|
||||||
TRUE,
|
|
||||||
vNewTicket);
|
|
||||||
|
|
||||||
INSERT INTO ticketPackaging(
|
|
||||||
ticketFk,
|
|
||||||
packagingFk,
|
|
||||||
quantity,
|
|
||||||
pvp)
|
|
||||||
SELECT vNewTicket,
|
|
||||||
pti.packagingFk,
|
|
||||||
- SUM(pti.quantity) AS totalQuantity,
|
|
||||||
pti.price
|
|
||||||
FROM tmp.packageToInvoice pti
|
|
||||||
LEFT JOIN tmp.packageToInvoicePositives ptip ON pti.itemFk = ptip.itemFk
|
|
||||||
WHERE ptip.itemFK IS NOT NULL
|
|
||||||
OR vIsAllInvoiceable
|
|
||||||
GROUP BY packagingFk
|
|
||||||
HAVING totalQuantity;
|
|
||||||
|
|
||||||
INSERT INTO sale(
|
|
||||||
ticketFk,
|
|
||||||
itemFk,
|
|
||||||
concept,
|
|
||||||
quantity,
|
|
||||||
price
|
|
||||||
)
|
|
||||||
SELECT vNewTicket,
|
|
||||||
pti.itemFk,
|
|
||||||
i.name as concept,
|
|
||||||
sum(pti.quantity) as totalQuantity,
|
|
||||||
pti.price
|
|
||||||
FROM tmp.packageToInvoice pti
|
|
||||||
JOIN item i ON i.id = pti.itemFk
|
|
||||||
LEFT JOIN tmp.packageToInvoicePositives ptip ON pti.itemFk = ptip.itemFk
|
|
||||||
WHERE ptip.itemFK IS NOT NULL
|
|
||||||
OR vIsAllInvoiceable
|
|
||||||
GROUP BY pti.itemFk
|
|
||||||
HAVING totalQuantity;
|
|
||||||
|
|
||||||
INSERT INTO saleComponent(saleFk, componentFk, value)
|
|
||||||
SELECT id, vComponentCost, price
|
|
||||||
FROM sale
|
|
||||||
WHERE ticketFk = vNewTicket;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -28,5 +28,9 @@ mainLabel:BEGIN
|
||||||
UPDATE `client` c
|
UPDATE `client` c
|
||||||
SET c.salesPersonFk = null
|
SET c.salesPersonFk = null
|
||||||
WHERE c.salesPersonFk = vUserId;
|
WHERE c.salesPersonFk = vUserId;
|
||||||
|
|
||||||
|
UPDATE locker l
|
||||||
|
SET l.workerFk = NULL
|
||||||
|
WHERE l.workerFk = vUserId;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -6,7 +6,6 @@ AS SELECT `s`.`id` AS `Id_Proveedor`,
|
||||||
`s`.`account` AS `cuenta`,
|
`s`.`account` AS `cuenta`,
|
||||||
`s`.`countryFk` AS `pais_id`,
|
`s`.`countryFk` AS `pais_id`,
|
||||||
`s`.`nif` AS `NIF`,
|
`s`.`nif` AS `NIF`,
|
||||||
`s`.`isFarmer` AS `Agricola`,
|
|
||||||
`s`.`phone` AS `Telefono`,
|
`s`.`phone` AS `Telefono`,
|
||||||
`s`.`retAccount` AS `cuentaret`,
|
`s`.`retAccount` AS `cuentaret`,
|
||||||
`s`.`commission` AS `ComisionProveedor`,
|
`s`.`commission` AS `ComisionProveedor`,
|
||||||
|
|
|
@ -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');
|
|
@ -1,2 +0,0 @@
|
||||||
-- Place your SQL code here
|
|
||||||
ALTER TABLE vn.productionConfig ADD defaultSectorFk INT UNSIGNED DEFAULT 37 NOT NULL COMMENT 'Default sector';
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
ALTER TABLE vn.invoiceInConfig CHANGE sageWithholdingFk sageFarmerWithholdingFk smallint(6) NOT NULL;
|
||||||
|
ALTER TABLE vn.supplier CHANGE isFarmer isFarmer__ tinyint(1) DEFAULT 0 NOT NULL COMMENT 'refs #7345 @deprecated 2024-05-10 - Utilizar withholdingSageFk';
|
||||||
|
ALTER TABLE vn.supplier MODIFY COLUMN isFarmer__ tinyint(1) DEFAULT 0 NOT NULL COMMENT 'refs #7345 @deprecated 2024-05-10 - Utilizar withholdingSageFk';
|
|
@ -0,0 +1,3 @@
|
||||||
|
ALTER TABLE vn.item
|
||||||
|
MODIFY nonRecycledPlastic DECIMAL(10,2) DEFAULT NULL NULL,
|
||||||
|
MODIFY recycledPlastic DECIMAL(10,2) DEFAULT NULL NULL;
|
|
@ -25,7 +25,6 @@ describe('Worker basic data path', () => {
|
||||||
await page.overwrite(selectors.workerBasicData.name, 'David C.');
|
await page.overwrite(selectors.workerBasicData.name, 'David C.');
|
||||||
await page.overwrite(selectors.workerBasicData.surname, 'H.');
|
await page.overwrite(selectors.workerBasicData.surname, 'H.');
|
||||||
await page.overwrite(selectors.workerBasicData.phone, '444332211');
|
await page.overwrite(selectors.workerBasicData.phone, '444332211');
|
||||||
await page.overwrite(selectors.workerBasicData.locker, '1');
|
|
||||||
await page.click(selectors.workerBasicData.saveButton);
|
await page.click(selectors.workerBasicData.saveButton);
|
||||||
|
|
||||||
const message = await page.waitForSnackbar();
|
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.name, 'value')).toEqual('David C.');
|
||||||
expect(await page.waitToGetProperty(selectors.workerBasicData.surname, 'value')).toEqual('H.');
|
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.phone, 'value')).toEqual('444332211');
|
||||||
expect(await page.waitToGetProperty(selectors.workerBasicData.locker, 'value')).toEqual('1');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
"sageWithholding": {
|
"sageWithholding": {
|
||||||
"type": "belongsTo",
|
"type": "belongsTo",
|
||||||
"model": "SageWithholding",
|
"model": "SageWithholding",
|
||||||
"foreignKey": "sageWithholdingFk"
|
"foreignKey": "sageFarmerWithholdingFk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"acls": [{
|
"acls": [{
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<vn-crud-model
|
<vn-crud-model
|
||||||
url="InvoiceInConfigs"
|
url="InvoiceInConfigs"
|
||||||
data="$ctrl.config"
|
data="$ctrl.config"
|
||||||
filter="{fields: ['sageWithholdingFk']}"
|
filter="{fields: ['sageFarmerWithholdingFk']}"
|
||||||
id-value="1"
|
id-value="1"
|
||||||
auto-load="true">
|
auto-load="true">
|
||||||
</vn-crud-model>
|
</vn-crud-model>
|
||||||
|
|
|
@ -112,7 +112,7 @@ class Controller extends Descriptor {
|
||||||
}
|
}
|
||||||
|
|
||||||
isAgricultural() {
|
isAgricultural() {
|
||||||
return this.invoiceIn.supplier.sageWithholdingFk == this.config[0].sageWithholdingFk;
|
return this.invoiceIn.supplier.sageWithholdingFk == this.config[0].sageFarmerWithholdingFk;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
const moment = require('moment');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('resendWeeklyHourEmail', {
|
Self.remoteMethodCtx('resendWeeklyHourEmail', {
|
||||||
description: 'Send the records for the week of the date provided',
|
description: 'Send the records for the week of the date provided',
|
||||||
|
@ -31,7 +33,8 @@ module.exports = Self => {
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
const yearNumber = dated.getFullYear();
|
const yearNumber = dated.getFullYear();
|
||||||
const weekNumber = getWeekNumber(dated);
|
const weekNumber = moment(dated).isoWeek();
|
||||||
|
|
||||||
const workerTimeControlMail = await models.WorkerTimeControlMail.findOne({
|
const workerTimeControlMail = await models.WorkerTimeControlMail.findOne({
|
||||||
where: {
|
where: {
|
||||||
workerFk: workerId,
|
workerFk: workerId,
|
||||||
|
@ -54,15 +57,4 @@ module.exports = Self => {
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
function getWeekNumber(date) {
|
|
||||||
const tempDate = new Date(date);
|
|
||||||
let dayOfWeek = tempDate.getDay();
|
|
||||||
dayOfWeek = (dayOfWeek === 0) ? 7 : dayOfWeek;
|
|
||||||
const firstDayOfWeek = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() - (dayOfWeek - 1));
|
|
||||||
const firstDayOfYear = new Date(tempDate.getFullYear(), 0, 1);
|
|
||||||
const differenceInMilliseconds = firstDayOfWeek.getTime() - firstDayOfYear.getTime();
|
|
||||||
const weekNumber = Math.floor(differenceInMilliseconds / (1000 * 60 * 60 * 24 * 7)) + 1;
|
|
||||||
return weekNumber;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -121,6 +121,9 @@
|
||||||
},
|
},
|
||||||
"Operator": {
|
"Operator": {
|
||||||
"dataSource": "vn"
|
"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/isAuthorized')(Self);
|
||||||
require('../methods/worker/setPassword')(Self);
|
require('../methods/worker/setPassword')(Self);
|
||||||
|
|
||||||
Self.validatesUniquenessOf('locker', {
|
|
||||||
message: 'This locker has already been assigned'
|
|
||||||
});
|
|
||||||
|
|
||||||
Self.validateAsync('fi', tinIsValid, {
|
Self.validateAsync('fi', tinIsValid, {
|
||||||
message: 'Invalid TIN'
|
message: 'Invalid TIN'
|
||||||
});
|
});
|
||||||
|
|
|
@ -48,9 +48,6 @@
|
||||||
"code": {
|
"code": {
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
},
|
},
|
||||||
"locker": {
|
|
||||||
"type" : "number"
|
|
||||||
},
|
|
||||||
"fi": {
|
"fi": {
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
},
|
},
|
||||||
|
@ -60,6 +57,9 @@
|
||||||
"isF11Allowed": {
|
"isF11Allowed": {
|
||||||
"type" : "boolean"
|
"type" : "boolean"
|
||||||
},
|
},
|
||||||
|
"sex": {
|
||||||
|
"type" : "string"
|
||||||
|
},
|
||||||
"isFreelance": {
|
"isFreelance": {
|
||||||
"type" : "boolean"
|
"type" : "boolean"
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,20 @@
|
||||||
"type": "hasMany",
|
"type": "hasMany",
|
||||||
"model": "WorkerTeamCollegues",
|
"model": "WorkerTeamCollegues",
|
||||||
"foreignKey": "workerFk"
|
"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"
|
ng-model="$ctrl.worker.SSN"
|
||||||
rule>
|
rule>
|
||||||
</vn-textfield>
|
</vn-textfield>
|
||||||
<vn-input-number
|
|
||||||
min="0"
|
|
||||||
label="Locker"
|
|
||||||
ng-model="$ctrl.worker.locker">
|
|
||||||
</vn-input-number>
|
|
||||||
</vn-horizontal>
|
</vn-horizontal>
|
||||||
</vn-vertical>
|
</vn-vertical>
|
||||||
</vn-card>
|
</vn-card>
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
"loopback-context": "^3.5.2",
|
"loopback-context": "^3.5.2",
|
||||||
"loopback-datasource-juggler": "3.36.1",
|
"loopback-datasource-juggler": "3.36.1",
|
||||||
"md5": "^2.2.1",
|
"md5": "^2.2.1",
|
||||||
|
"moment": "^2.30.1",
|
||||||
"mysql": "2.18.1",
|
"mysql": "2.18.1",
|
||||||
"node-ssh": "^11.0.0",
|
"node-ssh": "^11.0.0",
|
||||||
"object.pick": "^1.3.0",
|
"object.pick": "^1.3.0",
|
||||||
|
|
|
@ -83,6 +83,9 @@ dependencies:
|
||||||
md5:
|
md5:
|
||||||
specifier: ^2.2.1
|
specifier: ^2.2.1
|
||||||
version: 2.3.0
|
version: 2.3.0
|
||||||
|
moment:
|
||||||
|
specifier: ^2.30.1
|
||||||
|
version: 2.30.1
|
||||||
mysql:
|
mysql:
|
||||||
specifier: 2.18.1
|
specifier: 2.18.1
|
||||||
version: 2.18.1
|
version: 2.18.1
|
||||||
|
@ -10202,6 +10205,10 @@ packages:
|
||||||
to-iso-string: 0.0.2
|
to-iso-string: 0.0.2
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/moment@2.30.1:
|
||||||
|
resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/ms@0.7.1:
|
/ms@0.7.1:
|
||||||
resolution: {integrity: sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==}
|
resolution: {integrity: sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
Loading…
Reference in New Issue