OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Rev 156 | Rev 177 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 156 Rev 174
1
/*
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 * 
3
 * 
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
5
 * 
5
 * 
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
9
 * language governing permissions and limitations under the License.
9
 * language governing permissions and limitations under the License.
10
 * 
10
 * 
11
 * When distributing the software, include this License Header Notice in each file.
11
 * When distributing the software, include this License Header Notice in each file.
12
 */
12
 */
13
 
13
 
14
 package org.openconcerto.erp.core.sales.shipment.ui;
14
 package org.openconcerto.erp.core.sales.shipment.ui;
15
 
15
 
16
import org.openconcerto.erp.config.ComptaPropsConfiguration;
16
import org.openconcerto.erp.config.ComptaPropsConfiguration;
17
import org.openconcerto.erp.core.common.ui.AbstractVenteArticleItemTable;
17
import org.openconcerto.erp.core.common.ui.AbstractVenteArticleItemTable;
18
import org.openconcerto.erp.core.common.ui.Acompte;
18
import org.openconcerto.erp.core.common.ui.Acompte;
19
import org.openconcerto.erp.core.common.ui.AcompteCellEditor;
19
import org.openconcerto.erp.core.common.ui.AcompteCellEditor;
20
import org.openconcerto.erp.core.common.ui.DeviseNumericCellEditor;
20
import org.openconcerto.erp.core.common.ui.DeviseNumericCellEditor;
21
import org.openconcerto.erp.core.common.ui.DeviseNumericHTConvertorCellEditor;
21
import org.openconcerto.erp.core.common.ui.DeviseNumericHTConvertorCellEditor;
22
import org.openconcerto.erp.core.common.ui.DeviseTableCellRenderer;
22
import org.openconcerto.erp.core.common.ui.DeviseTableCellRenderer;
23
import org.openconcerto.erp.core.common.ui.QteCellEditor;
23
import org.openconcerto.erp.core.common.ui.QteCellEditor;
24
import org.openconcerto.erp.core.common.ui.Remise;
24
import org.openconcerto.erp.core.common.ui.Remise;
25
import org.openconcerto.erp.core.finance.accounting.model.CurrencyConverter;
25
import org.openconcerto.erp.core.finance.accounting.model.CurrencyConverter;
26
import org.openconcerto.erp.core.finance.tax.model.TaxeCache;
26
import org.openconcerto.erp.core.finance.tax.model.TaxeCache;
27
import org.openconcerto.erp.core.sales.pos.io.BarcodeReader;
27
import org.openconcerto.erp.core.sales.pos.io.BarcodeReader;
28
import org.openconcerto.erp.core.sales.pos.ui.BarcodeListener;
28
import org.openconcerto.erp.core.sales.pos.ui.BarcodeListener;
29
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
29
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
30
import org.openconcerto.erp.core.sales.product.ui.ArticleRowValuesRenderer;
30
import org.openconcerto.erp.core.sales.product.ui.ArticleRowValuesRenderer;
31
import org.openconcerto.erp.core.sales.product.ui.CurrencyWithSymbolRenderer;
31
import org.openconcerto.erp.core.sales.product.ui.CurrencyWithSymbolRenderer;
32
import org.openconcerto.erp.core.sales.product.ui.DeliveredQtyRowValuesRenderer;
32
import org.openconcerto.erp.core.sales.product.ui.DeliveredQtyRowValuesRenderer;
33
import org.openconcerto.erp.core.sales.product.ui.QteUnitRowValuesRenderer;
33
import org.openconcerto.erp.core.sales.product.ui.QteUnitRowValuesRenderer;
34
import org.openconcerto.erp.core.sales.product.ui.QtyToDeliverRowValuesRenderer;
34
import org.openconcerto.erp.core.sales.product.ui.QtyToDeliverRowValuesRenderer;
35
import org.openconcerto.erp.core.sales.product.ui.ReliquatRowValuesTable;
35
import org.openconcerto.erp.core.sales.product.ui.ReliquatRowValuesTable;
36
import org.openconcerto.erp.preferences.DefaultNXProps;
36
import org.openconcerto.erp.preferences.DefaultNXProps;
37
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
37
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
38
import org.openconcerto.sql.Configuration;
38
import org.openconcerto.sql.Configuration;
39
import org.openconcerto.sql.element.SQLElement;
39
import org.openconcerto.sql.element.SQLElement;
40
import org.openconcerto.sql.model.SQLField;
40
import org.openconcerto.sql.model.SQLField;
41
import org.openconcerto.sql.model.SQLRow;
41
import org.openconcerto.sql.model.SQLRow;
42
import org.openconcerto.sql.model.SQLRowAccessor;
42
import org.openconcerto.sql.model.SQLRowAccessor;
43
import org.openconcerto.sql.model.SQLRowListRSH;
43
import org.openconcerto.sql.model.SQLRowListRSH;
44
import org.openconcerto.sql.model.SQLRowValues;
44
import org.openconcerto.sql.model.SQLRowValues;
45
import org.openconcerto.sql.model.SQLSelect;
45
import org.openconcerto.sql.model.SQLSelect;
46
import org.openconcerto.sql.model.SQLTable;
46
import org.openconcerto.sql.model.SQLTable;
47
import org.openconcerto.sql.model.UndefinedRowValuesCache;
47
import org.openconcerto.sql.model.UndefinedRowValuesCache;
48
import org.openconcerto.sql.model.Where;
48
import org.openconcerto.sql.model.Where;
49
import org.openconcerto.sql.preferences.SQLPreferences;
49
import org.openconcerto.sql.preferences.SQLPreferences;
50
import org.openconcerto.sql.sqlobject.ITextArticleWithCompletionCellEditor;
50
import org.openconcerto.sql.sqlobject.ITextArticleWithCompletionCellEditor;
51
import org.openconcerto.sql.sqlobject.ITextWithCompletion;
51
import org.openconcerto.sql.sqlobject.ITextWithCompletion;
52
import org.openconcerto.sql.users.rights.UserRights;
52
import org.openconcerto.sql.users.rights.UserRights;
53
import org.openconcerto.sql.users.rights.UserRightsManager;
53
import org.openconcerto.sql.users.rights.UserRightsManager;
54
import org.openconcerto.sql.view.list.AutoCompletionManager;
54
import org.openconcerto.sql.view.list.AutoCompletionManager;
55
import org.openconcerto.sql.view.list.CellDynamicModifier;
55
import org.openconcerto.sql.view.list.CellDynamicModifier;
56
import org.openconcerto.sql.view.list.RowValuesTable;
56
import org.openconcerto.sql.view.list.RowValuesTable;
57
import org.openconcerto.sql.view.list.RowValuesTableModel;
57
import org.openconcerto.sql.view.list.RowValuesTableModel;
58
import org.openconcerto.sql.view.list.SQLTableElement;
58
import org.openconcerto.sql.view.list.SQLTableElement;
59
import org.openconcerto.sql.view.list.SQLTextComboTableCellEditor;
59
import org.openconcerto.sql.view.list.SQLTextComboTableCellEditor;
60
import org.openconcerto.sql.view.list.ValidStateChecker;
60
import org.openconcerto.sql.view.list.ValidStateChecker;
61
import org.openconcerto.ui.table.XTableColumnModel;
61
import org.openconcerto.ui.table.XTableColumnModel;
62
import org.openconcerto.utils.DecimalUtils;
62
import org.openconcerto.utils.DecimalUtils;
63
import org.openconcerto.utils.Tuple3;
63
import org.openconcerto.utils.Tuple3;
64
import org.openconcerto.utils.cc.ITransformer;
64
import org.openconcerto.utils.cc.ITransformer;
65
import org.openconcerto.utils.i18n.TranslationManager;
65
import org.openconcerto.utils.i18n.TranslationManager;
66
 
66
 
67
import java.awt.Component;
67
import java.awt.Component;
68
import java.awt.event.ActionEvent;
68
import java.awt.event.ActionEvent;
69
import java.awt.event.HierarchyEvent;
69
import java.awt.event.HierarchyEvent;
70
import java.awt.event.HierarchyListener;
70
import java.awt.event.HierarchyListener;
71
import java.awt.event.KeyEvent;
71
import java.awt.event.KeyEvent;
72
import java.awt.event.MouseAdapter;
72
import java.awt.event.MouseAdapter;
73
import java.awt.event.MouseEvent;
73
import java.awt.event.MouseEvent;
74
import java.math.BigDecimal;
74
import java.math.BigDecimal;
75
import java.math.RoundingMode;
75
import java.math.RoundingMode;
76
import java.util.ArrayList;
76
import java.util.ArrayList;
77
import java.util.Date;
77
import java.util.Date;
78
import java.util.List;
78
import java.util.List;
79
import java.util.Vector;
79
import java.util.Vector;
80
 
80
 
81
import javax.swing.AbstractAction;
81
import javax.swing.AbstractAction;
82
import javax.swing.JButton;
82
import javax.swing.JButton;
83
import javax.swing.JFrame;
83
import javax.swing.JFrame;
84
import javax.swing.JLabel;
84
import javax.swing.JLabel;
85
import javax.swing.JPopupMenu;
85
import javax.swing.JPopupMenu;
86
import javax.swing.JTable;
86
import javax.swing.JTable;
87
import javax.swing.SwingUtilities;
87
import javax.swing.SwingUtilities;
88
import javax.swing.ToolTipManager;
88
import javax.swing.ToolTipManager;
89
import javax.swing.table.DefaultTableCellRenderer;
89
import javax.swing.table.DefaultTableCellRenderer;
90
import javax.swing.table.TableCellRenderer;
90
import javax.swing.table.TableCellRenderer;
91
 
91
 
92
public class BonDeLivraisonItemTable extends AbstractVenteArticleItemTable {
92
public class BonDeLivraisonItemTable extends AbstractVenteArticleItemTable {
93
 
93
 
94
    // private final Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
94
    // private final Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
95
 
95
 
96
    private SQLTableElement tableElementPoidsTotalLivree;
96
    private SQLTableElement tableElementPoidsTotalLivree;
97
    private SQLTable tableArticle = Configuration.getInstance().getBase().getTable("ARTICLE");
97
    private SQLTable tableArticle = Configuration.getInstance().getBase().getTable("ARTICLE");
98
    private ReliquatRowValuesTable reliquatTable;
98
    private ReliquatRowValuesTable reliquatTable;
99
 
99
 
100
    public BonDeLivraisonItemTable(List<JButton> l) {
100
    public BonDeLivraisonItemTable(List<JButton> l) {
101
        super(l);
101
        super(l);
102
    }
102
    }
103
 
103
 
104
    public void setReliquatTable(ReliquatRowValuesTable reliquatTable) {
104
    public void setReliquatTable(ReliquatRowValuesTable reliquatTable) {
105
        this.reliquatTable = reliquatTable;
105
        this.reliquatTable = reliquatTable;
106
    }
106
    }
107
 
107
 
108
    @Override
108
    @Override
109
    protected void init() {
109
    protected void init() {
110
        final SQLElement e = getSQLElement();
110
        final SQLElement e = getSQLElement();
111
 
111
 
112
        SQLPreferences prefs = new SQLPreferences(getSQLElement().getTable().getDBRoot());
112
        SQLPreferences prefs = new SQLPreferences(getSQLElement().getTable().getDBRoot());
113
        final boolean selectArticle = prefs.getBoolean(GestionArticleGlobalPreferencePanel.USE_CREATED_ARTICLE, false);
113
        final boolean selectArticle = prefs.getBoolean(GestionArticleGlobalPreferencePanel.USE_CREATED_ARTICLE, false);
114
        final boolean createAuto = prefs.getBoolean(GestionArticleGlobalPreferencePanel.CREATE_ARTICLE_AUTO, true);
114
        final boolean createAuto = prefs.getBoolean(GestionArticleGlobalPreferencePanel.CREATE_ARTICLE_AUTO, true);
115
        final boolean filterFamilleArticle = prefs.getBoolean(GestionArticleGlobalPreferencePanel.FILTER_BY_FAMILY, false);
115
        final boolean filterFamilleArticle = prefs.getBoolean(GestionArticleGlobalPreferencePanel.FILTER_BY_FAMILY, false);
116
        final boolean showEco = prefs.getBoolean(AbstractVenteArticleItemTable.SHOW_ECO_CONTRIBUTION_COLUMNS, false);
116
        final boolean showEco = prefs.getBoolean(AbstractVenteArticleItemTable.SHOW_ECO_CONTRIBUTION_COLUMNS, false);
117
        final boolean showDevise = prefs.getBoolean(AbstractVenteArticleItemTable.ARTICLE_SHOW_DEVISE, false);
117
        final boolean showDevise = prefs.getBoolean(AbstractVenteArticleItemTable.ARTICLE_SHOW_DEVISE, false);
118
 
118
 
119
        final UserRights rights = UserRightsManager.getCurrentUserRights();
119
        final UserRights rights = UserRightsManager.getCurrentUserRights();
120
        final boolean editVTPrice = rights.haveRight(EDIT_PRIX_VENTE_CODE);
120
        final boolean editVTPrice = rights.haveRight(EDIT_PRIX_VENTE_CODE);
121
        final boolean showHAPrice = rights.haveRight(SHOW_PRIX_ACHAT_CODE);
121
        final boolean showHAPrice = rights.haveRight(SHOW_PRIX_ACHAT_CODE);
122
        final boolean lockVTMinPrice = rights.haveRight(LOCK_PRIX_MIN_VENTE_CODE);
122
        final boolean lockVTMinPrice = rights.haveRight(LOCK_PRIX_MIN_VENTE_CODE);
123
 
123
 
124
        final List<SQLTableElement> list = new Vector<SQLTableElement>();
124
        final List<SQLTableElement> list = new Vector<SQLTableElement>();
125
        list.add(new SQLTableElement(e.getTable().getField("ID_STYLE")));
125
        list.add(new SQLTableElement(e.getTable().getField("ID_STYLE")));
126
 
126
 
127
        final SQLTableElement tableFamille = new SQLTableElement(e.getTable().getField("ID_FAMILLE_ARTICLE"));
127
        final SQLTableElement tableFamille = new SQLTableElement(e.getTable().getField("ID_FAMILLE_ARTICLE"));
128
        list.add(tableFamille);
128
        list.add(tableFamille);
129
        // Article
129
        // Article
130
        final SQLTableElement tableElementArticle = new SQLTableElement(e.getTable().getField("ID_ARTICLE"), true, true, true) {
130
        final SQLTableElement tableElementArticle = new SQLTableElement(e.getTable().getField("ID_ARTICLE"), true, true, true) {
131
            @Override
131
            @Override
132
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
132
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
133
                boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
133
                boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
134
                if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
134
                if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
135
                    boolean noCmdElt = vals.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
135
                    boolean noCmdElt = vals.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
136
                    return b && noCmdElt;
136
                    return b && noCmdElt;
137
                } else {
137
                } else {
138
                    return b;
138
                    return b;
139
                }
139
                }
140
 
140
 
141
            }
141
            }
142
        };
142
        };
143
        list.add(tableElementArticle);
143
        list.add(tableElementArticle);
144
 
144
 
145
        if (e.getTable().getFieldsName().contains("ID_ECO_CONTRIBUTION")) {
145
        if (e.getTable().getFieldsName().contains("ID_ECO_CONTRIBUTION")) {
146
            this.tableElementEcoID = new SQLTableElement(e.getTable().getField("ID_ECO_CONTRIBUTION"));
146
            this.tableElementEcoID = new SQLTableElement(e.getTable().getField("ID_ECO_CONTRIBUTION"));
147
            list.add(this.tableElementEcoID);
147
            list.add(this.tableElementEcoID);
148
        }
148
        }
149
 
149
 
150
        // Code article
150
        // Code article
151
        final SQLTableElement tableElementCode = new SQLTableElement(e.getTable().getField("CODE"), String.class,
151
        final SQLTableElement tableElementCode = new SQLTableElement(e.getTable().getField("CODE"), String.class,
152
                new ITextArticleWithCompletionCellEditor(e.getTable().getTable("ARTICLE"), e.getTable().getTable("ARTICLE_FOURNISSEUR"))) {
152
                new ITextArticleWithCompletionCellEditor(e.getTable().getTable("ARTICLE"), e.getTable().getTable("ARTICLE_FOURNISSEUR"))) {
153
            @Override
153
            @Override
154
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
154
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
155
                boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
155
                boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
156
                if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
156
                if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
157
                    boolean noCmdElt = vals.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
157
                    boolean noCmdElt = vals.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
158
                    return b && noCmdElt;
158
                    return b && noCmdElt;
159
                } else {
159
                } else {
160
                    return b;
160
                    return b;
161
                }
161
                }
162
 
162
 
163
            }
163
            }
164
        };
164
        };
165
        list.add(tableElementCode);
165
        list.add(tableElementCode);
166
        // Désignation de l'article
166
        // Désignation de l'article
167
        final SQLTableElement tableElementNom = new SQLTableElement(e.getTable().getField("NOM")) {
167
        final SQLTableElement tableElementNom = new SQLTableElement(e.getTable().getField("NOM")) {
168
            @Override
168
            @Override
169
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
169
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
170
 
170
 
171
                boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
171
                boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
172
                if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
172
                if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
173
                    boolean noCmdElt = vals.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
173
                    boolean noCmdElt = vals.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || vals.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
174
                    return b && noCmdElt;
174
                    return b && noCmdElt;
175
                } else {
175
                } else {
176
                    return b;
176
                    return b;
177
                }
177
                }
178
 
178
 
179
            }
179
            }
180
        };
180
        };
181
        list.add(tableElementNom);
181
        list.add(tableElementNom);
182
 
182
 
183
        // Désignation de l'article
183
        // Désignation de l'article
184
        final SQLTableElement tableElementDesc = new SQLTableElement(e.getTable().getField("DESCRIPTIF"));
184
        final SQLTableElement tableElementDesc = new SQLTableElement(e.getTable().getField("DESCRIPTIF"));
185
        list.add(tableElementDesc);
185
        list.add(tableElementDesc);
186
 
186
 
187
        if (e.getTable().getFieldsName().contains("DELAI")) {
187
        if (e.getTable().getFieldsName().contains("DELAI")) {
188
            final SQLTableElement tableElementDelai = new SQLTableElement(e.getTable().getField("DELAI"));
188
            final SQLTableElement tableElementDelai = new SQLTableElement(e.getTable().getField("DELAI"));
189
            list.add(tableElementDelai);
189
            list.add(tableElementDelai);
190
        }
190
        }
191
 
191
 
192
        // Valeur des métriques
192
        // Valeur des métriques
193
        final SQLTableElement tableElement_ValeurMetrique2 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_2"), Float.class) {
193
        final SQLTableElement tableElement_ValeurMetrique2 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_2"), Float.class) {
194
            @Override
194
            @Override
195
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
195
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
196
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
196
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
197
                // int mode = vals.getInt("ID_MODE_VENTE_ARTICLE");
197
                // int mode = vals.getInt("ID_MODE_VENTE_ARTICLE");
198
                if (modeNumber != null && (modeNumber.intValue() == ReferenceArticleSQLElement.A_LA_PIECE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE
198
                if (modeNumber != null && (modeNumber.intValue() == ReferenceArticleSQLElement.A_LA_PIECE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE
199
                        || modeNumber.intValue() == ReferenceArticleSQLElement.AU_METRE_LONGUEUR)) {
199
                        || modeNumber.intValue() == ReferenceArticleSQLElement.AU_METRE_LONGUEUR)) {
200
                    return false;
200
                    return false;
201
                } else {
201
                } else {
202
                    return super.isCellEditable(vals, rowIndex, columnIndex);
202
                    return super.isCellEditable(vals, rowIndex, columnIndex);
203
                }
203
                }
204
            }
204
            }
205
 
205
 
206
            @Override
206
            @Override
207
            public TableCellRenderer getTableCellRenderer() {
207
            public TableCellRenderer getTableCellRenderer() {
208
 
208
 
209
                return new ArticleRowValuesRenderer(null);
209
                return new ArticleRowValuesRenderer(null);
210
            }
210
            }
211
        };
211
        };
212
 
212
 
213
        list.add(tableElement_ValeurMetrique2);
213
        list.add(tableElement_ValeurMetrique2);
214
        final SQLTableElement tableElement_ValeurMetrique3 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_3"), Float.class) {
214
        final SQLTableElement tableElement_ValeurMetrique3 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_3"), Float.class) {
215
            @Override
215
            @Override
216
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
216
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
217
 
217
 
218
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
218
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
219
                if (modeNumber != null && (!(modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE))) {
219
                if (modeNumber != null && (!(modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE))) {
220
                    return false;
220
                    return false;
221
                } else {
221
                } else {
222
                    return super.isCellEditable(vals, rowIndex, columnIndex);
222
                    return super.isCellEditable(vals, rowIndex, columnIndex);
223
                }
223
                }
224
            }
224
            }
225
 
225
 
226
            @Override
226
            @Override
227
            public TableCellRenderer getTableCellRenderer() {
227
            public TableCellRenderer getTableCellRenderer() {
228
 
228
 
229
                return new ArticleRowValuesRenderer(null);
229
                return new ArticleRowValuesRenderer(null);
230
            }
230
            }
231
        };
231
        };
232
 
232
 
233
        list.add(tableElement_ValeurMetrique3);
233
        list.add(tableElement_ValeurMetrique3);
234
        final SQLTableElement tableElement_ValeurMetrique1 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_1"), Float.class) {
234
        final SQLTableElement tableElement_ValeurMetrique1 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_1"), Float.class) {
235
            @Override
235
            @Override
236
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
236
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
237
 
237
 
238
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
238
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
239
                if (modeNumber != null && (modeNumber.intValue() == ReferenceArticleSQLElement.A_LA_PIECE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE
239
                if (modeNumber != null && (modeNumber.intValue() == ReferenceArticleSQLElement.A_LA_PIECE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE
240
                        || modeNumber.intValue() == ReferenceArticleSQLElement.AU_METRE_LARGEUR)) {
240
                        || modeNumber.intValue() == ReferenceArticleSQLElement.AU_METRE_LARGEUR)) {
241
                    return false;
241
                    return false;
242
                } else {
242
                } else {
243
                    return super.isCellEditable(vals, rowIndex, columnIndex);
243
                    return super.isCellEditable(vals, rowIndex, columnIndex);
244
                }
244
                }
245
            }
245
            }
246
 
246
 
247
            @Override
247
            @Override
248
            public TableCellRenderer getTableCellRenderer() {
248
            public TableCellRenderer getTableCellRenderer() {
249
 
249
 
250
                return new ArticleRowValuesRenderer(null);
250
                return new ArticleRowValuesRenderer(null);
251
            }
251
            }
252
        };
252
        };
253
 
253
 
254
        list.add(tableElement_ValeurMetrique1);
254
        list.add(tableElement_ValeurMetrique1);
255
 
255
 
256
        // Prix d'achat HT de la métrique 1
256
        // Prix d'achat HT de la métrique 1
257
        final SQLTableElement tableElement_PrixMetrique1_AchatHT = new SQLTableElement(e.getTable().getField("PRIX_METRIQUE_HA_1"), BigDecimal.class) {
257
        final SQLTableElement tableElement_PrixMetrique1_AchatHT = new SQLTableElement(e.getTable().getField("PRIX_METRIQUE_HA_1"), BigDecimal.class) {
258
            protected Object getDefaultNullValue() {
258
            protected Object getDefaultNullValue() {
259
                return BigDecimal.ZERO;
259
                return BigDecimal.ZERO;
260
            }
260
            }
261
 
261
 
262
            @Override
262
            @Override
263
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
263
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
264
                return isCellNiveauEditable(vals, rowIndex, columnIndex);
264
                return isCellNiveauEditable(vals, rowIndex, columnIndex);
265
            }
265
            }
266
 
266
 
267
        };
267
        };
268
        tableElement_PrixMetrique1_AchatHT.setRenderer(new CurrencyWithSymbolRenderer());
268
        tableElement_PrixMetrique1_AchatHT.setRenderer(new CurrencyWithSymbolRenderer());
269
        list.add(tableElement_PrixMetrique1_AchatHT);
269
        list.add(tableElement_PrixMetrique1_AchatHT);
270
 
270
 
271
        // Prix de vente HT de la métrique 1
271
        // Prix de vente HT de la métrique 1
272
        SQLField field = e.getTable().getField("PRIX_METRIQUE_VT_1");
272
        SQLField field = e.getTable().getField("PRIX_METRIQUE_VT_1");
273
        final DeviseNumericHTConvertorCellEditor editorPVHT = new DeviseNumericHTConvertorCellEditor(field);
273
        final DeviseNumericHTConvertorCellEditor editorPVHT = new DeviseNumericHTConvertorCellEditor(field);
274
        final SQLTableElement tableElement_PrixMetrique1_VenteHT = new SQLTableElement(field, BigDecimal.class, editorPVHT);
274
        final SQLTableElement tableElement_PrixMetrique1_VenteHT = new SQLTableElement(field, BigDecimal.class, editorPVHT);
275
        tableElement_PrixMetrique1_VenteHT.setRenderer(new DeviseTableCellRenderer());
275
        tableElement_PrixMetrique1_VenteHT.setRenderer(new DeviseTableCellRenderer());
276
        // {
276
        // {
277
        // @Override
277
        // @Override
278
        // public TableCellRenderer getTableCellRenderer() {
278
        // public TableCellRenderer getTableCellRenderer() {
279
        //
279
        //
280
        // List<Integer> l = new ArrayList<Integer>();
280
        // List<Integer> l = new ArrayList<Integer>();
281
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_CARRE));
281
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_CARRE));
282
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_LARGEUR));
282
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_LARGEUR));
283
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_LONGUEUR));
283
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_LONGUEUR));
284
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_POID_METRECARRE));
284
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_POID_METRECARRE));
285
        // return new ArticleRowValuesRenderer(l);
285
        // return new ArticleRowValuesRenderer(l);
286
        // }
286
        // }
287
        // };
287
        // };
288
        list.add(tableElement_PrixMetrique1_VenteHT);
288
        list.add(tableElement_PrixMetrique1_VenteHT);
289
 
289
 
290
        // Prix de vente HT de la métrique 3
290
        // Prix de vente HT de la métrique 3
291
        // final SQLTableElement tableElement_PrixMetrique3_VenteHT = new
291
        // final SQLTableElement tableElement_PrixMetrique3_VenteHT = new
292
        // SQLTableElement(e.getTable().getField("PRIX_METRIQUE_VT_3"), Long.class, new
292
        // SQLTableElement(e.getTable().getField("PRIX_METRIQUE_VT_3"), Long.class, new
293
        // DeviseCellEditor());
293
        // DeviseCellEditor());
294
        // list.add(tableElement_PrixMetrique3_VenteHT);
294
        // list.add(tableElement_PrixMetrique3_VenteHT);
295
        // Prix d'achat HT de la métrique 3
295
        // Prix d'achat HT de la métrique 3
296
        // final SQLTableElement tableElement_PrixMetrique3_AchatHT = new
296
        // final SQLTableElement tableElement_PrixMetrique3_AchatHT = new
297
        // SQLTableElement(e.getTable().getField("PRIX_METRIQUE_HA_3"), Long.class, new
297
        // SQLTableElement(e.getTable().getField("PRIX_METRIQUE_HA_3"), Long.class, new
298
        // DeviseCellEditor());
298
        // DeviseCellEditor());
299
        // list.add(tableElement_PrixMetrique3_AchatHT);
299
        // list.add(tableElement_PrixMetrique3_AchatHT);
300
 
300
 
301
        if (e.getTable().getFieldsName().contains("ECO_CONTRIBUTION")) {
301
        if (e.getTable().getFieldsName().contains("ECO_CONTRIBUTION")) {
302
            this.tableElementEco = new SQLTableElement(e.getTable().getField("ECO_CONTRIBUTION"));
302
            this.tableElementEco = new SQLTableElement(e.getTable().getField("ECO_CONTRIBUTION"));
303
            list.add(this.tableElementEco);
303
            list.add(this.tableElementEco);
304
        }
304
        }
305
 
305
 
306
        SQLTableElement eltDevise = null;
306
        SQLTableElement eltDevise = null;
307
        SQLTableElement eltUnitDevise = null;
307
        SQLTableElement eltUnitDevise = null;
308
        if (showDevise) {
308
        if (showDevise) {
309
            // Devise
309
            // Devise
310
            eltDevise = new SQLTableElement(e.getTable().getField("ID_DEVISE"));
310
            eltDevise = new SQLTableElement(e.getTable().getField("ID_DEVISE"));
311
            list.add(eltDevise);
311
            list.add(eltDevise);
312
 
312
 
313
            // Prix vente devise
313
            // Prix vente devise
314
            eltUnitDevise = new SQLTableElement(e.getTable().getField("PV_U_DEVISE"), BigDecimal.class) {
314
            eltUnitDevise = new SQLTableElement(e.getTable().getField("PV_U_DEVISE"), BigDecimal.class) {
315
                @Override
315
                @Override
316
                public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
316
                public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
317
                    return isCellNiveauEditable(vals, rowIndex, columnIndex);
317
                    return isCellNiveauEditable(vals, rowIndex, columnIndex);
318
                }
318
                }
319
            };
319
            };
320
            eltUnitDevise.setRenderer(new DeviseTableCellRenderer());
320
            eltUnitDevise.setRenderer(new DeviseTableCellRenderer());
321
            list.add(eltUnitDevise);
321
            list.add(eltUnitDevise);
322
        }
322
        }
323
 
323
 
324
        SQLTableElement qteU = new SQLTableElement(e.getTable().getField("QTE_UNITAIRE"), BigDecimal.class) {
324
        SQLTableElement qteU = new SQLTableElement(e.getTable().getField("QTE_UNITAIRE"), BigDecimal.class) {
325
            @Override
325
            @Override
326
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
326
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
327
 
327
 
328
                SQLRowAccessor row = vals.getForeign("ID_UNITE_VENTE");
328
                SQLRowAccessor row = vals.getForeign("ID_UNITE_VENTE");
329
                if (row != null && !row.isUndefined() && row.getBoolean("A_LA_PIECE")) {
329
                if (row != null && !row.isUndefined() && row.getBoolean("A_LA_PIECE")) {
330
                    return false;
330
                    return false;
331
                } else {
331
                } else {
332
                    return super.isCellEditable(vals, rowIndex, columnIndex);
332
                    return super.isCellEditable(vals, rowIndex, columnIndex);
333
                }
333
                }
334
            }
334
            }
335
 
335
 
336
            protected Object getDefaultNullValue() {
336
            protected Object getDefaultNullValue() {
337
                return BigDecimal.ZERO;
337
                return BigDecimal.ZERO;
338
            }
338
            }
339
 
339
 
340
            @Override
340
            @Override
341
            public TableCellRenderer getTableCellRenderer() {
341
            public TableCellRenderer getTableCellRenderer() {
342
                return new QteUnitRowValuesRenderer();
342
                return new QteUnitRowValuesRenderer();
343
            }
343
            }
344
        };
344
        };
345
        list.add(qteU);
345
        list.add(qteU);
346
 
346
 
347
        SQLTableElement uniteVente = new SQLTableElement(e.getTable().getField("ID_UNITE_VENTE"));
347
        SQLTableElement uniteVente = new SQLTableElement(e.getTable().getField("ID_UNITE_VENTE"));
348
        list.add(uniteVente);
348
        list.add(uniteVente);
349
 
349
 
350
        // Quantité
350
        // Quantité
351
        this.qte = new SQLTableElement(e.getTable().getField("QTE"), Integer.class, new QteCellEditor()) {
351
        this.qte = new SQLTableElement(e.getTable().getField("QTE"), Integer.class, new QteCellEditor()) {
352
            protected Object getDefaultNullValue() {
352
            protected Object getDefaultNullValue() {
353
                return Integer.valueOf(0);
353
                return Integer.valueOf(0);
354
            }
354
            }
355
 
355
 
356
            @Override
356
            @Override
357
            public TableCellRenderer getTableCellRenderer() {
357
            public TableCellRenderer getTableCellRenderer() {
358
 
358
 
359
                return new QtyToDeliverRowValuesRenderer();
359
                return new QtyToDeliverRowValuesRenderer();
360
            }
360
            }
361
 
361
 
362
        };
362
        };
363
        list.add(this.qte);
363
        list.add(this.qte);
364
 
364
 
365
        // Mode de vente
365
        // Mode de vente
366
        final SQLTableElement tableElement_ModeVente = new SQLTableElement(e.getTable().getField("ID_MODE_VENTE_ARTICLE"));
366
        final SQLTableElement tableElement_ModeVente = new SQLTableElement(e.getTable().getField("ID_MODE_VENTE_ARTICLE"));
367
        list.add(tableElement_ModeVente);
367
        list.add(tableElement_ModeVente);
368
        final SQLField prixAchatHTField = e.getTable().getField("PA_HT");
368
        final SQLField prixAchatHTField = e.getTable().getField("PA_HT");
369
        final DeviseNumericCellEditor editorPAchatHT = new DeviseNumericCellEditor(prixAchatHTField);
369
        final DeviseNumericCellEditor editorPAchatHT = new DeviseNumericCellEditor(prixAchatHTField);
370
 
370
 
371
        this.ha = new SQLTableElement(prixAchatHTField, BigDecimal.class, editorPAchatHT) {
371
        this.ha = new SQLTableElement(prixAchatHTField, BigDecimal.class, editorPAchatHT) {
372
            protected Object getDefaultNullValue() {
372
            protected Object getDefaultNullValue() {
373
                return BigDecimal.ZERO;
373
                return BigDecimal.ZERO;
374
            }
374
            }
375
 
375
 
376
            @Override
376
            @Override
377
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
377
            public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
378
                return isCellNiveauEditable(vals, rowIndex, columnIndex);
378
                return isCellNiveauEditable(vals, rowIndex, columnIndex);
379
            }
379
            }
380
        };
380
        };
381
        this.ha.setRenderer(new CurrencyWithSymbolRenderer());
381
        this.ha.setRenderer(new CurrencyWithSymbolRenderer());
382
 
382
 
383
        list.add(this.ha);
383
        list.add(this.ha);
384
 
384
 
385
        // Prix d'achat unitaire HT
385
        // Prix d'achat unitaire HT
386
        // final SQLTableElement tableElement_PrixAchat_HT = new
386
        // final SQLTableElement tableElement_PrixAchat_HT = new
387
        // SQLTableElement(e.getTable().getField("PA_HT"), Long.class, new DeviseCellEditor());
387
        // SQLTableElement(e.getTable().getField("PA_HT"), Long.class, new DeviseCellEditor());
388
        // list.add(tableElement_PrixAchat_HT);
388
        // list.add(tableElement_PrixAchat_HT);
389
        // Prix de vente unitaire HT
389
        // Prix de vente unitaire HT
390
        final SQLTableElement tableElement_PrixVente_HT = new SQLTableElement(e.getTable().getField("PV_HT"), BigDecimal.class);
390
        final SQLTableElement tableElement_PrixVente_HT = new SQLTableElement(e.getTable().getField("PV_HT"), BigDecimal.class);
391
        // , new DeviseCellEditor()) {
391
        // , new DeviseCellEditor()) {
392
        // @Override
392
        // @Override
393
        // public TableCellRenderer getTableCellRenderer() {
393
        // public TableCellRenderer getTableCellRenderer() {
394
        // List<Integer> l = new ArrayList<Integer>();
394
        // List<Integer> l = new ArrayList<Integer>();
395
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.A_LA_PIECE));
395
        // l.add(Integer.valueOf(ReferenceArticleSQLElement.A_LA_PIECE));
396
        // return new ArticleRowValuesRenderer(l);
396
        // return new ArticleRowValuesRenderer(l);
397
        // }
397
        // }
398
        // };
398
        // };
399
        tableElement_PrixVente_HT.setRenderer(new DeviseTableCellRenderer());
399
        tableElement_PrixVente_HT.setRenderer(new DeviseTableCellRenderer());
400
        list.add(tableElement_PrixVente_HT);
400
        list.add(tableElement_PrixVente_HT);
401
 
401
 
402
        // TVA
402
        // TVA
403
        this.tableElementTVA = new SQLTableElement(e.getTable().getField("ID_TAXE"));
403
        this.tableElementTVA = new SQLTableElement(e.getTable().getField("ID_TAXE"));
404
        list.add(this.tableElementTVA);
404
        list.add(this.tableElementTVA);
405
 
405
 
406
        // Quantité Livrée
406
        // Quantité Livrée
407
        final SQLTableElement tableElement_QuantiteLivree = new SQLTableElement(e.getTable().getField("QTE_LIVREE"), Integer.class) {
407
        final SQLTableElement tableElement_QuantiteLivree = new SQLTableElement(e.getTable().getField("QTE_LIVREE"), Integer.class) {
408
            @Override
408
            @Override
409
            public TableCellRenderer getTableCellRenderer() {
409
            public TableCellRenderer getTableCellRenderer() {
410
 
410
 
411
                return new DeliveredQtyRowValuesRenderer();
411
                return new DeliveredQtyRowValuesRenderer();
412
            }
412
            }
413
 
413
 
414
            protected Object getDefaultNullValue() {
414
            protected Object getDefaultNullValue() {
415
                return Integer.valueOf(0);
415
                return Integer.valueOf(0);
416
            }
416
            }
417
        };
417
        };
418
        list.add(tableElement_QuantiteLivree);
418
        list.add(tableElement_QuantiteLivree);
419
 
419
 
420
        // Poids piece
420
        // Poids piece
421
        SQLTableElement tableElementPoids = new SQLTableElement(e.getTable().getField("POIDS"), Float.class);
421
        SQLTableElement tableElementPoids = new SQLTableElement(e.getTable().getField("POIDS"), Float.class);
422
        list.add(tableElementPoids);
422
        list.add(tableElementPoids);
423
 
423
 
424
        // Poids total
424
        // Poids total
425
        this.tableElementPoidsTotal = new SQLTableElement(e.getTable().getField("T_POIDS"), Float.class);
425
        this.tableElementPoidsTotal = new SQLTableElement(e.getTable().getField("T_POIDS"), Float.class);
426
        list.add(this.tableElementPoidsTotal);
426
        list.add(this.tableElementPoidsTotal);
427
 
427
 
428
        // Poids total Livré
428
        // Poids total Livré
429
        this.tableElementPoidsTotalLivree = new SQLTableElement(e.getTable().getField("T_POIDS_LIVREE"), Float.class);
429
        this.tableElementPoidsTotalLivree = new SQLTableElement(e.getTable().getField("T_POIDS_LIVREE"), Float.class);
430
        list.add(this.tableElementPoidsTotalLivree);
430
        list.add(this.tableElementPoidsTotalLivree);
431
 
431
 
432
        // Packaging
432
        // Packaging
433
        if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.ITEM_PACKAGING, false)) {
433
        if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.ITEM_PACKAGING, false)) {
434
 
434
 
435
            SQLTableElement poidsColis = new SQLTableElement(e.getTable().getField("POIDS_COLIS_NET"), BigDecimal.class);
435
            SQLTableElement poidsColis = new SQLTableElement(e.getTable().getField("POIDS_COLIS_NET"), BigDecimal.class);
436
            list.add(poidsColis);
436
            list.add(poidsColis);
437
 
437
 
438
            SQLTableElement nbColis = new SQLTableElement(e.getTable().getField("NB_COLIS"), Integer.class);
438
            SQLTableElement nbColis = new SQLTableElement(e.getTable().getField("NB_COLIS"), Integer.class);
439
            list.add(nbColis);
439
            list.add(nbColis);
440
 
440
 
441
            final SQLTableElement totalPoidsColis = new SQLTableElement(e.getTable().getField("T_POIDS_COLIS_NET"), BigDecimal.class);
441
            final SQLTableElement totalPoidsColis = new SQLTableElement(e.getTable().getField("T_POIDS_COLIS_NET"), BigDecimal.class);
442
            list.add(totalPoidsColis);
442
            list.add(totalPoidsColis);
443
 
443
 
444
            poidsColis.addModificationListener(totalPoidsColis);
444
            poidsColis.addModificationListener(totalPoidsColis);
445
            nbColis.addModificationListener(totalPoidsColis);
445
            nbColis.addModificationListener(totalPoidsColis);
446
            totalPoidsColis.setModifier(new CellDynamicModifier() {
446
            totalPoidsColis.setModifier(new CellDynamicModifier() {
447
                public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
447
                public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
448
                    final Object o2 = row.getObject("POIDS_COLIS_NET");
448
                    final Object o2 = row.getObject("POIDS_COLIS_NET");
449
                    final Object o3 = row.getObject("NB_COLIS");
449
                    final Object o3 = row.getObject("NB_COLIS");
450
                    if (o2 != null && o3 != null) {
450
                    if (o2 != null && o3 != null) {
451
                        BigDecimal poids = (BigDecimal) o2;
451
                        BigDecimal poids = (BigDecimal) o2;
452
                        int nb = (Integer) o3;
452
                        int nb = (Integer) o3;
453
                        return poids.multiply(new BigDecimal(nb), DecimalUtils.HIGH_PRECISION).setScale(totalPoidsColis.getDecimalDigits(), RoundingMode.HALF_UP);
453
                        return poids.multiply(new BigDecimal(nb), DecimalUtils.HIGH_PRECISION).setScale(totalPoidsColis.getDecimalDigits(), RoundingMode.HALF_UP);
454
                    } else {
454
                    } else {
455
                        return row.getObject("T_POIDS_COLIS_NET");
455
                        return row.getObject("T_POIDS_COLIS_NET");
456
                    }
456
                    }
457
                }
457
                }
458
            });
458
            });
459
 
459
 
460
        }
460
        }
461
 
461
 
462
        // Service
462
        // Service
463
        // this.service = new SQLTableElement(e.getTable().getField("SERVICE"), Boolean.class);
463
        // this.service = new SQLTableElement(e.getTable().getField("SERVICE"), Boolean.class);
464
        // list.add(this.service);
464
        // list.add(this.service);
465
 
465
 
466
        if (showDevise) {
466
        if (showDevise) {
467
            // Total HT
467
            // Total HT
468
            this.tableElementTotalDevise = new SQLTableElement(e.getTable().getField("PV_T_DEVISE"), BigDecimal.class) {
468
            this.tableElementTotalDevise = new SQLTableElement(e.getTable().getField("PV_T_DEVISE"), BigDecimal.class) {
469
                @Override
469
                @Override
470
                public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
470
                public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
471
                    return isCellNiveauEditable(vals, rowIndex, columnIndex);
471
                    return isCellNiveauEditable(vals, rowIndex, columnIndex);
472
                }
472
                }
473
            };
473
            };
474
            this.tableElementTotalDevise.setRenderer(new DeviseTableCellRenderer());
474
            this.tableElementTotalDevise.setRenderer(new DeviseTableCellRenderer());
475
            list.add(tableElementTotalDevise);
475
            list.add(tableElementTotalDevise);
476
        }
476
        }
477
 
477
 
478
        final SQLField fieldRemise = e.getTable().getField("POURCENT_REMISE");
478
        final SQLField fieldRemise = e.getTable().getField("POURCENT_REMISE");
479
 
479
 
480
        if (e.getTable().getFieldsName().contains("MONTANT_REMISE")) {
480
        if (e.getTable().getFieldsName().contains("MONTANT_REMISE")) {
481
            tableElementRemise = new SQLTableElement(e.getTable().getField("POURCENT_REMISE"), Acompte.class, new AcompteCellEditor("POURCENT_REMISE", "MONTANT_REMISE")) {
481
            tableElementRemise = new SQLTableElement(e.getTable().getField("POURCENT_REMISE"), Acompte.class, new AcompteCellEditor("POURCENT_REMISE", "MONTANT_REMISE")) {
482
                @Override
482
                @Override
483
                public void setValueFrom(SQLRowValues row, Object value) {
483
                public void setValueFrom(SQLRowValues row, Object value) {
484
 
484
 
485
                    if (value != null) {
485
                    if (value != null) {
486
                        Acompte a = (Acompte) value;
486
                        Acompte a = (Acompte) value;
487
                        row.put("MONTANT_REMISE", a.getMontant());
487
                        row.put("MONTANT_REMISE", a.getMontant());
488
                        row.put("POURCENT_REMISE", a.getPercent());
488
                        row.put("POURCENT_REMISE", a.getPercent());
489
                    } else {
489
                    } else {
490
                        row.put("MONTANT_REMISE", null);
490
                        row.put("MONTANT_REMISE", null);
491
                        row.put("POURCENT_REMISE", BigDecimal.ZERO);
491
                        row.put("POURCENT_REMISE", BigDecimal.ZERO);
492
                    }
492
                    }
493
                    fireModification(row);
493
                    fireModification(row);
494
                }
494
                }
495
            };
495
            };
496
            tableElementRemise.setRenderer(new DefaultTableCellRenderer() {
496
            tableElementRemise.setRenderer(new DefaultTableCellRenderer() {
497
                @Override
497
                @Override
498
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
498
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
499
                    SQLRowValues rowVals = ((RowValuesTable) table).getRowValuesTableModel().getRowValuesAt(row);
499
                    SQLRowValues rowVals = ((RowValuesTable) table).getRowValuesTableModel().getRowValuesAt(row);
500
                    JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
500
                    JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
501
                    BigDecimal percent = rowVals.getBigDecimal("POURCENT_REMISE");
501
                    BigDecimal percent = rowVals.getBigDecimal("POURCENT_REMISE");
502
                    BigDecimal amount = rowVals.getBigDecimal("MONTANT_REMISE");
502
                    BigDecimal amount = rowVals.getBigDecimal("MONTANT_REMISE");
503
                    Remise a = new Remise(percent, amount);
503
                    Remise a = new Remise(percent, amount);
504
                    label.setText(a.toPlainString(true));
504
                    label.setText(a.toPlainString(true));
505
                    return label;
505
                    return label;
506
                }
506
                }
507
            });
507
            });
508
        } else {
508
        } else {
509
            tableElementRemise = new SQLTableElement(fieldRemise) {
509
            tableElementRemise = new SQLTableElement(fieldRemise) {
510
                protected Object getDefaultNullValue() {
510
                protected Object getDefaultNullValue() {
511
                    return BigDecimal.ZERO;
511
                    return BigDecimal.ZERO;
512
                }
512
                }
513
            };
513
            };
514
        }
514
        }
515
        list.add(tableElementRemise);
515
        list.add(tableElementRemise);
516
 
516
 
517
        // Total HT
517
        // Total HT
518
        this.totalHA = new SQLTableElement(e.getTable().getField("T_PA_HT"), BigDecimal.class);
518
        this.totalHA = new SQLTableElement(e.getTable().getField("T_PA_HT"), BigDecimal.class);
519
        this.totalHA.setRenderer(new CurrencyWithSymbolRenderer());
519
        this.totalHA.setRenderer(new CurrencyWithSymbolRenderer());
520
        this.totalHA.setEditable(false);
520
        this.totalHA.setEditable(false);
521
        list.add(this.totalHA);
521
        list.add(this.totalHA);
522
 
522
 
523
        this.totalHT = new SQLTableElement(e.getTable().getField("T_PV_HT"), BigDecimal.class);
523
        this.totalHT = new SQLTableElement(e.getTable().getField("T_PV_HT"), BigDecimal.class);
524
        this.totalHT.setRenderer(new DeviseTableCellRenderer());
524
        this.totalHT.setRenderer(new DeviseTableCellRenderer());
525
 
525
 
526
        // Marge HT
526
        // Marge HT
527
        if (e.getTable().getFieldsName().contains("MARGE_HT")) {
527
        if (e.getTable().getFieldsName().contains("MARGE_HT")) {
528
 
528
 
529
            final SQLTableElement marge = new SQLTableElement(e.getTable().getField("MARGE_HT"), BigDecimal.class) {
529
            final SQLTableElement marge = new SQLTableElement(e.getTable().getField("MARGE_HT"), BigDecimal.class) {
530
                protected Object getDefaultNullValue() {
530
                protected Object getDefaultNullValue() {
531
                    return BigDecimal.ZERO;
531
                    return BigDecimal.ZERO;
532
                }
532
                }
533
 
533
 
534
                @Override
534
                @Override
535
                public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
535
                public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
536
                    return isCellNiveauEditable(vals, rowIndex, columnIndex);
536
                    return isCellNiveauEditable(vals, rowIndex, columnIndex);
537
                }
537
                }
538
 
538
 
539
            };
539
            };
540
            marge.setRenderer(new CurrencyWithSymbolRenderer());
540
            marge.setRenderer(new CurrencyWithSymbolRenderer());
541
            marge.setEditable(false);
541
            marge.setEditable(false);
542
            list.add(marge);
542
            list.add(marge);
543
            this.totalHT.addModificationListener(marge);
543
            this.totalHT.addModificationListener(marge);
544
            this.totalHA.addModificationListener(marge);
544
            this.totalHA.addModificationListener(marge);
545
            marge.setModifier(new CellDynamicModifier() {
545
            marge.setModifier(new CellDynamicModifier() {
546
                @Override
546
                @Override
547
                public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
547
                public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
548
 
548
 
549
                    BigDecimal vt = (BigDecimal) row.getObject("T_PV_HT");
549
                    BigDecimal vt = (BigDecimal) row.getObject("T_PV_HT");
550
 
550
 
551
                    BigDecimal ha = (BigDecimal) row.getObject("T_PA_HT");
551
                    BigDecimal ha = (BigDecimal) row.getObject("T_PA_HT");
552
 
552
 
553
                    final BigDecimal acomptePercent = row.getBigDecimal("POURCENT_FACTURABLE");
553
                    final BigDecimal acomptePercent = row.getBigDecimal("POURCENT_FACTURABLE");
554
                    final BigDecimal acompteMontant = row.getBigDecimal("MONTANT_FACTURABLE");
554
                    final BigDecimal acompteMontant = row.getBigDecimal("MONTANT_FACTURABLE");
555
                    Acompte acompte = new Acompte(acomptePercent, acompteMontant);
555
                    Acompte acompte = new Acompte(acomptePercent, acompteMontant);
556
                    ha = acompte.getResultFrom(ha);
556
                    ha = acompte.getResultFrom(ha);
557
                    vt = acompte.getResultFrom(vt);
557
                    vt = acompte.getResultFrom(vt);
558
 
558
 
559
                    return vt.subtract(ha).setScale(marge.getDecimalDigits(), RoundingMode.HALF_UP);
559
                    return vt.subtract(ha).setScale(marge.getDecimalDigits(), RoundingMode.HALF_UP);
560
                }
560
                }
561
 
561
 
562
            });
562
            });
563
 
563
 
564
        }
564
        }
565
 
565
 
566
        if (e.getTable().getFieldsName().contains("T_ECO_CONTRIBUTION")) {
566
        if (e.getTable().getFieldsName().contains("T_ECO_CONTRIBUTION")) {
567
            this.tableElementEcoTotal = new SQLTableElement(e.getTable().getField("T_ECO_CONTRIBUTION"));
567
            this.tableElementEcoTotal = new SQLTableElement(e.getTable().getField("T_ECO_CONTRIBUTION"));
568
            list.add(this.tableElementEcoTotal);
568
            list.add(this.tableElementEcoTotal);
569
        }
569
        }
570
 
570
 
571
        // Total HT
571
        // Total HT
572
        list.add(this.totalHT);
572
        list.add(this.totalHT);
573
        // Total TTC
573
        // Total TTC
574
        this.tableElementTotalTTC = new SQLTableElement(e.getTable().getField("T_PV_TTC"), BigDecimal.class);
574
        this.tableElementTotalTTC = new SQLTableElement(e.getTable().getField("T_PV_TTC"), BigDecimal.class);
575
        this.tableElementTotalTTC.setRenderer(new DeviseTableCellRenderer());
575
        this.tableElementTotalTTC.setRenderer(new DeviseTableCellRenderer());
576
        list.add(this.tableElementTotalTTC);
576
        list.add(this.tableElementTotalTTC);
577
 
577
 
578
        if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
578
        if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
579
            final SQLTableElement tableCmdElt = new SQLTableElement(e.getTable().getField("ID_COMMANDE_CLIENT_ELEMENT"));
579
            final SQLTableElement tableCmdElt = new SQLTableElement(e.getTable().getField("ID_COMMANDE_CLIENT_ELEMENT"));
580
            list.add(tableCmdElt);
580
            list.add(tableCmdElt);
581
        }
581
        }
582
 
582
 
583
        SQLRowValues defautRow = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(e.getTable()));
583
        SQLRowValues defautRow = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(e.getTable()));
584
        defautRow.put("ID_TAXE", TaxeCache.getCache().getFirstTaxe().getID());
584
        defautRow.put("ID_TAXE", TaxeCache.getCache().getFirstTaxe().getID());
585
        defautRow.put("CODE", "");
585
        defautRow.put("CODE", "");
586
        defautRow.put("NOM", "");
586
        defautRow.put("NOM", "");
587
        final RowValuesTableModel model = new RowValuesTableModel(e, list, e.getTable().getField("NOM"), false, defautRow) {
587
        final RowValuesTableModel model = new RowValuesTableModel(e, list, e.getTable().getField("NOM"), false, defautRow) {
588
            @Override
588
            @Override
589
            public void commitData() {
589
            public void commitData() {
590
                int size = getRowCount();
590
                int size = getRowCount();
591
                for (int i = 0; i < size; i++) {
591
                for (int i = 0; i < size; i++) {
592
                    SQLRowValues rowVals = getRowValuesAt(i);
592
                    SQLRowValues rowVals = getRowValuesAt(i);
593
                    if (rowVals.getObject("PV_U_DEVISE") == null) {
593
                    if (rowVals.getObject("PV_U_DEVISE") == null) {
594
                        rowVals.put("PV_U_DEVISE", rowVals.getObject("PRIX_METRIQUE_VT_1"));
594
                        rowVals.put("PV_U_DEVISE", rowVals.getObject("PRIX_METRIQUE_VT_1"));
595
                        final BigDecimal globalQty = rowVals.getBigDecimal("QTE_UNITAIRE").multiply(new BigDecimal(rowVals.getInt("QTE")));
595
                        final BigDecimal globalQty = rowVals.getBigDecimal("QTE_UNITAIRE").multiply(new BigDecimal(rowVals.getInt("QTE")));
596
                        rowVals.put("PV_T_DEVISE", rowVals.getBigDecimal("PRIX_METRIQUE_VT_1").multiply(globalQty));
596
                        rowVals.put("PV_T_DEVISE", rowVals.getBigDecimal("PRIX_METRIQUE_VT_1").multiply(globalQty));
597
                    }
597
                    }
598
                }
598
                }
599
                super.commitData();
599
                super.commitData();
600
            }
600
            }
601
        };
601
        };
602
        this.setModel(model);
602
        this.setModel(model);
603
        this.table = new RowValuesTable(model, getConfigurationFile());
603
        this.table = new RowValuesTable(model, getConfigurationFile());
604
        ToolTipManager.sharedInstance().unregisterComponent(this.table);
604
        ToolTipManager.sharedInstance().unregisterComponent(this.table);
605
        ToolTipManager.sharedInstance().unregisterComponent(this.table.getTableHeader());
605
        ToolTipManager.sharedInstance().unregisterComponent(this.table.getTableHeader());
606
 
606
 
607
        if (filterFamilleArticle) {
607
        if (filterFamilleArticle) {
608
            ((SQLTextComboTableCellEditor) tableElementArticle.getTableCellEditor(this.table)).setDynamicWhere(e.getTable().getTable("ARTICLE").getField("ID_FAMILLE_ARTICLE"));
608
            ((SQLTextComboTableCellEditor) tableElementArticle.getTableCellEditor(this.table)).setDynamicWhere(e.getTable().getTable("ARTICLE").getField("ID_FAMILLE_ARTICLE"));
609
        }
609
        }
610
 
610
 
611
        List<String> completionField = new ArrayList<String>();
611
        List<String> completionField = new ArrayList<String>();
612
        final SQLTable sqlTableArticle = ((ComptaPropsConfiguration) Configuration.getInstance()).getRootSociete().getTable("ARTICLE");
612
        final SQLTable sqlTableArticle = ((ComptaPropsConfiguration) Configuration.getInstance()).getRootSociete().getTable("ARTICLE");
613
        if (showDevise) {
613
        if (showDevise) {
614
            completionField.add("CODE_DOUANIER");
614
            completionField.add("CODE_DOUANIER");
615
            completionField.add("ID_PAYS");
615
            completionField.add("ID_PAYS");
616
        }
616
        }
617
        if (e.getTable().getFieldsName().contains("ID_ECO_CONTRIBUTION")) {
617
        if (e.getTable().getFieldsName().contains("ID_ECO_CONTRIBUTION")) {
618
            completionField.add("ID_ECO_CONTRIBUTION");
618
            completionField.add("ID_ECO_CONTRIBUTION");
619
        }
619
        }
-
 
620
        completionField.add("POURCENT_REMISE");
620
        completionField.add("ID_UNITE_VENTE");
621
        completionField.add("ID_UNITE_VENTE");
621
        completionField.add("QTE_UNITAIRE");
622
        completionField.add("QTE_UNITAIRE");
622
        completionField.add("PA_HT");
623
        completionField.add("PA_HT");
623
        completionField.add("PV_HT");
624
        completionField.add("PV_HT");
624
        completionField.add("ID_TAXE");
625
        completionField.add("ID_TAXE");
625
        completionField.add("POIDS");
626
        completionField.add("POIDS");
626
        completionField.add("PRIX_METRIQUE_HA_1");
627
        completionField.add("PRIX_METRIQUE_HA_1");
627
        completionField.add("PRIX_METRIQUE_HA_2");
628
        completionField.add("PRIX_METRIQUE_HA_2");
628
        completionField.add("PRIX_METRIQUE_HA_3");
629
        completionField.add("PRIX_METRIQUE_HA_3");
629
        completionField.add("VALEUR_METRIQUE_1");
630
        completionField.add("VALEUR_METRIQUE_1");
630
        completionField.add("VALEUR_METRIQUE_2");
631
        completionField.add("VALEUR_METRIQUE_2");
631
        completionField.add("VALEUR_METRIQUE_3");
632
        completionField.add("VALEUR_METRIQUE_3");
632
        completionField.add("ID_MODE_VENTE_ARTICLE");
633
        completionField.add("ID_MODE_VENTE_ARTICLE");
633
        completionField.add("PRIX_METRIQUE_VT_1");
634
        completionField.add("PRIX_METRIQUE_VT_1");
634
        completionField.add("PRIX_METRIQUE_VT_2");
635
        completionField.add("PRIX_METRIQUE_VT_2");
635
        completionField.add("PRIX_METRIQUE_VT_3");
636
        completionField.add("PRIX_METRIQUE_VT_3");
636
        completionField.add("SERVICE");
637
        completionField.add("SERVICE");
637
        completionField.add("ID_FAMILLE_ARTICLE");
638
        completionField.add("ID_FAMILLE_ARTICLE");
638
        if (getSQLElement().getTable().getFieldsName().contains("DESCRIPTIF")) {
639
        if (getSQLElement().getTable().getFieldsName().contains("DESCRIPTIF")) {
639
            completionField.add("DESCRIPTIF");
640
            completionField.add("DESCRIPTIF");
640
        }
641
        }
641
        if (showDevise) {
642
        if (showDevise) {
642
            completionField.add("ID_DEVISE");
643
            completionField.add("ID_DEVISE");
643
            completionField.add("PV_U_DEVISE");
644
            completionField.add("PV_U_DEVISE");
644
        }
645
        }
645
        if (getSQLElement().getTable().getFieldsName().contains("QTE_ACHAT") && sqlTableArticle.getTable().getFieldsName().contains("QTE_ACHAT")) {
646
        if (getSQLElement().getTable().getFieldsName().contains("QTE_ACHAT") && sqlTableArticle.getTable().getFieldsName().contains("QTE_ACHAT")) {
646
            completionField.add("QTE_ACHAT");
647
            completionField.add("QTE_ACHAT");
647
        }
648
        }
648
 
649
 
649
        // Autocompletion
650
        // Autocompletion
650
        final AutoCompletionManager m = new AutoCompletionManager(tableElementCode, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.CODE"), this.table,
651
        final AutoCompletionManager m = new AutoCompletionManager(tableElementCode, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.CODE"), this.table,
651
                this.table.getRowValuesTableModel()) {
652
                this.table.getRowValuesTableModel()) {
652
            @Override
653
            @Override
653
            protected Object getValueFrom(SQLRow row, String field, SQLRowAccessor rowDest) {
654
            protected Object getValueFrom(SQLRow row, String field, SQLRowAccessor rowDest) {
654
                Object res = tarifCompletion(row, field, rowDest, true);
655
                Object res = tarifCompletion(row, field, rowDest, true);
655
                if (res == null) {
656
                if (res == null) {
656
                    return super.getValueFrom(row, field, rowDest);
657
                    res = super.getValueFrom(row, field, rowDest);
657
                } else {
658
                }                
-
 
659
                if (field.equals("POURCENT_REMISE")) {
658
                    return res;
660
                    return getRemiseClient(row);
659
                }
661
                }
-
 
662
                return res;
660
            }
663
            }
661
        };
664
        };
662
        m.fill("NOM", "NOM");
665
        m.fill("NOM", "NOM");
663
        m.fill("ID", "ID_ARTICLE");
666
        m.fill("ID", "ID_ARTICLE");
664
        for (String string : completionField) {
667
        for (String string : completionField) {
665
            m.fill(string, string);
668
            m.fill(string, string);
666
        }
669
        }
667
        // final Where w = new Where(sqlTableArticle.getField("OBSOLETE"), "=", Boolean.FALSE);
670
        // final Where w = new Where(sqlTableArticle.getField("OBSOLETE"), "=", Boolean.FALSE);
668
        // m.setWhere(w);
671
        // m.setWhere(w);
669
        ITransformer<SQLSelect, SQLSelect> selTrans = new ITransformer<SQLSelect, SQLSelect>() {
672
        ITransformer<SQLSelect, SQLSelect> selTrans = new ITransformer<SQLSelect, SQLSelect>() {
670
            @Override
673
            @Override
671
            public SQLSelect transformChecked(SQLSelect input) {
674
            public SQLSelect transformChecked(SQLSelect input) {
672
 
675
 
673
                // FIXME utiliser le stock sélectionné sur la ligne et non le stock par défaut de
676
                // FIXME utiliser le stock sélectionné sur la ligne et non le stock par défaut de
674
                // l'article
677
                // l'article
675
                final SQLTable tableStock = sqlTableArticle.getTable("STOCK");
678
                final SQLTable tableStock = sqlTableArticle.getTable("STOCK");
676
                input.andWhere(new Where(tableStock.getKey(), "=", sqlTableArticle.getField("ID_STOCK")));
679
                input.andWhere(new Where(tableStock.getKey(), "=", sqlTableArticle.getField("ID_STOCK")));
677
                input.setExcludeUndefined(false, tableStock);
680
                input.setExcludeUndefined(false, tableStock);
678
                Where w = new Where(sqlTableArticle.getField("OBSOLETE"), "=", Boolean.FALSE).or(new Where(input.getAlias(tableStock.getKey()), "=", tableStock.getUndefinedID()))
681
                Where w = new Where(sqlTableArticle.getField("OBSOLETE"), "=", Boolean.FALSE).or(new Where(input.getAlias(tableStock.getKey()), "=", tableStock.getUndefinedID()))
679
                        .or(new Where(input.getAlias(tableStock.getField("QTE_REEL")), ">", 0));
682
                        .or(new Where(input.getAlias(tableStock.getField("QTE_REEL")), ">", 0));
680
 
683
 
681
                if (input.getWhere() != null) {
684
                if (input.getWhere() != null) {
682
                    input.setWhere(input.getWhere().and(w));
685
                    input.setWhere(input.getWhere().and(w));
683
                } else {
686
                } else {
684
                    input.setWhere(w);
687
                    input.setWhere(w);
685
                }
688
                }
686
                input.asString();
689
                input.asString();
687
                return input;
690
                return input;
688
            }
691
            }
689
        };
692
        };
690
 
693
 
691
        m.setSelectTransformer(selTrans);
694
        m.setSelectTransformer(selTrans);
692
 
695
 
693
        if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.CAN_EXPAND_NOMENCLATURE_VT, true)) {
696
        if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.CAN_EXPAND_NOMENCLATURE_VT, true)) {
694
 
697
 
695
            table.addMouseListener(new MouseAdapter() {
698
            table.addMouseListener(new MouseAdapter() {
696
 
699
 
697
                @Override
700
                @Override
698
                public void mousePressed(MouseEvent e) {
701
                public void mousePressed(MouseEvent e) {
699
 
702
 
700
                    handlePopup(e);
703
                    handlePopup(e);
701
                }
704
                }
702
 
705
 
703
                @Override
706
                @Override
704
                public void mouseReleased(MouseEvent e) {
707
                public void mouseReleased(MouseEvent e) {
705
 
708
 
706
                    handlePopup(e);
709
                    handlePopup(e);
707
                }
710
                }
708
 
711
 
709
                public void handlePopup(MouseEvent e) {
712
                public void handlePopup(MouseEvent e) {
710
                    final int rowindex = table.getSelectedRow();
713
                    final int rowindex = table.getSelectedRow();
711
                    if (rowindex < 0)
714
                    if (rowindex < 0)
712
                        return;
715
                        return;
713
                    if (e.isPopupTrigger() && e.getComponent() instanceof JTable) {
716
                    if (e.isPopupTrigger() && e.getComponent() instanceof JTable) {
714
                        JPopupMenu popup = new JPopupMenu();
717
                        JPopupMenu popup = new JPopupMenu();
715
                        popup.add(new AbstractAction(TranslationManager.getInstance().getTranslationForItem("product.bom.expand")) {
718
                        popup.add(new AbstractAction(TranslationManager.getInstance().getTranslationForItem("product.bom.expand")) {
716
 
719
 
717
                            @Override
720
                            @Override
718
                            public void actionPerformed(ActionEvent arg0) {
721
                            public void actionPerformed(ActionEvent arg0) {
719
                                expandNomenclature(rowindex, m, EXPAND_TYPE.EXPAND);
722
                                expandNomenclature(rowindex, m, EXPAND_TYPE.EXPAND);
720
                            }
723
                            }
721
                        });
724
                        });
722
                        popup.add(new AbstractAction(TranslationManager.getInstance().getTranslationForItem("product.bom.expose")) {
725
                        popup.add(new AbstractAction(TranslationManager.getInstance().getTranslationForItem("product.bom.expose")) {
723
 
726
 
724
                            @Override
727
                            @Override
725
                            public void actionPerformed(ActionEvent arg0) {
728
                            public void actionPerformed(ActionEvent arg0) {
726
                                expandNomenclature(rowindex, m, EXPAND_TYPE.VIEW_ONLY);
729
                                expandNomenclature(rowindex, m, EXPAND_TYPE.VIEW_ONLY);
727
                            }
730
                            }
728
                        });
731
                        });
729
 
732
 
730
                        for (AbstractAction action : getAdditionnalMouseAction(rowindex)) {
733
                        for (AbstractAction action : getAdditionnalMouseAction(rowindex)) {
731
                            popup.add(action);
734
                            popup.add(action);
732
                        }
735
                        }
733
 
736
 
734
                        popup.show(e.getComponent(), e.getX(), e.getY());
737
                        popup.show(e.getComponent(), e.getX(), e.getY());
735
                    }
738
                    }
736
                }
739
                }
737
            });
740
            });
738
        }
741
        }
739
 
742
 
740
        final AutoCompletionManager m2 = new AutoCompletionManager(tableElementNom, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.NOM"), this.table,
743
        final AutoCompletionManager m2 = new AutoCompletionManager(tableElementNom, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.NOM"), this.table,
741
                this.table.getRowValuesTableModel()) {
744
                this.table.getRowValuesTableModel()) {
742
            @Override
745
            @Override
743
            protected Object getValueFrom(SQLRow row, String field, SQLRowAccessor rowDest) {
746
            protected Object getValueFrom(SQLRow row, String field, SQLRowAccessor rowDest) {
744
                Object res = tarifCompletion(row, field, rowDest, true);
747
                Object res = tarifCompletion(row, field, rowDest, true);
745
                if (res == null) {
748
                if (res == null) {
746
                    return super.getValueFrom(row, field, rowDest);
749
                    res = super.getValueFrom(row, field, rowDest);
747
                } else {
-
 
748
                    return res;
-
 
749
                }
750
                }                
-
 
751
                if (field.equals("POURCENT_REMISE")) {
-
 
752
                    return getRemiseClient(row);
-
 
753
                }
-
 
754
                return res;
750
            }
755
            }
751
        };
756
        };
752
        m2.fill("CODE", "CODE");
757
        m2.fill("CODE", "CODE");
753
        m2.fill("ID", "ID_ARTICLE");
758
        m2.fill("ID", "ID_ARTICLE");
754
        for (String string : completionField) {
759
        for (String string : completionField) {
755
            m2.fill(string, string);
760
            m2.fill(string, string);
756
        }
761
        }
757
 
762
 
758
        // m2.setWhere(w);
763
        // m2.setWhere(w);
759
        m2.setSelectTransformer(selTrans);
764
        m2.setSelectTransformer(selTrans);
760
 
765
 
761
        final AutoCompletionManager m3 = new AutoCompletionManager(tableElementArticle, sqlTableArticle.getField("NOM"), this.table, this.table.getRowValuesTableModel(),
766
        final AutoCompletionManager m3 = new AutoCompletionManager(tableElementArticle, sqlTableArticle.getField("NOM"), this.table, this.table.getRowValuesTableModel(),
762
                ITextWithCompletion.MODE_CONTAINS, true, true, new ValidStateChecker()) {
767
                ITextWithCompletion.MODE_CONTAINS, true, true, new ValidStateChecker()) {
763
            @Override
768
            @Override
764
            protected Object getValueFrom(SQLRow row, String field, SQLRowAccessor rowDest) {
769
            protected Object getValueFrom(SQLRow row, String field, SQLRowAccessor rowDest) {
765
                Object res = tarifCompletion(row, field, rowDest, true);
770
                Object res = tarifCompletion(row, field, rowDest, true);
766
                if (res == null) {
771
                if (res == null) {
767
                    return super.getValueFrom(row, field, rowDest);
772
                    res = super.getValueFrom(row, field, rowDest);
768
                } else {
773
                }               
-
 
774
                if (field.equals("POURCENT_REMISE")) {
769
                    return res;
775
                    return getRemiseClient(row);
770
                }
776
                }
-
 
777
                return res;
771
            }
778
            }
772
        };
779
        };
773
        m3.fill("CODE", "CODE");
780
        m3.fill("CODE", "CODE");
774
        m3.fill("NOM", "NOM");
781
        m3.fill("NOM", "NOM");
775
        for (String string : completionField) {
782
        for (String string : completionField) {
776
            m3.fill(string, string);
783
            m3.fill(string, string);
777
        }
784
        }
778
 
785
 
779
        // m3.setWhere(w);
786
        // m3.setWhere(w);
780
        m3.setSelectTransformer(selTrans);
787
        m3.setSelectTransformer(selTrans);
781
 
788
 
782
        // ECO Contribution
789
        // ECO Contribution
783
        if (this.tableElementEco != null && this.tableElementEcoTotal != null && this.tableElementEcoID != null) {
790
        if (this.tableElementEco != null && this.tableElementEcoTotal != null && this.tableElementEcoID != null) {
784
            this.qte.addModificationListener(this.tableElementEcoTotal);
791
            this.qte.addModificationListener(this.tableElementEcoTotal);
785
            this.tableElementEco.addModificationListener(this.tableElementEcoTotal);
792
            this.tableElementEco.addModificationListener(this.tableElementEcoTotal);
786
            this.tableElementEcoTotal.setModifier(new CellDynamicModifier() {
793
            this.tableElementEcoTotal.setModifier(new CellDynamicModifier() {
787
                public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
794
                public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
788
 
795
 
789
                    int qte = Integer.parseInt(row.getObject("QTE").toString());
796
                    int qte = Integer.parseInt(row.getObject("QTE").toString());
790
                    BigDecimal f = (row.getObject("ECO_CONTRIBUTION") == null) ? BigDecimal.ZERO : (BigDecimal) row.getObject("ECO_CONTRIBUTION");
797
                    BigDecimal f = (row.getObject("ECO_CONTRIBUTION") == null) ? BigDecimal.ZERO : (BigDecimal) row.getObject("ECO_CONTRIBUTION");
791
                    return f.multiply(new BigDecimal(qte));
798
                    return f.multiply(new BigDecimal(qte));
792
                }
799
                }
793
 
800
 
794
            });
801
            });
795
            this.tableElementEcoID.addModificationListener(this.tableElementEco);
802
            this.tableElementEcoID.addModificationListener(this.tableElementEco);
796
            this.tableElementEco.setModifier(new CellDynamicModifier() {
803
            this.tableElementEco.setModifier(new CellDynamicModifier() {
797
                public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
804
                public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
798
 
805
 
799
                    if (source != null && source.equals(tableElementEcoID)) {
806
                    if (source != null && source.equals(tableElementEcoID)) {
800
                        return row.getForeign("ID_ECO_CONTRIBUTION").getBigDecimal("TAUX");
807
                        return row.getForeign("ID_ECO_CONTRIBUTION").getBigDecimal("TAUX");
801
                    } else {
808
                    } else {
802
                        return row.getObject("ECO_CONTRIBUTION");
809
                        return row.getObject("ECO_CONTRIBUTION");
803
                    }
810
                    }
804
                }
811
                }
805
            });
812
            });
806
        }
813
        }
807
 
814
 
808
        // Calcul automatique du total HT
815
        // Calcul automatique du total HT
809
        tableElement_QuantiteLivree.addModificationListener(tableElement_PrixMetrique1_VenteHT);
816
        tableElement_QuantiteLivree.addModificationListener(tableElement_PrixMetrique1_VenteHT);
810
        tableElement_QuantiteLivree.addModificationListener(totalHT);
817
        tableElement_QuantiteLivree.addModificationListener(totalHT);
811
        tableElement_QuantiteLivree.addModificationListener(totalHA);
818
        tableElement_QuantiteLivree.addModificationListener(totalHA);
812
        qteU.addModificationListener(totalHT);
819
        qteU.addModificationListener(totalHT);
813
        qteU.addModificationListener(totalHA);
820
        qteU.addModificationListener(totalHA);
814
        this.ha.addModificationListener(this.totalHA);
821
        this.ha.addModificationListener(this.totalHA);
815
        tableElementRemise.addModificationListener(this.totalHT);
822
        tableElementRemise.addModificationListener(this.totalHT);
816
        tableElement_PrixVente_HT.addModificationListener(totalHT);
823
        tableElement_PrixVente_HT.addModificationListener(totalHT);
817
        this.totalHT.setModifier(new CellDynamicModifier() {
824
        this.totalHT.setModifier(new CellDynamicModifier() {
818
            public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
825
            public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
819
                final Object qteL = row.getObject("QTE_LIVREE");
826
                final Object qteL = row.getObject("QTE_LIVREE");
820
                int qte = qteL == null ? 0 : Integer.parseInt(qteL.toString());
827
                int qte = qteL == null ? 0 : Integer.parseInt(qteL.toString());
821
                BigDecimal f = (BigDecimal) row.getObject("PV_HT");
828
                BigDecimal f = (BigDecimal) row.getObject("PV_HT");
822
                System.out.println("Qte:" + qte + " et PV_HT:" + f);
829
                System.out.println("Qte:" + qte + " et PV_HT:" + f);
823
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
830
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
824
                BigDecimal r = b.multiply(f.multiply(BigDecimal.valueOf(qte)), DecimalUtils.HIGH_PRECISION).setScale(totalHT.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
831
                BigDecimal r = b.multiply(f.multiply(BigDecimal.valueOf(qte)), DecimalUtils.HIGH_PRECISION).setScale(totalHT.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
825
 
832
 
826
                if (row.getTable().getFieldsName().contains("MONTANT_REMISE")) {
833
                if (row.getTable().getFieldsName().contains("MONTANT_REMISE")) {
827
                    final BigDecimal acomptePercent = row.getBigDecimal("POURCENT_REMISE");
834
                    final BigDecimal acomptePercent = row.getBigDecimal("POURCENT_REMISE");
828
                    final BigDecimal acompteMontant = row.getBigDecimal("MONTANT_REMISE");
835
                    final BigDecimal acompteMontant = row.getBigDecimal("MONTANT_REMISE");
829
                    Remise remise = new Remise(acomptePercent, acompteMontant);
836
                    Remise remise = new Remise(acomptePercent, acompteMontant);
830
                    r = remise.getResultFrom(r);
837
                    r = remise.getResultFrom(r);
831
                }
838
                }
832
                return r;
839
                return r;
833
            }
840
            }
834
 
841
 
835
        });
842
        });
836
        this.totalHA.setModifier(new CellDynamicModifier() {
843
        this.totalHA.setModifier(new CellDynamicModifier() {
837
            public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
844
            public Object computeValueFrom(final SQLRowValues row, SQLTableElement source) {
838
                final Object qteL = row.getObject("QTE_LIVREE");
845
                final Object qteL = row.getObject("QTE_LIVREE");
839
                int qte = qteL == null ? 0 : Integer.parseInt(qteL.toString());
846
                int qte = qteL == null ? 0 : Integer.parseInt(qteL.toString());
840
                BigDecimal f = (BigDecimal) row.getObject("PA_HT");
847
                BigDecimal f = (BigDecimal) row.getObject("PA_HT");
841
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
848
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
842
                BigDecimal r = b.multiply(f.multiply(BigDecimal.valueOf(qte)), DecimalUtils.HIGH_PRECISION).setScale(totalHA.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
849
                BigDecimal r = b.multiply(f.multiply(BigDecimal.valueOf(qte)), DecimalUtils.HIGH_PRECISION).setScale(totalHA.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
843
                return r;
850
                return r;
844
            }
851
            }
845
 
852
 
846
        });
853
        });
847
        // Calcul automatique du total TTC
854
        // Calcul automatique du total TTC
848
        tableElement_QuantiteLivree.addModificationListener(tableElementTotalTTC);
855
        tableElement_QuantiteLivree.addModificationListener(tableElementTotalTTC);
849
        qteU.addModificationListener(tableElementTotalTTC);
856
        qteU.addModificationListener(tableElementTotalTTC);
850
        tableElement_PrixVente_HT.addModificationListener(tableElementTotalTTC);
857
        tableElement_PrixVente_HT.addModificationListener(tableElementTotalTTC);
851
        this.tableElementTVA.addModificationListener(tableElementTotalTTC);
858
        this.tableElementTVA.addModificationListener(tableElementTotalTTC);
852
        this.tableElementTotalTTC.setModifier(new CellDynamicModifier() {
859
        this.tableElementTotalTTC.setModifier(new CellDynamicModifier() {
853
            @Override
860
            @Override
854
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
861
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
855
 
862
 
856
                BigDecimal f = (BigDecimal) row.getObject("T_PV_HT");
863
                BigDecimal f = (BigDecimal) row.getObject("T_PV_HT");
857
                int idTaux = Integer.parseInt(row.getObject("ID_TAXE").toString());
864
                int idTaux = Integer.parseInt(row.getObject("ID_TAXE").toString());
858
 
865
 
859
                Float resultTaux = TaxeCache.getCache().getTauxFromId(idTaux);
866
                Float resultTaux = TaxeCache.getCache().getTauxFromId(idTaux);
860
 
867
 
861
                // PrixHT pHT = new PrixHT(f.longValue());
868
                // PrixHT pHT = new PrixHT(f.longValue());
862
                float taux = (resultTaux == null) ? 0.0F : resultTaux.floatValue();
869
                float taux = (resultTaux == null) ? 0.0F : resultTaux.floatValue();
863
                // Long r = new Long(pHT.calculLongTTC(taux / 100f));
870
                // Long r = new Long(pHT.calculLongTTC(taux / 100f));
864
                editorPVHT.setTaxe(taux);
871
                editorPVHT.setTaxe(taux);
865
                BigDecimal r = f.multiply(BigDecimal.ONE.add(BigDecimal.valueOf(taux).movePointLeft(2)), DecimalUtils.HIGH_PRECISION).setScale(6, BigDecimal.ROUND_HALF_UP);
872
                BigDecimal r = f.multiply(BigDecimal.ONE.add(BigDecimal.valueOf(taux).movePointLeft(2)), DecimalUtils.HIGH_PRECISION).setScale(6, BigDecimal.ROUND_HALF_UP);
866
 
873
 
867
                return r.setScale(tableElementTotalTTC.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
874
                return r.setScale(tableElementTotalTTC.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
868
            }
875
            }
869
 
876
 
870
        });
877
        });
871
        // Calcul automatique du poids unitaire
878
        // Calcul automatique du poids unitaire
872
        tableElement_ValeurMetrique1.addModificationListener(tableElementPoids);
879
        tableElement_ValeurMetrique1.addModificationListener(tableElementPoids);
873
        tableElement_ValeurMetrique2.addModificationListener(tableElementPoids);
880
        tableElement_ValeurMetrique2.addModificationListener(tableElementPoids);
874
        tableElement_ValeurMetrique3.addModificationListener(tableElementPoids);
881
        tableElement_ValeurMetrique3.addModificationListener(tableElementPoids);
875
        tableElementPoids.setModifier(new CellDynamicModifier() {
882
        tableElementPoids.setModifier(new CellDynamicModifier() {
876
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
883
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
877
                return new Float(ReferenceArticleSQLElement.getPoidsFromDetails(row));
884
                return new Float(ReferenceArticleSQLElement.getPoidsFromDetails(row));
878
            }
885
            }
879
 
886
 
880
        });
887
        });
881
        // Calcul automatique du poids total
888
        // Calcul automatique du poids total
882
        tableElementPoids.addModificationListener(this.tableElementPoidsTotal);
889
        tableElementPoids.addModificationListener(this.tableElementPoidsTotal);
883
        this.qte.addModificationListener(this.tableElementPoidsTotal);
890
        this.qte.addModificationListener(this.tableElementPoidsTotal);
884
        qteU.addModificationListener(this.tableElementPoidsTotal);
891
        qteU.addModificationListener(this.tableElementPoidsTotal);
885
        this.tableElementPoidsTotal.setModifier(new CellDynamicModifier() {
892
        this.tableElementPoidsTotal.setModifier(new CellDynamicModifier() {
886
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
893
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
887
                Number f = (Number) row.getObject("POIDS");
894
                Number f = (Number) row.getObject("POIDS");
888
                int qte = Integer.parseInt(row.getObject("QTE").toString());
895
                int qte = Integer.parseInt(row.getObject("QTE").toString());
889
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
896
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
890
                // FIXME convertir en float autrement pour éviter une valeur non valeur transposable
897
                // FIXME convertir en float autrement pour éviter une valeur non valeur transposable
891
                // avec floatValue ou passer POIDS en bigDecimal
898
                // avec floatValue ou passer POIDS en bigDecimal
892
                return b.multiply(new BigDecimal(f.floatValue() * qte)).floatValue();
899
                return b.multiply(new BigDecimal(f.floatValue() * qte)).floatValue();
893
            }
900
            }
894
 
901
 
895
        });
902
        });
896
 
903
 
897
        // Calcul automatique du poids total livrée
904
        // Calcul automatique du poids total livrée
898
        tableElementPoids.addModificationListener(this.tableElementPoidsTotalLivree);
905
        tableElementPoids.addModificationListener(this.tableElementPoidsTotalLivree);
899
        tableElement_QuantiteLivree.addModificationListener(this.tableElementPoidsTotalLivree);
906
        tableElement_QuantiteLivree.addModificationListener(this.tableElementPoidsTotalLivree);
900
        this.tableElementPoidsTotalLivree.setModifier(new CellDynamicModifier() {
907
        this.tableElementPoidsTotalLivree.setModifier(new CellDynamicModifier() {
901
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
908
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
902
 
909
 
903
                Number f = (Number) row.getObject("POIDS");
910
                Number f = (Number) row.getObject("POIDS");
904
 
911
 
905
                Object qteOb = row.getObject("QTE_LIVREE");
912
                Object qteOb = row.getObject("QTE_LIVREE");
906
                int qte = (qteOb == null) ? 0 : Integer.parseInt(qteOb.toString());
913
                int qte = (qteOb == null) ? 0 : Integer.parseInt(qteOb.toString());
907
 
914
 
908
                float fValue = (f == null) ? 0.0F : f.floatValue();
915
                float fValue = (f == null) ? 0.0F : f.floatValue();
909
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
916
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
910
                // FIXME convertir en float autrement pour éviter une valeur non transposable
917
                // FIXME convertir en float autrement pour éviter une valeur non transposable
911
                // avec floatValue ou passer POIDS en bigDecimal
918
                // avec floatValue ou passer POIDS en bigDecimal
912
                return b.multiply(new BigDecimal(fValue * qte)).floatValue();
919
                return b.multiply(new BigDecimal(fValue * qte)).floatValue();
913
            }
920
            }
914
        });
921
        });
915
 
922
 
916
        tableElement_PrixMetrique1_VenteHT.setModifier(new CellDynamicModifier() {
923
        tableElement_PrixMetrique1_VenteHT.setModifier(new CellDynamicModifier() {
917
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
924
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
918
                if (source != null && source.getField().getName().equals("PRIX_METRIQUE_VT_1")) {
925
                if (source != null && source.getField().getName().equals("PRIX_METRIQUE_VT_1")) {
919
                    return row.getObject("PRIX_METRIQUE_VT_1");
926
                    return row.getObject("PRIX_METRIQUE_VT_1");
920
                } else {
927
                } else {
921
                    if (source != null && source.getField().getName().equals("PV_U_DEVISE")) {
928
                    if (source != null && source.getField().getName().equals("PV_U_DEVISE")) {
922
                        if (!row.isForeignEmpty("ID_DEVISE")) {
929
                        if (!row.isForeignEmpty("ID_DEVISE")) {
923
                            String devCode = row.getForeign("ID_DEVISE").getString("CODE");
930
                            String devCode = row.getForeign("ID_DEVISE").getString("CODE");
924
                            BigDecimal bigDecimal = (BigDecimal) row.getObject("PV_U_DEVISE");
931
                            BigDecimal bigDecimal = (BigDecimal) row.getObject("PV_U_DEVISE");
925
                            CurrencyConverter c = new CurrencyConverter();
932
                            CurrencyConverter c = new CurrencyConverter();
926
                            BigDecimal result = c.convert(bigDecimal, devCode, c.getCompanyCurrencyCode(), new Date(), true);
933
                            BigDecimal result = c.convert(bigDecimal, devCode, c.getCompanyCurrencyCode(), new Date(), true);
927
                            return result;
934
                            return result;
928
                        } else {
935
                        } else {
929
                            return row.getObject("PRIX_METRIQUE_VT_1");
936
                            return row.getObject("PRIX_METRIQUE_VT_1");
930
                        }
937
                        }
931
                    }
938
                    }
932
                    // On ne recalcule pas le tarif si la ligne vient d'une commande
939
                    // On ne recalcule pas le tarif si la ligne vient d'une commande
933
                    boolean noCmdElt = row.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || row.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
940
                    boolean noCmdElt = row.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || row.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
934
                    if (!noCmdElt) {
941
                    if (!noCmdElt) {
935
                        return row.getObject("PRIX_METRIQUE_VT_1");
942
                        return row.getObject("PRIX_METRIQUE_VT_1");
936
                    }
943
                    }
937
                    return tarifCompletion(row.getForeign("ID_ARTICLE"), "PRIX_METRIQUE_VT_1", row);
944
                    return tarifCompletion(row.getForeign("ID_ARTICLE"), "PRIX_METRIQUE_VT_1", row);
938
                }
945
                }
939
            }
946
            }
940
 
947
 
941
        });
948
        });
942
 
949
 
943
        if (showDevise) {
950
        if (showDevise) {
944
            if (eltUnitDevise != null) {
951
            if (eltUnitDevise != null) {
945
                eltUnitDevise.addModificationListener(tableElement_PrixMetrique1_VenteHT);
952
                eltUnitDevise.addModificationListener(tableElement_PrixMetrique1_VenteHT);
946
            }
953
            }
947
 
954
 
948
            if (eltUnitDevise != null) {
955
            if (eltUnitDevise != null) {
949
                tableElement_PrixMetrique1_VenteHT.addModificationListener(eltUnitDevise);
956
                tableElement_PrixMetrique1_VenteHT.addModificationListener(eltUnitDevise);
950
                tableElementRemise.addModificationListener(this.tableElementTotalDevise);
957
                tableElementRemise.addModificationListener(this.tableElementTotalDevise);
951
                eltUnitDevise.setModifier(new CellDynamicModifier() {
958
                eltUnitDevise.setModifier(new CellDynamicModifier() {
952
                    public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
959
                    public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
953
                        if (source != null && source.getField().getName().equals("PV_U_DEVISE")) {
960
                        if (source != null && source.getField().getName().equals("PV_U_DEVISE")) {
954
                            return row.getObject("PV_U_DEVISE");
961
                            return row.getObject("PV_U_DEVISE");
955
                        } else {
962
                        } else {
956
                            if (!row.isForeignEmpty("ID_DEVISE")) {
963
                            if (!row.isForeignEmpty("ID_DEVISE")) {
957
                                String devCode = row.getForeign("ID_DEVISE").getString("CODE");
964
                                String devCode = row.getForeign("ID_DEVISE").getString("CODE");
958
                                BigDecimal bigDecimal = (BigDecimal) row.getObject("PRIX_METRIQUE_VT_1");
965
                                BigDecimal bigDecimal = (BigDecimal) row.getObject("PRIX_METRIQUE_VT_1");
959
                                CurrencyConverter c = new CurrencyConverter();
966
                                CurrencyConverter c = new CurrencyConverter();
960
                                BigDecimal result = c.convert(bigDecimal, c.getCompanyCurrencyCode(), devCode, new Date(), true);
967
                                BigDecimal result = c.convert(bigDecimal, c.getCompanyCurrencyCode(), devCode, new Date(), true);
961
                                return result;
968
                                return result;
962
                            } else if (source != null && source.getField().getName().equalsIgnoreCase("PRIX_METRIQUE_VT_1")) {
969
                            } else if (source != null && source.getField().getName().equalsIgnoreCase("PRIX_METRIQUE_VT_1")) {
963
                                return row.getObject("PRIX_METRIQUE_VT_1");
970
                                return row.getObject("PRIX_METRIQUE_VT_1");
964
                            }
971
                            }
965
                            // On ne recalcule pas le tarif si la ligne vient d'une commande
972
                            // On ne recalcule pas le tarif si la ligne vient d'une commande
966
                            boolean noCmdElt = row.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || row.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
973
                            boolean noCmdElt = row.getObject("ID_COMMANDE_CLIENT_ELEMENT") == null || row.isForeignEmpty("ID_COMMANDE_CLIENT_ELEMENT");
967
                            if (!noCmdElt) {
974
                            if (!noCmdElt) {
968
                                return row.getObject("PV_U_DEVISE");
975
                                return row.getObject("PV_U_DEVISE");
969
                            }
976
                            }
970
                            return row.getObject("PV_U_DEVISE");
977
                            return row.getObject("PV_U_DEVISE");
971
                        }
978
                        }
972
                    }
979
                    }
973
 
980
 
974
                });
981
                });
975
                tableElementRemise.addModificationListener(this.tableElementTotalDevise);
982
                tableElementRemise.addModificationListener(this.tableElementTotalDevise);
976
                tableElementTotalDevise.setModifier(new CellDynamicModifier() {
983
                tableElementTotalDevise.setModifier(new CellDynamicModifier() {
977
                    @Override
984
                    @Override
978
                    public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
985
                    public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
979
                        int qte = row.getInt("QTE_LIVREE");
986
                        int qte = row.getInt("QTE_LIVREE");
980
                        BigDecimal prixDeVenteUnitaireDevise = (row.getObject("PV_U_DEVISE") == null) ? BigDecimal.ZERO : (BigDecimal) row.getObject("PV_U_DEVISE");
987
                        BigDecimal prixDeVenteUnitaireDevise = (row.getObject("PV_U_DEVISE") == null) ? BigDecimal.ZERO : (BigDecimal) row.getObject("PV_U_DEVISE");
981
                        BigDecimal qUnitaire = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
988
                        BigDecimal qUnitaire = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
982
                        // r = prixUnitaire x qUnitaire x qte
989
                        // r = prixUnitaire x qUnitaire x qte
983
                        BigDecimal prixVente = qUnitaire.multiply(prixDeVenteUnitaireDevise.multiply(BigDecimal.valueOf(qte), DecimalUtils.HIGH_PRECISION), DecimalUtils.HIGH_PRECISION);
990
                        BigDecimal prixVente = qUnitaire.multiply(prixDeVenteUnitaireDevise.multiply(BigDecimal.valueOf(qte), DecimalUtils.HIGH_PRECISION), DecimalUtils.HIGH_PRECISION);
984
 
991
 
985
                        if (row.getTable().getFieldsName().contains("MONTANT_REMISE")) {
992
                        if (row.getTable().getFieldsName().contains("MONTANT_REMISE")) {
986
                            final BigDecimal acomptePercent = row.getBigDecimal("POURCENT_REMISE");
993
                            final BigDecimal acomptePercent = row.getBigDecimal("POURCENT_REMISE");
987
                            final BigDecimal acompteMontant = row.getBigDecimal("MONTANT_REMISE");
994
                            final BigDecimal acompteMontant = row.getBigDecimal("MONTANT_REMISE");
988
                            Remise remise = new Remise(acomptePercent, acompteMontant);
995
                            Remise remise = new Remise(acomptePercent, acompteMontant);
989
                            prixVente = remise.getResultFrom(prixVente);
996
                            prixVente = remise.getResultFrom(prixVente);
990
                        }
997
                        }
991
 
998
 
992
                        // if (lremise.compareTo(BigDecimal.ZERO) > 0 &&
999
                        // if (lremise.compareTo(BigDecimal.ZERO) > 0 &&
993
                        // lremise.compareTo(BigDecimal.valueOf(100)) < 100) {
1000
                        // lremise.compareTo(BigDecimal.valueOf(100)) < 100) {
994
                        // r = r.multiply(BigDecimal.valueOf(100).subtract(lremise),
1001
                        // r = r.multiply(BigDecimal.valueOf(100).subtract(lremise),
995
                        // DecimalUtils.HIGH_PRECISION).movePointLeft(2);
1002
                        // DecimalUtils.HIGH_PRECISION).movePointLeft(2);
996
                        // }
1003
                        // }
997
                        return prixVente.setScale(tableElementTotalDevise.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
1004
                        return prixVente.setScale(tableElementTotalDevise.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
998
                    }
1005
                    }
999
                });
1006
                });
1000
            }
1007
            }
1001
        }
1008
        }
1002
 
1009
 
1003
        // Calcul automatique du prix de vente unitaire HT
1010
        // Calcul automatique du prix de vente unitaire HT
1004
        tableElement_ValeurMetrique1.addModificationListener(tableElement_PrixVente_HT);
1011
        tableElement_ValeurMetrique1.addModificationListener(tableElement_PrixVente_HT);
1005
        tableElement_ValeurMetrique2.addModificationListener(tableElement_PrixVente_HT);
1012
        tableElement_ValeurMetrique2.addModificationListener(tableElement_PrixVente_HT);
1006
        tableElement_ValeurMetrique3.addModificationListener(tableElement_PrixVente_HT);
1013
        tableElement_ValeurMetrique3.addModificationListener(tableElement_PrixVente_HT);
1007
        tableElement_PrixMetrique1_VenteHT.addModificationListener(tableElement_PrixVente_HT);
1014
        tableElement_PrixMetrique1_VenteHT.addModificationListener(tableElement_PrixVente_HT);
1008
        tableElement_PrixVente_HT.setModifier(new CellDynamicModifier() {
1015
        tableElement_PrixVente_HT.setModifier(new CellDynamicModifier() {
1009
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
1016
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
1010
                if (row.getInt("ID_MODE_VENTE_ARTICLE") == ReferenceArticleSQLElement.A_LA_PIECE) {
1017
                if (row.getInt("ID_MODE_VENTE_ARTICLE") == ReferenceArticleSQLElement.A_LA_PIECE) {
1011
                    System.err.println("Don't computeValue PV_HT --> " + row.getObject("PV_HT") + row);
1018
                    System.err.println("Don't computeValue PV_HT --> " + row.getObject("PV_HT") + row);
1012
                    return row.getObject("PRIX_METRIQUE_VT_1");
1019
                    return row.getObject("PRIX_METRIQUE_VT_1");
1013
                } else {
1020
                } else {
1014
 
1021
 
1015
                    final BigDecimal prixVTFromDetails = ReferenceArticleSQLElement.getPrixVTFromDetails(row);
1022
                    final BigDecimal prixVTFromDetails = ReferenceArticleSQLElement.getPrixVTFromDetails(row);
1016
                    System.out.println("Prix de vente calculé au détail:" + prixVTFromDetails);
1023
                    System.out.println("Prix de vente calculé au détail:" + prixVTFromDetails);
1017
                    return prixVTFromDetails.setScale(tableElement_PrixVente_HT.getDecimalDigits(), RoundingMode.HALF_UP);
1024
                    return prixVTFromDetails.setScale(tableElement_PrixVente_HT.getDecimalDigits(), RoundingMode.HALF_UP);
1018
                }
1025
                }
1019
            }
1026
            }
1020
        });
1027
        });
1021
 
1028
 
1022
        // Calcul automatique du prix de achat unitaire HT
1029
        // Calcul automatique du prix de achat unitaire HT
1023
        tableElement_ValeurMetrique1.addModificationListener(ha);
1030
        tableElement_ValeurMetrique1.addModificationListener(ha);
1024
        tableElement_ValeurMetrique2.addModificationListener(ha);
1031
        tableElement_ValeurMetrique2.addModificationListener(ha);
1025
        tableElement_ValeurMetrique3.addModificationListener(ha);
1032
        tableElement_ValeurMetrique3.addModificationListener(ha);
1026
        tableElement_PrixMetrique1_AchatHT.addModificationListener(ha);
1033
        tableElement_PrixMetrique1_AchatHT.addModificationListener(ha);
1027
        this.ha.setModifier(new CellDynamicModifier() {
1034
        this.ha.setModifier(new CellDynamicModifier() {
1028
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
1035
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
1029
                if (row.isForeignEmpty("ID_MODE_VENTE_ARTICLE") || row.getInt("ID_MODE_VENTE_ARTICLE") == ReferenceArticleSQLElement.A_LA_PIECE) {
1036
                if (row.isForeignEmpty("ID_MODE_VENTE_ARTICLE") || row.getInt("ID_MODE_VENTE_ARTICLE") == ReferenceArticleSQLElement.A_LA_PIECE) {
1030
                    return row.getObject("PRIX_METRIQUE_HA_1");
1037
                    return row.getObject("PRIX_METRIQUE_HA_1");
1031
                } else {
1038
                } else {
1032
 
1039
 
1033
                    final BigDecimal prixHAFromDetails = ReferenceArticleSQLElement.getPrixHAFromDetails(row);
1040
                    final BigDecimal prixHAFromDetails = ReferenceArticleSQLElement.getPrixHAFromDetails(row);
1034
                    return prixHAFromDetails.setScale(ha.getDecimalDigits(), RoundingMode.HALF_UP);
1041
                    return prixHAFromDetails.setScale(ha.getDecimalDigits(), RoundingMode.HALF_UP);
1035
                }
1042
                }
1036
            }
1043
            }
1037
        });
1044
        });
1038
 
1045
 
1039
        this.table.readState();
1046
        this.table.readState();
1040
 
1047
 
1041
        tableFamille.addModificationListener(tableElementArticle);
1048
        tableFamille.addModificationListener(tableElementArticle);
1042
        tableElementCode.addModificationListener(tableElementArticle);
1049
        tableElementCode.addModificationListener(tableElementArticle);
1043
        tableElementArticle.setModifier(new CellDynamicModifier() {
1050
        tableElementArticle.setModifier(new CellDynamicModifier() {
1044
            @Override
1051
            @Override
1045
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
1052
            public Object computeValueFrom(SQLRowValues row, SQLTableElement source) {
1046
 
1053
 
1047
                if (filterFamilleArticle) {
1054
                if (filterFamilleArticle) {
1048
 
1055
 
1049
                    if (row.isForeignEmpty("ID_FAMILLE_ARTICLE")) {
1056
                    if (row.isForeignEmpty("ID_FAMILLE_ARTICLE")) {
1050
                        m.setWhere(null);
1057
                        m.setWhere(null);
1051
                        m2.setWhere(null);
1058
                        m2.setWhere(null);
1052
 
1059
 
1053
                    } else {
1060
                    } else {
1054
                        m.setWhere(new Where(sqlTableArticle.getField("ID_FAMILLE_ARTICLE"), "=", row.getForeignID("ID_FAMILLE_ARTICLE")));
1061
                        m.setWhere(new Where(sqlTableArticle.getField("ID_FAMILLE_ARTICLE"), "=", row.getForeignID("ID_FAMILLE_ARTICLE")));
1055
                        m2.setWhere(new Where(sqlTableArticle.getField("ID_FAMILLE_ARTICLE"), "=", row.getForeignID("ID_FAMILLE_ARTICLE")));
1062
                        m2.setWhere(new Where(sqlTableArticle.getField("ID_FAMILLE_ARTICLE"), "=", row.getForeignID("ID_FAMILLE_ARTICLE")));
1056
                    }
1063
                    }
1057
                }
1064
                }
1058
                SQLRowAccessor foreign = row.getForeign("ID_ARTICLE");
1065
                SQLRowAccessor foreign = row.getForeign("ID_ARTICLE");
1059
                if (foreign != null && !foreign.isUndefined() && foreign.getObject("CODE") != null && foreign.getString("CODE").equals(row.getString("CODE"))) {
1066
                if (foreign != null && !foreign.isUndefined() && foreign.getObject("CODE") != null && foreign.getString("CODE").equals(row.getString("CODE"))) {
1060
                    return foreign.getID();
1067
                    return foreign.getID();
1061
                } else {
1068
                } else {
1062
                    return tableArticle.getUndefinedID();
1069
                    return tableArticle.getUndefinedID();
1063
                }
1070
                }
1064
            }
1071
            }
1065
        });
1072
        });
1066
 
1073
 
1067
        // Mode Gestion article avancé
1074
        // Mode Gestion article avancé
1068
        String valModeAvanceVt = DefaultNXProps.getInstance().getStringProperty("ArticleModeVenteAvance");
1075
        String valModeAvanceVt = DefaultNXProps.getInstance().getStringProperty("ArticleModeVenteAvance");
1069
        Boolean bModeAvance = Boolean.valueOf(valModeAvanceVt);
1076
        Boolean bModeAvance = Boolean.valueOf(valModeAvanceVt);
1070
        if (bModeAvance != null && !bModeAvance.booleanValue()) {
1077
        if (bModeAvance != null && !bModeAvance.booleanValue()) {
1071
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_1"));
1078
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_1"));
1072
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_2"));
1079
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_2"));
1073
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_3"));
1080
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_3"));
1074
            hideColumn(model.getColumnForField("PV_HT"));
1081
            hideColumn(model.getColumnForField("PV_HT"));
1075
            hideColumn(model.getColumnForField("PA_HT"));
1082
            hideColumn(model.getColumnForField("PA_HT"));
1076
            hideColumn(model.getColumnForField("ID_MODE_VENTE_ARTICLE"));
1083
            hideColumn(model.getColumnForField("ID_MODE_VENTE_ARTICLE"));
1077
        }
1084
        }
1078
 
1085
 
1079
        // Packaging
1086
        // Packaging
1080
        if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.ITEM_PACKAGING, false)) {
1087
        if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.ITEM_PACKAGING, false)) {
1081
            setColumnVisible(model.getColumnForField("T_POIDS_COLIS_NET"), false);
1088
            setColumnVisible(model.getColumnForField("T_POIDS_COLIS_NET"), false);
1082
        }
1089
        }
1083
 
1090
 
1084
        setColumnVisible(model.getColumnForField("ID_ARTICLE"), selectArticle);
1091
        setColumnVisible(model.getColumnForField("ID_ARTICLE"), selectArticle);
1085
        setColumnVisible(model.getColumnForField("CODE"), !selectArticle || (selectArticle && createAuto));
1092
        setColumnVisible(model.getColumnForField("CODE"), !selectArticle || (selectArticle && createAuto));
1086
        setColumnVisible(model.getColumnForField("NOM"), !selectArticle || (selectArticle && createAuto));
1093
        setColumnVisible(model.getColumnForField("NOM"), !selectArticle || (selectArticle && createAuto));
1087
 
1094
 
1088
        setColumnVisible(getModel().getColumnForField("ID_FAMILLE_ARTICLE"), filterFamilleArticle);
1095
        setColumnVisible(getModel().getColumnForField("ID_FAMILLE_ARTICLE"), filterFamilleArticle);
1089
 
1096
 
1090
        if (this.tableElementEco != null && this.tableElementEcoTotal != null && this.tableElementEcoID != null) {
1097
        if (this.tableElementEco != null && this.tableElementEcoTotal != null && this.tableElementEcoID != null) {
1091
            setColumnVisible(model.getColumnForField("ID_ECO_CONTRIBUTION"), showEco);
1098
            setColumnVisible(model.getColumnForField("ID_ECO_CONTRIBUTION"), showEco);
1092
            setColumnVisible(model.getColumnForField("ECO_CONTRIBUTION"), showEco);
1099
            setColumnVisible(model.getColumnForField("ECO_CONTRIBUTION"), showEco);
1093
            setColumnVisible(model.getColumnForField("T_ECO_CONTRIBUTION"), showEco);
1100
            setColumnVisible(model.getColumnForField("T_ECO_CONTRIBUTION"), showEco);
1094
        }
1101
        }
1095
 
1102
 
1096
        // Gestion des unités de vente
1103
        // Gestion des unités de vente
1097
        final boolean gestionUV = prefs.getBoolean(GestionArticleGlobalPreferencePanel.UNITE_VENTE, true);
1104
        final boolean gestionUV = prefs.getBoolean(GestionArticleGlobalPreferencePanel.UNITE_VENTE, true);
1098
        setColumnVisible(model.getColumnForField("QTE_UNITAIRE"), gestionUV);
1105
        setColumnVisible(model.getColumnForField("QTE_UNITAIRE"), gestionUV);
1099
        setColumnVisible(model.getColumnForField("ID_UNITE_VENTE"), gestionUV);
1106
        setColumnVisible(model.getColumnForField("ID_UNITE_VENTE"), gestionUV);
1100
 
1107
 
1101
        setColumnVisible(model.getColumnForField("PRIX_METRIQUE_HA_1"), showHAPrice);
1108
        setColumnVisible(model.getColumnForField("PRIX_METRIQUE_HA_1"), showHAPrice);
1102
        setColumnVisible(model.getColumnForField("MARGE_HT"), showHAPrice);
1109
        setColumnVisible(model.getColumnForField("MARGE_HT"), showHAPrice);
1103
        setColumnVisible(model.getColumnForField("T_PA_HT"), showHAPrice);
1110
        setColumnVisible(model.getColumnForField("T_PA_HT"), showHAPrice);
1104
 
1111
 
1105
        if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
1112
        if (e.getTable().contains("ID_COMMANDE_CLIENT_ELEMENT")) {
1106
            setColumnVisible(model.getColumnForField("ID_COMMANDE_CLIENT_ELEMENT"), false);
1113
            setColumnVisible(model.getColumnForField("ID_COMMANDE_CLIENT_ELEMENT"), false);
1107
        }
1114
        }
1108
        // Barcode reader
1115
        // Barcode reader
1109
        final BarcodeReader barcodeReader = ComptaPropsConfiguration.getInstanceCompta().getBarcodeReader();
1116
        final BarcodeReader barcodeReader = ComptaPropsConfiguration.getInstanceCompta().getBarcodeReader();
1110
        if (barcodeReader != null) {
1117
        if (barcodeReader != null) {
1111
 
1118
 
1112
            final BarcodeListener l = new BarcodeListener() {
1119
            final BarcodeListener l = new BarcodeListener() {
1113
 
1120
 
1114
                @Override
1121
                @Override
1115
                public void keyReceived(KeyEvent ee) {
1122
                public void keyReceived(KeyEvent ee) {
1116
                    // TODO Auto-generated method stub
1123
                    // TODO Auto-generated method stub
1117
                }
1124
                }
1118
 
1125
 
1119
                @Override
1126
                @Override
1120
                public void barcodeRead(String code) {
1127
                public void barcodeRead(String code) {
1121
                    if (((JFrame) SwingUtilities.getRoot(getRowValuesTable())).isActive()) {
1128
                    if (((JFrame) SwingUtilities.getRoot(getRowValuesTable())).isActive()) {
1122
                        final SQLSelect selArticle = new SQLSelect();
1129
                        final SQLSelect selArticle = new SQLSelect();
1123
                        final SQLTable tableArticle = getSQLElement().getForeignElement("ID_ARTICLE").getTable();
1130
                        final SQLTable tableArticle = getSQLElement().getForeignElement("ID_ARTICLE").getTable();
1124
                        selArticle.addSelectStar(tableArticle);
1131
                        selArticle.addSelectStar(tableArticle);
1125
                        Where w = new Where(tableArticle.getField("OBSOLETE"), "=", Boolean.FALSE);
1132
                        Where w = new Where(tableArticle.getField("OBSOLETE"), "=", Boolean.FALSE);
1126
                        w = w.and(new Where(tableArticle.getField("CODE_BARRE"), "=", code));
1133
                        w = w.and(new Where(tableArticle.getField("CODE_BARRE"), "=", code));
1127
                        selArticle.setWhere(w);
1134
                        selArticle.setWhere(w);
1128
                        List<SQLRow> l2 = SQLRowListRSH.execute(selArticle);
1135
                        List<SQLRow> l2 = SQLRowListRSH.execute(selArticle);
1129
                        if (l2.size() > 0) {
1136
                        if (l2.size() > 0) {
1130
                            System.err.println("ARTICLE " + l2.get(0).getString("NOM"));
1137
                            System.err.println("ARTICLE " + l2.get(0).getString("NOM"));
1131
                            Tuple3<Double, String, String> art = Tuple3.create(1.0D, l2.get(0).getString("CODE"), l2.get(0).getString("NOM"));
1138
                            Tuple3<Double, String, String> art = Tuple3.create(1.0D, l2.get(0).getString("CODE"), l2.get(0).getString("NOM"));
1132
                            List<Tuple3<Double, String, String>> l = new ArrayList<Tuple3<Double, String, String>>();
1139
                            List<Tuple3<Double, String, String>> l = new ArrayList<Tuple3<Double, String, String>>();
1133
                            l.add(art);
1140
                            l.add(art);
1134
                            insertFromDrop(l, m);
1141
                            insertFromDrop(l, m);
1135
                        } else {
1142
                        } else {
1136
                            System.err.println("ARTICLE NOT FOUND !");
1143
                            System.err.println("ARTICLE NOT FOUND !");
1137
                        }
1144
                        }
1138
                    }
1145
                    }
1139
 
1146
 
1140
                }
1147
                }
1141
            };
1148
            };
1142
            getRowValuesTable().addHierarchyListener(new HierarchyListener() {
1149
            getRowValuesTable().addHierarchyListener(new HierarchyListener() {
1143
                public void hierarchyChanged(HierarchyEvent e) {
1150
                public void hierarchyChanged(HierarchyEvent e) {
1144
                    if ((e.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0)
1151
                    if ((e.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0)
1145
                        if (getRowValuesTable().isDisplayable()) {
1152
                        if (getRowValuesTable().isDisplayable()) {
1146
                            barcodeReader.addBarcodeListener(l);
1153
                            barcodeReader.addBarcodeListener(l);
1147
                        } else {
1154
                        } else {
1148
                            barcodeReader.removeBarcodeListener(l);
1155
                            barcodeReader.removeBarcodeListener(l);
1149
                        }
1156
                        }
1150
                }
1157
                }
1151
            });
1158
            });
1152
 
1159
 
1153
        }
1160
        }
1154
 
1161
 
1155
        // On réécrit la configuration au cas ou les preferences aurait changé
1162
        // On réécrit la configuration au cas ou les preferences aurait changé
1156
        this.table.writeState();
1163
        this.table.writeState();
1157
 
1164
 
1158
    }
1165
    }
1159
 
1166
 
1160
    @Override
1167
    @Override
1161
    public float getPoidsTotal() {
1168
    public float getPoidsTotal() {
1162
 
1169
 
1163
        float poids = 0.0F;
1170
        float poids = 0.0F;
1164
        int poidsTColIndex = getModel().getColumnIndexForElement(this.tableElementPoidsTotalLivree);
1171
        int poidsTColIndex = getModel().getColumnIndexForElement(this.tableElementPoidsTotalLivree);
1165
        if (poidsTColIndex >= 0) {
1172
        if (poidsTColIndex >= 0) {
1166
            for (int i = 0; i < table.getRowCount(); i++) {
1173
            for (int i = 0; i < table.getRowCount(); i++) {
1167
                Number tmp = (Number) getModel().getValueAt(i, poidsTColIndex);
1174
                Number tmp = (Number) getModel().getValueAt(i, poidsTColIndex);
1168
                if (tmp != null) {
1175
                if (tmp != null) {
1169
                    poids += tmp.floatValue();
1176
                    poids += tmp.floatValue();
1170
                }
1177
                }
1171
            }
1178
            }
1172
        }
1179
        }
1173
        return poids;
1180
        return poids;
1174
    }
1181
    }
1175
 
1182
 
1176
    @Override
1183
    @Override
1177
    protected String getConfigurationFileName() {
1184
    protected String getConfigurationFileName() {
1178
        return "Table_Bon_Livraison.xml";
1185
        return "Table_Bon_Livraison.xml";
1179
    }
1186
    }
1180
 
1187
 
1181
    @Override
1188
    @Override
1182
    public SQLElement getSQLElement() {
1189
    public SQLElement getSQLElement() {
1183
        return Configuration.getInstance().getDirectory().getElement("BON_DE_LIVRAISON_ELEMENT");
1190
        return Configuration.getInstance().getDirectory().getElement("BON_DE_LIVRAISON_ELEMENT");
1184
    }
1191
    }
1185
 
1192
 
1186
    @Override
1193
    @Override
1187
    protected List<AbstractAction> getAdditionnalMouseAction(final int rowIndex) {
1194
    protected List<AbstractAction> getAdditionnalMouseAction(final int rowIndex) {
1188
        List<AbstractAction> actions = new ArrayList<AbstractAction>();
1195
        List<AbstractAction> actions = new ArrayList<AbstractAction>();
1189
        actions.addAll(super.getAdditionnalMouseAction(rowIndex));
1196
        actions.addAll(super.getAdditionnalMouseAction(rowIndex));
1190
        actions.add(new AbstractAction("Ajouter un reliquat") {
1197
        actions.add(new AbstractAction("Ajouter un reliquat") {
1191
 
1198
 
1192
            @Override
1199
            @Override
1193
            public void actionPerformed(ActionEvent e) {
1200
            public void actionPerformed(ActionEvent e) {
1194
                if (reliquatTable != null) {
1201
                if (reliquatTable != null) {
1195
                    SQLRowAccessor sqlRowArticleChildElement = getRowValuesTable().getRowValuesTableModel().getRowValuesAt(rowIndex);
1202
                    SQLRowAccessor sqlRowArticleChildElement = getRowValuesTable().getRowValuesTableModel().getRowValuesAt(rowIndex);
1196
                    final SQLRowValues row2Insert = new SQLRowValues(reliquatTable.getDefaultRowValues());
1203
                    final SQLRowValues row2Insert = new SQLRowValues(reliquatTable.getDefaultRowValues());
1197
 
1204
 
1198
                    row2Insert.put("ID_BON_DE_LIVRAISON_ELEMENT", sqlRowArticleChildElement);
1205
                    row2Insert.put("ID_BON_DE_LIVRAISON_ELEMENT", sqlRowArticleChildElement);
1199
 
1206
 
1200
                    row2Insert.put("QTE", 1);
1207
                    row2Insert.put("QTE", 1);
1201
                    row2Insert.put("QTE_UNITAIRE", BigDecimal.ONE);
1208
                    row2Insert.put("QTE_UNITAIRE", BigDecimal.ONE);
1202
 
1209
 
1203
                    reliquatTable.getRowValuesTable().getRowValuesTableModel().addRow(row2Insert);
1210
                    reliquatTable.getRowValuesTable().getRowValuesTableModel().addRow(row2Insert);
1204
                }
1211
                }
1205
            }
1212
            }
1206
        });
1213
        });
1207
        return actions;
1214
        return actions;
1208
    }
1215
    }
1209
 
1216
 
1210
    private void hideColumn(int col) {
1217
    private void hideColumn(int col) {
1211
        if (col >= 0) {
1218
        if (col >= 0) {
1212
            // this.table.getColumnModel().getColumn(col).setResizable(false);
1219
            // this.table.getColumnModel().getColumn(col).setResizable(false);
1213
            // this.table.getColumnModel().getColumn(col).setMinWidth(0);
1220
            // this.table.getColumnModel().getColumn(col).setMinWidth(0);
1214
            // this.table.getColumnModel().getColumn(col).setMaxWidth(0);
1221
            // this.table.getColumnModel().getColumn(col).setMaxWidth(0);
1215
            // this.table.getColumnModel().getColumn(col).setPreferredWidth(0);
1222
            // this.table.getColumnModel().getColumn(col).setPreferredWidth(0);
1216
            // this.table.getColumnModel().getColumn(col).setWidth(0);
1223
            // this.table.getColumnModel().getColumn(col).setWidth(0);
1217
            // this.table.getMaskTableModel().hideColumn(col);
1224
            // this.table.getMaskTableModel().hideColumn(col);
1218
            XTableColumnModel columnModel = this.table.getColumnModel();
1225
            XTableColumnModel columnModel = this.table.getColumnModel();
1219
 
1226
 
1220
            columnModel.setColumnVisible(columnModel.getColumnByModelIndex(col), false);
1227
            columnModel.setColumnVisible(columnModel.getColumnByModelIndex(col), false);
1221
 
1228
 
1222
        }
1229
        }
1223
    }
1230
    }
1224
}
1231
}