예제 #1
0
 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 + "】 无库存记录,无法进行退库");
                }
            }
        }
예제 #4
0
        ///// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #8
0
        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);
            }
        }
예제 #9
0
        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);
            }
        }
예제 #10
0
        /// <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);
            }
        }
예제 #12
0
        /// <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);
        }
예제 #13
0
        /// <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);
            }
        }
예제 #14
0
        /// <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);
            }
        }