Addition of turnaround time tracking.

This commit is contained in:
lwark
2024-12-04 12:12:54 -06:00
parent cc53b894b2
commit 51cb5c41a4
3 changed files with 120 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import QWidget, QGridLayout, QPushButton
from tools import Report
from .misc import StartEndDatePicker, save_pdf
from .functions import select_save_file
import logging
logger = logging.getLogger(f"submissions.{__name__}")
class InfoPane(QWidget):
def __init__(self, parent: QWidget) -> None:
super().__init__(parent)
self.app = self.parent().parent()
# logger.debug(f"\n\n{self.app}\n\n")
self.report = Report()
self.datepicker = StartEndDatePicker(default_start=-31)
self.webview = QWebEngineView()
self.datepicker.start_date.dateChanged.connect(self.date_changed)
self.datepicker.end_date.dateChanged.connect(self.date_changed)
self.layout = QGridLayout(self)
self.layout.addWidget(self.datepicker, 0, 0, 1, 2)
self.save_excel_button = QPushButton("Save Excel", parent=self)
self.save_excel_button.pressed.connect(self.save_excel)
self.save_pdf_button = QPushButton("Save PDF", parent=self)
self.save_pdf_button.pressed.connect(self.save_pdf)
self.layout.addWidget(self.save_excel_button, 0, 2, 1, 1)
self.layout.addWidget(self.save_pdf_button, 0, 3, 1, 1)
self.layout.addWidget(self.webview, 2, 0, 1, 4)
self.setLayout(self.layout)
def date_changed(self):
self.start_date = self.datepicker.start_date.date().toPyDate()
self.end_date = self.datepicker.end_date.date().toPyDate()
def save_excel(self):
fname = select_save_file(self, default_name=f"Report {self.start_date.strftime('%Y%m%d')} - {self.end_date.strftime('%Y%m%d')}", extension="xlsx")
self.report_obj.write_report(fname, obj=self)
def save_pdf(self):
fname = select_save_file(obj=self,
default_name=f"Report {self.start_date.strftime('%Y%m%d')} - {self.end_date.strftime('%Y%m%d')}",
extension="pdf")
save_pdf(obj=self.webview, filename=fname)

View File

@@ -0,0 +1,36 @@
from PyQt6.QtCore import QSignalBlocker
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import QWidget, QGridLayout, QPushButton, QLabel
from .info_tab import InfoPane
from backend.excel.reports import TurnaroundMaker
from pandas import DataFrame
from backend.db import BasicSubmission
from frontend.visualizations.turnaround_chart import TurnaroundChart
import logging
logger = logging.getLogger(f"submissions.{__name__}")
class TurnaroundTime(InfoPane):
def __init__(self, parent: QWidget):
super().__init__(parent)
self.chart = None
self.report_object = None
self.date_changed()
def date_changed(self):
if self.datepicker.start_date.date() > self.datepicker.end_date.date():
logger.warning("Start date after end date is not allowed!")
lastmonth = self.datepicker.end_date.date().addDays(-31)
# NOTE: block signal that will rerun controls getter and set start date
# Without triggering this function again
with QSignalBlocker(self.datepicker.start_date) as blocker:
self.datepicker.start_date.setDate(lastmonth)
self.date_changed()
return
super().date_changed()
chart_settings = dict(start_date=self.start_date, end_date=self.end_date)
self.report_obj = TurnaroundMaker(start_date=self.start_date, end_date=self.end_date)
self.chart = TurnaroundChart(df=self.report_obj.df, settings=chart_settings, modes=[])
self.webview.setHtml(self.chart.to_html())