/// <summary>
        /// 使用单据号(已经在某单据中正式使用)
        /// </summary>
        /// <param name="dc">数据上下文</param>
        /// <param name="billTypeName">单据类型名称</param>
        /// <param name="billNo">单据号</param>
        /// <returns>成功则返回true, 失败返回false或抛出异常</returns>
        public bool UseBillNo(DepotManagementDataContext dc, string billTypeName, string billNo)
        {
            BASE_BillType billType = m_billTypeServer.GetBillTypeFromName(billTypeName);

            if (billType != null)
            {
                var result = from r in dc.BASE_AssignBillNo
                             where r.Bill_TypeCode == billType.TypeCode && r.Bill_No == billNo
                             select r;

                if (result.Count() > 0)
                {
                    if (result.Single().AlreadyUse)
                    {
                        throw new Exception(string.Format("{0}的编号为 [{1}] 的单据已经在正式使用!", billTypeName, billNo));
                    }

                    result.Single().IsAbandoned = false;
                    result.Single().AlreadyUse  = true;

                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// 赋值账务信息
        /// </summary>
        /// <param name="context">数据上下文</param>
        /// <param name="bill">单据信息</param>
        /// <param name="item">明细信息</param>
        /// <returns>返回账务信息</returns>
        public S_InDepotDetailBill AssignDetailInfo(DepotManagementDataContext context, S_MaterialRejectBill bill,
                                                    S_MaterialListRejectBill item)
        {
            IBillTypeServer server   = ServerModuleFactory.GetServerModule <IBillTypeServer>();
            BASE_BillType   billType = server.GetBillTypeFromName("采购退货单");

            if (billType == null)
            {
                throw new Exception("获取不到单据类型信息");
            }


            S_InDepotDetailBill detailBill = new S_InDepotDetailBill();

            detailBill.ID              = Guid.NewGuid();
            detailBill.BillTime        = (DateTime)bill.OutDepotDate;
            detailBill.FillInPersonnel = bill.FillInPersonnel;
            detailBill.Department      = UniversalFunction.GetDeptInfo(context, bill.Department).部门名称;
            detailBill.FactPrice       = -Math.Round(item.UnitPrice * item.Amount, 2);
            detailBill.FactUnitPrice   = item.UnitPrice;
            detailBill.GoodsID         = item.GoodsID;
            detailBill.BatchNo         = item.BatchNo;
            detailBill.Provider        = item.Provider;
            detailBill.InDepotBillID   = bill.Bill_ID;
            detailBill.InDepotCount    = -item.Amount;
            detailBill.UnitPrice       = item.UnitPrice;
            detailBill.Price           = -Math.Round(item.UnitPrice * item.Amount, 2);
            detailBill.OperationType   = (int)GlobalObject.CE_SubsidiaryOperationType.采购退货;
            detailBill.StorageID       = bill.StorageID;
            detailBill.Remark          = "退货原因:" + bill.Reason + " 备注:" + bill.Remark;
            detailBill.AffrimPersonnel = bill.DepotManager;
            detailBill.FillInDate      = bill.Bill_Time;

            return(detailBill);
        }
        /// <summary>
        /// 赋值账务信息
        /// </summary>
        /// <param name="context">数据上下文</param>
        /// <param name="bill">单据信息</param>
        /// <param name="item">明细信息</param>
        /// <returns>返回账务信息对象</returns>
        public S_FetchGoodsDetailBill AssignDetailInfo(DepotManagementDataContext context, S_MaterialReturnedInTheDepot bill,
                                                       S_MaterialListReturnedInTheDepot 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);

            //单价设置
            decimal dcStockUnitPrice = m_serverStore.GetGoodsUnitPrice(context, item.GoodsID, item.BatchNo, bill.StorageID);

            //S_FetchGoodsDetailBill用于存放每次领料、领料退库的明细信息
            S_FetchGoodsDetailBill detailBill = new S_FetchGoodsDetailBill();

            detailBill.ID               = Guid.NewGuid();
            detailBill.FetchBIllID      = bill.Bill_ID;
            detailBill.BillTime         = ServerTime.Time;
            detailBill.FetchCount       = -item.ReturnedAmount;
            detailBill.GoodsID          = item.GoodsID;
            detailBill.BatchNo          = item.BatchNo;
            detailBill.ProviderBatchNo  = item.ProviderBatchNo;
            detailBill.Provider         = item.Provider;
            detailBill.Price            = -dcStockUnitPrice * (decimal)item.ReturnedAmount;
            detailBill.UnitPrice        = dcStockUnitPrice;
            detailBill.Department       = department.部门名称;
            detailBill.FillInPersonnel  = bill.FillInPersonnel;
            detailBill.FinanceSignatory = null;
            detailBill.DepartDirector   = bill.DepartmentDirector;
            detailBill.DepotManager     = bill.DepotManager;
            detailBill.OperationType    = (int)CE_SubsidiaryOperationType.领料退库;
            detailBill.StorageID        = bill.StorageID;
            detailBill.Remark           = "退库原因:" + bill.ReturnReason + ";备注:" + item.Remark;
            detailBill.FillInDate       = bill.Bill_Time;

            IMaterialRequisitionPurposeServer purposeServer =
                ServerModuleFactory.GetServerModule <IMaterialRequisitionPurposeServer>();

            detailBill.Using = string.Format("领料退库,初始用途:{0}", purposeServer.GetBillPurpose(context, bill.PurposeCode).Purpose);

            return(detailBill);
        }
        /// <summary>
        /// 取消分配的单据号
        /// </summary>
        /// <param name="context">数据上下文</param>
        /// <param name="billTypeName">单据类型名称</param>
        /// <param name="billNo">单据号</param>
        /// <returns>成功则返回true, 失败返回false或抛出异常</returns>
        public bool CancelBillNo(DepotManagementDataContext context, string billTypeName, string billNo)
        {
            BASE_BillType billType = m_billTypeServer.GetBillTypeFromName(billTypeName);

            if (billType != null)
            {
                var result = from r in context.BASE_AssignBillNo
                             where r.Bill_TypeCode == billType.TypeCode && r.Bill_No == billNo
                             select r;

                if (result.Count() > 0)
                {
                    // 如果单据已经存在则不能取消单据号
                    if (m_billServer != null)
                    {
                        if (m_billServer.IsExist(billNo))
                        {
                            return(false);
                        }
                    }

                    // 由外部调用时需要强制性删除
                    if (result.Single().AlreadyUse)
                    {
                        throw new Exception(string.Format("{0}的编号为 [{1}] 的单据已经正式使用不能取消!", billTypeName, billNo));
                    }

                    result.Single().IsAbandoned = true;
                    result.Single().AlreadyUse  = false;

                    //删除CVT/TCU总成编号
                    var varData = from a in context.ProductsCodes
                                  where a.DJH == billNo
                                  select a;

                    context.ProductsCodes.DeleteAllOnSubmit(varData);

                    return(true);
                }
            }

            return(false);
        }
Beispiel #5
0
        /// <summary>
        /// 赋值账务信息
        /// </summary>
        /// <param name="ctx">数据上下文</param>
        /// <param name="outSourcing">单据信息</param>
        /// <returns>返回账务信息</returns>
        S_InDepotDetailBill AssignDetailInfo(DepotManagementDataContext ctx, S_CheckOutInDepotForOutsourcingBill outSourcing)
        {
            S_InDepotDetailBill detailBill = new S_InDepotDetailBill();
            var varData = from a in ctx.S_InDepotDetailBill
                          where a.InDepotBillID == outSourcing.Bill_ID
                          select a;

            if (varData.Count() != 0)
            {
                throw new Exception("数据不唯一");
            }
            else
            {
                IBillTypeServer server   = ServerModuleFactory.GetServerModule <IBillTypeServer>();
                BASE_BillType   billType = server.GetBillTypeFromName("委外报检入库单");

                if (billType == null)
                {
                    throw new Exception("获取不到单据类型信息");
                }

                detailBill.ID              = Guid.NewGuid();
                detailBill.BillTime        = ServerTime.Time;
                detailBill.FillInPersonnel = outSourcing.DeclarePersonnel;
                detailBill.Department      = UniversalFunction.GetPersonnelInfo(ctx, outSourcing.DeclarePersonnel).部门名称;
                detailBill.FactPrice       = Math.Round(outSourcing.UnitPrice * outSourcing.InDepotCount, 2);
                detailBill.FactUnitPrice   = outSourcing.UnitPrice;
                detailBill.GoodsID         = outSourcing.GoodsID;
                detailBill.BatchNo         = outSourcing.BatchNo;
                detailBill.InDepotBillID   = outSourcing.Bill_ID;
                detailBill.InDepotCount    = outSourcing.InDepotCount;
                detailBill.Price           = Math.Round(outSourcing.UnitPrice * outSourcing.InDepotCount, 2);
                detailBill.UnitPrice       = outSourcing.UnitPrice;
                detailBill.OperationType   = (int)CE_SubsidiaryOperationType.委外报检入库;
                detailBill.Provider        = outSourcing.Provider;
                detailBill.StorageID       = outSourcing.StorageID;
                detailBill.AffrimPersonnel = outSourcing.ManagerPersonnel;
                detailBill.FillInDate      = outSourcing.DeclareTime;
            }

            return(detailBill);
        }
        /// <summary>
        /// 获取报检入库单信息
        /// </summary>
        /// <returns>返回是否成功获取库存信息</returns>
        public IQueryResult GetAllBill()
        {
            IAuthorization m_authorization = PlatformFactory.GetObject <IAuthorization>();
            IQueryResult   qr = null;

            try
            {
                if (QueryResultFilter == null)
                {
                    qr = m_authorization.Query("报检入库单查询", null);
                }
                else
                {
                    qr = m_authorization.Query("报检入库单查询", null, QueryResultFilter);
                }

                if (!qr.Succeeded)
                {
                    throw new Exception(qr.Error);
                }

                if (m_billUniqueID < 0)
                {
                    IBillTypeServer server   = ServerModuleFactory.GetServerModule <IBillTypeServer>();
                    BASE_BillType   billType = server.GetBillTypeFromName("报检入库单");

                    if (billType == null)
                    {
                        throw new Exception("获取不到单据类型信息");
                    }

                    m_billUniqueID = billType.UniqueID;
                }

                return(qr);
            }
            catch (Exception)
            {
                return(null);
            }
        }
        /// <summary>
        /// 获取普通入库单信息
        /// </summary>
        /// <param name="returnInfo">入库单</param>
        /// <param name="error">出错时返回错误信息,无错时返回null</param>
        /// <returns>操作是否成功的标志</returns>
        public bool GetAllBill(out IQueryResult returnInfo, out string error)
        {
            returnInfo = null;
            error      = null;

            IAuthorization authorization = PlatformFactory.GetObject <IAuthorization>();
            IQueryResult   qr            = null;

            if (QueryResultFilter == null)
            {
                qr = authorization.Query("普通入库单查询", null);
            }
            else
            {
                qr = authorization.Query("普通入库单查询", null, QueryResultFilter);
            }

            if (!qr.Succeeded)
            {
                error = qr.Error;
                return(false);
            }

            if (m_billUniqueID < 0)
            {
                IBillTypeServer server   = ServerModuleFactory.GetServerModule <IBillTypeServer>();
                BASE_BillType   billType = server.GetBillTypeFromName("普通入库单");

                if (billType == null)
                {
                    error = "获取不到单据类型信息";
                    return(false);
                }

                m_billUniqueID = billType.UniqueID;
            }

            returnInfo = qr;
            return(true);
        }
        /// <summary>
        /// 获取员工合同信息
        /// </summary>
        /// <param name="returnInfo">员工合同信息</param>
        /// <param name="error">出错时返回错误信息,无错时返回null</param>
        /// <returns>操作是否成功的标志</returns>
        public bool GetAllPersonnelContarct(out IQueryResult returnInfo, out string error)
        {
            returnInfo = null;
            error      = null;

            IAuthorization serverAuthorization = PlatformFactory.GetObject <IAuthorization>();
            IQueryResult   qr = null;

            if (QueryResultFilter == null)
            {
                qr = serverAuthorization.Query("员工合同管理", null);
            }
            else
            {
                qr = serverAuthorization.Query("员工合同管理", null, QueryResultFilter);
            }

            if (!qr.Succeeded)
            {
                error = qr.Error;
                return(false);
            }

            IBillTypeServer server      = BasicServerFactory.GetServerModule <IBillTypeServer>();
            BASE_BillType   lnqBillType = server.GetBillTypeFromName("员工合同管理");

            if (lnqBillType == null)
            {
                error = "获取不到单据类型信息";
                return(false);
            }

            int m_billUniqueID = lnqBillType.UniqueID;

            returnInfo = qr;
            return(true);
        }
        /// <summary>
        /// 使用单据号(已经在某单据中正式使用,该单据已经完成)
        /// </summary>
        /// <param name="billTypeName">单据类型名称</param>
        /// <param name="billNo">单据号</param>
        /// <returns>成功则返回true, 失败返回false或抛出异常</returns>
        public bool UseBillNo(string billTypeName, string billNo)
        {
            DepotManagementDataContext dc = CommentParameter.DepotDataContext;

            BASE_BillType billType = m_billTypeServer.GetBillTypeFromName(billTypeName);

            if (billType != null)
            {
                var result = from r in dc.BASE_AssignBillNo
                             where r.Bill_TypeCode == billType.TypeCode && r.Bill_No == billNo
                             select r;

                if (result.Count() > 0)
                {
                    result.Single().IsAbandoned = false;
                    result.Single().AlreadyUse  = true;

                    dc.SubmitChanges();
                    return(true);
                }
            }

            return(false);
        }
Beispiel #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="dataContxt">数据上下文</param>
        /// <param name="billServer">单据服务</param>
        /// <param name="billTypeName">单据类别名称, 如:领料单</param>
        /// <returns>返回获取到的新单据号</returns>
        public string AssignNewNo(DepotManagementDataContext dataContxt, IBasicBillServer billServer, string billTypeName)
        {
            BASE_BillType billType = m_billTypeServer.GetBillTypeFromName(billTypeName);

            string billNo = null;

            if (billType == null)
            {
                throw new Exception("不存在的单据类型名称:" + billTypeName);
            }

            m_billServer = billServer;

            BASE_AssignBillNo billInfo = null;

            #region 检查是否有放弃的编号

            var result = from r in dataContxt.BASE_AssignBillNo
                         where r.Bill_TypeCode == billType.TypeCode && r.AlreadyUse == false &&
                         r.IsAbandoned == true && r.AssignedDate.Year == ServerTime.Time.Year
                         select r;

            if (result.Count() > 0)
            {
                // 是否发现异常单据
                bool findExceptionBill = false;

                foreach (var item in result)
                {
                    if (!billServer.IsExist(dataContxt, item.Bill_No))
                    {
                        billInfo = item;
                        break;
                    }
                    else
                    {
                        findExceptionBill = true;
                        item.IsAbandoned  = false;
                    }
                }

                if (findExceptionBill)
                {
                    dataContxt.SubmitChanges();
                }

                if (billInfo != null)
                {
                    Console.WriteLine("使用放弃的单据号:{0}", billInfo.Bill_No);

                    billInfo.IsAbandoned  = false;
                    billInfo.AssignedDate = ServerModule.ServerTime.Time;

                    dataContxt.SubmitChanges();

                    return(billInfo.Bill_No);
                }
            }

            #endregion

            // 生成新编号
            int maxValue = 1;

            result = from r in dataContxt.BASE_AssignBillNo
                     where r.Bill_TypeCode == billType.TypeCode && r.AssignedDate.Year == ServerTime.Time.Year
                     select r;

            if (result.Count() > 0)
            {
                maxValue += (from c in dataContxt.BASE_AssignBillNo
                             where c.Bill_TypeCode == billType.TypeCode && c.AssignedDate.Year == ServerTime.Time.Year
                             select Convert.ToInt32(c.Bill_No.Substring(billType.TypeCode.Length + 6))).Max();
            }

            //string prefix = GlobalObject.PinYin.GetFirstPYLetter(billTypeName).Substring(0, 3).ToUpper();

            DateTime dt = ServerTime.Time;

            billNo = string.Format("{0}{1:D4}{2:D2}{3:D6}", billType.TypeCode, dt.Year, dt.Month, maxValue);

            Console.WriteLine("使用新分配的单据号:{0}", billNo);

            billInfo = new BASE_AssignBillNo();

            billInfo.AlreadyUse    = false;
            billInfo.AssignedDate  = ServerModule.ServerTime.Time;
            billInfo.Bill_No       = billNo;
            billInfo.Bill_TypeCode = billType.TypeCode;
            billInfo.IsAbandoned   = false;

            dataContxt.BASE_AssignBillNo.InsertOnSubmit(billInfo);

            dataContxt.SubmitChanges();

            return(billNo);
        }