zoneClosure 3
This commit is contained in:
parent
36d142c3d6
commit
a8137c8a6b
|
@ -1,19 +1,3 @@
|
|||
ALTER TABLE `vn`.`ticket`
|
||||
ADD COLUMN `zonePrice` DECIMAL(10,2) NULL DEFAULT NULL AFTER `collectionFk`,
|
||||
ADD COLUMN `zoneBonus` DECIMAL(10,2) NULL DEFAULT NULL AFTER `zonePrice`,
|
||||
ADD COLUMN `zoneClosure` TIME NULL AFTER `zoneBonus`;
|
||||
|
||||
CREATE TABLE `vn`.`zoneCalcTicket` (
|
||||
`zoneFk` int(11) NOT NULL PRIMARY KEY,
|
||||
CONSTRAINT `zoneCalcTicketfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `vn`.`zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
DROP EVENT IF EXISTS vn.`zone_doCalc`;
|
||||
CREATE DEFINER=`root`@`%` EVENT vn.`zone_doCalc`
|
||||
ON SCHEDULE EVERY 15 SECOND STARTS '2020-01-31 11:32:30'
|
||||
ON COMPLETION PRESERVE ENABLE
|
||||
DO CALL util.procNoOverlap('vn.zone_doCalc');
|
||||
|
||||
DROP TABLE `vn`.`zoneConfig`;
|
||||
|
||||
DROP procedure IF EXISTS vn.`zoneClosure_recalc`;
|
||||
ADD COLUMN `zoneBonus` DECIMAL(10,2) NULL DEFAULT NULL AFTER `zonePrice`;
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `ticketCreateWithUser`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `ticketCreateWithUser`(
|
||||
vClientId INT
|
||||
,vShipped DATE
|
||||
,vWarehouseFk INT
|
||||
,vCompanyFk INT
|
||||
,vAddressFk INT
|
||||
,vAgencyModeFk INT
|
||||
,vRouteFk INT
|
||||
,vlanded DATE
|
||||
,vUserId INT
|
||||
,OUT vNewTicket INT)
|
||||
BEGIN
|
||||
|
||||
DECLARE vZoneFk INT;
|
||||
DECLARE vPrice DECIMAL(10,2);
|
||||
DECLARE vBonus DECIMAL(10,2);
|
||||
|
||||
IF vClientId IS NULL THEN
|
||||
CALL util.throw ('CLIENT_NOT_ESPECIFIED');
|
||||
END IF;
|
||||
|
||||
IF NOT vAddressFk OR vAddressFk IS NULL THEN
|
||||
SELECT id INTO vAddressFk
|
||||
FROM address
|
||||
WHERE clientFk = vClientId AND isDefaultAddress;
|
||||
END IF;
|
||||
|
||||
IF vAgencyModeFk IS NOT NULL THEN
|
||||
|
||||
CALL vn.zone_getShippedWarehouse(vlanded, vAddressFk, vAgencyModeFk);
|
||||
|
||||
SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus
|
||||
FROM tmp.zoneGetShipped
|
||||
WHERE shipped = vShipped AND warehouseFk = vWarehouseFk LIMIT 1;
|
||||
|
||||
IF vZoneFk IS NULL OR vZoneFk = 0 THEN
|
||||
CALL util.throw ('NOT_ZONE_WITH_THIS_PARAMETERS');
|
||||
END IF;
|
||||
END IF;
|
||||
INSERT INTO ticket (
|
||||
clientFk,
|
||||
shipped,
|
||||
addressFk,
|
||||
agencyModeFk,
|
||||
nickname,
|
||||
warehouseFk,
|
||||
routeFk,
|
||||
companyFk,
|
||||
landed,
|
||||
zoneFk,
|
||||
zonePrice,
|
||||
zoneBonus
|
||||
)
|
||||
SELECT
|
||||
vClientId,
|
||||
vShipped,
|
||||
a.id,
|
||||
vAgencyModeFk,
|
||||
a.nickname,
|
||||
vWarehouseFk,
|
||||
IF(vRouteFk,vRouteFk,NULL),
|
||||
vCompanyFk,
|
||||
vlanded,
|
||||
vZoneFk,
|
||||
vPrice,
|
||||
vBonus
|
||||
FROM address a
|
||||
JOIN agencyMode am ON am.id = a.agencyModeFk
|
||||
WHERE a.id = vAddressFk;
|
||||
|
||||
SET vNewTicket = LAST_INSERT_ID();
|
||||
|
||||
INSERT INTO ticketObservation(ticketFk, observationTypeFk, description)
|
||||
SELECT vNewTicket, ao.observationTypeFk, ao.description
|
||||
FROM addressObservation ao
|
||||
JOIN address a ON a.id = ao.addressFk
|
||||
WHERE a.id = vAddressFk;
|
||||
|
||||
INSERT INTO vn.ticketLog
|
||||
SET originFk = vNewTicket, userFk = vUserId, `action` = 'insert', description = CONCAT('Ha creado el ticket:', ' ', vNewTicket);
|
||||
|
||||
IF (SELECT ct.isCreatedAsServed FROM vn.clientType ct JOIN vn.client c ON c.typeFk = ct.code WHERE c.id = vClientId ) <> FALSE THEN
|
||||
INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
|
||||
SELECT id, vNewTicket, getWorker()
|
||||
FROM state
|
||||
WHERE `code` = 'DELIVERED';
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `ticket_componentUpdate`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `ticket_componentUpdate`(
|
||||
vTicketFk INT,
|
||||
vClientFk INT,
|
||||
vAgencyModeFk INT,
|
||||
vAddressFk INT,
|
||||
vZoneFk INT,
|
||||
vWarehouseFk TINYINT,
|
||||
vCompanyFk SMALLINT,
|
||||
vShipped DATETIME,
|
||||
vLanded DATE,
|
||||
vIsDeleted BOOLEAN,
|
||||
vHasToBeUnrouted BOOLEAN,
|
||||
vOption INT)
|
||||
BEGIN
|
||||
DECLARE vPrice DECIMAL(10,2);
|
||||
DECLARE vBonus DECIMAL(10,2);
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
IF (SELECT addressFk FROM ticket WHERE id = vTicketFk) <> vAddressFk THEN
|
||||
|
||||
UPDATE ticket t
|
||||
JOIN address a ON a.id = vAddressFk
|
||||
SET t.nickname = a.nickname
|
||||
WHERE t.id = vTicketFk;
|
||||
|
||||
END IF;
|
||||
|
||||
CALL vn.zone_getShippedWarehouse(vlanded, vAddressFk, vAgencyModeFk);
|
||||
|
||||
SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus
|
||||
FROM tmp.zoneGetShipped
|
||||
WHERE shipped = vShipped AND warehouseFk = vWarehouseFk LIMIT 1;
|
||||
|
||||
UPDATE ticket t
|
||||
SET
|
||||
t.clientFk = vClientFk,
|
||||
t.agencyModeFk = vAgencyModeFk,
|
||||
t.addressFk = vAddressFk,
|
||||
t.zoneFk = vZoneFk,
|
||||
t.zonePrice = vPrice,
|
||||
t.zoneBonus = vBonus,
|
||||
t.warehouseFk = vWarehouseFk,
|
||||
t.companyFk = vCompanyFk,
|
||||
t.landed = vLanded,
|
||||
t.shipped = vShipped,
|
||||
t.isDeleted = vIsDeleted
|
||||
WHERE
|
||||
t.id = vTicketFk;
|
||||
|
||||
IF vHasToBeUnrouted THEN
|
||||
UPDATE ticket t SET t.routeFk = NULL
|
||||
WHERE t.id = vTicketFk;
|
||||
END IF;
|
||||
|
||||
IF vOption <> 8 THEN
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
||||
CREATE TEMPORARY TABLE tmp.sale
|
||||
(PRIMARY KEY (saleFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT id AS saleFk, vWarehouseFk warehouseFk
|
||||
FROM sale s WHERE s.ticketFk = vTicketFk;
|
||||
|
||||
CALL ticketComponentUpdateSale (vOption);
|
||||
|
||||
DROP TEMPORARY TABLE tmp.sale;
|
||||
END IF;
|
||||
COMMIT;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zone_doCalc`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_doCalc`()
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Updates ticket fields related with zone
|
||||
*/
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vTicketFk INT;
|
||||
DECLARE vShipped DATE;
|
||||
DECLARE vZoneFk INT;
|
||||
|
||||
DECLARE cCur CURSOR FOR
|
||||
SELECT t.id, t.shipped, t.zoneFk
|
||||
FROM zoneCalcTicket zct
|
||||
JOIN ticket t ON t.zoneFk = zct.zoneFk
|
||||
WHERE shipped >= CURDATE();
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||
SET vDone = TRUE;
|
||||
|
||||
OPEN cCur;
|
||||
|
||||
myLoop: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH cCur INTO vTicketFk, vShipped, vZoneFk;
|
||||
|
||||
IF vDone THEN
|
||||
LEAVE myLoop;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.zone;
|
||||
CREATE TEMPORARY TABLE tmp.zone
|
||||
(INDEX (id))
|
||||
ENGINE = MEMORY
|
||||
SELECT vZoneFk id;
|
||||
|
||||
CALL zone_getOptionsForShipment(vShipped, TRUE);
|
||||
|
||||
UPDATE ticket t
|
||||
LEFT JOIN tmp.zoneOption zo ON TRUE
|
||||
SET zonePrice = zo.price, zoneBonus = zo.bonus, zoneClosure = zo.`hour`
|
||||
WHERE t.id = vTicketFk;
|
||||
|
||||
END LOOP;
|
||||
|
||||
CLOSE cCur;
|
||||
|
||||
DELETE FROM zoneCalcTicket;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zoneClosure_recalc`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zoneClosure_recalc`()
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Recalculates the delivery time (hour) for every zone in days + scope in future
|
||||
*/
|
||||
DECLARE vScope INT;
|
||||
DECLARE vCounter INT DEFAULT 0;
|
||||
DECLARE vShipped DATE DEFAULT CURDATE();
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
DO RELEASE_LOCK('vn.zoneClosure_recalc');
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
IF NOT GET_LOCK('vn.zoneClosure_recalc', 0) THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
SELECT scope INTO vScope
|
||||
FROM zoneConfig;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.zone;
|
||||
CREATE TEMPORARY TABLE tmp.zone
|
||||
(INDEX (id))
|
||||
ENGINE = MEMORY
|
||||
SELECT id FROM zone;
|
||||
|
||||
TRUNCATE TABLE zoneClosure;
|
||||
|
||||
WHILE vCounter <= vScope DO
|
||||
CALL zone_getOptionsForShipment(vShipped, TRUE);
|
||||
INSERT INTO zoneClosure(zoneFk, dated, `hour`)
|
||||
SELECT zoneFk, vShipped, `hour` FROM tmp.zoneOption;
|
||||
|
||||
SET vCounter = vCounter + 1;
|
||||
SET vShipped = TIMESTAMPADD(DAY, 1, vShipped);
|
||||
END WHILE;
|
||||
|
||||
DROP TEMPORARY TABLE tmp.zone;
|
||||
DO RELEASE_LOCK('vn.zoneClosure_recalc');
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -7,6 +7,7 @@ CREATE DEFINER=`root`@`%` PROCEDURE `zone_doCalcInitialize`()
|
|||
proc: BEGIN
|
||||
/**
|
||||
* Initialize ticket
|
||||
* si en 01-07-20 aun esta este proc, kkear
|
||||
*/
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vTicketFk INT;
|
||||
|
@ -16,7 +17,7 @@ proc: BEGIN
|
|||
DECLARE cCur CURSOR FOR
|
||||
SELECT t.id, t.landed, t.zoneFk
|
||||
FROM ticket t
|
||||
WHERE (zonePrice IS NULL OR zoneBonus IS NULL OR zoneClosure IS NULL)
|
||||
WHERE (zonePrice IS NULL OR zoneBonus IS NULL)
|
||||
AND landed >= '2019-01-01' AND shipped >= '2019-01-01'
|
||||
GROUP BY landed, zoneFk;
|
||||
|
||||
|
@ -43,12 +44,12 @@ proc: BEGIN
|
|||
|
||||
UPDATE ticket t
|
||||
LEFT JOIN tmp.zoneOption zo ON TRUE
|
||||
SET zonePrice = zo.price, zoneBonus = zo.bonus, zoneClosure = zo.`hour`
|
||||
SET zonePrice = zo.price, zoneBonus = zo.bonus
|
||||
WHERE t.zoneFk = vZoneFk AND landed = vLanded;
|
||||
|
||||
UPDATE ticket t
|
||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||
SET zonePrice = z.price, zoneBonus = z.bonus, zoneClosure = z.`hour`
|
||||
SET zonePrice = z.price, zoneBonus = z.bonus
|
||||
WHERE t.zonePrice IS NULL AND z.id = vZoneFk
|
||||
AND landed >= '2019-01-01' AND shipped >= '2019-01-01';
|
||||
|
||||
|
@ -56,7 +57,6 @@ proc: BEGIN
|
|||
|
||||
CLOSE cCur;
|
||||
|
||||
DELETE FROM zoneCalcTicket;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -6,7 +6,7 @@ USE `vn`$$
|
|||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getShippedWarehouse`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT)
|
||||
BEGIN
|
||||
/**
|
||||
* Devuelve la mÃnima fecha de envÃo para cada warehouse
|
||||
* Devuelve la mÃÂnima fecha de envío para cada warehouse
|
||||
*
|
||||
* @param vLanded La fecha de recepcion
|
||||
* @param vAddressFk Id del consignatario
|
||||
|
@ -25,7 +25,9 @@ BEGIN
|
|||
TIMESTAMPADD(DAY,-zo.travelingDays, vLanded) shipped,
|
||||
zo.`hour`,
|
||||
zw.warehouseFk,
|
||||
z.agencyModeFk
|
||||
z.agencyModeFk,
|
||||
zo.price,
|
||||
zo.bonus
|
||||
FROM tmp.zoneOption zo
|
||||
JOIN zoneWarehouse zw ON zw.zoneFk = zo.zoneFk
|
||||
JOIN zone z ON z.id = zo.zoneFk
|
||||
|
|
|
@ -497,6 +497,8 @@ INSERT INTO `vn`.`zoneWarehouse` (`id`, `zoneFk`, `warehouseFk`)
|
|||
(11, 11, 5),
|
||||
(12, 12, 4),
|
||||
(13, 13, 5);
|
||||
|
||||
INSERT INTO `vn`.`zoneConfig` (`scope`) VALUES ('1');
|
||||
|
||||
INSERT INTO `vn`.`route`(`id`, `time`, `workerFk`, `created`, `vehicleFk`, `agencyModeFk`, `description`, `m3`, `cost`, `started`, `finished`, `zoneFk`)
|
||||
VALUES
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"Zone": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
"ZoneCalcTicket": {
|
||||
"ZoneClosure": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
"ZoneEvent": {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
const app = require('vn-loopback/server/server');
|
||||
|
||||
|
||||
module.exports = Self => {
|
||||
app.on('started', function() {
|
||||
let models = ['Zone', 'ZoneEvent', 'ZoneExclusion'];
|
||||
|
@ -14,10 +13,13 @@ module.exports = Self => {
|
|||
|
||||
async function doCalc(ctx) {
|
||||
try {
|
||||
await Self.create({zoneFk: ctx.instance.zoneFk || ctx.instance.id});
|
||||
await Self.rawSql(`
|
||||
CREATE EVENT zoneClosure_doRecalc
|
||||
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 15 SECOND
|
||||
DO CALL zoneClosure_recalc;
|
||||
`);
|
||||
} catch (err) {
|
||||
if (err.code != 'ER_DUP_ENTRY')
|
||||
throw err;
|
||||
if (err.code != 'ER_EVENT_ALREADY_EXISTS') throw err;
|
||||
}
|
||||
}
|
||||
});
|
|
@ -1,15 +1,23 @@
|
|||
{
|
||||
"name": "ZoneCalcTicket",
|
||||
"name": "ZoneClosure",
|
||||
"base": "VnModel",
|
||||
"options": {
|
||||
"mysql": {
|
||||
"table": "zoneCalcTicket"
|
||||
"table": "zoneClosure"
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"zoneFk": {
|
||||
"id": true,
|
||||
"type": "Number"
|
||||
},
|
||||
"dated": {
|
||||
"type": "Date",
|
||||
"required": true
|
||||
},
|
||||
"hour": {
|
||||
"type": "date",
|
||||
"required": true
|
||||
}
|
||||
},
|
||||
"relations": {
|
Loading…
Reference in New Issue