OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

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

Rev Author Line No. Line
93 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.quote.ui;
15
 
16
import static org.openconcerto.utils.CollectionUtils.createSet;
17
import org.openconcerto.erp.config.ComptaPropsConfiguration;
18
import org.openconcerto.erp.core.common.element.NumerotationAutoSQLElement;
19
import org.openconcerto.erp.core.common.ui.AbstractArticleItemTable;
20
import org.openconcerto.erp.core.common.ui.DeviseField;
21
import org.openconcerto.erp.core.common.ui.TotalPanel;
22
import org.openconcerto.erp.core.sales.quote.element.EtatDevisSQLElement;
23
import org.openconcerto.erp.core.sales.quote.report.DevisXmlSheet;
24
import org.openconcerto.erp.panel.PanelOOSQLComponent;
25
import org.openconcerto.map.ui.ITextComboVilleViewer;
26
import org.openconcerto.sql.Configuration;
27
import org.openconcerto.sql.element.GlobalMapper;
28
import org.openconcerto.sql.element.GroupSQLComponent;
29
import org.openconcerto.sql.element.SQLElement;
30
import org.openconcerto.sql.model.SQLBackgroundTableCache;
31
import org.openconcerto.sql.model.SQLRow;
32
import org.openconcerto.sql.model.SQLRowAccessor;
33
import org.openconcerto.sql.model.SQLRowValues;
34
import org.openconcerto.sql.model.SQLTable;
35
import org.openconcerto.sql.model.UndefinedRowValuesCache;
36
import org.openconcerto.sql.sqlobject.JUniqueTextField;
37
import org.openconcerto.sql.ui.RadioButtons;
38
import org.openconcerto.sql.users.UserManager;
39
import org.openconcerto.sql.view.EditFrame;
40
import org.openconcerto.ui.DefaultGridBagConstraints;
41
import org.openconcerto.ui.JDate;
42
import org.openconcerto.ui.component.ITextArea;
43
import org.openconcerto.ui.group.Group;
44
import org.openconcerto.utils.ExceptionHandler;
45
import org.openconcerto.utils.checks.ValidState;
46
 
47
import java.awt.GridBagConstraints;
48
import java.awt.GridBagLayout;
49
import java.awt.event.ItemEvent;
50
import java.awt.event.ItemListener;
51
import java.sql.SQLException;
52
import java.util.Calendar;
53
import java.util.Date;
54
import java.util.HashSet;
55
import java.util.List;
56
import java.util.Set;
57
 
58
import javax.swing.JCheckBox;
59
import javax.swing.JComponent;
60
import javax.swing.JLabel;
61
import javax.swing.JPanel;
62
import javax.swing.JTextField;
63
import javax.swing.SwingConstants;
64
import javax.swing.SwingUtilities;
65
 
142 ilm 66
import com.ibm.icu.math.BigDecimal;
67
 
93 ilm 68
public class QuoteSQLComponent extends GroupSQLComponent {
69
 
70
    public static final String ID = "sales.quote";
71
    protected DevisItemTable table = new DevisItemTable();
72
 
73
    private JUniqueTextField numeroUniqueDevis;
74
    private final SQLTable tableNum = getTable().getBase().getTable("NUMEROTATION_AUTO");
75
    private final ITextArea infos = new ITextArea();
76
    private final RadioButtons radioEtat = new RadioButtons("NOM");
77
    private JTextField textPourcentRemise, textPoidsTotal;
78
    private DeviseField textRemiseHT;
79
    private DeviseField fieldHT;
80
    private PanelOOSQLComponent panelOO;
81
 
82
    // Site d'intervention
83
    final JTextField telSite = new JTextField(20);
84
    final ITextComboVilleViewer villeSite = new ITextComboVilleViewer();
85
    final JTextField faxSite = new JTextField(20);
86
    final JTextField telPSite = new JTextField(20);
87
    final JTextField mailSite = new JTextField(20);
88
    final JTextField contactSite = new JTextField(20);
89
    final JTextField desSite = new JTextField(20);
90
    final ITextArea adrSite = new ITextArea();
91
 
92
    // Donneur d'ordre
93
    final JTextField telDonneur = new JTextField(20);
94
    final JTextField sirenDonneur = new JTextField(20);
95
    final ITextComboVilleViewer villeDonneur = new ITextComboVilleViewer();
96
    final JTextField faxDonneur = new JTextField(20);
97
    final JTextField telPDonneur = new JTextField(20);
98
    final JTextField mailDonneur = new JTextField(20);
99
    final JTextField contactDonneur = new JTextField(20);
100
    final JTextField desDonneur = new JTextField(20);
101
    final ITextArea adrDonneur = new ITextArea();
102
 
103
    public QuoteSQLComponent(SQLElement element) {
104
        super(element);
105
    }
106
 
107
    @Override
108
    public Set<String> getPartialResetNames() {
109
        Set<String> s = new HashSet<String>();
110
        s.add("OBJET");
111
        s.add("NUMERO");
112
        return s;
113
    }
114
 
115
    // @Override
116
    // protected Set<String> createRequiredNames() {
117
    // final Set<String> s = new HashSet<String>();
118
    // s.add("NOM");
119
    // s.add("ID_ADRESSE");
120
    // s.add("ID_MODE_REGLEMENT");
121
    // return s;
122
    // }
123
 
124
    @Override
125
    public JComponent createEditor(String id) {
126
        if (id.equals("sales.quote.number")) {
127
            this.numeroUniqueDevis = new JUniqueTextField(15);
128
            return this.numeroUniqueDevis;
129
        } else if (id.equals("panel.oo")) {
130
            this.panelOO = new PanelOOSQLComponent(this);
131
            return this.panelOO;
132
        } else if (id.equals("DATE")) {
133
            return new JDate(true);
134
        } else if (id.equals("sales.quote.state")) {
135
            return new RadioButtons("NOM");
136
        } else if (id.equals("sales.quote.items.list")) {
137
            return this.table;
138
        } else if (id.equals("T_POIDS")) {
139
            return new JTextField(10);
140
        } else if (id.equals("sales.quote.total.amount")) {
141
            final AbstractArticleItemTable items = (AbstractArticleItemTable) getEditor("sales.quote.items.list");
142
 
143
            final DeviseField totalHT = (DeviseField) getEditor("T_HT");
144
            final DeviseField totalService = (DeviseField) getEditor("T_SERVICE");
145
            final DeviseField totalSupply = (getTable().contains("PREBILAN") ? (DeviseField) getEditor("PREBILAN") : (DeviseField) getEditor("T_HA"));
146
            final DeviseField totalDevise = (DeviseField) getEditor("T_DEVISE");
147
            final JTextField totalWeight = (JTextField) getEditor("T_POIDS");
148
            final DeviseField totalTTC = (DeviseField) getEditor("T_TTC");
149
            final DeviseField totalTVA = (DeviseField) getEditor("T_TVA");
150
            final DeviseField totalRemise = (DeviseField) getEditor("REMISE_HT");
151
            final DeviseField totalPORT = (DeviseField) getEditor("PORT_HT");
142 ilm 152
            final DeviseField totalEco = (DeviseField) getEditor("T_ECO_CONTRIBUTION");
93 ilm 153
 
142 ilm 154
            return new TotalPanel(items, totalEco, totalHT, totalTVA, totalTTC, totalRemise, totalPORT, totalService, totalSupply, totalDevise, totalWeight, null);
93 ilm 155
        } else if (id.startsWith("T_")) {
156
            return new DeviseField();
157
        } else if (id.equals("REMISE_HT") || id.equals("PORT_HT") || id.equals("PREBILAN")) {
158
            return new DeviseField();
159
        } else if (id.equals("sales.quote.info.general")) {
160
            return new ITextArea(4, 40);
161
        }
162
        return super.createEditor(id);
163
    }
164
 
165
    private enum Type_Diff {
166
        SITE("SITE"), DONNEUR_ORDRE("DONNEUR");
167
        private final String name;
168
 
169
        private Type_Diff(String name) {
170
            this.name = name;
171
        }
172
 
173
        public String getName() {
174
            return this.name;
175
        }
176
    }
177
 
178
    private ValidState validStateContact = ValidState.getTrueInstance();
179
 
180
    @Override
181
    public synchronized ValidState getValidState() {
182
        assert SwingUtilities.isEventDispatchThread();
183
        return super.getValidState().and(this.validStateContact);
184
    }
185
 
186
    private JPanel createPanelDiff(final Type_Diff type) {
187
 
188
        GridBagConstraints cTabSite = new DefaultGridBagConstraints();
189
        JPanel tabSite = new JPanel(new GridBagLayout());
190
 
191
        cTabSite.weightx = 1;
192
        cTabSite.fill = GridBagConstraints.HORIZONTAL;
193
        cTabSite.gridwidth = 2;
194
 
195
        final String name = type.getName();
196
        final JCheckBox boxSiteDiff = new JCheckBox(getLabelFor(name + "_DIFF"));
197
 
198
        tabSite.add(boxSiteDiff, cTabSite);
199
        this.addView(boxSiteDiff, name + "_DIFF");
200
 
201
        final String fieldSiren = "SIREN_" + name;
202
        if (getTable().contains(fieldSiren)) {
203
            final JLabel labelSrenSite = new JLabel(getLabelFor(fieldSiren));
204
            labelSrenSite.setHorizontalAlignment(SwingConstants.RIGHT);
205
            cTabSite.gridwidth = 1;
206
            cTabSite.gridx = 2;
207
            cTabSite.weightx = 0;
208
            tabSite.add(labelSrenSite, cTabSite);
209
 
210
            cTabSite.gridx++;
211
            cTabSite.weightx = 1;
212
            if (type == Type_Diff.SITE) {
213
                throw new IllegalArgumentException("Le siren n'est pas à renseigné pour le site");
214
            }
215
            final JTextField siren = this.sirenDonneur;
216
            tabSite.add(siren, cTabSite);
217
            this.addView(siren, fieldSiren);
218
            DefaultGridBagConstraints.lockMinimumSize(siren);
219
        }
220
        cTabSite.gridy++;
221
        cTabSite.gridx = 0;
222
        cTabSite.weightx = 0;
223
        cTabSite.fill = GridBagConstraints.HORIZONTAL;
224
        cTabSite.gridwidth = 1;
225
        final JLabel labelSiteDes = new JLabel(getLabelFor("DESIGNATION_" + name));
226
 
227
        labelSiteDes.setHorizontalAlignment(SwingConstants.RIGHT);
228
 
229
        tabSite.add(labelSiteDes, cTabSite);
230
        cTabSite.gridx++;
231
        cTabSite.weightx = 1;
232
        final JTextField designation = type == Type_Diff.SITE ? this.desSite : this.desDonneur;
233
        tabSite.add(designation, cTabSite);
234
        this.addView(designation, "DESIGNATION_" + name);
235
        DefaultGridBagConstraints.lockMinimumSize(designation);
236
 
237
        final JLabel labelTelSite = new JLabel(getLabelFor("TEL_" + name));
238
        labelTelSite.setHorizontalAlignment(SwingConstants.RIGHT);
239
        cTabSite.gridx++;
240
        cTabSite.weightx = 0;
241
        tabSite.add(labelTelSite, cTabSite);
242
 
243
        cTabSite.gridx++;
244
        cTabSite.weightx = 1;
245
        final JTextField tel = type == Type_Diff.SITE ? this.telSite : this.telDonneur;
246
        tabSite.add(tel, cTabSite);
247
        this.addView(tel, "TEL_" + name);
248
        DefaultGridBagConstraints.lockMinimumSize(tel);
249
 
250
        final JLabel labelSiteAdr = new JLabel(getLabelFor("ADRESSE_" + name));
251
        labelSiteAdr.setHorizontalAlignment(SwingConstants.RIGHT);
252
        cTabSite.gridy++;
253
        cTabSite.gridx = 0;
254
        cTabSite.weightx = 0;
255
        tabSite.add(labelSiteAdr, cTabSite);
256
 
257
        cTabSite.gridx++;
258
        cTabSite.weightx = 1;
259
        final ITextArea adresse = type == Type_Diff.SITE ? this.adrSite : this.adrDonneur;
260
        tabSite.add(adresse, cTabSite);
261
        this.addView(adresse, "ADRESSE_" + name);
262
        DefaultGridBagConstraints.lockMinimumSize(adresse);
263
 
264
        final JLabel labelTelPSite = new JLabel(getLabelFor("TEL_P_" + name));
265
        labelTelPSite.setHorizontalAlignment(SwingConstants.RIGHT);
266
        cTabSite.gridx++;
267
        cTabSite.weightx = 0;
268
        tabSite.add(labelTelPSite, cTabSite);
269
 
270
        cTabSite.gridx++;
271
        cTabSite.weightx = 1;
272
        final JTextField telP = type == Type_Diff.SITE ? this.telPSite : this.telPDonneur;
273
        tabSite.add(telP, cTabSite);
274
        this.addView(telP, "TEL_P_" + name);
275
 
276
        cTabSite.gridy++;
277
        cTabSite.gridx = 0;
278
        cTabSite.weightx = 0;
279
        final JLabel labelVilleAdr = new JLabel(getLabelFor("VILLE_" + name));
280
        labelVilleAdr.setHorizontalAlignment(SwingConstants.RIGHT);
281
        tabSite.add(labelVilleAdr, cTabSite);
282
 
283
        cTabSite.gridx++;
284
        cTabSite.weightx = 1;
285
        final ITextComboVilleViewer ville = type == Type_Diff.SITE ? this.villeSite : this.villeDonneur;
286
        tabSite.add(ville, cTabSite);
287
        this.addView(ville, "VILLE_" + name);
288
        DefaultGridBagConstraints.lockMinimumSize(ville);
289
 
290
        cTabSite.gridx++;
291
        cTabSite.weightx = 0;
292
 
293
        final JLabel labelFaxSite = new JLabel(getLabelFor("FAX_" + name));
294
        labelFaxSite.setHorizontalAlignment(SwingConstants.RIGHT);
295
        tabSite.add(labelFaxSite, cTabSite);
296
 
297
        cTabSite.gridx++;
298
        cTabSite.weightx = 1;
299
        final JTextField fax = type == Type_Diff.SITE ? this.faxSite : this.faxDonneur;
300
        tabSite.add(fax, cTabSite);
301
        this.addView(fax, "FAX_" + name);
302
        DefaultGridBagConstraints.lockMinimumSize(fax);
303
 
304
        cTabSite.gridy++;
305
        cTabSite.gridx = 0;
306
        cTabSite.weightx = 0;
307
 
308
        final JLabel labelContactSite = new JLabel(getLabelFor("CONTACT_" + name));
309
        labelContactSite.setHorizontalAlignment(SwingConstants.RIGHT);
310
        tabSite.add(labelContactSite, cTabSite);
311
 
312
        cTabSite.gridx++;
313
        cTabSite.weightx = 1;
314
        final JTextField contact = type == Type_Diff.SITE ? this.contactSite : this.contactDonneur;
315
        tabSite.add(contact, cTabSite);
316
        this.addView(contact, "CONTACT_" + name);
317
 
318
        cTabSite.gridx++;
319
        cTabSite.weightx = 0;
320
 
321
        final JLabel labelMailSite = new JLabel(getLabelFor("MAIL_" + name));
322
        labelMailSite.setHorizontalAlignment(SwingConstants.RIGHT);
323
        tabSite.add(labelMailSite, cTabSite);
324
 
325
        cTabSite.gridx++;
326
        cTabSite.weightx = 1;
327
        final JTextField mail = type == Type_Diff.SITE ? this.mailSite : this.mailDonneur;
328
        tabSite.add(mail, cTabSite);
329
        this.addView(mail, "MAIL_" + name);
330
 
331
        boxSiteDiff.addItemListener(new ItemListener() {
332
 
333
            @Override
334
            public void itemStateChanged(ItemEvent e) {
335
                final boolean selected = boxSiteDiff.isSelected();
336
                setSiteEnabled(selected, type);
337
                if (!selected) {
338
                    clearFieldDiff(type);
339
                }
340
            }
341
        });
342
        return tabSite;
343
    }
344
 
345
    private void clearFieldDiff(Type_Diff type) {
346
        if (type == Type_Diff.SITE) {
347
            this.desSite.setText("");
348
            this.adrSite.setText("");
349
            this.villeSite.setValue(null);
350
            this.telPSite.setText("");
351
            this.telSite.setText("");
352
            this.mailSite.setText("");
353
            this.contactSite.setText("");
354
            this.faxSite.setText("");
355
        } else {
356
            this.sirenDonneur.setText("");
357
            this.desDonneur.setText("");
358
            this.adrDonneur.setText("");
359
            this.villeDonneur.setValue(null);
360
            this.telPDonneur.setText("");
361
            this.telDonneur.setText("");
362
            this.mailDonneur.setText("");
363
            this.contactDonneur.setText("");
364
            this.faxDonneur.setText("");
365
        }
366
    }
367
 
368
    private void setSiteEnabled(boolean b, Type_Diff type) {
369
        if (type == Type_Diff.SITE) {
370
            this.desSite.setEditable(b);
371
            this.adrSite.setEditable(b);
372
            this.villeSite.setEnabled(b);
373
            this.telPSite.setEditable(b);
374
            this.telSite.setEditable(b);
375
            this.mailSite.setEditable(b);
376
            this.contactSite.setEditable(b);
377
            this.faxSite.setEditable(b);
378
        } else {
379
            b = false;
380
 
381
            this.sirenDonneur.setEditable(b);
382
            this.desDonneur.setEditable(b);
383
            this.adrDonneur.setEditable(b);
384
            this.villeDonneur.setEnabled(b);
385
            this.telPDonneur.setEditable(b);
386
            this.telDonneur.setEditable(b);
387
            this.mailDonneur.setEditable(b);
388
            this.contactDonneur.setEditable(b);
389
            this.faxDonneur.setEditable(b);
390
        }
391
    }
392
 
393
    @Override
394
    protected SQLRowValues createDefaults() {
395
        System.err.println("Create defaults");
396
 
397
        // setSiteEnabled(false, Type_Diff.DONNEUR_ORDRE);
398
        // setSiteEnabled(false, Type_Diff.SITE);
399
 
400
        // Numero incremental auto
401
        final SQLRowValues rowVals = new SQLRowValues(getTable());
402
        rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
403
 
404
        // User
405
        final SQLElement eltComm = Configuration.getInstance().getDirectory().getElement("COMMERCIAL");
406
        final int idUser = UserManager.getInstance().getCurrentUser().getId();
407
 
408
        SQLRow rowsComm = SQLBackgroundTableCache.getInstance().getCacheForTable(eltComm.getTable()).getFirstRowContains(idUser, eltComm.getTable().getField("ID_USER_COMMON"));
409
 
410
        if (rowsComm != null) {
411
            rowVals.put("ID_COMMERCIAL", rowsComm.getID());
412
        }
413
 
414
        if (getTable().getUndefinedID() == SQLRow.NONEXISTANT_ID) {
415
            rowVals.put("ID_ETAT_DEVIS", EtatDevisSQLElement.EN_ATTENTE);
416
        } else {
417
            SQLRowValues foreign = UndefinedRowValuesCache.getInstance().getDefaultRowValues(getTable());
418
            if (foreign != null && !foreign.isUndefined()) {
419
                rowVals.put("ID_ETAT_DEVIS", foreign.getObject("ID_ETAT_DEVIS"));
420
            } else {
421
                rowVals.put("ID_ETAT_DEVIS", EtatDevisSQLElement.EN_ATTENTE);
422
            }
423
 
424
        }
425
        rowVals.put("DATE", new Date());
142 ilm 426
        rowVals.put("T_ECO_CONTRIBUTION", BigDecimal.ZERO);
93 ilm 427
        rowVals.put("T_HT", Long.valueOf(0));
428
        rowVals.put("T_TVA", Long.valueOf(0));
429
        rowVals.put("T_SERVICE", Long.valueOf(0));
430
        rowVals.put("T_TTC", Long.valueOf(0));
431
 
432
        if (getTable().getFieldsName().contains("DATE_VALIDITE")) {
433
            Calendar cal = Calendar.getInstance();
434
            cal.add(Calendar.MONTH, 1);
435
            rowVals.put("DATE_VALIDITE", cal.getTime());
436
        }
437
        return rowVals;
438
    }
439
 
440
    private void calculPourcentage() {
441
        final String remiseP = this.textPourcentRemise.getText().replace(',', '.');
442
        Long totalHT = this.fieldHT.getValue();
443
        Long remiseHT = this.textRemiseHT.getValue();
444
 
445
        totalHT = totalHT == null ? Long.valueOf(0) : totalHT;
446
        remiseHT = remiseHT == null ? Long.valueOf(0) : remiseHT;
447
 
448
        try {
449
            final int valueRemise = Integer.valueOf(remiseP);
450
 
451
            final long remise = valueRemise * (totalHT.longValue() + remiseHT.longValue()) / 100;
452
            if (remiseHT != remise) {
453
                this.textRemiseHT.setValue(remise);
454
            }
455
 
456
        } catch (final NumberFormatException e) {
457
            ExceptionHandler.handle("Erreur durant le calcul de la remise", e);
458
        }
459
 
460
    }
461
 
462
    @Override
463
    protected void addViews() {
464
 
465
        super.addViews();
466
 
467
        final DeviseField totalHT = (DeviseField) getEditor("T_HT");
142 ilm 468
        final DeviseField totalEco = (DeviseField) getEditor("T_ECO_CONTRIBUTION");
93 ilm 469
        final DeviseField totalService = (DeviseField) getEditor("T_SERVICE");
470
        final DeviseField totalSupply = (DeviseField) getEditor("T_HA");
471
        final DeviseField totalDevise = (DeviseField) getEditor("T_DEVISE");
472
        final JTextField totalWeight = (JTextField) getEditor("T_POIDS");
473
        final DeviseField totalTTC = (DeviseField) getEditor("T_TTC");
474
        final DeviseField totalTVA = (DeviseField) getEditor("T_TVA");
475
        final DeviseField totalRemise = (DeviseField) getEditor("REMISE_HT");
476
        final DeviseField totalPORT = (DeviseField) getEditor("PORT_HT");
477
 
478
        if (getTable().contains("PREBILAN")) {
479
            this.addView(getEditor("PREBILAN"), "PREBILAN");
480
        }
481
 
482
        this.addView(totalPORT, "PORT_HT");
142 ilm 483
        this.addView(totalEco, "T_ECO_CONTRIBUTION");
93 ilm 484
        this.addView(totalRemise, "REMISE_HT");
485
        this.addView(totalTVA, "T_TVA");
486
        this.addView(totalTTC, "T_TTC");
487
        this.addView(totalWeight, "T_POIDS");
488
        this.addView(totalDevise, "T_DEVISE");
489
        this.addView(totalSupply, "T_HA");
490
        this.addView(totalService, "T_SERVICE");
491
        this.addView(totalHT, "T_HT");
492
    }
493
 
494
    @Override
495
    public JComponent getLabel(String id) {
496
        if (id.equals("sales.quote.total.amount")) {
497
            return new JLabel();
498
        } else if (id.equals("panel.oo")) {
499
            return new JLabel();
500
        } else {
501
            return super.getLabel(id);
502
        }
503
    }
504
 
505
    @Override
506
    public int insert(final SQLRow order) {
507
 
508
        final int idDevis;
509
        // on verifie qu'un devis du meme numero n'a pas été inséré entre temps
510
        if (this.numeroUniqueDevis.checkValidation()) {
511
 
512
            idDevis = super.insert(order);
513
            this.table.updateField("ID_DEVIS", idDevis);
514
            // Création des articles
515
            this.table.createArticle(idDevis, getElement());
516
 
517
            // generation du document
518
            try {
519
                final DevisXmlSheet sheet = new DevisXmlSheet(getTable().getRow(idDevis));
520
                sheet.createDocumentAsynchronous();
521
                sheet.showPrintAndExportAsynchronous(QuoteSQLComponent.this.panelOO.isVisualisationSelected(), QuoteSQLComponent.this.panelOO.isImpressionSelected(), true);
522
            } catch (Exception e) {
523
                ExceptionHandler.handle("Impossible de créer le devis", e);
524
            }
525
 
526
            // incrémentation du numéro auto
527
            if (NumerotationAutoSQLElement.getNextNumero(getElement().getClass()).equalsIgnoreCase(this.numeroUniqueDevis.getText().trim())) {
528
                final SQLRowValues rowVals = new SQLRowValues(this.tableNum);
529
                int val = this.tableNum.getRow(2).getInt(NumerotationAutoSQLElement.getLabelNumberFor(getElement().getClass()));
530
                val++;
531
                rowVals.put(NumerotationAutoSQLElement.getLabelNumberFor(getElement().getClass()), new Integer(val));
532
                try {
533
                    rowVals.update(2);
534
                } catch (final SQLException e) {
535
                    e.printStackTrace();
536
                }
537
            }
538
        } else {
539
            idDevis = getSelectedID();
540
            ExceptionHandler.handle("Impossible d'ajouter, numéro de devis existant.");
541
            final Object root = SwingUtilities.getRoot(this);
542
            if (root instanceof EditFrame) {
543
                final EditFrame frame = (EditFrame) root;
544
                frame.getPanel().setAlwaysVisible(true);
545
            }
546
        }
547
 
548
        return idDevis;
549
    }
550
 
551
    @Override
552
    public void select(final SQLRowAccessor r) {
553
        if (r == null || r.getIDNumber() == null)
554
            super.select(r);
555
        else {
556
            System.err.println(r);
132 ilm 557
            final SQLRowValues rVals = r.asRowValues().deepCopy();
93 ilm 558
            final SQLRowValues vals = new SQLRowValues(r.getTable());
559
            vals.load(rVals, createSet("ID_CLIENT"));
560
            vals.setID(rVals.getID());
561
            System.err.println("Select CLIENT");
562
 
563
            super.select(vals);
564
            rVals.remove("ID_CLIENT");
565
            super.select(rVals);
566
        }
567
 
568
        // super.select(r);
569
        if (r != null) {
570
            this.table.insertFrom("ID_DEVIS", r.getID());
571
            // this.radioEtat.setVisible(r.getID() > getTable().getUndefinedID());
572
            if (getTable().contains("SITE_DIFF"))
573
                setSiteEnabled(r.getBoolean("SITE_DIFF"), Type_Diff.SITE);
574
 
575
            if (getTable().contains("DONNEUR_DIFF"))
576
                setSiteEnabled(r.getBoolean("DONNEUR_DIFF"), Type_Diff.DONNEUR_ORDRE);
577
        }
578
 
579
    }
580
 
581
    @Override
582
    public void update() {
583
 
584
        if (!this.numeroUniqueDevis.checkValidation()) {
585
            ExceptionHandler.handle("Impossible de modifier, numéro de devis existant.");
586
            final Object root = SwingUtilities.getRoot(this);
587
            if (root instanceof EditFrame) {
588
                final EditFrame frame = (EditFrame) root;
589
                frame.getPanel().setAlwaysVisible(true);
590
            }
591
            return;
592
        }
593
        super.update();
594
        this.table.updateField("ID_DEVIS", getSelectedID());
595
        this.table.createArticle(getSelectedID(), getElement());
596
 
597
        // generation du document
598
 
599
        try {
600
            final DevisXmlSheet sheet = new DevisXmlSheet(getTable().getRow(getSelectedID()));
601
            sheet.createDocumentAsynchronous();
602
            sheet.showPrintAndExportAsynchronous(QuoteSQLComponent.this.panelOO.isVisualisationSelected(), QuoteSQLComponent.this.panelOO.isImpressionSelected(), true);
603
        } catch (Exception e) {
604
            ExceptionHandler.handle("Impossible de créer le devis", e);
605
        }
606
 
607
    }
608
 
609
    /**
610
     * Création d'un devis à partir d'un devis existant
611
     *
612
     * @param idDevis
613
     *
614
     */
615
    public void loadDevisExistant(final int idDevis) {
616
 
617
        final SQLElement devis = Configuration.getInstance().getDirectory().getElement("DEVIS");
618
        final SQLElement devisElt = Configuration.getInstance().getDirectory().getElement("DEVIS_ELEMENT");
619
 
620
        // On duplique le devis
621
        if (idDevis > 1) {
622
            final SQLRow row = devis.getTable().getRow(idDevis);
623
            final SQLRowValues rowVals = new SQLRowValues(devis.getTable());
624
            rowVals.put("ID_CLIENT", row.getInt("ID_CLIENT"));
625
            rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
626
 
627
 
628
            this.select(rowVals);
629
        }
630
 
631
        // On duplique les elements de devis
632
        final List<SQLRow> myListItem = devis.getTable().getRow(idDevis).getReferentRows(devisElt.getTable());
633
 
634
        if (myListItem.size() != 0) {
635
            this.table.getModel().clearRows();
636
 
637
            for (final SQLRow rowElt : myListItem) {
638
 
639
                final SQLRowValues rowVals = rowElt.createUpdateRow();
640
                rowVals.clearPrimaryKeys();
641
                this.table.getModel().addRow(rowVals);
642
                final int rowIndex = this.table.getModel().getRowCount() - 1;
643
                this.table.getModel().fireTableModelModified(rowIndex);
644
            }
645
        } else {
646
            this.table.getModel().clearRows();
647
        }
648
        this.table.getModel().fireTableDataChanged();
649
        this.table.repaint();
650
    }
651
 
652
}