Fermentables inventory is updated during initial product load. Total mash volume is calculated against the used equipment profile. Display mash weight. Mash infuse temperatures are calculated against the used equipment profile.

Fri, 29 Apr 2022 20:29:26 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 29 Apr 2022 20:29:26 +0200
changeset 177
62b8d701cd88
parent 176
69a033e099a2
child 178
1091fd9feffe

Fermentables inventory is updated during initial product load. Total mash volume is calculated against the used equipment profile. Display mash weight. Mash infuse temperatures are calculated against the used equipment profile.

src/EditProduct.cpp file | annotate | diff | comparison | revisions
src/EditProductTab3.cpp file | annotate | diff | comparison | revisions
src/EditProductTab7.cpp file | annotate | diff | comparison | revisions
ui/EditProduct.ui file | annotate | diff | comparison | revisions
--- a/src/EditProduct.cpp	Fri Apr 29 17:07:35 2022 +0200
+++ b/src/EditProduct.cpp	Fri Apr 29 20:29:26 2022 +0200
@@ -341,6 +341,8 @@
 		    QJsonObject obj = fermentables.array().at(i).toObject();
 		    //qDebug() << i << obj;
 		    Fermentables f;
+		    f.f_inventory = 0;
+		    f.f_avail = false;
 		    f.f_name = obj["f_name"].toString();
 		    f.f_origin = obj["f_origin"].toString();
 		    f.f_supplier = obj["f_supplier"].toString();
@@ -366,6 +368,16 @@
 		    if (f.f_adjust_to_total_100)
 			product->fermentables_use100 = true;
 		    percentcheck += f.f_percentage;
+		    /* Check and update inventory */
+		    yquery.prepare("SELECT inventory FROM inventory_fermentables WHERE name=:name AND supplier=:supplier AND origin=:origin");
+                    yquery.bindValue(":name", f.f_name);
+                    yquery.bindValue(":supplier", f.f_supplier);
+                    yquery.bindValue(":origin", f.f_origin);
+                    yquery.exec();
+		    if (yquery.first()) {
+			f.f_avail = true;
+			f.f_inventory = yquery.value(0).toDouble();
+		    }
 		    product->fermentables.append(f);
 		}
 		qDebug() << "fermentables" << product->fermentables.size() << percentcheck;
--- a/src/EditProductTab3.cpp	Fri Apr 29 17:07:35 2022 +0200
+++ b/src/EditProductTab3.cpp	Fri Apr 29 20:29:26 2022 +0200
@@ -40,9 +40,9 @@
 	pLayout->setAlignment(Qt::AlignCenter);
 	pLayout->setContentsMargins(0, 0, 0, 0);
 	pWidget->setLayout(pLayout);
-	ui->fermentablesTable->setCellWidget(row, 9, pWidget);
+	ui->fermentablesTable->setCellWidget(row, 10, pWidget);
     } else {
-	ui->fermentablesTable->removeCellWidget(row, 9);
+	ui->fermentablesTable->removeCellWidget(row, 10);
     }
 }
 
@@ -58,20 +58,21 @@
     std::sort(product->fermentables.begin(), product->fermentables.end(), ferment_sort_test);
 
     const QStringList labels({tr("Supplier"), tr("Fermentable"), tr("EBC"), tr("Type"), tr("Graintype"), tr("When"), tr("Yield"),
-		    	      tr("Amount"), tr("Procent"), tr("100%"), tr("Delete"), tr("Edit") });
-    ui->fermentablesTable->setColumnCount(12);
-    ui->fermentablesTable->setColumnWidth(0, 150);     /* Supplier	*/
-    ui->fermentablesTable->setColumnWidth(1, 225);     /* Fermentable	*/
-    ui->fermentablesTable->setColumnWidth(2,  50);     /* Color		*/
+		    	      tr("Amount"), tr("Stock"), tr("Procent"), tr("100%"), tr("Delete"), tr("Edit") });
+    ui->fermentablesTable->setColumnCount(13);
+    ui->fermentablesTable->setColumnWidth(0, 130);     /* Supplier	*/
+    ui->fermentablesTable->setColumnWidth(1, 210);     /* Fermentable	*/
+    ui->fermentablesTable->setColumnWidth(2,  45);     /* Color		*/
     ui->fermentablesTable->setColumnWidth(3,  75);     /* Type		*/
     ui->fermentablesTable->setColumnWidth(4,  75);     /* Graintype	*/
-    ui->fermentablesTable->setColumnWidth(5,  82);     /* Added		*/
-    ui->fermentablesTable->setColumnWidth(6,  60);     /* Yield		*/
-    ui->fermentablesTable->setColumnWidth(7,  90);     /* Amount	*/
-    ui->fermentablesTable->setColumnWidth(8,  60);     /* Procent	*/
-    ui->fermentablesTable->setColumnWidth(9,  50);     /* 100%		*/
-    ui->fermentablesTable->setColumnWidth(10, 80);     /* Delete	*/
-    ui->fermentablesTable->setColumnWidth(11, 80);     /* Edit		*/
+    ui->fermentablesTable->setColumnWidth(5,  77);     /* Added		*/
+    ui->fermentablesTable->setColumnWidth(6,  55);     /* Yield		*/
+    ui->fermentablesTable->setColumnWidth(7,  80);     /* Amount	*/
+    ui->fermentablesTable->setColumnWidth(8,  80);     /* Stock		*/
+    ui->fermentablesTable->setColumnWidth(9,  55);     /* Procent	*/
+    ui->fermentablesTable->setColumnWidth(10, 50);     /* 100%		*/
+    ui->fermentablesTable->setColumnWidth(11, 80);     /* Delete	*/
+    ui->fermentablesTable->setColumnWidth(12, 80);     /* Edit		*/
     ui->fermentablesTable->setHorizontalHeaderLabels(labels);
     ui->fermentablesTable->verticalHeader()->hide();
     ui->fermentablesTable->setRowCount(product->fermentables.size());
@@ -106,13 +107,17 @@
         item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
         ui->fermentablesTable->setItem(i, 7, item);
 
+	item = new QTableWidgetItem(QString("%1 Kg").arg(product->fermentables.at(i).f_inventory, 4, 'f', 3, '0'));
+        item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
+        ui->fermentablesTable->setItem(i, 8, item);
+
 	if (product->fermentables.at(i).f_added < 4) {
             item = new QTableWidgetItem(QString("%1%").arg(product->fermentables.at(i).f_percentage, 2, 'f', 1, '0'));
 	} else {
 	    item = new QTableWidgetItem(QString(""));	// Blank for bottling and kegging.
 	}
         item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
-        ui->fermentablesTable->setItem(i, 8, item);
+        ui->fermentablesTable->setItem(i, 9, item);
 
 	to100Fermentables(i);
 
@@ -126,7 +131,7 @@
         pLayout->addWidget(btn_dele);
         pLayout->setContentsMargins(5, 0, 5, 0);
         pWidget->setLayout(pLayout);
-        ui->fermentablesTable->setCellWidget(i, 10, pWidget);
+        ui->fermentablesTable->setCellWidget(i, 11, pWidget);
 
 	pWidget = new QWidget();
 	QPushButton* btn_edit = new QPushButton();
@@ -137,7 +142,7 @@
         pLayout->addWidget(btn_edit);
 	pLayout->setContentsMargins(5, 0, 5, 0);
         pWidget->setLayout(pLayout);
-        ui->fermentablesTable->setCellWidget(i, 11, pWidget);
+        ui->fermentablesTable->setCellWidget(i, 12, pWidget);
     }
 }
 
@@ -213,6 +218,7 @@
     	product->est_abv = 0;
     	ui->calEdit->setValue(0);
 	product->mashs_kg = 0;
+	ui->mash_kgEdit->setValue(0);
 	return;
     }
     qDebug() << "  adjust to 100" << product->fermentables_use100;
@@ -289,11 +295,8 @@
     ui->est_color2Edit->setStyleSheet(Utils::ebc_to_style(color));
     ui->est_colorShow->setValue(color);
 
-    /*
-     * We don't have a equipment profile in products,
-     * so we assume a certain guessed mashtun size.
-     */
-    ui->perc_mashShow->setValue(round(product->mashs_kg / (product->boil_size / 3) * 100));
+    ui->perc_mashShow->setValue(round(product->mashs_kg / product->eq_mash_max * 100));
+    ui->mash_kgEdit->setValue(product->mashs_kg);
     ui->perc_sugarsShow->setValue(round(psugar));
     ui->perc_caraShow->setValue(round(pcara));
     if (product->mashs_kg > 0) {
--- a/src/EditProductTab7.cpp	Fri Apr 29 17:07:35 2022 +0200
+++ b/src/EditProductTab7.cpp	Fri Apr 29 20:29:26 2022 +0200
@@ -154,8 +154,8 @@
 
 double EditProduct::infusionVol(double step_infused, double step_mashkg, double infuse_temp, double step_temp, double last_temp)
 {
-    double a = last_temp * (equip_tun_weight * equip_tun_specific_heat + step_infused * SpecificHeatWater + step_mashkg * SpecificHeatMalt);
-    double b = step_temp * (equip_tun_weight * equip_tun_specific_heat + step_infused * SpecificHeatWater + step_mashkg * SpecificHeatMalt);
+    double a = last_temp * (product->eq_tun_weight * product->eq_tun_specific_heat + step_infused * SpecificHeatWater + step_mashkg * SpecificHeatMalt);
+    double b = step_temp * (product->eq_tun_weight * product->eq_tun_specific_heat + step_infused * SpecificHeatWater + step_mashkg * SpecificHeatMalt);
     double vol = round(((b - a) / ((infuse_temp - step_temp) * SpecificHeatWater)) * 100.0) / 100.0;
 
     if (vol < 0)
@@ -167,7 +167,7 @@
 
 double EditProduct::decoctionVol(double step_volume, double step_temp, double prev_temp)
 {
-    double a = (equip_tun_weight * equip_tun_specific_heat + step_volume * SpecificHeatWater) * (step_temp - prev_temp);
+    double a = (product->eq_tun_weight * product->eq_tun_specific_heat + step_volume * SpecificHeatWater) * (step_temp - prev_temp);
     double b = SpecificHeatWater * (99 - step_temp);
     double vol = 0;
 
@@ -198,9 +198,9 @@
 		    n = 20; // tun is preheated.
 		    tuntemp = product->mashs.at(i).step_temp;
 		    for (j = 0; j < n; j++) {
-			a = product->mashs_kg * graintemp * SpecificHeatMalt + equip_tun_weight * tuntemp * equip_tun_specific_heat;
+			a = product->mashs_kg * graintemp * SpecificHeatMalt + product->eq_tun_weight * tuntemp * product->eq_tun_specific_heat;
 			b = product->mashs[i].step_temp *
-			      (equip_tun_weight * equip_tun_specific_heat +
+			      (product->eq_tun_weight * product->eq_tun_specific_heat +
 			       product->mashs.at(i).step_infuse_amount * SpecificHeatWater + 
 			       product->mashs_kg * SpecificHeatMalt) -
 			      SlakingHeat * product->mashs_kg;
--- a/ui/EditProduct.ui	Fri Apr 29 17:07:35 2022 +0200
+++ b/ui/EditProduct.ui	Fri Apr 29 20:29:26 2022 +0200
@@ -2444,6 +2444,59 @@
           <normaloff>:/icons/bms/graan.png</normaloff>:/icons/bms/graan.png</iconset>
         </property>
        </widget>
+       <widget class="QDoubleSpinBox" name="mash_kgEdit">
+        <property name="geometry">
+         <rect>
+          <x>140</x>
+          <y>70</y>
+          <width>71</width>
+          <height>24</height>
+         </rect>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+        <property name="buttonSymbols">
+         <enum>QAbstractSpinBox::NoButtons</enum>
+        </property>
+        <property name="accelerated">
+         <bool>false</bool>
+        </property>
+        <property name="suffix">
+         <string> kg</string>
+        </property>
+        <property name="decimals">
+         <number>3</number>
+        </property>
+        <property name="minimum">
+         <double>0.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>100000.000000000000000</double>
+        </property>
+        <property name="singleStep">
+         <double>1.000000000000000</double>
+        </property>
+       </widget>
+       <widget class="QLabel" name="mash_kgLabel">
+        <property name="geometry">
+         <rect>
+          <x>0</x>
+          <y>70</y>
+          <width>131</width>
+          <height>20</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>Mash weight:</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+       </widget>
       </widget>
       <widget class="QWidget" name="hops">
        <attribute name="icon">

mercurial