apzl_leasing/src_sql/function/getRentPenalty.sql

242 lines
7.1 KiB
SQL
Raw Blame History

DELIMITER $$
USE `apzl`$$
DROP FUNCTION IF EXISTS `getRentPenalty`$$
CREATE DEFINER=`apzl`@`%` FUNCTION `getRentPenalty`(r_payment_number VARCHAR(40),r_plan_list VARCHAR(40),calc_date VARCHAR(40)) RETURNS VARCHAR(200) CHARSET gbk
RETURN (
SELECT t.plan_penalty FROM (
SELECT
`l`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`,
`l`.`PLAN_LIST` AS `PLAN_LIST`,
`l`.`PLAN_DATE` AS `PLAN_DATE`,
ROUND(
SUM(
(
CASE
WHEN (
(
STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d') + c.attr_value
) < IF(
(`ll`.`hire_date` > calc_date),
calc_date,
`ll`.`hire_date`
)
)
THEN (
(
(`lcc`.`PENA_RATE` / 10000) * (
TO_DAYS(
IF(
(`ll`.`hire_date` > calc_date),
calc_date,
`ll`.`hire_date`
)
) - TO_DAYS(
STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d')
)
)
) * IFNULL(`ll`.`RENT`, 0)
)
ELSE 0
END
)
),
2
) AS `plan_penalty`,
ROUND(
SUM(
(
IFNULL(`ll`.`PENALTY`, 0) + IFNULL(`ll`.`PENALTY_ADJUST`, 0)
)
),
2
) AS `income_penalty`,
ROUND(
(
SUM(
(
CASE
WHEN (
(
STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d') + c.attr_value
) < IF(
(`ll`.`hire_date` > calc_date),
calc_date,
`ll`.`hire_date`
)
)
THEN (
(
(`lcc`.`PENA_RATE` / 10000) * (
TO_DAYS(
IF(
(`ll`.`hire_date` > calc_date),
calc_date,
`ll`.`hire_date`
)
) - TO_DAYS(
STR_TO_DATE(`l`.`PLAN_DATE`, '%Y/%m/%d')
)
)
) * IFNULL(`ll`.`RENT`, 0)
)
ELSE 0
END
)
) - SUM(
(
IFNULL(`ll`.`PENALTY`, 0) + IFNULL(`ll`.`PENALTY_ADJUST`, 0)
)
)
),
2
) AS `penalty`
FROM
(
(
(
`apzl`.`lc_calc_condition` `lcc`
LEFT JOIN `apzl`.`lc_calc_condition_status` `lccs`
ON (
(
`lcc`.`PAYMENT_NUMBER` = `lccs`.`PAYMENT_NUMBER`
)
)
LEFT JOIN CONFIGURATE c ON 1=1 AND c.attr_id='<EFBFBD>ⷣϢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' AND c.field1='<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
)
LEFT JOIN `apzl`.`lc_rent_plan` `l`
ON (
(
`lccs`.`PAYMENT_NUMBER` = `l`.`PAYMENT_NUMBER`
)
)
)
LEFT JOIN
(SELECT
`lri`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`,
`lri`.`PLAN_LIST` AS `PLAN_LIST`,
`lri`.`RENT` AS `RENT`,
`lri`.`PENALTY` AS `PENALTY`,
`lri`.`PENALTY_ADJUST` AS `PENALTY_ADJUST`,
STR_TO_DATE(`lri`.`HIRE_DATE`, '%Y/%m/%d') AS `hire_date`
FROM
`apzl`.`lc_rent_income` `lri`
WHERE (`lri`.`ROLL_BACK` = '0')
UNION
ALL
SELECT
`lrit`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`,
`lrit`.`PLAN_LIST` AS `PLAN_LIST`,
`lrit`.`RENT` AS `RENT`,
`lrit`.`PENALTY` AS `PENALTY`,
`lrit`.`PENALTY_ADJUST` AS `PENALTY_ADJUST`,
STR_TO_DATE(`lrit`.`HIRE_DATE`, '%Y/%m/%d') AS `hire_date`
FROM
`apzl`.`lc_rent_income_temp` `lrit`
WHERE (
(`lrit`.`ROLL_BACK` = '0')
AND (`lrit`.`IS_FLOWING` = '0')
)
UNION
ALL
SELECT
`lrp`.`PAYMENT_NUMBER` AS `PAYMENT_NUMBER`,
`lrp`.`PLAN_LIST` AS `PLAN_LIST`,
(
(
`lrp`.`RENT` - IFNULL(`lr`.`srent`, 0)
) - IFNULL(`lrt`.`srent`, 0)
) AS `rent`,
0 AS `0`,
0 AS `0`,
calc_date AS `hire_date`
FROM
(
(
`apzl`.`lc_rent_plan` `lrp`
LEFT JOIN
(SELECT
`apzl`.`lc_rent_income`.`PAYMENT_NUMBER` AS `payment_number`,
`apzl`.`lc_rent_income`.`PLAN_LIST` AS `plan_list`,
SUM(`apzl`.`lc_rent_income`.`RENT`) AS `srent`
FROM
`apzl`.`lc_rent_income`
WHERE (
`apzl`.`lc_rent_income`.`ROLL_BACK` = '0'
)
GROUP BY `apzl`.`lc_rent_income`.`PAYMENT_NUMBER`,
`apzl`.`lc_rent_income`.`PLAN_LIST`) `lr`
ON (
(
(
`lr`.`payment_number` = `lrp`.`PAYMENT_NUMBER`
)
AND (
`lr`.`plan_list` = `lrp`.`PLAN_LIST`
)
)
)
)
LEFT JOIN
(SELECT
`apzl`.`lc_rent_income_temp`.`PAYMENT_NUMBER` AS `payment_number`,
`apzl`.`lc_rent_income_temp`.`PLAN_LIST` AS `plan_list`,
SUM(
`apzl`.`lc_rent_income_temp`.`RENT`
) AS `srent`
FROM
`apzl`.`lc_rent_income_temp`
WHERE (
(
`apzl`.`lc_rent_income_temp`.`ROLL_BACK` = '0'
)
AND (
`apzl`.`lc_rent_income_temp`.`IS_FLOWING` = '0'
)
)
GROUP BY `apzl`.`lc_rent_income_temp`.`PAYMENT_NUMBER`,
`apzl`.`lc_rent_income_temp`.`PLAN_LIST`) `lrt`
ON (
(
(
`lrt`.`payment_number` = `lrp`.`PAYMENT_NUMBER`
)
AND (
`lrt`.`plan_list` = `lrp`.`PLAN_LIST`
)
)
)
)
WHERE (
(
(
`lrp`.`RENT` - IFNULL(`lr`.`srent`, 0)
) - IFNULL(`lrt`.`srent`, 0)
) > 0
)) `ll`
ON (
(
(
`ll`.`PAYMENT_NUMBER` = `l`.`PAYMENT_NUMBER`
)
AND (
`ll`.`PLAN_LIST` = `l`.`PLAN_LIST`
)
)
)
)
WHERE (
(`lccs`.`PLAN_STATUS` = '31')
AND (`l`.`PAYMENT_NUMBER` =r_payment_number)
AND l.PLAN_LIST=r_plan_list
)
GROUP BY `l`.`PAYMENT_NUMBER`,
`l`.`PLAN_LIST`,
`l`.`PLAN_DATE`
ORDER BY `l`.`PAYMENT_NUMBER`,
`l`.`PLAN_LIST` ) t
)$$
DELIMITER ;