using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Collections.Specialized; using System.Globalization; using System.Resources; using DataAccessLayer; using System.Data.SqlClient; using System.Data.Common; using System.Threading.Tasks; using System.Threading; using System.Configuration; using System.Linq; using System.Reflection; using System.ComponentModel; using NLog; namespace PDFGenerator.BusinessLayer { /// /// Risk Credit Classes. /// Marian Zaki /// 04052010 /// /*public enum RiskCreditClass { /// /// Class 1 /// Classe1, /// /// Class 2 /// Classe2, /// /// Class 3 /// Classe3 }*/ public class UtilityBusinessLayer : IDisposable { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); public DataThread ConstructFromDataRow(DataRow reader) { string cf = reader["codiceFiscale"].TOString(); string rt = reader["Rete"].TOString(); DataThread dataThread = new DataThread(DBProvider.SqlServerStampeC6); dataThread.CodiceFiscale = cf; dataThread.Rete = rt; dataThread.DataLotto = CACHE.DataLotto; dataThread.NomeRete = reader["NomeRete"].TOString(); dataThread.Agente = reader["Agente"].TOString(); dataThread.CognomeAgente = reader["CognomeAgente"].TOString(); dataThread.NomeAgente = reader["NomeAgente"].TOString(); dataThread.IndirizzoAgente = reader["IndirizzoAgente"].TOString(); dataThread.CapAgente = reader["CapAgente"].TOString(); dataThread.CittaAgente = reader["CittaAgente"].TOString(); dataThread.TelefonoAgente = reader["TelefonoAgente"].TOString(); //CLIENTE dataThread.CognomeCliente = reader["CognomeCliente"].TOString(); dataThread.NomeCliente = reader["NomeCliente"].TOString(); //PATRIMONI CLIENTE dataThread.ProfiloIsAct = reader["ProfiloIsAct"].ToBool(); //PARTITE VIAGGIANTI dataThread.PartiteViaggiantiInvestimento = reader["PartiteViaggiantiInv"].ToDecimal(); dataThread.PartiteViaggiantiDisinvestimento = reader["PartiteViaggiantiDisinv"].ToDecimal(); dataThread.PatrimonioNonRappresentabile = reader["PatrimonioNonRappresentabile"].ToDecimal(); dataThread.Patrimoniocomplessivototalectv = reader["Patrimoniocomplessivototalectv"].ToDecimal(); dataThread.ContoCorrente = reader["ContoCorrente"].ToDecimal(); dataThread.Patrimonioaltroctv = reader["Patrimonioaltroctv"].ToDecimal(); dataThread.Patrimonioimmobiliarectv = reader["Patrimonioimmobiliarectv"].ToDecimal(); dataThread.Patrimonioterzictv = reader["Patrimonioterzictv"].ToDecimal(); dataThread.PatrimonioTerziContoCorrente = reader["PatrimonioTerziContoCorrente"].ToDecimal(); dataThread.PatrimonioterzictvAlNettoContoCorrente = reader["PatrimonioterzictvAlNettoContoCorrente"].ToDecimal(); dataThread.Patrimoniobancafideuramctv = reader["Patrimoniobancafideuramctv"].ToDecimal(); dataThread.PatrimonioBancaFideuramCtvAlNettoContoCorrente = reader["patrimoniobancafideuramctvalnettocontocorrente"].ToDecimal(); dataThread.NumeroIntermediari = reader["NumeroIntermediari"].ToInt32(); dataThread.RisorseNonAssociate = reader["RisorseNonAssociate"].ToDecimal(); dataThread.VaRRisorseNonAssociate = reader["VaRRisorseNonAssociate"].ToDecimal(); dataThread.CoperturaRisorseNonAssociate = reader["CoperturaRisorseNonAssociate"].ToDecimal(); dataThread.VaRTotaleRisorseFinanziarie = reader["VaRTotaleRisorseFinanziarie"].ToDecimal(); dataThread.CoperturaTotaleRisorseFinanziarie = reader["CoperturaTotaleRisorseFinanziarie"].ToDecimal(); dataThread.TipoContratto = reader["Tip_Contratto"].TOString().Equals("2") ? TipoContratto.Private : reader["Tip_Contratto"].TOString().Equals("1") ? TipoContratto.Affluent : reader["Tip_Contratto"].TOString().Equals("3") ? TipoContratto.Dadvisory : TipoContratto.Old; dataThread.ContrattoOld = reader["Contrattoold"].TOString() == "1"; dataThread.NoMonitoraggio = reader["NoMonitoraggio"].TOString() == "1"; //CONTRATTO dataThread.Flagnqp = reader["flagnqp"].TOString(); dataThread.Flagprlrde = reader["flagprlrde"].TOString(); dataThread.Flgprof = reader["Flgprof"].TOString(); dataThread.Flagpg = reader["flagpg"].ToInt32(); dataThread.IdReportPDFDiagnosi = reader["IdReportPDFDiagnosi"].ToInt32(); dataThread.IdReportPDFMonitoraggio = reader["IdReportPDFMonitoraggio"].ToInt32(); dataThread.CodiceContratto = reader["CodiceContratto"].TOString(); int idReportDiagnosi = reader["idModelloDiagnosi"].ToInt32(); if (idReportDiagnosi != -1) { ReportTipo reportType = new ReportTipo(); reportType.IdReport = reader["idReportDiagnosi"].ToInt32(); reportType.IdModello = reader["idModelloDiagnosi"].ToInt32(); reportType.Descrizione = reader["descrizioneDiagnosi"].TOString(); reportType.TipoReport = TipologiaReport.DIAGNOSI; dataThread.ReportsType.Add(reportType); } int idReportMonitoraggio = reader["idReportMonitoraggio"].ToInt32(); if (idReportMonitoraggio != -1) { ReportTipo reportType = new ReportTipo(); reportType.IdReport = reader["idReportMonitoraggio"].ToInt32(); reportType.IdModello = reader["idModelloMonitoraggio"].ToInt32(); reportType.Descrizione = reader["descrizioneMonitoraggio"].TOString(); reportType.TipoReport = TipologiaReport.MONITORAGGIO; dataThread.ReportsType.Add(reportType); DateTimeFormatInfo dfi = new CultureInfo("it-IT", false).DateTimeFormat; dataThread.DataFineTrimestreCorrente = Convert.ToDateTime(CACHE.DataFineTrimestreCorrente, dfi); //FIX - Francesco: Questa data viene stampata sul report nella lettere di benvenuto e a piè di pagina nel report dataThread.DataFineTrimestreCorrente_LetteraAccompagnamento = Convert.ToDateTime(CACHE.DataFineTrimestreCorrente_LetteraAccompagnamento, dfi); } dataThread.AdesioneSuccessivaAvanzato = Convert.ToBoolean(reader["adesioneSuccessivaAvanzato"]); dataThread.Periodico = CACHE.Periodico; dataThread.Scaduto = reader["scaduto"].ToInt32(); if (dataThread.Scaduto == 2) { //Verifico se Esistono dati da visualizzare nella sezione S180 ("Prodotti ad alta complessita") string sp = "[C6Mart" + (dataThread.Periodico ? "Periodico]" : "") + ".[PL_D_S180ProdottiComplessitaAlta_mini]"; List parameters = new List { new SqlParameter { ParameterName="codicefiscale", Value=cf }, new SqlParameter { ParameterName="rete", Value=rt } }; using (SQLServer db = new SQLServer(cf, rt)) { dataThread.HasProdottiAltaComplessita = db.executeScalarInt(sp, parameters) == 1; } } try { dataThread.RiskArea = GetRiskArea(cf, rt); } catch (Exception ex) { dataThread.RiskArea = 0; } return dataThread; } public int GetRiskArea(string fiscalCode, string rete) { int res = 0; List parameters = new List { new SqlParameter { ParameterName="CodiceFiscale", Value = fiscalCode }, new SqlParameter { ParameterName="Rete", Value = rete } }; string sp = "[C6Mart" + (CACHE.Periodico ? "Periodico" : "") + "].[GetRiskArea]"; using (SQLServer db = new SQLServer(fiscalCode, rete)) { var dt = db.GetDataTableFromProcedure(sp, parameters); if (dt != null) { foreach (DataRow r in dt.Rows) { var pf = r["profiloCode"].ToInt32(); if (pf > res) { res = pf; } } } } return res; } public List getDataThreads(int number) { var pars = new List() { new SqlParameter("volThreads", number) }; List ret = null; try { var DataThreadsDT = (new SQLServer()).GetDataTableFromProcedure(CACHE.QueryContratti, pars); if (DataThreadsDT != null && DataThreadsDT.Rows.Count > 0) { ret = new List(); foreach (DataRow r in DataThreadsDT.Rows) { ret.Add ( ConstructFromDataRow(r) ); } } } catch (Exception ex) { logger.Errors(ex); } return ret; } public void ParallelExecutionOverThreads(List dataThreads) { System.Threading.Tasks.Parallel.ForEach(dataThreads, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, t => { string rete = t.Rete; string cf = t.CodiceFiscale; if (CACHE.Periodico) { RischioRelativo_PesoPercentuale r = new RischioRelativo_PesoPercentuale(); try { r.DataSource = recuperaDatiCalcoloPeso_Rischio(rete, cf); if (r.DataSource != null) { t.PesoPercentuale = r.calcolaPeso(); t.RischioRelativo = r.calcolaRischio(); t.ControvaloriTotali = r.calcolaControvaloriAttuali(); } t.TotalNegativeCurrentAccountValue = getClientNegativeCurrentAccountsValue(rete, cf); t.TotalSelfNegCurrentAccountValue = getClientSelfNegCurrentAccountValue(rete, cf); t.GPEligoFondi = getGPEligoNeg(rete, cf, "L191"); t.GPEligoTitoli = getGPEligoNeg(rete, cf, "L192"); t.GradoCoperturaMacroAssetInterno = getGradoCoperturaMacroAssetInterno(rete, cf); t.GradoCoperturaMacroAssetTotale = getGradoCoperturaMacroAssetTotale(rete, cf); t.GradoCoperturaMacroAssetAltri = getGradoCoperturaMacroAssetAltri(rete, cf); t.PatrimonioNonRappresentabileCompl = getPatrimonioNonRappresentabile(rete, cf, "Complessivo"); switch (rete) { case "F": t.PatrimonioNonRappresentabileFI = getPatrimonioNonRappresentabile(rete, cf, "Fideuram"); break; case "S": t.PatrimonioNonRappresentabileFI = getPatrimonioNonRappresentabile(rete, cf, "Sanpaolo Invest"); break; case "W": t.PatrimonioNonRappresentabileFI = getPatrimonioNonRappresentabile(rete, cf, "IW Private Investments"); break; } t.PatrimonioNonRappresentabileAI = t.PatrimonioNonRappresentabileCompl - t.PatrimonioNonRappresentabileFI; t.SelfNegativeValue = getClientSelfNegative(rete, cf); if (t.SelfNegativeValue == null) { t.SelfNegativeValue = new List>(); } } catch (Exception exubl) { //logger.Errors(exubl); } } }); } /// /// Recupero il datatable sul quale effettuare il calcolo del peso e del rischo relativo a livello di area/progetto. /// Dalla [C6MartPeriodico].[PL_S82DatiSintetici] prendo i dati per le aree non d'investimento. /// Dalla [C6MartPeriodico].[PL_S82BisDatiSintetici] prendo i dati per le aree d'investimento. /// Oltre a dtDatiAREA e dtDatiPROGETTO vanno considerati anche i prodotti non associati a progetti. /// Ottengo 3 datatable e il datatable di return sar� il merge dei 3. /// /// public DataTable recuperaDatiCalcoloPeso_Rischio(string rete, string codiceFiscale) { #region Settaggio parametri //List parameters = new List() //{ // new Parametro() {Value = rete, ParameterName ="Rete" }, // new Parametro() {Value = codiceFiscale, ParameterName ="CodiceFiscale" }, //}; var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; #endregion DataTable dtDatiAREA = null, dtDatiPROGETTO = null, dtProdottiNonAssociati = null; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { dtDatiAREA = db.GetDataTableFromProcedure("[C6MartPeriodico].[PL_S82DatiSintetici]", sqlparameters); dtDatiPROGETTO = db.GetDataTableFromProcedure("[C6MartPeriodico].[PL_S82BisDatiSintetici]", sqlparameters); dtProdottiNonAssociati = db.GetDataTableFromProcedure("[C6MartPeriodico].[PL_Prodotti_Non_Associati_Area_Inv]", sqlparameters); } if (dtDatiAREA != null) dtDatiAREA = dtDatiAREA.DefaultView.ToTable(false, "NEED_AREA", "CONTROVALOREATTUALE", "VAR_NEEDAREA", "VAR_NEEDAREASTRING", "ORDINAMENTO_PROGETTO"); if (dtDatiPROGETTO != null) dtDatiPROGETTO = dtDatiPROGETTO.DefaultView.ToTable(false, "NEED_AREA", "NOME_PROGETTO", "CONTROVALOREATTUALE", "VAR_NEEDAREA", "VAR_NEEDAREASTRING", "ORDINAMENTO_PROGETTO"); #region Creazione e popolamento DataTable dtProdottiNonAssociati DataTable dtDatiProdottiNonAssociati = new DataTable(); dtDatiProdottiNonAssociati.Columns.Add("need_area", typeof(string)); dtDatiProdottiNonAssociati.Columns.Add("NOME_PROGETTO", typeof(string)); dtDatiProdottiNonAssociati.Columns.Add("ControvaloreAttuale", typeof(decimal)); dtDatiProdottiNonAssociati.Columns.Add("var_needarea", typeof(decimal)); dtDatiProdottiNonAssociati.Columns.Add("var_needareaString", typeof(string)); dtDatiProdottiNonAssociati.Columns.Add("ORDINAMENTO_PROGETTO", typeof(int)); if (dtProdottiNonAssociati != null && dtProdottiNonAssociati.Rows.Count > 0) { DataRow drDatiProdottiNonAssociati = dtDatiProdottiNonAssociati.NewRow(); drDatiProdottiNonAssociati["NEED_AREA"] = dtProdottiNonAssociati.Rows[0]["NEED_AREA"]; drDatiProdottiNonAssociati["NOME_PROGETTO"] = dtProdottiNonAssociati.Rows[0]["NOME_PROGETTO"]; drDatiProdottiNonAssociati["CONTROVALOREATTUALE"] = dtProdottiNonAssociati.Compute("Sum(CONTROVALOREATTUALE)", string.Empty); drDatiProdottiNonAssociati["var_needarea"] = dtProdottiNonAssociati.Rows[0]["var_needarea"]; drDatiProdottiNonAssociati["var_needareaString"] = dtProdottiNonAssociati.Rows[0]["var_needareaString"]; drDatiProdottiNonAssociati["ORDINAMENTO_PROGETTO"] = Convert.ToInt32(dtProdottiNonAssociati.Rows[0]["ORDINAMENTO_PROGETTO"]); dtDatiProdottiNonAssociati.Rows.Add(drDatiProdottiNonAssociati); } #endregion DataTable dtDati = new DataTable(); // datatable di return if (dtDatiAREA != null) dtDati = dtDatiAREA; dtDati.Merge(dtDatiPROGETTO); // se ho prodotti non associati a progetti li aggiungo nel calcolo finale del peso percentuale e rischio relativo dtDati.Merge(dtDatiProdottiNonAssociati); return dtDati; } public decimal getClientSelfNegCurrentAccountValue(string rete, string codiceFiscale) { #region Settaggio parametri var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; #endregion object ClientSelfNegCurrentAccountValue = 0; string sp = "[C6Mart" + (CACHE.Periodico ? "Periodico" : "") + "].[PL_GetClientSelfNegCurrentAccountValue]"; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { ClientSelfNegCurrentAccountValue = db.executeScalarWT(sp, sqlparameters);// dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6Mart].[PL_GetClientSelfNegCurrentAccountValue]", parameters); } return ClientSelfNegCurrentAccountValue.ToDecimal(); } public List> getClientSelfNegative(string rete, string codiceFiscale) { #region Settaggio parametri var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; #endregion List> tuples = new List>(); DataTable ClientSelfNegative = null; string sp = "[C6Mart" + (CACHE.Periodico ? "Periodico" : "") + "].[PL_GetClientSelfNegative]"; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { ClientSelfNegative = db.GetDataTableFromProcedure(sp, sqlparameters); } if (ClientSelfNegative != null && ClientSelfNegative.Rows != null && ClientSelfNegative.Rows.Count > 0) { foreach (DataRow row in ClientSelfNegative.Rows) { tuples.Add(new Tuple(row["CodInterno"].ToString(), row["Descrizione"].ToString(), Convert.ToDecimal(row["CTV"]))); } } else { tuples.Add(new Tuple("", "", 0)); } return tuples; } //--MIOFOGLIO 20181130 public decimal getClientNegativeCurrentAccountsValue(string rete, string codiceFiscale) { #region Settaggio parametri //List parameters = new List() //{ // new Parametro() {Value = rete, ParameterName ="Rete" }, // new Parametro() {Value = codiceFiscale, ParameterName ="CodiceFiscale" }, //}; var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; #endregion object clientNegativeCurrentAccountsValue = 0; string sp = "[C6Mart" + (CACHE.Periodico ? "Periodico" : "") + "].[PL_GetClientNegativeCurrentAccountsValue]"; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { //if (!CACHE.Periodico) //{ clientNegativeCurrentAccountsValue = db.executeScalarWT(sp, sqlparameters);// dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6Mart].[PL_GetClientNegativeCurrentAccountsValue]", parameters); //} //else //{ // clientNegativeCurrentAccountsValue = db.executeScalarWT("[C6MartPeriodico].[PL_GetClientNegativeCurrentAccountsValue]", sqlparameters);//dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_GetClientNegativeCurrentAccountsValue]", parameters); //} //object clientNegativeCurrentAccountsValue = DataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_GetClientNegativeCurrentAccountsValue]", parametri); } return clientNegativeCurrentAccountsValue.ToDecimal(); /* if (clientNegativeCurrentAccountsValue != null) return decimal.Parse(clientNegativeCurrentAccountsValue.ToString()); else return 0; */ } // ***************************** Prova Andrea aggiunta Data Thread **********************************************// public decimal getGPEligoNeg(string rete, string codiceFiscale, string codice) { #region Settaggio parametri //List parameters = new List() //{ // new Parametro() {Value = rete, ParameterName ="Rete" }, // new Parametro() {Value = codiceFiscale, ParameterName ="CodiceFiscale" }, // new Parametro() {Value = codice, ParameterName ="Codsottoprodotto" }, //}; var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale), new SqlParameter("Codsottoprodotto",codice) }; #endregion object Eligo_neg = 0; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { //if (!CACHE.Periodico) //{ // Eligo_neg = db.executeScalarWT("[C6MartPeriodico].[PL_GetClientNegativeGPEligo]", sqlparameters);// dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_GetClientNegativeGPEligo]", parameters); //} //else //{ Eligo_neg = db.executeScalarWT("[C6MartPeriodico].[PL_GetClientNegativeGPEligo]", sqlparameters);// dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_GetClientNegativeGPEligo]", parameters); //} } return Eligo_neg.ToDecimal(); } public decimal getGradoCoperturaMacroAssetInterno(string rete, string codiceFiscale) { #region Settaggio parametri //List parameters = new List() //{ // new Parametro() {Value = rete, ParameterName ="Rete" }, // new Parametro() {Value = codiceFiscale, ParameterName ="CodiceFiscale" }, // // new Parametro() {Value = codice, ParameterName ="codice" }, //}; var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; #endregion object Grado_Copertura_MA = 0; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { //if (!CACHE.Periodico) //{ // Grado_Copertura_MA = db.executeScalarWT("[C6MartPeriodico].[PL_S75GradoCoperturaInterno]", sqlparameters);// dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_S75GradoCoperturaInterno]", parameters); //} //else //{ Grado_Copertura_MA = db.executeScalarWT("[C6MartPeriodico].[PL_S75GradoCoperturaInterno]", sqlparameters);//dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_S75GradoCoperturaInterno]", parameters); //} } return Grado_Copertura_MA.ToDecimal(); /* if (Grado_Copertura_MA != null) return decimal.Parse(Grado_Copertura_MA.ToString()); else return 0; */ } public decimal getGradoCoperturaMacroAssetTotale(string rete, string codiceFiscale) { #region Settaggio parametri //List parameters = new List() //{ // new Parametro() {Value = rete, ParameterName ="Rete" }, // new Parametro() {Value = codiceFiscale, ParameterName ="CodiceFiscale" }, // // new Parametro() {Value = codice, ParameterName ="codice" }, //}; var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; #endregion object Grado_Copertura_MA_TOT = 0; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { //if (!CACHE.Periodico) //{ // Grado_Copertura_MA_TOT = db.executeScalarWT("[C6MartPeriodico].[PL_S75GradoCoperturaCompl]", sqlparameters);//dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_S75GradoCoperturaCompl]", parameters); //} //else //{ Grado_Copertura_MA_TOT = db.executeScalarWT("[C6MartPeriodico].[PL_S75GradoCoperturaCompl]", sqlparameters);//dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_S75GradoCoperturaCompl]", parameters); //} } return Grado_Copertura_MA_TOT.ToDecimal(); /* if (Grado_Copertura_MA_TOT != null) return decimal.Parse(Grado_Copertura_MA_TOT.ToString()); else return 0; */ } public decimal getGradoCoperturaMacroAssetAltri(string rete, string codiceFiscale) { #region Settaggio parametri //List parameters = new List() //{ // new Parametro() {Value = rete, ParameterName ="Rete" }, // new Parametro() {Value = codiceFiscale, ParameterName ="CodiceFiscale" }, // // new Parametro() {Value = codice, ParameterName ="codice" }, //}; var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; #endregion object Grado_Copertura_MA_TRZ = 0; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { //if (!CACHE.Periodico) //{ // Grado_Copertura_MA_TRZ = db.executeScalarWT("[C6MartPeriodico].[PL_S75GradoCoperturaTerzi]", sqlparameters);//dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_S75GradoCoperturaTerzi]", parameters); //} //else //{ Grado_Copertura_MA_TRZ = db.executeScalarWT("[C6MartPeriodico].[PL_S75GradoCoperturaTerzi]", sqlparameters);//dataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, "[C6MartPeriodico].[PL_S75GradoCoperturaTerzi]", parameters); //} } return Grado_Copertura_MA_TRZ.ToDecimal(); /* if (Grado_Copertura_MA_TRZ != null) return decimal.Parse(Grado_Copertura_MA_TRZ.ToString()); else return 100; */ } public decimal getPatrimonioNonRappresentabile(string rete, string codiceFiscale, string filtro) { decimal CtvNotCovered = 0; var sqlparameters = new List() { new SqlParameter("Rete",rete), new SqlParameter("CodiceFiscale",codiceFiscale) }; DataTable Patrimonio_Non_Rapp = null; string schema = "[C6Mart" + (!CACHE.Periodico ? "" : "Periodico") + "]"; using (SQLServer db = new SQLServer(codiceFiscale, rete)) { Patrimonio_Non_Rapp = db.GetDataTableFromProcedure(schema + ".[PL_D2_S167DistribuzioneRischioCredito]", sqlparameters); } // if (Patrimonio_Non_Rapp != null) if (Patrimonio_Non_Rapp != null && Patrimonio_Non_Rapp.Rows != null && Patrimonio_Non_Rapp.Rows.Count != 0) { List _ListCtv = new List(); _ListCtv = ConvertTo(Patrimonio_Non_Rapp); CtvNotCovered = _ListCtv.Where(f => f.INTERMEDIARIO == filtro).Select(s => s.CTV_notCovered).First(); if (CtvNotCovered == null) CtvNotCovered = 0; } else { CtvNotCovered = 0; } return CtvNotCovered; } public static int setEndThread(DataThread dataThread, int idReport, int docPage) { int ret = -1; int idReportPdf = dataThread.TipoReport == TipologiaReport.DIAGNOSI.ToString() ? dataThread.IdReportPDFDiagnosi : dataThread.IdReportPDFMonitoraggio; idReportPdf = idReportPdf == 0 ? idReport : idReportPdf; List sqlParameters = new List { new SqlParameter { ParameterName="Rete", Value=dataThread.Rete }, new SqlParameter { ParameterName="CodiceFiscale", Value=dataThread.CodiceFiscale }, new SqlParameter { ParameterName="idReport", DbType= DbType.Int32, Value=idReportPdf }, new SqlParameter { ParameterName="NomeFile", Value=dataThread.NomeFileReport }, new SqlParameter { ParameterName="TipoReport", Value=dataThread.TipoReport }, new SqlParameter { ParameterName="NumeroPagine", DbType= DbType.Int32, Value=docPage } }; if (CACHE.Periodico) {//[C6MartPeriodico].[GESTIONE_INSERT_PDF_FTP] HA DUE PARAMETRI IN PIU RISPETTO A QUELLA DELLE LETTERE sqlParameters.Add( new SqlParameter { ParameterName = "RFA", DbType = DbType.Decimal, Value = dataThread.Patrimoniobancafideuramctv }); sqlParameters.Add(new SqlParameter { ParameterName = "CodiceContratto", Value = dataThread.CodiceContratto }); } using (SQLServer db = new SQLServer()) { ret = db.executeScalarInt(CACHE.QueryInserimentoPDF_FTP, sqlParameters); //ret = db.executeNonQueryWT(CACHE.QueryInserimentoPDF_FTP, sqlParameters); } ret = Math.Abs(ret); return ret; } public static string ReplaceVariables(string testodarimpiazzare, DataThread _dataThread) { string testoOriginale = testodarimpiazzare; testoOriginale = testoOriginale.Replace("$/Area/$", _dataThread.AreaEstesa); if (_dataThread.Area != "Inv") testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", _dataThread.AreaEstesa); else testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", _dataThread.Progetto); if (_dataThread.Area != "Inv") testoOriginale = testoOriginale.Replace("$/AreaProgettoA/$", "all'area di " + _dataThread.AreaEstesa); else testoOriginale = testoOriginale.Replace("$/AreaProgettoA/$", "al progetto " + _dataThread.Progetto); if (_dataThread.Area != "Inv") testoOriginale = testoOriginale.Replace("$/AreaProgettoD/$", "dell'area di " + _dataThread.AreaEstesa); else testoOriginale = testoOriginale.Replace("$/AreaProgettoD/$", "del progetto " + _dataThread.Progetto); testoOriginale = testoOriginale.Replace("$/Progetto/$", _dataThread.Progetto); if (_dataThread.Intermediario == "Altro") testoOriginale = testoOriginale.Replace("$/Intermediario/$", "Altro intermediario"); else testoOriginale = testoOriginale.Replace("$/Intermediario/$", _dataThread.Intermediario); //if (_dataThread.Rete == "F") // //FC 26062015 Aggionamento nuova Ragione Sociale // //testoOriginale = testoOriginale.Replace("$/Banca/$", "Banca Fideuram"); // testoOriginale = testoOriginale.Replace("$/Banca/$", "Fideuram"); //else // testoOriginale = testoOriginale.Replace("$/Banca/$", "Sanpaolo Invest"); //************************************ Cecco modifiche dicitura IWBANK******************************* switch (_dataThread.Rete) { case "F": { testoOriginale = testoOriginale.Replace("$/Banca/$", "Fideuram"); break; } case "S": { testoOriginale = testoOriginale.Replace("$/Banca/$", "Sanpaolo Invest"); // ************ Rosaspina modifica Andrea ****************************// //testoOriginale = testoOriginale.Replace("$/Banca/$", "Fideuram S.p.A., commercializzato tramite la rete di private banker Sanpaolo Invest"); break; } case "W": { testoOriginale = testoOriginale.Replace("$/Banca/$", "IW Private Investments"); break; } } //******************************************************************************************************** testoOriginale = testoOriginale.Replace("$/FontSize/$", "font size, "); return testoOriginale; } /// /// Sostituisce le variabili presenti nel testo (indicate con $/...../$ con il valore corrispondente /// I dati vengono presi dalle propriet� dell'oggetto sezione passato in input. /// /// /// public static string ReplaceVariables(string testodarimpiazzare, SezioneReport sezione) { string testoOriginale = testodarimpiazzare; char[] define = { '$', '/', ',', '.' }; const char Space = ' '; char[] delimiters = new char[] { Space }; // split the string and then iterate over the // resulting array of strings if (testodarimpiazzare != " ") foreach (string variabile in testodarimpiazzare.Split(delimiters)) { string app = variabile.TrimStart(define); app = app.TrimEnd(define); switch (app) { #region Area case "Area": testoOriginale = testoOriginale.Replace("$/Area/$", sezione.AreaProgettoDescrizione); break; #endregion #region AreaProgetto case "AreaProgetto": if (sezione.AreaProgettoCodice.ToLower() != "inv") testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", sezione.AreaProgettoDescrizione); else testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", sezione.NomeProgetto); break; #endregion } } return testoOriginale; } /// /// Sostituisce le variabili presenti nel testo (indicate con $/...../$ con il valore corrispondente /// I dati vengono presi dalle propriet� dell'oggetto sezione passato in input. /// Aggiunge gli apici all'inizio e alla fine del testo da rimpiazzato (solo per i nomi dei progetti investimento). /// /// testo /// oggetto sezione da cui prendere i dati /// Se true aggiunge le virgolette (apici) prima e dopo il testo sostituito /// public static string ReplaceVariables(string testodarimpiazzare, SezioneReport sezione, bool aggiuntaapici) { string testoOriginale = testodarimpiazzare; char[] define = { '$', '/', ',', '.' }; const char Space = ' '; char[] delimiters = new char[] { Space }; // split the string and then iterate over the // resulting array of strings if (testodarimpiazzare != " ") foreach (string variabile in testodarimpiazzare.Split(delimiters)) { string app = variabile.TrimStart(define); app = app.TrimEnd(define); switch (app) { #region Area case "Area": testoOriginale = testoOriginale.Replace("$/Area/$", sezione.AreaProgettoDescrizione); break; #endregion #region AreaProgetto case "AreaProgetto": if (sezione.AreaProgettoCodice.ToLower() != "inv") testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", sezione.AreaProgettoDescrizione); else { if (aggiuntaapici) testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", "''" + sezione.NomeProgetto + "''"); else testoOriginale = testoOriginale.Replace("$/AreaProgetto/$", sezione.NomeProgetto); } break; #endregion } } return testoOriginale; } /// /// Return the Risk Class depending on the passed value /// Marian Zaki /// 04052010 /// /// /// case 1: Class 1 /// case 2: Class 2 /// case 3: Class 3 /// /// The class name public static string GetRiskCreditClassName(string riskCreditClass) { float riskCreditClassFloatValue; int riskCreditClassValue = 0; string className = string.Empty; if (float.TryParse(riskCreditClass, out riskCreditClassFloatValue)) { riskCreditClassValue = Convert.ToInt32(riskCreditClassFloatValue); } else if (int.TryParse(riskCreditClass, out riskCreditClassValue)) { } if (riskCreditClassValue != 0) { switch (riskCreditClassValue) { case 1: className = Resource.RiskCreditClass1; break; case 2: className = Resource.RiskCreditClass2; break; case 3: className = Resource.RiskCreditClass3; break; case 4: className = Resource.RiskCreditOltreClasse3; break; default: className = string.Empty; break; } return className; } else return string.Empty; } public static string GetRiskCreditEmitClassName(string riskCreditClass) { float riskCreditClassFloatValue; int riskCreditClassValue = 0; string className = string.Empty; if (float.TryParse(riskCreditClass, out riskCreditClassFloatValue)) { riskCreditClassValue = Convert.ToInt32(riskCreditClassFloatValue); } else if (int.TryParse(riskCreditClass, out riskCreditClassValue)) { } if (riskCreditClassValue != 0) { switch (riskCreditClassValue) { case 1: className = Resource.RiskCreditClassEmit1; break; case 2: className = Resource.RiskCreditClassEmit2; break; case 3: className = Resource.RiskCreditClassEmit3; break; case 4: className = Resource.RiskCreditClassEmit4; break; case 5: className = Resource.RiskCreditClassEmit5; break; case 6: className = Resource.RiskCreditClassEmit6; break; case 7: className = Resource.RiskCreditClassEmit7; break; case 8: className = Resource.RiskCreditClassEmit8; break; case 9: className = Resource.RiskCreditClassEmit9; break; case 10: className = Resource.RiskCreditClassEmit10; break; default: className = string.Empty; break; } return className; } else return string.Empty; } /****************** coversione tabella\lista per store procedure Pino 14/12/2021 *****************************************************/ public static List ConvertTo(DataTable datatable) where T : new() { List Temp = new List(); try { List columnsNames = new List(); foreach (DataColumn DataColumn in datatable.Columns) columnsNames.Add(DataColumn.ColumnName); Temp = datatable.AsEnumerable().ToList().ConvertAll(row => getObject(row, columnsNames)); return Temp; } catch { return Temp; } } public static T getObject(DataRow row, List columnsName) where T : new() { T obj = new T(); try { string columnname = ""; string value = ""; PropertyInfo[] Properties; Properties = typeof(T).GetProperties(); foreach (PropertyInfo objProperty in Properties) { columnname = columnsName.Find(name => name.ToLower() == objProperty.Name.ToLower()); if (!string.IsNullOrEmpty(columnname)) { value = row[columnname].ToString(); if (!string.IsNullOrEmpty(value)) { if (Nullable.GetUnderlyingType(objProperty.PropertyType) != null) { value = row[columnname].ToString().Replace("$", "").Replace(",", ""); objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(Nullable.GetUnderlyingType(objProperty.PropertyType).ToString())), null); } else { value = row[columnname].ToString().Replace("%", ""); objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null); } } } } return obj; } catch { return obj; } } public static DataTable ToDataTable(IList data) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); for (int i = 0; i < props.Count; i++) { PropertyDescriptor prop = props[i]; table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType); } object[] values = new object[props.Count]; foreach (T item in data) { for (int i = 0; i < values.Length; i++) values[i] = props[i].GetValue(item) ?? DBNull.Value; table.Rows.Add(values); } return table; } public static string FormatDecimal(string value, int decimals) { decimal decimalValue; var stringReturn = value; var sdecimals = new string('0', decimals); if (!Decimal.TryParse(value, NumberStyles.Number, null, out decimalValue)) return stringReturn; stringReturn = decimalValue.ToString("#,##0.00", CultureInfo.CurrentCulture.NumberFormat); return stringReturn; } /**********************************************************************************************/ public static float GetWidthProportional(float value, float maxvalue, float width) { return (width * value) / maxvalue; } public static string FormatCurrency(string value) { decimal decimalValue; var stringReturn = value; if (Decimal.TryParse(value, NumberStyles.Number, null, out decimalValue)) stringReturn = Convert.ToDecimal(value).ToString("#,##0.00"); return stringReturn; } public Dictionary getColorCurrencies() { Dictionary colori = new Dictionary(); colori.Add("EUR", System.Drawing.Color.FromArgb(217, 81, 33)); colori.Add("ALTRE", System.Drawing.Color.FromArgb(131, 188, 180)); return colori; } public void Dispose() { } } public class CtvNotCoverede { public string RETE { get; set; } public string COD_FISCALE { get; set; } public string INTERMEDIARIO { get; set; } public string ORDINE { get; set; } public decimal CTV_TOT { get; set; } public decimal CTV_notCovered { get; set; } public decimal CTV_CreditRisk { get; set; } public string CTV_Na { get; set; } public decimal PERK_CreditRisk { get; set; } public string PERK_NA { get; set; } } }