patches and updates related to mifosx-175 Loan Derived Fields

This commit is contained in:
John Woodlock
2013-03-04 13:22:11 +00:00
parent d81316541d
commit b6c09cab38
6 changed files with 242 additions and 29 deletions
@@ -0,0 +1,25 @@
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, `enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '1', 'Disbursement', 'Disbursement');
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, `enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '2', 'Repayment', 'Repayment');
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, `enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '3', 'Contra', 'Contra');
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, `enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '4', 'Waive Interest', 'Waive Interest');
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, `enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '5', 'Repayment At Disbursement', 'Repayment At Disbursement');
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, `enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '6', 'Write-Off', 'Write-Off');
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '8', 'Recovery Repayment', 'Recovery Repayment');
INSERT INTO `r_enum_value` (`enum_name`, `enum_id`, `enum_message_property`, `enum_value`)
VALUES ('transaction_type_enum', '9', 'Waive Charges', 'Waive Charges');
@@ -0,0 +1,22 @@
DROP TABLE IF EXISTS `m_loan_arrears_aging`;
CREATE TABLE `m_loan_arrears_aging` (
`loan_id` bigint(20) NOT NULL AUTO_INCREMENT,
`principal_overdue_derived` decimal(19,6) NOT NULL DEFAULT '0.000000',
`interest_overdue_derived` decimal(19,6) NOT NULL DEFAULT '0.000000',
`fee_charges_overdue_derived` decimal(19,6) NOT NULL DEFAULT '0.000000',
`penalty_charges_overdue_derived` decimal(19,6) NOT NULL DEFAULT '0.000000',
`total_overdue_derived` decimal(19,6) NOT NULL DEFAULT '0.000000',
`overdue_since_date_derived` date DEFAULT NULL,
PRIMARY KEY (`loan_id`),
CONSTRAINT `m_loan_arrears_aging_ibfk_1` FOREIGN KEY (`loan_id`) REFERENCES `m_loan` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE m_loan
DROP COLUMN `total_overdue_derived` ,
DROP COLUMN `overdue_since_date_derived` ,
DROP COLUMN `penalty_charges_overdue_derived` ,
DROP COLUMN `fee_charges_overdue_derived` ,
DROP COLUMN `interest_overdue_derived` ,
DROP COLUMN `principal_overdue_derived` ;
@@ -0,0 +1,80 @@
update m_loan
join
(SELECT ml.id AS loanId,
SUM(mr.principal_amount) as principal_disbursed_derived,
SUM(IFNULL(mr.principal_completed_derived,0)) as principal_repaid_derived,
SUM(IFNULL(mr.principal_writtenoff_derived,0)) as principal_writtenoff_derived,
SUM(IFNULL(mr.interest_amount,0)) as interest_charged_derived,
SUM(IFNULL(mr.interest_completed_derived,0)) as interest_repaid_derived,
SUM(IFNULL(mr.interest_waived_derived,0)) as interest_waived_derived,
SUM(IFNULL(mr.interest_writtenoff_derived,0)) as interest_writtenoff_derived,
SUM(IFNULL(mr.fee_charges_amount,0)) as fee_charges_charged_derived,
SUM(IFNULL(mr.fee_charges_completed_derived,0)) as fee_charges_repaid_derived,
SUM(IFNULL(mr.fee_charges_waived_derived,0)) as fee_charges_waived_derived,
SUM(IFNULL(mr.fee_charges_writtenoff_derived,0)) as fee_charges_writtenoff_derived,
SUM(IFNULL(mr.penalty_charges_amount,0)) as penalty_charges_charged_derived,
SUM(IFNULL(mr.penalty_charges_completed_derived,0)) as penalty_charges_repaid_derived,
SUM(IFNULL(mr.penalty_charges_waived_derived,0)) as penalty_charges_waived_derived,
SUM(IFNULL(mr.penalty_charges_writtenoff_derived,0)) as penalty_charges_writtenoff_derived
FROM m_loan ml
INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id
WHERE ml.disbursedon_date is not null
GROUP BY ml.id) x on x.loanId = m_loan.id
set m_loan.principal_disbursed_derived = x.principal_disbursed_derived,
m_loan.principal_repaid_derived = x.principal_repaid_derived,
m_loan.principal_writtenoff_derived = x.principal_writtenoff_derived,
m_loan.principal_outstanding_derived = (x.principal_disbursed_derived -
(x.principal_repaid_derived + x.principal_writtenoff_derived)),
m_loan.interest_charged_derived = x.interest_charged_derived,
m_loan.interest_repaid_derived = x.interest_repaid_derived,
m_loan.interest_waived_derived = x.interest_waived_derived,
m_loan.interest_writtenoff_derived = x.interest_writtenoff_derived,
m_loan.interest_outstanding_derived = (x.interest_charged_derived -
(x.interest_repaid_derived + x.interest_waived_derived + x.interest_writtenoff_derived)),
m_loan.fee_charges_charged_derived = x.fee_charges_charged_derived,
m_loan.fee_charges_repaid_derived = x.fee_charges_repaid_derived,
m_loan.fee_charges_waived_derived = x.fee_charges_waived_derived,
m_loan.fee_charges_writtenoff_derived = x.fee_charges_writtenoff_derived,
m_loan.fee_charges_outstanding_derived = (x.fee_charges_charged_derived -
(x.fee_charges_repaid_derived + x.fee_charges_waived_derived + x.fee_charges_writtenoff_derived)),
m_loan.penalty_charges_charged_derived = x.penalty_charges_charged_derived,
m_loan.penalty_charges_repaid_derived = x.penalty_charges_repaid_derived,
m_loan.penalty_charges_waived_derived = x.penalty_charges_waived_derived,
m_loan.penalty_charges_writtenoff_derived = x.penalty_charges_writtenoff_derived,
m_loan.fee_charges_outstanding_derived = (x.penalty_charges_charged_derived -
(x.penalty_charges_repaid_derived + x.penalty_charges_waived_derived + x.penalty_charges_writtenoff_derived)),
m_loan.total_expected_repayment_derived = (x.principal_disbursed_derived + x.interest_charged_derived +
x.fee_charges_charged_derived + x.penalty_charges_charged_derived),
m_loan.total_repayment_derived = (x.principal_repaid_derived + x.interest_repaid_derived +
x.fee_charges_repaid_derived + x.penalty_charges_repaid_derived),
m_loan.total_expected_costofloan_derived = (x.interest_charged_derived +
x.fee_charges_charged_derived + x.penalty_charges_charged_derived),
m_loan.total_costofloan_derived = (x.interest_repaid_derived +
x.fee_charges_repaid_derived + x.penalty_charges_repaid_derived),
m_loan.total_waived_derived = (x.interest_waived_derived +
x.fee_charges_waived_derived + x.penalty_charges_waived_derived),
m_loan.total_writtenoff_derived = (x.interest_writtenoff_derived +
x.fee_charges_writtenoff_derived + x.penalty_charges_writtenoff_derived),
m_loan.total_outstanding_derived =
(x.principal_disbursed_derived -
(x.principal_repaid_derived + x.principal_writtenoff_derived)) +
(x.interest_charged_derived -
(x.interest_repaid_derived + x.interest_waived_derived + x.interest_writtenoff_derived)) +
(x.fee_charges_charged_derived -
(x.fee_charges_repaid_derived + x.fee_charges_waived_derived + x.fee_charges_writtenoff_derived)) +
(x.penalty_charges_charged_derived -
(x.penalty_charges_repaid_derived + x.penalty_charges_waived_derived + x.penalty_charges_writtenoff_derived))
@@ -0,0 +1,53 @@
/*
This patch (or something like it) needs to run daily (after midnight and before next day opening)
against each tenant to keep the arrears values accurate
*/
truncate table m_loan_arrears_aging;
INSERT INTO m_loan_arrears_aging
(`loan_id`,
`principal_overdue_derived`,
`interest_overdue_derived`,
`fee_charges_overdue_derived`,
`penalty_charges_overdue_derived`,
`total_overdue_derived`,
`overdue_since_date_derived`)
select ml.id as loanId,
SUM(
(ifnull(mr.principal_amount,0) - ifnull(mr.principal_completed_derived, 0))
) as principal_overdue_derived,
SUM(
(ifnull(mr.interest_amount,0) - ifnull(mr.interest_completed_derived, 0))
) as interest_overdue_derived,
SUM(
(ifnull(mr.fee_charges_amount,0) - ifnull(mr.fee_charges_completed_derived, 0))
) as fee_charges_overdue_derived,
SUM(
(ifnull(mr.penalty_charges_amount,0) - ifnull(mr.penalty_charges_completed_derived, 0))
) as penalty_charges_overdue_derived,
SUM(
(ifnull(mr.principal_amount,0) - ifnull(mr.principal_completed_derived, 0))
) +
SUM(
(ifnull(mr.interest_amount,0) - ifnull(mr.interest_completed_derived, 0))
) +
SUM(
(ifnull(mr.fee_charges_amount,0) - ifnull(mr.fee_charges_completed_derived, 0))
) +
SUM(
(ifnull(mr.penalty_charges_amount,0) - ifnull(mr.penalty_charges_completed_derived, 0))
) as total_overdue_derived,
MIN(mr.duedate) as overdue_since_date_derived
FROM m_loan ml
INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id
WHERE ml.loan_status_id = 300 /*active*/
and mr.completed_derived is false
and mr.duedate < CURDATE()
GROUP BY ml.id;