/// <summary> /// 虚库采购单 - 创建 /// </summary> /// <param name="vspoInfo"></param> /// <returns></returns> public virtual VirtualStockPurchaseOrderInfo CreateVSPO(VirtualStockPurchaseOrderInfo vspoInfo) { //验证 vspoInfo.PurchaseQty = 1; vspoInfo.Status = VirtualPurchaseOrderStatus.Normal; //初始状态 vspoInfo.CreateTime = DateTime.Now; vspoInfo.InStockOrderType = VirtualPurchaseInStockOrderType.PO; if (vspoInfo.SOItemSysNo == null || !vspoInfo.SOItemSysNo.HasValue) { //销售单Item编号不能为空! throw new BizException(GetMessageString("VSPO_ItemSysNoEmpty")); } //不能再生成虚库商品采购单 int i = VSPurchaseOrderDA.CalcVSPOQuantity(vspoInfo.SOItemSysNo.Value); if (i <= 0) { //不能再生成虚库商品采购单 throw new BizException(GetMessageString("VSPO_CannotCreateVSPO")); } for (int j = 1; j <= i; j++) { //生成虚库采购单 vspoInfo.SysNo = VSPurchaseOrderDA.CreateVSPO(vspoInfo).SysNo; //写LOG: CommonService.WriteLog<VSPOEntity>(entity, " created VSPO ", entity.SysNo.Value.ToString(), (int)LogType.St_SOVirtualItemRequest_Add); ExternalDomainBroker.CreateLog(" created VSPO " , BizEntity.Common.BizLogType.St_SOVirtualItemRequest_Add , vspoInfo.SysNo.Value , vspoInfo.CompanyCode); } //邮件发送 SendEmailWhenCreate(vspoInfo); //调用Order接口,生成虚库采购单后将对应的订单标识为备货状态 ExternalDomainBroker.UpdateSOCheckShipping(vspoInfo.SOSysNo.Value, VirtualPurchaseOrderStatus.Close); return(vspoInfo); }
/// <summary> /// 虚库采购单 - 作废 /// </summary> /// <param name="vspoInfo"></param> /// <returns></returns> public virtual VirtualStockPurchaseOrderInfo AdandonVSPO(VirtualStockPurchaseOrderInfo vspoInfo) { #region [Check实体逻辑] //虚库采购单的编号不能为空: if (!vspoInfo.SysNo.HasValue) { //虚库采购单的编号不能为空 throw new BizException(GetMessageString("VSPO_VSPOSysNoEmpty")); } #endregion //虚库采购单为作废状态,不能再作废 VirtualStockPurchaseOrderInfo localEntiy = VSPurchaseOrderDA.LoadVSPO(vspoInfo.SysNo.Value); if (localEntiy == null) { ///该虚库采购单在数据中不存在,操作失败! throw new BizException(GetMessageString("VSPO_VSPONotFound")); } if (localEntiy.Status.HasValue && localEntiy.Status.Value == VirtualPurchaseOrderStatus.Abandon) { //虚库采购单为作废状态,不能再作废! throw new BizException(GetMessageString("VSPO_Abandon_Invalid_Abandon")); } if (vspoInfo.InStockOrderType.Value != VirtualPurchaseInStockOrderType.PO) { vspoInfo.InStockOrderSysNo = Convert.ToInt32(vspoInfo.InStockOrderSysNo.Value.ToString().Substring(2)); } TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { string strInfo = string.Empty; if (vspoInfo.InStockOrderType == VirtualPurchaseInStockOrderType.Shift) { int isCanAbadon = 0; int shiftsysno = 0; //调用Inventory接口,判断对应的自动移仓单是否已出库 bool isShift = ExternalDomainBroker.IsAutoShift(vspoInfo.InStockOrderSysNo.Value, out isCanAbadon, out shiftsysno); if (isShift) { if (isCanAbadon == 1) { //调用Invoice接口,设置 St_Shift 作废 ExternalDomainBroker.AbandonShift(shiftsysno); } if (isCanAbadon == 0) { //请注意:对应的自动移仓单已出库! strInfo = GetMessageString("VSPO_OutStock_Note"); } } } if (vspoInfo.InStockOrderType.Value != VirtualPurchaseInStockOrderType.PO) { vspoInfo.InStockOrderSysNo = Convert.ToInt32(vspoInfo.InStockOrderSysNo.Value.ToString().Substring(2)); } //更新状态操作: vspoInfo.Status = VirtualPurchaseOrderStatus.Abandon; VSPurchaseOrderDA.AbandonVSPO(vspoInfo); //邮件收发 ////成功作废虚库商品采购单,并发邮件通知PM负责人员 //vspoInfo.Messges = strInfo + MessageResource.VSPO_Check_ConfirmPMRequiredValue; //如果销售单没有生成虚库采购单: int getExistSOCount = VSPurchaseOrderDA.CheckExistsSOVirtualItemRequest(vspoInfo.SOSysNo.Value); if (getExistSOCount == 0) { //调用Order接口,作废虚库采购单后将对应的订单标识为未备货状态: ExternalDomainBroker.UpdateSOCheckShipping(vspoInfo.SOSysNo.Value, VirtualPurchaseOrderStatus.Abandon); } //发送邮件: SendEmailWhenUpdate(PurchaseOrderOperationType.Abandon, vspoInfo); //写LOG:CommonService.WriteLog<VSPOEntity>(entity, " Abandon VSPO ", entity.SysNo.Value.ToString(), (int)LogType.St_SOVirtualItemRequest_Abandon); ExternalDomainBroker.CreateLog(" Abandon VSPO " , BizEntity.Common.BizLogType.St_SOVirtualItemRequest_Abandon , vspoInfo.SysNo.Value , vspoInfo.CompanyCode); scope.Complete(); } return(vspoInfo); }