adamsaghy commented on code in PR #5462:
URL: https://github.com/apache/fineract/pull/5462#discussion_r2797930149


##########
fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java:
##########
@@ -2125,33 +2124,21 @@ private static final class 
RepaymentTransactionTemplateMapper implements RowMapp
 
         public String schema() {
             // TODO: investigate whether it can be refactored to be more 
efficient
-            StringBuilder sqlBuilder = new StringBuilder();
-            sqlBuilder.append("(CASE ");
-            sqlBuilder.append(
-                    "WHEN (select max(tr.transaction_date) as transaction_date 
from m_loan_transaction tr where tr.loan_id = l.id AND tr.transaction_type_enum 
in (?,?) AND tr.is_reversed = false) > ls.dueDate ");
-            sqlBuilder.append(
-                    "THEN (select max(tr.transaction_date) as transaction_date 
from m_loan_transaction tr where tr.loan_id = l.id AND tr.transaction_type_enum 
in (?,?) AND tr.is_reversed = false) ");
-            sqlBuilder.append("ELSE ls.dueDate END) as transactionDate, ");
-            sqlBuilder.append(
-                    "ls.principal_amount - 
coalesce(ls.principal_writtenoff_derived, 0) - 
coalesce(ls.principal_completed_derived, 0) as principalDue, ");
-            sqlBuilder.append(
-                    "ls.interest_amount - 
coalesce(ls.interest_completed_derived, 0) - 
coalesce(ls.interest_waived_derived, 0) - 
coalesce(ls.interest_writtenoff_derived, 0) as interestDue, ");
-            sqlBuilder.append(
-                    "ls.fee_charges_amount - 
coalesce(ls.fee_charges_completed_derived, 0) - 
coalesce(ls.fee_charges_writtenoff_derived, 0) - 
coalesce(ls.fee_charges_waived_derived, 0) as feeDue, ");
-            sqlBuilder.append(
-                    "ls.penalty_charges_amount - 
coalesce(ls.penalty_charges_completed_derived, 0) - 
coalesce(ls.penalty_charges_writtenoff_derived, 0) - 
coalesce(ls.penalty_charges_waived_derived, 0) as penaltyDue, ");
-            sqlBuilder.append(
-                    "l.currency_code as currencyCode, l.currency_digits as 
currencyDigits, l.currency_multiplesof as inMultiplesOf, l.net_disbursal_amount 
as netDisbursalAmount, ");
-            sqlBuilder.append("rc." + sqlGenerator.escape("name")
-                    + " as currencyName, rc.display_symbol as 
currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode ");
-            sqlBuilder.append("FROM m_loan l ");
-            sqlBuilder.append("JOIN m_currency rc on rc." + 
sqlGenerator.escape("code") + " = l.currency_code ");
-            sqlBuilder.append("JOIN m_loan_repayment_schedule ls ON ls.loan_id 
= l.id AND ls.completed_derived = false ");
-            sqlBuilder.append(
-                    "JOIN((SELECT ls.loan_id, ls.duedate as datedue FROM 
m_loan_repayment_schedule ls WHERE ls.loan_id = ? and ls.completed_derived = 
false ORDER BY ls.duedate LIMIT 1)) asq on asq.loan_id = ls.loan_id ");
-            sqlBuilder.append("AND asq.datedue = ls.duedate ");
-            sqlBuilder.append("WHERE l.id = ? LIMIT 1");
-            return sqlBuilder.toString();
+            return " GREATEST(loan_transaction.transaction_date, ls.dueDate) 
as transactionDate,"
+                    + " coalesce(ls.principal_amount, 0) - 
coalesce(ls.principal_writtenoff_derived, 0) - 
coalesce(ls.principal_completed_derived, 0) as principalDue,"
+                    + " coalesce(ls.interest_amount, 0) - 
coalesce(ls.interest_completed_derived, 0) - 
coalesce(ls.interest_waived_derived, 0) - 
coalesce(ls.interest_writtenoff_derived, 0) as interestDue,"
+                    + " coalesce(ls.fee_charges_amount, 0) - 
coalesce(ls.fee_charges_completed_derived, 0) - 
coalesce(ls.fee_charges_writtenoff_derived, 0) - 
coalesce(ls.fee_charges_waived_derived, 0) as feeDue,"
+                    + " coalesce(ls.penalty_charges_amount, 0) - 
coalesce(ls.penalty_charges_completed_derived, 0) - 
coalesce(ls.penalty_charges_writtenoff_derived, 0) - 
coalesce(ls.penalty_charges_waived_derived, 0) as penaltyDue,"
+                    + " l.currency_code as currencyCode," + " 
l.currency_digits as currencyDigits,"
+                    + " l.currency_multiplesof as inMultiplesOf," + " 
l.net_disbursal_amount as netDisbursalAmount," + " rc."
+                    + sqlGenerator.escape("name") + " as currencyName," + " 
rc.display_symbol as currencyDisplaySymbol,"
+                    + " rc.internationalized_name_code as currencyNameCode" + 
" FROM" + " m_loan l" + " JOIN m_currency rc on rc."
+                    + sqlGenerator.escape("code") + " = l.currency_code"
+                    + " JOIN m_loan_repayment_schedule ls ON ls.loan_id = l.id 
AND (l.loan_status_id >= 600 OR ls.completed_derived = false)"

Review Comment:
   I think it would be easier to remove:
   `(l.loan_status_id >= 600 OR ls.completed_derived = false)`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to