Try your search with a different keyword or use * as a wildcard.
using Nop.Core;
using Nop.Plugin.Shipping.UPS.Domain;
using Nop.Plugin.Shipping.UPS.Services;
using Nop.Services.Configuration;
using Nop.Services.Localization;
using Nop.Services.Plugins;
using Nop.Services.Shipping;
using Nop.Services.Shipping.Tracking;
namespace Nop.Plugin.Shipping.UPS;
///
/// Represents UPS computation method
///
public class UPSComputationMethod : BasePlugin, IShippingRateComputationMethod
{
#region Fields
private readonly ILocalizationService _localizationService;
private readonly ISettingService _settingService;
private readonly IWebHelper _webHelper;
private readonly UPSService _upsService;
#endregion
#region Ctor
public UPSComputationMethod(ILocalizationService localizationService,
ISettingService settingService,
IWebHelper webHelper,
UPSService upsService)
{
_localizationService = localizationService;
_settingService = settingService;
_webHelper = webHelper;
_upsService = upsService;
}
#endregion
#region Methods
///
/// Gets available shipping options
///
/// A request for getting shipping options
///
/// A task that represents the asynchronous operation
/// The task result contains the represents a response of getting shipping rate options
///
public async Task GetShippingOptionsAsync(GetShippingOptionRequest getShippingOptionRequest)
{
ArgumentNullException.ThrowIfNull(getShippingOptionRequest);
if (!getShippingOptionRequest.Items?.Any() ?? true)
return new GetShippingOptionResponse { Errors = new[] { "No shipment items" } };
if (getShippingOptionRequest.ShippingAddress?.CountryId == null)
return new GetShippingOptionResponse { Errors = new[] { "Shipping address is not set" } };
return await _upsService.GetRatesAsync(getShippingOptionRequest);
}
///
/// Gets fixed shipping rate (if shipping rate computation method allows it and the rate can be calculated before checkout).
///
/// A request for getting shipping options
///
/// A task that represents the asynchronous operation
/// The task result contains the fixed shipping rate; or null in case there's no fixed shipping rate
///
public Task GetFixedRateAsync(GetShippingOptionRequest getShippingOptionRequest)
{
return Task.FromResult(null);
}
///
/// Get associated shipment tracker
///
///
/// A task that represents the asynchronous operation
/// The task result contains the shipment tracker
///
public Task GetShipmentTrackerAsync()
{
return Task.FromResult(new UPSShipmentTracker(_upsService));
}
///
/// Gets a configuration page URL
///
public override string GetConfigurationPageUrl()
{
return $"{_webHelper.GetStoreLocation()}Admin/UPSShipping/Configure";
}
///
/// Install plugin
///
/// A task that represents the asynchronous operation
public override async Task InstallAsync()
{
//settings
await _settingService.SaveSettingAsync(new UPSSettings
{
UseSandbox = true,
CustomerClassification = CustomerClassification.StandardListRates,
PickupType = PickupType.OneTimePickup,
PackagingType = PackagingType.ExpressBox,
PackingPackageVolume = 5184,
PackingType = PackingType.PackByDimensions,
PassDimensions = true,
WeightType = "LBS",
DimensionsType = "IN",
RequestTimeout = UPSDefaults.RequestTimeout
});
//locales
await _localizationService.AddOrUpdateLocaleResourceAsync(new Dictionary
{
["Enums.Nop.Plugin.Shipping.UPS.PackingType.PackByDimensions"] = "Pack by dimensions",
["Enums.Nop.Plugin.Shipping.UPS.PackingType.PackByOneItemPerPackage"] = "Pack by one item per package",
["Enums.Nop.Plugin.Shipping.UPS.PackingType.PackByVolume"] = "Pack by volume",
["Plugins.Shipping.UPS.Fields.AccountNumber"] = "Account number",
["Plugins.Shipping.UPS.Fields.AccountNumber.Hint"] = "Specify UPS account number (required to get negotiated rates).",
["Plugins.Shipping.UPS.Fields.AdditionalHandlingCharge"] = "Additional handling charge",
["Plugins.Shipping.UPS.Fields.AdditionalHandlingCharge.Hint"] = "Enter additional handling fee to charge your customers.",
["Plugins.Shipping.UPS.Fields.AvailableCarrierServices"] = "Carrier Services",
["Plugins.Shipping.UPS.Fields.AvailableCarrierServices.Hint"] = "Select the services you want to offer to customers.",
["Plugins.Shipping.UPS.Fields.ClientId"] = "Client ID",
["Plugins.Shipping.UPS.Fields.ClientId.Hint"] = "Specify UPS client ID.",
["Plugins.Shipping.UPS.Fields.ClientSecret"] = "Client secret",
["Plugins.Shipping.UPS.Fields.ClientSecret.Hint"] = "Specify UPS client secret.",
["Plugins.Shipping.UPS.Fields.CustomerClassification"] = "UPS Customer Classification",
["Plugins.Shipping.UPS.Fields.CustomerClassification.Hint"] = "Choose customer classification.",
["Plugins.Shipping.UPS.Fields.DimensionsType"] = "Dimensions type",
["Plugins.Shipping.UPS.Fields.DimensionsType.Hint"] = "Choose dimensions type (inches or centimeters).",
["Plugins.Shipping.UPS.Fields.InsurePackage"] = "Insure package",
["Plugins.Shipping.UPS.Fields.InsurePackage.Hint"] = "Check to insure packages.",
["Plugins.Shipping.UPS.Fields.PackagingType"] = "UPS Packaging Type",
["Plugins.Shipping.UPS.Fields.PackagingType.Hint"] = "Choose UPS packaging type.",
["Plugins.Shipping.UPS.Fields.PackingPackageVolume"] = "Package volume",
["Plugins.Shipping.UPS.Fields.PackingPackageVolume.Hint"] = "Enter your package volume.",
["Plugins.Shipping.UPS.Fields.PackingType"] = "Packing type",
["Plugins.Shipping.UPS.Fields.PackingType.Hint"] = "Choose preferred packing type.",
["Plugins.Shipping.UPS.Fields.PassDimensions"] = "Pass dimensions",
["Plugins.Shipping.UPS.Fields.PassDimensions.Hint"] = "Check if you want to pass package dimensions when requesting rates.",
["Plugins.Shipping.UPS.Fields.PickupType"] = "UPS Pickup Type",
["Plugins.Shipping.UPS.Fields.PickupType.Hint"] = "Choose UPS pickup type.",
["Plugins.Shipping.UPS.Fields.SaturdayDeliveryEnabled"] = "Saturday Delivery enabled",
["Plugins.Shipping.UPS.Fields.SaturdayDeliveryEnabled.Hint"] = "Check to get rates for Saturday Delivery options.",
["Plugins.Shipping.UPS.Fields.Tracing"] = "Tracing",
["Plugins.Shipping.UPS.Fields.Tracing.Hint"] = "Check if you want to record plugin tracing in System Log. Warning: The entire request and response will be logged (including Client Id/secret, AccountNumber). Do not leave this enabled in a production environment.",
["Plugins.Shipping.UPS.Fields.UseSandbox"] = "Use sandbox",
["Plugins.Shipping.UPS.Fields.UseSandbox.Hint"] = "Check to use sandbox (testing environment).",
["Plugins.Shipping.UPS.Fields.WeightType"] = "Weight type",
["Plugins.Shipping.UPS.Fields.WeightType.Hint"] = "Choose the weight type (pounds or kilograms).",
["Plugins.Shipping.UPS.Tracker.Arrived"] = "Arrived",
["Plugins.Shipping.UPS.Tracker.Booked"] = "Booked",
["Plugins.Shipping.UPS.Tracker.Delivered"] = "Delivered",
["Plugins.Shipping.UPS.Tracker.Departed"] = "Departed",
["Plugins.Shipping.UPS.Tracker.ExportScanned"] = "Export scanned",
["Plugins.Shipping.UPS.Tracker.NotDelivered"] = "Not delivered",
["Plugins.Shipping.UPS.Tracker.OriginScanned"] = "Origin scanned",
["Plugins.Shipping.UPS.Tracker.Pickup"] = "Pickup"
});
await base.InstallAsync();
}
///
/// Uninstall plugin
///
/// A task that represents the asynchronous operation
public override async Task UninstallAsync()
{
//settings
await _settingService.DeleteSettingAsync();
//locales
await _localizationService.DeleteLocaleResourcesAsync("Enums.Nop.Plugin.Shipping.UPS");
await _localizationService.DeleteLocaleResourcesAsync("Plugins.Shipping.UPS");
await base.UninstallAsync();
}
#endregion
}