Beispiel #1
0
        /// <summary>
        /// Launcher per l'azione di esportazione, contiene il metodo standard di handling per eventuali errori.
        /// </summary>
        /// <param name="siglaEntita">Sigla dell'entità dell'export.</param>
        /// <param name="siglaAzione">Sigla dell'azione dell'export</param>
        /// <param name="desEntita">Descrizione dell'entità.</param>
        /// <param name="desAzione">Descrizione dell'azione.</param>
        /// <param name="dataRif">La data di riferimento per cui esportare i dati.</param>
        /// <returns>True se l'azione di esportazione è andata a buon fine, false altrimenti.</returns>
        public virtual bool RunExport(object siglaEntita, object siglaAzione, object desEntita, object desAzione, DateTime dataRif, string[] mercati)
        {
            try
            {
                if (EsportaAzioneInformazione(siglaEntita, siglaAzione, desEntita, desAzione, dataRif, mercati))
                {
                    if (DataBase.OpenConnection())
                    {
                        DataBase.InsertApplicazioneRiepilogo(siglaEntita, siglaAzione, dataRif);
                    }

                    DataBase.CloseConnection();

                    return(true);
                }

                return(false);
            }
            catch (Exception e)
            {
                if (DataBase.OpenConnection())
                {
                    Workbook.InsertLog(PSO.Core.DataBase.TipologiaLOG.LogErrore, "RunExport [" + siglaEntita + ", " + siglaAzione + "]: " + e.Message);
                }

                DataBase.CloseConnection();

                System.Windows.Forms.MessageBox.Show(e.Message, Simboli.NomeApplicazione + " - ERRORE!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return(false);
            }
        }
Beispiel #2
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);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Carico i dati e i commenti che devono essere scritti nelle celle.
        /// </summary>
        protected void CaricaDatiRiepilogo()
        {
            try
            {
                CicloGiorni((oreGiorno, suffissoData, giorno) =>
                {
                    if (DataBase.OpenConnection())
                    {
                        DataView datiRiepilogo = GetDataView_CaricaDatiRiepilogo(giorno);

                        foreach (DataRowView valore in datiRiepilogo)
                        {
                            Range cellaAzione = new Range(_definedNames.GetRowByName(valore["SiglaEntita"]), _definedNames.GetColFromName(valore["SiglaAzione"], suffissoData));

                            Excel.Range rng = _ws.Range[cellaAzione.ToString()];

                            if (valore["Presente"].Equals("1"))
                            {
                                rng.ClearComments();
                                DateTime data = DateTime.ParseExact(valore["Data"].ToString(), "yyyyMMddHHmm", CultureInfo.InvariantCulture);
                                rng.AddComment("Utente: " + valore["Utente"] + "\nData: " + data.ToString("dd MMM yyyy") + "\nOra: " + data.ToString("HH:mm"));
                                rng.Value = "OK";
                                Style.RangeStyle(rng, foreColor: 1, bold: true, fontSize: 9, backColor: 4, align: Excel.XlHAlign.xlHAlignCenter);
                            }
                            else
                            {
                                rng.ClearComments();
                                rng.Value = "Non presente";
                                Style.RangeStyle(rng, foreColor: 3, bold: false, fontSize: 7, backColor: 2, align: Excel.XlHAlign.xlHAlignCenter);
                            }
                        }
                    }
                });
            }
            catch (Exception e)
            {
                Workbook.InsertLog(PSO.Core.DataBase.TipologiaLOG.LogErrore, "CaricaDatiRiepilogo: " + e.Message);

                System.Windows.Forms.MessageBox.Show(e.Message, Simboli.NomeApplicazione + " - ERRORE!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Aggiunge la riga di riepilogo al DB in modo da far evidenziare la casella nel foglio Main del Workbook.
        /// </summary>
        /// <param name="siglaEntita">La sigla dell'entità di cui aggiungere il riepilogo.</param>
        /// <param name="siglaAzione">La sigla dell'azione di cui aggiungere il riepilogo.</param>
        /// <param name="giorno">Il giorno in cui aggiungere il riepilogo.</param>
        /// <param name="presente">Se il dato collegato alla coppia Entità - Azione è presente o no nel DB.</param>
        public static void InsertApplicazioneRiepilogo(object siglaEntita, object siglaAzione, DateTime giorno, bool presente = true, String parametro = null)
        {
            bool visible = Workbook.Repository[DataBase.TAB.AZIONE]
                           .AsEnumerable()
                           .Where(r => r["SiglaAzione"].Equals(siglaAzione))
                           .Select(r => r["Visibile"].Equals("1"))
                           .FirstOrDefault();

            if (visible)
            {
                try
                {
                    if (OpenConnection())
                    {
                        Core.QryParams parameters = new Core.QryParams()
                        {
                            { "@SiglaEntita", siglaEntita },
                            { "@SiglaAzione", siglaAzione },
                            { "@Data", giorno.ToString("yyyyMMdd") },
                            { "@Presente", presente ? "1" : "0" }
                        };

                        /* 13/3/2017 Così riesco per MI a differenziare il riepilogo per mercato valorizzando 'parametro'  */
                        if (parametro != null)
                        {
                            parametro = parametro.Substring(parametro.Length - 1, 1);
                            parameters.Add("@Parametro", parametro);
                        }

                        _db.Insert(DataBase.SP.INSERT_APPLICAZIONE_RIEPILOGO, parameters);
                    }
                }
                catch (Exception e)
                {
                    Workbook.InsertLog(Core.DataBase.TipologiaLOG.LogErrore, "InsertApplicazioneRiepilogo [" + giorno + ", " + siglaEntita + ", " + siglaAzione + "]: " + e.Message);

                    System.Windows.Forms.MessageBox.Show(e.Message, Simboli.NomeApplicazione + " - ERRORE!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Launcher dell'azione di caricamento/generazione dei dati.
        /// </summary>
        /// <param name="siglaEntita">Sigla dell'entità di cui caricare/generare i dati.</param>
        /// <param name="siglaAzione">Sigla dell'azione per cui è richiesto il caricamento dei dati.</param>
        /// <param name="azionePadre">Sigla dell'azione padre (di solito CARICAx o GENERA).</param>
        /// <param name="giorno">Data di riferimento.</param>
        /// <param name="mercati">Mercati da considerare nell'azione.</param>
        /// <param name="parametro">Parametro da specificare alla storedProcedure CARICA_AZIONE_INFORMAZIONE nel caso sia necessario.</param>
        /// <returns>True se il caricamento va a buon fine.</returns>
        public override bool AzioneInformazione(object siglaEntita, object siglaAzione, object azionePadre, DateTime giorno, string[] mercati, object parametro = null)
        {
            DefinedNames definedNames = new DefinedNames(DefinedNames.GetSheetName(siglaEntita));

            try
            {
                AzzeraInformazione(siglaEntita, siglaAzione, definedNames, giorno, mercati, azionePadre.ToString().StartsWith("CARICA"));
                if (DataBase.OpenConnection())
                {
                    if (azionePadre.Equals("GENERA"))
                    {
                        if (mercati != null)
                        {
                            foreach (string mercato in mercati)
                            {
                                SpecMercato m = Simboli.MercatiMB["MB" + mercato];
                                ElaborazioneInformazione(siglaEntita, siglaAzione, definedNames, giorno, m.Inizio, Math.Min(Date.GetOreGiorno(giorno), m.Fine));
                            }
                        }
                        else
                        {
                            ElaborazioneInformazione(siglaEntita, siglaAzione, definedNames, giorno);
                        }
                        DataBase.InsertApplicazioneRiepilogo(siglaEntita, siglaAzione, giorno);
                    }
                    else
                    {
                        DataTable azioneInformazione = null;
                        if (mercati != null)
                        {
                            azioneInformazione = DataBase.Select(DataBase.SP.CARICA_AZIONE_INFORMAZIONE, "@SiglaEntita=" + siglaEntita + ";@SiglaAzione=" + siglaAzione + ";@Parametro=" + String.Join(",", mercati) + ";@Data=" + giorno.ToString("yyyyMMdd"));
                        }
                        else
                        {
                            azioneInformazione = DataBase.Select(DataBase.SP.CARICA_AZIONE_INFORMAZIONE, "@SiglaEntita=" + siglaEntita + ";@SiglaAzione=" + siglaAzione + ";@Parametro=" + parametro + ";@Data=" + giorno.ToString("yyyyMMdd"));
                        }

                        if (azioneInformazione != null)
                        {
                            if (azioneInformazione.Rows.Count == 0)
                            {
                                DataBase.InsertApplicazioneRiepilogo(siglaEntita, siglaAzione, giorno, false);
                                return(false);
                            }
                            else
                            {
                                ScriviInformazione(siglaEntita, azioneInformazione.DefaultView, definedNames);
                                DataBase.InsertApplicazioneRiepilogo(siglaEntita, siglaAzione, giorno);
                            }
                        }
                    }

                    Sheet s = new Sheet(Workbook.Sheets[definedNames.Sheet]);
                    s.AggiornaGrafici();
                    return(true);
                }
                else
                {
                    if (azionePadre.Equals("GENERA"))
                    {
                        ElaborazioneInformazione(siglaEntita, siglaAzione, definedNames, giorno);

                        Sheet s = new Sheet(Workbook.Sheets[definedNames.Sheet]);
                        s.AggiornaGrafici();

                        return(true);
                    }

                    return(false);
                }
            }
            catch (Exception e)
            {
                Workbook.InsertLog(PSO.Core.DataBase.TipologiaLOG.LogErrore, "CaricaAzioneInformazione [" + siglaEntita + ", " + siglaAzione + "]: " + e.Message);
                System.Windows.Forms.MessageBox.Show(e.Message, Simboli.NomeApplicazione + " - ERRORE!!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return(false);
            }
        }
Beispiel #6
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();
                }
            }
        }