Line 15... |
Line 15... |
15 |
|
15 |
|
16 |
import org.openconcerto.erp.config.ComptaPropsConfiguration;
|
16 |
import org.openconcerto.erp.config.ComptaPropsConfiguration;
|
17 |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement;
|
17 |
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement;
|
18 |
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
|
18 |
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
|
19 |
import org.openconcerto.erp.core.supplychain.order.component.CommandeSQLComponent;
|
19 |
import org.openconcerto.erp.core.supplychain.order.component.CommandeSQLComponent;
|
- |
|
20 |
import org.openconcerto.erp.core.supplychain.order.ui.CommandeItemTable;
|
20 |
import org.openconcerto.erp.core.supplychain.supplier.component.MouvementStockSQLComponent;
|
21 |
import org.openconcerto.erp.core.supplychain.supplier.component.MouvementStockSQLComponent;
|
21 |
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
|
22 |
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
|
22 |
import org.openconcerto.sql.Configuration;
|
23 |
import org.openconcerto.sql.Configuration;
|
23 |
import org.openconcerto.sql.element.SQLComponent;
|
24 |
import org.openconcerto.sql.element.SQLComponent;
|
24 |
import org.openconcerto.sql.element.SQLElement;
|
25 |
import org.openconcerto.sql.element.SQLElement;
|
Line 38... |
Line 39... |
38 |
import org.openconcerto.sql.view.EditFrame;
|
39 |
import org.openconcerto.sql.view.EditFrame;
|
39 |
import org.openconcerto.sql.view.EditPanel;
|
40 |
import org.openconcerto.sql.view.EditPanel;
|
40 |
import org.openconcerto.sql.view.EditPanel.EditMode;
|
41 |
import org.openconcerto.sql.view.EditPanel.EditMode;
|
41 |
import org.openconcerto.sql.view.list.RowValuesTableModel;
|
42 |
import org.openconcerto.sql.view.list.RowValuesTableModel;
|
42 |
import org.openconcerto.ui.FrameUtil;
|
43 |
import org.openconcerto.ui.FrameUtil;
|
43 |
import org.openconcerto.utils.ExceptionHandler;
|
- |
|
44 |
import org.openconcerto.utils.ListMap;
|
44 |
import org.openconcerto.utils.ListMap;
|
45 |
|
45 |
|
46 |
import java.math.BigDecimal;
|
46 |
import java.math.BigDecimal;
|
47 |
import java.sql.SQLException;
|
47 |
import java.sql.SQLException;
|
48 |
import java.util.ArrayList;
|
48 |
import java.util.ArrayList;
|
Line 56... |
Line 56... |
56 |
|
56 |
|
57 |
public MouvementStockSQLElement() {
|
57 |
public MouvementStockSQLElement() {
|
58 |
super("MOUVEMENT_STOCK", "un mouvement de stock", "mouvements de stock");
|
58 |
super("MOUVEMENT_STOCK", "un mouvement de stock", "mouvements de stock");
|
59 |
}
|
59 |
}
|
60 |
|
60 |
|
- |
|
61 |
@Override
|
- |
|
62 |
public ListMap<String, String> getShowAs() {
|
- |
|
63 |
ListMap<String, String> map = new ListMap<String, String>();
|
- |
|
64 |
map.putCollection("ID_STOCK", "ID_DEPOT_STOCK");
|
- |
|
65 |
return map;
|
- |
|
66 |
}
|
- |
|
67 |
|
61 |
protected List<String> getListFields() {
|
68 |
protected List<String> getListFields() {
|
62 |
final List<String> l = new ArrayList<String>();
|
69 |
final List<String> l = new ArrayList<String>();
|
- |
|
70 |
l.add("ID_STOCK");
|
63 |
l.add("DATE");
|
71 |
l.add("DATE");
|
64 |
l.add("NOM");
|
72 |
l.add("NOM");
|
65 |
l.add("ID_ARTICLE");
|
73 |
l.add("ID_ARTICLE");
|
66 |
l.add("QTE");
|
74 |
l.add("QTE");
|
67 |
l.add("REEL");
|
75 |
l.add("REEL");
|
Line 89... |
Line 97... |
89 |
super.archive(trees, cutLinks);
|
97 |
super.archive(trees, cutLinks);
|
90 |
updateStock(trees.getRows(), true);
|
98 |
updateStock(trees.getRows(), true);
|
91 |
|
99 |
|
92 |
}
|
100 |
}
|
93 |
|
101 |
|
94 |
// public CollectionMap<SQLRow, List<SQLRowValues>> updateStock(List<Integer> ids) {
|
- |
|
95 |
// return updateStock(ids, false);
|
- |
|
96 |
// }
|
- |
|
97 |
|
- |
|
98 |
private final SQLTable sqlTableArticle = ((ComptaPropsConfiguration) Configuration.getInstance()).getRootSociete().getTable("ARTICLE");
|
- |
|
99 |
|
- |
|
100 |
/**
|
102 |
/**
|
101 |
* Mise à jour des stocks ajoute la quantité si archive est à false
|
103 |
* Mise à jour des stocks ajoute la quantité si archive est à false
|
102 |
*
|
104 |
*
|
103 |
* @param id mouvement stock
|
105 |
* @param id mouvement stock
|
104 |
* @param archive
|
106 |
* @param archive
|
- |
|
107 |
* @throws SQLException
|
105 |
*/
|
108 |
*/
|
106 |
public ListMap<SQLRow, SQLRowValues> updateStock(Collection<SQLRow> rowsMvt, boolean archive) {
|
109 |
public ListMap<SQLRow, SQLRowValues> updateStock(Collection<SQLRow> rowsMvt, boolean archive) throws SQLException {
|
107 |
// FIXME: if (SwingUtilities.isEventDispatchThread()) {
|
110 |
// FIXME: if (SwingUtilities.isEventDispatchThread()) {
|
108 |
// throw new IllegalStateException("This method must be called outside of EDT");
|
111 |
// throw new IllegalStateException("This method must be called outside of EDT");
|
109 |
// }
|
112 |
// }
|
110 |
// Stock Reel : inc/dec QTE_REEL, inc/dec QTE_LIV_ATTENTE/inc/dec
|
113 |
// Stock Reel : inc/dec QTE_REEL, inc/dec QTE_LIV_ATTENTE/inc/dec
|
111 |
// QTE_RECEPT_ATTENTE
|
114 |
// QTE_RECEPT_ATTENTE
|
112 |
// Stock Th : inc/dec QTE_TH, inc/dec QTE_LIV_ATTENTE/inc/dec
|
115 |
// Stock Th : inc/dec QTE_TH, inc/dec QTE_LIV_ATTENTE/inc/dec
|
113 |
// QTE_RECEPT_ATTENTE
|
116 |
// QTE_RECEPT_ATTENTE
|
114 |
|
117 |
|
115 |
final ListMap<SQLRow, SQLRowValues> map = new ListMap<SQLRow, SQLRowValues>();
|
118 |
final ListMap<SQLRow, SQLRowValues> map = new ListMap<>();
|
116 |
SQLTable tableCmdElt = Configuration.getInstance().getBase().getTable("COMMANDE_ELEMENT");
|
119 |
final SQLTable tableCommandeElement = Configuration.getInstance().getBase().getTable("COMMANDE_ELEMENT");
|
- |
|
120 |
final SQLElement elementStock = Configuration.getInstance().getDirectory().getElement("STOCK");
|
- |
|
121 |
|
117 |
for (SQLRow rowMvtStock : rowsMvt) {
|
122 |
for (SQLRow rowMvtStock : rowsMvt) {
|
118 |
|
123 |
|
119 |
boolean retour = rowMvtStock.getString("SOURCE") == null || rowMvtStock.getString("SOURCE").startsWith("AVOIR_CLIENT");
|
124 |
boolean retour = rowMvtStock.getString("SOURCE") == null || rowMvtStock.getString("SOURCE").startsWith("AVOIR_CLIENT");
|
120 |
// Mise à jour des stocks
|
125 |
// Mise à jour des stocks
|
121 |
SQLTable sqlTableArticle = ((ComptaPropsConfiguration) Configuration.getInstance()).getRootSociete().getTable("ARTICLE");
|
- |
|
122 |
SQLElement eltArticle = Configuration.getInstance().getDirectory().getElement(sqlTableArticle);
|
- |
|
123 |
SQLElement eltStock = Configuration.getInstance().getDirectory().getElement("STOCK");
|
- |
|
- |
|
126 |
|
124 |
final SQLRow rowArticle = rowMvtStock.getForeignRow("ID_ARTICLE");
|
127 |
final SQLRow rowArticle = rowMvtStock.getForeignRow("ID_ARTICLE");
|
125 |
|
128 |
|
126 |
SQLRow rowStock = rowArticle.getForeignRow(("ID_STOCK"));
|
129 |
SQLRow rowStock = rowMvtStock.getForeignRow(("ID_STOCK"));
|
- |
|
130 |
if (rowStock == null || rowStock.isUndefined()) {
|
- |
|
131 |
rowStock = rowArticle.getForeign("ID_STOCK");
|
- |
|
132 |
}
|
- |
|
133 |
|
127 |
if (rowMvtStock.getBoolean("REEL")) {
|
134 |
if (rowMvtStock.getBoolean("REEL")) {
|
128 |
float qte = rowStock.getFloat("QTE_REEL");
|
135 |
float qte = rowStock.getFloat("QTE_REEL");
|
129 |
float qteMvt = rowMvtStock.getFloat("QTE");
|
136 |
float qteMvt = rowMvtStock.getFloat("QTE");
|
130 |
|
137 |
|
131 |
SQLRowValues rowVals = new SQLRowValues(eltStock.getTable());
|
138 |
SQLRowValues rowVals = new SQLRowValues(elementStock.getTable());
|
132 |
|
139 |
|
133 |
float qteNvlle;
|
140 |
float qteNvlle;
|
134 |
float qteNvlleEnAttenteRecept = rowStock.getFloat("QTE_RECEPT_ATTENTE");
|
141 |
float qteNvlleEnAttenteRecept = rowStock.getFloat("QTE_RECEPT_ATTENTE");
|
135 |
float qteNvlleEnAttenteExp = rowStock.getFloat("QTE_LIV_ATTENTE");
|
142 |
float qteNvlleEnAttenteExp = rowStock.getFloat("QTE_LIV_ATTENTE");
|
136 |
if (archive) {
|
143 |
if (archive) {
|
Line 159... |
Line 166... |
159 |
rowVals.put("QTE_REEL", qteNvlle);
|
166 |
rowVals.put("QTE_REEL", qteNvlle);
|
160 |
rowVals.put("QTE_RECEPT_ATTENTE", qteNvlleEnAttenteRecept);
|
167 |
rowVals.put("QTE_RECEPT_ATTENTE", qteNvlleEnAttenteRecept);
|
161 |
rowVals.put("QTE_LIV_ATTENTE", qteNvlleEnAttenteExp);
|
168 |
rowVals.put("QTE_LIV_ATTENTE", qteNvlleEnAttenteExp);
|
162 |
|
169 |
|
163 |
try {
|
170 |
try {
|
164 |
if (rowStock.getID() <= 1) {
|
- |
|
165 |
SQLRow row = rowVals.insert();
|
- |
|
166 |
SQLRowValues rowValsArt = new SQLRowValues(eltArticle.getTable());
|
- |
|
167 |
rowValsArt.put("ID_STOCK", row.getID());
|
- |
|
168 |
|
- |
|
169 |
final int idArticle = rowArticle.getID();
|
- |
|
170 |
if (idArticle > 1) {
|
- |
|
171 |
rowValsArt.update(idArticle);
|
- |
|
172 |
}
|
- |
|
173 |
} else {
|
- |
|
174 |
rowVals.update(rowStock.getID());
|
171 |
rowVals.update(rowStock.getID());
|
175 |
}
|
- |
|
176 |
} catch (SQLException e) {
|
- |
|
177 |
|
- |
|
178 |
ExceptionHandler.handle("Erreur lors de la mise à jour du stock pour l'article " + rowArticle.getString("CODE"));
|
- |
|
179 |
}
|
- |
|
180 |
|
172 |
|
181 |
SQLPreferences prefs = new SQLPreferences(getTable().getDBRoot());
|
173 |
SQLPreferences prefs = new SQLPreferences(getTable().getDBRoot());
|
182 |
boolean gestionStockMin = prefs.getBoolean(GestionArticleGlobalPreferencePanel.WARNING_STOCK_MIN, true);
|
174 |
boolean gestionStockMin = prefs.getBoolean(GestionArticleGlobalPreferencePanel.WARNING_STOCK_MIN, true);
|
183 |
|
175 |
|
184 |
if (!archive && rowArticle.getTable().getFieldsName().contains("QTE_MIN") && gestionStockMin && rowArticle.getObject("QTE_MIN") != null && qteNvlle < rowArticle.getInt("QTE_MIN")) {
|
176 |
if (!archive && gestionStockMin && rowStock.getObject("QTE_MIN") != null && qteNvlle < rowStock.getFloat("QTE_MIN")) {
|
185 |
// final float qteShow = qteNvlle;
|
177 |
// final float qteShow = qteNvlle;
|
186 |
SQLInjector inj = SQLInjector.getInjector(rowArticle.getTable(), tableCmdElt);
|
178 |
SQLInjector inj = SQLInjector.getInjector(rowArticle.getTable(), tableCommandeElement);
|
187 |
SQLRowValues rowValsElt = new SQLRowValues(inj.createRowValuesFrom(rowArticle));
|
179 |
SQLRowValues rowValsElt = new SQLRowValues(inj.createRowValuesFrom(rowArticle));
|
188 |
rowValsElt.put("ID_STYLE", 2);
|
180 |
rowValsElt.put("ID_STYLE", 2);
|
189 |
final SQLRow unite = rowArticle.getForeign("ID_UNITE_VENTE");
|
181 |
final SQLRow unite = rowArticle.getForeign("ID_UNITE_VENTE");
|
190 |
final float qteElt = rowArticle.getInt("QTE_MIN") - qteNvlle;
|
182 |
final float qteElt = rowStock.getFloat("QTE_MIN") - qteNvlle;
|
191 |
if (unite.isUndefined() || unite.getBoolean("A_LA_PIECE")) {
|
183 |
if (unite.isUndefined() || unite.getBoolean("A_LA_PIECE")) {
|
192 |
rowValsElt.put("QTE", Math.round(qteElt));
|
184 |
rowValsElt.put("QTE", Math.round(qteElt));
|
193 |
rowValsElt.put("QTE_UNITAIRE", BigDecimal.ONE);
|
185 |
rowValsElt.put("QTE_UNITAIRE", BigDecimal.ONE);
|
194 |
} else {
|
186 |
} else {
|
195 |
rowValsElt.put("QTE", 1);
|
187 |
rowValsElt.put("QTE", 1);
|
Line 197... |
Line 189... |
197 |
}
|
189 |
}
|
198 |
rowValsElt.put("ID_TAXE", rowValsElt.getObject("ID_TAXE"));
|
190 |
rowValsElt.put("ID_TAXE", rowValsElt.getObject("ID_TAXE"));
|
199 |
rowValsElt.put("T_POIDS", rowValsElt.getLong("POIDS") * qteElt);
|
191 |
rowValsElt.put("T_POIDS", rowValsElt.getLong("POIDS") * qteElt);
|
200 |
rowValsElt.put("T_PA_HT", rowValsElt.getLong("PA_HT") * qteElt);
|
192 |
rowValsElt.put("T_PA_HT", rowValsElt.getLong("PA_HT") * qteElt);
|
201 |
rowValsElt.put("T_PA_TTC", rowValsElt.getLong("T_PA_HT") * (rowValsElt.getForeign("ID_TAXE").getFloat("TAUX") / 100.0 + 1.0));
|
193 |
rowValsElt.put("T_PA_TTC", rowValsElt.getLong("T_PA_HT") * (rowValsElt.getForeign("ID_TAXE").getFloat("TAUX") / 100.0 + 1.0));
|
202 |
|
- |
|
203 |
map.add(rowArticle.getForeignRow("ID_FOURNISSEUR"), rowValsElt);
|
194 |
map.add(rowArticle.getForeignRow("ID_FOURNISSEUR"), rowValsElt);
|
204 |
|
- |
|
- |
|
195 |
}
|
- |
|
196 |
} catch (SQLException e) {
|
- |
|
197 |
throw new SQLException("Erreur lors de la mise à jour du stock pour l'article " + rowArticle.getString("CODE"), e);
|
205 |
}
|
198 |
}
|
206 |
} else {
|
199 |
} else {
|
207 |
float qte = rowStock.getFloat("QTE_TH");
|
200 |
float qte = rowStock.getFloat("QTE_TH");
|
208 |
float qteMvt = rowMvtStock.getFloat("QTE");
|
201 |
float qteMvt = rowMvtStock.getFloat("QTE");
|
209 |
|
202 |
|
210 |
SQLRowValues rowVals = new SQLRowValues(eltStock.getTable());
|
203 |
SQLRowValues rowVals = new SQLRowValues(elementStock.getTable());
|
211 |
|
204 |
|
212 |
float qteNvlle;
|
205 |
float qteNvlle;
|
213 |
float qteNvlleEnAttenteRecept = rowStock.getFloat("QTE_RECEPT_ATTENTE");
|
206 |
float qteNvlleEnAttenteRecept = rowStock.getFloat("QTE_RECEPT_ATTENTE");
|
214 |
float qteNvlleEnAttenteExp = rowStock.getFloat("QTE_LIV_ATTENTE");
|
207 |
float qteNvlleEnAttenteExp = rowStock.getFloat("QTE_LIV_ATTENTE");
|
215 |
|
208 |
|
Line 239... |
Line 232... |
239 |
}
|
232 |
}
|
240 |
}
|
233 |
}
|
241 |
rowVals.put("QTE_TH", qteNvlle);
|
234 |
rowVals.put("QTE_TH", qteNvlle);
|
242 |
rowVals.put("QTE_RECEPT_ATTENTE", qteNvlleEnAttenteRecept);
|
235 |
rowVals.put("QTE_RECEPT_ATTENTE", qteNvlleEnAttenteRecept);
|
243 |
rowVals.put("QTE_LIV_ATTENTE", qteNvlleEnAttenteExp);
|
236 |
rowVals.put("QTE_LIV_ATTENTE", qteNvlleEnAttenteExp);
|
244 |
|
- |
|
245 |
try {
|
237 |
try {
|
246 |
if (rowStock.getID() <= 1) {
|
- |
|
247 |
SQLRow row = rowVals.insert();
|
- |
|
248 |
SQLRowValues rowValsArt = new SQLRowValues(eltArticle.getTable());
|
- |
|
249 |
rowValsArt.put("ID_STOCK", row.getID());
|
- |
|
250 |
|
- |
|
251 |
final int idArticle = rowArticle.getID();
|
- |
|
252 |
if (idArticle > 1) {
|
- |
|
253 |
rowValsArt.update(idArticle);
|
- |
|
254 |
}
|
- |
|
255 |
} else {
|
- |
|
256 |
rowVals.update(rowStock.getID());
|
238 |
rowVals.update(rowStock.getID());
|
257 |
}
|
- |
|
258 |
} catch (SQLException e) {
|
239 |
} catch (SQLException e) {
|
259 |
|
- |
|
260 |
ExceptionHandler.handle("Erreur lors de la mise à jour du stock pour l'article " + rowArticle.getString("CODE"));
|
240 |
throw new SQLException("Erreur lors de la mise à jour du stock pour l'article " + rowArticle.getString("CODE"), e);
|
261 |
}
|
241 |
}
|
262 |
}
|
242 |
}
|
263 |
|
243 |
|
264 |
}
|
244 |
}
|
265 |
return map;
|
245 |
return map;
|
Line 326... |
Line 306... |
326 |
rowVals.put("NOM", ref);
|
306 |
rowVals.put("NOM", ref);
|
327 |
cmp.select(rowVals);
|
307 |
cmp.select(rowVals);
|
328 |
cmp.getRowValuesTable().getRowValuesTableModel().clearRows();
|
308 |
cmp.getRowValuesTable().getRowValuesTableModel().clearRows();
|
329 |
}
|
309 |
}
|
330 |
|
310 |
|
- |
|
311 |
CommandeItemTable itemTable = cmp.getRowValuesTablePanel();
|
- |
|
312 |
|
331 |
final RowValuesTableModel model = cmp.getRowValuesTable().getRowValuesTableModel();
|
313 |
final RowValuesTableModel model = cmp.getRowValuesTable().getRowValuesTableModel();
|
332 |
for (SQLRowValues rowValsElt : e.getValue()) {
|
314 |
for (SQLRowValues rowValsElt : e.getValue()) {
|
333 |
SQLRowValues rowValsMatch = null;
|
315 |
SQLRowValues rowValsMatch = null;
|
334 |
int index = 0;
|
316 |
int index = 0;
|
335 |
|
317 |
|
Line 344... |
Line 326... |
344 |
if (rowValsMatch != null) {
|
326 |
if (rowValsMatch != null) {
|
345 |
final int qte = rowValsMatch.getInt("QTE");
|
327 |
final int qte = rowValsMatch.getInt("QTE");
|
346 |
model.putValue(qte + rowValsElt.getInt("QTE"), index, "QTE");
|
328 |
model.putValue(qte + rowValsElt.getInt("QTE"), index, "QTE");
|
347 |
} else {
|
329 |
} else {
|
348 |
model.addRow(rowValsElt);
|
330 |
model.addRow(rowValsElt);
|
- |
|
331 |
if (rowValsElt.getObject("ID_ARTICLE") != null && !rowValsElt.isForeignEmpty("ID_ARTICLE")) {
|
- |
|
332 |
Object o = itemTable.tarifCompletion(rowValsElt.getForeign("ID_ARTICLE").asRow(), "PRIX_METRIQUE_HA_1");
|
- |
|
333 |
if (o != null) {
|
- |
|
334 |
model.putValue(o, model.getRowCount() - 1, "PRIX_METRIQUE_HA_1");
|
- |
|
335 |
}
|
- |
|
336 |
}
|
349 |
}
|
337 |
}
|
350 |
}
|
338 |
}
|
351 |
|
339 |
|
352 |
frame.pack();
|
340 |
frame.pack();
|
353 |
FrameUtil.show(frame);
|
341 |
FrameUtil.show(frame);
|
Line 398... |
Line 386... |
398 |
}
|
386 |
}
|
399 |
}
|
387 |
}
|
400 |
|
388 |
|
401 |
@Override
|
389 |
@Override
|
402 |
protected String createCode() {
|
390 |
protected String createCode() {
|
403 |
return createCodeFromPackage() + ".transaction";
|
391 |
return createCodeOfPackage() + ".transaction";
|
404 |
}
|
392 |
}
|
405 |
}
|
393 |
}
|