refactor: add lombok to provisioning module

This commit is contained in:
Hemant Gupta
2022-08-30 13:15:17 +02:00
committed by Arnold Gálovics
parent 2c4f6e4c61
commit aa12de397d
6 changed files with 77 additions and 182 deletions
@@ -19,77 +19,33 @@
package org.apache.fineract.accounting.provisioning.data; package org.apache.fineract.accounting.provisioning.data;
import java.math.BigDecimal; import java.math.BigDecimal;
import lombok.Getter; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Getter @Data
@NoArgsConstructor
@Accessors(chain = true)
public class LoanProductProvisioningEntryData { public class LoanProductProvisioningEntryData {
private final Long historyId; private Long historyId;
private final Long officeId; private Long officeId;
private final String officeName; private String officeName;
private final String currencyCode; private String currencyCode;
private final Long productId; private Long productId;
private final String productName; private String productName;
private final Long categoryId; private Long categoryId;
private final String categoryName; private String categoryName;
private final Long overdueInDays; private Long overdueInDays;
private final BigDecimal percentage; private BigDecimal percentage;
private final BigDecimal balance; private BigDecimal balance;
private final BigDecimal amountreserved; private BigDecimal amountreserved;
private final Long liablityAccount; private Long liablityAccount;
private final String liabilityAccountCode; private String liabilityAccountCode;
private final String liabilityAccountName; private String liabilityAccountName;
private final Long expenseAccount; private Long expenseAccount;
private final String expenseAccountCode; private String expenseAccountCode;
private final String expenseAccountName; private String expenseAccountName;
private final Long criteriaId; private Long criteriaId;
public LoanProductProvisioningEntryData(final Long historyId, final Long officeId, final String currencyCode, final Long productId,
final Long categoryId, final Long overdueInDays, final BigDecimal percentage, final BigDecimal balance, Long liablityAccount,
Long expenseAccount, final Long criteriaId) {
this.historyId = historyId;
this.officeId = officeId;
this.currencyCode = currencyCode;
this.productId = productId;
this.categoryId = categoryId;
this.overdueInDays = overdueInDays;
this.percentage = percentage;
this.balance = balance;
this.liablityAccount = liablityAccount;
this.expenseAccount = expenseAccount;
this.amountreserved = null;
this.officeName = null;
this.productName = null;
this.categoryName = null;
this.liabilityAccountCode = null;
this.liabilityAccountName = null;
this.expenseAccountCode = null;
this.expenseAccountName = null;
this.criteriaId = criteriaId;
}
public LoanProductProvisioningEntryData(final Long historyId, final Long officeId, final String officeName, final String currencyCode,
final Long productId, final String productName, final Long categoryId, final String categoryName, final Long overdueInDays,
final BigDecimal amountreserved, Long liablityAccount, String liabilityAccountglCode, String liabilityAccountName,
Long expenseAccount, String expenseAccountglCode, String expenseAccountName, final Long criteriaId) {
this.historyId = historyId;
this.officeId = officeId;
this.currencyCode = currencyCode;
this.productId = productId;
this.categoryId = categoryId;
this.categoryName = categoryName;
this.overdueInDays = overdueInDays;
this.percentage = null;
this.balance = null;
this.liablityAccount = liablityAccount;
this.expenseAccount = expenseAccount;
this.officeName = officeName;
this.productName = productName;
this.amountreserved = amountreserved;
this.liabilityAccountCode = liabilityAccountglCode;
this.liabilityAccountName = liabilityAccountName;
this.expenseAccountCode = expenseAccountglCode;
this.expenseAccountName = expenseAccountName;
this.criteriaId = criteriaId;
}
} }
@@ -21,7 +21,13 @@ package org.apache.fineract.accounting.provisioning.data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@Accessors(chain = true)
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class ProvisioningEntryData { public class ProvisioningEntryData {
@@ -43,32 +49,4 @@ public class ProvisioningEntryData {
private Collection<LoanProductProvisioningEntryData> provisioningEntries; private Collection<LoanProductProvisioningEntryData> provisioningEntries;
public ProvisioningEntryData(final Long id, final Collection<LoanProductProvisioningEntryData> provisioningEntries) {
this.provisioningEntries = provisioningEntries;
this.id = id;
}
public ProvisioningEntryData(Long id, Boolean journalEntry, Long createdById, String createdUser, LocalDate createdDate,
Long modifiedById, String modifiedUser, BigDecimal totalReservedAmount) {
this.id = id;
this.journalEntry = journalEntry;
this.createdById = createdById;
this.createdUser = createdUser;
this.modifiedById = modifiedById;
this.modifiedUser = modifiedUser;
this.createdDate = createdDate;
this.reservedAmount = totalReservedAmount;
}
public void setEntries(Collection<LoanProductProvisioningEntryData> provisioningEntries) {
this.provisioningEntries = provisioningEntries;
}
public Long getId() {
return this.id;
}
public LocalDate getCreatedDate() {
return this.createdDate;
}
} }
@@ -25,12 +25,20 @@ import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.Table; import javax.persistence.Table;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.fineract.accounting.glaccount.domain.GLAccount; import org.apache.fineract.accounting.glaccount.domain.GLAccount;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.Office;
import org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory; import org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
@Entity @Entity
@Table(name = "m_loanproduct_provisioning_entry") @Table(name = "m_loanproduct_provisioning_entry")
public class LoanProductProvisioningEntry extends AbstractPersistableCustom { public class LoanProductProvisioningEntry extends AbstractPersistableCustom {
@@ -71,50 +79,6 @@ public class LoanProductProvisioningEntry extends AbstractPersistableCustom {
@JoinColumn(name = "expense_account", nullable = false) @JoinColumn(name = "expense_account", nullable = false)
private GLAccount expenseAccount; private GLAccount expenseAccount;
protected LoanProductProvisioningEntry() {}
public LoanProductProvisioningEntry(final LoanProduct loanProduct, final Office office, final String currencyCode,
final ProvisioningCategory provisioningCategory, final Long overdueInDays, final BigDecimal reservedAmount,
final GLAccount liabilityAccount, final GLAccount expenseAccount, Long criteriaId) {
this.loanProduct = loanProduct;
this.office = office;
this.currencyCode = currencyCode;
this.provisioningCategory = provisioningCategory;
this.overdueInDays = overdueInDays;
this.reservedAmount = reservedAmount;
this.liabilityAccount = liabilityAccount;
this.expenseAccount = expenseAccount;
this.criteriaId = criteriaId;
}
public void setProvisioningEntry(ProvisioningEntry provisioningEntry) {
this.entry = provisioningEntry;
}
public BigDecimal getReservedAmount() {
return this.reservedAmount;
}
public void addReservedAmount(BigDecimal value) {
this.reservedAmount = this.reservedAmount.add(value);
}
public Office getOffice() {
return this.office;
}
public GLAccount getLiabilityAccount() {
return this.liabilityAccount;
}
public String getCurrencyCode() {
return this.currencyCode;
}
public GLAccount getExpenseAccount() {
return this.expenseAccount;
}
// TODO Note that this domain class does equals() & hashCode() on getId() // TODO Note that this domain class does equals() & hashCode() on getId()
// for @JoinColumn attributes, which not all other classes do... // for @JoinColumn attributes, which not all other classes do...
@@ -30,9 +30,17 @@ import javax.persistence.JoinColumn;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OneToOne; import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
@Entity @Entity
@Table(name = "m_provisioning_history") @Table(name = "m_provisioning_history")
public class ProvisioningEntry extends AbstractPersistableCustom { public class ProvisioningEntry extends AbstractPersistableCustom {
@@ -57,19 +65,6 @@ public class ProvisioningEntry extends AbstractPersistableCustom {
@Column(name = "lastmodified_date") @Column(name = "lastmodified_date")
private LocalDate lastModifiedDate; private LocalDate lastModifiedDate;
protected ProvisioningEntry() {
}
public ProvisioningEntry(AppUser createdBy, LocalDate createdDate, AppUser lastModifiedBy, LocalDate lastModifiedDate,
Set<LoanProductProvisioningEntry> provisioningEntries) {
this.provisioningEntries = provisioningEntries;
this.createdBy = createdBy;
this.createdDate = createdDate;
this.lastModifiedBy = lastModifiedBy;
this.lastModifiedDate = lastModifiedDate;
}
public void setProvisioningEntries(Collection<LoanProductProvisioningEntry> provisioningEntries) { public void setProvisioningEntries(Collection<LoanProductProvisioningEntry> provisioningEntries) {
if (this.provisioningEntries == null) { if (this.provisioningEntries == null) {
this.provisioningEntries = new HashSet<>(); this.provisioningEntries = new HashSet<>();
@@ -81,12 +76,4 @@ public class ProvisioningEntry extends AbstractPersistableCustom {
return this.provisioningEntries; return this.provisioningEntries;
} }
public void setJournalEntryCreated(Boolean bool) {
this.isJournalEntryCreated = bool;
}
public LocalDate getCreatedDate() {
return this.createdDate;
}
} }
@@ -95,8 +95,10 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
Long criteriaId = rs.getLong("criteriaid"); Long criteriaId = rs.getLong("criteriaid");
Long historyId = null; Long historyId = null;
return new LoanProductProvisioningEntryData(historyId, officeId, currentcyCode, productId, categoryId, overdueDays, percentage, return new LoanProductProvisioningEntryData().setHistoryId(historyId).setOfficeId(officeId).setCurrencyCode(currentcyCode)
outstandingBalance, liabilityAccountCode, expenseAccountCode, criteriaId); .setProductId(productId).setCategoryId(categoryId).setOverdueInDays(overdueDays).setPercentage(percentage)
.setBalance(outstandingBalance).setLiablityAccount(liabilityAccountCode).setExpenseAccount(expenseAccountCode)
.setCriteriaId(criteriaId);
} }
public String schema() { public String schema() {
@@ -131,8 +133,9 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
String modifieUser = rs.getString("modifieduser"); String modifieUser = rs.getString("modifieduser");
BigDecimal totalReservedAmount = null; BigDecimal totalReservedAmount = null;
LocalDate createdLocalDate = createdDate != null ? createdDate.toLocalDate() : null; LocalDate createdLocalDate = createdDate != null ? createdDate.toLocalDate() : null;
return new ProvisioningEntryData(id, journalEntry, createdById, createdUser, createdLocalDate, modifiedById, modifieUser, return new ProvisioningEntryData().setId(id).setJournalEntry(journalEntry).setCreatedById(createdById)
totalReservedAmount); .setCreatedUser(createdUser).setCreatedDate(createdLocalDate).setModifiedById(modifiedById).setModifiedUser(modifieUser)
.setReservedAmount(totalReservedAmount);
} }
public String getSchema() { public String getSchema() {
@@ -173,9 +176,13 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
Long criteriaId = rs.getLong("criteriaid"); Long criteriaId = rs.getLong("criteriaid");
String liabilityAccountName = rs.getString("liabilityname"); String liabilityAccountName = rs.getString("liabilityname");
String expenseAccountName = rs.getString("expensename"); String expenseAccountName = rs.getString("expensename");
return new LoanProductProvisioningEntryData(historyId, officeId, officeName, currentcyCode, productId, productName, categoryId, return new LoanProductProvisioningEntryData().setHistoryId(historyId).setOfficeId(officeId).setOfficeName(officeName)
categoryName, overdueDays, amountreserved, liabilityAccountCode, liabilityAccountglCode, liabilityAccountName, .setCurrencyCode(currentcyCode).setProductId(productId).setProductName(productName).setCategoryId(categoryId)
expenseAccountCode, expenseAccountglCode, expenseAccountName, criteriaId); .setCategoryName(categoryName).setOverdueInDays(overdueDays).setAmountreserved(amountreserved)
.setLiablityAccount(liabilityAccountCode).setLiabilityAccountCode(liabilityAccountglCode)
.setLiabilityAccountName(liabilityAccountName).setExpenseAccount(expenseAccountCode)
.setExpenseAccountCode(expenseAccountglCode).setExpenseAccountName(expenseAccountName).setCriteriaId(criteriaId);
} }
public String getSchema() { public String getSchema() {
@@ -205,8 +212,9 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
String modifieUser = rs.getString("modifieduser"); String modifieUser = rs.getString("modifieduser");
BigDecimal totalReservedAmount = rs.getBigDecimal("totalreserved"); BigDecimal totalReservedAmount = rs.getBigDecimal("totalreserved");
LocalDate createdLocalDate = createdDate != null ? createdDate.toLocalDate() : null; LocalDate createdLocalDate = createdDate != null ? createdDate.toLocalDate() : null;
return new ProvisioningEntryData(id, journalEntry, createdById, createdUser, createdLocalDate, modifiedById, modifieUser, return new ProvisioningEntryData().setId(id).setJournalEntry(journalEntry).setCreatedById(createdById)
totalReservedAmount); .setCreatedUser(createdUser).setCreatedDate(createdLocalDate).setModifiedById(modifiedById).setModifiedUser(modifieUser)
.setReservedAmount(totalReservedAmount);
} }
public String getSchema() { public String getSchema() {
@@ -260,7 +268,7 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
ProvisioningEntryDataMapper mapper1 = new ProvisioningEntryDataMapper(); ProvisioningEntryDataMapper mapper1 = new ProvisioningEntryDataMapper();
final String sql1 = "select " + mapper1.getSchema() + " where entry.id = ?"; final String sql1 = "select " + mapper1.getSchema() + " where entry.id = ?";
data = this.jdbcTemplate.queryForObject(sql1, mapper1, entryId); // NOSONAR data = this.jdbcTemplate.queryForObject(sql1, mapper1, entryId); // NOSONAR
data.setEntries(entries); data.setProvisioningEntries(entries);
} }
return data; return data;
} }
@@ -293,8 +301,9 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE
String modifiedName = null; String modifiedName = null;
BigDecimal totalReservedAmount = null; BigDecimal totalReservedAmount = null;
LocalDate createdLocalDate = createdDate != null ? createdDate.toLocalDate() : null; LocalDate createdLocalDate = createdDate != null ? createdDate.toLocalDate() : null;
return new ProvisioningEntryData(id, Boolean.TRUE, createdBy, createdName, createdLocalDate, modifiedBy, modifiedName, return new ProvisioningEntryData().setId(id).setJournalEntry(Boolean.TRUE).setCreatedById(createdBy).setCreatedUser(createdName)
totalReservedAmount); .setCreatedDate(createdLocalDate).setModifiedById(modifiedBy).setModifiedUser(modifiedName)
.setReservedAmount(totalReservedAmount);
} }
public String schema() { public String schema() {
@@ -95,9 +95,9 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements
existingEntryData.getId(), PortfolioProductType.PROVISIONING.getValue()); existingEntryData.getId(), PortfolioProductType.PROVISIONING.getValue());
} }
if (requestedEntry.getLoanProductProvisioningEntries() == null || requestedEntry.getLoanProductProvisioningEntries().size() == 0) { if (requestedEntry.getLoanProductProvisioningEntries() == null || requestedEntry.getLoanProductProvisioningEntries().size() == 0) {
requestedEntry.setJournalEntryCreated(Boolean.FALSE); requestedEntry.setIsJournalEntryCreated(Boolean.FALSE);
} else { } else {
requestedEntry.setJournalEntryCreated(Boolean.TRUE); requestedEntry.setIsJournalEntryCreated(Boolean.TRUE);
} }
this.provisioningEntryRepository.saveAndFlush(requestedEntry); this.provisioningEntryRepository.saveAndFlush(requestedEntry);
@@ -150,7 +150,7 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements
throw new ProvisioningEntryAlreadyCreatedException(existingEntry.getId(), existingEntry.getCreatedDate()); throw new ProvisioningEntryAlreadyCreatedException(existingEntry.getId(), existingEntry.getCreatedDate());
} }
AppUser currentUser = this.platformSecurityContext.authenticatedUser(); AppUser currentUser = this.platformSecurityContext.authenticatedUser();
ProvisioningEntry requestedEntry = new ProvisioningEntry(currentUser, date, null, null, null); ProvisioningEntry requestedEntry = new ProvisioningEntry().setCreatedBy(currentUser).setCreatedDate(date);
Collection<LoanProductProvisioningEntry> entries = generateLoanProvisioningEntry(requestedEntry, date); Collection<LoanProductProvisioningEntry> entries = generateLoanProvisioningEntry(requestedEntry, date);
requestedEntry.setProvisioningEntries(entries); requestedEntry.setProvisioningEntries(entries);
if (addJournalEntries) { if (addJournalEntries) {
@@ -189,15 +189,16 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements
Money money = Money.of(currency, data.getBalance()); Money money = Money.of(currency, data.getBalance());
Money amountToReserve = money.percentageOf(data.getPercentage(), MoneyHelper.getRoundingMode()); Money amountToReserve = money.percentageOf(data.getPercentage(), MoneyHelper.getRoundingMode());
Long criteraId = data.getCriteriaId(); Long criteraId = data.getCriteriaId();
LoanProductProvisioningEntry entry = new LoanProductProvisioningEntry(loanProduct, office, data.getCurrencyCode(), LoanProductProvisioningEntry entry = new LoanProductProvisioningEntry().setLoanProduct(loanProduct).setOffice(office)
provisioningCategory, data.getOverdueInDays(), amountToReserve.getAmount(), liabilityAccount, expenseAccount, .setCurrencyCode(data.getCurrencyCode()).setProvisioningCategory(provisioningCategory)
criteraId); .setOverdueInDays(data.getOverdueInDays()).setReservedAmount(amountToReserve.getAmount())
entry.setProvisioningEntry(parent); .setLiabilityAccount(liabilityAccount).setExpenseAccount(expenseAccount).setCriteriaId(criteraId);
entry.setEntry(parent);
if (!provisioningEntries.containsKey(entry.partialHashCode())) { if (!provisioningEntries.containsKey(entry.partialHashCode())) {
provisioningEntries.put(entry.partialHashCode(), entry); provisioningEntries.put(entry.partialHashCode(), entry);
} else { } else {
LoanProductProvisioningEntry entry1 = provisioningEntries.get(entry.partialHashCode()); LoanProductProvisioningEntry entry1 = provisioningEntries.get(entry.partialHashCode());
entry1.addReservedAmount(entry.getReservedAmount()); entry1.setReservedAmount(entry1.getReservedAmount().add(entry.getReservedAmount()));
} }
} }
return provisioningEntries.values(); return provisioningEntries.values();