public int ActualizarInformacionUsuario(int UsuarioID, string PrimerNombre, string SegundoNombre,
                   string PrimerApellido, string SegundoApellido, int TipoDocumentoID,
                   string Documento, int CargoID, DateTime FechaNacimiento,
                   string DireccionResidencia, string Barrio, string TelefonoFijo,
                   string CelularPersonal, string CelularCorporativo,
                   string CorreoPersonal, string CorreoCorporativo, string GrupoSanguineo,
                   string EstadoCivil, int MunicipioID, int SedeID)
        {
            int n = 0;
                       try
                       {
                           n = new EmpleadoDAL().ActualizarInformacionUsuario(UsuarioID, PrimerNombre, SegundoNombre,
                           PrimerApellido, SegundoApellido, TipoDocumentoID,
                           Documento, CargoID, FechaNacimiento,
                           DireccionResidencia, Barrio, TelefonoFijo,
                           CelularPersonal, CelularCorporativo,
                           CorreoPersonal, CorreoCorporativo, GrupoSanguineo, EstadoCivil, MunicipioID, SedeID);
                       }
                       catch (Exception ex) {
                           if (!EventLog.SourceExists("SistemaRRHH App"))
                               EventLog.CreateEventSource("SistemaRRHH App", "Application");

                           EventLog.WriteEntry("SistemaRRHH App", string.Format("Error: {0}. StackTrace: {1}", ex.Message, ex.StackTrace), EventLogEntryType.Error);
                       }

                       return n;
        }
        public int EliminarFormacionAcademicaEmpleadoByID(int FormacionAcademicaID)
        {
            int n = 0;
            try
            {
                n = new EmpleadoDAL().EliminarFormacionAcademicaEmpleadoByID(FormacionAcademicaID);
            }
            catch (Exception ex)
            {
                if (!EventLog.SourceExists("SistemaRRHH App"))
                    EventLog.CreateEventSource("SistemaRRHH App", "Application");

                EventLog.WriteEntry("SistemaRRHH App", string.Format("Error: {0}. StackTrace: {1}", ex.Message, ex.StackTrace), EventLogEntryType.Error);
            }
            return n;
        }
        public int GuardarExperienciaLaboral(int EmpleadoID, string Empresa, int SectorID, int AreaTrabajoID,
                                             string Cargo, DateTime FechaIngreso, DateTime FechaRetiro,
                                             string Funciones, int MunicipioID)
        {
            int n = 0;
            try
            {
                n = new EmpleadoDAL().GuardarExperienciaLaboral(EmpleadoID, Empresa, SectorID, AreaTrabajoID,
                                             Cargo, FechaIngreso, FechaRetiro, Funciones, MunicipioID);
            }
            catch (Exception ex)
            {
                if (!EventLog.SourceExists("SistemaRRHH App"))
                    EventLog.CreateEventSource("SistemaRRHH App", "Application");

                EventLog.WriteEntry("SistemaRRHH App", string.Format("Error: {0}. StackTrace: {1}", ex.Message, ex.StackTrace), EventLogEntryType.Error);
            }
            return n;
        }
        public List<InformacionFamiliar> ObtenerInformacionFamiliarEmpleadoByUsuarioID(int UsuarioID)
        {
            List<InformacionFamiliar> listado = new List<InformacionFamiliar>();
            try
            {
                listado = new EmpleadoDAL().ObtenerInformacionFamiliarEmpleadoByUsuarioID(UsuarioID);
            }
            catch (Exception ex)
            {
                if (!EventLog.SourceExists("SistemaRRHH App"))
                    EventLog.CreateEventSource("SistemaRRHH App", "Application");

                EventLog.WriteEntry("SistemaRRHH App", string.Format("Error: {0}. StackTrace: {1}", ex.Message, ex.StackTrace), EventLogEntryType.Error);
            }
            return listado;
        }
        public List<Empleado> ObtenerEmpleados(int NoPagina, int NoRegistros, string Login, string NumeroEmpleado, string Cedula, string PrimerApellido, 
                                               string SegundoApellido, string Nombres, int AreaID, int CargoID)
        {
            List<Empleado> listado = new List<Empleado>();
            try
            {
                listado = new EmpleadoDAL().ObtenerEmpleados(NoPagina, NoRegistros, Login, NumeroEmpleado, Cedula, PrimerApellido,
                                                             SegundoApellido, Nombres, AreaID, CargoID);
            }
            catch (Exception ex)
            {
                if (!EventLog.SourceExists("SistemaRRHH App"))
                    EventLog.CreateEventSource("SistemaRRHH App", "Application");

                EventLog.WriteEntry("SistemaRRHH App", string.Format("Error: {0}. StackTrace: {1}", ex.Message, ex.StackTrace), EventLogEntryType.Error);
            }
            return listado;
        }
        public int GuardarInformacionFamiliar(int EmpleadoID, string Nombres, string Apellidos, 
                                              string Ocupacion, DateTime FechaNacimiento, int ParentescoID)
        {
            int n = 0;
            try
            {
                n = new EmpleadoDAL().GuardarInformacionFamiliar(EmpleadoID, Nombres, Apellidos, Ocupacion, FechaNacimiento, ParentescoID);
            }
            catch (Exception ex)
            {
                if (!EventLog.SourceExists("SistemaRRHH App"))
                    EventLog.CreateEventSource("SistemaRRHH App", "Application");

                EventLog.WriteEntry("SistemaRRHH App", string.Format("Error: {0}. StackTrace: {1}", ex.Message, ex.StackTrace), EventLogEntryType.Error);
            }
            return n;
        }
        public int GuardarInformacionAcademica(int EmpleadoID, string Institucion, string TituloObtenido, 
                                               int NivelFormacionID, DateTime FechaInicio, DateTime? FechaFinalizacion, 
                                               int MunicipioID)
        {
            int n = 0;
            try
            {
                n = new EmpleadoDAL().GuardarInformacionAcademica(EmpleadoID, Institucion, TituloObtenido, NivelFormacionID, FechaInicio, FechaFinalizacion, MunicipioID);
            }
            catch (Exception ex)
            {
                if (!EventLog.SourceExists("SistemaRRHH App"))
                    EventLog.CreateEventSource("SistemaRRHH App", "Application");

                EventLog.WriteEntry("SistemaRRHH App", string.Format("Error: {0}. StackTrace: {1}", ex.Message, ex.StackTrace), EventLogEntryType.Error);
            }
            return n;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Seguridad();
            Session["UsuarioID"] = Int32.Parse(Request.QueryString["Id"]);
            pnlResultado.Visible = false;
            //PanelAdicionarEstudio.Visible = false;
            using (SistemaRRHHServicesClient svc = new SistemaRRHHServicesClient())
            {
                if (!Page.IsPostBack) {
                    // Cargamos los Tipos de Documento
                    //ddlTipoIdentificacion.DataSource = svc.CargarCatalogoWCF("TipoDocumento");
                    //ddlTipoIdentificacion.DataTextField = "Etiqueta";
                    //ddlTipoIdentificacion.DataValueField = "Id";
                    //ddlTipoIdentificacion.DataBind();
                    //ddlTipoIdentificacion.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                }
            }

            using (EmpleadoServiceClient svcEmpleado = new EmpleadoServiceClient())
            {
                if (!IsPostBack)
                {
                    // Cargamos los Datos del Empleado
                    WEB.EmpleadoService.Empleado empleado = svcEmpleado.ObtenerEmpleadoByUsuarioID(Int32.Parse(Session["UsuarioID"].ToString())).FirstOrDefault();
                    Session["EmpleadoID"] = empleado.EmpleadoID;
                    int EmpleadoID = Int32.Parse(Session["EmpleadoID"].ToString());

                    txtPrimerNombre.Text = empleado.PrimerNombre;
                    txtSegundoNombre.Text = empleado.SegundoNombre;
                    txtPrimerApellido.Text = empleado.PrimerApellido;
                    txtSegundoApellido.Text = empleado.SegundoApellido;
                    int dia = empleado.FechaNacimiento.Day;
                    string NombreMes = DateTimeHelper.CapitalizeFirstLetter(DateTimeHelper.MonthName(empleado.FechaNacimiento.Month));
                    txtFechaNacimiento.Text = (dia + " de " + NombreMes).ToString();
                    txtCorreoCorporativo.Text = empleado.CorreoElectronico;
                    txtCelularCorporativo.Text = empleado.CelularCorporativo;
                    ddlArea.SelectedValue = empleado.AreaID.ToString();
                    ddlCargo.SelectedValue = empleado.CargoID.ToString();

                    byte[] foto = new EmpleadoDAL().ObtenerFotoEmpleado(EmpleadoID);
                    string base64String = Convert.ToBase64String(foto, 0, foto.Length);
                    FotoEmpleado.ImageUrl = "data:image/png;base64," + base64String;

                    lblNumeroEmpleado.Text = "Número de Empleado : " + empleado.NumeroEmpleado;

                    CargarGrids();

                    using (SistemaRRHHServicesClient svc = new SistemaRRHHServicesClient())
                    {
                        // Cargamos las Areas
                        ddlArea.DataSource = svc.CargarCatalogoWCF("Area");
                        ddlArea.DataTextField = "Etiqueta";
                        ddlArea.DataValueField = "Id";
                        ddlArea.DataBind();

                        // Cargamos los Cargos
                        ddlCargo.DataSource = svc.CargarCatalogoDependienteWCF("Cargos", empleado.AreaID.ToString());
                        ddlCargo.DataTextField = "Etiqueta";
                        ddlCargo.DataValueField = "Id";
                        ddlCargo.DataBind();

                        ddlArea.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlCargo.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                    }
                }
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Seguridad();
            Session["UsuarioID"] = Int32.Parse(Request.QueryString["Id"]);
            pnlResultado.Visible = false;
            //PanelAdicionarEstudio.Visible = false;
            using (SistemaRRHHServicesClient svc = new SistemaRRHHServicesClient())
            {
                if (!Page.IsPostBack) {
                    // Cargamos los Tipos de Documento
                    ddlTipoIdentificacion.DataSource = svc.CargarCatalogoWCF("TipoDocumento");
                    ddlTipoIdentificacion.DataTextField = "Etiqueta";
                    ddlTipoIdentificacion.DataValueField = "Id";
                    ddlTipoIdentificacion.DataBind();
                    ddlTipoIdentificacion.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));

                    // Cargamos los Parentescos
                    ddlParentesco.DataSource = svc.CargarCatalogoWCF("Parentesco");
                    ddlParentesco.DataTextField = "Etiqueta";
                    ddlParentesco.DataValueField = "Id";
                    ddlParentesco.DataBind();
                    ddlParentesco.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));

                    // Cargamos los Sectores
                    ddlSector.DataSource = svc.CargarCatalogoWCF("Sector");
                    ddlSector.DataTextField = "Etiqueta";
                    ddlSector.DataValueField = "Id";
                    ddlSector.DataBind();
                    ddlSector.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));

                    // Cargamos los Area de Trabajo
                    ddlAreaTrabajo.DataSource = svc.CargarCatalogoWCF("AreaTrabajo");
                    ddlAreaTrabajo.DataTextField = "Etiqueta";
                    ddlAreaTrabajo.DataValueField = "Id";
                    ddlAreaTrabajo.DataBind();
                    ddlAreaTrabajo.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                }
            }

            using (EmpleadoServiceClient svcEmpleado = new EmpleadoServiceClient())
            {
                if (!IsPostBack)
                {
                    // Cargamos los Datos del Empleado
                    WEB.EmpleadoService.Empleado empleado = svcEmpleado.ObtenerEmpleadoByUsuarioID(Int32.Parse(Session["UsuarioID"].ToString())).FirstOrDefault();
                    Session["EmpleadoID"] = empleado.EmpleadoID;
                    int EmpleadoID = Int32.Parse(Session["EmpleadoID"].ToString());

                    ddlTipoIdentificacion.SelectedValue = empleado.TipoDocumentoID.ToString();
                    txtDocumentoIdentidad.Text = empleado.Documento;
                    txtPrimerNombre.Text = empleado.PrimerNombre;
                    txtSegundoNombre.Text = empleado.SegundoNombre;
                    txtPrimerApellido.Text = empleado.PrimerApellido;
                    txtSegundoApellido.Text = empleado.SegundoApellido;
                    txtFechaNacimiento.Text = empleado.FechaNacimiento.Date.ToShortDateString().ToString();
                    ddlRH.SelectedValue = empleado.GrupoSanguineo;
                    ddlEstadoCivil.SelectedValue = empleado.EstadoCivil;
                    txtDireccion.Text = empleado.DireccionResidencia;
                    txtBarrio.Text = empleado.Barrio;
                    txtTelefonoFijo.Text = empleado.TelefonoFijo;
                    txtCelular.Text = empleado.CelularPersonal;
                    txtCorreoCorporativo.Text = empleado.CorreoElectronico;
                    txtCorreoPersonal.Text = empleado.CorreoElectronicoPersonal;
                    txtCelularCorporativo.Text = empleado.CelularCorporativo;
                    // Seleccionamos el País
                    ddlPais.SelectedValue = empleado.PaisID.ToString();
                    ddlArea.SelectedValue = empleado.AreaID.ToString();
                    ddlCargo.SelectedValue = empleado.CargoID.ToString();
                    ddlSede.SelectedValue = empleado.SedeID.ToString();
                    ddlPaisSede.SelectedValue = empleado.PaisSedeID.ToString();
                    ddlDepartamentoSede.SelectedValue = empleado.DepartamentoSedeID.ToString();
                    ddlMunicipioSede.SelectedValue = empleado.MunicipioSedeID.ToString();

                    byte[] foto = new EmpleadoDAL().ObtenerFotoEmpleado(EmpleadoID);
                    string base64String = Convert.ToBase64String(foto, 0, foto.Length);
                    FotoEmpleado.ImageUrl = "data:image/png;base64," + base64String;

                    lblNumeroEmpleado.Text = "Número de Empleado : " + empleado.NumeroEmpleado;

                    CargarGrids();

                    using (SistemaRRHHServicesClient svc = new SistemaRRHHServicesClient())
                    {
                        // Cargamos los Paises
                        ddlPais.DataSource = svc.CargarCatalogoWCF("Pais");
                        ddlPais.DataTextField = "Etiqueta";
                        ddlPais.DataValueField = "Id";
                        ddlPais.DataBind();

                        ddlPaisInfoAcademica.DataSource = svc.CargarCatalogoWCF("Pais");
                        ddlPaisInfoAcademica.DataTextField = "Etiqueta";
                        ddlPaisInfoAcademica.DataValueField = "Id";
                        ddlPaisInfoAcademica.DataBind();

                        ddlPaisExperienciaLaboral.DataSource = svc.CargarCatalogoWCF("Pais");
                        ddlPaisExperienciaLaboral.DataTextField = "Etiqueta";
                        ddlPaisExperienciaLaboral.DataValueField = "Id";
                        ddlPaisExperienciaLaboral.DataBind();

                        ddlNivelFormacion.DataSource = svc.CargarCatalogoWCF("NivelFormacion");
                        ddlNivelFormacion.DataTextField = "Etiqueta";
                        ddlNivelFormacion.DataValueField = "Id";
                        ddlNivelFormacion.DataBind();

                        // Cargamos los Departamentos
                        ddlDepartamento.DataSource = svc.CargarCatalogoDependienteWCF("Departamentos", empleado.PaisID.ToString());
                        ddlDepartamento.DataTextField = "Etiqueta";
                        ddlDepartamento.DataValueField = "Id";
                        ddlDepartamento.DataBind();
                        // Seleccionamos el Departamento
                        ddlDepartamento.SelectedValue = empleado.DepartamentoID.ToString();

                        // Cargamos los Departamentos
                        ddlMunicipio.DataSource = svc.CargarCatalogoDependienteWCF("Municipios", empleado.DepartamentoID.ToString());
                        ddlMunicipio.DataTextField = "Etiqueta";
                        ddlMunicipio.DataValueField = "Id";
                        ddlMunicipio.DataBind();
                        //Seleccionamos el Municipio
                        ddlMunicipio.SelectedValue = empleado.MunicipioID.ToString();

                        // Cargamos las Areas
                        ddlArea.DataSource = svc.CargarCatalogoWCF("Area");
                        ddlArea.DataTextField = "Etiqueta";
                        ddlArea.DataValueField = "Id";
                        ddlArea.DataBind();

                        // Cargamos los Cargos
                        ddlCargo.DataSource = svc.CargarCatalogoDependienteWCF("Cargos", empleado.AreaID.ToString());
                        ddlCargo.DataTextField = "Etiqueta";
                        ddlCargo.DataValueField = "Id";
                        ddlCargo.DataBind();

                        // Cargamos los Paises de las Sedes
                        ddlPaisSede.DataSource = svc.CargarCatalogoWCF("PaisesSedes");
                        ddlPaisSede.DataTextField = "Etiqueta";
                        ddlPaisSede.DataValueField = "Id";
                        ddlPaisSede.DataBind();

                        // Cargamos los Departamentos de las Sedes
                        ddlDepartamentoSede.DataSource = svc.CargarCatalogoDependienteWCF("DepartamentosSedes", empleado.PaisSedeID.ToString());
                        ddlDepartamentoSede.DataTextField = "Etiqueta";
                        ddlDepartamentoSede.DataValueField = "Id";
                        ddlDepartamentoSede.DataBind();

                        // Cargamos los Cargos
                        ddlMunicipioSede.DataSource = svc.CargarCatalogoDependienteWCF("MunicipiosSedes", empleado.DepartamentoSedeID.ToString());
                        ddlMunicipioSede.DataTextField = "Etiqueta";
                        ddlMunicipioSede.DataValueField = "Id";
                        ddlMunicipioSede.DataBind();

                        // Cargamos las Sedes
                        ddlSede.DataSource = svc.CargarCatalogoDependienteWCF("Sedes", empleado.MunicipioSedeID.ToString());
                        ddlSede.DataTextField = "Etiqueta";
                        ddlSede.DataValueField = "Id";
                        ddlSede.DataBind();
                        ddlSede.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));

                        // Valores del Option Label
                        ddlDepartamento.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlMunicipio.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlPais.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlArea.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlCargo.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlPaisInfoAcademica.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlPaisExperienciaLaboral.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlNivelFormacion.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlPaisSede.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlDepartamentoSede.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                        ddlMunicipioSede.Items.Insert(0, new ListItem("[Seleccione uno...]", ""));
                    }
                }
            }
        }
        protected void btnSubirFotoModal_Click(object sender, EventArgs e)
        {
            if (fuFotoEmpleado.HasFile)
            {
                int EmpleadoID = Int32.Parse(Session["EmpleadoID"].ToString());
                string filename = Path.GetFileName(fuFotoEmpleado.PostedFile.FileName);
                string contentType = fuFotoEmpleado.PostedFile.ContentType;
                EmpleadoDAL empleado = new EmpleadoDAL();

                using (Stream fs = fuFotoEmpleado.PostedFile.InputStream)
                {
                    using (BinaryReader br = new BinaryReader(fs))
                    {
                        byte[] bytes = br.ReadBytes((Int32)fs.Length);
                        int n = empleado.ActualizarFotoEmpleado(EmpleadoID, bytes);
                    }
                }
            }
            Response.Redirect(Request.Url.AbsoluteUri);
        }