/// <summary> /// Returns a collection of available <see cref="IShippingGatewayMethod"/> associated by this provider for a given shipment /// </summary> /// <param name="shipment">the <see cref="IShipment"/></param> /// <returns>A collection of <see cref="IShippingGatewayMethod"/></returns> public virtual IEnumerable <IShippingGatewayMethod> GetShippingGatewayMethodsForShipment(IShipment shipment) { var attempt = shipment.GetValidatedShipCountry(GatewayProviderService); // quick validation of shipment if (!attempt.Success) { MultiLogHelper.Error <ShippingGatewayProviderBase>("ShipMethods could not be determined for Shipment passed to GetAvailableShipMethodsForDestination method. Attempt message: " + attempt.Exception.Message, new ArgumentException("merchWarehouseCatalogKey")); return(new List <IShippingGatewayMethod>()); } var shipCountry = attempt.Result; var shipmethods = GetAllShippingGatewayMethods(shipCountry); var gatewayShipMethods = shipmethods as IShippingGatewayMethod[] ?? shipmethods.ToArray(); if (!gatewayShipMethods.Any()) { return(new List <IShippingGatewayMethod>()); } if (!shipCountry.HasProvinces) { return(gatewayShipMethods); } var available = new List <IShippingGatewayMethod>(); foreach (var gwshipmethod in gatewayShipMethods) { var province = gwshipmethod.ShipMethod.Provinces.FirstOrDefault(x => x.Code == shipment.ToRegion); if (province == null) { // TODO REFACTOR TO MultiLogHelper when we control Resolution.Freeze LogHelper.Debug <ShippingGatewayProviderBase>("Province code '" + shipment.ToRegion + "' was not found in ShipCountry with code : " + shipCountry.CountryCode); available.Add(gwshipmethod); } else { if (province.AllowShipping) { available.Add(gwshipmethod); } } } return(available); }
/// <summary> /// Returns a collection of available <see cref="IShippingGatewayMethod"/> associated by this provider for a given shipment /// </summary> /// <param name="shipment"><see cref="IShipment"/></param> /// <returns>A collection of <see cref="IShippingGatewayMethod"/></returns> public virtual IEnumerable<IShippingGatewayMethod> GetShippingGatewayMethodsForShipment(IShipment shipment) { var attempt = shipment.GetValidatedShipCountry(GatewayProviderService); // quick validation of shipment if (!attempt.Success) { LogHelper.Error<ShippingGatewayProviderBase>("ShipMethods could not be determined for Shipment passed to GetAvailableShipMethodsForDestination method. Attempt message: " + attempt.Exception.Message, new ArgumentException("merchWarehouseCatalogKey")); return new List<IShippingGatewayMethod>(); } var shipCountry = attempt.Result; var shipmethods = GetAllShippingGatewayMethods(shipCountry); var gatewayShipMethods = shipmethods as IShippingGatewayMethod[] ?? shipmethods.ToArray(); if (!gatewayShipMethods.Any()) return new List<IShippingGatewayMethod>(); if (!shipCountry.HasProvinces) return gatewayShipMethods; var available = new List<IShippingGatewayMethod>(); foreach (var gwshipmethod in gatewayShipMethods) { var province = gwshipmethod.ShipMethod.Provinces.FirstOrDefault(x => x.Code == shipment.ToRegion); if (province == null) { LogHelper.Debug<ShippingGatewayProviderBase>("Province code '" + shipment.ToRegion + "' was not found in ShipCountry with code : " + shipCountry.CountryCode); available.Add(gwshipmethod); } else { if(province.AllowShipping) available.Add(gwshipmethod); } } return available; }