OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 142 | 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
 *
182 ilm 4
 * Copyright 2011-2019 OpenConcerto, by ILM Informatique. All rights reserved.
93 ilm 5
 *
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
9
 * language governing permissions and limitations under the License.
10
 *
11
 * When distributing the software, include this License Header Notice in each file.
12
 */
13
 
14
 package org.openconcerto.erp.core.sales.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");
182 ilm 167
 
93 ilm 168
        private final String name;
169
 
170
        private Type_Diff(String name) {
171
            this.name = name;
172
        }
173
 
174
        public String getName() {
175
            return this.name;
176
        }
177
    }
178
 
179
    private ValidState validStateContact = ValidState.getTrueInstance();
180
 
181
    @Override
182
    public synchronized ValidState getValidState() {
183
        assert SwingUtilities.isEventDispatchThread();
184
        return super.getValidState().and(this.validStateContact);
185
    }
186
 
187
    private JPanel createPanelDiff(final Type_Diff type) {
188
 
189
        GridBagConstraints cTabSite = new DefaultGridBagConstraints();
190
        JPanel tabSite = new JPanel(new GridBagLayout());
191
 
192
        cTabSite.weightx = 1;
193
        cTabSite.fill = GridBagConstraints.HORIZONTAL;
194
        cTabSite.gridwidth = 2;
195
 
196
        final String name = type.getName();
197
        final JCheckBox boxSiteDiff = new JCheckBox(getLabelFor(name + "_DIFF"));
198
 
199
        tabSite.add(boxSiteDiff, cTabSite);
200
        this.addView(boxSiteDiff, name + "_DIFF");
201
 
202
        final String fieldSiren = "SIREN_" + name;
203
        if (getTable().contains(fieldSiren)) {
204
            final JLabel labelSrenSite = new JLabel(getLabelFor(fieldSiren));
205
            labelSrenSite.setHorizontalAlignment(SwingConstants.RIGHT);
206
            cTabSite.gridwidth = 1;
207
            cTabSite.gridx = 2;
208
            cTabSite.weightx = 0;
209
            tabSite.add(labelSrenSite, cTabSite);
210
 
211
            cTabSite.gridx++;
212
            cTabSite.weightx = 1;
213
            if (type == Type_Diff.SITE) {
214
                throw new IllegalArgumentException("Le siren n'est pas à renseigné pour le site");
215
            }
216
            final JTextField siren = this.sirenDonneur;
217
            tabSite.add(siren, cTabSite);
218
            this.addView(siren, fieldSiren);
219
            DefaultGridBagConstraints.lockMinimumSize(siren);
220
        }
221
        cTabSite.gridy++;
222
        cTabSite.gridx = 0;
223
        cTabSite.weightx = 0;
224
        cTabSite.fill = GridBagConstraints.HORIZONTAL;
225
        cTabSite.gridwidth = 1;
226
        final JLabel labelSiteDes = new JLabel(getLabelFor("DESIGNATION_" + name));
227
 
228
        labelSiteDes.setHorizontalAlignment(SwingConstants.RIGHT);
229
 
230
        tabSite.add(labelSiteDes, cTabSite);
231
        cTabSite.gridx++;
232
        cTabSite.weightx = 1;
233
        final JTextField designation = type == Type_Diff.SITE ? this.desSite : this.desDonneur;
234
        tabSite.add(designation, cTabSite);
235
        this.addView(designation, "DESIGNATION_" + name);
236
        DefaultGridBagConstraints.lockMinimumSize(designation);
237
 
238
        final JLabel labelTelSite = new JLabel(getLabelFor("TEL_" + name));
239
        labelTelSite.setHorizontalAlignment(SwingConstants.RIGHT);
240
        cTabSite.gridx++;
241
        cTabSite.weightx = 0;
242
        tabSite.add(labelTelSite, cTabSite);
243
 
244
        cTabSite.gridx++;
245
        cTabSite.weightx = 1;
246
        final JTextField tel = type == Type_Diff.SITE ? this.telSite : this.telDonneur;
247
        tabSite.add(tel, cTabSite);
248
        this.addView(tel, "TEL_" + name);
249
        DefaultGridBagConstraints.lockMinimumSize(tel);
250
 
251
        final JLabel labelSiteAdr = new JLabel(getLabelFor("ADRESSE_" + name));
252
        labelSiteAdr.setHorizontalAlignment(SwingConstants.RIGHT);
253
        cTabSite.gridy++;
254
        cTabSite.gridx = 0;
255
        cTabSite.weightx = 0;
256
        tabSite.add(labelSiteAdr, cTabSite);
257
 
258
        cTabSite.gridx++;
259
        cTabSite.weightx = 1;
260
        final ITextArea adresse = type == Type_Diff.SITE ? this.adrSite : this.adrDonneur;
261
        tabSite.add(adresse, cTabSite);
262
        this.addView(adresse, "ADRESSE_" + name);
263
        DefaultGridBagConstraints.lockMinimumSize(adresse);
264
 
265
        final JLabel labelTelPSite = new JLabel(getLabelFor("TEL_P_" + name));
266
        labelTelPSite.setHorizontalAlignment(SwingConstants.RIGHT);
267
        cTabSite.gridx++;
268
        cTabSite.weightx = 0;
269
        tabSite.add(labelTelPSite, cTabSite);
270
 
271
        cTabSite.gridx++;
272
        cTabSite.weightx = 1;
273
        final JTextField telP = type == Type_Diff.SITE ? this.telPSite : this.telPDonneur;
274
        tabSite.add(telP, cTabSite);
275
        this.addView(telP, "TEL_P_" + name);
276
 
277
        cTabSite.gridy++;
278
        cTabSite.gridx = 0;
279
        cTabSite.weightx = 0;
280
        final JLabel labelVilleAdr = new JLabel(getLabelFor("VILLE_" + name));
281
        labelVilleAdr.setHorizontalAlignment(SwingConstants.RIGHT);
282
        tabSite.add(labelVilleAdr, cTabSite);
283
 
284
        cTabSite.gridx++;
285
        cTabSite.weightx = 1;
286
        final ITextComboVilleViewer ville = type == Type_Diff.SITE ? this.villeSite : this.villeDonneur;
287
        tabSite.add(ville, cTabSite);
288
        this.addView(ville, "VILLE_" + name);
289
        DefaultGridBagConstraints.lockMinimumSize(ville);
290
 
291
        cTabSite.gridx++;
292
        cTabSite.weightx = 0;
293
 
294
        final JLabel labelFaxSite = new JLabel(getLabelFor("FAX_" + name));
295
        labelFaxSite.setHorizontalAlignment(SwingConstants.RIGHT);
296
        tabSite.add(labelFaxSite, cTabSite);
297
 
298
        cTabSite.gridx++;
299
        cTabSite.weightx = 1;
300
        final JTextField fax = type == Type_Diff.SITE ? this.faxSite : this.faxDonneur;
301
        tabSite.add(fax, cTabSite);
302
        this.addView(fax, "FAX_" + name);
303
        DefaultGridBagConstraints.lockMinimumSize(fax);
304
 
305
        cTabSite.gridy++;
306
        cTabSite.gridx = 0;
307
        cTabSite.weightx = 0;
308
 
309
        final JLabel labelContactSite = new JLabel(getLabelFor("CONTACT_" + name));
310
        labelContactSite.setHorizontalAlignment(SwingConstants.RIGHT);
311
        tabSite.add(labelContactSite, cTabSite);
312
 
313
        cTabSite.gridx++;
314
        cTabSite.weightx = 1;
315
        final JTextField contact = type == Type_Diff.SITE ? this.contactSite : this.contactDonneur;
316
        tabSite.add(contact, cTabSite);
317
        this.addView(contact, "CONTACT_" + name);
318
 
319
        cTabSite.gridx++;
320
        cTabSite.weightx = 0;
321
 
322
        final JLabel labelMailSite = new JLabel(getLabelFor("MAIL_" + name));
323
        labelMailSite.setHorizontalAlignment(SwingConstants.RIGHT);
324
        tabSite.add(labelMailSite, cTabSite);
325
 
326
        cTabSite.gridx++;
327
        cTabSite.weightx = 1;
328
        final JTextField mail = type == Type_Diff.SITE ? this.mailSite : this.mailDonneur;
329
        tabSite.add(mail, cTabSite);
330
        this.addView(mail, "MAIL_" + name);
331
 
332
        boxSiteDiff.addItemListener(new ItemListener() {
333
 
334
            @Override
335
            public void itemStateChanged(ItemEvent e) {
336
                final boolean selected = boxSiteDiff.isSelected();
337
                setSiteEnabled(selected, type);
338
                if (!selected) {
339
                    clearFieldDiff(type);
340
                }
341
            }
342
        });
343
        return tabSite;
344
    }
345
 
346
    private void clearFieldDiff(Type_Diff type) {
347
        if (type == Type_Diff.SITE) {
348
            this.desSite.setText("");
349
            this.adrSite.setText("");
350
            this.villeSite.setValue(null);
351
            this.telPSite.setText("");
352
            this.telSite.setText("");
353
            this.mailSite.setText("");
354
            this.contactSite.setText("");
355
            this.faxSite.setText("");
356
        } else {
357
            this.sirenDonneur.setText("");
358
            this.desDonneur.setText("");
359
            this.adrDonneur.setText("");
360
            this.villeDonneur.setValue(null);
361
            this.telPDonneur.setText("");
362
            this.telDonneur.setText("");
363
            this.mailDonneur.setText("");
364
            this.contactDonneur.setText("");
365
            this.faxDonneur.setText("");
366
        }
367
    }
368
 
369
    private void setSiteEnabled(boolean b, Type_Diff type) {
370
        if (type == Type_Diff.SITE) {
371
            this.desSite.setEditable(b);
372
            this.adrSite.setEditable(b);
373
            this.villeSite.setEnabled(b);
374
            this.telPSite.setEditable(b);
375
            this.telSite.setEditable(b);
376
            this.mailSite.setEditable(b);
377
            this.contactSite.setEditable(b);
378
            this.faxSite.setEditable(b);
379
        } else {
380
            b = false;
381
 
382
            this.sirenDonneur.setEditable(b);
383
            this.desDonneur.setEditable(b);
384
            this.adrDonneur.setEditable(b);
385
            this.villeDonneur.setEnabled(b);
386
            this.telPDonneur.setEditable(b);
387
            this.telDonneur.setEditable(b);
388
            this.mailDonneur.setEditable(b);
389
            this.contactDonneur.setEditable(b);
390
            this.faxDonneur.setEditable(b);
391
        }
392
    }
393
 
394
    @Override
395
    protected SQLRowValues createDefaults() {
396
        System.err.println("Create defaults");
397
 
398
        // setSiteEnabled(false, Type_Diff.DONNEUR_ORDRE);
399
        // setSiteEnabled(false, Type_Diff.SITE);
400
 
401
        // Numero incremental auto
402
        final SQLRowValues rowVals = new SQLRowValues(getTable());
403
        rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
404
 
405
        // User
406
        final SQLElement eltComm = Configuration.getInstance().getDirectory().getElement("COMMERCIAL");
407
        final int idUser = UserManager.getInstance().getCurrentUser().getId();
408
 
409
        SQLRow rowsComm = SQLBackgroundTableCache.getInstance().getCacheForTable(eltComm.getTable()).getFirstRowContains(idUser, eltComm.getTable().getField("ID_USER_COMMON"));
410
 
411
        if (rowsComm != null) {
412
            rowVals.put("ID_COMMERCIAL", rowsComm.getID());
413
        }
414
 
415
        if (getTable().getUndefinedID() == SQLRow.NONEXISTANT_ID) {
416
            rowVals.put("ID_ETAT_DEVIS", EtatDevisSQLElement.EN_ATTENTE);
417
        } else {
418
            SQLRowValues foreign = UndefinedRowValuesCache.getInstance().getDefaultRowValues(getTable());
419
            if (foreign != null && !foreign.isUndefined()) {
420
                rowVals.put("ID_ETAT_DEVIS", foreign.getObject("ID_ETAT_DEVIS"));
421
            } else {
422
                rowVals.put("ID_ETAT_DEVIS", EtatDevisSQLElement.EN_ATTENTE);
423
            }
424
 
425
        }
426
        rowVals.put("DATE", new Date());
142 ilm 427
        rowVals.put("T_ECO_CONTRIBUTION", BigDecimal.ZERO);
93 ilm 428
        rowVals.put("T_HT", Long.valueOf(0));
429
        rowVals.put("T_TVA", Long.valueOf(0));
430
        rowVals.put("T_SERVICE", Long.valueOf(0));
431
        rowVals.put("T_TTC", Long.valueOf(0));
432
 
433
        if (getTable().getFieldsName().contains("DATE_VALIDITE")) {
434
            Calendar cal = Calendar.getInstance();
435
            cal.add(Calendar.MONTH, 1);
436
            rowVals.put("DATE_VALIDITE", cal.getTime());
437
        }
438
        return rowVals;
439
    }
440
 
441
    private void calculPourcentage() {
442
        final String remiseP = this.textPourcentRemise.getText().replace(',', '.');
443
        Long totalHT = this.fieldHT.getValue();
444
        Long remiseHT = this.textRemiseHT.getValue();
445
 
446
        totalHT = totalHT == null ? Long.valueOf(0) : totalHT;
447
        remiseHT = remiseHT == null ? Long.valueOf(0) : remiseHT;
448
 
449
        try {
450
            final int valueRemise = Integer.valueOf(remiseP);
451
 
452
            final long remise = valueRemise * (totalHT.longValue() + remiseHT.longValue()) / 100;
453
            if (remiseHT != remise) {
454
                this.textRemiseHT.setValue(remise);
455
            }
456
 
457
        } catch (final NumberFormatException e) {
458
            ExceptionHandler.handle("Erreur durant le calcul de la remise", e);
459
        }
460
 
461
    }
462
 
463
    @Override
464
    protected void addViews() {
465
 
466
        super.addViews();
467
 
468
        final DeviseField totalHT = (DeviseField) getEditor("T_HT");
142 ilm 469
        final DeviseField totalEco = (DeviseField) getEditor("T_ECO_CONTRIBUTION");
93 ilm 470
        final DeviseField totalService = (DeviseField) getEditor("T_SERVICE");
471
        final DeviseField totalSupply = (DeviseField) getEditor("T_HA");
472
        final DeviseField totalDevise = (DeviseField) getEditor("T_DEVISE");
473
        final JTextField totalWeight = (JTextField) getEditor("T_POIDS");
474
        final DeviseField totalTTC = (DeviseField) getEditor("T_TTC");
475
        final DeviseField totalTVA = (DeviseField) getEditor("T_TVA");
476
        final DeviseField totalRemise = (DeviseField) getEditor("REMISE_HT");
477
        final DeviseField totalPORT = (DeviseField) getEditor("PORT_HT");
478
 
479
        if (getTable().contains("PREBILAN")) {
480
            this.addView(getEditor("PREBILAN"), "PREBILAN");
481
        }
482
 
483
        this.addView(totalPORT, "PORT_HT");
142 ilm 484
        this.addView(totalEco, "T_ECO_CONTRIBUTION");
93 ilm 485
        this.addView(totalRemise, "REMISE_HT");
486
        this.addView(totalTVA, "T_TVA");
487
        this.addView(totalTTC, "T_TTC");
488
        this.addView(totalWeight, "T_POIDS");
489
        this.addView(totalDevise, "T_DEVISE");
490
        this.addView(totalSupply, "T_HA");
491
        this.addView(totalService, "T_SERVICE");
492
        this.addView(totalHT, "T_HT");
493
    }
494
 
495
    @Override
496
    public JComponent getLabel(String id) {
497
        if (id.equals("sales.quote.total.amount")) {
498
            return new JLabel();
499
        } else if (id.equals("panel.oo")) {
500
            return new JLabel();
501
        } else {
502
            return super.getLabel(id);
503
        }
504
    }
505
 
506
    @Override
507
    public int insert(final SQLRow order) {
508
 
509
        final int idDevis;
510
        // on verifie qu'un devis du meme numero n'a pas été inséré entre temps
511
        if (this.numeroUniqueDevis.checkValidation()) {
512
 
513
            idDevis = super.insert(order);
514
            this.table.updateField("ID_DEVIS", idDevis);
515
            // Création des articles
516
            this.table.createArticle(idDevis, getElement());
517
 
518
            // generation du document
519
            try {
182 ilm 520
                final SQLRow row = getTable().getRow(idDevis);
521
                final DevisXmlSheet sheet = new DevisXmlSheet(row);
93 ilm 522
                sheet.createDocumentAsynchronous();
182 ilm 523
                sheet.showPrintAndExportAsynchronous(QuoteSQLComponent.this.panelOO.isVisualisationSelected(), QuoteSQLComponent.this.panelOO.isImpressionSelected(), true, getElement(), row);
93 ilm 524
            } catch (Exception e) {
525
                ExceptionHandler.handle("Impossible de créer le devis", e);
526
            }
527
 
528
            // incrémentation du numéro auto
529
            if (NumerotationAutoSQLElement.getNextNumero(getElement().getClass()).equalsIgnoreCase(this.numeroUniqueDevis.getText().trim())) {
530
                final SQLRowValues rowVals = new SQLRowValues(this.tableNum);
531
                int val = this.tableNum.getRow(2).getInt(NumerotationAutoSQLElement.getLabelNumberFor(getElement().getClass()));
532
                val++;
533
                rowVals.put(NumerotationAutoSQLElement.getLabelNumberFor(getElement().getClass()), new Integer(val));
534
                try {
535
                    rowVals.update(2);
536
                } catch (final SQLException e) {
537
                    e.printStackTrace();
538
                }
539
            }
540
        } else {
541
            idDevis = getSelectedID();
542
            ExceptionHandler.handle("Impossible d'ajouter, numéro de devis existant.");
543
            final Object root = SwingUtilities.getRoot(this);
544
            if (root instanceof EditFrame) {
545
                final EditFrame frame = (EditFrame) root;
546
                frame.getPanel().setAlwaysVisible(true);
547
            }
548
        }
549
 
550
        return idDevis;
551
    }
552
 
553
    @Override
554
    public void select(final SQLRowAccessor r) {
555
        if (r == null || r.getIDNumber() == null)
556
            super.select(r);
557
        else {
558
            System.err.println(r);
132 ilm 559
            final SQLRowValues rVals = r.asRowValues().deepCopy();
93 ilm 560
            final SQLRowValues vals = new SQLRowValues(r.getTable());
561
            vals.load(rVals, createSet("ID_CLIENT"));
562
            vals.setID(rVals.getID());
563
            System.err.println("Select CLIENT");
564
 
565
            super.select(vals);
566
            rVals.remove("ID_CLIENT");
567
            super.select(rVals);
568
        }
569
 
570
        // super.select(r);
571
        if (r != null) {
572
            this.table.insertFrom("ID_DEVIS", r.getID());
573
            // this.radioEtat.setVisible(r.getID() > getTable().getUndefinedID());
574
            if (getTable().contains("SITE_DIFF"))
575
                setSiteEnabled(r.getBoolean("SITE_DIFF"), Type_Diff.SITE);
576
 
577
            if (getTable().contains("DONNEUR_DIFF"))
578
                setSiteEnabled(r.getBoolean("DONNEUR_DIFF"), Type_Diff.DONNEUR_ORDRE);
579
        }
580
 
581
    }
582
 
583
    @Override
584
    public void update() {
585
 
586
        if (!this.numeroUniqueDevis.checkValidation()) {
587
            ExceptionHandler.handle("Impossible de modifier, numéro de devis existant.");
588
            final Object root = SwingUtilities.getRoot(this);
589
            if (root instanceof EditFrame) {
590
                final EditFrame frame = (EditFrame) root;
591
                frame.getPanel().setAlwaysVisible(true);
592
            }
593
            return;
594
        }
595
        super.update();
596
        this.table.updateField("ID_DEVIS", getSelectedID());
597
        this.table.createArticle(getSelectedID(), getElement());
598
 
599
        // generation du document
600
 
601
        try {
182 ilm 602
            final SQLRow row = getTable().getRow(getSelectedID());
603
            final DevisXmlSheet sheet = new DevisXmlSheet(row);
93 ilm 604
            sheet.createDocumentAsynchronous();
182 ilm 605
            sheet.showPrintAndExportAsynchronous(QuoteSQLComponent.this.panelOO.isVisualisationSelected(), QuoteSQLComponent.this.panelOO.isImpressionSelected(), true, getElement(), row);
93 ilm 606
        } catch (Exception e) {
607
            ExceptionHandler.handle("Impossible de créer le devis", e);
608
        }
609
 
610
    }
611
 
612
    /**
613
     * Création d'un devis à partir d'un devis existant
614
     *
615
     * @param idDevis
616
     *
617
     */
618
    public void loadDevisExistant(final int idDevis) {
619
 
620
        final SQLElement devis = Configuration.getInstance().getDirectory().getElement("DEVIS");
621
        final SQLElement devisElt = Configuration.getInstance().getDirectory().getElement("DEVIS_ELEMENT");
622
 
623
        // On duplique le devis
624
        if (idDevis > 1) {
625
            final SQLRow row = devis.getTable().getRow(idDevis);
626
            final SQLRowValues rowVals = new SQLRowValues(devis.getTable());
627
            rowVals.put("ID_CLIENT", row.getInt("ID_CLIENT"));
628
            rowVals.put("NUMERO", NumerotationAutoSQLElement.getNextNumero(getElement().getClass()));
629
 
630
 
631
            this.select(rowVals);
632
        }
633
 
634
        // On duplique les elements de devis
635
        final List<SQLRow> myListItem = devis.getTable().getRow(idDevis).getReferentRows(devisElt.getTable());
636
 
637
        if (myListItem.size() != 0) {
638
            this.table.getModel().clearRows();
639
 
640
            for (final SQLRow rowElt : myListItem) {
641
 
642
                final SQLRowValues rowVals = rowElt.createUpdateRow();
643
                rowVals.clearPrimaryKeys();
182 ilm 644
                this.table.getModel().addRow(rowVals, false);
93 ilm 645
                final int rowIndex = this.table.getModel().getRowCount() - 1;
646
                this.table.getModel().fireTableModelModified(rowIndex);
647
            }
648
        } else {
649
            this.table.getModel().clearRows();
650
        }
651
        this.table.getModel().fireTableDataChanged();
652
        this.table.repaint();
653
    }
654
 
655
}