32 lines
865 B
SQL
32 lines
865 B
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`getNextDueDate`(vDated DATE, vGapDays INT, vPayDay INT)
|
|
RETURNS date
|
|
NOT DETERMINISTIC
|
|
NO SQL
|
|
BEGIN
|
|
|
|
DECLARE vReturn DATE;
|
|
DECLARE vDuaDate DATE;
|
|
DECLARE vDuaDateDay INT;
|
|
|
|
SELECT TIMESTAMPADD(DAY, vGapDays, vDated) INTO vDuaDate;
|
|
|
|
IF vDuaDate = CONCAT(YEAR(vDuaDate), '-03-01') THEN
|
|
SET vDuaDate = TIMESTAMPADD (DAY , -1, vDuaDate);
|
|
ELSEIF vDuaDate = CONCAT(YEAR(vDuaDate), '-02-29') THEN
|
|
SET vDuaDate = TIMESTAMPADD (DAY , -2, vDuaDate);
|
|
END IF;
|
|
|
|
IF MONTH(vDuaDate) = 2 AND vPayDay = 30 THEN
|
|
IF util.isLeapYear(YEAR(vDuaDate)) THEN
|
|
SET vPayDay = 29;
|
|
ELSE
|
|
SET vPayDay = 28;
|
|
END IF;
|
|
END IF;
|
|
|
|
SELECT DAY(vDuaDate) INTO vDuaDateDay;
|
|
RETURN TIMESTAMPADD(MONTH, (vDuaDateDay > vPayDay), DATE_FORMAT(vDuaDate, CONCAT('%y/%m/', vPayDay)));
|
|
END$$
|
|
DELIMITER ;
|