public void Parse(string xmlData) { try { if (xmlData.Trim().Length > 0) { XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(xmlData); this.Errors.Clear(); XmlNodeList errorNodes; errorNodes = xdoc.SelectNodes("/IntlRateV2Response/Error"); if (errorNodes != null) { foreach (XmlNode en in errorNodes) { USPSError e = new USPSError(en); this.Errors.Add(e); } } Packages.Clear(); XmlNodeList packageNodes; packageNodes = xdoc.SelectNodes("/IntlRateV2Response/Package"); if (packageNodes != null) { foreach (XmlNode pn in packageNodes) { InternationalPackage p = new InternationalPackage(pn); Packages.Add(p); } } } } catch (Exception ex) { USPSError e = new USPSError(); e.Source = ex.StackTrace; e.Description = "BV Software Parsing Error: " + ex.Message; this.Errors.Add(e); } }
private List<InternationalPackage> OptimizePackages(IShipment shipment) { List<InternationalPackage> result = new List<InternationalPackage>(); // Determine what service to use when processing string destinationCountry = shipment.DestinationAddress.CountryData.Name; // Get max weight for this service decimal _maxWeight = InternationalService.GetInternationalWeightLimit(destinationCountry); // Create many boxes if we exceed max weight PackageOptimizer optimizer = new PackageOptimizer(_maxWeight); List<IShippable> weightOptimizedPackages = optimizer.OptimizePackagesToMaxWeight(shipment); int counter = 0; foreach (IShippable s in weightOptimizedPackages) { InternationalPackage pak = new InternationalPackage(); pak.Id = counter.ToString(); pak.DestinationCountry = shipment.DestinationAddress.CountryData.Name; pak.ZipOrigination = MerchantTribe.Web.Text.TrimToLength(shipment.SourceAddress.PostalCode, 5); pak.Container = InternationalContainerType.Rectangular; pak.CommercialRates = false; pak.Ounces = MerchantTribe.Web.Conversions.DecimalPoundsToOunces(s.BoxWeight); pak.Pounds = (int)Math.Floor(s.BoxWeight); pak.Length = 6; pak.Height = 3; pak.Width = 1; counter++; result.Add(pak); } return result; }