public JsonResult ExcluirLocalArmazenamento(int id)
        {
            string             resultado = null;
            bool               Ok        = false;
            LocalArmazenamento logData   = LocalArmazenamentoDao.RecuperarPeloId(id);


            Ok = LocalArmazenamentoDao.ExcluirPeloId(id);

            if (Ok)
            {
                resultado = "OK";
            }
            else
            {
                resultado = "Não foi possível excluir esse Local de Armazenamento.";
            }



            return(Json(new { OK = Ok, Resultado = resultado }));
        }
 public JsonResult RecuperarLocalArmazenamento(int id)
 {
     return(Json(LocalArmazenamentoDao.RecuperarPeloId(id)));
 }
        public JsonResult SalvarProduto(Produto model)
        {
            //Iniciando variáveis auxiliares
            var    resultado = "OK";
            var    mensagens = new List <string>();
            var    idSalvo   = string.Empty;
            bool   validationDropDownListError        = false;
            string validationDropDownListErrorMessage = "Os campos a seguir são obrigatórios: ";

            //Recuperando relações
            model.UnidadeMedida      = UnidadeMedidaDao.RecuperarPeloId(model.IdUnidadeMedida);
            model.GrupoProduto       = GrupoProdutoDao.RecuperarPeloId(model.IdGrupo);
            model.MarcaProduto       = MarcaProdutoDao.RecuperarPeloId(model.IdMarca);
            model.Fornecedor         = FornecedorDao.RecuperarPeloId(model.IdFornecedor);
            model.LocalArmazenamento = LocalArmazenamentoDao.RecuperarPeloId(model.IdLocalArmazenamento);


            /*Validando se todas os DropDownList foram preenchidos pelo usuário,
             * Caso não tenha, será construido uma mensagem de erro na variável
             * validationDropDownListErrorMessage e a variável validationDropDownListError receberá true
             * e ao final será retornado a mensagem ao usuário via JSON.
             * Cabe ao Front-end exibir essa mensagem.
             * */
            if (model.UnidadeMedida == null)
            {
                validationDropDownListError         = true;
                validationDropDownListErrorMessage += "  • Unidade de Medida ";
            }
            if (model.GrupoProduto == null)
            {
                validationDropDownListError         = true;
                validationDropDownListErrorMessage += "  • Grupo ";
            }
            if (model.MarcaProduto == null)
            {
                validationDropDownListError         = true;
                validationDropDownListErrorMessage += "  • Marca ";
            }
            if (model.Fornecedor == null)
            {
                validationDropDownListError         = true;
                validationDropDownListErrorMessage += "  • Fornecedor ";
            }
            if (model.LocalArmazenamento == null)
            {
                validationDropDownListError         = true;
                validationDropDownListErrorMessage += "  • Local de Armazenamento ";
            }

            /*
             * A condicional verifica se o validationDropDownListError está falso,
             * se estiver, significa que a validação anterior foi aprovada e o usuário
             * preencheu todos os campos, não existem dados nullos no modelo a ser gravado.
             */
            if (!validationDropDownListError)
            {
                /*Verificando se o Local de Armazenamento possui espaço suficiente para
                 * armazenar os produtos
                 * */
                int capacidadeAtual = LocalArmazenamentoDao.VerificarCapacidadeAtual(model.LocalArmazenamento);
                int capacidadeTotal = LocalArmazenamentoDao.VerificarCapacidadeTotal(model.LocalArmazenamento);
                if ((capacidadeTotal - capacidadeAtual) >= model.QuantEstoque)
                {
                    /*
                     * O ModelState verifica se os demais campos atribuidos como required no
                     * modelo foram preenchidos, caso não atribui a mensagem "Aviso" ao resultado
                     * e resulta uma lista de todos as mensagens de erros do ModelState para
                     * "mensagens"
                     */
                    if (!ModelState.IsValid)
                    {
                        resultado = "AVISO";
                        mensagens = ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage).ToList();
                    }
                    else
                    {
                        /*O ModelState e todos os DropDownList estão validos
                         * Agora o sistema deverá tentar gravar as informações.
                         */
                        try
                        {
                            /*O método salvar é chamado e realiza a operação, o mesmo
                             * deverá retornar o id do modelo gravado caso tenha ocorrido
                             * tudo certo, esse id será fundamental para o front-end caso
                             * esteja utilizando uma abordagem em AJAX.
                             * */

                            if (!ProdutoDao.VerificarCodigo(model) || ProdutoDao.VerificarCodigoEId(model))
                            {
                                var id = ProdutoDao.Salvar(model);
                                //Se o id for maior que 0 significa que ocorreu tudo certo
                                if (id > 0)
                                {
                                    idSalvo = id.ToString();
                                }
                                else
                                {
                                    /*Aparentemente ocorreu um erro no processo de Salvar*/
                                    resultado = "ERRO";
                                }
                            }
                            else
                            {
                                resultado = "Não foi possível cadastrar esse produto pois já existe outro produto com o mesmo Código.";
                            }
                        }
                        #pragma warning disable 0168
                        catch (Exception ex) //Uma exception foi detectada
                        {
                            /*Como o sistema está utilizando uma abordagem em AJAX,
                             * a tela não será atualizada, logo o usuário não receberá a mensagem de
                             * error gigantesca do Asp.net, para isso será atribuido a mensagem
                             * "Erro" ao resultado.
                             * Para que assim será tratado no front-end uma mensagem mais amigável.
                             * */

                            resultado = "ERRO";
                        }
                    }
                }
                else
                {
                    resultado = "O Local de Armazenamento selecionado não possui espaço suficiente para isso, " +
                                " • Capacidade Atual é " + capacidadeAtual + "  • Capacidade Total é " + capacidadeTotal +
                                " • Espaço Livre: " + (capacidadeTotal - capacidadeAtual);
                }
            }
            else
            {
                /* A validação dos DropDownList FALHOU, assim o resultado recebe
                 * todas as mensagens de erros construídas referente aos DropDownList
                 */
                resultado = validationDropDownListErrorMessage;
            }

            /* Será retornado para o front-end:
             *  - Resultado: Se o front-end recebere algo além de "OK" que é o valor inicial
             * da variável resultado, o mesmo saberá que por algum motivo não foi realizado o
             * cadastro no banco de daods, e cabe a ele exibir oque a variável resultado retornou.
             *  - Mensagens: Caso a validação dos demais campos tenha falhado no ModelState, será
             *  retornado uma lista com todas as mensagens de erros.
             *  - IdSalvo: O Id será retonado para que o sistema consiga trabalhar utilizando
             *  AJAX, pois como a tela não atualiza, será necessário saber o IdSalvo para que
             *  caso o usuário queira realizar um novo cadastro na mesma tela, ele consiga assim
             *  mostrar os dados corretos para o mesmo.
             *
             *
             * */



            return(Json(new { Resultado = resultado, Mensagens = mensagens, IdSalvo = idSalvo }));
        }