/****************************************************************************** * 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 * *****************************************************************************/ package org.compiere.model; import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.Timestamp; import java.util.Properties; import java.util.logging.Level; import org.adempiere.base.Core; import org.adempiere.base.IProductPricing; import org.adempiere.model.GridTabWrapper; import org.compiere.util.Env; /** * Requisition Callouts * @author Jorg Janke * @version $Id: CalloutRequisition.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $ */ public class CalloutRequisition extends CalloutEngine { /** * Requisition Line - Product. * - PriceStd * @param ctx context * @param WindowNo current Window No * @param mTab Grid Tab * @param mField Grid Field * @param value New Value * @return null or error message */ public String product (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value) { Integer M_Product_ID = (Integer)value; if (M_Product_ID == null || M_Product_ID.intValue() == 0) return ""; final I_M_Requisition req = GridTabWrapper.create(mTab.getParentTab(), I_M_Requisition.class); final I_M_RequisitionLine line = GridTabWrapper.create(mTab, I_M_RequisitionLine.class); setPrice(ctx, WindowNo, req, line); MProduct product = MProduct.get(ctx, M_Product_ID); line.setC_UOM_ID(product.getC_UOM_ID()); return ""; } // product /** * Requisition line - Qty * - Price, LineNetAmt * @param ctx context * @param WindowNo current Window No * @param mTab Grid Tab * @param mField Grid Field * @param value New Value * @return null or error message */ public String amt (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value) { if (isCalloutActive() || value == null) return ""; final I_M_Requisition req = GridTabWrapper.create(mTab.getParentTab(), I_M_Requisition.class); final I_M_RequisitionLine line = GridTabWrapper.create(mTab, I_M_RequisitionLine.class); // Qty changed - recalc price if (mField.getColumnName().equals(I_M_RequisitionLine.COLUMNNAME_Qty) && "Y".equals(Env.getContext(ctx, WindowNo, "DiscountSchema"))) { setPrice(ctx, WindowNo, req, line); } int StdPrecision = Env.getContextAsInt(ctx, WindowNo, "StdPrecision"); BigDecimal Qty = line.getQty(); BigDecimal PriceActual = line.getPriceActual(); if (log.isLoggable(Level.FINE)) log.fine("amt - Qty=" + Qty + ", Price=" + PriceActual + ", Precision=" + StdPrecision); // Multiply BigDecimal LineNetAmt = Qty.multiply(PriceActual); if (LineNetAmt.scale() > StdPrecision) LineNetAmt = LineNetAmt.setScale(StdPrecision, RoundingMode.HALF_UP); line.setLineNetAmt(LineNetAmt); if (log.isLoggable(Level.INFO)) log.info("amt - LineNetAmt=" + LineNetAmt); // return ""; } // amt private void setPrice(Properties ctx, int WindowNo, I_M_Requisition req, I_M_RequisitionLine line) { int C_BPartner_ID = line.getC_BPartner_ID(); BigDecimal Qty = line.getQty(); boolean isSOTrx = false; IProductPricing pp = Core.getProductPricing(); pp.setInitialValues(line.getM_Product_ID(), C_BPartner_ID, Qty, isSOTrx, null); // int M_PriceList_ID = req.getM_PriceList_ID(); pp.setM_PriceList_ID(M_PriceList_ID); int M_PriceList_Version_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_Version_ID"); pp.setM_PriceList_Version_ID(M_PriceList_Version_ID); Timestamp orderDate = req.getDateRequired(); pp.setPriceDate(orderDate); // line.setPriceActual(pp.getPriceStd()); Env.setContext(ctx, WindowNo, "EnforcePriceLimit", pp.isEnforcePriceLimit() ? "Y" : "N"); // not used Env.setContext(ctx, WindowNo, "DiscountSchema", pp.isDiscountSchema() ? "Y" : "N"); } } // CalloutRequisition