78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
import datetime
|
|
|
|
from PySide6.QtCore import (
|
|
QAbstractTableModel,
|
|
QModelIndex,
|
|
QPersistentModelIndex,
|
|
Qt,
|
|
)
|
|
from PySide6.QtGui import QFont
|
|
from PySide6.QtSql import QSqlQuery
|
|
|
|
from lib.utils import query_error
|
|
|
|
|
|
class docketModel(QAbstractTableModel):
|
|
entries: list[list[str | None]] = []
|
|
|
|
def __init__(self, case_id: int | None = None) -> None:
|
|
super(docketModel, self).__init__()
|
|
if case_id == None:
|
|
return
|
|
query = QSqlQuery()
|
|
query.prepare(
|
|
"SELECT * FROM entries WHERE case_id = :cid " "ORDER BY entry_id"
|
|
)
|
|
q2 = QSqlQuery()
|
|
q2.prepare("SELECT * FROM documents WHERE entry_id = :eid")
|
|
|
|
query.bindValue(":cid", case_id)
|
|
if not query.exec():
|
|
query_error(query)
|
|
while query.next():
|
|
date = datetime.date.fromtimestamp(query.value(2))
|
|
assert isinstance(date, datetime.date)
|
|
row = [date.strftime("%B %-d, %Y"), query.value(3)]
|
|
self.entries.append(row)
|
|
q2.bindValue(":eid", query.value("entry_id"))
|
|
if not q2.exec():
|
|
query_error(q2)
|
|
row = []
|
|
while q2.next():
|
|
row.append("<u>" + q2.value("name") + "</u>")
|
|
if len(row) > 0:
|
|
self.entries.append([None, " ".join(row)])
|
|
return
|
|
|
|
def rowCount(
|
|
self, _: QModelIndex | QPersistentModelIndex = QModelIndex()
|
|
) -> int:
|
|
return len(self.entries)
|
|
|
|
def columnCount(
|
|
self, _: QModelIndex | QPersistentModelIndex = QModelIndex()
|
|
) -> int:
|
|
return 2
|
|
|
|
def data(self, index: QModelIndex | QPersistentModelIndex, role: int = 0):
|
|
if not index.isValid():
|
|
return ""
|
|
if role == Qt.ItemDataRole.DisplayRole:
|
|
return self.entries[index.row()][index.column()]
|
|
if role == Qt.ItemDataRole.TextAlignmentRole and index.column() == 0:
|
|
return Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignTop
|
|
return
|
|
|
|
def headerData(
|
|
self, section: int, orientation: Qt.Orientation, role: int = 0
|
|
):
|
|
if orientation == Qt.Orientation.Vertical:
|
|
return
|
|
if role == Qt.ItemDataRole.FontRole:
|
|
font = QFont()
|
|
font.setBold(True)
|
|
return font
|
|
if role != Qt.ItemDataRole.DisplayRole:
|
|
return
|
|
return ["Date", "Proceedings and Orders"][section]
|