Updated kit creation.

This commit is contained in:
Landon Wark
2023-05-04 14:31:02 -05:00
parent 06447f0938
commit 8a95e3a4c5
5 changed files with 37 additions and 16 deletions

View File

@@ -1,3 +1,7 @@
## 202305.02
- Updated kit creation methods to keep pace with new cost calculations.
## 202305.01 ## 202305.01
- Improved kit cost calculation. - Improved kit cost calculation.
@@ -5,7 +9,7 @@
## 202304.04 ## 202304.04
- Added in discounts for kits based on kit used and submitting client. - Added in discounts for kits based on kit used and submitting client.
- Kraken controls graph now only pulls top 20 results to prevent crashing. - Kraken controls graph now only pulls top 50 results to prevent crashing.
- Improved cost calculations per column in a 96 well plate. - Improved cost calculations per column in a 96 well plate.
## 202304.01 ## 202304.01

View File

@@ -4,7 +4,7 @@ from pathlib import Path
# Version of the realpython-reader package # Version of the realpython-reader package
__project__ = "submissions" __project__ = "submissions"
__version__ = "202305.1b" __version__ = "202305.2b"
__author__ = {"name":"Landon Wark", "email":"Landon.Wark@phac-aspc.gc.ca"} __author__ = {"name":"Landon Wark", "email":"Landon.Wark@phac-aspc.gc.ca"}
__copyright__ = "2022-2023, Government of Canada" __copyright__ = "2022-2023, Government of Canada"

View File

@@ -477,7 +477,12 @@ def create_kit_from_yaml(ctx:dict, exp:dict) -> dict:
continue continue
# A submission type may use multiple kits. # A submission type may use multiple kits.
for kt in exp[type]['kits']: for kt in exp[type]['kits']:
kit = models.KitType(name=kt, used_for=[type.replace("_", " ").title()], constant_cost=exp[type]["kits"][kt]["constant_cost"], mutable_cost_column=exp[type]["kits"][kt]["mutable_cost_column"]) kit = models.KitType(name=kt,
used_for=[type.replace("_", " ").title()],
constant_cost=exp[type]["kits"][kt]["constant_cost"],
mutable_cost_column=exp[type]["kits"][kt]["mutable_cost_column"],
mutable_cost_sample=exp[type]["kits"][kt]["mutable_cost_sample"]
)
# A kit contains multiple reagent types. # A kit contains multiple reagent types.
for r in exp[type]['kits'][kt]['reagenttypes']: for r in exp[type]['kits'][kt]['reagenttypes']:
# check if reagent type already exists. # check if reagent type already exists.
@@ -488,7 +493,11 @@ def create_kit_from_yaml(ctx:dict, exp:dict) -> dict:
rt = look_up rt = look_up
rt.kits.append(kit) rt.kits.append(kit)
# add this because I think it's necessary to get proper back population # add this because I think it's necessary to get proper back population
try:
kit.reagent_types_id.append(rt.id) kit.reagent_types_id.append(rt.id)
except AttributeError as e:
logger.error(f"Error appending reagent id to kit.reagent_types_id: {e}, creating new.")
# kit.reagent_types_id = [rt.id]
ctx['database_session'].add(rt) ctx['database_session'].add(rt)
logger.debug(f"Kit construction reagent type: {rt.__dict__}") logger.debug(f"Kit construction reagent type: {rt.__dict__}")
logger.debug(f"Kit construction kit: {kit.__dict__}") logger.debug(f"Kit construction kit: {kit.__dict__}")

View File

@@ -5,7 +5,7 @@ from PyQt6.QtWidgets import (
QTabWidget, QWidget, QVBoxLayout, QTabWidget, QWidget, QVBoxLayout,
QPushButton, QFileDialog, QPushButton, QFileDialog,
QLineEdit, QMessageBox, QComboBox, QDateEdit, QHBoxLayout, QLineEdit, QMessageBox, QComboBox, QDateEdit, QHBoxLayout,
QSpinBox, QScrollArea QSpinBox, QDoubleSpinBox, QScrollArea
) )
logger = logging.getLogger(f"submissions.{__name__}") logger = logging.getLogger(f"submissions.{__name__}")
@@ -49,7 +49,7 @@ def extract_form_info(object) -> dict:
dicto[item.objectName()] = item.currentText() dicto[item.objectName()] = item.currentText()
case QDateEdit(): case QDateEdit():
dicto[item.objectName()] = item.date().toPyDate() dicto[item.objectName()] = item.date().toPyDate()
case QSpinBox(): case QSpinBox() | QDoubleSpinBox():
dicto[item.objectName()] = item.value() dicto[item.objectName()] = item.value()
case ReagentTypeForm(): case ReagentTypeForm():
reagent = extract_form_info(item) reagent = extract_form_info(item)

View File

@@ -7,7 +7,7 @@ from PyQt6.QtWidgets import (
QLabel, QVBoxLayout, QLabel, QVBoxLayout,
QLineEdit, QComboBox, QDialog, QLineEdit, QComboBox, QDialog,
QDialogButtonBox, QDateEdit, QSizePolicy, QWidget, QDialogButtonBox, QDateEdit, QSizePolicy, QWidget,
QGridLayout, QPushButton, QSpinBox, QGridLayout, QPushButton, QSpinBox, QDoubleSpinBox,
QHBoxLayout, QHBoxLayout,
) )
from PyQt6.QtCore import Qt, QDate, QSize from PyQt6.QtCore import Qt, QDate, QSize
@@ -145,18 +145,25 @@ class KitAdder(QWidget):
# set cost per run # set cost per run
self.grid.addWidget(QLabel("Constant cost per full plate (plates, work hours, etc.):"),4,0) self.grid.addWidget(QLabel("Constant cost per full plate (plates, work hours, etc.):"),4,0)
# widget to get constant cost # widget to get constant cost
const_cost = QSpinBox() const_cost = QDoubleSpinBox() #QSpinBox()
const_cost.setObjectName("const_cost") const_cost.setObjectName("const_cost")
const_cost.setMinimum(0) const_cost.setMinimum(0)
const_cost.setMaximum(9999) const_cost.setMaximum(9999)
self.grid.addWidget(const_cost,4,1) self.grid.addWidget(const_cost,4,1)
self.grid.addWidget(QLabel("Mutable cost per full plate (tips, reagents, etc.):"),5,0) self.grid.addWidget(QLabel("Cost per column (multidrop reagents, etc.):"),5,0)
# widget to get mutable costs # widget to get mutable costs per column
mut_cost = QSpinBox() mut_cost_col = QDoubleSpinBox() #QSpinBox()
mut_cost.setObjectName("mut_cost") mut_cost_col.setObjectName("mut_cost_col")
mut_cost.setMinimum(0) mut_cost_col.setMinimum(0)
mut_cost.setMaximum(9999) mut_cost_col.setMaximum(9999)
self.grid.addWidget(mut_cost,5,1) self.grid.addWidget(mut_cost_col,5,1)
self.grid.addWidget(QLabel("Cost per sample (tips, reagents, etc.):"),6,0)
# widget to get mutable costs per column
mut_cost_samp = QDoubleSpinBox() #QSpinBox()
mut_cost_samp.setObjectName("mut_cost_samp")
mut_cost_samp.setMinimum(0)
mut_cost_samp.setMaximum(9999)
self.grid.addWidget(mut_cost_samp,6,1)
# button to add additional reagent types # button to add additional reagent types
self.add_RT_btn = QPushButton("Add Reagent Type") self.add_RT_btn = QPushButton("Add Reagent Type")
self.grid.addWidget(self.add_RT_btn) self.grid.addWidget(self.add_RT_btn)
@@ -191,7 +198,8 @@ class KitAdder(QWidget):
yml_type[used]['kits'] = {} yml_type[used]['kits'] = {}
yml_type[used]['kits'][info['kit_name']] = {} yml_type[used]['kits'][info['kit_name']] = {}
yml_type[used]['kits'][info['kit_name']]['constant_cost'] = info["const_cost"] yml_type[used]['kits'][info['kit_name']]['constant_cost'] = info["const_cost"]
yml_type[used]['kits'][info['kit_name']]['mutable_cost'] = info["mut_cost"] yml_type[used]['kits'][info['kit_name']]['mutable_cost_column'] = info["mut_cost_col"]
yml_type[used]['kits'][info['kit_name']]['mutable_cost_sample'] = info["mut_cost_samp"]
yml_type[used]['kits'][info['kit_name']]['reagenttypes'] = reagents yml_type[used]['kits'][info['kit_name']]['reagenttypes'] = reagents
logger.debug(yml_type) logger.debug(yml_type)
# send to kit constructor # send to kit constructor