public virtual CustomerContactInfo LoadByRequestSysNo(int sysNo) { CustomerContactInfo entity = null; entity = da.Load(sysNo); if (entity == null) { RMARequestInfo request = ObjectFactory <IRequestDA> .Instance.LoadBySysNo(sysNo); if (request != null) { entity = new CustomerContactInfo(); entity.ReceiveAddress = request.Address; entity.ReceiveAreaSysNo = request.AreaSysNo; entity.ReceiveContact = request.Contact; entity.ReceiveName = request.Contact; entity.ReceivePhone = request.Phone; if (request.SOSysNo.HasValue) { SOInfo so = ExternalDomainBroker.GetSOInfo(request.SOSysNo.Value); if (so != null) { entity.ReceiveCellPhone = so.ReceiverInfo.MobilePhone; entity.ReceiveZip = so.ReceiverInfo.Zip; } } } } return(entity); }
/// <summary> /// 退款预检查.必须有退款调整单且状态为待审核&必须由退款调整单单据且状态为审核通过。 /// </summary> /// <param name="entity"></param> /// <param name="soBaseInfo"></param> /// <param name="refundBalanceInfo"></param> private void VerifyForRefund(RefundBalanceInfo entity, out SOInfo soInfo, out RefundBalanceInfo refundBalanceInfo) { refundBalanceInfo = GetRefundBalanceBySysNo(entity.SysNo.Value); if (refundBalanceInfo == null) { throw new BizException(ResouceManager.GetMessageString("RMA.RefundBalance", "RefundBalanceNotExists")); } if (refundBalanceInfo.Status != RefundBalanceStatus.WaitingRefund) { throw new BizException(ResouceManager.GetMessageString("RMA.RefundBalance", "Refund_RefundBalanceStatusValid")); } if (refundBalanceInfo.CashAmt == null) { throw new BizException(ResouceManager.GetMessageString("RMA.RefundBalance", "CashAmtRequired")); } if (refundBalanceInfo.CashAmt.Value >= 0) { SOIncomeRefundInfo incomeBankInfo = ExternalDomainBroker.GetSOIncomeRefundInfo(entity.SysNo.Value, RefundOrderType.RO_Balance); if (incomeBankInfo == null) { throw new BizException(ResouceManager.GetMessageString("RMA.RefundBalance", "Refund_SOIncomeRefundInfoValid")); } else if (incomeBankInfo.Status != ECCentral.BizEntity.Invoice.RefundStatus.Audit) { throw new BizException(ResouceManager.GetMessageString("RMA.RefundBalance", "Refund_SOIncomeStatusValid")); } } soInfo = ExternalDomainBroker.GetSOInfo(entity.OriginalSOSysNo.Value); if (soInfo == null) { throw new BizException(ResouceManager.GetMessageString("RMA.RefundBalance", "SONotExists")); } }
public virtual void SendDunEmail(int OutboundSysNo, int RegisterSysNo, int SendMailCount, int SOSysNo) { if (outBoundDA.UpdateOutboundItemSendEmailCount(OutboundSysNo, RegisterSysNo, SendMailCount)) { #region 构建邮件模板,调用EmailService发送邮件 RMARegisterInfo registerInfo = ObjectFactory <IRegisterDA> .Instance.LoadBySysNo(RegisterSysNo); int productSysNo = registerInfo.BasicInfo.ProductSysNo.Value; ProductManagerInfo pmInfo = ExternalDomainBroker.GetPMInfoByProductSysNo(productSysNo); ProductInfo product = ExternalDomainBroker.GetProductInfo(productSysNo); DataRow dr = outBoundDA.GetOutboundBySysNo(OutboundSysNo); string vendorName = string.Empty; DateTime outTime = DateTime.Now; if (dr != null) { vendorName = dr["VendorName"].ToString(); outTime = Convert.ToDateTime(dr["OutTime"]); } int vendorSysNo = Convert.ToInt32(dr["VendorSysNo"]); VendorInfo vendorInfo = ExternalDomainBroker.GetVendorFinanceInfoByVendorSysNo(vendorSysNo); SOInfo soInfo = ExternalDomainBroker.GetSOInfo(SOSysNo); string SODate = soInfo.BaseInfo.CreateTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); string Warranty = soInfo.Items.Where(p => p.ProductSysNo == productSysNo).FirstOrDefault().Warranty; //填充邮件模板 KeyValueVariables vars = new KeyValueVariables(); vars.Add("CurrentYear", DateTime.Now.Year); vars.Add("CurrentMonth", DateTime.Now.Month); vars.Add("CurrentDay", DateTime.Now.Day); vars.Add("CurrentTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ///Load单件填充的数据 vars.Add("RegisterSysNo", registerInfo.SysNo.Value); vars.Add("ProductID", product.ProductID); vars.Add("ProductName", product.ProductName); vars.Add("Memo", registerInfo.BasicInfo.Memo); vars.Add("RefundStatus", registerInfo.BasicInfo.RefundStatus); vars.Add("RevertStatus", registerInfo.RevertInfo.RevertStatus); vars.Add("ProductCost", registerInfo.BasicInfo.Cost); vars.Add("PMName", pmInfo.UserInfo.UserDisplayName); vars.Add("Day", GetTimeSpan(outTime).Days); vars.Add("Hour", GetTimeSpan(outTime).Hours); vars.Add("Secend", GetTimeSpan(outTime).Minutes); vars.Add("VendorName", vendorName); vars.Add("OutTime", outTime.ToString("yyyy-MM-dd HH:mm:ss")); vars.Add("SOSysNo", SOSysNo); vars.Add("SODate", SODate); vars.Add("Warranty", Warranty); vars.Add("IsContact", IsContactDesc(vendorInfo)); vars.Add("PayPeriodType", vendorInfo.VendorFinanceInfo.PayPeriodType.PayTermsName); string ccAddress = AppSettingManager.GetSetting("RMA", "OutBoundNotReturnEmails"); EmailHelper.SendEmailByTemplate(pmInfo.UserInfo.EmailAddress, ccAddress, "", "SendDunMailForOutBoundNotReturn", vars, null, true, true); #endregion } }
public void CreateRequest4AutoRMA(int soSysNo, string inUser) { //0. Load Data SOInfo soInfo = ExternalDomainBroker.GetSOInfo(soSysNo); //1. Validation ValidateSOInfo(soInfo, soSysNo); ValidateIfExistValidRMA(soInfo.SysNo.Value); ValidateCanCallRequest(soInfo); //2. Create Request int requestSysNo = 0; string requestState = "F"; int wareHouseNumber = -1; int vendorSysNo = GetVendorSysNoFromInUser(inUser); int userSysNo = AutoRMAUserSysNo; wareHouseNumber = GetWarehouseNumber(soInfo); string note = string.Empty; string memo = string.Empty; SellerPortalAutoRMALog sellerPortalAutoRMALog = GetSellerPortalAutoRMALog(soSysNo); if (sellerPortalAutoRMALog == null) { InsertSellerPortalAutoRMALog(soSysNo, inUser); sellerPortalAutoRMALog = GetSellerPortalAutoRMALog(soSysNo); } try { if (CreateRequest(soSysNo, userSysNo, note, memo, wareHouseNumber, ref requestSysNo)) { //设置日志状态 requestState = "S"; } } catch (Exception ex) { requestState = "F"; ExceptionHelper.HandleException(ex); } finally { UpdateSellerPortalAutoRMALog(soSysNo, requestState, DateTime.Now, sellerPortalAutoRMALog.RefundStatus, sellerPortalAutoRMALog.RefundTime.Value); sellerPortalAutoRMALog = GetSellerPortalAutoRMALog(soSysNo); } //3. Create Refund string refundStatus = "F"; try { if (ObjectFactory <SellerPortalRefundProcessor> .Instance.CreateRMAAutoRefund(soSysNo, memo, wareHouseNumber, userSysNo, vendorSysNo)) { refundStatus = "S"; } } catch (Exception ex) { refundStatus = "F"; ExceptionHelper.HandleException(ex); } finally { UpdateSellerPortalAutoRMALog(soSysNo, sellerPortalAutoRMALog.RequestStatus, sellerPortalAutoRMALog.RequestTime.Value, refundStatus, DateTime.Now); } }
/// <summary> /// 创建申请单于单件 /// </summary> /// <param name="soNumber"></param> /// <param name="userID"></param> /// <param name="strNote"></param> /// <param name="strMemo"></param> /// <param name="warehouseNumber"></param> /// <param name="refRequestSysNo"></param> /// <returns></returns> private bool CreateRequest(int soNumber, int userSysNo, string strNote, string strMemo, int warehouseNumber, ref int refRequestSysNo) { bool result = false; SOInfo so = ExternalDomainBroker.GetSOInfo(soNumber); RMARequestInfo request = new RMARequestInfo(); int requestSysNo = rmaSellerPortalDA.CreateSequence(TableName_RMA_Request_Sequence); string strRequestID = GenerateID(requestSysNo); request.SysNo = requestSysNo; request.RequestID = strRequestID; request.SOSysNo = soNumber; request.CustomerSysNo = so.BaseInfo.CustomerSysNo; request.Address = so.ReceiverInfo.Address; request.Contact = so.ReceiverInfo.Name; request.Phone = so.ReceiverInfo.Phone; request.ReceiveTime = DateTime.Now; request.ReceiveUserSysNo = userSysNo; request.Note = strNote; request.Memo = strMemo; request.Status = RMARequestStatus.Handling; request.AreaSysNo = so.ReceiverInfo.AreaSysNo; request.CustomerSendTime = DateTime.Now; request.IsRejectRMA = true; request.ReceiveWarehouse = warehouseNumber.ToString(); request.IsSubmit = true; request.ShipViaCode = "退换货自动处理,快递方式缺省"; refRequestSysNo = requestSysNo; request.CompanyCode = so.CompanyCode; TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { requestDA.Create(request); #if DEBUG if (Transaction.Current != null) { Debug.WriteLine(string.Format("LocalIdentifier:[{0}] Status:[{1}]", Transaction.Current.TransactionInformation.LocalIdentifier, Transaction.Current.TransactionInformation.Status.ToString()) ); } #endif foreach (SOItemInfo soItem in so.Items) { if (soItem.ProductType == SOProductType.Coupon) { continue; } for (int i = 0; i < soItem.Quantity; i++) { RMARegisterInfo register = new RMARegisterInfo(); register.CompanyCode = so.CompanyCode; int registerSysNo = rmaSellerPortalDA.CreateSequence(TableName_RMA_Register_Sequence); register.SysNo = registerSysNo; if (soItem.ProductType == SOProductType.ExtendWarranty) { register.BasicInfo.ProductSysNo = int.Parse(soItem.MasterProductSysNo); register.BasicInfo.OwnBy = RMAOwnBy.Origin; register.BasicInfo.Location = RMALocation.Origin; } else { register.BasicInfo.ProductSysNo = soItem.ProductSysNo; register.BasicInfo.OwnBy = RMAOwnBy.Customer; register.BasicInfo.Location = RMALocation.Self; } register.RequestType = RMARequestType.Return; register.BasicInfo.CustomerDesc = "物流拒收"; register.BasicInfo.NextHandler = RMANextHandler.RMA; register.BasicInfo.Status = RMARequestStatus.Handling; register.BasicInfo.IsWithin7Days = true; register.CheckInfo.IsRecommendRefund = true; //HACK:大小写 Cost register.BasicInfo.Cost = soItem.CostPrice; register.BasicInfo.RMAReason = 0;//质量问题 register.BasicInfo.CloseUserSysNo = userSysNo; register.BasicInfo.CloseTime = DateTime.Now; register.BasicInfo.IsHaveInvoice = true; register.BasicInfo.IsFullAccessory = true; register.BasicInfo.IsFullPackage = true; //RMA Warehouse register.BasicInfo.LocationWarehouse = warehouseNumber.ToString(); register.BasicInfo.OwnByWarehouse = ((int)RMAOwnBy.Origin).ToString(); //使用传过来的warehouseNumber register.BasicInfo.ShippedWarehouse = warehouseNumber.ToString(); register.BasicInfo.SOItemType = soItem.ProductType; bool insertRegisterResult = registerDA.Create(register); bool inserRequestItemResult = registerDA.InsertRequestItem(requestSysNo, registerSysNo); if (insertRegisterResult && inserRequestItemResult) { result = true; } } } scope.Complete(); } return(result); }
private string ozzShip = AppSettingManager.GetSetting("RMA", "PushShipTypeName"); // 上门取件物流 "OZZO奥硕物流"; /// <summary> /// 创建申请单 /// </summary> /// <param name="request">申请单信息</param> /// <returns>申请单信息</returns> public virtual RMARequestInfo Create(RMARequestInfo request) { request.VerifyForCreate(); if (request.ShipViaCode.Trim() == ozzShip) { //奥硕上门地点判断 //ValidOZZOFetchToHome(request); } var refundItems = ObjectFactory <IRefundDA> .Instance.GetMasterByOrderSysNo(request.SOSysNo.Value); if (refundItems != null) { refundItems.ForEach(p => { if (p.Status == RMARefundStatus.Refunded && p.RefundReason.HasValue && p.RefundReason == 2) { throw new BizException(ResouceManager.GetMessageString("RMA.Request", "ExsitsNotCreateRequest")); } }); } SOInfo so = ExternalDomainBroker.GetSOInfo(request.SOSysNo.Value); if (so.BaseInfo.Status.Value != SOStatus.OutStock && so.BaseInfo.Status.Value != SOStatus.Shipping && so.BaseInfo.Status != SOStatus.Complete && so.BaseInfo.Status != SOStatus.Reported) { throw new BizException(ResouceManager.GetMessageString("RMA.Request", "OutStockNotCreateRequest")); } if (so.BaseInfo.SOType == SOType.ElectronicCard || so.BaseInfo.SOType == SOType.PhysicalCard) { throw new BizException(ResouceManager.GetMessageString("RMA.Request", "GiftCardNoRMA")); } if (so.BaseInfo.PayTypeSysNo == 203) { throw new BizException(ResouceManager.GetMessageString("RMA.Request", "RedeemGiftCertificatesNoRMA")); } if (so.BaseInfo.PayTypeSysNo.HasValue) { int t; if (int.TryParse(AppSettingManager.GetSetting(SOConst.DomainName, "GiftVoucher_PayTypeSysNo"), out t)) { if (so.BaseInfo.PayTypeSysNo.Value == t) { throw new BizException(ResouceManager.GetMessageString("RMA.Request", "GiftCertificatesNoRMA")); } } } CustomerContactInfo customerContactInfoEntity = GetCustomerContactInfo(request); BizEntity.Invoice.DeliveryType shipType = BizEntity.Invoice.DeliveryType.SELF; InvoiceType?invoceType = InvoiceType.SELF; StockType? stockType = StockType.SELF; int merchantSysNo = 1; if (so != null) { shipType = so.ShippingInfo.ShippingType; invoceType = so.InvoiceInfo.InvoiceType; stockType = so.ShippingInfo.StockType; merchantSysNo = so.BaseInfo.Merchant.MerchantID ?? 0; } using (TransactionScope tran = new TransactionScope()) { request.SysNo = CreateSysNo(); request.RequestID = GenerateId(request.SysNo.Value); //创建申请单初始状态为【待审核】 add by norton 2012.11.21 request.Status = RMARequestStatus.WaitingAudit; request.IsSubmit = true; request.ShippingType = shipType; request.InvoiceType = invoceType; request.StockType = stockType; request.MerchantSysNo = merchantSysNo; requestDA.Create(request); customerContactInfoEntity.RMARequestSysNo = request.SysNo; customerContactInfoEntity.ReceiveCellPhone = so.ReceiverInfo.MobilePhone; customerContactInfoEntity.ReceiveZip = so.ReceiverInfo.Zip; ObjectFactory <CustomerContactProcessor> .Instance.Create(customerContactInfoEntity); request.Registers.ForEach(register => { register.SysNo = registerDA.CreateSysNo(); register.BasicInfo.Status = RMARequestStatus.Origin; register.BasicInfo.OwnBy = RMAOwnBy.Origin; register.BasicInfo.Location = RMALocation.Origin; register.BasicInfo.IsWithin7Days = false; register.CheckInfo.IsRecommendRefund = false; register.RevertInfo.NewProductStatus = RMANewProductStatus.Origin; register.BasicInfo.NextHandler = RMANextHandler.RMA; register.CompanyCode = request.CompanyCode; SOItemInfo item = so.Items.FirstOrDefault(p => p.ProductSysNo == register.BasicInfo.ProductSysNo.Value); register.BasicInfo.ShippedWarehouse = item.StockSysNo.ToString(); register.VerifyCreate(); registerDA.Create(register); registerDA.InsertRequestItem(request.SysNo.Value, register.SysNo.Value); //创建成功后,发送邮件 //if (request.VerifyForSendCreateEmail()) //{ // var customer = ExternalDomainBroker.GetCustomerInfo(request.CustomerSysNo.Value); // SendCreateEmail(customer.BasicInfo.Email, request.RequestID); //} }); tran.Complete(); } ExternalDomainBroker.CreateOperationLog("RMA_Request_Create", BizLogType.RMA_Request_Create, request.SysNo.Value, request.CompanyCode); return(request); }