Removed Kittype.
This commit is contained in:
@@ -13,7 +13,7 @@ from PyQt6.QtGui import QAction
|
||||
from pathlib import Path
|
||||
from markdown import markdown
|
||||
from pandas import ExcelWriter
|
||||
from backend.db.models import Reagent, KitType
|
||||
from backend.db.models import Reagent
|
||||
from tools import (
|
||||
check_if_app, Settings, Report, jinja_template_loading, check_authorization, page_size, is_power_user,
|
||||
under_development
|
||||
|
||||
@@ -6,7 +6,7 @@ from PyQt6.QtWidgets import (
|
||||
QWidget, QComboBox, QPushButton
|
||||
)
|
||||
from PyQt6.QtCore import QSignalBlocker
|
||||
from backend import ChartReportMaker
|
||||
from backend.excel.reports import ChartReportMaker
|
||||
from backend.db import ControlType
|
||||
import logging
|
||||
from tools import Report, report_result
|
||||
|
||||
@@ -2,7 +2,7 @@ from PyQt6.QtWidgets import (
|
||||
QVBoxLayout, QDialog, QDialogButtonBox
|
||||
)
|
||||
from .misc import CheckableComboBox, StartEndDatePicker
|
||||
from backend.db.models.kits import SubmissionType
|
||||
from backend.db.models.procedures import SubmissionType
|
||||
|
||||
|
||||
class DateTypePicker(QDialog):
|
||||
|
||||
@@ -21,7 +21,7 @@ class EquipmentUsage(QDialog):
|
||||
self.procedure = procedure
|
||||
self.setWindowTitle(f"Equipment Checklist - {procedure.name}")
|
||||
self.used_equipment = self.procedure.equipment
|
||||
self.kit = self.procedure.kittype
|
||||
# self.kit = self.procedure.kittype
|
||||
self.opt_equipment = procedure.proceduretype.get_equipment()
|
||||
self.layout = QVBoxLayout()
|
||||
self.setLayout(self.layout)
|
||||
|
||||
@@ -57,7 +57,7 @@ class EquipmentUsage(QDialog):
|
||||
proceduretype = procedure.proceduretype
|
||||
proceduretype_dict = proceduretype.details_dict()
|
||||
run = procedure.run
|
||||
proceduretype_dict['equipment_json'] = flatten_list([item['equipment_json'] for item in proceduretype_dict['equipment']])
|
||||
# proceduretype_dict['equipment_json'] = flatten_list([item['equipment_json'] for item in proceduretype_dict['equipment']])
|
||||
# proceduretype_dict['equipment_json'] = [
|
||||
# {'name': 'Liquid Handler', 'equipment': [
|
||||
# {'name': 'Other', 'asset_number': 'XXX', 'processes': [
|
||||
|
||||
@@ -20,7 +20,7 @@ from typing import TYPE_CHECKING, Any, List
|
||||
if TYPE_CHECKING:
|
||||
from backend.db.models import Run, Procedure
|
||||
from backend.validators import PydProcedure
|
||||
from tools import jinja_template_loading, get_application_from_parent, render_details_template
|
||||
from tools import jinja_template_loading, get_application_from_parent, render_details_template, sanitize_object_for_json
|
||||
|
||||
logger = logging.getLogger(f"submissions.{__name__}")
|
||||
|
||||
@@ -32,10 +32,11 @@ class ProcedureCreation(QDialog):
|
||||
self.edit = edit
|
||||
self.run = procedure.run
|
||||
self.procedure = procedure
|
||||
logger.debug(f"procedure: {pformat(self.procedure.__dict__)}")
|
||||
self.proceduretype = procedure.proceduretype
|
||||
self.setWindowTitle(f"New {self.proceduretype.name} for {self.run.rsl_plate_number}")
|
||||
# self.created_procedure = self.proceduretype.construct_dummy_procedure(run=self.run)
|
||||
self.procedure.update_kittype_reagentroles(kittype=self.procedure.possible_kits[0])
|
||||
# self.procedure.update_kittype_reagentroles(kittype=self.procedure.possible_kits[0])
|
||||
|
||||
# self.created_procedure.samples = self.run.constuct_sample_dicts_for_proceduretype(proceduretype=self.proceduretype)
|
||||
# logger.debug(f"Samples to map\n{pformat(self.created_procedure.samples)}")
|
||||
@@ -70,8 +71,13 @@ class ProcedureCreation(QDialog):
|
||||
|
||||
def set_html(self):
|
||||
from .equipment_usage_2 import EquipmentUsage
|
||||
logger.debug(f"Edit: {self.edit}")
|
||||
# logger.debug(f"Edit: {self.edit}")
|
||||
proceduretype_dict = self.proceduretype.details_dict()
|
||||
logger.debug(f"Reagent roles: {self.procedure.reagentrole}")
|
||||
logger.debug(f"Equipment roles: {pformat(proceduretype_dict['equipment'])}")
|
||||
# NOTE: Add --New-- as an option for reagents.
|
||||
for key, value in self.procedure.reagentrole.items():
|
||||
value.append(dict(name="--New--"))
|
||||
if self.procedure.equipment:
|
||||
for equipmentrole in proceduretype_dict['equipment']:
|
||||
# NOTE: Check if procedure equipment is present and move to head of the list if so.
|
||||
@@ -85,6 +91,8 @@ 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)
|
||||
proceduretype_dict['equipment'] = [sanitize_object_for_json(object) for object in proceduretype_dict['equipment']]
|
||||
|
||||
self.update_equipment = EquipmentUsage.update_equipment
|
||||
regex = re.compile(r".*R\d$")
|
||||
proceduretype_dict['previous'] = [""] + [item.name for item in self.run.procedure if item.proceduretype == self.proceduretype and not bool(regex.match(item.name))]
|
||||
@@ -94,12 +102,13 @@ class ProcedureCreation(QDialog):
|
||||
js_in=["procedure_form", "grid_drag", "context_menu"],
|
||||
proceduretype=proceduretype_dict,
|
||||
run=self.run.details_dict(),
|
||||
procedure=self.procedure.__dict__,
|
||||
# procedure=self.procedure.__dict__,
|
||||
procedure=self.procedure,
|
||||
plate_map=self.plate_map,
|
||||
edit=self.edit
|
||||
)
|
||||
# with open("procedure_creation_rendered.html", "w") as f:
|
||||
# f.write(html)
|
||||
with open("procedure_creation_rendered.html", "w") as f:
|
||||
f.write(html)
|
||||
self.webview.setHtml(html)
|
||||
|
||||
@pyqtSlot(str, str, str, str)
|
||||
@@ -119,11 +128,13 @@ class ProcedureCreation(QDialog):
|
||||
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)
|
||||
process = next((prcss for prcss in equipment.process if prcss.name == process), None)
|
||||
if process:
|
||||
eoi.process = process.to_pydantic()
|
||||
tips = next((tps for tps in equipment.tips if tps.name == tips), None)
|
||||
if tips:
|
||||
eoi.tips = tips.to_pydantic()
|
||||
self.procedure.equipment.append(eoi)
|
||||
logger.debug(f"Updated equipment: {self.procedure.equipment}")
|
||||
|
||||
@pyqtSlot(str, str)
|
||||
|
||||
@@ -7,7 +7,7 @@ from PyQt6.QtWebEngineWidgets import QWebEngineView
|
||||
from PyQt6.QtWebChannel import QWebChannel
|
||||
from PyQt6.QtCore import Qt, pyqtSlot
|
||||
from jinja2 import TemplateNotFound
|
||||
from backend.db.models import Run, Sample, Reagent, KitType, Equipment, Process, Tips
|
||||
from backend.db.models import Run, Sample, Reagent, ProcedureType, Equipment, Process, Tips
|
||||
from tools import is_power_user, jinja_template_loading, timezone, get_application_from_parent, list_str_comparator
|
||||
from .functions import select_save_file, save_pdf
|
||||
from pathlib import Path
|
||||
@@ -161,7 +161,7 @@ class SubmissionDetails(QDialog):
|
||||
self.setWindowTitle(f"Sample Details - {sample.sample_id}")
|
||||
|
||||
@pyqtSlot(str, str)
|
||||
def reagent_details(self, reagent: str | Reagent, kit: str | KitType):
|
||||
def reagent_details(self, reagent: str | Reagent, proceduretype: str | ProcedureType):
|
||||
"""
|
||||
Changes details view to summary of Reagent
|
||||
|
||||
@@ -172,9 +172,9 @@ class SubmissionDetails(QDialog):
|
||||
logger.debug(f"Reagent details.")
|
||||
if isinstance(reagent, str):
|
||||
reagent = Reagent.query(lot=reagent)
|
||||
if isinstance(kit, str):
|
||||
self.kit = KitType.query(name=kit)
|
||||
base_dict = reagent.to_sub_dict(kittype=self.kit, full_data=True)
|
||||
if isinstance(proceduretype, str):
|
||||
self.proceduretype = ProcedureType.query(name=proceduretype)
|
||||
base_dict = reagent.to_sub_dict(proceduretype=self.proceduretype, full_data=True)
|
||||
env = jinja_template_loading()
|
||||
temp_name = "reagent_details.html"
|
||||
try:
|
||||
|
||||
@@ -15,7 +15,7 @@ from tools import Report, Result, check_not_nan, main_form_style, report_result,
|
||||
from backend.validators import PydReagent, PydClientSubmission, PydSample
|
||||
from backend.db import (
|
||||
ClientLab, SubmissionType, Reagent,
|
||||
ReagentRole, KitTypeReagentRoleAssociation, Run, ClientSubmission
|
||||
ReagentRole, ProcedureTypeReagentRoleAssociation, Run, ClientSubmission
|
||||
)
|
||||
from pprint import pformat
|
||||
from .pop_ups import QuestionAsker, AlertPop
|
||||
@@ -760,8 +760,8 @@ class SubmissionFormWidget(QWidget):
|
||||
def __init__(self, scrollWidget, reagent, extraction_kit: str) -> None:
|
||||
super().__init__(scrollWidget=scrollWidget)
|
||||
self.setEditable(True)
|
||||
looked_up_rt = KitTypeReagentRoleAssociation.query(reagentrole=reagent.equipmentrole,
|
||||
kittype=extraction_kit)
|
||||
looked_up_rt = ProcedureTypeReagentRoleAssociation.query(reagentrole=reagent.reagentrole,
|
||||
proceduretype=extraction_kit)
|
||||
relevant_reagents = [str(item.lot) for item in looked_up_rt.get_all_relevant_reagents()]
|
||||
# NOTE: if reagent in sheet is not found insert it into the front of relevant reagents so it shows
|
||||
if str(reagent.lot) not in relevant_reagents:
|
||||
|
||||
@@ -4,7 +4,7 @@ Pane to hold information e.g. cost summary.
|
||||
from .info_tab import InfoPane
|
||||
from PyQt6.QtWidgets import QWidget, QLabel, QPushButton
|
||||
from backend.db import ClientLab
|
||||
from backend.excel import ReportMaker
|
||||
from backend.excel.reports import ReportMaker
|
||||
from .misc import CheckableComboBox
|
||||
import logging
|
||||
|
||||
|
||||
Reference in New Issue
Block a user