using System; using System.Collections.Generic; using Nop.Core; using Nop.Core.Domain.Shipping; using Nop.Plugin.Shipping.NopCliGeneric.Services; using Nop.Services.Common; 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.NopCliGeneric { /// /// Fixed rate or by weight shipping computation method /// public class ShippingNopCliGenericComputationMethod : BasePlugin, IShippingRateComputationMethod, IMiscPlugin { #region Fields private readonly ILocalizationService _localizationService; private readonly ISettingService _settingService; private readonly IShippingNopCliGenericService _ShippingNopCliGenericService; private readonly IWebHelper _webHelper; #endregion #region Ctor public ShippingNopCliGenericComputationMethod(ILocalizationService localizationService, ISettingService settingService, IShippingNopCliGenericService ShippingNopCliGenericService, IWebHelper webHelper) { _localizationService = localizationService; _settingService = settingService; _ShippingNopCliGenericService = ShippingNopCliGenericService; _webHelper = webHelper; } #endregion #region Utilities #endregion #region Methods /// /// Gets available shipping options /// /// A request for getting shipping options /// Represents a response of getting shipping rate options public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException(nameof(getShippingOptionRequest)); var response = new GetShippingOptionResponse(); if (getShippingOptionRequest.Items == null) response.AddError("No shipment items"); if (getShippingOptionRequest.ShippingAddress == null) response.AddError("Shipping address is not set"); if ((getShippingOptionRequest.ShippingAddress?.CountryId ?? 0) == 0) response.AddError("Shipping country is not set"); if (!response.Success) return response; try { foreach (var rate in _ShippingNopCliGenericService.GetAllRates(getShippingOptionRequest)) { response.ShippingOptions.Add(new ShippingOption { Description = rate.ServiceCode, Name = rate.ServiceName, Rate = rate.TotalCost }); } } catch (Exception e) { response.Errors.Add(e.Message); } return response; } /// /// 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 /// Fixed shipping rate; or null in case there's no fixed shipping rate public decimal? GetFixedRate(GetShippingOptionRequest getShippingOptionRequest) { if (getShippingOptionRequest == null) throw new ArgumentNullException(nameof(getShippingOptionRequest)); return null; } /// /// Gets a configuration page URL /// public override string GetConfigurationPageUrl() { return $"{_webHelper.GetStoreLocation()}Admin/ShippingNopCliGeneric/Configure"; } /// /// Install plugin /// public override void Install() { //settings var settings = new ShippingNopCliGenericSettings { PackingPackageVolume = 5184 }; _settingService.SaveSetting(settings); //locales _localizationService.AddPluginLocaleResource(new Dictionary { ["Enums.Nop.Plugin.Shipping.NopCliGeneric.PackingType.PackByDimensions"] = "Pack by dimensions", ["Enums.Nop.Plugin.Shipping.NopCliGeneric.PackingType.PackByVolume"] = "Pack by volume", ["Plugins.Shipping.NopCliGeneric.Fields.ApiKey.Hint"] = "Specify ShippingNopCliGeneric API key.", ["Plugins.Shipping.NopCliGeneric.Fields.ApiKey"] = "API key", ["Plugins.Shipping.NopCliGeneric.Fields.ApiSecret.Hint"] = "Specify ShippingNopCliGeneric API secret.", ["Plugins.Shipping.NopCliGeneric.Fields.ApiSecret"] = "API secret", ["Plugins.Shipping.NopCliGeneric.Fields.PackingPackageVolume.Hint"] = "Enter your package volume.", ["Plugins.Shipping.NopCliGeneric.Fields.PackingPackageVolume"] = "Package volume", ["Plugins.Shipping.NopCliGeneric.Fields.PackingType.Hint"] = "Choose preferred packing type.", ["Plugins.Shipping.NopCliGeneric.Fields.PackingType"] = "Packing type", ["Plugins.Shipping.NopCliGeneric.Fields.Password.Hint"] = "Specify ShippingNopCliGeneric password", ["Plugins.Shipping.NopCliGeneric.Fields.Password"] = "Password", ["Plugins.Shipping.NopCliGeneric.Fields.PassDimensions.Hint"] = "Check if need send dimensions to the ShippingNopCliGeneric server", ["Plugins.Shipping.NopCliGeneric.Fields.PassDimensions"] = "Pass dimensions", ["Plugins.Shipping.NopCliGeneric.Fields.UserName"] = "User name", ["Plugins.Shipping.NopCliGeneric.Fields.UserName.Hint"] = "Specify ShippingNopCliGeneric user name" }); base.Install(); } /// /// Uninstall plugin /// public override void Uninstall() { //settings _settingService.DeleteSetting(); //locales _localizationService.DeletePluginLocaleResources("Enums.Nop.Plugin.Shipping.NopCliGeneric"); _localizationService.DeletePluginLocaleResources("Plugins.Shipping.NopCliGeneric"); base.Uninstall(); } #endregion #region Properties /// /// Gets a shipping rate computation method type /// public ShippingRateComputationMethodType ShippingRateComputationMethodType => ShippingRateComputationMethodType.Realtime; /// /// Gets a shipment tracker /// public IShipmentTracker ShipmentTracker => null; #endregion } }