using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Data;
using System.Configuration;
using System.Web.Security;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using Telerik.Web.UI;
using System.Globalization;

using Utilitaria;
using BE;
using BL;
public partial class acceso : System.Web.UI.Page
{
    BEUsuarios objet_Usuarios;
    BLUsuarios objlg_Usuarios;
    public string strAutocompletar;

    protected void Page_Init(object sender, EventArgs e)
    {
        //need to check here which control cause postback?

    }
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["imgLogoSGH"] = ConfigurationManager.AppSettings.Get("imgLogoSGH");
        Session["imgLogoEmpresa"] = ConfigurationManager.AppSettings.Get("imgLogoEmpresa");


        
        

        if (!Page.IsPostBack)
        {
            
            tblControlPeriodo.Visible = false;
            tblCreaPeriodos.Visible = false;
            tblLoggin.Visible = true;


            this.imgLogo.ImageUrl = ConfigurationManager.AppSettings.Get("imgLogoSGH");
            this.imgLogoEmpresa.ImageUrl = ConfigurationManager.AppSettings.Get("imgLogoEmpresa");
         
            cbxHotel.Items.Insert(0,new RadComboBoxItem("Seleccione..."));
            cbxHotel.Items[0].Value = "0";

            //Combo_Establecimientos();
            PopulateCombo_Empresa(String.Empty); // Diego 10/07/2013

            
            if (Request.QueryString["U"] != null)
            {
                IngresoDirectoLink();
            }

        }
       
            //this.Titulo.Text = Cls_Constantes.Titulo;
            //this.Empresa.Text = Cls_Constantes.Empresa;
            //this.Hotel.Text = Cls_Constantes.Hotel;

            if (Session["Titulo"] == null)
            {
                Session["Titulo"] = Cls_Utilitaria.f_MostrarTituloWeb(2002, 2).ToString().Trim();
            }

            if (Session["Empresa"] == null)
            {
                Session["Empresa"] = Cls_Utilitaria.f_MostrarTituloWeb(2003, 2).ToString().Trim();
            }
            if (Session["Hotel"] == null)
            {
                Session["Hotel"] = Cls_Utilitaria.f_MostrarTituloWeb(2004, 2).ToString().Trim();
            }
            if (Session["PiePagina"] == null)
            {
                Session["PiePagina"] = Cls_Utilitaria.f_MostrarTituloWeb(2008, 2).ToString().Trim();
            }
        
            //this.Titulo.Text = Session["Titulo"].ToString().Trim();
            //this.Empresa.Text = Session["Empresa"].ToString().Trim();
            //this.Hotel.Text = Session["Hotel"].ToString().Trim();

            //Diego 24/10/2013
            this.Titulo.Text = "Acceso";
            this.Empresa.Text = "Empresa";
            this.Hotel.Text = "Hotel";
            //Diego 24/10/2013

            cvEmpresa.ErrorMessage = "Seleccione " + Session["Empresa"].ToString().Trim() +".";
            cvHotel.ErrorMessage = "Seleccione " + Session["Hotel"].ToString().Trim() + "."; 
   }


    protected void showMessage(string strMessage)
    {
        ClientScript.RegisterStartupScript(this.GetType(), "Application", string.Format("alert('{0}');", HttpUtility.HtmlDecode(strMessage)), true);
    }

    private void Combo_Empresa(string strEstablecimientoID)
    {

        BLHoteles oBLHoteles = new BLHoteles();
        List<BEHoteles> loHoteles;
        DataTable DtIngreo = new DataTable();
        loHoteles = oBLHoteles.fnSelHotelesDin("where EstablecimientoID=" + strEstablecimientoID, "");
        cbxHotel.Items.Clear();

        this.cbxHotel.Items.Insert(0, new RadComboBoxItem("Todos"));
        this.cbxHotel.Items[0].Value = "0";
        //cbxHotel.Items.Insert(1, new RadComboBoxItem("Todos"));
        //cbxHotel.Items[1].Value = "0";

        for (int i = 0; i < loHoteles.Count; i++)
        {
            this.cbxHotel.Items.Insert(i + 1, new RadComboBoxItem(loHoteles[i].NombreHotel.ToString().Trim()));
            this.cbxHotel.Items[i + 1].Value = loHoteles[i].HotelID.ToString().Trim();
        }

        if (cbxHotel.SelectedValue == "") cbxHotel.SelectedValue = "0";

        if (Convert.ToInt32(Session["UsuarioHotelID"]) != 0)
        {
            cbxHotel.SelectedValue = "0";//     Session["UsuarioHotelID"].ToString();  
            cbxHotel.Enabled = false;
        }

        oBLHoteles = null;
        loHoteles = null;
    }

    private void Lista_ControlPeriodo(Int32 intEstablecimientoID)
    {
        BEControlPeriodo objet_ControlPeriodo = new BEControlPeriodo();
        BLControlPeriodo objlg_ControlPeriodo = new BLControlPeriodo();
        List<BEControlPeriodo> Col_ControlPeriodo;

        Col_ControlPeriodo = objlg_ControlPeriodo.fnSelControlPeriodoDin("where EstablecimientoId=" + intEstablecimientoID, "");

        int i = 0;
        String anio = "";
        String coma = "";
        if (Col_ControlPeriodo.Count() != 0)
        {
            for (i = 0; i < Col_ControlPeriodo.Count; i++)
            {
                anio = anio + coma + "'" + Col_ControlPeriodo[i].NombrePeriodo + "'";
                coma = ",";
            }
        }
        strAutocompletar = anio;

        objet_ControlPeriodo = null;
        objlg_ControlPeriodo = null;
        Col_ControlPeriodo = null;
    }

    private int busca_ControlPeriodo(Int32 intEstablecimientoID, Int32 intNombrePeriodo)
    {
        BEControlPeriodo objet_ControlPeriodo = new BEControlPeriodo();
        BLControlPeriodo objlg_ControlPeriodo = new BLControlPeriodo();
        List<BEControlPeriodo> Col_ControlPeriodo;

        Col_ControlPeriodo = objlg_ControlPeriodo.fnSelControlPeriodoDin("where EstablecimientoId=" + intEstablecimientoID + " and NombrePeriodo=" + intNombrePeriodo, "");

        int intRetorno = 0;

        if (Col_ControlPeriodo.Count() != 0)
        {
            intRetorno = Col_ControlPeriodo.Count();
        }

        objet_ControlPeriodo = null;
        objlg_ControlPeriodo = null;
        Col_ControlPeriodo = null;

        return intRetorno;
    }

    protected void imgIngresar_Click1(object sender, ImageClickEventArgs e)
    {
        objet_Usuarios = new BEUsuarios();
        objlg_Usuarios = new BLUsuarios();

        string strUsuario = this.txtUsuario.Text.Trim();
        string strContrasena = this.txtPassword.Text.Trim();

        Cls_Propiedades.PrivilegiosUsuario = objlg_Usuarios.fnPerSelUsuario(strUsuario.ToUpper(), strContrasena.ToUpper());

        //Login = objlg_Usuarios.fnPerSelUsuario(strUsuario, strContrasena);

        if (Cls_Propiedades.PrivilegiosUsuario.Count() == 0)
        {
            showMessage("Los datos ingresados son incorrectos");
            this.txtPassword.Text = "";
            this.txtUsuario.Text = "";
            this.txtUsuario.Focus();
            return;
        }
        else
        {
            ViewState["Usuario"] = Cls_Propiedades.PrivilegiosUsuario[0].NombreUsuario.ToUpper(); // Login[0].NombreUsuario;
            ViewState["Clave"] = Cls_Propiedades.PrivilegiosUsuario[0].Clave;// Login[0].Clave;

            if (ValidarClave(strContrasena.ToUpper()) && ValidarUsuario(strUsuario.ToUpper()))
            {
                Session["Usuario"] = Cls_Propiedades.PrivilegiosUsuario[0].NombreUsuario; // Login[0].NombreUsuario;
                Session["Clave"] = Cls_Propiedades.PrivilegiosUsuario[0].Clave; // Login[0].Clave;
                Session["UsuarioID"] = Cls_Propiedades.PrivilegiosUsuario[0].UsuarioID; // Login[0].UsuarioID;
                SqlConnection sqlConnection1 = new SqlConnection(GetConnectionString());
                SqlCommand cmd = new SqlCommand();
                SqlDataReader reader;

                cmd.CommandText = "select HotelID from Usuarios where usuarioid = " + Session["UsuarioID"] + "";
                cmd.CommandType = CommandType.Text;
                cmd.Connection = sqlConnection1;
                sqlConnection1.Open();
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Session["UsuarioHotelID"] = Convert.ToInt32(reader["HotelID"]);
                    //showMessage(Session["UsuarioHotelID"].ToString());
                }
                


                this.lblTitulo.Text = "Datos de la Empresa";
                tblControlPeriodo.Visible = true;
                tblCreaPeriodos.Visible = false;
                tblLoggin.Visible = false;
                Session.Timeout = 600;

                if (LeeCookie("EmpresaLogin") != "")
                {
                    //cbxEmpresa.SelectedValue = LeeCookie("EmpresaLogin");
                    //txtPeriodo.Text = LeeCookie("PeriodoLogin");
                    //Combo_Empresa(cbxEmpresa.SelectedValue.ToString());
                }
            }
            else
            {
                showMessage("Verifique que el Usuario o Contraseña esten escritos correctamente");
            }

        }


        objet_Usuarios = null;
        objlg_Usuarios = null;


    }

    private static string GetConnectionString()
    {
        return ConfigurationManager.ConnectionStrings["SHIOL_CONTA_BTHConnectionString"].ConnectionString;
    }

    private Boolean ValidarClave(String strContrasena)
    {
        String cuser = Convert.ToString(ViewState["Clave"]);
        if (strContrasena.Length == cuser.Length)
        {
            byte[] btext = Encoding.ASCII.GetBytes(strContrasena);
            byte[] buser = Encoding.ASCII.GetBytes(Convert.ToString(ViewState["Clave"]));
            for (int i = 0; i < btext.Length; i++)
                if (btext[i] != buser[i])
                    return false;
            return true;
        }
        else
            return false;
    }
    private Boolean ValidarUsuario(String strUsuario)
    {
        String cuser = Convert.ToString(ViewState["Usuario"]);
        if (strUsuario.Length == cuser.Length)
        {
            byte[] btext = Encoding.ASCII.GetBytes(strUsuario);
            byte[] buser = Encoding.ASCII.GetBytes(Convert.ToString(ViewState["Usuario"]));
            for (int i = 0; i < btext.Length; i++)
                if (btext[i] != buser[i])
                    return false;
            return true;
        }
        else
            return false;
    }
    protected void imgEntrar_Click(object sender, ImageClickEventArgs e)
    {

        BEUsuarios d = new BEUsuarios();

        if (cbxEmpresa.SelectedValue != "0")
        {
            Lista_ControlPeriodo(Convert.ToInt32(cbxEmpresa.SelectedValue));
        }

        Session["txtPeriodo"] = txtPeriodo.Text.Trim();
        Session["EmpresaID"] = cbxEmpresa.SelectedValue;
        Session["HotelID"] = cbxHotel.SelectedValue;
        Session["hidWidth"] = hidWidth.Value.ToString();

        CreaoActCookie("EmpresaLogin", cbxEmpresa.SelectedValue.ToString());
        CreaoActCookie("PeriodoLogin", txtPeriodo.Text.Trim());

        if (busca_ControlPeriodo(Convert.ToInt32(cbxEmpresa.SelectedValue), Convert.ToInt32(txtPeriodo.Text)) == 0)
        {
            tblControlPeriodo.Visible = false;
            tblLoggin.Visible = false;
            tblCreaPeriodos.Visible = true;
            
        }
        else
        {
            String AccesoConciliacion;
            BLParametrosGenerales objlg_ParametrosGenerales = new BLParametrosGenerales();
            BEParametrosGenerales objet_ParametrosGenerales = new BEParametrosGenerales();

            objet_ParametrosGenerales.ParametroGeneralID = 2016;
            AccesoConciliacion = objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim();

            //if (Request.QueryString["token"] == null) //Ingreso Directo
            //{
                //showMessage(Session["UsuarioID"].ToString());
                Cls_Propiedades.PrivilegiosUsuario[0].UsuarioID = Convert.ToInt32(Session["UsuarioID"].ToString());
                //Cls_Propiedades.PrivilegiosUsuario[0].EstablecimientoID = Session["EmpresaID"].ToString();
                Cls_Propiedades.PrivilegiosUsuario[0].HotelID = Session["HotelID"].ToString();
                Cls_Propiedades.PrivilegiosUsuario[0].Periodo = Session["txtPeriodo"].ToString();
                Cls_Propiedades.PrivilegiosUsuario[0].EmpresaID = Session["EmpresaID"].ToString();
            //}

            if (Session["UsuarioID"].ToString().Trim() == AccesoConciliacion)
            {
                Response.Redirect("Conciliacion/List_Conciliacion.aspx");
            }
            else
            {
                //Response.Redirect("BusquedaInteligente.aspx");

                Response.Redirect("bienvenida.aspx");
                
            }

        }
        
    }
   
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect(Utilitaria.Cls_Enums.CerrarSesion.Salir);
    }

    protected void btnAceptar_Click(object sender, EventArgs e) 
    {
        BEUsuarios usu = new BEUsuarios();
        BEAsientosContables objet_AsientosContables = new BEAsientosContables();
        BLAsientosContables objlg_AsientosContables = new BLAsientosContables();

        objet_AsientosContables.Cabecera = Utilitaria.Cls_Enums.TablasAsientosDetalle.Cabecera;
        objet_AsientosContables.Detallecabecera = Utilitaria.Cls_Enums.TablasAsientosDetalle.Detallecabecera;
        objet_AsientosContables.Empresa = cbxEmpresa.SelectedValue.Trim();
        objet_AsientosContables.Anio = Session["txtPeriodo"].ToString();

        objlg_AsientosContables.fnCreaTablasAsientos(objet_AsientosContables);

        objet_AsientosContables = null;
        objlg_AsientosContables = null;

        Response.Redirect("BusquedaInteligente.aspx");

    }
    protected void cbxEmpresa_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
    {
        PopulateCombo_Empresa(e.Value); // Diego 10/07/2013
    }

    private void PopulateCombo_Empresa(String SelectedValue)
    {
        BLEstablecimientos oBLEstablecimientos = new BLEstablecimientos();
        List<BEEstablecimientos> loEstablecimientos;

        loEstablecimientos = oBLEstablecimientos.fnSelEstablecimientosDin("", "NombreEstablecimiento");

        RadComboBoxItem _item = new RadComboBoxItem();
        _item.Text = "Seleccione...";
        _item.Value = "0";
        cbxEmpresa.Items.Add(_item);
        _item.DataBind();

        for (int i = 1; i <= loEstablecimientos.Count; i++)
        {
            RadComboBoxItem item = new RadComboBoxItem();

            item.Text = (string)loEstablecimientos[i - 1].CodigoEstablecimiento + " -> " + loEstablecimientos[i - 1].NombreEstablecimiento;
            item.Value = loEstablecimientos[i - 1].EstablecimientoID.ToString();

            cbxEmpresa.Items.Add(item);
            item.DataBind();
        }

        if (SelectedValue == "") cbxEmpresa.SelectedValue = "0";

        oBLEstablecimientos = null;
        loEstablecimientos = null;
    }
    protected void cbxEmpresa_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {

        
        this.cbxHotel.SelectedValue = "";
        this.cbxHotel.Text = "";
        if (cbxEmpresa.SelectedValue != "0")
        {
            Lista_ControlPeriodo(Convert.ToInt32(cbxEmpresa.SelectedValue));
        }

        Combo_Empresa(cbxEmpresa.SelectedValue.ToString());
        
      
    }

    private void CreaoActCookie(String name, String value)
    {
        if (Request.Cookies[name] == null)
        {
            HttpCookie myCookie = new HttpCookie(name, value);
            myCookie.Expires = DateTime.Now.AddDays(7);
            Response.Cookies.Add(myCookie);
        }
        else
        {
            HttpCookie myCookie = new HttpCookie(name);
            myCookie.Value = value;
            myCookie.Expires = DateTime.Now.AddDays(7);
            Response.Cookies.Add(myCookie);
        }
    }
    private String LeeCookie(String name)
    {
        HttpCookie myCookie = new HttpCookie(name);
        myCookie = Request.Cookies[name];
        if (myCookie != null)
            return myCookie.Value;
        else
            return "";
    }

    public static string Base64Decode(string base64EncodedData)
    {
        var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
        return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
    }

    private void IngresoDirectoLink()
    {
        objet_Usuarios = new BEUsuarios();
        objlg_Usuarios = new BLUsuarios();

        ViewState["Usuario"] = Request.QueryString["U"].ToString();
        ViewState["Clave"] = Request.QueryString["C"].ToString();// Login[0].Clave;

        Cls_Propiedades.PrivilegiosUsuario = objlg_Usuarios.fnPerSelUsuario(Request.QueryString["U"].ToString(), Base64Decode(Request.QueryString["C"].ToString()));

        Session["Usuario"] = Request.QueryString["U"].ToString();
        Session["Clave"] = Request.QueryString["C"].ToString(); // Login[0].Clave;
        Session["UsuarioID"] = Request.QueryString["ID"].ToString();


            this.lblTitulo.Text = "Datos de la Empresa";
            tblControlPeriodo.Visible = true;
            tblCreaPeriodos.Visible = false;
            tblLoggin.Visible = false;
            Session.Timeout = 600;

            if (LeeCookie("EmpresaLogin") != "")
            {
                //cbxEmpresa.SelectedValue = LeeCookie("EmpresaLogin");
                //txtPeriodo.Text = LeeCookie("PeriodoLogin");
                //Combo_Empresa(cbxEmpresa.SelectedValue.ToString());
            }

            objet_Usuarios = null;
            objlg_Usuarios = null;
        
    }

    
}
