src/ImportXML.cpp

changeset 277
2228d833c52a
parent 276
7316a419334d
child 278
ed562a2a4ca4
--- 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()) {

mercurial