Exemplo n.º 1
0
        /// <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);
        }