src/EditProductTab8.cpp

changeset 532
082786891630
parent 530
a4d5daae8389
child 533
288ed828d11a
equal deleted inserted replaced
531:490ed8ac84a9 532:082786891630
224 224
225 if (fg < 1.002) /* Can't be too low for this */ 225 if (fg < 1.002) /* Can't be too low for this */
226 fg = 1.002; 226 fg = 1.002;
227 227
228 double bure = ibu / ((0.1808 * Utils::sg_to_plato(og)) + (0.8192 * Utils::sg_to_plato(fg))); 228 double bure = ibu / ((0.1808 * Utils::sg_to_plato(og)) + (0.8192 * Utils::sg_to_plato(fg)));
229 qDebug() << "BU:RE" << bure << product->est_fg << product->fg << product->est_ibu << product->brew_fermenter_ibu; 229 // qDebug() << "BU:RE" << bure << product->est_fg << product->fg << product->est_ibu << product->brew_fermenter_ibu;
230 ui->est_bufguEdit->setValue(bure); 230 ui->est_bufguEdit->setValue(bure);
231 ui->est_bufguShow->setValue(bure); 231 ui->est_bufguShow->setValue(bure);
232 232
233 } 233 }
234 234
349 /* 349 /*
350 * Auto calculate the needed acid. 350 * Auto calculate the needed acid.
351 */ 351 */
352 TpH = product->mash_ph; 352 TpH = product->mash_ph;
353 protonDeficit = ProtonDeficit(TpH); 353 protonDeficit = ProtonDeficit(TpH);
354 qDebug() << " calc_acid tgt:" << TpH << "protonDeficit:" << protonDeficit; 354 // qDebug() << " calc_acid tgt:" << TpH << "protonDeficit:" << protonDeficit;
355 if (protonDeficit > 0) { 355 if (protonDeficit > 0) {
356 frac = Utils::CalcFrac(TpH, my_acids[AT].pK1, my_acids[AT].pK2, my_acids[AT].pK3); 356 frac = Utils::CalcFrac(TpH, my_acids[AT].pK1, my_acids[AT].pK2, my_acids[AT].pK3);
357 Acid = protonDeficit / frac; 357 Acid = protonDeficit / frac;
358 Acid *= my_acids[AT].MolWt; // mg. 358 Acid *= my_acids[AT].MolWt; // mg.
359 Acidmg = Acid; 359 Acidmg = Acid;
360 Acid = Acid / my_acids[AT].AcidSG; 360 Acid = Acid / my_acids[AT].AcidSG;
361 Acid = round((Acid / (product->wa_acid_perc / 100.0)) * 100.0) / 100.0; 361 Acid = round((Acid / (product->wa_acid_perc / 100.0)) * 100.0) / 100.0;
362 qDebug() << " Mash auto Acid final old ml:" << Acid; 362 // qDebug() << " Mash auto Acid final old ml:" << Acid;
363 Acid = Acidmg; 363 Acid = Acidmg;
364 364
365 double RealSG = round(((my_acids[AT].AcidSG - 1000) * (product->wa_acid_perc / 100)) + 1000); 365 double RealSG = round(((my_acids[AT].AcidSG - 1000) * (product->wa_acid_perc / 100)) + 1000);
366 Acid /= RealSG; 366 Acid /= RealSG;
367 Acid /= my_acids[AT].AcidPrc / 100; 367 Acid /= my_acids[AT].AcidPrc / 100;
368 Acid = round(Acid * 100.0) / 100.0; 368 Acid = round(Acid * 100.0) / 100.0;
369 qDebug() << " Mash auto Acid final ml:" << Acid; 369 // qDebug() << " Mash auto Acid final ml:" << Acid;
370 370
371 QString w = my_acids[AT].name_en + ' ' + my_acids[AT].name_nl; 371 QString w = my_acids[AT].name_en + ' ' + my_acids[AT].name_nl;
372 brewing_salt_sub(w, Acid, MISC_USES_MASH); 372 brewing_salt_sub(w, Acid, MISC_USES_MASH);
373 ui->mw_acidvolEdit->setValue(Acid); 373 ui->mw_acidvolEdit->setValue(Acid);
374 374
382 * Manual adjust acid, calculate resulting pH. 382 * Manual adjust acid, calculate resulting pH.
383 */ 383 */
384 double pHa = ph; // Mixed water pH. 384 double pHa = ph; // Mixed water pH.
385 double RealSG = round(((my_acids[AT].AcidSG - 1000) * (product->wa_acid_perc / 100)) + 1000); 385 double RealSG = round(((my_acids[AT].AcidSG - 1000) * (product->wa_acid_perc / 100)) + 1000);
386 // Then calculate the new pH with added acids and malts 386 // Then calculate the new pH with added acids and malts
387 qDebug() << " Mash pH:" << pHa; 387 // qDebug() << " Mash pH:" << pHa;
388 Acid = RealSG; 388 Acid = RealSG;
389 Acid *= ui->mw_acidvolEdit->value(); 389 Acid *= ui->mw_acidvolEdit->value();
390 Acid *= my_acids[AT].AcidPrc / 100; 390 Acid *= my_acids[AT].AcidPrc / 100;
391 Acid /= my_acids[AT].MolWt; // mg; 391 Acid /= my_acids[AT].MolWt; // mg;
392 Acidmg = Acid; 392 Acidmg = Acid;
393 393
394 //find the pH where the protondeficit = protondeficit by the acid 394 //find the pH where the protondeficit = protondeficit by the acid
395 frac = Utils::CalcFrac(pHa, my_acids[AT].pK1, my_acids[AT].pK2, my_acids[AT].pK3); 395 frac = Utils::CalcFrac(pHa, my_acids[AT].pK1, my_acids[AT].pK2, my_acids[AT].pK3);
396 protonDeficit = Acid * frac; 396 protonDeficit = Acid * frac;
397 qDebug() << " Acid:" << Acid << "protonDeficit:" << protonDeficit << "frac:" << frac << "pH:" << pHa; 397 // qDebug() << " Acid:" << Acid << "protonDeficit:" << protonDeficit << "frac:" << frac << "pH:" << pHa;
398 398
399 double deltapH = 0.001; 399 double deltapH = 0.001;
400 double deltapd = 0.1; 400 double deltapd = 0.1;
401 double pd = round(ProtonDeficit(pHa) * 1000000.0) / 1000000.0; 401 double pd = round(ProtonDeficit(pHa) * 1000000.0) / 1000000.0;
402 int n = 0; 402 int n = 0;
408 pHa += deltapH; 408 pHa += deltapH;
409 frac = Utils::CalcFrac(pHa, my_acids[AT].pK1, my_acids[AT].pK2, my_acids[AT].pK3); 409 frac = Utils::CalcFrac(pHa, my_acids[AT].pK1, my_acids[AT].pK2, my_acids[AT].pK3);
410 protonDeficit = Acid * frac; 410 protonDeficit = Acid * frac;
411 pd = ProtonDeficit(pHa); 411 pd = ProtonDeficit(pHa);
412 } 412 }
413 qDebug() << " n:" << n << "pd:" << pd << "protonDeficit:" << protonDeficit << "frac:" << frac << "pHa:" << pHa; 413 // qDebug() << " n:" << n << "pd:" << pd << "protonDeficit:" << protonDeficit << "frac:" << frac << "pHa:" << pHa;
414 414
415 bicarbonate = wg_bicarbonate - protonDeficit * frac / liters; 415 bicarbonate = wg_bicarbonate - protonDeficit * frac / liters;
416 total_alkalinity = bicarbonate * 50 / 61; 416 total_alkalinity = bicarbonate * 50 / 61;
417 ph = pHa; 417 ph = pHa;
418 ui->mw_phEdit->setValue(ph); 418 ui->mw_phEdit->setValue(ph);
484 product->wb_chloride = chloride; 484 product->wb_chloride = chloride;
485 product->wb_sulfate = sulfate; 485 product->wb_sulfate = sulfate;
486 product->wb_ph = ph; 486 product->wb_ph = ph;
487 487
488 /* Mix sparge and mash waters to display the final water. */ 488 /* Mix sparge and mash waters to display the final water. */
489 qDebug() << " ca" << product->wg_amount << product->sparge_volume << calcium << product->ws_calcium;
490 calcium = Utils::mix(product->wg_amount, product->sparge_volume, calcium, product->ws_calcium); 489 calcium = Utils::mix(product->wg_amount, product->sparge_volume, calcium, product->ws_calcium);
491 magnesium = Utils::mix(product->wg_amount, product->sparge_volume, magnesium, product->ws_magnesium); 490 magnesium = Utils::mix(product->wg_amount, product->sparge_volume, magnesium, product->ws_magnesium);
492 sodium = Utils::mix(product->wg_amount, product->sparge_volume, sodium, product->ws_sodium); 491 sodium = Utils::mix(product->wg_amount, product->sparge_volume, sodium, product->ws_sodium);
493 chloride = Utils::mix(product->wg_amount, product->sparge_volume, chloride, product->ws_chloride); 492 chloride = Utils::mix(product->wg_amount, product->sparge_volume, chloride, product->ws_chloride);
494 sulfate = Utils::mix(product->wg_amount, product->sparge_volume, sulfate, product->ws_sulfate); 493 sulfate = Utils::mix(product->wg_amount, product->sparge_volume, sulfate, product->ws_sulfate);
978 { 977 {
979 if (! product->calc_acid) 978 if (! product->calc_acid)
980 return; 979 return;
981 980
982 if (product->mash_ph != val) { 981 if (product->mash_ph != val) {
983 qDebug() << "mw_ph_changed" << val << product->mash_ph;
984 product->mash_ph = val; 982 product->mash_ph = val;
985 is_changed(); 983 is_changed();
986 calcWater(); 984 calcWater();
987 } 985 }
988 } 986 }
991 void EditProduct::mw_acid_changed(double val) 989 void EditProduct::mw_acid_changed(double val)
992 { 990 {
993 if (product->calc_acid) 991 if (product->calc_acid)
994 return; 992 return;
995 993
996 qDebug() << "on_mw_acid_changed" << val;
997 QString w = my_acids[product->wa_acid_name].name_en + ' ' + my_acids[product->wa_acid_name].name_nl; 994 QString w = my_acids[product->wa_acid_name].name_en + ' ' + my_acids[product->wa_acid_name].name_nl;
998 set_brewing_salt(w, val, MISC_USES_MASH); 995 set_brewing_salt(w, val, MISC_USES_MASH);
999 } 996 }
1000 997
1001 998
1023 } 1020 }
1024 1021
1025 1022
1026 void EditProduct::w2_volume_changed(double val) 1023 void EditProduct::w2_volume_changed(double val)
1027 { 1024 {
1028 qDebug() << "w2_vol_changed" << val;
1029
1030 if (product->w2_total_alkalinity && product->w2_sulfate) { 1025 if (product->w2_total_alkalinity && product->w2_sulfate) {
1031 /* 1026 /*
1032 * Seems a valid water, but don't go over the total. 1027 * Seems a valid water, but don't go over the total.
1033 */ 1028 */
1034 if (val < (product->w1_amount + product->w2_amount)) { 1029 if (val < (product->w1_amount + product->w2_amount)) {
1054 { 1049 {
1055 QSqlQuery query; 1050 QSqlQuery query;
1056 product->waters_ok = true; 1051 product->waters_ok = true;
1057 1052
1058 if (product->w1_name != "") { 1053 if (product->w1_name != "") {
1059 qDebug() << "check_waters 1" << product->w1_name; 1054 // qDebug() << "check_waters 1" << product->w1_name;
1060 query.prepare("SELECT unlimited_stock,inventory FROM inventory_waters WHERE name=:name"); 1055 query.prepare("SELECT unlimited_stock,inventory FROM inventory_waters WHERE name=:name");
1061 query.bindValue(":name", product->w1_name); 1056 query.bindValue(":name", product->w1_name);
1062 query.exec(); 1057 query.exec();
1063 if (query.first()) { 1058 if (query.first()) {
1064 if ((query.value("unlimited_stock").toInt() == 0) && (query.value("inventory").toDouble() < product->w1_amount)) { 1059 if ((query.value("unlimited_stock").toInt() == 0) && (query.value("inventory").toDouble() < product->w1_amount)) {
1067 } 1062 }
1068 } 1063 }
1069 } 1064 }
1070 1065
1071 if ((product->w2_name != "") && (product->w2_amount > 0)) { 1066 if ((product->w2_name != "") && (product->w2_amount > 0)) {
1072 qDebug() << "check_waters 2" << product->w2_name; 1067 // qDebug() << "check_waters 2" << product->w2_name;
1073 query.prepare("SELECT unlimited_stock,inventory FROM inventory_waters WHERE name=:name"); 1068 query.prepare("SELECT unlimited_stock,inventory FROM inventory_waters WHERE name=:name");
1074 query.bindValue(":name", product->w2_name); 1069 query.bindValue(":name", product->w2_name);
1075 query.exec(); 1070 query.exec();
1076 if (query.first()) { 1071 if (query.first()) {
1077 if ((query.value("unlimited_stock").toInt() == 0) && (query.value("inventory").toDouble() < product->w2_amount)) { 1072 if ((query.value("unlimited_stock").toInt() == 0) && (query.value("inventory").toDouble() < product->w2_amount)) {
1094 1089
1095 void EditProduct::w1_name_changed(int val) 1090 void EditProduct::w1_name_changed(int val)
1096 { 1091 {
1097 QSqlQuery query; 1092 QSqlQuery query;
1098 1093
1099 qDebug() << "w1_name_changed" << val; 1094 // qDebug() << "w1_name_changed" << val;
1100 const QSignalBlocker blocker1(ui->w1_nameEdit); 1095 const QSignalBlocker blocker1(ui->w1_nameEdit);
1101 if (val == 0) { 1096 if (val == 0) {
1102 /* 1097 /*
1103 * If no water is selected, take the default water. 1098 * If no water is selected, take the default water.
1104 */ 1099 */
1143 void EditProduct::w2_name_changed(int val) 1138 void EditProduct::w2_name_changed(int val)
1144 { 1139 {
1145 QSqlQuery query; 1140 QSqlQuery query;
1146 double hardness, ra_ppm; 1141 double hardness, ra_ppm;
1147 1142
1148 qDebug() << "w2_name_changed" << val; 1143 // qDebug() << "w2_name_changed" << val;
1149 1144
1150 if (val == 0) { // Clear water 2. 1145 if (val == 0) { // Clear water 2.
1151 product->w2_name = ""; 1146 product->w2_name = "";
1152 product->w2_calcium = 0; 1147 product->w2_calcium = 0;
1153 product->w2_magnesium = 0; 1148 product->w2_magnesium = 0;
1164 query.exec(); 1159 query.exec();
1165 query.first(); 1160 query.first();
1166 for (int i = 0; i < (val - 1); i++) { 1161 for (int i = 0; i < (val - 1); i++) {
1167 query.next(); 1162 query.next();
1168 } 1163 }
1169 qDebug() << "set water" << query.value(1).toString(); 1164 // qDebug() << "set water" << query.value(1).toString();
1170 1165
1171 product->w2_name = query.value(1).toString(); 1166 product->w2_name = query.value("name").toString();
1172 product->w2_calcium = query.value(3).toDouble(); 1167 product->w2_calcium = query.value("calcium").toDouble();
1173 product->w2_magnesium = query.value(8).toDouble(); 1168 product->w2_magnesium = query.value("magnesium").toDouble();
1174 product->w2_total_alkalinity = query.value(11).toDouble(); 1169 product->w2_total_alkalinity = query.value("total_alkalinity").toDouble();
1175 product->w2_sodium = query.value(7).toDouble(); 1170 product->w2_sodium = query.value("sodium").toDouble();
1176 product->w2_chloride = query.value(6).toDouble(); 1171 product->w2_chloride = query.value("chloride").toDouble();
1177 product->w2_sulfate = query.value(5).toDouble(); 1172 product->w2_sulfate = query.value("sulfate").toDouble();
1178 product->w2_ph = query.value(9).toDouble(); 1173 product->w2_ph = query.value("ph").toDouble();
1179 hardness = Utils::Hardness(product->w2_calcium, product->w2_magnesium); 1174 hardness = Utils::Hardness(product->w2_calcium, product->w2_magnesium);
1180 ra_ppm = Utils::ResidualAlkalinity(product->w2_total_alkalinity, product->w2_calcium, product->w2_magnesium); 1175 ra_ppm = Utils::ResidualAlkalinity(product->w2_total_alkalinity, product->w2_calcium, product->w2_magnesium);
1181 } 1176 }
1182 ui->w1_volEdit->setValue(product->w1_amount); 1177 ui->w1_volEdit->setValue(product->w1_amount);
1183 ui->w2_volEdit->setValue(product->w2_amount); 1178 ui->w2_volEdit->setValue(product->w2_amount);

mercurial