add column header info
This commit is contained in:
+37
-35
@@ -5,10 +5,11 @@ from PySide6.QtWidgets import QHBoxLayout, QCheckBox
|
||||
class KontorModelConfig:
|
||||
|
||||
def __init__(self, db_config, main_window, table_name: str):
|
||||
self.header = []
|
||||
self.header = {}
|
||||
self.filter = {}
|
||||
self.main_window = main_window
|
||||
self._table = table_name
|
||||
self._table_id = None
|
||||
self.db_conn = mariadb.connect(
|
||||
host=db_config['mariadb']['host'],
|
||||
port=db_config['mariadb']['port'],
|
||||
@@ -19,64 +20,65 @@ class KontorModelConfig:
|
||||
self.get_table_config()
|
||||
|
||||
def get_table_id(self):
|
||||
if self._table_id is not None:
|
||||
return
|
||||
cursor = self.db_conn.cursor()
|
||||
cursor.execute("SELECT id, created_date, last_modified_date FROM meta_data_table WHERE table_name=?", (self._table, ))
|
||||
rows = cursor.fetchall()
|
||||
if len(rows) == 1:
|
||||
return rows[0][0]
|
||||
return None
|
||||
self._table_id = rows[0][0]
|
||||
|
||||
def get_table_config(self):
|
||||
table_id = self.get_table_id()
|
||||
if self._table_id is None:
|
||||
self.get_table_id()
|
||||
cursor = self.db_conn.cursor()
|
||||
cursor.execute("SELECT id, column_name, column_order FROM meta_data_column WHERE table_id=? AND is_shown is true", (table_id, ))
|
||||
cursor.execute("SELECT column_name, column_order, column_label FROM meta_data_column WHERE table_id=? AND is_shown is true ORDER bY column_order", (self._table_id, ))
|
||||
rows = cursor.fetchall()
|
||||
self.header.clear()
|
||||
for (column_id, column_name, column_order) in rows:
|
||||
self.header.insert(column_order-1, column_name)
|
||||
print(f"retrieved {len(rows)} columns, set {len(self.header)} headers")
|
||||
|
||||
def get_header(self) -> list:
|
||||
self.get_table_config()
|
||||
return self.header
|
||||
order = 0
|
||||
for (column_name, column_order, column_label) in rows:
|
||||
self.header[order] = { 'column': column_name, 'label': column_label, 'order': column_order}
|
||||
order += 1
|
||||
# print(f"retrieved {len(rows)} columns, set {len(self.header)} headers")
|
||||
cursor.execute("SELECT column_name, filter_label from meta_data_column WHERE table_id=? AND show_filter is true", (self._table_id, ))
|
||||
rows = cursor.fetchall()
|
||||
for row in rows:
|
||||
self.filter[row[0]] = {'label': row[1], 'widget': None}
|
||||
# print(f"retrieved {len(rows)} filters: {self.filter}")
|
||||
|
||||
def get_filter(self) -> str:
|
||||
filter_rule = ""
|
||||
# print(self.filter["download"].isChecked())
|
||||
if self.filter["download"].isChecked():
|
||||
# print(self.filter["download"].isChecked())
|
||||
filter_rule = "WHERE should_download is true"
|
||||
if self.filter["review"].isChecked():
|
||||
if len(filter_rule) > 0:
|
||||
filter_rule += " AND "
|
||||
else:
|
||||
filter_rule += "WHERE "
|
||||
filter_rule += "review is true"
|
||||
print(f"{filter_rule=}")
|
||||
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_statement(self) -> str:
|
||||
filter_rule = self.get_filter()
|
||||
self.get_table_config()
|
||||
# self.get_table_config()
|
||||
columns = ""
|
||||
for index in range(len(self.header)):
|
||||
for index, column in self.header.items():
|
||||
if index > 0:
|
||||
columns += ", "
|
||||
columns += self.header[index]
|
||||
columns += column['column']
|
||||
statement = f"SELECT {columns} FROM media_file {filter_rule}"
|
||||
return statement
|
||||
|
||||
def get_filter_layout(self) -> QHBoxLayout:
|
||||
filter_layout = QHBoxLayout()
|
||||
download_checkbox = QCheckBox()
|
||||
download_checkbox.setText("Download")
|
||||
download_checkbox.checkStateChanged.connect(self.main_window.refresh)
|
||||
self.filter["download"] = download_checkbox
|
||||
review_checkbox = QCheckBox()
|
||||
review_checkbox.setText("Review")
|
||||
review_checkbox.checkStateChanged.connect(self.main_window.refresh)
|
||||
self.filter["review"] = review_checkbox
|
||||
filter_layout.addWidget(review_checkbox)
|
||||
filter_layout.addWidget(download_checkbox)
|
||||
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
|
||||
|
||||
+6
-5
@@ -19,7 +19,7 @@ class KontorTableModel(QAbstractTableModel):
|
||||
cursor = self._config.db_conn.cursor()
|
||||
cursor.execute(self._config.get_statement())
|
||||
rows = cursor.fetchall()
|
||||
print(len(rows))
|
||||
# print(len(rows))
|
||||
if len(rows) > 0:
|
||||
self.beginResetModel()
|
||||
for row in rows:
|
||||
@@ -39,7 +39,7 @@ class KontorTableModel(QAbstractTableModel):
|
||||
|
||||
def headerData(self, col, orientation, role=Qt.ItemDataRole.DisplayRole):
|
||||
if orientation == Qt.Orientation.Horizontal and role == Qt.ItemDataRole.DisplayRole:
|
||||
return self._config.header[col]
|
||||
return self._config.header[col]['column']
|
||||
if orientation == Qt.Orientation.Vertical and role == Qt.ItemDataRole.DisplayRole:
|
||||
return str(col+1)
|
||||
|
||||
@@ -48,6 +48,7 @@ class KontorTableModel(QAbstractTableModel):
|
||||
return None
|
||||
value = self._data[index.row()][index.column()]
|
||||
if role == Qt.ItemDataRole.DisplayRole:
|
||||
# print('{}: {}'.format(value, type(value)))
|
||||
if isinstance(value, datetime):
|
||||
return value.strftime("%Y-%m-%d %M:%M:%S")
|
||||
if isinstance(value, str):
|
||||
@@ -57,7 +58,7 @@ class KontorTableModel(QAbstractTableModel):
|
||||
return self._main_window.tick
|
||||
else:
|
||||
return self._main_window.cross
|
||||
return value
|
||||
return str(value)
|
||||
if role == Qt.ItemDataRole.DecorationRole:
|
||||
if isinstance(value, bytes):
|
||||
# print('{}: {}'.format(value, type(value)))
|
||||
@@ -69,8 +70,8 @@ class KontorTableModel(QAbstractTableModel):
|
||||
def columnCount(self, index=QModelIndex()):
|
||||
# The following takes the first sub-list, and returns
|
||||
# the length (only works if all rows are an equal length)
|
||||
print(f"Header count: {len(self._config.get_header())}")
|
||||
return len(self._config.get_header())
|
||||
# print(f"Header count: {len(self._config.get_header())}")
|
||||
return len(self._config.header)
|
||||
|
||||
def setData(self, index, value, role=Qt.ItemDataRole.EditRole):
|
||||
if role == Qt.ItemDataRole.EditRole:
|
||||
|
||||
Reference in New Issue
Block a user