IDs por categoria e remoção de ID adotado
This commit is contained in:
parent
e21068bdcb
commit
0347c95581
|
@ -9,10 +9,39 @@ class BancoDeDados:
|
||||||
self.pets = Persistente()
|
self.pets = Persistente()
|
||||||
self.adocoes = 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_pessoas = [p.id for p in self.pessoas.listar_todos()]
|
||||||
ids_pets = [p.id for p in self.pets.listar_todos()]
|
return max(ids_pessoas) + 1 if ids_pessoas else 1
|
||||||
ids_adocoes = [a.id for a in self.adocoes.listar_todos()]
|
|
||||||
|
|
||||||
todos_ids = ids_pessoas + ids_pets + ids_adocoes
|
def obter_proximo_id_pet(self):
|
||||||
return max(todos_ids) + 1 if todos_ids else 1
|
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)
|
||||||
|
|
|
@ -154,7 +154,7 @@ class FrameAdocao(tk.Frame):
|
||||||
data = dialog.result["data"]
|
data = dialog.result["data"]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
proximo_id = self.bd.obter_proximo_id()
|
proximo_id = self.bd.obter_proximo_id_adocao()
|
||||||
nova_adocao = Adocao(proximo_id, pessoa)
|
nova_adocao = Adocao(proximo_id, pessoa)
|
||||||
|
|
||||||
for pet in pets:
|
for pet in pets:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import ttk, messagebox, simpledialog
|
from tkinter import ttk, messagebox, simpledialog
|
||||||
|
from persistencia.excecoes import EntidadeNaoEncontradaException
|
||||||
|
|
||||||
from modelo.pessoa import Pessoa
|
from modelo.pessoa import Pessoa
|
||||||
|
|
||||||
|
@ -129,7 +130,7 @@ class FramePessoas(tk.Frame):
|
||||||
def adicionar_pessoa(self):
|
def adicionar_pessoa(self):
|
||||||
nome = simpledialog.askstring("Adicionar Pessoa", "Digite o nome da nova pessoa:", parent=self)
|
nome = simpledialog.askstring("Adicionar Pessoa", "Digite o nome da nova pessoa:", parent=self)
|
||||||
if nome:
|
if nome:
|
||||||
proximo_id = self.bd.obter_proximo_id()
|
proximo_id = self.bd.obter_proximo_id_pessoa()
|
||||||
nova_pessoa = Pessoa(proximo_id, nome)
|
nova_pessoa = Pessoa(proximo_id, nome)
|
||||||
self.bd.pessoas.inserir(nova_pessoa)
|
self.bd.pessoas.inserir(nova_pessoa)
|
||||||
self.popular_treeview()
|
self.popular_treeview()
|
||||||
|
@ -171,11 +172,15 @@ class FramePessoas(tk.Frame):
|
||||||
|
|
||||||
item = self.tree.item(selecionado[0])
|
item = self.tree.item(selecionado[0])
|
||||||
id_pessoa, nome_pessoa = item['values']
|
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:
|
try:
|
||||||
self.bd.pessoas.remover(id_pessoa)
|
self.bd.remover_pessoa(id_pessoa)
|
||||||
self.popular_treeview()
|
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:
|
except EntidadeNaoEncontradaException as e:
|
||||||
messagebox.showerror("Erro", f"Não foi possível apagar: {e}\nA lista será atualizada.")
|
messagebox.showerror("Erro", f"Não foi possível apagar: {e}\nA lista será atualizada.")
|
||||||
self.popular_treeview()
|
self.popular_treeview()
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import ttk, messagebox
|
from tkinter import ttk, messagebox
|
||||||
|
from persistencia.excecoes import EntidadeNaoEncontradaException
|
||||||
|
|
||||||
from modelo.pet import Pet
|
from modelo.pet import Pet
|
||||||
from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet, DialogoEditarPet
|
from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet, DialogoEditarPet
|
||||||
|
@ -137,7 +138,7 @@ class FramePet(tk.Frame):
|
||||||
if dialog.result:
|
if dialog.result:
|
||||||
nome = dialog.result["nome"]
|
nome = dialog.result["nome"]
|
||||||
especie = dialog.result["especie"]
|
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)
|
novo_pet = Pet(proximo_id, nome, especie)
|
||||||
self.bd.pets.inserir(novo_pet)
|
self.bd.pets.inserir(novo_pet)
|
||||||
self.popular_treeview()
|
self.popular_treeview()
|
||||||
|
@ -179,11 +180,15 @@ class FramePet(tk.Frame):
|
||||||
|
|
||||||
item = self.tree.item(selecionado[0])
|
item = self.tree.item(selecionado[0])
|
||||||
id_pet, nome_pet, _ = item['values'] # Ignora a espécie, que agora está na treeview
|
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:
|
try:
|
||||||
self.bd.pets.remover(id_pet)
|
self.bd.remover_pet(id_pet)
|
||||||
self.popular_treeview()
|
self.popular_treeview()
|
||||||
messagebox.showinfo("Sucesso", "Pet apagada com sucesso.")
|
messagebox.showinfo("Sucesso", "Pet apagado com sucesso.")
|
||||||
except EntidadeNaoEncontradaException as e:
|
except EntidadeNaoEncontradaException as e:
|
||||||
messagebox.showerror("Erro", f"Não foi possível apagar: {e}\nA lista será atualizada.")
|
messagebox.showerror("Erro", f"Não foi possível apagar: {e}\nA lista será atualizada.")
|
||||||
self.popular_treeview()
|
self.popular_treeview()
|
||||||
|
|
Loading…
Reference in New Issue