578 lines
22 KiB
C#
578 lines
22 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
//using System.Collections;
|
|
using System.Text;
|
|
using System.Data;
|
|
using SEILoader.SEI;
|
|
using SEILoader.SIMPB;
|
|
using SEILoader.GlobalPosition;
|
|
using SEILoader.RicercaClienteWS;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Net.Security;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Threading;
|
|
using log4net;
|
|
|
|
namespace SEILoader
|
|
{
|
|
class CaricamentoParallelo
|
|
{
|
|
|
|
private static string _idElaborazione = null;
|
|
private static int _n =-1;
|
|
private static int _sleep = 0;
|
|
private static int _maxErrors = 0;
|
|
private static int _errors = 0;
|
|
private static bool _calcolaPB;
|
|
private static char _tipoElaborazioneParallela;
|
|
private static int _numeroclienti = 0;
|
|
private static CaricamentoParallelo[] coList;
|
|
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
|
|
public static void avviaCaricamentoParallelo(int n, string idElab, int sleepTime, int maxErrors, bool calcolaPB,int numeroClienti,char tipoElaborazioneParallela)
|
|
{
|
|
log.Info("avviaCaricamentoParallelo( n=" + n + ", idElab=" + idElab + ", sleepTime=" + sleepTime + ", maxErrors=" + maxErrors);
|
|
if (_n != -1) {
|
|
throw new Exception("pool di connessioni giá inizializzato");
|
|
}
|
|
_n = n;
|
|
_idElaborazione = idElab;
|
|
_sleep = sleepTime;
|
|
_maxErrors = maxErrors;
|
|
_errors = 0;
|
|
_calcolaPB = calcolaPB;
|
|
_numeroclienti = numeroClienti;
|
|
_tipoElaborazioneParallela = tipoElaborazioneParallela;
|
|
|
|
coList = new CaricamentoParallelo[n];
|
|
for (int i = 0; i < n; i++)
|
|
{
|
|
coList[i] = new CaricamentoParallelo(i);
|
|
coList[i].avviaCaricamentoParallelo();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public static bool aspettaConclusione()
|
|
{
|
|
bool finished = false;
|
|
while (!finished)
|
|
{
|
|
finished = true;
|
|
System.Threading.Thread.Sleep(1000);
|
|
for (int i = 0; i < _n; i++)
|
|
{
|
|
finished = finished && coList[i].finished;
|
|
}
|
|
}
|
|
if (_maxErrors >= _errors) return true;
|
|
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
private SEI.CaricamentoMassivoService c_ws;
|
|
private RicercaClienteWS.RicercaCliente rc_ws;
|
|
private GlobalPosition.GlobalPosition gp_ws;
|
|
private Adeguatezza.Adeguatezza ad_ws;
|
|
|
|
private bool finished = false;
|
|
private int _contatore;
|
|
|
|
|
|
private CaricamentoParallelo(int contatore)
|
|
{
|
|
|
|
this._contatore = contatore;
|
|
|
|
string codiceApplicazione = Properties.Settings.Default.codiceApplicazione;
|
|
string useridSIMPB = Properties.Settings.Default.useridSIMPB;
|
|
string pwdSIMPB = Properties.Settings.Default.pwdSIMPB;
|
|
System.Net.NetworkCredential cred = new System.Net.NetworkCredential(useridSIMPB, pwdSIMPB);
|
|
|
|
c_ws = new CaricamentoMassivoService();
|
|
c_ws.Timeout = Properties.Settings.Default.timeoutWS;
|
|
c_ws.caricamentoClienteCompleted += new caricamentoClienteCompletedEventHandler(caricamentoClienteCompletato);
|
|
|
|
rc_ws = new RicercaCliente();
|
|
rc_ws.PreAuthenticate = true;
|
|
rc_ws.Credentials = cred;
|
|
rc_ws.Timeout = Properties.Settings.Default.timeoutWS;
|
|
rc_ws.getListaClientiCompleted += new getListaClientiCompletedEventHandler(richiestaCalcoloPBCompletato);
|
|
|
|
gp_ws = new GlobalPosition.GlobalPosition();
|
|
gp_ws.PreAuthenticate = true;
|
|
gp_ws.Credentials = cred;
|
|
gp_ws.Timeout = Properties.Settings.Default.timeoutWS;
|
|
gp_ws.getContrattoSintesiperClienteFASE1Completed += new getContrattoSintesiperClienteFASE1CompletedEventHandler(richiestaContrattoSintesiCompletata);
|
|
|
|
ad_ws = new Adeguatezza.Adeguatezza();
|
|
ad_ws.PreAuthenticate = true;
|
|
ad_ws.Credentials = cred;
|
|
ad_ws.Timeout = Properties.Settings.Default.timeoutWS;
|
|
ad_ws.SimulazioneCompleted += new Adeguatezza.SimulazioneCompletedEventHandler(richiestaAdeguatezzaCompletata);
|
|
|
|
|
|
//System.Net.SecurityProtocolType.Ssl3;
|
|
System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);
|
|
|
|
}
|
|
|
|
private void avviaCaricamentoParallelo()
|
|
{
|
|
log4net.ThreadContext.Properties["idCaricamento"] = this._contatore;
|
|
log.Debug("avviaCaricamentoParallelo");
|
|
|
|
CaricamentoClienteData pc = DbManager.getProssimoCliente();
|
|
if (pc == null
|
|
|| _errors >= _maxErrors
|
|
)
|
|
{
|
|
this.finished = true;
|
|
return;
|
|
}
|
|
Thread.Sleep(_sleep);
|
|
if (_calcolaPB) this.richiediCalcoloPbCliente(pc);
|
|
else this.richiediCaricamentoCliente(pc);
|
|
}
|
|
|
|
private void richiediCalcoloPbCliente(CaricamentoClienteData pc)
|
|
{
|
|
log.Debug("richiediCalcoloPbCliente +cliente("+pc.ToString()+")");
|
|
string codiceApplicazione = Properties.Settings.Default.codiceApplicazione;
|
|
|
|
int token = TokenManager.getToken(pc.rete);
|
|
ChiavePB chiavePB = new ChiavePB();
|
|
chiavePB.codiceAgente = pc.pb;
|
|
chiavePB.codiceRete = pc.rete;
|
|
RicercaClienteWS.InfoClient infoClient = new RicercaClienteWS.InfoClient();
|
|
infoClient.codiceApplicazione = codiceApplicazione;
|
|
infoClient.codiceRete = pc.rete;
|
|
infoClient.versioneDatabaseSIMPB = token;
|
|
RicercaClienteWS.ChiaveCliente[] chiaviCliente = new RicercaClienteWS.ChiaveCliente[1];
|
|
|
|
chiaviCliente[0] = new RicercaClienteWS.ChiaveCliente();
|
|
chiaviCliente[0].codiceAgente = pc.pb;
|
|
chiaviCliente[0].codicefiscale = pc.cf;
|
|
chiaviCliente[0].codiceRete = pc.rete;
|
|
chiaviCliente[0].codiceMandato = null;
|
|
chiaviCliente[0].potenzialeClienteNAC = false;
|
|
modificaChiaveCliente(ref chiaviCliente[0]);
|
|
|
|
rc_ws.getListaClientiAsync(
|
|
chiavePB,chiaviCliente,infoClient, pc);
|
|
|
|
|
|
}
|
|
|
|
void richiestaCalcoloPBCompletato(object sender, getListaClientiCompletedEventArgs args)
|
|
{
|
|
|
|
log4net.ThreadContext.Properties["idCaricamento"] = this._contatore;
|
|
|
|
//Display the return value
|
|
CaricamentoClienteData pcInit = (CaricamentoClienteData)args.UserState;
|
|
log.Debug("richiestaCalcoloPBCompletato cliente(" + pcInit.ToString() + ")");
|
|
try
|
|
{
|
|
|
|
ListaClienteRes listaClienteRes = args.Result;
|
|
if(listaClienteRes.info.errors.Length>0){
|
|
if (listaClienteRes.info.errors[0].codiceErrore != 0){
|
|
if (listaClienteRes.allListaCliente.Length > 0 )
|
|
{
|
|
string pb = listaClienteRes.allListaCliente[0].codiceAgente;
|
|
pcInit.pb = pb;
|
|
}
|
|
}
|
|
|
|
}
|
|
if (_tipoElaborazioneParallela == 'X' || _tipoElaborazioneParallela == 'A')
|
|
{
|
|
|
|
if (listaClienteRes.allListaCliente.Length == 1)
|
|
{
|
|
ListaCliente cliente = listaClienteRes.allListaCliente[0];
|
|
if (cliente.cognome.Length > 0)
|
|
{
|
|
if (_tipoElaborazioneParallela == 'X')
|
|
{
|
|
TracingManager.addNewClienteInListaCaricati();
|
|
}
|
|
try
|
|
{
|
|
if(!pcInit.cf.Contains("@")){
|
|
DbManager.AggiornaAnagrafica(pcInit.rete, pcInit.cf, cliente.cognome, cliente.nome);
|
|
};
|
|
}
|
|
catch (DataBaseException dex)
|
|
{
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", dex.Message), _idElaborazione);
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", ex.Message), _idElaborazione);
|
|
|
|
}
|
|
if (_tipoElaborazioneParallela == 'X')
|
|
{
|
|
TracingManager.TracciaStatisticheIntermedie(_idElaborazione);
|
|
this.avviaCaricamentoParallelo();
|
|
return;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Warn(" errore nel calcolo PB del cliente(" + pcInit.ToString() + "): " + ex.Message);
|
|
|
|
}
|
|
if (_tipoElaborazioneParallela == 'W') richiediContrattoSintesi(pcInit);
|
|
else if (_tipoElaborazioneParallela == 'Z') richiediAdeguatezza(pcInit);
|
|
else richiediCaricamentoCliente(pcInit);
|
|
}
|
|
|
|
private void richiediCaricamentoCliente(CaricamentoClienteData pc)
|
|
{
|
|
|
|
log.Debug("richiediCaricamentoCliente cliente(" + pc.ToString() + ")");
|
|
string codiceApplicazione = Properties.Settings.Default.codiceApplicazione;
|
|
|
|
int token = TokenManager.getToken(pc.rete);
|
|
|
|
c_ws.caricamentoClienteAsync(pc.rete, pc.cf, pc.pb, codiceApplicazione, _idElaborazione, token, pc);
|
|
TracingManager.addNewClienteInListaCaricati();
|
|
|
|
}
|
|
|
|
private void richiediAdeguatezza(CaricamentoClienteData pc)
|
|
{
|
|
|
|
log.Debug("richiediAdeguatezza cliente(" + pc.ToString() + ")");
|
|
string codiceApplicazione = Properties.Settings.Default.codiceApplicazione;
|
|
|
|
int token = TokenManager.getToken(pc.rete);
|
|
Adeguatezza.ChiaveCliente chiaveCliente = new Adeguatezza.ChiaveCliente();
|
|
Adeguatezza.InfoClient infoClient = new Adeguatezza.InfoClient();
|
|
//TODO GESTIONE CODICE MANDATO
|
|
chiaveCliente.CodiceAgente = pc.pb;
|
|
chiaveCliente.CodiceFiscale = pc.cf;
|
|
chiaveCliente.CodiceAgenteReale = pc.pb;
|
|
chiaveCliente.NomeAgenteReale = "GIOVANNI";
|
|
chiaveCliente.CognomeAgenteReale = "FERRARA";
|
|
modificaChiaveCliente(ref chiaveCliente);
|
|
|
|
infoClient.CodiceApplicazione = codiceApplicazione;
|
|
infoClient.CodiceRete = pc.rete;
|
|
infoClient.VersioneDatabaseSIMPB = token;
|
|
|
|
Adeguatezza.TipoDettaglioContratto[] contratti = new SEILoader.Adeguatezza.TipoDettaglioContratto[1];
|
|
Adeguatezza.TipoDettaglioContratto contratto = new SEILoader.Adeguatezza.TipoDettaglioContratto();
|
|
|
|
|
|
contratto.CodiceContratto = "NUOVO101000";
|
|
contratto.TipologiaContratto = "";
|
|
contratto.CodiceProdotto = "01";
|
|
contratto.CodiceSottoProdotto = "F29";
|
|
contratto.DescrizioneSottoProdotto = "FONDITALIA CORE 3 R";
|
|
contratto.TipoProdotto = "FI";
|
|
contratto.CodiceISIN = "LU0349158815";
|
|
contratto.CodiceISINProxy = "LU0349158815";
|
|
contratto.CodiceTitolo = "";
|
|
contratto.CodiceTipoAsset = "";
|
|
contratto.Conto = "";
|
|
contratto.CustodiaGaranzia = "";
|
|
contratto.FlagPCT = "";
|
|
contratto.CodiceTipoOperazione = 1;
|
|
contratto.DescrizioneTipoOperazione = "1";
|
|
contratto.ValoreCTV = 100.0;
|
|
contratto.ValorePluri = 100.0;
|
|
contratto.QuantitaOValoreNominale = 100.0;
|
|
contratto.CodiceDivisa = "";
|
|
contratto.FlagCoveredWarrant = "0";
|
|
|
|
|
|
contratti[0] = contratto;
|
|
|
|
|
|
ad_ws.SimulazioneAsync(contratti, chiaveCliente, infoClient, pc);
|
|
|
|
TracingManager.addNewClienteInListaCaricati();
|
|
|
|
}
|
|
|
|
private void richiestaAdeguatezzaCompletata(object sender, Adeguatezza.SimulazioneCompletedEventArgs args)
|
|
{
|
|
log4net.ThreadContext.Properties["idCaricamento"] = this._contatore;
|
|
|
|
//Display the return value
|
|
CaricamentoClienteData pcInit = (CaricamentoClienteData) args.UserState;
|
|
log.Debug("richiestaAdeguatezzaCompletata cliente(" + pcInit.ToString() + ")");
|
|
|
|
try
|
|
{
|
|
|
|
Adeguatezza.SimulazioneRes res = args.Result;
|
|
string var = "-1";
|
|
if (res.ValoriSimulazione != null)
|
|
{
|
|
foreach (Adeguatezza.ValoriSimulazione valore in res.ValoriSimulazione)
|
|
{
|
|
var = valore.VARIniziale.ToString();
|
|
}
|
|
}
|
|
dumpAdeguatezza(var, pcInit);
|
|
|
|
if (res.info.Errors.Length > 0)
|
|
{
|
|
if (res.info.Errors[0].CodiceErrore != 0)
|
|
{
|
|
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", res.info.Errors[0].MessaggioPerUtenteFinale), _idElaborazione);
|
|
log.Error("richiestaAdeguatezzaCompletata errore:" + res.info.Errors[0].DescrizioneInterna);
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (DataBaseException dex)
|
|
{
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", dex.Message), _idElaborazione);
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", ex.Message), _idElaborazione);
|
|
|
|
}
|
|
TracingManager.TracciaStatisticheIntermedie(_idElaborazione);
|
|
|
|
this.avviaCaricamentoParallelo();
|
|
}
|
|
|
|
|
|
private void richiediContrattoSintesi(CaricamentoClienteData pc)
|
|
{
|
|
|
|
log.Debug("richiediContrattoSintesi cliente(" + pc.ToString() + ")");
|
|
string codiceApplicazione = Properties.Settings.Default.codiceApplicazione;
|
|
|
|
int token = TokenManager.getToken(pc.rete);
|
|
GlobalPosition.ChiaveCliente chiaveCliente = new GlobalPosition.ChiaveCliente();
|
|
GlobalPosition.InfoClient infoClient = new GlobalPosition.InfoClient();
|
|
chiaveCliente.codiceAgente = pc.pb;
|
|
chiaveCliente.codicefiscale = pc.cf;
|
|
|
|
chiaveCliente.codiceRete = pc.rete;
|
|
chiaveCliente.potenzialeClienteNAC=true;
|
|
modificaChiaveCliente(ref chiaveCliente);
|
|
|
|
infoClient.codiceApplicazione = codiceApplicazione;
|
|
infoClient.codiceRete = pc.rete;
|
|
infoClient.versioneDatabaseSIMPB = token;
|
|
|
|
String status = "";
|
|
gp_ws.getContrattoSintesiperClienteFASE1Async(chiaveCliente,status, infoClient, pc);
|
|
|
|
|
|
|
|
TracingManager.addNewClienteInListaCaricati();
|
|
|
|
}
|
|
|
|
private void richiestaContrattoSintesiCompletata(object sender, getContrattoSintesiperClienteFASE1CompletedEventArgs args) {
|
|
log4net.ThreadContext.Properties["idCaricamento"] = this._contatore;
|
|
|
|
//Display the return value
|
|
CaricamentoClienteData pcInit = (CaricamentoClienteData)args.UserState;
|
|
log.Debug("richiestaContrattoSintesiCompletata cliente(" + pcInit.ToString() + ")");
|
|
|
|
try
|
|
{
|
|
|
|
ContrattoSintesiperClienteFASE1Res res = args.Result;
|
|
if (res.info.errors.Length > 0)
|
|
{
|
|
if (res.info.errors[0].codiceErrore != 0)
|
|
{
|
|
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", res.info.errors[0].messaggioPerUtenteFinale), _idElaborazione);
|
|
}
|
|
else {
|
|
dumpContrattoSintesi(res, pcInit);
|
|
}
|
|
|
|
}
|
|
else {
|
|
dumpContrattoSintesi(res, pcInit);
|
|
|
|
}
|
|
|
|
}
|
|
catch (DataBaseException dex)
|
|
{
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", dex.Message), _idElaborazione);
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", ex.Message), _idElaborazione);
|
|
|
|
}
|
|
TracingManager.TracciaStatisticheIntermedie(_idElaborazione);
|
|
|
|
this.avviaCaricamentoParallelo();
|
|
}
|
|
|
|
private void caricamentoClienteCompletato(object sender,
|
|
caricamentoClienteCompletedEventArgs args)
|
|
{
|
|
log4net.ThreadContext.Properties["idCaricamento"] = this._contatore;
|
|
|
|
//Display the return value
|
|
CaricamentoClienteData pcInit = (CaricamentoClienteData)args.UserState;
|
|
log.Debug("caricamentoClienteCompletato cliente(" +pcInit.ToString()+")" );
|
|
|
|
try
|
|
{
|
|
|
|
int esito = args.Result;
|
|
if (esito == Properties.Settings.Default.erroreTokenCambiato) {
|
|
TokenManager.resetTokens();
|
|
}
|
|
if (esito != Properties.Settings.Default.esitoOk) {
|
|
_errors++;
|
|
TracingManager.TracciaErrore(pcInit, esito.ToString(),_idElaborazione);
|
|
};
|
|
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
TracingManager.TracciaErrore(pcInit, string.Format("-1: {0}", ex.Message), _idElaborazione);
|
|
|
|
}
|
|
TracingManager.TracciaStatisticheIntermedie(_idElaborazione);
|
|
|
|
this.avviaCaricamentoParallelo();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static bool VerifyServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
|
|
{
|
|
if (sslPolicyErrors == SslPolicyErrors.None) return true;
|
|
|
|
|
|
foreach (X509ChainStatus s in chain.ChainStatus)
|
|
{
|
|
// allows expired certificates
|
|
if (string.Equals(s.Status.ToString(), "NotTimeValid",
|
|
StringComparison.OrdinalIgnoreCase))
|
|
return true;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static void dumpAdeguatezza(string var, CaricamentoClienteData pc) {
|
|
|
|
DbManager.insertVar(pc, var);
|
|
log.Info(pc + ":" + var);
|
|
}
|
|
|
|
|
|
|
|
private static void dumpContrattoSintesi(ContrattoSintesiperClienteFASE1Res res,CaricamentoClienteData pc) {
|
|
|
|
|
|
foreach (ContrattoSintesiperClienteFASE1 c in res.tuttiContrattiSintesiFASE1) {
|
|
|
|
string riga = c.codiceContratto;
|
|
riga += ";" + c.numeroPolizza;
|
|
riga += ";" + c.numeroPolizza;
|
|
riga += ";" + c.Conto;
|
|
riga += ";" + c.Rubricato;
|
|
riga += ";" + c.CustodiaGaranzia;
|
|
riga += ";" + c.tipoProdotto;
|
|
riga += ";" + c.codiceInterno;
|
|
riga += ";" + c.codicesottoProdotto;
|
|
riga += ";" + c.codiceMAF;
|
|
riga += ";" + c.pctKey;
|
|
riga += ";" + c.pctTitoloCollegato;
|
|
riga += ";" + c.pctDescrizionteTitoloCollegato;
|
|
riga += ";" + c.quote;
|
|
riga += ";" + c.prezzo;
|
|
riga += ";" + c.ctv;
|
|
riga += ";" + c.partvia;
|
|
riga += ";" + c.partviaal;
|
|
riga += ";" + c.datadiRiferimento;
|
|
riga += ";" + c.datadiSottoscrizione;
|
|
riga += ";" + c.dataValNavAl;
|
|
riga += ";" + c.codiceStato;
|
|
/*
|
|
riga += ";" + c.dataInizioRendimento;
|
|
riga += ";" + c.rendimentoDaSottoscrizione;
|
|
riga += ";" + c.dataTrimestreRendimento;
|
|
riga += ";" + c.rendimentoDaInizioTrimestre;
|
|
riga += ";" + c.dataAnnoRendimento;
|
|
riga += ";" + c.rendimentoDaInizioAnno;
|
|
riga += ";" + c.valore;
|
|
riga += ";" + c.CVN;
|
|
*/
|
|
DbManager.insertContrattoSintesi(pc,c);
|
|
log.Debug(pc + ":" + riga);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
private static void modificaChiaveCliente(ref Adeguatezza.ChiaveCliente _chiaveCliente)
|
|
{
|
|
string[] valori = _chiaveCliente.CodiceFiscale.Split('@');
|
|
if(valori.Length>1){
|
|
_chiaveCliente.CodiceFiscale = DbManager.getPiva(valori[0]);
|
|
_chiaveCliente.CodiceMandato= valori[1];
|
|
}
|
|
}
|
|
|
|
private static void modificaChiaveCliente(ref GlobalPosition.ChiaveCliente _chiaveCliente)
|
|
{
|
|
string[] valori = _chiaveCliente.codicefiscale.Split('@');
|
|
if (valori.Length > 1)
|
|
{
|
|
_chiaveCliente.codicefiscale = DbManager.getPiva(valori[0]);
|
|
_chiaveCliente.codiceMandato = valori[1];
|
|
}
|
|
}
|
|
|
|
private static void modificaChiaveCliente(ref RicercaClienteWS.ChiaveCliente _chiaveCliente)
|
|
{
|
|
string[] valori = _chiaveCliente.codicefiscale.Split('@');
|
|
if (valori.Length > 1)
|
|
{
|
|
_chiaveCliente.codicefiscale = DbManager.getPiva(valori[0]);
|
|
_chiaveCliente.codiceMandato = valori[1];
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|