IDEMPIERE-3431 Posting error for Matched PO if invoice posted while MR is not posted
This commit is contained in:
parent
bfd3b422d4
commit
a0d891f419
|
@ -555,6 +555,12 @@ public abstract class Doc
|
||||||
p_Error = loadDocumentDetails();
|
p_Error = loadDocumentDetails();
|
||||||
if (p_Error != null)
|
if (p_Error != null)
|
||||||
return p_Error;
|
return p_Error;
|
||||||
|
if (isDeferPosting())
|
||||||
|
{
|
||||||
|
unlock();
|
||||||
|
p_Status = STATUS_NotPosted;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
Trx trx = Trx.get(getTrxName(), true);
|
Trx trx = Trx.get(getTrxName(), true);
|
||||||
// Delete existing Accounting
|
// Delete existing Accounting
|
||||||
|
@ -2304,4 +2310,11 @@ public abstract class Doc
|
||||||
public ArrayList<Fact> getFacts() {
|
public ArrayList<Fact> getFacts() {
|
||||||
return m_fact;
|
return m_fact;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return document whether need to defer posting or not
|
||||||
|
*/
|
||||||
|
public boolean isDeferPosting() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} // Doc
|
} // Doc
|
||||||
|
|
|
@ -77,6 +77,7 @@ public class Doc_MatchPO extends Doc
|
||||||
private ProductCost m_pc;
|
private ProductCost m_pc;
|
||||||
private int m_M_AttributeSetInstance_ID = 0;
|
private int m_M_AttributeSetInstance_ID = 0;
|
||||||
private MMatchPO m_matchPO;
|
private MMatchPO m_matchPO;
|
||||||
|
private boolean m_deferPosting = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load Specific Document Details
|
* Load Specific Document Details
|
||||||
|
@ -102,7 +103,25 @@ public class Doc_MatchPO extends Doc
|
||||||
//
|
//
|
||||||
m_pc = new ProductCost (Env.getCtx(),
|
m_pc = new ProductCost (Env.getCtx(),
|
||||||
getM_Product_ID(), m_M_AttributeSetInstance_ID, getTrxName());
|
getM_Product_ID(), m_M_AttributeSetInstance_ID, getTrxName());
|
||||||
m_pc.setQty(getQty());
|
m_pc.setQty(getQty());
|
||||||
|
|
||||||
|
if (m_M_InOutLine_ID == 0)
|
||||||
|
{
|
||||||
|
MMatchPO[] matchPOs = MMatchPO.getOrderLine(getCtx(), m_oLine.getC_OrderLine_ID(), getTrxName());
|
||||||
|
for (MMatchPO matchPO : matchPOs)
|
||||||
|
{
|
||||||
|
if (matchPO.getM_InOutLine_ID() > 0 && matchPO.getC_InvoiceLine_ID() == 0)
|
||||||
|
{
|
||||||
|
m_M_InOutLine_ID = matchPO.getM_InOutLine_ID();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_M_InOutLine_ID == 0) // Defer posting if not matched to Shipment
|
||||||
|
{
|
||||||
|
m_deferPosting = true;
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
} // loadDocumentDetails
|
} // loadDocumentDetails
|
||||||
|
|
||||||
|
@ -487,4 +506,11 @@ public class Doc_MatchPO extends Doc
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDeferPosting() {
|
||||||
|
return m_deferPosting;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // Doc_MatchPO
|
} // Doc_MatchPO
|
||||||
|
|
|
@ -34,6 +34,7 @@ import org.compiere.model.MClient;
|
||||||
import org.compiere.model.MCost;
|
import org.compiere.model.MCost;
|
||||||
import org.compiere.model.MOrgInfo;
|
import org.compiere.model.MOrgInfo;
|
||||||
import org.compiere.model.MRole;
|
import org.compiere.model.MRole;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
import org.compiere.model.MUser;
|
import org.compiere.model.MUser;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
@ -224,7 +225,6 @@ public class AcctProcessor extends AdempiereServer
|
||||||
rs = pstmt.executeQuery();
|
rs = pstmt.executeQuery();
|
||||||
while (!isInterrupted() && rs.next())
|
while (!isInterrupted() && rs.next())
|
||||||
{
|
{
|
||||||
count[i]++;
|
|
||||||
boolean ok = true;
|
boolean ok = true;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -238,6 +238,17 @@ public class AcctProcessor extends AdempiereServer
|
||||||
}
|
}
|
||||||
if (!ok)
|
if (!ok)
|
||||||
countError[i]++;
|
countError[i]++;
|
||||||
|
else // only count the posted record.
|
||||||
|
{
|
||||||
|
MTable table = MTable.get(Env.getCtx(), AD_Table_ID);
|
||||||
|
int Record_ID = rs.getInt(table.getKeyColumns()[0]);
|
||||||
|
sql = new StringBuffer("SELECT COUNT(*) FROM ").append(table.getTableName());
|
||||||
|
sql.append(" WHERE Posted='Y' AND ").append(table.getTableName()).append("_ID=").append(Record_ID);
|
||||||
|
int no = DB.getSQLValue(null, sql.toString());
|
||||||
|
if (no > 0 )
|
||||||
|
count[i]++;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
Loading…
Reference in New Issue