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