OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 149 | Rev 174 | 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.supplychain.order.component;
15
 
16
import org.openconcerto.erp.config.ComptaPropsConfiguration;
94 ilm 17
import org.openconcerto.erp.core.common.component.AdresseSQLComponent;
18 ilm 18
import org.openconcerto.erp.core.common.component.TransfertBaseSQLComponent;
63 ilm 19
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement;
18 ilm 20
import org.openconcerto.erp.core.common.element.NumerotationAutoSQLElement;
28 ilm 21
import org.openconcerto.erp.core.common.ui.AbstractVenteArticleItemTable;
18 ilm 22
import org.openconcerto.erp.core.common.ui.DeviseField;
23
import org.openconcerto.erp.core.common.ui.TotalPanel;
65 ilm 24
import org.openconcerto.erp.core.finance.tax.model.TaxeCache;
94 ilm 25
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
149 ilm 26
import org.openconcerto.erp.core.supplychain.order.element.DemandeAchatItemSQLElement;
18 ilm 27
import org.openconcerto.erp.core.supplychain.order.ui.CommandeItemTable;
83 ilm 28
import org.openconcerto.erp.core.supplychain.stock.element.StockItemsUpdater;
93 ilm 29
import org.openconcerto.erp.core.supplychain.stock.element.StockItemsUpdater.TypeStockUpdate;
132 ilm 30
import org.openconcerto.erp.core.supplychain.stock.element.StockLabel;
94 ilm 31
import org.openconcerto.erp.generationDoc.gestcomm.CommandeXmlSheet;
32
import org.openconcerto.erp.panel.PanelOOSQLComponent;
18 ilm 33
import org.openconcerto.erp.preferences.DefaultNXProps;
93 ilm 34
import org.openconcerto.erp.utils.TM;
18 ilm 35
import org.openconcerto.sql.Configuration;
28 ilm 36
import org.openconcerto.sql.element.DefaultElementSQLObject;
94 ilm 37
import org.openconcerto.sql.element.ElementSQLObject;
18 ilm 38
import org.openconcerto.sql.element.SQLElement;
39
import org.openconcerto.sql.model.SQLBackgroundTableCache;
19 ilm 40
import org.openconcerto.sql.model.SQLInjector;
18 ilm 41
import org.openconcerto.sql.model.SQLRow;
42
import org.openconcerto.sql.model.SQLRowAccessor;
43
import org.openconcerto.sql.model.SQLRowValues;
44
import org.openconcerto.sql.model.SQLTable;
57 ilm 45
import org.openconcerto.sql.model.Where;
156 ilm 46
import org.openconcerto.sql.preferences.SQLPreferences;
18 ilm 47
import org.openconcerto.sql.sqlobject.ElementComboBox;
48
import org.openconcerto.sql.sqlobject.JUniqueTextField;
61 ilm 49
import org.openconcerto.sql.sqlobject.SQLRequestComboBox;
18 ilm 50
import org.openconcerto.sql.users.UserManager;
51
import org.openconcerto.sql.view.EditFrame;
73 ilm 52
import org.openconcerto.sql.view.list.RowValuesTable;
65 ilm 53
import org.openconcerto.ui.AutoHideListener;
18 ilm 54
import org.openconcerto.ui.DefaultGridBagConstraints;
25 ilm 55
import org.openconcerto.ui.FormLayouter;
18 ilm 56
import org.openconcerto.ui.JDate;
57
import org.openconcerto.ui.TitledSeparator;
94 ilm 58
import org.openconcerto.ui.component.ComboLockedMode;
18 ilm 59
import org.openconcerto.ui.component.ITextArea;
94 ilm 60
import org.openconcerto.ui.component.ITextCombo;
132 ilm 61
import org.openconcerto.ui.component.InteractionMode;
18 ilm 62
import org.openconcerto.ui.preferences.DefaultProps;
63
import org.openconcerto.utils.ExceptionHandler;
64
 
65
import java.awt.Color;
66
import java.awt.GridBagConstraints;
67
import java.awt.GridBagLayout;
28 ilm 68
import java.awt.event.ActionEvent;
69
import java.awt.event.ActionListener;
19 ilm 70
import java.beans.PropertyChangeEvent;
71
import java.beans.PropertyChangeListener;
18 ilm 72
import java.sql.SQLException;
156 ilm 73
import java.util.List;
18 ilm 74
 
75
import javax.swing.JCheckBox;
76
import javax.swing.JLabel;
142 ilm 77
import javax.swing.JOptionPane;
18 ilm 78
import javax.swing.JPanel;
79
import javax.swing.JScrollPane;
80
import javax.swing.JTextField;
81
import javax.swing.SwingConstants;
82
import javax.swing.SwingUtilities;
83
import javax.swing.event.DocumentEvent;
84
import javax.swing.event.DocumentListener;
85
import javax.swing.event.TableModelEvent;
86
import javax.swing.event.TableModelListener;
87
 
88
public class CommandeSQLComponent extends TransfertBaseSQLComponent {
89
 
28 ilm 90
    private CommandeItemTable table = new CommandeItemTable();
94 ilm 91
    private PanelOOSQLComponent panelOO;
92
 
18 ilm 93
    private JUniqueTextField numeroUniqueCommande;
94
    private final SQLTable tableNum = getTable().getBase().getTable("NUMEROTATION_AUTO");
95
    private final ITextArea infos = new ITextArea(3, 3);
28 ilm 96
    private ElementComboBox fourn = new ElementComboBox();
149 ilm 97
    private final JCheckBox boxLivrClient = new JCheckBox("Livrer directement le client");
61 ilm 98
    private DefaultElementSQLObject compAdr;
99
    final JPanel panelAdrSpec = new JPanel(new GridBagLayout());
90 ilm 100
    protected ElementComboBox boxAdr;
93 ilm 101
    private JDate dateCommande = new JDate(true);
132 ilm 102
    private ElementSQLObject componentPrincipaleAdr;
18 ilm 103
 
104
    public CommandeSQLComponent() {
105
        super(Configuration.getInstance().getDirectory().getElement("COMMANDE"));
106
    }
107
 
28 ilm 108
    public ElementComboBox getBoxFournisseur() {
109
        return this.fourn;
110
    }
111
 
18 ilm 112
    public void addViews() {
113
        this.setLayout(new GridBagLayout());
114
        final GridBagConstraints c = new DefaultGridBagConstraints();
115
 
116
        // Numero du commande
117
        c.gridx = 0;
118
        c.weightx = 0;
119
        this.add(new JLabel(getLabelFor("NUMERO"), SwingConstants.RIGHT), c);
120
 
142 ilm 121
        this.numeroUniqueCommande = new JUniqueTextField(16) {
122
            @Override
123
            public String getAutoRefreshNumber() {
124
                if (getMode() == Mode.INSERTION) {
125
                    return NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), dateCommande.getDate());
126
                } else {
127
                    return null;
128
                }
129
            }
130
        };
18 ilm 131
        c.gridx++;
132
        c.weightx = 1;
133
        c.fill = GridBagConstraints.NONE;
134
        DefaultGridBagConstraints.lockMinimumSize(numeroUniqueCommande);
135
        this.add(this.numeroUniqueCommande, c);
136
 
137
        // Date
138
        JLabel labelDate = new JLabel(getLabelFor("DATE"));
139
        labelDate.setHorizontalAlignment(SwingConstants.RIGHT);
140
        c.gridx = 2;
141
        c.weightx = 0;
142
        c.fill = GridBagConstraints.HORIZONTAL;
143
        this.add(labelDate, c);
144
 
145
        c.gridx++;
146
        c.fill = GridBagConstraints.NONE;
147
        this.add(dateCommande, c);
148
 
93 ilm 149
        this.dateCommande.addValueListener(new PropertyChangeListener() {
150
 
151
            @Override
152
            public void propertyChange(PropertyChangeEvent evt) {
153
                if (!isFilling() && dateCommande.getValue() != null) {
154
                    table.setDateDevise(dateCommande.getValue());
155
                }
156
            }
157
        });
158
 
18 ilm 159
        // Fournisseur
160
        c.gridx = 0;
161
        c.gridy++;
162
        c.weightx = 0;
163
        c.fill = GridBagConstraints.HORIZONTAL;
164
        this.add(new JLabel(getLabelFor("ID_FOURNISSEUR"), SwingConstants.RIGHT), c);
165
 
93 ilm 166
        c.gridx++;
18 ilm 167
        c.gridwidth = 1;
168
        c.weightx = 1;
169
        c.weighty = 0;
170
        c.fill = GridBagConstraints.NONE;
171
        this.add(this.fourn, c);
149 ilm 172
        addRequiredSQLObject(this.fourn, "ID_FOURNISSEUR");
156 ilm 173
        fourn.addModelListener("wantedID", new PropertyChangeListener() {
18 ilm 174
 
156 ilm 175
            @Override
176
            public void propertyChange(PropertyChangeEvent evt) {
177
                int wantedID = fourn.getWantedID();
178
                if (wantedID != SQLRow.NONEXISTANT_ID && wantedID >= SQLRow.MIN_VALID_ID) {
179
 
180
                    final SQLRow rowF = getTable().getForeignTable("ID_FOURNISSEUR").getRow(wantedID);
181
 
182
                    if (rowF.getObject("ID_CATEGORIE_COMPTABLE") != null && !rowF.isForeignEmpty("ID_CATEGORIE_COMPTABLE")) {
183
                        table.setRowCatComptable(rowF.getForeign("ID_CATEGORIE_COMPTABLE"));
184
                    } else {
185
                        table.setRowCatComptable(null);
186
                    }
187
 
188
                } else {
189
                    table.setRowCatComptable(null);
190
                }
191
            }
192
        });
193
 
28 ilm 194
        if (!getTable().getFieldsName().contains("LIVRER")) {
195
            // Commande en cours
196
            JCheckBox boxEnCours = new JCheckBox(getLabelFor("EN_COURS"));
93 ilm 197
            c.gridx += 2;
28 ilm 198
            c.weightx = 0;
199
            c.fill = GridBagConstraints.HORIZONTAL;
61 ilm 200
            c.gridwidth = GridBagConstraints.REMAINDER;
28 ilm 201
            this.add(boxEnCours, c);
61 ilm 202
            c.gridwidth = 1;
28 ilm 203
            this.addRequiredSQLObject(boxEnCours, "EN_COURS");
204
        }
19 ilm 205
 
94 ilm 206
        if (getTable().contains("DATE_RECEPTION_DEMANDEE")) {
207
            // Date
208
            JLabel labelDateRecptDemande = new JLabel(getLabelFor("DATE_RECEPTION_DEMANDEE"));
209
            labelDateRecptDemande.setHorizontalAlignment(SwingConstants.RIGHT);
210
            c.gridx = 0;
211
            c.gridy++;
212
            c.weightx = 0;
213
            c.fill = GridBagConstraints.HORIZONTAL;
214
            this.add(labelDateRecptDemande, c);
215
 
216
            c.gridx++;
217
            c.fill = GridBagConstraints.NONE;
218
            JDate dateRecptDemande = new JDate();
219
            this.add(dateRecptDemande, c);
220
            this.addView(dateRecptDemande, "DATE_RECEPTION_DEMANDEE", REQ);
221
 
222
            JLabel labelDateRecptConfirme = new JLabel(getLabelFor("DATE_RECEPTION_CONFIRMEE"));
223
            labelDateRecptConfirme.setHorizontalAlignment(SwingConstants.RIGHT);
224
            c.gridx++;
225
            c.weightx = 0;
226
            c.fill = GridBagConstraints.HORIZONTAL;
227
            this.add(labelDateRecptConfirme, c);
228
 
229
            c.gridx++;
230
            c.fill = GridBagConstraints.NONE;
231
            JDate dateRecptConfirme = new JDate();
232
            this.add(dateRecptConfirme, c);
233
            this.addView(dateRecptConfirme, "DATE_RECEPTION_CONFIRMEE");
234
        }
57 ilm 235
        // Fournisseur
236
        if (getTable().contains("ID_CONTACT_FOURNISSEUR")) {
237
            c.gridx = 0;
238
            c.gridy++;
239
            c.weightx = 0;
240
            c.fill = GridBagConstraints.HORIZONTAL;
241
            this.add(new JLabel(getLabelFor("ID_CONTACT_FOURNISSEUR"), SwingConstants.RIGHT), c);
242
 
243
            c.gridx = GridBagConstraints.RELATIVE;
244
            c.gridwidth = 1;
245
            c.weightx = 1;
246
            c.weighty = 0;
247
            c.fill = GridBagConstraints.HORIZONTAL;
248
            final ElementComboBox boxContactFournisseur = new ElementComboBox();
249
            final SQLElement contactElement = Configuration.getInstance().getDirectory().getElement("CONTACT_FOURNISSEUR");
65 ilm 250
            boxContactFournisseur.init(contactElement, contactElement.getComboRequest(true));
57 ilm 251
            this.add(boxContactFournisseur, c);
252
            this.addView(boxContactFournisseur, "ID_CONTACT_FOURNISSEUR", REQ);
253
 
254
            fourn.addValueListener(new PropertyChangeListener() {
255
 
256
                @Override
257
                public void propertyChange(PropertyChangeEvent arg0) {
258
                    if (fourn.getSelectedRow() != null) {
259
                        boxContactFournisseur.getRequest().setWhere(new Where(contactElement.getTable().getField("ID_FOURNISSEUR"), "=", fourn.getSelectedRow().getID()));
260
                    } else {
261
                        boxContactFournisseur.getRequest().setWhere(null);
262
                    }
263
                }
264
            });
265
        }
28 ilm 266
        // Adresse de livraison
267
        if (getTable().getFieldsName().contains("ID_ADRESSE")) {
57 ilm 268
            if (getTable().getFieldsName().contains("LIVRAISON_F")) {
61 ilm 269
                c.gridx = 0;
270
                c.gridy++;
271
                c.weightx = 0;
272
                c.fill = GridBagConstraints.HORIZONTAL;
90 ilm 273
 
274
                this.boxAdr = new ElementComboBox();
275
                final SQLElement adrElement = getElement().getForeignElement("ID_ADRESSE");
276
                boxAdr.init(adrElement);
277
                c.gridwidth = 1;
278
                final JLabel labelAdrLiv = new JLabel("Adresse de livraison existante");
279
                this.add(labelAdrLiv, c);
280
                c.gridx++;
281
                c.gridwidth = 2;
282
                this.add(boxAdr, c);
283
 
284
                c.gridx = 0;
285
                c.gridy++;
61 ilm 286
                this.add(new JLabel(getLabelFor("ID_ADRESSE")), c);
287
                c.gridx++;
288
                c.gridwidth = GridBagConstraints.REMAINDER;
289
                // c.gridy++;
290
                this.addView("ID_ADRESSE");
291
                final DefaultElementSQLObject comp = (DefaultElementSQLObject) this.getView("ID_ADRESSE").getComp();
132 ilm 292
 
293
                componentPrincipaleAdr = (ElementSQLObject) this.getView("ID_ADRESSE");
294
                ((AdresseSQLComponent) componentPrincipaleAdr.getSQLChild()).setDestinataireVisible(true);
90 ilm 295
                final JCheckBox boxLivr = new JCheckBox("Livré par le fournisseur");
296
                this.add(boxLivr, c);
297
                this.addSQLObject(boxLivr, "LIVRAISON_F");
298
                boxLivr.addActionListener(new ActionListener() {
28 ilm 299
 
90 ilm 300
                    @Override
301
                    public void actionPerformed(ActionEvent e) {
132 ilm 302
 
90 ilm 303
                        if (boxLivr.isSelected() && !comp.isCreated()) {
304
                            comp.setCreated(true);
132 ilm 305
                            componentPrincipaleAdr.setEditable(InteractionMode.READ_WRITE);
90 ilm 306
                            if (CommandeSQLComponent.this.getTable().contains("ID_AFFAIRE")) {
28 ilm 307
 
90 ilm 308
                                final SQLRow selectedRow = ((ElementComboBox) CommandeSQLComponent.this.getView("ID_AFFAIRE").getComp()).getSelectedRow();
309
                                SQLRowValues rowVals = getLivraisonAdr(selectedRow);
61 ilm 310
 
90 ilm 311
                                comp.setValue(rowVals);
312
 
313
                                if (selectedRow != null && !selectedRow.isUndefined()) {
314
                                    final SQLRow clientRow = selectedRow.getForeign("ID_CLIENT");
315
                                    Where w = new Where(boxAdr.getRequest().getPrimaryTable().getField("ID_CLIENT"), "=", clientRow.getID());
316
                                    w = w.or(new Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=", clientRow.getInt("ID_ADRESSE")));
317
                                    // w = w.or(new
318
                                    // Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=",
319
                                    // clientRow.getInt("ID_ADRESSE_F")));
320
                                    w = w.or(new Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=", clientRow.getInt("ID_ADRESSE_L")));
321
                                    if (clientRow.getTable().contains("ID_ADRESSE_L_2")) {
322
                                        w = w.or(new Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=", clientRow.getInt("ID_ADRESSE_L_2")));
323
                                    }
324
                                    if (clientRow.getTable().contains("ID_ADRESSE_L_3")) {
325
                                        w = w.or(new Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=", clientRow.getInt("ID_ADRESSE_L_3")));
326
                                    }
327
                                    boxAdr.getRequest().setWhere(w);
328
                                } else {
329
                                    boxAdr.getRequest().setWhere(null);
61 ilm 330
                                }
331
 
57 ilm 332
                            }
90 ilm 333
 
334
                        } else {
335
                            if (!boxLivr.isSelected()) {
336
                                comp.setCreated(false);
132 ilm 337
                                componentPrincipaleAdr.setEditable(InteractionMode.DISABLED);
90 ilm 338
                            }
61 ilm 339
                        }
90 ilm 340
                    }
341
                });
57 ilm 342
 
61 ilm 343
                c.gridy++;
344
                this.add(comp, c);
345
                this.add(this.getView("ID_ADRESSE").getComp(), c);
90 ilm 346
 
347
                comp.addValueListener(new PropertyChangeListener() {
348
 
349
                    @Override
350
                    public void propertyChange(PropertyChangeEvent evt) {
351
                        boxAdr.setVisible(comp.isCreated());
352
                        labelAdrLiv.setVisible(comp.isCreated());
353
                    }
354
                });
355
 
356
                boxAdr.addValueListener(new PropertyChangeListener() {
357
 
358
                    @Override
359
                    public void propertyChange(PropertyChangeEvent evt) {
360
                        final SQLRow selectedRow = boxAdr.getSelectedRow();
361
                        if (selectedRow != null && !selectedRow.isUndefined()) {
362
                            SQLRowValues rowVals = selectedRow.asRowValues();
363
                            rowVals.clearPrimaryKeys();
364
                            comp.setValue(rowVals);
365
                        }
366
                    }
367
                });
368
                boxAdr.setVisible(false);
369
                labelAdrLiv.setVisible(false);
370
 
61 ilm 371
            } else {
372
 
373
                c.gridy++;
149 ilm 374
                c.gridx = 1;
156 ilm 375
 
61 ilm 376
                c.gridwidth = GridBagConstraints.REMAINDER;
377
                this.add(boxLivrClient, c);
378
                c.gridwidth = 1;
379
 
380
                final GridBagConstraints cAdr = new DefaultGridBagConstraints();
381
 
382
                panelAdrSpec.add(new JLabel(getLabelFor("ID_CLIENT"), SwingConstants.RIGHT), cAdr);
383
                final ElementComboBox boxClient = new ElementComboBox(true);
384
                cAdr.weightx = 1;
385
                cAdr.gridx++;
386
                panelAdrSpec.add(boxClient, cAdr);
387
                this.addView(boxClient, "ID_CLIENT");
388
 
389
                cAdr.gridy++;
390
                cAdr.weightx = 0;
391
                cAdr.gridx = 0;
93 ilm 392
                panelAdrSpec.add(new JLabel(TM.tr("address"), SwingConstants.RIGHT), cAdr);
61 ilm 393
                final SQLRequestComboBox boxAdr = new SQLRequestComboBox(true);
394
                boxAdr.uiInit(Configuration.getInstance().getDirectory().getElement(getTable().getTable("ADRESSE")).getComboRequest(true));
73 ilm 395
                boxClient.addModelListener("wantedID", new PropertyChangeListener() {
61 ilm 396
 
397
                    @Override
398
                    public void propertyChange(PropertyChangeEvent evt) {
399
                        if (boxClient.getSelectedRow() != null && !boxClient.getSelectedRow().isUndefined()) {
400
                            Where w = new Where(boxAdr.getRequest().getPrimaryTable().getField("ID_CLIENT"), "=", boxClient.getSelectedRow().getID());
401
                            w = w.or(new Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=", boxClient.getSelectedRow().getInt("ID_ADRESSE")));
402
                            w = w.or(new Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=", boxClient.getSelectedRow().getInt("ID_ADRESSE_F")));
403
                            w = w.or(new Where(boxAdr.getRequest().getPrimaryTable().getKey(), "=", boxClient.getSelectedRow().getInt("ID_ADRESSE_L")));
404
                            boxAdr.getRequest().setWhere(w);
57 ilm 405
                        } else {
61 ilm 406
                            boxAdr.getRequest().setWhere(null);
28 ilm 407
                        }
408
                    }
57 ilm 409
                });
61 ilm 410
                cAdr.weightx = 1;
411
                cAdr.gridx++;
412
                panelAdrSpec.add(boxAdr, cAdr);
413
 
414
                cAdr.gridx = 0;
415
                cAdr.gridy++;
416
                cAdr.weightx = 0;
417
                if (getMode() == Mode.MODIFICATION) {
418
                    panelAdrSpec.add(new JLabel(getLabelFor("ID_ADRESSE")), cAdr);
419
                }
420
                cAdr.gridx++;
421
                cAdr.gridwidth = GridBagConstraints.REMAINDER;
422
                this.addView("ID_ADRESSE");
423
                compAdr = (DefaultElementSQLObject) this.getView("ID_ADRESSE").getComp();
424
 
425
                cAdr.gridy++;
426
                if (getMode() == Mode.MODIFICATION) {
427
                    panelAdrSpec.add(compAdr, cAdr);
428
                }
429
                boxAdr.addValueListener(new PropertyChangeListener() {
430
 
431
                    @Override
432
                    public void propertyChange(PropertyChangeEvent evt) {
433
                        SQLRow row = boxAdr.getSelectedRow();
434
                        if (row != null && !row.isUndefined()) {
435
                            compAdr.setCreated(true);
436
                            SQLRowValues asRowValues = new SQLRowValues(row.asRowValues());
437
                            compAdr.setValue(asRowValues);
438
                        }
439
                    }
440
                });
441
 
442
                c.gridy++;
443
                c.gridx = 0;
444
                c.gridwidth = GridBagConstraints.REMAINDER;
445
                c.weightx = 1;
446
                this.add(panelAdrSpec, c);
447
                c.gridwidth = 1;
448
                c.weightx = 0;
449
 
450
                boxLivrClient.addActionListener(new ActionListener() {
451
 
452
                    @Override
453
                    public void actionPerformed(ActionEvent e) {
454
                        panelAdrSpec.setVisible(boxLivrClient.isSelected());
455
 
456
                        if (!boxLivrClient.isSelected()) {
457
                            boxClient.setValue((Integer) null);
458
                            boxAdr.setValue((Integer) null);
459
                            compAdr.setCreated(false);
460
                        }
461
                    }
462
                });
463
                panelAdrSpec.setVisible(false);
57 ilm 464
            }
28 ilm 465
        }
466
        c.gridwidth = 1;
467
 
468
        // Champ Module
19 ilm 469
        c.gridx = 0;
470
        c.gridy++;
28 ilm 471
        c.gridwidth = GridBagConstraints.REMAINDER;
63 ilm 472
        final JPanel addP = ComptaSQLConfElement.createAdditionalPanel();
28 ilm 473
        this.setAdditionalFieldsPanel(new FormLayouter(addP, 2));
474
        this.add(addP, c);
19 ilm 475
 
28 ilm 476
        c.gridy++;
19 ilm 477
        c.gridwidth = 1;
478
 
156 ilm 479
        SQLPreferences prefs = SQLPreferences.getMemCached(getTable().getDBRoot());
480
        final boolean showDevise = prefs.getBoolean(AbstractVenteArticleItemTable.ARTICLE_SHOW_DEVISE, false);
481
 
28 ilm 482
        final ElementComboBox boxDevise = new ElementComboBox();
156 ilm 483
        if (showDevise) {
28 ilm 484
            // Devise
485
            c.gridx = 0;
486
            c.gridy++;
487
            c.weightx = 0;
488
            c.fill = GridBagConstraints.HORIZONTAL;
489
            this.add(new JLabel(getLabelFor("ID_DEVISE"), SwingConstants.RIGHT), c);
490
 
94 ilm 491
            c.gridx++;
28 ilm 492
            c.gridwidth = 1;
493
            c.weightx = 1;
494
            c.weighty = 0;
495
            c.fill = GridBagConstraints.NONE;
132 ilm 496
            DefaultGridBagConstraints.lockMinimumSize(boxDevise);
28 ilm 497
            this.add(boxDevise, c);
498
            this.addView(boxDevise, "ID_DEVISE");
93 ilm 499
 
500
            fourn.addValueListener(new PropertyChangeListener() {
501
 
502
                @Override
503
                public void propertyChange(PropertyChangeEvent arg0) {
504
                    if (fourn.getSelectedRow() != null) {
505
                        boxDevise.setValue(fourn.getSelectedRow().getForeignID("ID_DEVISE"));
506
                    } else {
507
                        boxDevise.setValue((SQLRowAccessor) null);
508
                    }
509
                }
510
            });
511
 
94 ilm 512
            if (getTable().contains("INCOTERM")) {
513
                // Incoterm
514
                c.gridx++;
515
                c.weightx = 0;
516
                c.fill = GridBagConstraints.HORIZONTAL;
517
                this.add(new JLabel(getLabelFor("INCOTERM"), SwingConstants.RIGHT), c);
518
 
519
                c.gridx++;
520
                c.gridwidth = 1;
521
                c.weightx = 1;
522
                c.weighty = 0;
523
                c.fill = GridBagConstraints.NONE;
132 ilm 524
                final ITextCombo box = new ITextCombo(ComboLockedMode.LOCKED);
94 ilm 525
 
526
                for (String s : ReferenceArticleSQLElement.CONDITIONS) {
527
                    box.addItem(s);
528
                }
529
                this.add(box, c);
530
                this.addView(box, "INCOTERM", REQ);
132 ilm 531
                box.addValueListener(new PropertyChangeListener() {
532
 
533
                    @Override
534
                    public void propertyChange(PropertyChangeEvent evt) {
535
                        table.setIncoterms(box.getCurrentValue());
536
                    }
537
                });
94 ilm 538
            }
539
 
28 ilm 540
        }
541
 
18 ilm 542
        // Reference
543
        c.gridx = 0;
544
        c.gridy++;
545
        c.gridwidth = 1;
546
        c.weightx = 0;
547
        c.fill = GridBagConstraints.HORIZONTAL;
548
        c.anchor = GridBagConstraints.EAST;
549
        this.add(new JLabel(getLabelFor("NOM"), SwingConstants.RIGHT), c);
550
 
551
        final JTextField textNom = new JTextField();
552
        c.gridx++;
553
        c.weightx = 1;
554
        this.add(textNom, c);
555
 
556
        String field;
557
            field = "ID_COMMERCIAL";
558
        // Commercial
559
        c.weightx = 0;
560
        c.gridx++;
561
        this.add(new JLabel(getLabelFor(field), SwingConstants.RIGHT), c);
562
 
563
        ElementComboBox commSel = new ElementComboBox(false, 25);
564
        c.gridx = GridBagConstraints.RELATIVE;
565
        c.gridwidth = 1;
566
        c.weightx = 1;
567
        c.weighty = 0;
568
        c.fill = GridBagConstraints.NONE;
569
        c.anchor = GridBagConstraints.WEST;
570
        this.add(commSel, c);
571
        addRequiredSQLObject(commSel, field);
572
 
573
        // Table d'élément
574
        c.fill = GridBagConstraints.BOTH;
575
        c.gridy++;
576
        c.gridx = 0;
577
        c.weightx = 0;
578
        c.weighty = 1;
579
        c.gridwidth = 4;
580
        this.add(this.table, c);
156 ilm 581
        if (showDevise) {
18 ilm 582
 
28 ilm 583
            boxDevise.addValueListener(new PropertyChangeListener() {
19 ilm 584
 
28 ilm 585
                @Override
586
                public void propertyChange(PropertyChangeEvent evt) {
587
                    table.setDevise(boxDevise.getSelectedRow());
588
                }
589
            });
590
        }
67 ilm 591
 
592
        this.fourn.addValueListener(new PropertyChangeListener() {
593
 
594
            @Override
595
            public void propertyChange(PropertyChangeEvent evt) {
596
                table.setFournisseur(fourn.getSelectedRow());
597
            }
598
        });
18 ilm 599
        // Bottom
600
        c.gridy++;
601
        c.weighty = 0;
602
        this.add(getBottomPanel(), c);
603
 
604
        c.gridx = 0;
605
        c.gridy++;
94 ilm 606
        c.fill = GridBagConstraints.NONE;
607
        c.anchor = GridBagConstraints.SOUTHEAST;
18 ilm 608
        c.gridwidth = GridBagConstraints.REMAINDER;
609
 
94 ilm 610
        this.panelOO = new PanelOOSQLComponent(this);
611
        this.add(this.panelOO, c);
612
 
18 ilm 613
        addSQLObject(textNom, "NOM");
614
        addRequiredSQLObject(dateCommande, "DATE");
615
        // addRequiredSQLObject(radioEtat, "ID_ETAT_DEVIS");
616
        addRequiredSQLObject(this.numeroUniqueCommande, "NUMERO");
617
        addSQLObject(this.infos, "INFOS");
618
 
90 ilm 619
        this.numeroUniqueCommande.setText(NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
18 ilm 620
 
621
        // radioEtat.setValue(EtatDevisSQLElement.EN_ATTENTE);
622
        // this.numeroUniqueDevis.addLabelWarningMouseListener(new MouseAdapter() {
623
        // public void mousePressed(MouseEvent e) {
624
        //
625
        // if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
626
        // numeroUniqueDevis.setText(NumerotationAutoSQLElement.getNextNumeroDevis());
627
        // }
628
        // }
629
        // });
630
 
631
        DefaultGridBagConstraints.lockMinimumSize(this.fourn);
632
        DefaultGridBagConstraints.lockMinimumSize(commSel);
633
    }
634
 
28 ilm 635
    protected SQLRowValues getLivraisonAdr(SQLRow rowAffaire) {
636
        if (rowAffaire != null) {
637
            SQLRow rowClient = rowAffaire.getForeignRow("ID_CLIENT");
638
            SQLRow rowAdrL = rowClient.getForeignRow("ID_ADRESSE_L");
639
            if (rowAdrL == null || rowAdrL.isUndefined()) {
640
                rowAdrL = rowClient.getForeignRow("ID_ADRESSE");
641
            }
642
            SQLRowValues rowVals = rowAdrL.asRowValues();
643
            rowVals.clearPrimaryKeys();
644
            return rowVals;
645
        } else {
646
            return new SQLRowValues(getTable().getTable("ADRESSE"));
647
        }
648
    }
649
 
18 ilm 650
    private JPanel getBottomPanel() {
651
        final JPanel panel = new JPanel(new GridBagLayout());
652
        final GridBagConstraints c = new DefaultGridBagConstraints();
653
 
654
        // Colonne 1 : Infos
655
        c.gridx = 0;
656
        c.weightx = 1;
657
        c.anchor = GridBagConstraints.WEST;
658
        c.fill = GridBagConstraints.HORIZONTAL;
57 ilm 659
 
18 ilm 660
        panel.add(new TitledSeparator(getLabelFor("INFOS")), c);
661
 
662
        c.gridy++;
663
        c.weighty = 0;
664
        c.weightx = 1;
665
        c.fill = GridBagConstraints.BOTH;
666
        final JScrollPane scrollPane = new JScrollPane(this.infos);
667
        scrollPane.setBorder(null);
668
        panel.add(scrollPane, c);
669
 
670
        // Colonne 2 : Poids & autres
671
        DefaultProps props = DefaultNXProps.getInstance();
672
        Boolean b = props.getBooleanValue("ArticleShowPoids");
673
        final JTextField textPoidsTotal = new JTextField(8);
19 ilm 674
        JTextField poids = new JTextField();
18 ilm 675
        if (b) {
132 ilm 676
            final JPanel panelPoids = new JPanel(new GridBagLayout());
677
            GridBagConstraints cPoids = new DefaultGridBagConstraints();
678
            cPoids.weightx = 0;
679
            panelPoids.add(new JLabel(getLabelFor("T_POIDS")), cPoids);
680
            cPoids.weightx = 1;
18 ilm 681
            textPoidsTotal.setEnabled(false);
682
            textPoidsTotal.setHorizontalAlignment(JTextField.RIGHT);
683
            textPoidsTotal.setDisabledTextColor(Color.BLACK);
132 ilm 684
            cPoids.gridx++;
685
            panelPoids.add(textPoidsTotal, cPoids);
18 ilm 686
 
687
            c.gridx++;
688
            c.gridy = 0;
689
            c.weightx = 0;
690
            c.weighty = 0;
691
            c.gridwidth = 1;
692
            c.gridheight = 2;
693
            c.fill = GridBagConstraints.NONE;
694
            c.anchor = GridBagConstraints.NORTHEAST;
695
            panel.add(panelPoids, c);
696
            DefaultGridBagConstraints.lockMinimumSize(panelPoids);
19 ilm 697
            addSQLObject(textPoidsTotal, "T_POIDS");
698
        } else {
699
            addSQLObject(poids, "T_POIDS");
18 ilm 700
        }
57 ilm 701
 
702
        DeviseField textPortHT = new DeviseField();
149 ilm 703
        DeviseField textRemiseHT = new DeviseField();
132 ilm 704
        ElementComboBox comboTaxePort = new ElementComboBox(false, 10);
57 ilm 705
 
706
        if (getTable().contains("PORT_HT")) {
149 ilm 707
 
708
            addSQLObject(textPortHT, "PORT_HT");
65 ilm 709
            final JPanel panelPoids = new JPanel(new GridBagLayout());
710
            GridBagConstraints cPort = new DefaultGridBagConstraints();
711
            cPort.gridx = 0;
132 ilm 712
            cPort.fill = GridBagConstraints.NONE;
65 ilm 713
            cPort.weightx = 0;
714
            panelPoids.add(new JLabel(getLabelFor("PORT_HT")), cPort);
57 ilm 715
            textPortHT.setHorizontalAlignment(JTextField.RIGHT);
65 ilm 716
            cPort.gridx++;
717
            cPort.weightx = 1;
718
            panelPoids.add(textPortHT, cPort);
57 ilm 719
 
65 ilm 720
            cPort.gridy++;
721
            cPort.gridx = 0;
722
            cPort.weightx = 0;
723
            addRequiredSQLObject(comboTaxePort, "ID_TAXE_PORT");
724
            panelPoids.add(new JLabel(getLabelFor("ID_TAXE_PORT")), cPort);
725
            cPort.gridx++;
132 ilm 726
            cPort.weightx = 1;
65 ilm 727
            panelPoids.add(comboTaxePort, cPort);
57 ilm 728
 
149 ilm 729
            addSQLObject(textRemiseHT, "REMISE_HT");
730
            cPort.gridy++;
731
            cPort.gridx = 0;
732
            cPort.fill = GridBagConstraints.NONE;
733
            cPort.weightx = 0;
734
            panelPoids.add(new JLabel(getLabelFor("REMISE_HT")), cPort);
735
            textRemiseHT.setHorizontalAlignment(JTextField.RIGHT);
736
            cPort.gridx++;
737
            cPort.weightx = 1;
738
            panelPoids.add(textRemiseHT, cPort);
739
 
57 ilm 740
            c.gridx++;
741
            c.gridy = 0;
742
            c.weightx = 0;
743
            c.weighty = 0;
744
            c.gridwidth = 1;
745
            c.gridheight = 2;
746
            c.fill = GridBagConstraints.NONE;
747
            c.anchor = GridBagConstraints.NORTHEAST;
748
            panel.add(panelPoids, c);
749
            DefaultGridBagConstraints.lockMinimumSize(panelPoids);
750
        }
18 ilm 751
        // Total
57 ilm 752
 
18 ilm 753
        DeviseField fieldHT = new DeviseField();
142 ilm 754
        DeviseField fieldEco = new DeviseField();
18 ilm 755
        DeviseField fieldTVA = new DeviseField();
756
        DeviseField fieldTTC = new DeviseField();
19 ilm 757
        DeviseField fieldDevise = new DeviseField();
18 ilm 758
        DeviseField fieldService = new DeviseField();
759
        fieldHT.setOpaque(false);
760
        fieldTVA.setOpaque(false);
761
        fieldTTC.setOpaque(false);
762
        fieldService.setOpaque(false);
142 ilm 763
        addRequiredSQLObject(fieldEco, "T_ECO_CONTRIBUTION");
19 ilm 764
        addRequiredSQLObject(fieldDevise, "T_DEVISE");
18 ilm 765
        addRequiredSQLObject(fieldHT, "T_HT");
766
        addRequiredSQLObject(fieldTVA, "T_TVA");
57 ilm 767
 
18 ilm 768
        addRequiredSQLObject(fieldTTC, "T_TTC");
769
        addRequiredSQLObject(fieldService, "T_SERVICE");
94 ilm 770
 
771
        // Disable
142 ilm 772
        this.allowEditable("T_ECO_CONTRIBUTION", false);
94 ilm 773
        this.allowEditable("T_HT", false);
774
        this.allowEditable("T_TVA", false);
775
        this.allowEditable("T_TTC", false);
776
        this.allowEditable("T_SERVICE", false);
777
 
142 ilm 778
        final TotalPanel totalTTC = new TotalPanel(this.table, fieldEco, fieldHT, fieldTVA, fieldTTC, textPortHT, textRemiseHT, fieldService, null, fieldDevise, null, null,
779
                (getTable().contains("ID_TAXE_PORT") ? comboTaxePort : null), null);
18 ilm 780
 
781
        c.gridx++;
782
        c.gridy--;
783
        c.gridwidth = GridBagConstraints.REMAINDER;
784
        c.gridheight = 2;
785
        c.anchor = GridBagConstraints.NORTHEAST;
786
        c.fill = GridBagConstraints.BOTH;
787
        c.weighty = 0;
132 ilm 788
        c.weightx = 0;
18 ilm 789
        DefaultGridBagConstraints.lockMinimumSize(totalTTC);
790
 
791
        panel.add(totalTTC, c);
792
 
65 ilm 793
        c.gridy += 3;
794
        c.gridheight = 2;
795
        c.fill = GridBagConstraints.NONE;
796
        c.anchor = GridBagConstraints.EAST;
797
        panel.add(getModuleTotalPanel(), c);
798
 
18 ilm 799
        table.getModel().addTableModelListener(new TableModelListener() {
800
 
801
            public void tableChanged(TableModelEvent e) {
802
                textPoidsTotal.setText(String.valueOf(table.getPoidsTotal()));
803
            }
804
        });
805
 
806
        textPortHT.getDocument().addDocumentListener(new DocumentListener() {
807
            public void changedUpdate(DocumentEvent e) {
808
                totalTTC.updateTotal();
809
            }
810
 
811
            public void removeUpdate(DocumentEvent e) {
812
                totalTTC.updateTotal();
813
            }
814
 
815
            public void insertUpdate(DocumentEvent e) {
816
                totalTTC.updateTotal();
817
            }
818
        });
819
 
65 ilm 820
        comboTaxePort.addValueListener(new PropertyChangeListener() {
821
 
822
            @Override
823
            public void propertyChange(PropertyChangeEvent evt) {
824
                totalTTC.updateTotal();
825
            }
826
        });
827
 
18 ilm 828
        textRemiseHT.getDocument().addDocumentListener(new DocumentListener() {
829
            public void changedUpdate(DocumentEvent e) {
830
                totalTTC.updateTotal();
831
            }
832
 
833
            public void removeUpdate(DocumentEvent e) {
834
                totalTTC.updateTotal();
835
            }
836
 
837
            public void insertUpdate(DocumentEvent e) {
838
                totalTTC.updateTotal();
839
            }
840
        });
841
        return panel;
842
    }
843
 
65 ilm 844
    protected JPanel getModuleTotalPanel() {
845
 
846
        return AutoHideListener.listen(new JPanel());
847
    }
848
 
18 ilm 849
    public int insert(SQLRow order) {
850
 
851
        int idCommande = getSelectedID();
852
        // on verifie qu'un devis du meme numero n'a pas été inséré entre temps
142 ilm 853
        int attempt = 0;
854
        if (!this.numeroUniqueCommande.checkValidation(false)) {
855
            while (attempt < JUniqueTextField.RETRY_COUNT) {
856
                String num = NumerotationAutoSQLElement.getNextNumero(getElement().getClass(), dateCommande.getDate());
857
                this.numeroUniqueCommande.setText(num);
858
                attempt++;
859
                if (this.numeroUniqueCommande.checkValidation(false)) {
860
                    System.err.println("ATEMPT " + attempt + " SUCCESS WITH NUMERO " + num);
861
                    break;
862
                }
863
                try {
864
                    Thread.sleep(JUniqueTextField.SLEEP_WAIT_MS);
865
                } catch (InterruptedException e) {
866
                    e.printStackTrace();
867
                }
868
            }
869
        }
870
        final String num = this.numeroUniqueCommande.getText();
871
        if (attempt == JUniqueTextField.RETRY_COUNT) {
872
            idCommande = getSelectedID();
873
            ExceptionHandler.handle("Impossible d'ajouter, numéro de commande existant.");
874
            final Object root = SwingUtilities.getRoot(this);
875
            if (root instanceof EditFrame) {
876
                final EditFrame frame = (EditFrame) root;
877
                frame.getPanel().setAlwaysVisible(true);
878
            }
879
        } else {
18 ilm 880
            idCommande = super.insert(order);
881
            this.table.updateField("ID_COMMANDE", idCommande);
882
 
883
            // Création des articles
884
            this.table.createArticle(idCommande, this.getElement());
885
 
83 ilm 886
            try {
887
                updateStock(idCommande);
888
            } catch (SQLException e) {
889
                ExceptionHandler.handle("Erreur lors de la mise à jour du stock!", e);
890
            }
891
 
18 ilm 892
            // generation du document
25 ilm 893
            final CommandeXmlSheet sheet = new CommandeXmlSheet(getTable().getRow(idCommande));
894
            sheet.createDocumentAsynchronous();
94 ilm 895
            sheet.showPrintAndExportAsynchronous(this.panelOO.isVisualisationSelected(), this.panelOO.isImpressionSelected(), true);
18 ilm 896
 
897
            // incrémentation du numéro auto
90 ilm 898
            if (NumerotationAutoSQLElement.getNextNumero(getElement().getClass()).equalsIgnoreCase(this.numeroUniqueCommande.getText().trim())) {
18 ilm 899
                SQLRowValues rowVals = new SQLRowValues(this.tableNum);
90 ilm 900
                int val = this.tableNum.getRow(2).getInt(NumerotationAutoSQLElement.getLabelNumberFor(getElement().getClass()));
18 ilm 901
                val++;
90 ilm 902
                rowVals.put(NumerotationAutoSQLElement.getLabelNumberFor(getElement().getClass()), new Integer(val));
18 ilm 903
 
904
                try {
905
                    rowVals.update(2);
906
                } catch (SQLException e) {
907
                    e.printStackTrace();
908
                }
909
            }
149 ilm 910
            DemandeAchatItemSQLElement elt = getElement().getDirectory().getElement(DemandeAchatItemSQLElement.class);
911
            elt.updateStatus(getTable(), getTable().getTable("COMMANDE_ELEMENT"), idCommande);
912
 
142 ilm 913
            if (attempt > 0) {
914
                SwingUtilities.invokeLater(new Runnable() {
915
                    public void run() {
916
                        JOptionPane.showMessageDialog(null, "Le numéro a été actualisé en " + num);
917
                    }
918
                });
18 ilm 919
            }
920
        }
921
 
922
        return idCommande;
923
    }
924
 
925
    @Override
926
    public void select(SQLRowAccessor r) {
61 ilm 927
        if (!getTable().contains("LIVRAISON_F") && r != null && !r.isUndefined()) {
18 ilm 928
 
94 ilm 929
            SQLRowAccessor adr = (r.getFields().contains("ID_ADRESSE") ? r.getForeign("ID_ADRESSE") : null);
61 ilm 930
            boxLivrClient.setSelected(adr != null && !adr.isUndefined());
931
            panelAdrSpec.setVisible(boxLivrClient.isSelected());
932
 
933
            if (!boxLivrClient.isSelected()) {
934
                compAdr.setCreated(false);
935
            }
936
        }
132 ilm 937
        if (getTable().contains("LIVRAISON_F") && componentPrincipaleAdr != null) {
938
            final boolean bLivraison = r != null && r.getFields().contains("ID_ADRESSE") && !r.isForeignEmpty("ID_ADRESSE");
939
            componentPrincipaleAdr.setEditable(bLivraison ? InteractionMode.READ_WRITE : InteractionMode.DISABLED);
940
        }
61 ilm 941
 
18 ilm 942
        super.select(r);
943
    }
944
 
945
    @Override
946
    public void update() {
947
        if (!this.numeroUniqueCommande.checkValidation()) {
948
            ExceptionHandler.handle("Impossible d'ajouter, numéro de commande client existant.");
949
            Object root = SwingUtilities.getRoot(this);
950
            if (root instanceof EditFrame) {
951
                EditFrame frame = (EditFrame) root;
952
                frame.getPanel().setAlwaysVisible(true);
953
            }
954
            return;
955
        }
956
 
957
        super.update();
83 ilm 958
        final int id = getSelectedID();
959
        this.table.updateField("ID_COMMANDE", id);
960
        this.table.createArticle(id, this.getElement());
961
        ComptaPropsConfiguration.getInstanceCompta().getNonInteractiveSQLExecutor().execute(new Runnable() {
18 ilm 962
 
83 ilm 963
            @Override
964
            public void run() {
965
                try {
966
 
967
                    // Mise à jour du stock
968
                    updateStock(id);
969
                } catch (Exception e) {
970
                    ExceptionHandler.handle("Update error", e);
971
                }
972
            }
973
        });
149 ilm 974
 
975
        DemandeAchatItemSQLElement elt = getElement().getDirectory().getElement(DemandeAchatItemSQLElement.class);
976
        elt.updateStatus(getTable(), getTable().getTable("COMMANDE_ELEMENT"), getSelectedID());
977
 
18 ilm 978
        // generation du document
83 ilm 979
        final CommandeXmlSheet sheet = new CommandeXmlSheet(getTable().getRow(id));
25 ilm 980
        sheet.createDocumentAsynchronous();
94 ilm 981
        sheet.showPrintAndExportAsynchronous(this.panelOO.isVisualisationSelected(), this.panelOO.isImpressionSelected(), true);
25 ilm 982
 
18 ilm 983
    }
984
 
83 ilm 985
    protected String getLibelleStock(SQLRowAccessor row, SQLRowAccessor rowElt) {
986
        return "Commande fournisseur N°" + row.getString("NUMERO");
987
    }
988
 
989
    /**
990
     * Mise à jour des stocks pour chaque article composant la facture
991
     *
992
     * @throws SQLException
993
     */
994
    private void updateStock(int id) throws SQLException {
995
 
996
        SQLRow row = getTable().getRow(id);
997
        StockItemsUpdater stockUpdater = new StockItemsUpdater(new StockLabel() {
998
            @Override
999
            public String getLabel(SQLRowAccessor rowOrigin, SQLRowAccessor rowElt) {
1000
                return getLibelleStock(rowOrigin, rowElt);
1001
            }
93 ilm 1002
        }, row, row.getReferentRows(getTable().getTable("COMMANDE_ELEMENT")), TypeStockUpdate.VIRTUAL_RECEPT);
83 ilm 1003
 
1004
        stockUpdater.update();
1005
    }
1006
 
18 ilm 1007
    public void setDefaults() {
1008
        this.resetValue();
90 ilm 1009
        this.numeroUniqueCommande.setText(NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
18 ilm 1010
        this.table.getModel().clearRows();
1011
    }
1012
 
1013
    @Override
1014
    protected SQLRowValues createDefaults() {
1015
        SQLRowValues rowVals = new SQLRowValues(getTable());
1016
        rowVals.put("T_POIDS", 0.0F);
19 ilm 1017
        rowVals.put("EN_COURS", Boolean.TRUE);
18 ilm 1018
 
1019
        // User
1020
        // SQLSelect sel = new SQLSelect(Configuration.getInstance().getBase());
1021
        SQLElement eltComm = Configuration.getInstance().getDirectory().getElement("COMMERCIAL");
1022
        int idUser = UserManager.getInstance().getCurrentUser().getId();
1023
 
1024
        // sel.addSelect(eltComm.getTable().getKey());
1025
        // sel.setWhere(new Where(eltComm.getTable().getField("ID_USER_COMMON"), "=", idUser));
1026
        // List<SQLRow> rowsComm = (List<SQLRow>)
1027
        // Configuration.getInstance().getBase().getDataSource().execute(sel.asString(), new
1028
        // SQLRowListRSH(eltComm.getTable()));
1029
        SQLRow rowsComm = SQLBackgroundTableCache.getInstance().getCacheForTable(eltComm.getTable()).getFirstRowContains(idUser, eltComm.getTable().getField("ID_USER_COMMON"));
1030
 
1031
        if (rowsComm != null) {
1032
            rowVals.put("ID_COMMERCIAL", rowsComm.getID());
1033
        }
1034
        rowVals.put("T_HT", Long.valueOf(0));
1035
        rowVals.put("T_SERVICE", Long.valueOf(0));
28 ilm 1036
        rowVals.put("T_DEVISE", Long.valueOf(0));
18 ilm 1037
        rowVals.put("T_TVA", Long.valueOf(0));
1038
        rowVals.put("T_TTC", Long.valueOf(0));
90 ilm 1039
        rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
18 ilm 1040
 
65 ilm 1041
        if (getTable().contains("ID_TAXE_PORT")) {
80 ilm 1042
            rowVals.put("ID_TAXE_PORT", TaxeCache.getCache().getFirstTaxe().getID());
65 ilm 1043
        }
132 ilm 1044
        if (getTable().contains("LIVRAISON_F") && componentPrincipaleAdr != null) {
1045
            componentPrincipaleAdr.setEditable(InteractionMode.DISABLED);
1046
        }
65 ilm 1047
 
18 ilm 1048
        return rowVals;
1049
    }
19 ilm 1050
 
90 ilm 1051
    public CommandeItemTable getRowValuesTablePanel() {
1052
        return this.table;
1053
    }
1054
 
73 ilm 1055
    @Override
1056
    public RowValuesTable getRowValuesTable() {
1057
        return this.table.getRowValuesTable();
19 ilm 1058
    }
1059
 
1060
    /**
1061
     * Chargement des éléments d'une commande dans la table
1062
     *
1063
     * @param idCommande
1064
     *
1065
     */
1066
    public void loadCommande(int idCommande) {
1067
 
1068
        SQLElement commande = Configuration.getInstance().getDirectory().getElement("COMMANDE_CLIENT");
1069
        SQLElement commandeElt = Configuration.getInstance().getDirectory().getElement("COMMANDE_CLIENT_ELEMENT");
1070
 
1071
        if (idCommande > 1) {
1072
            SQLInjector injector = SQLInjector.getInjector(commande.getTable(), this.getTable());
1073
            this.select(injector.createRowValuesFrom(idCommande));
1074
        }
1075
 
1076
        loadItem(this.table, commande, idCommande, commandeElt);
1077
    }
1078
 
1079
    /**
1080
     * Chargement des éléments d'un devis dans la table
1081
     *
1082
     * @param idDevis
1083
     *
1084
     */
1085
    public void loadDevis(int idDevis) {
1086
 
1087
        SQLElement devis = Configuration.getInstance().getDirectory().getElement("DEVIS");
1088
        SQLElement devisElt = Configuration.getInstance().getDirectory().getElement("DEVIS_ELEMENT");
1089
 
1090
        if (idDevis > 1) {
1091
            SQLInjector injector = SQLInjector.getInjector(devis.getTable(), this.getTable());
1092
            this.select(injector.createRowValuesFrom(idDevis));
1093
        }
1094
 
1095
        loadItem(this.table, devis, idDevis, devisElt);
1096
    }
1097
 
1098
    /**
1099
     * Chargement des éléments d'une facture dans la table
1100
     *
1101
     * @param idFact
1102
     *
1103
     */
1104
    public void loadFacture(int idFact) {
1105
 
1106
        SQLElement facture = Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_FACTURE");
1107
        SQLElement factureElt = Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_FACTURE_ELEMENT");
1108
 
1109
        if (idFact > 1) {
1110
            SQLInjector injector = SQLInjector.getInjector(facture.getTable(), this.getTable());
1111
            this.select(injector.createRowValuesFrom(idFact));
1112
        }
1113
 
1114
        loadItem(this.table, facture, idFact, factureElt);
1115
    }
1116
 
93 ilm 1117
    @Override
1118
    protected void refreshAfterSelect(SQLRowAccessor rSource) {
1119
        if (this.dateCommande.getValue() != null) {
1120
            this.table.setDateDevise(this.dateCommande.getValue());
1121
        }
1122
 
1123
    }
156 ilm 1124
 
1125
    public void duplicate(final int idCmd) {
1126
 
1127
        final SQLElement cmd = Configuration.getInstance().getDirectory().getElement("COMMANDE");
1128
        final SQLElement cmdElt = Configuration.getInstance().getDirectory().getElement("COMMANDE_ELEMENT");
1129
 
1130
        if (idCmd > 1) {
1131
            final SQLRow row = cmd.getTable().getRow(idCmd);
1132
            final SQLRowValues rowVals = new SQLRowValues(cmd.getTable());
1133
            rowVals.put("ID_FOURNISSEUR", row.getInt("ID_FOURNISSEUR"));
1134
            rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
1135
 
1136
            this.select(rowVals);
1137
        }
1138
 
1139
        final List<SQLRow> myListItem = cmd.getTable().getRow(idCmd).getReferentRows(cmdElt.getTable());
1140
 
1141
        if (myListItem.size() != 0) {
1142
            this.table.getModel().clearRows();
1143
 
1144
            for (final SQLRow rowElt : myListItem) {
1145
 
1146
                final SQLRowValues rowVals = rowElt.createUpdateRow();
1147
                rowVals.clearPrimaryKeys();
1148
                this.table.getModel().addRow(rowVals);
1149
                final int rowIndex = this.table.getModel().getRowCount() - 1;
1150
                this.table.getModel().fireTableModelModified(rowIndex);
1151
            }
1152
        } else {
1153
            this.table.getModel().clearRows();
1154
        }
1155
        this.table.getModel().fireTableDataChanged();
1156
        this.table.repaint();
1157
 
1158
    }
18 ilm 1159
}