/** * Set Value, Name, Description * @param shipment shipment * @param deliveryCount count * @param product product * @param partner partner */ public void SetValueNameDescription(MInOut shipment, int deliveryCount, VAdvantage.Model.MProduct product, MBPartner partner) { String documentNo = "_" + shipment.GetDocumentNo(); if (deliveryCount > 1) { documentNo += "_" + deliveryCount; } // Value String value = partner.GetValue() + "_" + product.GetValue(); if (value.Length > 40 - documentNo.Length) { value = value.Substring(0, 40 - documentNo.Length) + documentNo; } // Change to set Value from Document Sequence // SetValue(value); // Change to set only name of product as value in Asset // Name MProduct.afterSave // String name = partner.GetName() + " - " + product.GetName(); String name = product.GetName(); if (name.Length > 60) { name = name.Substring(0, 60); } SetName(name); // Description String description = product.GetDescription(); SetDescription(description); }
} // setM_Product_ID /// <summary> /// Set (default) Locator based on qty. /// /// </summary> /// <param name="Qty">Qty quantity</param> public void SetM_Locator_ID(Decimal Qty) { // Locator established if (GetM_Locator_ID() != 0) { return; } // No Product if (GetM_Product_ID() == 0) { Set_ValueNoCheck("M_Locator_ID", null); return; } VAdvantage.Model.MOrg org = new VAdvantage.Model.MOrg(GetCtx(), GetAD_Org_ID(), Get_TrxName()); // Get existing Location int M_Locator_ID = VAdvantage.Model.MStorage.GetM_Locator_ID(org.GetM_Warehouse_ID(), GetM_Product_ID(), GetM_AttributeSetInstance_ID(), Qty, Get_TrxName()); // Get default Location if (M_Locator_ID == 0) { VAdvantage.Model.MProduct product = VAdvantage.Model.MProduct.Get(GetCtx(), GetM_Product_ID()); M_Locator_ID = VAdvantage.Model.MProductLocator.GetFirstM_Locator_ID(product, org.GetM_Warehouse_ID()); if (M_Locator_ID == 0) { VAdvantage.Model.MWarehouse wh = VAdvantage.Model.MWarehouse.Get(GetCtx(), org.GetM_Warehouse_ID()); M_Locator_ID = wh.GetDefaultM_Locator_ID(); } } base.SetM_Locator_ID(M_Locator_ID); } // setM_Locator_ID
/** * Set Value Name Description * @param shipment shipment * @param line line * @param deliveryCount */ public void SetValueNameDescription(MInOut shipment, MInOutLine line, int deliveryCount) { VAdvantage.Model.MProduct product = line.GetProduct(); MBPartner partner = shipment.GetBPartner(); SetValueNameDescription(shipment, deliveryCount, product, partner); }
public bool GetExcludeEntry(int productId, int adColumn, int windowNo, Ctx ctx) { bool exclude = true; VAdvantage.Model.MProduct product = VAdvantage.Model.MProduct.Get(ctx, productId); int M_AttributeSet_ID = product.GetM_AttributeSet_ID(); if (M_AttributeSet_ID != 0) { VAdvantage.Model.MAttributeSet mas = VAdvantage.Model.MAttributeSet.Get(ctx, M_AttributeSet_ID); exclude = mas.ExcludeEntry(adColumn, ctx.IsSOTrx(windowNo)); } return(exclude); }
/// <summary> /// Set Product /// </summary> /// <param name="product">product product</param> public void SetProduct(VAdvantage.Model.MProduct product) { if (product != null) { SetM_Product_ID(product.GetM_Product_ID()); SetC_UOM_ID(product.GetC_UOM_ID()); } else { SetM_Product_ID(0); Set_ValueNoCheck("C_UOM_ID", null); } SetM_AttributeSetInstance_ID(0); } // setProduct
/** * verifyQuantity - checks that the warehouse specified in the work order transaction * has sufficient quantity of the product * @param product * @param wot * @param qty * @param asiID * @return error message if any, else Quantity Available */ private String VerifyQuantity(VAdvantage.Model.MProduct product, ViennaAdvantage.Model.MVAMFGMWrkOdrTransaction wot, Decimal qty, int asiID) { if (product.IsStocked()) { ViennaAdvantage.Model.MVAMFGMWorkOrder wo = new ViennaAdvantage.Model.MVAMFGMWorkOrder(wot.GetCtx(), wot.GetVAMFG_M_WorkOrder_ID(), wot.Get_TrxName()); int M_Warehouse_ID = wo.GetM_Warehouse_ID(); //logic change by Raghu //Decimal available = ViennaAdvantage.Model.Storage.GetQtyAvailable //(M_Warehouse_ID, product.GetM_Product_ID(), asiID, null); // during creation of production execution line, reserverd qty to be checked or not Decimal?available = 0.0M; if (VAdvantage.Utility.Util.GetValueOfString(wot.GetConsiderReservedQty()) == "N") { try { available = MStorage.GetQtyAvailableWithoutReserved (M_Warehouse_ID, product.GetM_Product_ID(), asiID, null); } catch { return(Msg.GetMsg(wot.GetCtx(), "PleaseUpdateVAFramework")); } } else { available = MStorage.GetQtyAvailable (M_Warehouse_ID, product.GetM_Product_ID(), asiID, null); } if (available == null) { available = Env.ZERO; } if (Env.Signum(available.Value) == 0) { return(Msg.GetMsg(wot.GetCtx(), "NoQtyAvailable", "0")); } else if (available.Value.CompareTo(qty) < 0) { return(Msg.GetMsg(wot.GetCtx(), "InsufficientQtyAvailable", available.ToString())); } } return(Msg.GetMsg(wot.GetCtx(), "QtyAvailable")); } // verifyQuantity
} // beforeSave /// <summary> /// Set Product - Callout /// </summary> /// <param name="oldM_Product_ID"></param> /// <param name="newM_Product_ID"></param> /// <param name="windowNo"></param> public void SetM_Product_ID(String oldM_Product_ID, String newM_Product_ID, int windowNo) { // If Product is set to null, reset BOM. if (newM_Product_ID == null || newM_Product_ID.Length == 0) { Set_ValueNoCheck("C_UOM_ID", null); return; } int M_Product_ID = VAdvantage.Utility.Util.GetValueOfInt(newM_Product_ID); if (M_Product_ID == 0) { Set_ValueNoCheck("C_UOM_ID", null); return; } // Set UOM from Product VAdvantage.Model.MProduct product = new VAdvantage.Model.MProduct(Env.GetCtx(), M_Product_ID, null); SetC_UOM_ID(product.GetC_UOM_ID()); } // setM_Product_ID
} // setRequiredColumns /// <summary> /// Set Product - Callout /// </summary> /// <param name="oldM_Product_ID"> oldM_Product_ID old value</param> /// <param name="newM_Product_ID">newM_Product_ID new value</param> /// <param name="windowNo">windowNo window</param> public void SetM_Product_ID(String oldM_Product_ID, String newM_Product_ID, int windowNo) { if (newM_Product_ID == null || newM_Product_ID.Length == 0) { SetM_AttributeSetInstance_ID(0); return; } int M_Product_ID = VAdvantage.Utility.Util.GetValueOfInt(newM_Product_ID); base.SetM_Product_ID(M_Product_ID); //SetM_Product_ID(M_Product_ID); if (M_Product_ID == 0) { SetM_AttributeSetInstance_ID(0); return; } // Set Attribute int M_AttributeSetInstance_ID = GetCtx().GetContextAsInt(EnvConstants.WINDOW_INFO, EnvConstants.TAB_INFO, "M_AttributeSetInstance_ID"); if (GetCtx().GetContextAsInt(EnvConstants.WINDOW_INFO, EnvConstants.TAB_INFO, "M_Product_ID") == M_Product_ID && M_AttributeSetInstance_ID != 0) { SetM_AttributeSetInstance_ID(M_AttributeSetInstance_ID); } else { SetM_AttributeSetInstance_ID(0); } VAdvantage.Model.MProduct product = VAdvantage.Model.MProduct.Get(GetCtx(), M_Product_ID); // SetC_UOM_ID(product.GetC_UOM_ID()); } // setM_Product_ID
/** * After Save * @param newRecord new * @param success success * @return success */ protected override bool AfterSave(bool newRecord, bool success) { if (!success) { return(success); } VAdvantage.Model.MProduct current = new VAdvantage.Model.MProduct(GetCtx(), GetM_Product_ID(), Get_Trx()); StringBuilder _sql = new StringBuilder(""); //_sql.Append("Select count(*) from ad_table where tablename like 'FRPT_Product_Category_Acct'"); _sql.Append("SELECT count(*) FROM all_objects WHERE object_type IN ('TABLE') AND (object_name) = UPPER('FRPT_Product_Category_Acct') AND OWNER LIKE '" + DB.GetSchema() + "'"); int count = Util.GetValueOfInt(DB.ExecuteScalar(_sql.ToString())); if (count > 0) { PO obj = null; //MFRPTProductAcct obj = null; int _MProduct_ID = GetM_Product_ID(); int _PCategory_ID = GetM_Product_Category_ID(); string sql = "SELECT L.VALUE FROM AD_REF_LIST L inner join AD_Reference r on R.AD_REFERENCE_ID=L.AD_REFERENCE_ID where r.name='FRPT_RelatedTo' and l.name='Product'"; //"select VALUE from AD_Ref_List where name='Product'"; string _RelatedToProduct = Convert.ToString(DB.ExecuteScalar(sql)); //string _RelatedToProduct = X_FRPT_AcctDefault.FRPT_RELATEDTO_Product.ToString(); _sql.Clear(); _sql.Append("Select Count(*) From FRPT_Product_Acct where M_Product_ID=" + _MProduct_ID + " AND IsActive = 'Y' AND AD_Client_ID = " + GetAD_Client_ID()); int value = Util.GetValueOfInt(DB.ExecuteScalar(_sql.ToString())); if (value < 1) { _sql.Clear(); _sql.Append("Select PCA.c_acctschema_id, PCA.c_validcombination_id, PCA.frpt_acctdefault_id From FRPT_product_category_acct PCA inner join frpt_acctdefault ACC ON acc.frpt_acctdefault_id= PCA.frpt_acctdefault_id where PCA.m_product_category_id=" + _PCategory_ID + " and acc.frpt_relatedto=" + _RelatedToProduct + " AND PCA.IsActive = 'Y' AND PCA.AD_Client_ID = " + GetAD_Client_ID()); //_sql.Append("Select C_AcctSchema_ID, C_ValidCombination_ID, FRPT_AcctDefault_ID from FRPT_product_category_acct where m_product_category_id =" + _PCategory_ID); DataSet ds = DB.ExecuteDataset(_sql.ToString()); if (ds.Tables != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { //obj = new MFRPTProductAcct(GetCtx(), 0, null); obj = MTable.GetPO(GetCtx(), "FRPT_Product_Acct", 0, null); obj.Set_ValueNoCheck("AD_Org_ID", 0); obj.Set_ValueNoCheck("M_Product_ID", _MProduct_ID); obj.Set_ValueNoCheck("C_AcctSchema_ID", Util.GetValueOfInt(ds.Tables[0].Rows[i]["C_AcctSchema_ID"])); obj.Set_ValueNoCheck("C_ValidCombination_ID", Util.GetValueOfInt(ds.Tables[0].Rows[i]["C_ValidCombination_ID"])); obj.Set_ValueNoCheck("FRPT_AcctDefault_ID", Util.GetValueOfInt(ds.Tables[0].Rows[i]["FRPT_AcctDefault_ID"])); if (!obj.Save()) { } } } } // Change by mohit amortization process //int _CountVA038 = Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='VA038_' AND IsActive = 'Y'")); //if (_CountVA038 > 0) //{ // if (GetProductType() == "E" || GetProductType() == "S") // { // if (Util.GetValueOfInt(Get_Value("VA038_AmortizationTemplate_ID")) > 0) // { // DataSet _dsAcct = DB.ExecuteDataset("SELECT C_AcctSchema_ID, FRPT_AcctDefault_ID, C_VALIDCOMBINATION_ID, SEQNO FROM VA038_Amortization_Acct " // + "WHERE IsActive='Y' AND VA038_AmortizationTemplate_ID=" + Util.GetValueOfInt(Get_Value("VA038_AmortizationTemplate_ID"))); // if (_dsAcct != null && _dsAcct.Tables[0].Rows.Count > 0) // { // for (int j = 0; j < _dsAcct.Tables[0].Rows.Count; j++) // { // obj = MTable.GetPO(GetCtx(), "FRPT_Product_Acct", 0, null); // obj.Set_ValueNoCheck("AD_Org_ID", 0); // obj.Set_ValueNoCheck("M_Product_ID", _MProduct_ID); // obj.Set_ValueNoCheck("C_AcctSchema_ID", Util.GetValueOfInt(_dsAcct.Tables[0].Rows[j]["C_AcctSchema_ID"])); // obj.Set_ValueNoCheck("C_ValidCombination_ID", Util.GetValueOfInt(_dsAcct.Tables[0].Rows[j]["C_ValidCombination_ID"])); // obj.Set_ValueNoCheck("FRPT_AcctDefault_ID", Util.GetValueOfInt(_dsAcct.Tables[0].Rows[j]["FRPT_AcctDefault_ID"])); // if (!obj.Save()) // { } // } // } // } // } //} // End amortization process } else { // By Amit //if (!success) // return success; // Value/Name change in Account if (!newRecord && (Is_ValueChanged("Value") || Is_ValueChanged("Name"))) { MAccount.UpdateValueDescription(GetCtx(), "M_Product_ID=" + GetM_Product_ID(), Get_TrxName()); } // Name/Description Change in Asset MAsset.setValueNameDescription if (!newRecord && (Is_ValueChanged("Name") || Is_ValueChanged("Description"))) { String sql = " UPDATE A_Asset a SET Name=(SELECT SUBSTR(bp.Name || ' - ' || p.Name,1,60) FROM M_Product p, C_BPartner bp WHERE p.M_Product_ID=a.M_Product_ID AND bp.C_BPartner_ID=a.C_BPartner_ID)," + "Description=(SELECT p.Description FROM M_Product p, C_BPartner bp WHERE p.M_Product_ID=a.M_Product_ID AND bp.C_BPartner_ID=a.C_BPartner_ID)" + "WHERE IsActive='Y' AND M_Product_ID=" + GetM_Product_ID(); int no = 0; try { no = Util.GetValueOfInt(DB.ExecuteQuery(sql, null, Get_TrxName())); } catch { } log.Fine("Asset Description updated #" + no); } // New - Acct, Tree, Old Costing if (newRecord) { if (String.IsNullOrEmpty(GetCtx().GetContext("#DEFAULT_ACCOUNTING_APPLICABLE")) || Util.GetValueOfString(GetCtx().GetContext("#DEFAULT_ACCOUNTING_APPLICABLE")) == "Y") { bool sucs = Insert_Accounting("M_Product_Acct", "M_Product_Category_Acct", "p.M_Product_Category_ID=" + GetM_Product_Category_ID()); //Karan. work done to show message if data not saved in accounting tab. but will save data in current tab. // Before this, data was being saved but giving message "record not saved". if (!sucs) { log.SaveWarning("AcctNotSaved", ""); } } // MAcctSchema[] mass = MAcctSchema.GetClientAcctSchema(GetCtx(), GetAD_Client_ID(), Get_TrxName()); for (int i = 0; i < mass.Length; i++) { // Old MProductCosting pcOld = new MProductCosting(current, mass[i].GetC_AcctSchema_ID()); pcOld.Save(); } } // New Costing // by Amit 22-12-2015 //if (newRecord || Is_ValueChanged("M_Product_Category_ID")) //{ // MCost.Create(this); //} } //22-12-2015 //by Amit for creating records ffor product foe all Costing Element whose costing elemnt type is 'Material' if (newRecord || Is_ValueChanged("M_Product_Category_ID")) { MCost.CreateRecords(current); } //20-12-2016 //By Vivek Chauhan saving Nutrition value against product........... object ModuleId = DB.ExecuteScalar("select ad_moduleinfo_id from ad_moduleinfo where prefix='VA019_' and isactive='Y'"); if (ModuleId != null && ModuleId != DBNull.Value) { object objNDBNo = DB.ExecuteScalar("select va019_ndbno from M_Product where m_product_ID=" + GetM_Product_ID() + ""); if (objNDBNo != null && objNDBNo != DBNull.Value) { CallNutritionApi(Convert.ToString(objNDBNo), GetM_Product_ID()); } } if (Is_Changed()) { string updatequery = "Update M_Product set GMT01_IsSpoorPosted='N' Where M_Product_ID=" + GetM_Product_ID(); int no = DB.ExecuteQuery(updatequery); } return(success); }
// API to generate component transaction lines in M_WorkOrderTransactionLine. It should be possible to generate component lines // for all push / pull components in a specific operation and all push / pull components in all operations in a work order /** * api to generate component transaction lines in M_WorkOrderTransactionLine. Skips Optional operations unless they are either the starting operation sequence or ending operation sequence in the list of operations specified * @param ctx * @param M_WorkOrderTransaction_ID Work Order Transaction * @param Qty Number of Work Order Product Assemblies for which to generate components * @param OperationFrom Starting operation sequence number * @param OperationTo Ending operation sequence number * @param SupplyType Component Supply Type. Valid values are P (Push), O (Operation Pull), A (Assembly Pull) * @param M_Locator_ID Supply Locator for the components in case of Push supply type * @param trx * @return Array of MVAMFGMWrkOdrTrnsctionLine */ public ViennaAdvantage.Model.MVAMFGMWrkOdrTrnsctionLine[] GenerateComponentTxnLine(Ctx ctx, int M_WorkOrderTransaction_ID, Decimal?Qty, Decimal?OperationFrom, Decimal?OperationTo, String SupplyType, int M_Locator_ID, Trx trx) { int _countGOM01 = 0; Tuple <String, String, String> mInfo = null; if (Env.HasModulePrefix("GOM01_", out mInfo)) { _countGOM01 = 1; } if (OperationFrom != null && OperationFrom.Value.CompareTo(OperationTo) > 0) { log.Severe("Operation Numbers not correct."); return(null); } ViennaAdvantage.Model.MVAMFGMWrkOdrTransaction wot = new ViennaAdvantage.Model.MVAMFGMWrkOdrTransaction(ctx, M_WorkOrderTransaction_ID, trx); if (0 == M_WorkOrderTransaction_ID || !((wot.GetDocStatus().Equals(X_VAMFG_M_WrkOdrTransaction.DOCSTATUS_Drafted) || wot.GetDocStatus().Equals(X_VAMFG_M_WrkOdrTransaction.DOCSTATUS_InProgress)) && (wot.GetVAMFG_WorkOrderTxnType().Equals(X_VAMFG_M_WrkOdrTransaction.VAMFG_WORKORDERTXNTYPE_1_ComponentIssueToWorkOrder) || wot.GetVAMFG_WorkOrderTxnType().Equals(X_VAMFG_M_WrkOdrTransaction.VAMFG_WORKORDERTXNTYPE_ComponentReturnFromWorkOrder)))) { log.Severe("Cannot create component lines against give WO Txn."); return(null); } if (Qty != null && Qty.Value.CompareTo(Decimal.Zero) <= 0) { log.Severe("Number of product assemblies must be positive"); return(null); } //ArrayList<MVAMFGMWrkOdrTrnsctionLine> wotLines = new ArrayList<MVAMFGMWrkOdrTrnsctionLine>(); // List<MVAMFGMWrkOdrTrnsctionLine> wotLines = new List<MVAMFGMWrkOdrTrnsctionLine>(); ArrayList wotLines = new ArrayList(); int lastMandatoryWOO = DB.GetSQLValue(trx, "SELECT MAX(VAMFG_SeqNo) FROM VAMFG_M_WorkOrderOperation " + "WHERE VAMFG_M_WorkOrder_ID = " + wot.GetVAMFG_M_WorkOrder_ID() + " AND VAMFG_IsOptional<>'Y'"); // automatically consider AssemblyPull Supply Type when the OperationTo is greater than the last Work Order Operation. // This in turn should take care of optional operations. bool assemblyPull = lastMandatoryWOO == OperationTo; StringBuilder response = new StringBuilder(""); // Getting the WorkOrder product assembly quantity Decimal woQty = DB.GetSQLValue(trx, "SELECT VAMFG_QtyEntered FROM VAMFG_M_WorkOrder " + "WHERE VAMFG_M_WorkOrder_ID = " + wot.GetVAMFG_M_WorkOrder_ID()); // Get component requirements based on the operations moved through in this transaction and then make lines StringBuilder sqlBuf = new StringBuilder("SELECT woc.M_Product_ID, woc.C_UOM_ID, woc.VAMFG_QtyRequired, " + " woc.VAMFG_SupplyType, woc.M_AttributeSetInstance_ID, woc.M_Locator_ID, woc.BasisType," + " woo.VAMFG_M_WorkOrderOperation_ID, woc.VAMFG_QtyAvailable, woc.VAMFG_QtySpent," + " woc.VAMFG_QtyAllocated, woc.VAMFG_QtyDedicated,woc.isqualitycorrection" + " FROM VAMFG_M_WorkOrderOperation woo INNER JOIN VAMFG_M_WorkOrderComponent woc ON woo.VAMFG_M_WorkOrderOperation_ID = woc.VAMFG_M_WorkOrderOperation_ID" + " WHERE woo.VAMFG_M_WorkOrder_ID = " + wot.GetVAMFG_M_WorkOrder_ID() + " AND woc.VAMFG_QtyRequired != 0 AND (woo.VAMFG_IsOptional <> 'Y' OR "); if (OperationFrom != null && OperationFrom.Value.CompareTo(Decimal.Zero) > 0) { sqlBuf.Append(" woo.VAMFG_SeqNo =" + VAdvantage.Utility.Util.GetValueOfInt(OperationFrom)); sqlBuf.Append(" OR woo.VAMFG_SeqNo =" + VAdvantage.Utility.Util.GetValueOfInt(OperationTo)); sqlBuf.Append(")"); } else { sqlBuf.Append(" woo.VAMFG_SeqNo =0"); sqlBuf.Append(" OR woo.VAMFG_SeqNo =0"); sqlBuf.Append(")"); } // Set OperationTo sequence no if (OperationTo != null && OperationTo.Value.CompareTo(Decimal.Zero) > 0) { sqlBuf.Append(" AND ((woo.VAMFG_SeqNo BETWEEN " + VAdvantage.Utility.Util.GetValueOfInt(OperationFrom) + " AND " + VAdvantage.Utility.Util.GetValueOfInt(OperationTo)); sqlBuf.Append(")"); } else { sqlBuf.Append(" AND ((woo.VAMFG_SeqNo BETWEEN " + lastMandatoryWOO + " AND 0"); sqlBuf.Append(")"); } if (assemblyPull) // if assembly pull, then get component lines from all operations except { sqlBuf.Append(" OR woc.VAMFG_SupplyType = 'A'"); } sqlBuf.Append(" ) ORDER BY woo.VAMFG_SeqNo, woc.M_Product_ID, woc.VAMFG_QtyRequired "); // close the statement and add ORDER BY clause String sql = sqlBuf.ToString(); // SqlParameter[] param = null; IDataReader idr = null; DataTable dt = new DataTable(); try { //pstmt.setInt(1, wot.GetVAMFG_M_WorkOrder_ID()); // woo.VAMFG_M_WorkOrder_ID //param = new SqlParameter[5]; //param[0] = new SqlParameter("@param1", wot.GetVAMFG_M_WorkOrder_ID()); //// Set OperationFrom sequence no //if (OperationFrom != null && OperationFrom.Value.CompareTo(Decimal.Zero) > 0) //{ // param[1] = new SqlParameter("@param2", VAdvantage.Utility.Util.GetValueOfInt(OperationFrom)); // param[3] = new SqlParameter("@param4", VAdvantage.Utility.Util.GetValueOfInt(OperationFrom)); // //pstmt.setInt(2, OperationFrom.intValue()); // //pstmt.setInt(4, OperationFrom.intValue()); //} //else //{ // param[1] = new SqlParameter("@param2", 0); // param[3] = new SqlParameter("@param4", 0); // //pstmt.setInt(2, 0); // //pstmt.setInt(4, 0); //} //// Set OperationTo sequence no //if (OperationTo != null && OperationTo.Value.CompareTo(Decimal.Zero) > 0) //{ // param[2] = new SqlParameter("@param3", VAdvantage.Utility.Util.GetValueOfInt(OperationTo)); // param[4] = new SqlParameter("@param5", VAdvantage.Utility.Util.GetValueOfInt(OperationTo)); // //pstmt.setInt(3, OperationTo.intValue()); // //pstmt.setInt(5, OperationTo.intValue()); //} //else //{ // param[2] = new SqlParameter("@param3", lastMandatoryWOO); // param[4] = new SqlParameter("@param5", 0); // //pstmt.setInt(3, lastMandatoryWOO); // //pstmt.setInt(5, 0); //} //rs = pstmt.executeQuery(); idr = DB.ExecuteReader(sql.ToString(), null, trx); //dt.Load(idr); //idr.Close(); int productID = 0; int uomID = 0; Decimal qtyEntered = Decimal.Zero; // Quantity in the Product Transaction Line Decimal QtyInKg = Decimal.Zero; // Quantity in KG at Product Transaction Line int asiID = 0; int locatorID = 0; // set the component line no to 10 greater than existing int compLineNo = DB.GetSQLValue(trx, "SELECT COALESCE(MAX(VAMFG_Line),0)+10 FROM VAMFG_M_WrkOdrTrnsctionLine " + "WHERE VAMFG_M_WrkOdrTransaction_ID =" + M_WorkOrderTransaction_ID); bool checkInventory = wot.GetVAMFG_WorkOrderTxnType().Equals(X_VAMFG_M_WrkOdrTransaction.VAMFG_WORKORDERTXNTYPE_1_ComponentIssueToWorkOrder); while (idr.Read()) { productID = VAdvantage.Utility.Util.GetValueOfInt(idr[0]); uomID = VAdvantage.Utility.Util.GetValueOfInt(idr[1]); Decimal qtyRequired = VAdvantage.Utility.Util.GetValueOfDecimal(idr[2]); String wocSupplyType = VAdvantage.Utility.Util.GetValueOfString(idr[3]); asiID = VAdvantage.Utility.Util.GetValueOfInt(idr[4]); locatorID = VAdvantage.Utility.Util.GetValueOfInt(idr[5]); String basisType = VAdvantage.Utility.Util.GetValueOfString(idr[6]); int wooID = VAdvantage.Utility.Util.GetValueOfInt(idr[7]); string IsQualityCorr = VAdvantage.Utility.Util.GetValueOfString(idr[12]); // If qty=0, then no value was passed for Qty // for Component Issue assume issue needs to be generated for remaining amount // for Component Return assume return needs to be generated for unused quantity Decimal qtyIssued = VAdvantage.Utility.Util.GetValueOfDecimal(idr[8]); Decimal qtySpent = VAdvantage.Utility.Util.GetValueOfDecimal(idr[9]); Decimal qtyAllocated = VAdvantage.Utility.Util.GetValueOfDecimal(idr[10]); Decimal qtyDedicated = VAdvantage.Utility.Util.GetValueOfDecimal(idr[11]); // continue if component line is quality correction if (IsQualityCorr == "Y") { continue; } if (Qty == null) { if (wot.GetVAMFG_WorkOrderTxnType().Equals(X_VAMFG_M_WrkOdrTransaction.VAMFG_WORKORDERTXNTYPE_1_ComponentIssueToWorkOrder)) { // qtyEntered = (qtyRequired.multiply(woQty)).subtract(qtyIssued).subtract(qtyAllocated).subtract(qtyDedicated); qtyEntered = Decimal.Subtract(Decimal.Subtract(Decimal.Subtract(Decimal.Multiply(qtyRequired, woQty), qtyIssued), qtyAllocated), qtyDedicated); } else // automatically assume ComponentReturn txn { qtyEntered = Decimal.Subtract(qtyIssued, qtySpent); } } else { qtyEntered = Decimal.Multiply(qtyRequired, Qty.Value); if (wot.GetVAMFG_WorkOrderTxnType().Equals(X_VAMFG_M_WrkOdrTransaction.VAMFG_WORKORDERTXNTYPE_ComponentReturnFromWorkOrder) //&& qtyEntered.setScale(MUOM.getPrecision(ctx, uomID), Decimal.ROUND_HALF_UP).compareTo(qtyIssued.subtract(qtySpent)) > 0) && Decimal.Round((qtyEntered), VAdvantage.Model.MUOM.GetPrecision(ctx, uomID), MidpointRounding.AwayFromZero).CompareTo(Decimal.Subtract(qtyIssued, qtySpent)) > 0) { log.Warning("Not enough quantities to return from Work Order"); continue; } } // For Pull type: If quantity requirement has been filled or there are not enough quantities to issue // then don't generate a line -> goto next line processing //if (qtyEntered.setScale(MUOM.getPrecision(ctx, uomID), Decimal.ROUND_HALF_UP).compareTo(Decimal.Zero) <= 0) // continue; if (Decimal.Round((qtyEntered), VAdvantage.Model.MUOM.GetPrecision(ctx, uomID), MidpointRounding.AwayFromZero).CompareTo(Decimal.Zero) <= 0) { continue; } if (SupplyType.Equals(wocSupplyType) || (wocSupplyType.Equals(X_VAMFG_M_WorkOrderComponent.VAMFG_SUPPLYTYPE_AssemblyPull) && assemblyPull && !SupplyType.Equals(X_VAMFG_M_WorkOrderComponent.VAMFG_SUPPLYTYPE_Push))) { ViennaAdvantage.Model.MVAMFGMWrkOdrTrnsctionLine compIssueLine = new ViennaAdvantage.Model.MVAMFGMWrkOdrTrnsctionLine(ctx, 0, trx); // set the client + org derived from the transaction header compIssueLine.SetClientOrg(wot); // Work done to add attributeset Instance ID for finished products compIssueLine.SetRequiredColumns(M_WorkOrderTransaction_ID, productID, asiID, uomID, qtyEntered, wooID, basisType); // Added by Bharat on 26 Dec 2017 to set Business Partner Information on Line compIssueLine.SetC_BPartner_ID(wot.GetC_BPartner_ID()); compIssueLine.SetC_BPartner_Location_ID(wot.GetC_BPartner_Location_ID()); if (locatorID != 0) // Implicit assumption : Only Pull components will have a locator populated in the WOC { // compIssueLine.SetM_Locator_ID(locatorID); ((X_VAMFG_M_WrkOdrTrnsctionLine)compIssueLine).SetM_Locator_ID(locatorID); } else { // Check if the locator passed is under the Warehouse of the Work Order // If no, then skip generating transaction line for this component ViennaAdvantage.Model.MVAMFGMWorkOrder wo = new ViennaAdvantage.Model.MVAMFGMWorkOrder(ctx, wot.GetVAMFG_M_WorkOrder_ID(), trx); MLocator loc = new MLocator(ctx, M_Locator_ID, trx); if (loc.GetM_Warehouse_ID() != wo.GetM_Warehouse_ID()) { log.Warning("Locator passed is not under the Warehouse of the WorkOrder"); continue; } ((X_VAMFG_M_WrkOdrTrnsctionLine)compIssueLine).SetM_Locator_ID(M_Locator_ID); } if (asiID > 0) { compIssueLine.SetM_AttributeSetInstance_ID(asiID); } compIssueLine.SetVAMFG_Line(compLineNo); compLineNo += 10; // Added by Bharat on 20/12/2016 to Set Density and Liter values for production execution Process of Gulf Oil. if (_countGOM01 > 0) { Decimal density = wot.GetGOM01_Density(); QtyInKg = Decimal.Multiply(qtyEntered, density); QtyInKg = Decimal.Round((QtyInKg), VAdvantage.Model.MUOM.GetPrecision(ctx, uomID)); Decimal ltrQty = density > 0 ? QtyInKg / density : 0; compIssueLine.SetGOM01_Quantity(QtyInKg); compIssueLine.SetGOM01_ActualQuantity(QtyInKg); compIssueLine.SetGOM01_Density(density); compIssueLine.SetGOM01_Litre(Decimal.Round((ltrQty), VAdvantage.Model.MUOM.GetPrecision(ctx, uomID))); compIssueLine.SetGOM01_FromProcess(true); } // End Bharat wotLines.Add(compIssueLine); VAdvantage.Model.MProduct product = new VAdvantage.Model.MProduct(ctx, productID, trx); if (checkInventory) { if (_countGOM01 > 0) { response.Append(product.GetName() + ": ").Append(VerifyQuantity(product, wot, QtyInKg, asiID)).Append(" "); } else { response.Append(product.GetName() + ": ").Append(VerifyQuantity(product, wot, qtyEntered, asiID)).Append(" "); } } if (compIssueLine.Save()) { } } } } catch (Exception e) { log.Log(Level.SEVERE, sqlBuf.ToString(), e); log.Severe("SQL failure in checking component requirements"); return(null); } finally { if (idr != null) { idr.Close(); idr = null; } } //Not using this here we have save line one by one //if (save) //{ // if (!VAdvantage.Model.PO.SaveAll(trx, wotLines)) // { // log.Severe("Could not save component transaction lines."); // return null; // } //} log.SaveInfo("Info", response.ToString()); //return wotLines.toArray(new MVAMFGMWrkOdrTrnsctionLine[] { }); ViennaAdvantage.Model.MVAMFGMWrkOdrTrnsctionLine[] newObject = null; try { newObject = (ViennaAdvantage.Model.MVAMFGMWrkOdrTrnsctionLine[])wotLines.ToArray(typeof(ViennaAdvantage.Model.MVAMFGMWrkOdrTrnsctionLine)); //newObject = new MVAMFGMWrkOdrTrnsctionLine[] { }; //newObject = Convert.ChangeType(wotLines.ToArray(), typeof(MVAMFGMWrkOdrTrnsctionLine[])); //newObject = lst.ToArray(); return(newObject); } catch { } return((ViennaAdvantage.Model.MVAMFGMWrkOdrTrnsctionLine[])wotLines.ToArray()); }
/** * Shipment Constructor * @param shipment shipment * @param shipLine shipment line * @param deliveryCount 0 or number of delivery */ public MAsset(MInOut shipment, MInOutLine shipLine, int deliveryCount) : this(shipment.GetCtx(), 0, shipment.Get_TrxName()) { SetClientOrg(shipment); SetValueNameDescription(shipment, shipLine, deliveryCount); // Header //SetIsOwned(true); SetC_BPartner_ID(shipment.GetC_BPartner_ID()); SetC_BPartner_Location_ID(shipment.GetC_BPartner_Location_ID()); SetAD_User_ID(shipment.GetAD_User_ID()); SetM_Locator_ID(shipLine.GetM_Locator_ID()); SetIsInPosession(true); SetAssetServiceDate(shipment.GetDateAcct()); // Line VAdvantage.Model.MProduct product = shipLine.GetProduct(); SetM_Product_ID(product.GetM_Product_ID()); SetA_Asset_Group_ID(product.GetA_Asset_Group_ID()); //////////////////////////////* //Changes for vafam // SetAssetServiceDate(shipment.GetMovementDate()); //SetGuaranteeDate(TimeUtil.AddDays(shipment.GetMovementDate(), product.GetGuaranteeDays())); MAssetGroup _assetGroup = new MAssetGroup(GetCtx(), GetA_Asset_Group_ID(), shipment.Get_TrxName()); if (_assetGroup.IsOwned()) { SetIsOwned(true); //SetC_BPartner_ID(0); } if (_assetGroup.IsDepreciated()) { SetIsDepreciated(true); SetIsFullyDepreciated(false); } //////////////////////////////////// //Change by Sukhwinder for setting Asset type and amortization template on Asset window, MANTIS ID:1762 int countVA038 = Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='VA038_' ")); Set_Value("VAFAM_AssetType", _assetGroup.Get_Value("VAFAM_AssetType").ToString()); if (countVA038 > 0) { Set_Value("VA038_AmortizationTemplate_ID", VAdvantage.Utility.Util.GetValueOfInt(_assetGroup.Get_Value("VA038_AmortizationTemplate_ID"))); } Set_Value("VAFAM_DepreciationType_ID", VAdvantage.Utility.Util.GetValueOfInt(_assetGroup.Get_Value("VAFAM_DepreciationType_ID"))); //////////////////////////////////// // Guarantee & Version SetGuaranteeDate(TimeUtil.AddDays(shipment.GetMovementDate(), product.GetGuaranteeDays())); SetVersionNo(product.GetVersionNo()); if (shipLine.GetM_AttributeSetInstance_ID() != 0) // Instance { MAttributeSetInstance asi = new MAttributeSetInstance(GetCtx(), shipLine.GetM_AttributeSetInstance_ID(), Get_TrxName()); SetM_AttributeSetInstance_ID(asi.GetM_AttributeSetInstance_ID()); SetLot(asi.GetLot()); SetSerNo(asi.GetSerNo()); } SetHelp(shipLine.GetDescription()); // Qty int units = product.GetSupportUnits(); if (units == 0) { units = 1; } if (deliveryCount != 0) // one asset per UOM { SetQty(shipLine.GetMovementQty(), units); } else { SetQty((Decimal)units); } SetM_InOutLine_ID(shipLine.GetM_InOutLine_ID()); // Activate MAssetGroup ag = MAssetGroup.Get(GetCtx(), GetA_Asset_Group_ID()); if (!ag.IsCreateAsActive()) { SetIsActive(false); } }
/** * Set Qty * @param windowNo window * @param columnName column */ private void SetQty(int windowNo, String columnName) { int M_Product_ID = GetM_Product_ID(); log.Log(Level.WARNING, "qty - init - M_Product_ID=" + M_Product_ID); Decimal MovementQty, QtyEntered; int C_UOM_To_ID = GetC_UOM_ID(); // No Product if (M_Product_ID == 0) { QtyEntered = GetQtyEntered(); SetMovementQty(QtyEntered); } // UOM Changed - convert from Entered -> Product else if (columnName.Equals("C_UOM_ID")) { QtyEntered = GetQtyEntered(); //Decimal QtyEntered1 = QtyEntered.setScale(MUOM.GetPrecision(GetCtx(), C_UOM_To_ID), Decimal.ROUND_HALF_UP); Decimal QtyEntered1 = Decimal.Round(QtyEntered, MUOM.GetPrecision(GetCtx(), C_UOM_To_ID), MidpointRounding.AwayFromZero); if (QtyEntered.CompareTo(QtyEntered1) != 0) { log.Fine("Corrected QtyEntered Scale UOM=" + C_UOM_To_ID + "; QtyEntered=" + QtyEntered + "->" + QtyEntered1); QtyEntered = QtyEntered1; SetQtyEntered(QtyEntered); } MovementQty = (Decimal)MUOMConversion.ConvertProductFrom(GetCtx(), M_Product_ID, C_UOM_To_ID, QtyEntered); if (MovementQty == null) { MovementQty = QtyEntered; } bool conversion = QtyEntered.CompareTo(MovementQty) != 0; log.Fine("UOM=" + C_UOM_To_ID + ", QtyEntered=" + QtyEntered + " -> " + conversion + " MovementQty=" + MovementQty); //p_changeVO.setContext(getCtx(), windowNo, "UOMConversion", conversion); SetMovementQty(MovementQty); } // No UOM defined else if (C_UOM_To_ID == 0) { QtyEntered = GetQtyEntered(); SetMovementQty(QtyEntered); } // QtyEntered changed - calculate MovementQty else if (columnName.Equals("QtyEntered")) { QtyEntered = GetQtyEntered(); Decimal QtyEntered1 = Decimal.Round(QtyEntered, MUOM.GetPrecision(GetCtx(), C_UOM_To_ID), MidpointRounding.AwayFromZero); if (QtyEntered.CompareTo(QtyEntered1) != 0) { log.Fine("Corrected QtyEntered Scale UOM=" + C_UOM_To_ID + "; QtyEntered=" + QtyEntered + "->" + QtyEntered1); QtyEntered = QtyEntered1; SetQtyEntered(QtyEntered); } MovementQty = (Decimal)MUOMConversion.ConvertProductFrom(GetCtx(), M_Product_ID, C_UOM_To_ID, QtyEntered); if (MovementQty == null) { MovementQty = QtyEntered; } bool conversion = QtyEntered.CompareTo(MovementQty) != 0; log.Fine("UOM=" + C_UOM_To_ID + ", QtyEntered=" + QtyEntered + " -> " + conversion + " MovementQty=" + MovementQty); //p_changeVO.setContext(getCtx(), windowNo, "UOMConversion", conversion); SetMovementQty(MovementQty); } // MovementQty changed - calculate QtyEntered (should not happen) else if (columnName.Equals("MovementQty")) { MovementQty = GetMovementQty(); int precision = MProduct.Get(GetCtx(), M_Product_ID).GetUOMPrecision(); //Decimal MovementQty1 = MovementQty.setScale(precision, Decimal.ROUND_HALF_UP); Decimal MovementQty1 = Decimal.Round(MovementQty, precision, MidpointRounding.AwayFromZero);// Env.Scale(MovementQty); if (MovementQty.CompareTo(MovementQty1) != 0) { log.Fine("Corrected MovementQty " + MovementQty + "->" + MovementQty1); MovementQty = MovementQty1; SetMovementQty(MovementQty); } QtyEntered = (Decimal)MUOMConversion.ConvertProductTo(GetCtx(), M_Product_ID, C_UOM_To_ID, MovementQty); if (QtyEntered == null) { QtyEntered = MovementQty; } bool conversion = MovementQty.CompareTo(QtyEntered) != 0; log.Fine("UOM=" + C_UOM_To_ID + ", MovementQty=" + MovementQty + " -> " + conversion + " QtyEntered=" + QtyEntered); //p_changeVO.setContext(getCtx(), windowNo, "UOMConversion", conversion); SetQtyEntered(QtyEntered); } // RMA : Check qty returned is more than qty shipped bool IsReturnTrx = GetParent().IsReturnTrx(); if (M_Product_ID != 0 && IsReturnTrx) { int oLine_ID = GetC_OrderLine_ID(); MOrderLine oLine = new MOrderLine(GetCtx(), oLine_ID, null); if (oLine.Get_ID() != 0) { int orig_IOLine_ID = oLine.GetOrig_InOutLine_ID(); if (orig_IOLine_ID != 0) { MInOutLine orig_IOLine = new MInOutLine(GetCtx(), orig_IOLine_ID, null); Decimal shippedQty = orig_IOLine.GetMovementQty(); MovementQty = GetMovementQty(); if (shippedQty.CompareTo(MovementQty) < 0) { if (GetCtx().IsSOTrx(windowNo)) { // p_changeVO.addError(Msg.getMsg(getCtx(), "QtyShippedLessThanQtyReturned", shippedQty)); } else { // p_changeVO.addError(Msg.getMsg(getCtx(), "QtyReceivedLessThanQtyReturned", shippedQty)); } SetMovementQty(shippedQty); MovementQty = shippedQty; QtyEntered = (Decimal)MUOMConversion.ConvertProductTo(GetCtx(), M_Product_ID, C_UOM_To_ID, MovementQty); if (QtyEntered == null) { QtyEntered = MovementQty; } SetQtyEntered(QtyEntered); log.Fine("QtyEntered : " + QtyEntered.ToString() + "MovementQty : " + MovementQty.ToString()); } } } } }
/** * Set Product - Callout * @param oldM_Product_ID old value * @param newM_Product_ID new value * @param windowNo window * @throws Exception */ //@UICallout public void SetM_Product_ID(String oldM_Product_ID, String newM_Product_ID, int windowNo) { if (newM_Product_ID == null || newM_Product_ID.Length == 0) { return; } int M_Product_ID = int.Parse(newM_Product_ID); if (M_Product_ID == 0) { SetM_AttributeSetInstance_ID(0); return; } // base.SetM_Product_ID(M_Product_ID); SetC_Charge_ID(0); // Set Attribute & Locator int M_Locator_ID = 0; if (GetCtx().GetContextAsInt(Env.WINDOW_INFO, Env.TAB_INFO, "M_Product_ID") == M_Product_ID && GetCtx().GetContextAsInt(Env.WINDOW_INFO, Env.TAB_INFO, "M_AttributeSetInstance_ID") != 0) { SetM_AttributeSetInstance_ID(GetCtx().GetContextAsInt(Env.WINDOW_INFO, Env.TAB_INFO, "M_AttributeSetInstance_ID")); // Locator from Info Window - ASI M_Locator_ID = GetCtx().GetContextAsInt(Env.WINDOW_INFO, Env.TAB_INFO, "M_Locator_ID"); if (M_Locator_ID != 0) { SetM_Locator_ID(M_Locator_ID); } } else { SetM_AttributeSetInstance_ID(0); } // bool IsSOTrx = GetCtx().IsSOTrx(windowNo); if (IsSOTrx) { return; } // PO - Set UOM/Locator/Qty MProduct product = GetProduct(); SetC_UOM_ID(product.GetC_UOM_ID()); Decimal QtyEntered = GetQtyEntered(); SetMovementQty(QtyEntered); if (M_Locator_ID != 0) { ; // already set via ASI } else { int M_Warehouse_ID = GetCtx().GetContextAsInt(windowNo, "M_Warehouse_ID"); M_Locator_ID = MProductLocator.GetFirstM_Locator_ID(product, M_Warehouse_ID); if (M_Locator_ID != 0) { SetM_Locator_ID(M_Locator_ID); } else { MWarehouse wh = MWarehouse.Get(GetCtx(), M_Warehouse_ID); SetM_Locator_ID(wh.GetDefaultM_Locator_ID()); } } }
/**** * Before Save * @param newRecord new * @return save */ protected override bool BeforeSave(bool newRecord) { log.Fine(""); if (GetC_Charge_ID() == 0 && GetM_Product_ID() == 0) { return(false); } // Get Line No if (GetLine() == 0) { String sql = "SELECT COALESCE(MAX(Line),0)+10 FROM M_InOutLine WHERE M_InOut_ID=" + GetM_InOut_ID(); int ii = Utility.Util.GetValueOfInt(DataBase.DB.ExecuteScalar(sql, null, null)); SetLine(ii); } // UOM if (GetC_UOM_ID() == 0) { SetC_UOM_ID(GetCtx().GetContextAsInt("#C_UOM_ID")); } if (GetC_UOM_ID() == 0) { int C_UOM_ID = MUOM.GetDefault_UOM_ID(GetCtx()); if (C_UOM_ID > 0) { SetC_UOM_ID(C_UOM_ID); } } MInOut inO = new MInOut(Env.GetCtx(), GetM_InOut_ID(), null); // true in case of Shipment and False in case of MR if (inO.IsSOTrx() == true) { int M_Warehouse_ID = 0; MWarehouse wh = null; StringBuilder qry = new StringBuilder(); qry.Append("select m_warehouse_id from m_locator where m_locator_id=" + GetM_Locator_ID()); M_Warehouse_ID = Util.GetValueOfInt(DB.ExecuteScalar(qry.ToString())); wh = MWarehouse.Get(GetCtx(), M_Warehouse_ID); qry.Clear(); qry.Append("SELECT QtyOnHand FROM M_Storage where m_locator_id=" + GetM_Locator_ID() + " and m_product_id=" + GetM_Product_ID()); if (GetM_AttributeSetInstance_ID() != 0) { qry.Append(" AND M_AttributeSetInstance_ID=" + GetM_AttributeSetInstance_ID()); } OnHandQty = Convert.ToDecimal(DB.ExecuteScalar(qry.ToString())); if (wh.IsDisallowNegativeInv() == true) { if (GetQtyEntered() < 0) { return(false); } else if ((OnHandQty - GetQtyEntered()) < 0) { return(false); } } } //else //{ //MProduct pro = new MProduct(GetCtx(), GetM_Product_ID(), null); //String qryUom = "SELECT vdr.C_UOM_ID FROM M_Product p LEFT JOIN M_Product_Po vdr ON p.M_Product_ID= vdr.M_Product_ID WHERE p.M_Product_ID=" + GetM_Product_ID() + " AND vdr.C_BPartner_ID = " + inO.GetC_BPartner_ID(); //int uom = Util.GetValueOfInt(DB.ExecuteScalar(qryUom)); //if (pro.GetC_UOM_ID() != 0) //{ // if (pro.GetC_UOM_ID() != uom && uom != 0) // { // decimal? Res = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT trunc(multiplyrate,4) FROM C_UOM_Conversion WHERE C_UOM_ID = " + pro.GetC_UOM_ID() + " AND C_UOM_To_ID = " + uom + " AND M_Product_ID= " + GetM_Product_ID() + " AND IsActive='Y'")); // if (Res > 0) // { // SetQtyEntered(GetQtyEntered() * Res); // //OrdQty = MUOMConversion.ConvertProductTo(GetCtx(), _M_Product_ID, UOM, OrdQty); // } // else // { // decimal? res = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT trunc(multiplyrate,4) FROM C_UOM_Conversion WHERE C_UOM_ID = " + pro.GetC_UOM_ID() + " AND C_UOM_To_ID = " + uom + " AND IsActive='Y'")); // if (res > 0) // { // SetQtyEntered(GetQtyEntered() * res); // //OrdQty = MUOMConversion.Convert(GetCtx(), prdUOM, UOM, OrdQty); // } // } // SetC_UOM_ID(uom); // } // else // { // SetC_UOM_ID(pro.GetC_UOM_ID()); // } //} //} // Qty Precision if (newRecord || Is_ValueChanged("QtyEntered")) { SetQtyEntered(GetQtyEntered()); } if (newRecord || Is_ValueChanged("MovementQty")) { SetMovementQty(GetMovementQty()); } // Order Line if (GetC_OrderLine_ID() == 0) { if (GetParent().IsSOTrx()) { log.SaveError("FillMandatory", Msg.Translate(GetCtx(), "C_Order_ID")); return(false); } } // if (getC_Charge_ID() == 0 && getM_Product_ID() == 0) // ; /** Qty on instance ASI * if (getM_AttributeSetInstance_ID() != 0) * { * MProduct product = getProduct(); * int M_AttributeSet_ID = product.getM_AttributeSet_ID(); * bool isInstance = M_AttributeSet_ID != 0; * if (isInstance) * { * MAttributeSet mas = MAttributeSet.get(getCtx(), M_AttributeSet_ID); * isInstance = mas.isInstanceAttribute(); * } * // Max * if (isInstance) * { * MStorage storage = MStorage.get(getCtx(), getM_Locator_ID(), * getM_Product_ID(), getM_AttributeSetInstance_ID(), get_TrxName()); * if (storage != null) * { * Decimal qty = storage.getQtyOnHand(); * if (getMovementQty().compareTo(qty) > 0) * { * log.warning("Qty - Stock=" + qty + ", Movement=" + getMovementQty()); * log.saveError("QtyInsufficient", "=" + qty); * return false; * } * } * } * } /**/ //Mandatory Tuple <String, String, String> mInfo = null; if (Env.HasModulePrefix("DTD001_", out mInfo)) { if (GetM_AttributeSetInstance_ID() != 0) // Set to from { SetM_AttributeSetInstance_ID(GetM_AttributeSetInstance_ID()); } else { MProduct product = GetProduct(); if (product != null && product.GetM_AttributeSet_ID() != 0) { //MAttributeSet mas = MAttributeSet.Get(GetCtx(), product.GetM_AttributeSet_ID()); //if (mas.IsInstanceAttribute() // && (mas.IsMandatory() || mas.IsMandatoryAlways())) //{ // log.SaveError("FillMandatory", Msg.GetElement(GetCtx(), "M_AttributeSetInstanceTo_ID")); // return false; //} MInOut inout = new MInOut(Env.GetCtx(), GetM_InOut_ID(), Get_Trx()); if (inout.GetDescription() != "RC" && Util.GetValueOfBool(IsDTD001_IsAttributeNo()) == false) { if (GetDTD001_Attribute() == "" || GetDTD001_Attribute() == null) { log.SaveError("FillMandatory", Msg.GetElement(GetCtx(), "DTD001_Attribute")); return(false); } //Check No Of Attributes Are Equal To Quantity Or Less Than int Count = CountAttributes(GetDTD001_Attribute()); if (Count != GetQtyEntered()) { if (Count > GetQtyEntered()) { log.SaveError("Error", Msg.GetMsg(GetCtx(), "DTD001_MaterialAtrbteGreater")); return(false); } else { log.SaveError("Error", Msg.GetMsg(GetCtx(), "DTD001_MaterialAtrbteless")); return(false); } } } } else { if (product != null) { if (product.GetM_AttributeSet_ID() == 0 && (GetDTD001_Attribute() == "" || GetDTD001_Attribute() == null)) { return(true); } else { //log.SaveError("FillMandatory", Msg.GetElement(GetCtx(), "DTD001_AttributeNumber")); //ShowMessage.Info("a", true, "Product is not of Attribute Type", null); log.SaveError("Product is not of Attribute Type", Msg.GetElement(GetCtx(), "DTD001_Attribute")); return(false); } } } } } return(true); }
/// <summary> /// Get Product Conversions (cached) /// </summary> /// <param name="ctx"></param> /// <param name="M_Product_ID"></param> /// <returns>array of conversions</returns> public static MUOMConversion[] GetProductConversions(Ctx ctx, int M_Product_ID) { if (M_Product_ID == 0) { return(new MUOMConversion[0]); } int key = M_Product_ID; MUOMConversion[] result = (MUOMConversion[])_conversionProduct[key]; if (result != null) { return(result); } List <MUOMConversion> list = new List <MUOMConversion>(); // String sql = "SELECT * FROM C_UOM_Conversion c " + "WHERE c.M_Product_ID=" + M_Product_ID + " AND EXISTS (SELECT * FROM M_Product p " + "WHERE c.M_Product_ID=p.M_Product_ID AND c.C_UOM_ID=p.C_UOM_ID)" + " AND c.IsActive='Y'"; DataTable dt = null; IDataReader idr = null; DataTable dt1 = null; IDataReader idr1 = null; try { idr = DB.ExecuteReader(sql, null, null); dt = new DataTable(); dt.Load(idr); idr.Close(); foreach (DataRow dr in dt.Rows) { list.Add(new MUOMConversion(ctx, dr, null)); } if (list.Count == 0) { sql = "SELECT * FROM C_UOM_Conversion c " + "WHERE EXISTS (SELECT * FROM M_Product p " + "WHERE c.C_UOM_ID=p.C_UOM_ID AND p.M_Product_ID=" + M_Product_ID + ")" + " AND c.IsActive='Y'"; idr1 = DB.ExecuteReader(sql, null, null); dt1 = new DataTable(); dt1.Load(idr1); idr1.Close(); foreach (DataRow dr1 in dt1.Rows) { list.Add(new MUOMConversion(ctx, dr1, null)); } } } catch (Exception e) { if (idr != null) { idr.Close(); idr = null; } if (idr1 != null) { idr1.Close(); idr1 = null; } _log.Log(Level.SEVERE, sql, e); } finally { if (idr != null) { idr.Close(); idr = null; } if (idr1 != null) { idr1.Close(); idr1 = null; } dt = null; dt1 = null; } // Add default conversion if (list.Count == 0) { MUOMConversion defRate = new MUOMConversion(MProduct.Get(ctx, M_Product_ID)); list.Add(defRate); } // Convert & save result = new MUOMConversion[list.Count]; result = list.ToArray(); _conversionProduct.Add(key, result); _log.Fine("GetProductConversions - M_Product_ID=" + M_Product_ID + " #" + result.Length); return(result); }
/* Is Product Stocked * @param ctx context * @param M_Product_ID id * @return true if found and stocked - false otherwise */ public static bool IsProductStocked(Ctx ctx, int M_Product_ID) { MProduct product = Get(ctx, M_Product_ID); return(product.IsStocked()); }