示例#1
0
        private List <IShippingRate> RatePackages(List <InternationalPackage> packages)
        {
            var rates = new List <IShippingRate>();

            var req = new InternationalRequest();

            if (!string.IsNullOrWhiteSpace(GlobalSettings.UserId))
            {
                req.UserId = GlobalSettings.UserId;
            }
            req.Packages = packages;

            var svc = new InternationalService();
            var res = svc.ProcessRequest(req);


            if (GlobalSettings.DiagnosticsMode)
            {
                _Logger.LogMessage("US Postal Intl. Request: " + svc.LastRequest);
                _Logger.LogMessage("US Postal Intl. Response: " + svc.LastResponse);
            }

            var hasErrors = res.Errors.Count > 0;

            foreach (InternationalServiceType possibleResponse in Enum.GetValues(typeof(InternationalServiceType)))
            {
                var AllPackagesRated  = true;
                var totalRate         = 0m;
                var serviceDesciption = string.Empty;

                foreach (var p in res.Packages)
                {
                    var found =
                        p.Postages.FirstOrDefault(y => y.ServiceId == ((int)possibleResponse).ToString());
                    if (found == null)
                    {
                        AllPackagesRated = false;
                        break;
                    }

                    totalRate        += found.Rate;
                    serviceDesciption = HttpUtility.HtmlDecode(found.ServiceDescription);
                }

                if (AllPackagesRated && totalRate > 0)
                {
                    // Rate is good to go for all packages
                    rates.Add(new ShippingRate
                    {
                        EstimatedCost = totalRate,
                        ServiceId     = Id,
                        ServiceCodes  = ((int)possibleResponse).ToString(),
                        DisplayName   = "USPS:" + serviceDesciption
                    });
                }
            }

            return(rates);
        }
示例#2
0
        private List <IShippingRate> RatePackages(List <InternationalPackage> packages)
        {
            List <IShippingRate> rates = new List <IShippingRate>();

            InternationalRequest req = new InternationalRequest();

            req.Packages = packages;

            InternationalService  svc = new InternationalService();
            InternationalResponse res = svc.ProcessRequest(req);


            if (this.GlobalSettings.DiagnosticsMode)
            {
                _Logger.LogMessage("US Postal Intl. Request: " + svc.LastRequest);
                _Logger.LogMessage("US Postal Intl. Response: " + svc.LastResponse);
            }

            bool hasErrors = (res.Errors.Count > 0);



            foreach (InternationalServiceType possibleResponse in Enum.GetValues(typeof(InternationalServiceType)))
            {
                bool    AllPackagesRated  = true;
                decimal totalRate         = 0m;
                string  serviceDesciption = string.Empty;

                foreach (InternationalPackage p in res.Packages)
                {
                    InternationalPostage found = p.Postages.Where(y => y.ServiceId == ((int)possibleResponse).ToString()).FirstOrDefault();
                    if (found == null)
                    {
                        AllPackagesRated = false;
                        break;
                    }

                    totalRate        += found.Rate;
                    serviceDesciption = System.Web.HttpUtility.HtmlDecode(found.ServiceDescription);
                }

                if (AllPackagesRated && totalRate > 0)
                {
                    // Rate is good to go for all packages
                    rates.Add(new ShippingRate()
                    {
                        EstimatedCost = totalRate, ServiceId = this.Id, ServiceCodes = ((int)possibleResponse).ToString(),
                        DisplayName   = "USPS:" + serviceDesciption
                    });
                }
            }


            return(rates);
        }
示例#3
0
        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);
        }