using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using System.Web; using System.Xml; using ReportVS; using ConsulenzaEvoluta; //ISPB using bancafideuram.nac.traceoperation; public partial class Generator : System.Web.UI.Page { public string caller; public string codNsg; public string codicePB; public string codiceRete; public int idReport; public int keyProposta = 0; private bool privacy = false; private int chiaveNucleo; private string query = ""; private bool QuerySection = false; private string Intermediario = ""; private DocumentPDF _docPDF; DataSectionParameter dsParam; DatiMonitoraggio dsDatiMonitoraggio; public XmlDocument docIN = new XmlDocument(); private DataTable tableIntermediari; private DataTable dt; private string tipoReport; DatiComuni _datiComuni; private DataTable dtArea; private DataTable dtProgetto; private bool hasSelectedDistribuzioneAssetClass; private bool hasSelectedPoliticaInv; private int numberOfQUERYtagsRis = 0; private int numberOfQUERYtagsInn = 0; public string token; string codiceUtenteQueryString; private string _Area = ""; private bool _issolounintermediario; private bool _patrimoniobfpresente = false; private bool _patrimonioterzipresente = false; private DataSet dsAreeBisognoProgetto = new DataSet(); /// /// Punto di inizio della stampa del report. /// /// /// protected void Page_Load(object sender, EventArgs e) { Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.AppendCacheExtension("no-store, must-revalidate"); Response.AppendHeader("Pragma", "no-cache"); Response.AppendHeader("Expires", "0"); DateTime inizioCreazioneReport = DateTime.Now; bool monitoraggio_con_alberatura = false; if (!string.IsNullOrEmpty(Request.QueryString.Get("monitoraggio_con_alberatura"))) monitoraggio_con_alberatura = bool.Parse(Request.QueryString.Get("monitoraggio_con_alberatura")); bool proposta_validata = false; if (!string.IsNullOrEmpty(Request.QueryString.Get("validata"))) proposta_validata = bool.Parse(Request.QueryString.Get("validata")); caller = Request.QueryString.Get("action"); codNsg = Request.QueryString.Get("codiceFiscale"); codicePB = Request.QueryString.Get("codicePB"); codiceRete = Request.QueryString.Get("codiceRete"); token = Request.QueryString.Get("token"); privacy = bool.Parse(Request.QueryString.Get("checkPrivacy")); idReport = Convert.ToInt32(Request.QueryString.Get("idReport")); tipoReport = Request.QueryString.Get("tipoReport"); chiaveNucleo = Convert.ToInt32(Request.QueryString.Get("chiaveNucleo")); ClassLibraryWS.Debug.ScriviLog(" Start - Generazione Report x Cliente : "+ codNsg +" - " + DateTime.Now); if (!string.IsNullOrEmpty(Request.QueryString.Get("idProposta"))) keyProposta = Convert.ToInt32(Request.QueryString.Get("idProposta")); // Valorizzo il codice PB codiceUtenteQueryString = codiceRete.ToUpper().Trim() + codicePB.ToUpper().Trim(); if (token == null || token == "") { HttpCookie ck_token = new HttpCookie("token"); ck_token = System.Web.HttpContext.Current.Request.Cookies["token"]; if (ck_token != null) token = ck_token.Value.ToString(); } Cliente cliente = null; Nucleo nucleo = null; #region Imposto l'oggetto DataSectionParameter dsParam = new DataSectionParameter(); if (tipoReport.ToUpper().Equals("NUCLEO")) { nucleo = Nucleo.getNucleo(chiaveNucleo); dsParam.Nucleo = nucleo; } else { cliente = Cliente.getCliente(codiceRete + codicePB, codNsg); dsParam.ChiaveClientePB = cliente.ChiaveClientePB; } dsParam.CodiceNSG = cliente.CodNSG; dsParam.CodiceCliente = codNsg; dsParam.CodicePB = codicePB; dsParam.CodiceRete = codiceRete; dsParam.CodiceApplicazione = WebConfigParameter.getParameter("CODICEAPPLICAZIONE"); dsParam.TipoIndirizzo = "1"; dsParam.VersioneDataBaseSIMPB = string.IsNullOrEmpty(token) ? 0 : Convert.ToInt32(token); #region LOG if (ClassLibraryWS.Debug.iSDebug) { //Se in debug scrivo nel log C:\ISPBLog\log.txt ClassLibraryWS.Debug.ScriviLog("Generator.aspx.cs Inizio Report\n" + " idReport = " + idReport + "\n" + " tipoReport = " + tipoReport + "\n" + " ChiaveClientePB = " + cliente.ChiaveClientePB + "\n" + " CodNsg = " + codNsg ); } #endregion #region Recupero Proposte if (tipoReport == "PROPOSTA") { // Imposta le Proposte in stato Completa o Accettata del cliente. dsParam.Proposte = LoadProposte(dsParam.ChiaveClientePB); // Imposta la Proposta corrente se è richiesta la stampa del report di proposta. // Se keyProposta è valorizzata sto stampando una proposta. if (keyProposta > 0) { dsParam.Proposta = dsParam.Proposte.GetByChiaveProposta(keyProposta); // Metto in sessione l'oggetto perche non ho modo di recuperarlo in setPageFooterNomeCliente dell'oggetto documentPDF Session.Add("PropostaEnabled", dsParam.Proposta); } } #endregion dsParam.modalitàAnonima = privacy ? false : true; #endregion #region Gestione Autorizzazione Utenti if (WebConfigParameter.getParameter("Ambiente") == "esterno") { #region UTENTE if (Session["UtenteImpersonificatoDiSessione"] != null) { Utente utente = Utente.DeserializeMessage(Session["UtenteImpersonificatoDiSessione"].ToString()); dsParam.Utente = utente; } else Response.Redirect("error.aspx"); #endregion } #endregion #region MULTITHREADING #region inizio log per multithreading //DateTime dataInizioMonitoraggio = DateTime.Now; //int multiT = int.Parse(WebConfigParameter.getParameter("multiThreading")); //DBTimeManager.setTimeEnd("MONITORAGGIO", "INIZIO MULTITHREADING " + multiT.ToString(), DateTime.Now, "", "", ""); #endregion #region Chiamata Multithreading //if (multiT.Equals(1)) //{ // StringCollection queries = new StringCollection(); // DataTable sezioniLetteOrdinatePerQuery = getQueryPerMultiThreading(); // if (sezioniLetteOrdinatePerQuery.Rows.Count > 0) // { // foreach (DataRow rigaSLO in sezioniLetteOrdinatePerQuery.Rows) // { // string queriesOracleSezione = rigaSLO["queryOracleSezione"].ToString(); // if (queriesOracleSezione.ToString() != string.Empty) // { // foreach (string query in queriesOracleSezione.Split(';')) // { // queries.Add(query); // } // } // } // if (queries.Count > 0) // { // List tabelleSessione = SessionForMultiThread.getSession(queries); // string pathFilesSql = Server.MapPath(WebConfigParameter.getParameter("PATH_FILE_ORACLE_SQL")); // ThreadsManager threads = new ThreadsManager(pathFilesSql, tabelleSessione, queries, dsParam); // threads.startThreads(); // threads.endThreads(); // SessionForMultiThread.setSession(tabelleSessione); // } // } //} #endregion Chiamata Multithreading #region inizio log per multithreading //DateTime dataIniziodopoMonitoraggio = DateTime.Now; //DBTimeManager.setTimeEnd("MONITORAGGIO", "FINE MULTITHREADING ", dataIniziodopoMonitoraggio, "", "", ""); #endregion #region inizio log per multithreading dopo //DateTime dataInizioDopoMonitoraggio = DateTime.Now; //DBTimeManager.setTimeEnd("MONITORAGGIO", "INIZIO DOPO MULTITHREADING " + multiT.ToString(), DateTime.Now, "", "", ""); #endregion #endregion #region Creazione Dati Comuni _datiComuni = new DatiComuni(caller, dsParam); dsParam.DatiComuni = _datiComuni.datiComuni; // Patrimonio Complessivo dsParam.PatrimonioComplessivo = _datiComuni.PatrimonioComplessivo; dsParam.PatrimonioComplessivoConRisorseNonAllocate = _datiComuni.PatrimonioComplessivoConRisorseNonAllocate; // Patrimonio Casa dsParam.PatrimonioCasa = _datiComuni.PatrimonioCasa; dsParam.PatrimonioCasaConRisorseNonAllocate_Totale_CC = _datiComuni.PatrimonioCasaConRisorseNonAllocate_Totale_CC; dsParam.PatrimonioCasaConRisorseNonAllocate_CC_Casa_Positivi = _datiComuni.PatrimonioCasaConRisorseNonAllocate_CC_Casa_Positivi; dsParam.PatrimonioCasaDettaglioProgettiInvestimento = _datiComuni.PatrimonioCasaDettaglioProgettiInvestimento; // Patrimonio Terzi dsParam.PatrimonioTerzi = _datiComuni.PatrimonioTerzi; dsParam.DettaglioProdottiIntermediario = _datiComuni.DettaglioProdottiIntermediario; dsDatiMonitoraggio = _datiComuni.DatiMonitoraggio; #endregion int versTempPdf = 0; if (proposta_validata && tipoReport.ToUpper().ToString().Equals("PROPOSTA")) versTempPdf = 2; if (tipoReport.ToUpper().Equals("NUCLEO")) { _docPDF = new DocumentPDF("REPORT " + tipoReport, codiceRete, "report", versTempPdf, string.Empty, nucleo.IdCliente_SEIReport, idReport, nucleo.CodiceRete + nucleo.CodicePB); _docPDF.ModalitàAnonima = 0; // Sempre nominativo _docPDF.AggiungiClienteAlFooter(dsParam.Nucleo.Nome, string.Empty); } else { _docPDF = new DocumentPDF("REPORT " + tipoReport, codiceRete, "report", versTempPdf, codNsg, cliente.IdCliente_SEIReport, idReport, cliente.CodiceRete + cliente.CodicePB); _docPDF.ModalitàAnonima = dsParam.modalitàAnonima ? 1 : 0; _docPDF.AggiungiClienteAlFooter(cliente.Nome, cliente.Cognome); } if (dsParam.Utente != null) _docPDF.setUtenteSession(dsParam.Utente); #region Stampa del documento PDF bool bCreaReport; #region Inizio di Generator switch (tipoReport.ToUpper()) { case "MONITORAGGIO": // Monitoraggio con alberatura o senza. // Modello fisso r6_s_generator 4,11 if (monitoraggio_con_alberatura) bCreaReport = this.createReport(_docPDF, TipoReport.MONITORAGGIO_CON_ALBERATURA); else bCreaReport = this.createReport(_docPDF, TipoReport.MONITORAGGIO); break; case "DIAGNOSI": bCreaReport = this.createReport(_docPDF, TipoReport.DIAGNOSI); break; case "PROPOSTA": if (proposta_validata) bCreaReport = this.createReport(_docPDF, TipoReport.PROPOSTA_VALIDATA); else bCreaReport = this.createReport(_docPDF, TipoReport.PROPOSTA); break; case "RISCHIO": bCreaReport = this.createReport(_docPDF, TipoReport.RISCHIO); break; case "NUCLEO": bCreaReport = this.createReport(_docPDF, TipoReport.NUCLEO); break; default: bCreaReport = this.createReport(_docPDF, tipoReport); break; } #endregion #endregion if (bCreaReport) { #region Log TraceOperation if (WebConfigParameter.getParameter("Ambiente").ToUpper() == "ESTERNO") { try { //ISPB >>>> //TraceOperation operation = new TraceOperation(); //operation.Url = WebConfigParameter.getParameter("WSTRACEOPERATION").ToString(); //string codiceUtenteWindows = "0000000"; //if (User.Identity.Name.Length > 0) //{ // int pos = User.Identity.Name.IndexOf("\\") + 1; // codiceUtenteWindows = User.Identity.Name.Substring(pos, User.Identity.Name.Length - pos).ToUpper(); //} //operation.WriteLog(new LogDataTypeWS() //{ // Acronimo = WebConfigParameter.getParameter("CODICEAPPLICAZIONE").ToString(), // CodFiscalePiva = codiceFiscale, // CodIban = null, // CodNdg = null, // CodRapporto = null, // CodSndg = null, // CodTerminale = Request.Url.Host, // CodTipoRichiesta = "S", // DataRichiesta = DateTime.Now.ToString("yyyyMMddHHmmss"), // DesRichiesta = Request.Url.ToString().Length > 4000 ? Request.Url.ToString().Substring(0, 4000) : Request.Url.ToString(), // IdInput = "0", // MatricolaUtente = codiceUtenteWindows //}); //ISPB <<<< } catch (Exception ex) { #region Scrivo l'errore nella tabella REP_Errori di CE. List parametri = new List(); Parametro parametro = new Parametro(); parametro.DbType = DbType.String; parametro.Value = User.Identity.Name; parametro.ParameterName = "utentewindows"; parametri.Add(parametro); parametro = new Parametro(); parametro.DbType = DbType.String; parametro.Value = string.Format("{0}{1} {2}", "TraceOperation.", User.Identity.Name, ex.Message); parametro.ParameterName = "errore"; parametri.Add(parametro); parametro = new Parametro(); parametro.DbType = DbType.String; parametro.Value = string.Format("{0}{1} {2}", "TraceOperation.", User.Identity.Name, ex.Message); parametro.ParameterName = "errorebreve"; parametri.Add(parametro); BusinessManager.ExecuteStoredProcedure_ConsulenzaEvoluta("REP_TracciaErrore", parametri); #endregion } } #endregion ///Faccio saltare il caso del MONITORAGGIO !!!MODIFICARE ///V Se non è anonimo lo salvo nel db /*************************** * INSERISCI NELLA TABELLA * ****************************/ if (tipoReport.ToUpper().Equals("NUCLEO")) { // 04/06/2014 : Dallo sviluppo del Report Nucleo è stata introdotta la nuova gestione di archiviazione del PDF e relativo Log // Il report Nucleo non ha la gestione della "ModalitàAnonima", viene sempre salvato nell'archivio documenti SessionNucleo sessionNucleo = new SessionNucleo(dsParam.Nucleo.ChiaveNucleo, dsParam.Nucleo.ChiaviClientePB, _docPDF.getPDF()); //Log.Write("M", 8, "D", dsParam.CodicePB, dsParam.CodiceRete, 0, string.Empty, _docPDF.getPDF(), dsParam.Nucleo.ChiaveNucleo, dsParam.Nucleo.ChiaviClientePB); Response.Cookies.Add(new HttpCookie("endOfJob", "2")); } else { if (_docPDF.ModalitàAnonima == 0) // nn è anonima { /************** ATTENZIONE DA SCOMMENTARE - Pino commentata solo per test per non andare in timeout *****************/ int identificativo = _docPDF.InsertIntoDB(idReport, cliente.IdCliente_SEIReport, codiceRete + codicePB, dsParam.CodiceNSG, cliente.CodiceMandatoFiduciaria); if (identificativo != 0) { HttpCookie ck_Identificativo = new HttpCookie("identificativo"); ck_Identificativo.Value = identificativo.ToString(); Response.Cookies.Add(ck_Identificativo); Log.InsertIntoDB("DocPDF inserito in archivio.", "PB: " + codicePB + "; CF: " + codNsg + "; Rete:" + codiceRete, HttpContext.Current.Request.UserHostName, HttpContext.Current.Request.Url.AbsolutePath); } /******************************************************************************************************/ //abilito il cookie che segnala la possibilita' di mostrare la pagina di inserimento note (reportStampa.aspx) HttpCookie ck_endOfJob = new HttpCookie("endOfJob"); ck_endOfJob.Value = "1"; Response.Cookies.Add(ck_endOfJob); /************** ATTENZIONE DA SCOMMENTARE - Pino commentata solo per test per non andare in timeout *****************/ //V _docPDF.aggiornaLogGenerazioneReport(identificativo, codNsg, codicePB, User.Identity.Name, false); // /******************************************************************************************************/ } else { //abilito il cookie che segnala la possibilita' di mostrare la pagina di inserimento note (reportStampa.aspx) HttpCookie ck_endOfJob = new HttpCookie("endOfJob"); ck_endOfJob.Value = "2"; Response.Cookies.Add(ck_endOfJob); //V //Nel caso di stampa anonima come idreport viene passato un valore fake _docPDF.aggiornaLogGenerazioneReport(-1, codNsg, codicePB, User.Identity.Name, true); // } } DateTime fineCreazioneReport = DateTime.Now; #region Tempo impiegato alla produzione del report TimeSpan tempoCreazioneReport = fineCreazioneReport.Subtract(inizioCreazioneReport); if (WebConfigParameter.getParameter("TEMPO_STAMPA_REPORT") == "1") { _docPDF.addPage(); _docPDF.setSezHeader("Report prodotto in m:s:ms" + tempoCreazioneReport.Minutes + " : " + tempoCreazioneReport.Seconds + " : " + tempoCreazioneReport.Milliseconds); } #endregion //if (tipoReport.ToUpper() == "PROPOSTA") // _docPDF.addAccettazioneProposta(cliente.NomePB, cliente.CognomePB, cliente.CodicePB); _docPDF.renderPDF(); } #region fine log per multithreading dopo //DBTimeManager.setTimeEnd("MONITORAGGIO", "FINE DOPO MULTITHREADING ", dataIniziodopoMonitoraggio, "", "", ""); #endregion } /// /// Recupera i dati riguardanti le proposte del cliente in stato Accettata o Completa dalla DatiComuniProposta (dalla vista v_all_proposta) e /// popola la collezione Proposte dell'oggetto DataSectionParameter. /// /// private PropostaCollection LoadProposte(int chiaveClientePB) { PropostaCollection listaProposte = new PropostaCollection(); DataTable dt = BusinessManager.GetDataTableFromStoredProcedure_ConsulenzaEvoluta("REP_Prop_ElencoProposte", chiaveClientePB); //d.lisena #ConsulenzaEvoluta NEW foreach (DataRow row in dt.Rows) { Proposta propostaToAdd = new Proposta(); // Nome propostaToAdd.Nome = row["nome_proposta"] == DBNull.Value ? string.Empty : row["nome_proposta"].ToString(); // Chiave propostaToAdd.Chiave = Convert.ToInt32(row["chiave_proposta"]); // Data Creazione propostaToAdd.DataCreazione = row["data_creazione_proposta"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(row["data_creazione_proposta"]); propostaToAdd.DataCreazioneString = propostaToAdd.DataCreazione.HasValue ? propostaToAdd.DataCreazione.Value.ToLongDateString() : "n.d."; // Data Scadenza propostaToAdd.DataScadenza = row["data_scadenza_proposta"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(row["data_scadenza_proposta"]); propostaToAdd.DataScadenzaString = propostaToAdd.DataScadenza.HasValue ? propostaToAdd.DataScadenza.Value.ToLongDateString() : "n.d."; // Stato della Proposta switch (row["stato_proposta"].ToString().Trim().ToLower()) { case "accettata": propostaToAdd.Stato = TipologiaStatoProposta.ACCETTATA; break; case "completa": propostaToAdd.Stato = TipologiaStatoProposta.COMPLETA; break; } listaProposte.Add(propostaToAdd); } return listaProposte; } ///// ///// Ritorna la lista delle query che vanno lanciate in MultiThreading necessarie alla stampa del report. ///// ///// //private DataTable getQueryPerMultiThreading() //{ // List parametri = new List(); // Parametro parametro = new Parametro(); // parametro.ParameterName = "idReport"; // parametro.DbType = DbType.Int32; // parametro.Value = getIdReport(tipoReport); // parametri.Add(parametro); // parametro = new Parametro(); // parametro.ParameterName = "idModello"; // parametro.DbType = DbType.Int32; // parametro.Value = idReport; // parametri.Add(parametro); // return DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServer, "R6_S_QuerySezioni", parametri); //} /// /// Lancia la R6_S_Generator e recupera le sezioni che andranno stampate sul report. /// Usata per i report che hanno una struttura ad albero. Esempio: DIAGNOSI, MONITORAGGIO... /// /// /// /// private DataTable getData(int IdReport, int IdModello) { List parametri = new List(); Parametro parametro = new Parametro(); parametro.ParameterName = "idReport"; parametro.DbType = DbType.Int32; parametro.Value = IdReport; parametri.Add(parametro); parametro = new Parametro(); parametro.ParameterName = "idModello"; parametro.DbType = DbType.Int32; parametro.Value = IdModello; parametri.Add(parametro); return DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServer, "R6_S_Generator", parametri); } /// /// Lancia la R6_S_Generator_Rischio e recupera le sezioni che andranno stampate sul report di rischio. /// Usata per i report che hanno una struttura a scheda. Esempio: RISCHIO, NUCLEO /// /// /// /// private DataTable getData_Schede(int IdReport, int IdModello) { List parametri = new List(); Parametro parametro = new Parametro(); parametro.ParameterName = "idReport"; parametro.DbType = DbType.Int32; parametro.Value = IdReport; parametri.Add(parametro); parametro = new Parametro(); parametro.ParameterName = "idModello"; parametro.DbType = DbType.Int32; parametro.Value = IdModello; parametri.Add(parametro); return DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServer, "R6_S_Generator_Rischio", parametri); } /// /// Lancia la R6_S_Vincoli e recupera i vincoli di tutte le sezioni /// /// /// private static DataTable getDataVincoli(int IdModello) { List parametri = new List(); Parametro parametro = new Parametro(); parametro.ParameterName = "idModello"; parametro.DbType = DbType.Int32; parametro.Value = IdModello; parametri.Add(parametro); try { return DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServer, "R6_S_Vincoli", parametri); } catch (Exception ex) { return null; } } /// /// Crea il report. /// Crea una struttura gerarchica : /// REPORT /// --> CAPITOLO /// --> PARAGRAFO /// --> SEZIONE /// Viene chiamata la R6_S_Generator dalla quale si recuperano tutte le informazioni /// a livello di capitolo, paragrafo e sezione. /// Ad ogni sezione vengono aggiunti i vincoli di visualizzazione che sono definiti a livello database: /// la stored R6_S_Vincoli si occupa di recuperarli. /// /// Documento PDF necesario al disegno del report /// Tipo di report da stampare. /// private bool createReport(DocumentPDF doc, TipoReport tipologiaReport) { #region Info su Intermediaio per vincolo colonna intermediario S91 if (tipologiaReport != TipoReport.NUCLEO) { CTable ct = new CTable(); ct.LoadDati(codNsg, codicePB, codiceRete); _issolounintermediario = ct.Diagnosi_CustomerHaPatrimonioTerziEdHaUnSoloIntermediario(); _patrimoniobfpresente = ct.Diagnosi_CustomerHasBFWallet(); _patrimonioterzipresente = ct.Diagnosi_CustomerHaPatrimonioTerzi(); } #endregion // Creo l'oggetto REPORT al quale aggiungero i Capitoli Report report = new Report(tipologiaReport); // l'oggetto ParametriReport conterrà gli oggetti che vanno mantenuti per convenzione // come il DataSectionParameter ParametriReport ParametriReport = new ParametriReport(doc); ParametriReport.TipoReport = tipologiaReport; #region Settaggio parametri in base al report da stampare switch (report.Tipo) { case TipoReport.DIAGNOSI: ParametriReport.DataSectionParameter = dsParam; break; case TipoReport.PROPOSTA: case TipoReport.PROPOSTA_VALIDATA: case TipoReport.PROPOSTA_VALIDATA_WSFMS: // Se sto stampando il report di PROPOSTA devo conoscere le aree di bisogno per ciascuna // delle quali verrà ripetuta la stampa della S70. // Recupero le eventuali aree di bisogno. dsAreeBisognoProgetto = getAreeBisognoProgetti_Proposta(); ParametriReport.DataSectionParameter = dsParam; break; case TipoReport.PIANIFICAZIONE: break; case TipoReport.MONITORAGGIO: case TipoReport.MONITORAGGIO_CON_ALBERATURA: ParametriReport.DatiMonitoraggio = dsDatiMonitoraggio; ParametriReport.DataSectionParameter = dsParam; if (!string.IsNullOrEmpty(Request.QueryString["rifPianificazione"])) { if (int.Parse(Request.QueryString["rifPianificazione"]) == 1) ParametriReport.RiferimentoPianificazione = true; } break; case TipoReport.RISCHIO: case TipoReport.NUCLEO: ParametriReport.DatiMonitoraggio = dsDatiMonitoraggio; ParametriReport.DataSectionParameter = dsParam; break; default: break; } #endregion // Associo l'oggetto DocumentPDF già creato alla proprietà DocumentPDF del Report. report.DocumentPDF = doc; //Recupero tutti i dati sia dei capitoli, sia dei paragrafi che delle sezioni int idModello = 0; DataTable tabellaDati; switch (ParametriReport.TipoReport) { case TipoReport.PROPOSTA_VALIDATA_WSFMS: idModello = 14; tabellaDati = getData(report.Id, idModello); break; case TipoReport.RISCHIO: case TipoReport.NUCLEO: idModello = idReport; tabellaDati = getData_Schede(report.Id, idModello); break; default: idModello = idReport; tabellaDati = getData(report.Id, idModello); break; } ParametriReport.Schema = tabellaDati; #region Copertina, Indice, Glossario DataView dwCopertina = new DataView(tabellaDati); DataTable dtCopertina = new DataTable("COPERTINA"); dwCopertina.RowFilter = "CodiceSezione='COPERTINA'"; dtCopertina = dwCopertina.ToTable(); if (dtCopertina.Rows.Count > 0) report.HasCopertina = true; DataView dwIndice = new DataView(tabellaDati); DataTable dtIndice = new DataTable("INDICE"); dwIndice.RowFilter = "CodiceSezione='INDICE'"; dtIndice = dwIndice.ToTable(); if (dtIndice.Rows.Count > 0) report.HasIndice = true; DataView dwGlossario = new DataView(tabellaDati); DataTable dtGlossario = new DataTable("GLOSSARIO"); dwGlossario.RowFilter = "CodiceSezione='GLOSSARIO'"; dtGlossario = dwGlossario.ToTable(); if (dtGlossario.Rows.Count > 0) report.HasGlossario = true; #endregion //Recupero tutti i vincoli delle sezioni DataTable tabellaVincoli = getDataVincoli(idModello); #region Aggiunta dei capitoli al report //Recupero i capitoli. DataView viewCapitoli = new DataView(tabellaDati); DataTable tabellaCapitoli = viewCapitoli.ToTable(true, "idCapitolo", "titoloCapitolo", "testoCapitolo", "testoCapitoloAlternativo", "queryOracleCapitolo", "nuovaPaginaCapitolo", "indicizzatoCapitolo"); //Aggiungo tutti i capitoli al report. int idCapitolo = -1; foreach (DataRow rowCapitoli in tabellaCapitoli.Rows) { CapitoloReport capitolo; idCapitolo = Convert.ToInt32(rowCapitoli["idCapitolo"]); if (rowCapitoli["queryOracleCapitolo"].ToString().ToLower() == "intermediario") { string vincolisuintemediari = getVincoliSuIntermediari(tabellaVincoli, "intermediario"); if ((vincolisuintemediari == "TUTTIINTERMEDIARI") && dsParam.Intermediari.Rows.Count != 1) { capitolo = new CapitoloReport(idCapitolo, rowCapitoli); DataView viewVincoli = new DataView(tabellaVincoli); viewVincoli.RowFilter = ("SezioneFisica = '" + idCapitolo.ToString().Replace("'", "''") + "'"); DataTable datatableVincoli = viewVincoli.ToTable("datatableVincoli"); capitolo.ImpostaVincoli(datatableVincoli); capitolo.Intermediario = string.Empty; AddParagrafiToCapitolo(capitolo, tabellaDati, tabellaVincoli, dsAreeBisognoProgetto); report.Add(capitolo); } else { foreach (DataRow rIntermediari in dsParam.Intermediari.Rows) { capitolo = new CapitoloReport(idCapitolo, rowCapitoli); DataView viewVincoli = new DataView(tabellaVincoli); viewVincoli.RowFilter = ("SezioneFisica = 'C" + idCapitolo.ToString().Replace("'", "''") + "'"); DataTable datatableVincoli = viewVincoli.ToTable("datatableVincoli"); capitolo.ImpostaVincoli(datatableVincoli); capitolo.Intermediario = rIntermediari["Descrizione"].ToString(); AddParagrafiToCapitolo(capitolo, tabellaDati, tabellaVincoli, dsAreeBisognoProgetto); report.Add(capitolo); } } } else if ((rowCapitoli["queryOracleCapitolo"].ToString().ToLower() == "approfondimentorischio")) { #region Recupero i perimetri di approfondimento. DataTable dtPerimetri = new DataTable(); dtPerimetri.Columns.Add("Perimetro", typeof(string)); dtPerimetri.Rows.Add("PERIMETRO_CASA"); dtPerimetri.Rows.Add("PERIMETRO_TERZI"); dtPerimetri.Rows.Add("PERIMETRO_COMPLESSIVO"); #endregion foreach (DataRow drPerimetro in dtPerimetri.Rows) { capitolo = new CapitoloReport(idCapitolo, rowCapitoli); capitolo.Intermediario = drPerimetro["Perimetro"].ToString(); AddParagrafiToCapitolo(capitolo, tabellaDati, tabellaVincoli, dsAreeBisognoProgetto); // aggiunge il capitolo al report report.Add(capitolo); } } else if (rowCapitoli["queryOracleCapitolo"].ToString() == string.Empty) { capitolo = new CapitoloReport(idCapitolo, rowCapitoli); // Uso l'impostazione dei vincoli della sezione anche per i capitoli DataView viewVincoli = new DataView(tabellaVincoli); viewVincoli.RowFilter = ("SezioneFisica = 'C" + idCapitolo.ToString().Replace("'", "''") + "'"); DataTable datatableVincoli = viewVincoli.ToTable("datatableVincoli"); capitolo.ImpostaVincoli(datatableVincoli); capitolo.Intermediario = string.Empty; AddParagrafiToCapitolo(capitolo, tabellaDati, tabellaVincoli, dsAreeBisognoProgetto); // aggiunge il capitolo al report report.Add(capitolo); } } #endregion // ToDoFC // Disegno il Report. report.Disegna(ParametriReport); return true; } /// /// Ritorna un datatable contenente i vincoli impostati sugli intermediari /// /// private string getVincoliSuIntermediari(DataTable dt, string chiaveFiltro) { DataRow[] drArray = dt.Select(" SezioneFisica = '" + chiaveFiltro.Replace("'", "''") + "'"); if (drArray.Length > 0) return drArray[0]["CodiceVincoloApplicativo"].ToString(); else return ""; } /// /// Aggiunge i paragrafi al capitolo. /// /// /// /// /// private void AddParagrafiToCapitolo(CapitoloReport capitolo, DataTable tabellaDati, DataTable tabellaVincoli, DataSet dsAreeBisognoProgetto) { //Recupero i paragrafi per ogni capitolo. DataView viewParagrafo = new DataView(tabellaDati); viewParagrafo.RowFilter = "idCapitolo = " + capitolo.Id.ToString(); DataTable tabellaParagrafi = viewParagrafo.ToTable(true, "idParagrafo", "ordineParagrafo", "titoloParagrafo", "sottoTitoloParagrafo", "testoParagrafo", "queryOracleParagrafo", "indicizzatoParagrafo", "SpazioNecessarioSezioneSuccessiva"); ParagrafoReport paragrafo = null; int idParagrafo = -1; foreach (DataRow rowParagrafi in tabellaParagrafi.Rows) { idParagrafo = Convert.ToInt32(rowParagrafi["idParagrafo"]); paragrafo = new ParagrafoReport(idParagrafo, rowParagrafi); paragrafo.SpazioNecessarioSezioneSuccessiva = rowParagrafi["SpazioNecessarioSezioneSuccessiva"] == DBNull.Value ? 0 : Convert.ToInt32(rowParagrafi["SpazioNecessarioSezioneSuccessiva"]); DataView viewVincoliParagrafo = new DataView(tabellaVincoli); viewVincoliParagrafo.RowFilter = ("SezioneFisica = 'P" + idParagrafo.ToString().Replace("'", "''") + "'"); DataTable datatableVincoliParagrafo = viewVincoliParagrafo.ToTable("datatableVincoli"); paragrafo.ImpostaVincoli(datatableVincoliParagrafo); if ((rowParagrafi["queryOracleParagrafo"].ToString().ToLower() == "areaprogetto")) // duplica i paragrafi in base ad ogni area/progetto { if (paragrafo.CheckStampaElemento) { int countPrev = 0; foreach (DataRow r in dsAreeBisognoProgetto.Tables["TabellaAreeBisogno"].Rows) { paragrafo.AreaProgettoDescrizione = r["Need_Estesa"].ToString(); paragrafo.AreaProgettoCodice = r["Need_Breve"].ToString(); if (r["Need_Breve"].ToString().ToLower() == "inv") // è un area di investimento quindi mi recupero tutti i progetti. { int iProgettoInvestimento = 0; foreach (DataRow rInvestimento in dsAreeBisognoProgetto.Tables["TabellaProgetti"].Rows) { paragrafo.NomeProgetto = rInvestimento["Nome_Progetto_Investimento"].ToString(); if (iProgettoInvestimento == 0) paragrafo.NomeProgettoDaIndicizzare = rInvestimento["Nome_Progetto_Investimento"].ToString(); AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); iProgettoInvestimento++; } } else if (r["Need_Breve"].ToString().ToLower() == "pre1" || r["Need_Breve"].ToString().ToLower() == "pre2") //e' un'area previdenza (essenziale o accessoria) { paragrafo.AreaProgettoDescrizione = "Previdenza"; paragrafo.AreaProgettoCodice = "Pre"; if (countPrev == 0) paragrafo.NomePrevidenzaDaIndicizzare = r["Need_Estesa"].ToString(); paragrafo.NomeProgetto = r["Need_Estesa"].ToString(); AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); countPrev++; } else // e' un'area priva di sottosezioni progetti o investimenti { paragrafo.NomeProgetto = string.Empty; AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); } } paragrafo.CheckStampaElemento = false; // aggiunge il paragrafo al capitolo capitolo.Add(paragrafo); } } else if ((rowParagrafi["queryOracleParagrafo"].ToString().ToLower() == "areemonitorate")) // duplica i paragrafi per ogni area monitorata. { int numeroProgettiInvestimento = 0; DataTable dtAreeMonitorate = new DataTable("AreeMonitorate"); dtAreeMonitorate = dsDatiMonitoraggio.AreeMonitorate.Copy(); #region Aggiungo al datatatable delle areemonitorate anche la riga relativa ai cc negativi e linea self , se presenti. if (dsParam.ContiCorrenti.GetContiCorrentiNegativi_CC_Casa().Count > 0) { // Riga fittizia che permette di stampare il paragrafo dei cc negativi. // Imposto 55 come ordine di areasortorderMonitoraggioFase2 perche questo dettaglio va inserito tra l'ultima area monitorata (extrarendimento = 50) e il dettaglio delle risorse non allocate (na = 60) // Imposto 1 come AREAPROGETTOSOTTOMONITORAGGIO altrimenti secondo logica stamperebbe la S43 e non la S43BIS dtAreeMonitorate.Rows.Add("CCNegativi", "Conti Correnti Negativi", DBNull.Value, string.Empty, 0, 0, 0, 55, 1); } if (dsParam.LineeSelf.SelfNegativa()) { // Riga fittizia che permette di stampare il paragrafo dei cc negativi. // Imposto 57 come ordine di areasortorderMonitoraggioFase2 perche questo dettaglio va inserito tra CCNegativi (55) e il dettaglio delle risorse non allocate (na = 60) // Imposto 1 come AREAPROGETTOSOTTOMONITORAGGIO altrimenti secondo logica stamperebbe la S43 e non la S43BIS dtAreeMonitorate.Rows.Add("LineaSelf", "Liquidità negativa ''Linea GP Self Fond''", DBNull.Value, string.Empty, 0, 0, 0, 57, 1); } #endregion // sort del datatable AreeMonitorate DataView view = dtAreeMonitorate.DefaultView; view.Sort = "areasortorderMonitoraggioFase2"; dtAreeMonitorate = view.ToTable(); DataRow[] drTotaleProgettiInvestimento = dtAreeMonitorate.Select(" Need_Area = 'Inv'"); int totaleProgettiInvestimento = drTotaleProgettiInvestimento.Length; bool stampaAreaBisogno = false; bool monitoraggio_con_alberatura = false; if (!string.IsNullOrEmpty(Request.QueryString.Get("monitoraggio_con_alberatura"))) monitoraggio_con_alberatura = bool.Parse(Request.QueryString.Get("monitoraggio_con_alberatura")); foreach (DataRow rAreeeMonitorate in dtAreeMonitorate.Rows) { #region Verifica aree di bisogno da stampare in base a selezione utente sul report di monitoraggio personalizzabile if (monitoraggio_con_alberatura) { stampaAreaBisogno = false; // VERIFICO SE L'UTENTE HA SCELTO DI STAMPARE L'AREA DI BISOGNO CORRENTE. // Solamente l'area Na, CCnegativi e LineaSelf vanno sempre stampate a prescidere dalle selezioni if (rAreeeMonitorate["Need_Area"].ToString().ToLower() == "na" || rAreeeMonitorate["Need_Area"].ToString().ToLower() == "ccnegativi" || rAreeeMonitorate["Need_Area"].ToString().ToLower() == "lineaself") stampaAreaBisogno = true; else { DataRow[] drAreaBisognoStampabile = tabellaVincoli.Select(" codicevincoloapplicativo = 'STAMPA_AREA_BISOGNO' AND SEZIONEFISICA = '" + rAreeeMonitorate["Need_Area"].ToString().ToUpper() + "'"); if ((drAreaBisognoStampabile.Length > 0) || rAreeeMonitorate["Need_Area"].ToString().ToUpper() == "INN") stampaAreaBisogno = true; } } else stampaAreaBisogno = true; #endregion if (stampaAreaBisogno) { paragrafo = new ParagrafoReport(idParagrafo, rowParagrafi); paragrafo.Titolo = rAreeeMonitorate["Need_Estesa"].ToString(); paragrafo.AreaProgettoDescrizione = rAreeeMonitorate["Need_Estesa"].ToString(); paragrafo.AreaProgettoCodice = rAreeeMonitorate["Need_Area"].ToString(); paragrafo.AreaProgettoSottoMonitoraggio = rAreeeMonitorate["areaprogettosottomonitoraggio"] == DBNull.Value ? false : Convert.ToBoolean(rAreeeMonitorate["areaprogettosottomonitoraggio"]); if (rAreeeMonitorate["Need_Area"].ToString().ToLower() != "inv") paragrafo.NomeProgetto = string.Empty; else // è un area di investimento quindi mi recupero il nome del progetto. { paragrafo.NomeProgetto = rAreeeMonitorate["Nome_Progetto"].ToString(); if (totaleProgettiInvestimento == 1 && rAreeeMonitorate["Nome_Progetto"].ToString().ToLower() == "progetto investimento") paragrafo.SottoTitolo = string.Empty; else paragrafo.SottoTitolo = rAreeeMonitorate["Nome_Progetto"].ToString(); paragrafo.NumeroProgettiInvestimento = drTotaleProgettiInvestimento.Length; // va indicizzato solo il primo dei paragrafi di investimento nel caso ci siano + progetti. // ogni progetto di investimento è considerato un paragrafo nuovo. if (numeroProgettiInvestimento > 0) paragrafo.Indicizzato = false; numeroProgettiInvestimento++; } AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); paragrafo.RipetiStampaElemento = true; // aggiunge il paragrafo al capitolo capitolo.Add(paragrafo); } } } else if ((rowParagrafi["queryOracleParagrafo"].ToString().ToLower() == "approfondimentorischio")) // duplica i paragrafi per ogni perimetro di approfondimento (vedi albero diagnosi sul capitolo analisi rischio). { #region Recupero dai vincoli le sezioni fatte dall'utente per quanto riguarda i perimetri di approfondimento. DataTable dtPerimetri = new DataTable(); dtPerimetri.Columns.Add("Perimetro", typeof(string)); if (tabellaVincoli.Select("CodiceVincoloApplicativo='PERIMETRO_COMPLESSIVO'").Length > 0) dtPerimetri.Rows.Add("PERIMETRO_COMPLESSIVO"); if (tabellaVincoli.Select("CodiceVincoloApplicativo='PERIMETRO_CASA'").Length > 0) dtPerimetri.Rows.Add("PERIMETRO_CASA"); if (tabellaVincoli.Select("CodiceVincoloApplicativo='PERIMETRO_TERZI'").Length > 0) dtPerimetri.Rows.Add("PERIMETRO_TERZI"); #endregion //CTable tbl = new CTable(); //tbl.LoadDatixMenu(codiceFiscale, codicePB, codiceRete, "DIAGNOSI"); //bool CustomerHaBFWallet = tbl.Diagnosi_CustomerHasBFWallet(codiceFiscale, codiceRete + codicePB); //bool CustomerHaPatrimonioTerzi = tbl.Diagnosi_CustomerHaPatrimonioTerzi(codiceFiscale, codiceRete + codicePB); string strIntermediario = string.Empty; // ciclo sulle selezioni di permitro fatte dall'utente foreach (DataRow drPerimetro in dtPerimetri.Rows) { if (drPerimetro["Perimetro"].ToString() != "PERIMETRO_TERZI") { // aggiungo il PERIMETRO_COMPLESSIVO solo se il cliente ha sia il PERIMETRO_CASA che il PERIMETRO_TERZI, ossia ha patrimonio BF (o SPI) e patrimonio Terzi if (drPerimetro["Perimetro"].ToString() == "PERIMETRO_COMPLESSIVO") { if (_patrimoniobfpresente && _patrimonioterzipresente) { paragrafo.Intermediario = drPerimetro["Perimetro"].ToString(); // settiamo l'intermediaro per passarlo a livello di sezione AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); } } else { paragrafo.Intermediario = drPerimetro["Perimetro"].ToString(); // settiamo l'intermediaro per passarlo a livello di sezione AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); } } else { foreach (DataRow drIntermediari in dsParam.Intermediari.Rows) { paragrafo.Intermediario = drIntermediari["Descrizione"].ToString(); // settiamo l'intermediaro per passarlo a livello di sezione AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); } } } // aggiunge il paragrafo al capitolo capitolo.Add(paragrafo); } else { if (capitolo.Intermediario.Length > 0) paragrafo.Intermediario = capitolo.Intermediario; AddSezioniToParagrafo(capitolo, paragrafo, tabellaDati, tabellaVincoli); // aggiunge il paragrafo al capitolo capitolo.Add(paragrafo); } } } /// /// Aggiunge le sezioni al paragrafo. /// Di ciascuna sezione recupera e imposta i vincoli settati a livello di database. /// /// /// /// /// private void AddSezioniToParagrafo(CapitoloReport capitolo, ParagrafoReport paragrafo, DataTable tabellaDati, DataTable tabellaVincoli) { //Recupero le sezioni per ogni paragrafo DataView viewSezioni = new DataView(tabellaDati); viewSezioni.RowFilter = "idParagrafo = " + paragrafo.Id.ToString() + " AND idCapitolo= " + capitolo.Id.ToString(); // aggiungere il filtro del capitolo DataTable tabellaSezioni = viewSezioni.ToTable(true, "idSezione", "codiceSezione", "titoloSezione", "testoSezione", "testoSezioneAlternativo", "notaSezione", "notaSezioneAlternativo", "queryOracleSezione", "indicizzatoSezione", "filtroSezione"); foreach (DataRow rowSezioni in tabellaSezioni.Rows) { SezioneReport sezione; sezione = new SezioneReport(rowSezioni["codiceSezione"].ToString(), rowSezioni); sezione.FiltroSezione = rowSezioni["filtroSezione"].ToString(); sezione.AreaProgettoDescrizione = paragrafo.AreaProgettoDescrizione; sezione.AreaProgettoCodice = paragrafo.AreaProgettoCodice; sezione.NomeProgetto = paragrafo.NomeProgetto; sezione.AreaProgettoSottoMonitoraggio = paragrafo.AreaProgettoSottoMonitoraggio; sezione.NumeroProgettiInvestimento = paragrafo.NumeroProgettiInvestimento; sezione.Intermediario = paragrafo.Intermediario; // recupero i vincoli della sezione e setto la proprietà vincolo della stessa. if (tabellaVincoli != null) { DataView viewVincoli = new DataView(tabellaVincoli); viewVincoli.RowFilter = ("SezioneFisica = '" + sezione.Codice.Replace("'", "''") + "'"); DataTable datatableVincoli = viewVincoli.ToTable("datatableVincoli"); // Gestione vincolo sezione S91 Tabella Var Proxati if (_issolounintermediario) datatableVincoli.ExtendedProperties.Add("ISSOLOUNINTERMEDIARIO", "true"); else datatableVincoli.ExtendedProperties.Add("ISSOLOUNINTERMEDIARIO", "false"); // Aggiungo i vincoli alla Sezione. sezione.ImpostaVincoli(datatableVincoli); } // Gestione personalizzata per le aree di risorse non allocate e dei conti correnti a saldo negativi e linea self. if (paragrafo.AreaProgettoCodice.ToLower() == "na" || paragrafo.AreaProgettoCodice.ToLower() == "ccnegativi" || paragrafo.AreaProgettoCodice.ToLower() == "lineaself") { if (paragrafo.AreaProgettoCodice.ToLower() == "na") { paragrafo.Titolo = "Risorse non allocate"; paragrafo.TestoIntroduttivo = "Nella tabella sono elencati i prodotti non ancora allocati sulle aree di bisogno."; } else if (paragrafo.AreaProgettoCodice.ToLower() == "ccnegativi") { paragrafo.Titolo = "Conti correnti a saldo negativo"; paragrafo.TestoIntroduttivo = string.Empty; } else if (paragrafo.AreaProgettoCodice.ToLower() == "lineaself") { paragrafo.Titolo = "Liquidità negativa ''Linea GP Self Fond''"; paragrafo.TestoIntroduttivo = string.Empty; } if (sezione.Codice == "S43BIS") { sezione.Titolo = string.Empty; paragrafo.Add(sezione); } } else paragrafo.Add(sezione); } } /// /// Recupera le aree di bisogno e popola AreeBisognoProgetto dell'oggetto DataSectionParameter /// con la lista delle aree di bisogno/progetto per la singola proposta /// /// private DataSet getAreeBisognoProgetti_Proposta() { DataTable tableareeBisogno; //tableareeBisogno = SectionManager.GetDataSection("Generator_getPropostaSpecs", dsParam); tableareeBisogno = BusinessManager.GetDataTableFromStoredProcedure_ConsulenzaEvoluta("REP_Prop_AreeBisogno", dsParam.ChiaveClientePB, dsParam.Proposta.Chiave); tableareeBisogno.TableName = "TabellaAreeBisogno"; dsAreeBisognoProgetto.Tables.Add(tableareeBisogno.Copy()); DataTable tableProgetti; //tableProgetti = SectionManager.GetDataSection("Generator_setCliente_for", dsParam); tableProgetti = BusinessManager.GetDataTableFromStoredProcedure_ConsulenzaEvoluta("REP_Prop_ProgettiInvestimento", dsParam.ChiaveClientePB, dsParam.Proposta.Chiave); tableProgetti.TableName = "TabellaProgetti"; dsAreeBisognoProgetto.Tables.Add(tableProgetti.Copy()); return dsAreeBisognoProgetto; } /// /// Sostituisce le variabili presenti nel testo (inidcate con $/...../$ con il valore corrispondente /// /// La stringa modificata private string loadVariabile(string testo) { string testoOriginale = testo; char[] define = { '$', '/', ',', '.' }; const char Space = ' '; char[] delimiters = new char[] { Space }; // split the string and then iterate over the // resulting array of strings if (testo != " ") foreach (string variabile in testo.Split(delimiters)) { string app = variabile.TrimStart(define); app = app.TrimEnd(define); switch (app) { #region Area case "Area": app = dsParam.Area; testoOriginale = testoOriginale.Replace("$/Area/$", dsParam.AreaEstesa); break; #endregion #region AreaProgetto case "AreaProgetto": app = dsParam.Area; if (app != "Inv") testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", dsParam.AreaEstesa); else testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", dsParam.Progetto); break; #endregion #region AreaProgettoA case "AreaProgettoA": app = dsParam.Area; if (app != "Inv") testoOriginale = testoOriginale.Replace("$/AreaProgettoA/$", "all’area di " + dsParam.AreaEstesa); else testoOriginale = testoOriginale.Replace("$/AreaProgettoA/$", "al progetto " + dsParam.Progetto); break; #endregion #region AreaProgettoD case "AreaProgettoD": app = dsParam.Area; if (app != "Inv") testoOriginale = testoOriginale.Replace("$/AreaProgettoD/$", "dell’area di " + dsParam.AreaEstesa); else testoOriginale = testoOriginale.Replace("$/AreaProgettoD/$", "del progetto " + dsParam.Progetto); break; #endregion #region Progetto case "Progetto": testoOriginale = string.Empty; app = dsParam.Progetto; //modifica ispb per pianificazione if (app.ToLower() != "progetto investimento") { testoOriginale = testoOriginale.Replace("$/Progetto/$", dsParam.Progetto); } break; #endregion #region Intermediario case "Intermediario": app = dsParam.Intermediario; if (dsParam.Intermediario == "Altro") testoOriginale = testoOriginale.Replace("$/Intermediario/$", "Altro intermediario"); else testoOriginale = testoOriginale.Replace("$/Intermediario/$", dsParam.Intermediario); break; #endregion #region Banca case "Banca": if (dsParam.CodiceRete == "F") testoOriginale = testoOriginale.Replace("$/Banca/$", "Banca Fideuram"); else testoOriginale = testoOriginale.Replace("$/Banca/$", "Intesa Sanpaolo Private Banking"); break; #endregion #region DataPianificazione case "DataPianificazione": string dataPianificazioneString = dsParam.Pianificazione.DataPianificazione.HasValue ? dsParam.Pianificazione.DataPianificazione.Value.ToShortDateString() : "n.d."; testoOriginale = testoOriginale.Replace("$/DataPianificazione/$", dataPianificazioneString); break; #endregion #region DataProposta //case "DataProposta": // //app = dsParam.DataFineProposta; // testoOriginale = testoOriginale.Replace("$/DataProposta/$", dsParam.Proposte.DataScadenzaString); // break; #endregion #region FontSize case "FontSize": testoOriginale = testoOriginale.Replace("$/FontSize/$", "font size, "); break; #endregion } } return testoOriginale; } /// /// Ritorna il nome esteso dell'area a seconda del codice area passato in input. /// /// /// private string getNomeArea(string codArea) { switch (codArea.ToUpper().Trim()) { case "INV": return "Investimento"; case "EXT": return "ExtraRendimento"; case "RIS": return "Riserva"; case "INN": return "Investimento non delegato"; case "PRE": return "Previdenza"; default: return ""; } } /// /// /// /// /// private int getIdReport(string tipoReport) { switch (tipoReport.ToUpper().Trim()) { case "DIAGNOSI": return 1; case "PIANIFICAZIONE": return 2; case "PROPOSTA": return 3; case "MONITORAGGIO": { if (Request.QueryString["monitoraggio_con_alberatura"] == "true") return 5; else return 4; } default: return 0; } } #region Metodi usati solo dal Report di Pianificazione /// /// Crea il report. /// Vecchia versione mantenuta per convenzione che si basa sull'XML. /// Attualmente solo il report di Pianificazione viene generato da questo codice. /// /// /// /// private bool createReport(DocumentPDF doc, string tipoReport) { int numberOfQUERYtags = 0; int numberOfQUERYtagsDatiSintetici = 0; int numberOfQUERYtagsInv = 0; string path = ""; try { string xmlFilename = ""; bool status = true; string sezione = ""; string combo = ""; bool flag = false; string tipo = ""; string titolo = ""; string testo = string.Empty; string ChapterTitolo = ""; string ChapterHeader = ""; XmlNode node; int idx = 0; int idy = 0; int idz = 0; //int indiceAreeBisogno = 0; Queue qp = new Queue(); elementoStampa es = new elementoStampa(); attributiElementoStampa aes = new attributiElementoStampa(); switch (tipoReport) { case "PIANIFICAZIONE": numberOfQUERYtagsInv = getPianificazioneSpecs(); xmlFilename = WebConfigParameter.getParameter("PIANIFICAZIONE"); break; } //ricaviamo le scelte del PB memorizzate nel DB e le inseriamo nell'opportuno template XML readXMLTemplate(xmlFilename); loadReportToPrint(idReport); fillTemplateWithValues(); switch (tipoReport) { case "PIANIFICAZIONE": //inserisco il "blocco" QUERY all'interno del preesistente XML di base if (numberOfQUERYtagsInv > 1) { for (int i = 0; i < numberOfQUERYtagsInv - 1; i++) { insertQUERYblockIntoXml("[@Value='Progetto']"); } } else if (numberOfQUERYtagsInv == 0) deleteQUERYblockIntoXml("QUERY[@Value='Investimento']"); if (numberOfQUERYtagsRis == 0) deleteQUERYblockIntoXml("QUERY[@Value='Riserva']"); if (numberOfQUERYtagsInn == 0) deleteQUERYblockIntoXml("QUERY[@Value='InvestimentoNonDelegato']"); break; } Guid guid = Guid.NewGuid(); string initDir = WebConfigParameter.getParameter("PathXML"); path = initDir + WebConfigParameter.getParameter("XMLDIR") + guid + ".xml"; //salvataggio file temporaneo docIN.Save(path); //ORA possiamo iniziare il processo di STAMPA del report con le scelte desiderate dal PB using (XmlReader reader = XmlReader.Create(path)) { XmlNode root = docIN.DocumentElement; while (reader.Read()) { string nodeName = reader.LocalName; switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element. switch (reader.Name) { case "SECTION": combo = ""; while (reader.MoveToNextAttribute()) // Read the attributes. switch (reader.Name) { case "Value": sezione = reader.Value; break; case "Titolo": titolo = reader.Value; break; case "combo": combo = reader.Value; break; case "tipo": tipo = reader.Value; break; case "testo": testo = reader.Value; break; } DatiSezione sec; DataSectionResult data = new DataSectionResult(); sec = new DatiSezione(doc); sec.Tipo = tipo; if (combo != "") { int i = 0; XmlNodeList nodeList = root.SelectNodes("descendant::" + combo); while (i < nodeList.Count) { node = nodeList[i]; if (node != null && node.Attributes["flag"].Value == "1") { sec.Tipo = "combo"; } i++; } } sec.Sezione = sezione; sec.Titolo = titolo; data = loadDataSection(sec); if (data.Esito > 0) { sec.SetDataSet(data.DatiSezione); SvuotaCoda(qp, doc, sec); status = loadSection(sec); } combo = ""; break; case "COPERT": while (reader.MoveToNextAttribute()) // Read the attributes. switch (reader.Name) { case "flag": if (reader.Value != "1") reader.Skip(); else flag = true; break; case "Titolo": titolo = reader.Value; break; } if (flag) { XmlNodeList nodeList = root.SelectNodes("descendant::" + "ESNOCL"); node = nodeList[0]; if (node != null && node.Attributes["flag"].Value == "1") doc.creaCopertina(tipoReport, false); else doc.creaCopertina(tipoReport, true); } flag = false; break; case "INDICE": while (reader.MoveToNextAttribute()) // Read the attributes. switch (reader.Name) { case "flag": if (reader.Value != "1") reader.Skip(); else flag = true; break; } if (flag) doc.creaIndice(); flag = false; break; case "GLOSSA": while (reader.MoveToNextAttribute()) // Read the attributes. switch (reader.Name) { case "flag": if (reader.Value != "1") reader.Skip(); else flag = true; break; } if (flag) doc.Glossario = true; break; case "QUERY": while (reader.MoveToNextAttribute()) // Read the attributes. switch (reader.Name) { case "CodArea": if (tipoReport.ToLower() == "monitoraggio") { _Area = reader.Value; dsParam.Area = _Area; dsParam.AreaEstesa = getNomeArea(_Area); } break; case "Value": //N.B. In tal modo NON e' possibile avere "Value" con lo stesso nome su 2 o piu' XML... query = reader.Value; switch (query) { case "Intermediario": //x Diagnosi if (tableIntermediari.Rows.Count > 0) dsParam.Intermediario = tableIntermediari.Rows[idx++][0].ToString(); break; case "Progetto": //x Pianificazione, Proposta if (tipoReport.ToLower() == "monitoraggio") { dsParam.Area = _Area; dsParam.AreaEstesa = getNomeArea(_Area); if (dsParam.Area == "Inv" && dtProgetto.Rows.Count > 0) { dsParam.Progetto = dtProgetto.Rows[idy]["nome_progetto"].ToString(); dsDatiMonitoraggio.NomeProgetto = dtProgetto.Rows[idy]["nome_progetto"].ToString(); idy += 1; } else dsParam.Progetto = ""; } else { if (dsParam.Area == "Inv" && dtProgetto.Rows.Count > 0) { dsParam.Progetto = dtProgetto.Rows[idy]["nome_progetto"].ToString(); dsDatiMonitoraggio.NomeProgetto = dtProgetto.Rows[idy]["nome_progetto"].ToString(); idy += 1; } else dsParam.Progetto = ""; } break; case "Investimento": //x Pianificazione dsParam.Area = "Inv"; dsParam.AreaEstesa = "Investimento delegato"; break; case "InvestimentoNonDelegato": //x Pianificazione dsParam.Area = "Inn"; dsParam.AreaEstesa = "Investimento non delegato"; break; case "Riserva": //x Pianificazione dsParam.Area = "Ris"; dsParam.Progetto = ""; dsParam.AreaEstesa = "Riserva"; break; case "AreaBisogno": //x Proposta if (dtArea.Rows.Count > 0) { if (tipoReport.ToLower() == "monitoraggio") { //if (indiceAreeBisogno <= numberOfQUERYtagsDatiSintetici - 1) //{ dsDatiMonitoraggio.Area = _Area;// dtArea.Rows[indiceAreeBisogno]["need_area"].ToString(); dsParam.Area = dsDatiMonitoraggio.Area; dsParam.AreaEstesa = getNomeArea(_Area);//dtArea.Rows[indiceAreeBisogno]["need_estesa"].ToString(); //indiceAreeBisogno += 1; //} } else { dsParam.Area = dtArea.Rows[idz]["need_breve"].ToString(); dsParam.AreaEstesa = dtArea.Rows[idz]["need_estesa"].ToString(); idz += 1; } idy = 0; } break; default: break; } break; } break; default: //elimino gli elementi non stampati se trovo il tag di chiusura nell'XML foreach (elementoStampa elem in qp) { if (elem.tagName == nodeName) elem.alAttributi.Clear(); } while (reader.MoveToNextAttribute()) // Read the attributes. switch (reader.Name) { case "flag": if (reader.Value != "1") reader.Skip(); break; case "Titolo": titolo = reader.Value; if (titolo != "") { if (QuerySection) titolo += Intermediario; aes.titolo = "Titolo"; aes.valore = loadVariabile(titolo); es.tagName = nodeName; es.alAttributi = new ArrayList(); es.alAttributi.Add(aes); qp.Enqueue(es); } break; case "titolo": titolo = reader.Value; if (titolo != "") { if (QuerySection) titolo += Intermediario; aes.titolo = "titolo"; aes.valore = loadVariabile(titolo); es.tagName = nodeName; es.alAttributi = new ArrayList(); es.alAttributi.Add(aes); qp.Enqueue(es); } break; case "SezTitolo": titolo = reader.Value; if (titolo != "") { if (QuerySection) titolo += Intermediario; aes.titolo = "SezTitolo"; aes.valore = loadVariabile(titolo); es.tagName = nodeName; es.alAttributi = new ArrayList(); es.alAttributi.Add(aes); qp.Enqueue(es); } break; case "ChapterTitolo": ChapterTitolo = reader.Value; if (ChapterTitolo != "") { if (ChapterTitolo == "Pianificazione orizzontale") { doc.addPage(); } if (QuerySection) ChapterTitolo += Intermediario; aes.titolo = "ChapterTitolo"; aes.valore = loadVariabile(ChapterTitolo); es.tagName = nodeName; es.alAttributi = new ArrayList(); es.alAttributi.Add(aes); qp.Enqueue(es); } break; case "testo": case "ChapterHeader": ChapterHeader = reader.Value; if (ChapterHeader != "") { if (QuerySection) ChapterHeader += Intermediario; aes.titolo = "ChapterHeader"; aes.valore = loadVariabile(ChapterHeader); es.tagName = nodeName; es.alAttributi = new ArrayList(); es.alAttributi.Add(aes); qp.Enqueue(es); } break; case "ChapterHeaderVariable": // valido SOLO per il report di MONITORAGGIO ChapterHeader = reader.Value; string _areaEstesa = string.Empty; switch (_Area.ToUpper()) { case "RIS": _areaEstesa = "Riserva"; break; case "INV": _areaEstesa = "Investimento"; break; case "INN": _areaEstesa = "Investimento non delegato"; break; case "EXT": _areaEstesa = "ExtraRendimeno"; break; default: _areaEstesa = string.Empty; break; } //DataTable dt =_datiComuni.DatiMonitoraggio.DatiSintetici.DataTableDatiSinteticiBIS; if (_Area.ToUpper() == "RIS" || _Area.ToUpper() == "INV" & tipoReport.ToUpper() == "MONITORAGGIO") ChapterHeader = "Di seguito si riporta il valore complessivo dei prodotti attualmente destinati all'area " + _areaEstesa + " (controvalore attuale) ed il relativo valore di rischio (VaR attuale). Tali valori vengono quindi confrontati rispettivamente con il controvalore indicato in Piramide Modello e con il livello di rischio definito in sede di pianificazione."; else ChapterHeader = "Di seguito si riporta il valore complessivo dei prodotti attualmente destinati all'area " + _areaEstesa + " (controvalore attuale) ed il relativo valore di rischio (VaR attuale). Tali valori vengono quindi confrontati rispettivamente con il controvalore indicato in Piramide Modello"; if (ChapterHeader != "") { if (QuerySection) ChapterHeader += Intermediario; aes.titolo = "ChapterHeader"; aes.valore = loadVariabile(ChapterHeader); es.tagName = nodeName; es.alAttributi = new ArrayList(); es.alAttributi.Add(aes); qp.Enqueue(es); } break; } break; } break; case XmlNodeType.Text: //Display the text in each element. break; case XmlNodeType.EndElement: //Display the end of the element. foreach (elementoStampa elem in qp) { if (elem.tagName == nodeName) elem.alAttributi.Clear(); } break; default: break; } } } return status; } finally { //cancellazione file temporaneo if (File.Exists(path)) { File.Delete(path); } } } /// /// Utilizzato solo dal report di pianificazione /// /// /// /// private void SvuotaCoda(Queue qp, DocumentPDF doc, DatiSezione sezione) { while (qp.Count > 0) { elementoStampa es = (elementoStampa)qp.Dequeue(); attributiElementoStampa chapter = new attributiElementoStampa(); chapter.titolo = "ChapterHeader"; foreach (attributiElementoStampa aes in es.alAttributi) switch (aes.titolo) { case "Titolo": doc.setPageTitolo(aes.valore); break; case "titolo": if (qp.Count != 0) doc.setTitolo(aes.valore, this.loadMinimumHeight(sezione) + 50); else doc.setTitolo(aes.valore, this.loadMinimumHeight(sezione)); break; case "SezTitolo": if (qp.Count != 0) doc.setSezTitolo(aes.valore, this.loadMinimumHeight(sezione) + 50); else doc.setSezTitolo(aes.valore, this.loadMinimumHeight(sezione)); break; case "ChapterTitolo": if (qp.Count != 0) doc.setChapterTitolo(aes.valore, this.loadMinimumHeight(sezione) + 50); else doc.setChapterTitolo(aes.valore, this.loadMinimumHeight(sezione)); break; case "ChapterHeader": doc.setChapterHeader(aes.valore, this.loadMinimumHeight(sezione)); break; } } } /// /// Disegna sul documento PDF la sezione selezionata /// Attualmente sono utilizzate solo le sezioni per il report di pianificazione. /// Le altre possono essere eliminate. /// /// /// private bool loadSection(DatiSezione sec) { switch (sec.Sezione) { #region S1 case "S1": sec.setCodiceRete(codiceRete); sec.setParam(dsParam); S1 sezione1 = new S1(); sezione1.setTitolo(sec.Titolo); sezione1.writeSezione(sec); break; #endregion #region S2 case "S2": sec.setParam(dsParam); S2 sezione2 = new S2(); if (hasSelectedDistribuzioneAssetClass) sezione2.HasSelectedPatrimNonRap = true; sezione2.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione2.writeSezioneCombo(sec); else sezione2.writeSezione(sec); break; #endregion #region S3 case "S3": sec.setParam(dsParam); S3 sezione3 = new S3(); if (hasSelectedDistribuzioneAssetClass) sezione3.HasSelectedPatrimNonRap = true; if (sec.Tipo == "combo") sezione3.writeSezioneCombo(sec); else { sezione3.setTitolo(sec.Titolo); sezione3.writeSezione(sec); } break; #endregion #region S4 case "S4": sec.setParam(dsParam); S4 sezione4 = new S4(); sezione4.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione4.writeSezioneCombo(sec); else sezione4.writeSezione(sec); break; #endregion #region S5 case "S5": sec.setParam(dsParam); S5 sezione5 = new S5(); if (sec.Tipo == "combo") sezione5.writeSezioneCombo(sec); else { sezione5.setTitolo(sec.Titolo); sezione5.writeSezione(sec); } break; #endregion #region S6 case "S6": sec.setParam(dsParam); S6 sezione6 = new S6(); sezione6.setTitolo(sec.Titolo); sezione6.TipologiaReport = TipoReport.PIANIFICAZIONE; sezione6.writeSezioneIsto(sec); break; #endregion #region S10 case "S10": sec.setParam(dsParam); S10 sezione10 = new S10(); sezione10.setTitolo(sec.Titolo); if (hasSelectedDistribuzioneAssetClass) sezione10.HasSelectedPatrimNonRap = true; if (sec.Tipo == "combo") sezione10.writeSezioneCombo(sec); else sezione10.writeSezione(sec); break; #endregion #region S11 case "S11": sec.setParam(dsParam); S11 sezione11 = new S11(); if (hasSelectedDistribuzioneAssetClass) sezione11.HasSelectedPatrimNonRap = true; if (sec.Tipo == "combo") sezione11.writeSezioneCombo(sec); else { sezione11.setTitolo(sec.Titolo); sezione11.writeSezione(sec); } break; #endregion #region S12 case "S12": sec.setParam(dsParam); S12 sezione12 = new S12(); sezione12.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione12.writeSezioneCombo(sec); else sezione12.writeSezione(sec); break; #endregion #region S13 case "S13": sec.setParam(dsParam); S13 sezione13 = new S13(); if (sec.Tipo == "combo") sezione13.writeSezioneCombo(sec); else { sezione13.setTitolo(sec.Titolo); sezione13.writeSezione(sec); } break; #endregion #region S14 case "S14": S14 sezione14 = new S14(); if (hasSelectedDistribuzioneAssetClass) sezione14.HasSelectedPatrimNonRap = true; if (hasSelectedPoliticaInv) sezione14.HasSelectedPatrimNonRap = true; sec.setParam(dsParam); sezione14.setTitolo(sec.Titolo); sezione14.writeSezione(sec); break; #endregion #region S15 case "S15": S15 sezione15 = new S15(); sezione15.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione15.writeSezioneCombo(sec); else sezione15.writeSezione(sec); break; #endregion #region S15BIS case "S15BIS": S15BIS sezione15BIS = new S15BIS(); if (sec.Tipo == "combo") sezione15BIS.writeSezioneCombo(sec); else { sezione15BIS.setTitolo(sec.Titolo); sezione15BIS.writeSezione(sec); } break; #endregion #region S16 case "S16": S16 sezione16 = new S16(); sezione16.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione16.writeSezioneCombo(sec); else sezione16.writeSezione(sec); break; #endregion #region S17 case "S17": S17 sezione17 = new S17(); if (sec.Tipo == "combo") sezione17.writeSezioneCombo(sec); else { sezione17.setTitolo(sec.Titolo); sezione17.writeSezione(sec); } break; #endregion #region S18 case "S18": sec.setParam(dsParam); S18 sezione18 = new S18(); sezione18.setLegend(); sezione18.setIndice(); sezione18.setTitolo(sec.Titolo); sezione18.writeSezione(sec); break; #endregion #region S19 case "S19": S19 sezione19 = new S19(); sezione19.setTitolo(sec.Titolo); sezione19.writeSezione(sec); break; #endregion #region S19BIS case "S19BIS": S19BIS sezione19BIS = new S19BIS(); sezione19BIS.setTitolo(sec.Titolo); sezione19BIS.writeSezione(sec); break; #endregion #region S23 case "S23": S23 sezione23 = new S23(); sezione23.setTitolo(sec.Titolo); if (dsParam.ProfiloCliente.StatoProfilo == TipologiaStatoProfilo.ATTIVO) sezione23.writeSezione(sec); else sezione23.writeSezioneSenzaProfilo(sec); break; #endregion #region S25 case "S25": if (!dsParam.modalitàAnonima) { S25 sezione25 = new S25(); sezione25.setTitolo(sec.Titolo); sezione25.writeSezione(sec); } break; #endregion #region S26 case "S26": S26 sezione26 = new S26(); sezione26.setTitolo(sec.Titolo); sezione26.writeSezione(sec); break; #endregion #region S27 case "S27": S27 sezione27 = new S27(); sezione27.setTitolo(sec.Titolo); sezione27.writeSezione(sec); break; #endregion #region S28 case "S28": S28 sezione28 = new S28(); sezione28.setTitolo(sec.Titolo); sezione28.writeSezione(sec); break; #endregion #region S29 case "S29": S29 sezione29 = new S29(); sezione29.setTitolo(sec.Titolo); sezione29.writeSezione(sec); break; #endregion #region S30 case "S30": S30 sezione30 = new S30(); sezione30.setTitolo(sec.Titolo); sezione30.writeSezione(sec); break; #endregion #region S31 case "S31": S31 sezione31 = new S31(); sezione31.setTitolo(sec.Titolo); if (sec.Tipo == "torta") sezione31.writeSezioneTorta(sec); else sezione31.writeSezione(sec); break; #endregion #region S32 case "S32": S32 sezione32 = new S32(); if (hasSelectedDistribuzioneAssetClass) sezione32.HasSelectedPatrimNonRap = true; sezione32.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione32.writeSezioneCombo(sec); else sezione32.writeSezione(sec); break; #endregion #region S33 case "S33": S33 sezione33 = new S33(); if (hasSelectedDistribuzioneAssetClass) sezione33.HasSelectedPatrimNonRap = true; if (sec.Tipo == "combo") sezione33.writeSezioneCombo(sec); else { sezione33.setTitolo(sec.Titolo); sezione33.writeSezione(sec); } break; #endregion #region S34 case "S34": S34 sezione34 = new S34(); sezione34.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione34.writeSezioneCombo(sec); else sezione34.writeSezione(sec); break; #endregion #region S35 case "S35": S35 sezione35 = new S35(); if (sec.Tipo == "combo") sezione35.writeSezioneCombo(sec); else { sezione35.setTitolo(sec.Titolo); sezione35.writeSezione(sec); } break; #endregion #region S36 Profilo di rischio case "S36": S36 sezione36 = new S36(); sec.setParam(dsParam); sezione36.setTitolo(sec.Titolo); sezione36.writeSezione(sec); break; #endregion #region S37 case "S37": S37 sezione37 = new S37(); sezione37.setTitolo(sec.Titolo); sezione37.writeSezione(sec); break; #endregion #region S38 case "S38": S38 sezione38 = new S38(); sezione38.setTitolo(sec.Titolo); sezione38.writeSezione(sec); break; #endregion #region S39 case "S39": S39 sezione39 = new S39(); sezione39.setTitolo(sec.Titolo); sezione39.writeSezione(sec); break; #endregion #region S40 case "S40": S40 sezione40 = new S40(); sezione40.setTitolo(sec.Titolo); sezione40.writeSezione(sec); break; #endregion #region S41 case "S41": S41 sezione41 = new S41(); sezione41.setTitolo(sec.Titolo); sezione41.writeSezione(sec); break; #endregion #region S42 case "S42": S42 sezione42 = new S42(); sezione42.setTitolo(sec.Titolo); sezione42.writeSezione(sec); break; #endregion #region S43 case "S43": S43 sezione43 = new S43(); sezione43.TipologiaReport = TipoReport.PIANIFICAZIONE; // passa qui per il solo report di pianificazione. sec.setParam(dsParam); //switch (sec.Tipo) //{ // case "combo": // significa che l'utente ha spuntato Inserisci Performance (da capire che significa combo..era difficile mettere una stringa piu parlante ?) // sezione43.MostraRendimentoDaInizioAnno = true; // sezione43.MostraRendimentoDaDataSottoscrizione = true; // break; //} sezione43.VersatoNetto_UtilePerdita = true; sezione43.setTitolo(sec.Titolo); sezione43.writeSezione(sec); break; #endregion #region S44 case "S44": S44 sezione44 = new S44(); sezione44.setTitolo(sec.Titolo); if (sec.Tipo == "combo") { sezione44.MostraRendimentoDaDataSottoscrizione = true; sezione44.MostraRendimentoDaInizioAnno = true; } switch (tipoReport.ToUpper()) { case "MONITORAGGIO": sezione44.TipologiaReport = TipoReport.MONITORAGGIO; break; case "PIANIFICAZIONE": sezione44.TipologiaReport = TipoReport.PIANIFICAZIONE; break; case "PROPOSTA": sezione44.TipologiaReport = TipoReport.PROPOSTA; break; default: break; } sezione44.writeSezione(sec); break; #endregion #region S45 case "S45": S45 sezione45 = new S45(); sezione45.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione45.VersatoNetto_UtilePerdita = true; switch (tipoReport.ToUpper()) { case "MONITORAGGIO": sezione45.TipologiaReport = TipoReport.MONITORAGGIO; break; case "PIANIFICAZIONE": sezione45.TipologiaReport = TipoReport.PIANIFICAZIONE; break; case "PROPOSTA": sezione45.TipologiaReport = TipoReport.PROPOSTA; break; default: break; } sezione45.writeSezione(sec); break; #endregion #region S46 case "S46": S46 sezione46 = new S46(); sezione46.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione46.WithPerformance = true; sezione46.writeSezione(sec); break; #endregion #region S47 case "S47": sec.setParam(dsParam); S47 sezione47 = new S47(); sezione47.Titolo = sec.Titolo; sezione47.TipologiaReport = TipoReport.PIANIFICAZIONE; // se viene eseguito questo codice di sicuro si sta stampando il report di PIANIFICAZIONE sezione47.writeSezione(sec); break; #endregion #region S48 case "S48": sec.setParam(dsParam); S48 sezione48 = new S48(); sezione48.setTitolo(sec.Titolo); sezione48.writeSezione(sec); break; #endregion #region S49 case "S49": sec.setParam(dsParam); S49 sezione49 = new S49(); sezione49.setTitolo(sec.Titolo); sezione49.writeSezione(sec); break; #endregion #region S50 case "S50": sec.setParam(dsParam); S50 sezione50 = new S50(); sezione50.setTitolo(sec.Titolo); sezione50.writeSezione(sec); break; #endregion #region S51 case "S51": sec.setParam(dsParam); S51 sezione51 = new S51(); sezione51.setTitolo(sec.Titolo); sezione51.writeSezione(sec); break; #endregion #region S56 case "S56": sec.setParam(dsParam); S56 sezione56 = new S56(); sezione56.setTitolo(sec.Titolo); sezione56.writeSezione(sec); break; #endregion #region S57 case "S57": //DataSetS57 ds57 = new DataSetS57(); //if (sec.getDataSet().GetType() == ds57.GetType()) //{ // S57 sezione57 = new S57(); // sezione57.setTitolo(sec.Titolo); // sezione57.writeSezione(sec); //} //else //{ // //NEL CASO IN CUI NON CI SONO I DATI PER LA S57 // sec.setParam(dsParam); // sezione56 = new S56(); // sezione56.setTitolo("Piramide Attuale con rischio relativo"); // sezione56.writeSezione(sec); //} // 25/01/10 d.lisena. // Hanno richiesto la stampa della S57BIS al posto della S57. Togliere i commenti alla parte sopra per ripristinare la vecchia situiazione DataSetS57BIS ds57bis = new DataSetS57BIS(); if (sec.getDataSet().GetType() == ds57bis.GetType()) { S57BIS sezione57BIS = new S57BIS(); //sezione57BIS.setTitolo(sec.Titolo); sezione57BIS.TestoTitolo = sec.Titolo; sezione57BIS.TestoIntroduttivo = Resources.GlobalResource.S57BIS_TestoIntroduttivo_Solo_Pianificazione; sezione57BIS.writeSezione(sec); } else { //NEL CASO IN CUI NON CI SONO I DATI PER LA S57 sec.setParam(dsParam); sezione56 = new S56(); sezione56.setTitolo("Piramide Attuale con rischio relativo"); sezione56.writeSezione(sec); } break; #endregion //#region S58 //case "S58": // sec.setParam(dsParam); // sec.setCodiceRete(codiceRete); // S58 sezione58 = new S58(); // sezione58.setTitolo(sec.Titolo); // sezione58.writeSezione(sec); // break; //#endregion #region S59 case "S59": sec.setCodiceRete(codiceRete); //N59 nota59 = new N59(); //nota59.writeSezione(sec); sec.setParam(dsParam); S59 sezione59 = new S59(); sezione59.setTitolo(sec.Titolo); sezione59.writeSezione(sec); break; #endregion #region S60 case "S60": sec.setCodiceRete(codiceRete); sec.setParam(dsParam); N60 nota60 = new N60(); nota60.writeSezione(sec); S60 sezione60 = new S60(); sezione60.setTitolo(sec.Titolo); sezione60.writeSezione(sec); break; #endregion #region S61 case "S61": sec.setCodiceRete(codiceRete); sec.setParam(dsParam); N61 nota61 = new N61(); nota61.writeSezione(sec); S61 sezione61 = new S61(); sezione61.setTitolo(sec.Titolo); sezione61.writeSezione(sec); break; #endregion #region S63 case "S63": S63 sezione63 = new S63(); sezione63.setTitolo(sec.Titolo); sezione63.writeSezione(sec); break; #endregion #region S64 case "S64": S64 sezione64 = new S64(); sec.setParam(dsParam); sezione64.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione64.IncludiScenarioMedio = true; sezione64.writeSezione(sec); break; #endregion #region S65 case "S65": S65 sezione65 = new S65(); sezione65.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione65.IncludiScenarioMedio = true; sezione65.writeSezione(sec); break; #endregion #region S66 case "S66": S66 sezione66 = new S66(); sezione66.setTitolo(sec.Titolo); sezione66.writeSezione(sec); break; #endregion #region S67 case "S67": S67 sezione67 = new S67(); sezione67.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione67.writeSezioneCombo(sec); else sezione67.writeSezione(sec); break; #endregion #region S68 case "S68": S68 sezione68 = new S68(); sezione68.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione68.writeSezioneCombo(sec); else sezione68.writeSezione(sec); break; #endregion #region S70 case "S70": sec.setParam(dsParam); S70 sezione70 = new S70(); sezione70.writeSezione(sec); break; #endregion #region S71 case "S71": S71 sezione71 = new S71(); if (hasSelectedDistribuzioneAssetClass) sezione71.HasSelectedPatrimNonRap = true; if (sec.Tipo == "confronto") if (dsParam.Area == "Inv" || dsParam.Area == "Ris") { sezione71.setTitolo(sec.Titolo); sezione71.writeSezioneModelloCombo(sec); } else { sezione71.setTitolo(sec.Titolo); sezione71.writeSezione(sec); } else { sezione71.setTitolo(sec.Titolo); if (sec.Tipo == "combo") sezione71.writeSezioneCombo(sec); else sezione71.writeSezione(sec); } break; #endregion #region S71mod case "S71mod": S71 sezione71mod = new S71(); if (dsParam.Area == "Inv" || dsParam.Area == "Ris") { if (tipoReport == "MONITORAGGIO") sezione71mod.Header = sec.Testo; sezione71mod.setTitolo(sec.Titolo); sezione71mod.writeSezioneModello(sec); } break; #endregion #region S71BIS case "S71BIS": S71BIS sezione71BIS = new S71BIS(); if (hasSelectedDistribuzioneAssetClass) sezione71BIS.HasSelectedPatrimNonRap = true; if (sec.Tipo == "confronto") if (dsParam.Area == "Inv" || dsParam.Area == "Ris") { sezione71BIS.setTitolo(sec.Titolo); sezione71BIS.writeSezioneCombo(sec); } else { sezione71BIS.setTitolo(sec.Titolo); sezione71BIS.writeSezione(sec); } else { if (sec.Tipo == "combo") sezione71BIS.writeSezioneCombo(sec); else { sezione71BIS.setTitolo(sec.Titolo); sezione71BIS.writeSezione(sec); } } break; #endregion #region S71BISmod case "S71BISmod": S71BIS sezione71BISmod = new S71BIS(); if (dsParam.Area == "Inv" || dsParam.Area == "Ris") { if (tipoReport == "MONITORAGGIO") sezione71BISmod.Header = sec.Testo; sezione71BISmod.setTitolo(sec.Titolo); sezione71BISmod.writeSezioneModello(sec); } break; #endregion //#region S72 //case "S72": // sec.setParam(dsParam); // S72 sezione72 = new S72(); // if (sec.Tipo == "combo") // sezione72.includiRischio = true; // sezione72.writeSezione(sec); // break; //#endregion #region S73 case "S73": S73 sezione73 = new S73(); sezione73.setTitolo(sec.Titolo); sezione73.writeSezione(sec); break; #endregion #region S75 case "S75": S75 sezione75 = new S75(); sezione75.setTitolo(sec.Titolo); sec.setParam(dsParam); if (sec.Tipo == "combo" || tipoReport != "DIAGNOSI") sezione75.writeSezione(sec); break; #endregion //#region S75BIS //case "S75BIS": // S75BIS sezione75BIS = new S75BIS(); // sec.setParam(dsParam); // sezione75BIS.setTitolo(sec.Titolo); // sezione75BIS.TestoSezione = ""; // sezione75BIS.writeSezione(sec); // break; //#endregion #region S76 case "S76": S76 sezione76 = new S76(); switch (tipoReport.ToUpper()) { case "MONITORAGGIO": sezione76.TipologiaReport = TipoReport.MONITORAGGIO; break; case "PIANIFICAZIONE": sezione76.TipologiaReport = TipoReport.PIANIFICAZIONE; break; case "PROPOSTA": sezione76.TipologiaReport = TipoReport.PROPOSTA; break; default: break; } sezione76.setTitolo(sec.Titolo); sezione76.writeSezione(sec); break; #endregion #region S76BIS case "S76BIS": S76 sezione76BIS = new S76(S76.EmodalitaRappresentazione.alternativa); switch (tipoReport.ToUpper()) { case "MONITORAGGIO": sezione76BIS.TipologiaReport = TipoReport.MONITORAGGIO; break; case "PIANIFICAZIONE": sezione76BIS.TipologiaReport = TipoReport.PIANIFICAZIONE; break; case "PROPOSTA": sezione76BIS.TipologiaReport = TipoReport.PROPOSTA; break; default: break; } sezione76BIS.setTitolo(sec.Titolo); sezione76BIS.writeSezione(sec); break; #endregion #region S77 case "S77": S77 sezione77 = new S77(); sezione77.setTitolo(sec.Titolo); sezione77.writeSezione(sec); break; #endregion #region S77BIS case "S77BIS": S77 sezione77BIS = new S77(S77.EmodalitaRappresentazione.alternativa); sezione77BIS.setTitolo(sec.Titolo); sezione77BIS.writeSezione(sec); break; #endregion #region S78 case "S78": S78 sezione78 = new S78(); sezione78.Titolo = sec.Titolo; sezione78.writeSezione(sec); break; #endregion #region S79 case "S79": S79 sezione79 = new S79(); sezione79.Titolo = sec.Titolo; sezione79.writeSezione(sec); break; #endregion #region S87 case "S87": S87 sezione87 = new S87(); if (hasSelectedPoliticaInv) sezione87.HasSelectedPatrimNonRap = true; sezione87.setTitolo(sec.Titolo); sezione87.writeSezione(sec); break; #endregion case "S170": //toDo //S170 sezione170 = new S170(); //sezione73.setTitolo(sec.Titolo); //sezione73.writeSezione(sec); break; #region NProposta case "NProposta": NProposta Nota = new NProposta(); Nota.writeSezione(sec); break; #endregion #region NProgetti case "NProgetti": NProgetti NotaP = new NProgetti(); NotaP.writeSezione(sec); break; #endregion default: //return false; break; } return true; } /// /// Carica i dati del datasect della sezione /// Sono state lasciate qui solo le sezioni interessate dal report di pianificazione. /// /// Nome della sezione da caricare /// private DataSectionResult loadDataSection(DatiSezione sec) { DataSectionResult dsResult = new DataSectionResult(); if (ClassLibraryWS.Debug.iSDebug) { //Se in debug scrivo nel log C:\ISPBLog\log.txt ClassLibraryWS.Debug.ScriviLog(" Generator.aspx.cs.LoadDataSection() _codice= " + sec.Sezione); } switch ("DS" + sec.Sezione) { #region COPERTINA INDICE GLOSSARIO case "DSCOPERTINA": if (sec.Tipo == "ESNOC") sec.getPDF().creaCopertina(tipoReport, false); else sec.getPDF().creaCopertina(tipoReport, true); break; case "DSINDICE": sec.getPDF().creaIndice(); break; case "DSGLOSSARIO": sec.getPDF().Glossario = true; break; #endregion #region DSS1 case "DSS1": IDataSection s1 = new DSS1PatrimonioComplessivo(); dsResult = s1.getDataSection(dsParam); break; #endregion #region DSS6 case "DSS6": DSS6PatrimonioFinanziario s6 = new DSS6PatrimonioFinanziario(); dsResult = s6.getDataSection(dsParam); break; #endregion #region DSS18 case "DSS18": DSS18PatrimonioFinanziarioRischio s18 = new DSS18PatrimonioFinanziarioRischio(); if (sec.Tipo == "onlyBF") s18.onlyBF = true; dsResult = s18.getDataSection(dsParam); break; #endregion #region DSS36 case "DSS36": DSS36ProfiloRischio s36 = new DSS36ProfiloRischio(); dsResult = s36.getDataSection(dsParam); break; #endregion #region DSS43 case "DSS43": DSS43ProdottiAreeBisogno s43 = new DSS43ProdottiAreeBisogno(); dsResult = s43.getDataSection(dsParam); break; #endregion #region DSS47 case "DSS47": DSS47ContoCorrenteBF s47 = new DSS47ContoCorrenteBF(); dsResult = s47.getDataSection(dsParam); break; #endregion #region DSS56 case "DSS56": DSS56PatrimonioBFAreeBisogno s56 = new DSS56PatrimonioBFAreeBisogno(); dsResult = s56.getDataSection(dsParam); break; #endregion #region DSS57 case "DSS57": //DSS57ConfrontoPiramidi s57 = new DSS57ConfrontoPiramidi(); //dsResult = s57.getDataSection(dsParam); //if (dsResult.Esito == 0) //{ // //NEL CASO IN CUI NON CI SONO I DATI PER LA S57 // s56 = new DSS56PatrimonioBFAreeBisogno(); // dsResult = s56.getDataSection(dsParam); //} // 25/01/10 d.lisena. // Hanno richiesto la stampa della S57BIS al posto della S57. Togliere i commenti alla parte sopra per ripristinare la vecchia situiazione DSS57BISConfrontoPiramideAttualeModello s57bis = new DSS57BISConfrontoPiramideAttualeModello(); ParametriReport param = new ParametriReport(sec.getPDF()); param.DataSectionParameter = dsParam; dsResult = s57bis.getDataSection(param); if (dsResult.Esito == 0) { //NEL CASO IN CUI NON CI SONO I DATI PER LA S57 s56 = new DSS56PatrimonioBFAreeBisogno(); dsResult = s56.getDataSection(dsParam); } break; #endregion //#region DSS58 //case "DSS58": // DSS58PatrimonioComplessivo s58 = new DSS58PatrimonioComplessivo(); // dsResult = s58.getDataSection(dsParam); // break; //#endregion #region DSS59 case "DSS59": DSS59PiramidePianificazione s59 = new DSS59PiramidePianificazione(); dsResult = s59.getDataSection(dsParam); break; #endregion #region DSS60 case "DSS60": DSS60ConfrontoPiramidiModPian s60 = new DSS60ConfrontoPiramidiModPian(); dsResult = s60.getDataSection(dsParam); break; #endregion #region DSS61 case "DSS61": DSS61ConfrontoPiramideAttualePian s61 = new DSS61ConfrontoPiramideAttualePian(); dsResult = s61.getDataSection(dsParam); break; #endregion #region DSS63 case "DSS63": DSS63IndicatoriArea s63 = new DSS63IndicatoriArea(); dsResult = s63.getDataSection(dsParam); break; #endregion #region DSS64 case "DSS64": DSS64ConoEvoluzioneRicchezza s64 = new DSS64ConoEvoluzioneRicchezza(); dsResult = s64.getDataSection(dsParam); break; #endregion #region DSS65 case "DSS65": DSS65IndicatoriCrescita s65 = new DSS65IndicatoriCrescita(); dsResult = s65.getDataSection(dsParam); break; #endregion #region DSS66 case "DSS66": DSS66Statistiche s66 = new DSS66Statistiche(); dsResult = s66.getDataSection(dsParam); break; #endregion #region DSS67 case "DSS67": DSS67MacroAssetConsigliata s67 = new DSS67MacroAssetConsigliata(); dsResult = s67.getDataSection(dsParam); break; #endregion #region DSS68 case "DSS68": DSS68DistribuzioneModello s68 = new DSS68DistribuzioneModello(); dsResult = s68.getDataSection(dsParam); break; #endregion #region DSS75 case "DSS75": DSS75GradoCopertura s75 = new DSS75GradoCopertura(); if (sec.Tipo == "combo" || tipoReport != "DIAGNOSI") dsResult = s75.getDataSection(dsParam); break; #endregion #region DSSProgetti case "DSNProgetti": DSSProgetti NProgetti = new DSSProgetti(); dsResult = NProgetti.getDataSection(dsParam); break; #endregion default: //return false; break; } if (ClassLibraryWS.Debug.iSDebug) { //Se in debug scrivo nel log C:\ISPBLog\log.txt if (dsResult != null && dsResult.Esito != null) ClassLibraryWS.Debug.ScriviLog(" dsResult.Esito= " + dsResult.Esito.ToString()); } return dsResult; } /// /// Recupera l'altezza della sezione /// Sono state lasciate qui solo le sezioni interessate dal report di pianificazione. /// /// Nome della sezione /// private float loadMinimumHeight(DatiSezione sec) { float DimensionRow = 23; float DimensioneTortaChart = 140; float minimumHeight = 0; switch (sec.Sezione) { #region S18 case "S18": //Sezione a dimensione fissa minimumHeight = 140; break; #endregion #region S36 case "S36": //SEZIONE A DIMENSIONE FISSA minimumHeight = DimensionRow * 3; break; #endregion #region S43 case "S43": //SALTO PAGINA ALMENO 1 riga + header e cambio pagina //minimumHeight = 3 * DimensionRow; //Modifica per ispb inseriva il cambio pagina dopo il titolo Sezione aree bisogno minimumHeight = 4 * DimensionRow; break; #endregion #region S47 case "S47": //SALTO PAGINA ALMENO 1 riga + header e cambio pagina minimumHeight = 3 * DimensionRow; break; #endregion #region S56 case "S56": //LE PIRAMIDI HANNO 7 RIGHE DI DIMENSIONE 30 AGGIUNGO ULTERIORE SPAZIO PER NOTA DimensionRow = 30; DataSetS56 set56 = (DataSetS56)sec.getDataSet(); minimumHeight = DimensionRow * 7 + 50 + DimensionRow * (set56.ContoCorrente.Rows.Count + set56.RisorseNonAllocate.Rows.Count + set56.TotalePatrimonio.Rows.Count); break; #endregion //#region S57 //case "S57": // //LE PIRAMIDI HANNO 7 RIGHE DI DIMENSIONE 30 AGGIUNGO ULTERIORE SPAZIO PER NOTA // DimensionRow = 30; // DataSetS57 set57 = new DataSetS57(); // if (sec.getDataSet().GetType() == set57.GetType()) // { // set57 = (DataSetS57)sec.getDataSet(); // minimumHeight = DimensionRow * 13 + 20 + 23 * (set57.ContoCorrente.Rows.Count + set57.RisorseNonAssociate.Rows.Count + set57.TotalePatrimonio.Rows.Count); // } // else // { // set56 = (DataSetS56)sec.getDataSet(); // minimumHeight = DimensionRow * 7 + 20 + DimensionRow * (set56.ContoCorrente.Rows.Count + set56.RisorseNonAllocate.Rows.Count + set56.TotalePatrimonio.Rows.Count); // } // break; //#endregion #region S58 case "S58": //Ameno disegno il patrimonio complessivo minimumHeight = DimensionRow * 3; break; #endregion #region S59 case "S59": //LE PIRAMIDI HANNO 7 RIGHE DI DIMENSIONE 30 AGGIUNGO ULTERIORE SPAZIO PER NOTA DimensionRow = 30; minimumHeight = DimensionRow * 7; break; #endregion #region S60 case "S60": //LE PIRAMIDI HANNO 7 RIGHE DI DIMENSIONE 30 AGGIUNGO ULTERIORE SPAZIO PER NOTA DimensionRow = 30; minimumHeight = DimensionRow * 14 + 50; break; #endregion #region S61 case "S61": //LE PIRAMIDI HANNO 7 RIGHE DI DIMENSIONE 30 AGGIUNGO ULTERIORE SPAZIO PER NOTA DimensionRow = 30; minimumHeight = DimensionRow * 14 + 50; break; #endregion #region S63 case "S63": //SEZIONE A DIMENSIONE FISSA minimumHeight = DimensionRow * 2; break; #endregion #region S64 case "S64": //aggiungo spazio per la nota minimumHeight = DimensioneTortaChart + 30; break; #endregion #region S65 case "S65": //SEZIONE A DIMENSIONE FISSA if (sec.Tipo == "combo") minimumHeight = DimensionRow * 3; else minimumHeight = DimensionRow * 4; break; #endregion #region S66 case "S66": //SEZIONE A DIMENSIONE FISSA minimumHeight = DimensionRow * 3; break; #endregion #region S67 case "S67": if (sec.Tipo == "combo") //Almeno devo poter disegnare il grafico più considero uno spazio 20 tra tabella e grafico e 3 righe di tabella (1 riga più header e totale, o 1 riga più header e cambio pagina) minimumHeight = DimensioneTortaChart + 20 + DimensionRow * 2; else //Almeno devo poter disegnare il grafico minimumHeight = DimensioneTortaChart; break; #endregion #region S68 case "S68": if (sec.Tipo == "combo") //Almeno devo poter disegnare il grafico più considero uno spazio 20 tra tabella e grafico e 3 righe di tabella (1 riga più header e totale, o 1 riga più header e cambio pagina) minimumHeight = DimensioneTortaChart + 20 + DimensionRow * 2; else //Almeno devo poter disegnare il grafico minimumHeight = DimensioneTortaChart; break; #endregion #region S75 case "S75": //SEZIONE A DIMENSIONE FISSA + 50 per la nota //minimumHeight = DimensionRow * 3 + 50; //Modifica per ispb per visualizzare testo e grafico profilo di rischio nella stessa pagina minimumHeight = DimensionRow * 4 + 70 + 150; break; #endregion #region S75BIS case "S75BIS": //SEZIONE A DIMENSIONE FISSA + 50 per la nota minimumHeight = DimensionRow * 4 + 70 + 150; break; #endregion #region NProposta case "NProposta": break; #endregion #region NProgetti case "NProgetti": break; #endregion default: minimumHeight = DimensionRow * 3; break; } //Spazio aggiuntivo titolo sezione minimumHeight += 30; return minimumHeight; } /// /// Utilizzato solo dal report di pianificazione /// /// /// private int loadReportToPrint(int report) { List parametri = new List(); Parametro idReport = new Parametro(); idReport.DbType = DbType.Int32; idReport.Value = report; idReport.ParameterName = "pidReport"; parametri.Add(idReport); dt = DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServer, "sp_getSezioniPersToPrint_ByIdReport", parametri); return 0; } /// /// Utilizzato solo dal report di pianificazione /// private void fillTemplateWithValues() { XmlNode root; XmlNode node; string internalSectionCode; XmlNodeList nodeList; root = docIN.DocumentElement; //pointer alla root del template xml da restituire una volta riempito con le info a run-time //relative al report da stampare foreach (DataRow dr in dt.Rows) //lettura dei records relativi al report da stampare { internalSectionCode = dr["internalSectionCode"].ToString(); // ********Gestione Vecchia Diagnosi e proposta setSelectedSezioniCapitoloPatNonRap(internalSectionCode); if (internalSectionCode != null && internalSectionCode != "") { //riempimento del template XML (per ogni record) nodeList = root.SelectNodes("descendant::" + internalSectionCode); node = nodeList[0]; if (node != null) { //se ho selezionato il figlio ANCHE il nodo PADRE deve essere SELEZIONATO //if (node.ParentNode != null && node.ParentNode.Attributes["flag"].InnerText != "1") //primo livello if (node.ParentNode != null) //primo livello { node.ParentNode.Attributes["flag"].InnerText = "1"; if (node.ParentNode.ParentNode != null && node.ParentNode.ParentNode.NodeType != XmlNodeType.Document) //secondo livello { node.ParentNode.ParentNode.Attributes["flag"].InnerText = "1"; if (node.ParentNode.ParentNode.ParentNode != null && node.ParentNode.ParentNode.ParentNode.NodeType != XmlNodeType.Document) //terzo livello { node.ParentNode.ParentNode.ParentNode.Attributes["flag"].InnerText = "1"; } } } if (node.Attributes["flag"] != null) { node.Attributes["flag"].InnerText = "1"; //..e comunque il nodo prescelto va abilitato. } } } } } /// /// Utilizzato solo dal report di pianificazione /// /// private void setSelectedSezioniCapitoloPatNonRap(string internalSectioncode) { switch (internalSectioncode.ToUpper()) { #region Diagnosi e Proposta case "PTNRAS": // Distribuzione per asset class hasSelectedDistribuzioneAssetClass = true; break; case "PTNRPI": // Distribuzione per politica di investimento hasSelectedPoliticaInv = true; break; #endregion } } /// /// Utilizzato solo dal report di pianificazione /// /// /// public bool readXMLTemplate(string xmlTemplateName) { bool rc = false; string initDir = WebConfigParameter.getParameter("PathXML"); string path = initDir + xmlTemplateName; docIN.Load(path); return rc; } /// /// Utilizzato solo dal report di pianificazione /// /// private void insertQUERYblockIntoXml(string value) { XmlNodeList nodeList; XmlNode node; XmlNode parentNode; XmlNode cloned; XmlNode root = docIN.DocumentElement; nodeList = root.SelectNodes("descendant::QUERY" + value); node = nodeList[0]; if (node != null) { cloned = node.CloneNode(true); parentNode = node.ParentNode; //Add the node to the document. parentNode.InsertAfter(cloned, node); } } /// /// Utilizzato solo dal report di pianificazione /// /// private void deleteQUERYblockIntoXml(string value) { XmlNodeList nodeList; XmlNode node; XmlNode root = docIN.DocumentElement; nodeList = root.SelectNodes("descendant::" + value); node = nodeList[0]; if (node != null) { node.RemoveAll(); } } /// /// Utilizzato solo dal report di pianificazione /// /// private int getPianificazioneSpecs() { int rc = 0; //DataTable tb = SectionManager.GetDataSection("Generator_getPianificazioneSpecs", dsParam); //DataTable tb = BusinessManager.GetDataTableFromStoredProcedure_ConsulenzaEvoluta("REP_Generator_getPianificazioneSpecs", dsParam.ChiaveClientePB); DataTable tb = BusinessManager.GetDataTableFromStoredProcedure_ConsulenzaEvoluta("REP_Pian_P63_IndicatoriArea", dsParam.ChiaveClientePB); DataView view = new DataView(tb); view.RowFilter = "NEED_AREA = 'Ris'"; dtProgetto = view.ToTable(); numberOfQUERYtagsRis = dtProgetto.Rows.Count; ////Modifica ISPB Gestione Area Investimento non delegato view = new DataView(tb); view.RowFilter = "NEED_AREA = 'Inn'"; dtProgetto = view.ToTable(); dtProgetto.Columns.Remove("NEED_AREA"); numberOfQUERYtagsInn = dtProgetto.Rows.Count; view = new DataView(tb); view.RowFilter = "NEED_AREA = 'Inv'"; dtProgetto = view.ToTable(); dtProgetto.Columns.Remove("NEED_AREA"); rc = dtProgetto.Rows.Count; return rc; } #endregion } /// /// Utilizzato solo dal report di pianificazione /// struct elementoStampa { public string tagName; public ArrayList alAttributi; } /// /// Utilizzato solo dal report di pianificazione /// struct attributiElementoStampa { public string titolo; public string valore; }