From 9faf8748bcceb18cd62593e86e563bd1a7b34748 Mon Sep 17 00:00:00 2001 From: kthiemann Date: Thu, 22 Feb 2007 12:41:39 +0000 Subject: [PATCH] patch [ 1659688 ] Material Receipt: "Copy from" button https://sourceforge.net/tracker/index.php?func=detail&aid=1659688&group_id=176962&atid=879334 --- client/src/org/compiere/grid/VCreateFrom.java | 31 ++-- .../org/compiere/grid/VCreateFromInvoice.java | 44 +++--- .../compiere/grid/VCreateFromShipment.java | 146 ++++++++---------- 3 files changed, 104 insertions(+), 117 deletions(-) diff --git a/client/src/org/compiere/grid/VCreateFrom.java b/client/src/org/compiere/grid/VCreateFrom.java index f2f60e3eb1..e3a5c899b4 100644 --- a/client/src/org/compiere/grid/VCreateFrom.java +++ b/client/src/org/compiere/grid/VCreateFrom.java @@ -396,9 +396,10 @@ public abstract class VCreateFrom extends CDialog * Qty - 1 * C_UOM_ID - 2 * M_Product_ID - 3 - * OrderLine - 4 - * ShipmentLine - 5 - * InvoiceLine - 6 + * VendorProductNo - 4 + * OrderLine - 5 + * ShipmentLine - 6 + * InvoiceLine - 7 */ log.config("C_Order_ID=" + C_Order_ID); p_order = new MOrder (Env.getCtx(), C_Order_ID, null); // save @@ -408,9 +409,10 @@ public abstract class VCreateFrom extends CDialog + "l.QtyOrdered-SUM(COALESCE(m.Qty,0))," // 1 + "CASE WHEN l.QtyOrdered=0 THEN 0 ELSE l.QtyEntered/l.QtyOrdered END," // 2 + " l.C_UOM_ID,COALESCE(uom.UOMSymbol,uom.Name)," // 3..4 - + " COALESCE(l.M_Product_ID,0),COALESCE(p.Name,c.Name)," // 5..6 - + " l.C_OrderLine_ID,l.Line " // 7..8 + + " COALESCE(l.M_Product_ID,0),COALESCE(p.Name,c.Name),po.VendorProductNo," // 5..7 + + " l.C_OrderLine_ID,l.Line " // 8..9 + "FROM C_OrderLine l" + + " LEFT OUTER JOIN M_Product_PO po ON (l.M_Product_ID = po.M_Product_ID AND l.C_BPartner_ID = po.C_BPartner_ID) " + " LEFT OUTER JOIN M_MatchPO m ON (l.C_OrderLine_ID=m.C_OrderLine_ID AND "); sql.append(forInvoice ? "m.C_InvoiceLine_ID" : "m.M_InOutLine_ID"); sql.append(" IS NOT NULL)") @@ -424,7 +426,7 @@ public abstract class VCreateFrom extends CDialog // sql.append(" WHERE l.C_Order_ID=? " // #1 + "GROUP BY l.QtyOrdered,CASE WHEN l.QtyOrdered=0 THEN 0 ELSE l.QtyEntered/l.QtyOrdered END, " - + "l.C_UOM_ID,COALESCE(uom.UOMSymbol,uom.Name), " + + "l.C_UOM_ID,COALESCE(uom.UOMSymbol,uom.Name),po.VendorProductNo, " + "l.M_Product_ID,COALESCE(p.Name,c.Name), l.Line,l.C_OrderLine_ID " + "ORDER BY l.Line"); // @@ -446,10 +448,11 @@ public abstract class VCreateFrom extends CDialog line.add(pp); // 2-UOM pp = new KeyNamePair(rs.getInt(5), rs.getString(6)); line.add(pp); // 3-Product - pp = new KeyNamePair(rs.getInt(7), rs.getString(8)); - line.add(pp); // 4-OrderLine - line.add(null); // 5-Ship - line.add(null); // 6-Invoice + line.add(rs.getString(7)); // 4-VendorProductNo + pp = new KeyNamePair(rs.getInt(8), rs.getString(9)); + line.add(pp); // 5-OrderLine + line.add(null); // 6-Ship + line.add(null); // 7-Invoice data.add(line); } rs.close(); @@ -475,6 +478,7 @@ public abstract class VCreateFrom extends CDialog columnNames.add(Msg.translate(Env.getCtx(), "Quantity")); columnNames.add(Msg.translate(Env.getCtx(), "C_UOM_ID")); columnNames.add(Msg.translate(Env.getCtx(), "M_Product_ID")); + columnNames.add(Msg.getElement(Env.getCtx(), "VendorProductNo", false)); columnNames.add(Msg.getElement(Env.getCtx(), "C_Order_ID", false)); columnNames.add(Msg.getElement(Env.getCtx(), "M_InOut_ID", false)); columnNames.add(Msg.getElement(Env.getCtx(), "C_Invoice_ID", false)); @@ -490,9 +494,10 @@ public abstract class VCreateFrom extends CDialog dataTable.setColumnClass(1, Double.class, true); // 1-Qty dataTable.setColumnClass(2, String.class, true); // 2-UOM dataTable.setColumnClass(3, String.class, true); // 3-Product - dataTable.setColumnClass(4, String.class, true); // 4-Order - dataTable.setColumnClass(5, String.class, true); // 5-Ship - dataTable.setColumnClass(6, String.class, true); // 6-Invoice + dataTable.setColumnClass(4, String.class, true); // 4-VendorProductNo + dataTable.setColumnClass(5, String.class, true); // 5-Order + dataTable.setColumnClass(6, String.class, true); // 6-Ship + dataTable.setColumnClass(7, String.class, true); // 7-Invoice // Table UI dataTable.autoSize(); } // loadOrder diff --git a/client/src/org/compiere/grid/VCreateFromInvoice.java b/client/src/org/compiere/grid/VCreateFromInvoice.java index eb672b3761..d2ddf941da 100644 --- a/client/src/org/compiere/grid/VCreateFromInvoice.java +++ b/client/src/org/compiere/grid/VCreateFromInvoice.java @@ -190,24 +190,25 @@ public class VCreateFromInvoice extends VCreateFrom implements VetoableChangeLis StringBuffer sql = new StringBuffer("SELECT " // QtyEntered + "l.MovementQty-SUM(NVL(mi.Qty, 0)), l.QtyEntered/l.MovementQty," + " l.C_UOM_ID, COALESCE(uom.UOMSymbol, uom.Name)," // 3..4 - + " l.M_Product_ID, p.Name, l.M_InOutLine_ID, l.Line," // 5..8 - + " l.C_OrderLine_ID "); // 9 + + " l.M_Product_ID, p.Name, po.VendorProductNo, l.M_InOutLine_ID, l.Line," // 5..9 + + " l.C_OrderLine_ID " // 10 + + " FROM M_InOutLine l " + ); if (Env.isBaseLanguage(Env.getCtx(), "C_UOM")) - { - sql.append("FROM C_UOM uom, M_InOutLine l, M_Product p, M_MatchInv mi "); - sql.append("WHERE l.C_UOM_ID=uom.C_UOM_ID"); - } + sql.append(" LEFT OUTER JOIN C_UOM uom ON (l.C_UOM_ID=uom.C_UOM_ID)"); else - { - sql.append("FROM C_UOM_Trl uom, M_InOutLine l, M_Product p, M_MatchInv mi "); - sql.append("WHERE l.C_UOM_ID=uom.C_UOM_ID AND uom.AD_Language='").append(Env.getAD_Language(Env.getCtx())).append("'"); - } - sql.append(" AND l.M_Product_ID=p.M_Product_ID") - .append(" AND l.M_InOutLine_ID=mi.M_InOutLine_ID(+)") - .append(" AND l.M_InOut_ID=? ") // #1 + sql.append(" LEFT OUTER JOIN C_UOM_Trl uom ON (l.C_UOM_ID=uom.C_UOM_ID AND uom.AD_Language='") + .append(Env.getAD_Language(Env.getCtx())).append("')"); + + sql.append(" LEFT OUTER JOIN M_Product p ON (l.M_Product_ID=p.M_Product_ID)") + .append(" INNER JOIN M_InOut io ON (l.M_InOut_ID=io.M_InOut_ID)") + .append(" LEFT OUTER JOIN M_Product_PO po ON (l.M_Product_ID = po.M_Product_ID AND io.C_BPartner_ID = po.C_BPartner_ID)") + .append(" LEFT OUTER JOIN M_MatchInv mi ON (l.M_InOutLine_ID=mi.M_InOutLine_ID)") + + .append(" WHERE l.M_InOut_ID=? ") .append("GROUP BY l.MovementQty, l.QtyEntered/l.MovementQty, " + "l.C_UOM_ID, COALESCE(uom.UOMSymbol, uom.Name), " - + "l.M_Product_ID, p.Name, l.M_InOutLine_ID, l.Line, l.C_OrderLine_ID ") + + "l.M_Product_ID, p.Name, po.VendorProductNo, l.M_InOutLine_ID, l.Line, l.C_OrderLine_ID ") .append("ORDER BY l.Line"); try @@ -227,14 +228,15 @@ public class VCreateFromInvoice extends VCreateFrom implements VetoableChangeLis line.add(pp); // 2-UOM pp = new KeyNamePair(rs.getInt(5), rs.getString(6)); line.add(pp); // 3-Product - int C_OrderLine_ID = rs.getInt(9); + line.add(rs.getString(7)); // 4-VendorProductNo + int C_OrderLine_ID = rs.getInt(10); if (rs.wasNull()) - line.add(null); // 4-Order + line.add(null); // 5-Order else line.add(new KeyNamePair(C_OrderLine_ID,".")); - pp = new KeyNamePair(rs.getInt(7), rs.getString(8)); - line.add(pp); // 5-Ship - line.add(null); // 6-Invoice + pp = new KeyNamePair(rs.getInt(8), rs.getString(9)); + line.add(pp); // 6-Ship + line.add(null); // 7-Invoice data.add(line); } rs.close(); @@ -311,11 +313,11 @@ public class VCreateFromInvoice extends VCreateFrom implements VetoableChangeLis int C_Charge_ID = 0; // int C_OrderLine_ID = 0; - pp = (KeyNamePair)model.getValueAt(i, 4); // 4-OrderLine + pp = (KeyNamePair)model.getValueAt(i, 5); // 5-OrderLine if (pp != null) C_OrderLine_ID = pp.getKey(); int M_InOutLine_ID = 0; - pp = (KeyNamePair)model.getValueAt(i, 5); // 5-Shipment + pp = (KeyNamePair)model.getValueAt(i, 6); // 6-Shipment if (pp != null) M_InOutLine_ID = pp.getKey(); // Precision of Qty UOM diff --git a/client/src/org/compiere/grid/VCreateFromShipment.java b/client/src/org/compiere/grid/VCreateFromShipment.java index 59bbb291eb..6bd1cc42ed 100644 --- a/client/src/org/compiere/grid/VCreateFromShipment.java +++ b/client/src/org/compiere/grid/VCreateFromShipment.java @@ -192,143 +192,123 @@ public class VCreateFromShipment extends VCreateFrom implements VetoableChangeLi * Load Data - Invoice * @param C_Invoice_ID Invoice */ - private void loadInvoice (int C_Invoice_ID) - { + private void loadInvoice(int C_Invoice_ID) { log.config("C_Invoice_ID=" + C_Invoice_ID); - m_invoice = new MInvoice (Env.getCtx(), C_Invoice_ID, null); // save + m_invoice = new MInvoice(Env.getCtx(), C_Invoice_ID, null); // save p_order = null; - Vector data = new Vector(); - StringBuffer sql = new StringBuffer("SELECT " // Entered UOM - + "l.QtyInvoiced-SUM(NVL(mi.Qty,0)),l.QtyEntered/l.QtyInvoiced," - + " l.C_UOM_ID,COALESCE(uom.UOMSymbol,uom.Name)," // 3..4 - + " l.M_Product_ID,p.Name, l.C_InvoiceLine_ID,l.Line," // 5..8 - + " l.C_OrderLine_ID "); // 9 + Vector data = new Vector(); + StringBuffer sql = new StringBuffer("SELECT " // Entered UOM + + "l.QtyInvoiced-SUM(NVL(mi.Qty,0)),l.QtyEntered/l.QtyInvoiced," + + " l.C_UOM_ID,COALESCE(uom.UOMSymbol,uom.Name)," // 3..4 + + " l.M_Product_ID,p.Name, po.VendorProductNo, l.C_InvoiceLine_ID,l.Line," // 5..9 + + " l.C_OrderLine_ID " + + " FROM C_InvoiceLine l "); // 10 if (Env.isBaseLanguage(Env.getCtx(), "C_UOM")) - { - sql.append("FROM C_UOM uom, C_InvoiceLine l, M_Product p, M_MatchInv mi "); - sql.append("WHERE l.C_UOM_ID=uom.C_UOM_ID"); - } + sql.append(" LEFT OUTER JOIN C_UOM uom ON (l.C_UOM_ID=uom.C_UOM_ID)"); else - { - sql.append("FROM C_UOM_Trl uom, C_InvoiceLine_v l, M_Product p, M_MatchInv mi "); - sql.append("WHERE l.C_UOM_ID=uom.C_UOM_ID AND uom.AD_Language='").append(Env.getAD_Language(Env.getCtx())).append("'"); - } - sql.append(" AND l.M_Product_ID=p.M_Product_ID" - + " AND l.C_InvoiceLine_ID=mi.C_InvoiceLine_ID(+)" - + " AND l.C_Invoice_ID=? " // #1 - + "GROUP BY l.QtyInvoiced,l.QtyEntered/l.QtyInvoiced," - + "l.C_UOM_ID,COALESCE(uom.UOMSymbol,uom.Name)," - + "l.M_Product_ID,p.Name, l.C_InvoiceLine_ID,l.Line,l.C_OrderLine_ID " - + "ORDER BY l.Line"); - try - { + sql.append(" LEFT OUTER JOIN C_UOM_Trl uom ON (l.C_UOM_ID=uom.C_UOM_ID AND uom.AD_Language='") + .append(Env.getAD_Language(Env.getCtx())).append("')"); + + sql.append(" LEFT OUTER JOIN M_Product p ON (l.M_Product_ID=p.M_Product_ID)") + .append(" INNER JOIN C_Invoice inv ON (l.C_Invoice_ID=inv.C_Invoice_ID)") + .append(" LEFT OUTER JOIN M_Product_PO po ON (l.M_Product_ID = po.M_Product_ID AND inv.C_BPartner_ID = po.C_BPartner_ID)") + .append(" LEFT OUTER JOIN M_MatchInv mi ON (l.C_InvoiceLine_ID=mi.C_InvoiceLine_ID)") + + .append(" WHERE l.C_Invoice_ID=? ") + .append("GROUP BY l.QtyInvoiced,l.QtyEntered/l.QtyInvoiced," + + "l.C_UOM_ID,COALESCE(uom.UOMSymbol,uom.Name)," + + "l.M_Product_ID,p.Name, po.VendorProductNo, l.C_InvoiceLine_ID,l.Line,l.C_OrderLine_ID ") + .append("ORDER BY l.Line"); + + try { PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null); pstmt.setInt(1, C_Invoice_ID); ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { + while (rs.next()) { Vector line = new Vector(7); - line.add(new Boolean(false)); // 0-Selection + line.add(new Boolean(false)); // 0-Selection BigDecimal qtyInvoiced = rs.getBigDecimal(1); BigDecimal multiplier = rs.getBigDecimal(2); BigDecimal qtyEntered = qtyInvoiced.multiply(multiplier); - line.add(new Double(qtyEntered.doubleValue())); // 1-Qty + line.add(new Double(qtyEntered.doubleValue())); // 1-Qty KeyNamePair pp = new KeyNamePair(rs.getInt(3), rs.getString(4).trim()); - line.add(pp); // 2-UOM + line.add(pp); // 2-UOM pp = new KeyNamePair(rs.getInt(5), rs.getString(6)); - line.add(pp); // 3-Product - int C_OrderLine_ID = rs.getInt(9); + line.add(pp); // 3-Product + line.add(rs.getString(7)); // 4-VendorProductNo + int C_OrderLine_ID = rs.getInt(10); if (rs.wasNull()) - line.add(null); // 4-Order + line.add(null); // 5-Order else - line.add(new KeyNamePair(C_OrderLine_ID,".")); - line.add(null); // 5-Ship - pp = new KeyNamePair(rs.getInt(7), rs.getString(8)); - line.add(pp); // 6-Invoice + line.add(new KeyNamePair(C_OrderLine_ID, ".")); + line.add(null); // 6-Ship + pp = new KeyNamePair(rs.getInt(8), rs.getString(9)); + line.add(pp); // 7-Invoice data.add(line); } rs.close(); pstmt.close(); - } - catch (SQLException e) - { + } catch (SQLException e) { log.log(Level.SEVERE, sql.toString(), e); } - loadTableOIS (data); - } // loadInvoice - + loadTableOIS(data); + } // loadInvoice /** - * List number of rows selected + * List number of rows selected */ - protected void info() - { + protected void info() { TableModel model = dataTable.getModel(); int rows = model.getRowCount(); int count = 0; - for (int i = 0; i < rows; i++) - { - if (((Boolean)model.getValueAt(i, 0)).booleanValue()) + for (int i = 0; i < rows; i++) { + if (((Boolean) model.getValueAt(i, 0)).booleanValue()) count++; } statusBar.setStatusLine(String.valueOf(count)); - } // info - + } // info /** - * Save - create Shipments - * @return true if saved + * Save - create Shipments + * + * @return true if saved */ - protected boolean save() - { + protected boolean save() { log.config(""); TableModel model = dataTable.getModel(); int rows = model.getRowCount(); if (rows == 0) return false; // - Integer loc = (Integer)locatorField.getValue(); - if (loc == null || loc.intValue() == 0) - { + Integer loc = (Integer) locatorField.getValue(); + if (loc == null || loc.intValue() == 0) { locatorField.setBackground(AdempierePLAF.getFieldBackground_Error()); return false; } int M_Locator_ID = loc.intValue(); - // Get Shipment - int M_InOut_ID = ((Integer)p_mTab.getValue("M_InOut_ID")).intValue(); - MInOut inout = new MInOut (Env.getCtx(), M_InOut_ID, null); + // Get Shipment + int M_InOut_ID = ((Integer) p_mTab.getValue("M_InOut_ID")).intValue(); + MInOut inout = new MInOut(Env.getCtx(), M_InOut_ID, null); log.config(inout + ", C_Locator_ID=" + M_Locator_ID); - /** - * Selected - 0 - * QtyEntered - 1 - * C_UOM_ID - 2 - * M_Product_ID - 3 - * OrderLine - 4 - * ShipmentLine - 5 - * InvoiceLine - 6 - */ - - // Lines - for (int i = 0; i < rows; i++) - { - if (((Boolean)model.getValueAt(i, 0)).booleanValue()) - { - // variable values - Double d = (Double)model.getValueAt(i, 1); // 1-Qty + // Lines + for (int i = 0; i < rows; i++) { + if (((Boolean) model.getValueAt(i, 0)).booleanValue()) { + // variable values + Double d = (Double) model.getValueAt(i, 1); // 1-Qty BigDecimal QtyEntered = new BigDecimal(d.doubleValue()); - KeyNamePair pp = (KeyNamePair)model.getValueAt(i, 2); // 2-Product + KeyNamePair pp = (KeyNamePair) model.getValueAt(i, 2); // 2-Product int C_UOM_ID = pp.getKey(); - pp = (KeyNamePair)model.getValueAt(i, 3); // 3-Product + pp = (KeyNamePair) model.getValueAt(i, 3); // 3-Product int M_Product_ID = pp.getKey(); int C_OrderLine_ID = 0; - pp = (KeyNamePair)model.getValueAt(i, 4); // 4-OrderLine + pp = (KeyNamePair) model.getValueAt(i, 5); // 5-OrderLine if (pp != null) C_OrderLine_ID = pp.getKey(); int C_InvoiceLine_ID = 0; MInvoiceLine il = null; - pp = (KeyNamePair)model.getValueAt(i, 6); // 6-InvoiceLine + pp = (KeyNamePair) model.getValueAt(i, 7); // 7-InvoiceLine if (pp != null) C_InvoiceLine_ID = pp.getKey(); if (C_InvoiceLine_ID != 0)