diff -r 2228d833c52a -r ed562a2a4ca4 src/ImportXML.cpp --- a/src/ImportXML.cpp Sat Jun 11 20:58:46 2022 +0200 +++ b/src/ImportXML.cpp Sun Jun 12 11:52:18 2022 +0200 @@ -17,6 +17,7 @@ #include "ImportXML.h" #include "../ui/ui_ImportXML.h" #include "global.h" +#include "Utils.h" #include "MainWindow.h" @@ -47,9 +48,8 @@ void ImportXML::on_openButton_clicked() { QSqlQuery query; - QString sql, log; + QString log; int total = 0, errors = 0; - bool hasnotes; QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath() + "/*.xml", tr("Files (*.xml)")); if (fileName == 0) { @@ -346,7 +346,6 @@ } } } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) { -qDebug() << "start FERMENTABLES"; /* * Fermentables */ @@ -362,21 +361,47 @@ * Fermentable */ total++; - hasnotes = false; - sql = "INSERT INTO inventory_fermentables SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); - sql.append("'"); + Fermentables *f = new Fermentables; + f->f_supplier = f->f_origin = f->f_notes = ""; + f->f_yield = 80; + f->f_max_in_batch = 100; + f->f_recommend_mash = true; + f->f_protein = f->f_dissolved_protein = f->f_coarse_fine_diff = f->f_moisture = f->f_diastatic_power = 0; + f->f_di_ph = 5.7; + f->f_acid_to_ph_57 = 0; while (xml->readNext()) { if (xml->atEnd()) break; if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) { - qDebug() << "hasnotes" << hasnotes; - if (! hasnotes) - sql.append(", notes=''"); - query.exec(sql); + query.prepare("INSERT INTO inventory_fermentables SET name=:name, type=:type, yield=:yield, color=:color, " + "add_after_boil=:addafter, origin=:origin, supplier=:supplier, notes=:notes, coarse_fine_diff=:coarse, " + "moisture=:moisture, diastatic_power=:diastatic, protein=:protein, dissolved_protein=:dissolved, " + "max_in_batch=:maxinbatch, recommend_mash=:mash, added=:added, di_ph=:diph, " + "acid_to_ph_57=:acidph, graintype=:graintype, uuid = :uuid"); + query.bindValue(":name", f->f_name); + query.bindValue(":type", f->f_type); + query.bindValue(":yield", QString("%1").arg(f->f_yield, 2, 'f', 1, '0')); + query.bindValue(":color", QString("%1").arg(Utils::srm_to_ebc(f->f_color), 1, 'f', 0, '0')); + query.bindValue(":addafter", f->f_add_after_boil ? 1:0); + query.bindValue(":origin", f->f_origin); + query.bindValue(":supplier", f->f_supplier); + query.bindValue(":notes", f->f_notes); + query.bindValue(":coarse", QString("%1").arg(f->f_coarse_fine_diff, 4, 'f', 3, '0')); + query.bindValue(":moisture", QString("%1").arg(f->f_moisture, 4, 'f', 3, '0')); + query.bindValue(":diastatic", Utils::kolbach_to_lintner(f->f_diastatic_power)); + query.bindValue(":protein", QString("%1").arg(f->f_protein, 4, 'f', 3, '0')); + query.bindValue(":dissolved", QString("%1").arg(f->f_dissolved_protein, 4, 'f', 3, '0')); + query.bindValue(":maxinbatch", QString("%1").arg(f->f_max_in_batch, 2, 'f', 1, '0')); + query.bindValue(":mash", f->f_recommend_mash ? 1:0); + query.bindValue(":added", f->f_added); + query.bindValue(":diph", QString("%1").arg(f->f_di_ph, 6, 'f', 5, '0')); + query.bindValue(":acidph", QString("%1").arg(f->f_acid_to_ph_57, 6, 'f', 5, '0')); + query.bindValue(":graintype", f->f_graintype); + 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)); @@ -385,85 +410,81 @@ if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "VERSION") || (xml->name() == "DISPLAY_COST") || (xml->name() == "DISPLAY_COLOR") || (xml->name() == "INVENTORY") || + (xml->name() == "COST") || (xml->name() == "ALWAYS_ON_STOCK") || (xml->name() == "PERCENTAGE") || (xml->name() == "ADJUST_TO_TOTAL_100") )) { // Ignore. } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { - sql.append(QString(", name='%1'").arg(xml->readElementText())); - } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COST")) { - sql.append(QString(", cost=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); + f->f_name = xml->readElementText(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { QString temp = xml->readElementText(); - if (temp == "Grain") - sql.append(", type=0"); - else if (temp == "Sugar") - sql.append(", type=1"); + if (temp == "Sugar") + f->f_type = 1; else if (temp == "Extract") - sql.append(", type=2"); + f->f_type = 2; else if (temp == "Dry extract") - sql.append(", type=3"); + f->f_type = 3; else if (temp == "Adjunct") - sql.append(", type=4"); + f->f_type = 4; + else + f->f_type = 0; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ORIGIN")) { - sql.append(QString(", origin='%1'").arg(xml->readElementText())); + f->f_origin = xml->readElementText(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SUPPLIER")) { - sql.append(QString(", supplier='%1'").arg(xml->readElementText())); + f->f_supplier = xml->readElementText(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { - sql.append(QString(", notes='%1'").arg(xml->readElementText())); - hasnotes = true; - } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ALWAYS_ON_STOCK")) { - sql.append(QString(", always_on_stock=%1").arg(xml->readElementText().toLower())); + f->f_notes = xml->readElementText(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YIELD")) { - sql.append(QString(", yield=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_yield = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COARSE_FINE_DIFF")) { - sql.append(QString(", coarse_fine_diff=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_coarse_fine_diff = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MOISTURE")) { - sql.append(QString(", moisture=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_moisture = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DIASTATIC_POWER")) { - sql.append(QString(", diastatic_power=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_diastatic_power = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAX_IN_BATCH")) { - sql.append(QString(", max_in_batch=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_max_in_batch = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECOMMEND_MASH")) { - sql.append(QString(", recommend_mash=%1").arg(xml->readElementText().toLower())); + f->f_recommend_mash = (xml->readElementText() == "TRUE") ? true:false; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "GRAINTYPE")) { QString temp = xml->readElementText(); - if (temp == "Base") - sql.append(QString(", graintype=0")); - else if (temp == "Roast") - sql.append(QString(", graintype=1")); + if (temp == "Roast") + f->f_graintype = 1; else if (temp == "Crystal") - sql.append(QString(", graintype=2")); + f->f_graintype = 2; else if (temp == "Kilned") - sql.append(QString(", graintype=3")); + f->f_graintype = 3; else if (temp == "Sour Malt") - sql.append(QString(", graintype=4")); + f->f_graintype = 4; else if (temp == "Special") - sql.append(QString(", graintype=5")); + f->f_graintype = 5; else if (temp == "No malt") - sql.append(QString(", graintype=6")); + f->f_graintype = 6; + else + f->f_graintype = 0; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADDED")) { QString temp = xml->readElementText(); - if (temp == "Mash") - sql.append(QString(", added=0")); - else if (temp == "Boil") - sql.append(QString(", added=1")); + if (temp == "Boil") + f->f_added = 1; else if (temp == "Fermentation") - sql.append(QString(", added=2")); + f->f_added = 2; else if (temp == "Lagering") - sql.append(QString(", added=3")); + f->f_added = 3; else if (temp == "Bottle") - sql.append(QString(", added=4")); + f->f_added = 4; + else + f->f_added = 0; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADD_AFTER_BOIL")) { - sql.append(QString(", add_after_boil=%1").arg(xml->readElementText().toLower())); + f->f_add_after_boil = (xml->readElementText() == "TRUE") ? true:false; } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR")) { - sql.append(QString(", color=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_color = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROTEIN")) { - sql.append(QString(", protein=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_protein = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DISSOLVED_PROTEIN")) { - sql.append(QString(", dissolved_protein=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); + f->f_dissolved_protein = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DI_pH")) { - sql.append(QString(", di_ph=%1").arg(xml->readElementText().toDouble(), 6, 'f', 5, '0')); + f->f_di_ph = xml->readElementText().toDouble(); } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ACID_TO_pH_5.7")) { - sql.append(QString(", acid_to_ph_57=%1").arg(xml->readElementText().toDouble(), 6, 'f', 5, '0')); + f->f_acid_to_ph_57 = xml->readElementText().toDouble(); } else { if (xml->tokenType() == QXmlStreamReader::StartElement) qDebug() << "2 " << xml->tokenType() << xml->name(); @@ -487,8 +508,6 @@ * Hop */ total++; - sql = "INSERT INTO inventory_hops SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); while (xml->readNext()) { if (xml->atEnd()) @@ -527,8 +546,6 @@ * Misc */ total++; - sql = "INSERT INTO inventory_miscs SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); while (xml->readNext()) { if (xml->atEnd()) @@ -567,8 +584,6 @@ * Yeast */ total++; - sql = "INSERT INTO inventory_yeasts SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); while (xml->readNext()) { if (xml->atEnd()) @@ -607,8 +622,6 @@ * Water */ total++; - sql = "INSERT INTO inventory_waters SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); while (xml->readNext()) { if (xml->atEnd()) @@ -647,8 +660,6 @@ * Recipe */ total++; - sql = "INSERT INTO recipes SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); while (xml->readNext()) { if (xml->atEnd()) @@ -687,8 +698,6 @@ * Mash */ total++; - sql = "INSERT INTO inventory_mashs SET uuid='"; - sql.append(QUuid::createUuid().toString().mid(1, 36)); while (xml->readNext()) { if (xml->atEnd())