private static IEnumerable <DeliveryOption> BuildDeliveryOptions(RateReply rateReply, IShipment shipment) { var optionCollection = new DeliveryOptionCollection(); foreach (var rateReplyDetail in rateReply.RateReplyDetails) { var service = rateReplyDetail.ServiceType.ToString(); optionCollection.AddRange(rateReplyDetail.RatedShipmentDetails.Select(shipmentDetail => shipmentDetail.ShipmentRateDetail.TotalNetCharge.Amount).Select(rate => new DeliveryOption { Rate = rate, Service = service })); } return(optionCollection); }
private IEnumerable<DeliveryOption> UpsParseRates(string response) { var optionCollection = new DeliveryOptionCollection(); var sr = new StringReader(response); var tr = new XmlTextReader(sr); try { while (tr.Read()) { if ((tr.Name == "Error") && (tr.NodeType == XmlNodeType.Element)) { string errorText = ""; while (tr.Read()) { if ((tr.Name == "ErrorCode") && (tr.NodeType == XmlNodeType.Element)) { errorText += "UPS Rating Error, Error Code: " + tr.ReadString() + ", "; } if ((tr.Name == "ErrorDescription") && (tr.NodeType == XmlNodeType.Element)) { errorText += "Error Desc: " + tr.ReadString(); } } throw new ProviderException("UPS Error returned: " + errorText); } if ((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.Element)) { string serviceCode = ""; string monetaryValue = ""; while (tr.Read()) { if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.Element)) { while (tr.Read()) { if ((tr.Name == "Code") && (tr.NodeType == XmlNodeType.Element)) { serviceCode = tr.ReadString(); tr.ReadEndElement(); } if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.EndElement)) { break; } } } if (((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.EndElement)) || ((tr.Name == "RatedPackage") && (tr.NodeType == XmlNodeType.Element))) { break; } if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.Element)) { while (tr.Read()) { if ((tr.Name == "MonetaryValue") && (tr.NodeType == XmlNodeType.Element)) { monetaryValue = tr.ReadString(); tr.ReadEndElement(); } if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.EndElement)) { break; } } } } var service = serviceCode; var rate = Convert.ToDecimal(monetaryValue); // tack on additional handling charge for each bag if (!String.IsNullOrEmpty(_processorSettings.UpsAdditionalHandlingCharge)) { decimal additionalHandling = Convert.ToDecimal(_processorSettings.UpsAdditionalHandlingCharge); } //Weed out unwanted or unkown service rates if (service.ToUpper() != "UNKNOWN" && IncludedService(serviceCode)) { var option = new DeliveryOption { Rate = rate, Service = service }; optionCollection.Add(option); } } } sr.Dispose(); return optionCollection; } catch (SystemException ex) { throw new SystemException(ex.Message); } finally { sr.Close(); tr.Close(); } }
private DeliveryOptionCollection UspsParseRates(string response, Shipment package) { var optionCollection = new DeliveryOptionCollection(); using (var reader = new XmlTextReader(new StringReader(response))) { while (reader.Read()) { if ((reader.Name == "Error") && (reader.NodeType == XmlNodeType.Element)) { string errorText = ""; while (reader.Read()) { if ((reader.Name == "HelpContext") && (reader.NodeType == XmlNodeType.Element)) { errorText += "USPS Help Context: " + reader.ReadString() + ", "; } if ((reader.Name == "Description") && (reader.NodeType == XmlNodeType.Element)) { errorText += "Error Desc: " + reader.ReadString(); } } throw new ProviderException("USPS Error returned: " + errorText); } if ((reader.Name == "Postage") && (reader.NodeType == XmlNodeType.Element)) { int serviceCode; Int32.TryParse(reader.GetAttribute("CLASSID"), out serviceCode); string postalRate = ""; String mailService = ""; reader.Read(); if (reader.Name == "MailService" && reader.NodeType == XmlNodeType.Element) { mailService = reader.ReadString(); reader.ReadEndElement(); } if (reader.Name == "Rate" && reader.NodeType == XmlNodeType.Element) { postalRate = reader.ReadString(); reader.ReadEndElement(); } IEnumerable <UspsDeliveryOption> options = GetDeliveryOptions(serviceCode, package); if (options == null) { continue; } decimal rate; if (!Decimal.TryParse(postalRate, out rate)) { continue; } if (!String.IsNullOrEmpty(_uspsAdditionalHandlingCharge)) { decimal additionalHandling; if (Decimal.TryParse(_uspsAdditionalHandlingCharge, out additionalHandling)) { rate += additionalHandling; } } // Weed out unavailable service rates //if (options.Any(option => option.Fits(weight, width, length, height))) //{ var deliveryOption = new DeliveryOption { Rate = rate, Service = mailService }; optionCollection.Add(deliveryOption); //} } } return(optionCollection); } }
private DeliveryOptionCollection UspsParseRates(string response, Shipment package) { var optionCollection = new DeliveryOptionCollection(); using (var reader = new XmlTextReader(new StringReader(response))) { while (reader.Read()) { if ((reader.Name == "Error") && (reader.NodeType == XmlNodeType.Element)) { string errorText = ""; while (reader.Read()) { if ((reader.Name == "HelpContext") && (reader.NodeType == XmlNodeType.Element)) { errorText += "USPS Help Context: " + reader.ReadString() + ", "; } if ((reader.Name == "Description") && (reader.NodeType == XmlNodeType.Element)) { errorText += "Error Desc: " + reader.ReadString(); } } throw new ProviderException("USPS Error returned: " + errorText); } if ((reader.Name == "Postage") && (reader.NodeType == XmlNodeType.Element)) { int serviceCode; Int32.TryParse(reader.GetAttribute("CLASSID"), out serviceCode); string postalRate = ""; String mailService = ""; reader.Read(); if (reader.Name == "MailService" && reader.NodeType == XmlNodeType.Element) { mailService = reader.ReadString(); reader.ReadEndElement(); } if (reader.Name == "Rate" && reader.NodeType == XmlNodeType.Element) { postalRate = reader.ReadString(); reader.ReadEndElement(); } IEnumerable<UspsDeliveryOption> options = GetDeliveryOptions(serviceCode, package); if (options == null) { continue; } decimal rate; if (!Decimal.TryParse(postalRate, out rate)) { continue; } if (!String.IsNullOrEmpty(_uspsAdditionalHandlingCharge)) { decimal additionalHandling; if (Decimal.TryParse(_uspsAdditionalHandlingCharge, out additionalHandling)) { rate += additionalHandling; } } // Weed out unavailable service rates //if (options.Any(option => option.Fits(weight, width, length, height))) //{ var deliveryOption = new DeliveryOption {Rate = rate, Service = mailService}; optionCollection.Add(deliveryOption); //} } } return optionCollection; } }
private IEnumerable <DeliveryOption> UpsParseRates(string response) { var optionCollection = new DeliveryOptionCollection(); var sr = new StringReader(response); var tr = new XmlTextReader(sr); try { while (tr.Read()) { if ((tr.Name == "Error") && (tr.NodeType == XmlNodeType.Element)) { string errorText = ""; while (tr.Read()) { if ((tr.Name == "ErrorCode") && (tr.NodeType == XmlNodeType.Element)) { errorText += "UPS Rating Error, Error Code: " + tr.ReadString() + ", "; } if ((tr.Name == "ErrorDescription") && (tr.NodeType == XmlNodeType.Element)) { errorText += "Error Desc: " + tr.ReadString(); } } throw new ProviderException("UPS Error returned: " + errorText); } if ((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.Element)) { string serviceCode = ""; string monetaryValue = ""; while (tr.Read()) { if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.Element)) { while (tr.Read()) { if ((tr.Name == "Code") && (tr.NodeType == XmlNodeType.Element)) { serviceCode = tr.ReadString(); tr.ReadEndElement(); } if ((tr.Name == "Service") && (tr.NodeType == XmlNodeType.EndElement)) { break; } } } if (((tr.Name == "RatedShipment") && (tr.NodeType == XmlNodeType.EndElement)) || ((tr.Name == "RatedPackage") && (tr.NodeType == XmlNodeType.Element))) { break; } if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.Element)) { while (tr.Read()) { if ((tr.Name == "MonetaryValue") && (tr.NodeType == XmlNodeType.Element)) { monetaryValue = tr.ReadString(); tr.ReadEndElement(); } if ((tr.Name == "TotalCharges") && (tr.NodeType == XmlNodeType.EndElement)) { break; } } } } var service = serviceCode; var rate = Convert.ToDecimal(monetaryValue); // tack on additional handling charge for each bag if (!String.IsNullOrEmpty(_processorSettings.UpsAdditionalHandlingCharge)) { decimal additionalHandling = Convert.ToDecimal(_processorSettings.UpsAdditionalHandlingCharge); } //Weed out unwanted or unkown service rates if (service.ToUpper() != "UNKNOWN" && IncludedService(serviceCode)) { var option = new DeliveryOption { Rate = rate, Service = service }; optionCollection.Add(option); } } } sr.Dispose(); return(optionCollection); } catch (SystemException ex) { throw new SystemException(ex.Message); } finally { sr.Close(); tr.Close(); } }
private static IEnumerable<DeliveryOption> BuildDeliveryOptions(RateReply rateReply, IShipment shipment) { var optionCollection = new DeliveryOptionCollection(); foreach (var rateReplyDetail in rateReply.RateReplyDetails) { var service = rateReplyDetail.ServiceType.ToString(); optionCollection.AddRange(rateReplyDetail.RatedShipmentDetails.Select(shipmentDetail => shipmentDetail.ShipmentRateDetail.TotalNetCharge.Amount).Select(rate => new DeliveryOption { Rate = rate, Service = service })); } return optionCollection; }