OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

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

Rev Author Line No. Line
18 ilm 1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
5
 *
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
9
 * language governing permissions and limitations under the License.
10
 *
11
 * When distributing the software, include this License Header Notice in each file.
12
 */
13
 
14
 package org.openconcerto.erp.core.sales.invoice.element;
15
 
16
import org.openconcerto.erp.config.ComptaPropsConfiguration;
17
import org.openconcerto.erp.config.Gestion;
73 ilm 18
import org.openconcerto.erp.core.common.component.TransfertBaseSQLComponent;
18 ilm 19
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement;
67 ilm 20
import org.openconcerto.erp.core.common.ui.DeviseField;
21
import org.openconcerto.erp.core.common.ui.PanelFrame;
22
import org.openconcerto.erp.core.finance.accounting.element.EcritureSQLElement;
83 ilm 23
import org.openconcerto.erp.core.sales.account.PartialInvoiceEditGroup;
80 ilm 24
import org.openconcerto.erp.core.sales.account.VenteFactureSituationSQLComponent;
83 ilm 25
import org.openconcerto.erp.core.sales.account.VenteFactureSoldeEditGroup;
80 ilm 26
import org.openconcerto.erp.core.sales.account.VenteFactureSoldeSQLComponent;
18 ilm 27
import org.openconcerto.erp.core.sales.invoice.component.SaisieVenteFactureSQLComponent;
67 ilm 28
import org.openconcerto.erp.core.sales.invoice.report.VenteFactureXmlSheet;
19 ilm 29
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
30
import org.openconcerto.erp.core.sales.shipment.component.BonDeLivraisonSQLComponent;
31
import org.openconcerto.erp.core.supplychain.stock.element.MouvementStockSQLElement;
67 ilm 32
import org.openconcerto.erp.generationEcritures.GenerationMvtRetourNatexis;
33
import org.openconcerto.erp.model.MouseSheetXmlListeListener;
83 ilm 34
import org.openconcerto.erp.preferences.DefaultNXProps;
61 ilm 35
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
67 ilm 36
import org.openconcerto.erp.rights.NXRights;
18 ilm 37
import org.openconcerto.sql.Configuration;
83 ilm 38
import org.openconcerto.sql.element.GlobalMapper;
18 ilm 39
import org.openconcerto.sql.element.SQLComponent;
40
import org.openconcerto.sql.element.SQLElement;
83 ilm 41
import org.openconcerto.sql.model.FieldPath;
19 ilm 42
import org.openconcerto.sql.model.SQLField;
18 ilm 43
import org.openconcerto.sql.model.SQLInjector;
44
import org.openconcerto.sql.model.SQLRow;
67 ilm 45
import org.openconcerto.sql.model.SQLRowAccessor;
46
import org.openconcerto.sql.model.SQLRowListRSH;
18 ilm 47
import org.openconcerto.sql.model.SQLRowValues;
48
import org.openconcerto.sql.model.SQLSelect;
19 ilm 49
import org.openconcerto.sql.model.SQLTable;
18 ilm 50
import org.openconcerto.sql.model.Where;
83 ilm 51
import org.openconcerto.sql.model.graph.Path;
61 ilm 52
import org.openconcerto.sql.preferences.SQLPreferences;
18 ilm 53
import org.openconcerto.sql.request.ListSQLRequest;
67 ilm 54
import org.openconcerto.sql.sqlobject.ElementComboBox;
55
import org.openconcerto.sql.users.UserManager;
18 ilm 56
import org.openconcerto.sql.view.EditFrame;
67 ilm 57
import org.openconcerto.sql.view.EditPanel;
73 ilm 58
import org.openconcerto.sql.view.EditPanel.EditMode;
67 ilm 59
import org.openconcerto.sql.view.EditPanelListener;
83 ilm 60
import org.openconcerto.sql.view.list.BaseSQLTableModelColumn;
67 ilm 61
import org.openconcerto.sql.view.list.IListe;
73 ilm 62
import org.openconcerto.sql.view.list.IListeAction.IListeEvent;
67 ilm 63
import org.openconcerto.sql.view.list.RowAction;
64
import org.openconcerto.sql.view.list.RowAction.PredicateRowAction;
83 ilm 65
import org.openconcerto.sql.view.list.SQLTableModelSourceOnline;
67 ilm 66
import org.openconcerto.ui.DefaultGridBagConstraints;
83 ilm 67
import org.openconcerto.ui.table.PercentTableCellRenderer;
19 ilm 68
import org.openconcerto.utils.CollectionMap;
83 ilm 69
import org.openconcerto.utils.CollectionUtils;
18 ilm 70
import org.openconcerto.utils.ExceptionHandler;
83 ilm 71
import org.openconcerto.utils.ListMap;
80 ilm 72
import org.openconcerto.utils.Tuple2;
73
import org.openconcerto.utils.cc.ITransformer;
67 ilm 74
import org.openconcerto.utils.i18n.TranslationManager;
18 ilm 75
 
67 ilm 76
import java.awt.GridBagConstraints;
77
import java.awt.GridBagLayout;
78
import java.awt.event.ActionEvent;
79
import java.awt.event.ActionListener;
19 ilm 80
import java.math.BigDecimal;
67 ilm 81
import java.math.MathContext;
83 ilm 82
import java.math.RoundingMode;
18 ilm 83
import java.sql.SQLException;
84
import java.util.ArrayList;
83 ilm 85
import java.util.Arrays;
86
import java.util.Collection;
87
import java.util.Collections;
18 ilm 88
import java.util.HashSet;
89
import java.util.List;
90
import java.util.Set;
91
 
67 ilm 92
import javax.swing.AbstractAction;
18 ilm 93
import javax.swing.ImageIcon;
67 ilm 94
import javax.swing.JButton;
18 ilm 95
import javax.swing.JFrame;
67 ilm 96
import javax.swing.JLabel;
97
import javax.swing.JPanel;
18 ilm 98
 
99
import org.apache.commons.dbutils.handlers.ArrayListHandler;
100
 
67 ilm 101
// Depuis le 1er juillet 2003, la règlementation fiscale impose la délivrance d'une facture pour
102
// tous les versements d'acomptes, même lorsqu'ils ne donnent pas lieu à exigibilité de la TVA
103
// (article 289 I -1-c du CGI).
104
// Avant la loi de finances rectificative pour 2002, il n'y avait obligation de délivrer une facture
105
// pour les acomptes que lorsque la TVA était exigible sur ces versements. Depuis l'entrée en
106
// vigueur de cette loi, initialement fixée au 1er juillet 2003, et reportée par tolérance
107
// administrative au 1er janvier 2004, il faut désormais délivrer une facture pour tous les acomptes
108
// perçus.
109
// L'obligation nouvelle de facturer tous les versements d'acomptes ne modifie pas les règles
110
// d'exigibilité de la TVA.
111
// La date du versement de l'acompte doit être indiquée sur la facture d'acompte si elle est
112
// différente de la date de délivrance de cette facture, et si elle est connue à cette date.
113
 
114
// La facture d'acompte peut ne pas mentionner l'ensemble des mentions obligatoires lorsque les
115
// informations nécessaires à son établissement ne sont pas connues au moment de son émission (par
116
// exemple, quantité ou prix exact du produit).
18 ilm 117
public class SaisieVenteFactureSQLElement extends ComptaSQLConfElement {
118
 
25 ilm 119
    public static final String TABLENAME = "SAISIE_VENTE_FACTURE";
120
 
18 ilm 121
    public SaisieVenteFactureSQLElement() {
25 ilm 122
        super(TABLENAME, "une facture", "factures");
80 ilm 123
 
83 ilm 124
        GlobalMapper.getInstance().map(VenteFactureSituationSQLComponent.ID, new PartialInvoiceEditGroup());
80 ilm 125
        addComponentFactory(VenteFactureSituationSQLComponent.ID, new ITransformer<Tuple2<SQLElement, String>, SQLComponent>() {
126
 
127
            @Override
128
            public SQLComponent transformChecked(Tuple2<SQLElement, String> input) {
129
 
130
                return new VenteFactureSituationSQLComponent(SaisieVenteFactureSQLElement.this);
131
            }
132
        });
83 ilm 133
        GlobalMapper.getInstance().map(VenteFactureSoldeSQLComponent.ID, new VenteFactureSoldeEditGroup());
80 ilm 134
        addComponentFactory(VenteFactureSoldeSQLComponent.ID, new ITransformer<Tuple2<SQLElement, String>, SQLComponent>() {
135
 
136
            @Override
137
            public SQLComponent transformChecked(Tuple2<SQLElement, String> input) {
138
 
139
                return new VenteFactureSoldeSQLComponent(SaisieVenteFactureSQLElement.this);
140
            }
141
        });
142
 
67 ilm 143
        final boolean affact = UserManager.getInstance().getCurrentUser().getRights().haveRight(NXRights.ACCES_RETOUR_AFFACTURAGE.getCode());
144
        List<RowAction> l = new ArrayList<RowAction>(5);
145
            PredicateRowAction actionBL = new PredicateRowAction(new AbstractAction() {
146
                public void actionPerformed(ActionEvent e) {
73 ilm 147
                    TransfertBaseSQLComponent.openTransfertFrame(IListe.get(e).copySelectedRows(), "BON_DE_LIVRAISON");
67 ilm 148
                }
149
            }, false, "sales.invoice.create.delivery");
150
            actionBL.setPredicate(IListeEvent.getSingleSelectionPredicate());
151
            l.add(actionBL);
152
        PredicateRowAction actionAvoir = new PredicateRowAction(new AbstractAction() {
153
            public void actionPerformed(ActionEvent e) {
73 ilm 154
                TransfertBaseSQLComponent.openTransfertFrame(IListe.get(e).copySelectedRows(), "AVOIR_CLIENT");
67 ilm 155
            }
156
        }, false, "sales.invoice.create.credit");
157
        actionAvoir.setPredicate(IListeEvent.getSingleSelectionPredicate());
158
        l.add(actionAvoir);
80 ilm 159
        RowAction actionClone = new RowAction(new AbstractAction() {
67 ilm 160
            public void actionPerformed(ActionEvent e) {
161
 
162
                SQLElement eltFact = Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_FACTURE");
163
                EditFrame editFrame = new EditFrame(eltFact, EditPanel.CREATION);
164
 
165
                ((SaisieVenteFactureSQLComponent) editFrame.getSQLComponent()).loadFactureExistante(IListe.get(e).getSelectedId());
166
                editFrame.setVisible(true);
167
            }
80 ilm 168
        }, false, "sales.invoice.clone") {
169
            public boolean enabledFor(IListeEvent evt) {
170
                List<SQLRowAccessor> l = evt.getSelectedRows();
171
                if (l != null && l.size() == 1) {
172
                    SQLRowAccessor r = l.get(0);
173
                    return !r.getBoolean("PARTIAL") && !r.getBoolean("SOLDE");
174
                }
175
                return false;
176
            }
177
        };
178
 
67 ilm 179
        l.add(actionClone);
180
        getRowActions().addAll(l);
181
 
182
 
183
        PredicateRowAction actionClient = new PredicateRowAction(new AbstractAction("Détails client") {
184
            EditFrame edit;
185
            private SQLElement eltClient = Configuration.getInstance().getDirectory().getElement(((ComptaPropsConfiguration) Configuration.getInstance()).getRootSociete().getTable("CLIENT"));
186
 
187
            public void actionPerformed(ActionEvent e) {
188
                if (edit == null) {
189
                    edit = new EditFrame(eltClient, EditMode.READONLY);
190
                }
80 ilm 191
                edit.selectionId(IListe.get(e).fetchSelectedRow().getInt("ID_CLIENT"));
67 ilm 192
                edit.setVisible(true);
193
            }
194
        }, false, "sales.invoice.info.show");
195
        actionClient.setPredicate(IListeEvent.getSingleSelectionPredicate());
196
        getRowActions().add(actionClient);
197
 
198
        PredicateRowAction actionCommande = new PredicateRowAction(new AbstractAction() {
199
            public void actionPerformed(ActionEvent e) {
200
                SaisieVenteFactureSQLElement elt = (SaisieVenteFactureSQLElement) Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_FACTURE");
201
                elt.transfertCommande(IListe.get(e).getSelectedId());
202
            }
203
        }, false, "sales.invoice.create.supplier.order");
204
        actionCommande.setPredicate(IListeEvent.getSingleSelectionPredicate());
205
        getRowActions().add(actionCommande);
206
 
207
        MouseSheetXmlListeListener mouseSheetXmlListeListener = new MouseSheetXmlListeListener(VenteFactureXmlSheet.class);
208
        getRowActions().addAll(mouseSheetXmlListeListener.getRowActions());
209
        // this.frame.getPanel().getListe().addRowActions(mouseListener.getRowActions());
210
 
18 ilm 211
    }
212
 
73 ilm 213
    @Override
214
    public CollectionMap<String, String> getShowAs() {
215
        CollectionMap<String, String> map = new CollectionMap<String, String>();
216
        map.put(null, "NUMERO");
217
        return map;
218
    }
219
 
18 ilm 220
    protected List<String> getListFields() {
221
        final List<String> l = new ArrayList<String>();
19 ilm 222
 
83 ilm 223
            l.add("NUMERO");
224
            l.add("DATE");
225
            l.add("NOM");
226
            l.add("ID_CLIENT");
227
                l.add("ID_MODE_REGLEMENT");
228
            l.add("ID_COMMERCIAL");
19 ilm 229
 
83 ilm 230
            l.add("T_HA");
231
            l.add("T_HT");
232
            l.add("T_TTC");
233
            l.add("INFOS");
234
 
235
                    l.add("DATE_ENVOI");
236
                l.add("DATE_REGLEMENT");
18 ilm 237
        return l;
238
    }
239
 
240
    @Override
19 ilm 241
    public synchronized ListSQLRequest createListRequest() {
18 ilm 242
        return new ListSQLRequest(this.getTable(), this.getListFields()) {
243
            @Override
244
            protected void customizeToFetch(SQLRowValues graphToFetch) {
245
                super.customizeToFetch(graphToFetch);
246
                graphToFetch.put("ACOMPTE", null);
80 ilm 247
                graphToFetch.put("PARTIAL", null);
248
                graphToFetch.put("SOLDE", null);
18 ilm 249
                graphToFetch.put("COMPLEMENT", null);
19 ilm 250
 
18 ilm 251
                graphToFetch.put("PREVISIONNELLE", null);
252
                    graphToFetch.grow("ID_MODE_REGLEMENT").put("AJOURS", null).put("LENJOUR", null);
67 ilm 253
                SQLRowValues value = new SQLRowValues(graphToFetch.getTable().getTable("MOUVEMENT"));
254
                value.put("ID_PIECE", null);
255
                graphToFetch.put("ID_MOUVEMENT", value);
256
                graphToFetch.put("T_AVOIR_TTC", null);
18 ilm 257
            }
258
        };
259
    }
260
 
83 ilm 261
    private BigDecimal getAvancement(SQLRowAccessor r) {
262
        Collection<? extends SQLRowAccessor> rows = r.getReferentRows(r.getTable().getTable("ECHEANCE_CLIENT"));
263
        long totalEch = 0;
264
 
265
        for (SQLRowAccessor row : rows) {
266
            if (!row.getBoolean("REGLE") && !row.getBoolean("REG_COMPTA")) {
267
                totalEch += row.getLong("MONTANT");
268
            }
269
        }
270
 
271
        SQLRowAccessor avoir = r.getForeign("ID_AVOIR_CLIENT");
272
        BigDecimal avoirTTC = BigDecimal.ZERO;
273
        if (avoir != null && !avoir.isUndefined()) {
274
            avoirTTC = new BigDecimal(avoir.getLong("MONTANT_TTC"));
275
        }
276
 
277
        final BigDecimal totalAregler = new BigDecimal(r.getLong("T_TTC")).subtract(avoirTTC);
278
        if (totalAregler.signum() > 0 && totalEch > 0) {
279
            return totalAregler.subtract(new BigDecimal(totalEch)).divide(totalAregler, MathContext.DECIMAL128).movePointRight(2).setScale(2, RoundingMode.HALF_UP);
280
        } else {
281
            return BigDecimal.ONE.movePointRight(2);
282
        }
283
    }
284
 
285
    @Override
286
    protected SQLTableModelSourceOnline createTableSource() {
287
        SQLTableModelSourceOnline table = super.createTableSource();
288
 
289
        final BaseSQLTableModelColumn colAvancement = new BaseSQLTableModelColumn("Avancement réglement", BigDecimal.class) {
290
 
291
            @Override
292
            protected Object show_(SQLRowAccessor r) {
293
 
294
                return getAvancement(r);
295
            }
296
 
297
            @Override
298
            public Set<FieldPath> getPaths() {
299
                Path p = new Path(SaisieVenteFactureSQLElement.this.getTable());
300
                p = p.add(getTable().getTable("ECHEANCE_CLIENT"));
301
 
302
                Path p2 = new Path(SaisieVenteFactureSQLElement.this.getTable());
303
                p2 = p2.add(getTable().getField("ID_AVOIR_CLIENT"));
304
 
305
                return CollectionUtils.createSet(new FieldPath(p, "MONTANT"), new FieldPath(p, "REG_COMPTA"), new FieldPath(p, "REGLE"), new FieldPath(p2, "MONTANT_TTC"));
306
            }
307
        };
308
        table.getColumns().add(colAvancement);
309
        colAvancement.setRenderer(new PercentTableCellRenderer());
310
 
311
        return table;
312
    }
313
 
18 ilm 314
    protected List<String> getComboFields() {
315
        final List<String> l = new ArrayList<String>();
316
        l.add("NUMERO");
317
        return l;
318
    }
319
 
320
    protected List<String> getPrivateFields() {
321
        final List<String> l = new ArrayList<String>();
322
        l.add("ID_MODE_REGLEMENT");
323
        return l;
324
    }
325
 
326
    @Override
327
    protected Set<String> getChildren() {
328
        Set<String> set = new HashSet<String>();
329
        set.add("SAISIE_VENTE_FACTURE_ELEMENT");
330
        return set;
331
    }
332
 
333
    @Override
334
    public Set<String> getReadOnlyFields() {
335
        Set<String> s = new HashSet<String>(1);
336
        s.add("CONTROLE_TECHNIQUE");
337
        return s;
338
    }
339
 
67 ilm 340
    @Override
341
    public Set<String> getInsertOnlyFields() {
342
        Set<String> s = new HashSet<String>(1);
343
        s.add("ACOMPTE");
344
        return s;
345
    }
346
 
18 ilm 347
    /*
348
     * (non-Javadoc)
349
     *
350
     * @see org.openconcerto.devis.SQLElement#getComponent()
351
     */
352
    public SQLComponent createComponent() {
353
        return new SaisieVenteFactureSQLComponent();
354
    }
355
 
356
    @Override
357
    protected void archive(SQLRow row, boolean cutLinks) throws SQLException {
358
 
359
        // On retire l'avoir
360
        if (row.getInt("ID_AVOIR_CLIENT") > 1) {
361
            SQLElement eltAvoir = Configuration.getInstance().getDirectory().getElement("AVOIR_CLIENT");
362
            SQLRow rowAvoir = eltAvoir.getTable().getRow(row.getInt("ID_AVOIR_CLIENT"));
363
 
364
            Long montantSolde = (Long) rowAvoir.getObject("MONTANT_SOLDE");
365
 
366
            Long avoirTTC = (Long) row.getObject("T_AVOIR_TTC");
367
 
368
            long montant = montantSolde - avoirTTC;
369
            if (montant < 0) {
370
                montant = 0;
371
            }
372
 
373
            SQLRowValues rowVals = rowAvoir.createEmptyUpdateRow();
374
 
375
            // Soldé
376
            rowVals.put("SOLDE", Boolean.FALSE);
377
            rowVals.put("MONTANT_SOLDE", montant);
378
            Long restant = (Long) rowAvoir.getObject("MONTANT_TTC") - montantSolde;
379
            rowVals.put("MONTANT_RESTANT", restant);
380
            try {
381
                rowVals.update();
382
            } catch (SQLException e) {
383
                e.printStackTrace();
384
            }
385
        }
386
 
387
        super.archive(row, cutLinks);
388
 
61 ilm 389
        SQLPreferences prefs = new SQLPreferences(getTable().getDBRoot());
390
        if (prefs.getBoolean(GestionArticleGlobalPreferencePanel.STOCK_FACT, true)) {
18 ilm 391
 
61 ilm 392
            // Mise à jour des stocks
393
            SQLElement eltMvtStock = Configuration.getInstance().getDirectory().getElement("MOUVEMENT_STOCK");
67 ilm 394
            SQLSelect sel = new SQLSelect();
61 ilm 395
            sel.addSelect(eltMvtStock.getTable().getField("ID"));
396
            Where w = new Where(eltMvtStock.getTable().getField("IDSOURCE"), "=", row.getID());
397
            Where w2 = new Where(eltMvtStock.getTable().getField("SOURCE"), "=", getTable().getName());
398
            sel.setWhere(w.and(w2));
18 ilm 399
 
67 ilm 400
            @SuppressWarnings("rawtypes")
61 ilm 401
            List l = (List) eltMvtStock.getTable().getBase().getDataSource().execute(sel.asString(), new ArrayListHandler());
402
            if (l != null) {
403
                for (int i = 0; i < l.size(); i++) {
404
                    Object[] tmp = (Object[]) l.get(i);
405
                    eltMvtStock.archive(((Number) tmp[0]).intValue());
406
                }
18 ilm 407
            }
408
        }
409
    }
410
 
19 ilm 411
    public void transfertBL(int idFacture) {
412
        final SQLElement elt = Configuration.getInstance().getDirectory().getElement("BON_DE_LIVRAISON");
413
        final EditFrame editAvoirFrame = new EditFrame(elt);
414
        editAvoirFrame.setIconImage(new ImageIcon(Gestion.class.getResource("frameicon.png")).getImage());
415
 
416
        final BonDeLivraisonSQLComponent comp = (BonDeLivraisonSQLComponent) editAvoirFrame.getSQLComponent();
417
        final SQLInjector inject = SQLInjector.getInjector(this.getTable(), elt.getTable());
418
        SQLRowValues createRowValuesFrom = inject.createRowValuesFrom(idFacture);
419
        SQLRow rowFacture = getTable().getRow(idFacture);
420
        String string = rowFacture.getString("NOM");
421
        createRowValuesFrom.put("NOM", string + (string.trim().length() == 0 ? "" : ", ") + rowFacture.getString("NUMERO"));
422
        comp.select(createRowValuesFrom);
423
        // comp.loadFactureItem(idFacture);
424
 
425
        editAvoirFrame.pack();
426
        editAvoirFrame.setState(JFrame.NORMAL);
427
        editAvoirFrame.setVisible(true);
428
 
429
    }
430
 
73 ilm 431
    /**
432
     * Transfert en commande fournisseur
433
     * */
83 ilm 434
    public void transfertCommande(final int idFacture) {
435
        ComptaPropsConfiguration.getInstanceCompta().getNonInteractiveSQLExecutor().execute(new Runnable() {
19 ilm 436
 
83 ilm 437
            @Override
438
            public void run() {
439
                SQLElement elt = Configuration.getInstance().getDirectory().getElement("SAISIE_VENTE_FACTURE_ELEMENT");
440
                SQLTable tableCmdElt = Configuration.getInstance().getDirectory().getElement("COMMANDE_ELEMENT").getTable();
441
                SQLElement eltArticle = Configuration.getInstance().getDirectory().getElement("ARTICLE");
442
                List<SQLRow> rows = getTable().getRow(idFacture).getReferentRows(elt.getTable());
443
                final ListMap<SQLRow, SQLRowValues> map = new ListMap<SQLRow, SQLRowValues>();
444
                SQLRow rowDeviseF = null;
445
                for (SQLRow sqlRow : rows) {
446
                    // on récupére l'article qui lui correspond
447
                    SQLRowValues rowArticle = new SQLRowValues(eltArticle.getTable());
448
                    for (SQLField field : eltArticle.getTable().getFields()) {
449
                        if (sqlRow.getTable().getFieldsName().contains(field.getName())) {
450
                            rowArticle.put(field.getName(), sqlRow.getObject(field.getName()));
451
                        }
452
                    }
73 ilm 453
 
83 ilm 454
                    int idArticle = ReferenceArticleSQLElement.getIdForCNM(rowArticle, true);
455
                    SQLRow rowArticleFind = eltArticle.getTable().getRow(idArticle);
456
                    SQLInjector inj = SQLInjector.getInjector(rowArticle.getTable(), tableCmdElt);
457
                    SQLRowValues rowValsElt = new SQLRowValues(inj.createRowValuesFrom(rowArticleFind));
458
                    rowValsElt.put("ID_STYLE", sqlRow.getObject("ID_STYLE"));
459
                    rowValsElt.put("QTE", sqlRow.getObject("QTE"));
460
                    rowValsElt.put("T_POIDS", rowValsElt.getLong("POIDS") * rowValsElt.getInt("QTE"));
19 ilm 461
 
83 ilm 462
                    // gestion de la devise
463
                    rowDeviseF = sqlRow.getForeignRow("ID_DEVISE");
464
                    SQLRow rowDeviseHA = rowArticleFind.getForeignRow("ID_DEVISE_HA");
465
                    BigDecimal qte = new BigDecimal(rowValsElt.getInt("QTE"));
466
                    if (rowDeviseF != null && !rowDeviseF.isUndefined()) {
467
                        if (rowDeviseF.getID() == rowDeviseHA.getID()) {
468
                            rowValsElt.put("PA_DEVISE", rowArticleFind.getObject("PA_DEVISE"));
469
                            rowValsElt.put("PA_DEVISE_T", ((BigDecimal) rowArticleFind.getObject("PA_DEVISE")).multiply(qte, MathContext.DECIMAL128));
470
                            rowValsElt.put("ID_DEVISE", rowDeviseF.getID());
471
                        } else {
472
                            BigDecimal taux = (BigDecimal) rowDeviseF.getObject("TAUX");
473
                            rowValsElt.put("PA_DEVISE", taux.multiply((BigDecimal) rowValsElt.getObject("PA_HT")));
474
                            rowValsElt.put("PA_DEVISE_T", ((BigDecimal) rowValsElt.getObject("PA_DEVISE")).multiply(qte, MathContext.DECIMAL128));
475
                            rowValsElt.put("ID_DEVISE", rowDeviseF.getID());
476
                        }
477
                    }
19 ilm 478
 
83 ilm 479
                    BigDecimal prixHA = (BigDecimal) rowValsElt.getObject("PA_HT");
480
                    rowValsElt.put("T_PA_HT", prixHA.multiply(qte, MathContext.DECIMAL128));
19 ilm 481
 
83 ilm 482
                    rowValsElt.put("T_PA_HT", prixHA.multiply(qte, MathContext.DECIMAL128));
483
                    rowValsElt.put("T_PA_TTC",
484
                            ((BigDecimal) rowValsElt.getObject("T_PA_HT")).multiply(new BigDecimal(rowValsElt.getForeign("ID_TAXE").getFloat("TAUX") / 100.0 + 1.0), MathContext.DECIMAL128));
19 ilm 485
 
83 ilm 486
                    map.add(rowArticleFind.getForeignRow("ID_FOURNISSEUR"), rowValsElt);
19 ilm 487
 
83 ilm 488
                }
489
                MouvementStockSQLElement.createCommandeF(map, rowDeviseF);
19 ilm 490
 
83 ilm 491
            }
492
 
493
        });
494
 
19 ilm 495
    }
18 ilm 496
}