protected override void RunCallback() { var dbFactory = new DbFactory(); var time = new TimeService(dbFactory); var log = GetLogger(); var orderHistoryService = new OrderHistoryService(log, time, dbFactory); var serviceFactory = new ServiceFactory(); CompanyDTO company = null; using (var db = dbFactory.GetRDb()) { company = db.Companies.GetByIdWithSettingsAsDto(CompanyId); } var addressCheckServices = serviceFactory.GetAddressCheckServices(log, time, dbFactory, company.AddressProviderInfoList); var companyAddress = new CompanyAddressService(company); var addressService = new AddressService(addressCheckServices, companyAddress.GetReturnAddress(MarketIdentifier.Empty()), companyAddress.GetPickupAddress(MarketIdentifier.Empty())); var addressChecker = new AddressChecker(log, dbFactory, addressService, orderHistoryService, time); using (var db = dbFactory.GetRWDb()) { addressChecker.RecheckAddressesWithException(); } }
public List <MessageString> ProcessApplyResult(ApplyOrderResult applyResult, IUnitOfWork db, ILogService log, ITime time, IOrderSynchronizer synchronizer, AddressChecker addressChecker, IOrderHistoryService orderHistoryService, IWeightService weightService, long?by) { var results = new List <MessageString>(); if (applyResult.RateRecalcRequested) { var dtoOrder = db.ItemOrderMappings.GetOrderWithItems(weightService, OrderId, unmaskReferenceStyle: false, includeSourceItems: true); try { RetryHelper.ActionWithRetries(() => synchronizer.UIUpdate(db, dtoOrder, isForceOverride: false, keepActiveShipping: true, keepCustomShipping: applyResult.ShipmentProviderChanged ? false : true, switchToMethodId: null), log, 2, 300, RetryModeType.Normal, true); orderHistoryService.AddRecord(dtoOrder.Id, OrderHistoryHelper.RecalculateRatesKey, null, true, by); } catch (Exception ex) { results.Add(MessageString.Error("", "An unexpected error has occurred. Please try again. Detail: " + ex.Message)); } } if (applyResult.AddressValidationRequested) { addressChecker.UpdateOrderAddressValidationStatus(db, EntityId, null); } return(results); }
static void Main(string[] args) { while (true) { Console.WriteLine("Please enter fieldId.\n0 - StreetAddress, 1 - City, 2 - State/Province, 3 - ZipCode, 4 - Country"); int fieldId = int.Parse(Console.ReadLine()); Console.WriteLine("Please a string to test:"); string Input = Console.ReadLine(); AddressChecker test = new AddressChecker(fieldId, Input); Console.WriteLine("Test again? (y/n)"); string testagain = Console.ReadLine(); if (testagain.Equals("y") == false) { Console.WriteLine(testagain.Equals("y")); break; } } }
public void SetUp() { _addressChecker = new AddressChecker(); _addressChecker.Init(); }
private void CheckAddressStep(IUnitOfWork db, Order dbOrder, AddressDTO sourceAddress) { _log.Info("CheckAddressStep, orderId=" + dbOrder.AmazonIdentifier); AddressDTO correctedAddress = null; try { var checkResults = new AddressChecker(_log, _dbFactory, _addressService, _orderHistory, _time).CheckAddress(CallSource.Service, db, sourceAddress, dbOrder.Id, out correctedAddress); bool?isResidential = null; var checkStatus = (int)AddressValidationStatus.None; var stampsStatus = checkResults.FirstOrDefault(r => r.AdditionalData != null && r.AdditionalData.Any() && r.AdditionalData[0] == OrderNotifyType.AddressCheckStamps.ToString()); var fedexStatus = checkResults.FirstOrDefault(r => r.AdditionalData != null && r.AdditionalData.Any() && r.AdditionalData[0] == OrderNotifyType.AddressCheckFedex.ToString()); if (stampsStatus != null) //Get main checker status (by default: stamps.com) { checkStatus = stampsStatus.Status; } if (fedexStatus != null) { checkStatus = Math.Max(checkStatus, fedexStatus.Status); } if (fedexStatus != null) //Get fedex status for isResidential { isResidential = fedexStatus.AdditionalData.Count > 1 && StringHelper.ContainsNoCase(fedexStatus.AdditionalData[1], "true"); } //NOTE: May be should write Valid if was provided corrected address dbOrder.AddressValidationStatus = checkStatus; if (!dbOrder.ShippingAddressIsResidential.HasValue) { _log.Info("Set isResidential = " + isResidential); dbOrder.ShippingAddressIsResidential = isResidential; } var correctedState = fedexStatus != null && fedexStatus.AdditionalData.Count > 2 ? fedexStatus.AdditionalData[2] : null; if (!String.IsNullOrEmpty(correctedState) && correctedState.Length == 2 && !StringHelper.IsEqualNoCase(correctedState, dbOrder.ShippingState)) { dbOrder.IsManuallyUpdated = true; _log.Info("State changed: " + dbOrder.ShippingState + "=>" + correctedState); dbOrder.ManuallyShippingState = correctedState; dbOrder.ManuallyShippingCountry = dbOrder.ShippingCountry; dbOrder.ManuallyShippingCity = dbOrder.ShippingCity; dbOrder.ManuallyShippingZip = dbOrder.ShippingZip; dbOrder.ManuallyShippingZipAddon = dbOrder.ShippingZipAddon; dbOrder.ManuallyShippingAddress1 = dbOrder.ShippingAddress1; dbOrder.ManuallyShippingAddress2 = dbOrder.ShippingAddress2; dbOrder.ManuallyShippingPhone = dbOrder.ShippingPhone; dbOrder.ManuallyPersonName = dbOrder.PersonName; } } catch (Exception ex) { _log.Error("[Unexpected] CheckAddress unexpected error", ex); } _log.Info("exist address correction=" + (correctedAddress != null) + ", with final status=" + dbOrder.AddressValidationStatus); if (correctedAddress != null) { dbOrder.IsManuallyUpdated = true; dbOrder.ManuallyPersonName = StringHelper.GetFirstNotEmpty(correctedAddress.FullName, dbOrder.PersonName); dbOrder.ManuallyShippingCountry = correctedAddress.Country; dbOrder.ManuallyShippingAddress1 = correctedAddress.Address1; dbOrder.ManuallyShippingAddress2 = correctedAddress.Address2; dbOrder.ManuallyShippingCity = correctedAddress.City; dbOrder.ManuallyShippingState = correctedAddress.State; dbOrder.ManuallyShippingZip = correctedAddress.Zip; dbOrder.ManuallyShippingZipAddon = correctedAddress.ZipAddon; dbOrder.ManuallyShippingPhone = StringHelper.GetFirstNotEmpty(correctedAddress.Phone, dbOrder.ShippingPhone); } }
public virtual ActionResult Submit(OrderEditViewModel model) { LogI("Submit, model=" + model); //Save if (ModelState.IsValid) { var company = AccessManager.Company; var serviceFactory = new ServiceFactory(); var addressProviders = AccessManager.Company.AddressProviderInfoList .Where(a => a.Type != (int)AddressProviderType.SelfCorrection) .ToList(); //NOTE: exclude self correction var addressCheckService = serviceFactory.GetAddressCheckServices(LogService, Time, DbFactory, addressProviders); var companyAddress = new CompanyAddressService(company); var addressService = new AddressService(addressCheckService, companyAddress.GetReturnAddress(MarketIdentifier.Empty()), companyAddress.GetPickupAddress(MarketIdentifier.Empty())); var addressChecker = new AddressChecker(LogService, DbFactory, addressService, OrderHistoryService, Time); //var validatorService = new OrderValidatorService(LogService, // DbFactory, // EmailService, // OrderHistoryService, // ActionService, // HtmlScraper, // addressService, // null, // null, // Time, // AccessManager.Company); var rateProviders = ServiceFactory.GetShipmentProviders(LogService, Time, DbFactory, WeightService, AccessManager.Company.ShipmentProviderInfoList, null, null, null, null); var syncInfo = new EmptySyncInformer(LogService, SyncType.Orders); var synchronizer = new AmazonOrdersSynchronizer(LogService, AccessManager.Company, syncInfo, rateProviders, CompanyAddress, Time, WeightService, MessageService); var applyResult = model.Apply(LogService, Db, OrderHistoryService, QuantityManager, Time.GetAppNowTime(), AccessManager.UserId); var resultErrors = model.ProcessApplyResult(applyResult, Db, LogService, Time, synchronizer, addressChecker, OrderHistoryService, WeightService, AccessManager.UserId); if (resultErrors.Any()) { resultErrors.ForEach(r => ModelState.AddModelError(r.Key, r.Message)); return(PartialView("OrderEdit", model)); } var rowOrderDto = Db.ItemOrderMappings.GetOrderWithItems(WeightService, model.EntityId, false, true, unmaskReferenceStyles: true); //NOTE: Unmask for display var rowModel = new OrderViewModel(rowOrderDto, AccessManager.IsFulfilment); rowModel.Items = rowOrderDto.Items.Select(i => new OrderItemViewModel(i, rowOrderDto.OnHold, ShippingUtils.IsOrderPartial(rowOrderDto.OrderStatus))).ToList(); return(Json(new UpdateRowViewModel(rowModel, model.BatchId.HasValue ? "grid_" + model.BatchId.Value : "grid", null, false))); } return(PartialView("OrderEdit", model)); }