/// <summary> /// 修改发票状态 /// </summary> /// <param name="fnInvoice">用于修改发票的实体</param> /// <returns>影像的行数</returns> /// <remarks>2013-07-10 周瑜 创建</remarks> public override int Update(FnInvoice fnInvoice) { return(Context.Update("FnInvoice", fnInvoice) .AutoMap(x => x.SysNo) .Where("SysNo", fnInvoice.SysNo) .Execute()); }
/// <summary> /// 订单发票事务 /// </summary> /// <param name="model">发票实体</param> /// <param name="user">操作人</param> /// <remarks>2013-12-05 周唐炬 创建</remarks> public void InvoiceTransaction(FnInvoice model, SyUser user) { var order = SoOrderBo.Instance.GetByTransactionSysNo(model.TransactionSysNo); if (order == null) { throw new HytException("未找到订单,请刷新重试!"); } model.InvoiceAmount = order.CashPay; model.TransactionSysNo = order.TransactionSysNo; //已经开具过发票 if (model.SysNo > 0) { //如果订单已存在开票数据,并且跟本次发票号不匹配,不能在新开发票 if (order.InvoiceSysNo > 0 && order.InvoiceSysNo != model.SysNo) { throw new HytException("该订单已经开具过发票,请搜索订单号重新开具!"); } if (order.Status == OrderStatus.销售单状态.作废.GetHashCode()) { throw new HytException("该订单已经作废,不能开票!"); } SoOrderBo.Instance.UpdateOrderInvoice(model); } else //新开 { model.CreatedBy = user.SysNo; model.CreatedDate = DateTime.Now; var newInvoiceSysNo = SoOrderBo.Instance.InsertOrderInvoice(model); if (newInvoiceSysNo > 0) { //发票信息更新到订单 SoOrderBo.Instance.UpdateOrderInvoice(order.SysNo, newInvoiceSysNo); //更新应收金额大于0 的出库单的发票系统编号 var list = WhWarehouseBo.Instance.GetModelByTransactionSysNo(order.TransactionSysNo); var master = list.Where(m => m.Receivable > 0).ToList(); if (master.Any()) { master.ForEach(x => { x.InvoiceSysNo = newInvoiceSysNo; WhWarehouseBo.Instance.UpdateStockOut(x); }); } } } }
/// <summary> /// 二期业务数据1段 财务 /// </summary> /// <param name="listObject"></param> private void AddBaseTaskObject2ToList2(List <BaseTask> listObject) { BaseTask fninvoice = new FnInvoice(); BaseTask fnpv = new FnReceiptVoucher(); BaseTask fnReceiptVoucherItem = new FnReceiptVoucherItem(); BaseTask fnop = new FnOnlinePayment(); BaseTask fnPaymentVoucher = new FnPaymentVoucher(); BaseTask fnPaymentVoucherItem = new FnPaymentVoucherItem(); listObject.Add(fninvoice); listObject.Add(fnpv); listObject.Add(fnReceiptVoucherItem); listObject.Add(fnop); listObject.Add(fnPaymentVoucher); listObject.Add(fnPaymentVoucherItem); }
private void AddBaseTaskObjectToList(List <BaseTask> listObject) { BaseTask bsAT = new BsArea(); BaseTask bsDP = new BsDeliveryPayment(); BaseTask bsPT = new BsPaymentType(); BaseTask bsCode = new BsCode(); BaseTask bsOrganization = new BsOrganization(); BaseTask bsOrganizationWarehouse = new BsOrganizationWarehouse(); BaseTask crCustomer = new CrCustomer(); BaseTask crCL = new CrCustomerLevel(); BaseTask crCQ = new CrCustomerQuestion(); BaseTask crRA = new CrReceiveAddress(); BaseTask dsMallType = new DsMallType(); BaseTask dsDealerLevel = new DsDealerLevel(); BaseTask feArticle = new FeArticle(); BaseTask feAC = new FeArticleCategory(); BaseTask feCS = new FeCommentSupport(); BaseTask fepc = new FeProductComment(); BaseTask fePCI = new FeProductCommentImage(); BaseTask fePCR = new FeProductCommentReply(); BaseTask feSearchKeyword = new FeSearchKeyword(); BaseTask feadvertgroup = new FeAdvertGroup(); BaseTask feadvertitem = new FeAdvertItem(); BaseTask feproductgroup = new FeProductGroup(); BaseTask feproductitem = new FeProductItem(); BaseTask fnIT = new FnInvoiceType(); BaseTask fninvoice = new FnInvoice(); BaseTask fnpv = new FnReceiptVoucher(); BaseTask fnReceiptVoucherItem = new FnReceiptVoucherItem(); BaseTask fnop = new FnOnlinePayment(); BaseTask fnPaymentVoucher = new FnPaymentVoucher(); BaseTask fnPaymentVoucherItem = new FnPaymentVoucherItem(); BaseTask lgDelivery = new LgDelivery(); BaseTask lgDI = new LgDeliveryItem(); BaseTask lgDS = new LgDeliveryScope(); BaseTask lgDT = new LgDeliveryType(); BaseTask lgDUC = new LgDeliveryUserCredit(); BaseTask lgPT = new LgPickupType(); BaseTask lgsettlement = new LgSettlement(); BaseTask lgSI = new LgSettlementItem(); BaseTask lgDeliveryPrintTemplate = new LgDeliveryPrintTemplate(); BaseTask pdAttribute = new PdAttribute(); BaseTask pdAG = new PdAttributeGroup(); BaseTask pdAGA = new PdAttributeGroupAssociation(); BaseTask pdAO = new PdAttributeOption(); BaseTask pdBrand = new PdBrand(); BaseTask pdCGA = new PdCatAttributeGroupAso(); BaseTask pdCategory = new PdCategory(); BaseTask pdCA = new PdCategoryAssociation(); BaseTask pdPrice = new PdPrice(); BaseTask pdProduct = new PdProduct(); BaseTask pdPA = new PdProductAssociation(); BaseTask pdProductAttribute = new PdProductAttribute(); BaseTask pdPI = new PdProductImage(); BaseTask pdTemplate = new PdTemplate(); BaseTask pdProductStatistics = new PdProductStatistics(); BaseTask soOrder = new SoOrder(); BaseTask soOrderItem = new SoOrderItem(); BaseTask soRA = new SoReceiveAddress(); BaseTask SyUG = new SyUserGroup(); BaseTask syGU = new SyGroupUser(); BaseTask syMenu = new SyMenu(); BaseTask syMenuPrivilege = new SyMenuPrivilege(); BaseTask syPrivilege = new SyPrivilege(); BaseTask syRole = new SyRole(); BaseTask syRoleMenu = new SyRoleMenu(); BaseTask syRolePrivilege = new SyRolePrivilege(); BaseTask syPermission = new SyPermission(); BaseTask syUser = new SyUser(); BaseTask syUW = new SyUserWarehouse(); BaseTask syMyMenu = new SyMyMenu(); BaseTask spcombo = new SpCombo(); BaseTask spComboItem = new SpComboItem(); BaseTask spcopon = new spcoupon(); BaseTask sqpromotion = new SPpromotion(); BaseTask spromotiongift = new SPpromotiongift(); BaseTask sppromotionoverlay = new SPpromotionoverlay(); BaseTask sppromotionrule = new SPpromotionrule(); BaseTask sppromotionrulecondition = new SPpromotionrulecondition(); BaseTask sppromotionrulekeyvalue = new SPpromotionrulekeyvalue(); BaseTask syTaskConfig = new SyTaskConfig(); BaseTask whStockOut = new WhStockOut(); BaseTask whStockOutItem = new WhstockOutItem(); BaseTask whwarehouse = new WhWarehouse(); BaseTask whwa = new WHwarehousearea(); BaseTask whwdy = new WHwarehouseDeliveryType(); BaseTask whWPT = new WhWarehousePickupType(); BaseTask whstockin = new WhStockIn(); BaseTask whstockinItem = new WHStockinItem(); BaseTask rcReturn = new RCReturn(); BaseTask rcReturnItem = new RcReturnItem(); listObject.Add(bsAT); listObject.Add(bsDP); listObject.Add(bsPT); listObject.Add(bsCode); listObject.Add(bsOrganization); listObject.Add(bsOrganizationWarehouse); listObject.Add(crCustomer); listObject.Add(crCL); listObject.Add(crCQ); listObject.Add(crRA); listObject.Add(dsMallType); listObject.Add(dsDealerLevel); listObject.Add(feArticle); listObject.Add(feAC); listObject.Add(feCS); listObject.Add(fePCI); listObject.Add(fePCR); listObject.Add(fepc); listObject.Add(feSearchKeyword); listObject.Add(feadvertgroup); listObject.Add(feadvertitem); listObject.Add(feproductgroup); listObject.Add(feproductitem); listObject.Add(fnIT); listObject.Add(fnpv); listObject.Add(fnReceiptVoucherItem); listObject.Add(fnop); listObject.Add(fninvoice); listObject.Add(fnPaymentVoucher); listObject.Add(fnPaymentVoucherItem); listObject.Add(lgDelivery); listObject.Add(lgDI); listObject.Add(lgDS); listObject.Add(lgDT); listObject.Add(lgPT); listObject.Add(lgsettlement); listObject.Add(lgSI); listObject.Add(lgDeliveryPrintTemplate); listObject.Add(pdAttribute); listObject.Add(pdAG); listObject.Add(pdAGA); listObject.Add(pdAO); listObject.Add(pdBrand); listObject.Add(pdCGA); listObject.Add(pdCategory); listObject.Add(pdCA); listObject.Add(pdPrice); listObject.Add(pdProduct); listObject.Add(pdPA); listObject.Add(pdProductAttribute); listObject.Add(pdTemplate); listObject.Add(pdProductStatistics); listObject.Add(soOrder); listObject.Add(soOrderItem); listObject.Add(spcombo); listObject.Add(spComboItem); listObject.Add(spcopon); listObject.Add(sqpromotion); listObject.Add(spromotiongift); //listObject.Add(sppromotionoverlay); listObject.Add(sppromotionrule); listObject.Add(sppromotionrulecondition); listObject.Add(sppromotionrulekeyvalue); listObject.Add(syGU); listObject.Add(syUW); listObject.Add(SyUG); listObject.Add(syMenu); listObject.Add(syUser); listObject.Add(syPermission); listObject.Add(syMenuPrivilege); listObject.Add(syPrivilege); listObject.Add(syRole); listObject.Add(syRoleMenu); listObject.Add(syRolePrivilege); listObject.Add(syMyMenu); listObject.Add(syTaskConfig); listObject.Add(whStockOut); listObject.Add(whStockOutItem); listObject.Add(whwarehouse); listObject.Add(whwa); listObject.Add(whwdy); listObject.Add(whWPT); listObject.Add(whstockin); listObject.Add(whstockinItem); listObject.Add(rcReturn); listObject.Add(rcReturnItem); listObject.Add(lgDUC); listObject.Add(pdPI); listObject.Add(soRA); }
/// <summary> /// 更新发票信息 /// </summary> /// <param name="entity">发票实体</param> /// <returns></returns> /// <remarks>2013-06-25 朱成果 创建</remarks> public abstract void UpdateEntity(FnInvoice entity);
/// <summary> /// 插入发票信息 /// </summary> /// <param name="entity">发票实体</param> /// <returns>发票编号</returns> /// <remarks>2013-06-25 朱成果 创建</remarks> public abstract int InsertEntity(FnInvoice entity);
/// <summary> /// 修改发票状态 /// </summary> /// <param name="fnInvoice">用于修改发票的实体</param> /// <returns>受影响的行数</returns> /// <remarks>2013-07-10 周瑜 创建</remarks> public abstract int Update(FnInvoice fnInvoice);
/// <summary> /// 门店提货转快递 /// </summary> /// <param name="stockOutSysNo">出库单编号</param> /// <param name="receiveAddress">快递收货地址</param> /// <param name="reason">转快递原因</param> /// <param name="message">会员留言</param> /// <param name="invoice">发票 null表示不开发票</param> /// <param name="payType">付款方式,现金或者刷卡</param> /// <param name="receiveMoney">收款金额 null 表示无应收款</param> /// <param name="voucherNo">刷卡流水号</param> /// <param name="easReceiptCode">eas收款科目编号</param> /// <returns></returns> /// <remarks> /// 2013-07-08 朱成果 创建 /// 2013/10/14 朱家宏 增加 voucherNo参数 /// </remarks> public void SetOrderToCourier(int stockOutSysNo, SoReceiveAddress receiveAddress, string reason, string message, FnInvoice invoice, int payType, decimal?receiveMoney, SyUser user, string voucherNo, string easReceiptCode = null) { var model = SetOutOfStock(stockOutSysNo, reason, user, false); //作废出库单 Hyt.BLL.Order.SoOrderBo.Instance.WriteSoTransactionLog(model.TransactionSysNo, "出库单门店自提转快递:" + stockOutSysNo, user.UserName); //转快递日志 var order = SoOrderBo.Instance.GetEntity(model.OrderSysNO); //更新订单信息 if (order == null) { throw new Exception("订单信息不存在"); } order.DeliveryTypeSysNo = DeliveryType.第三方快递; //修改配送方式 if (payType > 0) { order.PayTypeSysNo = payType; //门店现付 } else if (order.PayStatus == (int)Hyt.Model.WorkflowStatus.OrderStatus.销售单支付状态.未支付) { order.PayTypeSysNo = (int)PaymentType.现金预付; } order.Status = (int)Hyt.Model.WorkflowStatus.OrderStatus.销售单状态.待审核; order.InternalRemarks = "【门店转快递】:" + reason; order.CustomerMessage = message; //会员留言 order.ReceiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); //收货地址 order.ReceiveAddress.AreaSysNo = receiveAddress.AreaSysNo; //收货地区 order.ReceiveAddress.StreetAddress = receiveAddress.StreetAddress; //详细收货地址 if (invoice == null) { order.InvoiceSysNo = 0; //发票 } else { //以前没有创建发票 if (order.InvoiceSysNo == 0) { order.OrderInvoice = new FnInvoice { CreatedBy = user.SysNo, CreatedDate = DateTime.Now, InvoiceRemarks = invoice.InvoiceRemarks, InvoiceTitle = invoice.InvoiceTitle, InvoiceTypeSysNo = invoice.InvoiceTypeSysNo, InvoiceAmount = order.CashPay, Status = 10, TransactionSysNo = model.TransactionSysNo }; order.InvoiceSysNo = Hyt.BLL.Order.SoOrderBo.Instance.InsertOrderInvoice(order.OrderInvoice); } else //以前有发票 { order.OrderInvoice = Hyt.BLL.Order.SoOrderBo.Instance.GetFnInvoice(order.InvoiceSysNo); order.OrderInvoice.LastUpdateBy = user.SysNo; order.OrderInvoice.LastUpdateDate = DateTime.Now; order.OrderInvoice.InvoiceTitle = invoice.InvoiceTitle; order.OrderInvoice.InvoiceTypeSysNo = invoice.InvoiceTypeSysNo; order.OrderInvoice.InvoiceAmount = order.CashPay; Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderInvoice(order.OrderInvoice); } } var warehouse = Hyt.BLL.Warehouse.WhWarehouseBo.Instance.GetWhWareHouse(receiveAddress.AreaSysNo, null, (int)Hyt.Model.SystemPredefined.DeliveryType.第三方快递, WarehouseStatus.仓库状态.启用).FirstOrDefault(); if (warehouse != null) { order.DefaultWarehouseSysNo = warehouse.SysNo; //快递仓库默认为当前仓库 } SoOrderBo.Instance.UpdateOrder(order); //更新订单 余勇 修改为调用业务层方法 //Hyt.DataAccess.Order.ISoOrderDao.Instance.Update(order);//更新订单 SoOrderBo.Instance.SaveSoReceiveAddress(order.ReceiveAddress); //保存订单收货地址 //更新收款明细 if (receiveMoney.HasValue) { FnReceiptVoucherItem item = new FnReceiptVoucherItem() { Amount = receiveMoney.Value, CreatedBy = user.SysNo, CreatedDate = DateTime.Now, PaymentTypeSysNo = payType, TransactionSysNo = order.TransactionSysNo, Status = (int)Model.WorkflowStatus.FinanceStatus.收款单明细状态.效, VoucherNo = voucherNo, EasReceiptCode = easReceiptCode, ReceivablesSideType = (int)Hyt.Model.WorkflowStatus.FinanceStatus.收款方类型.仓库, //收款单仓库 ReceivablesSideSysNo = model.WarehouseSysNo //仓库编号 }; Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.InsertOrderReceiptVoucher(order.SysNo, item); if (receiveMoney.HasValue && (payType == (int)Hyt.Model.SystemPredefined.PaymentType.现金 || payType == (int)Hyt.Model.SystemPredefined.PaymentType.现金预付)) { Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.AutoConfirmReceiptVoucher(order.SysNo, user); //收现金自动确认收款单 } } //同步支付时间的到订单主表 ISoOrderDao.Instance.UpdateOrderPayDteById(order.SysNo); //写订单池记录 SyJobPoolPublishBo.Instance.OrderAuditBySysNo(order.SysNo); SyJobDispatcherBo.Instance.WriteJobLog(string.Format("门店提货转快递创建订单审核任务,销售单编号:{0}", order.SysNo), order.SysNo, null, user.SysNo); }
/// <summary> /// 门店提货 /// </summary> /// <param name="sysNo">出库单</param> /// <param name="payMoney">收款金额,如为空表已付款</param> /// <param name="PaymentType">PaymentType.现金或者 PaymentType.刷卡</param> /// <param name="user">操作人</param> /// <param name="invoice">发票 null表示不开发票</param> /// <param name="voucherNo">收款单明细-交易凭证号</param> /// <param name="withTran">是否事物方式提交</param> /// <param name="easReceiptCode">EAS收款科目编码</param> /// <returns></returns> /// <remarks> /// 2013-07-08 朱成果 创建 /// 2013/10/14 朱家宏 增加 voucherNo参数 /// </remarks> public void PickUp(int sysNo, decimal?payMoney, int PaymentType, Hyt.Model.SyUser user, FnInvoice invoice, string voucherNo, bool withTran = true, string easReceiptCode = null) { var entity = Hyt.DataAccess.Warehouse.IOutStockDao.Instance.GetModel(sysNo); if (entity == null) { throw new Exception("出库单不存在"); } if (entity.Status == (int)Hyt.Model.WorkflowStatus.WarehouseStatus.出库单自提状态.已自提) { throw new Exception("该出库单商品已被提货。"); } var mydel = new PickUpDel(delegate(WhStockOut xx) { if (invoice != null) //新开发票 { var fninvoice = Hyt.DataAccess.Order.IFnInvoiceDao.Instance.GetFnInvoiceByOrderID(entity.OrderSysNO); //是否已经设置了发票信息 if (fninvoice == null) { invoice.CreatedBy = user.SysNo; invoice.CreatedDate = DateTime.Now; invoice.Status = (int)Hyt.Model.WorkflowStatus.FinanceStatus.发票状态.已开票; //2013/10/21 朱家宏 添加 invoice.LastUpdateDate = DateTime.Now; invoice.LastUpdateBy = user.SysNo; invoice.TransactionSysNo = SoOrderBo.Instance.GetEntity(xx.OrderSysNO).TransactionSysNo; int newid = Hyt.DataAccess.Order.IFnInvoiceDao.Instance.InsertEntity(invoice); xx.InvoiceSysNo = newid; //出库单关联发票 SoOrderBo.Instance.UpdateOrderInvoice(entity.OrderSysNO, newid); //更新订单关联发票 余勇修改为调用业务方法 Hyt.DataAccess.Order.ISoOrderDao.Instance.UpdateInvoiceNo(entity.OrderSysNO, newid);//订单关联发票 } else { if (fninvoice.Status == (int)Hyt.Model.WorkflowStatus.FinanceStatus.发票状态.已开票) { throw new Exception("已经开具发票,不能重复开票"); } else { invoice.LastUpdateBy = user.SysNo; invoice.LastUpdateDate = DateTime.Now; invoice.InvoiceAmount = fninvoice.InvoiceAmount; invoice.Status = (int)Hyt.Model.WorkflowStatus.FinanceStatus.发票状态.已开票; invoice.SysNo = fninvoice.SysNo; Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderInvoice(invoice); //更新发票 余勇 修改 改为调用业务层方法 //Hyt.DataAccess.Order.IFnInvoiceDao.Instance.UpdateEntity(invoice); } } } xx.Status = (int)Hyt.Model.WorkflowStatus.WarehouseStatus.出库单自提状态.已自提; xx.StockOutBy = user.SysNo; xx.StockOutDate = DateTime.Now; xx.SignTime = DateTime.Now; if (payMoney.HasValue) { if (payMoney.Value > xx.Receivable) { throw new Exception("收款金额大于应收金额"); } // xx.Receivable = xx.Receivable - payMoney.Value; } Hyt.DataAccess.Warehouse.IOutStockDao.Instance.Update(xx); //更新出库单状态 GenerateOtherDataForPickUp(entity, user, payMoney, PaymentType); //创建已签收配送单,已结算结算单 //更新收款明细 if (payMoney.HasValue) { FnReceiptVoucherItem item = new FnReceiptVoucherItem() { Amount = payMoney.Value, CreatedBy = user.SysNo, CreatedDate = DateTime.Now, PaymentTypeSysNo = PaymentType, TransactionSysNo = entity.TransactionSysNo, Status = (int)Model.WorkflowStatus.FinanceStatus.收款单明细状态.效, VoucherNo = voucherNo, EasReceiptCode = easReceiptCode, ReceivablesSideType = (int)Hyt.Model.WorkflowStatus.FinanceStatus.收款方类型.仓库, //收款单仓库 ReceivablesSideSysNo = entity.WarehouseSysNo //仓库编号 }; Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.InsertOrderReceiptVoucher(xx.OrderSysNO, item); } //同步支付时间的到订单主表 ISoOrderDao.Instance.UpdateOrderPayDteById(xx.OrderSysNO); Hyt.BLL.Order.SoOrderBo.Instance.UpdateSoStatusForSotckOutSign(xx, user); //订单完成,并加积分 }); //外层都使用了事务将此方法包含起来,所以注释掉此段代码 //if (withTran) //{ // using (var tran = new TransactionScope()) // { // mydel(entity); // tran.Complete(); // } //} //else //{ mydel(entity); //} try { //a) 门店下单(付现)提货动作后自动确认收款单 //b) 门店自提货到付款(付现)提货后自动确认收款单 // 自动确认收款单,并写Eas数据 if (payMoney.HasValue && (PaymentType == (int)Hyt.Model.SystemPredefined.PaymentType.现金 || PaymentType == (int)Hyt.Model.SystemPredefined.PaymentType.现金预付)) { Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.AutoConfirmReceiptVoucher(entity.OrderSysNO, user); } //修改ERP库存 //Hyt.BLL.Warehouse.WhWarehouseBo.Instance.UpdateErpProductNumber(sysNo); //修改库存 //Hyt.BLL.Warehouse.WhWarehouseBo.Instance.UpdateWarehouseProductStock(sysNo); } catch (Exception ex) { Hyt.BLL.Log.SysLog.Instance.WriteLog(LogStatus.SysLogLevel.Error, LogStatus.系统日志来源.后台, "门店提货或者门店下单提货", LogStatus.系统日志目标类型.EAS, sysNo, ex, string.Empty, user.SysNo); } }