private CadastroLoteProducaoViewModel CarregarModel(CadastroLoteProducaoViewModel dados)
        {
            var model = new CadastroLoteProducaoViewModel();

            model.UsuarioAnalise = new Usuario();

            try
            {
                if (dados != null)
                {
                    model.QtdTotal  = dados.QtdTotal;
                    model.IdMaquina = dados.IdMaquina;
                }

                model.TipoCarta      = new LimiteControle().TipoCarta;
                model.UsuarioAnalise = (Usuario)Session["usuario"];
                model.TipoLote       = TipoLote.Producao;
                model.LimiteControle = new LimiteDAL().ConsultarLimiteControle(true).FirstOrDefault();
            }
            catch (Exception e)
            {
                TempData["Sucesso"]  = false;
                TempData["Mensagem"] = "Erro: " + e.Message;
            }
            return(model);
        }
        public ActionResult CadastroLotesProducao(CadastroLoteProducaoViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (new LoteDAL().VerificarLoteExiste(model.IdLote))
                    {
                        throw new Exception($"Um lote com a numeração {model.IdLote} já foi cadastrado no sistema");
                    }

                    if (model.QtdReprovada > model.QtdTotal)
                    {
                        throw new Exception("A quantidade de itens reprovados não pode ser maior que a quantidade total de itens");
                    }

                    var l = new Lote();
                    l.UsuarioAnalise   = new Usuario();
                    l.UsuarioAprovacao = null;
                    l.Maquina          = new Maquina();
                    l.LimiteControle   = new LimiteControle();

                    l.DataHora            = DateTime.Now;
                    l.TipoLote            = model.TipoLote;
                    l.Maquina.IdMaquina   = model.IdMaquina;
                    l.UsuarioAnalise      = model.UsuarioAnalise;
                    l.IdLote              = model.IdLote;
                    l.QtdTotal            = model.QtdTotal;
                    l.QtdReprovada        = model.QtdReprovada;
                    l.PercentualReprovado = Convert.ToDecimal(l.QtdReprovada) / Convert.ToDecimal(l.QtdTotal);
                    l.Comentario          = model.Comentario;
                    l.LimiteControle      = model.LimiteControle;
                    if (l.PercentualReprovado >= model.LimiteControle.LIC && l.PercentualReprovado <= model.LimiteControle.LSC)
                    {
                        l.Status = Status.Aprovado;
                    }
                    else if (model.UsuarioAprovacao.Login != null && model.UsuarioAprovacao.Senha != null)
                    {
                        l.Status = Status.AprovadoSupervisao;

                        Usuario u = new UsuarioController().Consulta(model.UsuarioAprovacao.Login, model.UsuarioAprovacao.Senha);
                        if (u != null && (u.Perfil.Equals(PerfilUsuario.Supervisor) || u.Perfil.Equals(PerfilUsuario.Gerente) || u.Perfil.Equals(PerfilUsuario.Administrador)))
                        {
                            l.UsuarioAprovacao = u;
                        }
                        else
                        {
                            throw new Exception("As credênciais do usuário aprovação estão incorretas ou a conta não possui autorização para esta ação");
                        }
                    }
                    else
                    {
                        l.Status = Status.Reprovado;
                    }

                    new LoteDAL().CadastrarLoteProducao(l);

                    TempData["Sucesso"]  = true;
                    TempData["Mensagem"] = $"Lote {model.IdLote} cadastrado com sucesso";

                    ModelState.Clear();
                }
            }
            catch (Exception e)
            {
                TempData["Sucesso"]  = false;
                TempData["Mensagem"] = $"Erro: {e.Message}";
            }

            return(View(CarregarModel(model)));
        }