Skip to content

Commit

Permalink
Korrekturbutton für Extrakrt (Malz & Zusätze)
Browse files Browse the repository at this point in the history
  • Loading branch information
BourgeoisLab committed Dec 25, 2022
1 parent 7c40dbb commit 7a1b498
Show file tree
Hide file tree
Showing 11 changed files with 229 additions and 10 deletions.
2 changes: 1 addition & 1 deletion kleiner-brauhelfer-core/kleiner-brauhelfer-core.pro
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ VER_MAJ = 2
# Datenbankversion
VER_MIN = 7
# Patchversion
VER_PAT = 0
VER_PAT = 1

VERSION = $$sprintf("%1.%2.%3", $$VER_MAJ, $$VER_MIN, $$VER_PAT)
DEFINES += VER_MAJ=\"$$VER_MAJ\" VER_MIN=\"$$VER_MIN\" VER_PAT=\"$$VER_PAT\"
Expand Down
12 changes: 12 additions & 0 deletions kleiner-brauhelfer-core/modelweiterezutatengaben.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ ModelWeitereZutatenGaben::ModelWeitereZutatenGaben(Brauhelfer* bh, QSqlDatabase
bh(bh)
{
mVirtualField.append("Extrakt");
mVirtualField.append("ExtraktProzent");
mVirtualField.append("ZugabeDatum");
mVirtualField.append("EntnahmeDatum");
mVirtualField.append("Abfuellbereit");
Expand All @@ -33,6 +34,12 @@ QVariant ModelWeitereZutatenGaben::dataExt(const QModelIndex &idx) const
}
return 0;
}
case ColExtraktProzent:
{
double sw = bh->modelSud()->dataSud(data(idx.row(), ColSudID).toInt(), ModelSud::ColSW).toDouble();
double extrakt = data(idx.row(), ColExtrakt).toDouble();
return extrakt / sw * 100;
}
case ColZugabeDatum:
{
QDateTime braudatum = bh->modelSud()->dataSud(data(idx.row(), ColSudID), ModelSud::ColBraudatum).toDateTime();
Expand Down Expand Up @@ -191,6 +198,11 @@ bool ModelWeitereZutatenGaben::setDataExt(const QModelIndex &idx, const QVariant
}
return true;
}
case ColExtraktProzent:
{
double sw = bh->modelSud()->dataSud(data(idx.row(), ColSudID).toInt(), ModelSud::ColSW).toDouble();
return setDataExt(index(idx.row(), ColExtrakt), value.toDouble() * sw / 100);
}
case ColZugabeDatum:
{
QDateTime braudatum = bh->modelSud()->dataSud(data(idx.row(), ColSudID), ModelSud::ColBraudatum).toDateTime();
Expand Down
1 change: 1 addition & 0 deletions kleiner-brauhelfer-core/modelweiterezutatengaben.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class LIB_EXPORT ModelWeitereZutatenGaben : public SqlTableModel
// virtual
ColDeleted,
ColExtrakt,
ColExtraktProzent,
ColZugabeDatum,
ColEntnahmeDatum,
ColAbfuellbereit,
Expand Down
56 changes: 56 additions & 0 deletions kleiner-brauhelfer/tabrezept.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ TabRezept::TabRezept(QWidget *parent) :
connect(bh->sud()->modelWeitereZutatenGaben(), SIGNAL(layoutChanged()), this, SLOT(weitereZutatenGaben_modified()));
connect(bh->sud()->modelWeitereZutatenGaben(), SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(weitereZutatenGaben_modified()));
connect(bh->sud()->modelWeitereZutatenGaben(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(weitereZutatenGaben_modified()));
connect(bh->sud()->modelWeitereZutatenGaben(), SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
this, SLOT(updateExtrakt()));

connect(bh->sud()->modelWasseraufbereitung(), SIGNAL(layoutChanged()), this, SLOT(wasseraufbereitung_modified()));
connect(bh->sud()->modelWasseraufbereitung(), SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(wasseraufbereitung_modified()));
Expand Down Expand Up @@ -853,6 +855,53 @@ void TabRezept::on_btnRastenUebernehmen_clicked()
}
}

void TabRezept::updateExtrakt()
{
double p = 100.0;
for (int i = 0; i < ui->layoutMalzGaben->count(); ++i)
{
WdgMalzGabe* wdg = static_cast<WdgMalzGabe*>(ui->layoutMalzGaben->itemAt(i)->widget());
p -= wdg->prozentExtrakt();
}
for (int i = 0; i < ui->layoutZusaetzeMaischen->count(); ++i)
{
WdgWeitereZutatGabe* wdg = static_cast<WdgWeitereZutatGabe*>(ui->layoutZusaetzeMaischen->itemAt(i)->widget());
p -= wdg->prozentExtrakt();
}
for (int i = 0; i < ui->layoutZusaetzeKochen->count(); ++i)
{
WdgWeitereZutatGabe* wdg = static_cast<WdgWeitereZutatGabe*>(ui->layoutZusaetzeKochen->itemAt(i)->widget());
p -= wdg->prozentExtrakt();
}
for (int i = 0; i < ui->layoutZusaetzeGaerung->count(); ++i)
{
WdgWeitereZutatGabe* wdg = static_cast<WdgWeitereZutatGabe*>(ui->layoutZusaetzeGaerung->itemAt(i)->widget());
p -= wdg->prozentExtrakt();
}
if (std::fabs(p) < 0.01)
p = 0.0;
for (int i = 0; i < ui->layoutMalzGaben->count(); ++i)
{
WdgMalzGabe* wdg = static_cast<WdgMalzGabe*>(ui->layoutMalzGaben->itemAt(i)->widget());
wdg->setFehlProzentExtrakt(p);
}
for (int i = 0; i < ui->layoutZusaetzeMaischen->count(); ++i)
{
WdgWeitereZutatGabe* wdg = static_cast<WdgWeitereZutatGabe*>(ui->layoutZusaetzeMaischen->itemAt(i)->widget());
wdg->setFehlProzentExtrakt(p);
}
for (int i = 0; i < ui->layoutZusaetzeKochen->count(); ++i)
{
WdgWeitereZutatGabe* wdg = static_cast<WdgWeitereZutatGabe*>(ui->layoutZusaetzeKochen->itemAt(i)->widget());
wdg->setFehlProzentExtrakt(p);
}
for (int i = 0; i < ui->layoutZusaetzeGaerung->count(); ++i)
{
WdgWeitereZutatGabe* wdg = static_cast<WdgWeitereZutatGabe*>(ui->layoutZusaetzeGaerung->itemAt(i)->widget());
wdg->setFehlProzentExtrakt(p);
}
}

void TabRezept::malzGaben_modified()
{
const int nModel = bh->sud()->modelMalzschuettung()->rowCount();
Expand Down Expand Up @@ -886,6 +935,7 @@ void TabRezept::updateMalzGaben()
wdg->setFehlProzent(p);
}
ui->wdgWarnungMalz->setVisible(p != 0.0 && count > 1);
updateExtrakt();
}
else
{
Expand Down Expand Up @@ -1368,6 +1418,12 @@ void TabRezept::weitereZutatenGaben_modified()
delete ui->layoutZusaetzeGaerung->itemAt(ui->layoutZusaetzeGaerung->count() - 1)->widget();
for (int i = 0; i < ui->layoutZusaetzeGaerung->count(); ++i)
static_cast<WdgWeitereZutatGabe*>(ui->layoutZusaetzeGaerung->itemAt(i)->widget())->updateValues();

Brauhelfer::SudStatus status = static_cast<Brauhelfer::SudStatus>(bh->sud()->getStatus());
if (status == Brauhelfer::SudStatus::Rezept)
{
updateExtrakt();
}
}

void TabRezept::wasseraufbereitung_modified()
Expand Down
2 changes: 2 additions & 0 deletions kleiner-brauhelfer/tabrezept.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ private slots:
void on_btnNeueRast_clicked();
void on_btnRastenUebernehmen_clicked();

void updateExtrakt();

void malzGaben_modified();
void updateMalzGaben();
void updateMalzDiagram();
Expand Down
39 changes: 37 additions & 2 deletions kleiner-brauhelfer/widgets/wdgmalzgabe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ WdgMalzGabe::WdgMalzGabe(int row, QLayout *parentLayout, QWidget *parent) :
WdgAbstractProxy(bh->sud()->modelMalzschuettung(), row, parentLayout, parent),
ui(new Ui::WdgMalzGabe),
mEnabled(true),
mFehlProzent(0)
mFehlProzent(0),
mFehlProzentExtrakt(0)
{
ui->setupUi(this);
if (gSettings->theme() == Settings::Theme::Dark)
Expand All @@ -35,6 +36,7 @@ WdgMalzGabe::WdgMalzGabe(int row, QLayout *parentLayout, QWidget *parent) :
setPalette(pal);

ui->btnKorrektur->setError(true);
ui->btnKorrekturExtrakt->setError(true);
ui->lblWarnung->setPalette(gSettings->paletteErrorLabel);

updateValues();
Expand Down Expand Up @@ -84,6 +86,7 @@ void WdgMalzGabe::updateValues()
ui->tbExtraktProzent->setReadOnly(!mEnabled);
ui->tbExtrakt->setReadOnly(!mEnabled);
ui->btnKorrektur->setVisible(mEnabled);
ui->btnKorrekturExtrakt->setVisible(mEnabled);
ui->btnNachOben->setVisible(mEnabled);
ui->btnNachUnten->setVisible(mEnabled);
ui->lblWarnung->setVisible(false);
Expand All @@ -96,7 +99,6 @@ void WdgMalzGabe::updateValues()
ui->tbMengeProzent->setValue(data(ModelMalzschuettung::ColProzent).toDouble());
if (!ui->tbMenge->hasFocus())
ui->tbMenge->setValue(data(ModelMalzschuettung::Colerg_Menge).toDouble());

if (!ui->tbExtrakt->hasFocus())
ui->tbExtrakt->setValue(data(ModelMalzschuettung::ColExtrakt).toDouble());
if (!ui->tbExtraktProzent->hasFocus())
Expand Down Expand Up @@ -126,6 +128,8 @@ void WdgMalzGabe::updateValues()
}
ui->tbMengeProzent->setError(ui->tbMengeProzent->value() == 0.0 || mFehlProzent != 0.0);
ui->btnKorrektur->setVisible(mFehlProzent != 0.0);
ui->tbExtraktProzent->setError(ui->tbExtraktProzent->value() == 0.0 || mFehlProzentExtrakt != 0.0);
ui->btnKorrekturExtrakt->setVisible(mFehlProzentExtrakt != 0.0 && qAbs(mFehlProzentExtrakt - mFehlProzent) > 0.001);

int max = bh->modelMalz()->data(rowRohstoff, ModelMalz::ColMaxProzent).toInt();
if (max > 0 && ui->tbMengeProzent->value() > max)
Expand Down Expand Up @@ -221,6 +225,37 @@ void WdgMalzGabe::on_btnKorrektur_clicked()
setData(ModelMalzschuettung::ColProzent, prozent() + mFehlProzent);
}

double WdgMalzGabe::prozentExtrakt() const
{
return data(ModelMalzschuettung::ColExtraktProzent).toDouble();
}

double WdgMalzGabe::fehlProzentExtrakt() const
{
return mFehlProzentExtrakt;
}

void WdgMalzGabe::setFehlProzentExtrakt(double value)
{
if (value < 0.0)
{
double p = prozentExtrakt();
if (p == 0.0)
value = 0.0;
else if (value < -p)
value = -p;
}
mFehlProzentExtrakt = value;
QString text = (value < 0.0 ? "" : "+") + QLocale().toString(value, 'f', 2) + " %";
ui->btnKorrekturExtrakt->setText(text);
}

void WdgMalzGabe::on_btnKorrekturExtrakt_clicked()
{
setFocus();
setData(ModelMalzschuettung::ColExtraktProzent, prozentExtrakt() + mFehlProzentExtrakt);
}

void WdgMalzGabe::on_btnLoeschen_clicked()
{
remove();
Expand Down
5 changes: 5 additions & 0 deletions kleiner-brauhelfer/widgets/wdgmalzgabe.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ class WdgMalzGabe : public WdgAbstractProxy
double prozent() const;
double fehlProzent() const;
void setFehlProzent(double value);
double prozentExtrakt() const;
double fehlProzentExtrakt() const;
void setFehlProzentExtrakt(double value);

public slots:
void updateValues();
Expand All @@ -32,6 +35,7 @@ private slots:
void on_tbExtraktProzent_valueChanged(double value);
void on_btnLoeschen_clicked();
void on_btnKorrektur_clicked();
void on_btnKorrekturExtrakt_clicked();
void on_btnAufbrauchen_clicked();
void on_btnNachOben_clicked();
void on_btnNachUnten_clicked();
Expand All @@ -44,6 +48,7 @@ private slots:
bool mEnabled;
bool mValid;
double mFehlProzent;
double mFehlProzentExtrakt;
};

#endif // WDGMALZGABE_H
7 changes: 7 additions & 0 deletions kleiner-brauhelfer/widgets/wdgmalzgabe.ui
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,13 @@
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="PushButton" name="btnKorrekturExtrakt">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Hier wird ein &lt;span style=&quot; font-weight:600;&quot;&gt;prozentualer Korrekturfaktor &lt;/span&gt;ausgegeben, wenn die Extraktmenge 100% unter- oder überschreitet.&lt;/p&gt;&lt;p&gt;Die Schüttung berechnet sich u.a. aus eingesetzten Malzen und Rohfrucht, der gewählten Stammwürze, dem Farbwert, der Rastdauer und anderen Faktoren. Ein &lt;span style=&quot; font-weight:600;&quot;&gt;negativer Wert&lt;/span&gt; gibt an, dass &lt;span style=&quot; font-weight:600;&quot;&gt;zu wenig Rohstoffmenge &lt;/span&gt;gewählt wurde, ein &lt;span style=&quot; font-weight:600;&quot;&gt;positiver Wert&lt;/span&gt;, dass eine &lt;span style=&quot; font-weight:600;&quot;&gt;zu große Rohstoffmenge &lt;/span&gt;gewählt wurde.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
Expand Down
51 changes: 49 additions & 2 deletions kleiner-brauhelfer/widgets/wdgweiterezutatgabe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ extern Settings* gSettings;
WdgWeitereZutatGabe::WdgWeitereZutatGabe(Brauhelfer::ZusatzZeitpunkt zeitpunkt, int row, QLayout* parentLayout, QWidget *parent) :
WdgAbstractProxy(nullptr, row, parentLayout, parent),
ui(new Ui::WdgWeitereZutatGabe),
mEnabled(true)
mEnabled(true),
mFehlProzentExtrakt(0)
{
ProxyModel* proxy = new ProxyModel(this);
proxy->setSourceModel(bh->sud()->modelWeitereZutatenGaben());
Expand All @@ -40,6 +41,7 @@ WdgWeitereZutatGabe::WdgWeitereZutatGabe(Brauhelfer::ZusatzZeitpunkt zeitpunkt,

ui->tbMenge->setErrorOnLimit(true);
ui->tbMengeTotal->setErrorOnLimit(true);
ui->btnKorrekturExtrakt->setError(true);

updateValues();
connect(bh, SIGNAL(discarded()), this, SLOT(updateValues()));
Expand Down Expand Up @@ -100,6 +102,8 @@ void WdgWeitereZutatGabe::updateValues()
ui->tbMenge->setReadOnly(!mEnabled);
ui->tbMengeTotal->setReadOnly(!mEnabled);
ui->tbExtrakt->setReadOnly(!mEnabled);
ui->tbExtraktProzent->setReadOnly(!mEnabled);
ui->btnKorrekturExtrakt->setVisible(mEnabled);
ui->tbKochdauer->setReadOnly(!mEnabled);
ui->tbZugabeNach->setReadOnly(!mEnabled);
ui->tbDatumVon->setReadOnly(!mEnabled);
Expand Down Expand Up @@ -186,12 +190,18 @@ void WdgWeitereZutatGabe::updateValues()
ui->tbKochdauer->setValue(dauer);
}

bool visible = data(ModelWeitereZutatenGaben::ColAusbeute).toDouble() > 0;
if (!ui->tbExtrakt->hasFocus())
ui->tbExtrakt->setValue(data(ModelWeitereZutatenGaben::ColExtrakt).toDouble());
if (!ui->tbExtraktProzent->hasFocus())
ui->tbExtraktProzent->setValue(data(ModelWeitereZutatenGaben::ColExtraktProzent).toDouble());
bool visible = data(ModelWeitereZutatenGaben::ColAusbeute).toDouble() > 0;
ui->tbExtrakt->setVisible(visible);
ui->tbExtraktProzent->setVisible(visible);
ui->lblExtrakt->setVisible(visible);
ui->lblExtraktEinheit->setVisible(visible);
ui->lblExtraktProzent->setVisible(visible);
ui->tbExtraktProzent->setError(ui->tbExtraktProzent->value() == 0.0 || mFehlProzentExtrakt != 0.0);
ui->btnKorrekturExtrakt->setVisible(visible && mFehlProzentExtrakt != 0.0);

ui->cbEntnahme->setChecked(entnahmeindex == Brauhelfer::ZusatzEntnahmeindex::OhneEntnahme);
if (!ui->tbZugabeNach->hasFocus())
Expand Down Expand Up @@ -454,6 +464,43 @@ void WdgWeitereZutatGabe::on_tbExtrakt_valueChanged(double value)
setData(ModelWeitereZutatenGaben::ColExtrakt, value);
}

void WdgWeitereZutatGabe::on_tbExtraktProzent_valueChanged(double value)
{
if (ui->tbExtraktProzent->hasFocus())
setData(ModelWeitereZutatenGaben::ColExtraktProzent, value);
}

double WdgWeitereZutatGabe::prozentExtrakt() const
{
return data(ModelWeitereZutatenGaben::ColExtraktProzent).toDouble();
}

double WdgWeitereZutatGabe::fehlProzentExtrakt() const
{
return mFehlProzentExtrakt;
}

void WdgWeitereZutatGabe::setFehlProzentExtrakt(double value)
{
if (value < 0.0)
{
double p = prozentExtrakt();
if (p == 0.0)
value = 0.0;
else if (value < -p)
value = -p;
}
mFehlProzentExtrakt = value;
QString text = (value < 0.0 ? "" : "+") + QLocale().toString(value, 'f', 2) + " %";
ui->btnKorrekturExtrakt->setText(text);
}

void WdgWeitereZutatGabe::on_btnKorrekturExtrakt_clicked()
{
setFocus();
setData(ModelWeitereZutatenGaben::ColExtraktProzent, prozentExtrakt() + mFehlProzentExtrakt);
}

void WdgWeitereZutatGabe::on_btnZugeben_clicked()
{
QDate currentDate = QDate::currentDate();
Expand Down
6 changes: 6 additions & 0 deletions kleiner-brauhelfer/widgets/wdgweiterezutatgabe.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ class WdgWeitereZutatGabe : public WdgAbstractProxy
bool isEnabled() const;
bool isValid() const;
QString name() const;
double prozentExtrakt() const;
double fehlProzentExtrakt() const;
void setFehlProzentExtrakt(double value);

public slots:
void updateValues();
Expand All @@ -29,6 +32,8 @@ private slots:
void on_tbMengeTotal_valueChanged(double value);
void on_tbKochdauer_valueChanged(int value);
void on_tbExtrakt_valueChanged(double value);
void on_tbExtraktProzent_valueChanged(double value);
void on_btnKorrekturExtrakt_clicked();
void on_btnZugeben_clicked();
void on_cbEntnahme_clicked(bool checked);
void on_tbZugabeNach_valueChanged(int arg1);
Expand All @@ -48,6 +53,7 @@ private slots:
Ui::WdgWeitereZutatGabe *ui;
bool mEnabled;
bool mValid;
double mFehlProzentExtrakt;
};

#endif // WDGWEITEERZUTATGABE_H

0 comments on commit 7a1b498

Please sign in to comment.