in service/src/main/java/org/apache/fineract/cn/teller/service/internal/service/TellerManagementService.java [81:151]
public TellerBalanceSheet getBalance(final String tellerCode) {
final TellerBalanceSheet tellerBalanceSheet = new TellerBalanceSheet();
final Optional<TellerEntity> optionalTellerEntity = this.tellerRepository.findByIdentifier(tellerCode);
optionalTellerEntity.ifPresent(tellerEntity -> {
if (tellerEntity.getLastOpenedOn() != null) {
final String accountIdentifier = tellerEntity.getTellerAccountIdentifier();
final LocalDate startDate = tellerEntity.getLastOpenedOn().toLocalDate();
tellerBalanceSheet.setDay(startDate.format(DateTimeFormatter.BASIC_ISO_DATE));
final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
final LocalDate endDate = now.toLocalDate();
final String dateRange =
DateConverter.toIsoString(startDate) + ".." + DateConverter.toIsoString(endDate);
final List<TellerEntry> tellerEntries = this.fetchTellerEntries(accountIdentifier, dateRange, 0);
tellerBalanceSheet.setCashEntries(tellerEntries);
tellerBalanceSheet.setCashReceivedTotal(
tellerBalanceSheet.getCashEntries()
.stream()
.filter(tellerEntry -> tellerEntry.getType().equals(TellerEntry.Type.DEBIT.name()))
.map(TellerEntry::getAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add)
);
tellerBalanceSheet.setCashDisbursedTotal(
tellerEntries
.stream()
.filter(tellerEntry -> tellerEntry.getType().equals(TellerEntry.Type.CREDIT.name()))
.map(TellerEntry::getAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add)
);
tellerBalanceSheet.setCashOnHand(tellerBalanceSheet.getCashReceivedTotal().subtract(tellerBalanceSheet.getCashDisbursedTotal()));
final List<TellerTransactionEntity> chequeTransactions =
this.tellerTransactionRepository.findByTellerAndTransactionTypeAndTransactionDateBetween(tellerEntity,
ServiceConstants.TX_CHEQUE, tellerEntity.getLastOpenedOn(), now);
tellerBalanceSheet.setChequeEntries(
chequeTransactions
.stream()
.filter(tellerTransactionEntity -> tellerTransactionEntity.getState().equals(TellerTransaction.State.CONFIRMED.name()))
.map(tellerTransactionEntity -> {
final TellerEntry tellerEntry = new TellerEntry();
tellerEntry.setTransactionDate(DateConverter.toIsoString(tellerTransactionEntity.getTransactionDate()));
tellerEntry.setType(TellerEntry.Type.CHEQUE.name());
tellerEntry.setAmount(tellerTransactionEntity.getAmount());
tellerEntry.setMessage(tellerTransactionEntity.getTransactionType());
return tellerEntry;
})
.collect(Collectors.toList())
);
tellerBalanceSheet.setChequesReceivedTotal(
tellerBalanceSheet.getChequeEntries()
.stream()
.map(TellerEntry::getAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add)
);
} else {
tellerBalanceSheet.setCashReceivedTotal(BigDecimal.ZERO);
tellerBalanceSheet.setCashDisbursedTotal(BigDecimal.ZERO);
tellerBalanceSheet.setCashOnHand(BigDecimal.ZERO);
tellerBalanceSheet.setChequesReceivedTotal(BigDecimal.ZERO);
}
});
return tellerBalanceSheet;
}