From 16207ef95259f0f1581eba2490eba3273a35e529 Mon Sep 17 00:00:00 2001 From: Arnold Galovics Date: Mon, 21 Feb 2022 08:59:13 +0100 Subject: [PATCH] FINERACT-984: More MySQL independence in native queries --- .../ClientChargeReadPlatformServiceImpl.java | 8 +- ...ralManagementWritePlatformServiceImpl.java | 2 +- ...ollectionSheetReadPlatformServiceImpl.java | 28 +++--- .../FloatingRatesReadPlatformServiceImpl.java | 22 ++--- .../CenterReadPlatformServiceImpl.java | 16 ++-- ...erestRateChartReadPlatformServiceImpl.java | 8 +- .../domain/LoanAccountDomainService.java | 2 +- .../domain/LoanAccountDomainServiceJpa.java | 2 +- .../domain/LoanCollateralManagement.java | 10 +- .../GuarantorReadPlatformServiceImpl.java | 28 ++++-- ...LIMAccountInfoReadPlatformServiceImpl.java | 4 +- .../LoanAccrualWritePlatformServiceImpl.java | 2 +- ...WritePlatformServiceJpaRepositoryImpl.java | 4 +- .../service/LoanArrearsAgingServiceImpl.java | 48 +++++----- .../LoanChargeReadPlatformServiceImpl.java | 26 +++--- .../service/LoanReadPlatformServiceImpl.java | 93 ++++++++++--------- ...WritePlatformServiceJpaRepositoryImpl.java | 6 +- 17 files changed, 163 insertions(+), 146 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java index 10148d384..16a772bc5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientChargeReadPlatformServiceImpl.java @@ -139,16 +139,16 @@ public class ClientChargeReadPlatformServiceImpl implements ClientChargeReadPlat // filter for active charges if (status.equalsIgnoreCase(ClientApiConstants.CLIENT_CHARGE_QUERY_PARAM_STATUS_VALUE_ACTIVE)) { - sqlBuilder.append(" and cc.is_active = 1 "); + sqlBuilder.append(" and cc.is_active = true "); } else if (status.equalsIgnoreCase(ClientApiConstants.CLIENT_CHARGE_QUERY_PARAM_STATUS_VALUE_INACTIVE)) { - sqlBuilder.append(" and cc.is_active = 0 "); + sqlBuilder.append(" and cc.is_active = false "); } // filter for paid charges if (pendingPayment != null && pendingPayment) { - sqlBuilder.append(" and ( cc.is_paid_derived = 0 and cc.waived = 0) "); + sqlBuilder.append(" and ( cc.is_paid_derived = false and cc.waived = false) "); } else if (pendingPayment != null && !pendingPayment) { - sqlBuilder.append(" and (cc.is_paid_derived = 1 or cc.waived = 1) "); + sqlBuilder.append(" and (cc.is_paid_derived = true or cc.waived = true) "); } sqlBuilder.append(" order by cc.charge_time_enum ASC, cc.charge_due_date DESC, cc.is_penalty ASC "); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/ClientCollateralManagementWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/ClientCollateralManagementWritePlatformServiceImpl.java index 477034d94..8170bfa53 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/ClientCollateralManagementWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/service/ClientCollateralManagementWritePlatformServiceImpl.java @@ -169,7 +169,7 @@ public class ClientCollateralManagementWritePlatformServiceImpl implements Clien if (clientCollateralManagement.getLoanCollateralManagementSet().size() > 0) { for (LoanCollateralManagement loanCollateralManagement : clientCollateralManagement.getLoanCollateralManagementSet()) { - if (loanCollateralManagement.getIsReleased() == 0) { + if (!loanCollateralManagement.isReleased()) { throw new ClientCollateralCannotBeDeletedException( ClientCollateralCannotBeDeletedException.ClientCollateralCannotBeDeletedReason.CLIENT_COLLATERAL_IS_ALREADY_ATTACHED, clientCollateralId); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java index 50bef402b..1784822ea 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java @@ -224,12 +224,12 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe .append("ln.account_no As accountId, ").append("ln.loan_status_id As accountStatusId, ") .append("pl.short_name As productShortName, ").append("ln.product_id As productId, ") .append("ln.currency_code as currencyCode, ln.currency_digits as currencyDigits, ln.currency_multiplesof as inMultiplesOf, rc.`name` as currencyName, rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode, ") - .append("if(ln.loan_status_id = 200 , ln.principal_amount , null) As disbursementAmount, ") - .append("sum(ifnull(if(ln.loan_status_id = 300, ls.principal_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.principal_completed_derived, 0.0), 0.0)) As principalDue, ") + .append("(CASE WHEN ln.loan_status_id = 200 THEN ln.principal_amount ELSE null END) As disbursementAmount, ") + .append("sum(COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.principal_amount ELSE 0.0 END), 0.0) - COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.principal_completed_derived ELSE 0.0 END), 0.0)) As principalDue, ") .append("ln.principal_repaid_derived As principalPaid, ") - .append("sum(ifnull(if(ln.loan_status_id = 300, ls.interest_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.interest_completed_derived, 0.0), 0.0) - IFNULL(IF(ln.loan_status_id = 300, ls.interest_waived_derived, 0.0), 0.0)) As interestDue, ") + .append("sum(COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.interest_amount ELSE 0.0 END), 0.0) - COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.interest_completed_derived ELSE 0.0 END), 0.0) - COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.interest_waived_derived ELSE 0.0 END), 0.0)) As interestDue, ") .append("ln.interest_repaid_derived As interestPaid, ") - .append("sum(ifnull(if(ln.loan_status_id = 300, ls.fee_charges_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.fee_charges_completed_derived, 0.0), 0.0)) As feeDue, ") + .append("sum(COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.fee_charges_amount ELSE 0.0 END), 0.0) - COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.fee_charges_completed_derived ELSE 0.0 END), 0.0)) As feeDue, ") .append("ln.fee_charges_repaid_derived As feePaid, ").append("ca.attendance_type_enum as attendanceTypeId ") .append("FROM m_group gp ") .append("LEFT JOIN m_office of ON of.id = gp.office_id AND of.hierarchy like :officeHierarchy ") @@ -253,7 +253,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe sql.append("and (gp.status_enum = 300 or (gp.status_enum = 600 and gp.closedon_date >= :dueDate)) ") .append("and (cl.status_enum = 300 or (cl.status_enum = 600 and cl.closedon_date >= :dueDate)) ") .append("GROUP BY gp.id, cl.id, ln.id, ca.attendance_type_enum ORDER BY gp.id , cl.id , ln.id ").append(") loandata ") - .append("LEFT JOIN m_loan_charge lc ON lc.loan_id = loandata.loanId AND lc.is_paid_derived = 0 AND lc.is_active = 1 ") + .append("LEFT JOIN m_loan_charge lc ON lc.loan_id = loandata.loanId AND lc.is_paid_derived = false AND lc.is_active = true ") .append("AND ( lc.due_for_collection_as_of_date <= :dueDate OR lc.charge_time_enum = 1) ") .append("GROUP BY loandata.groupId, loandata.clientId, loandata.loanId ") .append(", loandata.principalDue, loandata.interestDue, loandata.feeDue, loandata.attendanceTypeId ") @@ -499,9 +499,9 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe .append("sa.currency_code as currencyCode, ").append("sa.currency_digits as currencyDigits, ") .append("sa.currency_multiplesof as inMultiplesOf, ").append("rc.`name` as currencyName, ") .append("rc.display_symbol as currencyDisplaySymbol, ") - .append("if(sa.deposit_type_enum=100,'Saving Deposit',if(sa.deposit_type_enum=300,'Recurring Deposit','Current Deposit')) as depositAccountType, ") + .append("(CASE WHEN sa.deposit_type_enum=100 THEN 'Saving Deposit' ELSE (CASE WHEN sa.deposit_type_enum=300 THEN 'Recurring Deposit' ELSE 'Current Deposit' END) END) as depositAccountType, ") .append("rc.internationalized_name_code as currencyNameCode, ") - .append("sum(ifnull(mss.deposit_amount,0) - ifnull(mss.deposit_amount_completed_derived,0)) as dueAmount ") + .append("SUM(COALESCE(mss.deposit_amount,0) - coalesce(mss.deposit_amount_completed_derived,0)) as dueAmount ") .append("FROM m_group gp ") .append("LEFT JOIN m_office of ON of.id = gp.office_id AND of.hierarchy like :officeHierarchy ") @@ -723,15 +723,15 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe sb.append("ln.currency_code as currencyCode, ln.currency_digits as currencyDigits, ln.currency_multiplesof as inMultiplesOf, "); sb.append( "rc.`name` as currencyName, rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode, "); - sb.append("if(ln.loan_status_id = 200 , ln.principal_amount , null) As disbursementAmount, "); + sb.append("(CASE WHEN ln.loan_status_id = 200 THEN ln.principal_amount ELSE null END) As disbursementAmount, "); sb.append( - "sum(ifnull(if(ln.loan_status_id = 300, ls.principal_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.principal_completed_derived, 0.0), 0.0)) As principalDue, "); + "sum(COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.principal_amount ELSE 0.0 END), 0.0) - COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.principal_completed_derived ELSE 0.0 END), 0.0)) As principalDue, "); sb.append("ln.principal_repaid_derived As principalPaid, "); sb.append( - "sum(ifnull(if(ln.loan_status_id = 300, ls.interest_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.interest_completed_derived, 0.0), 0.0)) As interestDue, "); + "sum(COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.interest_amount ELSE 0.0 END), 0.0) - COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.interest_completed_derived ELSE 0.0 END), 0.0)) As interestDue, "); sb.append("ln.interest_repaid_derived As interestPaid, "); sb.append( - "sum(ifnull(if(ln.loan_status_id = 300, ls.fee_charges_amount, 0.0), 0.0) - ifnull(if(ln.loan_status_id = 300, ls.fee_charges_completed_derived, 0.0), 0.0)) As feeDue, "); + "sum(COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.fee_charges_amount ELSE 0.0 END), 0.0) - COALESCE((CASE WHEN ln.loan_status_id = 300 THEN ls.fee_charges_completed_derived ELSE 0.0 END), 0.0)) As feeDue, "); sb.append("ln.fee_charges_repaid_derived As feePaid "); sb.append("FROM m_loan ln "); sb.append("JOIN m_client cl ON cl.id = ln.client_id "); @@ -749,7 +749,7 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe sb.append("(ln.loan_status_id = 300) "); sb.append("and ln.group_id is null GROUP BY cl.id , ln.id ORDER BY cl.id , ln.id ) loandata "); sb.append( - "LEFT JOIN m_loan_charge lc ON lc.loan_id = loandata.loanId AND lc.is_paid_derived = 0 AND lc.is_active = 1 AND ( lc.due_for_collection_as_of_date <= :dueDate OR lc.charge_time_enum = 1) "); + "LEFT JOIN m_loan_charge lc ON lc.loan_id = loandata.loanId AND lc.is_paid_derived = false AND lc.is_active = true AND ( lc.due_for_collection_as_of_date <= :dueDate OR lc.charge_time_enum = 1) "); sb.append("GROUP BY loandata.clientId, loandata.loanId ORDER BY loandata.clientId, loandata.loanId "); sql = sb.toString(); @@ -808,13 +808,13 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe final StringBuilder sb = new StringBuilder(400); sb.append( - "SELECT if(sa.deposit_type_enum=100,'Saving Deposit',if(sa.deposit_type_enum=300,'Recurring Deposit','Current Deposit')) as depositAccountType, cl.display_name As clientName, cl.id As clientId, "); + "SELECT (CASE WHEN sa.deposit_type_enum=100 THEN 'Saving Deposit' ELSE (CASE WHEN sa.deposit_type_enum=300 THEN 'Recurring Deposit' ELSE 'Current Deposit' END) END) as depositAccountType, cl.display_name As clientName, cl.id As clientId, "); sb.append("sa.id As savingsId, sa.account_no As accountId, sa.status_enum As accountStatusId, "); sb.append("sp.short_name As productShortName, sp.id As productId, "); sb.append("sa.currency_code as currencyCode, sa.currency_digits as currencyDigits, sa.currency_multiplesof as inMultiplesOf, "); sb.append( "rc.`name` as currencyName, rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode, "); - sb.append("sum(ifnull(mss.deposit_amount,0) - ifnull(mss.deposit_amount_completed_derived,0)) as dueAmount "); + sb.append("SUM(COALESCE(mss.deposit_amount,0) - coalesce(mss.deposit_amount_completed_derived,0)) as dueAmount "); sb.append("FROM m_savings_account sa "); sb.append("JOIN m_client cl ON cl.id = sa.client_id "); sb.append("JOIN m_savings_product sp ON sa.product_id=sp.id "); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java index 9786af35f..0d45a4053 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/service/FloatingRatesReadPlatformServiceImpl.java @@ -56,14 +56,14 @@ public class FloatingRatesReadPlatformServiceImpl implements FloatingRatesReadPl @Override public List retrieveAllActive() { FloatingRateRowMapper rateMapper = new FloatingRateRowMapper(false); - final String sql = "select " + rateMapper.schema() + " where rate.is_active = 1 "; + final String sql = "select " + rateMapper.schema() + " where rate.is_active = true "; return this.jdbcTemplate.query(sql, rateMapper); } @Override public List retrieveLookupActive() { FloatingRateLookupMapper rateMapper = new FloatingRateLookupMapper(); - final String sql = "select " + rateMapper.schema() + " where rate.is_active = 1 "; + final String sql = "select " + rateMapper.schema() + " where rate.is_active = true "; return this.jdbcTemplate.query(sql, rateMapper); } @@ -92,7 +92,7 @@ public class FloatingRatesReadPlatformServiceImpl implements FloatingRatesReadPl public FloatingRateData retrieveBaseLendingRate() { try { FloatingRateRowMapper rateMapper = new FloatingRateRowMapper(true); - final String sql = "select " + rateMapper.schema() + " where rate.is_base_lending_rate = 1 and rate.is_active = 1"; + final String sql = "select " + rateMapper.schema() + " where rate.is_base_lending_rate = true and rate.is_active = true"; return this.jdbcTemplate.queryForObject(sql, rateMapper); } catch (final EmptyResultDataAccessException e) { throw new FloatingRateNotFoundException("error.msg.floatingrate.base.lending.rate.not.found", e); @@ -127,8 +127,8 @@ public class FloatingRatesReadPlatformServiceImpl implements FloatingRatesReadPl List ratePeriods = null; if (addRatePeriods) { FloatingRatePeriodRowMapper ratePeriodMapper = new FloatingRatePeriodRowMapper(); - final String sql = "select " + ratePeriodMapper.schema() + " where period.is_active = 1 and period.floating_rates_id = ? " - + " order by period.from_date desc "; + final String sql = "select " + ratePeriodMapper.schema() + + " where period.is_active = true and period.floating_rates_id = ? " + " order by period.from_date desc "; ratePeriods = jdbcTemplate.query(sql, ratePeriodMapper, new Object[] { id }); } return new FloatingRateData(id, name, isBaseLendingRate, isActive, createdBy, createdOn, modifiedBy, modifiedOn, ratePeriods, @@ -199,19 +199,19 @@ public class FloatingRatesReadPlatformServiceImpl implements FloatingRatesReadPl .append(" from m_product_loan as lp ") .append(" join m_product_loan_floating_rates as plfr on lp.id = plfr.loan_product_id ") .append(" join m_floating_rates as linkedrate on linkedrate.id = plfr.floating_rates_id ") - .append("left join m_floating_rates_periods as linkedrateperiods on (linkedrate.id = linkedrateperiods.floating_rates_id and linkedrateperiods.is_active = 1) ") + .append("left join m_floating_rates_periods as linkedrateperiods on (linkedrate.id = linkedrateperiods.floating_rates_id and linkedrateperiods.is_active = true) ") .append("left join ( ").append(" select blr.name, ").append(" blr.is_base_lending_rate, ") .append(" blr.is_active, ").append(" blrperiods.from_date, ").append(" blrperiods.interest_rate ") .append(" from m_floating_rates as blr ") - .append(" left join m_floating_rates_periods as blrperiods on (blr.id = blrperiods.floating_rates_id and blrperiods.is_active = 1) ") - .append(" where blr.is_base_lending_rate = 1 and blr.is_active = 1 ") - .append(") as baserate on (linkedrateperiods.is_differential_to_base_lending_rate = 1 and linkedrate.is_base_lending_rate = 0) ") + .append(" left join m_floating_rates_periods as blrperiods on (blr.id = blrperiods.floating_rates_id and blrperiods.is_active = true) ") + .append(" where blr.is_base_lending_rate = true and blr.is_active = true ") + .append(") as baserate on (linkedrateperiods.is_differential_to_base_lending_rate = true and linkedrate.is_base_lending_rate = false) ") .append("where (baserate.from_date is null ").append(" or baserate.from_date = (select MAX(b.from_date) ") .append(" from (select blr.name, ").append(" blr.is_base_lending_rate, ") .append(" blr.is_active, ").append(" blrperiods.from_date, ") .append(" blrperiods.interest_rate ").append(" from m_floating_rates as blr ") - .append(" left join m_floating_rates_periods as blrperiods on (blr.id = blrperiods.floating_rates_id and blrperiods.is_active = 1) ") - .append(" where blr.is_base_lending_rate = 1 and blr.is_active = 1 ").append(" ) as b ") + .append(" left join m_floating_rates_periods as blrperiods on (blr.id = blrperiods.floating_rates_id and blrperiods.is_active = true) ") + .append(" where blr.is_base_lending_rate = true and blr.is_active = true ").append(" ) as b ") .append(" where b.from_date <= linkedrateperiods.from_date)) ").append("and lp.id = ? ") .append("order by linkedratePeriods_from_date desc "); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java index b99d4fe65..3d952bc80 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/CenterReadPlatformServiceImpl.java @@ -212,14 +212,12 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService + " g.hierarchy as hierarchy, c.id as calendarId, ci.id as calendarInstanceId, ci.entity_id as entityId," + " ci.entity_type_enum as entityTypeId, c.title as title, c.description as description," + "c.location as location, c.start_date as startDate, c.end_date as endDate, c.recurrence as recurrence,c.meeting_time as meetingTime," - + "sum(if(l.loan_status_id=300 and lrs.duedate = ?," - + "(ifnull(lrs.principal_amount,0)) + (ifnull(lrs.interest_amount,0)),0)) as installmentDue," - + "sum(if(l.loan_status_id=300 and lrs.duedate = ?," - + "(ifnull(lrs.principal_completed_derived,0)) + (ifnull(lrs.interest_completed_derived,0)),0)) as totalCollected," - + "sum(if(l.loan_status_id=300 and lrs.duedate <= ?, (ifnull(lrs.principal_amount,0)) + (ifnull(lrs.interest_amount,0)),0))" - + "- sum(if(l.loan_status_id=300 and lrs.duedate <= ?, (ifnull(lrs.principal_completed_derived,0)) + (ifnull(lrs.interest_completed_derived,0)),0)) as totaldue, " - + "sum(if(l.loan_status_id=300 and lrs.duedate < ?, (ifnull(lrs.principal_amount,0)) + (ifnull(lrs.interest_amount,0)),0))" - + "- sum(if(l.loan_status_id=300 and lrs.duedate < ?, (ifnull(lrs.principal_completed_derived,0)) + (ifnull(lrs.interest_completed_derived,0)),0)) as totaloverdue" + + "sum(CASE WHEN l.loan_status_id=300 and lrs.duedate = ? THEN COALESCE(lrs.principal_amount,0)) + (COALESCE(lrs.interest_amount,0) ELSE 0 END)) as installmentDue," + + "sum(CASE WHEN l.loan_status_id=300 and lrs.duedate = ? THEN COALESCE(lrs.principal_completed_derived,0) + COALESCE(lrs.interest_completed_derived,0) ELSE 0 END) as totalCollected," + + "sum(CASE WHEN l.loan_status_id=300 and lrs.duedate <= ? THEN COALESCE(lrs.principal_amount,0) + COALESCE(lrs.interest_amount,0) ELSE 0 END)" + + "- sum(CASE WHEN l.loan_status_id=300 and lrs.duedate <= ? THEN COALESCE(lrs.principal_completed_derived,0) + COALESCE(lrs.interest_completed_derived,0) ELSE 0 END) as totaldue, " + + "sum(CASE WHEN l.loan_status_id=300 and lrs.duedate < ? THEN COALESCE(lrs.principal_amount,0) + COALESCE(lrs.interest_amount,0) ELSE 0 END)" + + "- sum(CASE WHEN l.loan_status_id=300 and lrs.duedate < ? THEN COALESCE(lrs.principal_completed_derived,0) + COALESCE(lrs.interest_completed_derived,0) ELSE 0 END) as totaloverdue" + " from m_calendar c join m_calendar_instance ci on ci.calendar_id=c.id and ci.entity_type_enum=4" + " join m_group ce on ce.id = ci.entity_id" + " join m_group g on g.parent_id = ce.id" + " join m_group_client gc on gc.group_id=g.id" + " join m_client cl on cl.id=gc.client_id" @@ -500,7 +498,7 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService @Override public Collection retrieveAssociatedGroups(final Long centerId) { - final String sql = "select " + this.groupDataMapper.schema() + " where g.parent_id = ? "; + final String sql = "select " + this.groupDataMapper.schema() + " where g.parent_id = ? order by g.id"; return this.jdbcTemplate.query(sql, this.groupDataMapper, new Object[] { centerId }); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java index e490cd773..84877b248 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/service/InterestRateChartReadPlatformServiceImpl.java @@ -90,13 +90,13 @@ public class InterestRateChartReadPlatformServiceImpl implements InterestRateCha sql.append(this.chartExtractor.schema()); sql.append(" where sp.id = ? order by irc.id, "); sql.append("CASE "); - sql.append("WHEN isPrimaryGroupingByAmount then ircd.amount_range_from "); - sql.append("WHEN isPrimaryGroupingByAmount then ircd.amount_range_to "); + sql.append("WHEN irc.is_primary_grouping_by_amount then ircd.amount_range_from "); + sql.append("WHEN irc.is_primary_grouping_by_amount then ircd.amount_range_to "); sql.append("END,"); sql.append("ircd.from_period, ircd.to_period,"); sql.append("CASE "); - sql.append("WHEN !isPrimaryGroupingByAmount then ircd.amount_range_from "); - sql.append("WHEN !isPrimaryGroupingByAmount then ircd.amount_range_to "); + sql.append("WHEN NOT irc.is_primary_grouping_by_amount then ircd.amount_range_from "); + sql.append("WHEN NOT irc.is_primary_grouping_by_amount then ircd.amount_range_to "); sql.append("END"); return this.jdbcTemplate.query( diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java index bb2879afe..71db423b9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainService.java @@ -51,7 +51,7 @@ public interface LoanAccountDomainService { void updateLoanCollateralTransaction(Set loanCollateralManagementList); - void updateLoanCollateralStatus(Set loanCollateralManagementSet, Integer isReleased); + void updateLoanCollateralStatus(Set loanCollateralManagementSet, boolean isReleased); /** * This method is to recalculate and accrue the income till the last accrued date. this method is used when the diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java index d20cd26d6..230d5118b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanAccountDomainServiceJpa.java @@ -162,7 +162,7 @@ public class LoanAccountDomainServiceJpa implements LoanAccountDomainService { @Transactional @Override - public void updateLoanCollateralStatus(Set loanCollateralManagementSet, Integer isReleased) { + public void updateLoanCollateralStatus(Set loanCollateralManagementSet, boolean isReleased) { for (LoanCollateralManagement loanCollateralManagement : loanCollateralManagementSet) { loanCollateralManagement.setIsReleased(isReleased); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java index f5d840c77..94fbfa768 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java @@ -43,8 +43,8 @@ public class LoanCollateralManagement extends AbstractPersistableCustom { @JoinColumn(name = "loan_id", referencedColumnName = "id", nullable = false) private Loan loan; - @Column(name = "is_released", nullable = false, columnDefinition = "0") - private Integer isReleased = Integer.valueOf(0); + @Column(name = "is_released", nullable = false) + private boolean isReleased = false; @ManyToOne(optional = false) @JoinColumn(name = "client_collateral_id", nullable = false) @@ -54,7 +54,7 @@ public class LoanCollateralManagement extends AbstractPersistableCustom { } - public LoanCollateralManagement(final BigDecimal quantity, final Integer isReleased) { + public LoanCollateralManagement(final BigDecimal quantity, final boolean isReleased) { this.quantity = quantity; this.isReleased = isReleased; } @@ -89,7 +89,7 @@ public class LoanCollateralManagement extends AbstractPersistableCustom { this.loanTransaction = loanTransaction; } - public void setIsReleased(final Integer isReleased) { + public void setIsReleased(final boolean isReleased) { this.isReleased = isReleased; } @@ -113,7 +113,7 @@ public class LoanCollateralManagement extends AbstractPersistableCustom { return this.clientCollateralManagement; } - public Integer getIsReleased() { + public boolean isReleased() { return this.isReleased; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java index 492fe12d1..8a5600233 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorReadPlatformServiceImpl.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.guarantor.service; import java.math.BigDecimal; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.time.LocalDate; @@ -75,9 +76,15 @@ public class GuarantorReadPlatformServiceImpl implements GuarantorReadPlatformSe public List retrieveGuarantorsForLoan(final Long loanId) { final GuarantorMapper rm = new GuarantorMapper(); String sql = "select " + rm.schema(); - sql += " where loan_id = ? group by g.id,gfd.id, gt.id"; - final List guarantorDatas = this.jdbcTemplate.query(sql, rm, - new Object[] { AccountAssociationType.GUARANTOR_ACCOUNT_ASSOCIATION.getValue(), loanId }); + sql += " where loan_id = ? group by g.id,gfd.id, gt.id, sa.id, oht.id, cv.id"; + String finalSql = sql; + final List guarantorDatas = this.jdbcTemplate.query(con -> { + PreparedStatement preparedStatement = con.prepareStatement(finalSql, ResultSet.TYPE_SCROLL_SENSITIVE, + ResultSet.CONCUR_UPDATABLE); + preparedStatement.setInt(1, AccountAssociationType.GUARANTOR_ACCOUNT_ASSOCIATION.getValue()); + preparedStatement.setLong(2, loanId); + return preparedStatement; + }, rm); final List mergedGuarantorDatas = new ArrayList<>(); @@ -91,9 +98,16 @@ public class GuarantorReadPlatformServiceImpl implements GuarantorReadPlatformSe public GuarantorData retrieveGuarantor(final Long loanId, final Long guarantorId) { final GuarantorMapper rm = new GuarantorMapper(); String sql = "select " + rm.schema(); - sql += " where g.loan_id = ? and g.id = ? group by g.id, gfd.id, gt.id"; - final GuarantorData guarantorData = this.jdbcTemplate.queryForObject(sql, rm, - new Object[] { AccountAssociationType.GUARANTOR_ACCOUNT_ASSOCIATION.getValue(), loanId, guarantorId }); + sql += " where g.loan_id = ? and g.id = ? group by g.id, gfd.id, gt.id, sa.id, oht.id, cv.id"; + String finalSql = sql; + final GuarantorData guarantorData = this.jdbcTemplate.query(con -> { + PreparedStatement preparedStatement = con.prepareStatement(finalSql, ResultSet.TYPE_SCROLL_SENSITIVE, + ResultSet.CONCUR_UPDATABLE); + preparedStatement.setInt(1, AccountAssociationType.GUARANTOR_ACCOUNT_ASSOCIATION.getValue()); + preparedStatement.setLong(2, loanId); + preparedStatement.setLong(3, guarantorId); + return preparedStatement; + }, rm).get(0); return mergeDetailsForClientOrStaffGuarantor(guarantorData); } @@ -114,7 +128,7 @@ public class GuarantorReadPlatformServiceImpl implements GuarantorReadPlatformSe .append(" FROM m_guarantor g") // .append(" left JOIN m_code_value cv on g.client_reln_cv_id = cv.id")// .append(" left JOIN m_guarantor_funding_details gfd on g.id = gfd.guarantor_id")// - .append(" left JOIN m_portfolio_account_associations aa on gfd.account_associations_id = aa.id and aa.is_active = 1 and aa.association_type_enum = ?")// + .append(" left JOIN m_portfolio_account_associations aa on gfd.account_associations_id = aa.id and aa.is_active = true and aa.association_type_enum = ?")// .append(" left JOIN m_savings_account sa on sa.id = aa.linked_savings_account_id ")// .append(" left join m_guarantor_transaction gt on gt.guarantor_fund_detail_id = gfd.id") // .append(" left join m_deposit_account_on_hold_transaction oht on oht.id = gt.deposit_on_hold_transaction_id"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java index 9f1ea5094..cc5e26540 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/GLIMAccountInfoReadPlatformServiceImpl.java @@ -104,7 +104,7 @@ public class GLIMAccountInfoReadPlatformServiceImpl implements GLIMAccountInfoRe final GLIMFieldsMapper rm = new GLIMFieldsMapper(); final String sql = "select " + rm.schema() + " and ln.group_id=?"; - return this.jdbcTemplate.query(sql, rm, new Object[] { groupId }); + return this.jdbcTemplate.query(sql, rm, new Object[] { Long.parseLong(groupId) }); } @Override @@ -115,7 +115,7 @@ public class GLIMAccountInfoReadPlatformServiceImpl implements GLIMAccountInfoRe final String sql = "select " + rm.schema() + " where glim.group_id=?"; - return this.jdbcTemplate.query(sql, rm, new Object[] { groupId }); + return this.jdbcTemplate.query(sql, rm, new Object[] { Long.parseLong(groupId) }); } @Override diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java index 2db468a26..dd3140a38 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualWritePlatformServiceImpl.java @@ -269,7 +269,7 @@ public class LoanAccrualWritePlatformServiceImpl implements LoanAccrualWritePlat BigDecimal totalAccInterest, BigDecimal feeportion, BigDecimal totalAccFee, BigDecimal penaltyportion, BigDecimal totalAccPenalty, final LocalDate accruedTill) throws DataAccessException { String transactionSql = "INSERT INTO m_loan_transaction (loan_id,office_id,is_reversed,transaction_type_enum,transaction_date,amount,interest_portion_derived," - + "fee_charges_portion_derived,penalty_charges_portion_derived, submitted_on_date) VALUES (?, ?, 0, ?, ?, ?, ?, ?, ?, ?)"; + + "fee_charges_portion_derived,penalty_charges_portion_derived, submitted_on_date) VALUES (?, ?, false, ?, ?, ?, ?, ?, ?, ?)"; this.jdbcTemplate.update(transactionSql, scheduleAccrualData.getLoanId(), scheduleAccrualData.getOfficeId(), LoanTransactionType.ACCRUAL.getValue(), Date.from(accruedTill.atStartOfDay(ZoneId.systemDefault()).toInstant()), amount, interestportion, feeportion, penaltyportion, DateUtils.getDateOfTenant()); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java index a0658d0a1..815d84010 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java @@ -1303,7 +1303,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa BigDecimal quantity = loanCollateralManagement.getQuantity(); ClientCollateralManagement clientCollateralManagement = loanCollateralManagement.getClientCollateralManagement(); clientCollateralManagement.updateQuantityAfterLoanClosed(quantity); - loanCollateralManagement.setIsReleased(Integer.valueOf(1)); + loanCollateralManagement.setIsReleased(true); loanCollateralManagement.setClientCollateralManagement(clientCollateralManagement); } @@ -1662,7 +1662,7 @@ public class LoanApplicationWritePlatformServiceJpaRepositoryImpl implements Loa clientCollateralManagement .updateQuantity(clientCollateralManagement.getQuantity().add(loanCollateralManagement.getQuantity())); loanCollateralManagement.setClientCollateralManagement(clientCollateralManagement); - loanCollateralManagement.setIsReleased(Integer.valueOf(1)); + loanCollateralManagement.setIsReleased(true); } loan.updateLoanCollateral(loanCollateralManagements); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java index 267365694..5c25c21e9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanArrearsAgingServiceImpl.java @@ -91,16 +91,16 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus this.jdbcTemplate.execute("truncate table m_loan_arrears_aging"); final StringBuilder updateSqlBuilder = new StringBuilder(900); - final String principalOverdueCalculationSql = "SUM(ifnull(mr.principal_amount, 0) - ifnull(mr.principal_completed_derived, 0) - ifnull(mr.principal_writtenoff_derived, 0))"; - final String interestOverdueCalculationSql = "SUM(ifnull(mr.interest_amount, 0) - ifnull(mr.interest_writtenoff_derived, 0) - ifnull(mr.interest_waived_derived, 0) - " - + "ifnull(mr.interest_completed_derived, 0))"; - final String feeChargesOverdueCalculationSql = "SUM(ifnull(mr.fee_charges_amount, 0) - ifnull(mr.fee_charges_writtenoff_derived, 0) - " - + "ifnull(mr.fee_charges_waived_derived, 0) - ifnull(mr.fee_charges_completed_derived, 0))"; - final String penaltyChargesOverdueCalculationSql = "SUM(ifnull(mr.penalty_charges_amount, 0) - ifnull(mr.penalty_charges_writtenoff_derived, 0) - " - + "ifnull(mr.penalty_charges_waived_derived, 0) - ifnull(mr.penalty_charges_completed_derived, 0))"; + final String principalOverdueCalculationSql = "SUM(COALESCE(mr.principal_amount, 0) - coalesce(mr.principal_completed_derived, 0) - coalesce(mr.principal_writtenoff_derived, 0))"; + final String interestOverdueCalculationSql = "SUM(COALESCE(mr.interest_amount, 0) - coalesce(mr.interest_writtenoff_derived, 0) - coalesce(mr.interest_waived_derived, 0) - " + + "coalesce(mr.interest_completed_derived, 0))"; + final String feeChargesOverdueCalculationSql = "SUM(COALESCE(mr.fee_charges_amount, 0) - coalesce(mr.fee_charges_writtenoff_derived, 0) - " + + "coalesce(mr.fee_charges_waived_derived, 0) - coalesce(mr.fee_charges_completed_derived, 0))"; + final String penaltyChargesOverdueCalculationSql = "SUM(COALESCE(mr.penalty_charges_amount, 0) - coalesce(mr.penalty_charges_writtenoff_derived, 0) - " + + "coalesce(mr.penalty_charges_waived_derived, 0) - coalesce(mr.penalty_charges_completed_derived, 0))"; updateSqlBuilder.append( - "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`)"); + "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)"); updateSqlBuilder.append("select ml.id as loanId,"); updateSqlBuilder.append(principalOverdueCalculationSql + " as principal_overdue_derived,"); updateSqlBuilder.append(interestOverdueCalculationSql + " as interest_overdue_derived,"); @@ -114,8 +114,8 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus updateSqlBuilder.append(" left join m_product_loan_recalculation_details prd on prd.product_id = ml.product_id "); updateSqlBuilder.append(" WHERE ml.loan_status_id = 300 "); // active updateSqlBuilder.append(" and mr.completed_derived is false "); - updateSqlBuilder.append(" and mr.duedate < SUBDATE(CURDATE(),INTERVAL ifnull(ml.grace_on_arrears_ageing,0) day) "); - updateSqlBuilder.append(" and (prd.arrears_based_on_original_schedule = 0 or prd.arrears_based_on_original_schedule is null) "); + updateSqlBuilder.append(" and mr.duedate < SUBDATE(CURDATE(),INTERVAL COALESCE(ml.grace_on_arrears_ageing, 0) day) "); + updateSqlBuilder.append(" and (prd.arrears_based_on_original_schedule = false or prd.arrears_based_on_original_schedule is null) "); updateSqlBuilder.append(" GROUP BY ml.id"); List insertStatements = updateLoanArrearsAgeingDetailsWithOriginalSchedule(); @@ -144,7 +144,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus if (updateStatement.size() == 1) { this.jdbcTemplate.update(updateStatement.get(0)); } else { - String deletestatement = "DELETE FROM `m_loan_arrears_aging` WHERE `loan_id`=" + loan.getId(); + String deletestatement = "DELETE FROM m_loan_arrears_aging WHERE loan_id=" + loan.getId(); this.jdbcTemplate.update(deletestatement); } } @@ -156,7 +156,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus Integer.class, loan.getId()); String updateStatement = constructUpdateStatement(loan, count == 0); if (updateStatement == null) { - String deletestatement = "DELETE FROM `m_loan_arrears_aging` WHERE `loan_id`=" + loan.getId(); + String deletestatement = "DELETE FROM m_loan_arrears_aging WHERE loan_id=" + loan.getId(); this.jdbcTemplate.update(deletestatement); } else { this.jdbcTemplate.update(updateStatement); @@ -203,9 +203,9 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus loanIdentifier.append("select ml.id as loanId FROM m_loan ml "); loanIdentifier.append("INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id "); loanIdentifier.append( - "inner join m_product_loan_recalculation_details prd on prd.product_id = ml.product_id and prd.arrears_based_on_original_schedule = 1 "); + "inner join m_product_loan_recalculation_details prd on prd.product_id = ml.product_id and prd.arrears_based_on_original_schedule = true "); loanIdentifier.append( - "WHERE ml.loan_status_id = 300 and mr.completed_derived is false and mr.duedate < SUBDATE(CURDATE(),INTERVAL ifnull(ml.grace_on_arrears_ageing,0) day) group by ml.id"); + "WHERE ml.loan_status_id = 300 and mr.completed_derived is false and mr.duedate < SUBDATE(CURDATE(),INTERVAL COALESCE(ml.grace_on_arrears_ageing, 0) day) group by ml.id"); List loanIds = this.jdbcTemplate.queryForList(loanIdentifier.toString(), Long.class); if (!loanIds.isEmpty()) { String loanIdsAsString = loanIds.toString(); @@ -300,8 +300,8 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus private String constructInsertStatement(final Long loanId, BigDecimal principalOverdue, BigDecimal interestOverdue, BigDecimal feeOverdue, BigDecimal penaltyOverdue, LocalDate overDueSince) { final StringBuilder insertStatementBuilder = new StringBuilder(900); - insertStatementBuilder.append("INSERT INTO m_loan_arrears_aging(`loan_id`,`principal_overdue_derived`,`interest_overdue_derived`,") - .append("`fee_charges_overdue_derived`,`penalty_charges_overdue_derived`,`total_overdue_derived`,`overdue_since_date_derived`) VALUES("); + insertStatementBuilder.append("INSERT INTO m_loan_arrears_aging(loan_id,principal_overdue_derived,interest_overdue_derived,") + .append("fee_charges_overdue_derived,penalty_charges_overdue_derived,total_overdue_derived,overdue_since_date_derived) VALUES("); insertStatementBuilder.append(loanId).append(","); insertStatementBuilder.append(principalOverdue).append(","); insertStatementBuilder.append(interestOverdue).append(","); @@ -316,15 +316,15 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus private String constructUpdateStatement(final Long loanId, BigDecimal principalOverdue, BigDecimal interestOverdue, BigDecimal feeOverdue, BigDecimal penaltyOverdue, LocalDate overDueSince) { final StringBuilder insertStatementBuilder = new StringBuilder(900); - insertStatementBuilder.append("UPDATE m_loan_arrears_aging mla SET mla.principal_overdue_derived="); - insertStatementBuilder.append(principalOverdue).append(", mla.interest_overdue_derived="); - insertStatementBuilder.append(interestOverdue).append(", mla.fee_charges_overdue_derived="); - insertStatementBuilder.append(feeOverdue).append(", mla.penalty_charges_overdue_derived="); - insertStatementBuilder.append(penaltyOverdue).append(", mla.total_overdue_derived="); + insertStatementBuilder.append("UPDATE m_loan_arrears_aging SET principal_overdue_derived="); + insertStatementBuilder.append(principalOverdue).append(", interest_overdue_derived="); + insertStatementBuilder.append(interestOverdue).append(", fee_charges_overdue_derived="); + insertStatementBuilder.append(feeOverdue).append(", penalty_charges_overdue_derived="); + insertStatementBuilder.append(penaltyOverdue).append(", total_overdue_derived="); BigDecimal totalOverDue = principalOverdue.add(interestOverdue).add(feeOverdue).add(penaltyOverdue); - insertStatementBuilder.append(totalOverDue).append(",mla.overdue_since_date_derived= '"); + insertStatementBuilder.append(totalOverDue).append(",overdue_since_date_derived= '"); insertStatementBuilder.append(this.formatter.format(overDueSince)).append("' "); - insertStatementBuilder.append("WHERE mla.loan_id=").append(loanId); + insertStatementBuilder.append("WHERE loan_id=").append(loanId); return insertStatementBuilder.toString(); } @@ -425,7 +425,7 @@ public class LoanArrearsAgingServiceImpl implements LoanArrearsAgingService, Bus scheduleDetail.append( "mr.interest_amount as interestAmount, mr.fee_charges_amount as feeAmount, mr.penalty_charges_amount as penaltyAmount "); scheduleDetail.append("from m_loan ml INNER JOIN m_loan_repayment_schedule_history mr on mr.loan_id = ml.id "); - scheduleDetail.append("where mr.duedate < SUBDATE(CURDATE(),INTERVAL ifnull(ml.grace_on_arrears_ageing,0) day) and "); + scheduleDetail.append("where mr.duedate < SUBDATE(CURDATE(),INTERVAL COALESCE(ml.grace_on_arrears_ageing, 0) day) and "); scheduleDetail.append("ml.id IN(").append(loanIdsAsString).append(") and mr.version = ("); scheduleDetail.append("select max(lrs.version) from m_loan_repayment_schedule_history lrs where mr.loan_id = lrs.loan_id"); scheduleDetail.append(") order by ml.id,mr.duedate"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java index 954f89e45..fcded5b6a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeReadPlatformServiceImpl.java @@ -77,7 +77,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform + "lc.charge_payment_mode_enum as chargePaymentMode, " + "lc.is_paid_derived as paid, " + "lc.waived as waied, " + "lc.min_cap as minCap, lc.max_cap as maxCap, " + "lc.charge_amount_or_percentage as amountOrPercentage, " + "c.currency_code as currencyCode, oc.name as currencyName, " - + "date(ifnull(dd.disbursedon_date,dd.expected_disburse_date)) as disbursementDate, " + + "date(coalesce(dd.disbursedon_date,dd.expected_disburse_date)) as disbursementDate, " + "oc.decimal_places as currencyDecimalPlaces, oc.currency_multiplesof as inMultiplesOf, oc.display_symbol as currencyDisplaySymbol, " + "oc.internationalized_name_code as currencyNameCode from m_charge c " + "join m_organisation_currency oc on c.currency_code = oc.code " + "join m_loan_charge lc on lc.charge_id = c.id " @@ -188,8 +188,8 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform final LoanChargeMapper rm = new LoanChargeMapper(); - final String sql = "select " + rm.schema() + " where lc.loan_id=? AND lc.is_active = 1" - + " order by ifnull(lc.due_for_collection_as_of_date,date(ifnull(dd.disbursedon_date,dd.expected_disburse_date))),lc.charge_time_enum ASC, lc.due_for_collection_as_of_date ASC, lc.is_penalty ASC"; + final String sql = "select " + rm.schema() + " where lc.loan_id=? AND lc.is_active = true" + + " order by coalesce(lc.due_for_collection_as_of_date,date(coalesce(dd.disbursedon_date,dd.expected_disburse_date))),lc.charge_time_enum ASC, lc.due_for_collection_as_of_date ASC, lc.is_penalty ASC"; return this.jdbcTemplate.query(sql, rm, new Object[] { loanId }); } @@ -198,7 +198,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform public Collection retrieveLoanChargesForFeePayment(final Integer paymentMode, final Integer loanStatus) { final LoanChargeMapperWithLoanId rm = new LoanChargeMapperWithLoanId(); final String sql = "select " + rm.schema() - + "where loan.loan_status_id= ? and lc.charge_payment_mode_enum=? and lc.waived =0 and lc.is_paid_derived=0 and lc.is_active = 1"; + + "where loan.loan_status_id= ? and lc.charge_payment_mode_enum=? and lc.waived = false and lc.is_paid_derived=false and lc.is_active = true"; return this.jdbcTemplate.query(sql, rm, new Object[] { loanStatus, paymentMode }); } @@ -229,7 +229,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform final LoanInstallmentChargeMapper rm = new LoanInstallmentChargeMapper(); String sql = "select " + rm.schema() + "where lic.loan_charge_id= ? "; if (onlyPaymentPendingCharges) { - sql = sql + "and lic.waived =0 and lic.is_paid_derived=0"; + sql = sql + "and lic.waived = false and lic.is_paid_derived=false"; } sql = sql + " order by lsi.installment"; return this.jdbcTemplate.query(sql, rm, new Object[] { loanChargeId }); @@ -262,7 +262,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform public Collection retrieveOverdueInstallmentChargeFrequencyNumber(final Long loanId, final Long chargeId, final Integer periodNumber) { String sql = "select oic.frequency_number from m_loan_overdue_installment_charge oic inner join m_loan_charge lc on lc.id=oic.loan_charge_id inner join m_loan_repayment_schedule rs on rs.id = oic.loan_schedule_id inner join m_loan loan on loan.id=rs.loan_id " - + "where lc.is_active = 1 and loan.id = ? and rs.installment=?"; + + "where lc.is_active = true and loan.id = ? and rs.installment=?"; Object[] params = { loanId, periodNumber }; if (chargeId != null) { sql += " and lc.charge_id = ? "; @@ -276,7 +276,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform final LoanChargeAccrualMapper rm = new LoanChargeAccrualMapper(); - final String sql = "select " + rm.schema() + " where lc.loan_id=? AND lc.is_active = 1 group by lc.id " + final String sql = "select " + rm.schema() + " where lc.loan_id=? AND lc.is_active = true group by lc.id " + " order by lc.charge_time_enum ASC, lc.due_for_collection_as_of_date ASC, lc.is_penalty ASC"; Collection charges = this.jdbcTemplate.query(sql, rm, @@ -320,7 +320,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform sb.append("select lcp.loan_charge_id, lcp.amount"); sb.append(" from m_loan_charge_paid_by lcp "); sb.append( - "inner join m_loan_transaction lt on lt.id = lcp.loan_transaction_id and lt.is_reversed = 0 and lt.transaction_type_enum = ? and lt.loan_id = ?"); + "inner join m_loan_transaction lt on lt.id = lcp.loan_transaction_id and lt.is_reversed = false and lt.transaction_type_enum = ? and lt.loan_id = ?"); sb.append(") cp on cp.loan_charge_id= lc.id "); schemaSql = sb.toString(); @@ -354,7 +354,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform final LoanChargeUnRecognizedIncomeMapper rm = new LoanChargeUnRecognizedIncomeMapper(loanChargeDatas); - final String sql = "select " + rm.schema() + " where lc.loan_id=? AND lc.is_active = 1 group by lc.id " + final String sql = "select " + rm.schema() + " where lc.loan_id=? AND lc.is_active = true group by lc.id " + " order by lc.charge_time_enum ASC, lc.due_for_collection_as_of_date ASC, lc.is_penalty ASC"; return this.jdbcTemplate.query(sql, rm, new Object[] { LoanTransactionType.WAIVE_CHARGES.getValue(), loanId, loanId }); @@ -380,7 +380,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform sb.append("select cpb.loan_charge_id, lt.unrecognized_income_portion"); sb.append(" from m_loan_charge_paid_by cpb "); sb.append( - "inner join m_loan_transaction lt on lt.id = cpb.loan_transaction_id and lt.is_reversed = 0 and lt.transaction_type_enum = ? and lt.loan_id = ? "); + "inner join m_loan_transaction lt on lt.id = cpb.loan_transaction_id and lt.is_reversed = false and lt.transaction_type_enum = ? and lt.loan_id = ? "); sb.append(") wt on wt.loan_charge_id= lc.id "); schemaSql = sb.toString(); @@ -438,7 +438,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform sb.append("select lcp.loan_charge_id, lcp.amount as amount, lcp.installment_number "); sb.append(" from m_loan_charge_paid_by lcp "); sb.append( - "inner join m_loan_transaction lt on lt.id = lcp.loan_transaction_id and lt.is_reversed = 0 and lt.transaction_type_enum = ?"); + "inner join m_loan_transaction lt on lt.id = lcp.loan_transaction_id and lt.is_reversed = false and lt.transaction_type_enum = ?"); sb.append(") cp on cp.loan_charge_id= lic.loan_charge_id and cp.installment_number = lsi.installment "); schemaSql = sb.toString(); } @@ -482,7 +482,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform sb.append(" sum(lt.unrecognized_income_portion) as amountUnrecognized "); sb.append(" from m_loan_charge_paid_by cpb "); sb.append( - "inner join m_loan_transaction lt on lt.id = cpb.loan_transaction_id and lt.is_reversed = 0 and lt.transaction_type_enum = ?"); + "inner join m_loan_transaction lt on lt.id = cpb.loan_transaction_id and lt.is_reversed = false and lt.transaction_type_enum = ?"); schemaSql = sb.toString(); } @@ -533,7 +533,7 @@ public class LoanChargeReadPlatformServiceImpl implements LoanChargeReadPlatform sb.append("lcp.loan_transaction_id as transactionId, "); sb.append("lcp.installment_number as installmentNumber "); sb.append(" from m_loan_charge_paid_by lcp "); - sb.append(" join m_loan_transaction lt on lt.id = lcp.loan_transaction_id and lt.is_reversed=0"); + sb.append(" join m_loan_transaction lt on lt.id = lcp.loan_transaction_id and lt.is_reversed=false"); schemaSql = sb.toString(); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 98233d00c..5872fb20f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -281,7 +281,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { * TODO Vishwas: Remove references to "Contra" from the codebase ***/ final String sql = "select " + rm.loanPaymentsSchema() - + " where tr.loan_id = ? and tr.transaction_type_enum not in (0, 3) and (tr.is_reversed=0 or tr.manually_adjusted_or_reversed = 1) order by tr.transaction_date ASC,id "; + + " where tr.loan_id = ? and tr.transaction_type_enum not in (0, 3) and (tr.is_reversed=false or tr.manually_adjusted_or_reversed = true) order by tr.transaction_date ASC,id "; return this.jdbcTemplate.query(sql, rm, new Object[] { loanId }); } catch (final EmptyResultDataAccessException e) { return null; @@ -1530,8 +1530,8 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final StringBuilder sqlBuilder = new StringBuilder(400); sqlBuilder.append("select ").append(rm.schema()).append(" where DATE_SUB(CURDATE(),INTERVAL ? DAY) > ls.duedate ") - .append(" and ls.completed_derived <> 1 and mc.charge_applies_to_enum =1 ") - .append(" and ls.recalculated_interest_component <> 1 ") + .append(" and ls.completed_derived <> true and mc.charge_applies_to_enum =1 ") + .append(" and ls.recalculated_interest_component <> true ") .append(" and mc.charge_time_enum = 9 and ml.loan_status_id = 300 "); if (backdatePenalties) { @@ -1571,7 +1571,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { public String schema() { return "dd.id as id,dd.expected_disburse_date as expectedDisbursementdate, dd.disbursedon_date as actualDisbursementdate,dd.principal as principal,dd.net_disbursal_amount as netDisbursalAmount,sum(lc.amount) chargeAmount, lc.amount_waived_derived waivedAmount,group_concat(lc.id) loanChargeId " + "from m_loan l inner join m_loan_disbursement_detail dd on dd.loan_id = l.id left join m_loan_tranche_disbursement_charge tdc on tdc.disbursement_detail_id=dd.id " - + "left join m_loan_charge lc on lc.id=tdc.loan_charge_id and lc.is_active=1"; + + "left join m_loan_charge lc on lc.id=tdc.loan_charge_id and lc.is_active=true"; } @Override @@ -1638,11 +1638,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { Date organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate(); final StringBuilder sqlBuilder = new StringBuilder(400); sqlBuilder.append("select ").append(mapper.schema()).append( - " where (recaldet.is_compounding_to_be_posted_as_transaction is null or recaldet.is_compounding_to_be_posted_as_transaction = 0) ") - .append(" and (((ls.fee_charges_amount <> if(ls.accrual_fee_charges_derived is null,0, ls.accrual_fee_charges_derived))") - .append(" or ( ls.penalty_charges_amount <> if(ls.accrual_penalty_charges_derived is null,0,ls.accrual_penalty_charges_derived))") - .append(" or ( ls.interest_amount <> if(ls.accrual_interest_derived is null,0,ls.accrual_interest_derived)))") - .append(" and loan.loan_status_id=:active and mpl.accounting_type=:type and loan.is_npa=0 and ls.duedate <= CURDATE()) "); + " where (recaldet.is_compounding_to_be_posted_as_transaction is null or recaldet.is_compounding_to_be_posted_as_transaction = false) ") + .append(" and (((ls.fee_charges_amount <> COALESCE(ls.accrual_fee_charges_derived, 0))") + .append(" or ( ls.penalty_charges_amount <> COALESCE(ls.accrual_penalty_charges_derived, 0))") + .append(" or ( ls.interest_amount <> COALESCE(ls.accrual_interest_derived, 0)))") + .append(" and loan.loan_status_id=:active and mpl.accounting_type=:type and loan.is_npa=false and ls.duedate <= CURDATE()) "); if (organisationStartDate != null) { sqlBuilder.append(" and ls.duedate > :organisationstartdate "); } @@ -1664,12 +1664,14 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { Date organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate(); final StringBuilder sqlBuilder = new StringBuilder(400); sqlBuilder.append("select ").append(mapper.schema()).append( - " where (recaldet.is_compounding_to_be_posted_as_transaction is null or recaldet.is_compounding_to_be_posted_as_transaction = 0) ") - .append(" and (((ls.fee_charges_amount <> if(ls.accrual_fee_charges_derived is null,0, ls.accrual_fee_charges_derived))") - .append(" or (ls.penalty_charges_amount <> if(ls.accrual_penalty_charges_derived is null,0,ls.accrual_penalty_charges_derived))") - .append(" or (ls.interest_amount <> if(ls.accrual_interest_derived is null,0,ls.accrual_interest_derived)))") - .append(" and loan.loan_status_id=:active and mpl.accounting_type=:type and (loan.closedon_date <= :tilldate or loan.closedon_date is null)") - .append(" and loan.is_npa=0 and (ls.duedate <= :tilldate or (ls.duedate > :tilldate and ls.fromdate < :tilldate))) "); + " where (recaldet.is_compounding_to_be_posted_as_transaction is null or recaldet.is_compounding_to_be_posted_as_transaction = false) ") + .append(" and (((ls.fee_charges_amount <> COALESCE(ls.accrual_fee_charges_derived, 0))") + .append(" or (ls.penalty_charges_amount <> COALESCE(ls.accrual_penalty_charges_derived, 0))") + .append(" or (ls.interest_amount <> COALESCE(ls.accrual_interest_derived, 0)))") + .append(" and loan.loan_status_id=:active and mpl.accounting_type=:type and (loan.closedon_date <= :tilldate" + + " or loan.closedon_date is null)") + .append(" and loan.is_npa=false and (ls.duedate <= :tilldate or (ls.duedate > :tilldate" + + " and ls.fromdate < :tilldate))) "); if (organisationStartDate != null) { sqlBuilder.append(" and ls.duedate > :organisationstartdate "); } @@ -1689,7 +1691,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { public String schema() { final StringBuilder sqlBuilder = new StringBuilder(400); - sqlBuilder.append("loan.id as loanId ,if(loan.client_id is null,mg.office_id,mc.office_id) as officeId,") + sqlBuilder.append("loan.id as loanId , (CASE WHEN loan.client_id is null THEN mg.office_id ELSE mc.office_id END) as officeId,") .append("loan.accrued_till as accruedTill, loan.repayment_period_frequency_enum as frequencyEnum, ") .append("loan.interest_calculated_from_date as interestCalculatedFrom, ").append("loan.repay_every as repayEvery,") .append("ls.installment as installmentNumber, ") @@ -1751,7 +1753,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { public String schema() { final StringBuilder sqlBuilder = new StringBuilder(400); - sqlBuilder.append("loan.id as loanId ,if(loan.client_id is null,mg.office_id,mc.office_id) as officeId,") + sqlBuilder.append("loan.id as loanId, (CASE WHEN loan.client_id is null THEN mg.office_id ELSE mc.office_id END) as officeId,") .append("ls.duedate as duedate,ls.fromdate as fromdate,ls.id as scheduleId,loan.product_id as productId,") .append("ls.installment as installmentNumber, ") .append("ls.interest_amount as interest, ls.interest_waived_derived as interestWaived,") @@ -1840,15 +1842,15 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { sqlBuilder.append(" LEFT JOIN m_loan_disbursement_detail dd on dd.loan_id=ml.id and dd.disbursedon_date is null "); // For Floating rate changes sqlBuilder.append( - " left join m_product_loan_floating_rates pfr on ml.product_id = pfr.loan_product_id and ml.is_floating_interest_rate = 1"); + " left join m_product_loan_floating_rates pfr on ml.product_id = pfr.loan_product_id and ml.is_floating_interest_rate = true"); sqlBuilder.append(" left join m_floating_rates fr on pfr.floating_rates_id = fr.id"); sqlBuilder.append(" left join m_floating_rates_periods frp on fr.id = frp.floating_rates_id "); sqlBuilder.append(" left join m_loan_reschedule_request lrr on lrr.loan_id = ml.id"); // this is to identify the applicable rates when base rate is changed - sqlBuilder.append(" left join m_floating_rates bfr on bfr.is_base_lending_rate = 1"); + sqlBuilder.append(" left join m_floating_rates bfr on bfr.is_base_lending_rate = true"); sqlBuilder.append(" left join m_floating_rates_periods bfrp on bfr.id = bfrp.floating_rates_id and bfrp.created_date >= ?"); sqlBuilder.append(" WHERE ml.loan_status_id = ? "); - sqlBuilder.append(" and ml.is_npa = 0 "); + sqlBuilder.append(" and ml.is_npa = false "); sqlBuilder.append(" and (("); sqlBuilder.append("ml.interest_recalculation_enabled = 1 "); sqlBuilder.append(" and (ml.interest_recalcualated_on is null or ml.interest_recalcualated_on <> ?)"); @@ -1857,9 +1859,10 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { sqlBuilder.append(" and mr.duedate < ? )"); sqlBuilder.append(" or dd.expected_disburse_date < ? )) "); sqlBuilder.append(" or ("); - sqlBuilder.append(" fr.is_active = 1 and frp.is_active = 1"); + sqlBuilder.append(" fr.is_active = true and frp.is_active = true"); sqlBuilder.append(" and (frp.created_date >= ? or "); - sqlBuilder.append("(bfrp.id is not null and frp.is_differential_to_base_lending_rate = 1 and frp.from_date >= bfrp.from_date)) "); + sqlBuilder + .append("(bfrp.id is not null and frp.is_differential_to_base_lending_rate = true and frp.from_date >= bfrp.from_date)) "); sqlBuilder.append("and lrr.loan_id is null"); sqlBuilder.append(" ))"); sqlBuilder.append(" group by ml.id"); @@ -1884,26 +1887,27 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { sqlBuilder.append(" LEFT JOIN m_loan_disbursement_detail dd on dd.loan_id=ml.id and dd.disbursedon_date is null "); // For Floating rate changes sqlBuilder.append( - " left join m_product_loan_floating_rates pfr on ml.product_id = pfr.loan_product_id and ml.is_floating_interest_rate = 1"); + " left join m_product_loan_floating_rates pfr on ml.product_id = pfr.loan_product_id and ml.is_floating_interest_rate = true"); sqlBuilder.append(" left join m_floating_rates fr on pfr.floating_rates_id = fr.id"); sqlBuilder.append(" left join m_floating_rates_periods frp on fr.id = frp.floating_rates_id "); sqlBuilder.append(" left join m_loan_reschedule_request lrr on lrr.loan_id = ml.id"); // this is to identify the applicable rates when base rate is changed - sqlBuilder.append(" left join m_floating_rates bfr on bfr.is_base_lending_rate = 1"); + sqlBuilder.append(" left join m_floating_rates bfr on bfr.is_base_lending_rate = true"); sqlBuilder.append(" left join m_floating_rates_periods bfrp on bfr.id = bfrp.floating_rates_id and bfrp.created_date >= ?"); sqlBuilder.append(" WHERE ml.loan_status_id = ? "); - sqlBuilder.append(" and ml.is_npa = 0 "); + sqlBuilder.append(" and ml.is_npa = false "); sqlBuilder.append(" and (("); - sqlBuilder.append("ml.interest_recalculation_enabled = 1 "); + sqlBuilder.append("ml.interest_recalculation_enabled = true "); sqlBuilder.append(" and (ml.interest_recalcualated_on is null or ml.interest_recalcualated_on <> ?)"); sqlBuilder.append(" and (("); sqlBuilder.append(" mr.completed_derived is false "); sqlBuilder.append(" and mr.duedate < ? )"); sqlBuilder.append(" or dd.expected_disburse_date < ? )) "); sqlBuilder.append(" or ("); - sqlBuilder.append(" fr.is_active = 1 and frp.is_active = 1"); + sqlBuilder.append(" fr.is_active = true and frp.is_active = true"); sqlBuilder.append(" and (frp.created_date >= ? or "); - sqlBuilder.append("(bfrp.id is not null and frp.is_differential_to_base_lending_rate = 1 and frp.from_date >= bfrp.from_date)) "); + sqlBuilder + .append("(bfrp.id is not null and frp.is_differential_to_base_lending_rate = true and frp.from_date >= bfrp.from_date)) "); sqlBuilder.append("and lrr.loan_id is null"); sqlBuilder.append(" ))"); sqlBuilder.append(" and ml.id >= ? and o.hierarchy like ? "); @@ -1928,7 +1932,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { final LoanTransactionDerivedComponentMapper rm = new LoanTransactionDerivedComponentMapper(); final String sql = "select " + rm.schema() - + " where tr.loan_id = ? and tr.transaction_type_enum = ? and tr.is_reversed=0 order by tr.transaction_date ASC,id "; + + " where tr.loan_id = ? and tr.transaction_type_enum = ? and tr.is_reversed=false order by tr.transaction_date ASC,id "; return this.jdbcTemplate.query(sql, rm, new Object[] { loanId, LoanTransactionType.WAIVE_INTEREST.getValue() }); } catch (final EmptyResultDataAccessException e) { return null; @@ -2068,14 +2072,14 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { public PaidInAdvanceData retrieveTotalPaidInAdvance(Long loanId) { // TODO Auto-generated method stub try { - final String sql = " select (SUM(ifnull(mr.principal_completed_derived, 0)) +" - + " + SUM(ifnull(mr.interest_completed_derived, 0)) " + " + SUM(ifnull(mr.fee_charges_completed_derived, 0)) " - + " + SUM(ifnull(mr.penalty_charges_completed_derived, 0))) as total_in_advance_derived " + final String sql = " select (SUM(COALESCE(mr.principal_completed_derived, 0)) +" + + " + SUM(COALESCE(mr.interest_completed_derived, 0)) " + " + SUM(COALESCE(mr.fee_charges_completed_derived, 0)) " + + " + SUM(COALESCE(mr.penalty_charges_completed_derived, 0))) as total_in_advance_derived " + " from m_loan ml INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id " + " where ml.id=? and mr.duedate >= CURDATE() group by ml.id having " - + " (SUM(ifnull(mr.principal_completed_derived, 0)) " + " + SUM(ifnull(mr.interest_completed_derived, 0)) " - + " + SUM(ifnull(mr.fee_charges_completed_derived, 0)) " - + "+ SUM(ifnull(mr.penalty_charges_completed_derived, 0))) > 0"; + + " (SUM(COALESCE(mr.principal_completed_derived, 0)) " + " + SUM(COALESCE(mr.interest_completed_derived, 0)) " + + " + SUM(COALESCE(mr.fee_charges_completed_derived, 0)) " + + "+ SUM(COALESCE(mr.penalty_charges_completed_derived, 0))) > 0"; BigDecimal bigDecimal = this.jdbcTemplate.queryForObject(sql, BigDecimal.class, loanId); return new PaidInAdvanceData(bigDecimal); } catch (DataAccessException e) { @@ -2155,11 +2159,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { @Override public Collection retrieveLoanIdsWithPendingIncomePostingTransactions() { StringBuilder sqlBuilder = new StringBuilder().append(" select distinct loan.id ").append(" from m_loan as loan ").append( - " inner join m_loan_recalculation_details as recdet on (recdet.loan_id = loan.id and recdet.is_compounding_to_be_posted_as_transaction is not null and recdet.is_compounding_to_be_posted_as_transaction = 1) ") + " inner join m_loan_recalculation_details as recdet on (recdet.loan_id = loan.id and recdet.is_compounding_to_be_posted_as_transaction is not null and recdet.is_compounding_to_be_posted_as_transaction = true) ") .append(" inner join m_loan_repayment_schedule as repsch on repsch.loan_id = loan.id ") .append(" inner join m_loan_interest_recalculation_additional_details as adddet on adddet.loan_repayment_schedule_id = repsch.id ") - .append(" left join m_loan_transaction as trans on (trans.is_reversed <> 1 and trans.transaction_type_enum = 19 and trans.loan_id = loan.id and trans.transaction_date = adddet.effective_date) ") - .append(" where loan.loan_status_id = 300 ").append(" and loan.is_npa = 0 ") + .append(" left join m_loan_transaction as trans on (trans.is_reversed <> true and trans.transaction_type_enum = 19 and trans.loan_id = loan.id and trans.transaction_date = adddet.effective_date) ") + .append(" where loan.loan_status_id = 300 ").append(" and loan.is_npa = false ") .append(" and adddet.effective_date is not null ").append(" and trans.transaction_date is null ") .append(" and adddet.effective_date < ? "); try { @@ -2223,21 +2227,22 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { public String schema() { StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("if(max(tr.transaction_date)>ls.dueDate,max(tr.transaction_date),ls.dueDate) as transactionDate, "); sqlBuilder.append( - "ls.principal_amount - IFNULL(ls.principal_writtenoff_derived,0) - IFNULL(ls.principal_completed_derived,0) as principalDue, "); + "(CASE WHEN max(tr.transaction_date)>ls.dueDate THEN max(tr.transaction_date) ELSE ls.dueDate END) as transactionDate, "); sqlBuilder.append( - "ls.interest_amount - IFNULL(ls.interest_completed_derived,0) - IFNULL(ls.interest_waived_derived,0) - IFNULL(ls.interest_writtenoff_derived,0) as interestDue, "); + "ls.principal_amount - coalesce(ls.principal_writtenoff_derived,0) - coalesce(ls.principal_completed_derived,0) as principalDue, "); sqlBuilder.append( - "ls.fee_charges_amount - IFNULL(ls.fee_charges_completed_derived,0) - IFNULL(ls.fee_charges_writtenoff_derived,0) - IFNULL(ls.fee_charges_waived_derived,0) as feeDue, "); + "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.penalty_charges_amount - IFNULL(ls.penalty_charges_completed_derived,0) - IFNULL(ls.penalty_charges_writtenoff_derived,0) - IFNULL(ls.penalty_charges_waived_derived,0) as penaltyDue, "); + "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, rc.`name` as currencyName, "); sqlBuilder.append("rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode "); sqlBuilder.append("FROM m_loan l "); sqlBuilder.append( - "LEFT JOIN m_loan_transaction tr ON tr.loan_id = l.id AND tr.transaction_type_enum = ? and tr.is_reversed = 0 "); + "LEFT JOIN m_loan_transaction tr ON tr.loan_id = l.id AND tr.transaction_type_enum = ? and tr.is_reversed = false "); sqlBuilder.append("join m_currency rc on rc.`code` = l.currency_code "); sqlBuilder.append("JOIN m_loan_repayment_schedule ls ON ls.loan_id = l.id AND ls.completed_derived = 0 "); sqlBuilder.append("join( "); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java index 51cca57c9..7389c9de6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java @@ -987,7 +987,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf ClientCollateralManagement clientCollateralManagement = loanCollateralManagement.getClientCollateralManagement(); if (loan.status().isClosed()) { - loanCollateralManagement.setIsReleased(Integer.valueOf(1)); + loanCollateralManagement.setIsReleased(true); BigDecimal quantity = loanCollateralManagement.getQuantity(); clientCollateralManagement.updateQuantity(clientCollateralManagement.getQuantity().add(quantity)); loanCollateralManagement.setClientCollateralManagement(clientCollateralManagement); @@ -1402,7 +1402,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf ClientCollateralManagement clientCollateralManagement = loanCollateralManagement.getClientCollateralManagement(); if (loan.status().isClosed()) { - loanCollateralManagement.setIsReleased(Integer.valueOf(1)); + loanCollateralManagement.setIsReleased(true); BigDecimal quantity = loanCollateralManagement.getQuantity(); clientCollateralManagement.updateQuantity(clientCollateralManagement.getQuantity().add(quantity)); loanCollateralManagement.setClientCollateralManagement(clientCollateralManagement); @@ -1469,7 +1469,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf ClientCollateralManagement clientCollateralManagement = loanCollateralManagement.getClientCollateralManagement(); if (loan.status().isClosed()) { - loanCollateralManagement.setIsReleased(Integer.valueOf(1)); + loanCollateralManagement.setIsReleased(true); BigDecimal quantity = loanCollateralManagement.getQuantity(); clientCollateralManagement.updateQuantity(clientCollateralManagement.getQuantity().add(quantity)); loanCollateralManagement.setClientCollateralManagement(clientCollateralManagement);