public TellerBalanceSheet getBalance()

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;
  }