コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 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;
         }
     }
 }
コード例 #4
0
 public void SetUp()
 {
     _addressChecker = new AddressChecker();
     _addressChecker.Init();
 }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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));
        }