/// <summary>
        /// 创建RMA跟进日志
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual InternalMemoInfo CreateRMATracking(InternalMemoInfo entity)
        {
            InternalMemoInfo result = null;

            //检查单件号是否有效
            if (!DA.IsExistRegisterSysNo(entity.RegisterSysNo.Value))
            {
                string msg = ResouceManager.GetMessageString("RMA.Request", "RegisterNotExists");
                msg = string.Format(msg, entity.RegisterSysNo);
                throw new BizException(msg);
            }
            string currentUserName = ExternalDomainBroker.GetUserInfoBySysNo(ServiceContext.Current.UserSysNo);
            //更新Register的备注信息
            RegisterBasicInfo registerEntity = new RegisterBasicInfo()
            {
                SysNo = entity.RegisterSysNo,
                Memo  = String.Format("{0}[{1} {2}]", entity.Content, currentUserName, DateTime.Now)
            };

            using (TransactionScope scope = new TransactionScope())
            {
                result = DA.Create(entity);
                ObjectFactory <IRegisterDA> .Instance.UpdateMemo(registerEntity);

                scope.Complete();
            }

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// 接收申请单
        /// </summary>
        /// <param name="request">申请单信息</param>
        /// <returns>申请单信息</returns>
        public virtual RMARequestInfo Receive(RMARequestInfo request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request is required!");
            }
            if (!request.SysNo.HasValue)
            {
                throw new ArgumentNullException("request.SysNo is required!");
            }

            RMARequestInfo original = LoadWithRegistersBySysNo(request.SysNo.Value);

            request.VerifyReceive(original);

            original.ReceiveWarehouse = request.ReceiveWarehouse;
            original.ReceiveTime      = DateTime.Now;
            original.ReceiveUserSysNo = ServiceContext.Current.UserSysNo;
            //获取UI上需要的接收人名称
            original.ReceiveUserName  = ExternalDomainBroker.GetUserInfoBySysNo(original.ReceiveUserSysNo.Value);
            original.IsViaPostOffice  = request.IsViaPostOffice;
            original.PostageToPoint   = request.PostageToPoint;
            original.Status           = RMARequestStatus.Handling;
            original.CustomerSendTime = request.CustomerSendTime;
            original.ShipViaCode      = request.ShipViaCode;
            original.IsRejectRMA      = request.IsRejectRMA;
            original.TrackingNumber   = request.TrackingNumber;
            original.Phone            = request.Phone;
            original.Contact          = request.Contact;
            original.Address          = request.Address;
            original.ETakeDate        = request.ETakeDate;
            original.AreaSysNo        = request.AreaSysNo;
            original.Memo             = request.Memo;
            original.Note             = request.Note;
            original.IsReceiveMsg     = request.IsReceiveMsg;

            request.ReturnPoint = request.PostageToPoint;

            // data format:
            // { RegisterSysNo: [ HaveInvoice, IsFullAccessory, IsFullPackage ] }
            Dictionary <int, bool?[]> dic = new Dictionary <int, bool?[]>();

            request.Registers.ForEach(reg =>
            {
                dic.Add(
                    reg.BasicInfo.SysNo.Value,
                    new bool?[] { reg.BasicInfo.IsHaveInvoice, reg.BasicInfo.IsFullAccessory, reg.BasicInfo.IsFullPackage }
                    );
            });

            Dictionary <int, decimal> costs = GetSOItemsCost(request.SysNo.Value);
            bool isWithin7Days = IsWithin7Days(request.SOSysNo.Value, request.CustomerSendTime.Value);

            original.Registers.ForEach(reg =>
            {
                reg.BasicInfo.OwnBy             = RMAOwnBy.Customer;
                reg.BasicInfo.Location          = RMALocation.Self;
                reg.BasicInfo.LocationWarehouse = request.ReceiveWarehouse;
                reg.BasicInfo.OwnByWarehouse    = ((int)RMAOwnBy.Origin).ToString();
                reg.BasicInfo.Cost            = costs[reg.BasicInfo.ProductSysNo.Value];
                reg.BasicInfo.IsWithin7Days   = isWithin7Days;
                reg.BasicInfo.Status          = request.Status;
                reg.BasicInfo.IsHaveInvoice   = dic[reg.BasicInfo.SysNo.Value][0];
                reg.BasicInfo.IsFullAccessory = dic[reg.BasicInfo.SysNo.Value][1];
                reg.BasicInfo.IsFullPackage   = dic[reg.BasicInfo.SysNo.Value][2];
            });

            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                UpdateWithRegisters(original);

                UpdateInventory(original.Registers, true);

                scope.Complete();
            }

            var customer = ExternalDomainBroker.GetCustomerInfo(request.CustomerSysNo.Value);

            //SendEmail(customer.BasicInfo.Email, request.RequestID);

            ExternalDomainBroker.CreateOperationLog("RMA_Request_Recieve", BizLogType.RMA_Request_Receive, request.SysNo.Value, original.CompanyCode);

            return(original);
        }