using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Text.RegularExpressions; using DataAccessLayer; namespace PDFGenerator.BusinessLayer.DataSection { public class ClsFunzioniGeneriche { //================================================= private static StructColor[] _sc; public static StructColor[] Colors { get { if (_sc == null) _sc = GetColori(); return _sc; } } private static StructColor[] GetColori() { StructColor[] sc = null; DataAccessDE dataAccess = new DataAccessDE(DBProvider.SqlServerStampeC6); DataTable dt = dataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerStampeC6, "sp_getColors", null); if (dt != null) if (dt.Rows.Count > 0) { sc = new StructColor[dt.Rows.Count + 1]; //usiamo il primo slot per il colore da usare in caso di failure... sc[0].Blue = 0; sc[0].Red = 0; sc[0].Green = 0; int i = 1; foreach (DataRow dr in dt.Rows) { sc[i].Codice = dr["Codice"].ToString(); sc[i].Codice = sc[i].Codice.Trim(); sc[i].Tipo = dr["Tipo"].ToString(); sc[i].Blue = (Int16)dr["Blue"]; sc[i].Red = (Int16)dr["Red"]; sc[i].Green = (Int16)dr["Green"]; sc[i].Descrizione = dr["Descrizione Breve"].ToString(); i++; } } return sc; } //============================================================ public static int findRightColors(StructColor toBeFound) { int foundIdx = 0; for (int c = 1; c < ClsFunzioniGeneriche.Colors.Length; c++) { if ((ClsFunzioniGeneriche.Colors[c].Codice == toBeFound.Codice) && (ClsFunzioniGeneriche.Colors[c].Tipo == toBeFound.Tipo)) { foundIdx = c; break; } } return foundIdx; } //public static bool GetPianificazioneAttivo(DataSectionParameter dataSectionParameter) //{ // bool _pianificazioniAttiva = false; // DataTable dt = SectionManager.GetDataSection("ClsFunzioniGeneriche_GetPianificazioneAttivo", dataSectionParameter); // if (dt.Rows.Count > 0) // _pianificazioniAttiva = true; // return _pianificazioniAttiva; //} public static void AggiungiColonneDaContrattoSintesi(ref DataTable dt, DataTable dtContrattoSintesi) { if (!dt.Columns.Contains("TIPOPRODOTTO")) { DataColumn colTipoProdottoContrattoSintesi = new DataColumn("TIPOPRODOTTO", typeof(string)); dt.Columns.Add(colTipoProdottoContrattoSintesi); } if (!dt.Columns.Contains("DataSottoscrizione")) { DataColumn colDataSottoscrizione = new DataColumn("DataSottoscrizione", typeof(string)); dt.Columns.Add(colDataSottoscrizione); } if (!dt.Columns.Contains("RendimentoDaInizioAnno")) { DataColumn colRendimentoDaInizioAnno = new DataColumn("RendimentoDaInizioAnno", typeof(double)); dt.Columns.Add(colRendimentoDaInizioAnno); } if (!dt.Columns.Contains("RendimentoDaSottoscrizione")) { DataColumn colRendimentoDaSottoscrizione = new DataColumn("RendimentoDaSottoscrizione", typeof(double)); dt.Columns.Add(colRendimentoDaSottoscrizione); } if (!dt.Columns.Contains("CVN")) { DataColumn colCVN = new DataColumn("CVN", typeof(double)); dt.Columns.Add(colCVN); } if (!dt.Columns.Contains("PartitaViaggiante")) { DataColumn colPartitaViaggiante = new DataColumn("PartitaViaggiante", typeof(int)); dt.Columns.Add(colPartitaViaggiante); } StringBuilder expression = new StringBuilder(); if (dtContrattoSintesi != null) { foreach (DataRow rw in dtContrattoSintesi.Rows) { // codice contratto expression.Append("(contratto like '"); expression.Append(rw["codiceContratto"].ToString()); expression.Append("%') and "); // rw riga contenente i contratti switch (rw["TIPOPRODOTTO"].ToString()) { case "FI": case "GE": case "ASUL": case "ASU1": case "ASVI": case "ASCM": case "CC": // Da confrontare: codice_Interno, codice_SottoProdotto // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null "); expression.Append(") AND "); // codice_SottoProdotto expression.Append("(codicesottoprodotto like '"); expression.Append(rw["codicesottoProdotto"].ToString()); expression.Append("' "); if (rw["codicesottoProdotto"].ToString() == "") expression.Append(" OR codicesottoprodotto is null ) "); else expression.Append(" ) "); break; case "DT": // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("%' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null "); //expression.Append(") AND "); //// codice_SottoProdotto //if (dt.Columns.Contains("controvalore_attuale")) // expression.Append("(controvalore_attuale = '"); //else // expression.Append("(Controvalore = '"); //expression.Append(rw["ctv"].ToString().Replace(",",".")); //expression.Append("' "); //if (rw["ctv"].ToString() == "") // expression.Append(" OR Controvalore is null ) "); //else expression.Append(" ) "); break; case "ASD": //codiceInterno // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null) "); else expression.Append(" ) "); break; case "GES": //codiceMAF expression.Append("(codicemaf like '"); expression.Append(rw["codiceMaf"].ToString()); expression.Append("' "); if (rw["codiceMaf"].ToString() == "") expression.Append(" OR codicemaf is null "); expression.Append(") AND "); // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null ) "); else expression.Append(" ) "); break; } DataRow[] drArray = dt.Select(expression.ToString()); if (drArray.Length > 0) { foreach (DataRow riga in drArray) { riga["TIPOPRODOTTO"] = rw["TIPOPRODOTTO"]; riga["DataSottoscrizione"] = rw["DatadiSottoscrizione"]; riga["RendimentoDaInizioAnno"] = rw["RendimentoDaInizioAnno"]; riga["RendimentoDaSottoscrizione"] = rw["RendimentoDaSottoscrizione"]; riga["CVN"] = rw["CVN"]; riga["PartitaViaggiante"] = rw["partvia"]; } } expression.Length = 0; } } } /// /// Formatta l'indirizzo passato come parametro di input mettendo la prima lettera /// di ciascuna parola maiuscola, lasciando l'eventuale numero romano con caratteri maiuscoli /// /// /// public static string FormattaIndirizzo(string indirizzo) { //V Uso dell'espressione regolare per catturare il problema sulle vie con numeri romani // MAmi.CapitalizeText(GREGORIO VII) --> Gregorio Vii string p1 = "^m*(d?c{0,3}|c[dm])" + "(l?x{0,3}|x[lc])(v?i{0,3}|i[vx])$"; string t1 = indirizzo.Trim(); string[] appoggio = t1.Split(' '); FormatNum MAmi = new FormatNum(); Match m1 = null; int k = -1; for (int i = 0; i < appoggio.Length; ++i) { m1 = Regex.Match(appoggio[i].ToLower(), p1); if (m1.Success && appoggio[i].ToUpper() != "DI") k = i; // D. 29/09/2009 // ho commentato la riga sotto per risolvere il problema di "VIA M.ROMITI, 68 RES.LE PIETRARE" per cui veniva la "r" di romiti e la "L" di "le pietrare" // Per coerenza è stato scelto di mettere sia la "r" di romiti che la "l" di "le pietrare". // Se si dovessero ricreare delle anomalie per casistiche non prese in considerazione ad oggi scommenatre il codice sotto. //if (appoggio[i].Contains(".")) // k = i; } string the_address = string.Empty; for (int i = 0; i < appoggio.Length; ++i) if (i != k) the_address += MAmi.CapitalizeText(appoggio[i]); else { if (appoggio[i].Contains(".")) { string[] split_punto = appoggio[i].Split('.'); for (int j = 0; j < split_punto.Length; ++j) { the_address += MAmi.CapitalizeText(split_punto[j]); if (the_address.EndsWith(" ")) the_address = the_address.Remove(the_address.LastIndexOf(' '), 1); if (j != split_punto.Length - 1) the_address += "."; } the_address += " "; } else the_address += appoggio[i].ToUpper() + " "; } return the_address.Trim(); } } }