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