public static bool VerifyUpdate(this RMARequestInfo request, RMARequestInfo requestInDb) { if (request == null) { throw new ArgumentNullException("request"); } if (requestInDb == null) { throw new ArgumentNullException("requestInDb"); } // verify required fields CommonCheck.VerifyNotNull("SysNo", request.SysNo); CommonCheck.VerifyNotNull("RequestID", request.RequestID); CommonCheck.VerifyNotNull("SOSysNo", request.SOSysNo); CommonCheck.VerifyNotNull("CustomerSysNo", request.CustomerSysNo); CommonCheck.VerifyNotNull("Address", request.Address); CommonCheck.VerifyNotNull("Contact", request.Contact); CommonCheck.VerifyNotNull("Phone", request.Phone); // verify request fields' max length request.VerifyFieldsLength(); // 如果是”邮局普包“就必须传入”邮资转积分“数 if (request.ShipViaCode == RMAConst.ShipVia_PostOffice) { if (request.PostageToPoint.HasValue && request.PostageToPoint.Value > 50) { string msg = ResouceManager.GetMessageString("RMA.Request", "PostageToPointShouldLessThan50"); throw new BizException(msg); } } if (requestInDb.Status.Value == RMARequestStatus.Complete || requestInDb.Status.Value == RMARequestStatus.Abandon) { string msg = ResouceManager.GetMessageString("RMA.Request", "CannotEditWhenHandlingOrClosedOrAbandon"); throw new BizException(msg); } if (!request.Status.HasValue) { string msg = ResouceManager.GetMessageString("RMA.Request", "ObjectIsRequired"); msg = string.Format(msg, "申请单处理状态"); throw new BizException(msg); } if (request.Status != requestInDb.Status) { switch (request.Status.Value) { case RMARequestStatus.Abandon: request.VerifyAbandon(requestInDb); break; case RMARequestStatus.Complete: break; case RMARequestStatus.Handling: request.VerifyReceive(requestInDb); break; case RMARequestStatus.Origin: requestInDb.VerifyCancelReceive(); break; } } return(true); }
/// <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); }