protected override void AfterProcessForCancelAbandon(PayItemInfo payItemInfo) { }
protected override void BeforeProcessForCancelPay(PayItemInfo payItemInfo) { }
/// <summary> /// PMCC审核通过 /// </summary> /// <param name="refundInfo"></param> /// <returns></returns> public virtual VendorRefundInfo PMCCApproveVendorRefund(VendorRefundInfo refundInfo) { //编号不能为空 if (!refundInfo.SysNo.HasValue || refundInfo.SysNo.Value <= 0) { //供应商退款编号无效 throw new BizException(GetMessageString("VendorRefund_SysNoEmpty")); } VendorRefundInfo localEntity = VendorRefundDA.LoadVendorRefundInfo(refundInfo.SysNo.Value); if (localEntity == null) { //供应商退款单在数据中不存在 throw new BizException(GetMessageString("VendorRefund_RefundNotExist")); } if (localEntity.Status.Value == VendorRefundStatus.Abandon) { //该供应商退款单为作废状态,不允许进行当前操作! throw new BizException(GetMessageString("VendorRefund_Abandon_Invalid")); } if (localEntity.Status.Value == VendorRefundStatus.Origin) { //该供应商退款单为初始状态,不允许进行当前操作! throw new BizException(GetMessageString("VendorRefund_Origin_Invalid")); } if (localEntity.Status.Value == VendorRefundStatus.PMDVerify) { //该供应商退款单为PMD审核状态,不允许进行当前操作! throw new BizException(GetMessageString("VendorRefund_PMDVerify_Invalid")); } if (localEntity.Status.Value == VendorRefundStatus.PMCCVerify) { throw new BizException("该供应商退款单为PMCC审核状态,不允许进行当前操作!"); } //if (localEntity.CreateUserSysNo == ServiceContext.Current.UserSysNo) //{ // //供应商退款单中,创建人,PM审核人,PMD审核人,PMCC审核人,不能相同 // throw new BizException(GetMessageString("VendorRefund_OperatorCannotSame_Invalid")); //} localEntity.PMCCUserSysNo = ServiceContext.Current.UserSysNo; localEntity.PMCCAuditTime = System.DateTime.Now; localEntity.PMCCMemo = refundInfo.PMCCMemo; localEntity.Status = VendorRefundStatus.PMCCVerify; //加载当前商家退款单Items: List <VendorRefundItemInfo> localItem = VendorRefundDA.LoadVendorRefundItems(localEntity.SysNo.Value); #region 调用RMA接口:判断单件是否可以关闭 List <int> RegisterSysNo = new List <int>(); localItem.ForEach(a => RegisterSysNo.Add(a.RegisterSysNo.Value)); //调用RMA接口,判断单件是否可以关闭 List <RMARegisterInfo> getList = ExternalDomainBroker.GetRMARegisterList(RegisterSysNo); foreach (var item in getList) { if (item.BasicInfo.Status != RMARequestStatus.Handling) //RMARequestStatus.Handling 1 表示 处理中 { throw new BizException(string.Format(GetMessageString("VendorRefund_CloseInvalid"), item.SysNo.Value)); } } #endregion TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; List <VendorRefundItemInfo> list = new List <VendorRefundItemInfo>(); List <KeyValuePair <int, int> > registerList = new List <KeyValuePair <int, int> >(); List <VendorRefundInfo> deductOnVendor = new List <VendorRefundInfo>(); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { //更新状态 : localEntity = VendorRefundDA.UpdateVendorRefundInfo(localEntity); //关闭单件并扣减RMA库存中OnVendorQty数量: list = VendorRefundDA.LoadVendorRefundItems(localEntity.SysNo.Value); foreach (var item in list) { int registerNo = item.RegisterSysNo.Value; registerList.Add(new KeyValuePair <int, int>(registerNo, localEntity.PMDUserSysNo.Value)); ////调用RMA接口,根据单件号获取接收仓库: string[] str = ExternalDomainBroker.GetReceiveWarehouseByRegisterSysNo(registerNo); if (!string.IsNullOrEmpty(str[0]) && !string.IsNullOrEmpty(str[1])) { deductOnVendor.Add(new VendorRefundInfo { WarehouseSysNo = Convert.ToInt32(str[0]), ProductSysNo = Convert.ToInt32(str[1]), RegisterSysNo = registerNo }); } } ////调用RMA接口,关闭送修单: List <int> OutBound = ExternalDomainBroker.GetOutBoundSysNoListByRegisterSysNo(registerList.ToListString("Key")); ExternalDomainBroker.UpdateOutBound(OutBound.ToListString()); //发送ESB消息 EventPublisher.Publish <VendorRefundInfoAuditMessage>(new VendorRefundInfoAuditMessage() { AuditUserSysNo = ServiceContext.Current.UserSysNo, SysNo = refundInfo.SysNo.Value }); scope.Complete(); } ////调用RMA接口:关闭单件 List <int> registerSysNos = new List <int>(); registerList.ForEach(x => { registerSysNos.Add(x.Key); }); ExternalDomainBroker.BatchCloseRegisterForVendorRefund(registerSysNos); //扣减RMA库存中OnVendorQty数量 ExternalDomainBroker.BatchDeductOnVendorQty(deductOnVendor); ////调用Invoice接口,生成财务POR记录 PayableInfo payableInfo = new PayableInfo() { OrderSysNo = localEntity.SysNo.Value, CurrencySysNo = 1, OrderAmt = -1 * localEntity.RefundCashAmt.Value, PayStatus = 0, InvoiceStatus = 0, OrderType = PayableOrderType.RMAPOR, //9 InvoiceUpdateTime = DateTime.Parse("1900-1-1"), InvoiceFactStatus = PayableInvoiceFactStatus.Others // 3 }; PayableInfo createdPayableInfo = ExternalDomainBroker.CreatePayable(payableInfo); if (null != createdPayableInfo && 0 < createdPayableInfo.SysNo) { int financePaySysNo = createdPayableInfo.SysNo.Value; List <PayItemInfo> payItemList = new List <PayItemInfo>(); list.ForEach(x => { PayItemInfo item = new PayItemInfo() { PaySysNo = financePaySysNo, PayStyle = PayItemStyle.Normal, Status = PayItemStatus.Origin, PayAmt = x.RefundCash.HasValue ? (-1 * x.RefundCash.Value) : -999999, OrderType = PayableOrderType.RMAPOR, OrderSysNo = x.RefundSysNo.Value }; payItemList.Add(item); }); ExternalDomainBroker.BatchCreatePayItem(payItemList); } return(localEntity); }
protected override void ProcessReferencePayableInfoForCreate(PayItemInfo entity) { //如果该付款单对应的应付款已经Abandon,那么此时需要重新激活该应付款并将其更新 if (ReferencePayableInfo != null) { if (ReferencePayableInfo.PayStatus == PayableStatus.Abandon) { ReferencePayableInfo.OrderAmt = entity.PayAmt; ReferencePayableInfo.PayStatus = PayableStatus.UnPay; if (entity.OrderType == PayableOrderType.VendorSettleOrder) { ReferencePayableInfo.EIMSNo = ExternalDomainBroker.GetConsignSettlementReturnPointSysNo(entity.OrderSysNo.Value); } else { ReferencePayableInfo.EIMSNo = null; } PayableBizProcessor.UpdateStatusAndOrderAmt(ReferencePayableInfo); entity.PaySysNo = ReferencePayableInfo.SysNo.Value; entity.CurrencySysNo = m_ConsignSettlement.CurrencyCode; entity.OrderType = ReferencePayableInfo.OrderType; entity.OrderSysNo = ReferencePayableInfo.OrderSysNo; } if (ReferencePayableInfo.PayStatus == PayableStatus.UnPay) { entity.PaySysNo = ReferencePayableInfo.SysNo.Value; entity.CurrencySysNo = m_ConsignSettlement.CurrencyCode; entity.OrderType = ReferencePayableInfo.OrderType; entity.OrderSysNo = ReferencePayableInfo.OrderSysNo; } } else { ReferencePayableInfo = new PayableInfo(); ReferencePayableInfo.OrderSysNo = entity.OrderSysNo.Value; ReferencePayableInfo.OrderType = entity.OrderType.Value; ReferencePayableInfo.AlreadyPayAmt = 0; ReferencePayableInfo.OrderAmt = entity.PayAmt; ReferencePayableInfo.CurrencySysNo = m_ConsignSettlement.CurrencyCode; ReferencePayableInfo.PayStatus = PayableStatus.UnPay; ReferencePayableInfo.InvoiceStatus = PayableInvoiceStatus.Absent; ReferencePayableInfo.AuditStatus = PayableAuditStatus.NotAudit; ReferencePayableInfo.InvoiceFactStatus = PayableInvoiceFactStatus.Corrent; ReferencePayableInfo.Note = "Auto created by system!"; ReferencePayableInfo.CompanyCode = entity.CompanyCode; if (entity.OrderType == PayableOrderType.VendorSettleOrder) { ReferencePayableInfo.EIMSNo = ExternalDomainBroker.GetConsignSettlementReturnPointSysNo(entity.OrderSysNo.Value); } ReferencePayableInfo = PayableBizProcessor.Create(ReferencePayableInfo); entity.PaySysNo = ReferencePayableInfo.SysNo.Value; entity.CurrencySysNo = m_ConsignSettlement.CurrencyCode; entity.OrderType = ReferencePayableInfo.OrderType; entity.OrderSysNo = ReferencePayableInfo.OrderSysNo; } }
/// <summary> /// 创建应付款单 /// </summary> /// <param name="payItem"></param> /// <returns></returns> public static PayItemInfo CreatePayItem(PayItemInfo payItem) { return(ObjectFactory <IInvoiceBizInteract> .Instance.CreatePayItem(payItem)); }
protected virtual void ProcessPayedPrepay(PayableInfo entity, PayItemInfo payitem) { PayableInfo payable = null; if (payitem.AvailableAmt < entity.InStockAmt - entity.EIMSAmt) { ThrowBizException("Payable_ProcessPayedPrepay_InStockAmtMoreThanAvailableAmt"); } //更新付款单可用金额 payitem.AvailableAmt -= entity.InStockAmt - entity.EIMSAmt; ObjectFactory <PayItemProcessor> .Instance.UpdateAvailableAmt(payitem.OrderType.Value, payitem.OrderSysNo.Value, payitem.AvailableAmt.Value); var pEntity = m_PayableDA.GetFirstPay(entity.OrderType.Value, entity.OrderSysNo.Value); if (entity.BatchNumber == 1) { if (pEntity == null) { ThrowBizException("Payable_ProcessPayedPrepay_NotExistPaidRecord"); } payable = new PayableInfo(); payable.OrderAmt = pEntity.OrderAmt; payable.SysNo = pEntity.SysNo; payable.PayStatus = PayableStatus.FullPay; payable.OrderStatus = entity.OrderStatus; payable.InStockAmt = entity.InStockAmt; payable.EIMSAmt = entity.EIMSAmt; payable.RawOrderAmt = entity.RawOrderAmt; m_PayableDA.UpdateFirstPay(payable); } else { payable = new PayableInfo(); payable.OrderSysNo = entity.OrderSysNo; payable.OrderType = entity.OrderType; payable.BatchNumber = entity.BatchNumber; payable.PayStatus = PayableStatus.FullPay; payable.AlreadyPayAmt = 0; payable.OrderAmt = payable.AlreadyPayAmt; payable.RawOrderAmt = entity.RawOrderAmt; payable.InStockAmt = entity.InStockAmt; payable.EIMSAmt = entity.EIMSAmt; payable.Note = "auto create during in stock"; payable.CurrencySysNo = 1; payable.OrderStatus = entity.OrderStatus; payable = Create(payable); } PayItemInfo pie = new PayItemInfo(); pie.OrderSysNo = entity.OrderSysNo; pie.OrderType = (PayableOrderType)entity.OrderType; pie.PaySysNo = payable.SysNo.Value; pie.PayAmt = entity.InStockAmt.Value - entity.EIMSAmt.Value; pie.SysNo = payitem.SysNo; pie.OrderStatus = entity.OrderStatus; pie.CompanyCode = entity.CompanyCode; if (entity.BatchNumber != 1) { ObjectFactory <PayItemProcessor> .Instance.CreatePayEx(pie); } if (entity.OrderStatus.Value == (int)PurchaseOrderStatus.PartlyInStocked) { //调用PO接口中止入库 ExternalDomainBroker.StopInStock(entity.OrderSysNo.Value); } }
public void PayPayItem(PayItemInfo entity) { if (entity.SysNo == null) { throw new ArgumentNullException("entity.SysNo"); } if (entity.PayUserSysNo == null) { throw new ArgumentNullException("entity.PayUserSysNo"); } var payItems = m_FinaceDA.QueryPayItems(new PayableItemCriteriaInfo { SysNo = entity.SysNo }); if (payItems == null || payItems.Count == 0) { //throw new BizException(string.Format("编号为[{0}]的付款单不存在", entity.SysNo)); ThrowBizException("Payable_PayBillNotFound"); } var item = payItems[0]; if (item.Status != PayItemStatus.Origin) { //throw new BizException("只有未支付的付款单才能支付."); ThrowBizException("Payable_JustUnPayBillCanPay"); } item.PayUserSysNo = entity.PayUserSysNo; var payList = m_FinaceDA.PayableQuery(new PayableCriteriaInfo { SysNo = item.PaySysNo }); if (payList == null || payList.Count == 0) { //throw new BizException("未找到该付款单对应的应付款信息"); ThrowBizException("Payable_PayBillNotFoundPayInfo"); } var pay = payList[0]; if (!string.Equals(pay.AuditStatus.ToString(), PayableAuditStatus.Audited.ToString(), StringComparison.OrdinalIgnoreCase)) { //throw new BizException("只有财务审核通过的付款单才能支付."); ThrowBizException("Payable_JustAuditPassCanPay"); } item.OrderSysNo = pay.OrderSysNo; item.BatchNumber = pay.BatchNumber; //现金支付的必须有银行科目号 //if (pay.OrderType == PayableOrderType.ReturnPointCashAdjust) //{ // if (string.IsNullOrEmpty(entity.BankGLAccount)) // { // throw new BizException("现金支付必须有银行科目账号"); // } // item.BankGLAccount = entity.BankGLAccount; //} if (pay.OrderType == PayableOrderType.PO || pay.OrderType == PayableOrderType.POAdjust) { item = new POProcess().Pay(item, true); } //else if (pay.OrderType == PayableOrderType.ReturnPointCashAdjust // || pay.OrderType == PayableOrderType.SubAccount // || pay.OrderType == PayableOrderType.SubInvoice) //{ // item = new EIMSReturnPointCashProcess().Pay(item, true); //} else { item = new OtherOrderTypeProcess().Pay(item, true); } }