Sat, 11 Jun 2022 20:58:46 +0200
The equipment import is now final.
src/ImportXML.cpp | file | annotate | diff | comparison | revisions | |
src/global.h | file | annotate | diff | comparison | revisions |
--- a/src/ImportXML.cpp Sat Jun 11 19:29:20 2022 +0200 +++ b/src/ImportXML.cpp Sat Jun 11 20:58:46 2022 +0200 @@ -91,23 +91,56 @@ * Equipment */ total++; - hasnotes = false; - sql = "INSERT INTO inventory_equipments SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); - sql.append("', top_up_water=0"); + Equipment *eq = new Equipment; + eq->notes = ""; + eq->top_up_kettle = eq->top_up_water = 0; while (xml->readNext()) { if (xml->atEnd()) break; if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) { - if (! hasnotes) - sql.append(", notes=''"); - query.exec(sql); + query.prepare("INSERT INTO inventory_equipments SET name=:name, boil_size=:boil_size, " + "batch_size=:batch_size, tun_volume=:tun_volume, tun_weight=:tun_weight, " + "tun_specific_heat=:tun_specific_heat, tun_material=:tun_material, tun_height=:tun_height, " + "top_up_water=:top_up_water, trub_chiller_loss=:chiller_loss, evap_rate=:evap_rate, " + "boil_time=:boil_time, calc_boil_volume=:calcboil, top_up_kettle=:top_up_kettle, " + "hop_utilization=:hopfactor, notes=:notes, lauter_volume=:lauter_volume, " + "lauter_height=:lauter_height, lauter_deadspace=:lauter_deadspace, kettle_volume=:kettle_volume, " + "kettle_height=:kettle_height, mash_volume=:mash_volume, mash_max=:mash_max, " + "efficiency=:efficiency, uuid=:uuid"); + query.bindValue(":name", eq->name); + query.bindValue(":boil_size", QString("%1").arg(eq->boil_size, 2, 'f', 1, '0')); + query.bindValue(":batch_size", QString("%1").arg(eq->batch_size, 3, 'f', 2, '0')); + query.bindValue(":tun_volume", QString("%1").arg(eq->tun_volume, 2, 'f', 1, '0')); + query.bindValue(":tun_weight", QString("%1").arg(eq->tun_weight, 2, 'f', 1, '0')); + query.bindValue(":tun_specific_heat", QString("%1").arg(eq->tun_specific_heat, 4, 'f', 3, '0')); + query.bindValue(":tun_material", eq->tun_material); + query.bindValue(":tun_height", QString("%1").arg(eq->tun_height, 4, 'f', 3, '0')); + query.bindValue(":top_up_water", QString("%1").arg(eq->top_up_water, 2, 'f', 1, '0')); + query.bindValue(":chiller_loss", QString("%1").arg(eq->trub_chiller_loss, 2, 'f', 1, '0')); + /* The evaporation in beerxml is percentage, but we use the real volume per hour */ + query.bindValue(":evap_rate", QString("%1").arg((eq->evap_rate / 100) * eq->boil_size, 3, 'f', 2, '0')); + query.bindValue(":boil_time", QString("%1").arg(eq->boil_time, 1, 'f', 0, '0')); + query.bindValue(":calcboil", eq->calc_boil_volume ? 1:0); + query.bindValue(":top_up_kettle", QString("%1").arg(eq->top_up_kettle, 2, 'f', 1, '0')); + query.bindValue(":hopfactor", QString("%1").arg(eq->hop_utilization, 1, 'f', 0, '0')); + query.bindValue(":notes", eq->notes); + query.bindValue(":lauter_volume", QString("%1").arg(eq->lauter_volume, 2, 'f', 1, '0')); + query.bindValue(":lauter_height", QString("%1").arg(eq->lauter_height, 4, 'f', 3, '0')); + query.bindValue(":lauter_deadspace", QString("%1").arg(eq->lauter_deadspace, 2, 'f', 1, '0')); + query.bindValue(":kettle_volume", QString("%1").arg(eq->kettle_volume, 2, 'f', 1, '0')); + query.bindValue(":kettle_height", QString("%1").arg(eq->kettle_height, 4, 'f', 3, '0')); + query.bindValue(":mash_volume", QString("%1").arg(eq->mash_volume, 2, 'f', 1, '0')); + query.bindValue(":mash_max", QString("%1").arg(eq->mash_max, 2, 'f', 1, '0')); + query.bindValue(":efficiency", QString("%1").arg(eq->efficiency, 2, 'f', 1, '0')); + query.bindValue(":uuid", QUuid::createUuid().toString().mid(1, 36)); + query.exec(); if (query.lastError().isValid()) { - qWarning() << sql << query.lastError(); + qWarning() << query.lastError(); errors++; } ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + delete eq; break; } if ((xml->tokenType() == QXmlStreamReader::StartElement) && @@ -120,48 +153,57 @@ (xml->name() == "ATTENUATION_FACTOR_CONSTANT"))) { // Ignore. } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { - sql.append(QString(", name='%1'").arg(xml->readElementText())); + eq->name = xml->readElementText(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { - sql.append(QString(", notes='%1'").arg(xml->readElementText())); - hasnotes = true; + eq->notes = xml->readElementText(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) { - sql.append(QString(", boil_size=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->boil_size = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) { - sql.append(QString(", batch_size=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); + eq->batch_size = xml->readElementText().toDouble(); + qDebug() << eq->batch_size; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_VOLUME")) { - sql.append(QString(", tun_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->tun_volume = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_WEIGHT")) { - sql.append(QString(", tun_weight=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->tun_weight = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_SPECIFIC_HEAT")) { - sql.append(QString(", tun_specific_heat=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + eq->tun_specific_heat = xml->readElementText().toDouble(); + if (eq->tun_specific_heat == 0.22) + eq->tun_material = 1; + else if (eq->tun_specific_heat == 0.46) + eq->tun_material = 2; + else if (eq->tun_specific_heat == 0.092) + eq->tun_material = 3; + else + eq->tun_material = 0; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_HEIGHT")) { - sql.append(QString(", tun_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + eq->tun_height = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TRUB_CHILLER_LOSS")) { - sql.append(QString(", trub_chiller_loss=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->trub_chiller_loss = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EVAP_RATE")) { - sql.append(QString(", evap_rate=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); + eq->evap_rate = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_TIME")) { - sql.append(QString(", boil_time=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0')); + eq->boil_time = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CALC_BOIL_VOLUME")) { - sql.append(QString(", calc_boil_volume=%1").arg((xml->readElementText() == "TRUE") ? "true":"false")); + eq->calc_boil_volume = (xml->readElementText() == "TRUE") ? true:false; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TOP_UP_KETTLE")) { - sql.append(QString(", top_up_kettle=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->top_up_kettle = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP_UTILIZATION")) { - sql.append(QString(", hop_utilization=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0')); + eq->hop_utilization = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_VOLUME")) { - sql.append(QString(", lauter_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->lauter_volume = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_HEIGHT")) { - sql.append(QString(", lauter_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + eq->lauter_height = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_DEADSPACE")) { - sql.append(QString(", lauter_deadspace=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->lauter_deadspace = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_VOLUME")) { - sql.append(QString(", kettle_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->kettle_volume = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_HEIGHT")) { - sql.append(QString(", kettle_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + eq->kettle_height = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH_VOLUME")) { - sql.append(QString(", mash_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->mash_volume = xml->readElementText().toDouble(); + eq->mash_max = eq->mash_volume / 3; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EFFICIENCY")) { - sql.append(QString(", efficiency=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + eq->efficiency = xml->readElementText().toDouble(); } else { if (xml->tokenType() == QXmlStreamReader::StartElement) qDebug() << "2 " << xml->tokenType() << xml->name(); @@ -680,6 +722,7 @@ log.append(QString(" ----- ------\n")); log.append(QString("total %1 %2\n").arg(total, 3).arg(errors, 3)); ui->logEdit->setPlainText(log); + qInfo() << "Import" << total << "records, " << total - errors << "ok, " << errors << "errors"; ui->progressBar->setValue(100); if (xml->hasError()) {
--- a/src/global.h Sat Jun 11 19:29:20 2022 +0200 +++ b/src/global.h Sat Jun 11 20:58:46 2022 +0200 @@ -175,6 +175,36 @@ }; +struct Equipment +{ + QString name; + double boil_size; + double batch_size; + double tun_volume; + double tun_weight; + double tun_specific_heat; + int tun_material; + double tun_height; + double top_up_water; + double trub_chiller_loss; + double evap_rate; + double boil_time; + bool calc_boil_volume; + double top_up_kettle; + double hop_utilization; + QString notes; + double lauter_volume; + double lauter_height; + double lauter_deadspace; + double kettle_volume; + double kettle_height; + double mash_volume; + double mash_max; + double efficiency; + QString uuid; +}; + + struct Style { QString name;