BF2003790 BOM Verify - root insert error

This commit is contained in:
tspc 2008-07-14 04:23:53 +00:00
parent a5a40bdb81
commit 7f3483d363
3 changed files with 221 additions and 0 deletions

View File

@ -0,0 +1,171 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
* Portions created by Carlos Ruiz are Copyright (C) 2005 QSS Ltda.
* Contributor(s): Carlos Ruiz (globalqss)
*****************************************************************************/
package org.eevolution.process;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import org.compiere.model.X_M_Product;
import org.compiere.process.ProcessInfoParameter;
import org.compiere.process.SvrProcess;
import org.compiere.util.AdempiereUserError;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.ValueNamePair;
import org.eevolution.model.MPPProductBOM;
import org.eevolution.model.MPPProductBOMLine;
/**
* Title: Check BOM Structure (free of cycles) Description: Tree cannot contain
* BOMs which are already referenced
*
* @author Tony Snook (tspc)
*
*/
public class PP_Product_BOM_Check extends SvrProcess
{
/** The Record */
private int p_Record_ID = 0;
/**
* Prepare - e.g., get Parameters.
*/
protected void prepare()
{
ProcessInfoParameter[] para = getParameter();
for (int i = 0; i < para.length; i++)
{
String name = para[i].getParameterName();
if (para[i].getParameter() == null)
;
else
log.log(Level.SEVERE, "Unknown Parameter: " + name);
}
p_Record_ID = getRecord_ID();
} // prepare
/**
* Process
*
* @return message
* @throws Exception
*/
protected String doIt() throws Exception
{
int bomid = 0;
int lowlevel = 0;
log.info("Check BOM Structure");
// Record ID is M_Product_ID of product to be tested
X_M_Product xp = new X_M_Product(Env.getCtx(), p_Record_ID, get_TrxName());
if (!xp.isBOM())
{
log.info("Product is not a BOM");
// No BOM - should not happen, but no problem
return "OK";
}
// Check Parent Level
MPPProductBOMLine bomline = new MPPProductBOMLine(getCtx(), 0, get_TrxName());
try
{
lowlevel = bomline.getLowLevel(p_Record_ID);
}
catch (Exception e)
{
raiseError("BOM Loop Error: ", e.getCause().getLocalizedMessage());
}
xp.setLowLevel(lowlevel);
xp.setIsVerified(true);
xp.save(get_TrxName());
// Get BOM ID for default BOM (where BOM search key equals Product
// search key)
String sql = new String("SELECT PP_Product_BOM_ID FROM PP_Product_BOM pb " + "LEFT JOIN M_Product p ON pb.M_Product_ID = p.M_Product_ID "
+ "WHERE pb.M_Product_ID = ? AND pb.value = p.value ");
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, p_Record_ID);
rs = pstmt.executeQuery();
if (rs.next())
bomid = rs.getInt(1);
else
raiseError("No Default BOM found: ", "Check BOM Parent search key");
}
catch (SQLException e)
{
log.severe("Error getting BOM_ID for product: " + e + "\n" + sql);
return "@Error@";
}
finally
{
rs.close();
pstmt.close();
}
// Check All BOM Lines
MPPProductBOM tbom = new MPPProductBOM(getCtx(), bomid, get_TrxName());
if (tbom.getM_Product_ID() != 0)
{
MPPProductBOMLine[] tbomlines = tbom.getLines();
for (MPPProductBOMLine tbomline : tbomlines)
{
xp = new X_M_Product(Env.getCtx(), tbomline.getM_Product_ID(), get_TrxName());
lowlevel = 0;
try
{
lowlevel = bomline.getLowLevel(tbomline.getM_Product_ID());
}
catch (Exception e)
{
raiseError("BOM Loop Error: ", e.getLocalizedMessage());
}
xp.setLowLevel(lowlevel);
xp.setIsVerified(true);
xp.save(get_TrxName());
}
}
return "OK";
} // doIt
private void raiseError(String string, String hint) throws Exception
{
DB.rollback(false, get_TrxName());
X_M_Product xp = new X_M_Product(getCtx(), p_Record_ID, null); // parent
xp.setIsVerified(false); // set BOM not verified
xp.save();
String msg = string;
ValueNamePair pp = CLogger.retrieveError();
if (pp != null) msg = pp.getName() + " - ";
msg += hint;
throw new AdempiereUserError(msg);
}
} // M_Product_BOM_Check

View File

@ -0,0 +1,25 @@
-- Jul 7, 2008 1:24:00 PM EST
-- Default comment for updating dictionary
UPDATE AD_Process SET Classname='org.eevolution.process.PP_Product_BOM_Check', Value='PP_Product_BOM',Updated=TO_DATE('2008-07-07 13:24:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=136
;
-- Jul 7, 2008 1:26:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Process SET Description='Verify BOM Structure and Update Low Level',Updated=TO_DATE('2008-07-07 13:26:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=136
;
-- Jul 7, 2008 1:26:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Process_Trl SET IsTranslated='N' WHERE AD_Process_ID=136
;
-- Jul 7, 2008 1:28:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Field SET Description='Verify BOM Structure and Update Low Level', DisplayLogic='@IsSummary@=''N'' & @IsBOM@=''Y''',Updated=TO_DATE('2008-07-07 13:28:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=3747
;
-- Jul 7, 2008 1:28:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Field_Trl SET IsTranslated='N' WHERE AD_Field_ID=3747
;

View File

@ -0,0 +1,25 @@
-- Jul 7, 2008 1:24:00 PM EST
-- Default comment for updating dictionary
UPDATE AD_Process SET Classname='org.eevolution.process.PP_Product_BOM_Check', Value='PP_Product_BOM',Updated=TO_TIMESTAMP('2008-07-07 13:24:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=136
;
-- Jul 7, 2008 1:26:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Process SET Description='Verify BOM Structure and Update Low Level',Updated=TO_TIMESTAMP('2008-07-07 13:26:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=136
;
-- Jul 7, 2008 1:26:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Process_Trl SET IsTranslated='N' WHERE AD_Process_ID=136
;
-- Jul 7, 2008 1:28:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Field SET Description='Verify BOM Structure and Update Low Level', DisplayLogic='@IsSummary@=''N'' & @IsBOM@=''Y''',Updated=TO_TIMESTAMP('2008-07-07 13:28:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=3747
;
-- Jul 7, 2008 1:28:22 PM EST
-- Default comment for updating dictionary
UPDATE AD_Field_Trl SET IsTranslated='N' WHERE AD_Field_ID=3747
;