32 lines
867 B
MySQL
32 lines
867 B
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`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 ;
|