private RatesRequest CreateGetRatesRequest() { RatesRequest ratesRequest = new RatesRequest(); ratesRequest.ClientName = "ProStar"; ratesRequest.SubClientName = ""; ratesRequest.SecurityToken = SecurityToken; ratesRequest.CarrierList = new List <string>() { "USPS" }; ratesRequest.ServiceTypeList = new List <string>() { "PriorityMail" }; ratesRequest.ShipDate = DateTime.Now.AddDays(1); ratesRequest.PackageType = "Package"; ratesRequest.DeclaredValue = 20; ratesRequest.Height = 3; ratesRequest.Width = 3; ratesRequest.Length = 3; ratesRequest.WeightInLbs = 5; ratesRequest.ShipToAddress = ToAddress; ratesRequest.ShipFromAddress = FromAddress; return(ratesRequest); }
public RatesResponse GetShippingRates(RatesRequest request) { RatesResponse response = null; //Calculate rates based on the request shippingfrom and shippingto information //Do something here.... //Hardcoding shipping rates for this sample app List <Shippingmethod> shippingmethods = new List <Shippingmethod>(); shippingmethods.Add(new Shippingmethod() { methodname = "DHL Priority", rate = 32.00 }); shippingmethods.Add(new Shippingmethod() { methodname = "USPS First Class", rate = 3.00 }); shippingmethods.Add(new Shippingmethod() { methodname = "UPS Ground", rate = 12.00 }); response = new RatesResponse() { shippingmethods = shippingmethods }; return(response); }
public async void TestGetRatesAsync() { // This is the example from the API docs var ratesRequest = new RatesRequest { CarrierCode = "fedex", FromPostalCode = "78703", ToState = "DC", ToCountry = "US", ToPostalCode = "20500", ToCity = "Washington", Weight = new Weight { Value = 3, Units = WeightUnits.Ounces }, Dimensions = new Dimensions { Units = DimensionsUnits.Inches, Length = 7, Width = 5, Height = 6 }, Confirmation = "delivery", IsResidential = false }; var rates = await Client.Shipments.GetRatesAsync(ratesRequest) as List <Rate>; Assert.True(rates.Count > 0); }
public async Task <RatesResponse> GetRates(string baseCurrency) { var grpcRequest = new RatesRequest() { BaseCurrency = baseCurrency }; return(await _grpcClient.GetRatesAsync(grpcRequest)); }
public void GetRates() { RatesRequest ratesRequest = CreateGetRatesRequest(); VisibleRequest visibleRequest = new VisibleRequest(ratesRequest, "Rates/Retrieve"); RatesResponse ratesResponse = visibleRequest.Execute <RatesResponse>(); Assert.AreEqual(0, ratesResponse.ResultCode); }
public static RatesInputModel MapToModel(this RatesRequest request) { return(new RatesInputModel { BaseCurrency = request.BaseCurrency, TargetCurrency = request.TargetCurrency, Dates = request.Dates }); }
public void Unsupported_Currencies_Throws_ApplicationException() { var request = new RatesRequest(); request.From = "Foo"; request.To = "Bar"; Assert.Throws <ApplicationException>(() => _service.GetExchange(request)); }
public void USD_To_BRL_Returns_Quarter() { var request = new RatesRequest(); request.From = "BRL"; request.To = "USD"; var response = _service.GetExchange(request); Assert.AreEqual(0.25, response.To.Amount); }
public async Task <IActionResult> GetRates([FromRoute] RatesRequest request) { var rates = await ratesService.GetRates(request.From, request.To); return(this.Ok(new RatesResponse() { From = request.From, Rates = rates.ToArray() })); }
public void BRL_To_USD_Returns_Four() { var request = new RatesRequest(); request.From = "USD"; request.To = "BRL"; var response = _service.GetExchange(request); Assert.AreEqual(4, response.To.Amount); }
public void Negative_Amount_Returns_Negative() { var request = new RatesRequest(); request.From = "USD"; request.To = "BRL"; request.Amount = -1; var response = _service.GetExchange(request); Assert.Negative(response.To.Amount); }
public async Task <ActionResult <RatesResponse> > Get([FromQuery] RatesRequest request) { if (!ModelState.IsValid) { return(await Task.FromResult(BadRequest(ModelState))); } var result = await _fixerIoService.GetLatestRatesAsync(request.BaseCurrency, request.TargetCurrency); return(Ok(result.ToRatesResponse(request.BaseCurrency, request.TargetCurrency))); }
public void Zero_Amount_Returns_Zero() { var request = new RatesRequest(); request.From = "USD"; request.To = "BRL"; request.Amount = 0; var response = _service.GetExchange(request); Assert.AreEqual(0, response.To.Amount); }
public ActionResult <RatesResponse> Rates([FromQuery] RatesRequest request) { try { var response = _service.GetExchange(request); return(Ok(response)); } catch (ApplicationException ex) { return(BadRequest(ex.Message)); } }
public async Task GetAll_WhenCalled_ReturnsNoContent() { var model = new RatesRequest { From = "NONE" }; var response = await _ratesController.GetAll(model); var result = response.Result as NoContentResult; Assert.IsType <NoContentResult>(result); }
// GET: Rates public ActionResult GetRates(RatesRequest jsonRatesRequest) { RatesResponse jsonRatesResponse = null; bool isValid = false; //Validate credentials try { isValid = _ratesService.ValidateCredentials(); } catch (Exception ex) { return(new HttpStatusCodeResult(HttpStatusCode.Unauthorized, ex.Message)); } if (!isValid) { return(new HttpStatusCodeResult(HttpStatusCode.Unauthorized, "Invalid Credentials")); } //Validate request try { isValid = _ratesService.ValidateRequest(jsonRatesRequest); } catch (Exception ex) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message)); } if (!isValid) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Bad Request")); } //Proceed to calculates the rates try { jsonRatesResponse = _ratesService.GetShippingRates(jsonRatesRequest); } catch { } if (jsonRatesResponse == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } return(Json(jsonRatesResponse)); }
/// <summary> /// Gets the rates for a specified postal code destination and package dimensions asynchronous. /// </summary> /// <param name="model">The rates model.</param> /// <param name="token">The cancellation token.</param> /// <returns>A task of <see cref="RatesResponse"/></returns> public async Task <RatesResponse> GetRatesAsync(RatesModel model, CancellationToken token) { var data = new RatesRequest { Token = _token, PostalCode = model.PostalCode, DeclaredValue = model.DeclaredValue.ToString(CultureInfo.InvariantCulture), Height = model.Dimensions.Height.ToString(CultureInfo.InvariantCulture), Length = model.Dimensions.Length.ToString(CultureInfo.InvariantCulture), Weight = model.Dimensions.Weight.ToString(CultureInfo.InvariantCulture), Width = model.Dimensions.Width.ToString(CultureInfo.InvariantCulture) }; return(await _service.Post <RatesResponse, RatesRequest>(data, token).ConfigureAwait(_configureAwait)); }
public async Task Get_WhenCalled_ReturnsServerError() { var model = new RatesRequest { From = "", To = "" }; var response = await _ratesController.Get(model); var result = response.Result as StatusCodeResult; Assert.IsType <StatusCodeResult>(result); Assert.Equal(500, result.StatusCode); }
public async Task GetAll_WhenCalled_ReturnsOk() { var model = new RatesRequest { From = "USD" }; var response = await _ratesController.GetAll(model); var result = response.Result as OkObjectResult; Assert.IsType <OkObjectResult>(result); Assert.IsType <RatesResponse>(result.Value); Assert.Equal(model.From, (result.Value as RatesResponse).From); Assert.NotEmpty((result.Value as RatesResponse).Rates); }
public RatesResponse GetExchange(RatesRequest request) { var response = new RatesResponse(); var sourceCurrency = SupportedCurrencies.Currencies.Find(c => c.Code == request.From?.ToUpper()); var targetCurrency = SupportedCurrencies.Currencies.Find(c => c.Code == request.To?.ToUpper()); if (sourceCurrency != null && targetCurrency != null) { response.From = new Exchange(sourceCurrency, request.Amount); response.To = _quotes.GetExchanges(sourceCurrency, targetCurrency, request.Amount); return(response); } throw new ApplicationException(string.Format("Conversão de {0} para {1} não suportada!", request.From, request.To)); }
public bool ValidateRequest(RatesRequest jsonRatesRequest) { bool isValid = true; var request = _httpContextService.Request; if (string.IsNullOrEmpty(request.ContentType) || request.ContentType != "application/json; charset= utf-8") { throw new Exception("The content type is either empty or isn't application/json."); } if (string.IsNullOrEmpty(request.HttpMethod) || request.HttpMethod != "POST") { throw new Exception("The HttpMethod is either empty or isn't POST."); } //Validate JSON request checking all the required information is valid if (jsonRatesRequest.shippingfrom == null) { isValid = false; } else if (string.IsNullOrEmpty(jsonRatesRequest.shippingfrom.country) || string.IsNullOrEmpty(jsonRatesRequest.shippingfrom.state)) { isValid = false; } if (jsonRatesRequest.shippingto == null) { isValid = false; } else if (string.IsNullOrEmpty(jsonRatesRequest.shippingto.postalcode) || string.IsNullOrEmpty(jsonRatesRequest.shippingto.country) || string.IsNullOrEmpty(jsonRatesRequest.shippingto.state)) { isValid = false; } //Do anay other validation here return(isValid); }
public async Task <ActionResult <RatesResponse> > Get([FromRoute] RatesRequest model) { try { var data = await _redisRepository.GetExchangeInfo(Enum.Parse <ExchangeType>(model.From.ToUpperInvariant()), Enum.Parse <ExchangeType>(model.To.ToUpperInvariant())); var result = data.ToRatesResponse(); if (!result.Rates.Any()) { return(NoContent()); } return(Ok(result)); } catch (Exception ex) { _logger.LogCritical(ex, ex.Message); return(StatusCode(500)); } }
public override async Task <RatesResponse> GetRates(RatesRequest request, ServerCallContext context) { var serializeOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var httpClient = _httpClientFactory.CreateClient("ExchangeRateHttpClient"); var uri = $"https://api.exchangeratesapi.io/latest?base={request.BaseCurrency}"; var apiResponse = await httpClient.GetFromJsonAsync <FxResponse>(uri, serializeOptions); var result = new RatesResponse() { BaseCurrency = request.BaseCurrency, Date = apiResponse.Date }; result.Rates.Add(apiResponse.Rates); //TODO: cache this result. return(result); }
public async Task <RateResponse> MakeNegotiatedRateRequest(RatesRequest req) { var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore }; var json = JsonConvert.SerializeObject(req); var response = await _httpClient.PostAsync("Rate", new StringContent(json, Encoding.UTF8, "application/json")); if (!response.IsSuccessStatusCode) { } var one = await response.Content.ReadAsStringAsync(); var responseData = JsonConvert.DeserializeObject <RootRatedResponse>(await response.Content.ReadAsStringAsync(), settings).RateResponse; return(responseData); }
public void Init() { this.apiClient = Setup.GetClient(); this.request = new RatesRequest() { pickupDate = new DateTime(2014, 12, 1) , originPostalCode = "30303" , originType = "business dock" , destPostalCode = "60606" , destType = "business dock" , paymentTerms = "Outbound Prepaid" , items = new List <QuoteItem>() { new QuoteItem() { freightClass = 50 , weight = 500 , length = 48 , width = 48 , height = 48 , hazardous = false , pieces = 1 , package = "Pallets_other" } } , charges = new List <string>() { "liftgate pickup" } }; var task = apiClient.GetRates(request); task.Wait(30000); this.result = task.Result; }
/// <summary> /// Retrieves shipping rates for the specified shipping details. /// </summary> /// <param name="request">A request that specifies the parameters of a shipment.</param> /// <returns>A list of rates matching the requested shipment.</returns> public Task <IList <Rate> > GetRatesAsync(RatesRequest request) { return(PostDataAsync <RatesRequest, IList <Rate> >("getrates", request)); }
public async Task <ActionResult> GetNegotiatedRates([FromBody] RatesForm form) { var req = new RatesRequest(_config.Value); //This is all going to have less values hardcoded and should probably be moved somewhere else. //ShipmentRequest req.RateRequest.Request.RequestOption = "Rate"; req.RateRequest.Request.TransactionReference.CustomerContext = "Your Customer Context"; //Shipment req.RateRequest.Shipment.Description = "Description"; req.RateRequest.Shipment.ShipmentRatingOptions.NegotiatedRatesIndicator = "0"; //Shipper req.RateRequest.Shipment.Shipper.Name = form.NameFrom; req.RateRequest.Shipment.Shipper.AttentionName = form.NameFrom; req.RateRequest.Shipment.Shipper.TaxIdentificationNumber = "faketaxcode"; req.RateRequest.Shipment.Shipper.Phone.Number = form.PhoneFrom; req.RateRequest.Shipment.Shipper.Phone.Extension = "1"; req.RateRequest.Shipment.Shipper.ShipperNumber = _config.Value.ShipperNumber; req.RateRequest.Shipment.Shipper.FaxNumber = form.PhoneFrom; //Shipper address req.RateRequest.Shipment.Shipper.Address.AddressLine = form.AddressFrom; req.RateRequest.Shipment.Shipper.Address.City = form.CityFrom; req.RateRequest.Shipment.Shipper.Address.StateProvinceCode = form.StateFrom; req.RateRequest.Shipment.Shipper.Address.PostalCode = form.ZipFrom; req.RateRequest.Shipment.Shipper.Address.CountryCode = form.CountryFrom; //Ship to req.RateRequest.Shipment.ShipTo.Name = form.NameTo; req.RateRequest.Shipment.ShipTo.AttentionName = form.NameTo; req.RateRequest.Shipment.ShipTo.Phone.Number = form.PhoneTo; req.RateRequest.Shipment.ShipTo.Phone.Extension = "1"; req.RateRequest.Shipment.ShipTo.Address.AddressLine = form.AddressTo; req.RateRequest.Shipment.ShipTo.Address.City = form.CityTo; req.RateRequest.Shipment.ShipTo.Address.StateProvinceCode = form.StateTo; req.RateRequest.Shipment.ShipTo.Address.PostalCode = form.ZipTo; req.RateRequest.Shipment.ShipTo.Address.CountryCode = form.CountryTo; //Ship from req.RateRequest.Shipment.ShipFrom.Name = form.NameFrom; req.RateRequest.Shipment.ShipFrom.AttentionName = form.NameFrom; req.RateRequest.Shipment.ShipFrom.Phone.Number = form.PhoneFrom; req.RateRequest.Shipment.ShipFrom.Phone.Extension = "1"; req.RateRequest.Shipment.ShipFrom.FaxNumber = form.PhoneFrom; req.RateRequest.Shipment.ShipFrom.Address.AddressLine = form.AddressFrom; req.RateRequest.Shipment.ShipFrom.Address.City = form.CityFrom; req.RateRequest.Shipment.ShipFrom.Address.StateProvinceCode = form.StateFrom; req.RateRequest.Shipment.ShipFrom.Address.PostalCode = form.ZipFrom; req.RateRequest.Shipment.ShipFrom.Address.CountryCode = form.CountryFrom; //PaymentInformation //req.RateRequest.Shipment.PaymentInformation.ShipmentCharge.Type = "01"; //req.RateRequest.Shipment.PaymentInformation.ShipmentCharge.BillShipper.AccountNumber = _config.Value.ShipperNumber; //Service req.RateRequest.Shipment.Service.Description = "Service code description"; req.RateRequest.Shipment.Service.Code = "02"; //Package req.RateRequest.Shipment.Package.Description = form.PackageDescription; req.RateRequest.Shipment.Package.Packaging.Code = "02"; req.RateRequest.Shipment.Package.Packaging.Description = "Description"; req.RateRequest.Shipment.Package.Dimensions.UnitOfMeasurement.Code = "IN"; req.RateRequest.Shipment.Package.Dimensions.UnitOfMeasurement.Description = "Inches"; req.RateRequest.Shipment.Package.Dimensions.Length = form.Length; req.RateRequest.Shipment.Package.Dimensions.Width = form.Width; req.RateRequest.Shipment.Package.Dimensions.Height = form.Height; req.RateRequest.Shipment.Package.PackageWeight.UnitOfMeasurement.Code = "LBS"; req.RateRequest.Shipment.Package.PackageWeight.UnitOfMeasurement.Description = "Pounds"; req.RateRequest.Shipment.Package.PackageWeight.Weight = form.Weight; req.RateRequest.Shipment.Package.PackagingType.Code = "02"; req.RateRequest.Shipment.Package.PackagingType.Description = "Rate"; var res = await _apiService.MakeNegotiatedRateRequest(req); return(Ok(res)); }
public void Null_Currencies_Throws_ApplicationException() { var request = new RatesRequest(); Assert.Throws <ApplicationException>(() => _service.GetExchange(request)); }
protected virtual IList <ShipStationServiceRate> GetRates(GetShippingOptionRequest getShippingOptionRequest, string carrierCode) { var usedWeight = _measureService.GetMeasureWeightBySystemKeyword(Weight.Units); if (usedWeight == null) { throw new NopException("ShipStatio shipping service. Could not load \"{0}\" measure weight", Weight.Units); } var usedMeasureDimension = _measureService.GetMeasureDimensionBySystemKeyword(Dimensions.Units); if (usedMeasureDimension == null) { throw new NopException("ShipStatio shipping service. Could not load \"{0}\" measure dimension", Dimensions.Units); } var weight = Convert.ToInt32(Math.Ceiling(_measureService.ConvertFromPrimaryMeasureWeight(_shippingService.GetTotalWeight(getShippingOptionRequest), usedWeight))); var postData = new RatesRequest { CarrierCode = carrierCode, FromPostalCode = getShippingOptionRequest.ZipPostalCodeFrom ?? getShippingOptionRequest.ShippingAddress.ZipPostalCode, ToState = getShippingOptionRequest.ShippingAddress.StateProvince.Abbreviation, ToCountry = getShippingOptionRequest.ShippingAddress.Country.TwoLetterIsoCode, ToPostalCode = getShippingOptionRequest.ShippingAddress.ZipPostalCode, ToCity = getShippingOptionRequest.ShippingAddress.City, Weight = new Weight { Value = weight } }; if (_shipStationSettings.SendDimensio) { int length, height, width; decimal lengthTmp, widthTmp, heightTmp; switch (_shipStationSettings.PackingType) { case PackingType.PackByDimensions: _shippingService.GetDimensions(getShippingOptionRequest.Items, out widthTmp, out lengthTmp, out heightTmp); length = ConvertFromPrimaryMeasureDimension(lengthTmp, usedMeasureDimension); height = ConvertFromPrimaryMeasureDimension(heightTmp, usedMeasureDimension); width = ConvertFromPrimaryMeasureDimension(widthTmp, usedMeasureDimension); break; case PackingType.PackByVolume: if (getShippingOptionRequest.Items.Count == 1 && getShippingOptionRequest.Items[0].GetQuantity() == 1) { var sci = getShippingOptionRequest.Items[0].ShoppingCartItem; _shippingService.GetDimensions(new List <GetShippingOptionRequest.PackageItem> { new GetShippingOptionRequest.PackageItem(sci, 1) }, out widthTmp, out lengthTmp, out heightTmp); length = ConvertFromPrimaryMeasureDimension(lengthTmp, usedMeasureDimension); height = ConvertFromPrimaryMeasureDimension(lengthTmp, usedMeasureDimension); width = ConvertFromPrimaryMeasureDimension(widthTmp, usedMeasureDimension); } else { decimal totalVolume = 0; foreach (var item in getShippingOptionRequest.Items) { var sci = item.ShoppingCartItem; _shippingService.GetDimensions(new List <GetShippingOptionRequest.PackageItem> { new GetShippingOptionRequest.PackageItem(sci, 1) }, out widthTmp, out lengthTmp, out heightTmp); var productLength = ConvertFromPrimaryMeasureDimension(lengthTmp, usedMeasureDimension); var productHeight = ConvertFromPrimaryMeasureDimension(heightTmp, usedMeasureDimension); var productWidth = ConvertFromPrimaryMeasureDimension(widthTmp, usedMeasureDimension); totalVolume += item.GetQuantity() * (productHeight * productWidth * productLength); } int dimension; if (totalVolume == 0) { dimension = 0; } else { // cubic inches var packageVolume = _shipStationSettings.PackingPackageVolume; if (packageVolume <= 0) { packageVolume = 5184; } // cube root (floor) dimension = Convert.ToInt32(Math.Floor(Math.Pow(Convert.ToDouble(packageVolume), 1.0 / 3.0))); } length = width = height = dimension; } break; default: length = height = width = 1; break; } if (length < 1) { length = 1; } if (height < 1) { height = 1; } if (width < 1) { width = 1; } postData.Dimensions = new Dimensions { Length = length, Height = height, Width = width }; } using (var client = new WebClient()) { client.Credentials = new NetworkCredential(_shipStationSettings.ApiKey, _shipStationSettings.ApiSecret); client.Headers.Add("Content-Type", CONTENT_TYPE); var data = client.UploadString($"{API_URL}{LIST_RATES_CMD}", JsonConvert.SerializeObject(postData)); return(TryGetError(data) ? new List <ShipStationServiceRate>() : JsonConvert.DeserializeObject <List <ShipStationServiceRate> >(data)); } }
public IActionResult Get([FromBody] RatesRequest request) { var resultModel = _exchangeRateService.FilterAndCompute(RatesRequestMapper.MapToModel(request)); return(Ok(RatesResponseMapper.MapToResponse(resultModel))); }