private void UpdateInventoryInfor(DataSet dsReturnToVendorDetail, bool blnNewRecord, PO_ReturnToVendorMasterVO pobjPO_ReturnToVendorMasterVO) { UtilsBO boUtils = new UtilsBO(); foreach (DataRow drowReturnedGoodsDetail in dsReturnToVendorDetail.Tables[0].Rows) { if (blnNewRecord && drowReturnedGoodsDetail.RowState == DataRowState.Deleted) { continue; } int intStockUMID = int.Parse(drowReturnedGoodsDetail[PO_ReturnToVendorDetailTable.STOCKUMID_FLD].ToString()); int intBuyingUMID = int.Parse(drowReturnedGoodsDetail[PO_ReturnToVendorDetailTable.BUYINGUMID_FLD].ToString()); Decimal decUMRate = boUtils.GetUMRate(intBuyingUMID, intStockUMID); if (decUMRate != 0) { drowReturnedGoodsDetail[PO_ReturnToVendorDetailTable.QUANTITY_FLD] = Decimal.Parse(drowReturnedGoodsDetail[PO_ReturnToVendorDetailTable.QUANTITY_FLD].ToString()) * decUMRate; } else { throw new PCSException(ErrorCode.MESSAGE_MUST_SET_UMRATE, string.Empty, new Exception()); } #region Update IV_BinCache if (drowReturnedGoodsDetail[PO_ReturnToVendorDetailTable.BINID_FLD].ToString().Trim() != String.Empty) { UpdateIVBinCache(drowReturnedGoodsDetail, blnNewRecord, pobjPO_ReturnToVendorMasterVO); } #endregion #region update into the IV_locationCache UpdateIVLocationCache(drowReturnedGoodsDetail, blnNewRecord, pobjPO_ReturnToVendorMasterVO); #endregion #region Update into the IV_MasterLocationCache UpdateIVMasterLocationCache(drowReturnedGoodsDetail, blnNewRecord, pobjPO_ReturnToVendorMasterVO); #endregion #region Add By CanhNV: {Update add Inventory for Bom tree} if (pobjPO_ReturnToVendorMasterVO.ProductionLineId > 0) { //1.Get BomDetail by ProductID DataTable dtBomDetail = new ITM_BOMDS().ListBomDetailOfProduct((int)drowReturnedGoodsDetail[ITM_ProductTable.PRODUCTID_FLD]); if (dtBomDetail.Rows.Count <= 0) { return; } //2.Get LocationID and BinID by ProductionLineID DataTable dtLocBin = new PO_ReturnToVendorMasterDS().GetLocationBin(pobjPO_ReturnToVendorMasterVO.ProductionLineId); if (dtLocBin.Rows.Count == 0) { throw new PCSBOException(ErrorCode.MESSAGE_MUST_SELECT_LOCATION, string.Empty, new Exception()); } int intProLocationID = Convert.ToInt32(dtLocBin.Rows[0][MST_BINTable.LOCATIONID_FLD]); int intProBinID = Convert.ToInt32(dtLocBin.Rows[0][MST_BINTable.BINID_FLD]); //3.Scan DataTable foreach (DataRow dataRow in dtBomDetail.Rows) { //3.1.Set value to voTransactionHistory MST_TransactionHistoryVO voTransactionHistory = new MST_TransactionHistoryVO(); voTransactionHistory.TransDate = new UtilsBO().GetDBDate(); voTransactionHistory.TranTypeID = new MST_TranTypeDS().GetTranTypeID(TransactionTypeEnum.IVMiscellaneousIssue.ToString()); voTransactionHistory.InspStatus = new MST_TranTypeDS().GetTranTypeID(TransactionTypeEnum.POReturnToVendor.ToString()); voTransactionHistory.ProductID = (int)dataRow[ITM_BOMTable.COMPONENTID_FLD]; voTransactionHistory.CCNID = pobjPO_ReturnToVendorMasterVO.CCNID; voTransactionHistory.PostDate = pobjPO_ReturnToVendorMasterVO.PostDate; voTransactionHistory.RefMasterID = pobjPO_ReturnToVendorMasterVO.ReturnToVendorMasterID; try { voTransactionHistory.RefDetailID = (int)drowReturnedGoodsDetail[PO_ReturnToVendorDetailTable.RETURNTOVENDORDETAILID_FLD]; } catch {} voTransactionHistory.Quantity = (decimal)drowReturnedGoodsDetail[PO_ReturnToVendorDetailTable.QUANTITY_FLD] * (decimal)dataRow[ITM_BOMTable.QUANTITY_FLD]; decimal decQuantity = voTransactionHistory.Quantity; voTransactionHistory.MasterLocationID = pobjPO_ReturnToVendorMasterVO.MasterLocationID; voTransactionHistory.LocationID = intProLocationID; voTransactionHistory.BinID = intProBinID; //3.2.Update Inventory // new InventoryUtilsBO().UpdateAddOHQuantity(voTransactionHistory.CCNID, voTransactionHistory.MasterLocationID, voTransactionHistory.LocationID, voTransactionHistory.BinID, voTransactionHistory.ProductID, decQuantity, string.Empty, string.Empty); //3.3.Update TransactionHistory new InventoryUtilsBO().SaveTransactionHistory(TransactionTypeEnum.IVMiscellaneousIssue.ToString(), (int)PurposeEnum.ReturnToVendor, voTransactionHistory); } } #endregion } }
private void CheckOnHandQty(DataSet dstData, PO_ReturnToVendorMasterVO pobjPO_ReturnToVendorMasterVO) { DateTime dtmCurrentDate = new UtilsBO().GetDBDate().AddDays(1); InventoryUtilsBO boIVUtils = new InventoryUtilsBO(); decimal dcmOnHandQty, decOnHandCurrent = 0; for (int i = 0; i < dstData.Tables[0].Rows.Count; i++) { if (dstData.Tables[0].Rows[i].RowState != DataRowState.Deleted) { //get Quantity, location, bin, umrate string strBINID = dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.BINID_FLD].ToString().Trim(); dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.LOCATIONID_FLD].ToString().Trim(); if (strBINID != String.Empty) { IV_BinCacheVO objIV_BinCacheVO = new IV_BinCacheVO(); objIV_BinCacheVO.ProductID = int.Parse(dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.PRODUCTID_FLD].ToString()); objIV_BinCacheVO.MasterLocationID = pobjPO_ReturnToVendorMasterVO.MasterLocationID; objIV_BinCacheVO.CCNID = pobjPO_ReturnToVendorMasterVO.CCNID; objIV_BinCacheVO.LocationID = int.Parse(dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.LOCATIONID_FLD].ToString()); objIV_BinCacheVO.BinID = int.Parse(dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.BINID_FLD].ToString()); dcmOnHandQty = boIVUtils.GetAvailableQtyByPostDate(dtmCurrentDate, objIV_BinCacheVO.CCNID, objIV_BinCacheVO.MasterLocationID, objIV_BinCacheVO.LocationID, objIV_BinCacheVO.BinID, objIV_BinCacheVO.ProductID); decOnHandCurrent = boIVUtils.GetAvailableQtyByPostDate(dtmCurrentDate, objIV_BinCacheVO.CCNID, objIV_BinCacheVO.MasterLocationID, objIV_BinCacheVO.LocationID, objIV_BinCacheVO.BinID, objIV_BinCacheVO.ProductID); } else { IV_LocationCacheVO objIV_LocationCacheVO = new IV_LocationCacheVO(); objIV_LocationCacheVO.ProductID = int.Parse(dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.PRODUCTID_FLD].ToString()); objIV_LocationCacheVO.MasterLocationID = pobjPO_ReturnToVendorMasterVO.MasterLocationID; objIV_LocationCacheVO.CCNID = pobjPO_ReturnToVendorMasterVO.CCNID; objIV_LocationCacheVO.LocationID = int.Parse(dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.LOCATIONID_FLD].ToString()); dcmOnHandQty = boIVUtils.GetAvailableQtyByPostDate(dtmCurrentDate, objIV_LocationCacheVO.CCNID, objIV_LocationCacheVO.MasterLocationID, objIV_LocationCacheVO.LocationID, 0, objIV_LocationCacheVO.ProductID); decOnHandCurrent = boIVUtils.GetAvailableQtyByPostDate(dtmCurrentDate, objIV_LocationCacheVO.CCNID, objIV_LocationCacheVO.MasterLocationID, objIV_LocationCacheVO.LocationID, 0, objIV_LocationCacheVO.ProductID); } decimal dcmUMRate = 1; if (pobjPO_ReturnToVendorMasterVO.PurchaseOrderMasterID != 0) { //get the UMRate if (dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.UMRATE_FLD].ToString() != String.Empty) { dcmUMRate = decimal.Parse(dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.UMRATE_FLD].ToString()); } else { dcmUMRate = 1; } } decimal dcmReturnQuantity = decimal.Parse(dstData.Tables[0].Rows[i][PO_ReturnToVendorDetailTable.QUANTITY_FLD].ToString()); if ((dcmOnHandQty - (dcmReturnQuantity * dcmUMRate)) < 0) { throw new PCSBOException(ErrorCode.MESSAGE_RGA_OVERONHANDQTY, i.ToString(), null); } else if (decOnHandCurrent < (dcmReturnQuantity * dcmUMRate)) { throw new PCSBOException(ErrorCode.MESSAGE_AVAILABLE_WAS_USED_AFTER_POSTDATE, i.ToString(), null); } } } }