protected void btnAlmuerzoSalida_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this.controlHorario = this.controlHorarioBL.consultarDia(TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time"), this.colaborador);
                if (this.controlHorario != null)
                {
                    if (this.controlHorario.horaInicioAlmuerzo.Year == 1)
                    {
                        this.controlHorario.horaInicioAlmuerzo = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time");
                        this.controlHorarioBL.inicioAlmuerzo(this.controlHorario);
                        this.lblMensaje.Text = "Registrado completado.";
                        this.lblMensaje.CssClass = "successMessage";
                    }
                    else
                    {
                        this.lblMensaje.Text = "SALIDA de almuerzo ya registrado.";
                        this.lblMensaje.CssClass = "errorMessage";
                    }

                }
                else
                {
                    this.lblMensaje.Text = "Debe registrar la ENTRADA primero.";
                    this.lblMensaje.CssClass = "errorMessage";
                }
            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = ex.Message;
                this.lblMensaje.CssClass = "errorMessage";
            }
            finally
            {
                this.cargarDatos();
            }
        }
        protected void btnRegistroSalida_Click(object sender, ImageClickEventArgs e)
        {
            try {

                int hora = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time").Hour;
                if (hora>= 0 && hora <= 3){
                    this.controlHorario = this.controlHorarioBL.consultarDia(TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time").AddDays(-1), this.colaborador);
                }else{
                    this.controlHorario = this.controlHorarioBL.consultarDia(TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time"), this.colaborador);
                }

                if (this.controlHorario != null) {
                    if (this.controlHorario.horaSalida.Year == 1)
                    {
                        this.controlHorario.usuarioModificacion = Session["usuario"].ToString();

                        this.controlHorario.horaSalida = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time");
                        this.controlHorario.ipSalida = this.GetIPAddress();

                        // deben pasar mas de 5 minustos para poder marcar la salida
                        TimeSpan tiempoTranscurrido = this.controlHorario.horaSalida.Subtract(this.controlHorario.horaEntrada);
                        if (tiempoTranscurrido > (new TimeSpan(0, 5, 0)))
                        {
                            this.controlHorarioBL.modificar(this.controlHorario);
                            this.lblMensaje.Text = "Registrado completado.";
                            this.lblMensaje.CssClass = "successMessage";
                        }
                        else
                        {
                            this.lblMensaje.Text = "Deben pasar más de 5 minutos para poder marcar la SALIDA. Tiempo: 00:" +
                                tiempoTranscurrido.ToString("mm") + ":" + tiempoTranscurrido.ToString("ss");
                            this.lblMensaje.CssClass = "errorMessage";
                        }
                    }
                    else
                    {
                        this.lblMensaje.Text = "SALIDA ya registrada.";                    }

                        this.lblMensaje.CssClass = "errorMessage";
                }
                else
                {
                    this.lblMensaje.Text = "Debe registrar la ENTRADA primero.";
                    this.lblMensaje.CssClass = "errorMessage";
                }
            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = ex.Message;
                this.lblMensaje.CssClass = "errorMessage";
            }
            finally
            {
                this.cargarDatos();
            }
        }
        protected void btnRegistroEntrada_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this.controlHorario = this.controlHorarioBL.consultarDia(TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time"), this.colaborador);
                if (this.controlHorario == null)
                {
                    this.controlHorario = new ControlHorario();
                    this.controlHorario.usuarioCreacion = Session["usuario"].ToString();
                    this.controlHorario.colaborador.idColaborador = this.colaborador;

                    this.controlHorario.horaEntrada = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time");

                    this.controlHorario.ipEntrada = this.GetIPAddress();
                    this.controlHorarioBL.nuevo(this.controlHorario);
                    this.lblMensaje.Text = "Registrado completado.";
                    this.lblMensaje.CssClass = "successMessage";
                }
                else
                {
                    this.lblMensaje.Text = "ENTRADA ya registrada.";
                    this.lblMensaje.CssClass = "errorMessage";
                }
            }catch(Exception ex){
                this.lblMensaje.Text = ex.Message;
                this.lblMensaje.CssClass = "errorMessage";
            }
            finally
            {
                this.cargarDatos();
            }
        }
        protected void btnAmuerzoEntrada_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this.controlHorario = this.controlHorarioBL.consultarDia(TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time"), this.colaborador);
                if (this.controlHorario != null)
                {
                    if (this.controlHorario.horaInicioAlmuerzo.Year != 1)
                    {
                        if (this.controlHorario.horaFinAlmuerzo.Year == 1)
                        {
                            this.controlHorario.horaFinAlmuerzo = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "Central America Standard Time");

                            TimeSpan tiempoTranscurrido = this.controlHorario.horaFinAlmuerzo.Subtract(this.controlHorario.horaInicioAlmuerzo);
                            if (tiempoTranscurrido > (new TimeSpan(0, 5, 0)))
                            {
                                this.controlHorarioBL.finAlmuerzo(this.controlHorario);
                                this.lblMensaje.Text = "Registrado completado.";
                                this.lblMensaje.CssClass = "successMessage";
                            }
                            else
                            {
                                this.lblMensaje.Text = "Deben pasar más de 5 minutos para poder marcar la ENTRADA. Tiempo: 00:" +
                                 tiempoTranscurrido.ToString("mm") + ":" + tiempoTranscurrido.ToString("ss");
                                this.lblMensaje.CssClass = "errorMessage";
                            }
                        }
                        else
                        {
                            this.lblMensaje.Text = "ENTRADA de almuerzo ya registrado.";
                            this.lblMensaje.CssClass = "errorMessage";
                        }
                    }
                    else
                    {
                        this.lblMensaje.Text = "Debe registrar la SALIDA al almuerzo primero.";
                        this.lblMensaje.CssClass = "errorMessage";
                    }

                }
                else
                {
                    this.lblMensaje.Text = "Debe registrar la ENTRADA primero.";
                    this.lblMensaje.CssClass = "errorMessage";
                }
            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = ex.Message;
                this.lblMensaje.CssClass = "errorMessage";
            }
            finally
            {
                this.cargarDatos();
            }
        }
        /// <summary>
        /// consulta una ControlHorario
        /// </summary>
        /// <param name="dato"></param>
        /// <returns></returns>
        public ControlHorario consultarId(ControlHorario dato)
        {
            using (Database db = DatabaseFactory.openDatabase("rh_db"))
            {
                MySqlCommand comando = new MySqlCommand("sp_control_horario_SELECT_ByID");
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("p_idControlHorario", dato.idControlHorario);
                //Despues del comando indicar el nombre de la tabla
                DataSet ds = db.executeReader(comando, "control_horario");

                if (ds.Tables[0].Rows.Count > 0)
                {
                    DataRow row = ds.Tables[0].Rows[0];
                    if (!row["idControlHorario"].ToString().Equals(""))
                        dato.idControlHorario = Int32.Parse(row["idControlHorario"].ToString());

                    if (!row["horaEntrada"].ToString().Equals(""))
                        dato.horaEntrada = DateTime.Parse(row["horaEntrada"].ToString());

                    if (!row["horaSalida"].ToString().Equals(""))
                        dato.horaSalida = DateTime.Parse(row["horaSalida"].ToString());

                    if (!row["colaborador"].ToString().Equals(""))
                        dato.colaborador.idColaborador = Int32.Parse(row["colaborador"].ToString());

                    if (!row["horaInicioAlmuerzo"].ToString().Equals(""))
                        dato.horaInicioAlmuerzo = DateTime.Parse(row["horaInicioAlmuerzo"].ToString());

                    if (!row["horaFinAlmuerzo"].ToString().Equals(""))
                        dato.horaFinAlmuerzo = DateTime.Parse(row["horaFinAlmuerzo"].ToString());

                    if (!row["tipoDia"].ToString().Equals(""))
                        dato.tipoDia = row["tipoDia"].ToString();

                    if (!row["ipEntrada"].ToString().Equals(""))
                        dato.ipEntrada = row["ipEntrada"].ToString();
                    if (!row["ipSalida"].ToString().Equals(""))
                        dato.ipSalida = row["ipSalida"].ToString();

                    //Para indicar los datos del usuario
                    if (!row["usuarioCreacion"].ToString().Equals(""))
                        dato.usuarioCreacion = row["usuarioCreacion"].ToString();

                    if (!row["usuarioModificacion"].ToString().Equals(""))
                        dato.usuarioModificacion = row["usuarioModificacion"].ToString();

                    //Indicamos los valores de las fechas
                    if (!row["fechaCreacion"].ToString().Equals(""))
                        dato.fechaCreacion = DateTime.Parse(row["fechaCreacion"].ToString());

                    if (!row["fechaModificacion"].ToString().Equals(""))
                        dato.fechaModificacion = DateTime.Parse(row["fechaModificacion"].ToString());
                }
                else
                {
                    dato = null;
                }
                return dato;
            }
        }
 /// <summary>
 /// crea una ControlHorario nuevo
 /// </summary>
 /// <param name="dato"></param>
 /// Se crea un dato de tipo ControlHorario
 public void nuevo(ControlHorario dato)
 {
     using (Database db = DatabaseFactory.openDatabase("rh_db"))
     {
         //Agregamos la instruccion con el stored procedure
         MySqlCommand comando = new MySqlCommand("sp_control_horario_INSERT");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_colaborador", dato.colaborador.idColaborador);
         comando.Parameters.AddWithValue("p_horaEntrada", dato.horaEntrada);
         if (dato.horaSalida.Year > 2000){
             comando.Parameters.AddWithValue("p_horaSalida", dato.horaSalida);
         }
         else
         {
             comando.Parameters.AddWithValue("p_horaSalida", null);
         }
         comando.Parameters.AddWithValue("p_usuarioCreacion", dato.usuarioCreacion);
         comando.Parameters.AddWithValue("p_ipEntrada", dato.ipEntrada);
         db.executeNonQuery(comando);
     }
 }
 /// <summary>
 /// modifica una ControlHorario
 /// </summary>
 /// <param name="dato"></param>        
 public void modificar(ControlHorario dato)
 {
     using (Database db = DatabaseFactory.openDatabase("rh_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_control_horario_UPDATE");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_idControlHorario", dato.idControlHorario);
         comando.Parameters.AddWithValue("p_colaborador", dato.colaborador.idColaborador);
         comando.Parameters.AddWithValue("p_horaEntrada", dato.horaEntrada);
         if (dato.horaSalida.Year > 2000)
         {
             comando.Parameters.AddWithValue("p_horaSalida", dato.horaSalida);
         }
         else
         {
             comando.Parameters.AddWithValue("p_horaSalida", null);
         }
         comando.Parameters.AddWithValue("p_usuarioModificacion", dato.usuarioModificacion);
         comando.Parameters.AddWithValue("p_ipSalida", dato.ipSalida);
         db.executeNonQuery(comando);
     }
 }
 /// <summary>
 /// modifica una ControlHorario
 /// </summary>
 /// <param name="dato"></param>
 public void inicioAlmuerzo(ControlHorario dato)
 {
     if (this.existe(dato))
     {
         this.controlHorarioDA.inicioAlmuerzo(dato);
     }
     else
     {
         throw new Exception("No existe el registro.");
     }
 }
 /// <summary>
 /// verifica si existe una  ControlHorario
 /// </summary>
 /// <param name="dato"></param>
 /// <returns>TRUE si existe FALSE en caso contrario</returns>
 public bool existe(ControlHorario dato)
 {
     ControlHorario objeto = new ControlHorario();
     using (Database db = DatabaseFactory.openDatabase("rh_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_control_horario_SELECT_ByID");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_idControlHorario", dato.idControlHorario);
         DataSet ds = db.executeReader(comando, "control_horario");
         if (ds.Tables[0].Rows.Count > 0)
         {
             return true;
         }
         else
         {
             return false;
         }
     }
 }
 /// <summary>
 /// elimina una ControlHorario
 /// </summary>
 /// <param name="dato"></param>
 public void eliminar(ControlHorario dato)
 {
     using (Database db = DatabaseFactory.openDatabase("rh_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_control_horario_DELETE");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_idControlHorario", dato.idControlHorario);
         db.executeNonQuery(comando);
     }
 }
        /// <summary>
        /// consulta todas las control_horario
        /// </summary>
        /// <returns>List</returns>
        public List<ControlHorario> consultarTodos()
        {
            using (Database db = DatabaseFactory.openDatabase("rh_db"))
            {
                List<ControlHorario> lista = new List<ControlHorario>();
                MySqlCommand comando = new MySqlCommand("sp_control_horario_SELECT_all");
                comando.CommandType = CommandType.StoredProcedure;
                //Despues del comando indicar el nombre de la tabla
                DataSet ds = db.executeReader(comando, "control_horario");
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    ControlHorario dato = new ControlHorario();
                    if (!row["idControlHorario"].ToString().Equals(""))
                        dato.idControlHorario = Int32.Parse(row["idControlHorario"].ToString());

                    if (!row["horaEntrada"].ToString().Equals(""))
                        dato.horaEntrada = DateTime.Parse(row["horaEntrada"].ToString());

                    if (!row["horaSalida"].ToString().Equals(""))
                        dato.horaSalida = DateTime.Parse(row["horaSalida"].ToString());

                    if (!row["colaborador"].ToString().Equals(""))
                        dato.colaborador.idColaborador = Int32.Parse(row["colaborador"].ToString());

                    if (!row["horaInicioAlmuerzo"].ToString().Equals(""))
                        dato.horaInicioAlmuerzo = DateTime.Parse(row["horaInicioAlmuerzo"].ToString());

                    if (!row["horaFinAlmuerzo"].ToString().Equals(""))
                        dato.horaFinAlmuerzo = DateTime.Parse(row["horaFinAlmuerzo"].ToString());

                    if (!row["tipoDia"].ToString().Equals(""))
                        dato.tipoDia = row["tipoDia"].ToString();

                    if (!row["ipEntrada"].ToString().Equals(""))
                        dato.ipEntrada = row["ipEntrada"].ToString();
                    if (!row["ipSalida"].ToString().Equals(""))
                        dato.ipSalida = row["ipSalida"].ToString();

                    //Para indicar los datos del usuario
                    if (!row["usuarioCreacion"].ToString().Equals(""))
                        dato.usuarioCreacion = row["usuarioCreacion"].ToString();

                    if (!row["usuarioModificacion"].ToString().Equals(""))
                        dato.usuarioModificacion = row["usuarioModificacion"].ToString();

                    //Indicamos los valores de las fechas
                    if (!row["fechaCreacion"].ToString().Equals(""))
                        dato.fechaCreacion = DateTime.Parse(row["fechaCreacion"].ToString());

                    if (!row["fechaModificacion"].ToString().Equals(""))
                        dato.fechaModificacion = DateTime.Parse(row["fechaModificacion"].ToString());

                    lista.Add(dato);
                }
                return lista;
            }
        }
 /// <summary>
 /// consulta una ControlHorario
 /// </summary>
 /// <param name="dato"></param>
 /// <returns></returns>
 public ControlHorario consultarId(ControlHorario dato)
 {
     return this.controlHorarioDA.consultarId(dato);
 }
 /// <summary>
 /// crea una ControlHorario nuevo
 /// </summary>
 /// <param name="dato"></param>
 public void nuevo(ControlHorario dato)
 {
     if (!this.existe(dato))
     {
         this.controlHorarioDA.nuevo(dato);
     }
     else
     {
         throw new Exception("Ya existe el registro.");
     }
 }
 /// <summary>
 /// modifica una ControlHorario
 /// </summary>
 /// <param name="dato"></param>
 public void modificar(ControlHorario dato)
 {
     if (this.existe(dato))
     {
         this.controlHorarioDA.modificar(dato);
     }
     else
     {
         throw new Exception("No existe el registro.");
     }
 }
 /// <summary>
 /// modifica una ControlHorario
 /// </summary>
 /// <param name="dato"></param>        
 public void inicioAlmuerzo(ControlHorario dato)
 {
     using (Database db = DatabaseFactory.openDatabase("rh_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_control_horario_UPDATE_inicioAlmuerzo");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_idControlHorario", dato.idControlHorario);
         comando.Parameters.AddWithValue("p_colaborador", dato.colaborador.idColaborador);
         comando.Parameters.AddWithValue("p_horaInicioAlmuerzo", dato.horaInicioAlmuerzo);
         db.executeNonQuery(comando);
     }
 }
        /// <summary>
        /// actualiza un registro
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            try
            {
                ControlHorario controlHorario = new ControlHorario();
                //llena el objeto con los valores
                controlHorario.idControlHorario = Int32.Parse(e.NewValues["idControlHorario"].ToString());
                if (e.NewValues["horaEntrada"] != null)
                {
                    controlHorario.horaEntrada = DateTime.Parse(e.NewValues["horaEntrada"].ToString());
                }
                if (e.NewValues["horaSalida"] != null)
                {
                    controlHorario.horaSalida = DateTime.Parse(e.NewValues["horaSalida"].ToString());
                }
                if (e.NewValues["horaInicioAlmuerzo"] != null)
                {
                    controlHorario.horaInicioAlmuerzo = DateTime.Parse(e.NewValues["horaInicioAlmuerzo"].ToString());
                }
                if (e.NewValues["horaFinAlmuerzo"] != null)
                {
                    controlHorario.horaFinAlmuerzo = DateTime.Parse(e.NewValues["horaFinAlmuerzo"].ToString());
                }

                ASPxPageControl Tabs = (ASPxPageControl)ASPxGridView1.FindEditFormTemplateControl("pageControl");
                ASPxComboBox cmbColaborador = (ASPxComboBox)Tabs.FindControl("cmbColaborador");
                if (cmbColaborador.Value != null)
                {
                    controlHorario.colaborador.idColaborador = Int32.Parse(cmbColaborador.Value.ToString());
                }

                controlHorario.usuarioModificacion = Session["usuario"].ToString();
                controlHorarioBL.modificar(controlHorario);//agrega el objeto a la base de datos

                e.Cancel = true;//manejo de execpcion no controlada BUSCAR SOLUCION
                this.ASPxGridView1.CancelEdit();

                this.cargarDatos();//refescar los datos
            }
            catch (Exception ex)
            {
                Session["errorMessage"] = ex.Message;
            }
        }
 /// <summary>
 /// verifica si existe una ControlHorario
 /// </summary>
 /// <param name="dato"></param>
 /// <returns>TRUE si existe FALSE en caso contrario</returns>
 public bool existe(ControlHorario dato)
 {
     return this.controlHorarioDA.existe(dato);
 }