using System;
using System.Data;
using System.Configuration;
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.Text;
using System.IO;

using System.Collections.Generic;
using System.Linq;
using BE;
using BL;
using Utilitaria;

using System.Data.SqlClient;
using Telerik.Web.UI;
//using System.Data.OleDb;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.ReportSource;

using CrystalDecisions;
using CrystalDecisions.Web;

[Serializable]
public partial class EstadoCuenta : System.Web.UI.Page
{
    String WhereCondition = "";
    String OrderByExpression = "";
// DECLARACIONES DE EXPORTAR
    //ReportDocument cryRpt;
    ReportDocument cryRpt = new ReportDocument();
    ParameterField paramField = new ParameterField();
    ParameterFields paramFields = new ParameterFields();
    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
    string reportPath;
    

    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Usuario"] == null)
        {
            Response.Redirect(Utilitaria.Cls_Enums.CerrarSesion.Salir);
        }

        if (!Page.IsPostBack)
        {
            ViewState["Click"] = "1";
            ViewState["FecDesde"] = Session["Desde"];
            ViewState["FecHasta"] = Session["Hasta"];

            tk_Grid.Columns[3].CurrentFilterFunction = Telerik.Web.UI.GridKnownFunction.StartsWith;

            if (ViewState["FecDesde"] != "" && ViewState["FecDesde"] != null)
            {
                txtDesde.DbSelectedDate = ViewState["FecDesde"].ToString();
            }
            if (ViewState["FecHasta"] != "" && ViewState["FecHasta"] != null)
            {
                txtHasta.DbSelectedDate = ViewState["FecHasta"].ToString();
            }

            txtPlanCuenta.Text = Session["CuentaInicio"].ToString();
            txtPlanCuentaFin.Text = Session["CuentaFin"].ToString();
        }
    }

    protected void tk_Grid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        Listar();
    }

    private void Listar()
    {
        //if (txtPlanCuentaFin.Text == "") txtPlanCuentaFin.Text = txtPlanCuenta.Text;
        Cls_Propiedades.variablesRpt.Clear();
        bEVariables objbebEVariables = new bEVariables();
        objbebEVariables.RootRPT = ConfigurationManager.AppSettings.Get("rptEstadoCuentaExporta");

        if (ViewState["Click"] == "1")
        {
            BLEstadoCuenta oBLEstadoCuenta = new BLEstadoCuenta();

            BEEstadoCuenta oBEEstadoCuenta = new BEEstadoCuenta();
            oBEEstadoCuenta.EstablecimientoID = Convert.ToInt32(Session["EmpresaID"]);
            oBEEstadoCuenta.Ejercicio = Session["txtPeriodo"].ToString();

            WhereCondition = "";
            OrderByExpression = " ORDER BY PlanDeCuentas.CodigoPlanCuenta, ACD.EmpresaID, ACD.TipoDocumentoID, ACD.NumeroDocumento";

            if (txtDesde.DbSelectedDate != null && txtHasta.DbSelectedDate == null)
            {
                txtDesde.DbSelectedDate = txtHasta.DbSelectedDate;
            }
            if (txtDesde.DbSelectedDate != null && txtHasta.DbSelectedDate != null)
            {
                WhereCondition = " (ACD.Dia BETWEEN '" + txtDesde.DbSelectedDate.ToString().Substring(0, 10).Trim() + "' AND '" + txtHasta.DbSelectedDate.ToString().Substring(0, 10).Trim() + "')";
            }

            if (txtPlanCuenta.Text != "" && txtPlanCuentaFin.Text == "")
            {
                txtPlanCuentaFin.Text = txtPlanCuenta.Text;
            }

            if (txtPlanCuenta.Text != "" && txtPlanCuentaFin.Text != null)
            {
                if (WhereCondition != "")
                {
                    WhereCondition += " AND (CodigoPlanCuenta BETWEEN '" + txtPlanCuenta.Text.Trim() + "' AND '" + txtPlanCuentaFin.Text.Trim() + "')";
                }
                else
                {
                    WhereCondition = "(CodigoPlanCuenta BETWEEN '" + txtPlanCuenta.Text.Trim() + "' AND '" + txtPlanCuentaFin.Text.Trim() + "')";
                }
            }
            //WhereCondition += "'";


            ViewState["Parametros"] = "?ep=" + Convert.ToInt32(Session["EmpresaID"]) + "&ej=" + Session["txtPeriodo"].ToString().Trim() + "&mes=" + txtDesde.DbSelectedDate.ToString().Substring(3, 2).Trim();
            Session["wc"] = WhereCondition;
            Session["ob"] = OrderByExpression;
            try
            {

                if (this.cbxTipo.SelectedValue.ToString().Trim() == "2")
                {
                    tk_Grid.Columns[2].Visible = false;
                    tk_Grid.Columns[5].Visible = true;
                    tk_Grid.Columns[6].Visible = true;
                    Cls_Propiedades.TempEstadoCuenta = oBLEstadoCuenta.fnSelEstadoCuentaDetalleAll(oBEEstadoCuenta, WhereCondition, OrderByExpression, "UCO_EstadosCuentaSaldos", 2);
                    this.lblTipo.Text = "Saldos";
                    this.lblTipo.DataBind();

                    objbebEVariables.EstablecimientoID = oBEEstadoCuenta.EstablecimientoID.ToString();
                    objbebEVariables.Ejercicio = oBEEstadoCuenta.Ejercicio.ToString();
                    objbebEVariables.Where = WhereCondition;
                    objbebEVariables.OrderBy = OrderByExpression;
                    objbebEVariables.NombreRPT = "rpt_EstadoCuentaPrintSaldos.rpt";
                    Cls_Propiedades.variablesRpt.Add(objbebEVariables);

                }
                else
                {
                    tk_Grid.Columns[2].Visible = true;
                    tk_Grid.Columns[5].Visible = false;
                    tk_Grid.Columns[6].Visible = false;
                    Cls_Propiedades.TempEstadoCuenta = oBLEstadoCuenta.fnSelEstadoCuentaDetalleAll(oBEEstadoCuenta, WhereCondition, OrderByExpression, "UCO_EstadosCuenta", 1);
                    this.lblTipo.Text = "Historico";

                    objbebEVariables.EstablecimientoID = oBEEstadoCuenta.EstablecimientoID.ToString();
                    objbebEVariables.Ejercicio = oBEEstadoCuenta.Ejercicio.ToString();
                    objbebEVariables.Where = WhereCondition;
                    objbebEVariables.OrderBy = OrderByExpression;
                    objbebEVariables.NombreRPT = "rpt_EstadoCuentaPrint.rpt";
                   Cls_Propiedades.variablesRpt.Add(objbebEVariables);
                }
            }
            catch (Exception ex)
            {
                showMessage(ex.Message);
            }
            oBLEstadoCuenta = null;
        }
        ViewState["Click"] = "";
        tk_Grid.DataSource = Cls_Propiedades.TempEstadoCuenta;
    }

    protected void btnActualizar_Click(object sender, EventArgs e)
    {
        ViewState["Click"] = "1";
        this.tk_Grid.Rebind();
    }

    protected void showMessage(string strMessage)
    {

        String Mensaje = strMessage.Replace("'", "").Replace(",", "-").Replace("\r\n", " ");
        RadScriptManager.RegisterStartupScript(this, this.GetType(), "Application", "alert('" + Mensaje + "');", true);
    }

    protected void tk_Grid_ItemCommand(object source, GridCommandEventArgs e)
    {
        tk_Grid.ExportSettings.ExportOnlyData = true;
        tk_Grid.ExportSettings.IgnorePaging = true;
        tk_Grid.ExportSettings.OpenInNewWindow = false;

        switch (e.CommandName)
        {
            case "ExportExcel":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    //tk_Grid.MasterTableView.PrepareExport

                    tk_Grid.ExportSettings.Excel.Format = Telerik.Web.UI.GridExcelExportFormat.Html;
                    tk_Grid.ExportSettings.ExportOnlyData = true; 

                    tk_Grid.MasterTableView.ExportToExcel();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportPDF":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToPdf();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportWord":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToWord();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportCSV":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToCSV();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "Print":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Imprime == 1)
                {
                    Response.Write(Cls_Utilitaria.f_Imprime());
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
        }
        //tk_Grid.Rebind();


        Listar();
    }

    String CurrUrl = "";
    String headertext;

    protected void tk_Grid_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridGroupHeaderItem)
        {
            GridGroupHeaderItem item = (GridGroupHeaderItem)e.Item;

            HyperLink hyperlnk = new HyperLink();
            System.Data.DataRowView groupDataRow = (System.Data.DataRowView)e.Item.DataItem;
            //hyperlnk.NavigateUrl = "#";
            headertext = item.DataCell.Text.Substring(7, item.DataCell.Text.Length - 7);
            hyperlnk.Text = headertext;
            if (headertext == "")
            {
                hyperlnk.Text = "Otros";
            }
            hyperlnk.CssClass = "gridtextbold";
            //CurrUrl = "frmListaAsientos.aspx?ID=" + groupDataRow["SubDiarioID"].ToString().Trim() + "&HTL=" + ViewState["HotelID"].ToString().Trim() + "&UNG=" + ViewState["UnidadNegocioID"].ToString().Trim() + "&ARA=" + ViewState["AreaID"].ToString().Trim() + "&FD=" + ViewState["FecDesde"].ToString() + "&FH=" + ViewState["FecHasta"].ToString();
            //hyperlnk.Attributes.Add("OnClick", "return AbreVentana('" + CurrUrl + "','DetalleAsientos');");
            item.DataCell.Controls.Clear();
            item.DataCell.Controls.Add(hyperlnk);

            headertext = item.DataCell.Text.Substring(item.DataCell.Text.IndexOf(':') + 1);

        }
        if (e.Item is GridGroupFooterItem)
        {
            GridGroupFooterItem item = (GridGroupFooterItem)e.Item;
            item["DebeSoles"].Style["border-top"] = "1px solid #000000";
            item["HaberSoles"].Style["border-top"] = "1px solid #000000";
            item["SaldoSoles"].Style["border-top"] = "1px solid #000000";
            item["DebeDolares"].Style["border-top"] = "1px solid #000000";
            item["HaberDolares"].Style["border-top"] = "1px solid #000000";
            item["SaldoDolares"].Style["border-top"] = "1px solid #000000";
        }


    }

    protected void Exportar_Data(object sender, EventArgs e)
    {
        //if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
        //{
        //    tk_Grid.ExportSettings.ExportOnlyData = true;
        //    tk_Grid.ExportSettings.IgnorePaging = true;
        //    tk_Grid.ExportSettings.OpenInNewWindow = false;
        //    tk_Grid.MasterTableView.ExportToExcel();
        //}
        //else
        //{
        //    showMessage("No posee los privilegios necesario para completar la operación");
        //}

        tk_Grid.ExportSettings.ExportOnlyData = true;
        tk_Grid.ExportSettings.IgnorePaging = true;
        tk_Grid.ExportSettings.OpenInNewWindow = true;

        switch ((sender as ImageButton).CommandName)
        {
            case "ExportExcel":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    //tk_Grid.MasterTableView.Columns[0].Visible = false;
                    //tk_Grid.MasterTableView.ExportToExcel();
                   
                    try
                    {
                        LoadReport();
                        //Se crea el documento de lectura y escritura
                        System.IO.MemoryStream rptStream = new System.IO.MemoryStream();
                        //se envia el reporte el stram y le indicamos el metodo de escritura o tipo de documento
                        rptStream = (System.IO.MemoryStream)cryRpt.ExportToStream(ExportFormatType.Excel);

                        //Limpiamos la memoria
                        Response.Clear();
                        Response.Buffer = true;

                        //Le indicamos el tipo de documento que vamos a exportar
                        Response.ContentType = "application/vnd.ms-excel";

                        //Automaticamente se descarga el archivo
                        Response.AddHeader("Content-Disposition", "attachment;filename=ESTADO_CUENTA.xls");

                        //Se escribe el archivo
                        Response.BinaryWrite(rptStream.ToArray());



                        //ExportOptions CrExportOptions;
                        //DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
                        //ExcelFormatOptions CrFormatTypeOptions = new ExcelFormatOptions();
                        //CrDiskFileDestinationOptions.DiskFileName = Server.MapPath(Cls_Propiedades.variablesRpt[0].RootRPT) + "Cuenta.xls";
                        //CrExportOptions = cryRpt.ExportOptions;
                        //CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                        //CrExportOptions.ExportFormatType = ExportFormatType.Excel;
                        //CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
                        //CrExportOptions.FormatOptions = CrFormatTypeOptions;
                        //cryRpt.Export();

                                
                    }
                    catch (Exception ex)
                    {
                        showMessage(ex.ToString());
                    }
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportPDF":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {


                    tk_Grid.MasterTableView.ExportToPdf();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportWord":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToWord();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportCSV":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToCSV();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "Print":

                if (Cls_Propiedades.PrivilegiosUsuario[0].Imprime == 1)
                {
                    //Response.Write(Cls_Utilitaria.f_Imprime());


                    Response.Write(Cls_Utilitaria.f_Show("rpt_EstadoCuenta.aspx" + ViewState["Parametros"], "EstadoCuenta"));


                    //Response.Write(Cls_Utilitaria.f_Show("http://www.google.com", "Reporte"));   
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
        }



    }



    private void LoadReport()
    {
        String strServidor = "";
        String strBaseDatos = "";
        String strUsuario = "";
        String strClave = "";

        reportPath = Server.MapPath(Cls_Propiedades.variablesRpt[0].RootRPT + "\\" + Cls_Propiedades.variablesRpt[0].NombreRPT);

        if (ConfigurationSettings.AppSettings.Get("TipoConexion").ToString() == "1")
        {
            strServidor = Encriptador.Encriptador.f_desencriptar(ConfigurationSettings.AppSettings.Get("Servidor"));
            strBaseDatos = Encriptador.Encriptador.f_desencriptar(ConfigurationSettings.AppSettings.Get("BaseDatos"));
            strUsuario = Encriptador.Encriptador.f_desencriptar(ConfigurationSettings.AppSettings.Get("Usuario"));
            strClave = Encriptador.Encriptador.f_desencriptar(ConfigurationSettings.AppSettings.Get("Clave"));
        }

        cryRpt.Load(reportPath);

        cryRpt.DataSourceConnections[0].SetConnection(strServidor, strBaseDatos, strUsuario, strClave);
        cryRpt.SetParameterValue("@EmpresaID", Cls_Propiedades.variablesRpt[0].EstablecimientoID);
        cryRpt.SetParameterValue("@Ejercicio", Cls_Propiedades.variablesRpt[0].Ejercicio);
        cryRpt.SetParameterValue("@WhereCondition", Cls_Propiedades.variablesRpt[0].Where);
        cryRpt.SetParameterValue("@OrderByExpression", Cls_Propiedades.variablesRpt[0].OrderBy);

        CRV_1.ReportSource = cryRpt;
        //CRV_1.DataBind();
        //CRV_1.Visible = false;
    }
  
    

}
