コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: FedExWS.cs プロジェクト: phongdevelopers/my-phong
        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);
        }
コード例 #4
0
ファイル: AcHelper.cs プロジェクト: phongdevelopers/my-phong
 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;
 }
コード例 #5
0
ファイル: AcHelper.cs プロジェクト: phongdevelopers/my-phong
 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);
 }
コード例 #6
0
ファイル: USPS.cs プロジェクト: phongdevelopers/my-phong
        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);
        }
コード例 #7
0
ファイル: AcHelper.cs プロジェクト: phongdevelopers/my-phong
 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);
 }
コード例 #8
0
ファイル: FedExWS.cs プロジェクト: phongdevelopers/my-phong
        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);
        }
コード例 #9
0
ファイル: FedExWS.cs プロジェクト: phongdevelopers/my-phong
        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>());
            }
        }
コード例 #10
0
ファイル: FedExWS.cs プロジェクト: phongdevelopers/my-phong
        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);
        }