Post code-cleanup.

This commit is contained in:
lwark
2024-12-06 14:45:22 -06:00
parent 4ed5502c60
commit 51c419e470
11 changed files with 195 additions and 175 deletions

View File

@@ -1,18 +1,17 @@
"""
Handles display of control charts
"""
from datetime import date
from pprint import pformat
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import (
QWidget, QComboBox, QPushButton, QGridLayout
QWidget, QComboBox, QPushButton
)
from PyQt6.QtCore import QSignalBlocker
from backend import ChartReportMaker
from backend.db import ControlType, IridaControl
import logging
from tools import Report, report_result, Result
from tools import Report, report_result
from frontend.visualizations import CustomFigure
from .misc import StartEndDatePicker
from .info_tab import InfoPane
logger = logging.getLogger(f"submissions.{__name__}")
@@ -27,13 +26,8 @@ class ControlsViewer(InfoPane):
if not self.archetype:
return
logger.debug(f"Archetype set as: {self.archetype}")
# self.app = self.parent().parent()
# logger.debug(f"\n\n{self.app}\n\n")
# self.report = Report()
# self.datepicker = StartEndDatePicker(default_start=-180)
# self.webengineview = QWebEngineView()
# NOTE: set tab2 layout
# self.layout = QGridLayout(self)
self.control_sub_typer = QComboBox()
# NOTE: fetch types of controls
con_sub_types = [item for item in self.archetype.targets.keys()]
@@ -46,7 +40,6 @@ class ControlsViewer(InfoPane):
self.mode_sub_typer = QComboBox()
self.mode_sub_typer.setEnabled(False)
# NOTE: add widgets to tab2 layout
# self.layout.addWidget(self.datepicker, 0, 0, 1, 2)
self.save_button = QPushButton("Save Chart", parent=self)
self.layout.addWidget(self.save_button, 0, 2, 1, 1)
self.export_button = QPushButton("Save Data", parent=self)
@@ -55,21 +48,17 @@ class ControlsViewer(InfoPane):
self.layout.addWidget(self.mode_typer, 2, 0, 1, 4)
self.layout.addWidget(self.mode_sub_typer, 3, 0, 1, 4)
self.archetype.get_instance_class().make_parent_buttons(parent=self)
# self.layout.addWidget(self.webengineview, self.layout.rowCount(), 0, 1, 4)
# self.setLayout(self.layout)
self.update_data()
self.control_sub_typer.currentIndexChanged.connect(self.update_data)
self.mode_typer.currentIndexChanged.connect(self.update_data)
# self.datepicker.start_date.dateChanged.connect(self.update_data)
# self.datepicker.end_date.dateChanged.connect(self.update_data)
self.save_button.pressed.connect(self.save_chart_function)
self.export_button.pressed.connect(self.save_data_function)
self.save_button.pressed.connect(self.save_png)
self.export_button.pressed.connect(self.save_excel)
def save_chart_function(self):
self.fig.save_figure(parent=self)
def save_data_function(self):
self.fig.save_data(parent=self)
# def save_chart_function(self):
# self.fig.save_figure(parent=self)
#
# def save_data_function(self):
# self.fig.save_data(parent=self)
@report_result
def update_data(self, *args, **kwargs):
@@ -117,20 +106,6 @@ class ControlsViewer(InfoPane):
self.chart_maker_function()
# return report
@classmethod
def diff_month(self, d1: date, d2: date) -> float:
"""
Gets the number of months difference between two different dates
Args:
d1 (date): Start date.
d2 (date): End date.
Returns:
float: Number of months difference
"""
return abs((d1.year - d2.year) * 12 + d1.month - d2.month)
@report_result
def chart_maker_function(self, *args, **kwargs):
# TODO: Generalize this by moving as much code as possible to IridaControl
@@ -158,6 +133,7 @@ class ControlsViewer(InfoPane):
mode=self.mode,
sub_mode=self.mode_sub_type, parent=self, months=months)
self.fig = self.archetype.get_instance_class().make_chart(chart_settings=chart_settings, parent=self, ctx=self.app.ctx)
self.report_obj = ChartReportMaker(df=self.fig.df, sheet_name=self.archetype.name)
if issubclass(self.fig.__class__, CustomFigure):
self.save_button.setEnabled(True)
# logger.debug(f"Updating figure...")

View File

@@ -1,6 +1,7 @@
"""
A pane to show info e.g. cost reports and turnaround times.
"""
from datetime import date
from PyQt6.QtCore import QSignalBlocker
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import QWidget, QGridLayout
@@ -25,7 +26,8 @@ class InfoPane(QWidget):
self.datepicker.end_date.dateChanged.connect(self.update_data)
self.layout = QGridLayout(self)
self.layout.addWidget(self.datepicker, 0, 0, 1, 2)
self.layout.addWidget(self.webview, 4, 0, 1, 4)
# NOTE: Placed in lower row to allow for addition of custom rows.
self.layout.addWidget(self.webview, 5, 0, 1, 4)
self.setLayout(self.layout)
@report_result
@@ -45,6 +47,20 @@ class InfoPane(QWidget):
report.add_result(Result(owner=self.__str__(), msg=msg, status="Warning"))
return report
@classmethod
def diff_month(self, d1: date, d2: date) -> float:
"""
Gets the number of months difference between two different dates
Args:
d1 (date): Start date.
d2 (date): End date.
Returns:
float: Number of months difference
"""
return abs((d1.year - d2.year) * 12 + d1.month - d2.month)
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)

View File

@@ -1,10 +1,10 @@
from PyQt6.QtCore import QSignalBlocker
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import QWidget, QGridLayout, QPushButton, QLabel, QComboBox
"""
Pane showing turnaround time summary.
"""
from PyQt6.QtWidgets import QWidget, QPushButton, QComboBox, QLabel
from .info_tab import InfoPane
from backend.excel.reports import TurnaroundMaker
from pandas import DataFrame
from backend.db import BasicSubmission, SubmissionType
from backend.db import SubmissionType
from frontend.visualizations.turnaround_chart import TurnaroundChart
import logging
@@ -26,12 +26,14 @@ class TurnaroundTime(InfoPane):
self.submission_typer = QComboBox(self)
subs = ["All"] + [item.name for item in SubmissionType.query()]
self.submission_typer.addItems(subs)
self.layout.addWidget(QLabel("Submission Type"), 1, 0, 1, 1)
self.layout.addWidget(self.submission_typer, 1, 1, 1, 3)
self.submission_typer.currentTextChanged.connect(self.update_data)
self.update_data()
def update_data(self):
super().update_data()
months = self.diff_month(self.start_date, self.end_date)
chart_settings = dict(start_date=self.start_date, end_date=self.end_date)
if self.submission_typer.currentText() == "All":
submission_type = None
@@ -44,5 +46,5 @@ class TurnaroundTime(InfoPane):
threshold = subtype_obj.defaults['turnaround_time'] + 0.5
else:
threshold = None
self.fig = TurnaroundChart(df=self.report_obj.df, settings=chart_settings, modes=[], threshold=threshold)
self.fig = TurnaroundChart(df=self.report_obj.df, settings=chart_settings, modes=[], threshold=threshold, months=months)
self.webview.setHtml(self.fig.to_html())