OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 18 | Rev 65 | 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
 *
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
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;
18
import org.openconcerto.erp.core.common.ui.DeviseCellEditor;
19
import org.openconcerto.erp.core.common.ui.DeviseNiceTableCellRenderer;
20
import org.openconcerto.erp.core.finance.tax.model.TaxeCache;
21
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
22
import org.openconcerto.erp.core.sales.product.ui.ArticleRowValuesRenderer;
61 ilm 23
import org.openconcerto.erp.core.sales.product.ui.QteUnitRowValuesRenderer;
18 ilm 24
import org.openconcerto.erp.model.PrixHT;
25
import org.openconcerto.erp.preferences.DefaultNXProps;
61 ilm 26
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
18 ilm 27
import org.openconcerto.sql.Configuration;
28
import org.openconcerto.sql.element.SQLElement;
61 ilm 29
import org.openconcerto.sql.model.SQLRowAccessor;
18 ilm 30
import org.openconcerto.sql.model.SQLRowValues;
61 ilm 31
import org.openconcerto.sql.model.SQLTable;
32
import org.openconcerto.sql.model.Where;
33
import org.openconcerto.sql.preferences.SQLPreferences;
34
import org.openconcerto.sql.sqlobject.ITextWithCompletion;
18 ilm 35
import org.openconcerto.sql.view.list.AutoCompletionManager;
36
import org.openconcerto.sql.view.list.CellDynamicModifier;
37
import org.openconcerto.sql.view.list.RowValuesTable;
38
import org.openconcerto.sql.view.list.RowValuesTableModel;
39
import org.openconcerto.sql.view.list.SQLTableElement;
40
import org.openconcerto.ui.table.XTableColumnModel;
41
 
61 ilm 42
import java.math.BigDecimal;
43
import java.math.MathContext;
18 ilm 44
import java.util.ArrayList;
45
import java.util.List;
46
import java.util.Vector;
47
 
48
import javax.swing.JButton;
49
import javax.swing.ToolTipManager;
50
import javax.swing.table.TableCellRenderer;
51
 
52
public class BonDeLivraisonItemTable extends AbstractVenteArticleItemTable {
53
 
54
    // private final Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
55
 
56
    private SQLTableElement tableElementPoidsTotalLivree;
61 ilm 57
    private SQLTable tableArticle = Configuration.getInstance().getBase().getTable("ARTICLE");
18 ilm 58
 
59
    public BonDeLivraisonItemTable(List<JButton> l) {
60
        super(l);
61
    }
62
 
63
    @Override
64
    protected void init() {
65
        final SQLElement e = getSQLElement();
66
 
61 ilm 67
        SQLPreferences prefs = new SQLPreferences(getSQLElement().getTable().getDBRoot());
68
        final boolean selectArticle = prefs.getBoolean(GestionArticleGlobalPreferencePanel.USE_CREATED_ARTICLE, false);
69
        final boolean createAuto = prefs.getBoolean(GestionArticleGlobalPreferencePanel.CREATE_ARTICLE_AUTO, true);
70
 
18 ilm 71
        final List<SQLTableElement> list = new Vector<SQLTableElement>();
72
        list.add(new SQLTableElement(e.getTable().getField("ID_STYLE")));
61 ilm 73
 
74
        // Article
75
        final SQLTableElement tableElementArticle = new SQLTableElement(e.getTable().getField("ID_ARTICLE"), true, true, true);
76
        list.add(tableElementArticle);
77
 
18 ilm 78
        // Code article
79
        final SQLTableElement tableElementCode = new SQLTableElement(e.getTable().getField("CODE"));
80
        list.add(tableElementCode);
81
        // Désignation de l'article
82
        final SQLTableElement tableElementNom = new SQLTableElement(e.getTable().getField("NOM"));
83
        list.add(tableElementNom);
84
        // Valeur des métriques
85
        final SQLTableElement tableElement_ValeurMetrique2 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_2"), Float.class) {
86
            @Override
87
            public boolean isCellEditable(SQLRowValues vals) {
88
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
89
                // int mode = vals.getInt("ID_MODE_VENTE_ARTICLE");
90
                if (modeNumber != null
91
                        && (modeNumber.intValue() == ReferenceArticleSQLElement.A_LA_PIECE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_METRE_LONGUEUR)) {
92
                    return false;
93
                } else {
94
                    return super.isCellEditable(vals);
95
                }
96
            }
97
 
98
            @Override
99
            public TableCellRenderer getTableCellRenderer() {
100
 
101
                return new ArticleRowValuesRenderer(null);
102
            }
103
        };
104
 
105
        list.add(tableElement_ValeurMetrique2);
106
        final SQLTableElement tableElement_ValeurMetrique3 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_3"), Float.class) {
107
            @Override
108
            public boolean isCellEditable(SQLRowValues vals) {
109
 
110
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
111
                if (modeNumber != null && (!(modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE))) {
112
                    return false;
113
                } else {
114
                    return super.isCellEditable(vals);
115
                }
116
            }
117
 
118
            @Override
119
            public TableCellRenderer getTableCellRenderer() {
120
 
121
                return new ArticleRowValuesRenderer(null);
122
            }
123
        };
124
 
125
        list.add(tableElement_ValeurMetrique3);
126
        final SQLTableElement tableElement_ValeurMetrique1 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_1"), Float.class) {
127
            @Override
128
            public boolean isCellEditable(SQLRowValues vals) {
129
 
130
                Number modeNumber = (Number) vals.getObject("ID_MODE_VENTE_ARTICLE");
131
                if (modeNumber != null
132
                        && (modeNumber.intValue() == ReferenceArticleSQLElement.A_LA_PIECE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_POID_METRECARRE || modeNumber.intValue() == ReferenceArticleSQLElement.AU_METRE_LARGEUR)) {
133
                    return false;
134
                } else {
135
                    return super.isCellEditable(vals);
136
                }
137
            }
138
 
139
            @Override
140
            public TableCellRenderer getTableCellRenderer() {
141
 
142
                return new ArticleRowValuesRenderer(null);
143
            }
144
        };
145
 
146
        list.add(tableElement_ValeurMetrique1);
147
        // Prix de vente HT de la métrique 1
148
        final SQLTableElement tableElement_PrixMetrique1_VenteHT = new SQLTableElement(e.getTable().getField("PRIX_METRIQUE_VT_1"), Long.class, new DeviseCellEditor()) {
149
            @Override
150
            public TableCellRenderer getTableCellRenderer() {
151
 
152
                List<Integer> l = new ArrayList<Integer>();
153
                l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_CARRE));
154
                l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_LARGEUR));
155
                l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_METRE_LONGUEUR));
156
                l.add(Integer.valueOf(ReferenceArticleSQLElement.AU_POID_METRECARRE));
157
                return new ArticleRowValuesRenderer(l);
158
            }
159
        };
160
        list.add(tableElement_PrixMetrique1_VenteHT);
161
        // Prix d'achat HT de la métrique 1
162
        // final SQLTableElement tableElement_PrixMetrique1_AchatHT = new
163
        // SQLTableElement(e.getTable().getField("PRIX_METRIQUE_HA_1"), Long.class, new
164
        // DeviseCellEditor());
165
        // list.add(tableElement_PrixMetrique1_AchatHT);
166
 
167
        // Prix de vente HT de la métrique 3
168
        // final SQLTableElement tableElement_PrixMetrique3_VenteHT = new
169
        // SQLTableElement(e.getTable().getField("PRIX_METRIQUE_VT_3"), Long.class, new
170
        // DeviseCellEditor());
171
        // list.add(tableElement_PrixMetrique3_VenteHT);
172
        // Prix d'achat HT de la métrique 3
173
        // final SQLTableElement tableElement_PrixMetrique3_AchatHT = new
174
        // SQLTableElement(e.getTable().getField("PRIX_METRIQUE_HA_3"), Long.class, new
175
        // DeviseCellEditor());
176
        // list.add(tableElement_PrixMetrique3_AchatHT);
177
 
61 ilm 178
        SQLTableElement qteU = new SQLTableElement(e.getTable().getField("QTE_UNITAIRE"), BigDecimal.class) {
179
            @Override
180
            public boolean isCellEditable(SQLRowValues vals) {
181
 
182
                SQLRowAccessor row = vals.getForeign("ID_UNITE_VENTE");
183
                if (row != null && !row.isUndefined() && row.getBoolean("A_LA_PIECE")) {
184
                    return false;
185
                } else {
186
                    return super.isCellEditable(vals);
187
                }
188
            }
189
 
190
            @Override
191
            public TableCellRenderer getTableCellRenderer() {
192
                return new QteUnitRowValuesRenderer();
193
            }
194
        };
195
        list.add(qteU);
196
 
197
        SQLTableElement uniteVente = new SQLTableElement(e.getTable().getField("ID_UNITE_VENTE"));
198
        list.add(uniteVente);
199
 
18 ilm 200
        // Quantité
61 ilm 201
        this.qte = new SQLTableElement(e.getTable().getField("QTE"), Integer.class);
202
        list.add(this.qte);
18 ilm 203
 
204
        // Mode de vente
205
        final SQLTableElement tableElement_ModeVente = new SQLTableElement(e.getTable().getField("ID_MODE_VENTE_ARTICLE"));
206
        list.add(tableElement_ModeVente);
207
 
208
        // Prix d'achat unitaire HT
209
        // final SQLTableElement tableElement_PrixAchat_HT = new
210
        // SQLTableElement(e.getTable().getField("PA_HT"), Long.class, new DeviseCellEditor());
211
        // list.add(tableElement_PrixAchat_HT);
212
        // Prix de vente unitaire HT
213
        final SQLTableElement tableElement_PrixVente_HT = new SQLTableElement(e.getTable().getField("PV_HT"), Long.class, new DeviseCellEditor()) {
214
            @Override
215
            public TableCellRenderer getTableCellRenderer() {
216
                List<Integer> l = new ArrayList<Integer>();
217
                l.add(Integer.valueOf(ReferenceArticleSQLElement.A_LA_PIECE));
218
                return new ArticleRowValuesRenderer(l);
219
            }
220
        };
221
        list.add(tableElement_PrixVente_HT);
222
 
223
        // TVA
61 ilm 224
        this.tableElementTVA = new SQLTableElement(e.getTable().getField("ID_TAXE"));
225
        list.add(this.tableElementTVA);
18 ilm 226
 
227
        // Quantité Livrée
228
        final SQLTableElement tableElement_QuantiteLivree = new SQLTableElement(e.getTable().getField("QTE_LIVREE"), Integer.class);
229
        list.add(tableElement_QuantiteLivree);
230
 
231
        // Poids piece
232
        SQLTableElement tableElementPoids = new SQLTableElement(e.getTable().getField("POIDS"), Float.class);
233
        list.add(tableElementPoids);
234
 
235
        // Poids total
236
        this.tableElementPoidsTotal = new SQLTableElement(e.getTable().getField("T_POIDS"), Float.class);
237
        list.add(this.tableElementPoidsTotal);
238
 
239
        // Poids total Livré
240
        this.tableElementPoidsTotalLivree = new SQLTableElement(e.getTable().getField("T_POIDS_LIVREE"), Float.class);
241
        list.add(this.tableElementPoidsTotalLivree);
242
 
243
        // Service
244
        // this.service = new SQLTableElement(e.getTable().getField("SERVICE"), Boolean.class);
245
        // list.add(this.service);
246
        // Total HT
247
        this.totalHT = new SQLTableElement(e.getTable().getField("T_PV_HT"), Long.class, new DeviseCellEditor());
248
        this.totalHT.setRenderer(new DeviseNiceTableCellRenderer());
249
        list.add(this.totalHT);
250
        // Total TTC
251
        this.tableElementTotalTTC = new SQLTableElement(e.getTable().getField("T_PV_TTC"), Long.class, new DeviseCellEditor());
252
        this.tableElementTotalTTC.setRenderer(new DeviseNiceTableCellRenderer());
253
        list.add(this.tableElementTotalTTC);
254
 
255
        model = new RowValuesTableModel(e, list, e.getTable().getField("NOM"));
256
 
257
        this.table = new RowValuesTable(model, getConfigurationFile());
258
        ToolTipManager.sharedInstance().unregisterComponent(this.table);
259
        ToolTipManager.sharedInstance().unregisterComponent(this.table.getTableHeader());
260
 
61 ilm 261
        List<String> completionField = new ArrayList<String>();
262
        SQLTable sqlTableArticle = ((ComptaPropsConfiguration) Configuration.getInstance()).getRootSociete().getTable("ARTICLE");
263
        if (DefaultNXProps.getInstance().getBooleanValue(ARTICLE_SHOW_DEVISE, false)) {
264
 
265
            completionField.add("CODE_DOUANIER");
266
        }
267
        if (DefaultNXProps.getInstance().getBooleanValue(ARTICLE_SHOW_DEVISE, false)) {
268
            completionField.add("ID_PAYS");
269
        }
270
        completionField.add("ID_UNITE_VENTE");
271
        completionField.add("PA_HT");
272
        completionField.add("PV_HT");
273
        completionField.add("ID_TAXE");
274
        completionField.add("POIDS");
275
        completionField.add("PRIX_METRIQUE_HA_1");
276
        completionField.add("PRIX_METRIQUE_HA_2");
277
        completionField.add("PRIX_METRIQUE_HA_3");
278
        completionField.add("VALEUR_METRIQUE_1");
279
        completionField.add("VALEUR_METRIQUE_2");
280
        completionField.add("VALEUR_METRIQUE_3");
281
        completionField.add("ID_MODE_VENTE_ARTICLE");
282
        completionField.add("PRIX_METRIQUE_VT_1");
283
        completionField.add("PRIX_METRIQUE_VT_2");
284
        completionField.add("PRIX_METRIQUE_VT_3");
285
        completionField.add("SERVICE");
286
        if (getSQLElement().getTable().getFieldsName().contains("DESCRIPTIF")) {
287
            completionField.add("DESCRIPTIF");
288
        }
289
        if (DefaultNXProps.getInstance().getBooleanValue(ARTICLE_SHOW_DEVISE, false)) {
290
            completionField.add("ID_DEVISE");
291
        }
292
        if (DefaultNXProps.getInstance().getBooleanValue(ARTICLE_SHOW_DEVISE, false)) {
293
            completionField.add("PV_U_DEVISE");
294
        }
295
        if (getSQLElement().getTable().getFieldsName().contains("QTE_ACHAT") && sqlTableArticle.getTable().getFieldsName().contains("QTE_ACHAT")) {
296
            completionField.add("QTE_ACHAT");
297
        }
298
 
18 ilm 299
        // Autocompletion
300
        final AutoCompletionManager m = new AutoCompletionManager(tableElementCode, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.CODE"), this.table,
301
                this.table.getRowValuesTableModel());
302
        m.fill("NOM", "NOM");
61 ilm 303
        m.fill("ID", "ID_ARTICLE");
304
        for (String string : completionField) {
305
            m.fill(string, string);
306
        }
307
        m.setWhere(new Where(sqlTableArticle.getField("OBSOLETE"), "=", Boolean.FALSE));
308
 
18 ilm 309
        final AutoCompletionManager m2 = new AutoCompletionManager(tableElementNom, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.NOM"), this.table,
310
                this.table.getRowValuesTableModel());
311
        m2.fill("CODE", "CODE");
61 ilm 312
        m2.fill("ID", "ID_ARTICLE");
313
        for (String string : completionField) {
314
            m2.fill(string, string);
315
        }
18 ilm 316
 
61 ilm 317
        m2.setWhere(new Where(sqlTableArticle.getField("OBSOLETE"), "=", Boolean.FALSE));
318
 
319
        final AutoCompletionManager m3 = new AutoCompletionManager(tableElementArticle, sqlTableArticle.getField("NOM"), this.table, this.table.getRowValuesTableModel(),
320
                ITextWithCompletion.MODE_CONTAINS, true, true);
321
        m3.fill("CODE", "CODE");
322
        m3.fill("NOM", "NOM");
323
        for (String string : completionField) {
324
            m3.fill(string, string);
325
        }
326
 
327
        m3.setWhere(new Where(sqlTableArticle.getField("OBSOLETE"), "=", Boolean.FALSE));
328
 
18 ilm 329
        // Calcul automatique du total HT
61 ilm 330
        this.qte.addModificationListener(totalHT);
331
        qteU.addModificationListener(totalHT);
18 ilm 332
        tableElement_PrixVente_HT.addModificationListener(totalHT);
333
        this.totalHT.setModifier(new CellDynamicModifier() {
334
            public Object computeValueFrom(final SQLRowValues row) {
335
                System.out.println("Compute totalHT");
336
                int qte = Integer.parseInt(row.getObject("QTE").toString());
337
                Number f = (Number) row.getObject("PV_HT");
338
                System.out.println("Qte:" + qte + " et PV_HT:" + f);
61 ilm 339
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
340
                long r = b.multiply(new BigDecimal(f.longValue() * qte), MathContext.DECIMAL128).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
18 ilm 341
                return new Long(r);
342
            }
343
 
344
        });
345
        // Calcul automatique du total TTC
61 ilm 346
        this.qte.addModificationListener(tableElementTotalTTC);
347
        qteU.addModificationListener(tableElementTotalTTC);
18 ilm 348
        tableElement_PrixVente_HT.addModificationListener(tableElementTotalTTC);
61 ilm 349
        this.tableElementTVA.addModificationListener(tableElementTotalTTC);
18 ilm 350
        this.tableElementTotalTTC.setModifier(new CellDynamicModifier() {
351
            @Override
352
            public Object computeValueFrom(SQLRowValues row) {
61 ilm 353
 
354
                Number f = (Number) row.getObject("T_PV_HT");
18 ilm 355
                int idTaux = Integer.parseInt(row.getObject("ID_TAXE").toString());
356
 
357
                Float resultTaux = TaxeCache.getCache().getTauxFromId(idTaux);
358
 
61 ilm 359
                PrixHT pHT = new PrixHT(f.longValue());
18 ilm 360
                float taux = (resultTaux == null) ? 0.0F : resultTaux.floatValue();
361
                Long r = new Long(pHT.calculLongTTC(taux / 100f));
362
                return r;
363
            }
364
 
365
        });
366
        // Calcul automatique du poids unitaire
367
        tableElement_ValeurMetrique1.addModificationListener(tableElementPoids);
368
        tableElement_ValeurMetrique2.addModificationListener(tableElementPoids);
369
        tableElement_ValeurMetrique3.addModificationListener(tableElementPoids);
370
        tableElementPoids.setModifier(new CellDynamicModifier() {
371
            public Object computeValueFrom(SQLRowValues row) {
372
                return new Float(ReferenceArticleSQLElement.getPoidsFromDetails(row));
373
            }
374
 
375
        });
376
        // Calcul automatique du poids total
377
        tableElementPoids.addModificationListener(this.tableElementPoidsTotal);
61 ilm 378
        this.qte.addModificationListener(this.tableElementPoidsTotal);
379
        qteU.addModificationListener(this.tableElementPoidsTotal);
18 ilm 380
        this.tableElementPoidsTotal.setModifier(new CellDynamicModifier() {
381
            public Object computeValueFrom(SQLRowValues row) {
382
                Number f = (Number) row.getObject("POIDS");
383
                int qte = Integer.parseInt(row.getObject("QTE").toString());
61 ilm 384
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
385
                // FIXME convertir en float autrement pour éviter une valeur non valeur transposable
386
                // avec floatValue ou passer POIDS en bigDecimal
387
                return b.multiply(new BigDecimal(f.floatValue() * qte)).floatValue();
18 ilm 388
            }
389
 
390
        });
391
 
392
        // Calcul automatique du poids total livrée
393
        tableElementPoids.addModificationListener(this.tableElementPoidsTotalLivree);
394
        tableElement_QuantiteLivree.addModificationListener(this.tableElementPoidsTotalLivree);
395
        this.tableElementPoidsTotalLivree.setModifier(new CellDynamicModifier() {
396
            public Object computeValueFrom(SQLRowValues row) {
397
 
398
                Number f = (Number) row.getObject("POIDS");
399
 
400
                Object qteOb = row.getObject("QTE_LIVREE");
401
                int qte = (qteOb == null) ? 0 : Integer.parseInt(qteOb.toString());
402
 
403
                float fValue = (f == null) ? 0.0F : f.floatValue();
61 ilm 404
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
405
                // FIXME convertir en float autrement pour éviter une valeur non transposable
406
                // avec floatValue ou passer POIDS en bigDecimal
407
                return b.multiply(new BigDecimal(fValue * qte)).floatValue();
18 ilm 408
            }
409
        });
410
 
411
        // Calcul automatique du prix de vente unitaire HT
412
        tableElement_ValeurMetrique1.addModificationListener(tableElement_PrixVente_HT);
413
        tableElement_ValeurMetrique2.addModificationListener(tableElement_PrixVente_HT);
414
        tableElement_ValeurMetrique3.addModificationListener(tableElement_PrixVente_HT);
415
        tableElement_PrixMetrique1_VenteHT.addModificationListener(tableElement_PrixVente_HT);
416
        tableElement_PrixVente_HT.setModifier(new CellDynamicModifier() {
417
            public Object computeValueFrom(SQLRowValues row) {
418
                if (row.getInt("ID_MODE_VENTE_ARTICLE") == ReferenceArticleSQLElement.A_LA_PIECE) {
419
                    System.err.println("Don't computeValue PV_HT --> " + row.getObject("PV_HT") + row);
420
                    return new Long(((Number) row.getObject("PRIX_METRIQUE_VT_1")).longValue());
421
                } else {
422
 
423
                    final long prixVTFromDetails = ReferenceArticleSQLElement.getPrixVTFromDetails(row);
424
                    System.out.println("Prix de vente calculé au détail:" + prixVTFromDetails);
425
                    return new Long(prixVTFromDetails);
426
                }
427
            }
428
        });
429
 
430
        this.table.readState();
431
 
61 ilm 432
        tableElementCode.addModificationListener(tableElementArticle);
433
        tableElementArticle.setModifier(new CellDynamicModifier() {
434
            @Override
435
            public Object computeValueFrom(SQLRowValues row) {
436
                SQLRowAccessor foreign = row.getForeign("ID_ARTICLE");
437
                if (foreign != null && !foreign.isUndefined() && foreign.getObject("CODE") != null && foreign.getString("CODE").equals(row.getString("CODE"))) {
438
                    return foreign.getID();
439
                } else {
440
                    return tableArticle.getUndefinedID();
441
                }
442
            }
443
        });
444
 
18 ilm 445
        // Mode Gestion article avancé
446
        String valModeAvanceVt = DefaultNXProps.getInstance().getStringProperty("ArticleModeVenteAvance");
447
        Boolean bModeAvance = Boolean.valueOf(valModeAvanceVt);
448
        if (bModeAvance != null && !bModeAvance.booleanValue()) {
449
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_1"));
450
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_2"));
451
            hideColumn(model.getColumnForField("VALEUR_METRIQUE_3"));
452
            hideColumn(model.getColumnForField("PV_HT"));
453
            hideColumn(model.getColumnForField("ID_MODE_VENTE_ARTICLE"));
454
        }
61 ilm 455
 
456
        setColumnVisible(this.model.getColumnForField("ID_ARTICLE"), selectArticle);
457
        setColumnVisible(this.model.getColumnForField("CODE"), !selectArticle || (selectArticle && createAuto));
458
        setColumnVisible(this.model.getColumnForField("NOM"), !selectArticle || (selectArticle && createAuto));
459
 
460
        // Gestion des unités de vente
461
        final boolean gestionUV = prefs.getBoolean(GestionArticleGlobalPreferencePanel.UNITE_VENTE, true);
462
        setColumnVisible(this.model.getColumnForField("QTE_UNITAIRE"), gestionUV);
463
        setColumnVisible(this.model.getColumnForField("ID_UNITE_VENTE"), gestionUV);
464
 
18 ilm 465
        // On réécrit la configuration au cas ou les preferences aurait changé
466
        this.table.writeState();
467
 
468
        // Calcul automatique du prix d'achat unitaire HT
469
        // tableElement_ValeurMetrique1.addModificationListener(tableElement_PrixAchat_HT);
470
        // tableElement_ValeurMetrique2.addModificationListener(tableElement_PrixAchat_HT);
471
        // tableElement_ValeurMetrique3.addModificationListener(tableElement_PrixAchat_HT);
472
        // //tableElement_PrixMetrique1_AchatHT.addModificationListener(tableElement_PrixAchat_HT);
473
        // tableElement_PrixAchat_HT.setModifier(new CellDynamicModifier() {
474
        // public Object computeValueFrom(SQLRowValues row) {
475
        // if (row.getInt("ID_MODE_VENTE_ARTICLE") == ReferenceArticleSQLElement.A_LA_PIECE) {
476
        // return new Long(((Number) row.getObject("PA_HT")).longValue());
477
        // } else {
478
        // return new Long(ReferenceArticleSQLElement.getPrixHAFromDetails(row));
479
        // }
480
        // }
481
        // });
482
 
483
        // Mode de vente non éditable
484
        // int modeVenteColumn = model.getColumnForField("ID_MODE_VENTE_ARTICLE");
485
        // if (modeVenteColumn >= 0) {
486
        // model.setEditable(false, modeVenteColumn);
487
        // }
488
 
489
        // for (int i = 0; i < model.getColumnCount(); i++) {
490
        //
491
        // this.table.getColumnModel().getColumn(i).setCellRenderer(new
492
        // ArticleRowValuesRenderer(model));
493
        // }
494
    }
495
 
496
    @Override
497
    public float getPoidsTotal() {
498
 
499
        float poids = 0.0F;
500
        int poidsTColIndex = model.getColumnIndexForElement(this.tableElementPoidsTotalLivree);
501
        if (poidsTColIndex >= 0) {
502
            for (int i = 0; i < table.getRowCount(); i++) {
503
                Number tmp = (Number) model.getValueAt(i, poidsTColIndex);
504
                if (tmp != null) {
505
                    poids += tmp.floatValue();
506
                }
507
            }
508
        }
509
        return poids;
510
    }
511
 
512
    @Override
513
    protected String getConfigurationFileName() {
514
        return "Table_Bon_Livraison.xml";
515
    }
516
 
517
    @Override
518
    public SQLElement getSQLElement() {
519
        return Configuration.getInstance().getDirectory().getElement("BON_DE_LIVRAISON_ELEMENT");
520
    }
521
 
522
    private void hideColumn(int col) {
523
        if (col >= 0) {
524
            // this.table.getColumnModel().getColumn(col).setResizable(false);
525
            // this.table.getColumnModel().getColumn(col).setMinWidth(0);
526
            // this.table.getColumnModel().getColumn(col).setMaxWidth(0);
527
            // this.table.getColumnModel().getColumn(col).setPreferredWidth(0);
528
            // this.table.getColumnModel().getColumn(col).setWidth(0);
529
            // this.table.getMaskTableModel().hideColumn(col);
530
            XTableColumnModel columnModel = this.table.getColumnModel();
531
 
532
            columnModel.setColumnVisible(columnModel.getColumnByModelIndex(col), false);
533
 
534
        }
535
    }
536
}