/// <summary> /// Exclui fisica/logicamente um produto no Banco de Dados /// </summary> /// <param name="produto">Obj categoria com Descricao</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Excluir(Produto produto) { _bd = new Persistencia(); try { _bd.Cmd.CommandText = @"delete from produtos where id = @id"; _bd.Cmd.Parameters.AddWithValue("@id", produto.Id); _bd.ExecuteNonQuery();// se o produto estiver em uso ela é desativada } catch (Exception) { //se nao excluir faz exclusao logica try { _bd.Cmd.Parameters.Clear(); _bd.Cmd.CommandText = @"UPDATE produtos SET excluido = @value WHERE id = @id"; _bd.Cmd.Parameters.AddWithValue("@value", 1);//1 == excluido _bd.ExecuteNonQuery(); } catch (Exception) { return false; } } //se excluiu ou desativou =sucesso return true; }
/// <summary> /// Exclui um Produto /// </summary> /// <param name="produto">obj Produto com id valida</param> /// <param name="notificacao">notificacoes de erro ou sucesso</param> /// <returns>verdadeiro se não houver erros</returns> public bool Excluir(Produto produto, out Notificacao notificacao) { if (produto.Id <= 0) { notificacao = new Notificacao("Não foi possivel identificar o codigo do Produto a ser excluido", 'e'); return false; } if (new ProdutoBD().Excluir(produto)) { notificacao = new Notificacao("Produto excluido com Sucesso", 's'); return true; } notificacao = new Notificacao("Não foi possivel excluir o produto informado, tente novamente, se o erro persistir contate o adminsitrador", 'e'); return false; }
/// <summary> /// Atualiza um produto no Banco de Dados /// </summary> /// <param name="produto">Obj produto com Descricao</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Atualizar(Produto produto) { _bd = new Persistencia(); try { _bd.Cmd.CommandText = @"UPDATE produtos SET descricao = @descricao, categoria_id = @categoria_id WHERE id = @id"; _bd.Cmd.Parameters.AddWithValue("@descricao", produto.Descricao); _bd.Cmd.Parameters.AddWithValue("@categoria_id", produto.Categoria.Id); _bd.Cmd.Parameters.AddWithValue("@id", produto.Id); if (!(_bd.ExecuteNonQuery() > 0)) { return false; } } catch (Exception) { return false; } return true; }
/// <summary> /// Grava um produto /// </summary> /// <param name="produto">obj produto com descricao valida</param> /// <param name="notificacao">notificacoes de erro ou sucesso</param> /// <returns>verdadeiro se não houver erros</returns> public bool Gravar(Produto produto, out Notificacao notificacao) { bool cadastro = produto.Id == 0; produto.Descricao = produto.Descricao.ToUpper().Trim();//maiuscula sem espacos padrao! if (string.IsNullOrEmpty(produto.Descricao)) { notificacao = new Notificacao("Descrição inválida, informe uma descrição valida para gravar", 'e'); return false; } if (produto.Descricao.Length < 3) { notificacao = new Notificacao("Descrição inválida, a descrição deve conter pelo menos 3 caracteres", 'e'); return false; } if (!new CategoriaProdutoCtrl().Recuperar(produto.Categoria, out notificacao)) { notificacao = new Notificacao("Categoria informada é invalida", 'e'); return false; } if (!(cadastro ? new ProdutoBD().Inserir(produto) : new ProdutoBD().Atualizar(produto))) { if (cadastro && produto.Id > 0) notificacao = new Notificacao("Produto já está cadastrado", 'a'); else { notificacao = new Notificacao("Erro de banco de dados, notifique o administrador", 'e'); } return false; } notificacao = cadastro ? new Notificacao("Produto cadastrado com Sucesso", 's') : new Notificacao("Produto atualizado com Sucesso", 's'); return true; }
/// <summary> /// Recupera um Produto /// </summary> /// <param name="produto">obj produto com id valida</param> /// <param name="notificacao">notificacoes de erro ou sucesso</param> /// <returns>verdadeiro se não houver erros</returns> public bool Recuperar(Produto produto, out Notificacao notificacao) { if (produto.Id <= 0) { notificacao = new Notificacao("Não foi possivel identificar o codigo do produto a ser recuperado", 'e'); return false; } if (!new ProdutoBD().Recuperar(produto)) { notificacao = new Notificacao("Não foi possivel recuperar o Produto - Erro no Banco de Dados", 'e'); return false; } notificacao = new Notificacao("Categoria recuperada com sucesso", 's'); return true; }
/// <summary> /// Recupera um produto no Banco de Dados /// </summary> /// <param name="produto">Obj produto com Descricao</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Recuperar(Produto produto) { _bd = new Persistencia(); try { _bd.Cmd.CommandText = @"select p.descricao, c.id as c_id, c.descricao as c_descricao from produtos p left join categoriasProduto c on p.categoria_id = c.id where p.id = @id"; _bd.Cmd.Parameters.AddWithValue("@id", produto.Id); DataTable dado = _bd.ExecuteReader(); produto.Descricao = dado.Rows[0]["descricao"].ToString(); produto.Categoria = new Categoria(Convert.ToInt32(dado.Rows[0]["c_id"].ToString()),dado.Rows[0]["c_descricao"].ToString()); } catch { return false; } return true; }
/// <summary> /// Insere um produto no Banco de dados /// </summary> /// <param name="produto">Obj categoria com Descricao</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Inserir(Produto produto) { _bd = new Persistencia(); try { _bd.Cmd.CommandText = @"INSERT INTO `produtos` (`descricao`, `categoria_id`) VALUES (@descricao, @categoria_id);"; _bd.Cmd.Parameters.AddWithValue("@descricao", produto.Descricao); _bd.Cmd.Parameters.AddWithValue("@categoria_id", produto.Categoria.Id); if (_bd.ExecuteNonQuery() <= 0)//descricao repetidas causam erros de UNIQUEKEY, zero linhas, ninguem foi inserido! return false; return true; } catch (Exception) { //faz ativacao logica try { _bd.Cmd.CommandText = @"select excluido from produtos where descricao = @descricao"; //se o produto existir e estiver desativado, reativa e informa inserido com sucesso if (Convert.ToInt32(_bd.ExecuteScalar()) == 1)//1 == desativo { _bd.Cmd.CommandText = @"UPDATE produtos SET excluido = @value, categoria_id = @categoria_id WHERE descricao = @descricao; select id from produtos where descricao = @descricao"; _bd.Cmd.Parameters.AddWithValue("@value", 0);//0 == ativo _bd.Cmd.Parameters.AddWithValue("@categoria_id", produto.Categoria.Id); produto.Id = Convert.ToInt32(_bd.ExecuteScalar());//recupera id return true; } _bd.Cmd.CommandText = @"select id from produtos where descricao = @descricao"; produto.Id = Convert.ToInt32(_bd.ExecuteScalar());//recupera id return false;//se ja estiver ativo retorna falso! } catch (Exception) { return false;//erro de banco de dados! } } }
protected List<Notificacao> notificacoes = new List<Notificacao>(); //notificações #endregion Fields #region Methods public void BtnOpcoes(object sender, CommandEventArgs e) { switch (e.CommandName) { case "gravar": { Notificacao notificacao; var produto = new Produto(Convert.ToInt32(produtoId.Value), ttbDescricao.Text,new Categoria(Convert.ToInt32(categoriaId.Value))); bool gravou = new ProdutoCtrl().Gravar(produto, out notificacao); notificacoes.Add(notificacao); if (gravou) { LimparCampos(); ListarProdutos(); } else { ListarNotificacoes(); } } break; case "cancelar": { LimparCampos(); ListarProdutos(); } break; case "remover": { Notificacao notificacao; bool excluiu = new ProdutoCtrl().Excluir(new Produto(Convert.ToInt32(produtoId.Value)), out notificacao); notificacoes.Add(notificacao); if (excluiu) { LimparCampos();//zera id e limpa caso o amado usuário tenha solicitado edicao antes de excluir a categoria... ListarProdutos(); } else ListarNotificacoes(); } break; case "editar": { Notificacao notificacao; var produto = new Produto(Convert.ToInt32(e.CommandArgument)); bool recuperou = new ProdutoCtrl().Recuperar(produto, out notificacao); if (recuperou) { btnCancelar.Visible = true; produtoId.Value = produto.Id.ToString();//salva a id em edicao ttbDescricao.Text = produto.Descricao;//exibe descricao selecionada categoriaId.Value = produto.Categoria.Id.ToString(); ttbCategoria.Text = produto.Categoria.Descricao; ListarProdutos(); } else {//informa o erro notificacoes.Add(notificacao); ListarNotificacoes(); } } break; } }