예제 #1
0
        public List <IShippingRate> RateShipment(IShipment shipment)
        {
            _Messages.Clear();

            List <IShippingRate> result = new List <IShippingRate>();

            bool hasErrors = false;


            int serviceCode = Settings.ServiceCode;
            int packaging   = Settings.Packaging;

            try
            {
                List <Shipment> optimizedPackages = this.OptimizeSingleGroup(shipment);

                if (optimizedPackages.Count > 0)
                {
                    result = RatePackages(optimizedPackages);
                }
                else
                {
                    if (this.GlobalSettings.DiagnosticsMode)
                    {
                        _Logger.LogMessage("No packages found to rate for FedEx");
                    }
                }
            }
            catch (Exception ex)
            {
                _Logger.LogException(ex);
                ShippingServiceMessage m = new ShippingServiceMessage();
                m.SetError("Exception", ex.Message + " | " + ex.StackTrace);
                _Messages.Add(m);
            }

            if (hasErrors)
            {
                result = new List <IShippingRate>();
            }
            return(result);
        }
예제 #2
0
        private List <IShippingRate> GetAllShippingRatesForShipment(IShipment shipment)
        {
            var rates = new List <IShippingRate>();

            var hasErrors = false;

            try
            {
                var packagesToRate = OptimizePackages(shipment);

                if (packagesToRate.Count > 0)
                {
                    rates = RatePackages(packagesToRate);
                }
                else
                {
                    if (GlobalSettings.DiagnosticsMode)
                    {
                        _Logger.LogMessage("No Packaged to Rate for US Postal Service: Code 795");
                    }
                }
            }

            catch (Exception ex)
            {
                _Logger.LogException(ex);
                var m = new ShippingServiceMessage();
                m.SetError("Exception", ex.Message + " | " + ex.StackTrace);
                _Messages.Add(m);
            }

            if (hasErrors)
            {
                rates = new List <IShippingRate>();
            }
            return(rates);
        }
        // Gets all available rates regardless of settings
        private List <IShippingRate> GetAllShippingRatesForShipment(IShipment shipment)
        {
            var rates     = new List <IShippingRate>();
            var hasErrors = false;

            try
            {
                var sErrorMessage = string.Empty;
                var sErrorCode    = string.Empty;

                var sURL = string.Concat(UPSLIVESERVER, "Rate");

                // Build XML
                var settings = new UpsSettings
                {
                    UserID    = GlobalSettings.Username,
                    Password  = GlobalSettings.Password,
                    ServerUrl = UPSLIVESERVER,
                    License   = GlobalSettings.LicenseNumber
                };

                var sXML = string.Empty;

                sXML  = XmlTools.BuildAccessKey(settings);
                sXML += "\n";

                sXML += BuildUPSRateRequestForShipment(shipment, settings);

                var sResponse = string.Empty;
                sResponse = XmlTools.ReadHtmlPage_POST(sURL, sXML);

                XmlDocument xDoc;
                XmlNodeList NodeList;
                var         sStatusCode = "-1";

                try
                {
                    xDoc = new XmlDocument();
                    xDoc.LoadXml(sResponse);

                    if (xDoc.DocumentElement.Name == "RatingServiceSelectionResponse")
                    {
                        XmlNode n;
                        var     i = 0;
                        XmlNode nTag;

                        NodeList = xDoc.GetElementsByTagName("RatingServiceSelectionResponse");
                        n        = NodeList.Item(0);
                        for (i = 0; i <= n.ChildNodes.Count - 1; i++)
                        {
                            nTag = n.ChildNodes.Item(i);
                            switch (nTag.Name)
                            {
                            case "Response":
                                var     iRes = 0;
                                XmlNode nRes;
                                for (iRes = 0; iRes <= nTag.ChildNodes.Count - 1; iRes++)
                                {
                                    nRes = nTag.ChildNodes[iRes];
                                    switch (nRes.Name)
                                    {
                                    case "ResponseStatusCode":
                                        sStatusCode = nRes.FirstChild.Value;
                                        break;

                                    case "ResponseStatusDescription":
                                        // Not Used
                                        break;

                                    case "Error":
                                        var     iErr = 0;
                                        XmlNode nErr;
                                        for (iErr = 0; iErr <= nRes.ChildNodes.Count - 1; iErr++)
                                        {
                                            nErr = nRes.ChildNodes[iErr];
                                            switch (nErr.Name)
                                            {
                                            case "ErrorCode":
                                                sErrorCode = nErr.FirstChild.Value;
                                                break;

                                            case "ErrorDescription":
                                                sErrorMessage = nErr.FirstChild.Value;
                                                break;

                                            case "ErrorSeverity":
                                                // Not Used
                                                break;
                                            }
                                        }
                                        break;
                                    }
                                }
                                break;

                            case "RatedShipment":

                                var     iRated = 0;
                                XmlNode nRated;

                                var sPostage      = string.Empty;
                                var sCurrencyCode = string.Empty;
                                var sCode         = string.Empty;
                                var sDescription  = string.Empty;

                                for (iRated = 0; iRated <= nTag.ChildNodes.Count - 1; iRated++)
                                {
                                    nRated = nTag.ChildNodes[iRated];
                                    switch (nRated.Name)
                                    {
                                    case "Service":
                                        var     iServices = 0;
                                        XmlNode nServices;
                                        for (iServices = 0;
                                             iServices <= nRated.ChildNodes.Count - 1;
                                             iServices++)
                                        {
                                            nServices = nRated.ChildNodes[iServices];
                                            switch (nServices.Name)
                                            {
                                            case "Code":
                                                sCode        = nServices.FirstChild.Value;
                                                sDescription = DecodeUpsServiceCode(sCode);
                                                break;

                                            case "Description":
                                                sDescription = nServices.FirstChild.Value;
                                                break;
                                            }
                                        }
                                        break;

                                    case "TotalCharges":
                                        var     iCharges = 0;
                                        XmlNode nCharges;
                                        for (iCharges = 0; iCharges <= nRated.ChildNodes.Count - 1; iCharges++)
                                        {
                                            nCharges = nRated.ChildNodes[iCharges];
                                            switch (nCharges.Name)
                                            {
                                            case "MonetaryValue":
                                                sPostage = nCharges.FirstChild.Value;
                                                break;

                                            case "CurrencyCode":
                                                sCurrencyCode = nCharges.FirstChild.Value;
                                                break;
                                            }
                                        }
                                        break;
                                    }
                                }

                                var dRate = -1m;

                                if (sPostage.Length > 0)
                                {
                                    dRate = decimal.Parse(sPostage, NumberStyles.Currency,
                                                          CultureInfo.InvariantCulture);
                                }
                                else
                                {
                                    var nop = new ShippingServiceMessage();
                                    nop.SetInfo(string.Empty, "No UPS Postage Found");
                                    _Messages.Add(nop);
                                    hasErrors = true;
                                }

                                if (dRate >= 0)
                                {
                                    var r = new ShippingRate
                                    {
                                        DisplayName   = sDescription,
                                        EstimatedCost = dRate,
                                        ServiceCodes  = sCode,
                                        ServiceId     = Id
                                    };
                                    rates.Add(r);
                                }

                                if (GlobalSettings.DiagnosticsMode)
                                {
                                    var msg = new ShippingServiceMessage();

                                    msg.SetDiagnostics("UPS Rates Found",
                                                       string.Concat("StatusCode = ", sStatusCode, ", Postage = ", sPostage,
                                                                     ", Errors = ", sErrorMessage, ", Rate = ", dRate));

                                    _Messages.Add(msg);
                                }

                                break;
                            }
                        }
                    }
                    else
                    {
                        hasErrors     = true;
                        sErrorMessage = "Couldn't find valid XML response from server.";
                    }
                }
                catch (Exception Exx)
                {
                    _Logger.LogException(Exx);

                    var mex = new ShippingServiceMessage();

                    mex.SetError("Exception", string.Concat(Exx.Message, " | ", Exx.Source));

                    _Messages.Add(mex);

                    return(rates);
                }

                if (sStatusCode != "1")
                {
                    hasErrors = true;
                }
            }

            catch (Exception ex)
            {
                _Logger.LogException(ex);

                var m = new ShippingServiceMessage();

                m.SetError("Exception", string.Concat(ex.Message, " | ", ex.StackTrace));

                _Messages.Add(m);
            }

            if (hasErrors)
            {
                rates = new List <IShippingRate>();
            }

            return(rates);
        }
예제 #4
0
        public List <IShippingRate> RateShipment(IShipment shipment)
        {
            _Messages.Clear();

            var result    = new List <IShippingRate>();
            var hasErrors = false;

            try
            {
                var optimizedPackages = OptimizeSingleGroup(shipment);

                if (optimizedPackages.Count > 0)
                {
                    result = RatePackages(optimizedPackages);

                    if (GlobalSettings.DiagnosticsMode)
                    {
                        foreach (var package in optimizedPackages)
                        {
                            _Logger.LogMessage("FEDEX SHIPMENT",
                                               string.Format("Source Address: {0}, {1}, {2}, {3}, {4} {5}",
                                                             package.SourceAddress.Street, package.SourceAddress.Street2,
                                                             package.SourceAddress.City, package.SourceAddress.RegionData.DisplayName,
                                                             package.SourceAddress.CountryData.DisplayName, package.SourceAddress.PostalCode),
                                               EventLogSeverity.Information);

                            _Logger.LogMessage("FEDEX SHIPMENT",
                                               string.Format("Destination Address: {0}, {1}, {2}, {3}, {4} {5}",
                                                             package.DestinationAddress.Street, package.DestinationAddress.Street2,
                                                             package.DestinationAddress.City, package.DestinationAddress.RegionData.DisplayName,
                                                             package.DestinationAddress.CountryData.DisplayName,
                                                             package.DestinationAddress.PostalCode),
                                               EventLogSeverity.Information);
                        }
                    }
                }
                else
                {
                    if (GlobalSettings.DiagnosticsMode)
                    {
                        _Logger.LogMessage("No packages found to rate for FedEx");
                    }
                }
            }
            catch (Exception ex)
            {
                _Logger.LogException(ex);
                var m = new ShippingServiceMessage();
                m.SetError("Exception", ex.Message + " | " + ex.StackTrace);
                _Messages.Add(m);
            }

            if (GlobalSettings.DiagnosticsMode)
            {
                foreach (var rate in result)
                {
                    _Logger.LogMessage("OPTIMIZED FEDEX RATE",
                                       string.Format(
                                           "Service Id: {0}<br />Display Name: {1}<br />Service Codes:{2}<br />Estimated Cost:{3}",
                                           rate.ServiceId, rate.DisplayName, rate.ServiceCodes, rate.EstimatedCost),
                                       EventLogSeverity.Information);
                }
            }

            if (hasErrors)
            {
                result = new List <IShippingRate>();
            }
            return(result);
        }
예제 #5
0
        // Gets all available rates regardless of settings
        private List <IShippingRate> GetAllShippingRatesForShipment(IShipment shipment)
        {
            var rates     = new List <IShippingRate>();
            var hasErrors = false;

            try
            {
                var sErrorMessage = string.Empty;
                var sErrorCode    = string.Empty;

                var sURL = string.Concat(UPSLIVESERVER, "FreightRate");

                // Build XML
                var settings = new UPSFreightSettings
                {
                    UserID    = GlobalSettings.Username,
                    Password  = GlobalSettings.Password,
                    ServerUrl = UPSLIVESERVER,
                    License   = GlobalSettings.LicenseNumber
                };


                var sXML = string.Empty;

                FreightRateRequest freightRateRequest = BuildUPSFreightRateRequestForShipment(shipment);
                FreightRateService rateService        = new FreightRateService();

                //Set Web Service URL
                rateService.Url = sURL;

                //Set Security Settings For Web Service
                UPSSecurity upss = new UPSSecurity();
                UPSSecurityServiceAccessToken upsSvcToken = new UPSSecurityServiceAccessToken();
                upsSvcToken.AccessLicenseNumber = settings.License;
                upss.ServiceAccessToken         = upsSvcToken;
                UPSSecurityUsernameToken upsSecUsrnameToken = new UPSSecurityUsernameToken();
                upsSecUsrnameToken.Username  = settings.UserID;
                upsSecUsrnameToken.Password  = settings.Password;
                upss.UsernameToken           = upsSecUsrnameToken;
                rateService.UPSSecurityValue = upss;

                var sStatusCode = "-1";

                try
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12; //Set for SSL Webservice Call
                    FreightRateResponse freightRateResponse = rateService.ProcessFreightRate(freightRateRequest);  //Send For Processing

                    if (freightRateResponse.Response.ResponseStatus.Code == "1")                                   //Sucess
                    {
                        sStatusCode = "1";
                        var r = new ShippingRate
                        {
                            DisplayName   = Settings.ServiceCodeFilter[0].DisplayName,
                            EstimatedCost = decimal.Parse(freightRateResponse.TotalShipmentCharge.MonetaryValue, NumberStyles.Currency, CultureInfo.InvariantCulture),
                            ServiceCodes  = Settings.ServiceCodeFilter[0].Code,
                            ServiceId     = Id
                        };
                        rates.Add(r);
                    }
                }
                catch (SoapException soapex) //Handle SOAP Exception
                {
                    _Logger.LogException(soapex);

                    var mex = new ShippingServiceMessage();

                    if (soapex.Detail != null)
                    {
                        mex.SetError("Exception", string.Concat(soapex.Detail.InnerText, " | ", soapex.Source));
                    }
                    else
                    {
                        mex.SetError("Exception", string.Concat(soapex.Message, " | ", soapex.Source));
                    }

                    _Messages.Add(mex);

                    return(rates);
                }
                catch (Exception Exx)
                {
                    _Logger.LogException(Exx);

                    var mex = new ShippingServiceMessage();

                    mex.SetError("Exception", string.Concat(Exx.Message, " | ", Exx.Source));

                    _Messages.Add(mex);

                    return(rates);
                }

                if (sStatusCode != "1")
                {
                    hasErrors = true;
                }
            }

            catch (Exception ex)
            {
                _Logger.LogException(ex);

                var m = new ShippingServiceMessage();

                m.SetError("Exception", string.Concat(ex.Message, " | ", ex.StackTrace));

                _Messages.Add(m);
            }

            if (hasErrors)
            {
                rates = new List <IShippingRate>();
            }

            return(rates);
        }
예제 #6
0
        // Gets all available rates regardless of settings
        private List <IShippingRate> GetAllShippingRatesForShipment(IShipment shipment)
        {
            List <IShippingRate> rates = new List <IShippingRate>();

            bool         hasErrors     = false;
            const string UPSLIVESERVER = @"https://www.ups.com/ups.app/xml/";

            try
            {
                string sErrorMessage = "";
                string sErrorCode    = "";

                string sURL = "";
                sURL  = UPSLIVESERVER;
                sURL += "Rate";

                // Build XML
                string      sXML     = "";
                UpsSettings settings = new UpsSettings();

                settings.UserID    = GlobalSettings.Username;
                settings.Password  = GlobalSettings.Password;
                settings.ServerUrl = UPSLIVESERVER;
                settings.License   = GlobalSettings.LicenseNumber;

                sXML  = XmlTools.BuildAccessKey(settings);
                sXML += "\n";


                sXML += BuildUPSRateRequestForShipment(shipment);

                if (GlobalSettings.DiagnosticsMode)
                {
                    _Logger.LogMessage("UPS Request: " + sXML);
                    ShippingServiceMessage m = new ShippingServiceMessage();
                    m.SetDiagnostics("", "Request:" + sXML);
                    _Messages.Add(m);
                }


                string sResponse = "";
                sResponse = XmlTools.ReadHtmlPage_POST(sURL, sXML);

                if (GlobalSettings.DiagnosticsMode)
                {
                    _Logger.LogMessage("UPS Response: " + sResponse);
                    ShippingServiceMessage m = new ShippingServiceMessage();
                    m.SetDiagnostics("", "Response:" + sResponse);
                    _Messages.Add(m);
                }


                XmlDocument xDoc;
                XmlNodeList NodeList;
                string      sStatusCode = "-1";

                // Rated Packages will be used to return a list of suggested packages
                Collection <Package> ratedPackages = new Collection <Package>();

                try
                {
                    xDoc = new XmlDocument();
                    xDoc.LoadXml(sResponse);

                    if (xDoc.DocumentElement.Name == "RatingServiceSelectionResponse")
                    {
                        XmlNode n;
                        int     i = 0;
                        XmlNode nTag;

                        NodeList = xDoc.GetElementsByTagName("RatingServiceSelectionResponse");
                        n        = NodeList.Item(0);
                        for (i = 0; i <= n.ChildNodes.Count - 1; i++)
                        {
                            nTag = n.ChildNodes.Item(i);
                            switch (nTag.Name)
                            {
                            case "Response":
                                int     iRes = 0;
                                XmlNode nRes;
                                for (iRes = 0; iRes <= nTag.ChildNodes.Count - 1; iRes++)
                                {
                                    nRes = nTag.ChildNodes[iRes];
                                    switch (nRes.Name)
                                    {
                                    case "ResponseStatusCode":
                                        sStatusCode = nRes.FirstChild.Value;
                                        break;

                                    case "ResponseStatusDescription":
                                        // Not Used
                                        break;

                                    case "Error":
                                        int     iErr = 0;
                                        XmlNode nErr;
                                        for (iErr = 0; iErr <= nRes.ChildNodes.Count - 1; iErr++)
                                        {
                                            nErr = nRes.ChildNodes[iErr];
                                            switch (nErr.Name)
                                            {
                                            case "ErrorCode":
                                                sErrorCode = nErr.FirstChild.Value;
                                                break;

                                            case "ErrorDescription":
                                                sErrorMessage = nErr.FirstChild.Value;
                                                break;

                                            case "ErrorSeverity":
                                                // Not Used
                                                break;
                                            }
                                        }
                                        break;
                                    }
                                }
                                break;

                            case "RatedShipment":

                                int     iRated = 0;
                                XmlNode nRated;

                                string sPostage      = string.Empty;
                                string sCurrencyCode = string.Empty;
                                string sCode         = string.Empty;
                                string sDescription  = string.Empty;

                                for (iRated = 0; iRated <= nTag.ChildNodes.Count - 1; iRated++)
                                {
                                    nRated = nTag.ChildNodes[iRated];
                                    switch (nRated.Name)
                                    {
                                    case "Service":
                                        int     iServices = 0;
                                        XmlNode nServices;
                                        for (iServices = 0; iServices <= nRated.ChildNodes.Count - 1; iServices++)
                                        {
                                            nServices = nRated.ChildNodes[iServices];
                                            switch (nServices.Name)
                                            {
                                            case "Code":
                                                sCode        = nServices.FirstChild.Value;
                                                sDescription = DecodeUpsServiceCode(sCode);
                                                break;

                                            case "Description":
                                                sDescription = nServices.FirstChild.Value;
                                                break;
                                            }
                                        }
                                        break;

                                    case "TotalCharges":
                                        int     iCharges = 0;
                                        XmlNode nCharges;
                                        for (iCharges = 0; iCharges <= nRated.ChildNodes.Count - 1; iCharges++)
                                        {
                                            nCharges = nRated.ChildNodes[iCharges];
                                            switch (nCharges.Name)
                                            {
                                            case "MonetaryValue":
                                                sPostage = nCharges.FirstChild.Value;
                                                break;

                                            case "CurrencyCode":
                                                sCurrencyCode = nCharges.FirstChild.Value;
                                                break;
                                            }
                                        }
                                        break;
                                    }
                                }

                                decimal dRate = -1;

                                if (sPostage.Length > 0)
                                {
                                    dRate = decimal.Parse(sPostage, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.InvariantCulture);
                                }
                                else
                                {
                                    ShippingServiceMessage nop = new ShippingServiceMessage();
                                    nop.SetInfo("", "No UPS Postage Found");
                                    _Messages.Add(nop);
                                    hasErrors = true;
                                }

                                if (dRate >= 0)
                                {
                                    ShippingRate r = new ShippingRate();
                                    r.DisplayName   = sDescription;
                                    r.EstimatedCost = dRate;
                                    r.ServiceCodes  = sCode;
                                    r.ServiceId     = this.Id;
                                    rates.Add(r);
                                }

                                if (GlobalSettings.DiagnosticsMode)
                                {
                                    ShippingServiceMessage msg = new ShippingServiceMessage();
                                    msg.SetDiagnostics("UPS Rates Found", "StatusCode=" + sStatusCode + ",Postage=" + sPostage + ",Errors=" + sErrorMessage + ",Rate=" + dRate.ToString());
                                    _Messages.Add(msg);
                                    _Logger.LogMessage("UPS Rates Found: StatusCode=" + sStatusCode + ",Postage=" + sPostage + ",Errors=" + sErrorMessage + ",Rate=" + dRate.ToString());
                                }

                                break;
                            }
                        }
                    }
                    else
                    {
                        hasErrors     = true;
                        sErrorMessage = "Couldn't find valid XML response from server.";
                    }
                }

                catch (Exception Exx)
                {
                    _Logger.LogException(Exx);
                    ShippingServiceMessage mex = new ShippingServiceMessage();
                    mex.SetError("Exception", Exx.Message + " | " + Exx.Source);
                    _Messages.Add(mex);
                    return(rates);
                }

                if (sStatusCode != "1")
                {
                    hasErrors = true;
                }
            }

            catch (Exception ex)
            {
                _Logger.LogException(ex);
                ShippingServiceMessage m = new ShippingServiceMessage();
                m.SetError("Exception", ex.Message + " | " + ex.StackTrace);
                _Messages.Add(m);
            }

            if (hasErrors)
            {
                rates = new List <IShippingRate>();
            }
            return(rates);
        }