OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 80 | Rev 90 | 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.common.ui;
15
 
16
import org.openconcerto.erp.config.ComptaPropsConfiguration;
17
import org.openconcerto.erp.core.finance.tax.model.TaxeCache;
18
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
61 ilm 19
import org.openconcerto.erp.core.sales.product.ui.QteUnitRowValuesRenderer;
18 ilm 20
import org.openconcerto.erp.preferences.DefaultNXProps;
61 ilm 21
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
18 ilm 22
import org.openconcerto.sql.Configuration;
23
import org.openconcerto.sql.element.SQLElement;
19 ilm 24
import org.openconcerto.sql.model.SQLRow;
25
import org.openconcerto.sql.model.SQLRowAccessor;
18 ilm 26
import org.openconcerto.sql.model.SQLRowValues;
41 ilm 27
import org.openconcerto.sql.model.SQLTable;
80 ilm 28
import org.openconcerto.sql.model.UndefinedRowValuesCache;
41 ilm 29
import org.openconcerto.sql.model.Where;
61 ilm 30
import org.openconcerto.sql.preferences.SQLPreferences;
83 ilm 31
import org.openconcerto.sql.sqlobject.ITextArticleWithCompletionCellEditor;
61 ilm 32
import org.openconcerto.sql.sqlobject.ITextWithCompletion;
18 ilm 33
import org.openconcerto.sql.view.list.AutoCompletionManager;
34
import org.openconcerto.sql.view.list.CellDynamicModifier;
35
import org.openconcerto.sql.view.list.RowValuesTable;
36
import org.openconcerto.sql.view.list.RowValuesTableModel;
37
import org.openconcerto.sql.view.list.SQLTableElement;
65 ilm 38
import org.openconcerto.sql.view.list.ValidStateChecker;
18 ilm 39
 
61 ilm 40
import java.math.BigDecimal;
41
import java.math.MathContext;
67 ilm 42
import java.math.RoundingMode;
28 ilm 43
import java.util.ArrayList;
44
import java.util.HashMap;
18 ilm 45
import java.util.List;
28 ilm 46
import java.util.Map;
18 ilm 47
import java.util.Vector;
48
 
49
import javax.swing.ToolTipManager;
61 ilm 50
import javax.swing.table.TableCellRenderer;
18 ilm 51
 
52
public abstract class AbstractAchatArticleItemTable extends AbstractArticleItemTable {
53
 
73 ilm 54
    private AutoCompletionManager m;
55
    private AutoCompletionManager m2, m3;
56
    private AutoCompletionManager m4;
57
    private final SQLTable tableArticle = getSQLElement().getTable().getTable("ARTICLE");
58
    private SQLRowAccessor rowDevise;
59
    private boolean supplierCode;
60
 
18 ilm 61
    public AbstractAchatArticleItemTable() {
62
        super();
63
    }
64
 
65
    protected void init() {
66
 
67
        final SQLElement e = getSQLElement();
68
 
67 ilm 69
        SQLPreferences prefs = SQLPreferences.getMemCached(getSQLElement().getTable().getDBRoot());
61 ilm 70
        final boolean selectArticle = prefs.getBoolean(GestionArticleGlobalPreferencePanel.USE_CREATED_ARTICLE, false);
71
        final boolean createAuto = prefs.getBoolean(GestionArticleGlobalPreferencePanel.CREATE_ARTICLE_AUTO, true);
67 ilm 72
        this.supplierCode = prefs.getBoolean(GestionArticleGlobalPreferencePanel.SUPPLIER_PRODUCT_CODE, false);
61 ilm 73
 
18 ilm 74
        final List<SQLTableElement> list = new Vector<SQLTableElement>();
75
        list.add(new SQLTableElement(e.getTable().getField("ID_STYLE")));
28 ilm 76
 
67 ilm 77
        SQLTableElement tableElementCodeFournisseur = null;
78
 
79
        if (e.getTable().contains("ID_CODE_FOURNISSEUR") && supplierCode) {
80
            tableElementCodeFournisseur = new SQLTableElement(e.getTable().getField("ID_CODE_FOURNISSEUR"), true, true, true);
81
            list.add(tableElementCodeFournisseur);
82
        }
83
 
84
        SQLTableElement tableElementArticle = new SQLTableElement(e.getTable().getField("ID_ARTICLE"), true, true, true);
61 ilm 85
        list.add(tableElementArticle);
28 ilm 86
 
87
        if (e.getTable().getFieldsName().contains("ID_FAMILLE_ARTICLE")) {
88
            final SQLTableElement tableFamille = new SQLTableElement(e.getTable().getField("ID_FAMILLE_ARTICLE"));
89
            list.add(tableFamille);
90
        }
91
 
92
        if (e.getTable().getFieldsName().contains("PREBILAN")) {
93
            final SQLTableElement tableElementPre = new SQLTableElement(e.getTable().getField("PREBILAN"), Long.class, new DeviseCellEditor());
94
            tableElementPre.setRenderer(new DeviseNiceTableCellRenderer());
95
            list.add(tableElementPre);
96
        }
97
 
18 ilm 98
        // Code article
83 ilm 99
        final SQLTableElement tableElementCode = new SQLTableElement(e.getTable().getField("CODE"), String.class, new ITextArticleWithCompletionCellEditor(e.getTable().getTable("ARTICLE"), e
100
                .getTable().getTable("ARTICLE_FOURNISSEUR")));
18 ilm 101
        list.add(tableElementCode);
102
        // Désignation de l'article
103
        final SQLTableElement tableElementNom = new SQLTableElement(e.getTable().getField("NOM"));
104
        list.add(tableElementNom);
73 ilm 105
        if (e.getTable().getFieldsName().contains("DESCRIPTIF")) {
106
            final SQLTableElement tableElementDesc = new SQLTableElement(e.getTable().getField("DESCRIPTIF"));
107
            list.add(tableElementDesc);
108
        }
41 ilm 109
        if (e.getTable().getFieldsName().contains("COLORIS")) {
110
            final SQLTableElement tableElementColoris = new SQLTableElement(e.getTable().getField("COLORIS"));
111
            list.add(tableElementColoris);
112
        }
18 ilm 113
        // Valeur des métriques
114
        final SQLTableElement tableElement_ValeurMetrique2 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_2"), Float.class);
115
        list.add(tableElement_ValeurMetrique2);
116
        final SQLTableElement tableElement_ValeurMetrique3 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_3"), Float.class);
117
        list.add(tableElement_ValeurMetrique3);
118
        final SQLTableElement tableElement_ValeurMetrique1 = new SQLTableElement(e.getTable().getField("VALEUR_METRIQUE_1"), Float.class);
119
        list.add(tableElement_ValeurMetrique1);
120
        // Prix d'achat HT de la métrique 1
67 ilm 121
        final SQLTableElement tableElement_PrixMetrique1_AchatHT = new SQLTableElement(e.getTable().getField("PRIX_METRIQUE_HA_1"), BigDecimal.class);
73 ilm 122
        tableElement_PrixMetrique1_AchatHT.setRenderer(new DeviseTableCellRenderer());
18 ilm 123
        list.add(tableElement_PrixMetrique1_AchatHT);
19 ilm 124
 
125
        final SQLTableElement tableElement_Devise = new SQLTableElement(e.getTable().getField("ID_DEVISE"));
67 ilm 126
        final SQLTableElement tableElement_PA_Devise = new SQLTableElement(e.getTable().getField("PA_DEVISE"), BigDecimal.class);
73 ilm 127
        tableElement_PA_Devise.setRenderer(new DeviseTableCellRenderer());
28 ilm 128
        if (DefaultNXProps.getInstance().getBooleanValue(AbstractVenteArticleItemTable.ARTICLE_SHOW_DEVISE, false)) {
129
            // Devise
130
            list.add(tableElement_Devise);
19 ilm 131
 
28 ilm 132
            // Prix d'achat HT devise
133
            list.add(tableElement_PA_Devise);
134
        }
18 ilm 135
        // Mode de vente
136
        final SQLTableElement tableElement_ModeVente = new SQLTableElement(e.getTable().getField("ID_MODE_VENTE_ARTICLE"));
137
        list.add(tableElement_ModeVente);
19 ilm 138
 
18 ilm 139
        // Prix d'achat unitaire HT
67 ilm 140
        this.ha = new SQLTableElement(e.getTable().getField("PA_HT"), BigDecimal.class);
73 ilm 141
        this.ha.setRenderer(new DeviseTableCellRenderer());
18 ilm 142
        list.add(this.ha);
19 ilm 143
 
61 ilm 144
        SQLTableElement qteU = new SQLTableElement(e.getTable().getField("QTE_UNITAIRE"), BigDecimal.class) {
145
            @Override
146
            public boolean isCellEditable(SQLRowValues vals) {
147
 
148
                SQLRowAccessor row = vals.getForeign("ID_UNITE_VENTE");
149
                if (row != null && !row.isUndefined() && row.getBoolean("A_LA_PIECE")) {
150
                    return false;
151
                } else {
152
                    return super.isCellEditable(vals);
153
                }
154
            }
155
 
156
            @Override
157
            public TableCellRenderer getTableCellRenderer() {
158
                return new QteUnitRowValuesRenderer();
159
            }
67 ilm 160
 
161
            protected Object getDefaultNullValue() {
162
                return BigDecimal.ZERO;
163
            }
61 ilm 164
        };
165
        list.add(qteU);
166
 
167
        SQLTableElement uniteVente = new SQLTableElement(e.getTable().getField("ID_UNITE_VENTE"));
168
        list.add(uniteVente);
169
 
19 ilm 170
        // Quantité
171
        final SQLTableElement qteElement = new SQLTableElement(e.getTable().getField("QTE"), Integer.class) {
172
            protected Object getDefaultNullValue() {
173
                return Integer.valueOf(0);
174
            }
175
        };
176
        list.add(qteElement);
18 ilm 177
        // TVA
61 ilm 178
        this.tableElementTVA = new SQLTableElement(e.getTable().getField("ID_TAXE"));
179
        list.add(this.tableElementTVA);
18 ilm 180
        // Poids piece
181
        SQLTableElement tableElementPoids = new SQLTableElement(e.getTable().getField("POIDS"), Float.class);
182
        list.add(tableElementPoids);
183
 
184
        // Poids total
185
        this.tableElementPoidsTotal = new SQLTableElement(e.getTable().getField("T_POIDS"), Float.class);
186
        list.add(this.tableElementPoidsTotal);
187
 
188
        // Service
189
        String val = DefaultNXProps.getInstance().getStringProperty("ArticleService");
190
        Boolean b = Boolean.valueOf(val);
191
        if (b != null && b.booleanValue()) {
192
            this.service = new SQLTableElement(e.getTable().getField("SERVICE"), Boolean.class);
193
            list.add(this.service);
194
        }
195
 
28 ilm 196
        if (DefaultNXProps.getInstance().getBooleanValue(AbstractVenteArticleItemTable.ARTICLE_SHOW_DEVISE, false)) {
197
            // Prix d'achat HT devise
67 ilm 198
            this.tableElementTotalDevise = new SQLTableElement(e.getTable().getField("PA_DEVISE_T"), BigDecimal.class);
73 ilm 199
            this.tableElementTotalDevise.setRenderer(new DeviseTableCellRenderer());
28 ilm 200
            list.add(tableElementTotalDevise);
201
        }
67 ilm 202
 
203
        SQLTableElement tableElementRemise = null;
204
        if (e.getTable().contains("POURCENT_REMISE")) {
205
            tableElementRemise = new SQLTableElement(e.getTable().getField("POURCENT_REMISE"));
206
            list.add(tableElementRemise);
207
        }
208
 
18 ilm 209
        // Total HT
67 ilm 210
        this.totalHT = new SQLTableElement(e.getTable().getField("T_PA_HT"), BigDecimal.class);
73 ilm 211
        this.totalHT.setRenderer(new DeviseTableCellRenderer());
65 ilm 212
        this.totalHT.setEditable(false);
73 ilm 213
        if (e.getTable().contains("POURCENT_REMISE") && tableElementRemise != null) {
67 ilm 214
            tableElementRemise.addModificationListener(this.totalHT);
215
        }
18 ilm 216
        list.add(this.totalHT);
67 ilm 217
        this.totalHA = this.totalHT;
18 ilm 218
        // Total TTC
67 ilm 219
        this.tableElementTotalTTC = new SQLTableElement(e.getTable().getField("T_PA_TTC"), BigDecimal.class);
73 ilm 220
        this.tableElementTotalTTC.setRenderer(new DeviseTableCellRenderer());
18 ilm 221
        list.add(this.tableElementTotalTTC);
222
 
80 ilm 223
        SQLRowValues defautRow = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(e.getTable()));
224
        defautRow.put("ID_TAXE", TaxeCache.getCache().getFirstTaxe().getID());
83 ilm 225
        defautRow.put("CODE", "");
226
        defautRow.put("NOM", "");
80 ilm 227
        this.model = new RowValuesTableModel(e, list, e.getTable().getField("NOM"), false, defautRow);
228
 
18 ilm 229
        this.table = new RowValuesTable(this.model, getConfigurationFile());
230
        ToolTipManager.sharedInstance().unregisterComponent(this.table);
231
        ToolTipManager.sharedInstance().unregisterComponent(this.table.getTableHeader());
232
 
233
        // Autocompletion
28 ilm 234
        List<String> completionFields = new ArrayList<String>();
61 ilm 235
        completionFields.add("ID_UNITE_VENTE");
28 ilm 236
        completionFields.add("PA_HT");
237
        completionFields.add("PV_HT");
238
        completionFields.add("POIDS");
239
        completionFields.add("ID_TAXE");
240
        completionFields.add("PRIX_METRIQUE_HA_1");
241
        completionFields.add("PRIX_METRIQUE_HA_2");
242
        completionFields.add("PRIX_METRIQUE_HA_3");
243
        completionFields.add("VALEUR_METRIQUE_1");
244
        completionFields.add("VALEUR_METRIQUE_2");
245
        completionFields.add("VALEUR_METRIQUE_3");
246
        completionFields.add("ID_MODE_VENTE_ARTICLE");
247
        completionFields.add("PRIX_METRIQUE_VT_1");
248
        completionFields.add("PRIX_METRIQUE_VT_2");
249
        completionFields.add("PRIX_METRIQUE_VT_3");
250
        completionFields.add("SERVICE");
251
        completionFields.add("ID_DEVISE");
252
        completionFields.add("PA_DEVISE");
41 ilm 253
        if (e.getTable().getFieldsName().contains("COLORIS")) {
254
            completionFields.add("COLORIS");
255
        }
73 ilm 256
        if (e.getTable().getFieldsName().contains("DESCRIPTIF")) {
257
            completionFields.add("DESCRIPTIF");
258
        }
28 ilm 259
        if (e.getTable().getFieldsName().contains("ID_FAMILLE_ARTICLE")) {
260
            completionFields.add("ID_FAMILLE_ARTICLE");
261
        }
262
 
41 ilm 263
        this.m = new AutoCompletionManager(tableElementCode, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.CODE"), this.table,
19 ilm 264
                this.table.getRowValuesTableModel()) {
265
            @Override
266
            protected Object getValueFrom(SQLRow row, String field) {
267
                Object res = tarifCompletion(row, field);
268
                if (res == null) {
269
                    return super.getValueFrom(row, field);
270
                } else {
271
                    return res;
272
                }
273
            }
274
        };
18 ilm 275
        m.fill("NOM", "NOM");
61 ilm 276
        m.fill("ID", "ID_ARTICLE");
28 ilm 277
        for (String string : completionFields) {
278
            m.fill(string, string);
279
        }
41 ilm 280
        this.m2 = new AutoCompletionManager(tableElementNom, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.NOM"), this.table,
19 ilm 281
                this.table.getRowValuesTableModel()) {
282
            @Override
283
            protected Object getValueFrom(SQLRow row, String field) {
284
                Object res = tarifCompletion(row, field);
285
                if (res == null) {
286
                    return super.getValueFrom(row, field);
287
                } else {
288
                    return res;
289
                }
290
            }
291
        };
18 ilm 292
        m2.fill("CODE", "CODE");
61 ilm 293
        m2.fill("ID", "ID_ARTICLE");
28 ilm 294
        for (String string : completionFields) {
295
            m2.fill(string, string);
296
        }
297
 
61 ilm 298
        this.m3 = new AutoCompletionManager(tableElementArticle, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.NOM"), this.table,
65 ilm 299
                this.table.getRowValuesTableModel(), ITextWithCompletion.MODE_CONTAINS, true, true, new ValidStateChecker()) {
61 ilm 300
            @Override
301
            protected Object getValueFrom(SQLRow row, String field) {
302
                Object res = tarifCompletion(row, field);
303
                if (res == null) {
304
                    return super.getValueFrom(row, field);
305
                } else {
306
                    return res;
307
                }
308
            }
309
        };
310
        m3.fill("CODE", "CODE");
311
        m3.fill("NOM", "NOM");
312
        for (String string : completionFields) {
313
            m3.fill(string, string);
314
        }
28 ilm 315
 
67 ilm 316
        if (e.getTable().contains("ID_CODE_FOURNISSEUR") && supplierCode) {
317
            this.m4 = new AutoCompletionManager(tableElementCodeFournisseur, ((ComptaPropsConfiguration) Configuration.getInstance()).getSQLBaseSociete().getField("ARTICLE.NOM"), this.table,
318
                    this.table.getRowValuesTableModel(), ITextWithCompletion.MODE_CONTAINS, true, true, new ValidStateChecker()) {
319
                @Override
320
                protected Object getValueFrom(SQLRow row, String field) {
321
                    Object res = tarifCompletion(row, field);
322
                    if (res == null) {
323
                        return super.getValueFrom(row, field);
324
                    } else {
325
                        return res;
326
                    }
327
                }
328
            };
329
            m4.fill("CODE", "CODE");
330
            m4.fill("NOM", "NOM");
331
            for (String string : completionFields) {
332
                m4.fill(string, string);
333
            }
334
        }
335
 
336
        tableElementCode.addModificationListener(tableElementArticle);
337
        tableElementArticle.setModifier(new CellDynamicModifier() {
338
            @Override
339
            public Object computeValueFrom(SQLRowValues row) {
83 ilm 340
                try {
341
                    SQLRowAccessor foreign = row.getForeign("ID_ARTICLE");
342
                    if (foreign != null && !foreign.isUndefined() && foreign.getObject("CODE") != null && foreign.getString("CODE").equals(row.getString("CODE"))) {
343
                        return foreign.getID();
344
                    } else {
345
                        return tableArticle.getUndefinedID();
346
                    }
347
                } catch (Exception e) {
67 ilm 348
                    return tableArticle.getUndefinedID();
349
                }
350
            }
351
        });
352
 
18 ilm 353
        // Calcul automatique du total HT
354
        qteElement.addModificationListener(this.totalHT);
61 ilm 355
        qteU.addModificationListener(this.totalHT);
18 ilm 356
        this.ha.addModificationListener(this.totalHT);
357
        this.totalHT.setModifier(new CellDynamicModifier() {
358
            public Object computeValueFrom(final SQLRowValues row) {
359
 
360
                int qte = Integer.parseInt(row.getObject("QTE").toString());
83 ilm 361
                BigDecimal f = (row.getObject("PA_HT") == null) ? BigDecimal.ZERO : (BigDecimal) row.getObject("PA_HT");
61 ilm 362
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
67 ilm 363
                BigDecimal r = b.multiply(f.multiply(BigDecimal.valueOf(qte)), MathContext.DECIMAL128).setScale(totalHT.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
364
 
365
                if (row.getTable().contains("POURCENT_REMISE")) {
366
                    final Object o2 = row.getObject("POURCENT_REMISE");
367
 
368
                    BigDecimal lremise = (o2 == null) ? BigDecimal.ZERO : ((BigDecimal) o2);
369
                    if (lremise.compareTo(BigDecimal.ZERO) >= 0 && lremise.compareTo(BigDecimal.valueOf(100)) < 0) {
370
 
371
                        r = r.multiply(new BigDecimal(100).subtract(lremise).movePointLeft(2)).setScale(totalHT.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
372
                    }
373
                }
374
 
375
                return r;
18 ilm 376
            }
377
 
378
        });
28 ilm 379
        if (DefaultNXProps.getInstance().getBooleanValue(AbstractVenteArticleItemTable.ARTICLE_SHOW_DEVISE, false)) {
380
            qteElement.addModificationListener(this.tableElementTotalDevise);
61 ilm 381
            qteU.addModificationListener(this.tableElementTotalDevise);
28 ilm 382
            tableElement_PA_Devise.addModificationListener(this.tableElementTotalDevise);
73 ilm 383
            if (e.getTable().contains("POURCENT_REMISE") && tableElementRemise != null) {
67 ilm 384
                tableElementRemise.addModificationListener(this.tableElementTotalDevise);
385
            }
28 ilm 386
            this.tableElementTotalDevise.setModifier(new CellDynamicModifier() {
387
                public Object computeValueFrom(final SQLRowValues row) {
388
                    int qte = Integer.parseInt(row.getObject("QTE").toString());
67 ilm 389
                    BigDecimal f = (BigDecimal) row.getObject("PA_DEVISE");
61 ilm 390
                    BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
67 ilm 391
                    BigDecimal r = b.multiply(f.multiply(BigDecimal.valueOf(qte)), MathContext.DECIMAL128).setScale(tableElementTotalDevise.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
392
 
393
                    if (row.getTable().contains("POURCENT_REMISE")) {
394
                        final Object o2 = row.getObject("POURCENT_REMISE");
395
                        BigDecimal lremise = (o2 == null) ? BigDecimal.ZERO : ((BigDecimal) o2);
396
                        if (lremise.compareTo(BigDecimal.ZERO) >= 0 && lremise.compareTo(BigDecimal.valueOf(100)) < 0) {
397
 
398
                            r = r.multiply(new BigDecimal(100).subtract(lremise).movePointLeft(2)).setScale(tableElementTotalDevise.getDecimalDigits(), BigDecimal.ROUND_HALF_UP);
399
                        }
400
                    }
61 ilm 401
                    return r;
28 ilm 402
                }
19 ilm 403
 
28 ilm 404
            });
405
        }
18 ilm 406
        // Calcul automatique du total TTC
407
        qteElement.addModificationListener(this.tableElementTotalTTC);
61 ilm 408
        qteU.addModificationListener(this.tableElementTotalTTC);
18 ilm 409
        this.ha.addModificationListener(this.tableElementTotalTTC);
61 ilm 410
        this.tableElementTVA.addModificationListener(this.tableElementTotalTTC);
18 ilm 411
        this.tableElementTotalTTC.setModifier(new CellDynamicModifier() {
412
            @Override
413
            public Object computeValueFrom(SQLRowValues row) {
414
                int qte = Integer.parseInt(row.getObject("QTE").toString());
67 ilm 415
                BigDecimal f = (BigDecimal) row.getObject("PA_HT");
18 ilm 416
                int idTaux = Integer.parseInt(row.getObject("ID_TAXE").toString());
417
                if (idTaux < 0) {
418
                    System.out.println(row);
419
                }
420
                Float resultTaux = TaxeCache.getCache().getTauxFromId(idTaux);
421
 
61 ilm 422
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
67 ilm 423
                BigDecimal r = b.multiply(f.multiply(BigDecimal.valueOf(qte), MathContext.DECIMAL128), MathContext.DECIMAL128).setScale(tableElementTotalTTC.getDecimalDigits(),
424
                        BigDecimal.ROUND_HALF_UP);
73 ilm 425
                float taux = (resultTaux == null) ? 0.0F : resultTaux.floatValue();
67 ilm 426
 
427
                BigDecimal total = r.multiply(BigDecimal.ONE.add(new BigDecimal(taux / 100f))).setScale(tableElementTotalTTC.getDecimalDigits(), RoundingMode.HALF_UP);
61 ilm 428
                return total;
18 ilm 429
            }
430
 
431
        });
432
 
433
        this.table.readState();
434
 
435
        // Mode Gestion article avancé
436
        String valModeAvanceVt = DefaultNXProps.getInstance().getStringProperty("ArticleModeVenteAvance");
437
        Boolean bModeAvance = Boolean.valueOf(valModeAvanceVt);
28 ilm 438
        boolean view = !(bModeAvance != null && !bModeAvance.booleanValue());
439
        setColumnVisible(this.model.getColumnForField("VALEUR_METRIQUE_1"), view);
440
        setColumnVisible(this.model.getColumnForField("VALEUR_METRIQUE_2"), view);
441
        setColumnVisible(this.model.getColumnForField("VALEUR_METRIQUE_3"), view);
442
        setColumnVisible(this.model.getColumnForField("PRIX_METRIQUE_VT_1"), view);
443
        setColumnVisible(this.model.getColumnForField("ID_MODE_VENTE_ARTICLE"), view);
444
        setColumnVisible(this.model.getColumnForField("PA_HT"), view);
18 ilm 445
 
61 ilm 446
        // Gestion des unités de vente
447
        final boolean gestionUV = prefs.getBoolean(GestionArticleGlobalPreferencePanel.UNITE_VENTE, true);
448
        setColumnVisible(this.model.getColumnForField("QTE_UNITAIRE"), gestionUV);
449
        setColumnVisible(this.model.getColumnForField("ID_UNITE_VENTE"), gestionUV);
450
 
451
        setColumnVisible(this.model.getColumnForField("ID_STYLE"), DefaultNXProps.getInstance().getBooleanValue("ArticleShowStyle", true));
452
 
453
        setColumnVisible(this.model.getColumnForField("ID_ARTICLE"), selectArticle);
454
        setColumnVisible(this.model.getColumnForField("CODE"), !selectArticle || (selectArticle && createAuto));
455
        setColumnVisible(this.model.getColumnForField("NOM"), !selectArticle || (selectArticle && createAuto));
456
 
18 ilm 457
        // Calcul automatique du poids unitaire
458
        tableElement_ValeurMetrique1.addModificationListener(tableElementPoids);
459
        tableElement_ValeurMetrique2.addModificationListener(tableElementPoids);
460
        tableElement_ValeurMetrique3.addModificationListener(tableElementPoids);
461
        tableElementPoids.setModifier(new CellDynamicModifier() {
462
            public Object computeValueFrom(SQLRowValues row) {
463
                return new Float(ReferenceArticleSQLElement.getPoidsFromDetails(row));
464
            }
465
 
466
        });
467
        // Calcul automatique du poids total
468
        tableElementPoids.addModificationListener(this.tableElementPoidsTotal);
469
        qteElement.addModificationListener(this.tableElementPoidsTotal);
61 ilm 470
        qteU.addModificationListener(this.tableElementPoidsTotal);
18 ilm 471
        this.tableElementPoidsTotal.setModifier(new CellDynamicModifier() {
472
            public Object computeValueFrom(SQLRowValues row) {
73 ilm 473
 
65 ilm 474
                Number f = (row.getObject("POIDS") == null) ? 0 : (Number) row.getObject("POIDS");
18 ilm 475
                int qte = Integer.parseInt(row.getObject("QTE").toString());
61 ilm 476
 
477
                BigDecimal b = (row.getObject("QTE_UNITAIRE") == null) ? BigDecimal.ONE : (BigDecimal) row.getObject("QTE_UNITAIRE");
478
                // FIXME convertir en float autrement pour éviter une valeur non transposable
479
                // avec floatValue ou passer POIDS en bigDecimal
480
                return b.multiply(new BigDecimal(f.floatValue() * qte)).floatValue();
18 ilm 481
            }
482
 
483
        });
484
 
485
        // Calcul automatique du prix d'achat unitaire HT
486
        tableElement_ValeurMetrique1.addModificationListener(this.ha);
487
        tableElement_ValeurMetrique2.addModificationListener(this.ha);
488
        tableElement_ValeurMetrique3.addModificationListener(this.ha);
489
        tableElement_PrixMetrique1_AchatHT.addModificationListener(this.ha);
490
        this.ha.setModifier(new CellDynamicModifier() {
491
            public Object computeValueFrom(SQLRowValues row) {
492
 
493
                if (row.getInt("ID_MODE_VENTE_ARTICLE") == ReferenceArticleSQLElement.A_LA_PIECE) {
67 ilm 494
                    return row.getObject("PRIX_METRIQUE_HA_1");
18 ilm 495
                } else {
496
 
67 ilm 497
                    final BigDecimal prixHAFromDetails = ReferenceArticleSQLElement.getPrixHAFromDetails(row);
498
                    return prixHAFromDetails.setScale(ha.getDecimalDigits(), RoundingMode.HALF_UP);
18 ilm 499
                }
500
 
501
            }
502
 
503
        });
504
 
61 ilm 505
        uniteVente.addModificationListener(qteU);
506
        qteU.setModifier(new CellDynamicModifier() {
507
            public Object computeValueFrom(SQLRowValues row) {
508
                SQLRowAccessor rowUnite = row.getForeign("ID_UNITE_VENTE");
509
                if (rowUnite != null && !rowUnite.isUndefined() && rowUnite.getBoolean("A_LA_PIECE")) {
510
                    return BigDecimal.ONE;
511
                } else {
512
                    return row.getObject("QTE_UNITAIRE");
513
                }
514
            }
515
 
516
        });
517
 
28 ilm 518
        for (String string : visibilityMap.keySet()) {
519
            setColumnVisible(this.model.getColumnForField(string), visibilityMap.get(string));
520
        }
521
 
19 ilm 522
        // On réécrit la configuration au cas ou les preferences aurait changé
18 ilm 523
        this.table.writeState();
524
    }
525
 
28 ilm 526
    private static Map<String, Boolean> visibilityMap = new HashMap<String, Boolean>();
527
 
528
    public static Map<String, Boolean> getVisibilityMap() {
529
        return visibilityMap;
530
    }
531
 
67 ilm 532
    public void setFournisseur(SQLRow rowFournisseur) {
533
 
534
        if (getSQLElement().getTable().contains("ID_CODE_FOURNISSEUR") && this.supplierCode) {
535
 
536
            if (rowFournisseur != null && !rowFournisseur.isUndefined()) {
537
                Where w = new Where(getSQLElement().getTable().getTable("CODE_FOURNISSEUR").getField("ID_FOURNISSEUR"), "=", rowFournisseur.getID());
538
                this.m4.setWhere(w);
539
            } else {
540
                this.m4.setWhere(null);
541
            }
542
        }
543
    }
544
 
19 ilm 545
    private Object tarifCompletion(SQLRow row, String field) {
546
 
547
        if (getDevise() != null && !getDevise().isUndefined()) {
548
            if ((field.equalsIgnoreCase("ID_DEVISE") || field.equalsIgnoreCase("ID_DEVISE_HA"))) {
549
                return getDevise().getID();
550
            } else if ((field.equalsIgnoreCase("PA_DEVISE"))) {
551
                return row.getObject("PA_DEVISE");
552
            }
553
        } else {
554
            if ((field.equalsIgnoreCase("ID_DEVISE") || field.equalsIgnoreCase("ID_DEVISE_HA"))) {
555
                return Configuration.getInstance().getDirectory().getElement("DEVISE").getTable().getUndefinedID();
556
            } else if ((field.equalsIgnoreCase("PA_DEVISE"))) {
557
 
67 ilm 558
                return BigDecimal.ZERO;
19 ilm 559
            }
560
        }
561
        return null;
562
    }
563
 
564
    public SQLRowAccessor getDevise() {
565
        return this.rowDevise;
566
    }
567
 
568
    public void setDevise(SQLRowAccessor deviseRow) {
569
        this.rowDevise = deviseRow;
570
    }
41 ilm 571
 
572
    public void setFournisseurFilterOnCompletion(SQLRow row) {
573
        if (row != null && !row.isUndefined()) {
67 ilm 574
            Where w = new Where(this.tableArticle.getField("ID_FOURNISSEUR"), "=", row.getID());
41 ilm 575
            this.m.setWhere(w);
576
            this.m2.setWhere(w);
61 ilm 577
            this.m3.setWhere(w);
41 ilm 578
        } else {
579
            this.m.setWhere(null);
580
            this.m2.setWhere(null);
61 ilm 581
            this.m3.setWhere(null);
41 ilm 582
        }
583
    }
584
 
18 ilm 585
}