Author: mallon Date: 2012-07-23 17:16:46 +0200 (Mon, 23 Jul 2012) New Revision: 3548 Url: http://chorem.org/repositories/revision/lima/3548 Log: refs #708 Ajout des boutons 'refresh' et 'equilibrer'. Le traitement li?\195?\169 ?\195?\160 chacun fonctionne, il ne reste que l'affichage du bouton 'equilibrer' ?\195?\160 corriger. Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringEditModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringTableModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringView.jaxx trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringViewHandler.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LettringSelectionModel.java trunk/lima-swing/src/main/resources/i18n/lima-swing_en_GB.properties trunk/lima-swing/src/main/resources/i18n/lima-swing_fr_FR.properties Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringEditModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringEditModel.java 2012-07-20 14:04:22 UTC (rev 3547) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringEditModel.java 2012-07-23 15:16:46 UTC (rev 3548) @@ -43,15 +43,28 @@ public static final String UNLETTRED_PROPERTY = "unLettred"; + public static final String EQUALIZED_PROPERTY = "equalized"; + protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); protected LetteringTableModel model; protected boolean lettred; protected boolean unLettred; + protected boolean equalized; protected BigDecimal debit = BigDecimal.ZERO; protected BigDecimal credit = BigDecimal.ZERO; protected BigDecimal solde = BigDecimal.ZERO; + public boolean isEqualized() { + return equalized; + } + + public void setEqualized(boolean equalized) { + boolean oldEqualized = isEqualized(); + this.equalized = equalized; + firePropertyChange(EQUALIZED_PROPERTY, oldEqualized, this.equalized); + } + public boolean isLettred() { return lettred; } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringTableModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringTableModel.java 2012-07-20 14:04:22 UTC (rev 3547) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringTableModel.java 2012-07-23 15:16:46 UTC (rev 3548) @@ -27,6 +27,7 @@ import org.chorem.lima.entity.Account; import org.chorem.lima.entity.Entry; +import org.chorem.lima.entity.EntryImpl; import javax.swing.table.AbstractTableModel; import java.math.BigDecimal; @@ -67,6 +68,10 @@ return entries; } + public Date getDateEntree(int row) { + return datesEntree.get(row); + } + public Integer getIndexOfEntry(Entry entrySearch){ return entries.indexOf(entrySearch); } @@ -221,8 +226,9 @@ } /**add one entry*/ - public void addEntry(Entry entry) { + public void addEntry(Entry entry, Date dateEntree) { entries.add(entry); + datesEntree.add(dateEntree); int row = entries.indexOf(entry); fireTableRowsInserted(row, row); } @@ -234,4 +240,16 @@ } fireTableDataChanged(); } + + /**Copy parametrised entry, without amount*/ + public Entry copyEntryWithoutAmount(Entry entryToCopy) { + Entry copiedEntry = new EntryImpl(); + copiedEntry.setAccount(entryToCopy.getAccount()); + copiedEntry.setDescription(entryToCopy.getDescription()); + copiedEntry.setDetail(entryToCopy.getDetail()); + copiedEntry.setFinancialTransaction(entryToCopy.getFinancialTransaction()); + copiedEntry.setVoucher(entryToCopy.getVoucher()); + + return copiedEntry; + } } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringView.jaxx =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringView.jaxx 2012-07-20 14:04:22 UTC (rev 3547) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringView.jaxx 2012-07-23 15:16:46 UTC (rev 3548) @@ -161,11 +161,17 @@ <cell anchor="center" columns='4'> <JPanel id="actionsPanel"> <JButton id="lettered" text="lima.ui.lettering.buttonLettered" - enabled="{editModel.isLettred()}" - onActionPerformed="handler.addLetter()"/> + enabled="{editModel.isLettred()}" + onActionPerformed="handler.addLetter()"/> <JButton id="noLettered" text="lima.ui.lettering.buttonNoLettered" - enabled="{editModel.isUnLettred()}" - onActionPerformed="handler.removeLetter()"/> + enabled="{editModel.isUnLettred()}" + onActionPerformed="handler.removeLetter()"/> + <JButton id="refresh" text="lima.ui.lettering.buttonRefresh" + enabled="true" + onActionPerformed="handler.updateAllEntries()"/> + <JButton id="round" text="lima.ui.lettering.buttonEqualize" + enabled="{editModel.isEqualized()}" + onActionPerformed="handler.roundAndCreateEntry()"/> </JPanel> </cell> </row> Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringViewHandler.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringViewHandler.java 2012-07-20 14:04:22 UTC (rev 3547) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LetteringViewHandler.java 2012-07-23 15:16:46 UTC (rev 3548) @@ -106,9 +106,12 @@ } public void balanceAndActions() { - if (view.getTable().getSelectedRow() == -1) { + if (view.getTable().getSelectedRows().length == 0) { onButtonModeChanged("all"); } else if (!letteringNotExist(view.getTable().getSelectedRow())) { + if (view.getTable().getSelectedRows().length == 2) { + onButtonModeChanged("rounded"); + } //unlettred entries onBalanceChanged(null); setValuesForSelectedEntries(); @@ -117,6 +120,9 @@ onButtonModeChanged("delettrer"); } else { //lettred entries + if (view.getTable().getSelectedRows().length == 2) { + onButtonModeChanged("rounded"); + } onBalanceChanged(null); //treatment unuseful if no rows are selected if (!view.getLettringSelectionModel().isSelectionEmpty()) { @@ -152,9 +158,12 @@ } editModel.setUnLettred(false); editModel.setLettred(true); - }else { + }else if (mode.equals("rounded")) { + editModel.setEqualized(true); + } else { editModel.setLettred(false); editModel.setUnLettred(false); + editModel.setEqualized(false); } } @@ -269,6 +278,114 @@ view.getLettringSelectionModel().clearSelection(); } + /**To make the difference between two selected entries and + * create a new entry with the result (debit or credit). + * It allow to letter somme entries with different debit and credit + * */ + public void roundAndCreateEntry() { + + LetteringTableModel tableModel = view.getTableModel(); + + if (log.isDebugEnabled()) { + log.debug("table.getSelectedRows() size : " + view.getTable().getSelectedRows().length); + } + + int[] selectedRows = view.getTable().getSelectedRows(); + if (selectedRows.length == 2) { + + /*Treatment only if one of values contains decimals*/ + Entry firstSelectedEntry = tableModel.getEntryAt(selectedRows[0]); + Entry secondSelectedEntry = tableModel.getEntryAt(selectedRows[1]); + + /*Treatment only if one of values contains decimals*/ + String decimalFirstEntrySelected = (firstSelectedEntry.getAmount().toString().split("\\."))[1]; + String decimalSecondSelectedEntry = (secondSelectedEntry.getAmount().toString().split("\\."))[1]; + + if ( (firstSelectedEntry.getAmount().compareTo(BigDecimal.ZERO) != 0 && secondSelectedEntry.getAmount().compareTo(BigDecimal.ZERO) != 0) + && !firstSelectedEntry.getAmount().equals(secondSelectedEntry.getAmount()) + && ( !decimalFirstEntrySelected.equals("00") || !decimalSecondSelectedEntry.equals("00"))) { + + /*Calculation of result with it + * Tab : 0 : debit + * 1 : credit*/ + BigDecimal[] firstEntryDebitCredit = debitCreditCalculation(firstSelectedEntry); + BigDecimal[] secondEntryDebitCredit = debitCreditCalculation(secondSelectedEntry); + + /*Subtraction between debit and credit of first and second selected line*/ + BigDecimal firstEntryDebitSubtract = firstEntryDebitCredit[0].subtract(secondEntryDebitCredit[1]); + BigDecimal secondEntryDebitSubtract = secondEntryDebitCredit[0].subtract(firstEntryDebitCredit[1]); + + /*Create handle of new future entry*/ + Entry entry; + + /*Set result in the amount of the new entry*/ + if (firstEntryDebitSubtract.compareTo(BigDecimal.ZERO) != 0) { + entry = tableModel.copyEntryWithoutAmount(firstSelectedEntry); + amountsCalculation(firstSelectedEntry, secondSelectedEntry, firstEntryDebitSubtract, entry); + } else { //firstEntryDebitSubtract == 0 + entry = tableModel.copyEntryWithoutAmount(secondSelectedEntry); + amountsCalculation(firstSelectedEntry, secondSelectedEntry, secondEntryDebitSubtract, entry); + } + + /*Add new entry to the model and the table*/ + tableModel.addEntry(entry, entry.getFinancialTransaction().getTransactionDate()); + + /*Save in DB the new entry*/ + financialTransactionService.createEntry(entry); + + /*Re-select the two entries (firstSelectedEntry and secondSelectedEntry) + * and the new entry + * */ + view.getLettringSelectionModel().selectRoundedAndNewEntries(selectedRows[0], selectedRows[1], entry); + } + } + } + + /**Debit and credit calculation for one entry, with its amount + * @param entry Entry for calculation + * @return table of two big decimal, representing respectively debit and credit + * */ + protected BigDecimal[] debitCreditCalculation(Entry entry) { + + boolean firstEntryDebit = entry.getDebit(); + BigDecimal firstEntryAmount = entry.getAmount(); + + BigDecimal debitVal = firstEntryDebit ? firstEntryAmount : BigDecimal.ZERO; + BigDecimal creditVal = firstEntryDebit ? BigDecimal.ZERO : firstEntryAmount; + + BigDecimal[] debitCredit = {debitVal, creditVal}; + + return debitCredit; + } + + /** + *Calculation of amount for the new entry created and one of the two old entries + * @param firstSelectedEntry first selected entry + * @param secondSelectedEntry second selected entry + * @param resultOfFirstSecondEntrySubtraction difference between the two old entries + * @param newEntry new entry created + * */ + protected void amountsCalculation(Entry firstSelectedEntry, Entry secondSelectedEntry, BigDecimal resultOfFirstSecondEntrySubtraction, Entry newEntry) { + BigDecimal newDebitOrCredit; + if (secondSelectedEntry.getAmount().compareTo(firstSelectedEntry.getAmount())>0) { + newDebitOrCredit = secondSelectedEntry.getAmount().subtract(resultOfFirstSecondEntrySubtraction.abs()); + secondSelectedEntry.setAmount(newDebitOrCredit); + financialTransactionService.updateEntry(secondSelectedEntry); + } else { + newDebitOrCredit = firstSelectedEntry.getAmount().subtract(resultOfFirstSecondEntrySubtraction.abs()); + firstSelectedEntry.setAmount(newDebitOrCredit); + financialTransactionService.updateEntry(firstSelectedEntry); + } + newEntry.setAmount(resultOfFirstSecondEntrySubtraction.abs()); + + /*-1 for less than 0 : credit*/ + if (resultOfFirstSecondEntrySubtraction.compareTo(BigDecimal.ZERO) == -1) { + newEntry.setDebit(false); + } else { /*Greater than 0 : debit*/ + newEntry.setDebit(true); + } + } + /**To test if the filter contain an account and a period * @return true if filter is valid * */ Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LettringSelectionModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LettringSelectionModel.java 2012-07-20 14:04:22 UTC (rev 3547) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/lettering/LettringSelectionModel.java 2012-07-23 15:16:46 UTC (rev 3548) @@ -115,6 +115,20 @@ return letteringTableModel.getEntryAt(lineSelected); } + /**After rounding one of two entries, selection of its, and of the new entry, + * resulting of rounding*/ + public void selectRoundedAndNewEntries(int indexFirstRoundedEntry, int indexSecondRoundedEntry, Entry newResultRoundedEntry) { + if (!isSelectedIndex(indexFirstRoundedEntry)) { + addSelectionInterval(indexFirstRoundedEntry, indexFirstRoundedEntry); + } + if (!isSelectedIndex(indexSecondRoundedEntry)) { + addSelectionInterval(indexSecondRoundedEntry, indexSecondRoundedEntry); + } + /*New entry*/ + int newEntryIndex = letteringTableModel.getIndexOfEntry(newResultRoundedEntry); + addSelectionInterval(newEntryIndex, newEntryIndex); + } + @Override public int getSelectionMode() { return MULTIPLE_INTERVAL_SELECTION; Modified: trunk/lima-swing/src/main/resources/i18n/lima-swing_en_GB.properties =================================================================== --- trunk/lima-swing/src/main/resources/i18n/lima-swing_en_GB.properties 2012-07-20 14:04:22 UTC (rev 3547) +++ trunk/lima-swing/src/main/resources/i18n/lima-swing_en_GB.properties 2012-07-23 15:16:46 UTC (rev 3548) @@ -327,8 +327,10 @@ lima.ui.lettering.actions=Actions lima.ui.lettering.beginFinancialPeriod=From lima.ui.lettering.buttonAuto=Auto +lima.ui.lettering.buttonEqualize=Equalize lima.ui.lettering.buttonLettered=To Letter lima.ui.lettering.buttonNoLettered=To Unletter +lima.ui.lettering.buttonRefresh=Refresh lima.ui.lettering.checkAll=All lima.ui.lettering.checkLettredEntry=Lettered lima.ui.lettering.checkNoLettredEntry=Unlettered Modified: trunk/lima-swing/src/main/resources/i18n/lima-swing_fr_FR.properties =================================================================== --- trunk/lima-swing/src/main/resources/i18n/lima-swing_fr_FR.properties 2012-07-20 14:04:22 UTC (rev 3547) +++ trunk/lima-swing/src/main/resources/i18n/lima-swing_fr_FR.properties 2012-07-23 15:16:46 UTC (rev 3548) @@ -327,8 +327,10 @@ lima.ui.lettering.actions=Actions lima.ui.lettering.beginFinancialPeriod=De lima.ui.lettering.buttonAuto=Auto +lima.ui.lettering.buttonEqualize=Equilibrer lima.ui.lettering.buttonLettered=Lettrer lima.ui.lettering.buttonNoLettered=Délettrer +lima.ui.lettering.buttonRefresh=Rafraîchir lima.ui.lettering.checkAll=Toutes lima.ui.lettering.checkLettredEntry=Lettrées lima.ui.lettering.checkNoLettredEntry=Non-lettrées
participants (1)
-
mallon@users.chorem.org