saving, currun, fd and rd account working and tested
This commit is contained in:
+35
-5
@@ -39,6 +39,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom;
|
||||
import org.apache.fineract.organisation.office.domain.Office;
|
||||
import org.apache.fineract.organisation.staff.domain.Staff;
|
||||
import org.apache.fineract.portfolio.client.domain.Client;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
|
||||
@Entity
|
||||
@Table(name = "m_current_account", uniqueConstraints = {
|
||||
@@ -102,6 +103,30 @@ public class CurrentAccount extends AbstractAuditableCustom {
|
||||
@Column(name = "closedon_date")
|
||||
private LocalDate closedOnDate;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "submittedon_userid")
|
||||
private AppUser submittedOnByUser;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "approvedon_userid")
|
||||
private AppUser approvedOnByUser;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "activatedon_userid")
|
||||
private AppUser activatedOnByUser;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "rejectedon_userid")
|
||||
private AppUser rejectedOnByUser;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "withdrawnon_userid")
|
||||
private AppUser withdrawnOnByUser;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "closedon_userid")
|
||||
private AppUser closedOnByUser;
|
||||
|
||||
// Currency (copied from product at account creation)
|
||||
@Column(name = "currency_code", nullable = false, length = 3)
|
||||
private String currencyCode;
|
||||
@@ -376,29 +401,34 @@ public class CurrentAccount extends AbstractAuditableCustom {
|
||||
|
||||
public void updateAccountNo(String accountNo) { this.accountNo = accountNo; }
|
||||
|
||||
public void approve(LocalDate approvedOnDate) {
|
||||
public void approve(LocalDate approvedOnDate, AppUser approvedOnByUser) {
|
||||
this.statusEnum = 200;
|
||||
this.approvedOnDate = approvedOnDate;
|
||||
this.approvedOnByUser = approvedOnByUser;
|
||||
}
|
||||
|
||||
public void activate(LocalDate activatedOnDate) {
|
||||
public void activate(LocalDate activatedOnDate, AppUser activatedOnByUser) {
|
||||
this.statusEnum = 300;
|
||||
this.activatedOnDate = activatedOnDate;
|
||||
this.activatedOnByUser = activatedOnByUser;
|
||||
}
|
||||
|
||||
public void reject(LocalDate rejectedOnDate) {
|
||||
public void reject(LocalDate rejectedOnDate, AppUser rejectedOnByUser) {
|
||||
this.statusEnum = 500;
|
||||
this.rejectedOnDate = rejectedOnDate;
|
||||
this.rejectedOnByUser = rejectedOnByUser;
|
||||
}
|
||||
|
||||
public void withdraw(LocalDate withdrawnOnDate) {
|
||||
public void withdraw(LocalDate withdrawnOnDate, AppUser withdrawnOnByUser) {
|
||||
this.statusEnum = 400;
|
||||
this.withdrawnOnDate = withdrawnOnDate;
|
||||
this.withdrawnOnByUser = withdrawnOnByUser;
|
||||
}
|
||||
|
||||
public void close(LocalDate closedOnDate) {
|
||||
public void close(LocalDate closedOnDate, AppUser closedOnByUser) {
|
||||
this.statusEnum = 600;
|
||||
this.closedOnDate = closedOnDate;
|
||||
this.closedOnByUser = closedOnByUser;
|
||||
}
|
||||
|
||||
public void setMinRequiredOpeningBalance(java.math.BigDecimal val) { this.minRequiredOpeningBalance = val; }
|
||||
|
||||
+31
-10
@@ -37,6 +37,31 @@ public class CurrentAccountNumberGenerator {
|
||||
|
||||
private final JdbcTemplate jdbcTemplate;
|
||||
|
||||
private String getNextSequence() {
|
||||
final java.util.List<String> accountNos = this.jdbcTemplate.query(
|
||||
"SELECT account_no FROM m_current_account WHERE account_no IS NOT NULL",
|
||||
(rs, rowNum) -> rs.getString(1));
|
||||
|
||||
long maxVal = 0;
|
||||
for (String accNo : accountNos) {
|
||||
if (accNo != null && accNo.length() >= 5) {
|
||||
String suffix = accNo.substring(accNo.length() - 5);
|
||||
try {
|
||||
long val = Long.parseLong(suffix);
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
}
|
||||
} catch (NumberFormatException ignored) {}
|
||||
}
|
||||
}
|
||||
|
||||
String nextSeq = StringUtils.leftPad(String.valueOf(maxVal + 1), 5, '0');
|
||||
if (nextSeq.length() > 5) {
|
||||
nextSeq = nextSeq.substring(nextSeq.length() - 5);
|
||||
}
|
||||
return nextSeq;
|
||||
}
|
||||
|
||||
public String generate(CurrentAccount account) {
|
||||
Long productId = account.getProductId();
|
||||
|
||||
@@ -59,11 +84,10 @@ public class CurrentAccountNumberGenerator {
|
||||
String officeId = StringUtils.leftPad(account.getOffice().getId().toString(), 2, '0');
|
||||
if (officeId.length() > 2) officeId = officeId.substring(officeId.length() - 2);
|
||||
|
||||
// Account ID — 5 digits
|
||||
String accountId = StringUtils.leftPad(account.getId().toString(), 5, '0');
|
||||
if (accountId.length() > 5) accountId = accountId.substring(accountId.length() - 5);
|
||||
// Next sequence from existing account numbers
|
||||
String nextSeq = getNextSequence();
|
||||
|
||||
return CBS_PREFIX + glCode + officeId + accountId;
|
||||
return CBS_PREFIX + glCode + officeId + nextSeq;
|
||||
}
|
||||
|
||||
public String preview(Long productId, Long officeId) {
|
||||
@@ -80,13 +104,10 @@ public class CurrentAccountNumberGenerator {
|
||||
String officeStr = StringUtils.leftPad(officeId != null ? officeId.toString() : "0", 2, '0');
|
||||
if (officeStr.length() > 2) officeStr = officeStr.substring(officeStr.length() - 2);
|
||||
|
||||
// Next account ID estimate from m_current_account
|
||||
Long maxId = jdbcTemplate.query(
|
||||
"SELECT MAX(id) FROM m_current_account",
|
||||
rs -> rs.next() ? rs.getLong(1) : 0L);
|
||||
String nextSeq = StringUtils.leftPad(String.valueOf((maxId != null ? maxId : 0L) + 1), 5, '0');
|
||||
if (nextSeq.length() > 5) nextSeq = nextSeq.substring(nextSeq.length() - 5);
|
||||
// Next sequence from existing account numbers
|
||||
String nextSeq = getNextSequence();
|
||||
|
||||
return CBS_PREFIX + glCode + officeStr + nextSeq;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user