using FluentMigrator; using Nop.Core.Domain.ScheduleTasks; using Nop.Data; using Nop.Data.Mapping; using Nop.Data.Migrations; using Nop.Services.Configuration; using Nop.Services.Localization; using Nop.Services.ScheduleTasks; using Nop.Web.Framework.Extensions; namespace Nop.Plugin.Tax.Avalara.Data; [NopMigration("2021-12-06 00:00:00", "Tax.Avalara 2.60. New schedule task", MigrationProcessType.Update)] public class ScheduleTaskMigration : MigrationBase { #region Fields protected readonly AvalaraTaxSettings _avalaraTaxSettings; protected readonly ILanguageService _languageService; protected readonly ILocalizationService _localizationService; protected readonly IScheduleTaskService _scheduleTaskService; protected readonly ISettingService _settingService; #endregion #region Ctor public ScheduleTaskMigration(AvalaraTaxSettings avalaraTaxSettings, ILanguageService languageService, ILocalizationService localizationService, IScheduleTaskService scheduleTaskService, ISettingService settingService) { _avalaraTaxSettings = avalaraTaxSettings; _languageService = languageService; _localizationService = localizationService; _scheduleTaskService = scheduleTaskService; _settingService = settingService; } #endregion #region Methods /// /// Collect the UP migration expressions /// public override void Up() { if (!DataSettingsManager.IsDatabaseInstalled()) return; //locales var (languageId, languages) = this.GetLanguageData(); _localizationService.AddOrUpdateLocaleResource(new Dictionary { ["Plugins.Tax.Avalara.Fields.UseTaxRateTables"] = "Use tax rate tables to estimate ", ["Plugins.Tax.Avalara.Fields.UseTaxRateTables.Hint"] = "Determine whether to use tax rate tables to estimate. This will be used as a default tax calculation for catalog pages and will be adjusted and reconciled to the final transaction tax during checkout. Tax rates are looked up by zip code (US only) in a file that will be periodically updated from the Avalara (see Schedule tasks).", }, languageId); //settings if (!_settingService.SettingExists(_avalaraTaxSettings, settings => settings.UseTaxRateTables)) _avalaraTaxSettings.UseTaxRateTables = true; _settingService.SaveSetting(_avalaraTaxSettings); //in version 4.50 we added the LastEnabledUtc field to the ScheduleTask entity, //we need to make sure that these changes are applied before inserting new task into the database var scheduleTaskTableName = NameCompatibilityManager.GetTableName(typeof(ScheduleTask)); //add column if not exists if (!Schema.Table(scheduleTaskTableName).Column(nameof(ScheduleTask.LastEnabledUtc)).Exists()) Alter.Table(scheduleTaskTableName) .AddColumn(nameof(ScheduleTask.LastEnabledUtc)).AsDateTime2().Nullable(); //schedule task Insert.IntoTable(scheduleTaskTableName).Row(new { Enabled = true, LastEnabledUtc = DateTime.UtcNow, Seconds = AvalaraTaxDefaults.DownloadTaxRatesTask.Days * 24 * 60 * 60, StopOnError = false, Name = AvalaraTaxDefaults.DownloadTaxRatesTask.Name, Type = AvalaraTaxDefaults.DownloadTaxRatesTask.Type }); } /// /// Collects the DOWN migration expressions /// public override void Down() { //nothing } #endregion }