示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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;
            }
        }
示例#3
0
        /// <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();
        }
示例#4
0
文件: Workbook.cs 项目: fberga/Iren
        /// <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);
            }
        }
示例#5
0
        /// <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;
            }
        }