OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 177 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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