示例#1
0
        /// <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);
        }
示例#2
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);
        }