59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
import mariadb
|
|
from PySide6.QtWidgets import QHBoxLayout, QCheckBox
|
|
|
|
from data import KontorDB
|
|
|
|
|
|
class KontorModelConfig:
|
|
|
|
def __init__(self, kontor_db: KontorDB, main_window, table_name: str):
|
|
self.header = {}
|
|
self.filter = {}
|
|
self.main_window = main_window
|
|
self._table = table_name
|
|
self._table_id = None
|
|
self.kontor_db = kontor_db
|
|
self.get_table_config()
|
|
|
|
def get_table_id(self):
|
|
if self._table_id is not None:
|
|
return
|
|
self._table_id = self.kontor_db.get_table_id(self._table)
|
|
|
|
def get_table_config(self):
|
|
if self._table_id is None:
|
|
self.get_table_id()
|
|
self.header = self.kontor_db.get_column_meta_data(self._table_id)
|
|
self.filter = self.kontor_db.get_filters(self._table_id)
|
|
|
|
def get_filter(self) -> str:
|
|
filter_rule = ""
|
|
# print(self.filter["download"].isChecked())
|
|
for column, filter_info in self.filter.items():
|
|
# print(column, filter_info)
|
|
if filter_info['widget'].isChecked():
|
|
# print(column, filter_info, filter_rule, len(filter_rule))
|
|
if len(filter_rule) < 1:
|
|
filter_rule += "WHERE "
|
|
if len(filter_rule) > 8:
|
|
filter_rule += " AND "
|
|
filter_rule += f"{column} is true"
|
|
# print(f"{filter_rule=}")
|
|
return filter_rule
|
|
|
|
def get_data(self) -> list:
|
|
data = self.kontor_db.get_data(self._table, self.header, self.get_filter())
|
|
print(f"KontorModelConfig.get_data: {len(data)}")
|
|
return data
|
|
|
|
def get_filter_layout(self) -> QHBoxLayout:
|
|
filter_layout = QHBoxLayout()
|
|
for column, filter_info in self.filter.items():
|
|
filter_checkbox = QCheckBox()
|
|
filter_checkbox.setText(filter_info['label'])
|
|
filter_checkbox.checkStateChanged.connect(self.main_window.refresh)
|
|
self.filter[column]['widget'] = filter_checkbox
|
|
filter_layout.addWidget(filter_checkbox)
|
|
filter_layout.addStretch()
|
|
return filter_layout
|