Updates to details interface.

This commit is contained in:
lwark
2025-07-16 14:12:03 -05:00
parent 02c88256f2
commit 53c6668ce1
12 changed files with 276 additions and 71 deletions

View File

@@ -80,6 +80,7 @@ class ProcedureCreation(QDialog):
equipmentrole['equipment'].insert(0, equipmentrole['equipment'].pop(
equipmentrole['equipment'].index(item_in_er_list)))
proceduretype_dict['equipment_section'] = EquipmentUsage.construct_html(procedure=self.procedure, child=True)
self.update_equipment = EquipmentUsage.update_equipment
html = render_details_template(
template_name="procedure_creation",
# css_in=['new_context_menu'],
@@ -94,6 +95,30 @@ class ProcedureCreation(QDialog):
f.write(html)
self.webview.setHtml(html)
@pyqtSlot(str, str, str, str)
def update_equipment(self, equipmentrole: str, equipment: str, process: str, tips: str):
from backend.db.models import Equipment
logger.debug("Updating equipment")
try:
equipment_of_interest = next(
(item for item in self.procedure.equipment if item.equipmentrole == equipmentrole))
except StopIteration:
equipment_of_interest = None
equipment = Equipment.query(name=equipment)
if equipment_of_interest:
eoi = self.procedure.equipment.pop(self.procedure.equipment.index(equipment_of_interest))
else:
eoi = equipment.to_pydantic(proceduretype=self.procedure.proceduretype)
eoi.name = equipment.name
eoi.asset_number = equipment.asset_number
eoi.nickname = equipment.nickname
process = next((prcss for prcss in equipment.process if prcss.name == process))
eoi.process = process.to_pydantic()
tips = next((tps for tps in equipment.tips if tps.name == tips))
eoi.tips = tips.to_pydantic()
self.procedure.equipment.append(eoi)
logger.debug(f"Updated equipment: {self.procedure.equipment}")
@pyqtSlot(str, str)
def text_changed(self, key: str, new_value: str):
logger.debug(f"New value for {key}: {new_value}")

View File

@@ -63,17 +63,19 @@ class SubmissionDetails(QDialog):
self.webview.page().setWebChannel(self.channel)
def object_details(self, object):
details = object.details_dict()
details = object.clean_details_dict(object.details_dict())
template = object.details_template
template_path = Path(template.environment.loader.__getattribute__("searchpath")[0])
with open(template_path.joinpath("css", "styles.css"), "r") as f:
css = f.read()
key = object.__class__.__name__.lower()
d = {key: details}
logger.debug(f"Using details: {d}")
html = template.render(**d, css=css)
logger.debug(f"Using details: {pformat(d)}")
html = template.render(**d, css=[css])
self.webview.setHtml(html)
self.setWindowTitle(f"{object.__class__.__name__} Details - {object.name}")
with open(f"{object.__class__.__name__}_details_rendered.html", "w") as f:
f.write(html)
@@ -226,7 +228,7 @@ class SubmissionDetails(QDialog):
Args:
run (str | BasicRun): Submission of interest.
"""
logger.debug(f"Submission details.")
logger.debug(f"Run details.")
if isinstance(run, str):
run = Run.query(name=run)
self.rsl_plate_number = run.rsl_plate_number
@@ -242,6 +244,7 @@ class SubmissionDetails(QDialog):
self.html = self.template.render(sub=self.base_dict, permission=is_power_user(), css=css)
self.webview.setHtml(self.html)
@pyqtSlot(str)
def sign_off(self, run: str | Run) -> None:
"""

View File

@@ -1,6 +1,8 @@
"""
Contains all procedure related frontend functions
"""
import sys
from PyQt6.QtWidgets import (
QWidget, QPushButton, QVBoxLayout,
QComboBox, QDateEdit, QLineEdit, QLabel, QCheckBox, QHBoxLayout, QGridLayout
@@ -142,9 +144,9 @@ class SubmissionFormContainer(QWidget):
# self.pydclientsubmission = self.clientsubmissionparser.to_pydantic()
# self.pydsamples = self.sampleparser.to_pydantic()
# logger.debug(f"Samples: {pformat(self.pydclientsubmission.sample)}")
self.clientsubmission_manager = DefaultClientSubmissionManager(parent=self, fname=fname)
self.clientsubmission_manager = DefaultClientSubmissionManager(parent=self, input_object=fname)
self.pydclientsubmission = self.clientsubmission_manager.parse()
checker = SampleChecker(self, "Sample Checker", self.pydclientsubmission.samples)
checker = SampleChecker(self, "Sample Checker", self.pydclientsubmission.sample)
if checker.exec():
# logger.debug(pformat(self.pydclientsubmission.sample))
try:
@@ -189,7 +191,7 @@ class SubmissionFormContainer(QWidget):
class SubmissionFormWidget(QWidget):
update_reagent_fields = ['kittype']
def __init__(self, parent: QWidget, pyd: PydRun, disable: list | None = None) -> None:
def __init__(self, parent: QWidget, pyd: PydClientSubmission, disable: list | None = None) -> None:
super().__init__(parent)
if disable is None:
disable = []
@@ -816,8 +818,8 @@ class ClientSubmissionFormWidget(SubmissionFormWidget):
except AttributeError:
pass
# save_btn = QPushButton("Save")
self.samples = samples
logger.debug(f"Samples: {self.samples}")
self.sample = samples
logger.debug(f"Samples: {self.sample}")
start_run_btn = QPushButton("Save")
# self.layout.addWidget(save_btn)
self.layout.addWidget(start_run_btn)
@@ -867,12 +869,19 @@ class ClientSubmissionFormWidget(SubmissionFormWidget):
@report_result
def create_new_submission(self, *args) -> Report:
pyd = self.to_pydantic()
logger.debug(f"Pydantic: {pyd}")
sql = pyd.to_sql()
for sample in self.samples:
for sample in pyd.sample:
if isinstance(sample, PydSample):
sample = sample.to_sql()
assert not isinstance(sample, PydSample)
# if sample not in sql.sample:
sql.add_sample(sample=sample)
logger.debug(sql.__dict__)
logger.debug(pformat(sql.__dict__))
try:
del sql._misc_info['sample']
except KeyError:
pass
sql.save()
self.app.table_widget.sub_wid.set_data()
self.setParent(None)