Skip to content

Commit 35cc1fc

Browse files
adamsaghygalovics
authored andcommitted
Refactor Loan Transaction to support auditable fields
1 parent 176c570 commit 35cc1fc

9 files changed

Lines changed: 275 additions & 22 deletions

File tree

fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.time.LocalDate;
2222
import java.time.LocalDateTime;
23+
import java.time.OffsetDateTime;
2324
import java.time.ZoneId;
2425
import java.time.ZonedDateTime;
2526
import java.time.format.DateTimeFormatter;
@@ -73,6 +74,11 @@ public static LocalDateTime getLocalDateTimeOfTenant() {
7374
return LocalDateTime.now(zone).truncatedTo(ChronoUnit.SECONDS);
7475
}
7576

77+
public static OffsetDateTime getOffsetDateTimeOfTenant() {
78+
final ZoneId zone = getDateTimeZoneOfTenant();
79+
return OffsetDateTime.now(zone).truncatedTo(ChronoUnit.SECONDS);
80+
}
81+
7682
public static LocalDateTime getLocalDateTimeOfSystem() {
7783
return LocalDateTime.now(ZoneId.systemDefault()).truncatedTo(ChronoUnit.SECONDS);
7884
}

fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/data/LoanTransactionData.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
package org.apache.fineract.portfolio.collateralmanagement.data;
2020

2121
import java.math.BigDecimal;
22-
import java.time.LocalDateTime;
22+
import java.time.OffsetDateTime;
2323

2424
public final class LoanTransactionData {
2525

@@ -29,17 +29,17 @@ public final class LoanTransactionData {
2929

3030
private final Long loanId;
3131

32-
private final LocalDateTime lastRepaymentDate;
32+
private final OffsetDateTime lastRepaymentDate;
3333

34-
private LoanTransactionData(final Long loanId, final LocalDateTime lastRepaymentDate, final BigDecimal remainingAmount,
34+
private LoanTransactionData(final Long loanId, final OffsetDateTime lastRepaymentDate, final BigDecimal remainingAmount,
3535
final BigDecimal lastRepayment) {
3636
this.lastRepayment = lastRepayment;
3737
this.lastRepaymentDate = lastRepaymentDate;
3838
this.remainingAmount = remainingAmount;
3939
this.loanId = loanId;
4040
}
4141

42-
public static LoanTransactionData instance(final Long loanId, final LocalDateTime lastRepaymentDate, final BigDecimal remainingAmount,
42+
public static LoanTransactionData instance(final Long loanId, final OffsetDateTime lastRepaymentDate, final BigDecimal remainingAmount,
4343
final BigDecimal lastRepayment) {
4444
return new LoanTransactionData(loanId, lastRepaymentDate, remainingAmount, lastRepayment);
4545
}

fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import java.math.BigDecimal;
2222
import java.time.LocalDate;
23-
import java.time.LocalDateTime;
23+
import java.time.OffsetDateTime;
2424
import java.util.ArrayList;
2525
import java.util.Collection;
2626
import java.util.HashSet;
@@ -37,7 +37,7 @@
3737
import javax.persistence.OneToMany;
3838
import javax.persistence.Table;
3939
import javax.persistence.UniqueConstraint;
40-
import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom;
40+
import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom;
4141
import org.apache.fineract.infrastructure.core.service.DateUtils;
4242
import org.apache.fineract.organisation.monetary.data.CurrencyData;
4343
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
@@ -56,7 +56,7 @@
5656
*/
5757
@Entity
5858
@Table(name = "m_loan_transaction", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE") })
59-
public class LoanTransaction extends AbstractAuditableCustom {
59+
public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom {
6060

6161
@ManyToOne(optional = false)
6262
@JoinColumn(name = "loan_id", nullable = false)
@@ -726,8 +726,8 @@ public void manuallyAdjustedOrReversed() {
726726
this.manuallyAdjustedOrReversed = true;
727727
}
728728

729-
public LocalDateTime getCreatedDateTime() {
730-
return (this.getCreatedDate().isPresent() ? this.getCreatedDate().get() : DateUtils.getLocalDateTimeOfTenant());
729+
public OffsetDateTime getCreatedDateTime() {
730+
return (this.getCreatedDate().isPresent() ? this.getCreatedDate().get() : DateUtils.getOffsetDateTimeOfTenant());
731731
}
732732

733733
public boolean isLastTransaction(final LoanTransaction loanTransaction) {
@@ -808,6 +808,10 @@ public Set<LoanCollateralManagement> getLoanCollateralManagementSet() {
808808
return this.loanCollateralManagementSet;
809809
}
810810

811+
public LocalDate getSubmittedOnDate() {
812+
return submittedOnDate;
813+
}
814+
811815
// TODO missing hashCode(), equals(Object obj), but probably OK as long as
812816
// this is never stored in a Collection.
813817
}

fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -676,8 +676,7 @@ public String loanSchema() {
676676
+ " left join m_loan_arrears_aging la on la.loan_id = l.id" //
677677
+ " left join m_fund f on f.id = l.fund_id" //
678678
+ " left join m_staff s on s.id = l.loan_officer_id" //
679-
+ " left join m_appuser sbu on sbu.id = l.submittedon_userid"
680-
+ " left join m_appuser rbu on rbu.id = l.rejectedon_userid"
679+
+ " left join m_appuser sbu on sbu.id = l.created_by" + " left join m_appuser rbu on rbu.id = l.rejectedon_userid"
681680
+ " left join m_appuser wbu on wbu.id = l.withdrawnon_userid"
682681
+ " left join m_appuser abu on abu.id = l.approvedon_userid"
683682
+ " left join m_appuser dbu on dbu.id = l.disbursedon_userid" + " left join m_appuser cbu on cbu.id = l.closedon_userid"

fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.google.gson.JsonObject;
2424
import java.math.BigDecimal;
2525
import java.time.LocalDate;
26-
import java.time.ZoneId;
2726
import java.time.format.DateTimeFormatter;
2827
import java.util.ArrayList;
2928
import java.util.Arrays;
@@ -3302,8 +3301,7 @@ private void syncExpectedDateWithActualDisbursementDate(final Loan loan, LocalDa
33023301
private void validateTransactionsForTransfer(final Loan loan, final LocalDate transferDate) {
33033302

33043303
for (LoanTransaction transaction : loan.getLoanTransactions()) {
3305-
if ((transaction.getTransactionDate().isEqual(transferDate)
3306-
&& transaction.getCreatedDateTime().isEqual(transferDate.atStartOfDay(ZoneId.systemDefault()).toLocalDateTime()))
3304+
if ((transaction.getTransactionDate().isEqual(transferDate) && transaction.getSubmittedOnDate().isEqual(transferDate))
33073305
|| transaction.getTransactionDate().isAfter(transferDate)) {
33083306
throw new GeneralPlatformDomainRuleException(TransferApiConstants.transferClientLoanException,
33093307
TransferApiConstants.transferClientLoanExceptionMessage, transaction.getCreatedDateTime().toLocalDate(),

fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/api/TransferApiConstants.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ private TransferApiConstants() {
3838
public static final String destinationOfficeIdParamName = "destinationOfficeId";
3939
public static final String note = "note";
4040
public static final String transferDate = "transferDate";
41-
public static final String transferClientLoanException = "error.msg.caanot.transfer.client.as.loan.transaction.present.on.or.after.transfer.date";
42-
public static final String transferClientLoanExceptionMessage = "error msg caanot transfer client as loan transaction present on or after transfer date";
43-
public static final String transferClientSavingsException = "error.msg.caanot.transfer.client.as.savings.transaction.present.on.or.after.transfer.date";
44-
public static final String transferClientSavingsExceptionMessage = "error msg caanot transfer client as savings transaction present on or after transfer date";
45-
public static final String transferClientToSameOfficeException = "error.msg.cannot.transfer.clinet.as.selected.office.and.current.office.are.same";
46-
public static final String transferClientToSameOfficeExceptionMessage = "error.msg.cannot.transfer.clinet.as.selected.office.and.current.office.are.same";
41+
public static final String transferClientLoanException = "error.msg.cannot.transfer.client.as.loan.transaction.present.on.or.after.transfer.date";
42+
public static final String transferClientLoanExceptionMessage = "error msg cannot transfer client as loan transaction present on or after transfer date";
43+
public static final String transferClientSavingsException = "error.msg.cannot.transfer.client.as.savings.transaction.present.on.or.after.transfer.date";
44+
public static final String transferClientSavingsExceptionMessage = "error msg cannot transfer client as savings transaction present on or after transfer date";
45+
public static final String transferClientToSameOfficeException = "error.msg.cannot.transfer.client.as.selected.office.and.current.office.are.same";
46+
public static final String transferClientToSameOfficeExceptionMessage = "error.msg.cannot.transfer.client.as.selected.office.and.current.office.are.same";
4747
}

fineract-provider/src/main/resources/db/changelog/tenant/parts/0019_refactor_loan_transaction.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
2323
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2424
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd">
25-
<changeSet author="fineract" id="1" onValidationFail="MARK_RAN">
25+
<changeSet author="fineract" id="1">
26+
<validCheckSum>8:4500ffb68c695d72caba498deff75643</validCheckSum>
2627
<addColumn tableName="m_loan_transaction">
2728
<column name="createdby_id" type="BIGINT" valueComputed="appuser_id"/>
2829
<column name="lastmodifiedby_id" type="BIGINT"/>
29-
<column name="lastmodified_date" type="DATETIME"/>
3030
</addColumn>
3131
</changeSet>
3232
<changeSet id="2" author="fineract">

0 commit comments

Comments
 (0)