This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository lima. See https://gitlab.nuiton.org/chorem/lima.git commit d993ad81db79cfef011198eddd5963b9f4355a03 Author: David Cossé <cosse@codelutin.com> Date: Tue Oct 24 11:03:41 2017 +0200 refs #1394 Ne calculer le status transaction locked que si nécéssaire --- .../api/ClosedPeriodicEntryBookService.java | 3 +- .../chorem/lima/business/LimaBusinessConfig.java | 1 + .../ejb/ClosedPeriodicEntryBookServiceImpl.java | 8 ++ .../entity/ClosedPeriodicEntryBookTopiaDao.java | 18 ++++- .../lima/entity/FinancialTransactionTopiaDao.java | 2 +- .../ui/common/FinancialTransactionTableModel.java | 85 ++++++++++++++++++++-- .../FinancialTransactionViewHandler.java | 6 +- 7 files changed, 111 insertions(+), 12 deletions(-) diff --git a/lima-business-api/src/main/java/org/chorem/lima/business/api/ClosedPeriodicEntryBookService.java b/lima-business-api/src/main/java/org/chorem/lima/business/api/ClosedPeriodicEntryBookService.java index 1cb69546..59d6d040 100644 --- a/lima-business-api/src/main/java/org/chorem/lima/business/api/ClosedPeriodicEntryBookService.java +++ b/lima-business-api/src/main/java/org/chorem/lima/business/api/ClosedPeriodicEntryBookService.java @@ -41,5 +41,6 @@ public interface ClosedPeriodicEntryBookService { List<ClosedPeriodicEntryBook> getAllByEntryBookAndDates(EntryBook entryBook, Date beginDate, Date endDate); ClosedPeriodicEntryBook getByEntryBookAndFinancialPeriod(EntryBook entryBook, Date date); - + + List<ClosedPeriodicEntryBook> getForDates(Date from, Date to); } diff --git a/lima-business/src/main/java/org/chorem/lima/business/LimaBusinessConfig.java b/lima-business/src/main/java/org/chorem/lima/business/LimaBusinessConfig.java index db1561cf..c2d72fc6 100644 --- a/lima-business/src/main/java/org/chorem/lima/business/LimaBusinessConfig.java +++ b/lima-business/src/main/java/org/chorem/lima/business/LimaBusinessConfig.java @@ -341,6 +341,7 @@ public class LimaBusinessConfig { APPLICATION_VERSION("application.version", n("application.version"), null, String.class, false, false), DATA_DIR("lima.data.dir", n("lima.config.data.dir.description"), "${user.home}/.lima", File.class, false, false), + BACKUP_DIR("lima.reports.dir",n("lima.config.reports.dir.description"),"${lima.data.dir}/backups", File.class, false, false), RULES_NATIONALTY("lima.rules", n("lima.config.rulesnationality.description"), FranceAccountingRules.class.getName(), String.class, false, false), HOST_EJB_ADDRESS("lima.host.ejb.address", n("lima.host.address.description"), "localhost", String.class, false, false), diff --git a/lima-business/src/main/java/org/chorem/lima/business/ejb/ClosedPeriodicEntryBookServiceImpl.java b/lima-business/src/main/java/org/chorem/lima/business/ejb/ClosedPeriodicEntryBookServiceImpl.java index 352d51e3..d9ac2239 100644 --- a/lima-business/src/main/java/org/chorem/lima/business/ejb/ClosedPeriodicEntryBookServiceImpl.java +++ b/lima-business/src/main/java/org/chorem/lima/business/ejb/ClosedPeriodicEntryBookServiceImpl.java @@ -76,5 +76,13 @@ public class ClosedPeriodicEntryBookServiceImpl extends AbstractLimaService impl return result; } + @Override + public List<ClosedPeriodicEntryBook> getForDates(Date from, Date to) { + + ClosedPeriodicEntryBookTopiaDao accountTopiaDao = getDaoHelper().getClosedPeriodicEntryBookDao(); + List<ClosedPeriodicEntryBook> result = accountTopiaDao.findAllForDate(from, to); + + return result; + } } diff --git a/lima-business/src/main/java/org/chorem/lima/entity/ClosedPeriodicEntryBookTopiaDao.java b/lima-business/src/main/java/org/chorem/lima/entity/ClosedPeriodicEntryBookTopiaDao.java index e5390435..c8e4d717 100644 --- a/lima-business/src/main/java/org/chorem/lima/entity/ClosedPeriodicEntryBookTopiaDao.java +++ b/lima-business/src/main/java/org/chorem/lima/entity/ClosedPeriodicEntryBookTopiaDao.java @@ -93,6 +93,22 @@ public class ClosedPeriodicEntryBookTopiaDao extends AbstractClosedPeriodicEntry return closedPeriodicEntryBook; } + public List<ClosedPeriodicEntryBook> findAllForDate( + Date from, Date date) { + + HqlAndParametersBuilder<ClosedPeriodicEntryBook> builder = newHqlAndParametersBuilder(); + + builder.addLowerOrEquals(PROPERTY_BEGIN_DATE, date); + + builder.addGreaterOrEquals(PROPERTY_END_DATE, date); + + builder.setOrderByArguments(PROPERTY_BEGIN_DATE); + + List<ClosedPeriodicEntryBook> closedPeriodicEntryBooks = findAll(builder.getHql(), builder.getHqlParameters()); + + return closedPeriodicEntryBooks; + } + /** * Retourne toutes les ClosedPeriodicEntryBook par interval de date * sur les periodes sur lequelles elles portent ordonnée par journal. @@ -107,7 +123,7 @@ public class ClosedPeriodicEntryBookTopiaDao extends AbstractClosedPeriodicEntry HqlAndParametersBuilder<ClosedPeriodicEntryBook> builder = newHqlAndParametersBuilder(); builder.addGreaterOrEquals(PROPERTY_BEGIN_DATE, beginDate); builder.addLowerOrEquals(PROPERTY_END_DATE, endDate); - builder.setOrderByArguments(ClosedPeriodicEntryBook.PROPERTY_ENTRY_BOOK + "." + EntryBook.PROPERTY_CODE); + builder.setOrderByArguments(ClosedPeriodicEntryBook.PROPERTY_ENTRY_BOOK + "." + EntryBook.PROPERTY_CODE, ClosedPeriodicEntryBook.PROPERTY_FINANCIAL_PERIOD + "." + FinancialPeriod.PROPERTY_BEGIN_DATE); List<ClosedPeriodicEntryBook> closedPeriodicEntryBooks = findAll(builder.getHql(), builder.getHqlParameters()); return closedPeriodicEntryBooks; diff --git a/lima-business/src/main/java/org/chorem/lima/entity/FinancialTransactionTopiaDao.java b/lima-business/src/main/java/org/chorem/lima/entity/FinancialTransactionTopiaDao.java index a62cf981..d3fd795d 100644 --- a/lima-business/src/main/java/org/chorem/lima/entity/FinancialTransactionTopiaDao.java +++ b/lima-business/src/main/java/org/chorem/lima/entity/FinancialTransactionTopiaDao.java @@ -97,9 +97,9 @@ public class FinancialTransactionTopiaDao extends AbstractFinancialTransactionTo public List<FinancialTransaction> findAllByDates(Date beginDate, Date endDate, EntryBook entryBook) { HqlAndParametersBuilder<FinancialTransaction> builder = newHqlAndParametersBuilder(); + builder.addEquals(FinancialTransaction.PROPERTY_ENTRY_BOOK, entryBook); builder.addGreaterOrEquals(FinancialTransaction.PROPERTY_TRANSACTION_DATE, beginDate); builder.addLowerOrEquals(FinancialTransaction.PROPERTY_TRANSACTION_DATE, endDate); - builder.addEquals(FinancialTransaction.PROPERTY_ENTRY_BOOK, entryBook); builder.setOrderByArguments(FinancialTransaction.PROPERTY_TRANSACTION_DATE, FinancialTransaction.PROPERTY_TOPIA_CREATE_DATE); List<FinancialTransaction> transactions = findAll(builder.getHql(), builder.getHqlParameters()); return transactions; diff --git a/lima-swing/src/main/java/org/chorem/lima/ui/common/FinancialTransactionTableModel.java b/lima-swing/src/main/java/org/chorem/lima/ui/common/FinancialTransactionTableModel.java index 8105232f..6a677fb5 100644 --- a/lima-swing/src/main/java/org/chorem/lima/ui/common/FinancialTransactionTableModel.java +++ b/lima-swing/src/main/java/org/chorem/lima/ui/common/FinancialTransactionTableModel.java @@ -25,6 +25,7 @@ package org.chorem.lima.ui.common; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.lima.business.LimaServiceFactory; @@ -39,7 +40,9 @@ import org.chorem.lima.business.exceptions.LockedFinancialPeriodException; import org.chorem.lima.business.utils.EntryComparator; import org.chorem.lima.entity.ClosedPeriodicEntryBook; import org.chorem.lima.entity.Entry; +import org.chorem.lima.entity.EntryBook; import org.chorem.lima.entity.EntryImpl; +import org.chorem.lima.entity.FinancialPeriod; import org.chorem.lima.entity.FinancialTransaction; import org.chorem.lima.ui.financialtransaction.AccountColumn; import org.chorem.lima.ui.financialtransaction.CreditColumn; @@ -49,7 +52,10 @@ import org.chorem.lima.ui.financialtransaction.DescriptionColumn; import org.chorem.lima.ui.financialtransaction.VoucherColumn; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Collection; +import java.util.Date; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -73,6 +79,12 @@ public class FinancialTransactionTableModel extends TableModelWithGroup<Entry> i protected ClosedPeriodicEntryBookService closedPeriodicEntryBookService; + protected HashMap<FinancialTransaction, ClosedPeriodicEntryBook> closedPeriodicEntryBookForTransaction; + + protected Map<EntryBook, List<ClosedPeriodicEntryBook>> closedPeriodicEntryBookByEntryBook; + + protected Boolean isGlobalyLocked; + public FinancialTransactionTableModel() { setComparator(new EntryComparator()); @@ -96,6 +108,7 @@ public class FinancialTransactionTableModel extends TableModelWithGroup<Entry> i public void setTransactions(List<FinancialTransaction> transactions) { clear(); + List<Entry> orderedEntries = new ArrayList<>(); for (FinancialTransaction transaction : transactions) { //addAll(transaction.getEntry()); // Normal entry order is by create date @@ -103,11 +116,11 @@ public class FinancialTransactionTableModel extends TableModelWithGroup<Entry> i // and make transaction reading difficult. // The following method keep entries ordered by date but group them by voucher to. List<Entry> result = getOrderedTransactionEntries(transaction); - addAll(result); + orderedEntries.addAll(result); } + addAll(orderedEntries); } - //Entries should be ordered from Model and data base. // FIXME ref #1291 protected List<Entry> getOrderedTransactionEntries(FinancialTransaction transaction) { @@ -136,13 +149,61 @@ public class FinancialTransactionTableModel extends TableModelWithGroup<Entry> i } public void addAll(List<Entry> values) { + if (values != null && !values.isEmpty()) { + + setTransactionLocked(values); + int row = this.values.size(); this.values.addAll(values); fireTableRowsInserted(row, row + values.size() - 1); } } + protected void setTransactionLocked(List<Entry> values) { + if (isGlobalyLocked == null) { + + setClosedPeriodicEntryBookByEntryBook(values); + + setClosedPeriodicEntryBookForTransaction(values); + } + } + + protected void setClosedPeriodicEntryBookForTransaction(List<Entry> values) { + closedPeriodicEntryBookForTransaction = new HashMap<>(); + for (Entry value : values) { + FinancialTransaction etr = value.getFinancialTransaction(); + List<ClosedPeriodicEntryBook> cpebs = closedPeriodicEntryBookByEntryBook.get(etr.getEntryBook()); + if (CollectionUtils.isNotEmpty(cpebs)) { + for (ClosedPeriodicEntryBook cpeb : cpebs) { + FinancialPeriod fp = cpeb.getFinancialPeriod(); + if (cpeb.getFinancialPeriod().getBeginDate().compareTo(fp.getBeginDate()) <= 0 && + cpeb.getFinancialPeriod().getEndDate().compareTo(fp.getEndDate()) >= 0) { + closedPeriodicEntryBookForTransaction.put(etr, cpeb); + break; + } + } + } + } + } + + protected void setClosedPeriodicEntryBookByEntryBook(List<Entry> values) { + closedPeriodicEntryBookByEntryBook = new HashMap<>(); + List<Entry> orderedEntries = ordering.sortedCopy(values); + + Entry first = orderedEntries.get(0); + Entry last = orderedEntries.get(orderedEntries.size() - 1); + Date from = first.getFinancialTransaction().getTransactionDate(); + Date to = last.getFinancialTransaction().getTransactionDate(); + Collection<ClosedPeriodicEntryBook> closedPeriodicEntryBooks = closedPeriodicEntryBookService.getForDates(from, to); + + for (ClosedPeriodicEntryBook closedPeriodicEntryBook : closedPeriodicEntryBooks) { + EntryBook entryBook = closedPeriodicEntryBook.getEntryBook(); + List<ClosedPeriodicEntryBook> cpeb = closedPeriodicEntryBookByEntryBook.computeIfAbsent(entryBook, k -> new ArrayList<>()); + cpeb.add(closedPeriodicEntryBook); + } + } + public FinancialTransaction getTransactionAt(int row) { Entry entry = get(row); return entry.getFinancialTransaction(); @@ -152,13 +213,19 @@ public class FinancialTransactionTableModel extends TableModelWithGroup<Entry> i FinancialTransaction transaction = getTransactionAt(row); - Boolean locked = lockedByTransaction.get(transaction); + Boolean locked = isGlobalyLocked == null ? lockedByTransaction.get(transaction) : isGlobalyLocked; if (locked == null) { - ClosedPeriodicEntryBook closedPeriodicEntryBook = - closedPeriodicEntryBookService.getByEntryBookAndFinancialPeriod( - transaction.getEntryBook(), - transaction.getTransactionDate()); + ClosedPeriodicEntryBook closedPeriodicEntryBook = closedPeriodicEntryBookForTransaction.get(transaction); + + if (closedPeriodicEntryBook == null) { + closedPeriodicEntryBook = + closedPeriodicEntryBookService.getByEntryBookAndFinancialPeriod( + transaction.getEntryBook(), + transaction.getTransactionDate()); + closedPeriodicEntryBookForTransaction.put(transaction, closedPeriodicEntryBook); + } + if (log.isDebugEnabled()) { log.debug("transaction " + transaction.getTransactionDate() + " : " + closedPeriodicEntryBook.isLocked()); } @@ -340,4 +407,8 @@ public class FinancialTransactionTableModel extends TableModelWithGroup<Entry> i lockedByTransaction.clear(); } } + + public void setGlobalyLocked(Boolean globalyLocked) { + isGlobalyLocked = globalyLocked; + } } diff --git a/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java b/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java index 1b73eaed..df8649b0 100644 --- a/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java +++ b/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java @@ -371,11 +371,13 @@ public class FinancialTransactionViewHandler implements ServiceListener, TableMo FinancialTransactionTable table = view.getFinancialTransactionTable(); FinancialTransactionTableModel tableModel = view.getFinancialTransactionTableModel(); - table.exit(); - tableModel.setTransactions(transactions); + table.exit(); boolean isLock = isTableLock(financialPeriod, entryBook); + tableModel.setGlobalyLocked(isLock); + + tableModel.setTransactions(transactions); if (table.isEditable() == isLock) { table.setEditable(!isLock); -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.