IDs por categoria e remoção de ID adotado

This commit is contained in:
RinBa 2025-07-07 18:50:23 -03:00
parent e21068bdcb
commit 0347c95581
4 changed files with 53 additions and 14 deletions

View File

@ -9,10 +9,39 @@ class BancoDeDados:
self.pets = Persistente()
self.adocoes = Persistente()
def obter_proximo_id(self):
def obter_proximo_id_pessoa(self):
ids_pessoas = [p.id for p in self.pessoas.listar_todos()]
ids_pets = [p.id for p in self.pets.listar_todos()]
ids_adocoes = [a.id for a in self.adocoes.listar_todos()]
return max(ids_pessoas) + 1 if ids_pessoas else 1
todos_ids = ids_pessoas + ids_pets + ids_adocoes
return max(todos_ids) + 1 if todos_ids else 1
def obter_proximo_id_pet(self):
ids_pets = [p.id for p in self.pets.listar_todos()]
return max(ids_pets) + 1 if ids_pets else 1
def obter_proximo_id_adocao(self):
ids_adocoes = [a.id for a in self.adocoes.listar_todos()]
return max(ids_adocoes) + 1 if ids_adocoes else 1
def remover_pessoa(self, id_pessoa: int):
adocoes_para_remover = [
adocao for adocao in self.adocoes.listar_todos()
if adocao.adotante.id == id_pessoa
]
for adocao in adocoes_para_remover:
self.adocoes.remover(adocao.id)
self.pessoas.remover(id_pessoa)
def remover_pet(self, id_pet: int):
adocoes_para_remover = []
for adocao in self.adocoes.listar_todos():
itens_para_manter = [item for item in adocao.itens if item.pet.id != id_pet]
if len(itens_para_manter) < len(adocao.itens):
adocao.itens = itens_para_manter
if not adocao.itens:
adocoes_para_remover.append(adocao.id)
for adocao_id in adocoes_para_remover:
self.adocoes.remover(adocao_id)
self.pets.remover(id_pet)

View File

@ -154,7 +154,7 @@ class FrameAdocao(tk.Frame):
data = dialog.result["data"]
try:
proximo_id = self.bd.obter_proximo_id()
proximo_id = self.bd.obter_proximo_id_adocao()
nova_adocao = Adocao(proximo_id, pessoa)
for pet in pets:

View File

@ -1,5 +1,6 @@
import tkinter as tk
from tkinter import ttk, messagebox, simpledialog
from persistencia.excecoes import EntidadeNaoEncontradaException
from modelo.pessoa import Pessoa
@ -129,7 +130,7 @@ class FramePessoas(tk.Frame):
def adicionar_pessoa(self):
nome = simpledialog.askstring("Adicionar Pessoa", "Digite o nome da nova pessoa:", parent=self)
if nome:
proximo_id = self.bd.obter_proximo_id()
proximo_id = self.bd.obter_proximo_id_pessoa()
nova_pessoa = Pessoa(proximo_id, nome)
self.bd.pessoas.inserir(nova_pessoa)
self.popular_treeview()
@ -171,11 +172,15 @@ class FramePessoas(tk.Frame):
item = self.tree.item(selecionado[0])
id_pessoa, nome_pessoa = item['values']
if messagebox.askyesno("Confirmar", f"Tem certeza que deseja apagar '{nome_pessoa}'?"):
msg = (f"Tem certeza que deseja apagar '{nome_pessoa}'?\n"
"AVISO: Todas as adoções associadas a esta pessoa também serão removidas.")
if messagebox.askyesno("Confirmar Exclusão", msg, icon='warning'):
try:
self.bd.pessoas.remover(id_pessoa)
self.bd.remover_pessoa(id_pessoa)
self.popular_treeview()
messagebox.showinfo("Sucesso", "Pessoa apagada com sucesso.")
messagebox.showinfo("Sucesso", "Pessoa e suas adoções foram apagadas com sucesso.")
except EntidadeNaoEncontradaException as e:
messagebox.showerror("Erro", f"Não foi possível apagar: {e}\nA lista será atualizada.")
self.popular_treeview()

View File

@ -1,5 +1,6 @@
import tkinter as tk
from tkinter import ttk, messagebox
from persistencia.excecoes import EntidadeNaoEncontradaException
from modelo.pet import Pet
from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet, DialogoEditarPet
@ -137,7 +138,7 @@ class FramePet(tk.Frame):
if dialog.result:
nome = dialog.result["nome"]
especie = dialog.result["especie"]
proximo_id = self.bd.obter_proximo_id()
proximo_id = self.bd.obter_proximo_id_pet()
novo_pet = Pet(proximo_id, nome, especie)
self.bd.pets.inserir(novo_pet)
self.popular_treeview()
@ -179,11 +180,15 @@ class FramePet(tk.Frame):
item = self.tree.item(selecionado[0])
id_pet, nome_pet, _ = item['values'] # Ignora a espécie, que agora está na treeview
if messagebox.askyesno("Confirmar", f"Tem certeza que deseja apagar '{nome_pet}'?"):
msg = (f"Tem certeza que deseja apagar '{nome_pet}'?\n"
"AVISO: O pet será removido de todas as adoções existentes.")
if messagebox.askyesno("Confirmar Exclusão", msg, icon='warning'):
try:
self.bd.pets.remover(id_pet)
self.bd.remover_pet(id_pet)
self.popular_treeview()
messagebox.showinfo("Sucesso", "Pet apagada com sucesso.")
messagebox.showinfo("Sucesso", "Pet apagado com sucesso.")
except EntidadeNaoEncontradaException as e:
messagebox.showerror("Erro", f"Não foi possível apagar: {e}\nA lista será atualizada.")
self.popular_treeview()