private Response Existe(SolicitudPermiso SolicitudPermiso)
        {
            var fechaDesde = SolicitudPermiso.FechaDesde;
            var fechaHasta = SolicitudPermiso.FechaHasta;
            var horaDesde  = SolicitudPermiso.HoraDesde;
            var horaHasta  = SolicitudPermiso.HoraHasta;

            var SolicitudPermisorespuesta = db.SolicitudPermiso.Where(p => p.FechaDesde == fechaDesde && p.FechaHasta == fechaHasta && p.HoraDesde == horaDesde && p.HoraHasta == horaHasta && p.IdEmpleado == SolicitudPermiso.IdEmpleado && p.IdTipoPermiso == SolicitudPermiso.IdTipoPermiso).FirstOrDefault();

            if (SolicitudPermisorespuesta != null)
            {
                return(new Response
                {
                    IsSuccess = true,
                    Message = Mensaje.ExisteRegistro,
                    Resultado = SolicitudPermisorespuesta,
                });
            }

            return(new Response
            {
                IsSuccess = false,
                Resultado = SolicitudPermisorespuesta,
            });
        }
        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 <List <SolicitudPermiso> > ListarInformacionEmpleado([FromBody] SolicitudPermiso solicitudPermiso)
 {
     try
     {
         return(await db.SolicitudPermiso
                .Include(x => x.Empleado)
                .ThenInclude(x => x.Persona)
                .Include(x => x.TipoPermiso)
                .Where(x => (x.IdEmpleado == solicitudPermiso.IdEmpleado) && (x.Estado == 0 || x.Estado == -1))
                .ToListAsync());
     }
     catch (Exception ex)
     {
         return(new List <SolicitudPermiso>());
     }
 }
        public async Task <Response> PutSolicitudPermiso([FromRoute] int id, [FromBody] SolicitudPermiso solicitudPermiso)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(new Response
                    {
                        IsSuccess = false,
                        Message = Mensaje.ModeloInvalido
                    });
                }

                var SolicitudPermiso = db.SolicitudPermiso.Find(solicitudPermiso.IdSolicitudPermiso);


                SolicitudPermiso.HoraDesde     = solicitudPermiso.HoraDesde;
                SolicitudPermiso.HoraHasta     = solicitudPermiso.HoraHasta;
                SolicitudPermiso.FechaDesde    = solicitudPermiso.FechaDesde;
                SolicitudPermiso.FechaHasta    = solicitudPermiso.FechaHasta;
                SolicitudPermiso.Motivo        = solicitudPermiso.Motivo;
                SolicitudPermiso.IdTipoPermiso = solicitudPermiso.IdTipoPermiso;
                SolicitudPermiso.Estado        = solicitudPermiso.Estado;
                SolicitudPermiso.FechaAprobado = DateTime.Now;
                SolicitudPermiso.Observacion   = solicitudPermiso.Observacion;
                db.SolicitudPermiso.Update(SolicitudPermiso);
                await db.SaveChangesAsync();

                return(new Response
                {
                    IsSuccess = true,
                    Message = Mensaje.Satisfactorio,
                    Resultado = SolicitudPermiso
                });
            }
            catch (Exception ex)
            {
                return(new Response
                {
                    IsSuccess = true,
                    Message = Mensaje.Excepcion,
                });
            }
        }
        public async Task <Response> PostSolicitudPermiso([FromBody] SolicitudPermiso SolicitudPermiso)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(new Response
                    {
                        IsSuccess = false,
                        Message = ""
                    });
                }

                var respuesta = Existe(SolicitudPermiso);
                if (!respuesta.IsSuccess)
                {
                    db.SolicitudPermiso.Add(SolicitudPermiso);
                    await db.SaveChangesAsync();

                    return(new Response
                    {
                        IsSuccess = true,
                        Message = Mensaje.Satisfactorio
                    });
                }

                return(new Response
                {
                    IsSuccess = false,
                    Message = Mensaje.ExisteRegistro,
                });
            }
            catch (Exception ex)
            {
                return(new Response
                {
                    IsSuccess = false,
                    Message = Mensaje.Error,
                });
            }
        }
        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());
            }
        }