using Microsoft.AspNetCore.Mvc; using Nop.Core; using Nop.Plugin.Payments.CheckMoneyOrder.Models; using Nop.Services.Configuration; using Nop.Services.Localization; using Nop.Services.Messages; using Nop.Services.Security; using Nop.Web.Framework; using Nop.Web.Framework.Controllers; using Nop.Web.Framework.Mvc.Filters; namespace Nop.Plugin.Payments.CheckMoneyOrder.Controllers; [AuthorizeAdmin] [Area(AreaNames.ADMIN)] [AutoValidateAntiforgeryToken] public class PaymentCheckMoneyOrderController : BasePaymentController { #region Fields protected readonly ILanguageService _languageService; protected readonly ILocalizationService _localizationService; protected readonly INotificationService _notificationService; protected readonly IPermissionService _permissionService; protected readonly ISettingService _settingService; protected readonly IStoreContext _storeContext; #endregion #region Ctor public PaymentCheckMoneyOrderController(ILanguageService languageService, ILocalizationService localizationService, INotificationService notificationService, IPermissionService permissionService, ISettingService settingService, IStoreContext storeContext) { _languageService = languageService; _localizationService = localizationService; _notificationService = notificationService; _permissionService = permissionService; _settingService = settingService; _storeContext = storeContext; } #endregion #region Methods [CheckPermission(StandardPermission.Configuration.MANAGE_PAYMENT_METHODS)] public async Task Configure() { //load settings for a chosen store scope var storeScope = await _storeContext.GetActiveStoreScopeConfigurationAsync(); var checkMoneyOrderPaymentSettings = await _settingService.LoadSettingAsync(storeScope); var model = new ConfigurationModel { DescriptionText = checkMoneyOrderPaymentSettings.DescriptionText }; //locales await AddLocalesAsync(_languageService, model.Locales, async (locale, languageId) => { locale.DescriptionText = await _localizationService .GetLocalizedSettingAsync(checkMoneyOrderPaymentSettings, x => x.DescriptionText, languageId, 0, false, false); }); model.AdditionalFee = checkMoneyOrderPaymentSettings.AdditionalFee; model.AdditionalFeePercentage = checkMoneyOrderPaymentSettings.AdditionalFeePercentage; model.ShippableProductRequired = checkMoneyOrderPaymentSettings.ShippableProductRequired; model.ActiveStoreScopeConfiguration = storeScope; if (storeScope > 0) { model.DescriptionText_OverrideForStore = await _settingService.SettingExistsAsync(checkMoneyOrderPaymentSettings, x => x.DescriptionText, storeScope); model.AdditionalFee_OverrideForStore = await _settingService.SettingExistsAsync(checkMoneyOrderPaymentSettings, x => x.AdditionalFee, storeScope); model.AdditionalFeePercentage_OverrideForStore = await _settingService.SettingExistsAsync(checkMoneyOrderPaymentSettings, x => x.AdditionalFeePercentage, storeScope); model.ShippableProductRequired_OverrideForStore = await _settingService.SettingExistsAsync(checkMoneyOrderPaymentSettings, x => x.ShippableProductRequired, storeScope); } return View("~/Plugins/Payments.CheckMoneyOrder/Views/Configure.cshtml", model); } [HttpPost] [CheckPermission(StandardPermission.Configuration.MANAGE_PAYMENT_METHODS)] public async Task Configure(ConfigurationModel model) { if (!ModelState.IsValid) return await Configure(); //load settings for a chosen store scope var storeScope = await _storeContext.GetActiveStoreScopeConfigurationAsync(); var checkMoneyOrderPaymentSettings = await _settingService.LoadSettingAsync(storeScope); //save settings checkMoneyOrderPaymentSettings.DescriptionText = model.DescriptionText; checkMoneyOrderPaymentSettings.AdditionalFee = model.AdditionalFee; checkMoneyOrderPaymentSettings.AdditionalFeePercentage = model.AdditionalFeePercentage; checkMoneyOrderPaymentSettings.ShippableProductRequired = model.ShippableProductRequired; /* We do not clear cache after each setting update. * This behavior can increase performance because cached settings will not be cleared * and loaded from database after each update */ await _settingService.SaveSettingOverridablePerStoreAsync(checkMoneyOrderPaymentSettings, x => x.DescriptionText, model.DescriptionText_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(checkMoneyOrderPaymentSettings, x => x.AdditionalFee, model.AdditionalFee_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(checkMoneyOrderPaymentSettings, x => x.AdditionalFeePercentage, model.AdditionalFeePercentage_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(checkMoneyOrderPaymentSettings, x => x.ShippableProductRequired, model.ShippableProductRequired_OverrideForStore, storeScope, false); //now clear settings cache await _settingService.ClearCacheAsync(); //localization. no multi-store support for localization yet. foreach (var localized in model.Locales) { await _localizationService.SaveLocalizedSettingAsync(checkMoneyOrderPaymentSettings, x => x.DescriptionText, localized.LanguageId, localized.DescriptionText); } _notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.Plugins.Saved")); return await Configure(); } #endregion }