OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 132 | Rev 156 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 132 Rev 142
Line 11... Line 11...
11
 * When distributing the software, include this License Header Notice in each file.
11
 * When distributing the software, include this License Header Notice in each file.
12
 */
12
 */
13
 
13
 
14
 package org.openconcerto.erp.core.supplychain.stock.element;
14
 package org.openconcerto.erp.core.supplychain.stock.element;
15
 
15
 
16
import java.awt.GraphicsEnvironment;
-
 
17
import java.io.IOException;
-
 
18
import java.math.BigDecimal;
-
 
19
import java.math.RoundingMode;
-
 
20
import java.sql.SQLException;
-
 
21
import java.text.SimpleDateFormat;
-
 
22
import java.util.ArrayList;
-
 
23
import java.util.Date;
-
 
24
import java.util.List;
-
 
25
 
-
 
26
import javax.swing.JOptionPane;
-
 
27
import javax.swing.SwingUtilities;
-
 
28
 
-
 
29
import org.apache.commons.dbutils.ResultSetHandler;
-
 
30
 
-
 
31
import org.openconcerto.erp.core.sales.product.model.ProductComponent;
16
import org.openconcerto.erp.core.sales.product.model.ProductComponent;
32
import org.openconcerto.erp.core.sales.product.model.ProductHelper;
17
import org.openconcerto.erp.core.sales.product.model.ProductHelper;
33
import org.openconcerto.erp.core.supplychain.stock.element.StockItem.TypeStockMouvement;
18
import org.openconcerto.erp.core.supplychain.stock.element.StockItem.TypeStockMouvement;
34
import org.openconcerto.sql.model.ConnectionHandlerNoSetup;
19
import org.openconcerto.sql.model.ConnectionHandlerNoSetup;
35
import org.openconcerto.sql.model.DBRoot;
20
import org.openconcerto.sql.model.DBRoot;
Line 47... Line 32...
47
import org.openconcerto.utils.ListMap;
32
import org.openconcerto.utils.ListMap;
48
import org.openconcerto.utils.RTInterruptedException;
33
import org.openconcerto.utils.RTInterruptedException;
49
import org.openconcerto.utils.Tuple3;
34
import org.openconcerto.utils.Tuple3;
50
import org.openconcerto.utils.cc.ITransformer;
35
import org.openconcerto.utils.cc.ITransformer;
51
 
36
 
-
 
37
import java.awt.GraphicsEnvironment;
-
 
38
import java.io.IOException;
-
 
39
import java.math.BigDecimal;
-
 
40
import java.math.RoundingMode;
-
 
41
import java.sql.SQLException;
-
 
42
import java.text.SimpleDateFormat;
-
 
43
import java.util.ArrayList;
-
 
44
import java.util.Date;
-
 
45
import java.util.HashMap;
-
 
46
import java.util.List;
-
 
47
import java.util.Map;
-
 
48
 
-
 
49
import javax.swing.JOptionPane;
-
 
50
import javax.swing.SwingUtilities;
-
 
51
 
-
 
52
import org.apache.commons.dbutils.ResultSetHandler;
-
 
53
 
52
public class StockItemsUpdater {
54
public class StockItemsUpdater {
53
 
55
 
54
    private final StockLabel label;
56
    private final StockLabel label;
55
    private final List<? extends SQLRowAccessor> items;
57
    private final List<? extends SQLRowAccessor> items;
56
    private final TypeStockUpdate type;
58
    private final TypeStockUpdate type;
Line 135... Line 137...
135
                rowVals.put("QTE_RECEPT_ATTENTE", stockItem.getReceiptQty());
137
                rowVals.put("QTE_RECEPT_ATTENTE", stockItem.getReceiptQty());
136
                SQLRowValues rowValsArt = stockItem.getArticle().createEmptyUpdateRow();
138
                SQLRowValues rowValsArt = stockItem.getArticle().createEmptyUpdateRow();
137
                rowValsArt.put("ID_STOCK", rowVals);
139
                rowValsArt.put("ID_STOCK", rowVals);
138
                rowValsArt.commit();
140
                rowValsArt.commit();
139
            }
141
            }
-
 
142
            if (!this.type.isEntry()) {
140
            stockItem.fillCommandeFournisseur(cmd);
143
                stockItem.fillCommandeFournisseur(cmd);
141
        }
144
            }
-
 
145
        }
142
 
146
 
143
        final List<? extends ResultSetHandler> handlers = new ArrayList<ResultSetHandler>(requests.size());
147
        final List<? extends ResultSetHandler> handlers = new ArrayList<ResultSetHandler>(requests.size());
144
        for (String s : requests) {
148
        for (String s : requests) {
145
            handlers.add(null);
149
            handlers.add(null);
146
        }
150
        }
Line 219... Line 223...
219
                input.setWhere(w);
223
                input.setWhere(w);
220
                return input;
224
                return input;
221
            }
225
            }
222
        });
226
        });
223
 
227
 
-
 
228
        // On stocke les items pour le calcul total des stocks (sinon le calcul est faux si
-
 
229
        // l'article apparait plusieurs fois
-
 
230
        // ou si
-
 
231
        // on archive un mvt reel et theorique)
-
 
232
        Map<Number, StockItem> items = new HashMap<Number, StockItem>();
224
        List<SQLRowValues> result = fetcher.fetch();
233
        List<SQLRowValues> result = fetcher.fetch();
225
        for (SQLRowValues sqlRowValues : result) {
234
        for (SQLRowValues sqlRowValues : result) {
-
 
235
            final StockItem item;
-
 
236
            if (!items.containsKey(sqlRowValues.getForeignIDNumber("ID_ARTICLE"))) {
226
            StockItem item = new StockItem(sqlRowValues.getForeign("ID_ARTICLE"));
237
                item = new StockItem(sqlRowValues.getForeign("ID_ARTICLE"));
-
 
238
                items.put(sqlRowValues.getForeignIDNumber("ID_ARTICLE"), item);
-
 
239
            } else {
-
 
240
                item = items.get(sqlRowValues.getForeignIDNumber("ID_ARTICLE"));
-
 
241
            }
227
            final TypeStockMouvement t;
242
            final TypeStockMouvement t;
228
            if (sqlRowValues.getBoolean("REEL")) {
243
            if (sqlRowValues.getBoolean("REEL")) {
229
                t = TypeStockMouvement.REEL;
244
                t = TypeStockMouvement.REEL;
230
            } else {
245
            } else {
231
                t = TypeStockMouvement.THEORIQUE;
246
                t = TypeStockMouvement.THEORIQUE;
Line 246... Line 261...
246
    private void fillProductComponent(List<ProductComponent> productComponents, int qte, int index, int level) {
261
    private void fillProductComponent(List<ProductComponent> productComponents, int qte, int index, int level) {
247
        if (level > 0) {
262
        if (level > 0) {
248
            for (int i = index; i < items.size(); i++) {
263
            for (int i = index; i < items.size(); i++) {
249
                SQLRowAccessor r = items.get(i);
264
                SQLRowAccessor r = items.get(i);
250
 
265
 
251
                if (!r.getTable().contains("NIVEAU") || r.getInt("NIVEAU") >= 1) {
266
                if (!r.getTable().contains("NIVEAU") || r.getInt("NIVEAU") >= level) {
252
                    // On ne calcul pas les stocks pour les éléments ayant des fils (le mouvement de
267
                    // On ne calcul pas les stocks pour les éléments ayant des fils (le mouvement de
253
                    // stock
268
                    // stock
254
                    // des fils impactera les stocks automatiquement)
269
                    // des fils impactera les stocks automatiquement)
255
                    if (r.getTable().contains("NIVEAU")) {
270
                    if (r.getTable().contains("NIVEAU")) {
256
                        if (i + 1 < items.size()) {
271
                        if (i + 1 < items.size()) {
Line 262... Line 277...
262
                        }
277
                        }
263
                    }
278
                    }
264
                    if ((!r.getTable().contains("NIVEAU") || r.getInt("NIVEAU") == level) && !r.isForeignEmpty("ID_ARTICLE") && r.getForeign("ID_ARTICLE") != null) {
279
                    if ((!r.getTable().contains("NIVEAU") || r.getInt("NIVEAU") == level) && !r.isForeignEmpty("ID_ARTICLE") && r.getForeign("ID_ARTICLE") != null) {
265
                        productComponents.add(ProductComponent.createFrom(r, qte));
280
                        productComponents.add(ProductComponent.createFrom(r, qte));
266
                    }
281
                    }
-
 
282
                } else if (r.getInt("NIVEAU") < level) {
-
 
283
                    // BREAK si on sort de l'article composé
-
 
284
                    break;
267
                }
285
                }
268
            }
286
            }
269
        }
287
        }
270
    }
288
    }
271
 
289