Files
scotus-watch/docketModel.py
2025-02-07 17:22:24 -05:00

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]