-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontroller.py
126 lines (100 loc) · 5.14 KB
/
controller.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
from model import Model
from view import View
class Controller(Model, View):
"""Uma classe que representa o Controller"""
def __init__(self) -> None:
"""Construtor da classe Controller"""
Model.__init__(self)
View.__init__(self)
print("Iniciando o módulo Controller")
self.nome_lojas = []
self.razao_produtos = []
self.carrega_bd()
print("\nAplicativo iniciado com sucesso!")
def carrega_bd(self) -> None:
"""Método que carrega os itens de acordo com o pedido"""
self.lista_geral_mercados = self.lista_mercados()
self.lista_geral_produtos = self.lista_produtos()
def acessa_dados_mercados(self) -> None:
"""Método que separa o nome da localização do mercado"""
for mercado in self.lista_geral_mercados:
self.nome_lojas.append(mercado.nome)
def acessa_dados_produtos(self) -> None:
"""Método que separa o nome do produto sem repetição por supermercado"""
produtos_por_nome_mercado = {}
for produto in self.lista_geral_produtos:
chave_produto = produto.descricao
chave_mercado = produto.mercado
if chave_produto not in produtos_por_nome_mercado:
produtos_por_nome_mercado[chave_produto] = chave_mercado
self.razao_produtos.append(chave_produto)
else:
mercado_existente = produtos_por_nome_mercado[chave_produto]
if mercado_existente != chave_mercado:
produtos_por_nome_mercado[chave_produto] = chave_mercado
self.razao_produtos.append(chave_produto)
def inicializa_app(self) -> None:
"""Método que inicializa o App"""
self.carrega_bd()
self.acessa_dados_mercados()
self.acessa_dados_produtos()
self.inicializar(self.nome_lojas, self.razao_produtos, self.lista_geral_mercados)
self.inicializa_tabela()
self.root.mainloop()
def inicializa_tabela(self) -> None:
"""Inicia o widget tabela"""
dados_adicionados = set()
for item in self.lista_geral_produtos:
tupla_info = (item.descricao, item.mercado, item.unit_value)
if tupla_info not in dados_adicionados:
listTest = [item.descricao, item.mercado, item.unit_value]
self.frame_inferior.adiciona_dado(listTest)
dados_adicionados.add(tupla_info)
def filtro_marcadores(self, item_produtos) -> None:
"""Método que filtra os marcadores"""
produtos_por_descricao = {produto.descricao: produto for produto in self.lista_geral_produtos}
produtos_relevantes = [produtos_por_descricao[item_produtos]]
marcadores_adicionados = set()
for produto in produtos_relevantes:
for mercado in self.lista_geral_mercados:
if produto.mercado == mercado.nome and mercado.nome not in marcadores_adicionados:
self.criar_marcador(mercado.localizacao(), mercado.nome)
marcadores_adicionados.add(mercado.nome)
def filtrar_items(self) -> None:
"""Método que gere as ações do filtro"""
item_produtos = self.combobox_produtos.get()
item_lojas = self.combobox_mercados.get()
self.filtrar_comboboxes(item_produtos, item_lojas)
self.atualizar_tabela_e_marcadores(item_produtos, item_lojas)
def filtrar_comboboxes(self, item_produtos, item_lojas) -> None:
"""Método que filtra as comboboxes de produtos e mercados"""
produtos_filtrados = set()
mercados_filtrados = set()
for produto in self.lista_geral_produtos:
if item_lojas == "Selecione uma loja" or produto.mercado == item_lojas:
produtos_filtrados.add(produto.descricao)
if item_produtos == "Selecione um produto" or produto.descricao == item_produtos:
mercados_filtrados.add(produto.mercado)
self.combobox_produtos['values'] = ["Selecione um produto"] + list(produtos_filtrados)
self.combobox_mercados['values'] = ["Selecione uma loja"] + list(mercados_filtrados)
def atualizar_tabela_e_marcadores(self, item_produtos, item_lojas) -> None:
"""Método que atualiza a tabela e os marcadores no mapa"""
if item_produtos != "Selecione um produto":
self.inicializa_tabela()
self.frame_inferior.remover_linhas(item_produtos, "Produto")
self.mapview.delete_all_marker()
if item_produtos != "Selecione um produto" and item_lojas == "Selecione uma loja":
self.filtro_marcadores(item_produtos)
elif item_lojas != "Selecione uma loja":
for mercado in self.lista_geral_mercados:
if mercado.nome == item_lojas:
self.criar_marcador(mercado.localizacao(), mercado.nome)
self.frame_inferior.remover_linhas(item_lojas, "Mercado")
if item_produtos == "Selecione um produto" and item_lojas == "Selecione uma loja":
self.inicializa_marcadores()
self.inicializa_tabela()
def main():
Control = Controller()
Control.inicializa_app()
if __name__ == '__main__':
main()