Esempio n. 1
0
        /// <summary>
        /// Funzione per il salvataggio delle modifiche apportate a ranges anche non contigui.
        /// </summary>
        /// <param name="Target">L'insieme dei ranges modificati</param>
        /// <param name="annotaModifica">Se la modifica va segnalata all'utente attraverso il commento sulla cella oppure no.</param>
        /// <param name="fromCalcolo">Flag per eseguire azioni particolari nel caso la provenienza del salvataggio sia da un calcolo.</param>
        /// <param name="tableName">La tabella in cui inserire le modifiche. Di default Tab.Modifica. Utile specificarme una diversa nel caso di esportazione XML.</param>
        public static void StoreEdit(Excel.Range Target, int annotaModifica = -1, bool fromCalcolo = false, string tableName = DataBase.TAB.MODIFICA)
        {
            if (Workbook.IdUtente != 0 && Workbook.CategorySheets.Contains(Target.Worksheet))        //non salva sulla tabella delle modifiche se l'utente non è configurato
            {
                Excel.Worksheet ws             = Target.Worksheet;
                bool            wasProtected   = ws.ProtectContents;
                bool            screenUpdating = ws.Application.ScreenUpdating;
                if (wasProtected)
                {
                    ws.Unprotect(Workbook.Password);
                }

                if (screenUpdating)
                {
                    Workbook.ScreenUpdating = false;
                }

                DefinedNames definedNames = new DefinedNames(Target.Worksheet.Name, DefinedNames.InitType.SaveDB);
                DataTable    dt           = Workbook.Repository[tableName];

                if (ws.ChartObjects().Count > 0 && !fromCalcolo)
                {
                    Sheet s = new Sheet(ws);
                    s.AggiornaGrafici();
                }

                string[] ranges = Target.Address.Split(',');
                foreach (string range in ranges)
                {
                    Range  rng       = new Range(range);
                    Range  merged    = null;
                    object mergedVal = null;
                    try
                    {   //controllo se c'è un merge nel range
                        merged = new Range(ws.Range[rng.ToString()].MergeArea.Address);
                        //salvo il valore
                        mergedVal = ws.Range[rng.ToString()].Value;
                        rng       = merged;
                    }
                    catch { }


                    foreach (Range row in rng.Rows)
                    {
                        if (definedNames.SaveDB(row.StartRow))
                        {
                            bool annota = annotaModifica == -1 ? definedNames.ToNote(row.StartRow) : annotaModifica == 1;
                            foreach (Range column in row.Columns)
                            {
                                string[] parts = definedNames.GetNameByAddress(column.StartRow, column.StartColumn).Split(Simboli.UNION[0]);

                                string data;
                                if (parts.Length == 4)
                                {
                                    data = Date.GetDataFromSuffisso(parts[2], parts[3]);
                                }
                                else
                                {
                                    data = Date.GetDataFromSuffisso(parts[2], "");
                                }

                                if (!Workbook.Application.WorksheetFunction.IsErr(ws.Range[column.ToString()]))
                                {
                                    DataRow r = dt.Rows.Find(new object[] { parts[0], parts[1], data });
                                    if (r != null)
                                    {
                                        object val = ws.Range[column.ToString()].Value ?? "";

                                        if (merged == null)
                                        {
                                            r["Valore"] = (val.Equals("-") ? "0" : val);
                                        }
                                        else
                                        {
                                            r["Valore"] = mergedVal ?? "";
                                        }
                                    }
                                    else
                                    {
                                        DataRow newRow = dt.NewRow();

                                        object val = ws.Range[column.ToString()].Value ?? "";

                                        newRow["SiglaEntita"]       = parts[0];
                                        newRow["SiglaInformazione"] = parts[1];
                                        newRow["Data"] = data;
                                        if (merged == null)
                                        {
                                            newRow["Valore"] = (val.Equals("-") ? "0" : val);
                                        }
                                        else
                                        {
                                            newRow["Valore"] = mergedVal ?? "";
                                        }
                                        newRow["AnnotaModifica"] = annota ? "1" : "0";
                                        newRow["IdApplicazione"] = Workbook.IdApplicazione;
                                        newRow["IdUtente"]       = Workbook.IdUtente;

                                        dt.Rows.Add(newRow);
                                    }

                                    if (annota)
                                    {
                                        ws.Range[column.ToString()].ClearComments();
                                        ws.Range[column.ToString()].AddComment("Valore inserito manualmente").Visible = false;
                                    }
                                }
                            }
                        }
                    }
                }

                if (wasProtected)
                {
                    ws.Protect(Workbook.Password);
                }

                if (screenUpdating)
                {
                    ws.Application.ScreenUpdating = true;
                }
            }
        }
Esempio n. 2
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);
            }
        }