public virtual void ProcessRequest(HttpContext context) { #region 判断用户是否登录 IStoreServer storeServer = HelperManager.GetInstance(typeof(IStoreServer)) as IStoreServer; //storeServer #endregion }
/// <summary> /// 根据单据信息操作账务信息与库存信息 /// </summary> /// <param name="dataContext">数据上下文</param> /// <param name="bill">单据信息</param> public void OpertaionDetailAndStock(DepotManagementDataContext dataContext, S_MaterialReturnedInTheDepot bill) { MaterialListReturnedInTheDepot listService = new MaterialListReturnedInTheDepot(); IFinancialDetailManagement serverDetail = ServerModule.ServerModuleFactory.GetServerModule <IFinancialDetailManagement>(); var result = from r in dataContext.S_MaterialListReturnedInTheDepot where r.Bill_ID == bill.Bill_ID select r; if (result == null || result.Count() == 0) { throw new Exception("获取单据信息失败"); } foreach (var item in result) { S_FetchGoodsDetailBill detailInfo = listService.AssignDetailInfo(dataContext, bill, item); S_Stock stockInfo = listService.AssignStockInfo(dataContext, bill, item); if (detailInfo == null || stockInfo == null) { throw new Exception("获取账务信息或者库存信息失败"); } serverDetail.ProcessFetchGoodsDetail(dataContext, detailInfo, stockInfo); } IStoreServer serviceStore = ServerModuleFactory.GetServerModule <IStoreServer>(); serviceStore.Operation_MES_InProduction(dataContext, bill.Bill_ID); }
void DetailCheck(DepotManagementDataContext ctx, S_MaterialReturnedInTheDepot billInfo) { IStoreServer serviceStore = ServerModule.ServerModuleFactory.GetServerModule <IStoreServer>(); var varData = from a in ctx.S_MaterialListReturnedInTheDepot where a.Bill_ID == billInfo.Bill_ID select a; foreach (S_MaterialListReturnedInTheDepot item in varData) { StoreQueryCondition storeQuery = new StoreQueryCondition(); storeQuery.BatchNo = item.BatchNo; storeQuery.GoodsID = item.GoodsID; storeQuery.Provider = item.Provider; storeQuery.StorageID = billInfo.StorageID; if (serviceStore.GetStockInfoOverLoad(ctx, storeQuery) == null) { throw new Exception(UniversalFunction.GetGoodsMessage(item.GoodsID) + "供应商:【" + item.Provider + "】, 批次号:【" + item.BatchNo + "】, 库房ID:【" + billInfo.StorageID + "】 无库存记录,无法进行退库"); } } }
///// <summary> ///// 获取指定订单中属于仓库类别列表的物品信息对话框 ///// </summary> ///// <param name="orderFormNumber">订单号</param> ///// <param name="simpleMode">是否是简单模式的标志, 是则只显示最基本的物品信息列(图号、名称、规格)</param> ///// <returns>成功则返回获取到的对话框,失败返回null</returns> //static public FormQueryInfo GetOrderFormGoodsDialog(string orderFormNumber, List<string> lstDepotType, bool simpleMode) //{ // IOrderFormGoodsServer orderFormGoodsServer = ServerModuleFactory.GetServerModule<IOrderFormGoodsServer>(); // IQueryable<View_B_OrderFormGoods> queryResult; // if (!orderFormGoodsServer.GetOrderFormGoods(BasicInfo.ListRoles, BasicInfo.LoginID, orderFormNumber, out queryResult, out m_err)) // { // MessageDialog.ShowErrorMessage(m_err); // return null; // } // List<View_B_OrderFormGoods> orderFormGoods = queryResult.ToList(); // IQueryable<View_F_GoodsPlanCost> result = GetPlanCostGoods(null, lstDepotType); // if (result != null || result.Count() == 0) // { // List<View_F_GoodsPlanCost> goodsInfo = result.ToList(); // for (int i = 0; i < orderFormGoods.Count; i++) // { // if (null == goodsInfo.Find(p => orderFormGoods[i].图号型号 == p.图号型号 && orderFormGoods[i].物品名称 == p.物品名称 && orderFormGoods[i].规格 == p.规格)) // { // orderFormGoods.RemoveAt(i); // i--; // } // } // } // System.Data.DataTable dataTable = GlobalObject.GeneralFunction.ConvertToDataTable(orderFormGoods); // FormQueryInfo form = new FormQueryInfo(dataTable); // if (simpleMode) // { // form.ShowColumns = new string[] { "图号型号", "物品名称", "规格" }; // } // return form; //} /// <summary> /// 获取指定订单的物品在仓库中的信息对话框 /// </summary> /// <param name="orderFormNumber">订单号</param> /// <returns>成功则返回获取到的对话框,失败返回null</returns> static public FormQueryInfo GetOrderFormGoodsStockInfoDialog(string orderFormNumber, string strStorageID) { IStoreServer server = ServerModuleFactory.GetServerModule <IStoreServer>(); IQueryable <View_OrderFormGoodsStockInfo> queryResult = server.GetOrderFormGoodsStockInfo(orderFormNumber, strStorageID); //FormQueryInfo form = new FormQueryInfo(queryResult); System.Data.DataTable dataTable = GlobalObject.GeneralFunction.ConvertToDataTable <View_OrderFormGoodsStockInfo>(queryResult); FormQueryInfo form = new FormQueryInfo(dataTable); return(form); }
/// <summary> /// 初始化库存物品状态ComboBox控件 /// </summary> /// <param name="cmbState">要初始化的库存物品状态ComboBox控件</param> static public bool InitStoreStateComboBox(ComboBox cmbState) { IStoreServer server = ServerModuleFactory.GetServerModule <IStoreServer>(); IQueryable <S_StockStatus> queryResult = server.GetStoreStatus(); if (queryResult.Count() > 0) { cmbState.DataSource = queryResult; cmbState.DisplayMember = "Description"; cmbState.ValueMember = "ID"; return(true); } return(false); }
/// <summary> /// 赋值库存信息 /// </summary> /// <param name="context">数据上下文</param> /// <param name="bill">单据信息</param> /// <param name="goodsItem">明细信息</param> /// <returns>返回库存信息对象</returns> public S_Stock AssignStockInfo(DepotManagementDataContext context, S_MaterialReturnedInTheDepot bill, S_MaterialListReturnedInTheDepot goodsItem) { if (goodsItem.ShelfArea == null || goodsItem.ColumnNumber == null || goodsItem.LayerNumber == null) { throw new Exception("仓库货架、层、列等信息不能为空,请修改后重新提交"); } bool blIsOnlyForRepair = false; var resultbill = from a in context.S_MaterialReturnedInTheDepot where a.Bill_ID == bill.Bill_ID select a; if (resultbill.Count() != 1) { throw new Exception("数据不唯一或者为空"); } else { blIsOnlyForRepair = resultbill.Single().IsOnlyForRepair.ToString() == "" ? false : Convert.ToBoolean(resultbill.Single().IsOnlyForRepair); } S_Stock stock = new S_Stock(); // 添加信息到库存 IStoreServer storeServer = ServerModuleFactory.GetServerModule <IStoreServer>(); stock.GoodsID = goodsItem.GoodsID; stock.Provider = goodsItem.Provider; stock.ProviderBatchNo = goodsItem.ProviderBatchNo; stock.BatchNo = goodsItem.BatchNo; stock.ShelfArea = goodsItem.ShelfArea; stock.ColumnNumber = goodsItem.ColumnNumber; stock.LayerNumber = goodsItem.LayerNumber; stock.ExistCount = (decimal)goodsItem.ReturnedAmount; stock.Date = ServerModule.ServerTime.Time; stock.StorageID = bill.StorageID; if (blIsOnlyForRepair) { stock.GoodsStatus = 6; } return(stock); }
/// <summary> /// 检查业务中是否存在此物品相关信息 /// </summary> /// <param name="id">物品ID</param> /// <param name="prompt">存在时返回的提示信息</param> /// <returns>存在返回true, 不存在返回false</returns> public bool IsExistInBusiness(int id, out string prompt) { prompt = null; IStoreServer storeServer = ServerModuleFactory.GetServerModule <IStoreServer>(); View_S_Stock storeData = storeServer.GetGoodsStore(id); if (storeServer != null) { prompt = "库存中存在此物品的相关信息"; return(true); } ICheckOutInDepotServer cs = ServerModuleFactory.GetServerModule <ICheckOutInDepotServer>(); if (cs.IsExist(id)) { prompt = "报检入库单中存在此物品的相关信息"; return(true); } IOrdinaryInDepotGoodsBill og = ServerModuleFactory.GetServerModule <IOrdinaryInDepotGoodsBill>(); if (og.IsExist(id)) { prompt = "普通入库单中存在此物品的相关信息"; return(true); } IHomemadePartInDepotServer hs = ServerModuleFactory.GetServerModule <IHomemadePartInDepotServer>(); if (hs.IsExist(id)) { prompt = "自制件入库单中存在此物品的相关信息"; return(true); } return(false); }
public decimal GetUnitPrice(CE_InPutBusinessType businessType, string relateBillNo, int goodsID, string batchNo, string storageID) { try { decimal resultUnitPrice = 0; switch (businessType) { case CE_InPutBusinessType.生产采购: case CE_InPutBusinessType.普通采购: case CE_InPutBusinessType.委外采购: case CE_InPutBusinessType.样品采购: break; case CE_InPutBusinessType.自制件入库: resultUnitPrice = 0; break; case CE_InPutBusinessType.领料退库: IStoreServer storeService = ServerModuleFactory.GetServerModule <IStoreServer>(); resultUnitPrice = storeService.GetGoodsUnitPrice(goodsID, batchNo, storageID); break; case CE_InPutBusinessType.营销入库: case CE_InPutBusinessType.营销退库: break; default: break; } return(resultUnitPrice); } catch (Exception ex) { throw new Exception(ex.Message); } }
public void InsertInfoExcel(string billNo, DataTable infoTable) { IMaterialRequisitionServer billServer = ServerModuleFactory.GetServerModule <IMaterialRequisitionServer>(); BillNumberControl billNoControl = new BillNumberControl("领料单", billServer); DepotManagementDataContext ctx = CommentParameter.DepotDataContext; ctx.Connection.Open(); ctx.Transaction = ctx.Connection.BeginTransaction(); IStoreServer storeService = ServerModuleFactory.GetServerModule <IStoreServer>(); try { List <string> lstStorage = new List <string>(); if (infoTable.Columns.Contains("库房")) { lstStorage = DataSetHelper.ColumnsToList_Distinct(infoTable, "库房"); foreach (string storage in lstStorage) { string temp = UniversalFunction.GetStorageID(storage); if (temp.Trim().Length == 0) { throw new Exception("【库房名称】:" + storage + "有误, 无法匹配到库房ID"); } } } if (!infoTable.Columns.Contains("物品ID")) { infoTable.Columns.Add("物品ID"); foreach (DataRow dr in infoTable.Rows) { int goodsID = UniversalFunction.GetGoodsID(dr["图号型号"] == null ? "" : dr["图号型号"].ToString(), dr["物品名称"] == null ? "" : dr["物品名称"].ToString(), dr["规格"] == null ? "" : dr["规格"].ToString()); if (goodsID == 0) { throw new Exception(string.Format("【图号型号】:{0} 【物品名称】:{1} 【规格】:{2}有误," + " 无法匹配到物品ID", dr["图号型号"], dr["物品名称"], dr["规格"])); } dr["物品ID"] = goodsID; } } var varData = from a in ctx.S_MaterialRequisition where a.Bill_ID == billNo select a; if (varData.Count() != 1) { throw new Exception("无法获取【单据号】: " + billNo + " 的基本信息"); } S_MaterialRequisition requisition = varData.Single(); if (BillIsFinish(ctx, requisition.Bill_ID)) { throw new Exception("单据已完成,无法进行操作"); } if (lstStorage.Count == 0) { lstStorage.Add(UniversalFunction.GetStorageName(requisition.StorageID)); } foreach (string storage in lstStorage) { DataTable tempTable = infoTable; if (lstStorage.Count > 1) { tempTable = DataSetHelper.SiftDataTable(infoTable, "库房 = '" + storage + "'"); } string tempBillNo = ""; string storageID = UniversalFunction.GetStorageID(storage); if (requisition.StorageID != storageID) { S_MaterialRequisition tempRequisition = new S_MaterialRequisition(); tempBillNo = billNoControl.GetNewBillNo(ctx); tempRequisition.Bill_ID = tempBillNo; tempRequisition.AssociatedBillNo = requisition.AssociatedBillNo; tempRequisition.AssociatedBillType = requisition.AssociatedBillType; tempRequisition.AuthorizeDate = requisition.AuthorizeDate; tempRequisition.AuthorizePersonnel = requisition.AuthorizePersonnel; tempRequisition.Bill_Time = requisition.Bill_Time; tempRequisition.BillStatus = requisition.BillStatus; tempRequisition.Department = requisition.Department; tempRequisition.DepartmentDirector = requisition.DepartmentDirector; tempRequisition.DepotManager = requisition.DepotManager; tempRequisition.FetchCount = requisition.FetchCount; tempRequisition.FetchType = requisition.FetchType; tempRequisition.FillInPersonnel = requisition.FillInPersonnel; tempRequisition.FillInPersonnelCode = requisition.FillInPersonnelCode; tempRequisition.OutDepotDate = requisition.OutDepotDate; tempRequisition.ProductType = requisition.ProductType; tempRequisition.PurposeCode = requisition.PurposeCode; tempRequisition.Remark = requisition.Remark; tempRequisition.StorageID = storageID; tempRequisition.TechnologistDate = requisition.TechnologistDate; tempRequisition.TechnologistPersonnel = requisition.TechnologistPersonnel; ctx.S_MaterialRequisition.InsertOnSubmit(tempRequisition); ctx.SubmitChanges(); } else { tempBillNo = billNo; } foreach (DataRow dr in tempTable.Rows) { S_MaterialRequisitionGoods goodsInfo = new S_MaterialRequisitionGoods(); goodsInfo.RequestCount = dr["数量"] == null ? 0 : Convert.ToDecimal(dr["数量"]); goodsInfo.BatchNo = dr["批次号"] == null ? "" : dr["批次号"].ToString(); if (dr["物品ID"] == null || Convert.ToInt32(dr["物品ID"]) == 0) { throw new Exception("【物品ID】无效"); } goodsInfo.GoodsID = Convert.ToInt32(dr["物品ID"]); goodsInfo.Bill_ID = tempBillNo; StoreQueryCondition condition = new StoreQueryCondition(); condition.BatchNo = goodsInfo.BatchNo; condition.GoodsID = goodsInfo.GoodsID; condition.StorageID = storageID; S_Stock stockInfo = storeService.GetStockInfo(condition); if (stockInfo == null) { throw new Exception(string.Format("【物品ID】:{0} 【批次号】:{1} 【库房】:{2} 未找到匹配的库存记录", goodsInfo.GoodsID, goodsInfo.BatchNo, storage)); } goodsInfo.ProviderCode = stockInfo.Provider; goodsInfo.BasicCount = 0; goodsInfo.Remark = "由Excel导入"; goodsInfo.RepairStatus = null; goodsInfo.RealCount = goodsInfo.RequestCount; goodsInfo.ShowPosition = 1; ctx.S_MaterialRequisitionGoods.InsertOnSubmit(goodsInfo); ctx.SubmitChanges(); } } ctx.SubmitChanges(); ctx.Transaction.Commit(); } catch (Exception ex) { ctx.Transaction.Rollback(); throw new Exception(ex.Message); } }
/// <summary> /// 赋值账务信息 /// </summary> /// <param name="context">数据上下文</param> /// <param name="bill">单据信息</param> /// <param name="item">明细信息</param> /// <returns>返回账务信息对象</returns> public S_FetchGoodsDetailBill AssignDetailInfo(DepotManagementDataContext context, S_MaterialRequisition bill, S_MaterialRequisitionGoods item) { IBillTypeServer server = ServerModuleFactory.GetServerModule <IBillTypeServer>(); BASE_BillType billType = server.GetBillTypeFromName("领料单"); if (billType == null) { throw new Exception("获取不到单据类型信息"); } View_Department department = UniversalFunction.GetDeptInfo(context, bill.Department); IStoreServer storeServer = ServerModuleFactory.GetServerModule <IStoreServer>(); IProductLendReturnService serverLendReturn = ServerModuleFactory.GetServerModule <IProductLendReturnService>(); F_GoodsPlanCost basicGoods = m_basicGoodsServer.GetGoodsInfo(context, item.GoodsID); if (basicGoods == null) { throw new Exception(string.Format("物品ID [{0}] 的物品在基础物品表中没有查到,请与系统管理员联系!", item.GoodsID)); } StoreQueryCondition condition = new StoreQueryCondition(); condition.GoodsID = item.GoodsID; condition.Provider = item.ProviderCode; condition.BatchNo = item.BatchNo; condition.StorageID = bill.StorageID; S_Stock stock = storeServer.GetStockInfoOverLoad(context, condition); if (stock == null && GlobalObject.GeneralFunction.IsNullOrEmpty(basicGoods.GoodsType)) { throw new Exception(string.Format("图号:{0}, 名称:{1}, 规格:{2}, 供应商:{3}, 批次号:{4} 的物品在库存中没有查到相关物品,请仓管员核实!", basicGoods.GoodsCode, basicGoods.GoodsName, basicGoods.Spec, item.ProviderCode, item.BatchNo)); } //S_FetchGoodsDetailBill用于存放每次领料、领料退库的明细信息 decimal dcRealCount = item.RealCount; decimal dcSumCount = 0; var varData = from a in context.View_S_MaterialRequisitionProductReturnList where a.单据号 == item.Bill_ID && a.还账物品ID == item.GoodsID && a.还账物品批次号 == item.BatchNo && a.还账物品供应商 == item.ProviderCode select a; if (varData.Count() > 0) { dcSumCount = varData.Sum(a => a.还账数量); if (dcRealCount < dcSumCount) { throw new Exception("实际领用数量不能大于还货数量,请重新核对"); } } S_FetchGoodsDetailBill detailBill = new S_FetchGoodsDetailBill(); detailBill.ID = Guid.NewGuid(); detailBill.FetchBIllID = bill.Bill_ID; detailBill.BillTime = (DateTime)bill.OutDepotDate; detailBill.AssociatedBillType = bill.AssociatedBillType; detailBill.AssociatedBillNo = bill.AssociatedBillNo; detailBill.Department = department.部门名称; detailBill.FetchCount = item.RealCount; detailBill.GoodsID = item.GoodsID; detailBill.StorageID = bill.StorageID; detailBill.Price = dcSumCount; detailBill.UnitPrice = stock == null ? 0 : stock.UnitPrice; detailBill.OperationType = (int)CE_SubsidiaryOperationType.领料; detailBill.Provider = item.ProviderCode; if (stock != null) { detailBill.ProviderBatchNo = stock.ProviderBatchNo; } else { detailBill.ProviderBatchNo = ""; } detailBill.BatchNo = item.BatchNo; detailBill.FillInPersonnel = bill.FillInPersonnel; detailBill.FinanceSignatory = null; detailBill.DepartDirector = bill.DepartmentDirector; detailBill.DepotManager = bill.DepotManager; detailBill.Remark = (bill.Remark == null ? "" : bill.Remark.Trim()) + (item.Remark == null ? "" : item.Remark.Trim()); detailBill.FillInDate = bill.Bill_Time; IMaterialRequisitionPurposeServer purposeServer = ServerModuleFactory.GetServerModule <IMaterialRequisitionPurposeServer>(); detailBill.Using = purposeServer.GetBillPurpose(context, bill.PurposeCode).Purpose; return(detailBill); }
/// <summary> /// 完成领料退库单 /// </summary> /// <param name="billNo">单据号</param> /// <param name="storeManager">仓库管理员</param> /// <param name="returnBill">返回更新后重新查询的领料退库单数据集</param> /// <param name="error">出错时返回错误信息,无错时返回null</param> /// <returns>返回是否成功添加领料退库单</returns> public bool FinishBill(string billNo, string storeManager, out IQueryResult returnBill, out string error) { returnBill = null; error = null; try { DepotManagementDataContext ctx = CommentParameter.DepotDataContext; if (!FinishFrock(ctx, billNo, out error)) { return(false); } //检查总成领用数量是否都设置了流水码 if (!m_serverProductCode.IsFitCountInReturnBill(billNo, out error)) { return(false); } var result = from r in ctx.S_MaterialReturnedInTheDepot where r.Bill_ID == billNo select r; if (result.Count() == 0) { error = string.Format("没有找到单据号为 {0} 的领料退库单信息,无法进行此操作", billNo); return(false); } S_MaterialReturnedInTheDepot bill = result.Single(); if (bill.BillStatus == MaterialReturnedInTheDepotBillStatus.已完成.ToString()) { error = "单据不能重复退库"; return(false); } bill.DepotManager = storeManager; bill.BillStatus = MaterialReturnedInTheDepotBillStatus.已完成.ToString(); bill.InDepotDate = ServerTime.Time; if (bill.ReturnMode == "领料退库") { DetailCheck(ctx, bill);//在退库模式为领料退库的模式情况下,只能退库房存在的库存记录的物品 } IMaterialListReturnedInTheDepot goodsServer = ServerModuleFactory.GetServerModule <IMaterialListReturnedInTheDepot>(); //操作账务信息与库存信息 OpertaionDetailAndStock(ctx, bill); //操作总成库存状态 var varList = from a in ctx.S_MaterialListReturnedInTheDepot where a.Bill_ID == bill.Bill_ID select a; foreach (var item in varList) { bool blIsRepaired = false; if (bill.StorageID == "05" && Convert.ToBoolean(item.RepairStatus)) { blIsRepaired = true; } if (!m_serverProductCode.UpdateProductStock(ctx, bill.Bill_ID, "领料退库", bill.StorageID, blIsRepaired, item.GoodsID, out error)) { return(false); } IStoreServer serverStore = ServerModuleFactory.GetServerModule <IStoreServer>(); YX_AfterServiceStock lnqAfterService = new YX_AfterServiceStock(); lnqAfterService.GoodsID = item.GoodsID; lnqAfterService.OperationCount = Convert.ToDecimal(item.ReturnedAmount); lnqAfterService.RepairStatus = Convert.ToBoolean(item.RepairStatus); lnqAfterService.StorageID = bill.StorageID; if (!serverStore.OperationYXAfterService(ctx, lnqAfterService, out error)) { return(false); } } // 正式使用单据号 m_assignBill.UseBillNo(ctx, "领料退库单", bill.Bill_ID); ctx.SubmitChanges(); return(GetAllBill(out returnBill, out error)); } catch (Exception exce) { error = exce.Message; return(false); } }
/// <summary> /// 获取库存中的物品信息对话框 /// </summary> /// <param name="billType">单据类型</param> /// <param name="showZeroStoreGoods">是否显示零库存物品</param> /// <returns>成功则返回获取到的对话框,失败返回null</returns> static public FormQueryInfo GetStoreGoodsInfoDialog(CE_BillTypeEnum billType, bool showZeroStoreGoods, string strStorageID) { IStoreServer server = ServerModuleFactory.GetServerModule <IStoreServer>(); IQueryable <View_S_Stock> queryResult; System.Data.DataTable dataTable = null; if (!server.GetAllStore(null, true, out queryResult, out m_err)) { MessageDialog.ShowErrorMessage(m_err); return(null); } // 仅显示状态为正常且不在隔离库中的物品 if (billType == CE_BillTypeEnum.领料单) { List <string> listTempStockStatus = new List <string>(); listTempStockStatus.Add("正常"); foreach (int statusID in _lstStockStatus) { switch (statusID) { case 1: listTempStockStatus.Add("仅限于返修箱用"); break; case 2: listTempStockStatus.Add("样品"); break; case 3: listTempStockStatus.Add("仅限于返修箱用"); listTempStockStatus.Add("仅限于售后备件"); break; case 4: listTempStockStatus.Add("隔离"); break; default: break; } } queryResult = from r in queryResult where listTempStockStatus.Contains(r.物品状态) && r.库房代码 == strStorageID select r; } else if (billType == CE_BillTypeEnum.领料退库单) { queryResult = from r in queryResult where r.物品状态 != "隔离" select r; } ////TCU 采购部领用委外装配 Modify by cjb on 2014.5.28 //if (!GlobalObject.GeneralFunction.IsNullOrEmpty(prefixDepotType) && strStorageID != "03") //{ // int len = prefixDepotType.Length; // queryResult = from r in queryResult where r.材料类别编码.Substring(0, len) == prefixDepotType select r; //} if (!showZeroStoreGoods) { queryResult = from r in queryResult where r.库存数量 > 0 select r; } FormQueryInfo form = null; if (!BasicInfo.ListRoles.Exists(r => r.Contains("库管理员"))) { if (billType == CE_BillTypeEnum.领料单 && !_lstStockStatus.Contains(2) && !_lstStockStatus.Contains(4)) { var result = (from r in queryResult select r).ToList().Distinct(new StockGoodsComparer()); dataTable = GlobalObject.GeneralFunction.ConvertToDataTable <View_S_Stock>(result); } else { dataTable = GlobalObject.GeneralFunction.ConvertToDataTable <View_S_Stock>(queryResult); } } else { dataTable = GlobalObject.GeneralFunction.ConvertToDataTable <View_S_Stock>(queryResult); } form = new FormQueryInfo(dataTable); if (!showZeroStoreGoods) { form.Text = form.Text + ",库存数量为0的物品不会显示在列表中。"; } if (!BasicInfo.ListRoles.Exists(r => r.Contains("库管理员"))) { if (billType == CE_BillTypeEnum.报废单 || billType == CE_BillTypeEnum.领料退库单) { form.HideColumns = new string[] { "序号", "物品ID", "单位", "单位ID", "库存数量", "仓库", "货架", "层", "列", "实际单价", "实际金额" } } ; else if (billType == CE_BillTypeEnum.领料单) { form.HideColumns = new string[] { "序号", "物品ID", "单位", "实际单价", "实际金额" } } ; } else { form.HideColumns = new string[] { "序号", "物品ID", "单位ID", "单位", "实际单价", "实际金额" }; } return(form); }
/// <summary> /// 处理出库明细业务信息 /// </summary> /// <param name="ctx">数据上下文</param> /// <param name="fetchGoodsDetailInfo">出库明细信息</param> /// <param name="stockInfo">库存信息</param> public void ProcessFetchGoodsDetail(DepotManagementDataContext ctx, S_FetchGoodsDetailBill fetchGoodsDetailInfo, S_Stock stockInfo) { try { CE_SubsidiaryOperationType operationType = (CE_SubsidiaryOperationType)Enum.ToObject(typeof(CE_SubsidiaryOperationType), fetchGoodsDetailInfo.OperationType); IStoreServer storeService = ServerModule.ServerModuleFactory.GetServerModule <IStoreServer>(); switch (operationType) { case CE_SubsidiaryOperationType.领料: decimal dcSumCount = fetchGoodsDetailInfo.Price; fetchGoodsDetailInfo.Price = fetchGoodsDetailInfo.FetchCount == null ? 0 : fetchGoodsDetailInfo.UnitPrice * (decimal)fetchGoodsDetailInfo.FetchCount; InsertOnSubmitFetchGoodsDetailBill(ctx, fetchGoodsDetailInfo); S_FetchGoodsDetailBill newFetchDetailInfo = AssignmentInfo(fetchGoodsDetailInfo); newFetchDetailInfo.FetchCount = newFetchDetailInfo.FetchCount < dcSumCount ? 0 : newFetchDetailInfo.FetchCount - dcSumCount; FetchToolsInfo(ctx, newFetchDetailInfo); FetchGaugeInfo(ctx, newFetchDetailInfo); FetchLendReturn_MaterialRequisition(ctx, newFetchDetailInfo); if (!fetchGoodsDetailInfo.AssociatedBillNo.Contains("SBW")) { FetchWorkShop(ctx, newFetchDetailInfo); } ctx.SubmitChanges(); // xsy, 2017.11.14 解决更新异常增加 storeService.OutStore(ctx, stockInfo, operationType); ctx.SubmitChanges(); // xsy, 2017.11.14 解决更新异常增加 break; case CE_SubsidiaryOperationType.领料退库: InsertOnSubmitFetchGoodsDetailBill(ctx, fetchGoodsDetailInfo); FetchToolsInfo(ctx, fetchGoodsDetailInfo); InDepotGuagesInfo(ctx, fetchGoodsDetailInfo); if (UniversalFunction.GetStorageInfo(fetchGoodsDetailInfo.StorageID).WorkShopCurrentAccount) { FetchWorkShop(ctx, fetchGoodsDetailInfo); } storeService.InStore(ctx, stockInfo, operationType); break; case CE_SubsidiaryOperationType.报废: FetchToolsInfo(ctx, fetchGoodsDetailInfo); FetchWorkShop(ctx, fetchGoodsDetailInfo); break; case CE_SubsidiaryOperationType.样品耗用: case CE_SubsidiaryOperationType.借货: case CE_SubsidiaryOperationType.还货: FetchLendReturn(ctx, fetchGoodsDetailInfo); FetchToolsInfo(ctx, fetchGoodsDetailInfo); FetchWorkShop(ctx, fetchGoodsDetailInfo); break; case CE_SubsidiaryOperationType.库房调入: case CE_SubsidiaryOperationType.营销退库: InsertOnSubmitFetchGoodsDetailBill(ctx, fetchGoodsDetailInfo); FetchToolsInfo(ctx, fetchGoodsDetailInfo); InDepotGuagesInfo(ctx, fetchGoodsDetailInfo); storeService.InStore(ctx, stockInfo, operationType); break; case CE_SubsidiaryOperationType.库房调出: case CE_SubsidiaryOperationType.营销出库: InsertOnSubmitFetchGoodsDetailBill(ctx, fetchGoodsDetailInfo); FetchToolsInfo(ctx, fetchGoodsDetailInfo); FetchGaugeInfo(ctx, fetchGoodsDetailInfo); storeService.OutStore(ctx, stockInfo, operationType); break; default: break; } } catch (System.Data.Linq.ChangeConflictException) { foreach (System.Data.Linq.ObjectChangeConflict occ in ctx.ChangeConflicts) { //以下是解决冲突的三种方法,选一种即可 // 使用当前数据库中的值,覆盖Linq缓存中实体对象的值 //occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues); // 使用Linq缓存中实体对象的值,覆盖当前数据库中的值 occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues); // 只更新实体对象中改变的字段的值,其他的保留不变 //occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges); } // 这个地方要注意,Catch方法中,我们前面只是指明了怎样来解决冲突,这个地方还需要再次提交更新,这样的话,值 //才会提交到数据库。 ctx.SubmitChanges(); } catch (Exception ex) { throw new Exception(ex.Message); } }
/// <summary> /// 处理入库明细业务信息 /// </summary> /// <param name="ctx">数据上下文</param> /// <param name="indepotDetailInfo">入库明细信息</param> /// <param name="stockInfo">库存信息</param> public void ProcessInDepotDetail(DepotManagementDataContext ctx, S_InDepotDetailBill indepotDetailInfo, S_Stock stockInfo) { try { CE_SubsidiaryOperationType operationType = (CE_SubsidiaryOperationType)Enum.ToObject(typeof(CE_SubsidiaryOperationType), indepotDetailInfo.OperationType); IStoreServer storeService = ServerModule.ServerModuleFactory.GetServerModule <IStoreServer>(); switch (operationType) { case CE_SubsidiaryOperationType.报检入库: case CE_SubsidiaryOperationType.委外报检入库: InsertOnSubmitInDepotDetailBill(ctx, indepotDetailInfo); InDepotToolsInfo(ctx, indepotDetailInfo); InDepotGuagesInfo(ctx, indepotDetailInfo); storeService.InStore(ctx, stockInfo, operationType); break; case CE_SubsidiaryOperationType.采购退货: InsertOnSubmitInDepotDetailBill(ctx, indepotDetailInfo); InDepotToolsInfo(ctx, indepotDetailInfo); FetchGaugeInfo(ctx, indepotDetailInfo); storeService.OutStore(ctx, stockInfo, operationType); break; case CE_SubsidiaryOperationType.普通入库: InsertOnSubmitInDepotDetailBill(ctx, indepotDetailInfo); InDepotToolsInfo(ctx, indepotDetailInfo); InDepotGuagesInfo(ctx, indepotDetailInfo); storeService.InStore(ctx, stockInfo, operationType); storeService.UpdateAging(ctx, stockInfo, false); break; case CE_SubsidiaryOperationType.营销入库: case CE_SubsidiaryOperationType.自制件入库: case CE_SubsidiaryOperationType.自制件工装入库: InsertOnSubmitInDepotDetailBill(ctx, indepotDetailInfo); InDepotToolsInfo(ctx, indepotDetailInfo); InDepotGuagesInfo(ctx, indepotDetailInfo); InDepotWorkShop(ctx, indepotDetailInfo); storeService.InStore(ctx, stockInfo, operationType); break; case CE_SubsidiaryOperationType.营销退货: case CE_SubsidiaryOperationType.自制件退货: InsertOnSubmitInDepotDetailBill(ctx, indepotDetailInfo); InDepotToolsInfo(ctx, indepotDetailInfo); FetchGaugeInfo(ctx, indepotDetailInfo); InDepotWorkShop(ctx, indepotDetailInfo); storeService.OutStore(ctx, stockInfo, operationType); break; case CE_SubsidiaryOperationType.财务对冲: case CE_SubsidiaryOperationType.财务红冲: InsertOnSubmitInDepotDetailBill(ctx, indepotDetailInfo); break; default: break; } } catch (Exception ex) { throw new Exception(ex.Message); } }