Updates to details interface.
This commit is contained in:
@@ -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}")
|
||||
|
||||
@@ -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:
|
||||
"""
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user