Beispiel #1
0
        /// <summary>
        /// Checks if city, state, and country match address
        /// </summary>
        /// <param name="stop"></param>
        /// <param name="address"></param>
        /// <returns></returns>
        private bool DoesAddressMatchResult(LoadStopData stop, GeocodeAddress address)
        {
            var isValid = false;

            if (address != null)
            {
                if (address.City != null && address.State != null && address.Country != null)
                {
                    stop.Country = ConvertCountry(stop.Country);

                    isValid =
                        ConvertStringForComparison(address.City).Equals(ConvertStringForComparison(stop.City),
                                                                        StringComparison.OrdinalIgnoreCase) &&
                        ConvertStringForComparison(address.State).Equals(ConvertStringForComparison(stop.State),
                                                                         StringComparison.OrdinalIgnoreCase) &&
                        ConvertStringForComparison(address.Country).Equals(ConvertStringForComparison(stop.Country),
                                                                           StringComparison.OrdinalIgnoreCase);
                }

                if (isValid && !string.IsNullOrWhiteSpace(stop.Address1))
                {
                    isValid = ConvertStringForComparison(address.Address1)
                              .Equals(ConvertStringForComparison(stop.Address1), StringComparison.OrdinalIgnoreCase);
                }

                if (isValid && !string.IsNullOrWhiteSpace(stop.PostalCode))
                {
                    isValid = ConvertStringForComparison(address.PostalCode)
                              .Equals(ConvertStringForComparison(stop.PostalCode), StringComparison.OrdinalIgnoreCase);
                }
            }

            return(isValid);
        }
        public virtual void ValidateStopContactData(LoadStopData stop, string urnPrefix, BaseServiceResponse response)
        {
            if (stop.Contacts == null)
            {
                return;
            }

            for (int i = 0; i < stop.Contacts.Count; i++)
            {
                var contactUrnPrefix = $"{urnPrefix}:{nameof(stop.Contacts)}:{i}";
                var contact          = stop.Contacts[i];

                if (string.IsNullOrWhiteSpace(contact.FirstName))
                {
                    response.AddError($"{contactUrnPrefix}:{nameof(contact.FirstName)}", _messages.ContactFirstNameRequired);
                }

                if (string.IsNullOrWhiteSpace(contact.LastName))
                {
                    response.AddError($"{contactUrnPrefix}:{nameof(contact.LastName)}", _messages.ContactLastNameRequired);
                }


                var hasEmail = !string.IsNullOrWhiteSpace(contact.Email);
                var hasPhone = !string.IsNullOrWhiteSpace(contact.PhoneNumber);
                if (!hasEmail && !hasPhone)
                {
                    response.AddError($"{contactUrnPrefix}:{nameof(contact.Email)}Or{nameof(contact.PhoneNumber)}", _messages.ContactEmailOrPhoneRequired);
                }
            }
        }
Beispiel #3
0
        private GeocodeResponse GetGeocodeResponse(LoadStopData stop)
        {
            var url             = BuildRequestUrl(stop.Address1, stop.City, stop.State, stop.Country, stop.PostalCode);
            var responseMessage = _client.GetAsync(url, default(CancellationToken)).Result;
            var responseString  = responseMessage.Content.ReadAsStringAsync().Result;

            return(JsonConvert.DeserializeObject <GeocodeResponse>(responseString));
        }
        private void ValidateStopTimes(LoadStopData stop, bool manuallyCreated, DateTime lastPickupTime, string stopUrnPrefix, BaseServiceResponse response)
        {
            //Validate the broken out times if provided
            var separateDateTimeFieldsUsed = !string.IsNullOrWhiteSpace(stop.EarlyTime) || !string.IsNullOrWhiteSpace(stop.LateTime);

            if (!string.IsNullOrWhiteSpace(stop.EarlyTime) && !IsValidTime(stop.EarlyTime))
            {
                response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyTime)}", _messages.InvalidTime);
            }
            if (!string.IsNullOrWhiteSpace(stop.LateTime) && !IsValidTime(stop.LateTime))
            {
                response.AddError($"{stopUrnPrefix}:{nameof(stop.LateTime)}", _messages.InvalidTime);
            }

            if (stop.LateDtTm == DateTime.MinValue)
            {
                response.AddError($"{stopUrnPrefix}:{nameof(stop.LateDtTm)}", _messages.LateDtTmRequired);
            }
            else if (manuallyCreated)
            {
                if (stop.EarlyDtTm.HasValue)
                {
                    if (stop.EarlyDtTm > stop.LateDtTm)
                    {
                        if (separateDateTimeFieldsUsed && stop.EarlyDtTm.Value.Date == stop.LateDtTm.Date)
                        {
                            response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyTime)}", _messages.EarlyDateTimeAfterLateDtTm);
                        }
                        else
                        {
                            response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyDtTm)}", _messages.EarlyDateTimeAfterLateDtTm);
                        }
                    }

                    if (stop.EarlyDtTm < DateTime.Now)
                    {
                        response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyDtTm)}", _messages.EarlyDateTimeInPast);
                    }
                }

                if (stop.LateDtTm < DateTime.Now)
                {
                    response.AddError($"{stopUrnPrefix}:{nameof(stop.LateDtTm)}", _messages.LateDateTimeInPast);
                }

                if (stop.StopTypeId == (int)StopTypeEnum.Delivery)
                {
                    if (stop.EarlyDtTm <= lastPickupTime)
                    {
                        response.AddError($"{stopUrnPrefix}:{nameof(stop.EarlyDtTm)}", _messages.DeliveryEarlyDateTimePriorToPickup);
                    }
                    if (stop.LateDtTm <= lastPickupTime)
                    {
                        response.AddError($"{stopUrnPrefix}:{nameof(stop.LateDtTm)}", _messages.DeliveryLateDateTimePriorToPickup);
                    }
                }
            }
        }
Beispiel #5
0
            public void CustomerSetToNotValidateAddresses_True()
            {
                CUSTOMER.ValidateAddresses = false;
                InitDb();
                InitService();

                var stop = new LoadStopData(); // Stop doesn't have to be valid; will default to true

                _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeTrue();
            }
Beispiel #6
0
            public void NoCustomer_True()
            {
                CUSTOMER.IdentUserId = default;
                InitDb();
                InitService();

                var stop = new LoadStopData(); // Stop doesn't have to be valid; will default to true

                _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeTrue();
            }
 public GeocodeAddress(LoadStopData stop)
 {
     if (!string.IsNullOrWhiteSpace(stop.Address1))
     {
         StreetNumber = stop.Address1.Split(' ')[0];
         Route        = stop.Address1.Remove(0, StreetNumber.Length + 1);
     }
     City       = stop.City;
     State      = stop.State;
     PostalCode = stop.PostalCode;
     Country    = stop.Country;
 }
Beispiel #8
0
            public void EmptyStrings_False()
            {
                var stop = new LoadStopData
                {
                    Address1   = string.Empty,
                    City       = string.Empty,
                    State      = string.Empty,
                    Country    = string.Empty,
                    PostalCode = string.Empty
                };

                _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeFalse();
            }
Beispiel #9
0
            public void NullValues_False()
            {
                var stop = new LoadStopData
                {
                    Address1   = null,
                    City       = null,
                    State      = null,
                    Country    = null,
                    PostalCode = null
                };

                _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeFalse();
            }
Beispiel #10
0
            public void ValidAddresses_True(string streetNumber, string route, string city, string stateName, string stateAbbrev, string countryName, string countryCode, string postalCode)
            {
                MockHttpResponse(streetNumber, route, city, "", stateName, stateAbbrev, countryName, countryCode, postalCode);
                var stop = new LoadStopData
                {
                    Address1   = $"{streetNumber} {route}".Trim(),
                    City       = city,
                    State      = stateAbbrev,
                    Country    = countryCode,
                    PostalCode = postalCode
                };

                _svc.IsAddressValid(CUSTOMER_ID, stop).Should().BeTrue();
            }
Beispiel #11
0
            public void EmptyStrings_NullValues()
            {
                var expected = new GeocodeAddress(item: null);
                var stop     = new LoadStopData
                {
                    Address1   = string.Empty,
                    City       = string.Empty,
                    State      = string.Empty,
                    Country    = string.Empty,
                    PostalCode = string.Empty
                };
                var actual = _svc.GetValidAddress(stop);

                actual.Should().BeEquivalentTo(expected);
            }
Beispiel #12
0
        public bool IsAddressValid(Guid customerId, LoadStopData stop)
        {
            if (!_isValidationEnabled)
            {
                return(true);
            }

            var customer = _context.Customers.SingleOrDefault(x => x.IdentUserId == customerId);

            if (customer == null || !customer.ValidateAddresses)
            {
                return(true);
            }

            var response = GetGeocodeResponse(stop);
            var isValid  = IsValid(stop, response);

            return(isValid);
        }
Beispiel #13
0
        public GeocodeAddress GetValidAddress(LoadStopData stop)
        {
            var response = GetGeocodeResponse(stop);

            if (response?.Results != null)
            {
                foreach (var item in response.Results)
                {
                    if (item?.AddressComponents != null)
                    {
                        var address = new GeocodeAddress(item);
                        if (DoesAddressMatchResult(stop, address))
                        {
                            return(address);
                        }
                    }
                }
            }

            return(new GeocodeAddress(response?.Results?.FirstOrDefault()));
        }
Beispiel #14
0
            public void ValidAddress_MatchingGeocodeAddress(string streetNumber, string route, string city, string stateName, string stateAbbrev, string countryName, string countryCode, string postalCode)
            {
                MockHttpResponse(streetNumber, route, city, "", stateName, stateAbbrev, countryName, countryCode, postalCode);
                var stop = new LoadStopData
                {
                    Address1   = $"{streetNumber} {route}".Trim(),
                    City       = city,
                    State      = stateAbbrev,
                    Country    = countryCode,
                    PostalCode = postalCode
                };
                var expected = new GeocodeAddress(stop)
                {
                    StreetNumber = streetNumber ?? string.Empty,
                    Route        = route ?? string.Empty
                };

                var actual = _svc.GetValidAddress(stop);

                actual.Should().BeEquivalentTo(expected);
            }
Beispiel #15
0
        /// <summary>
        /// Checks if a response is valid
        /// </summary>
        /// <param name="stop"></param>
        /// <param name="response"></param>
        /// <returns></returns>
        private bool IsValid(LoadStopData stop, GeocodeResponse response)
        {
            var result = false;

            if (response?.Results != null)
            {
                foreach (var item in response.Results)
                {
                    if (item?.AddressComponents != null)
                    {
                        var address = new GeocodeAddress(item);
                        result = DoesAddressMatchResult(stop, address);
                        if (result)
                        {
                            break;
                        }
                    }
                }
            }

            return(result);
        }
Beispiel #16
0
 private string FormatAddress(LoadStopData stopData)
 {
     return($"{stopData.Address1}, {stopData.City}, {stopData.State} {stopData.PostalCode}");
 }