public async Task <IActionResult> RemoverDefecto(int numeroOrden
                                                         , string defectoDescripcion, TipoDefecto tipoDefecto, TipoPie tipoPie)
        {
            var usuario = await ObtenerUsuario();

            var specDefecto = new DefectoDescripcionSpecification(defectoDescripcion);
            var defecto     = await _unitOfWork.Repository <Defecto>().GetEntityWithSpec(specDefecto);

            var specOrden     = new OrdenConNumeroYActivaSpecification(numeroOrden);
            var ordenCorrecta = await _unitOfWork.Repository <OrdenDeProduccion>()
                                .GetEntityWithSpec(specOrden);


            if (ordenCorrecta != null && usuario != null && defecto != null)
            {
                var specHorarios = new HorariosDeOrdenSpecification(ordenCorrecta.Id);
                var horarios     = await _unitOfWork.Repository <HorarioTrabajo>().ListAsync(specHorarios);

                var specHallazgos = new DefectosOrdenSpecification(horarios.Last().Id);
                var hallazgos     = await _unitOfWork.Repository <Hallazgo>().ListAsync(specHallazgos);

                var hora     = _unitOfWork.GetHora();
                var cantidad = 1;
                ordenCorrecta.RemoverDefecto(tipoPie, usuario.Empleado, defecto, horarios, hallazgos);
                await _unitOfWork.Complete();
            }
            return(await Iniciar(numeroOrden, defecto));
        }
        public async Task <IActionResult> RemoverParDePrimera(int numeroOrden)
        {
            var usuario = await ObtenerUsuario();

            var specOrden     = new OrdenConNumeroYActivaSpecification(numeroOrden);
            var ordenCorrecta = await _unitOfWork.Repository <OrdenDeProduccion>().GetEntityWithSpec(specOrden);


            if (ordenCorrecta != null && usuario != null)
            {
                var specHorarios = new HorariosDeOrdenSpecification(ordenCorrecta.Id);
                var horarios     = await _unitOfWork.Repository <HorarioTrabajo>().ListAsync(specHorarios);

                if (horarios.Count > 0)
                {
                    ordenCorrecta.RemoverParDePrimera(horarios);
                    await _unitOfWork.Complete();
                }
            }
            return(await Iniciar(numeroOrden));
        }
        public async Task <IActionResult> Iniciar(int numeroOrden, Defecto defectoSeleccionado = null)
        {
            var usuario = await ObtenerUsuario();

            var specOrden     = new OrdenConNumeroSpecification(numeroOrden);
            var ordenCorrecta = await _unitOfWork.Repository <OrdenDeProduccion>().GetEntityWithSpec(specOrden);

            if (ordenCorrecta != null)
            {
                var empleadoValido = ordenCorrecta.VerificarAsosiacion(usuario.Empleado);

                if (empleadoValido)
                {
                    var specObservados = new DefectosObservadosSpecification(TipoDefecto.Observado);
                    var specReproceso  = new DefectosObservadosSpecification(TipoDefecto.Reproceso);

                    var defectosObservados = await _unitOfWork.Repository <Defecto>().ListAsync(specObservados);

                    var defectosReproceso = await _unitOfWork.Repository <Defecto>().ListAsync(specReproceso);

                    var hora = _unitOfWork.GetHora();

                    var turnos = await _unitOfWork.Repository <Turno>().ListAllAsync();

                    var turno = ordenCorrecta.Linea.ValidarTurno(turnos, hora);


                    // if (turno != null)
                    //{
                    var specHorarios = new HorariosDeOrdenSpecification(ordenCorrecta.Id);
                    var horarios     = await _unitOfWork.Repository <HorarioTrabajo>().ListAsync(specHorarios);

                    var defectosListViewModel = new DefectosListViewModel
                    {
                        DefectosObservados = defectosObservados,
                        DefectosReprocesos = defectosReproceso,
                        Hora      = hora,
                        Orden     = ordenCorrecta,
                        Turno     = turno,
                        Hallazgos = ordenCorrecta.Horarios.Last().Hallazgos,
                        Primeras  = ordenCorrecta.Horarios.Last().ParesPrimera
                    };

                    if (defectoSeleccionado != null)
                    {
                        defectosListViewModel.def = defectoSeleccionado;
                    }


                    if (horarios.Count > 0)
                    {
                        defectosListViewModel.CantidadPrimera = horarios.Last().ParesPrimera.Count;;
                    }

                    return(View("IniciarInspeccion", defectosListViewModel));
                    // }
                    // else
                    // {
                    //     return RedirectToAction("IniciarAsociacion", "Asociar");
                    // }
                }
            }
            return(RedirectToAction("IniciarAsociacion", "Asociar"));
        }