67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
import datetime
|
|
from PySide6.QtCore import QAbstractTableModel, QModelIndex, Qt
|
|
from PySide6.QtGui import QColor, QFont
|
|
from PySide6.QtSql import QSqlQuery
|
|
|
|
from lib.utils import query_error
|
|
|
|
class docketModel(QAbstractTableModel):
|
|
entries = []
|
|
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(q2.value('name'))
|
|
if len(row) > 0:
|
|
self.entries.append([None, " ".join(row)])
|
|
return
|
|
|
|
def rowCount(self, parent:QModelIndex|None = None) -> int:
|
|
return len(self.entries)
|
|
|
|
def columnCount(self, parent:QModelIndex|None = None) -> int:
|
|
return 2
|
|
|
|
def data(self, index: QModelIndex, role:int):
|
|
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):
|
|
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]
|