This is an automated email from the git hooks/post-receive script. New commit to branch feature/1241-account-report in repository lima. See http://git.chorem.org/lima.git commit 6f487bfcfab4a1c2775746c314e14b9387992465 Author: dcosse <cosse@codelutin.com> Date: Wed Sep 9 15:21:41 2015 +0200 refs #1241 refactoring de code --- .../business/api/report/BalanceReportService.java | 15 +- .../ejb/report/BalanceReportServiceImpl.java | 190 +++++++++++++++------ .../lima/report/service/DocumentService.java | 21 ++- 3 files changed, 171 insertions(+), 55 deletions(-) diff --git a/lima-business-api/src/main/java/org/chorem/lima/business/api/report/BalanceReportService.java b/lima-business-api/src/main/java/org/chorem/lima/business/api/report/BalanceReportService.java index b284fb4..1a23f70 100644 --- a/lima-business-api/src/main/java/org/chorem/lima/business/api/report/BalanceReportService.java +++ b/lima-business-api/src/main/java/org/chorem/lima/business/api/report/BalanceReportService.java @@ -45,5 +45,18 @@ public interface BalanceReportService { * @param subAccountsJasperReport Jasper sub account report for balance sub account representation * @return model for balance report */ - DocumentReport getBalanceDocumentReport(Date from, Date to, String selectedAccounts, String isBalanceGeneral, DecimalFormat bigDecimalFormat, JasperReport mainAccountsJasperReport, JasperReport subAccountsJasperReport); + DocumentReport getGeneralBalanceDocumentReport(Date from, Date to, String selectedAccounts, DecimalFormat bigDecimalFormat, JasperReport mainAccountsJasperReport, JasperReport subAccountsJasperReport); + + /** + * + * @param from + * @param to + * @param selectedAccounts + * @param bigDecimalFormat + * @param mainAccountsJasperReport + * @param subAccountsJasperReport + * @return + */ + DocumentReport getGlobalBalanceDocumentReport(Date from, Date to, String selectedAccounts, DecimalFormat bigDecimalFormat, JasperReport mainAccountsJasperReport, JasperReport subAccountsJasperReport); + } diff --git a/lima-business/src/main/java/org/chorem/lima/business/ejb/report/BalanceReportServiceImpl.java b/lima-business/src/main/java/org/chorem/lima/business/ejb/report/BalanceReportServiceImpl.java index a9da2e0..dbf7208 100644 --- a/lima-business/src/main/java/org/chorem/lima/business/ejb/report/BalanceReportServiceImpl.java +++ b/lima-business/src/main/java/org/chorem/lima/business/ejb/report/BalanceReportServiceImpl.java @@ -66,6 +66,8 @@ import static org.nuiton.i18n.I18n.t; @TransactionAttribute public class BalanceReportServiceImpl extends AbstractLimaService implements BalanceReportService { + public static final String GLOBAL_401_ACCOUNT_NUMBER = "4010000"; + public static final String GLOBAL_411_ACCOUNT_NUMBER = "4110000"; @EJB protected FinancialPeriodService financialPeriodService; @@ -92,46 +94,64 @@ public class BalanceReportServiceImpl extends AbstractLimaService implements Bal }; @Override - public DocumentReport getBalanceDocumentReport(Date from, Date to, String selectedAccounts, String isBalanceGeneralSt, DecimalFormat bigDecimalFormat, JasperReport mainAccountsJasperReport, JasperReport subAccountsJasperReport) { + public DocumentReport getGeneralBalanceDocumentReport(Date from, Date to, String selectedAccounts, DecimalFormat bigDecimalFormat, JasperReport mainAccountsJasperReport, JasperReport subAccountsJasperReport) { String reportName = t("lima-business.document.balanceReport.title"); - DocumentReport documentReport = CommonsDocumentReport.getDocumentReport(reportName, from, to, mainAccountsJasperReport, bigDecimalFormat, identityService); + DocumentReport documentReport = getBalanceDocumentReport(from, to, bigDecimalFormat, mainAccountsJasperReport, reportName); - documentReport.setColumnAccountTitle(t("lima-business.document.columnAccountTitle")); - documentReport.setColumnBalanceForPeriodTitle(t("lima-business.document.columnBalanceForPeriodTitle")); - documentReport.setColumnCreditTitle(t("lima-business.document.columnCreditTitle")); - documentReport.setColumnDateTitle(t("lima-business.document.columnDateTitle")); - documentReport.setColumnDebitTitle(t("lima-business.document.columnDebitTitle")); - documentReport.setColumnDescriptionTitle(t("lima-business.document.columnDescriptionTitle")); - documentReport.setColumnTotalForPeriodTitle(t("lima-business.document.columnTotalForPeriodTitle")); - documentReport.setColumnVoucherTitle(t("lima-business.document.columnVoucherTitle")); + BalanceGlobalResult balanceGlobalResult = new BalanceGlobalResult().invoke(); - documentReport.setLastPageColumnDescription(t("lima-business.document.balance.lastPageColumnDescription")); + BalanceTrial balanceTrial = new BalanceTrialImpl(); + balanceTrial.setReportsDatas(new ArrayList<ReportsDatas>()); - boolean isBalanceGeneral = StringUtils.isBlank(isBalanceGeneralSt) || Boolean.valueOf(isBalanceGeneralSt); + List<Account> accounts = getAccounts(selectedAccounts); - BigDecimal globalDebit = BigDecimal.ZERO; - BigDecimal globalCredit = BigDecimal.ZERO; - BigDecimal globalDebitBalance = BigDecimal.ZERO; - BigDecimal globalCreditBalance = BigDecimal.ZERO; + Collection<BalanceAccount> returnedAccounts = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(accounts)) { + Collections.sort(accounts, new AccountComparator()); - BalanceTrial balanceTrial = new BalanceTrialImpl(); - balanceTrial.setReportsDatas(new ArrayList<ReportsDatas>()); + setDocumentReportHeaderSelectedAccounts(documentReport, accounts); - AccountTopiaDao accountTopiaDao = getDaoHelper().getAccountDao(); - //for each account create a balance sheet with a ReportsDatas + HashMap<String, BalanceAccountImpl> accountsByClasses = new HashMap<>(); - List<Account> accounts; + //for each account create a balance sheet with a ReportsDatas + for (Account account : accounts) { + String accountClass = String.valueOf(account.getAccountNumber().charAt(0)); - //Remove Spaces - selectedAccounts = StringUtils.deleteWhitespace(selectedAccounts); + // all results for a account classes + BalanceAccountImpl accountSubAccounts = getBalanceAccountForAccountClass(bigDecimalFormat, subAccountsJasperReport, returnedAccounts, accountsByClasses, accountClass); - // find all if none specified - if (StringUtils.isBlank(selectedAccounts)) { - accounts = accountTopiaDao.findAll(); - } else { - accounts = accountService.stringToListAccounts(selectedAccounts); + // compute balance for the account classes + BalanceAccount subClassAccount = computeSubAccountBalance(accountClass, account, from, to, bigDecimalFormat); + + // only add it if there are results + if (subClassAccount != null) { + accountSubAccounts.addSubAccount(subClassAccount); + + balanceGlobalResult.addSubClassAccounts(subClassAccount); + } + } } + Iterables.removeIf(returnedAccounts, HAS_NO_ENTRY); + documentReport.addAllMainAccounts(returnedAccounts); + + setDocumentReportGlobalBalance(documentReport, balanceGlobalResult); + + return documentReport; + } + + @Override + public DocumentReport getGlobalBalanceDocumentReport(Date from, Date to, String selectedAccounts, DecimalFormat bigDecimalFormat, JasperReport mainAccountsJasperReport, JasperReport subAccountsJasperReport) { + String reportName = t("lima-business.document.balanceReport.title"); + DocumentReport documentReport = getBalanceDocumentReport(from, to, bigDecimalFormat, mainAccountsJasperReport, reportName); + + BalanceGlobalResult balanceGlobalResult = new BalanceGlobalResult().invoke(); + + BalanceTrial balanceTrial = new BalanceTrialImpl(); + balanceTrial.setReportsDatas(new ArrayList<ReportsDatas>()); + + List<Account> accounts = getAccounts(selectedAccounts); + Collection<BalanceAccount> returnedAccounts = new ArrayList<>(); if (CollectionUtils.isNotEmpty(accounts)) { Collections.sort(accounts, new AccountComparator()); @@ -143,6 +163,7 @@ public class BalanceReportServiceImpl extends AbstractLimaService implements Bal BalanceAccount sold401 = null; BalanceAccount sold411 = null; + //for each account create a balance sheet with a ReportsDatas for (Account account : accounts) { String accountClass = String.valueOf(account.getAccountNumber().charAt(0)); @@ -157,23 +178,17 @@ public class BalanceReportServiceImpl extends AbstractLimaService implements Bal // we group Account 401 and 411 with there sub accounts String accountNb = account.getAccountNumber(); - if (isBalanceGeneral && ((accountNb.startsWith(GROUP_401)) || (accountNb.startsWith(GROUP_411)))){ - BalanceAccount balanceAccount = null; + BalanceAccount balanceAccount = null; + if ((accountNb.startsWith(GROUP_401)) || (accountNb.startsWith(GROUP_411))){ if ((accountNb.startsWith(GROUP_401))){ if (sold401 == null) { - sold401 = new BalanceAccountImpl(); - sold401.setLabel(t("lima-business.document.balance.globalSupplier")); - sold401.setFormatter(bigDecimalFormat); - sold401.setAccountNumber("4010000"); + sold401 = getGlobalBalance4x(bigDecimalFormat, t("lima-business.document.balance.globalSupplier"), GLOBAL_401_ACCOUNT_NUMBER); accountSubAccounts.addSubAccount(sold401); } balanceAccount = sold401; } else if((accountNb.startsWith(GROUP_411))) { if (sold411 == null) { - sold411 = new BalanceAccountImpl(); - sold411.setLabel(t("lima-business.document.balance.globalClient")); - sold411.setFormatter(bigDecimalFormat); - sold411.setAccountNumber("4110000"); + sold411 = getGlobalBalance4x(bigDecimalFormat, t("lima-business.document.balance.globalClient"), GLOBAL_411_ACCOUNT_NUMBER); accountSubAccounts.addSubAccount(sold411); } balanceAccount = sold411; @@ -187,19 +202,12 @@ public class BalanceReportServiceImpl extends AbstractLimaService implements Bal addInWith(balanceAccount, subClassAccount); // add amounts to global result - globalDebit = globalDebit.add(subClassAccount.getAmountDebit()); - globalCredit = globalCredit.add(subClassAccount.getAmountCredit()); - globalDebitBalance = globalDebitBalance.add(subClassAccount.getDebitBalance()); - globalCreditBalance = globalCreditBalance.add(subClassAccount.getCreditBalance()); + balanceGlobalResult.addSubClassAccounts(subClassAccount); } - } else { accountSubAccounts.addSubAccount(subClassAccount); - globalDebit = globalDebit.add(subClassAccount.getAmountDebit()); - globalCredit = globalCredit.add(subClassAccount.getAmountCredit()); - globalDebitBalance = globalDebitBalance.add(subClassAccount.getDebitBalance()); - globalCreditBalance = globalCreditBalance.add(subClassAccount.getCreditBalance()); + balanceGlobalResult.addSubClassAccounts(subClassAccount); } } } @@ -208,11 +216,53 @@ public class BalanceReportServiceImpl extends AbstractLimaService implements Bal Iterables.removeIf(returnedAccounts, HAS_NO_ENTRY); documentReport.addAllMainAccounts(returnedAccounts); - documentReport.setTotalDebit(globalDebit); - documentReport.setTotalCredit(globalCredit); - documentReport.setDebitBalance(globalDebitBalance); - documentReport.setCreditBalance(globalCreditBalance); + setDocumentReportGlobalBalance(documentReport, balanceGlobalResult); + + return documentReport; + } + + protected BalanceAccount getGlobalBalance4x(DecimalFormat bigDecimalFormat, String label, String accountNumber) { + BalanceAccount sold401 = new BalanceAccountImpl(); + sold401.setLabel(label); + sold401.setFormatter(bigDecimalFormat); + sold401.setAccountNumber(accountNumber); + return sold401; + } + + protected List<Account> getAccounts(String selectedAccounts) { + AccountTopiaDao accountTopiaDao = getDaoHelper().getAccountDao(); + List<Account> accounts; + + selectedAccounts = StringUtils.deleteWhitespace(selectedAccounts); + // find all if none specified + if (StringUtils.isBlank(selectedAccounts)) { + accounts = accountTopiaDao.findAll(); + } else { + accounts = accountService.stringToListAccounts(selectedAccounts); + } + return accounts; + } + + protected void setDocumentReportGlobalBalance(DocumentReport documentReport, BalanceGlobalResult globalBalanceResult) { + documentReport.setTotalDebit(globalBalanceResult.globalDebit); + documentReport.setTotalCredit(globalBalanceResult.globalCredit); + documentReport.setDebitBalance(globalBalanceResult.globalDebitBalance); + documentReport.setCreditBalance(globalBalanceResult.globalCreditBalance); + } + + protected DocumentReport getBalanceDocumentReport(Date from, Date to, DecimalFormat bigDecimalFormat, JasperReport mainAccountsJasperReport, String reportName) { + DocumentReport documentReport = CommonsDocumentReport.getDocumentReport(reportName, from, to, mainAccountsJasperReport, bigDecimalFormat, identityService); + documentReport.setColumnAccountTitle(t("lima-business.document.columnAccountTitle")); + documentReport.setColumnBalanceForPeriodTitle(t("lima-business.document.columnBalanceForPeriodTitle")); + documentReport.setColumnCreditTitle(t("lima-business.document.columnCreditTitle")); + documentReport.setColumnDateTitle(t("lima-business.document.columnDateTitle")); + documentReport.setColumnDebitTitle(t("lima-business.document.columnDebitTitle")); + documentReport.setColumnDescriptionTitle(t("lima-business.document.columnDescriptionTitle")); + documentReport.setColumnTotalForPeriodTitle(t("lima-business.document.columnTotalForPeriodTitle")); + documentReport.setColumnVoucherTitle(t("lima-business.document.columnVoucherTitle")); + + documentReport.setLastPageColumnDescription(t("lima-business.document.balance.lastPageColumnDescription")); return documentReport; } @@ -309,4 +359,42 @@ public class BalanceReportServiceImpl extends AbstractLimaService implements Bal return balanceAccount; } + private class BalanceGlobalResult { + private BigDecimal globalDebit; + private BigDecimal globalCredit; + private BigDecimal globalDebitBalance; + private BigDecimal globalCreditBalance; + + public BigDecimal getGlobalDebit() { + return globalDebit; + } + + public BigDecimal getGlobalCredit() { + return globalCredit; + } + + public BigDecimal getGlobalDebitBalance() { + return globalDebitBalance; + } + + public BigDecimal getGlobalCreditBalance() { + return globalCreditBalance; + } + + public BalanceGlobalResult invoke() { + globalDebit = BigDecimal.ZERO; + globalCredit = BigDecimal.ZERO; + globalDebitBalance = BigDecimal.ZERO; + globalCreditBalance = BigDecimal.ZERO; + return this; + } + + public void addSubClassAccounts(BalanceAccount subClassAccount) { + globalDebit = globalDebit.add(subClassAccount.getAmountDebit()); + globalCredit = globalCredit.add(subClassAccount.getAmountCredit()); + globalDebitBalance = globalDebitBalance.add(subClassAccount.getDebitBalance()); + globalCreditBalance = globalCreditBalance.add(subClassAccount.getCreditBalance()); + } + + } } diff --git a/lima-report/src/main/java/org/chorem/lima/report/service/DocumentService.java b/lima-report/src/main/java/org/chorem/lima/report/service/DocumentService.java index 37206ec..ae35415 100644 --- a/lima-report/src/main/java/org/chorem/lima/report/service/DocumentService.java +++ b/lima-report/src/main/java/org/chorem/lima/report/service/DocumentService.java @@ -472,14 +472,29 @@ public class DocumentService { //############## balance ############## - public void createBalanceDocuments(Date beginDate, Date endDate, String isBalanceGeneral, String fromToAccount) { + public void createBalanceDocuments(Date beginDate, Date endDate, String isBalanceGeneralSt, String fromToAccount) { JasperReport balanceMainAccountsReport = jasperReports.getBalanceManAccountsReport(); JasperReport balanceSubAccountsReport = jasperReports.getBalanceSubAccountsReport(); - DocumentReport report = balanceReportService.getBalanceDocumentReport(beginDate, endDate, fromToAccount, isBalanceGeneral, - getDecimalFormat(), balanceMainAccountsReport, balanceSubAccountsReport); + + DocumentReport report = getDocumentReport(beginDate, endDate, fromToAccount, balanceMainAccountsReport, balanceSubAccountsReport, isBalanceGeneralSt); + jasperReports.generatePDFReport(DocumentsEnum.BALANCE, balanceFilePath, Lists.newArrayList(report)); } + protected DocumentReport getDocumentReport(Date beginDate, Date endDate, String fromToAccount, JasperReport balanceMainAccountsReport, JasperReport balanceSubAccountsReport, String isBalanceGeneralSt) { + boolean isBalanceGeneral = StringUtils.isBlank(isBalanceGeneralSt) || Boolean.valueOf(isBalanceGeneralSt); + + DocumentReport report; + if (isBalanceGeneral) { + report = balanceReportService.getGlobalBalanceDocumentReport(beginDate, endDate, fromToAccount, + getDecimalFormat(), balanceMainAccountsReport, balanceSubAccountsReport); + } else { + report = balanceReportService.getGeneralBalanceDocumentReport(beginDate, endDate, fromToAccount, + getDecimalFormat(), balanceMainAccountsReport, balanceSubAccountsReport); + } + return report; + } + //############## EntryBook ############# public void createEntryBooksDocuments(Date beginDate, Date endDate, List<String> entryBookCodes) { JasperReport entryBookEntryBooksReport = jasperReports.getEntryBookEntryBooksReport(); -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.