74 lines
2.0 KiB
SQL
74 lines
2.0 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_weeklyClone`(vSinceWeek INT, vToWeek INT)
|
|
BEGIN
|
|
/**
|
|
* Clona los traslados plantilla para las semanas pasadas por parámetros.
|
|
*
|
|
* @param vSinceWeek Número de semanas en el futuro para empezar a clonar
|
|
* @param vToWeek Número de semenas en el futuro hasta donde clonar
|
|
*/
|
|
DECLARE vCounter INT;
|
|
DECLARE vCurrentTravelFk INT;
|
|
DECLARE vShipped DATE;
|
|
DECLARE vLanded DATE;
|
|
DECLARE vWarehouseInFk INT;
|
|
DECLARE vWarehouseOutFk INT;
|
|
DECLARE vAgencyModeFk INT;
|
|
DECLARE vRef VARCHAR(255);
|
|
DECLARE vNewTravelFk INT;
|
|
DECLARE vDone BOOL;
|
|
DECLARE vRsTravel CURSOR FOR
|
|
SELECT travelFk,
|
|
@a := TIMESTAMPADD(DAY,vCounter * 7 - WEEKDAY(util.VN_CURDATE()) - 1 + weekDay, util.VN_CURDATE()),
|
|
@a := TIMESTAMPADD(DAY,duration,@a),
|
|
warehouseOutFk,
|
|
warehouseInFk,
|
|
`ref`,
|
|
agencyModeFk
|
|
FROM travelClonedWeekly
|
|
WHERE travelFk;
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
|
|
|
SET vCounter = vSinceWeek;
|
|
|
|
vWeekLoop :LOOP
|
|
INSERT IGNORE INTO travel (shipped, landed, warehouseOutFk, warehouseInFk, agencyModeFk, ref, cargoSupplierFk, kg)
|
|
SELECT @a := TIMESTAMPADD(DAY, vCounter * 7 - WEEKDAY(util.VN_CURDATE()) - 1 + weekDay, util.VN_CURDATE()),
|
|
@a := TIMESTAMPADD(DAY, duration, @a),
|
|
warehouseOutFk,
|
|
warehouseInFk,
|
|
agencyModeFk,
|
|
ref,
|
|
supplierFk,
|
|
kg
|
|
FROM travelClonedWeekly
|
|
WHERE travelFk IS NULL;
|
|
|
|
OPEN vRsTravel;
|
|
|
|
l: LOOP
|
|
SET vDone = FALSE;
|
|
FETCH vRsTravel INTO vCurrentTravelFk, vShipped, vLanded, vWarehouseOutFk, vWarehouseInFk, vRef, vAgencyModeFk;
|
|
|
|
IF vDone THEN
|
|
LEAVE l;
|
|
END IF;
|
|
|
|
BEGIN
|
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION RESIGNAL SQLSTATE '01000';
|
|
CALL travel_cloneWithEntries(vCurrentTravelFk, vShipped, vLanded, vWarehouseOutFk, vWarehouseInFk, vRef, vAgencyModeFk, vNewTravelFk);
|
|
END;
|
|
END LOOP;
|
|
|
|
CLOSE vRsTravel;
|
|
|
|
IF vCounter = vToWeek THEN
|
|
LEAVE vWeekLoop;
|
|
END IF;
|
|
|
|
SET vCounter = vCounter + 1;
|
|
END LOOP vWeekLoop;
|
|
END$$
|
|
DELIMITER ;
|