/// <summary> /// Initializes a new instance of the <see cref="eParcelBuilder"/> class. /// </summary> /// <param name="profile">The profile.</param> /// <param name="destination">The destination.</param> /// <param name="items">The items that will be in the parcel.</param> /// <param name="language">The language.</param> public eParcelBuilder(Profile profile, Destination destination, List<Item> items, CanadaPostLanguageEnum language) { this.m_destination = destination; this.m_items = items; this.m_language = language; this.m_profile = profile; }
/// <summary> /// Gets available shipping options /// </summary> /// <param name="shipmentPackage">Shipment package</param> /// <param name="error">Error</param> /// <returns>Shipping options</returns> public List<ShippingOption> GetShippingOptions(ShipmentPackage shipmentPackage, ref string error) { var shippingOptions = new List<ShippingOption>(); if (shipmentPackage == null) throw new ArgumentNullException("shipmentPackage"); if (shipmentPackage.Items == null) throw new NopException("No shipment items"); if (shipmentPackage.ShippingAddress == null) { error = "Shipping address is not set"; return shippingOptions; } if (shipmentPackage.ShippingAddress.Country == null) { error = "Shipping country is not set"; return shippingOptions; } if (shipmentPackage.ShippingAddress.StateProvince == null) { error = "Shipping state is not set"; return shippingOptions; } try { var profile = new Profile(); //use "CPC_DEMO_XML" merchant ID for testing profile.MerchantId = SettingManager.GetSettingValue("ShippingRateComputationMethod.CanadaPost.CustomerID"); var destination = new Destination(); destination.City = shipmentPackage.ShippingAddress.City; destination.StateOrProvince = shipmentPackage.ShippingAddress.StateProvince.Abbreviation; destination.Country = shipmentPackage.ShippingAddress.Country.TwoLetterIsoCode; destination.PostalCode = shipmentPackage.ShippingAddress.ZipPostalCode; var items = CreateItems(shipmentPackage); var lang = CanadaPostLanguageEnum.English; if (NopContext.Current.WorkingLanguage.LanguageCulture.ToLowerInvariant().StartsWith("fr")) lang = CanadaPostLanguageEnum.French; var requestResult = GetShippingOptionsInternal(profile, destination, items, lang); if (requestResult.IsError) { error = requestResult.StatusMessage; } else { foreach (var dr in requestResult.AvailableRates) { var so = new ShippingOption(); so.Name = dr.Name; if (!string.IsNullOrEmpty(dr.DeliveryDate)) so.Name += string.Format(" - {0}", dr.DeliveryDate); so.Rate = dr.Amount; shippingOptions.Add(so); } } foreach (var shippingOption in shippingOptions) { if (!shippingOption.Name.ToLower().StartsWith("canada post")) shippingOption.Name = string.Format("Canada Post {0}", shippingOption.Name); } } catch (Exception e) { Debug.WriteLine(e.Message); error = e.Message; } return shippingOptions; }
/// <summary> /// Gets the shipping options. /// </summary> /// <param name="profile">The profile.</param> /// <param name="destination">The destination.</param> /// <param name="items">The items.</param> /// <param name="language">The language.</param> /// <returns></returns> private RequestResult GetShippingOptionsInternal(Profile profile, Destination destination, List<Item> items, CanadaPostLanguageEnum language) { var parcel = new eParcelBuilder(profile, destination, items, language); string result = SendMessage(parcel.GetMessage(true)); return HandleResult(result, language); }