/// <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; } } }
/// <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); } }