IDEMPIERE-1144 Generating shipments from existing orders fails if product has mandatory attribute set / thanks to Tony Snook (tspc) for the initial patch
This commit is contained in:
parent
367ca9794e
commit
f269768f71
|
@ -27,7 +27,7 @@ WHERE (o.DocStatus = 'CO' AND o.IsDelivered='N') -- Status must be CO - not CL
|
||||||
-- Not confirmed shipment
|
-- Not confirmed shipment
|
||||||
AND NOT EXISTS (SELECT * FROM M_InOutLine iol
|
AND NOT EXISTS (SELECT * FROM M_InOutLine iol
|
||||||
INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID)
|
INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID)
|
||||||
WHERE iol.C_OrderLine_ID=l.C_OrderLine_ID AND io.DocStatus IN ('IP','WC'))
|
WHERE iol.C_OrderLine_ID=l.C_OrderLine_ID AND io.DocStatus IN ('DR','IN','IP','WC'))
|
||||||
--
|
--
|
||||||
GROUP BY o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
GROUP BY o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
||||||
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
||||||
|
|
|
@ -27,7 +27,7 @@ WHERE (o.DocStatus = 'CO' AND o.IsDelivered='N') -- Status must be CO - not CL
|
||||||
-- Not confirmed shipment
|
-- Not confirmed shipment
|
||||||
AND NOT EXISTS (SELECT * FROM M_InOutLine iol
|
AND NOT EXISTS (SELECT * FROM M_InOutLine iol
|
||||||
INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID)
|
INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID)
|
||||||
WHERE iol.C_OrderLine_ID=l.C_OrderLine_ID AND io.DocStatus IN ('IP','WC'))
|
WHERE iol.C_OrderLine_ID=l.C_OrderLine_ID AND io.DocStatus IN ('DR','IN','IP','WC'))
|
||||||
--
|
--
|
||||||
GROUP BY o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
GROUP BY o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
||||||
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
-- IDEMPIERE-1144 Generating shipments from existing orders fails if product has mandatory attribute set
|
||||||
|
|
||||||
|
CREATE OR REPLACE VIEW M_INOUT_CANDIDATE_V
|
||||||
|
(AD_CLIENT_ID, AD_ORG_ID, C_BPARTNER_ID, C_ORDER_ID, DOCUMENTNO,
|
||||||
|
DATEORDERED, C_DOCTYPE_ID, POREFERENCE, DESCRIPTION, SALESREP_ID,
|
||||||
|
M_WAREHOUSE_ID, TOTALLINES)
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
||||||
|
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
||||||
|
o.POReference, o.Description, o.SalesRep_ID,
|
||||||
|
l.M_Warehouse_ID,
|
||||||
|
SUM((l.QtyOrdered-l.QtyDelivered)*l.PriceActual) AS TotalLines
|
||||||
|
FROM C_Order o
|
||||||
|
INNER JOIN C_OrderLine l ON (o.C_Order_ID=l.C_Order_ID)
|
||||||
|
WHERE (o.DocStatus = 'CO' AND o.IsDelivered='N') -- Status must be CO - not CL/RE
|
||||||
|
-- not Offers and open Walkin-Receipts
|
||||||
|
AND o.C_DocType_ID IN (SELECT C_DocType_ID FROM C_DocType
|
||||||
|
WHERE DocBaseType='SOO' AND DocSubTypeSO NOT IN ('ON','OB','WR'))
|
||||||
|
-- Delivery Rule - not manual
|
||||||
|
AND o.DeliveryRule<>'M'
|
||||||
|
AND (l.M_Product_ID IS NULL OR EXISTS
|
||||||
|
(SELECT * FROM M_Product p
|
||||||
|
WHERE l.M_Product_ID=p.M_Product_ID AND p.IsExcludeAutoDelivery='N'))
|
||||||
|
-- we need to ship
|
||||||
|
AND l.QtyOrdered <> l.QtyDelivered
|
||||||
|
AND o.IsDropShip='N'
|
||||||
|
AND (l.M_Product_ID IS NOT NULL OR l.C_Charge_ID IS NOT NULL)
|
||||||
|
-- Not confirmed shipment
|
||||||
|
AND NOT EXISTS (SELECT * FROM M_InOutLine iol
|
||||||
|
INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID)
|
||||||
|
WHERE iol.C_OrderLine_ID=l.C_OrderLine_ID AND io.DocStatus IN ('DR','IN','IP','WC'))
|
||||||
|
--
|
||||||
|
GROUP BY o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
||||||
|
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
||||||
|
o.POReference, o.Description, o.SalesRep_ID, l.M_Warehouse_ID
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SELECT register_migration_script('201403122133_IDEMPIERE-1144.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
-- IDEMPIERE-1144 Generating shipments from existing orders fails if product has mandatory attribute set
|
||||||
|
|
||||||
|
CREATE OR REPLACE VIEW M_INOUT_CANDIDATE_V
|
||||||
|
(AD_CLIENT_ID, AD_ORG_ID, C_BPARTNER_ID, C_ORDER_ID, DOCUMENTNO,
|
||||||
|
DATEORDERED, C_DOCTYPE_ID, POREFERENCE, DESCRIPTION, SALESREP_ID,
|
||||||
|
M_WAREHOUSE_ID, TOTALLINES)
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
||||||
|
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
||||||
|
o.POReference, o.Description, o.SalesRep_ID,
|
||||||
|
l.M_Warehouse_ID,
|
||||||
|
SUM((l.QtyOrdered-l.QtyDelivered)*l.PriceActual) AS TotalLines
|
||||||
|
FROM C_Order o
|
||||||
|
INNER JOIN C_OrderLine l ON (o.C_Order_ID=l.C_Order_ID)
|
||||||
|
WHERE (o.DocStatus = 'CO' AND o.IsDelivered='N') -- Status must be CO - not CL/RE
|
||||||
|
-- not Offers and open Walkin-Receipts
|
||||||
|
AND o.C_DocType_ID IN (SELECT C_DocType_ID FROM C_DocType
|
||||||
|
WHERE DocBaseType='SOO' AND DocSubTypeSO NOT IN ('ON','OB','WR'))
|
||||||
|
-- Delivery Rule - not manual
|
||||||
|
AND o.DeliveryRule<>'M'
|
||||||
|
AND (l.M_Product_ID IS NULL OR EXISTS
|
||||||
|
(SELECT * FROM M_Product p
|
||||||
|
WHERE l.M_Product_ID=p.M_Product_ID AND p.IsExcludeAutoDelivery='N'))
|
||||||
|
-- we need to ship
|
||||||
|
AND l.QtyOrdered <> l.QtyDelivered
|
||||||
|
AND o.IsDropShip='N'
|
||||||
|
AND (l.M_Product_ID IS NOT NULL OR l.C_Charge_ID IS NOT NULL)
|
||||||
|
-- Not confirmed shipment
|
||||||
|
AND NOT EXISTS (SELECT * FROM M_InOutLine iol
|
||||||
|
INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID)
|
||||||
|
WHERE iol.C_OrderLine_ID=l.C_OrderLine_ID AND io.DocStatus IN ('DR','IN','IP','WC'))
|
||||||
|
--
|
||||||
|
GROUP BY o.AD_Client_ID, o.AD_Org_ID, o.C_BPartner_ID, o.C_Order_ID,
|
||||||
|
o.DocumentNo, o.DateOrdered, o.C_DocType_ID,
|
||||||
|
o.POReference, o.Description, o.SalesRep_ID, l.M_Warehouse_ID
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SELECT register_migration_script('201403122133_IDEMPIERE-1144.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class InOutGenerate extends SvrProcess
|
||||||
/** Include Orders w. unconfirmed Shipments */
|
/** Include Orders w. unconfirmed Shipments */
|
||||||
private boolean p_IsUnconfirmedInOut = false;
|
private boolean p_IsUnconfirmedInOut = false;
|
||||||
/** DocAction */
|
/** DocAction */
|
||||||
private String p_docAction = DocAction.ACTION_Complete;
|
private String p_docAction = DocAction.ACTION_None;
|
||||||
/** Consolidate */
|
/** Consolidate */
|
||||||
private boolean p_ConsolidateDocument = true;
|
private boolean p_ConsolidateDocument = true;
|
||||||
/** Shipment Date */
|
/** Shipment Date */
|
||||||
|
@ -123,9 +123,6 @@ public class InOutGenerate extends SvrProcess
|
||||||
m_movementDate = new Timestamp(System.currentTimeMillis());
|
m_movementDate = new Timestamp(System.currentTimeMillis());
|
||||||
} else
|
} else
|
||||||
m_movementDate = p_DateShipped;
|
m_movementDate = p_DateShipped;
|
||||||
// DocAction check
|
|
||||||
if (!DocAction.ACTION_Complete.equals(p_docAction))
|
|
||||||
p_docAction = DocAction.ACTION_Prepare;
|
|
||||||
}
|
}
|
||||||
} // prepare
|
} // prepare
|
||||||
|
|
||||||
|
@ -244,7 +241,7 @@ public class InOutGenerate extends SvrProcess
|
||||||
if (!p_IsUnconfirmedInOut)
|
if (!p_IsUnconfirmedInOut)
|
||||||
where.append(" AND NOT EXISTS (SELECT * FROM M_InOutLine iol")
|
where.append(" AND NOT EXISTS (SELECT * FROM M_InOutLine iol")
|
||||||
.append(" INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID) ")
|
.append(" INNER JOIN M_InOut io ON (iol.M_InOut_ID=io.M_InOut_ID) ")
|
||||||
.append("WHERE iol.C_OrderLine_ID=C_OrderLine.C_OrderLine_ID AND io.DocStatus IN ('IP','WC'))");
|
.append("WHERE iol.C_OrderLine_ID=C_OrderLine.C_OrderLine_ID AND io.DocStatus IN ('DR','IN','IP','WC'))");
|
||||||
// Deadlock Prevention - Order by M_Product_ID
|
// Deadlock Prevention - Order by M_Product_ID
|
||||||
MOrderLine[] lines = order.getLines (where.toString(), "C_BPartner_Location_ID, M_Product_ID");
|
MOrderLine[] lines = order.getLines (where.toString(), "C_BPartner_Location_ID, M_Product_ID");
|
||||||
for (int i = 0; i < lines.length; i++)
|
for (int i = 0; i < lines.length; i++)
|
||||||
|
@ -269,7 +266,7 @@ public class InOutGenerate extends SvrProcess
|
||||||
BigDecimal unconfirmedShippedQty = Env.ZERO;
|
BigDecimal unconfirmedShippedQty = Env.ZERO;
|
||||||
if (p_IsUnconfirmedInOut && product != null && toDeliver.signum() != 0)
|
if (p_IsUnconfirmedInOut && product != null && toDeliver.signum() != 0)
|
||||||
{
|
{
|
||||||
String where2 = "EXISTS (SELECT * FROM M_InOut io WHERE io.M_InOut_ID=M_InOutLine.M_InOut_ID AND io.DocStatus IN ('IP','WC'))";
|
String where2 = "EXISTS (SELECT * FROM M_InOut io WHERE io.M_InOut_ID=M_InOutLine.M_InOut_ID AND io.DocStatus IN ('DR','IN','IP','WC'))";
|
||||||
MInOutLine[] iols = MInOutLine.getOfOrderLine(getCtx(),
|
MInOutLine[] iols = MInOutLine.getOfOrderLine(getCtx(),
|
||||||
line.getC_OrderLine_ID(), where2, null);
|
line.getC_OrderLine_ID(), where2, null);
|
||||||
for (int j = 0; j < iols.length; j++)
|
for (int j = 0; j < iols.length; j++)
|
||||||
|
@ -573,12 +570,14 @@ public class InOutGenerate extends SvrProcess
|
||||||
private void completeShipment()
|
private void completeShipment()
|
||||||
{
|
{
|
||||||
if (m_shipment != null)
|
if (m_shipment != null)
|
||||||
|
{
|
||||||
|
if (!DocAction.ACTION_None.equals(p_docAction))
|
||||||
{
|
{
|
||||||
// Fails if there is a confirmation
|
// Fails if there is a confirmation
|
||||||
if (!m_shipment.processIt(p_docAction)) {
|
if (!m_shipment.processIt(p_docAction)) {
|
||||||
log.warning("Failed: " + m_shipment);
|
log.warning("Failed: " + m_shipment);
|
||||||
throw new IllegalStateException("Shipment Process Failed: " + m_shipment + " - " + m_shipment.getProcessMsg());
|
throw new IllegalStateException("Shipment Process Failed: " + m_shipment + " - " + m_shipment.getProcessMsg());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_shipment.saveEx();
|
m_shipment.saveEx();
|
||||||
String message = Msg.parseTranslation(getCtx(), "@ShipmentProcessed@ " + m_shipment.getDocumentNo());
|
String message = Msg.parseTranslation(getCtx(), "@ShipmentProcessed@ " + m_shipment.getDocumentNo());
|
||||||
|
|
|
@ -143,7 +143,7 @@ public class VInOutGen extends InOutGen implements FormPanel, ActionListener, Ve
|
||||||
// Document Action Prepared/ Completed
|
// Document Action Prepared/ Completed
|
||||||
MLookup docActionL = MLookupFactory.get(Env.getCtx(), m_WindowNo, 4324 /* M_InOut.DocStatus */,
|
MLookup docActionL = MLookupFactory.get(Env.getCtx(), m_WindowNo, 4324 /* M_InOut.DocStatus */,
|
||||||
DisplayType.List, Env.getLanguage(Env.getCtx()), "DocAction", 135 /* _Document Action */,
|
DisplayType.List, Env.getLanguage(Env.getCtx()), "DocAction", 135 /* _Document Action */,
|
||||||
false, "AD_Ref_List.Value IN ('CO','PR')");
|
false, "AD_Ref_List.Value IN ('CO','PR','--')");
|
||||||
docAction = new VLookup("DocAction", true, false, true,docActionL);
|
docAction = new VLookup("DocAction", true, false, true,docActionL);
|
||||||
docAction.addVetoableChangeListener(this);
|
docAction.addVetoableChangeListener(this);
|
||||||
// C_Order.C_BPartner_ID
|
// C_Order.C_BPartner_ID
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class WInOutGen extends InOutGen implements IFormController, EventListene
|
||||||
lDocAction.setText(Msg.translate(Env.getCtx(), "DocAction"));
|
lDocAction.setText(Msg.translate(Env.getCtx(), "DocAction"));
|
||||||
MLookup docActionL = MLookupFactory.get(Env.getCtx(), form.getWindowNo(), 4324 /* M_InOut.DocAction */,
|
MLookup docActionL = MLookupFactory.get(Env.getCtx(), form.getWindowNo(), 4324 /* M_InOut.DocAction */,
|
||||||
DisplayType.List, Env.getLanguage(Env.getCtx()), "DocAction", 135 /* _Document Action */,
|
DisplayType.List, Env.getLanguage(Env.getCtx()), "DocAction", 135 /* _Document Action */,
|
||||||
false, "AD_Ref_List.Value IN ('CO','PR')");
|
false, "AD_Ref_List.Value IN ('CO','PR','--')");
|
||||||
docAction = new WTableDirEditor("DocAction", true, false, true,docActionL);
|
docAction = new WTableDirEditor("DocAction", true, false, true,docActionL);
|
||||||
docAction.setValue(DocAction.ACTION_Complete);
|
docAction.setValue(DocAction.ACTION_Complete);
|
||||||
// docAction.addValueChangeListener(this); // IDEMPIERE-768
|
// docAction.addValueChangeListener(this); // IDEMPIERE-768
|
||||||
|
|
Loading…
Reference in New Issue