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