예제 #1
0
        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
            }
        }
예제 #2
0
        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);
                    }
                }
            }
        }