public async Task <IActionResult> AprobarPermisos(SolicitudPermisoViewModel solicitudPermisoViewModel)
        {
            Response response = new Response();

            try
            {
                if (solicitudPermisoViewModel != null)
                {
                    response = await apiServicio.EditarAsync <SolicitudPermisoViewModel>(solicitudPermisoViewModel, new Uri(WebApp.BaseAddress), "api/SolicitudesPermisos/EditarEstadoSolicitudPermiso");


                    if (response.IsSuccess)
                    {
                        return(this.RedireccionarMensajeTime(
                                   "SolicitudesPermisosAprobador",
                                   "IndexJefe",
                                   $"{Mensaje.Success}|{response.Message}|{"6000"}"
                                   ));
                    }

                    this.TempData["MensajeTimer"] = $"{Mensaje.Error}|{response.Message}|{"12000"}";

                    await CargarCombos();

                    return(View(solicitudPermisoViewModel));
                }
                return(BadRequest());
            }
            catch (Exception ex)
            {
                return(BadRequest());
            }
        }
        public async Task <Response> EditarEstadoSolicitudPermiso([FromBody] SolicitudPermisoViewModel solicitudPermisoViewModel)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(new Response
                    {
                        IsSuccess = false,
                        Message = Mensaje.ModeloInvalido
                    });
                }

                var SolicitudPermiso = await db.SolicitudPermiso.FindAsync(solicitudPermisoViewModel.SolicitudPermiso.IdSolicitudPermiso);

                SolicitudPermiso.Estado = solicitudPermisoViewModel.SolicitudPermiso.Estado;
                db.SolicitudPermiso.Update(SolicitudPermiso);
                await db.SaveChangesAsync();

                return(new Response
                {
                    IsSuccess = true,
                    Message = Mensaje.Satisfactorio
                });
            }
            catch (Exception ex)
            {
                return(new Response
                {
                    IsSuccess = false,
                    Message = Mensaje.Excepcion,
                });
            }
        }
        public async Task <SolicitudPermisoViewModel> ObtenerInformacionSolicitudPermiso([FromBody] int idSolicitudPermiso)
        {
            try
            {
                SolicitudPermiso solicitudPermiso = await db.SolicitudPermiso
                                                    .Include(x => x.Empleado)
                                                    .ThenInclude(x => x.Persona)
                                                    .Include(x => x.TipoPermiso)
                                                    .Where(x => x.IdSolicitudPermiso == idSolicitudPermiso)
                                                    .SingleOrDefaultAsync();

                Empleado empleado = await db.Empleado
                                    .Include(x => x.Persona)
                                    .Include(x => x.Dependencia)
                                    .SingleOrDefaultAsync(m => m.IdEmpleado == solicitudPermiso.Empleado.IdEmpleado);

                var solicitudPermisoViewModel = new SolicitudPermisoViewModel
                {
                    NombresApellidosEmpleado = empleado.Persona.Nombres + " " + empleado.Persona.Apellidos,
                    NombreDependencia        = empleado.Dependencia.Nombre,
                    SolicitudPermiso         = solicitudPermiso
                };

                return(solicitudPermisoViewModel);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IActionResult> Visualizar(string id)
        {
            try
            {
                await CargarCombosJefe();

                SolicitudPermisoViewModel solicitudPermisoViewModel = await apiServicio.ObtenerElementoAsync1 <SolicitudPermisoViewModel>(id, new Uri(WebApp.BaseAddress), "api/SolicitudesPermisos/ObtenerInformacionSolicitudPermiso");

                return(View(solicitudPermisoViewModel));
            }
            catch (Exception ex)
            {
                return(BadRequest());
            }
        }
        public async Task <IActionResult> PedirPermiso()
        {
            try
            {
                var claim         = HttpContext.User.Identities.Where(x => x.NameClaimType == ClaimTypes.Name).FirstOrDefault();
                var NombreUsuario = claim.Claims.Where(c => c.Type == ClaimTypes.Name).FirstOrDefault().Value;

                var usuario = await apiServicio.ObtenerElementoAsync1 <Empleado>(NombreUsuario, new Uri(WebApp.BaseAddress), "api/Empleados/EmpleadoSegunNombreUsuario");


                var respuesta = await apiServicio.SeleccionarAsync <Response>(usuario.IdEmpleado.ToString(), new Uri(WebApp.BaseAddress), "api/Empleados");


                var empleado = JsonConvert.DeserializeObject <Empleado>(respuesta.Resultado.ToString());



                var solicitudPermisoViewModel = new SolicitudPermisoViewModel
                {
                    NombresApellidosEmpleado = empleado.Persona.Nombres + " " + empleado.Persona.Apellidos,
                    NombreDependencia        = empleado.Dependencia.Nombre,

                    SolicitudPermiso = new SolicitudPermiso {
                        FechaDesde  = DateTime.Now.Date,
                        FechaHasta  = DateTime.Now.Date,
                        Empleado    = empleado,
                        Observacion = "Sin Observación"
                    }
                };

                await CargarCombos();

                return(View(solicitudPermisoViewModel));
            }
            catch (Exception ex)
            {
                return(BadRequest());
            }
        }
        public async Task <IActionResult> PedirPermiso(SolicitudPermisoViewModel solicitudPermisoViewModel)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    this.TempData["Mensaje"] = $"{Mensaje.Error}|{Mensaje.ModeloInvalido}";

                    await CargarCombos();

                    return(View(solicitudPermisoViewModel));
                }

                if (solicitudPermisoViewModel.SolicitudPermiso.FechaDesde > solicitudPermisoViewModel.SolicitudPermiso.FechaHasta)
                {
                    this.TempData["MensajeTimer"] = $"{Mensaje.Error}|{Mensaje.ErrorFechaDesdeHasta}|{"12000"}";

                    await CargarCombos();

                    return(View(solicitudPermisoViewModel));
                }

                string fechaDesde = solicitudPermisoViewModel.SolicitudPermiso.FechaDesde.DayOfWeek.ToString();
                string fechaHasta = solicitudPermisoViewModel.SolicitudPermiso.FechaHasta.DayOfWeek.ToString();


                // Diferencia en horas
                TimeSpan?diferenciaHoras = solicitudPermisoViewModel.SolicitudPermiso.HoraHasta - solicitudPermisoViewModel.SolicitudPermiso.HoraDesde;

                // Diferencia en dìas
                TimeSpan?tsDiferenciaDias = solicitudPermisoViewModel.SolicitudPermiso.FechaHasta - solicitudPermisoViewModel.SolicitudPermiso.FechaDesde;

                var solicitudPermiso = new SolicitudPermiso
                {
                    IdEmpleado    = solicitudPermisoViewModel.SolicitudPermiso.Empleado.IdEmpleado,
                    IdTipoPermiso = solicitudPermisoViewModel.SolicitudPermiso.IdTipoPermiso,

                    Motivo      = solicitudPermisoViewModel.SolicitudPermiso.Motivo,
                    Observacion = solicitudPermisoViewModel.SolicitudPermiso.Observacion,
                    Estado      = solicitudPermisoViewModel.SolicitudPermiso.Estado,

                    FechaSolicitud = DateTime.Now,
                    FechaDesde     = solicitudPermisoViewModel.SolicitudPermiso.FechaDesde,
                    FechaHasta     = solicitudPermisoViewModel.SolicitudPermiso.FechaHasta,
                    HoraDesde      = solicitudPermisoViewModel.SolicitudPermiso.HoraDesde,
                    HoraHasta      = solicitudPermisoViewModel.SolicitudPermiso.HoraHasta,
                };

                var response = await apiServicio.InsertarAsync(solicitudPermiso, new Uri(WebApp.BaseAddress), "api/SolicitudesPermisos/InsertarSolicitudPermiso");

                if (response.IsSuccess)
                {
                    return(this.RedireccionarMensajeTime(
                               "SolicitudesPermisosAprobador",
                               "IndexEmpleado",
                               $"{Mensaje.Success}|{response.Message}|{"6000"}"
                               ));
                }

                await CargarCombos();

                this.TempData["MensajeTimer"] = $"{Mensaje.Error}|{response.Message}|{"12000"}";

                return(View(solicitudPermisoViewModel));
            }
            catch (Exception ex)
            {
                return(BadRequest());
            }
        }
        public async Task <IActionResult> EditarPedirPermiso(string id, SolicitudPermisoViewModel solicitudPermisoViewModel)
        {
            Response response = new Response();

            try
            {
                if (!string.IsNullOrEmpty(id))
                {
                    if (!ModelState.IsValid)
                    {
                        this.TempData["Mensaje"] = $"{Mensaje.Error}|{Mensaje.ModeloInvalido}";

                        await CargarCombos();

                        return(View(solicitudPermisoViewModel));
                    }

                    if (solicitudPermisoViewModel.SolicitudPermiso.FechaDesde > solicitudPermisoViewModel.SolicitudPermiso.FechaHasta)
                    {
                        this.TempData["MensajeTimer"] = $"{Mensaje.Error}|{Mensaje.ErrorFechaDesdeHasta}|{"12000"}";

                        await CargarCombos();

                        return(View(solicitudPermisoViewModel));
                    }

                    string fechaDesde = solicitudPermisoViewModel.SolicitudPermiso.FechaDesde.DayOfWeek.ToString();
                    string fechaHasta = solicitudPermisoViewModel.SolicitudPermiso.FechaHasta.DayOfWeek.ToString();


                    // Diferencia en horas
                    TimeSpan?diferenciaHoras = solicitudPermisoViewModel.SolicitudPermiso.HoraHasta - solicitudPermisoViewModel.SolicitudPermiso.HoraDesde;

                    // Diferencia en dìas
                    TimeSpan?tsDiferenciaDias = solicitudPermisoViewModel.SolicitudPermiso.FechaHasta - solicitudPermisoViewModel.SolicitudPermiso.FechaDesde;



                    response = await apiServicio.EditarAsync(id, solicitudPermisoViewModel.SolicitudPermiso, new Uri(WebApp.BaseAddress), "api/SolicitudesPermisos");

                    if (response.IsSuccess)
                    {
                        return(this.RedireccionarMensajeTime(
                                   "SolicitudesPermisosAprobador",
                                   "IndexEmpleado",
                                   $"{Mensaje.Success}|{response.Message}|{"6000"}"
                                   ));
                    }

                    this.TempData["MensajeTimer"] = $"{Mensaje.Error}|{response.Message}|{"12000"}";
                    await CargarCombos();

                    return(View(solicitudPermisoViewModel.SolicitudPermiso));
                }
                return(BadRequest());
            }
            catch (Exception ex)
            {
                return(BadRequest());
            }
        }