// GET: HorarioTecnicos/PedidoTrocaTurno
        public async Task <IActionResult> PedidoTrocaTurno(int?idHorario1, HorarioTecnicosViewModel model = null, int page = 1)
        {
            ViewBag.HorarioATrocar = idHorario1;

            if (idHorario1 == null)
            {
                return(NotFound());
            }


            var idTecnico = from h in _context.HorarioTecnicos
                            where h.HorarioTecnicoId == idHorario1
                            select h.FuncionarioId;

            var dataInicio = from h in _context.HorarioTecnicos
                             where h.HorarioTecnicoId == idHorario1
                             select h.DataInicioManha;

            string   nome = null;
            DateTime?data = null;

            if (model != null && model.DataInicio != null || model.CurrentNome != null)
            {
                nome = model.CurrentNome;
                data = model.DataInicio;
                page = 1;
            }

            IQueryable <HorarioTecnicos> horario;
            int numHorario;
            IEnumerable <HorarioTecnicos> listaHorario;

            if (data.HasValue && string.IsNullOrEmpty(nome))
            {
                int ano = data.Value.Year;
                int mes = data.Value.Month;
                int dia = data.Value.Day;

                horario = _context.HorarioTecnicos
                          .Where(h => h.DataInicioManha.Year.Equals(ano) && h.DataInicioManha.Month.Equals(mes) && h.DataInicioManha.Day.Equals(dia) && h.HorarioTecnicoId != idHorario1 && h.FuncionarioId != idTecnico.Single() && h.DataInicioManha >= dataInicio.Single());

                numHorario = await horario.CountAsync();

                listaHorario = await horario
                               .Include(h => h.Funcionario)
                               .Include(h => h.Turno)
                               .OrderBy(h => h.DataInicioManha)
                               .Skip(PAGE_SIZE * (page - 1))
                               .Take(PAGE_SIZE)
                               .ToListAsync();
            }
            else if (!string.IsNullOrEmpty(nome) && !data.HasValue)
            {
                horario = _context.HorarioTecnicos
                          .Where(h => h.Funcionario.Nome.Contains(nome.Trim()) && h.HorarioTecnicoId != idHorario1 && h.FuncionarioId != idTecnico.Single() && h.DataInicioManha >= dataInicio.Single());

                numHorario = await horario.CountAsync();

                listaHorario = await horario
                               .Include(h => h.Funcionario)
                               .Include(h => h.Turno)
                               .OrderBy(h => h.DataInicioManha)
                               .Skip(PAGE_SIZE * (page - 1))
                               .Take(PAGE_SIZE)
                               .ToListAsync();
            }
            else if (!string.IsNullOrEmpty(nome) && data.HasValue)
            {
                int ano = data.Value.Year;
                int mes = data.Value.Month;
                int dia = data.Value.Day;

                horario = _context.HorarioTecnicos
                          .Where(h => h.Funcionario.Nome.Contains(nome.Trim()) && h.DataInicioManha.Year.Equals(ano) && h.DataInicioManha.Month.Equals(mes) && h.DataInicioManha.Day.Equals(dia) && h.HorarioTecnicoId != idHorario1 && h.FuncionarioId != idTecnico.Single() && h.DataInicioManha >= dataInicio.Single());

                numHorario = await horario.CountAsync();

                listaHorario = await horario
                               .Include(h => h.Funcionario)
                               .Include(h => h.Turno)
                               .OrderBy(h => h.DataInicioManha)
                               .Skip(PAGE_SIZE * (page - 1))
                               .Take(PAGE_SIZE)
                               .ToListAsync();
            }
            else
            {
                horario = _context.HorarioTecnicos
                          .Where(h => h.HorarioTecnicoId != idHorario1 && h.FuncionarioId != idTecnico.Single() && h.DataInicioManha >= dataInicio.Single());

                numHorario = await horario.CountAsync();

                listaHorario = await horario
                               .Include(h => h.Funcionario)
                               .Include(h => h.Turno)
                               .OrderBy(h => h.DataInicioManha)
                               .Skip(PAGE_SIZE * (page - 1))
                               .Take(PAGE_SIZE)
                               .ToListAsync();
            }

            if (page > (numHorario / PAGE_SIZE) + 1)
            {
                page = 1;
            }

            return(View(
                       new HorarioTecnicosViewModel
            {
                HorarioTecnicos = listaHorario,
                PagingInfo = new PaginationViewModel
                {
                    CurrentPage = page,
                    ItensPerPage = PAGE_SIZE,
                    TotalItems = numHorario
                },
                CurrentNome = nome,
                DataInicio = data
            }));
        }
        // GET: HorarioTecnicos
        public async Task <IActionResult> Horario(HorarioTecnicosViewModel model = null, int page = 1)
        {
            string   nome = null;
            DateTime?data = null;

            if (model != null && model.DataInicio != null || model.CurrentNome != null)
            {
                nome = model.CurrentNome;
                data = model.DataInicio;
                page = 1;
            }

            IQueryable <HorarioTecnicos> horario;
            int numHorario;
            IEnumerable <HorarioTecnicos> listaHorario;

            if (data.HasValue && string.IsNullOrEmpty(nome))
            {
                int ano = data.Value.Year;
                int mes = data.Value.Month;
                int dia = data.Value.Day;

                horario = _context.HorarioTecnicos
                          .Where(h => h.DataInicioManha.Year.Equals(ano) && h.DataInicioManha.Month.Equals(mes) && h.DataInicioManha.Day.Equals(dia));

                numHorario = await horario.CountAsync();

                listaHorario = await horario
                               .Include(h => h.Funcionario)
                               .Include(h => h.Turno)
                               .OrderBy(h => h.DataInicioManha)
                               .Skip(PAGE_SIZE * (page - 1))
                               .Take(PAGE_SIZE)
                               .ToListAsync();
            }
            else if (!string.IsNullOrEmpty(nome) && !data.HasValue)
            {
                horario = _context.HorarioTecnicos
                          .Where(h => h.Funcionario.Nome.Contains(nome.Trim()));

                numHorario = await horario.CountAsync();

                listaHorario = await horario
                               .Include(h => h.Funcionario)
                               .Include(h => h.Turno)
                               .OrderBy(h => h.DataInicioManha)
                               .Skip(PAGE_SIZE * (page - 1))
                               .Take(PAGE_SIZE)
                               .ToListAsync();
            }
            else
            {
                horario = _context.HorarioTecnicos;

                numHorario = await horario.CountAsync();

                listaHorario = await horario
                               .Include(h => h.Funcionario)
                               .Include(h => h.Turno)
                               .OrderBy(h => h.DataInicioManha)
                               .Skip(PAGE_SIZE * (page - 1))
                               .Take(PAGE_SIZE)
                               .ToListAsync();
            }

            if (page > (numHorario / PAGE_SIZE) + 1)
            {
                page = 1;
            }

            if (listaHorario.Count() == 0)
            {
                TempData["Insuccess"] = "Não existe dados";
            }


            return(View(
                       new HorarioTecnicosViewModel
            {
                HorarioTecnicos = listaHorario,
                PagingInfo = new PaginationViewModel
                {
                    CurrentPage = page,
                    ItensPerPage = PAGE_SIZE,
                    TotalItems = numHorario
                },
                CurrentNome = nome,
                DataInicio = data
            }
                       ));
        }