Line 19... |
Line 19... |
19 |
import org.openconcerto.erp.core.sales.pos.io.BarcodeReader;
|
19 |
import org.openconcerto.erp.core.sales.pos.io.BarcodeReader;
|
20 |
import org.openconcerto.erp.core.sales.pos.ui.BarcodeListener;
|
20 |
import org.openconcerto.erp.core.sales.pos.ui.BarcodeListener;
|
21 |
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
|
21 |
import org.openconcerto.erp.core.sales.product.element.ReferenceArticleSQLElement;
|
22 |
import org.openconcerto.erp.core.sales.product.element.UniteVenteArticleSQLElement;
|
22 |
import org.openconcerto.erp.core.sales.product.element.UniteVenteArticleSQLElement;
|
23 |
import org.openconcerto.erp.core.sales.product.ui.CurrencyWithSymbolRenderer;
|
23 |
import org.openconcerto.erp.core.sales.product.ui.CurrencyWithSymbolRenderer;
|
- |
|
24 |
import org.openconcerto.erp.core.sales.product.ui.DeliveredQtyRowValuesRenderer;
|
24 |
import org.openconcerto.erp.core.sales.product.ui.QteUnitRowValuesRenderer;
|
25 |
import org.openconcerto.erp.core.sales.product.ui.QteUnitRowValuesRenderer;
|
25 |
import org.openconcerto.erp.preferences.DefaultNXProps;
|
26 |
import org.openconcerto.erp.preferences.DefaultNXProps;
|
26 |
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
|
27 |
import org.openconcerto.erp.preferences.GestionArticleGlobalPreferencePanel;
|
27 |
import org.openconcerto.sql.Configuration;
|
28 |
import org.openconcerto.sql.Configuration;
|
28 |
import org.openconcerto.sql.element.SQLElement;
|
29 |
import org.openconcerto.sql.element.SQLElement;
|
Line 47... |
Line 48... |
47 |
import org.openconcerto.sql.view.list.ValidStateChecker;
|
48 |
import org.openconcerto.sql.view.list.ValidStateChecker;
|
48 |
import org.openconcerto.utils.DecimalUtils;
|
49 |
import org.openconcerto.utils.DecimalUtils;
|
49 |
import org.openconcerto.utils.Tuple3;
|
50 |
import org.openconcerto.utils.Tuple3;
|
50 |
import org.openconcerto.utils.i18n.TranslationManager;
|
51 |
import org.openconcerto.utils.i18n.TranslationManager;
|
51 |
|
52 |
|
- |
|
53 |
import java.awt.Component;
|
52 |
import java.awt.event.ActionEvent;
|
54 |
import java.awt.event.ActionEvent;
|
53 |
import java.awt.event.HierarchyEvent;
|
55 |
import java.awt.event.HierarchyEvent;
|
54 |
import java.awt.event.HierarchyListener;
|
56 |
import java.awt.event.HierarchyListener;
|
55 |
import java.awt.event.KeyEvent;
|
57 |
import java.awt.event.KeyEvent;
|
56 |
import java.awt.event.MouseAdapter;
|
58 |
import java.awt.event.MouseAdapter;
|
Line 67... |
Line 69... |
67 |
import java.util.Set;
|
69 |
import java.util.Set;
|
68 |
import java.util.Vector;
|
70 |
import java.util.Vector;
|
69 |
|
71 |
|
70 |
import javax.swing.AbstractAction;
|
72 |
import javax.swing.AbstractAction;
|
71 |
import javax.swing.JFrame;
|
73 |
import javax.swing.JFrame;
|
- |
|
74 |
import javax.swing.JLabel;
|
72 |
import javax.swing.JOptionPane;
|
75 |
import javax.swing.JOptionPane;
|
73 |
import javax.swing.JPopupMenu;
|
76 |
import javax.swing.JPopupMenu;
|
74 |
import javax.swing.JTable;
|
77 |
import javax.swing.JTable;
|
75 |
import javax.swing.SwingUtilities;
|
78 |
import javax.swing.SwingUtilities;
|
76 |
import javax.swing.ToolTipManager;
|
79 |
import javax.swing.ToolTipManager;
|
77 |
import javax.swing.event.TableModelEvent;
|
80 |
import javax.swing.event.TableModelEvent;
|
78 |
import javax.swing.event.TableModelListener;
|
81 |
import javax.swing.event.TableModelListener;
|
- |
|
82 |
import javax.swing.table.DefaultTableCellRenderer;
|
79 |
import javax.swing.table.TableCellRenderer;
|
83 |
import javax.swing.table.TableCellRenderer;
|
80 |
|
84 |
|
81 |
public abstract class AbstractAchatArticleItemTable extends AbstractArticleItemTable {
|
85 |
public abstract class AbstractAchatArticleItemTable extends AbstractArticleItemTable {
|
82 |
|
86 |
|
83 |
private AutoCompletionManager m;
|
87 |
private AutoCompletionManager m;
|
Line 132... |
Line 136... |
132 |
if (showDmdAchat && e.getTable().contains("ID_DEMANDE_ACHAT_ELEMENT")) {
|
136 |
if (showDmdAchat && e.getTable().contains("ID_DEMANDE_ACHAT_ELEMENT")) {
|
133 |
dmdElt = new SQLTableElement(e.getTable().getField("ID_DEMANDE_ACHAT_ELEMENT"));
|
137 |
dmdElt = new SQLTableElement(e.getTable().getField("ID_DEMANDE_ACHAT_ELEMENT"));
|
134 |
list.add(dmdElt);
|
138 |
list.add(dmdElt);
|
135 |
}
|
139 |
}
|
136 |
|
140 |
|
- |
|
141 |
if (e.getTable().contains("ID_AFFAIRE")) {
|
- |
|
142 |
list.add(new SQLTableElement(e.getTable().getField("ID_AFFAIRE")));
|
- |
|
143 |
}
|
- |
|
144 |
|
137 |
SQLTableElement tableElementCodeFournisseur = null;
|
145 |
SQLTableElement tableElementCodeFournisseur = null;
|
138 |
|
146 |
|
139 |
if (e.getTable().contains("ID_CODE_FOURNISSEUR") && supplierCode) {
|
147 |
if (e.getTable().contains("ID_CODE_FOURNISSEUR") && supplierCode) {
|
140 |
tableElementCodeFournisseur = new SQLTableElement(e.getTable().getField("ID_CODE_FOURNISSEUR"), true, true, true);
|
148 |
tableElementCodeFournisseur = new SQLTableElement(e.getTable().getField("ID_CODE_FOURNISSEUR"), true, true, true);
|
141 |
list.add(tableElementCodeFournisseur);
|
149 |
list.add(tableElementCodeFournisseur);
|
142 |
}
|
150 |
}
|
143 |
|
151 |
|
- |
|
152 |
if (e.getTable().contains("ID_COMPTE_PCE")) {
|
- |
|
153 |
list.add(new SQLTableElement(e.getTable().getField("ID_COMPTE_PCE")));
|
- |
|
154 |
}
|
- |
|
155 |
|
144 |
SQLTableElement tableElementArticle = new SQLTableElement(e.getTable().getField("ID_ARTICLE"), true, true, true) {
|
156 |
SQLTableElement tableElementArticle = new SQLTableElement(e.getTable().getField("ID_ARTICLE"), true, true, true) {
|
145 |
@Override
|
157 |
@Override
|
146 |
public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
|
158 |
public boolean isCellEditable(SQLRowValues vals, int rowIndex, int columnIndex) {
|
147 |
boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
|
159 |
boolean b = super.isCellEditable(vals, rowIndex, columnIndex);
|
148 |
if (vals.getTable().contains("ID_COMMANDE_ELEMENT")) {
|
160 |
if (vals.getTable().contains("ID_COMMANDE_ELEMENT")) {
|
Line 212... |
Line 224... |
212 |
|
224 |
|
213 |
}
|
225 |
}
|
214 |
};
|
226 |
};
|
215 |
list.add(tableElementNom);
|
227 |
list.add(tableElementNom);
|
216 |
|
228 |
|
217 |
SQLTableElement tableCmdElt = null;
|
- |
|
218 |
if (e.getTable().contains("ID_COMMANDE_ELEMENT")) {
|
- |
|
219 |
tableCmdElt = new SQLTableElement(e.getTable().getField("ID_COMMANDE_ELEMENT"));
|
- |
|
220 |
list.add(tableCmdElt);
|
- |
|
221 |
}
|
- |
|
222 |
|
- |
|
223 |
if (e.getTable().getFieldsName().contains("DESCRIPTIF")) {
|
229 |
if (e.getTable().getFieldsName().contains("DESCRIPTIF")) {
|
224 |
final SQLTableElement tableElementDesc = new SQLTableElement(e.getTable().getField("DESCRIPTIF"));
|
230 |
final SQLTableElement tableElementDesc = new SQLTableElement(e.getTable().getField("DESCRIPTIF"));
|
225 |
list.add(tableElementDesc);
|
231 |
list.add(tableElementDesc);
|
226 |
}
|
232 |
}
|
227 |
if (e.getTable().getFieldsName().contains("COLORIS")) {
|
233 |
if (e.getTable().getFieldsName().contains("COLORIS")) {
|
Line 291... |
Line 297... |
291 |
list.add(qteU);
|
297 |
list.add(qteU);
|
292 |
|
298 |
|
293 |
SQLTableElement uniteVente = new SQLTableElement(e.getTable().getField("ID_UNITE_VENTE"));
|
299 |
SQLTableElement uniteVente = new SQLTableElement(e.getTable().getField("ID_UNITE_VENTE"));
|
294 |
list.add(uniteVente);
|
300 |
list.add(uniteVente);
|
295 |
|
301 |
|
- |
|
302 |
SQLTableElement tableCmdElt = null;
|
- |
|
303 |
if (e.getTable().contains("ID_COMMANDE_ELEMENT")) {
|
- |
|
304 |
tableCmdElt = new SQLTableElement(e.getTable().getField("ID_COMMANDE_ELEMENT"));
|
- |
|
305 |
tableCmdElt.setRenderer(new DefaultTableCellRenderer() {
|
- |
|
306 |
@Override
|
- |
|
307 |
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
- |
|
308 |
SQLRowValues rowVals = getRowValuesTable().getRowValuesTableModel().getRowValuesAt(row);
|
- |
|
309 |
|
- |
|
310 |
JLabel tableCellRendererComponent = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
|
- |
|
311 |
tableCellRendererComponent.setText("");
|
- |
|
312 |
if (rowVals.getObject("ID_COMMANDE_ELEMENT") != null && !rowVals.isForeignEmpty("ID_COMMANDE_ELEMENT")) {
|
- |
|
313 |
SQLRowAccessor rowCmdItem = rowVals.getForeign("ID_COMMANDE_ELEMENT");
|
- |
|
314 |
int qte = rowCmdItem.getInt("QTE");
|
- |
|
315 |
BigDecimal qteU = rowCmdItem.getBigDecimal("QTE_UNITAIRE");
|
- |
|
316 |
BigDecimal qteR = rowCmdItem.getBigDecimal("QTE_RECUE");
|
- |
|
317 |
qteU = qteU.multiply(new BigDecimal(qte));
|
- |
|
318 |
if (qteR != null) {
|
- |
|
319 |
tableCellRendererComponent.setText(qteU.subtract(qteR).setScale(2, RoundingMode.HALF_UP).toString());
|
- |
|
320 |
} else {
|
- |
|
321 |
tableCellRendererComponent.setText(qteU.setScale(2, RoundingMode.HALF_UP).toString());
|
- |
|
322 |
}
|
- |
|
323 |
}
|
- |
|
324 |
|
- |
|
325 |
return tableCellRendererComponent;
|
- |
|
326 |
}
|
- |
|
327 |
});
|
- |
|
328 |
tableCmdElt.setEditable(false);
|
- |
|
329 |
list.add(tableCmdElt);
|
- |
|
330 |
}
|
- |
|
331 |
|
296 |
if (e.getTable().getFieldsName().contains("QTE_ORIGINE")) {
|
332 |
if (e.getTable().getFieldsName().contains("QTE_ORIGINE")) {
|
297 |
final SQLTableElement tableQteO = new SQLTableElement(e.getTable().getField("QTE_ORIGINE"));
|
333 |
final SQLTableElement tableQteO = new SQLTableElement(e.getTable().getField("QTE_ORIGINE"));
|
298 |
tableQteO.setEditable(false);
|
334 |
tableQteO.setEditable(false);
|
299 |
list.add(tableQteO);
|
335 |
list.add(tableQteO);
|
300 |
}
|
336 |
}
|
Line 303... |
Line 339... |
303 |
final SQLTableElement qteElement = new SQLTableElement(e.getTable().getField("QTE"), Integer.class) {
|
339 |
final SQLTableElement qteElement = new SQLTableElement(e.getTable().getField("QTE"), Integer.class) {
|
304 |
protected Object getDefaultNullValue() {
|
340 |
protected Object getDefaultNullValue() {
|
305 |
return Integer.valueOf(0);
|
341 |
return Integer.valueOf(0);
|
306 |
}
|
342 |
}
|
307 |
};
|
343 |
};
|
- |
|
344 |
if (e.getTable().getFieldsName().contains("QTE_ORIGINE")) {
|
- |
|
345 |
qteElement.setRenderer(new DeliveredQtyRowValuesRenderer(false));
|
- |
|
346 |
}
|
308 |
list.add(qteElement);
|
347 |
list.add(qteElement);
|
309 |
// TVA
|
348 |
// TVA
|
310 |
this.tableElementTVA = new SQLTableElement(e.getTable().getField("ID_TAXE"));
|
349 |
this.tableElementTVA = new SQLTableElement(e.getTable().getField("ID_TAXE"));
|
311 |
list.add(this.tableElementTVA);
|
350 |
list.add(this.tableElementTVA);
|
312 |
// Poids piece
|
351 |
// Poids piece
|
Line 326... |
Line 365... |
326 |
}
|
365 |
}
|
327 |
|
366 |
|
328 |
if (showDevise) {
|
367 |
if (showDevise) {
|
329 |
// Prix d'achat HT devise
|
368 |
// Prix d'achat HT devise
|
330 |
this.tableElementTotalDevise = new SQLTableElement(e.getTable().getField("PA_DEVISE_T"), BigDecimal.class);
|
369 |
this.tableElementTotalDevise = new SQLTableElement(e.getTable().getField("PA_DEVISE_T"), BigDecimal.class);
|
331 |
this.tableElementTotalDevise.setRenderer(new CurrencyWithSymbolRenderer(new FieldPath(p, "CODE")));
|
370 |
CurrencyWithSymbolRenderer deviseTotalRenderer = new CurrencyWithSymbolRenderer(new FieldPath(p, "CODE"));
|
- |
|
371 |
deviseTotalRenderer.setHideZeroValue(true);
|
- |
|
372 |
this.tableElementTotalDevise.setRenderer(deviseTotalRenderer);
|
332 |
list.add(tableElementTotalDevise);
|
373 |
list.add(tableElementTotalDevise);
|
333 |
}
|
374 |
}
|
334 |
|
375 |
|
335 |
SQLTableElement tableElementRemise = null;
|
376 |
SQLTableElement tableElementRemise = null;
|
336 |
if (e.getTable().contains("POURCENT_REMISE")) {
|
377 |
if (e.getTable().contains("POURCENT_REMISE")) {
|
Line 343... |
Line 384... |
343 |
list.add(this.tableElementEcoTotal);
|
384 |
list.add(this.tableElementEcoTotal);
|
344 |
}
|
385 |
}
|
345 |
|
386 |
|
346 |
// Total HT
|
387 |
// Total HT
|
347 |
this.totalHT = new SQLTableElement(e.getTable().getField("T_PA_HT"), BigDecimal.class);
|
388 |
this.totalHT = new SQLTableElement(e.getTable().getField("T_PA_HT"), BigDecimal.class);
|
- |
|
389 |
DeviseTableCellRenderer totalRenderer = new DeviseTableCellRenderer();
|
- |
|
390 |
totalRenderer.setHideZeroValue(true);
|
348 |
this.totalHT.setRenderer(new DeviseTableCellRenderer());
|
391 |
this.totalHT.setRenderer(totalRenderer);
|
349 |
this.totalHT.setEditable(false);
|
392 |
this.totalHT.setEditable(false);
|
350 |
if (e.getTable().contains("POURCENT_REMISE") && tableElementRemise != null) {
|
393 |
if (e.getTable().contains("POURCENT_REMISE") && tableElementRemise != null) {
|
351 |
tableElementRemise.addModificationListener(this.totalHT);
|
394 |
tableElementRemise.addModificationListener(this.totalHT);
|
352 |
}
|
395 |
}
|
353 |
list.add(this.totalHT);
|
396 |
list.add(this.totalHT);
|
354 |
this.totalHA = this.totalHT;
|
397 |
this.totalHA = this.totalHT;
|
355 |
// Total TTC
|
398 |
// Total TTC
|
356 |
this.tableElementTotalTTC = new SQLTableElement(e.getTable().getField("T_PA_TTC"), BigDecimal.class);
|
399 |
this.tableElementTotalTTC = new SQLTableElement(e.getTable().getField("T_PA_TTC"), BigDecimal.class);
|
357 |
this.tableElementTotalTTC.setRenderer(new DeviseTableCellRenderer());
|
400 |
this.tableElementTotalTTC.setRenderer(totalRenderer);
|
358 |
list.add(this.tableElementTotalTTC);
|
401 |
list.add(this.tableElementTotalTTC);
|
359 |
|
402 |
|
360 |
this.defaultRowVals = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(e.getTable()));
|
403 |
this.defaultRowVals = new SQLRowValues(UndefinedRowValuesCache.getInstance().getDefaultRowValues(e.getTable()));
|
361 |
this.defaultRowVals.put("ID_TAXE", TaxeCache.getCache().getFirstTaxe().getID());
|
404 |
this.defaultRowVals.put("ID_TAXE", TaxeCache.getCache().getFirstTaxe().getID());
|
362 |
this.defaultRowVals.put("CODE", "");
|
405 |
this.defaultRowVals.put("CODE", "");
|
Line 918... |
Line 961... |
918 |
}
|
961 |
}
|
919 |
|
962 |
|
920 |
public Object tarifCompletion(SQLRow row, String field) {
|
963 |
public Object tarifCompletion(SQLRow row, String field) {
|
921 |
final SQLTable tTarifFournisseur = this.getSQLElement().getTable().getDBRoot().getTable("ARTICLE_TARIF_FOURNISSEUR");
|
964 |
final SQLTable tTarifFournisseur = this.getSQLElement().getTable().getDBRoot().getTable("ARTICLE_TARIF_FOURNISSEUR");
|
922 |
|
965 |
|
923 |
if (row != null && !row.isUndefined() && field.equalsIgnoreCase("PRIX_METRIQUE_HA_1") && tTarifFournisseur != null) {
|
966 |
if (row != null && !row.isUndefined() && (field.equalsIgnoreCase("PRIX_METRIQUE_HA_1") || field.equalsIgnoreCase("PA_HT")) && tTarifFournisseur != null) {
|
924 |
List<String> incoTerms;
|
967 |
List<String> incoTerms;
|
925 |
|
968 |
|
926 |
if (this.incoterm != null && this.incoterm.equalsIgnoreCase("CPT")) {
|
969 |
if (this.incoterm != null && this.incoterm.equalsIgnoreCase("CPT")) {
|
927 |
incoTerms = Arrays.asList("PRIX_ACHAT", "COEF_TRANSPORT_PORT");
|
970 |
incoTerms = Arrays.asList("PRIX_ACHAT", "COEF_TRANSPORT_PORT");
|
928 |
} else if (this.incoterm != null && this.incoterm.equalsIgnoreCase("DDP")) {
|
971 |
} else if (this.incoterm != null && this.incoterm.equalsIgnoreCase("DDP")) {
|
Line 942... |
Line 985... |
942 |
boolean priceFound = false;
|
985 |
boolean priceFound = false;
|
943 |
boolean tarifFound = false;
|
986 |
boolean tarifFound = false;
|
944 |
if (rowsT.size() > 0) {
|
987 |
if (rowsT.size() > 0) {
|
945 |
BigDecimal min = BigDecimal.ZERO;
|
988 |
BigDecimal min = BigDecimal.ZERO;
|
946 |
|
989 |
|
947 |
BigDecimal defaultPrice = BigDecimal.ZERO;
|
990 |
BigDecimal defaultPrice = sqlRow.getForeign("ID_ARTICLE").getBigDecimal("PRIX_METRIQUE_HA_1");
|
948 |
Calendar c = null;
|
991 |
Calendar c = null;
|
949 |
for (SQLRow sqlRowT : rowsT) {
|
992 |
for (SQLRow sqlRowT : rowsT) {
|
950 |
if (this.rowFournisseur != null && this.rowFournisseur.getID() == sqlRowT.getForeignID("ID_FOURNISSEUR")) {
|
993 |
if (this.rowFournisseur != null && this.rowFournisseur.getID() == sqlRowT.getForeignID("ID_FOURNISSEUR")) {
|
951 |
BigDecimal priceT = getPrice(sqlRowT, incoTerms);
|
994 |
BigDecimal priceT = getPrice(sqlRowT, incoTerms);
|
952 |
defaultPrice = priceT;
|
995 |
defaultPrice = priceT;
|
Line 989... |
Line 1032... |
989 |
}
|
1032 |
}
|
990 |
});
|
1033 |
});
|
991 |
}
|
1034 |
}
|
992 |
return price;
|
1035 |
return price;
|
993 |
} else if (!rows.isEmpty()) {
|
1036 |
} else if (!rows.isEmpty()) {
|
- |
|
1037 |
|
994 |
BigDecimal min = BigDecimal.ZERO;
|
1038 |
BigDecimal min = row.getBigDecimal("PRIX_METRIQUE_HA_1");
|
- |
|
1039 |
|
995 |
Calendar c = null;
|
1040 |
Calendar c = null;
|
996 |
for (SQLRow sqlRow : rows) {
|
1041 |
for (SQLRow sqlRow : rows) {
|
997 |
if (this.rowFournisseur != null && this.rowFournisseur.getID() == sqlRow.getForeignID("ID_FOURNISSEUR")) {
|
1042 |
if (this.rowFournisseur != null && this.rowFournisseur.getID() == sqlRow.getForeignID("ID_FOURNISSEUR")) {
|
998 |
BigDecimal price = getPrice(sqlRow, incoTerms);
|
1043 |
BigDecimal price = getPrice(sqlRow, incoTerms);
|
999 |
final Calendar datePrice = sqlRow.getDate("DATE_PRIX");
|
1044 |
final Calendar datePrice = sqlRow.getDate("DATE_PRIX");
|