Merge branch 'dev' into 7039-country-country
gitea/salix/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Robert Ferrús 2024-05-14 05:49:39 +00:00
commit c6f7a0768a
24 changed files with 363 additions and 266 deletions

View File

@ -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);
@ -3789,4 +3789,6 @@ INSERT INTO vn.workerTeam(id, team, workerFk)
(8, 1, 19); (8, 1, 19);
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;

View File

@ -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;
@ -40,117 +40,154 @@ BEGIN
inventorySupplierFk INT(10) inventorySupplierFk INT(10)
); );
INSERT INTO tItemDiary INSERT INTO tItemDiary
SELECT tr.landed shipped, WITH entriesIn AS (
b.quantity `in`, SELECT tr.landed shipped,
NULL `out`, b.quantity `in`,
st.alertLevel , NULL `out`,
st.name stateName, st.alertLevel ,
s.name `name`, st.name stateName,
e.invoiceNumber reference, s.name `name`,
e.id origin, e.invoiceNumber reference,
s.id clientFk, e.id origin,
IF(st.`code` = 'DELIVERED', TRUE, FALSE) isPicked, s.id clientFk,
FALSE isTicket, IF(st.`code` = 'DELIVERED', TRUE, FALSE) isPicked,
b.id lineFk, FALSE isTicket,
NULL `order`, b.id lineFk,
NULL clientType, NULL `order`,
NULL claimFk, NULL clientType,
ec.inventorySupplierFk NULL claimFk,
FROM buy b ec.inventorySupplierFk
JOIN entry e ON e.id = b.entryFk FROM vn.buy b
JOIN travel tr ON tr.id = e.travelFk JOIN vn.entry e ON e.id = b.entryFk
JOIN supplier s ON s.id = e.supplierFk JOIN vn.travel tr ON tr.id = e.travelFk
JOIN state st ON st.`code` = IF( tr.landed < util.VN_CURDATE() JOIN vn.supplier s ON s.id = e.supplierFk
OR (util.VN_CURDATE() AND tr.isReceived), JOIN vn.state st ON st.`code` = IF( tr.landed < util.VN_CURDATE()
'DELIVERED', OR (util.VN_CURDATE() AND tr.isReceived),
'FREE') 'DELIVERED',
JOIN entryConfig ec 'FREE')
WHERE tr.landed >= vDateInventory JOIN vn.entryConfig ec
AND vWarehouseFk = tr.warehouseInFk WHERE tr.landed >= vDateInventory
AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL) AND vWarehouseFk = tr.warehouseInFk
AND b.itemFk = vItemFk AND (s.id <> ec.inventorySupplierFk OR vDate IS NULL)
AND e.isExcludedFromAvailable = FALSE AND b.itemFk = vItemFk
AND e.isRaid = FALSE AND NOT e.isExcludedFromAvailable
UNION ALL AND NOT e.isRaid
SELECT tr.shipped, ), entriesOut AS (
NULL, SELECT tr.shipped,
b.quantity, NULL,
st.alertLevel, b.quantity,
st.name, st.alertLevel,
s.name, st.name stateName,
e.invoiceNumber, s.name ,
e.id, e.invoiceNumber,
s.id, e.id entryFk,
IF(st.`code` = 'DELIVERED' , TRUE, FALSE), s.id supplierFk,
FALSE, IF(st.`code` = 'DELIVERED' , TRUE, FALSE),
b.id, FALSE isTicket,
NULL, b.id,
NULL, NULL `order`,
NULL, NULL clientType,
ec.inventorySupplierFk NULL claimFk,
FROM buy b ec.inventorySupplierFk
JOIN entry e ON e.id = b.entryFk FROM vn.buy b
JOIN travel tr ON tr.id = e.travelFk JOIN vn.entry e ON e.id = b.entryFk
JOIN warehouse w ON w.id = tr.warehouseOutFk JOIN vn.travel tr ON tr.id = e.travelFk
JOIN supplier s ON s.id = e.supplierFk JOIN vn.warehouse w ON w.id = tr.warehouseOutFk
JOIN state st ON st.`code` = IF(tr.shipped < util.VN_CURDATE() JOIN vn.supplier s ON s.id = e.supplierFk
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 ticketFk,
t.id, t.clientFk,
t.clientFk, s.id saleFk,
stk.id, st.`order`,
TRUE, c.typeFk,
s.id, cb.claimFk
st.`order`, FROM vn.sale s
c.typeFk, JOIN vn.ticket t ON t.id = s.ticketFk
cb.claimFk, LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
NULL LEFT JOIN vn.state st ON st.`code` = ts.`code`
FROM sale s JOIN vn.client c ON c.id = t.clientFk
JOIN ticket t ON t.id = s.ticketFk JOIN vn.state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(),
LEFT JOIN ticketState ts ON ts.ticketFk = t.id 'DELIVERED',
LEFT JOIN state st ON st.`code` = ts.`code` IF (t.shipped > util.dayEnd(util.VN_CURDATE()),
JOIN client c ON c.id = t.clientFk 'FREE',
JOIN state st2 ON st2.`code` = IF(t.shipped < util.VN_CURDATE(), IFNULL(ts.code, 'FREE')))
'DELIVERED', LEFT JOIN vn.claimBeginning cb ON s.id = cb.saleFk
IF (t.shipped > util.dayEnd(util.VN_CURDATE()), WHERE t.shipped >= vDateInventory
'FREE', AND s.itemFk = vItemFk
IFNULL(ts.code, 'FREE'))) AND vWarehouseFk = t.warehouseFk
LEFT JOIN state stPrep ON stPrep.`code` = 'PREPARED' ),sale AS (
LEFT JOIN saleTracking stk ON stk.saleFk = s.id SELECT s.shipped,
AND stk.stateFk = stPrep.id NULL `in`,
LEFT JOIN claimBeginning cb ON s.id = cb.saleFk s.quantity,
WHERE t.shipped >= vDateInventory s.alertLevel,
AND s.itemFk = vItemFk s.name,
AND vWarehouseFk =t.warehouseFk s.nickname,
ORDER BY shipped, s.refFk,
(inventorySupplierFk = clientFk) DESC, s.ticketFk,
alertLevel DESC, s.clientFk,
isTicket, IF(stk.saleFk, TRUE, NULL),
`order` DESC, TRUE,
isPicked DESC, s.saleFk,
`in` DESC, s.`order`,
`out` DESC; 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,
(inventorySupplierFk = clientFk) DESC,
alertLevel DESC,
isTicket,
`order` DESC,
isPicked DESC,
`in` DESC,
`out` DESC;
IF vDate IS NULL THEN IF vDate IS NULL THEN
SET @a := 0; SET @a := 0;
SET @currentLineFk := 0; SET @currentLineFk := 0;
SET @shipped := ''; SET @shipped := '';
@ -220,7 +257,7 @@ BEGIN
FROM tItemDiary FROM tItemDiary
WHERE shipped >= vDate; WHERE shipped >= vDate;
END IF; END IF;
DROP TEMPORARY TABLE tItemDiary; DROP TEMPORARY TABLE tItemDiary;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -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 ;

View File

@ -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 ;

View File

@ -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`,

View File

@ -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);

View File

@ -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');

View File

@ -1,2 +0,0 @@
-- Place your SQL code here
ALTER TABLE vn.productionConfig ADD defaultSectorFk INT UNSIGNED DEFAULT 37 NOT NULL COMMENT 'Default sector';

View File

@ -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';

View File

@ -0,0 +1,3 @@
ALTER TABLE vn.item
MODIFY nonRecycledPlastic DECIMAL(10,2) DEFAULT NULL NULL,
MODIFY recycledPlastic DECIMAL(10,2) DEFAULT NULL NULL;

View File

@ -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');
}); });
}); });

View File

@ -26,7 +26,7 @@
"sageWithholding": { "sageWithholding": {
"type": "belongsTo", "type": "belongsTo",
"model": "SageWithholding", "model": "SageWithholding",
"foreignKey": "sageWithholdingFk" "foreignKey": "sageFarmerWithholdingFk"
} }
}, },
"acls": [{ "acls": [{

View File

@ -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>

View File

@ -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;
} }
} }

View File

@ -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;
}
}; };

View File

@ -121,6 +121,9 @@
}, },
"Operator": { "Operator": {
"dataSource": "vn" "dataSource": "vn"
},
"Locker": {
"dataSource": "vn"
} }
} }

View File

@ -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);
}
}
});
};

View File

@ -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"]
}
}
}

View File

@ -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);
});
});

View File

@ -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'
}); });

View File

@ -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"
}
]
} }

View File

@ -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>

View File

@ -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",

View File

@ -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