BF [1759431] Problems with VCreateFrom

This commit is contained in:
kthiemann 2008-02-21 15:58:55 +00:00
parent a12f1679e1
commit f1a8f5c7cb
8 changed files with 96 additions and 6 deletions

View File

@ -32,6 +32,8 @@ import org.compiere.util.*;
* @version $Id: MInOut.java,v 1.4 2006/07/30 00:51:03 jjanke Exp $
*
* Modifications: Added the RMA functionality (Ashley Ramdass)
* @author Karsten Thiemann, Schaeffer AG
* <li>Bug [ 1759431 ] Problems with VCreateFrom
*/
public class MInOut extends X_M_InOut implements DocAction
{
@ -1230,10 +1232,14 @@ public class MInOut extends X_M_InOut implements DocAction
{
log.fine("Material Transaction");
MTransaction mtrx = null;
//same warehouse in order and receipt?
boolean sameWarehouse = true;
// Reservation ASI - assume none
int reservationAttributeSetInstance_ID = 0; // sLine.getM_AttributeSetInstance_ID();
if (oLine != null)
if (oLine != null) {
reservationAttributeSetInstance_ID = oLine.getM_AttributeSetInstance_ID();
sameWarehouse = oLine.getM_Warehouse_ID()==getM_Warehouse_ID();
}
//
if (sLine.getM_AttributeSetInstance_ID() == 0)
{
@ -1254,16 +1260,33 @@ public class MInOut extends X_M_InOut implements DocAction
else
QtyPOMA = ma.getMovementQty();
}
BigDecimal diffQtyOrdered = QtyPOMA.negate();
if (!sameWarehouse) {
diffQtyOrdered = Env.ZERO;
}
// Update Storage - see also VMatch.createMatchRecord
if (!MStorage.add(getCtx(), getM_Warehouse_ID(),
sLine.getM_Locator_ID(),
sLine.getM_Product_ID(),
ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
QtyMA, QtySOMA.negate(), QtyPOMA.negate(), get_TrxName()))
QtyMA, QtySOMA.negate(), diffQtyOrdered, get_TrxName()))
{
m_processMsg = "Cannot correct Inventory (MA)";
return DocAction.STATUS_Invalid;
}
if (!sameWarehouse) {
//correct qtyOrdered in warehouse of order
MWarehouse wh = MWarehouse.get(getCtx(), oLine.getM_Warehouse_ID());
if (!MStorage.add(getCtx(), oLine.getM_Warehouse_ID(),
wh.getDefaultLocator().getM_Locator_ID(),
sLine.getM_Product_ID(),
ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
Env.ZERO, Env.ZERO, QtyPOMA.negate(), get_TrxName()))
{
m_processMsg = "Cannot correct Inventory (MA) in order warehouse";
return DocAction.STATUS_Invalid;
}
}
// Create Transaction
mtrx = new MTransaction (getCtx(), sLine.getAD_Org_ID(),
MovementType, sLine.getM_Locator_ID(),
@ -1280,16 +1303,33 @@ public class MInOut extends X_M_InOut implements DocAction
// sLine.getM_AttributeSetInstance_ID() != 0
if (mtrx == null)
{
BigDecimal diffQtyOrdered = QtyPO.negate();
if (!sameWarehouse) {
diffQtyOrdered = Env.ZERO;
}
// Fallback: Update Storage - see also VMatch.createMatchRecord
if (!MStorage.add(getCtx(), getM_Warehouse_ID(),
sLine.getM_Locator_ID(),
sLine.getM_Product_ID(),
sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
Qty, QtySO.negate(), QtyPO.negate(), get_TrxName()))
Qty, QtySO.negate(), diffQtyOrdered, get_TrxName()))
{
m_processMsg = "Cannot correct Inventory";
return DocAction.STATUS_Invalid;
}
if (!sameWarehouse) {
//correct qtyOrdered in warehouse of order
MWarehouse wh = MWarehouse.get(getCtx(), oLine.getM_Warehouse_ID());
if (!MStorage.add(getCtx(), oLine.getM_Warehouse_ID(),
wh.getDefaultLocator().getM_Locator_ID(),
sLine.getM_Product_ID(),
sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
Env.ZERO, Env.ZERO, QtyPO.negate(), get_TrxName()))
{
m_processMsg = "Cannot correct Inventory";
return DocAction.STATUS_Invalid;
}
}
// FallBack: Create Transaction
mtrx = new MTransaction (getCtx(), sLine.getAD_Org_ID(),
MovementType, sLine.getM_Locator_ID(),

View File

@ -42,6 +42,8 @@ import org.compiere.util.*;
* <li>FR [ 1794050 ] Usability: VCreateFrom OK button always enabled
* @author Victor Perez, e-Evolucion
* <li> RF [1811114] http://sourceforge.net/tracker/index.php?func=detail&aid=1811114&group_id=176962&atid=879335
* @author Karsten Thiemann, Schaeffer AG
* <li>Bug [ 1759431 ] Problems with VCreateFrom
*/
public abstract class VCreateFrom extends CDialog
implements ActionListener, TableModelListener
@ -137,6 +139,8 @@ public abstract class VCreateFrom extends CDialog
protected VString authorizationField = new VString();
private GridBagLayout parameterStdLayout = new GridBagLayout();
private GridBagLayout parameterBankLayout = new GridBagLayout();
// Bug [1759431]
protected JCheckBox sameWarehouseCb = new JCheckBox();
protected VLookup bPartnerField;
protected JLabel orderLabel = new JLabel();
protected JComboBox orderField = new JComboBox();
@ -188,6 +192,9 @@ public abstract class VCreateFrom extends CDialog
shipmentLabel.setText(Msg.getElement(Env.getCtx(), "M_InOut_ID", false));
locatorLabel.setText(Msg.translate(Env.getCtx(), "M_Locator_ID"));
rmaLabel.setText(Msg.translate(Env.getCtx(), "M_RMA_ID"));
sameWarehouseCb.setText(Msg.getMsg(Env.getCtx(), "FromSameWarehouseOnly", true));
sameWarehouseCb.setToolTipText(Msg.getMsg(Env.getCtx(), "FromSameWarehouseOnly", false));
//
this.getContentPane().add(parameterPanel, BorderLayout.NORTH);
parameterPanel.add(parameterBankPanel, BorderLayout.NORTH);
@ -229,6 +236,8 @@ public abstract class VCreateFrom extends CDialog
,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parameterStdPanel.add(locatorField, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 5), 0, 0));
parameterStdPanel.add(sameWarehouseCb, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 5), 0, 0));
// Add RMA document selection to panel
parameterStdPanel.add(rmaLabel, new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0
@ -377,7 +386,7 @@ public abstract class VCreateFrom extends CDialog
{
log.config("C_BPartner_ID=" + C_BPartner_ID);
KeyNamePair pp = new KeyNamePair(0,"");
boolean sameWarehouseOnly = sameWarehouseCb.isVisible() && sameWarehouseCb.isSelected();
// load PO Orders - Closed, Completed
orderField.removeActionListener(this);
orderField.removeAllItems();
@ -396,12 +405,19 @@ public abstract class VCreateFrom extends CDialog
+ "WHERE o.C_BPartner_ID=? AND o.IsSOTrx='N' AND o.DocStatus IN ('CL','CO')"
+ " AND o.C_Order_ID IN "
+ "(SELECT ol.C_Order_ID FROM C_OrderLine ol"
+ " WHERE ol.QtyOrdered - ").append(column).append(" != 0) "
+ "ORDER BY o.DateOrdered");
+ " WHERE ol.QtyOrdered - ").append(column).append(" != 0) ");
if(sameWarehouseOnly) {
sql = sql.append(" AND o.M_Warehouse_ID=? ");
}
sql = sql.append("ORDER BY o.DateOrdered");
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, C_BPartner_ID);
if(sameWarehouseOnly) {
//only active for material receipts
pstmt.setInt(2, Env.getContextAsInt(Env.getCtx(), p_WindowNo, "M_Warehouse_ID"));
}
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
@ -417,6 +433,7 @@ public abstract class VCreateFrom extends CDialog
}
orderField.setSelectedIndex(0);
orderField.addActionListener(this);
this.pack();
initBPDetails(C_BPartner_ID);
} // initBPartnerOIS

View File

@ -64,6 +64,7 @@ public class VCreateFromInvoice extends VCreateFrom implements VetoableChangeLis
invoiceField.setVisible(false);
locatorLabel.setVisible(false);
locatorField.setVisible(false);
sameWarehouseCb.setVisible(false);
// RMA Selection option should only be available for AP Credit Memo
Integer docTypeId = (Integer)p_mTab.getValue("C_DocTypeTarget_ID");

View File

@ -65,6 +65,7 @@ public class VCreateFromRMA extends VCreateFrom
shipmentLabel.setVisible(false);
shipmentField.setVisible(false);
sameWarehouseCb.setVisible(false);
rmaLabel.setVisible(false);
rmaField.setVisible(false);

View File

@ -101,6 +101,8 @@ public class VCreateFromShipment extends VCreateFrom implements VetoableChangeLi
parameterBankPanel.setVisible(false);
shipmentLabel.setVisible(false);
shipmentField.setVisible(false);
sameWarehouseCb.setSelected(true);
sameWarehouseCb.addActionListener(this);
// load Locator
int AD_Column_ID = 3537; // M_InOut.M_Locator_ID
@ -285,6 +287,11 @@ public class VCreateFromShipment extends VCreateFrom implements VetoableChangeLi
invoiceField.setSelectedIndex(-1);
loadRMA(M_RMA_ID);
}
}
//sameWarehouseCb
else if (e.getSource().equals(sameWarehouseCb))
{
initBPartnerOIS(((Integer)bPartnerField.getValue()).intValue(), false);
}
} // actionPerformed

View File

@ -64,6 +64,8 @@ public class VCreateFromStatement extends VCreateFrom implements VetoableChangeL
// Do not display RMA selection
rmaLabel.setVisible(false);
rmaField.setVisible(false);
sameWarehouseCb.setVisible(false);
setTitle(Msg.translate(Env.getCtx(), "C_BankStatement_ID") + " .. " + Msg.translate(Env.getCtx(), "CreateFrom"));
parameterStdPanel.setVisible(false);

View File

@ -0,0 +1,11 @@
-- Feb 21, 2008 12:53:15 PM CET
-- Updated by Karsten Thiemann
INSERT INTO AD_Message (AD_Org_ID,Value,UpdatedBy,Updated,MsgType,MsgTip,MsgText,IsActive,EntityType,CreatedBy,Created,AD_Message_ID,AD_Client_ID) VALUES (0,'FromSameWarehouseOnly',100,TO_DATE('2008-02-21 12:53:13','YYYY-MM-DD HH24:MI:SS'),'I','Show only orders with the same warehouse as selected in the material receipt','Only from same warehouse','Y','D',100,TO_DATE('2008-02-21 12:53:13','YYYY-MM-DD HH24:MI:SS'),53027,0)
;
-- Feb 21, 2008 12:53:15 PM CET
-- Updated by Karsten Thiemann
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgTip,MsgText, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Message_ID, t.MsgTip,t.MsgText, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=53027 AND EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language!=l.AD_Language OR tt.AD_Message_ID!=t.AD_Message_ID)
;

View File

@ -0,0 +1,11 @@
-- Feb 21, 2008 12:53:15 PM CET
-- Updated by Karsten Thiemann
INSERT INTO AD_Message (AD_Org_ID,Value,UpdatedBy,Updated,MsgType,MsgTip,MsgText,IsActive,EntityType,CreatedBy,Created,AD_Message_ID,AD_Client_ID) VALUES (0,'FromSameWarehouseOnly',100,TO_TIMESTAMP('2008-02-21 12:53:13','YYYY-MM-DD HH24:MI:SS'),'I','Show only orders with the same warehouse as selected in the material receipt','Only from same warehouse','Y','D',100,TO_TIMESTAMP('2008-02-21 12:53:13','YYYY-MM-DD HH24:MI:SS'),53027,0)
;
-- Feb 21, 2008 12:53:15 PM CET
-- Updated by Karsten Thiemann
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgTip,MsgText, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Message_ID, t.MsgTip,t.MsgText, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=53027 AND EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language!=l.AD_Language OR tt.AD_Message_ID!=t.AD_Message_ID)
;