using Autofac; using GreenTree.Nachtragsmanagement.Core; using GreenTree.Nachtragsmanagement.Core.Domain.Config; using GreenTree.Nachtragsmanagement.Core.Domain.Misc; using GreenTree.Nachtragsmanagement.Data; using GreenTree.Nachtragsmanagement.Services.Configuration; using GreenTree.Nachtragsmanagement.Services.Logging; using GreenTree.Nachtragsmanagement.Services.User; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace GreenTree.Nachtragsmanagement.Web.Update { public class UpdateProcess { /// /// Run all actions required for the current version /// public void RunUpdateProcess() { RunUpdateActionsForVersion(AppendixVersion.CurrentVersion); } /// /// Run all actions required for a specific update version /// /// Update version. public void RunUpdateProcess(string version) { RunUpdateActionsForVersion(version); } /// /// Run all actions for a specific update version /// /// Update version. private void RunUpdateActionsForVersion(string version) { if (String.IsNullOrEmpty(version)) return; if (CheckExistingDbContextSpecForVersion(version)) return; switch (version) { case "1.0.0.1": var configurationService = Singleton.Instance.Resolve(); if (configurationService == null) return; var existingConfigItem = configurationService.GetConfigItemByName( "GreenTree.Nachtragsmanagement.DeviationGrid.ClosedDeviationStatuses"); if (existingConfigItem == null) { var newConfigItem = new ConfigItem { Name = "GreenTree.Nachtragsmanagement.DeviationGrid.ClosedDeviationStatuses", Description = "Alle Vertragsabweichungsstati, die als \"Geschlossen\" gelten", TypeFullName = "ConfigurationReference.StatusConfigurationReference", Value = "2, 4" }; configurationService.InsertConfigItem(newConfigItem); } else { existingConfigItem.Name = "GreenTree.Nachtragsmanagement.DeviationGrid.ClosedDeviationStatuses"; existingConfigItem.Description = "Alle Vertragsabweichungsstati, die als \"Geschlossen\" gelten"; existingConfigItem.TypeFullName = "ConfigurationReference.StatusConfigurationReference"; existingConfigItem.Value = "2, 4"; configurationService.UpdateConfigItem(existingConfigItem); } break; default: return; } CreateDbContextSpecForVersion(version); } /// /// Checks the specified update version for an existing DbContextSpec entity to check wether the actions has already been done /// /// Update version. /// True when action already done otherwise False. private bool CheckExistingDbContextSpecForVersion(string version) { if (String.IsNullOrEmpty(version)) return true; var dbContext = Singleton.Instance.Resolve(); if (dbContext == null) return true; var versionSpecName = String.Format("UpdateRun-{0}", version); var versionSpec = dbContext.Get() .FirstOrDefault(d => d.Name == versionSpecName); if (versionSpec != null) return true; return false; } /// /// Sets a new DbContextSpec entity to determine wether the actions has already been done /// /// Update version. private void CreateDbContextSpecForVersion(string version) { if (String.IsNullOrEmpty(version)) return; if (CheckExistingDbContextSpecForVersion(version)) return; var dbContext = Singleton.Instance.Resolve(); if (dbContext == null) return; var versionSpec = new DbContextSpec { Name = String.Format("UpdateRun-{0}", version), Value = "True" }; dbContext.Get().Add(versionSpec); dbContext.SaveChanges(); } } }