Fixed dangling old starter data. Added conditional yeast debug logging.

Thu, 12 Jan 2023 16:56:34 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 12 Jan 2023 16:56:34 +0100
changeset 455
deea5047be32
parent 454
2dfead81c72f
child 456
6b10c34f74f5

Fixed dangling old starter data. Added conditional yeast debug logging.

src/EditProductTab6.cpp file | annotate | diff | comparison | revisions
src/global.h file | annotate | diff | comparison | revisions
translations/bmsapp_en.ts file | annotate | diff | comparison | revisions
translations/bmsapp_nl.ts file | annotate | diff | comparison | revisions
--- a/src/EditProductTab6.cpp	Thu Jan 12 14:34:14 2023 +0100
+++ b/src/EditProductTab6.cpp	Thu Jan 12 16:56:34 2023 +0100
@@ -193,6 +193,7 @@
     bool maybe_starter = false;
 
     qDebug() << "calcYeast()";
+    qDebug() << "  " << product->prop_volume[0] << product->prop_volume[1] << product->prop_volume[2] << product->prop_volume[3];
     ui->yeastProcedure->setCurrentIndex(0);
 
     if (sg <= 1.0001 && product->fg > 1.000)
@@ -239,7 +240,9 @@
 		ui->pitch_grShow->setValue(pitch_gr_hl);
 		ui->pitch_grShow->setStyleSheet((pitch_gr_hl < yeast_gr_hl) ? "background-color: red":"");
 
+#ifdef DEBUG_YEAST
      		qDebug() << "  need" << yeast_grams << "grams, gr/hl:" << yeast_gr_hl << "pitch:" << pitch_gr_hl;
+#endif
 		return;
 	    } else {
 		/*
@@ -277,20 +280,35 @@
 		    maybe_starter = true;
 		}
 
+#ifdef DEBUG_YEAST
 		qDebug() << "  pitchrate:" << product->yeast_pitchrate << "needed:" << needed << "initcells:" << initcells << "starter" << maybe_starter;
+#endif
 	    }
 	    break;
 	}
     }
 
     if (maybe_starter != product->starter_enable) {
+	if (product->starter_enable && !maybe_starter) {
+#ifdef DEBUG_YEAST
+	    qDebug() << "  Clear obsolete starter";
+#endif
+	    for (int i = 0; i < 4; i++) {
+		product->prop_volume[i] = 0;
+		product->prop_type[i] = 0;
+	    }
+	}
 	product->starter_enable = maybe_starter;
+#ifdef DEBUG_YEAST
 	qDebug() << "  Set starter enable" << maybe_starter;
+#endif
 	is_changed();
     }
 
     if (product->starter_enable) {
+#ifdef DEBUG_YEAST
 	qDebug() << "  Starter calculate..";
+#endif
 
 	const QStringList labels({tr("Method"), tr("Volume"), tr("Inj. factor"), tr("New cells"), tr("Total cells"), tr("Grow factor"), "" });
 	ui->starterTable->show();
@@ -353,8 +371,10 @@
     res.ncells = ncells;
     res.totcells = totcells;
     res.growf = round((ncells / start) * 100.0) / 100.0;
+#ifdef DEBUG_YEAST
     qDebug() << "  calcStep(" << svol << "," << stype << "," << start << ") irate" << irate
 	     << "ncells" << res.ncells << "totcells" << res.totcells << "growf" << res.growf;
+#endif
     return res;
 }
 
@@ -387,7 +407,9 @@
 	/*
 	 * Auto calculate the starter.
 	 */
+#ifdef DEBUG_YEAST
 	qDebug() << "  calcSteps() auto";
+#endif
 
 	if (start > needed)
 	    return;
@@ -455,6 +477,9 @@
 
 	    product->prop_type[step -1] = product->starter_type;
 	    product->prop_volume[step -1] = result.svol / 1000.0;
+#ifdef DEBUG_YEAST
+	    qDebug() << "    step" << step << "type" << product->prop_type[step -1] << "vol" << product->prop_volume[step -1];
+#endif
 
 	    tcells = result.totcells;
 	    if (result.totcells > needed)	// Hit the target
@@ -465,7 +490,9 @@
 	/*
 	 * Recalculate the starter.
 	 */
+#ifdef DEBUG_YEAST
 	qDebug() << "  calcSteps() recalculate";
+#endif
 
 	for (step = 0; step < 4; step++) {
 	    if (product->prop_volume[step] > 0) {
@@ -524,6 +551,9 @@
 		    product->prop_volume[step + 1] = product->prop_volume[step];
 		    product->prop_type[step + 1] = product->prop_type[step];
 	    	}
+#ifdef DEBUG_YEAST
+		qDebug() << "    step" << step << "type" << product->prop_type[step] << "vol" << product->prop_volume[step];
+#endif
 	    }
 	}
     }
@@ -556,7 +586,9 @@
 	    }
 	}
     }
+#ifdef DEBUG_YEAST
     qDebug() << "calcViability vpm:" << vpm << "max:" << max;
+#endif
 
     double base = max;
 
@@ -577,14 +609,15 @@
     base = round(base);
     product->starter_viability = base;
     ui->conditionShow->setValue(product->starter_viability);
+#ifdef DEBUG_YEAST
     qDebug() << "age" << timeDiff << "degrade" << degrade << "base" << base ;
+#endif
 }
 
 
 void EditProduct::yeast_prod_date_changed(QDate val)
 {
     product->yeast_prod_date = ui->productionEdit->nullDate();
-    qDebug() << "yeast_prod_date_changed" << val << product->yeast_prod_date;
     calcViability();
     calcYeast();
     is_changed();
@@ -607,7 +640,9 @@
 
 void EditProduct::yeast_method_changed(int val)
 {
+#ifdef DEBUG_YEAST
     qDebug() << "yeast_method_changed" << val;
+#endif
     product->starter_type = val;
     calcYeast();
     is_changed();
@@ -616,7 +651,9 @@
 
 void EditProduct::yeast_starter_sg_changed(double val)
 {
+#ifdef DEBUG_YEAST
     qDebug() << "yeast_starter_sg_changed" << val;
+#endif
     product->starter_sg = val;
     calcYeast();
     is_changed();
@@ -632,7 +669,9 @@
 {
     QToolButton *pb = qobject_cast<QToolButton *>(QObject::sender());
     int row = pb->objectName().toInt();
+#ifdef DEBUG_YEAST
     qDebug() << "yeast_starter_edit_clicked" << row;
+#endif
 
     QDialog* dialog = new QDialog(this);
     dialog->resize(338, 140);
@@ -678,12 +717,9 @@
 
     dialog->setModal(true);
     dialog->exec();
-    if (dialog->result() == QDialog::Rejected) {
-        qDebug() << "reject";
-    } else {
+    if (dialog->result() != QDialog::Rejected) {
 	product->prop_type[row] = typeEdit->currentIndex();
 	product->prop_volume[row] = volEdit->value();
-	qDebug() << "accept";
         calcYeast();
 	is_changed();
     }
@@ -696,7 +732,9 @@
 {
     Yeasts newy;
 
+#ifdef DEBUG_YEAST
     qDebug() << "Add yeast row";
+#endif
 
     for (int i = 0; i < product->yeasts.size(); i++) {
         if (product->yeasts.at(i).amount == 0)
@@ -742,7 +780,9 @@
 
     QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
     int row = pb->objectName().toInt();
+#ifdef DEBUG_YEAST
     qDebug() << "Delete yeast row" << row << product->yeasts.size();
+#endif
 
     int rc = QMessageBox::warning(this, tr("Delete yeast"), tr("Delete %1").arg(product->yeasts.at(row).name),
                     QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
@@ -750,6 +790,18 @@
         return;
 
     product->yeasts.removeAt(row);
+    bool primary = false;
+    for (int i = 0; i < product->yeasts.size(); i++) {
+	if (product->yeasts.at(i).use == YEAST_USE_PRIMARY)
+	    primary = true;
+    }
+    if (! primary) {
+#ifdef DEBUG_YEAST
+	qDebug() << "  Clear starter (if any)";
+#endif
+	for (int i = 0; i < 4; i++)
+	    product->prop_volume[i] = 0;
+    }
     is_changed();
     emit refreshAll();
 }
@@ -759,7 +811,9 @@
 {
     QTableWidgetItem *item;
 
+#ifdef DEBUG_YEAST
     qDebug() << "yeast_amount_changed()" << product->yeasts_row << val;
+#endif
 
     if (product->yeasts.at(product->yeasts_row).form == YEAST_FORMS_LIQUID) {
 	product->yeasts[product->yeasts_row].amount = val;
@@ -791,7 +845,9 @@
     if (val < 1)
         return;
 
+#ifdef DEBUG_YEAST
     qDebug() << "yeast_select_changed()" << product->yeasts_row << val << instock;
+#endif
 
     /*
      * Search the yeast pointed by the index and instock flag.
@@ -808,35 +864,37 @@
     for (int i = 0; i < (val - 1); i++) {
         query.next();
     }
-    qDebug() << "found" << query.value(0).toString() << query.value(2).toString();
+#ifdef DEBUG_YEAST
+    qDebug() << "found" << query.value("name").toString() << query.value("product_id").toString();
+#endif
 
     /*
      * Replace the yeast record contents
      */
-    product->yeasts[product->yeasts_row].name = query.value(0).toString();
-    product->yeasts[product->yeasts_row].laboratory = query.value(1).toString();
-    product->yeasts[product->yeasts_row].product_id = query.value(2).toString();
-    product->yeasts[product->yeasts_row].type = query.value(3).toInt();
-    product->yeasts[product->yeasts_row].form = query.value(4).toInt();
-    product->yeasts[product->yeasts_row].min_temperature = query.value(5).toDouble();
-    product->yeasts[product->yeasts_row].max_temperature = query.value(6).toDouble();
-    product->yeasts[product->yeasts_row].flocculation = query.value(7).toInt();
-    product->yeasts[product->yeasts_row].attenuation = query.value(8).toDouble();
-    product->yeasts[product->yeasts_row].cells = query.value(9).toDouble();
-    product->yeasts[product->yeasts_row].tolerance = query.value(10).toDouble();
-    product->yeasts[product->yeasts_row].sta1 = query.value(11).toInt() ? true:false;
-    product->yeasts[product->yeasts_row].bacteria = query.value(12).toInt() ? true:false;
-    product->yeasts[product->yeasts_row].harvest_top = query.value(13).toInt() ? true:false;
-    product->yeasts[product->yeasts_row].harvest_time = query.value(14).toInt();
-    product->yeasts[product->yeasts_row].pitch_temperature = query.value(15).toDouble();
-    product->yeasts[product->yeasts_row].pofpos = query.value(16).toInt() ? true:false;
-    product->yeasts[product->yeasts_row].zymocide = query.value(17).toInt();
-    product->yeasts[product->yeasts_row].gr_hl_lo = query.value(18).toInt();
-    product->yeasts[product->yeasts_row].sg_lo = query.value(19).toDouble();
-    product->yeasts[product->yeasts_row].gr_hl_hi = query.value(20).toInt();
-    product->yeasts[product->yeasts_row].sg_hi = query.value(21).toDouble();
-    product->yeasts[product->yeasts_row].cost = query.value(22).toDouble();
-    product->yeasts[product->yeasts_row].inventory = query.value(23).toDouble();
+    product->yeasts[product->yeasts_row].name = query.value("name").toString();
+    product->yeasts[product->yeasts_row].laboratory = query.value("laboratory").toString();
+    product->yeasts[product->yeasts_row].product_id = query.value("product_id").toString();
+    product->yeasts[product->yeasts_row].type = query.value("type").toInt();
+    product->yeasts[product->yeasts_row].form = query.value("form").toInt();
+    product->yeasts[product->yeasts_row].min_temperature = query.value("min_temperature").toDouble();
+    product->yeasts[product->yeasts_row].max_temperature = query.value("max_temperature").toDouble();
+    product->yeasts[product->yeasts_row].flocculation = query.value("flocculation").toInt();
+    product->yeasts[product->yeasts_row].attenuation = query.value("attenuation").toDouble();
+    product->yeasts[product->yeasts_row].cells = query.value("cells").toDouble();
+    product->yeasts[product->yeasts_row].tolerance = query.value("tolerance").toDouble();
+    product->yeasts[product->yeasts_row].sta1 = query.value("sta1").toInt() ? true:false;
+    product->yeasts[product->yeasts_row].bacteria = query.value("bacteria").toInt() ? true:false;
+    product->yeasts[product->yeasts_row].harvest_top = query.value("harvest_top").toInt() ? true:false;
+    product->yeasts[product->yeasts_row].harvest_time = query.value("harvest_time").toInt();
+    product->yeasts[product->yeasts_row].pitch_temperature = query.value("pitch_temperature").toDouble();
+    product->yeasts[product->yeasts_row].pofpos = query.value("pofpos").toInt() ? true:false;
+    product->yeasts[product->yeasts_row].zymocide = query.value("zymocide").toInt();
+    product->yeasts[product->yeasts_row].gr_hl_lo = query.value("gr_hl_lo").toInt();
+    product->yeasts[product->yeasts_row].sg_lo = query.value("sg_lo").toDouble();
+    product->yeasts[product->yeasts_row].gr_hl_hi = query.value("gr_hl_hi").toInt();
+    product->yeasts[product->yeasts_row].sg_hi = query.value("sg_hi").toDouble();
+    product->yeasts[product->yeasts_row].cost = query.value("cost").toDouble();
+    product->yeasts[product->yeasts_row].inventory = query.value("inventory").toDouble();
 
     /*
      * Update the visible fields
@@ -901,7 +959,23 @@
     item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
     ui->yeastsTable->setItem(product->yeasts_row, 9, item);
 
-    //calcYeast();
+    /*
+     * If there is no need for a starter, wipe it.
+     */
+    bool maybe_starter = false;
+    for (int i = 0; i < product->yeasts.size(); i++) {
+        if (product->yeasts.at(i).use == YEAST_USE_PRIMARY &&
+	    ! ((product->yeasts.at(i).form == YEAST_FORMS_DRY) || (product->yeasts.at(i).form == YEAST_FORMS_DRIED)))
+            maybe_starter = true;
+    }
+    if (! maybe_starter) {
+#ifdef DEBUG_YEAST
+        qDebug() << "  Clear starter (if any)";
+#endif
+        for (int i = 0; i < 4; i++)
+            product->prop_volume[i] = 0;
+    }
+
     is_changed();
     emit refreshAll();
 }
@@ -911,7 +985,9 @@
 {
     QSqlQuery query;
 
+#ifdef DEBUG_YEAST
     qDebug() << "yeast_instock_changed()" << product->yeasts_row << val;
+#endif
 
     this->yselectEdit->setCurrentIndex(-1);
     this->yselectEdit->clear();
@@ -933,7 +1009,9 @@
 
 void EditProduct::yeast_useat_changed(int val)
 {
+#ifdef DEBUG_YEAST
     qDebug() << "yeast_useat_changed()" << product->yeasts_row << val;
+#endif
 
     product->yeasts[product->yeasts_row].use = val;
     QTableWidgetItem *item = new QTableWidgetItem(QCoreApplication::translate("YeastUse", g_yeast_use[val]));
@@ -953,7 +1031,9 @@
 
     QPushButton *pb = qobject_cast<QPushButton *>(QObject::sender());
     product->yeasts_row = pb->objectName().toInt();
+#ifdef DEBUG_YEAST
     qDebug() << "Edit yeast row" << product->yeasts_row;
+#endif
     Yeasts backup = product->yeasts.at(product->yeasts_row);
 
     QDialog* dialog = new QDialog(this);
@@ -1070,7 +1150,9 @@
     dialog->setModal(true);
     dialog->exec();
     if (dialog->result() == QDialog::Rejected) {
+#ifdef DEBUG_YEAST
         qDebug() << "reject and rollback";
+#endif
         product->yeasts[product->yeasts_row] = backup;
     } else {
 
--- a/src/global.h	Thu Jan 12 14:34:14 2023 +0100
+++ b/src/global.h	Thu Jan 12 16:56:34 2023 +0100
@@ -12,8 +12,9 @@
  * Debug log switches for building
  */
 // #define DEBUG_IBU		1
-#define	DEBUG_FERMENTABLES	1
-#define	DEBUG_VOLUMES		1
+// #define	DEBUG_FERMENTABLES	1
+#define	DEBUG_YEAST		1
+#define	DEBUG_WATER		1
 
 #define Ka1		0.0000004445
 #define Ka2		0.0000000000468
--- a/translations/bmsapp_en.ts	Thu Jan 12 14:34:14 2023 +0100
+++ b/translations/bmsapp_en.ts	Thu Jan 12 16:56:34 2023 +0100
@@ -3347,7 +3347,7 @@
     </message>
     <message>
         <location filename="../ui/EditProduct.ui" line="7219"/>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <location filename="../src/EditProductTab7.cpp" line="35"/>
         <source>Volume</source>
         <translation type="unfinished"></translation>
@@ -4225,7 +4225,7 @@
         <location filename="../src/EditProductTab3.cpp" line="730"/>
         <location filename="../src/EditProductTab4.cpp" line="361"/>
         <location filename="../src/EditProductTab5.cpp" line="399"/>
-        <location filename="../src/EditProductTab6.cpp" line="747"/>
+        <location filename="../src/EditProductTab6.cpp" line="782"/>
         <location filename="../src/EditProductTab7.cpp" line="306"/>
         <location filename="../src/EditProduct.cpp" line="866"/>
         <source>Delete %1</source>
@@ -4260,7 +4260,7 @@
     <message>
         <location filename="../src/EditProductTab3.cpp" line="1073"/>
         <location filename="../src/EditProductTab4.cpp" line="633"/>
-        <location filename="../src/EditProductTab6.cpp" line="1006"/>
+        <location filename="../src/EditProductTab6.cpp" line="1052"/>
         <source>Use at:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4274,7 +4274,7 @@
         <location filename="../src/EditProductTab3.cpp" line="1083"/>
         <location filename="../src/EditProductTab4.cpp" line="643"/>
         <location filename="../src/EditProductTab5.cpp" line="674"/>
-        <location filename="../src/EditProductTab6.cpp" line="991"/>
+        <location filename="../src/EditProductTab6.cpp" line="1037"/>
         <source>In stock:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4416,8 +4416,8 @@
         <location filename="../src/EditProductTab4.cpp" line="619"/>
         <location filename="../src/EditProductTab5.cpp" line="525"/>
         <location filename="../src/EditProductTab5.cpp" line="650"/>
-        <location filename="../src/EditProductTab6.cpp" line="861"/>
-        <location filename="../src/EditProductTab6.cpp" line="999"/>
+        <location filename="../src/EditProductTab6.cpp" line="902"/>
+        <location filename="../src/EditProductTab6.cpp" line="1045"/>
         <source>Amount in gr:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4456,8 +4456,8 @@
     <message>
         <location filename="../src/EditProductTab5.cpp" line="528"/>
         <location filename="../src/EditProductTab5.cpp" line="652"/>
-        <location filename="../src/EditProductTab6.cpp" line="868"/>
-        <location filename="../src/EditProductTab6.cpp" line="1001"/>
+        <location filename="../src/EditProductTab6.cpp" line="909"/>
+        <location filename="../src/EditProductTab6.cpp" line="1047"/>
         <source>Amount in ml:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4468,13 +4468,13 @@
     </message>
     <message>
         <location filename="../src/EditProductTab5.cpp" line="720"/>
-        <location filename="../src/EditProductTab6.cpp" line="1055"/>
+        <location filename="../src/EditProductTab6.cpp" line="1101"/>
         <source>Primary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/EditProductTab5.cpp" line="721"/>
-        <location filename="../src/EditProductTab6.cpp" line="1056"/>
+        <location filename="../src/EditProductTab6.cpp" line="1102"/>
         <source>Secondary</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4530,89 +4530,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Inj. factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>New cells</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Total cells</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Grow factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="649"/>
+        <location filename="../src/EditProductTab6.cpp" line="683"/>
         <source>Start step type:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="654"/>
+        <location filename="../src/EditProductTab6.cpp" line="688"/>
         <source>Starter step volume:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="661"/>
+        <location filename="../src/EditProductTab6.cpp" line="695"/>
         <source>Stirred</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="662"/>
+        <location filename="../src/EditProductTab6.cpp" line="696"/>
         <source>Shaken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="663"/>
+        <location filename="../src/EditProductTab6.cpp" line="697"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="747"/>
+        <location filename="../src/EditProductTab6.cpp" line="782"/>
         <source>Delete yeast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="854"/>
-        <location filename="../src/EditProductTab6.cpp" line="997"/>
+        <location filename="../src/EditProductTab6.cpp" line="895"/>
+        <location filename="../src/EditProductTab6.cpp" line="1043"/>
         <source>Total packs:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="971"/>
+        <location filename="../src/EditProductTab6.cpp" line="1017"/>
         <source>Yeast name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="976"/>
-        <location filename="../src/EditProductTab6.cpp" line="981"/>
+        <location filename="../src/EditProductTab6.cpp" line="1022"/>
+        <location filename="../src/EditProductTab6.cpp" line="1027"/>
         <source>Laboratory:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="986"/>
+        <location filename="../src/EditProductTab6.cpp" line="1032"/>
         <source>Select yeast:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="1057"/>
+        <location filename="../src/EditProductTab6.cpp" line="1103"/>
         <source>Tertiary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="1058"/>
+        <location filename="../src/EditProductTab6.cpp" line="1104"/>
         <source>Bottle</source>
         <translation type="unfinished"></translation>
     </message>
--- a/translations/bmsapp_nl.ts	Thu Jan 12 14:34:14 2023 +0100
+++ b/translations/bmsapp_nl.ts	Thu Jan 12 16:56:34 2023 +0100
@@ -3156,7 +3156,7 @@
     </message>
     <message>
         <location filename="../ui/EditProduct.ui" line="7219"/>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <location filename="../src/EditProductTab7.cpp" line="35"/>
         <source>Volume</source>
         <translation>Volume</translation>
@@ -4633,7 +4633,7 @@
         <location filename="../src/EditProductTab3.cpp" line="730"/>
         <location filename="../src/EditProductTab4.cpp" line="361"/>
         <location filename="../src/EditProductTab5.cpp" line="399"/>
-        <location filename="../src/EditProductTab6.cpp" line="747"/>
+        <location filename="../src/EditProductTab6.cpp" line="782"/>
         <location filename="../src/EditProductTab7.cpp" line="306"/>
         <location filename="../src/EditProduct.cpp" line="866"/>
         <source>Delete %1</source>
@@ -4668,7 +4668,7 @@
     <message>
         <location filename="../src/EditProductTab3.cpp" line="1073"/>
         <location filename="../src/EditProductTab4.cpp" line="633"/>
-        <location filename="../src/EditProductTab6.cpp" line="1006"/>
+        <location filename="../src/EditProductTab6.cpp" line="1052"/>
         <source>Use at:</source>
         <translation>Toevoegen bij:</translation>
     </message>
@@ -4682,7 +4682,7 @@
         <location filename="../src/EditProductTab3.cpp" line="1083"/>
         <location filename="../src/EditProductTab4.cpp" line="643"/>
         <location filename="../src/EditProductTab5.cpp" line="674"/>
-        <location filename="../src/EditProductTab6.cpp" line="991"/>
+        <location filename="../src/EditProductTab6.cpp" line="1037"/>
         <source>In stock:</source>
         <translation>In voorraad:</translation>
     </message>
@@ -4824,8 +4824,8 @@
         <location filename="../src/EditProductTab4.cpp" line="619"/>
         <location filename="../src/EditProductTab5.cpp" line="525"/>
         <location filename="../src/EditProductTab5.cpp" line="650"/>
-        <location filename="../src/EditProductTab6.cpp" line="861"/>
-        <location filename="../src/EditProductTab6.cpp" line="999"/>
+        <location filename="../src/EditProductTab6.cpp" line="902"/>
+        <location filename="../src/EditProductTab6.cpp" line="1045"/>
         <source>Amount in gr:</source>
         <translation>Gewicht in gr:</translation>
     </message>
@@ -4883,8 +4883,8 @@
     <message>
         <location filename="../src/EditProductTab5.cpp" line="528"/>
         <location filename="../src/EditProductTab5.cpp" line="652"/>
-        <location filename="../src/EditProductTab6.cpp" line="868"/>
-        <location filename="../src/EditProductTab6.cpp" line="1001"/>
+        <location filename="../src/EditProductTab6.cpp" line="909"/>
+        <location filename="../src/EditProductTab6.cpp" line="1047"/>
         <source>Amount in ml:</source>
         <translation>Hoeveelheid in ml:</translation>
     </message>
@@ -4895,13 +4895,13 @@
     </message>
     <message>
         <location filename="../src/EditProductTab5.cpp" line="720"/>
-        <location filename="../src/EditProductTab6.cpp" line="1055"/>
+        <location filename="../src/EditProductTab6.cpp" line="1101"/>
         <source>Primary</source>
         <translation>Hoofdgisting</translation>
     </message>
     <message>
         <location filename="../src/EditProductTab5.cpp" line="721"/>
-        <location filename="../src/EditProductTab6.cpp" line="1056"/>
+        <location filename="../src/EditProductTab6.cpp" line="1102"/>
         <source>Secondary</source>
         <translation>Nagisting/lagering</translation>
     </message>
@@ -4957,89 +4957,89 @@
         <translation>Gist is al verwerkt</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Method</source>
         <translation>Methode</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Inj. factor</source>
         <translation>Injectie</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>New cells</source>
         <translation>Celgroei</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Total cells</source>
         <translation>Totaal</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="295"/>
+        <location filename="../src/EditProductTab6.cpp" line="313"/>
         <source>Grow factor</source>
         <translation>Groeifactor</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="649"/>
+        <location filename="../src/EditProductTab6.cpp" line="683"/>
         <source>Start step type:</source>
         <translation>Starter stap type:</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="654"/>
+        <location filename="../src/EditProductTab6.cpp" line="688"/>
         <source>Starter step volume:</source>
         <translation>Starter stap volume:</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="661"/>
+        <location filename="../src/EditProductTab6.cpp" line="695"/>
         <source>Stirred</source>
         <translation>Geroerd</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="662"/>
+        <location filename="../src/EditProductTab6.cpp" line="696"/>
         <source>Shaken</source>
         <translation>Geschud</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="663"/>
+        <location filename="../src/EditProductTab6.cpp" line="697"/>
         <source>Simple</source>
         <translation>Simpel</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="747"/>
+        <location filename="../src/EditProductTab6.cpp" line="782"/>
         <source>Delete yeast</source>
         <translation>Verwijder gist</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="854"/>
-        <location filename="../src/EditProductTab6.cpp" line="997"/>
+        <location filename="../src/EditProductTab6.cpp" line="895"/>
+        <location filename="../src/EditProductTab6.cpp" line="1043"/>
         <source>Total packs:</source>
         <translation>Aantal pakken:</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="971"/>
+        <location filename="../src/EditProductTab6.cpp" line="1017"/>
         <source>Yeast name:</source>
         <translation>Gist naam:</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="976"/>
-        <location filename="../src/EditProductTab6.cpp" line="981"/>
+        <location filename="../src/EditProductTab6.cpp" line="1022"/>
+        <location filename="../src/EditProductTab6.cpp" line="1027"/>
         <source>Laboratory:</source>
         <translation>Laboratorium:</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="986"/>
+        <location filename="../src/EditProductTab6.cpp" line="1032"/>
         <source>Select yeast:</source>
         <translation>Kies gist:</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="1057"/>
+        <location filename="../src/EditProductTab6.cpp" line="1103"/>
         <source>Tertiary</source>
         <translation>Lageren</translation>
     </message>
     <message>
-        <location filename="../src/EditProductTab6.cpp" line="1058"/>
+        <location filename="../src/EditProductTab6.cpp" line="1104"/>
         <source>Bottle</source>
         <translation>Bottelen</translation>
     </message>

mercurial