/// <summary> /// Initializes a new instance of the MainViewModel class. /// </summary> public MainViewModel(IDataService dataService) { try { _dataService = dataService; LoadCommand = new RelayCommand(Load); SaveCommand = new RelayCommand(Save); SelectionChangedCommand = new RelayCommand <IList>(SelectionChanged); var dbList = new DatabaseList(); if (IsInDesignMode) { _sourceDb = dbList.First(d => d.name == "TARIF"); _targetDb = dbList.First(d => d.name == "SMODEV"); } else { string[] args = Environment.GetCommandLineArgs(); if (args.Length < 2) { throw new Exception("Nombre d'argument insuffisant"); } _sourceDb = dbList.First(d => d.name == args[1]); _targetDb = dbList.First(d => d.name == args[2]); } _dataService.SetDatabases(_targetDb, _sourceDb); ObjectNameList = _dataService.GetSyncablesObjects(); _dataService.Log += Log; CurrentObjectName = "ARTICLE"; Title = $"Synchronisation de {_sourceDb.name} vers {_targetDb.name}"; } catch (Exception ex) { Messenger.Default.Send(ex.Message, "LambdaMessage"); } }
static void Main(string[] args) { EventLog.WriteEntry("Application", "START SYNC SAGE DB"); Debug.Print("GetCommandLineArgs: {0}", string.Join(", ", args)); try { // Check le rep de log if (!Directory.Exists(logDir)) { Directory.CreateDirectory(logDir); } // Purge les fichiers de log > 1 semaine new DirectoryInfo(logDir).GetFiles("*.log", SearchOption.TopDirectoryOnly) .Where(f => f.LastWriteTime < DateTime.Now.AddDays(-7)) .ToList().ForEach(f => { f.Delete(); }); var dbList = new DatabaseList(); // Base source (toujours le premier argument) Database sourceDb = dbList.First(d => d.name == args[0]); /** * DeployScript sur la première base * uniquement si un seul argument * cela permet d'isoler le deploiement des scripts sql * sur TARIF et permet de sync TARIF sur les bases de dev */ if (args.Length == 1) { Log("[DISCONNECT USERS]", sourceDb); var decoRepos = new DecoRepository(sourceDb); decoRepos.Log += Log; decoRepos.DeleteUserSessions(); Log("[DEPLOY SCRIPTS]", sourceDb); var dsr = new DeployScriptsRepository(sourceDb); dsr.Log += Log; dsr.Process(); return; } // Maj toutes les bases sauf la première foreach (var arg in args) { var targetDb = dbList.First(d => d.name == arg); if (targetDb.name == args.First()) { continue; } Log("[START SYNC]", targetDb); // Déconnecte tout le monde Log("[DISCONNECT USERS]", targetDb); var decoRepos = new DecoRepository(targetDb); decoRepos.Log += Log; if (!decoRepos.DeleteUserSessions()) { continue; } Log("[DEPLOY SCRIPTS]", targetDb); var dsr = new DeployScriptsRepository(targetDb); dsr.Log += Log; dsr.Process(); Log("[MAJ COMPTA]", targetDb); var cptr = new ComptaRepository(targetDb, sourceDb); cptr.Log += Log; cptr.MajAll(); Log("[MAJ FOURN]", targetDb); var fr = new Model.FournisseurRepository(targetDb, sourceDb); fr.Log += Log; fr.MajAll(); Log("[MAJ CATALOGUE]", targetDb); var catr = new CatalogueRepository(targetDb, sourceDb); catr.Log += Log; catr.MajAll(); Log("[MAJ FAMILLE]", targetDb); var famr = new FamilleRepository(targetDb, sourceDb); famr.Log += Log; famr.MajAll(); // TODO résoudre les problèmes d'index entre les bases avant MEP //Log("[MAJ MODELES REGLEMENT]", targetDb); //var mrr = new ModRegRepository(targetDb, sourceDb); //mrr.Log += Log; //mrr.MajAll(); Log("[MAJ GLOSSAIRE]", targetDb); var gr = new GlossaireRepository(targetDb, sourceDb); gr.Log += Log; gr.MajAll(); var ar = new ArticleRepository(targetDb, sourceDb); ar.Log += Log; Log("[MAJ CONDITIONNEMENTS]", targetDb); ar.MajConditionnements(); Log("[MAJ GAMMES]", targetDb); ar.MajGammes(); Log("[MAJ ARTICLES]", targetDb); ar.MajAll(); Log("[DELETE FAMILLES]", targetDb); famr.DeleteFamilles(); Log("DELETE CATALOGUE", targetDb); catr.DeleteCatalogue(); Log("[END SYNC]", targetDb); } } catch (Exception e) { Console.WriteLine(e.ToString()); EventLog.WriteEntry("Application", e.ToString()); } finally { EventLog.WriteEntry("Application", "END SYNC SAGE DB"); } Console.WriteLine("FIN"); Console.Read(); }