/// <summary> /// Funizione ereditata dall'interfaccia che viene richiamata nella parte base dell'algoritmo per eseguire l'ottimizzazione. /// </summary> /// <param name="siglaEntita">Entità da ottimizzare.</param> public virtual void EseguiOttimizzazione(object siglaEntita) { try { Workbook.Application.Run("wbSetGeneralOptions", Arg3: "120", Arg13: "1"); _sheet = DefinedNames.GetSheetName(siglaEntita); _definedNames = new DefinedNames(_sheet, DefinedNames.InitType.CheckNaming); string desEntita = (from r in Workbook.Repository[DataBase.TAB.CATEGORIA_ENTITA].AsEnumerable() where r["IdApplicazione"].Equals(Workbook.IdApplicazione) && r["SiglaEntita"].Equals(siglaEntita) select r["DesEntita"].ToString()).First(); _entitaProprieta.RowFilter = "SiglaEntita = '" + siglaEntita + "' AND SiglaProprieta LIKE '%GIORNI_STRUTTURA' AND IdApplicazione = " + Workbook.IdApplicazione; if (_entitaProprieta.Count > 0) { _dataFine = Workbook.DataAttiva.AddDays(int.Parse(_entitaProprieta[0]["Valore"].ToString())); } else { _dataFine = Workbook.DataAttiva.AddDays(Struct.intervalloGiorni); } CheckObj chkObj = _definedNames.Checks.Where(chk => chk.SiglaEntita.Equals(siglaEntita)).FirstOrDefault(); if (chkObj != null) { Excel.Range rng = Workbook.Sheets[_sheet].Range[chkObj.Range.ToString()]; foreach (Excel.Range cell in rng.Cells) { if (cell.Value.Equals("ERRORE")) { SplashScreen.Close(); System.Windows.Forms.MessageBox.Show("Non è possibile ottimizzare l'UP selezionata perché sono presenti degli errori. Controllare i check!", Simboli.NomeApplicazione + " - ATTENZIONE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return; } } } OmitConstraints(); AddAdjust(siglaEntita); AddConstraints(siglaEntita); AddOpt(siglaEntita); SplashScreen.Close(); Execute(siglaEntita); DeleteExistingAdjust(); Workbook.InsertLog(PSO.Core.DataBase.TipologiaLOG.LogGenera, "Eseguita ottimizzazione " + desEntita); } catch (Exception e) { SplashScreen.Close(); Workbook.Application.ScreenUpdating = true; System.Windows.Forms.MessageBox.Show("Si è verificato un errore nel processo di ottimizzazione. Il messaggio dice '" + e.Message + "'", Simboli.NomeApplicazione + " - ERRORE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } }
/// <summary> /// Launcher dell'aggiornamento dati. /// </summary> /// <returns>True se l'aggiornamento è andato a buon fine.</returns> public override bool Dati(bool marketUpdate = true) { if (DataBase.OpenConnection()) { if (marketUpdate) SetMercatoAttivo(); SplashScreen.Show(); bool wasProtected = Sheet.Protected; if (wasProtected) Sheet.Protected = false; Workbook.ScreenUpdating = false; try { CaricaDatiDalDB(); Workbook.Application.Calculation = Excel.XlCalculation.xlCalculationManual; SplashScreen.UpdateStatus("Aggiorno dati Riepilogo"); DatiRiepilogo(); SplashScreen.UpdateStatus("Aggiorno dati Fogli"); DatiFogli(); SplashScreen.UpdateStatus("Abilito calcolo automatico"); Workbook.Application.Calculation = Excel.XlCalculation.xlCalculationAutomatic; SplashScreen.UpdateStatus("Invio modifiche al server"); Workbook.ScreenUpdating = false; Sheet.SalvaModifiche(); DataBase.SalvaModificheDB(); if (wasProtected) Sheet.Protected = true; Workbook.ScreenUpdating = true; SplashScreen.Close(); CancellaTabelle(); } catch { Workbook.ScreenUpdating = true; SplashScreen.Close(); CancellaTabelle(); return false; } return true; } else { System.Windows.Forms.MessageBox.Show("Impossibile aggiornare i dati: ci sono problemi di connessione o la funzione Forza Emergenza è attiva.", Simboli.NomeApplicazione + " - ERRORE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return false; } }
/// <summary> /// Launcher dell'aggiornamento in emergenza. /// </summary> public override void Emergenza() { SplashScreen.Show(); bool wasProtected = Sheet.Protected; if (wasProtected) Sheet.Protected = false; Workbook.ScreenUpdating = false; SplashScreen.UpdateStatus("Riepilogo in emergenza"); EmergenzaRiepilogo(); SplashScreen.UpdateStatus("Aggiorno le date"); EmergenzaFogli(); if (wasProtected) Sheet.Protected = true; Workbook.ScreenUpdating = true; SplashScreen.Close(); }
/// <summary> /// Funzione per il controllo delle aree di rete utilizzate dall'applicativo: segnala all'utente l'impossibilità di raggiungerle. /// </summary> public static void ControlloAreeDiRete() { //controllo le aree di rete (se presenti) var usrConfig = GetUsrConfiguration(); Dictionary <string, string> pathNonDisponibili = new Dictionary <string, string>(); foreach (UserConfigElement ele in usrConfig.Items) { if (ele.Type == UserConfigElement.ElementType.path) { string pathStr = Esporta.PreparePath(ele); try { System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(pathStr); } catch { pathNonDisponibili.Add(ele.Desc, pathStr); } } } if (Workbook.Repository.Applicazione != null) { //controllo il percorso di backup che ora è remoto try { System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(Workbook.Repository.Applicazione["PathBackup"].ToString()); } catch { pathNonDisponibili.Add("Percorso di backup", Workbook.Repository.Applicazione["PathBackup"].ToString()); } } //segnalo all'utente l'impossibilità di accedere alle aree di rete if (pathNonDisponibili.Count > 0) { string paths = "\n"; foreach (var kv in pathNonDisponibili) { paths += " - " + kv.Key + " : '" + kv.Value + "'\n"; } SplashScreen.Close(); System.Windows.Forms.MessageBox.Show("I path seguenti non sono raggiungibili o non presentano privilegi di scrittura:" + paths, Simboli.NomeApplicazione + " - ATTENZIONE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); } }
/// <summary> /// Launcher dell'aggiornamento della struttura. /// </summary> /// <returns>True se l'aggiornamento è andato a buon fine.</returns> public override bool Struttura(bool avoidRepositoryUpdate) { if (DataBase.OpenConnection() || avoidRepositoryUpdate) { SetMercatoAttivo(); //aggiorno i parametri di base dell'applicazione Workbook.AggiornaParametriApplicazione(avoidRepositoryUpdate); SplashScreen.Show(); bool wasProtected = Sheet.Protected; if (wasProtected) Sheet.Protected = false; Workbook.ScreenUpdating = false; if (!avoidRepositoryUpdate) { SplashScreen.UpdateStatus("Carico struttura dal DB"); Workbook.Repository.Aggiorna(); } else { //resetto la struttura nomi che verrà ricreata nelle prossime righe Workbook.Repository.InitStrutturaNomi(); } SplashScreen.UpdateStatus("Controllo se tutti i fogli sono presenti"); DataView categorie = Workbook.Repository[DataBase.TAB.CATEGORIA].DefaultView; categorie.RowFilter = "Operativa = 1 AND IdApplicazione = " + Workbook.IdApplicazione; //cancello i fogli che non ci sono più come categorie if (Workbook.CategorySheets != null) { foreach (Excel.Worksheet categorySheet in Workbook.CategorySheets) { if ((from DataRowView r in categorie where r["DesCategoria"].Equals(categorySheet.Name) select r).Count() == 0) { bool isactive = Workbook.Application.DisplayAlerts; try { if(isactive) Workbook.Application.DisplayAlerts = false; Workbook.Sheets[categorySheet.Name].Delete(); if(isactive) Workbook.Application.DisplayAlerts = true; } catch { if (isactive) Workbook.Application.DisplayAlerts = true; } } } } //creo fogli che si sono aggiunti alle categorie foreach (DataRowView categoria in categorie) { Excel._Worksheet ws; try { ws = Workbook.Sheets[categoria["DesCategoria"].ToString()]; ws.Activate(); if(_freezePanes.ContainsKey(ws.Name)) _freezePanes[ws.Name] = Tuple.Create<int,int>(Workbook.Application.ActiveWindow.SplitRow + 1, Workbook.Application.ActiveWindow.SplitColumn + 1); else _freezePanes.Add(ws.Name, Tuple.Create<int,int>(Workbook.Application.ActiveWindow.SplitRow + 1, Workbook.Application.ActiveWindow.SplitColumn + 1)); } catch { ws = (Excel.Worksheet)Workbook.Sheets.Add(Workbook.Log); ws.Name = categoria["DesCategoria"].ToString(); ws.Select(); Workbook.Application.Windows[1].DisplayGridlines = false; #if !DEBUG Workbook.Application.ActiveWindow.DisplayHeadings = false; #endif } } Workbook.ScreenUpdating = false; try { if(DataBase.OpenConnection()) CaricaDatiDalDB(); Workbook.Application.Calculation = Excel.XlCalculation.xlCalculationManual; SplashScreen.UpdateStatus("Aggiorno struttura Riepilogo"); StrutturaRiepilogo(); SplashScreen.UpdateStatus("Aggiorno struttura Fogli"); StrutturaFogli(); SplashScreen.UpdateStatus("Abilito calcolo automatico"); Workbook.Application.Calculation = Excel.XlCalculation.xlCalculationAutomatic; SplashScreen.UpdateStatus("Invio modifiche al server"); Workbook.ScreenUpdating = false; Sheet.SalvaModifiche(); DataBase.SalvaModificheDB(); SplashScreen.UpdateStatus("Azzero selezioni"); foreach (Excel._Worksheet ws in Workbook.Sheets) { if (ws.Visible == Excel.XlSheetVisibility.xlSheetVisible) { ws.Activate(); ws.Range["A1"].Select(); } } Workbook.Main.Select(); Workbook.Application.WindowState = Excel.XlWindowState.xlMaximized; if (wasProtected) Sheet.Protected = true; SplashScreen.Close(); CancellaTabelle(); return true; } catch { SplashScreen.Close(); CancellaTabelle(); return false; } } else { System.Windows.Forms.MessageBox.Show("Impossibile aggiornare la struttura: ci sono problemi di connessione o la funzione Forza Emergenza è attiva.", Simboli.NomeApplicazione + " - ERRORE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return false; } }