public override ShipRateQuote GetShipRateQuote(Warehouse origin, CommerceBuilder.Users.Address destination, BasketItemCollection contents, string serviceCode) { //VERIFY WE HAVE A DESTINATION COUNTRY if (string.IsNullOrEmpty(destination.CountryCode)) { return(null); } //VERIFY THAT ORIGIN COUNTRY IS AU if (string.IsNullOrEmpty(origin.CountryCode) || !origin.CountryCode.Equals("AU")) { return(null); } if (destination.CountryCode.Equals("AU")) { //if destination is also AU only domestic services are applicable if (!IsDomesticService(serviceCode)) { return(null); } } else { //only international services are available if (IsDomesticService(serviceCode)) { return(null); } } PackageList plist = PreparePackages(origin, contents); if (plist == null || plist.Count == 0) { return(null); } ProviderShipRateQuote providerQuote = null; ProviderShipRateQuote tempQuote; foreach (Package item in plist) { tempQuote = GetProviderQuote(origin, destination, item, serviceCode); if (providerQuote == null) { providerQuote = tempQuote; } else { providerQuote.AddPackageQoute(tempQuote); } } if (providerQuote != null && providerQuote.PackageCount < plist.Count) { return(null); } return(providerQuote); }
public override ShipRateQuote GetShipRateQuote(Warehouse origin, CommerceBuilder.Users.Address destination, BasketItemCollection contents, string serviceCode) { Dictionary <string, ProviderShipRateQuote> allQuotes = GetAllSericeQuotes(origin, destination, contents); if ((allQuotes != null) && allQuotes.ContainsKey(serviceCode)) { return(allQuotes[serviceCode]); } else { return(null); } }
private PackageList PreparePackages(Warehouse origin, CommerceBuilder.Users.Address destination, BasketItemCollection contents) { PackageList plist = PackageManager.GetPackageList(contents); if (plist == null || plist.Count == 0) { return(null); } ProviderUnits pUnits = GetProviderUnits(origin.Country); //GET UNITS USED BY STORE Store store = Token.Instance.Store; MeasurementUnit storeMeasurementUnit = store.MeasurementUnit; WeightUnit storeWeightUnit = store.WeightUnit; bool requireMC = storeMeasurementUnit != pUnits.MeasurementUnit; bool requireWC = storeWeightUnit != pUnits.WeightUnit; if (requireMC && requireWC) { plist.ConvertBoth(pUnits.WeightUnit, pUnits.MeasurementUnit); } else if (requireWC) { plist.ConvertWeight(pUnits.WeightUnit); } else if (requireMC) { plist.ConvertDimensions(pUnits.MeasurementUnit); } LSDecimal maxWeight = LocaleHelper.ConvertWeight(WeightUnit.Pounds, MaxPackageWeight, pUnits.WeightUnit); LSDecimal minWeight = LocaleHelper.ConvertWeight(WeightUnit.Pounds, MinPackageWeight, pUnits.WeightUnit); if (EnablePackageBreakup && maxWeight > 0) { //compose packages (splits items larger than the maximum carrier weight) plist.Compose(maxWeight, minWeight); } else { plist.EnsureMinimumWeight(minWeight); } //convert weight and dimensions to whole numbers plist.ConvertDimsToWholeNumbers(); plist.RoundWeight(1); return(plist); }
public static void PopulateAcAddress(CommerceBuilder.Users.Address addr, AutoGen.Address gcAddress) { addr.Address1 = gcAddress.address1; addr.Address2 = gcAddress.address2; addr.City = gcAddress.city; addr.Company = gcAddress.companyname; addr.CountryCode = gcAddress.countrycode; addr.FullName = gcAddress.contactname; addr.Fax = gcAddress.fax; addr.Phone = gcAddress.phone; addr.PostalCode = gcAddress.postalcode; addr.Province = gcAddress.region; addr.Email = gcAddress.email; }
public static CommerceBuilder.Users.Address GetAnonAcAddress(MerchantCalculation.AnonymousAddress anonAddress) { CommerceBuilder.Users.Address addr = new CommerceBuilder.Users.Address(); addr.FirstName = "Anonymous"; addr.LastName = "Anonymous"; addr.Address1 = "Anonymous"; addr.City = anonAddress.City; addr.CountryCode = anonAddress.CountryCode; addr.PostalCode = anonAddress.PostalCode; addr.Province = anonAddress.Region; //TODO : get from configuration addr.Residence = false; return(addr); }
public override ShipRateQuote GetShipRateQuote(Warehouse origin, CommerceBuilder.Users.Address destination, BasketItemCollection contents, string serviceCode) { //GET THE SHIP QUOTE FOR THE GIVEN SERVICE //GET THE RATE FOR ALL SERVICES Dictionary <String, ProviderShipRateQuote> allProviderQuotes = GetAllProviderShipRateQuotes(origin, destination, contents); if (allProviderQuotes != null && allProviderQuotes.ContainsKey(serviceCode)) { ProviderShipRateQuote providerQuote = allProviderQuotes[serviceCode]; ShipRateQuote quote = new ShipRateQuote(); quote.Rate = providerQuote.Rate; return(quote); } return(null); }
public static CommerceBuilder.Users.Address GetAcAddress(CommerceBuilder.Payments.Providers.GoogleCheckout.AutoGen.Address gcAddress) { CommerceBuilder.Users.Address addr = new CommerceBuilder.Users.Address(); addr.Address1 = gcAddress.address1; addr.Address2 = gcAddress.address2; addr.City = gcAddress.city; addr.Company = gcAddress.companyname; addr.CountryCode = gcAddress.countrycode; addr.FullName = gcAddress.contactname; addr.Email = gcAddress.email; addr.Fax = gcAddress.fax; addr.Phone = gcAddress.phone; addr.PostalCode = gcAddress.postalcode; addr.Province = gcAddress.region; //TODO //GoogleCheckout does not tell us whether an address is residence or commercial. //We assume by default that it is commercial. This should probably be a //configuration parameter addr.Residence = false; return(addr); }
private RateRequest CreateRateRequest(Warehouse origin, CommerceBuilder.Users.Address destination, PackageList packageList) { // Build the RateRequest RateRequest request = new RateRequest(); // request.WebAuthenticationDetail = new WebAuthenticationDetail(); request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential(); request.WebAuthenticationDetail.UserCredential.Key = this.Key; request.WebAuthenticationDetail.UserCredential.Password = this.Password; // request.ClientDetail = new ClientDetail(); request.ClientDetail.AccountNumber = this.AccountNumber; request.ClientDetail.MeterNumber = this.MeterNumber; // request.TransactionDetail = new TransactionDetail(); request.TransactionDetail.CustomerTransactionId = "*** Rate v5 Request ***"; // request.Version = new VersionId(); // WSDL version information, value is automatically set from wsdl // // Origin information request.CarrierCodes = new CarrierCodeType[2]; request.CarrierCodes[0] = CarrierCodeType.FDXE; request.CarrierCodes[1] = CarrierCodeType.FDXG; request.RequestedShipment = new RequestedShipment(); request.RequestedShipment.Shipper = new Party(); request.RequestedShipment.Shipper.Address = new CommerceBuilder.Shipping.Providers.FedExWS.RateServiceWebReference.Address(); request.RequestedShipment.Shipper.Address.StreetLines = new string[1] { origin.Address1 }; request.RequestedShipment.Shipper.Address.City = origin.City; request.RequestedShipment.Shipper.Address.StateOrProvinceCode = origin.Province; request.RequestedShipment.Shipper.Address.PostalCode = origin.PostalCode; request.RequestedShipment.Shipper.Address.CountryCode = origin.CountryCode; // // Destination Information request.RequestedShipment.Recipient = new Party(); request.RequestedShipment.Recipient.Address = new CommerceBuilder.Shipping.Providers.FedExWS.RateServiceWebReference.Address(); request.RequestedShipment.Recipient.Address.StreetLines = new string[1] { destination.Address1 }; request.RequestedShipment.Recipient.Address.City = destination.City; request.RequestedShipment.Recipient.Address.StateOrProvinceCode = destination.Province; request.RequestedShipment.Recipient.Address.PostalCode = destination.PostalCode; request.RequestedShipment.Recipient.Address.CountryCode = destination.CountryCode; if (destination.Residence) { request.RequestedShipment.Recipient.Address.Residential = destination.Residence; request.RequestedShipment.Recipient.Address.ResidentialSpecified = true; } // // Payment Information request.RequestedShipment.ShippingChargesPayment = new Payment(); request.RequestedShipment.ShippingChargesPayment.PaymentType = PaymentType.SENDER; request.RequestedShipment.ShippingChargesPayment.PaymentTypeSpecified = true; if (!string.IsNullOrEmpty(this.PayorAccountNumber)) { request.RequestedShipment.ShippingChargesPayment.Payor = new Payor(); request.RequestedShipment.ShippingChargesPayment.Payor.AccountNumber = this.PayorAccountNumber; } // request.RequestedShipment.DropoffType = this.DropoffType; request.RequestedShipment.PackagingType = this.PackagingType; request.RequestedShipment.PackagingTypeSpecified = true; request.RequestedShipment.ServiceTypeSpecified = false; // //request.RequestedShipment.TotalInsuredValue = new Money(); //request.RequestedShipment.TotalInsuredValue.Amount = 100; //request.RequestedShipment.TotalInsuredValue.Currency = "USD"; //request.RequestedShipment.ShipTimestamp = DateTime.Now; // Shipping date and time //request.RequestedShipment.ShipTimestampSpecified = true; request.RequestedShipment.RateRequestTypes = new RateRequestType[1]; request.RequestedShipment.RateRequestTypes[0] = RateRequestType.ACCOUNT; //request.RequestedShipment.RateRequestTypes[0] = RateRequestType.LIST; //???? // // The RateRequest can be populated with one of the following: // // RequestedPackageSummary - Details of multi piece shipment rate request - Use this to rate a total piece total weight shipment. // Array of RequestedPackage - Details of single piece shipment rate request or multiple packages with differing parameters. // //bool bPassRateRequestPackageSummary = false; // //if (bPassRateRequestPackageSummary) //{ // ----------------------------------------- // Passing multi piece shipment rate request // ----------------------------------------- // request.RequestedShipment.TotalWeight = new Weight(); // request.RequestedShipment.TotalWeight.Value = 20.0M; // request.RequestedShipment.TotalWeight.Units = WeightUnits.LB; // // request.RequestedShipment.PackageCount = "2"; // request.RequestedShipment.PackageDetail = RequestedPackageDetailType.PACKAGE_SUMMARY; // // request.RequestedShipment.RequestedPackageSummary = new RequestedPackageSummary(); // request.RequestedShipment.RequestedPackageSummary.Dimensions = new Dimensions(); // package dimensions, applies to each package // request.RequestedShipment.RequestedPackageSummary.Dimensions.Length = "10"; // request.RequestedShipment.RequestedPackageSummary.Dimensions.Width = "10"; // request.RequestedShipment.RequestedPackageSummary.Dimensions.Height = "3"; // request.RequestedShipment.RequestedPackageSummary.Dimensions.Units = LinearUnits.IN; // } // else // { // ------------------------------------------ // Passing individual pieces rate request // ------------------------------------------ request.RequestedShipment.PackageCount = packageList.Count.ToString(); request.RequestedShipment.PackageDetail = RequestedPackageDetailType.INDIVIDUAL_PACKAGES; // request.RequestedShipment.RequestedPackages = new RequestedPackage[packageList.Count]; ProviderUnits pUnits = GetProviderUnits(origin.Country); for (int i = 0; i < packageList.Count; i++) { Package pkg = packageList[i]; request.RequestedShipment.RequestedPackages[i] = new RequestedPackage(); request.RequestedShipment.RequestedPackages[i].SequenceNumber = (i + 1).ToString(); // request.RequestedShipment.RequestedPackages[i].Weight = new Weight(); // package weight request.RequestedShipment.RequestedPackages[i].Weight.Units = GetWeightUnits(pUnits.WeightUnit); request.RequestedShipment.RequestedPackages[i].Weight.Value = (decimal)pkg.Weight; // request.RequestedShipment.RequestedPackages[i].Dimensions = new Dimensions(); // package dimensions request.RequestedShipment.RequestedPackages[i].Dimensions.Length = pkg.Length.ToString(); request.RequestedShipment.RequestedPackages[i].Dimensions.Width = pkg.Width.ToString(); request.RequestedShipment.RequestedPackages[i].Dimensions.Height = pkg.Height.ToString(); request.RequestedShipment.RequestedPackages[i].Dimensions.Units = GetLinearUnits(pUnits.MeasurementUnit); // if (IncludeDeclaredValue) { request.RequestedShipment.RequestedPackages[i].InsuredValue = new Money(); // insured value request.RequestedShipment.RequestedPackages[i].InsuredValue.Amount = (decimal)pkg.RetailValue; request.RequestedShipment.RequestedPackages[i].InsuredValue.Currency = Token.Instance.Store.BaseCurrency.ISOCode; } } //} return(request); }
private Dictionary <string, ProviderShipRateQuote> GetProviderQuotes(Warehouse origin, CommerceBuilder.Users.Address destination, PackageList packageList) { RateRequest request = CreateRateRequest(origin, destination, packageList); RateService rateService = new RateService(); RateReply reply; this.RecordCommunication("FedExWS", CommunicationDirection.Send, new UTF8Encoding().GetString(XmlUtility.Serialize(request))); // This is the call to the web service passing in a RateRequest and returning a RateReply try { reply = rateService.getRates(request); // Service call } catch (System.Web.Services.Protocols.SoapException se) { Logger.Error("Soap Exception", se); Logger.Debug(se.Detail.InnerXml); return(new Dictionary <string, ProviderShipRateQuote>()); } this.RecordCommunication("FedExWS", CommunicationDirection.Receive, new UTF8Encoding().GetString(XmlUtility.Serialize(reply))); if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) // check if the call was successful { //ShowRateReply(reply); return(ParseRates(reply)); } else { //Console.WriteLine(reply.Notifications[0].Message); return(new Dictionary <string, ProviderShipRateQuote>()); } }
private Dictionary <string, ProviderShipRateQuote> GetAllServiceQuotes(Warehouse origin, CommerceBuilder.Users.Address destination, BasketItemCollection contents) { string cacheKey = StringHelper.CalculateMD5Hash(Misc.GetClassId(this.GetType()) + "_" + origin.WarehouseId.ToString() + "_" + destination.AddressId.ToString() + "_" + contents.GenerateContentHash()); HttpContext context = HttpContext.Current; if ((context != null) && (context.Items.Contains(cacheKey))) { return((Dictionary <string, ProviderShipRateQuote>)context.Items[cacheKey]); } //VERIFY WE HAVE A DESTINATION COUNTRY if (string.IsNullOrEmpty(destination.CountryCode)) { return(null); } PackageList plist = PreparePackages(origin, destination, contents); if (plist == null || plist.Count == 0) { return(null); } Dictionary <string, ProviderShipRateQuote> allQuotes; allQuotes = GetProviderQuotes(origin, destination, plist); if (context != null) { context.Items.Add(cacheKey, allQuotes); } return(allQuotes); }