158 double Acid = 0, Acidmg = 0; |
158 double Acid = 0, Acidmg = 0; |
159 int AT; |
159 int AT; |
160 |
160 |
161 qDebug() << "calcWater()"; |
161 qDebug() << "calcWater()"; |
162 |
162 |
|
163 ui->w1_hardnessEdit->setValue(Utils::Hardness(recipe->w1_calcium, recipe->w1_magnesium)); |
|
164 ui->w1_raEdit->setValue(Utils::RA_ppm(recipe->w1_total_alkalinity, recipe->w1_calcium, recipe->w1_magnesium)); |
|
165 |
163 /* |
166 /* |
164 * If there is a dilute water source, mix the waters. |
167 * If there is a dilute water source, mix the waters. |
165 */ |
168 */ |
166 if (recipe->w2_name != "") { |
169 if (recipe->w2_name != "") { |
167 liters = recipe->w1_amount + recipe->w2_amount; |
170 liters = recipe->w1_amount + recipe->w2_amount; |
170 sodium = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sodium, recipe->w2_sodium); |
173 sodium = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sodium, recipe->w2_sodium); |
171 chloride = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_chloride, recipe->w2_chloride); |
174 chloride = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_chloride, recipe->w2_chloride); |
172 sulfate = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sulfate, recipe->w2_sulfate); |
175 sulfate = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_sulfate, recipe->w2_sulfate); |
173 total_alkalinity = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_total_alkalinity, recipe->w2_total_alkalinity); |
176 total_alkalinity = Utils::mix(recipe->w1_amount, recipe->w2_amount, recipe->w1_total_alkalinity, recipe->w2_total_alkalinity); |
174 ph = -log10(((pow(10, -recipe->w1_ph) * recipe->w1_amount) + (pow(10, -recipe->w2_ph) * recipe->w2_amount)) / liters); |
177 ph = -log10(((pow(10, -recipe->w1_ph) * recipe->w1_amount) + (pow(10, -recipe->w2_ph) * recipe->w2_amount)) / liters); |
|
178 ui->w2_hardnessEdit->setValue(Utils::Hardness(recipe->w2_calcium, recipe->w2_magnesium)); |
|
179 ui->w2_raEdit->setValue(Utils::RA_ppm(recipe->w2_total_alkalinity, recipe->w2_calcium, recipe->w2_magnesium)); |
175 } else { |
180 } else { |
176 liters = recipe->w1_amount; |
181 liters = recipe->w1_amount; |
177 calcium = recipe->w1_calcium; |
182 calcium = recipe->w1_calcium; |
178 magnesium = recipe->w1_magnesium; |
183 magnesium = recipe->w1_magnesium; |
179 sodium = recipe->w1_sodium; |
184 sodium = recipe->w1_sodium; |
199 ui->wg_caco3Edit->setValue(total_alkalinity); |
204 ui->wg_caco3Edit->setValue(total_alkalinity); |
200 ui->wg_naEdit->setValue(sodium); |
205 ui->wg_naEdit->setValue(sodium); |
201 ui->wg_clEdit->setValue(chloride); |
206 ui->wg_clEdit->setValue(chloride); |
202 ui->wg_so4Edit->setValue(sulfate); |
207 ui->wg_so4Edit->setValue(sulfate); |
203 ui->wg_phEdit->setValue(ph); |
208 ui->wg_phEdit->setValue(ph); |
|
209 ui->wg_hardnessEdit->setValue(Utils::Hardness(calcium, magnesium)); |
|
210 ui->wg_raEdit->setValue(Utils::RA_ppm(total_alkalinity, calcium, magnesium)); |
204 bicarbonate = total_alkalinity * 1.22; |
211 bicarbonate = total_alkalinity * 1.22; |
205 |
212 |
206 /* Save mixed water ions for later */ |
213 /* Save mixed water ions for later */ |
207 double wg_calcium = calcium; |
214 double wg_calcium = calcium; |
208 double wg_sodium = sodium; |
215 double wg_sodium = sodium; |
373 ui->wb_hco3Edit->setValue(bicarbonate); |
380 ui->wb_hco3Edit->setValue(bicarbonate); |
374 ui->wb_caco3Edit->setValue(total_alkalinity); |
381 ui->wb_caco3Edit->setValue(total_alkalinity); |
375 ui->wb_naEdit->setValue(sodium); |
382 ui->wb_naEdit->setValue(sodium); |
376 ui->wb_clEdit->setValue(chloride); |
383 ui->wb_clEdit->setValue(chloride); |
377 ui->wb_so4Edit->setValue(sulfate); |
384 ui->wb_so4Edit->setValue(sulfate); |
|
385 ui->wb_hardnessEdit->setValue(Utils::Hardness(calcium, magnesium)); |
|
386 ui->wb_raEdit->setValue(Utils::RA_ppm(total_alkalinity, calcium, magnesium)); |
378 |
387 |
379 ui->wb_caEdit->setStyleSheet((calcium < 40 || calcium > 150) ? "background-color: red":"background-color: green"); |
388 ui->wb_caEdit->setStyleSheet((calcium < 40 || calcium > 150) ? "background-color: red":"background-color: green"); |
380 ui->wb_mgEdit->setStyleSheet((magnesium < 5 || magnesium > 40) ? "background-color: red":"background-color: green"); |
389 ui->wb_mgEdit->setStyleSheet((magnesium < 5 || magnesium > 40) ? "background-color: red":"background-color: green"); |
381 ui->wb_naEdit->setStyleSheet((sodium > 150) ? "background-color: red":"background-color: green"); |
390 ui->wb_naEdit->setStyleSheet((sodium > 150) ? "background-color: red":"background-color: green"); |
382 /* |
391 /* |
482 Acid = Acid / my_acids[AT].AcidSG / (recipe->sparge_acid_perc / 100); //ml |
491 Acid = Acid / my_acids[AT].AcidSG / (recipe->sparge_acid_perc / 100); //ml |
483 Acid *= recipe->sparge_volume; //ml acid total |
492 Acid *= recipe->sparge_volume; //ml acid total |
484 Acid = round(Acid * 100.0) / 100.0; |
493 Acid = round(Acid * 100.0) / 100.0; |
485 recipe->sparge_acid_amount = Acid / 1000; |
494 recipe->sparge_acid_amount = Acid / 1000; |
486 ui->sp_acidvolEdit->setValue(Acid); |
495 ui->sp_acidvolEdit->setValue(Acid); |
|
496 |
|
497 // Finally calculate the estimate preboil pH |
|
498 recipe->preboil_ph = -log10(((pow(10, -recipe->mash_ph) * recipe->wg_amount) + (pow(10, -recipe->sparge_ph) * recipe->sparge_volume)) / |
|
499 (recipe->wg_amount + recipe->sparge_volume)); |
|
500 ui->preboil_phEdit->setValue(recipe->preboil_ph); |
487 } |
501 } |
488 |
502 |
489 |
503 |
490 void EditRecipe::sp_source_changed(int val) |
504 void EditRecipe::sp_source_changed(int val) |
491 { |
505 { |
658 ui->w1_caco3Edit->setValue(recipe->w1_total_alkalinity); |
672 ui->w1_caco3Edit->setValue(recipe->w1_total_alkalinity); |
659 ui->w1_naEdit->setValue(recipe->w1_sodium); |
673 ui->w1_naEdit->setValue(recipe->w1_sodium); |
660 ui->w1_clEdit->setValue(recipe->w1_chloride); |
674 ui->w1_clEdit->setValue(recipe->w1_chloride); |
661 ui->w1_so4Edit->setValue(recipe->w1_sulfate); |
675 ui->w1_so4Edit->setValue(recipe->w1_sulfate); |
662 ui->w1_phEdit->setValue(recipe->w1_ph); |
676 ui->w1_phEdit->setValue(recipe->w1_ph); |
|
677 ui->w1_hardnessEdit->setValue(Utils::Hardness(product->w1_calcium, product->w1_magnesium)); |
|
678 ui->w1_raEdit->setValue(Utils::RA_ppm(product->w1_total_alkalinity, product->w1_calcium, product->w1_magnesium)); |
663 |
679 |
664 is_changed(); |
680 is_changed(); |
665 calcWater(); |
681 calcWater(); |
666 } |
682 } |
667 |
683 |
668 |
684 |
669 void EditRecipe::w2_name_changed(int val) |
685 void EditRecipe::w2_name_changed(int val) |
670 { |
686 { |
671 QSqlQuery query; |
687 QSqlQuery query; |
|
688 double hardness, ra_ppm; |
672 |
689 |
673 qDebug() << "w2_name_changed" << val; |
690 qDebug() << "w2_name_changed" << val; |
674 |
691 |
675 if (val == 0) { // Clear water 2. |
692 if (val == 0) { // Clear water 2. |
676 recipe->w2_name = ""; |
693 recipe->w2_name = ""; |
681 recipe->w2_chloride = 0; |
698 recipe->w2_chloride = 0; |
682 recipe->w2_sulfate = 0; |
699 recipe->w2_sulfate = 0; |
683 recipe->w2_ph = 0; |
700 recipe->w2_ph = 0; |
684 recipe->w1_amount += recipe->w2_amount; |
701 recipe->w1_amount += recipe->w2_amount; |
685 recipe->w2_amount = 0; |
702 recipe->w2_amount = 0; |
|
703 hardness = ra_ppm = 0; |
686 } else { |
704 } else { |
687 query.prepare("SELECT * FROM inventory_waters ORDER BY record"); |
705 query.prepare("SELECT * FROM inventory_waters ORDER BY record"); |
688 query.exec(); |
706 query.exec(); |
689 query.first(); |
707 query.first(); |
690 for (int i = 0; i < (val - 1); i++) { |
708 for (int i = 0; i < (val - 1); i++) { |
698 recipe->w2_total_alkalinity = query.value(11).toDouble(); |
716 recipe->w2_total_alkalinity = query.value(11).toDouble(); |
699 recipe->w2_sodium = query.value(7).toDouble(); |
717 recipe->w2_sodium = query.value(7).toDouble(); |
700 recipe->w2_chloride = query.value(6).toDouble(); |
718 recipe->w2_chloride = query.value(6).toDouble(); |
701 recipe->w2_sulfate = query.value(5).toDouble(); |
719 recipe->w2_sulfate = query.value(5).toDouble(); |
702 recipe->w2_ph = query.value(9).toDouble(); |
720 recipe->w2_ph = query.value(9).toDouble(); |
|
721 hardness = Utils::Hardness(product->w2_calcium, product->w2_magnesium); |
|
722 ra_ppm = Utils::RA_ppm(product->w2_total_alkalinity, product->w2_calcium, product->w2_magnesium); |
703 } |
723 } |
704 ui->w1_volEdit->setValue(recipe->w1_amount); |
724 ui->w1_volEdit->setValue(recipe->w1_amount); |
705 ui->w2_volEdit->setValue(recipe->w2_amount); |
725 ui->w2_volEdit->setValue(recipe->w2_amount); |
706 ui->w2_caEdit->setValue(recipe->w2_calcium); |
726 ui->w2_caEdit->setValue(recipe->w2_calcium); |
707 ui->w2_mgEdit->setValue(recipe->w2_magnesium); |
727 ui->w2_mgEdit->setValue(recipe->w2_magnesium); |
709 ui->w2_caco3Edit->setValue(recipe->w2_total_alkalinity); |
729 ui->w2_caco3Edit->setValue(recipe->w2_total_alkalinity); |
710 ui->w2_naEdit->setValue(recipe->w2_sodium); |
730 ui->w2_naEdit->setValue(recipe->w2_sodium); |
711 ui->w2_clEdit->setValue(recipe->w2_chloride); |
731 ui->w2_clEdit->setValue(recipe->w2_chloride); |
712 ui->w2_so4Edit->setValue(recipe->w2_sulfate); |
732 ui->w2_so4Edit->setValue(recipe->w2_sulfate); |
713 ui->w2_phEdit->setValue(recipe->w2_ph); |
733 ui->w2_phEdit->setValue(recipe->w2_ph); |
|
734 ui->w2_hardnessEdit->setValue(hardness); |
|
735 ui->w2_raEdit->setValue(ra_ppm); |
714 |
736 |
715 is_changed(); |
737 is_changed(); |
716 calcWater(); |
738 calcWater(); |
717 } |
739 } |
718 |
740 |
728 ui->wt_hco3Edit->setValue(0); |
750 ui->wt_hco3Edit->setValue(0); |
729 ui->wt_caco3Edit->setValue(0); |
751 ui->wt_caco3Edit->setValue(0); |
730 ui->wt_naEdit->setValue(0); |
752 ui->wt_naEdit->setValue(0); |
731 ui->wt_clEdit->setValue(0); |
753 ui->wt_clEdit->setValue(0); |
732 ui->wt_so4Edit->setValue(0); |
754 ui->wt_so4Edit->setValue(0); |
|
755 ui->wt_hardnessEdit->setValue(0); |
|
756 ui->wt_raEdit->setValue(0); |
733 } else { |
757 } else { |
734 query.prepare("SELECT * FROM profile_water ORDER BY name"); |
758 query.prepare("SELECT * FROM profile_water ORDER BY name"); |
735 query.exec(); |
759 query.exec(); |
736 query.first(); |
760 query.first(); |
737 for (int i = 0; i < (val - 1); i++) { |
761 for (int i = 0; i < (val - 1); i++) { |
738 query.next(); |
762 query.next(); |
739 } |
763 } |
740 ui->wt_caEdit->setValue(query.value(2).toDouble()); |
764 ui->wt_caEdit->setValue(query.value("calcium").toDouble()); |
741 ui->wt_mgEdit->setValue(query.value(7).toDouble()); |
765 ui->wt_mgEdit->setValue(query.value("magnesium").toDouble()); |
742 ui->wt_hco3Edit->setValue(query.value(3).toDouble()); |
766 ui->wt_hco3Edit->setValue(query.value("bicarbonate").toDouble()); |
743 ui->wt_caco3Edit->setValue(query.value(10).toDouble()); |
767 ui->wt_caco3Edit->setValue(query.value("total_alkalinity").toDouble()); |
744 ui->wt_naEdit->setValue(query.value(6).toDouble()); |
768 ui->wt_naEdit->setValue(query.value("sodium").toDouble()); |
745 ui->wt_clEdit->setValue(query.value(5).toDouble()); |
769 ui->wt_clEdit->setValue(query.value("chloride").toDouble()); |
746 ui->wt_so4Edit->setValue(query.value(4).toDouble()); |
770 ui->wt_so4Edit->setValue(query.value("sulfate").toDouble()); |
|
771 ui->wt_hardnessEdit->setValue(Utils::Hardness(query.value("calcium").toDouble(), query.value("magnesium").toDouble())); |
|
772 ui->wt_raEdit->setValue(Utils::RA_ppm(query.value("total_alkalinity").toDouble(), query.value("calcium").toDouble(), query.value("magnesium").toDouble())); |
747 } |
773 } |
748 calcWater(); |
774 calcWater(); |
749 } |
775 } |
750 |
776 |
751 |
777 |