r3683 - in trunk: . lima-business/src/main/java/org/chorem/lima/business/ejb lima-business-api/src/main/java/org/chorem/lima/business/api lima-swing/src/main/java/org/chorem/lima/ui/celleditor lima-swing/src/main/java/org/chorem/lima/ui/combobox lima-swing/src/main/java/org/chorem/lima/ui/common lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction
Author: Bavencoff Date: 2013-06-19 09:42:34 +0200 (Wed, 19 Jun 2013) New Revision: 3683 Url: http://chorem.org/projects/lima/repository/revisions/3683 Log: user experience Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/Column.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/AccountColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/BalanceColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/CreditColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DateColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DebitColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DescriptionColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/EntryBookColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionDefaultTable.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/LetterColumn.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/VoucherColumn.java trunk/lima-swing/src/main/resources/icons/action-filter-transaction-account.png trunk/lima-swing/src/main/resources/icons/action-filter-transaction-amount.png trunk/lima-swing/src/main/resources/icons/action-filter-transaction-date.png trunk/lima-swing/src/main/resources/icons/action-filter-transaction-description.png trunk/lima-swing/src/main/resources/icons/action-filter-transaction-entrybook.png trunk/lima-swing/src/main/resources/icons/action-filter-transaction-letter.png trunk/lima-swing/src/main/resources/icons/action-filter-transaction-voucher.png Modified: trunk/lima-business-api/src/main/java/org/chorem/lima/business/api/FinancialTransactionService.java trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/EntryTableCellRenderer.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/StringTableCellEditor.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/combobox/LeafAccountComboBoxModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/CellRouteHorizontalAction.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTable.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTableModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTable.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTableModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchView.jaxx trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchViewHandler.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTable.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTableModel.java trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedView.jaxx trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedViewHandler.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 trunk/pom.xml Modified: trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java =================================================================== --- trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-business/src/main/java/org/chorem/lima/business/ejb/FinancialTransactionServiceImpl.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -614,8 +614,8 @@ } @Override - public List<Object> searchFinancialTransaction(FinancialTransactionSearch financialTransactionSearch) throws LimaException { - List<Object> result = new ArrayList<Object>(); + public List<FinancialTransaction> searchFinancialTransaction(FinancialTransactionSearch financialTransactionSearch) throws LimaException { + List<FinancialTransaction> result; try { // first search on account dao @@ -628,17 +628,10 @@ // next on financial transaction dao FinancialTransactionDAO financialTransactionDAO = getDaoHelper().getFinancialTransactionDAO(); - List<FinancialTransaction> financialTransactions = financialTransactionDAO.searchFinancialTransaction( + result = financialTransactionDAO.searchFinancialTransaction( financialTransactionSearch, accounts); - // merge result with sub entries - EntryDAO entryDAO = getDaoHelper().getEntryDAO(); - for (FinancialTransaction financialTransaction : financialTransactions) { - result.add(financialTransaction); - List<Entry> entries = entryDAO.findAllByFinancialTransaction(financialTransaction); - result.addAll(entries); - } } catch (Exception ex) { throw new LimaException("Can't search financial transaction", ex); } Modified: trunk/lima-business-api/src/main/java/org/chorem/lima/business/api/FinancialTransactionService.java =================================================================== --- trunk/lima-business-api/src/main/java/org/chorem/lima/business/api/FinancialTransactionService.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-business-api/src/main/java/org/chorem/lima/business/api/FinancialTransactionService.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -68,7 +68,7 @@ List<FinancialTransaction> getAllFinancialTransactions(FiscalPeriod period) throws LimaException; - List<Object> searchFinancialTransaction(FinancialTransactionSearch financialTransactionSearch) throws LimaException; + List<FinancialTransaction> searchFinancialTransaction(FinancialTransactionSearch financialTransactionSearch) throws LimaException; Entry createEntry(Entry entry) throws LimaException; Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/EntryTableCellRenderer.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/EntryTableCellRenderer.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/EntryTableCellRenderer.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -73,7 +73,10 @@ border = DefaultLookup.getBorder(myCell, myCell.getUI(), "Table.focusCellHighlightBorder"); } myCell.setBorder(border); - + if (table.getModel().isCellEditable(row, column)) { + background = Color.WHITE; + foreground = Color.BLACK; + } } else { Border border = DefaultLookup.getBorder(myCell, myCell.getUI(), "Table.cellNoFocusBorder"); if (border == null) { Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/StringTableCellEditor.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/StringTableCellEditor.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/celleditor/StringTableCellEditor.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -11,6 +11,7 @@ import java.awt.*; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -62,6 +63,14 @@ runEdition(); } }); + + // remove input Ctrl + Del + InputMap inputMap= getComponent().getInputMap(JComponent.WHEN_FOCUSED); + while (inputMap != null) { + inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK)); + inputMap = inputMap.getParent(); + } + } @Override Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/combobox/LeafAccountComboBoxModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/combobox/LeafAccountComboBoxModel.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/combobox/LeafAccountComboBoxModel.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -25,21 +25,21 @@ package org.chorem.lima.ui.combobox; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.AbstractListModel; -import javax.swing.ComboBoxModel; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.lima.business.LimaException; import org.chorem.lima.business.ServiceListener; import org.chorem.lima.business.api.AccountService; import org.chorem.lima.business.api.ImportService; +import org.chorem.lima.business.utils.AccountComparator; import org.chorem.lima.entity.Account; import org.chorem.lima.service.LimaServiceFactory; +import javax.swing.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + /** * Account combo box model containing only leaf account (without sub accounts). */ @@ -93,6 +93,7 @@ log.debug("Can't get list subaccounts", eee); } } + Collections.sort(result, new AccountComparator()); return result; } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/CellRouteHorizontalAction.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/CellRouteHorizontalAction.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/CellRouteHorizontalAction.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -66,7 +66,6 @@ editor.stopCellEditing(); } table.changeSelection(getRow(), getColumn(), false, false); - table.editCellAt(getRow(), getColumn()); } } } Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/Column.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/Column.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/common/Column.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,24 @@ +package org.chorem.lima.ui.common; + +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public interface Column { + + public Class<?> getColumnClass(); + + public String getColumnName(); + + public Object getValueAt(int row); + + public boolean isCellEditable(int row); + + public boolean setValueAt(Object value, int row); + + public TableCellRenderer getCellRenderer(int row); + + public TableCellEditor getCellEditor(int row); +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/AccountColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/AccountColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/AccountColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,56 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Account; +import org.chorem.lima.entity.Entry; +import org.chorem.lima.ui.celleditor.AccountTableCellEditor; +import org.chorem.lima.ui.celleditor.AccountTableCellRenderer; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class AccountColumn extends FinancialTransactionColumn { + + public AccountColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new AccountTableCellRenderer(); + editor = new AccountTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return Account.class; + } + + @Override + public String getColumnName() { + return _("lima.ui.financialtransaction.account"); + } + + @Override + public Object getValueAt(int row) { + Entry entry = tableModel.getEntryAt(row); + return entry.getAccount(); + } + + @Override + public boolean isCellEditable(int row) { + return true; + } + + @Override + public boolean setValueAt(Object value, int row) { + Entry entry = tableModel.getEntryAt(row); + Account account = (Account) value; + boolean update = ((entry.getAccount()) == null != (account == null)) + || (entry.getAccount() != null + && account != null + && !entry.getAccount().getAccountNumber().equals(account.getAccountNumber())); + if (update) { + entry.setAccount(account); + tableModel.updateEntry(entry); + } + return update; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/BalanceColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/BalanceColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/BalanceColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,52 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.FinancialTransaction; +import org.chorem.lima.ui.celleditor.BigDecimalTableCellRenderer; + +import java.math.BigDecimal; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class BalanceColumn extends FinancialTransactionColumn { + + + public BalanceColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new BigDecimalTableCellRenderer(); + } + + @Override + public Class<?> getColumnClass() { + return BigDecimal.class; + } + + @Override + public String getColumnName() { + return _("lima.table.balance"); + } + + @Override + public Object getValueAt(int row) { + BigDecimal result; + FinancialTransaction transaction = tableModel.getTransactionAt(row); + if (row == 0 || tableModel.getEntryAt(row - 1).getFinancialTransaction() != transaction) { + result = transaction.getAmountDebit().subtract(transaction.getAmountCredit()); + } else { + result = BigDecimal.ZERO; + } + return result; + } + + @Override + public boolean isCellEditable(int row) { + return false; + } + + @Override + public boolean setValueAt(Object value, int row) { + return false; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/CreditColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/CreditColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/CreditColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,56 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Entry; +import org.chorem.lima.ui.celleditor.BigDecimalTableCellEditor; +import org.chorem.lima.ui.celleditor.BigDecimalTableCellRenderer; + +import java.math.BigDecimal; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class CreditColumn extends FinancialTransactionColumn { + + public CreditColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new BigDecimalTableCellRenderer(); + editor = new BigDecimalTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return BigDecimal.class; + } + + @Override + public String getColumnName() { + return _("lima.ui.financialtransaction.credit"); + } + + @Override + public Object getValueAt(int row) { + Entry entry = tableModel.getEntryAt(row); + return entry.getDebit() ? BigDecimal.ZERO : entry.getAmount(); + } + + @Override + public boolean isCellEditable(int row) { + return true; + } + + @Override + public boolean setValueAt(Object value, int row) { + Entry entry = tableModel.getEntryAt(row); + BigDecimal credit= (BigDecimal) value; + boolean update = (credit.signum() > 0 && (entry.isDebit() || entry.getAmount().compareTo(credit) != 0)); + if (update) { + entry.setAmount(credit); + entry.setDebit(false); + tableModel.updateEntry(entry); + tableModel.fireTransaction(entry.getFinancialTransaction()); + } + return update; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DateColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DateColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DateColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,63 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Entry; +import org.chorem.lima.entity.FinancialTransaction; +import org.chorem.lima.ui.celleditor.DateTableCellEditor; +import org.chorem.lima.ui.celleditor.DateTableCellRenderer; + +import java.util.Date; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class DateColumn extends FinancialTransactionColumn { + + + public DateColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new DateTableCellRenderer(); + editor = new DateTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return Date.class; + } + + @Override + public String getColumnName() { + return _("lima.ui.financialtransaction.date"); + } + + @Override + public Object getValueAt(int row) { + Date result; + Entry entry = tableModel.getEntryAt(row); + FinancialTransaction transaction = entry.getFinancialTransaction(); + if (row == 0 || tableModel.getEntryAt(row - 1).getFinancialTransaction() != transaction) { + result = transaction.getTransactionDate(); // date + } else { + result = null; + } + return result; + } + + @Override + public boolean isCellEditable(int row) { + return row == 0 + || tableModel.getEntryAt(row).getFinancialTransaction() != tableModel.getEntryAt(row - 1).getFinancialTransaction(); + } + + @Override + public boolean setValueAt(Object value, int row) { + FinancialTransaction transaction = tableModel.getTransactionAt(row); + boolean update = (transaction.getTransactionDate().compareTo((Date) value) != 0); + if (update) { + transaction.setTransactionDate((Date) value); + tableModel.updateTransaction(transaction); + } + return update; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DebitColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DebitColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DebitColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,56 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Entry; +import org.chorem.lima.ui.celleditor.BigDecimalTableCellEditor; +import org.chorem.lima.ui.celleditor.BigDecimalTableCellRenderer; + +import java.math.BigDecimal; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class DebitColumn extends FinancialTransactionColumn { + + public DebitColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new BigDecimalTableCellRenderer(); + editor = new BigDecimalTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return BigDecimal.class; + } + + @Override + public String getColumnName() { + return _("lima.ui.financialtransaction.debit"); + } + + @Override + public Object getValueAt(int row) { + Entry entry = tableModel.getEntryAt(row); + return entry.getDebit() ? entry.getAmount() : BigDecimal.ZERO; + } + + @Override + public boolean isCellEditable(int row) { + return true; + } + + @Override + public boolean setValueAt(Object value, int row) { + Entry entry = tableModel.getEntryAt(row); + BigDecimal debit = (BigDecimal) value; + boolean update = (debit.signum() > 0 && (!entry.isDebit() || entry.getAmount().compareTo(debit) != 0)); + if (update) { + entry.setAmount(debit); + entry.setDebit(true); + tableModel.updateEntry(entry); + tableModel.fireTransaction(entry.getFinancialTransaction()); + } + return update; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DescriptionColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DescriptionColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/DescriptionColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,53 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Entry; +import org.chorem.lima.ui.celleditor.EntryTableCellRenderer; +import org.chorem.lima.ui.celleditor.StringTableCellEditor; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class DescriptionColumn extends FinancialTransactionColumn { + + public DescriptionColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new EntryTableCellRenderer(); + editor = new StringTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return String.class; + } + + @Override + public String getColumnName() { + return _("lima.ui.financialtransaction.description"); + } + + @Override + public Object getValueAt(int row) { + Entry entry = tableModel.getEntryAt(row); + return entry.getDescription(); + } + + @Override + public boolean isCellEditable(int row) { + return true; + } + + @Override + public boolean setValueAt(Object value, int row) { + Entry entry = tableModel.getEntryAt(row); + String description = ((String) value).trim(); + + boolean update = (entry.getDescription() == null ||entry.getDescription().compareTo(description) != 0); + if (update) { + entry.setDescription(description); + tableModel.updateEntry(entry); + } + return update; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/EntryBookColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/EntryBookColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/EntryBookColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,63 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Entry; +import org.chorem.lima.entity.EntryBook; +import org.chorem.lima.entity.FinancialTransaction; +import org.chorem.lima.ui.celleditor.EntryBookTableCellEditor; +import org.chorem.lima.ui.celleditor.EntryBookTableCellRender; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class EntryBookColumn extends FinancialTransactionColumn { + + + public EntryBookColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new EntryBookTableCellRender(); + editor = new EntryBookTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return EntryBook.class; + } + + @Override + public String getColumnName() { + return _("lima.table.entrybook"); + } + + @Override + public Object getValueAt(int row) { + EntryBook result; + Entry entry = tableModel.getEntryAt(row); + FinancialTransaction transaction = entry.getFinancialTransaction(); + if (row == 0 || tableModel.getEntryAt(row - 1).getFinancialTransaction() != transaction) { + result = transaction.getEntryBook(); // date + } else { + result = null; + } + return result; + } + + @Override + public boolean isCellEditable(int row) { + return row == 0 + || tableModel.getEntryAt(row).getFinancialTransaction() != tableModel.getEntryAt(row - 1).getFinancialTransaction(); + } + + @Override + public boolean setValueAt(Object value, int row) { + FinancialTransaction transaction = tableModel.getTransactionAt(row); + EntryBook entryBook = (EntryBook) value; + boolean update = (transaction.getEntryBook().getCode().compareTo(entryBook.getCode()) != 0); + if (update) { + transaction.setEntryBook(entryBook); + tableModel.updateTransaction(transaction); + } + return update; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,35 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.ui.common.Column; + +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public abstract class FinancialTransactionColumn implements Column { + + protected FinancialTransactionTableModel tableModel; + + protected TableCellRenderer renderer; + + protected TableCellEditor editor; + + + public FinancialTransactionColumn(FinancialTransactionTableModel tableModel) { + this.tableModel = tableModel; + this.renderer = null; + this.editor = null; + } + + @Override + public TableCellRenderer getCellRenderer(int row) { + return renderer; + } + + @Override + public TableCellEditor getCellEditor(int row) { + return editor; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionDefaultTable.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionDefaultTable.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionDefaultTable.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,93 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.chorem.lima.ui.common.CellRouteHorizontalAction; +import org.chorem.lima.ui.common.CellRouteVerticalAction; +import org.chorem.lima.ui.common.Column; + +import javax.swing.*; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; +import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class FinancialTransactionDefaultTable extends JTable { + + /** serialVersionUID. */ + private static final long serialVersionUID = 3133690382049594727L; + + private static final Log log = LogFactory.getLog(FinancialTransactionTable.class); + + public FinancialTransactionDefaultTable() { + + setShowHorizontalLines(true); + setShowVerticalLines(true); + setGridColor(new Color(210,210,210)); + + initNavigation(); + + addMouseListener(new MyMouseAdapter()); + } + + protected void initNavigation() { + InputMap inputMap= getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = getActionMap(); + + // action on Tab + Object binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)); + actionMap.put(binding, new CellRouteHorizontalAction(this, true)); + + // action on Shift + Tab + binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.SHIFT_DOWN_MASK)); + actionMap.put(binding, new CellRouteHorizontalAction(this, false)); + + // action on Enter + binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); + actionMap.put(binding, new CellRouteVerticalAction(this, true)); + + // action on Shift + Enter + binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_DOWN_MASK)); + actionMap.put(binding, new CellRouteVerticalAction(this, false)); + + } + + @Override + public TableCellRenderer getCellRenderer(int row, int column) { + TableCellRenderer renderer; + FinancialTransactionTableModel tableModel = (FinancialTransactionTableModel) getModel(); + Column columnTable = tableModel.getColumn(column); + renderer = columnTable.getCellRenderer(row); + if (renderer == null) { + renderer = super.getCellRenderer(row, column); + } + return renderer; + } + + @Override + public TableCellEditor getCellEditor(int row, int column) { + TableCellEditor editor; + FinancialTransactionTableModel tableModel = (FinancialTransactionTableModel) getModel(); + Column columnTable = tableModel.getColumn(column); + editor = columnTable.getCellEditor(row); + if (editor == null) { + editor = super.getCellEditor(row, column); + } + return editor; + } + + private class MyMouseAdapter extends MouseAdapter { + + @Override + public void mousePressed(MouseEvent e) { + if (rowAtPoint(e.getPoint()) == -1) { + clearSelection(); + } + } + } +} Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTable.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTable.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTable.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -27,28 +27,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chorem.lima.entity.Account; import org.chorem.lima.entity.FinancialTransaction; -import org.chorem.lima.ui.celleditor.AccountTableCellEditor; -import org.chorem.lima.ui.celleditor.AccountTableCellRenderer; -import org.chorem.lima.ui.celleditor.BigDecimalTableCellEditor; -import org.chorem.lima.ui.celleditor.BigDecimalTableCellRenderer; -import org.chorem.lima.ui.celleditor.DateTableCellEditor; -import org.chorem.lima.ui.celleditor.DateTableCellRenderer; -import org.chorem.lima.ui.celleditor.EntryTableCellRenderer; -import org.chorem.lima.ui.celleditor.StringTableCellEditor; -import org.chorem.lima.ui.common.CellRouteHorizontalAction; -import org.chorem.lima.ui.common.CellRouteVerticalAction; import javax.swing.*; import javax.swing.table.TableCellEditor; -import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.math.BigDecimal; -import java.util.Date; /** * Table des transaction qui ajoute des comportement (keys). @@ -61,7 +46,7 @@ * @author jpepin * @author echatellier */ -public class FinancialTransactionTable extends JTable { +public class FinancialTransactionTable extends FinancialTransactionDefaultTable { /** serialVersionUID. */ private static final long serialVersionUID = 3133690382049594727L; @@ -71,38 +56,13 @@ protected final FinancialTransactionViewHandler handler; public FinancialTransactionTable(final FinancialTransactionViewHandler handler) { + super(); this.handler = handler; + } - //Get new date editor - setDefaultEditor(Date.class, new DateTableCellEditor()); - - //Get new String editor - - StringTableCellEditor stringTableCellEditor = new StringTableCellEditor(); - setDefaultEditor(String.class, stringTableCellEditor); - - //Get new account editor - setDefaultEditor(Account.class, new AccountTableCellEditor()); - - //Get new amount editor - setDefaultEditor(BigDecimal.class, new BigDecimalTableCellEditor()); - - //Get new BigDecimal renderer - setDefaultRenderer(BigDecimal.class, new BigDecimalTableCellRenderer()); - - //get new Date renderer for empty cells - setDefaultRenderer(Date.class, new DateTableCellRenderer()); - - //get new String renderer for empty cells - setDefaultRenderer(String.class, new EntryTableCellRenderer()); - - //get new Account renderer for empty cells - setDefaultRenderer(Account.class, new AccountTableCellRenderer()); - - setShowHorizontalLines(true); - setShowVerticalLines(true); - setGridColor(new Color(210,210,210)); - + @Override + protected void initNavigation() { + super.initNavigation(); InputMap inputMap= getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); ActionMap actionMap = getActionMap(); @@ -110,136 +70,11 @@ Object binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)); actionMap.put(binding, new NextCellAction()); - // action on Shift + Tab - binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.SHIFT_DOWN_MASK)); - actionMap.put(binding, new CellRouteHorizontalAction(this, false)); - - // action on Enter - binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); - actionMap.put(binding, new CellRouteVerticalAction(this, true)); - - // action on Shift + Enter - binding = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_DOWN_MASK)); - actionMap.put(binding, new CellRouteVerticalAction(this, false)); - - // add action on Ctrl + Shift + N - binding = "new-transaction"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.addFinancialTransaction(); - } - }); - - // add action on Ctrl + Shift + Delete - binding = "delete-transaction"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.deleteSelectedTransaction(); - } - }); - - // add action on Ctrl + Shift + C - binding = "copy-transaction"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.copyTransaction(); - } - }); - - // add action on Ctrl + Shift + V - binding = "paste-transaction"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.pasteTransaction(); - } - }); - - // add action on Ctrl + N - binding = "new-entry"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.addEntry(); - } - }); - - // add action on Ctrl + Delete - binding = "delete-entry"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.deleteSelectedEntry(); - } - }); - - // add action on Ctrl + Alt + C - binding = "copy-entry"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.copyEntry(); - } - }); - - // add action on Ctrl + Alt + V - binding = "paste-entry"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.pasteEntry(); - } - }); - - // add action on Ctrl + B - binding = "balance"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.balanceTransaction(); - } - }); - - // add action on Ctrl + Alt + A - binding = "assign-all"; - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK), binding); - actionMap.put(binding, new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - handler.assignAllEntries(); - } - }); - - // remove input Ctrl + Del - inputMap= stringTableCellEditor.getComponent().getInputMap(JComponent.WHEN_FOCUSED); - while (inputMap != null) { - inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK)); - inputMap = inputMap.getParent(); - } - - addMouseListener(new MyMouseAdapter()); } - public FinancialTransactionViewHandler getHandler() { - return handler; - } - private class NextCellAction extends AbstractAction { FinancialTransactionTable table = FinancialTransactionTable.this; - FinancialTransactionTableModel tableModel = table.handler.view.getFinancialTransactionTableModel(); @Override public void actionPerformed(ActionEvent e) { @@ -261,8 +96,7 @@ boolean end = false; - - + FinancialTransactionTableModel tableModel = (FinancialTransactionTableModel) getModel(); FinancialTransaction transaction = tableModel.getTransactionAt(row); do { if (column >= nbColumn - 1) { @@ -292,25 +126,8 @@ } } while (!end && !tableModel.isCellEditable(row,column)); changeSelection(row, column, false, false); - editCellAt(row, column); } } } - private class MyMouseAdapter extends MouseAdapter { - - @Override - public void mousePressed(MouseEvent e) { - if (rowAtPoint(e.getPoint()) == -1) { - clearSelection(); - } - } - } - - private class DeleteEntryAction extends AbstractAction { - @Override - public void actionPerformed(ActionEvent e) { - handler.deleteSelectedEntry(); - } - } } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTableModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTableModel.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionTableModel.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -30,12 +30,12 @@ import org.chorem.lima.business.api.FinancialTransactionService; import org.chorem.lima.business.utils.EntryComparator; import org.chorem.lima.business.utils.FinancialTransactionComparator; -import org.chorem.lima.entity.Account; import org.chorem.lima.entity.Entry; import org.chorem.lima.entity.EntryImpl; import org.chorem.lima.entity.FinancialTransaction; import org.chorem.lima.entity.FinancialTransactionImpl; import org.chorem.lima.service.LimaServiceFactory; +import org.chorem.lima.ui.common.Column; import org.chorem.lima.ui.common.TableModelWithGroup; import javax.swing.table.AbstractTableModel; @@ -43,11 +43,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.List; -import static org.nuiton.i18n.I18n._; - /** * Basic transaction table model. * @@ -65,17 +62,35 @@ /** Service (just to update setValueAt(). */ protected FinancialTransactionService financialTransactionService; + protected List<Column> columns; + protected List<Entry> entries; protected List<FinancialTransaction> transactions; public FinancialTransactionTableModel() { + columns = new ArrayList<Column>(); + initColumns(); + financialTransactionService = LimaServiceFactory.getService(FinancialTransactionService.class); entries = new ArrayList<Entry>(); transactions = new ArrayList<FinancialTransaction>(); } + protected void initColumns() { + columns.add(new DateColumn(this)); + columns.add(new VoucherColumn(this)); + columns.add(new AccountColumn(this)); + columns.add(new DescriptionColumn(this)); + columns.add(new DebitColumn(this)); + columns.add(new CreditColumn(this)); + } + + public Column getColumn(int column) { + return columns.get(column); + } + public void setTransactions(List<FinancialTransaction> transactions) { this.transactions.clear(); this.transactions.addAll(transactions); @@ -104,33 +119,19 @@ @Override public int getColumnCount() { - return 6; + return columns.size(); } @Override - public Class<?> getColumnClass(int column) { + public int getRowCount() { + return entries.size(); + } - Class<?> result = null; - - switch (column) { - case 0: - result = Date.class; - break; - case 1: - result = String.class; - break; - case 2: - result = Account.class; - break; - case 3: - result = String.class; - break; - case 4: - result = BigDecimal.class; - break; - case 5: - result = BigDecimal.class; - break; + @Override + public Class<?> getColumnClass(int column) { + Class result = null; + if (column >= 0 && column < columns.size()) { + result = columns.get(column).getColumnClass(); } return result; } @@ -138,69 +139,19 @@ @Override public String getColumnName(int column) { String result = "n/a"; - - switch (column) { - case 0: - result = _("lima.ui.financialtransaction.date"); - break; - case 1: - result = _("lima.ui.financialtransaction.voucher"); - break; - case 2: - result = _("lima.ui.financialtransaction.account"); - break; - case 3: - result = _("lima.ui.financialtransaction.description"); - break; - case 4: - result = _("lima.ui.financialtransaction.debit"); - break; - case 5: - result = _("lima.ui.financialtransaction.credit"); - break; + if (column >= 0 && column < columns.size()) { + result = columns.get(column).getColumnName(); } - return result; + return result; } @Override - public int getRowCount() { - int result = 0; - - if (entries != null) { - result = entries.size(); - } - - return result; - } - - @Override public Object getValueAt(int row, int column) { - Entry entry = entries.get(row); - FinancialTransaction transaction = entry.getFinancialTransaction(); Object result = null; - switch (column) { - case 0: - if (row == 0 || entries.get(row - 1).getFinancialTransaction() != transaction) { - result = transaction.getTransactionDate(); // date - } - break; - case 1: - result = entry.getVoucher(); - break; - case 2: // account - result = entry.getAccount(); - break; - case 3: - result = entry.getDescription(); - break; - case 4: - result = entry.getDebit() ? entry.getAmount() : BigDecimal.ZERO; - break; - case 5: - result = entry.getDebit() ? BigDecimal.ZERO : entry.getAmount(); - break; + if (column >= 0 && column < columns.size()) { + result = columns.get(column).getValueAt(row); } - return result; + return result; } /** @@ -208,99 +159,25 @@ * different condition for entry or financial transaction */ @Override - public boolean isCellEditable(int rowIndex, int columnIndex) { - return columnIndex > 0 - || rowIndex == 0 - || entries.get(rowIndex).getFinancialTransaction() != entries.get(rowIndex - 1).getFinancialTransaction(); + public boolean isCellEditable(int row, int column) { + boolean result = false; + if (column >= 0 && column < columns.size()) { + result = columns.get(column).isCellEditable(row); + } + return result; } /** to modifiy financialtransaction or entry */ @Override public void setValueAt(Object value, int row, int column) { - - Entry entry = entries.get(row); - FinancialTransaction transaction = entry.getFinancialTransaction(); - boolean updateEntry = false; - boolean updateTransaction = false; - boolean updateBalance = false; - switch (column) { - case 0: - //update - updateTransaction = (transaction.getTransactionDate().compareTo((Date) value) != 0); - if (updateTransaction) { - transaction.setTransactionDate((Date) value); - } - break; - case 1: - String voucher = ((String) value).trim(); - - updateEntry = (entry.getVoucher().compareTo(voucher) != 0); - if (updateEntry) { - entry.setVoucher(voucher); - } - break; - case 2: - Account account = (Account) value; - updateEntry = ((entry.getAccount()) == null != (account == null)) - || (entry.getAccount() != null - && account != null - && !entry.getAccount().getAccountNumber().equals(account.getAccountNumber())); - if (updateEntry) { - entry.setAccount(account); - } - break; - case 3: - String description = ((String) value).trim(); - - updateEntry = (entry.getDescription().compareTo(description) != 0); - if (updateEntry) { - entry.setDescription(description); - } - break; - case 4: - BigDecimal debit = (BigDecimal) value; - updateEntry = (debit.signum() > 0 && (!entry.isDebit() || entry.getAmount().compareTo(debit) != 0)); - if (updateEntry) { - entry.setAmount(debit); - entry.setDebit(true); - updateBalance = true; - } - break; - case 5: - BigDecimal credit= (BigDecimal) value; - updateEntry = (credit.signum() > 0 && (entry.isDebit() || entry.getAmount().compareTo(credit) != 0)); - if (updateEntry) { - entry.setAmount(credit); - entry.setDebit(false); - updateBalance = true; - } - break; + boolean update = false; + if (column >= 0 && column < columns.size()) { + update = columns.get(column).setValueAt(value, row); } - // some modification must update all other // first row modification update following rows - if (updateEntry) { - financialTransactionService.updateEntry(entry); - if (updateBalance) { - int firstRow = indexOf(transaction); - int lastRow = firstRow + transaction.sizeEntry() - 1; - fireTableRowsUpdated(firstRow, lastRow); - } else { - fireTableCellUpdated(row, column); - } - if (log.isDebugEnabled()) { - log.debug("Update Entry"); - } - } else if (updateTransaction) { - financialTransactionService.updateFinancialTransaction(transaction); + if (update) { fireTableCellUpdated(row, column); - if (log.isDebugEnabled()) { - log.debug("Update transaction"); - } - } else { - if (log.isDebugEnabled()) { - log.debug("No Update"); - } } } @@ -446,6 +323,22 @@ } public void updateEntry(Entry entry) { + if (log.isDebugEnabled()) { + log.debug("Update Entry"); + } financialTransactionService.updateEntry(entry); } + + public void updateTransaction(FinancialTransaction transaction) { + if (log.isDebugEnabled()) { + log.debug("Update transaction"); + } + financialTransactionService.updateFinancialTransaction(transaction); + } + + public void fireTransaction(FinancialTransaction transaction) { + int firstRow = indexOf(transaction); + int lastRow = firstRow + transaction.sizeEntry() - 1; + fireTableRowsUpdated(firstRow, lastRow); + } } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/FinancialTransactionViewHandler.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -51,7 +51,9 @@ import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableCellEditor; +import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; +import java.awt.event.KeyEvent; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; @@ -94,6 +96,7 @@ LimaServiceFactory.addServiceListener(FinancialPeriodService.class, this); LimaServiceFactory.addServiceListener(FiscalPeriodService.class, this); LimaServiceFactory.addServiceListener(ImportService.class, this); + initShortCuts(); } /** @@ -125,7 +128,113 @@ FinancialTransactionTable table = view.getFinancialTransactionTable(); table.getColumnModel().addColumnModelListener(this); } + protected void initShortCuts() { + InputMap inputMap= view.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = view.getActionMap(); + Object binding; + + // add action on Ctrl + Shift + N + binding = "new-transaction"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + addFinancialTransaction(); + } + }); + + // add action on Ctrl + Shift + Delete + binding = "delete-transaction"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + deleteSelectedTransaction(); + } + }); + + // add action on Ctrl + Shift + C + binding = "copy-transaction"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + copyTransaction(); + } + }); + + // add action on Ctrl + Shift + V + binding = "paste-transaction"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + pasteTransaction(); + } + }); + + // add action on Ctrl + N + binding = "new-entry"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + addEntry(); + } + }); + + // add action on Ctrl + Delete + binding = "delete-entry"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + deleteSelectedEntry(); + } + }); + + // add action on Ctrl + Alt + C + binding = "copy-entry"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + copyEntry(); + } + }); + + // add action on Ctrl + Alt + V + binding = "paste-entry"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + pasteEntry(); + } + }); + + // add action on Ctrl + B + binding = "balance"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + balanceTransaction(); + } + }); + + // add action on Ctrl + Alt + A + binding = "assign-all"; + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK + KeyEvent.ALT_DOWN_MASK), binding); + actionMap.put(binding, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + assignAllEntries(); + } + }); + } + /** * New fiscal period selection. * Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/LetterColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/LetterColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/LetterColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,53 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Entry; +import org.chorem.lima.ui.celleditor.EntryTableCellRenderer; +import org.chorem.lima.ui.celleditor.StringTableCellEditor; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class LetterColumn extends FinancialTransactionColumn { + + public LetterColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new EntryTableCellRenderer(); + editor = new StringTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return String.class; + } + + @Override + public String getColumnName() { + return _("lima.table.letter"); + } + + @Override + public Object getValueAt(int row) { + Entry entry = tableModel.getEntryAt(row); + return entry.getLettering(); + } + + @Override + public boolean isCellEditable(int row) { + return true; + } + + @Override + public boolean setValueAt(Object value, int row) { + Entry entry = tableModel.getEntryAt(row); + String letter = ((String) value).trim(); + + boolean update = (entry.getLettering() == null || entry.getLettering().compareTo(letter) != 0); + if (update) { + entry.setLettering(letter); + tableModel.updateEntry(entry); + } + return update; + } +} Added: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/VoucherColumn.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/VoucherColumn.java (rev 0) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransaction/VoucherColumn.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -0,0 +1,53 @@ +package org.chorem.lima.ui.financialtransaction; + +import org.chorem.lima.entity.Entry; +import org.chorem.lima.ui.celleditor.EntryTableCellRenderer; +import org.chorem.lima.ui.celleditor.StringTableCellEditor; + +import static org.nuiton.i18n.I18n._; + +/** + * @author Sylvain Bavencoff <bavencoff@codelutin.com> + */ +public class VoucherColumn extends FinancialTransactionColumn { + + public VoucherColumn(FinancialTransactionTableModel tableModel) { + super(tableModel); + renderer = new EntryTableCellRenderer(); + editor = new StringTableCellEditor(); + } + + @Override + public Class<?> getColumnClass() { + return String.class; + } + + @Override + public String getColumnName() { + return _("lima.ui.financialtransaction.voucher"); + } + + @Override + public Object getValueAt(int row) { + Entry entry = tableModel.getEntryAt(row); + return entry.getVoucher(); + } + + @Override + public boolean isCellEditable(int row) { + return true; + } + + @Override + public boolean setValueAt(Object value, int row) { + Entry entry = tableModel.getEntryAt(row); + String voucher = ((String) value).trim(); + + boolean update = (entry.getVoucher() == null || entry.getVoucher().compareTo(voucher) != 0); + if (update) { + entry.setVoucher(voucher); + tableModel.updateEntry(entry); + } + return update; + } +} Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTable.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTable.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTable.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -25,219 +25,24 @@ package org.chorem.lima.ui.financialtransactionsearch; -import org.chorem.lima.entity.Account; -import org.chorem.lima.entity.EntryBook; -import org.chorem.lima.ui.celleditor.AccountTableCellEditor; -import org.chorem.lima.ui.celleditor.BigDecimalTableCellEditor; -import org.chorem.lima.ui.celleditor.BigDecimalTableCellRenderer; -import org.chorem.lima.ui.celleditor.DateTableCellEditor; -import org.chorem.lima.ui.celleditor.EmptyCellRenderer; -import org.chorem.lima.ui.celleditor.EntryBookTableCellEditor; -import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.decorator.ColorHighlighter; -import org.jdesktop.swingx.decorator.ComponentAdapter; -import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.Highlighter; +import org.chorem.lima.ui.financialtransaction.FinancialTransactionDefaultTable; -import java.awt.Color; -import java.awt.Component; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.math.BigDecimal; -import java.util.Date; - /** * Table des transaction qui ajoute des comportement (keys). * * @author ore * @author Rémi Chapelet */ -public class FinancialTransactionSearchTable extends JXTable - implements KeyListener, MouseListener { +public class FinancialTransactionSearchTable extends FinancialTransactionDefaultTable { /** serialVersionUID. */ private static final long serialVersionUID = 3133690382049594727L; - protected FinancialTransactionSearchViewHandler handler; - - private Highlighter colorTransaction; - - private ColorHighlighter colorBalance; - - public FinancialTransactionSearchTable(FinancialTransactionSearchViewHandler handler) { - - this.handler = handler; - - addKeyListener(this); - addMouseListener(this); - - //Get new date editor - setDefaultEditor(Date.class, new DateTableCellEditor()); - //Get new entry book editor - setDefaultEditor(EntryBook.class, new EntryBookTableCellEditor()); - //Get new account editor - setDefaultEditor(Account.class, new AccountTableCellEditor()); - //Get new amount editor - setDefaultEditor(BigDecimal.class, new BigDecimalTableCellEditor()); - //Get new BigDecimal renderer - setDefaultRenderer(BigDecimal.class, new BigDecimalTableCellRenderer()); - //get new String renderer for empty cells - setDefaultRenderer(String.class, new EmptyCellRenderer()); - //get new Account renderer for empty cells - setDefaultRenderer(Account.class, new EmptyCellRenderer()); - //get new EntryBook renderer for empty cells - setDefaultRenderer(EntryBook.class, new EmptyCellRenderer()); - - //highlight financial financial transactions - addColorTransaction(); - // highlight unbalanced financial transactions - addColorNonBalancedTransaction(); - - /*TODO : 'setEnabled' a supprimer, lors de la refonte du système de - * recherche et de saisie*/ - setEnabled(false); - } - - /** - * Cette méthode permet de colorer toutes les transactions dans le tableau - * afin de bien distinguer les transactions et entrées comptables. - * On récupère la première cellule, on vérifie que c'est une date - */ - protected void addColorTransaction() { - if (colorTransaction != null) { - removeHighlighter(colorTransaction); - } - HighlightPredicate predicate = new HighlightPredicate() { - @Override - public boolean isHighlighted(Component renderer, - ComponentAdapter adapter) { - return adapter.getValueAt(adapter.row, 0) instanceof Date; - } - }; - colorTransaction = - new ColorHighlighter(predicate, new Color(222, 222, 222), null); - addHighlighter(colorTransaction); + public FinancialTransactionSearchTable() { + super(); } - /** - * Permet de surligner une transaction dans le tableau lorsque - * cette dernière n'est pas équilibrée. - * On récupère la dernière cellule de la ligne - * et on vérifie si la valeur est différente de 0 - */ - protected void addColorNonBalancedTransaction() { - if (colorBalance != null) { - removeHighlighter(colorBalance); - } - HighlightPredicate predicate = new HighlightPredicate() { - @Override - public boolean isHighlighted(Component renderer, - ComponentAdapter adapter) { - boolean isHighlighted = false; - Object value = adapter.getValueAt(adapter.row, 8); - if (value instanceof BigDecimal) { - BigDecimal currentBalance = (BigDecimal) value; - // can compare two BigDecimals with different scales - // e.g: 3.1 == 3.10 - if (currentBalance.compareTo(BigDecimal.ZERO) != 0) { - isHighlighted = true; - } - } - return isHighlighted; - } - }; - colorTransaction = - new ColorHighlighter(predicate, new Color(255, 198, 209), null); - addHighlighter(colorTransaction); - } - @Override - public void keyTyped(KeyEvent e) { - } - - /** - * for each action combination key are think - * for extend keyboard and laptop keyboard - */ - @Override - public void keyPressed(KeyEvent e) { - - //TODO combinaison de touches dans la config - - // delete selected row with the key : delete or ctrl + clear - // ou de l'entree - if (e.getKeyCode() == KeyEvent.VK_DELETE - || e.getKeyCode() == KeyEvent.VK_CLEAR - && e.getModifiers() == KeyEvent.CTRL_MASK) { - handler.deleteSelectedRow(); - } - - // add entry with the key combination : insert or ctrl + enter - if (e.getKeyCode() == KeyEvent.VK_INSERT - || e.getKeyCode() == KeyEvent.VK_ENTER - && e.getModifiers() == KeyEvent.CTRL_MASK) { - handler.addEmptyEntry(); - } - - // paste : ctrl + c - - // add financial transaction with the key combination : ctrl + c - if (e.getKeyCode() == KeyEvent.VK_C - && e.getModifiers() == KeyEvent.CTRL_MASK) { - handler.copyRow(); - } - - // copy : ctrl + v - - // add financial transaction with the key combination : ctrl + v - if (e.getKeyCode() == KeyEvent.VK_V - && e.getModifiers() == KeyEvent.CTRL_MASK) { - handler.pasteRow(); - } - - // add financial transaction with the key combination : ctrl + tab - if (e.getKeyCode() == KeyEvent.VK_TAB - && e.getModifiers() == KeyEvent.CTRL_MASK) { - handler.addFinancialTransaction(); - } - - // clear row selection with the key: escape - if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - if (!isEditing()) { - clearSelection(); - } - } - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void mouseClicked(MouseEvent e) { - } - - @Override - public void mousePressed(MouseEvent e) { - if (rowAtPoint(e.getPoint()) == -1) { - clearSelection(); - } - } - - @Override - public void mouseReleased(MouseEvent e) { - } - - @Override - public void mouseEntered(MouseEvent e) { - } - - @Override - public void mouseExited(MouseEvent e) { - } - } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTableModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTableModel.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchTableModel.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -25,35 +25,24 @@ package org.chorem.lima.ui.financialtransactionsearch; -import static org.nuiton.i18n.I18n._; - -import java.math.BigDecimal; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -import javax.swing.table.AbstractTableModel; - -import org.apache.commons.lang3.time.DateUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.chorem.lima.LimaContext; import org.chorem.lima.beans.FinancialTransactionSearch; -import org.chorem.lima.business.ServiceListener; import org.chorem.lima.business.api.FinancialPeriodService; -import org.chorem.lima.business.api.FinancialTransactionService; -import org.chorem.lima.entity.Account; -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.entity.FinancialTransactionImpl; import org.chorem.lima.entity.FiscalPeriod; import org.chorem.lima.service.LimaServiceFactory; -import org.nuiton.util.decorator.Decorator; -import org.nuiton.util.decorator.DecoratorProvider; +import org.chorem.lima.ui.financialtransaction.AccountColumn; +import org.chorem.lima.ui.financialtransaction.BalanceColumn; +import org.chorem.lima.ui.financialtransaction.CreditColumn; +import org.chorem.lima.ui.financialtransaction.DateColumn; +import org.chorem.lima.ui.financialtransaction.DebitColumn; +import org.chorem.lima.ui.financialtransaction.DescriptionColumn; +import org.chorem.lima.ui.financialtransaction.EntryBookColumn; +import org.chorem.lima.ui.financialtransaction.FinancialTransactionTableModel; +import org.chorem.lima.ui.financialtransaction.LetterColumn; +import org.chorem.lima.ui.financialtransaction.VoucherColumn; +import java.util.List; + /** * Basic transaction table model. * <p/> @@ -66,18 +55,11 @@ * Last update : $Date$ * By : $Author$ */ -public class FinancialTransactionSearchTableModel extends AbstractTableModel implements ServiceListener { +public class FinancialTransactionSearchTableModel extends FinancialTransactionTableModel { /** serialVersionUID. */ private static final long serialVersionUID = 1L; - /** log. */ - private static final Log log = LogFactory - .getLog(FinancialTransactionSearchTableModel.class); - - /** Transaction service. */ - protected final FinancialTransactionService financialTransactionService; - /** Financial service */ protected final FinancialPeriodService financialPeriodService; @@ -87,510 +69,45 @@ /** data cache */ protected FinancialTransactionSearch financialTransactionSearch; - protected List<Object> cacheDataList; - /** - * To decorate account objects. - */ - protected final Decorator<Account> accountDecorator; - - - /** * Model constructor. * <p/> * Just init service proxies. */ public FinancialTransactionSearchTableModel() { - /* Services */ - financialTransactionService = - LimaServiceFactory.getService( - FinancialTransactionService.class); - LimaServiceFactory.addServiceListener(FinancialTransactionService.class, this); + super(); financialPeriodService = LimaServiceFactory.getService( FinancialPeriodService.class); - DecoratorProvider decoratorProvider = - LimaContext.get().getDecoratorProvider(); - accountDecorator = decoratorProvider.getDecoratorByType(Account.class); } - /** - * Le model est une combinaison de Transaction/entries. - * - * @return - */ - protected List<Object> getDataList(FinancialTransactionSearch financialTransactionSearch) { - List<Object> results = null; - - if (financialTransactionSearch != null) { - results = financialTransactionService.searchFinancialTransaction(financialTransactionSearch); - } - - return results; - } - - protected void refresh(FinancialTransactionSearch financialTransactionSearch) { this.financialTransactionSearch = financialTransactionSearch; - cacheDataList = getDataList(financialTransactionSearch); - fireTableDataChanged(); + List<FinancialTransaction> transactions = financialTransactionService.searchFinancialTransaction(financialTransactionSearch); + setTransactions(transactions); } - - @Override - public int getColumnCount() { - return 9; + protected void initColumns() { + columns.add(new DateColumn(this)); + columns.add(new EntryBookColumn(this)); + columns.add(new VoucherColumn(this)); + columns.add(new AccountColumn(this)); + columns.add(new DescriptionColumn(this)); + columns.add(new LetterColumn(this)); + columns.add(new DebitColumn(this)); + columns.add(new CreditColumn(this)); + columns.add(new BalanceColumn(this)); } - @Override - public Class<?> getColumnClass(int column) { - - Class<?> result = null; - - switch (column) { - case 0: - result = Date.class; //Date - break; - case 1: - result = EntryBook.class; //EntryBook - break; - case 2: - result = String.class; //Voucher - break; - case 3: - result = Account.class; //Account - break; - case 4: - result = String.class; //Description - break; - case 5: - result = String.class; //Letter - break; - case 6: - result = BigDecimal.class; //Debit - break; - case 7: - result = BigDecimal.class; //Credit - break; - case 8: - result = BigDecimal.class; //Balance - break; - - } - - return result; - } - - @Override - public String getColumnName(int column) { - String result = "n/a"; - - switch (column) { - case 0: - result = _("lima.table.date"); - break; - case 1: - result = _("lima.table.entrybook"); - break; - case 2: - result = _("lima.table.voucher"); - break; - case 3: - result = _("lima.table.account"); - break; - case 4: - result = _("lima.table.description"); - break; - case 5: - result = _("lima.table.letter"); - break; - case 6: - result = _("lima.table.debit"); - break; - case 7: - result = _("lima.table.credit"); - break; - case 8: - result = _("lima.table.balance"); - break; - - } - - return result; - } - - @Override - public int getRowCount() { - int result = 0; - - // just prevent too much result - if (cacheDataList != null) { - result = cacheDataList.size(); - } - - return result; - } - - @Override - public Object getValueAt(int row, int column) { - Object result = null; - - // just prevent too much result - if (cacheDataList != null) { - result = cacheDataList.get(row); - - if (result instanceof FinancialTransaction) { - FinancialTransaction currentRow = (FinancialTransaction) result; - BigDecimal amountDebit = currentRow.getAmountDebit(); - BigDecimal amountCredit = currentRow.getAmountCredit(); - - switch (column) { - case 0: - result = currentRow.getTransactionDate(); - break; - case 1: - if (currentRow.getEntryBook() != null) { - result = currentRow.getEntryBook().getCode(); - } else { - result = null; - } - break; - case 2: - result = null; //EntryBook - break; - case 3: - result = null; //Account - break; - case 4: - result = null; //Description - break; - case 5: - result = null; //Letter - break; - case 6: - result = amountDebit; //Debit - break; - case 7: - result = amountCredit; //Credit - break; - case 8: - result = amountDebit.subtract(amountCredit); //Balance - break; - - } - } else if (result instanceof Entry) { - Entry currentEntry = (Entry) result; - switch (column) { - case 0: - result = null; //Date - break; - case 1: //EntryBook - result = null; - break; - case 2: - result = currentEntry.getVoucher(); //Voucher - break; - case 3: // account - if (currentEntry.getAccount() == null) { - result = null; - } else { - Account acc = currentEntry.getAccount(); - result = accountDecorator.toString(acc); - } - break; - case 4: - result = currentEntry.getDescription(); //Description - break; - case 5: - result = currentEntry.getLettering(); - break; - case 6: //Debit - result = currentEntry.getDebit() ? currentEntry.getAmount() : BigDecimal.ZERO; - break; - case 7: //Credit - result = currentEntry.getDebit() ? BigDecimal.ZERO : currentEntry.getAmount(); - break; - case 8: - result = null; //Balance - break; - } - - } - } - - return result; - } - public void setFiscalPeriod(FiscalPeriod fiscalPeriod) { selectedFiscalPeriod = fiscalPeriod; } - /** - * To set cells editable or not - * different condition for entry or financial transaction - */ - @Override - public boolean isCellEditable(int rowIndex, int columnIndex) { - boolean editableCell = false; - Object currentRow = cacheDataList.get(rowIndex); - // cells editable for the entry row, all cells exclude the date - if (currentRow instanceof Entry && !(columnIndex == 0 || columnIndex == 1)) { - editableCell = true; - } - // cells editable for the financialtransaction row, no cells exclude the date - if (currentRow instanceof FinancialTransaction && (columnIndex == 0 || columnIndex == 1)) { - editableCell = true; - } - return editableCell; - } - - - /** - * @return int: indexOf new FianancialTransaction - */ - public int addFinancialTransaction() { - /* Calling transaction service */ - FinancialTransaction financialTransaction = new FinancialTransactionImpl(); - - int index = -1; - //if a period is selected - if (selectedFiscalPeriod != null) { - List<FinancialPeriod> financialPeriodsList = - financialPeriodService.getFinancialPeriods(selectedFiscalPeriod.getBeginDate(), - selectedFiscalPeriod.getEndDate()); - FinancialPeriod financialPeriod = financialPeriodsList.get(0); - - // get today - Calendar actualCalendar = Calendar.getInstance(); - // get the financial period date - Date transactionDate = financialPeriod.getBeginDate(); - - Calendar calEnd = Calendar.getInstance(); - calEnd.setTime(financialPeriod.getEndDate()); - int dayMax = calEnd.get(Calendar.DAY_OF_MONTH); - Calendar calBegin = Calendar.getInstance(); - calBegin.setTime(financialPeriod.getBeginDate()); - int dayMin = calBegin.get(Calendar.DAY_OF_MONTH); - int toDay = actualCalendar.get(Calendar.DAY_OF_MONTH); - - if (toDay > dayMax || toDay < dayMin) { - // change the day - transactionDate = DateUtils.setDays(transactionDate, dayMax); - } else { - // change the day - transactionDate = DateUtils.setDays(transactionDate, toDay); - } - - - // set date to the financial transaction - financialTransaction.setTransactionDate(transactionDate); - // create it - FinancialTransaction fTransaction = - financialTransactionService.createFinancialTransaction(financialTransaction); - - //on recharge la liste - cacheDataList = getDataList(financialTransactionSearch); - index = cacheDataList.indexOf(fTransaction); - fireTableRowsInserted(index, index); - } - return index; - } - - /** - * @param value - * @param row - * @return int: indexOf new Entry - */ - public int addEmptyEntry(Object value, int row) { - FinancialTransaction currentTransaction = null; - Object currentRow = cacheDataList.get(row); - Entry entry = new EntryImpl(); - entry.setAmount(BigDecimal.ZERO); - //check if current row is a transaction or an entry - if (currentRow instanceof FinancialTransaction) { - currentTransaction = (FinancialTransaction) currentRow; - } else if (currentRow instanceof Entry) { - Entry currentEntry = (Entry) currentRow; - //get back the parent transaction of the entry - currentTransaction = currentEntry.getFinancialTransaction(); - } - //create it - entry.setFinancialTransaction(currentTransaction); - Entry newEntry = financialTransactionService.createEntry(entry); - //on recharge la liste - cacheDataList = getDataList(financialTransactionSearch); - int newrow = cacheDataList.indexOf(newEntry); - fireTableRowsInserted(newrow, newrow); - return newrow; - } - - /** to modifiy financialtransaction or entry */ - @Override - public void setValueAt(Object value, int row, int column) { - int financialTransactionRow; - // just prevent too much result - Object currentRow = cacheDataList.get(row); - if (currentRow instanceof FinancialTransaction) { - FinancialTransaction currentFinancialTransaction = - (FinancialTransaction) currentRow; - switch (column) { - case 0: - //update - currentFinancialTransaction.setTransactionDate((Date) value); - break; - case 1: - currentFinancialTransaction.setEntryBook((EntryBook) value); - break; - } - // notify service for modification - financialTransactionService. - updateFinancialTransaction(currentFinancialTransaction); - //update the financial transaction in entire - financialTransactionRow = - cacheDataList.indexOf(currentRow); - } else if (currentRow instanceof Entry) { - Entry currentEntry = (Entry) currentRow; - switch (column) { - case 2: - currentEntry.setVoucher((String) value); - break; - case 3: - currentEntry.setAccount((Account) value); - break; - case 4: - currentEntry.setDescription((String) value); - break; - case 5: - currentEntry.setAmount((BigDecimal) value); - currentEntry.setDebit(true); - break; - case 6: - currentEntry.setAmount((BigDecimal) value); - currentEntry.setDebit(false); - break; - case 8: - currentEntry.setLettering((String) value); - break; - } - - financialTransactionService.updateEntry(currentEntry); - - //update the financial transaction in entire - financialTransactionRow = - cacheDataList.indexOf(((Entry) currentRow). - getFinancialTransaction()); - } - //on recharge la liste - cacheDataList = getDataList(financialTransactionSearch); - fireTableDataChanged(); - } - - public Object getElementAt(int row) { - Object currentRow = cacheDataList.get(row); - return currentRow; - } - - - /** - * Delete selected row in table (could be transaction or entry). - * <p/> - * Called by model. - * - * @param object - * @param row - */ - public void removeObject(Object object, int row) { - Object currentRow = cacheDataList.get(row); - if (currentRow instanceof FinancialTransaction) { - FinancialTransaction currentTransaction = - (FinancialTransaction) currentRow; - financialTransactionService.removeFinancialTransaction(currentTransaction); - } else if (currentRow instanceof Entry) { - Entry currentEntry = (Entry) currentRow; - financialTransactionService.removeEntry(currentEntry); - } - //on recharge la liste - cacheDataList = getDataList(financialTransactionSearch); - fireTableDataChanged(); - } - - /** - * @param value - * @param description - * @param row - * @return int: indexOf new Entry - */ - public int addEmptyEntry(Object value, String description, int row) { - FinancialTransaction currentTransaction = null; - Object currentRow = cacheDataList.get(row); - Entry entry = new EntryImpl(); - entry.setAmount(BigDecimal.ZERO); - if (description != null) { - entry.setDescription(description); - } - //check if current row is a transaction or an entry - if (currentRow instanceof FinancialTransaction) { - currentTransaction = (FinancialTransaction) currentRow; - } else if (currentRow instanceof Entry) { - Entry currentEntry = (Entry) currentRow; - //get back the parent transaction of the entry - currentTransaction = currentEntry.getFinancialTransaction(); - } - //create it - entry.setFinancialTransaction(currentTransaction); - Entry newEntry = financialTransactionService.createEntry(entry); - - //on recharge la liste - cacheDataList = getDataList(financialTransactionSearch); - int newrow = cacheDataList.indexOf(newEntry); - fireTableRowsInserted(newrow, newrow); - return newrow; - } - - /** - * @param value - * @param entry - * @param row - * @return int: indexOf new Entry - */ - public int addEntry(Object value, Entry entry, int row) { - FinancialTransaction currentTransaction = null; - int financialTransactionRow = 0; - Object currentRow = cacheDataList.get(row); - //check if current row is a transaction or an entry - if (currentRow instanceof FinancialTransaction) { - currentTransaction = (FinancialTransaction) currentRow; - //update the financial transaction in entire - financialTransactionRow = - getDataList(financialTransactionSearch).indexOf(currentRow); - } else if (currentRow instanceof Entry) { - Entry currentEntry = (Entry) currentRow; - //get back the parent transaction of the entry - currentTransaction = currentEntry.getFinancialTransaction(); - //update the financial transaction in entire - financialTransactionRow = - getDataList(financialTransactionSearch).indexOf(((Entry) currentRow). - getFinancialTransaction()); - } - //create it - entry.setFinancialTransaction(currentTransaction); - Entry newEntry = financialTransactionService.createEntry(entry); - fireTableRowsUpdated(financialTransactionRow, getRowCount() - 1); - - //on recharge la liste - cacheDataList = getDataList(financialTransactionSearch); - int newrow = cacheDataList.indexOf(newEntry); - fireTableRowsInserted(newrow, newrow); - return newrow; - } - - @Override public void notifyMethod(String serviceName, String methodeName) { if ((serviceName.contains("FinancialTransaction") || methodeName.contains("importEntries") || methodeName.contains("importAll")) && !methodeName.contains("search")) { //on recharge la liste - cacheDataList = getDataList(financialTransactionSearch); - fireTableDataChanged(); + refresh(financialTransactionSearch); } } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchView.jaxx =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchView.jaxx 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchView.jaxx 2013-06-19 07:42:34 UTC (rev 3683) @@ -34,6 +34,7 @@ org.chorem.lima.enums.ComboBoxLetterEnum org.chorem.lima.FinancialStatementWayEnum org.chorem.lima.enums.ComboBoxOperatorsEnum + org.chorem.lima.ui.financialtransaction.FinancialTransactionDefaultTable org.chorem.lima.ui.financialtransactionsearch.FinancialTransactionSearchTableModel org.chorem.lima.ui.financialtransactionsearch.FinancialTransactionSearchTable </import> @@ -58,8 +59,37 @@ ]]> </script> - <row> + <cell fill="both"> + <JToolBar floatable="false"> + <JButton toolTipText="lima.filter.date" + actionIcon='filter-transaction-date' + onActionPerformed="getHandler().refresh()"/> + <JButton toolTipText="lima.filter.entrybook" + actionIcon='filter-transaction-entrybook' + onActionPerformed="getHandler().refresh()"/> + <JButton toolTipText="lima.filter.voucher" + actionIcon='filter-transaction-voucher' + onActionPerformed="getHandler().refresh()"/> + <JButton toolTipText="lima.filter.account" + actionIcon='filter-transaction-account' + onActionPerformed="getHandler().refresh()"/> + <JButton toolTipText="lima.filter.description" + actionIcon='filter-transaction-description' + onActionPerformed="getHandler().refresh()"/> + <JButton toolTipText="lima.filter.letter" + actionIcon='filter-transaction-letter' + onActionPerformed="getHandler().refresh()"/> + <JButton toolTipText="lima.filter.amount" + actionIcon='filter-transaction-amount' + onActionPerformed="getHandler().refresh()"/> + <JToolBar.Separator/> + <JButton toolTipText="{ _("lima.ui.common.refresh") + " (F5)"}" actionIcon='refresh' + onActionPerformed="getHandler().refresh()"/> + </JToolBar> + </cell> + </row> + <row> <cell fill='both'> <Table> <row> @@ -177,9 +207,8 @@ <JScrollPane> <FinancialTransactionSearchTableModel id="financialTransactionSearchTableModel"/> - <FinancialTransactionSearchTable - id="financialTransactionSearchTable" sortable="false" rowHeight="22" - constructorParams="getHandler()" + <FinancialTransactionDefaultTable + id="financialTransactionSearchTable" rowHeight="22" model="{getFinancialTransactionSearchTableModel()}" selectionMode="{ListSelectionModel.SINGLE_SELECTION}"/> <ListSelectionModel Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchViewHandler.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchViewHandler.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionsearch/FinancialTransactionSearchViewHandler.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -25,13 +25,6 @@ package org.chorem.lima.ui.financialtransactionsearch; -import static org.nuiton.i18n.I18n._; - -import java.util.Date; - -import javax.swing.JOptionPane; -import javax.swing.ListSelectionModel; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.lima.FinancialStatementWayEnum; @@ -39,11 +32,11 @@ import org.chorem.lima.beans.FinancialTransactionSearchImpl; import org.chorem.lima.business.api.FinancialTransactionService; import org.chorem.lima.entity.Account; -import org.chorem.lima.entity.Entry; import org.chorem.lima.entity.EntryBook; -import org.chorem.lima.entity.FinancialTransaction; import org.chorem.lima.service.LimaServiceFactory; +import java.util.Date; + /** * Handler associated with financial transaction view. * @@ -189,7 +182,7 @@ * <p/> * Called by model. */ - public void deleteSelectedRow() { + /*public void deleteSelectedRow() { table = view.getFinancialTransactionSearchTable(); tableModel = view.getFinancialTransactionSearchTableModel(); @@ -302,7 +295,7 @@ //focus on first column table.changeSelection(index, 0, false, false); table.requestFocusInWindow(); - } + } */ public void refresh() { Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTable.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTable.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTable.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -25,31 +25,21 @@ package org.chorem.lima.ui.financialtransactionunbalanced; -import org.chorem.lima.entity.Account; -import org.chorem.lima.entity.EntryBook; -import org.chorem.lima.ui.celleditor.AccountTableCellEditor; -import org.chorem.lima.ui.celleditor.AccountTableCellRenderer; -import org.chorem.lima.ui.celleditor.BigDecimalTableCellEditor; -import org.chorem.lima.ui.celleditor.BigDecimalTableCellRenderer; -import org.chorem.lima.ui.celleditor.DateTableCellEditor; -import org.chorem.lima.ui.celleditor.DateTableCellRenderer; -import org.chorem.lima.ui.celleditor.EntryBookTableCellEditor; -import org.chorem.lima.ui.celleditor.EntryBookTableCellRender; -import org.chorem.lima.ui.celleditor.EntryTableCellRenderer; -import org.chorem.lima.ui.celleditor.StringTableCellEditor; import org.chorem.lima.ui.common.CellRouteHorizontalAction; import org.chorem.lima.ui.common.CellRouteVerticalAction; +import org.chorem.lima.ui.common.Column; +import org.chorem.lima.ui.financialtransaction.FinancialTransactionTableModel; import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.Highlighter; import javax.swing.*; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.math.BigDecimal; -import java.util.Date; /** * Table des transaction qui ajoute des comportement (keys). @@ -72,37 +62,6 @@ this.handler = handler; - //Get new date editor - setDefaultEditor(Date.class, new DateTableCellEditor()); - - //Get new entry book editor - setDefaultEditor(EntryBook.class, new EntryBookTableCellEditor()); - - //Get new String editor - StringTableCellEditor stringTableCellEditor = new StringTableCellEditor(); - setDefaultEditor(String.class, stringTableCellEditor); - - //Get new account editor - setDefaultEditor(Account.class, new AccountTableCellEditor()); - - //Get new amount editor - setDefaultEditor(BigDecimal.class, new BigDecimalTableCellEditor()); - - //Get new BigDecimal renderer - setDefaultRenderer(BigDecimal.class, new BigDecimalTableCellRenderer()); - - //get new Date renderer for empty cells - setDefaultRenderer(Date.class, new DateTableCellRenderer()); - - //get new String renderer for empty cells - setDefaultRenderer(String.class, new EntryTableCellRenderer()); - - //get new Account renderer for empty cells - setDefaultRenderer(Account.class, new AccountTableCellRenderer()); - - //get new EntryBook renderer for empty cells - setDefaultRenderer(EntryBook.class, new EntryBookTableCellRender()); - setShowHorizontalLines(true); setShowVerticalLines(true); setGridColor(new Color(210,210,210)); @@ -166,17 +125,34 @@ } }); - // remove input Ctrl + Del - inputMap= stringTableCellEditor.getComponent().getInputMap(JComponent.WHEN_FOCUSED); - while (inputMap != null) { - inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK)); - inputMap = inputMap.getParent(); - } - addMouseListener(new MyMouseAdapter()); } + @Override + public TableCellRenderer getCellRenderer(int row, int column) { + TableCellRenderer renderer; + FinancialTransactionTableModel tableModel = (FinancialTransactionTableModel) getModel(); + Column columnTable = tableModel.getColumn(column); + renderer = columnTable.getCellRenderer(row); + if (renderer == null) { + renderer = super.getCellRenderer(row, column); + } + return renderer; + } + + @Override + public TableCellEditor getCellEditor(int row, int column) { + TableCellEditor editor; + FinancialTransactionTableModel tableModel = (FinancialTransactionTableModel) getModel(); + Column columnTable = tableModel.getColumn(column); + editor = columnTable.getCellEditor(row); + if (editor == null) { + editor = super.getCellEditor(row, column); + } + return editor; + } + private class MyMouseAdapter extends MouseAdapter { @Override Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTableModel.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTableModel.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedTableModel.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -25,22 +25,20 @@ package org.chorem.lima.ui.financialtransactionunbalanced; -import org.chorem.lima.LimaContext; -import org.chorem.lima.entity.Account; -import org.chorem.lima.entity.Entry; -import org.chorem.lima.entity.EntryBook; import org.chorem.lima.entity.FinancialTransaction; import org.chorem.lima.entity.FiscalPeriod; +import org.chorem.lima.ui.financialtransaction.AccountColumn; +import org.chorem.lima.ui.financialtransaction.CreditColumn; +import org.chorem.lima.ui.financialtransaction.DateColumn; +import org.chorem.lima.ui.financialtransaction.DebitColumn; +import org.chorem.lima.ui.financialtransaction.DescriptionColumn; +import org.chorem.lima.ui.financialtransaction.EntryBookColumn; import org.chorem.lima.ui.financialtransaction.FinancialTransactionTableModel; -import org.nuiton.util.decorator.Decorator; -import org.nuiton.util.decorator.DecoratorProvider; +import org.chorem.lima.ui.financialtransaction.LetterColumn; +import org.chorem.lima.ui.financialtransaction.VoucherColumn; -import java.math.BigDecimal; -import java.util.Date; import java.util.List; -import static org.nuiton.i18n.I18n._; - /** * Basic transaction table model. * <p/> @@ -57,18 +55,15 @@ /** selected financial period */ protected FiscalPeriod selectedFiscalPeriod; - /** - * To decorate account objects. - */ - protected final Decorator<Account> accountDecorator; - - public FinancialTransactionUnbalancedTableModel() { - super(); - //LimaServiceFactory.addServiceListener(financialTransactionService, this); - - DecoratorProvider decoratorProvider = - LimaContext.get().getDecoratorProvider(); - accountDecorator = decoratorProvider.getDecoratorByType(Account.class); + protected void initColumns() { + columns.add(new DateColumn(this)); + columns.add(new EntryBookColumn(this)); + columns.add(new VoucherColumn(this)); + columns.add(new AccountColumn(this)); + columns.add(new DescriptionColumn(this)); + columns.add(new DebitColumn(this)); + columns.add(new CreditColumn(this)); + columns.add(new LetterColumn(this)); } /** @@ -87,257 +82,7 @@ } } - @Override - public int getColumnCount() { - return 8; - } - - @Override - public Class<?> getColumnClass(int column) { - - Class<?> result = null; - - switch (column) { - case 0: - result = Date.class; - break; - case 1: - result = EntryBook.class; - break; - case 2: - result = String.class; - break; - case 3: - result = Account.class; - break; - case 4: - result = String.class; - break; - case 5: - result = BigDecimal.class; - break; - case 6: - result = BigDecimal.class; - break; - case 7: - result = String.class; - break; - } - - return result; - } - - @Override - public String getColumnName(int column) { - String result = "n/a"; - - switch (column) { - case 0: - result = _("lima.table.date"); - break; - case 1: - result = _("lima.table.entrybook"); - break; - case 2: - result = _("lima.table.voucher"); - break; - case 3: - result = _("lima.table.account"); - break; - case 4: - result = _("lima.table.description"); - break; - case 5: - result = _("lima.table.debit"); - break; - case 6: - result = _("lima.table.credit"); - break; - case 7: - result = _("lima.table.letter"); - break; - } - - return result; - } - - @Override - public Object getValueAt(int row, int column) { - Entry entry = entries.get(row); - FinancialTransaction transaction = entry.getFinancialTransaction(); - Object result = null; - - - switch (column) { - case 0: - if (row == 0 || entries.get(row - 1).getFinancialTransaction() != transaction) { - result = transaction.getTransactionDate(); - } - break; - case 1: - if ((row == 0 || entries.get(row - 1).getFinancialTransaction() != transaction) && transaction.getEntryBook() != null) { - result = transaction.getEntryBook(); - } - break; - case 2: - result = entry.getVoucher(); - break; - case 3: // account - if (entry.getAccount() == null) { - result = null; - } else { - Account acc = entry.getAccount(); - result = accountDecorator.toString(acc); - } - break; - case 4: - result = entry.getDescription(); - break; - case 5: - result = entry.getDebit() ? entry.getAmount() : BigDecimal.ZERO; - break; - case 6: - result = entry.getDebit() ? BigDecimal.ZERO : entry.getAmount(); - break; - case 7: - result = entry.getLettering(); - break; - } - return result; - } - public void setFiscalPeriod(FiscalPeriod fiscalPeriod) { selectedFiscalPeriod = fiscalPeriod; } - - /** - * To set cells editable or not - * different condition for entry or financial transaction - */ - @Override - public boolean isCellEditable(int rowIndex, int columnIndex) { - return columnIndex > 1 - || rowIndex == 0 - || entries.get(rowIndex).getFinancialTransaction() != entries.get(rowIndex - 1).getFinancialTransaction(); - } - - - /** to modifiy financialtransaction or entry */ - @Override - public void setValueAt(Object value, int row, int column) { - - Entry entry = entries.get(row); - FinancialTransaction transaction = entry.getFinancialTransaction(); - boolean updateEntry = false; - boolean updateTransaction = false; - boolean updateBalance = false; - switch (column) { - case 0: - //update - updateTransaction = (transaction.getTransactionDate().compareTo((Date) value) != 0); - if (updateTransaction) { - transaction.setTransactionDate((Date) value); - } - break; - case 1: - EntryBook entryBook = (EntryBook) value; - updateTransaction = ((transaction.getEntryBook()) == null != (entryBook == null)) - || (transaction.getEntryBook() != null - && entryBook != null - && !transaction.getEntryBook().getCode().equals(entryBook.getCode())); - if (updateTransaction) { - transaction.setEntryBook(entryBook); - } - break; - case 2: - String voucher = ((String) value).trim(); - - updateEntry = (entry.getVoucher() == null || entry.getVoucher().compareTo(voucher) != 0); - if (updateEntry) { - entry.setVoucher(voucher); - } - break; - case 3: - Account account = (Account) value; - updateEntry = ((entry.getAccount()) == null != (account == null)) - || (entry.getAccount() != null - && account != null - && !entry.getAccount().getAccountNumber().equals(account.getAccountNumber())); - if (updateEntry) { - entry.setAccount(account); - } - break; - case 4: - String description = ((String) value).trim(); - - updateEntry = (entry.getDescription() == null || entry.getDescription().compareTo(description) != 0); - if (updateEntry) { - entry.setDescription(description); - } - break; - case 5: - BigDecimal debit = (BigDecimal) value; - updateEntry = (debit.signum() > 0 && (!entry.isDebit() || entry.getAmount().compareTo(debit) != 0)); - if (updateEntry) { - entry.setAmount(debit); - entry.setDebit(true); - updateBalance = true; - } - break; - case 6: - BigDecimal credit= (BigDecimal) value; - updateEntry = (credit.signum() > 0 && (entry.isDebit() || entry.getAmount().compareTo(credit) != 0)); - if (updateEntry) { - entry.setAmount(credit); - entry.setDebit(false); - updateBalance = true; - } - break; - case 8: - String lettering = ((String) value).trim(); - - updateEntry = (entry.getLettering().compareTo(lettering) != 0); - if (updateEntry) { - entry.setLettering(lettering); - } - break; - } - - // some modification must update all other - // first row modification update following rows - if (updateEntry) { - financialTransactionService.updateEntry(entry); - if (updateBalance) { - int firstRow = indexOf(transaction); - int lastRow = firstRow + transaction.sizeEntry() - 1; - fireTableRowsUpdated(firstRow, lastRow); - } else { - fireTableCellUpdated(row, column); - } - if (log.isDebugEnabled()) { - log.debug("Update Entry"); - } - } else if (updateTransaction) { - financialTransactionService.updateFinancialTransaction(transaction); - fireTableCellUpdated(row, column); - if (log.isDebugEnabled()) { - log.debug("Update transaction"); - } - } else { - if (log.isDebugEnabled()) { - log.debug("No Update"); - } - } - } - - - - /*@Override - public void notifyMethod(String serviceName, String methodeName) { - if (serviceName.contains("FinancialTransaction") || - methodeName.contains("importEntries") || - methodeName.contains("importAll")) { - refresh(); - } - }*/ } Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedView.jaxx =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedView.jaxx 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedView.jaxx 2013-06-19 07:42:34 UTC (rev 3683) @@ -29,6 +29,7 @@ javax.swing.DefaultListSelectionModel org.chorem.lima.entity.FiscalPeriod org.chorem.lima.ui.combobox.FiscalPeriodComboBoxModel + org.chorem.lima.ui.financialtransaction.FinancialTransactionDefaultTable </import> <FinancialTransactionUnbalancedViewHandler id="handler" javaBean="new FinancialTransactionUnbalancedViewHandler(this)"/> @@ -90,10 +91,9 @@ <JScrollPane> <FinancialTransactionUnbalancedTableModel id="financialTransactionUnbalancedTableModel"/> - <FinancialTransactionUnbalancedTable + <FinancialTransactionDefaultTable id="financialTransactionUnbalancedTable" rowHeight="22" - constructorParams="getHandler()" selectionModel='{selectionModel}' model="{getFinancialTransactionUnbalancedTableModel()}"/> </JScrollPane> Modified: trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedViewHandler.java =================================================================== --- trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedViewHandler.java 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/java/org/chorem/lima/ui/financialtransactionunbalanced/FinancialTransactionUnbalancedViewHandler.java 2013-06-19 07:42:34 UTC (rev 3683) @@ -31,6 +31,7 @@ import org.chorem.lima.entity.EntryImpl; import org.chorem.lima.entity.FinancialTransaction; import org.chorem.lima.ui.combobox.FiscalPeriodComboBoxModel; +import org.chorem.lima.ui.financialtransaction.FinancialTransactionDefaultTable; import javax.swing.*; import javax.swing.table.TableCellEditor; @@ -75,7 +76,7 @@ //add a new entry to the selected transaction public void addEntry() { - FinancialTransactionUnbalancedTable table = view.getFinancialTransactionUnbalancedTable(); + FinancialTransactionDefaultTable table = view.getFinancialTransactionUnbalancedTable(); FinancialTransactionUnbalancedTableModel tableModel = view.getFinancialTransactionUnbalancedTableModel(); int indexSelectedRow = table.getSelectedRow(); @@ -114,7 +115,7 @@ */ public void deleteSelectedEntry() { - FinancialTransactionUnbalancedTable table = view.getFinancialTransactionUnbalancedTable(); + FinancialTransactionDefaultTable table = view.getFinancialTransactionUnbalancedTable(); FinancialTransactionUnbalancedTableModel tableModel = view.getFinancialTransactionUnbalancedTableModel(); int indexSelectedRow = table.getSelectedRow(); @@ -160,7 +161,7 @@ */ public void deleteSelectedTransaction() { - FinancialTransactionUnbalancedTable table = view.getFinancialTransactionUnbalancedTable(); + FinancialTransactionDefaultTable table = view.getFinancialTransactionUnbalancedTable(); FinancialTransactionUnbalancedTableModel tableModel = view.getFinancialTransactionUnbalancedTableModel(); int indexSelectedRow = table.getSelectedRow(); @@ -199,7 +200,7 @@ } public void selectionChanged() { - FinancialTransactionUnbalancedTable table = view.getFinancialTransactionUnbalancedTable(); + FinancialTransactionDefaultTable table = view.getFinancialTransactionUnbalancedTable(); FinancialTransactionUnbalancedTableModel tableModel = view.getFinancialTransactionUnbalancedTableModel(); int selectedRow = table.getSelectedRow(); @@ -215,7 +216,7 @@ } public void balanceTransaction() { - FinancialTransactionUnbalancedTable table = view.getFinancialTransactionUnbalancedTable(); + FinancialTransactionDefaultTable table = view.getFinancialTransactionUnbalancedTable(); FinancialTransactionUnbalancedTableModel tableModel = view.getFinancialTransactionUnbalancedTableModel(); int rowSelected = table.getSelectedRow(); @@ -255,7 +256,7 @@ public void refresh() { FinancialTransactionUnbalancedTableModel tableModel = view.getFinancialTransactionUnbalancedTableModel(); - FinancialTransactionUnbalancedTable table = view.getFinancialTransactionUnbalancedTable(); + FinancialTransactionDefaultTable table = view.getFinancialTransactionUnbalancedTable(); if (table.isEditing()) { TableCellEditor editor = table.getCellEditor(); 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 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/resources/i18n/lima-swing_en_GB.properties 2013-06-19 07:42:34 UTC (rev 3683) @@ -1,5 +1,8 @@ = -= +Date= +Fitre= +Piece= lima-business.document.entrybooks= lima-business.document.generalentrybook= lima.about.translate.content=<h3>How to translate Lima</h3>You can help us to translate or improve label in Lima.<br/><ul><li>Get the <strong>lima-i18n.csv</strong> file in the <strong>i18n</strong> directory</li><li>open it in Libre office (separator caracter is <strong>Tab</strong>)</li><li>Do you work \:)</li><li>At last, send us back the modified file</li></ul><br/>We will apply the patch before next release. @@ -133,11 +136,18 @@ lima.enum.comboboxoperator.notequal=Not equal lima.enum.comboboxoperator.superior=Superior lima.enum.comboboxoperator.superiororequal=Superior or equal -lima.enum.comboboxperiod.date=Date +lima.enum.comboboxperiod.date= lima.enum.comboboxperiod.financialperiod=Financial period lima.enum.comboboxperiod.fiscalperiod=Fiscal period lima.enum.comboboxperiod.period=Period lima.error.errorpane.htmlmessage=<html><body><b>An application error happened</b>\:<br/>%s</body></html> +lima.filter.account= +lima.filter.amount= +lima.filter.date= +lima.filter.description= +lima.filter.entrybook= +lima.filter.letter= +lima.filter.voucher= lima.financialstatement.accounts=Account list on debit and on credit lima.financialstatement.addfinancialStatementHeadererror=Can't add financialStatementHeader lima.financialstatement.check=Check accounts passing to movement @@ -203,7 +213,7 @@ lima.table.account=Account lima.table.balance=Balance lima.table.credit=Credit -lima.table.date=Date +lima.table.date= lima.table.debit=Debit lima.table.debitcredit=Debit and credit lima.table.description=Description 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 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/lima-swing/src/main/resources/i18n/lima-swing_fr_FR.properties 2013-06-19 07:42:34 UTC (rev 3683) @@ -1,5 +1,8 @@ = -= +Date= +Fitre= +Piece= lima-business.document.entrybooks= lima-business.document.generalentrybook= lima.about.translate.content=<h2>Comment traduire Lima</h2>Vous pouvez nous aider à traduire Lima.<hr/><br/><ul><li>Récupérer le fichier <strong>lima-i18n.csv</strong> dans le répertoire <strong>i18n</strong></li><li>ouvrez le avec un tableur (le caractère séprateur est une Tabultation)</li><li>Traduisez, Améliorer, ...</li><li>Enfin renvoyez-le nous</li></ul><br/>Nous intégrerons vos modifications avant la prochaine version. @@ -137,6 +140,13 @@ lima.enum.comboboxperiod.fiscalperiod=Exercice lima.enum.comboboxperiod.period=Période lima.error.errorpane.htmlmessage=<html><body><b>Une erreur s'est produite</b>\:<br/>%s</body></html> +lima.filter.account=Ajouter un filtre sur les comptes +lima.filter.amount=Ajouter un filtre sur les montants +lima.filter.date=Ajouter un filtre sur les dates +lima.filter.description=Ajouter un filtre sur les descriptions +lima.filter.entrybook=Ajouter un filtre sur les journaux +lima.filter.letter=Ajouter un filtre sur les lettres +lima.filter.voucher=Ajouter un filtre sur les pièces comptables lima.financialstatement.accounts=Liste de comptes au crédit et au débit lima.financialstatement.addfinancialStatementHeadererror=Erreur lors de l'ajout de l'entête sur la déclaration financière lima.financialstatement.check=Vérification des comptes aux postes @@ -201,7 +211,7 @@ lima.table.account=Compte lima.table.balance=Solde lima.table.credit=Crédit -lima.table.date=Date +lima.table.date= lima.table.debit=Débit lima.table.debitcredit=Débit et Crédit lima.table.description=Description @@ -268,7 +278,7 @@ lima.ui.financialtransaction.buttonback=← lima.ui.financialtransaction.buttonnext=→ lima.ui.financialtransaction.credit=Crédit -lima.ui.financialtransaction.date=Date +lima.ui.financialtransaction.date= lima.ui.financialtransaction.debit=Débit lima.ui.financialtransaction.description=Description lima.ui.financialtransaction.entrybook=Journal Added: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-account.png =================================================================== (Binary files differ) Property changes on: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-account.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-amount.png =================================================================== (Binary files differ) Property changes on: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-amount.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-date.png =================================================================== (Binary files differ) Property changes on: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-date.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-description.png =================================================================== (Binary files differ) Property changes on: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-description.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-entrybook.png =================================================================== (Binary files differ) Property changes on: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-entrybook.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-letter.png =================================================================== (Binary files differ) Property changes on: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-letter.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-voucher.png =================================================================== (Binary files differ) Property changes on: trunk/lima-swing/src/main/resources/icons/action-filter-transaction-voucher.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-06-17 13:08:18 UTC (rev 3682) +++ trunk/pom.xml 2013-06-19 07:42:34 UTC (rev 3683) @@ -371,6 +371,16 @@ <role>Développeur</role> </roles> </contributor> + <contributor> + <name>bavencoff</name> + <email>bavencoff@codelutin.com</email> + <organization>Code Lutin</organization> + <organizationUrl>http://www.codelutin.com</organizationUrl> + <timezone>Europe/Paris</timezone> + <roles> + <role>Développeur</role> + </roles> + </contributor> </contributors> <!-- ************************************************************* -->
participants (1)
-
Bavencoff@users.chorem.org