diff --git a/tools/.DS_Store b/tools/.DS_Store
index 56d7ac2..55ab033 100644
Binary files a/tools/.DS_Store and b/tools/.DS_Store differ
diff --git a/tools/qmratool/.DS_Store b/tools/qmratool/.DS_Store
index 0cb7680..33b07d4 100644
Binary files a/tools/qmratool/.DS_Store and b/tools/qmratool/.DS_Store differ
diff --git a/tools/qmratool/forms.py b/tools/qmratool/forms.py
index 33fe717..344632a 100644
--- a/tools/qmratool/forms.py
+++ b/tools/qmratool/forms.py
@@ -14,7 +14,7 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field, ButtonHolder, Submit, Div
from formtools.wizard.views import SessionWizardView
-
+from django.forms import modelformset_factory
class RAForm(forms.ModelForm):
def __init__(self, user, *args, **kwargs):
@@ -64,10 +64,26 @@ class Meta:
class InflowForm(forms.ModelForm):
+ #min = forms.DecimalField(label="Minimum Logremoval")
+ #max = forms.DecimalField(label="Maximum Logremoval")
class Meta:
model = Inflow
- fields = ["pathogen", "min", "max", "reference"]
-
+ fields = ['pathogen', 'min', 'max']
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.helper = FormHelper(self)
+ self.fields['pathogen'].disabled = True
+ self.fields['min'].label = "Minimum concentration"
+ self.fields['max'].label = "Maximum concentration"
+
+ self.helper.layout = Layout(
+ 'pathogen',
+ 'min',
+ 'max',
+ # Add more fields as needed
+ )
+InflowFormSet = modelformset_factory(Inflow, form=InflowForm, extra=3)
class ExposureForm(forms.ModelForm):
class Meta:
@@ -109,12 +125,18 @@ class Meta:
class LogRemovalForm(forms.ModelForm):
class Meta:
model = LogRemoval
- fields = ["min", "max", "pathogen_group", "reference"]
+ fields = ["pathogen_group", "reference","min", "max"]
def __init__(self, *args, **kwargs):
super(LogRemovalForm, self).__init__(*args, **kwargs)
self.fields["reference"].queryset = Reference.objects.filter(id=51)
- self.fields["pathogen_group"].widget = forms.HiddenInput()
+ self.fields['reference'].disabled = True
+ self.fields['pathogen_group'].disabled = True
+ self.fields['min'].label = "Minimum Logremoval"
+ self.fields['max'].label = "Maximum Logremoval"
+ #self.fields["pathogen_group"].widget = forms.HiddenInput()
+
+LogRemovalFormSet = modelformset_factory(LogRemoval, form=LogRemovalForm, extra=3)
class ComparisonForm(forms.ModelForm):
diff --git a/tools/qmratool/migrations/0003_sourcewater_user_alter_inflow_water_source.py b/tools/qmratool/migrations/0003_sourcewater_user_alter_inflow_water_source.py
new file mode 100644
index 0000000..0254901
--- /dev/null
+++ b/tools/qmratool/migrations/0003_sourcewater_user_alter_inflow_water_source.py
@@ -0,0 +1,33 @@
+# Generated by Django 4.1.2 on 2024-04-23 14:31
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("qmratool", "0002_riskassessment_created_at"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="sourcewater",
+ name="user",
+ field=models.ForeignKey(
+ default=1,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="sourcewaters",
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ migrations.AlterField(
+ model_name="inflow",
+ name="water_source",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="inflow",
+ to="qmratool.sourcewater",
+ ),
+ ),
+ ]
diff --git a/tools/qmratool/models.py b/tools/qmratool/models.py
index d5af806..bf732e6 100644
--- a/tools/qmratool/models.py
+++ b/tools/qmratool/models.py
@@ -9,8 +9,11 @@ class User(AbstractUser):
class SourceWater(models.Model):
+ user = models.ForeignKey(
+ User, related_name="sourcewaters", default=1, on_delete=models.CASCADE
+ )
water_source_name = models.CharField(max_length=64)
- water_source_description = models.CharField(max_length=2000)
+ water_source_description = models.TextField(max_length=2000)
def __str__(self):
return self.water_source_name
@@ -40,16 +43,38 @@ class Treatment(models.Model):
)
description = models.TextField(max_length=1000)
- # category = models.CharField(max_length=64, default = "wastewater")
def __str__(self):
return self.name
+ def get_lrv(self, pathogen_group):
+ try:
+ return self.logremoval.get(pathogen_group__pathogen_group=pathogen_group)
+ except self.logremoval.model.DoesNotExist:
+ return None
+
def serialize(self):
+ def get_min_max(pathogen_group):
+ lrv = self.get_lrv(pathogen_group)
+ if lrv is not None:
+ return float(lrv.min), float(lrv.max)
+ else:
+ return 'n.a.', 'n. a.'
+
+ virus_min, virus_max = get_min_max("Viruses")
+ bacteria_min, bacteria_max = get_min_max("Bacteria")
+ protozoa_min, protozoa_max = get_min_max("Protozoa")
+
return {
"id": self.id,
"name": self.name,
"description": self.description,
"group": self.group,
+ "virus_min": virus_min,
+ "virus_max": virus_max,
+ "bacteria_min": bacteria_min,
+ "bacteria_max": bacteria_max,
+ "protozoa_min": protozoa_min,
+ "protozoa_max": protozoa_max,
}
@@ -103,9 +128,9 @@ class LogRemoval(models.Model):
class Inflow(models.Model):
pathogen = models.ForeignKey(Pathogen, on_delete=models.CASCADE)
reference = models.ForeignKey(Reference, on_delete=models.CASCADE)
- water_source = models.ForeignKey(SourceWater, on_delete=models.CASCADE)
- min = models.DecimalField(decimal_places=8, default=-100, max_digits=20)
- max = models.DecimalField(decimal_places=8, default=-100, max_digits=20)
+ water_source = models.ForeignKey(SourceWater, on_delete=models.CASCADE, related_name="inflow")
+ min = models.DecimalField(decimal_places=8, default=100, max_digits=20)
+ max = models.DecimalField(decimal_places=8, default=100, max_digits=20)
mean = models.DecimalField(decimal_places=8, max_digits=20, default=-100, null=True)
alpha = models.DecimalField(
decimal_places=8, max_digits=20, default=-100, null=True
@@ -115,6 +140,9 @@ class Inflow(models.Model):
pathogen_in_ref = models.CharField(max_length=200, default="unknown")
notes = models.CharField(max_length=200, default="unknown")
+ #def get_absolute_url(self):
+ # return reverse("inflow-detail", kwargs={"pk": self.pk})
+
class Health(models.Model):
pathogen = models.ForeignKey(Pathogen, on_delete=models.CASCADE)
diff --git a/tools/qmratool/static/qmratool/option.js b/tools/qmratool/static/qmratool/option.js
index f95133c..abdc173 100644
--- a/tools/qmratool/static/qmratool/option.js
+++ b/tools/qmratool/static/qmratool/option.js
@@ -76,7 +76,14 @@ document.addEventListener('DOMContentLoaded', function() {
// Customize content based on the field
if (fieldName === 'exposure') {
return `${titleCaseDataName}
${data.description}
Events per year [N]: ${data.events_per_year}
Volume per event [L]: ${data.volume_per_event}`;
- } else {
+ } else if (fieldName === 'treatment') {
+ return `${titleCaseDataName}
${data.description}
+ Virus removal: ${data.virus_min}-${data.virus_max}
+ Bacteria removal:: ${data.bacteria_min}-${data.bacteria_max}
+ Protozoa removal:: ${data.protozoa_min}-${data.protozoa_max}`;
+
+ }
+ else {
return `${titleCaseDataName}
${data.description}`;
}
}
diff --git a/tools/qmratool/templates/qmratool/inflow_form.html b/tools/qmratool/templates/qmratool/inflow_form.html
new file mode 100644
index 0000000..751ddde
--- /dev/null
+++ b/tools/qmratool/templates/qmratool/inflow_form.html
@@ -0,0 +1,24 @@
+
+{% extends "qmratool/layout.html" %}!-- Extend your base template -->
+{% load crispy_forms_tags %}
+{% block body %}
+
+