using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using PrometeiaMessage.bancafideuram.nac.globalposition;
using PrometeiaMessage;
using System.Collections.Generic;

public partial class GlobalPositionWS
{
    public DataTable GetContrattoUnitLinkedSaldo(ChiaveCliente chiave, string codiceContratto, InfoClient infoCliente, int chiaveclientepb)
    {
        GestioneCliente.ImpostaCodiceFiscaleMandato(chiaveclientepb, ref chiave);


        string chiaveS = "GlobalPositionWS_GetContrattoUnitLinkedSaldo" + codiceContratto;
        HttpContext contesto = HttpContext.Current;
        object contrattoSaldo = null;
        if (contesto != null && contesto.Session != null) contrattoSaldo = contesto.Session[chiaveS];

        if (contrattoSaldo != null)
        {
            return (DataTable)contrattoSaldo;
        }
        else
        {

            #region Chiamata al metodo getCliente del WebServices Anagrafica
            string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
            string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
            string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();
            DataTable dtGetContrattoUnitLinkedSaldo;
            ContrattoUnitLinkedSaldoRes risposta;

            string _proxy;
            if (ConfigurationManager.AppSettings["PROXY"] != null)
                _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
            else
                _proxy = "";
            #endregion

            try
            {
                #region Chiamata al metodo getCliente del WebServices Global Position

                GlobalPosition wsglobalposition = new GlobalPosition();
                wsglobalposition.PreAuthenticate = true;
                wsglobalposition.Url = _wsurl;

                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
                wsglobalposition.Credentials = cred;

                // Settaggio eventuale proxy
                if (_proxy.Trim() != "")
                    wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

                System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

                risposta = wsglobalposition.getContrattoUnitLinkedSaldo(chiave, codiceContratto, infoCliente);
                #endregion

                #region Creazione DataTable GetContrattoUnitLinkedSaldo e aggiungo una riga e la aggiungo alla tabella
                dtGetContrattoUnitLinkedSaldo = new DataTable("DTCONTRATTOUNITLINKEDSALDO");
                dtGetContrattoUnitLinkedSaldo.Columns.Add("CODICECONTRATTO", typeof(String));
                dtGetContrattoUnitLinkedSaldo.Columns.Add("CODICEINTERNO", typeof(String));
                dtGetContrattoUnitLinkedSaldo.Columns.Add("CODICESOTTOPRODOTTO", typeof(String));
                dtGetContrattoUnitLinkedSaldo.Columns.Add("CONTROVALORE", typeof(Double));
                dtGetContrattoUnitLinkedSaldo.Columns.Add("DATADIRIFERIMENTO", typeof(String));
                dtGetContrattoUnitLinkedSaldo.Columns.Add("ISINFITTIZIO", typeof(String));
                dtGetContrattoUnitLinkedSaldo.Columns.Add("COD_ISIN_SOTTOSTANTE", typeof(String));
                dtGetContrattoUnitLinkedSaldo.Columns.Add("COD_MAF_SOTTOSTANTE", typeof(String));

                DataRow row;
                if (risposta.info.errors[0].codiceErrore == 0)
                {
                    foreach (ContrattoUnitLinkedSaldo ul in risposta.tuttiContrattiUnitLinkedSaldo)
                    {
                        row = dtGetContrattoUnitLinkedSaldo.NewRow();
                        row["CODICECONTRATTO"] = ul.codiceContratto;
                        row["CODICEINTERNO"] = ul.codiceInterno;
                        row["CODICESOTTOPRODOTTO"] = ul.codicesottoProdotto;
                        row["CONTROVALORE"] = ul.controvalore;
                        row["DATADIRIFERIMENTO"] = ul.datadiRiferimento;
                        row["COD_ISIN_SOTTOSTANTE"] = ul.codiceISINsottostante;
                        row["COD_MAF_SOTTOSTANTE"] = ul.codiceMAFsottostante;

                        // Modifica relativa ai prodotti SKANDIA
                        if (ul.isinFittizio != null && ul.isinFittizio != "")
                            row["ISINFITTIZIO"] = ul.isinFittizio;
                        else
                            row["ISINFITTIZIO"] = ul.codiceISINsottostante;

                        dtGetContrattoUnitLinkedSaldo.Rows.Add(row);
                    }
                }
                else
                {
                    if (risposta.info.errors[0].codiceErrore == 50)
                    {
                        Exception ex = new Exception();
                        ex.Data.Add("CodiceErrore", 50);
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale, ex);
                    }
                    else
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale);

                }
                #endregion
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message + "; Web Service: GlobalPosition; Web Method: GetContrattoUnitLinkedSaldo", ex.InnerException);
            }

            if (contesto != null && contesto.Session != null) contesto.Session[chiaveS] = dtGetContrattoUnitLinkedSaldo;
            return dtGetContrattoUnitLinkedSaldo;
        }
    }

    public DataTable GetContrattoSintesiPerCliente(ChiaveCliente chiave, InfoClient infoCliente, int chiaveclientepb)
    {
        ////Ratt�
        //this.setCodiceFiscaleMandatoFiduciarie(ref chiave);
        GestioneCliente.ImpostaCodiceFiscaleMandato(chiaveclientepb, ref chiave);

        string chiaveS = "GlobalPositionWS_GetContrattoSintesiPerCliente";
        HttpContext contesto = HttpContext.Current;
        object contratto = null;
        if (contesto != null && contesto.Session != null) contratto = contesto.Session[chiaveS];

        if (contratto != null)
        {
            return (DataTable)contratto;
        }
        else
        {
            #region Chiamata al metodo getCliente del WebServices Anagrafica
            string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
            string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
            string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();
            DataTable dtGetContrattoSintesiPerCliente;

            string _proxy;
            if (ConfigurationManager.AppSettings["PROXY"] != null)
                _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
            else
                _proxy = "";
            #endregion

            try
            {
                #region Chiamata al metodo getCliente del WebServices Global Position

                GlobalPosition wsglobalposition = new GlobalPosition();
                wsglobalposition.PreAuthenticate = true;
                wsglobalposition.Url = _wsurl;

                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
                wsglobalposition.Credentials = cred;

                // Settaggio eventuale proxy
                if (_proxy.Trim() != "")
                    wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

                System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

                ContrattoSintesiperClienteRes risposta = wsglobalposition.getContrattoSintesiperCliente(chiave, infoCliente);


                #endregion

                #region Creazione DataTable GetContrattoSintesiPerCliente e aggiungo una riga e la aggiungo alla tabella
                dtGetContrattoSintesiPerCliente = new DataTable("DTCONTRATTOSINTESIPERCLIENTE");
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceContratto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("numeroPolizza", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("Rubricato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("CustodiaGaranzia", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("tipoProdotto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceInterno", typeof(String));

                dtGetContrattoSintesiPerCliente.Columns.Add("isin", typeof(String));


                dtGetContrattoSintesiPerCliente.Columns.Add("conto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codicesottoProdotto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceMAF", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("pctKey", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("pctTitoloCollegato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("pctDescrizionteTitoloCollegato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("quote", typeof(double));


                dtGetContrattoSintesiPerCliente.Columns.Add("prezzo", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("ctv", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("partvia", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("partviaal", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("datadiRiferimento", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("datadiSottoscrizione", typeof(String));


                dtGetContrattoSintesiPerCliente.Columns.Add("dataValNavAl", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceStato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("dataInizioRendimento", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("dataTrimestreRendimento", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("rendimentoDaSottoscrizione", typeof(double));

                dtGetContrattoSintesiPerCliente.Columns.Add("rendimentoDaInizioTrimestre", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("dataAnnoRendimento", typeof(String));


                dtGetContrattoSintesiPerCliente.Columns.Add("rendimentoDaInizioAnno", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("valore", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("CVN", typeof(double));

                DataRow row;
                if (risposta.info.errors[0].codiceErrore == 0)
                {
                    foreach (ContrattoSintesiperCliente ul in risposta.tuttiContrattiSintesi)
                    {
                        row = dtGetContrattoSintesiPerCliente.NewRow();
                        row["CODICECONTRATTO"] = ul.codiceContratto;
                        row["numeroPolizza"] = ul.numeroPolizza;
                        row["Rubricato"] = ul.Rubricato;

                        if (ul.CustodiaGaranzia != "" || ul.CustodiaGaranzia != null)
                            row["CustodiaGaranzia"] = ul.CustodiaGaranzia;

                        row["tipoProdotto"] = ul.tipoProdotto;
                        row["codiceInterno"] = ul.codiceInterno;

                        row["conto"] = ul.Conto;
                        row["codicesottoProdotto"] = ul.codicesottoProdotto;
                        row["codiceMAF"] = ul.codiceMAF;
                        row["pctKey"] = ul.pctKey;
                        row["pctTitoloCollegato"] = ul.pctTitoloCollegato;
                        row["pctDescrizionteTitoloCollegato"] = ul.pctDescrizionteTitoloCollegato;

                        if (ul.isin != "" || ul.isin != null)
                            row["isin"] = ul.isin;

                        //if (ul.quote != DBNull.Value || ul.quote != null)
                        row["quote"] = ul.quote;

                        //if (ul.prezzo != DBNull.Value || ul.prezzo != null)
                        row["prezzo"] = ul.prezzo;

                        //if (ul.ctv != DBNull.Value || ul.ctv != null)
                        row["ctv"] = ul.ctv;

                        row["partvia"] = ul.partvia;
                        row["partviaal"] = ul.partviaal;
                        row["datadiRiferimento"] = ul.datadiRiferimento;

                        // D modifica del 08/09/2009 
                        // In caso di prodotti di tipo Gestione Patrimoniale (GE, GES) in modo analogo a quanto attualmente facciamo per titoli e fondi (DT, FI) la data di sottoscrizione viene valorizzata con il campo DATA INIZIO RENDIMENTO ( dai dati del SIMPB Get contratto sintesi). 
                        // In caso questa sia null, mettiamo la data sottoscrizione
                        if (ul.tipoProdotto != null && ul.tipoProdotto != "" && (ul.tipoProdotto.Trim().ToUpper() == "DT" || ul.tipoProdotto.Trim().ToUpper() == "FI" || ul.tipoProdotto.Trim().ToUpper() == "GE" || ul.tipoProdotto.Trim().ToUpper() == "GES" || ul.tipoProdotto.Trim().ToUpper() == "GP"))
                        {
                            if (ul.dataInizioRendimento != null && ul.dataInizioRendimento != "")
                                row["datadiSottoscrizione"] = ul.dataInizioRendimento;
                            else
                                row["datadiSottoscrizione"] = ul.datadiSottoscrizione;
                        }
                        else
                            row["datadiSottoscrizione"] = ul.datadiSottoscrizione;


                        row["dataValNavAl"] = ul.dataValNavAl;
                        row["codiceStato"] = ul.codiceStato;
                        row["dataInizioRendimento"] = ul.dataInizioRendimento;
                        row["dataTrimestreRendimento"] = ul.dataTrimestreRendimento;

                        //if (ul.rendimentoDaSottoscrizione != DBNull.Value || ul.rendimentoDaSottoscrizione != null)
                        row["rendimentoDaSottoscrizione"] = ul.rendimentoDaSottoscrizione;

                        row["rendimentoDaInizioTrimestre"] = ul.rendimentoDaInizioTrimestre;
                        row["dataAnnoRendimento"] = ul.dataAnnoRendimento;

                        //if (ul.rendimentoDaInizioAnno != DBNull.Value || ul.rendimentoDaInizioAnno != null)
                        row["rendimentoDaInizioAnno"] = ul.rendimentoDaInizioAnno;

                        //if (ul.valore != DBNull.Value || ul.valore != null)
                        row["valore"] = ul.valore;

                        // Versato netto
                        row["CVN"] = ul.CVN;

                        dtGetContrattoSintesiPerCliente.Rows.Add(row);
                    }
                }
                else
                {
                    if (risposta.info.errors[0].codiceErrore == 50)
                    {
                        Exception ex = new Exception();
                        ex.Data.Add("CodiceErrore", 50);
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale, ex);
                    }
                    else
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale);

                }
                #endregion
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message + "; Web Service: GlobalPosition; Web Method: GetContrattoSintesiPerCliente", ex.InnerException);
            }
            if (contesto != null && contesto.Session != null) contesto.Session[chiaveS] = dtGetContrattoSintesiPerCliente;
            return dtGetContrattoSintesiPerCliente;
        }
    }

    public DataTable GetContrattoSintesiPerClienteCaricamentoAsul(ChiaveCliente chiave, InfoClient infoCliente, int chiaveclientepb)
    {
        ////Ratt�
        //this.setCodiceFiscaleMandatoFiduciarie(ref chiave);
        GestioneCliente.ImpostaCodiceFiscaleMandato(chiaveclientepb, ref chiave);

        string chiaveS = "GlobalPositionWS_GetContrattoSintesiPerClienteCaricamentoAsul";
        HttpContext contesto = HttpContext.Current;
        object contrattoAsul = null;
        if (contesto != null && contesto.Session != null) contrattoAsul = contesto.Session[chiaveS];

        if (contrattoAsul != null)
        {
            return (DataTable)contrattoAsul;
        }
        else
        {
            #region Chiamata al metodo getCliente del WebServices Anagrafica
            string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
            string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
            string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();
            DataTable dtGetContrattoSintesiPerCliente;

            string _proxy;
            if (ConfigurationManager.AppSettings["PROXY"] != null)
                _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
            else
                _proxy = "";
            #endregion

            try
            {
                #region Chiamata al metodo getCliente del WebServices Global Position

                GlobalPosition wsglobalposition = new GlobalPosition();
                wsglobalposition.PreAuthenticate = true;
                wsglobalposition.Url = _wsurl;

                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
                wsglobalposition.Credentials = cred;

                // Settaggio eventuale proxy
                if (_proxy.Trim() != "")
                    wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

                System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

                ContrattoSintesiperClienteRes risposta = wsglobalposition.getContrattoSintesiperCliente(chiave, infoCliente);


                #endregion

                #region Creazione DataTable GetContrattoSintesiPerCliente e aggiungo una riga e la aggiungo alla tabella
                dtGetContrattoSintesiPerCliente = new DataTable("DTCONTRATTOSINTESIPERCLIENTE");
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceContratto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("numeroPolizza", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("Rubricato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("CustodiaGaranzia", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("tipoProdotto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceInterno", typeof(String));

                dtGetContrattoSintesiPerCliente.Columns.Add("isin", typeof(String));

                dtGetContrattoSintesiPerCliente.Columns.Add("conto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codicesottoProdotto", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceMAF", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("pctKey", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("pctTitoloCollegato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("pctDescrizionteTitoloCollegato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("quote", typeof(double));


                dtGetContrattoSintesiPerCliente.Columns.Add("prezzo", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("ctv", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("partvia", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("partviaal", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("datadiRiferimento", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("datadiSottoscrizione", typeof(String));


                dtGetContrattoSintesiPerCliente.Columns.Add("dataValNavAl", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("codiceStato", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("dataInizioRendimento", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("dataTrimestreRendimento", typeof(String));
                dtGetContrattoSintesiPerCliente.Columns.Add("rendimentoDaSottoscrizione", typeof(double));

                dtGetContrattoSintesiPerCliente.Columns.Add("rendimentoDaInizioTrimestre", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("dataAnnoRendimento", typeof(String));


                dtGetContrattoSintesiPerCliente.Columns.Add("rendimentoDaInizioAnno", typeof(double));
                dtGetContrattoSintesiPerCliente.Columns.Add("valore", typeof(double));

                DataRow row;
                if (risposta.info.errors[0].codiceErrore == 0)
                {
                    foreach (ContrattoSintesiperCliente ul in risposta.tuttiContrattiSintesi)
                    {
                        row = dtGetContrattoSintesiPerCliente.NewRow();
                        row["CODICECONTRATTO"] = ul.codiceContratto;
                        row["numeroPolizza"] = ul.numeroPolizza;
                        row["Rubricato"] = ul.Rubricato;

                        if (ul.CustodiaGaranzia != "" || ul.CustodiaGaranzia != null)
                            row["CustodiaGaranzia"] = ul.CustodiaGaranzia;

                        row["tipoProdotto"] = ul.tipoProdotto;
                        row["codiceInterno"] = ul.codiceInterno;

                        row["conto"] = ul.Conto;
                        row["codicesottoProdotto"] = ul.codicesottoProdotto;
                        row["codiceMAF"] = ul.codiceMAF;
                        row["pctKey"] = ul.pctKey;
                        row["pctTitoloCollegato"] = ul.pctTitoloCollegato;
                        row["pctDescrizionteTitoloCollegato"] = ul.pctDescrizionteTitoloCollegato;

                        //if (ul.quote != DBNull.Value || ul.quote != null)
                        row["quote"] = ul.quote;

                        //if (ul.prezzo != DBNull.Value || ul.prezzo != null)
                        row["prezzo"] = ul.prezzo;

                        //if (ul.ctv != DBNull.Value || ul.ctv != null)
                        row["ctv"] = ul.ctv;

                        row["partvia"] = ul.partvia;
                        row["partviaal"] = ul.partviaal;
                        row["datadiRiferimento"] = ul.datadiRiferimento;
                        row["datadiSottoscrizione"] = ul.datadiSottoscrizione;


                        row["dataValNavAl"] = ul.dataValNavAl;
                        row["codiceStato"] = ul.codiceStato;
                        row["dataInizioRendimento"] = ul.dataInizioRendimento;
                        row["dataTrimestreRendimento"] = ul.dataTrimestreRendimento;

                        //if (ul.rendimentoDaSottoscrizione != DBNull.Value || ul.rendimentoDaSottoscrizione != null)
                        row["rendimentoDaSottoscrizione"] = ul.rendimentoDaSottoscrizione;

                        row["rendimentoDaInizioTrimestre"] = ul.rendimentoDaInizioTrimestre;
                        row["dataAnnoRendimento"] = ul.dataAnnoRendimento;

                        //if (ul.rendimentoDaInizioAnno != DBNull.Value || ul.rendimentoDaInizioAnno != null)
                        row["rendimentoDaInizioAnno"] = ul.rendimentoDaInizioAnno;

                        //if (ul.valore != DBNull.Value || ul.valore != null)
                        row["valore"] = ul.valore;

                        dtGetContrattoSintesiPerCliente.Rows.Add(row);
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message + "; Web Service: GlobalPosition; Web Method: GetContrattoSintesiPerCliente", ex.InnerException);
            }
            if (contesto != null && contesto.Session != null) contesto.Session[chiaveS] = dtGetContrattoSintesiPerCliente;
            return dtGetContrattoSintesiPerCliente;
        }
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="chiave"></param>
    /// <param name="codiceContratto"></param>
    /// <param name="infoCliente"></param>
    /// <returns></returns>
    public DataTable GetContrattoContoCorrenteSaldo(ChiaveCliente chiave, string conto, InfoClient infoCliente)
    {
        #region Chiamata al metodo getCliente del WebServices Anagrafica
        string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
        string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
        string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();
        DataTable dtContrattoContoCorrenteSaldo;
        ContrattoContoCorrenteSaldoRes risposta;

        string _proxy;
        if (ConfigurationManager.AppSettings["PROXY"] != null)
            _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
        else
            _proxy = "";
        #endregion

        try
        {
            #region Chiamata al metodo getCliente del WebServices Global Position

            GlobalPosition wsglobalposition = new GlobalPosition();
            wsglobalposition.PreAuthenticate = true;
            wsglobalposition.Url = _wsurl;

            System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
            wsglobalposition.Credentials = cred;

            // Settaggio eventuale proxy
            if (_proxy.Trim() != "")
                wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

            System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

            risposta = wsglobalposition.getContrattoContoCorrenteSaldo(chiave, conto, infoCliente);
            #endregion

            #region Creazione DataTable GetContrattoUnitLinkedSaldo e aggiungo una riga e la aggiungo alla tabella
            dtContrattoContoCorrenteSaldo = new DataTable("DTCONTRATTOCONTOCORRENTESALDO");
            dtContrattoContoCorrenteSaldo.Columns.Add("SaldoContabile", typeof(decimal));
            dtContrattoContoCorrenteSaldo.Columns.Add("SaldoDisponibile", typeof(decimal));

            if (risposta.info.errors[0].codiceErrore == 0)
            {
                dtContrattoContoCorrenteSaldo.Rows.Add(Convert.ToDecimal(risposta.contrattoContoCorrenteSaldo.saldoContabile), Convert.ToDecimal(risposta.contrattoContoCorrenteSaldo.saldoDisponibile));

            }
            else
            {
                if (risposta.info.errors[0].codiceErrore == 50)
                {
                    Exception ex = new Exception();
                    ex.Data.Add("CodiceErrore", 50);
                    throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale, ex);
                }
                else
                    throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale);

            }
            #endregion
        }
        catch (Exception ex)
        {

            throw new Exception(ex.Message + "; Web Service: GlobalPosition; Web Method: getContrattoContoCorrenteSaldo", ex.InnerException);
        }

        return dtContrattoContoCorrenteSaldo;
    }

    /// <summary>
    /// Recupera un datatable contenente le partite viaggianti in investimento.
    /// </summary>
    /// <param name="chiave"></param>
    /// <param name="infoCliente"></param>
    /// <returns></returns>
    public DataTable GetPartiteViaggiantiInv(ChiaveCliente chiave, InfoClient infoCliente, int chiaveclientepb)
    {
        ////Ratt�
        //this.setCodiceFiscaleMandatoFiduciarie(ref chiave);
        GestioneCliente.ImpostaCodiceFiscaleMandato(chiaveclientepb, ref chiave);

        string chiaveS = "GlobalPositionWS_GetPartiteViaggiantiInv";
        HttpContext contesto = HttpContext.Current;
        object PartiteViaggiantiInv = null;
        if (contesto != null && contesto.Session != null) PartiteViaggiantiInv = contesto.Session[chiaveS];

        if (PartiteViaggiantiInv != null)
        {
            return (DataTable)PartiteViaggiantiInv;
        }
        else
        {
            #region Chiamata al metodo getCliente del WebServices Anagrafica
            string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
            string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
            string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();
            DataTable dtGetPartiteViaggiantiInv;

            string _proxy;
            if (ConfigurationManager.AppSettings["PROXY"] != null)
                _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
            else
                _proxy = "";
            #endregion

            try
            {
                #region Chiamata al metodo getCliente del WebServices Global Position

                GlobalPosition wsglobalposition = new GlobalPosition();
                wsglobalposition.PreAuthenticate = true;
                wsglobalposition.Url = _wsurl;

                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
                wsglobalposition.Credentials = cred;

                // Settaggio eventuale proxy
                if (_proxy.Trim() != "")
                    wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

                System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

                PartiteViaggiantiInvRes risposta = wsglobalposition.getPartiteViaggiantiInv(chiave, infoCliente);


                #endregion

                #region Creazione DataTable GetPartiteViaggiantiInv e aggiungo una riga e la aggiungo alla tabella
                dtGetPartiteViaggiantiInv = new DataTable("DTPARTITEVIAGGIANTIINV");
                dtGetPartiteViaggiantiInv.Columns.Add("codiceConferimento", typeof(String));
                dtGetPartiteViaggiantiInv.Columns.Add("descrizioneProdotto", typeof(String));
                dtGetPartiteViaggiantiInv.Columns.Add("importoVersato", typeof(decimal));
                dtGetPartiteViaggiantiInv.Columns.Add("dataDiAcquisizione", typeof(String));
                dtGetPartiteViaggiantiInv.Columns.Add("dataDiIncasso", typeof(String));
                dtGetPartiteViaggiantiInv.Columns.Add("dataValutaFondi", typeof(String));
                dtGetPartiteViaggiantiInv.Columns.Add("nota", typeof(String));

                DataRow row;
                if (risposta.info.errors[0].codiceErrore == 0 || risposta.info.errors[0].codiceErrore == 20)
                {
                    foreach (PartiteViaggiantiInv ul in risposta.PartiteViaggiantiInv)
                    {
                        row = dtGetPartiteViaggiantiInv.NewRow();
                        row["codiceConferimento"] = ul.codiceConferimento;
                        row["descrizioneProdotto"] = ul.descrProdotto;
                        row["importoVersato"] = ul.importoVersato;
                        row["dataDiAcquisizione"] = ul.dataAcquisizione;
                        row["dataDiIncasso"] = ul.dataIncasso;
                        row["dataValutaFondi"] = ul.dataValutaFondo;
                        row["nota"] = ul.nota;

                        dtGetPartiteViaggiantiInv.Rows.Add(row);
                    }
                }
                else
                {
                    if (risposta.info.errors[0].codiceErrore == 50)
                    {
                        Exception ex = new Exception();
                        ex.Data.Add("CodiceErrore", 50);
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale, ex);
                    }
                    else
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale);

                }
                #endregion
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message + "; Web Service: GlobalPosition; Web Method: GetPartiteViaggiantiInv", ex.InnerException);
            }
            if (contesto != null && contesto.Session != null) contesto.Session[chiaveS] = dtGetPartiteViaggiantiInv;
            return dtGetPartiteViaggiantiInv;
        }
    }

    /// <summary>
    /// Recupera un datatable contenente le partite viaggianti in disinvestimento.
    /// </summary>
    /// <param name="chiave"></param>
    /// <param name="infoCliente"></param>
    /// <returns></returns>
    public DataTable GetPartiteViaggiantiDisInv(ChiaveCliente chiave, InfoClient infoCliente, int chiaveclientepb)
    {
        ////Ratt�
        //this.setCodiceFiscaleMandatoFiduciarie(ref chiave);
        GestioneCliente.ImpostaCodiceFiscaleMandato(chiaveclientepb, ref chiave);

        string chiaveS = "GlobalPositionWS_GetPartiteViaggiantiDisInv";
        HttpContext contesto = HttpContext.Current;
        object PartiteViaggiantiDisInv = null;
        if (contesto != null && contesto.Session != null) PartiteViaggiantiDisInv = contesto.Session[chiaveS];

        if (PartiteViaggiantiDisInv != null)
        {
            return (DataTable)PartiteViaggiantiDisInv;
        }
        else
        {
            #region Chiamata al metodo getCliente del WebServices Anagrafica
            string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
            string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
            string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();
            DataTable dtGetPartiteViaggiantiDisInv;

            string _proxy;
            if (ConfigurationManager.AppSettings["PROXY"] != null)
                _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
            else
                _proxy = "";
            #endregion

            try
            {
                #region Chiamata al metodo getCliente del WebServices Global Position

                GlobalPosition wsglobalposition = new GlobalPosition();
                wsglobalposition.PreAuthenticate = true;
                wsglobalposition.Url = _wsurl;

                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
                wsglobalposition.Credentials = cred;

                // Settaggio eventuale proxy
                if (_proxy.Trim() != "")
                    wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

                System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

                //PartiteViaggiantiInvRes risposta = wsglobalposition.getPartiteViaggiantiInv(chiave, infoCliente); // d.lisena da cambiare
                PartiteViaggiantiDisInvRes risposta = wsglobalposition.getPartiteViaggiantiDisInv(chiave, infoCliente);


                #endregion

                #region Creazione DataTable GetPartiteViaggiantiDisInv e aggiungo una riga e la aggiungo alla tabella
                dtGetPartiteViaggiantiDisInv = new DataTable("DTPARTITEVIAGGIANTIDISINV");
                dtGetPartiteViaggiantiDisInv.Columns.Add("codiceConferimento", typeof(String));
                dtGetPartiteViaggiantiDisInv.Columns.Add("descrizioneProdotto", typeof(String));
                dtGetPartiteViaggiantiDisInv.Columns.Add("importoVersato", typeof(decimal));
                dtGetPartiteViaggiantiDisInv.Columns.Add("dataDiAcquisizione", typeof(String));
                dtGetPartiteViaggiantiDisInv.Columns.Add("dataDiIncasso", typeof(String));
                dtGetPartiteViaggiantiDisInv.Columns.Add("dataValutaFondi", typeof(String));
                dtGetPartiteViaggiantiDisInv.Columns.Add("nota", typeof(String));

                DataRow row;
                if (risposta.info.errors[0].codiceErrore == 0 || risposta.info.errors[0].codiceErrore == 20)
                {
                    foreach (PartiteViaggiantiDisInv ul in risposta.PartiteViaggiantiDisInv)
                    {
                        row = dtGetPartiteViaggiantiDisInv.NewRow();
                        row["codiceConferimento"] = ul.codiceConferimento;
                        row["descrizioneProdotto"] = ul.descrProdotto;
                        row["importoVersato"] = ul.importoVersato;
                        row["dataDiAcquisizione"] = ul.dataAcquisizione;
                        row["dataDiIncasso"] = ul.dataIncasso;
                        row["dataValutaFondi"] = ul.dataValutaFondo;
                        row["nota"] = ul.nota;

                        dtGetPartiteViaggiantiDisInv.Rows.Add(row);
                    }
                }
                else
                {
                    if (risposta.info.errors[0].codiceErrore == 50)
                    {
                        Exception ex = new Exception();
                        ex.Data.Add("CodiceErrore", 50);
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale, ex);
                    }
                    else
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale);

                }
                #endregion
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message + "; Web Service: GlobalPosition; Web Method: GetPartiteViaggiantiDisInv", ex.InnerException);
            }
            if (contesto != null && contesto.Session != null) contesto.Session[chiaveS] = dtGetPartiteViaggiantiDisInv;
            return dtGetPartiteViaggiantiDisInv;
        }
    }

    /// <summary>
    /// Recupera le PartiteViaggianti sia quelle in Investimento che quelle in Disinvestimento.
    /// </summary>
    /// <param name="chiave"></param>
    /// <param name="infoCliente"></param>
    /// <returns></returns>
    /// <remarks>
    /// E' il metodo introdotto ad Agosto 2012 per il recupero delle partite viaggianti. 
    /// Inizialmente sar� utilizzato nella PhotoData. Da verificare se in futuro rimpiazzer� completamente i metodi GetPartiteViaggiantiInv e GetPartiteViaggiantiDisInv.
    /// </remarks>
    public DataTable GetPartiteViaggianti(ChiaveCliente chiave, InfoClient infoCliente, int chiaveclientepb)
    {
        //this.setCodiceFiscaleMandatoFiduciarie(ref chiave);
        GestioneCliente.ImpostaCodiceFiscaleMandato(chiaveclientepb, ref chiave);

        string chiaveS = "GlobalPositionWS_GetPartiteViaggianti";
        HttpContext contesto = HttpContext.Current;

        DataTable dtPartiteViaggianti = null;

        if (contesto != null && contesto.Session != null)
            dtPartiteViaggianti = (DataTable)contesto.Session[chiaveS];

        if (dtPartiteViaggianti != null)
        {
            return dtPartiteViaggianti;
        }
        else
        {
            dtPartiteViaggianti = new DataTable("DTPARTITEVIAGGIANTI");

            #region Chiamata al metodo getCliente del WebServices Anagrafica

            string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
            string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
            string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();

            string _proxy;
            if (ConfigurationManager.AppSettings["PROXY"] != null)
                _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
            else
                _proxy = "";

            #endregion

            try
            {
                #region Chiamata al metodo getPartiteViaggianti del WebServices Global Position

                GlobalPosition wsglobalposition = new GlobalPosition();
                wsglobalposition.PreAuthenticate = true;
                wsglobalposition.Url = _wsurl;

                System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
                wsglobalposition.Credentials = cred;

                // Settaggio eventuale proxy
                if (_proxy.Trim() != "")
                    wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

                System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

                PartiteViaggiantiRes risposta = wsglobalposition.getPartiteViaggianti(chiave, infoCliente);


                #endregion

                #region Creazione DataTable GetPartiteViaggianti e aggiungo una riga e la aggiungo alla tabella

                dtPartiteViaggianti.Columns.Add("codiceAnagrafico", typeof(string));
                dtPartiteViaggianti.Columns.Add("codiceContratto", typeof(string));
                dtPartiteViaggianti.Columns.Add("codiceFiscale", typeof(string));
                dtPartiteViaggianti.Columns.Add("codiceMandato", typeof(string));
                dtPartiteViaggianti.Columns.Add("codiceProdotto", typeof(string));
                dtPartiteViaggianti.Columns.Add("dataIncasso", typeof(string));
                dtPartiteViaggianti.Columns.Add("dataValidita", typeof(string));
                dtPartiteViaggianti.Columns.Add("dataValutaFondo", typeof(string));
                dtPartiteViaggianti.Columns.Add("importoVersato", typeof(double));
                dtPartiteViaggianti.Columns.Add("progressivoMovimento", typeof(string));
                dtPartiteViaggianti.Columns.Add("tipoOperazione", typeof(string));
                dtPartiteViaggianti.Columns.Add("sottoTipoOperazione", typeof(string));

                DataRow row;

                if (risposta.info.errors[0].codiceErrore == 0 || risposta.info.errors[0].codiceErrore == 20)
                {
                    foreach (PartiteViaggianti ul in risposta.PartiteViaggianti)
                    {
                        row = dtPartiteViaggianti.NewRow();
                        row["codiceAnagrafico"] = ul.codAna;
                        row["codiceContratto"] = ul.codConf;
                        row["codiceFiscale"] = ul.codFis;
                        row["codiceMandato"] = ul.codMan;
                        row["codiceProdotto"] = ul.codProd;
                        row["dataIncasso"] = ul.dtInc;
                        row["dataValidita"] = ul.dtValid;
                        row["dataValutaFondo"] = ul.dtValutaFondo;
                        row["importoVersato"] = ul.impVers;
                        row["progressivoMovimento"] = ul.progMov;
                        row["tipoOperazione"] = ul.tipoOper;
                        row["sottoTipoOperazione"] = ul.tipoOpes;

                        dtPartiteViaggianti.Rows.Add(row);
                    }
                }
                else
                {
                    if (risposta.info.errors[0].codiceErrore == 50)
                    {
                        Exception ex = new Exception();
                        ex.Data.Add("CodiceErrore", 50);
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale, ex);
                    }
                    else
                        throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale);

                }
                #endregion
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message + "; Web Service: GlobalPosition; Web Method: GetPartiteViaggianti", ex.InnerException);
            }
            if (contesto != null && contesto.Session != null)
                contesto.Session[chiaveS] = dtPartiteViaggianti;

            return dtPartiteViaggianti;
        }
    }

    public List<string> GetIntestatari(ChiaveCliente chiave, string codiceContratto, InfoClient infoCliente, int chiaveclientepb)
    {
        GestioneCliente.ImpostaCodiceFiscaleMandato(chiaveclientepb, ref chiave);

        List<string> intestatari = new List<string>();

        #region Chiamata al metodo getIntestatari

        string _wsurl = ConfigurationManager.AppSettings["WSGLOBALPOSITION"].ToString();
        string _nomeutente = ConfigurationManager.AppSettings["NOMEUTENTENAC"].ToString();
        string _password = ConfigurationManager.AppSettings["PASSWORDNAC"].ToString();

        string _proxy;
        if (ConfigurationManager.AppSettings["PROXY"] != null)
            _proxy = ConfigurationManager.AppSettings["PROXY"].ToString();
        else
            _proxy = "";

        #endregion

        try
        {

            #region Chiamata al metodo getPartiteViaggianti del WebServices Global Position

            GlobalPosition wsglobalposition = new GlobalPosition();
            wsglobalposition.PreAuthenticate = true;
            wsglobalposition.Url = _wsurl;

            System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_nomeutente, _password);
            wsglobalposition.Credentials = cred;

            // Settaggio eventuale proxy
            if (_proxy.Trim() != "")
                wsglobalposition.Proxy = new System.Net.WebProxy(_proxy);

            System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(VerifyServerCertificate);

            IntestatariRes risposta = wsglobalposition.getIntestatari(chiave, codiceContratto, infoCliente);


            #endregion

            #region Creazione lista intestatari

            if (risposta.info.errors[0].codiceErrore == 0 || risposta.info.errors[0].codiceErrore == 20)
            {
                foreach (Intestatario objIntestatario in risposta.tuttiIntestatari)
                {
                    if (!string.IsNullOrEmpty(objIntestatario.posizione) && !string.IsNullOrEmpty(objIntestatario.nomeCognome))
                    {
                        intestatari.Add(string.Format("{0}� {1}", Convert.ToInt32(objIntestatario.posizione).ToString("D"), objIntestatario.nomeCognome));
                    }
                }
            }
            else
            {
                if (risposta.info.errors[0].codiceErrore == 50)
                {
                    Exception ex = new Exception();
                    ex.Data.Add("CodiceErrore", 50);
                    throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale, ex);
                }
                else
                    throw new Exception(risposta.info.errors[0].messaggioPerUtenteFinale);

            }
            #endregion

        }
        catch (Exception)
        {

            throw;
        }

        return intestatari;

    }

    private 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 void setCodiceFiscaleMandatoFiduciarie(ref ChiaveCliente _chiaveCliente)
    //{
    //    if (_chiaveCliente.codicefiscale.Contains("@"))
    //    {
    //        PrometeiaMessage.Fiduciarie _fiduciarie = new PrometeiaMessage.Fiduciarie();
    //        _fiduciarie.LoadFiduciarie();
    //        string[] valori = _chiaveCliente.codicefiscale.Split('@');
    //        _chiaveCliente.codicefiscale = _fiduciarie.getPIva(valori[0]);
    //        _chiaveCliente.codiceMandato = valori[1];

    //    }
    //}
}