using System;
using System.Text;

using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Threading;
using System.Collections.Generic;

public partial class VerificheCampione : System.Web.UI.Page
{
    protected string rete = "";
    protected string codicePB = "";

    protected string cognomeCliente = "";
    protected string nomeCliente = "";
    protected string codiceFiscale = "";
    protected string idProfilo = "";

    protected string dataSottoscrizioneDA = "";
    protected string dataSottoscrizioneA = "";
    protected string RFA = "";
    protected string VAR = "";
    private const string ASCENDING = " ASC";
    private const string DESCENDING = " DESC";

 




    protected void Page_Load(object sender, EventArgs e)
    {
        #region Autorizzazione
        Utente utenteAut;
        string userName = User.Identity.Name;
        if (WebConfigParameter.getParameter("Ambiente").ToUpper() == "ESTERNO")
        {
            string codiceApplicazione = WebConfigParameter.getParameter("CodiceApplicazione");
            utenteAut = Utente.GetAutorizzazioniAccessoGestioneControlli(userName, codiceApplicazione);
        }
        else
        {
            int pos = userName.IndexOf("\\") + 1;
            string codiceUtenteWindows = userName.Substring(pos, userName.Length - pos).ToUpper();
            utenteAut = new Utente();
            utenteAut.UserId = codiceUtenteWindows;
            utenteAut.Nome = "Utente di Prova";
            utenteAut.Cognome = "US-RP-SO-SI";
            utenteAut.UtenteAutorizzatoApplicazione = true;
            utenteAut.ProfiloUtenteLoggato = ProfiloUtenteLoggato.RP;
        }

        if (utenteAut.ProfiloUtenteLoggato == ProfiloUtenteLoggato.SO || utenteAut.ProfiloUtenteLoggato == ProfiloUtenteLoggato.RP)
            dg.Columns[dg.Columns.Count - 1].Visible = true;
        else
            dg.Columns[dg.Columns.Count - 1].Visible = false;
        #endregion

        #region Gestione Provenienza da
        if (!IsPostBack)
        { 
            
            string tiporeport = "";
            string verificati = "";
            string esito = "";
            //string prov = "";

            
            if (Request.QueryString["tiporeport"] != null)
            {
                tiporeport = Request.QueryString["tiporeport"].ToString();

                if (tiporeport == "D")
                    CBDiagnosi.Checked = true;
                else if (tiporeport == "M")
                    CBMonitoraggio.Checked = true;
            }

                
            if (Request.QueryString["verificati"] != null)
            {
                verificati = Request.QueryString["verificati"].ToString();
                if (verificati == "1")
                    CheckBoxVerificato.Checked = true;
                else  if (verificati == "0")
                    CheckBoxNonVerificato.Checked = true;

            }
                    
                    
            if (Request.QueryString["esito"] != null)
            {
                esito = Request.QueryString["esito"].ToString();

                if (esito == "OK")
                    CheckBoxOK.Checked = true;
                else if (esito == "KO")
                    CheckBoxKO.Checked = true;
            }

            if (Request.QueryString["prov"] != null)
            {
                FillDataGrid();
            }


        }
        #endregion
    }

    protected void Ricerca_Click(object sender, EventArgs e)
    {
        FillDataGrid();
    }

    private void FillDataGrid()
    {
        DataTable dtDg = GetData();

        if (dtDg.Rows.Count > 0)
        {
            //dg.PageIndex = 0;
            dg.DataSource = dtDg;
            dg.DataBind();
            dg.Visible = true;
            //dg.SelectedIndex = -1;
        }
        else
        { 
            // creo item per il datagrid
            DataRow dr = dtDg.NewRow();
            dr["IdReport"] = 1;
            dr["Rete"] = "";
            dr["Cod_Agente"] = "";
            dr["NOMINATIVOCLIENTE"] = "";
            dr["TipoReport"] = "";
            dr["UserModify"] = "";
            dr["VERIFICA"] = false;
            dr["Esito"] = "-";
            //dr["Cod_Fiscale "] = "";
            dr["pdfC6"] = 1;
            dtDg.Columns["Cod_Fiscale"].AllowDBNull = true;
            dtDg.Rows.Add(dr);
            dg.DataSource = dtDg;
            dg.DataBind();

            int TotalColumns = dg.Rows[0].Cells.Count;
            dg.Rows[0].Cells.Clear();
            dg.Rows[0].Cells.Add(new TableCell());
            dg.Rows[0].Cells[0].ColumnSpan = TotalColumns;
            dg.Rows[0].Cells[0].Text = "Nessun Record Trovato"; 
        }
        
    }

    private DataTable GetData()
    {
        List<Parametro> parametri = new List<Parametro>();

        #region Parametri
        ProcessoVerificaCls.loadValueParameter("Rete", DropDownListRete.SelectedValue, DbType.String,    ref parametri);

        ProcessoVerificaCls.loadValueParameter("CodicePB", txtCodicePB.Text, DbType.String,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("NomeCliente", txtNomeCliente.Text, DbType.String,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("CognomeCliente", txtCognomeCliente.Text, DbType.String,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("CodiceFiscale", txtCodiceFiscale.Text, DbType.String,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("DataSottDA", txtDataSottDA.Text, DbType.DateTime, ref parametri);

        ProcessoVerificaCls.loadValueParameter("DataSottA", txtDataSottA.Text,DbType.DateTime,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("RFADA", txtRFADA.Text,DbType.Currency,  ref parametri);

        string profilo = "";
        if (CBPrudente.Checked)
            profilo += "1|";
        if (CBModerato.Checked)
            profilo += "2|";
        if (CBEquilibrato.Checked)
            profilo += "3|";
        if (CBDinamico.Checked)
            profilo += "4|";
        if (CBAggressivo.Checked)
            profilo += "5|";

        ProcessoVerificaCls.loadValueParameter("Profilo", profilo, DbType.String,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("RFAA", txtRFAA.Text, DbType.Currency,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("VaRA", txtVaRA.Text, DbType.Currency,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("VaRDA", txtVaRDA.Text, DbType.Currency,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("Diagnosi", CBDiagnosi.Checked, DbType.Int16,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("Monitoraggio", CBMonitoraggio.Checked, DbType.Int16,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("Verificato", CheckBoxVerificato.Checked, DbType.Int16,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("NonVerificato", CheckBoxNonVerificato.Checked,DbType.Int16,  ref parametri);
        
        ProcessoVerificaCls.loadValueParameter("OK", CheckBoxOK.Checked, DbType.Int16,  ref parametri);

        ProcessoVerificaCls.loadValueParameter("KO", CheckBoxKO.Checked, DbType.Int16,  ref parametri);
        #endregion

        DataTable dtDgData = DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerStampeC6, "C6MartPeriodico.GC_VerificheCampioneSelect", parametri);

        return dtDgData;

    }

    private DataTable GetDataXmlFake()
    {
        StringBuilder xml = new StringBuilder();
        xml.Append("<?xml version=\"1.0\" standalone=\"yes\"?>");
        xml.Append("<NewDataSet>");
        xml.Append("<xs:schema id=\"NewDataSet\" xmlns=\"\" ");
        xml.Append(" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"");
        xml.Append("   xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">");
        xml.Append("<xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:Locale=\"it-IT\">");
        xml.Append("<xs:complexType>");
        xml.Append("<xs:choice maxOccurs=\"unbounded\">");
        xml.Append("<xs:element name=\"Table\">");
        xml.Append("<xs:complexType>");
        xml.Append("<xs:sequence>");
        xml.Append("<xs:element name=\"Rete\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("<xs:element name=\"CodicePB\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("<xs:element name=\"CognomePB\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("<xs:element name=\"TipoReport\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("<xs:element name=\"UserModify\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("<xs:element name=\"Verifica\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("<xs:element name=\"Esito\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("<xs:element name=\"PDF\" type=\"xs:string\" minOccurs=\"0\" />");
        xml.Append("</xs:sequence>");
        xml.Append("</xs:complexType>");
        xml.Append("</xs:element>");
        xml.Append("</xs:choice>");
        xml.Append("</xs:complexType>");
        xml.Append("</xs:element>");
        xml.Append("</xs:schema>");
        xml.Append("<Table>");
        xml.Append("<Rete>Fideuram</Rete>");
        xml.Append("<CodicePB>000011</CodicePB>");
        xml.Append("<CognomePB>Rossi Mario </CognomePB>");
        xml.Append("<TipoReport>Diagnosi</TipoReport>");
        xml.Append("<UserModify>SOP001</UserModify>");
        xml.Append("<Verifica>True</Verifica>");
        xml.Append("<Esito>OK</Esito>");
        xml.Append("<PDF>-</PDF>");
        xml.Append("</Table>");
        xml.Append("<Table>");
        xml.Append("<Rete>Fideuram</Rete>");
        xml.Append("<CodicePB>000012</CodicePB>");
        xml.Append("<CognomePB>Verdi Giovanni </CognomePB>");
        xml.Append("<TipoReport>Monitoraggio</TipoReport>");
        xml.Append("<UserModify>SOP002</UserModify>");
        xml.Append("<Verifica>False</Verifica>");
        xml.Append("<Esito>-</Esito>");
        xml.Append("<PDF>-</PDF>");

        xml.Append("</Table>");
        xml.Append("<Table>");
        xml.Append("<Rete>San Paolo Invest</Rete>");
        xml.Append("<CodicePB>000013</CodicePB>");
        xml.Append("<CognomePB>Bianchi Luca </CognomePB>");
        xml.Append("<TipoReport>Diagnosi</TipoReport>");
        xml.Append("<UserModify>SOP003</UserModify>");
        xml.Append("<Verifica>True</Verifica>");
        xml.Append("<Esito>KO</Esito>");
        xml.Append("<PDF>-</PDF>");
        xml.Append("</Table>");
        xml.Append("<Table>");
        xml.Append("<Rete>Fideuram</Rete>");
        xml.Append("<CodicePB>000014</CodicePB>");
        xml.Append("<CognomePB>Gialli Mario </CognomePB>");
        xml.Append("<TipoReport>Diagnosi</TipoReport>");
        xml.Append("<UserModify>SOP005</UserModify>");
        xml.Append("<Verifica>True</Verifica>");
        xml.Append("<Esito>OK</Esito>");
        xml.Append("<PDF>-</PDF>");



        xml.Append("</Table>");
        xml.Append("<Table>");
        xml.Append("<Rete>Fideuram</Rete>");
        xml.Append("<CodicePB>000016</CodicePB>");
        xml.Append("<CognomePB>Rossi Mario </CognomePB>");
        xml.Append("<TipoReport>Monitoraggio</TipoReport>");
        xml.Append("<UserModify>SOP006</UserModify>");
        xml.Append("<Verifica>False</Verifica>");
        xml.Append("<Esito>-</Esito>");
        xml.Append("<PDF>-</PDF>");
        xml.Append("</Table>");
        xml.Append("</NewDataSet>");

        System.IO.StringReader xmlSR = new System.IO.StringReader(xml.ToString());
        //////
        DataSet ds = new DataSet();
        ds.ReadXml(xmlSR, XmlReadMode.ReadSchema);
        return ds.Tables["Table"];

    }

    protected void dg_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        dg.PageIndex = e.NewPageIndex;
        dg.DataSource = GetData();
        dg.DataBind();
    }


    protected void dg_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        
        string rete = ((Label)dg.Rows[e.RowIndex].FindControl("lblRete")) == null ?  "" : ((Label)dg.Rows[e.RowIndex].FindControl("lblRete")).Text;

        string codpb = ((Label)dg.Rows[e.RowIndex].FindControl("lblCodPB")) == null ? "" : ((Label)dg.Rows[e.RowIndex].FindControl("lblCodPB")).Text;

        string codfis = ((Label)dg.Rows[e.RowIndex].FindControl("lblCodiceFiscale")) == null ? "" : ((Label)dg.Rows[e.RowIndex].FindControl("lblCodiceFiscale")).Text;

        //string usermodify = ((Label)dg.Rows[e.RowIndex].FindControl("lblUserModify")) == null ? "" : ((Label)dg.Rows[e.RowIndex].FindControl("lblUserModify")).Text;
        string userName = User.Identity.Name;
                
        int pos = userName.IndexOf("\\") + 1;
        string usermodify = userName.Substring(pos, userName.Length - pos);

        
        string tiporeport = ((Label)dg.Rows[e.RowIndex].FindControl("lblTipoReport")) == null ? "" : ((Label)dg.Rows[e.RowIndex].FindControl("lblTipoReport")).Text;

        bool cbverificato = ((CheckBox)dg.Rows[e.RowIndex].FindControl("CheckBoxVerificaGrid")) == null ? false : ((CheckBox)dg.Rows[e.RowIndex].FindControl("CheckBoxVerificaGrid")).Checked;

        DropDownList ddlesito = (DropDownList)dg.Rows[e.RowIndex].FindControl("DLEsito");

        string esito = ddlesito == null ? "" : ddlesito.SelectedValue;

        ProcessoVerificaCls.Update(dg.DataKeys[e.RowIndex].Values[0].ToString(), rete, codpb, codfis, usermodify, tiporeport, cbverificato, esito);
        
        dg.EditIndex = -1;
        FillDataGrid(); 

    }
    protected void dg_RowEditing(object sender, GridViewEditEventArgs e)
    {
        dg.EditIndex = e.NewEditIndex;
        FillDataGrid(); 

    }
    protected void dg_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        dg.EditIndex = -1;
        FillDataGrid();

    }
    protected void dg_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortExpression = e.SortExpression;

        ViewState["SortExpression"] = sortExpression;

        if (GridViewSortDirection == SortDirection.Ascending)
        {
            GridViewSortDirection = SortDirection.Descending;
            SortGridView(sortExpression, DESCENDING);
        }

        else
        {
            GridViewSortDirection = SortDirection.Ascending;
            SortGridView(sortExpression, ASCENDING);
        } 
    }

    private SortDirection GridViewSortDirection
    {
        get
        {
            if (ViewState["sortDirection"] == null)
                ViewState["sortDirection"] = SortDirection.Ascending;

            return (SortDirection)ViewState["sortDirection"];

        }

        set { ViewState["sortDirection"] = value; }
    }

    private void SortGridView(string sortExpression, string direction)
    {
        //  You can cache the DataTable for improving performance
        DataTable dt = GetData();

        DataView dv = new DataView(dt);
        dv.Sort = sortExpression + direction;

        dg.DataSource = dv;
        dg.DataBind();
    }
}