Ejemplo n.º 1
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;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Salva le modifiche effettuate ai fogli sul DataBase. Il processo consiste nella creazione di un file XML contenente tutte le righe della tabella di Modifica e successivo svuotamento della tabella stessa. Il processo richiede una connessione aperta. Diversamente le modifiche vengono salvate nella cartella di Emergenza dove, al momento della successiva chiamata al metodo, vengono reinviati al server in ordine cronologico.
        /// </summary>
        public static void SalvaModificheDB(string nomeTabella = TAB.MODIFICA)
        {
            if (Workbook.Repository != null)
            {
                //prendo la tabella di modifica e controllo se è nulla
                DataTable modifiche = Workbook.Repository[nomeTabella];
                if (modifiche != null && Workbook.IdUtente != 0)   //non invia se l'utente non è configurato... in ogni caso la tabella è vuota!!
                {
                    //tolgo il namespace che altrimenti aggiunge informazioni inutili al file da mandare al server
                    DataTable dt = modifiche.Copy();
                    dt.TableName = TAB.MODIFICA;
                    dt.Namespace = "";

                    //path del caricatore sul server
                    string cartellaRemota = Workbook.Repository.Applicazione["PathExportModifiche"].ToString();
                    //path della cartella di emergenza
                    string cartellaEmergenza = Workbook.Repository.Applicazione["PathExportModificheEmergenza"].ToString();
                    //path della cartella di archivio in cui copiare i file in caso di esito positivo nel saltavaggio
                    string cartellaArchivio = Workbook.Repository.Applicazione["PathExportModificheArchivio"].ToString();

                    string fileName = "";
                    //se la connessione è aperta (in emergenza forzata sarà sempre false) ed esiste la cartella del caricatore
                    if (OpenConnection() && Directory.Exists(cartellaRemota))
                    {
                        //metto in lavorazione i file nella cartella di emergenza
                        string[] fileEmergenza = Directory.GetFiles(cartellaEmergenza);
                        bool     executed      = false;
                        if (fileEmergenza.Length > 0)
                        {
                            if (System.Windows.Forms.MessageBox.Show("Sono presenti delle modifiche non ancora salvate sul DB. Procedere con il salvataggio? \n\nPremere Sì per inviare i dati al server, No per cancellare definitivamente le modifiche.", Simboli.NomeApplicazione + " - ATTENZIONE!!!", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
                            {
                                //il nome file contiene la data, quindi li metto in ordine cronologico
                                Array.Sort <string>(fileEmergenza);
                                foreach (string file in fileEmergenza)
                                {
                                    File.Copy(file, Path.Combine(cartellaRemota, file.Split('\\').Last()), true);

                                    executed = DataBase.Insert(SP.INSERT_APPLICAZIONE_INFORMAZIONE_XML, new Core.QryParams()
                                    {
                                        { "@NomeFile", file.Split('\\').Last() }
                                    });
                                    if (executed)
                                    {
                                        if (!Directory.Exists(cartellaArchivio))
                                        {
                                            Directory.CreateDirectory(cartellaArchivio);
                                        }

                                        File.Move(Path.Combine(cartellaRemota, file.Split('\\').Last()), Path.Combine(cartellaArchivio, file.Split('\\').Last()));
                                        File.Delete(file);
                                    }
                                    else
                                    {
                                        System.Windows.Forms.MessageBox.Show("Il server ha restituito un errore nel salvataggio. Le modifiche rimarranno comunque salvate in locale.", Simboli.NomeApplicazione + " - ERRORE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                                    }
                                }
                            }
                            else
                            {
                                foreach (string file in fileEmergenza)
                                {
                                    File.Delete(file);
                                }
                            }
                        }

                        //controllo se la tabella è vuota
                        if (dt.Rows.Count == 0)
                        {
                            return;
                        }

                        //salvo le modifiche appena effettuate
                        fileName = Path.Combine(cartellaRemota, Simboli.NomeApplicazione.Replace(" ", "").ToUpperInvariant() + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + (Workbook.Ambiente != Simboli.PROD ? "_" + Workbook.Ambiente : "") + ".xml");
                        dt.WriteXml(fileName);//, XmlWriteMode.WriteSchema);

                        //se la query indica che il processo è andato a buon fine, sposto in archivio
                        executed = DataBase.Insert(SP.INSERT_APPLICAZIONE_INFORMAZIONE_XML, new Core.QryParams()
                        {
                            { "@NomeFile", fileName.Split('\\').Last() }
                        });
                        if (executed)
                        {
                            if (!Directory.Exists(cartellaArchivio))
                            {
                                Directory.CreateDirectory(cartellaArchivio);
                            }

                            File.Move(fileName, Path.Combine(cartellaArchivio, fileName.Split('\\').Last()));
                        }
                        else
                        {
                            if (!Directory.Exists(cartellaEmergenza))
                            {
                                Directory.CreateDirectory(cartellaEmergenza);
                            }

                            fileName = Path.Combine(cartellaEmergenza, Simboli.NomeApplicazione.Replace(" ", "").ToUpperInvariant() + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + (Workbook.Ambiente != Simboli.PROD ? "_" + Workbook.Ambiente : "") + ".xml");
                            dt.WriteXml(fileName);//, XmlWriteMode.WriteSchema);

                            Workbook.InsertLog(Core.DataBase.TipologiaLOG.LogErrore, "Errore nel salvataggio delle modifiche. '" + fileName + "' si trova in " + Environment.MachineName);

                            System.Windows.Forms.MessageBox.Show("Il server ha restituito un errore nel salvataggio. Le modifiche rimarranno comunque salvate in locale.", Simboli.NomeApplicazione + " - ERRORE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                        }
                    }
                    else
                    {
                        if (dt.Rows.Count == 0)
                        {
                            return;
                        }

                        if (!Directory.Exists(cartellaEmergenza))
                        {
                            Directory.CreateDirectory(cartellaEmergenza);
                        }

                        //metto le modifiche nella cartella emergenza
                        fileName = Path.Combine(cartellaEmergenza, Simboli.NomeApplicazione.Replace(" ", "").ToUpperInvariant() + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xml");

                        dt.WriteXml(fileName, XmlWriteMode.WriteSchema);

                        System.Windows.Forms.MessageBox.Show("A causa di problemi di rete le modifiche sono state salvate in locale", Simboli.NomeApplicazione + " - ATTENZIONE!!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
                    }

                    //svuoto la tabella di modifiche
                    modifiche.Clear();
                }
            }
        }