Esempio n. 1
0
        /// <summary>添加往来帐到实体店系统中
        /// </summary>
        /// <param name="reckoningInfo"></param>
        /// <param name="errorMsg"></param>
        /// <returns></returns>
        private bool AddReckoningToEntityShop(ReckoningInfo reckoningInfo, out string errorMsg)
        {
            errorMsg = string.Empty;
            var info = new ReckoningRecordDTO
            {
                AccountReceivable = reckoningInfo.AccountReceivable,
                JoinTotalPrice    = reckoningInfo.JoinTotalPrice,
                AuditingState     = true,
                CompanyID         = reckoningInfo.ThirdCompanyID,
                DateCreated       = reckoningInfo.DateCreated,
                Description       = reckoningInfo.Description,
                ShopID            = reckoningInfo.FilialeId,
                NonceTotalled     = reckoningInfo.NonceTotalled,
                OriginalTradeCode = reckoningInfo.LinkTradeCode,
                ID            = reckoningInfo.ReckoningId,
                ReckoningType = reckoningInfo.ReckoningType,
                TradeCode     = reckoningInfo.TradeCode
            };

            if (info.CompanyID == info.ShopID)
            {
                errorMsg = ("往来公司ID和账目公司ID一样,故无法插入往来帐!");
                return(false);
            }
            if (!FilialeManager.IsEntityShopFiliale(info.ShopID))
            {
                errorMsg = ("往来公司ID不是门店公司,故无法插入往来帐!");
                return(false);
            }
            var headFililaleId = FilialeManager.GetShopHeadFilialeId(info.ShopID);
            var result         = PushManager.AddToShop(headFililaleId, "InsertReckoningWithPush", info.TradeCode, info);

            if (!result)
            {
                errorMsg = ("插入门店对ERP应付帐失败!");
                return(false);
            }
            return(true);
        }
Esempio n. 2
0
        /// <summary>添加门店应付帐
        /// </summary>
        /// <param name="filialeid"> </param>
        /// <param name="reckoningInfo"></param>
        public static bool AddShopFrontReckoning(Guid filialeid, ReckoningInfo reckoningInfo)
        {
            var info = new ReckoningRecordDTO
            {
                AccountReceivable = reckoningInfo.AccountReceivable,
                AuditingState     = false,
                CompanyID         = reckoningInfo.ThirdCompanyID,
                DateCreated       = reckoningInfo.DateCreated,
                Description       = reckoningInfo.Description,
                ShopID            = reckoningInfo.FilialeId,
                NonceTotalled     = reckoningInfo.NonceTotalled,
                OriginalTradeCode = reckoningInfo.LinkTradeCode,
                ID            = reckoningInfo.ReckoningId,
                ReckoningType = reckoningInfo.ReckoningType,
                TradeCode     = reckoningInfo.TradeCode
            };

            using (var client = ClientProxy.CreateShopStoreWcfClient((filialeid)))
            {
                var result = client.Instance.InsertReckoningRecord(info);
                return(result != null && result.IsSuccess);
            }
        }
Esempio n. 3
0
        /// <summary>新架构完成订单创建所需往来账   2015-01-19  陈重文
        /// </summary>
        /// <param name="goodsOrderInfo">订单信息</param>
        /// <param name="goodsOrderDetailInfoList">订单明细</param>
        /// <param name="goodsOrderDeliverInfo">订单运费信息</param>
        /// <param name="errorMsg">错误信息</param>
        /// <returns></returns>
        public IEnumerable <ReckoningInfo> NewCreateReckoningInfoList(GoodsOrderInfo goodsOrderInfo, IList <GoodsOrderDetailInfo> goodsOrderDetailInfoList, out GoodsOrderDeliverInfo goodsOrderDeliverInfo, out string errorMsg)
        {
            if (goodsOrderInfo.HostingFilialeId == Guid.Empty)
            {
                goodsOrderInfo.HostingFilialeId = WMSSao.GetHostingFilialeIdByWarehouseIdGoodsTypes(goodsOrderInfo.DeliverWarehouseId, goodsOrderInfo.SaleFilialeId, goodsOrderDetailInfoList.Select(ent => ent.GoodsType).Distinct());
            }
            //所需添加的往来帐集合
            IList <ReckoningInfo> reckoningList = new List <ReckoningInfo>();

            goodsOrderDeliverInfo = null;
            var orderCarriageInfo = _wmsSao.GetOrderNoCarriage(goodsOrderInfo.OrderNo, out errorMsg);

            if (orderCarriageInfo == null)
            {
                return(reckoningList);
            }
            var carriage = orderCarriageInfo.Carriage;

            if (carriage != 0)
            {
                goodsOrderDeliverInfo = new GoodsOrderDeliverInfo
                {
                    OrderId       = goodsOrderInfo.OrderId,
                    TotalWeight   = orderCarriageInfo.PackageWeight == 0 ? 0 : Convert.ToDouble(orderCarriageInfo.PackageWeight) / 1000,
                    CarriageFee   = Convert.ToDouble(orderCarriageInfo.Carriage),
                    ExpressId     = goodsOrderInfo.ExpressId,
                    ExpressNo     = goodsOrderInfo.ExpressNo,
                    MaxWrongValue = 0,
                    ProvinceName  = orderCarriageInfo.Province,
                    CityName      = orderCarriageInfo.City
                };
            }

            #region [检查快递往来单位信息]

            Guid companyId = Express.Instance.Get(goodsOrderInfo.ExpressId).CompanyId;
            CompanyCussentInfo expressCompanyInfo = _companyCussent.GetCompanyCussent(companyId);
            if (expressCompanyInfo == null)
            {
                errorMsg = "快递公司的往来对账信息没有建立!";
                return(new List <ReckoningInfo>());
            }

            #endregion

            //获取销售公司名称
            string saleFilialeName    = FilialeManager.GetName(goodsOrderInfo.SaleFilialeId);
            string hostingFilialeName = FilialeManager.GetName(goodsOrderInfo.HostingFilialeId);
            #region [运费往来帐]
            if (carriage > 0)
            {
                #region [销售公司对快递公司应付快递运费帐]
                //销售公司对快递公司的应付快递运费帐
                var saleFilialeToCarriage = new ReckoningInfo
                {
                    ContructType       = ContructType.Insert,
                    ReckoningId        = Guid.NewGuid(),
                    TradeCode          = _codeManager.GetCode(CodeType.PY),
                    DateCreated        = DateTime.Now,
                    ReckoningType      = (int)ReckoningType.Defray,
                    State              = (int)ReckoningStateType.Currently,
                    IsChecked          = (int)CheckType.NotCheck,
                    AuditingState      = (int)AuditingState.Yes,
                    LinkTradeCode      = goodsOrderInfo.ExpressNo,
                    WarehouseId        = goodsOrderInfo.DeliverWarehouseId,
                    FilialeId          = goodsOrderInfo.HostingFilialeId,
                    ThirdCompanyID     = expressCompanyInfo.CompanyId,
                    Description        = string.Format("[完成订单,{0}对快递公司{1}运费应付款]", hostingFilialeName, expressCompanyInfo.CompanyName),
                    AccountReceivable  = -carriage,
                    JoinTotalPrice     = -carriage,
                    ReckoningCheckType = (int)ReckoningCheckType.Carriage,
                    IsOut              = goodsOrderInfo.IsOut,
                    LinkTradeType      = (int)ReckoningLinkTradeType.Express,
                };
                reckoningList.Add(saleFilialeToCarriage);
                #endregion
            }
            #endregion

            #region 销售公司对快递公司的订单代收帐

            if (goodsOrderInfo.PayMode == (int)PayMode.COD || goodsOrderInfo.PayMode == (int)PayMode.COM)
            {
                #region [销售公司对快递公司的订单代收帐]

                //销售公司对快递公司的订单代收帐
                var saleFilialeToRealTotalPrice = new ReckoningInfo
                {
                    ContructType       = ContructType.Insert,
                    ReckoningId        = Guid.NewGuid(),
                    TradeCode          = _codeManager.GetCode(CodeType.GT),
                    DateCreated        = DateTime.Now,
                    ReckoningType      = (int)ReckoningType.Income,
                    State              = (int)ReckoningStateType.Currently,
                    IsChecked          = (int)CheckType.NotCheck,
                    AuditingState      = (int)AuditingState.Yes,
                    LinkTradeCode      = goodsOrderInfo.ExpressNo,
                    WarehouseId        = goodsOrderInfo.DeliverWarehouseId,
                    FilialeId          = goodsOrderInfo.SaleFilialeId,
                    ThirdCompanyID     = expressCompanyInfo.CompanyId,
                    Description        = string.Format("[完成订单,{0}对快递公司{1}的订单应收货款]", saleFilialeName, expressCompanyInfo.CompanyName),
                    AccountReceivable  = WebRudder.ReadInstance.CurrencyValue(goodsOrderInfo.RealTotalPrice),
                    ReckoningCheckType = (int)ReckoningCheckType.Collection,
                    IsOut              = goodsOrderInfo.IsOut,
                    LinkTradeType      = (int)ReckoningLinkTradeType.GoodsOrder,
                };

                reckoningList.Add(saleFilialeToRealTotalPrice);
                #endregion
            }
            #endregion

            return(reckoningList);
        }
Esempio n. 4
0
        /// <summary>
        /// 按指定计算日期、销售公司、物流配送公司、仓库、储位,生成销售公司的采购单和采购入库单
        /// </summary>
        /// <param name="calculateDate"></param>
        /// <param name="saleFilialeThirdCompanyId">销售公司往来单位Id</param>
        /// <param name="hostingFilialeId">物流公司ID</param>
        /// <param name="warehouseId"></param>
        /// <param name="storageType"></param>
        internal static void GenerateSaleFilialeStockInAndPurchasing(DateTime calculateDate, Guid saleFilialeThirdCompanyId, Guid hostingFilialeId, Guid warehouseId, int storageType)
        {
            var hostingFilialeThirdCompany = _companyCussent.GetCompanyByRelevanceFilialeId(hostingFilialeId); //根据物流公司获取往来单位

            if (hostingFilialeThirdCompany == null)
            {
                return;
            }
            var saleFilialeId = _companyCussent.GetRelevanceFilialeIdByCompanyId(saleFilialeThirdCompanyId);  //根据往来单位获取公司

            if (saleFilialeId == Guid.Empty)
            {
                return;
            }
            if (saleFilialeId == hostingFilialeId)
            {
                return;
            }

            bool isGenerated = SaleFilialeStorageInDal.IsGenerated(calculateDate, saleFilialeId, hostingFilialeThirdCompany.CompanyId, warehouseId, storageType);

            if (!isGenerated)
            {
                var simpleStockRecordDetails = SaleFilialeStorageInDal.GetSaleFilialeStockInDetailList(calculateDate, saleFilialeThirdCompanyId, hostingFilialeId, warehouseId, storageType);
                if (!simpleStockRecordDetails.Any())
                {
                    return;
                }

                // 不重新获取采购价,直接取对应的物流配送公司给销售公司的的销售出库单里计算即可得到
                var purchasePriceDict = (from item in simpleStockRecordDetails.GroupBy(g => g.GoodsId)
                                         select new KeyValuePair <Guid, decimal>(item.Key, item.Sum(s => s.Amount) / item.Sum(s => s.Quantity)))
                                        .ToDictionary(kv => kv.Key, kv => kv.Value);
                //销售公司采购单
                var purchasingRecord = new PurchasingInfo
                {
                    PurchasingID        = Guid.NewGuid(),
                    PurchasingNo        = _codeManager.GetCode(CodeType.PH),
                    CompanyID           = hostingFilialeThirdCompany.CompanyId,
                    CompanyName         = hostingFilialeThirdCompany.CompanyName,
                    FilialeID           = saleFilialeId,
                    WarehouseID         = warehouseId,
                    PurchasingState     = (int)PurchasingState.AllComplete,
                    PurchasingType      = (int)PurchasingType.AutoInternal,
                    StartTime           = calculateDate,
                    EndTime             = DateTime.Now,
                    Description         = "[内部采购]",
                    PmId                = Guid.Empty,
                    PmName              = string.Empty,
                    Director            = "系统",
                    PersonResponsible   = Guid.Empty,
                    ArrivalTime         = calculateDate.Date,
                    PurchasingFilialeId = saleFilialeId
                };
                var purchasingRecordDetailList = simpleStockRecordDetails.Select(m => new PurchasingDetailInfo
                {
                    PurchasingGoodsID   = Guid.NewGuid(),
                    PurchasingID        = purchasingRecord.PurchasingID,
                    GoodsID             = m.RealGoodsId,
                    GoodsName           = m.GoodsName,
                    GoodsCode           = m.GoodsCode,
                    Specification       = m.Specification,
                    CompanyID           = hostingFilialeThirdCompany.CompanyId,
                    Price               = purchasePriceDict.ContainsKey(m.GoodsId) ? purchasePriceDict[m.GoodsId] : 0,
                    PlanQuantity        = m.Quantity,
                    PurchasingGoodsType = (int)PurchasingGoodsType.NoGift,
                    RealityQuantity     = m.Quantity,
                    State               = 1,
                    Description         = "[内部采购]",
                    Units               = string.Empty
                }).ToList();

                //销售公司采购进货入库单
                var stockRecord = new StorageRecordInfo
                {
                    StockId              = Guid.NewGuid(),
                    TradeCode            = _codeManager.GetCode(CodeType.RK),
                    FilialeId            = saleFilialeId,
                    WarehouseId          = warehouseId,
                    ThirdCompanyID       = hostingFilialeThirdCompany.CompanyId,
                    DateCreated          = calculateDate.Date,
                    Transactor           = "系统操作",
                    Description          = "[内部采购]",
                    LogisticsCode        = string.Empty,
                    StockType            = (int)StorageRecordType.BuyStockIn,
                    StockState           = (int)StorageRecordState.Finished,
                    LinkTradeType        = (int)StorageRecordLinkTradeType.Purchasing,
                    LinkTradeCode        = purchasingRecord.PurchasingNo,
                    LinkTradeID          = purchasingRecord.PurchasingID,
                    RelevanceFilialeId   = Guid.Empty,
                    RelevanceWarehouseId = Guid.Empty,
                    StockValidation      = false,
                    StorageType          = storageType,
                    SubtotalQuantity     = 0,
                    AccountReceivable    = 0,
                    TradeBothPartiesType = (int)TradeBothPartiesType.HostingToSale
                };
                var stockRecordDetailList = simpleStockRecordDetails.Select(m => new StorageRecordDetailInfo
                {
                    StockId                  = stockRecord.StockId,
                    GoodsId                  = m.GoodsId,
                    Specification            = m.Specification,
                    Quantity                 = m.Quantity,
                    UnitPrice                = purchasePriceDict.ContainsKey(m.GoodsId) ? purchasePriceDict[m.GoodsId] : 0,
                    GoodsName                = m.GoodsName,
                    GoodsCode                = m.GoodsCode,
                    RealGoodsId              = m.RealGoodsId,
                    Description              = "[内部采购]",
                    NonceWarehouseGoodsStock = 0,
                    Units     = string.Empty,
                    ShelfType = 1
                }).ToList();

                List <ReckoningInfo> reckoningInfos = new List <ReckoningInfo>();
                var accountReceivable = Math.Round(Math.Abs(stockRecordDetailList.Sum(act => act.Quantity * act.UnitPrice)), 2);
                //可得采购应付款
                var saleFilialeReckoning = new ReckoningInfo(Guid.NewGuid(), stockRecord.FilialeId, stockRecord.ThirdCompanyID,
                                                             _codeManager.GetCode(CodeType.PY), stockRecord.Description,
                                                             -accountReceivable, (int)ReckoningType.Defray,
                                                             (int)ReckoningStateType.Currently,
                                                             (int)CheckType.NotCheck, (int)AuditingState.Yes,
                                                             stockRecord.TradeCode, stockRecord.WarehouseId)
                {
                    LinkTradeType = (int)ReckoningLinkTradeType.StockIn,
                    IsOut         = stockRecord.IsOut
                };
                //可镜销售出库应收款
                var hostingFilialeReckoning = new ReckoningInfo(Guid.NewGuid(), hostingFilialeId, saleFilialeThirdCompanyId,
                                                                _codeManager.GetCode(CodeType.PY), stockRecord.Description,
                                                                accountReceivable, (int)ReckoningType.Income,
                                                                (int)ReckoningStateType.Currently,
                                                                (int)CheckType.NotCheck, (int)AuditingState.Yes,
                                                                stockRecord.TradeCode, stockRecord.WarehouseId)
                {
                    LinkTradeType = (int)ReckoningLinkTradeType.GoodsOrder,
                    IsOut         = stockRecord.IsOut
                };
                reckoningInfos.Add(saleFilialeReckoning);
                reckoningInfos.Add(hostingFilialeReckoning);
                using (var tran = new TransactionScope(TransactionScopeOption.Required))
                {
                    try
                    {
                        var result = _purchasingManager.Insert(purchasingRecord, purchasingRecordDetailList);
                        if (!result)
                        {
                            LogError(string.Format("生成采购单失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType));
                            return;
                        }
                        result = _storageManager.AddStorageRecord(stockRecord, stockRecordDetailList);
                        if (!result)
                        {
                            LogError(string.Format("生成采购入库单失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType));
                            return;
                        }

                        foreach (var reckoningInfo in reckoningInfos)
                        {
                            string errorMessage;
                            result = _reckoning.Insert(reckoningInfo, out errorMessage);
                            if (!result)
                            {
                                LogError(string.Format("生成往来账失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4},{5}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType, errorMessage));
                                return;
                            }
                        }

                        // 计算即时结算价
                        var items = _realTimeGrossSettlementManager.CreateByPurchaseStockIn(stockRecord.StockId, calculateDate).ToList();
                        items.ForEach(m => _realTimeGrossSettlementManager.Calculate(m));

                        tran.Complete();
                        LogInfo(string.Format("生成成功!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType));
                    }
                    catch (Exception ex)
                    {
                        LogError(string.Format("生成采购单和采购入库单失败!计算日期:{0},销售公司:{1},物流配送公司:{2},仓库:{3},储位:{4}", calculateDate, saleFilialeId, hostingFilialeId, warehouseId, storageType), ex);
                        return;
                    }
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 供应商对账
        /// </summary>
        /// <param name="checkType">往来单据付款类型</param>
        /// <param name="receiptInfo">往来单位收付款</param>
        /// <param name="description">描述备注</param>
        /// <param name="reckoningInfos">待添加的往来帐</param>
        /// <param name="stockOrderNos">入库单据集合</param>
        /// <param name="removeNos"></param>
        /// <param name="receiveBill">收款单</param>
        /// <param name="errorMsg">错误信息</param>
        /// <returns></returns>
        public static bool CheckCompany(int checkType, CompanyFundReceiptInfo receiptInfo,
                                        string description, IList <ReckoningInfo> reckoningInfos,
                                        IList <string> stockOrderNos, IList <string> removeNos, out CompanyFundReceiptInfo receiveBill, out string errorMsg)
        {
            receiveBill = null;
            var             codeManager        = new CodeManager();
            ICompanyCussent companyCussent     = new CompanyCussent(GlobalConfig.DB.FromType.Write);
            var             companyCussentInfo = companyCussent.GetCompanyCussent(receiptInfo.CompanyID); //判断往来单位是否为内部公司

            if (companyCussentInfo == null)
            {
                errorMsg = "往来单位信息获取失败";
                return(false);
            }
            var reckoningId   = Guid.NewGuid();
            var reckoningInfo = new ReckoningInfo(reckoningId, receiptInfo.FilialeId, receiptInfo.CompanyID, codeManager.GetCode(CodeType.PY), description,
                                                  receiptInfo.RealityBalance, (int)ReckoningType.Income,
                                                  (int)ReckoningStateType.Currently,
                                                  (int)CheckType.IsChecked, (int)AuditingState.Yes,
                                                  receiptInfo.ReceiptNo, Guid.Empty)
            {
                IsOut = receiptInfo.IsOut
            };
            IReckoning reckoning        = new Reckoning(GlobalConfig.DB.FromType.Write);
            var        thirdCompanyInfo = companyCussent.GetCompanyByRelevanceFilialeId(receiptInfo.FilialeId);

            #region 如果公司内部付款时 生成对应的已完成的收款往来单据)
            if (companyCussentInfo.RelevanceFilialeId != Guid.Empty)
            {
                if (thirdCompanyInfo == null)
                {
                    errorMsg = "付款公司未关联供应商";
                    return(false);
                }
                receiveBill = new CompanyFundReceiptInfo
                {
                    FilialeId            = companyCussentInfo.RelevanceFilialeId,
                    CompanyID            = thirdCompanyInfo.CompanyId,
                    PayBankAccountsId    = receiptInfo.ReceiveBankAccountId,
                    ReceiptType          = (int)CompanyFundReceiptType.Receive,
                    ReceiptStatus        = (int)CompanyFundReceiptState.Finish,
                    ReceiptID            = Guid.NewGuid(),
                    ReceiptNo            = codeManager.GetCode(CodeType.GT),
                    ApplyDateTime        = receiptInfo.ApplyDateTime,
                    PurchaseOrderNo      = "",
                    ReceiveBankAccountId = Guid.Empty,
                    StockOrderNos        = "",
                    DealFlowNo           = "",
                    FinishDate           = DateTime.Now,
                    AuditingDate         = receiptInfo.AuditingDate,
                    AuditorID            = receiptInfo.AuditorID,
                    Poundage             = 0,
                    ExecuteDateTime      = DateTime.Now,
                    Remark = string.Format("[公司内部付款单:{0}]", receiptInfo.ReceiptNo),
                    OtherDiscountCaption = "",
                    DiscountCaption      = "",
                    DiscountMoney        = 0,
                    DebarStockNos        = "",
                    LastRebate           = 0,
                    ApplicantID          = receiptInfo.ApplicantID,
                    AuditFailureReason   = "",
                    CompanyName          = thirdCompanyInfo.CompanyName,
                    ExpectBalance        = receiptInfo.RealityBalance,
                    HasInvoice           = receiptInfo.HasInvoice,
                    RealityBalance       = receiptInfo.RealityBalance,
                    IncludeStockNos      = "",
                    PaymentDate          = receiptInfo.PaymentDate,
                    SettleStartDate      = receiptInfo.SettleStartDate,
                    SettleEndDate        = receiptInfo.SettleEndDate
                };
            }
            #endregion
            switch (checkType)
            {
                #region //按采购单进行付款   如果往来单位是关联内部公司:ex:可得向可镜采购  那么可得付完款平账完成  可镜收款完成 平账
            case 1:
                var purchaseOrderNos = receiptInfo.PurchaseOrderNo.Split(',');
                if (purchaseOrderNos.Length > 1)
                {
                    IPurchasing purchasing = new Purchasing(GlobalConfig.DB.FromType.Read);
                    foreach (var purchaseOrderNo in purchaseOrderNos)
                    {
                        var totalPrice = purchasing.GetPurchasingAmount(purchaseOrderNo);
                        if (receiptInfo.DiscountMoney != 0)
                        {
                            totalPrice -= Math.Abs(receiptInfo.DiscountMoney);
                        }
                        if (receiptInfo.LastRebate != 0)
                        {
                            totalPrice -= Math.Abs(receiptInfo.LastRebate);
                        }
                        reckoningInfos.Add(new ReckoningInfo(Guid.NewGuid(), receiptInfo.FilialeId, receiptInfo.CompanyID, codeManager.GetCode(CodeType.PY), description,
                                                             totalPrice, (int)ReckoningType.Income,
                                                             (int)ReckoningStateType.Currently,
                                                             (int)CheckType.IsChecked, (int)AuditingState.Yes,
                                                             purchaseOrderNo, Guid.Empty)
                        {
                            IsOut         = receiptInfo.IsOut,
                            LinkTradeType = (int)ReckoningLinkTradeType.PurchasingNo
                        });

                        if (companyCussentInfo.RelevanceFilialeId != Guid.Empty)
                        {
                            reckoningInfos.Add(new ReckoningInfo(Guid.NewGuid(), companyCussentInfo.RelevanceFilialeId, thirdCompanyInfo.CompanyId, codeManager.GetCode(CodeType.PY), description,
                                                                 -totalPrice, (int)ReckoningType.Defray,
                                                                 (int)ReckoningStateType.Currently,
                                                                 (int)CheckType.IsChecked, (int)AuditingState.Yes,
                                                                 purchaseOrderNo, Guid.Empty)
                            {
                                IsOut         = receiptInfo.IsOut,
                                LinkTradeType = (int)ReckoningLinkTradeType.PurchasingNo
                            });
                        }
                    }
                    //将物流公司销售出库给销售公司的往来账平掉
                    reckoning.CheckByPurchaseOrder(purchaseOrderNos, reckoningInfo.FilialeId, receiptInfo.CompanyID, receiptInfo.SettleStartDate);
                    if (companyCussentInfo.RelevanceFilialeId != Guid.Empty)
                    {
                        reckoning.CheckByPurchaseOrder(purchaseOrderNos, companyCussentInfo.RelevanceFilialeId, thirdCompanyInfo.CompanyId, receiptInfo.SettleStartDate);
                    }
                }
                else
                {
                    reckoningInfo.LinkTradeCode = receiptInfo.PurchaseOrderNo;
                    reckoningInfo.LinkTradeType = (int)ReckoningLinkTradeType.PurchasingNo;
                    reckoningInfos.Add(reckoningInfo);
                    //将物流公司销售出库给销售公司的往来账平掉
                    reckoning.CheckByPurchaseOrder(purchaseOrderNos, reckoningInfo.FilialeId, receiptInfo.CompanyID, receiptInfo.SettleStartDate);
                    if (companyCussentInfo.RelevanceFilialeId != Guid.Empty)
                    {
                        reckoningInfos.Add(new ReckoningInfo(Guid.NewGuid(), companyCussentInfo.RelevanceFilialeId, thirdCompanyInfo.CompanyId, codeManager.GetCode(CodeType.PY), description,
                                                             -receiptInfo.RealityBalance, (int)ReckoningType.Defray,
                                                             (int)ReckoningStateType.Currently,
                                                             (int)CheckType.IsChecked, (int)AuditingState.Yes,
                                                             receiptInfo.PurchaseOrderNo, Guid.Empty)
                        {
                            IsOut         = receiptInfo.IsOut,
                            LinkTradeType = (int)ReckoningLinkTradeType.PurchasingNo
                        });
                        reckoning.CheckByPurchaseOrder(purchaseOrderNos, companyCussentInfo.RelevanceFilialeId, receiptInfo.CompanyID, receiptInfo.SettleStartDate);
                    }
                }

                break;
                #endregion

            case 2:      //按入库单进行付款
                var stockNos = receiptInfo.StockOrderNos.Split(',');
                reckoning.CheckByStorageTradeCode(stockNos, reckoningInfo.FilialeId, receiptInfo.CompanyID, receiptInfo.SettleStartDate);
                reckoningInfo.LinkTradeType = (int)ReckoningLinkTradeType.StockIn;
                reckoningInfos.Add(reckoningInfo);

                if (companyCussentInfo.RelevanceFilialeId != Guid.Empty)
                {
                    reckoningInfos.Add(new ReckoningInfo(Guid.NewGuid(), companyCussentInfo.RelevanceFilialeId, thirdCompanyInfo.CompanyId, codeManager.GetCode(CodeType.PY), description,
                                                         -receiptInfo.RealityBalance, (int)ReckoningType.Defray,
                                                         (int)ReckoningStateType.Currently,
                                                         (int)CheckType.IsChecked, (int)AuditingState.Yes,
                                                         receiptInfo.ReceiptNo, Guid.Empty)
                    {
                        IsOut = receiptInfo.IsOut
                    });
                    reckoning.CheckByStorageTradeCode(stockNos, companyCussentInfo.RelevanceFilialeId, thirdCompanyInfo.CompanyId, receiptInfo.SettleStartDate);
                }
                break;

            case 3:     //按日期付款
                reckoningInfo.LinkTradeType = (int)ReckoningLinkTradeType.CompanyFundReceipt;
                var result = reckoning.CheckByDate(receiptInfo.CompanyID, reckoningInfo.FilialeId, receiptInfo.SettleStartDate, receiptInfo.SettleEndDate.AddDays(1).AddSeconds(-1), (int)CheckType.NotCheck, stockOrderNos, removeNos);
                if (result)
                {
                    if (companyCussentInfo.RelevanceFilialeId != Guid.Empty)
                    {
                        reckoningInfos.Add(new ReckoningInfo(Guid.NewGuid(), companyCussentInfo.RelevanceFilialeId, thirdCompanyInfo.CompanyId, codeManager.GetCode(CodeType.PY), description,
                                                             -receiptInfo.RealityBalance, (int)ReckoningType.Defray,
                                                             (int)ReckoningStateType.Currently,
                                                             (int)CheckType.IsChecked, (int)AuditingState.Yes,
                                                             receiptInfo.ReceiptNo, Guid.Empty)
                        {
                            IsOut = receiptInfo.IsOut
                        });
                        //反向更新往来单位和公司的帐务
                        result = reckoning.CheckByDate(thirdCompanyInfo.CompanyId, companyCussentInfo.RelevanceFilialeId, receiptInfo.SettleStartDate, receiptInfo.SettleEndDate.AddDays(1).AddSeconds(-1), (int)CheckType.NotCheck, stockOrderNos, removeNos);
                        if (!result)
                        {
                            errorMsg = "反向更新往来单位和公司间往来帐状态失败!";
                            return(false);
                        }
                    }
                }
                else
                {
                    errorMsg = "按日期结算往来帐查询无效!";
                    return(false);
                }
                reckoningInfos.Add(reckoningInfo);
                break;

            default:
                if (companyCussentInfo.RelevanceFilialeId != Guid.Empty)
                {
                    reckoningInfos.Add(new ReckoningInfo(Guid.NewGuid(), companyCussentInfo.RelevanceFilialeId, thirdCompanyInfo.CompanyId, codeManager.GetCode(CodeType.PY), description,
                                                         -receiptInfo.RealityBalance, (int)ReckoningType.Defray,
                                                         (int)ReckoningStateType.Currently,
                                                         (int)CheckType.IsChecked, (int)AuditingState.Yes,
                                                         receiptInfo.ReceiptNo, Guid.Empty)
                    {
                        IsOut = receiptInfo.IsOut
                    });
                }
                reckoningInfo.LinkTradeType = (int)ReckoningLinkTradeType.CompanyFundReceipt;
                reckoningInfos.Add(reckoningInfo);
                break;
            }
            errorMsg = "";
            return(true);
        }