src/ImportXML.cpp

changeset 277
2228d833c52a
parent 276
7316a419334d
child 278
ed562a2a4ca4
equal deleted inserted replaced
276:7316a419334d 277:2228d833c52a
89 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENT")) { 89 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENT")) {
90 /* 90 /*
91 * Equipment 91 * Equipment
92 */ 92 */
93 total++; 93 total++;
94 hasnotes = false; 94 Equipment *eq = new Equipment;
95 sql = "INSERT INTO inventory_equipments SET uuid='"; 95 eq->notes = "";
96 sql.append(QUuid::createUuid().toString().mid(1, 36)); 96 eq->top_up_kettle = eq->top_up_water = 0;
97 sql.append("', top_up_water=0");
98 97
99 while (xml->readNext()) { 98 while (xml->readNext()) {
100 if (xml->atEnd()) 99 if (xml->atEnd())
101 break; 100 break;
102 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) { 101 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) {
103 if (! hasnotes) 102 query.prepare("INSERT INTO inventory_equipments SET name=:name, boil_size=:boil_size, "
104 sql.append(", notes=''"); 103 "batch_size=:batch_size, tun_volume=:tun_volume, tun_weight=:tun_weight, "
105 query.exec(sql); 104 "tun_specific_heat=:tun_specific_heat, tun_material=:tun_material, tun_height=:tun_height, "
105 "top_up_water=:top_up_water, trub_chiller_loss=:chiller_loss, evap_rate=:evap_rate, "
106 "boil_time=:boil_time, calc_boil_volume=:calcboil, top_up_kettle=:top_up_kettle, "
107 "hop_utilization=:hopfactor, notes=:notes, lauter_volume=:lauter_volume, "
108 "lauter_height=:lauter_height, lauter_deadspace=:lauter_deadspace, kettle_volume=:kettle_volume, "
109 "kettle_height=:kettle_height, mash_volume=:mash_volume, mash_max=:mash_max, "
110 "efficiency=:efficiency, uuid=:uuid");
111 query.bindValue(":name", eq->name);
112 query.bindValue(":boil_size", QString("%1").arg(eq->boil_size, 2, 'f', 1, '0'));
113 query.bindValue(":batch_size", QString("%1").arg(eq->batch_size, 3, 'f', 2, '0'));
114 query.bindValue(":tun_volume", QString("%1").arg(eq->tun_volume, 2, 'f', 1, '0'));
115 query.bindValue(":tun_weight", QString("%1").arg(eq->tun_weight, 2, 'f', 1, '0'));
116 query.bindValue(":tun_specific_heat", QString("%1").arg(eq->tun_specific_heat, 4, 'f', 3, '0'));
117 query.bindValue(":tun_material", eq->tun_material);
118 query.bindValue(":tun_height", QString("%1").arg(eq->tun_height, 4, 'f', 3, '0'));
119 query.bindValue(":top_up_water", QString("%1").arg(eq->top_up_water, 2, 'f', 1, '0'));
120 query.bindValue(":chiller_loss", QString("%1").arg(eq->trub_chiller_loss, 2, 'f', 1, '0'));
121 /* The evaporation in beerxml is percentage, but we use the real volume per hour */
122 query.bindValue(":evap_rate", QString("%1").arg((eq->evap_rate / 100) * eq->boil_size, 3, 'f', 2, '0'));
123 query.bindValue(":boil_time", QString("%1").arg(eq->boil_time, 1, 'f', 0, '0'));
124 query.bindValue(":calcboil", eq->calc_boil_volume ? 1:0);
125 query.bindValue(":top_up_kettle", QString("%1").arg(eq->top_up_kettle, 2, 'f', 1, '0'));
126 query.bindValue(":hopfactor", QString("%1").arg(eq->hop_utilization, 1, 'f', 0, '0'));
127 query.bindValue(":notes", eq->notes);
128 query.bindValue(":lauter_volume", QString("%1").arg(eq->lauter_volume, 2, 'f', 1, '0'));
129 query.bindValue(":lauter_height", QString("%1").arg(eq->lauter_height, 4, 'f', 3, '0'));
130 query.bindValue(":lauter_deadspace", QString("%1").arg(eq->lauter_deadspace, 2, 'f', 1, '0'));
131 query.bindValue(":kettle_volume", QString("%1").arg(eq->kettle_volume, 2, 'f', 1, '0'));
132 query.bindValue(":kettle_height", QString("%1").arg(eq->kettle_height, 4, 'f', 3, '0'));
133 query.bindValue(":mash_volume", QString("%1").arg(eq->mash_volume, 2, 'f', 1, '0'));
134 query.bindValue(":mash_max", QString("%1").arg(eq->mash_max, 2, 'f', 1, '0'));
135 query.bindValue(":efficiency", QString("%1").arg(eq->efficiency, 2, 'f', 1, '0'));
136 query.bindValue(":uuid", QUuid::createUuid().toString().mid(1, 36));
137 query.exec();
106 if (query.lastError().isValid()) { 138 if (query.lastError().isValid()) {
107 qWarning() << sql << query.lastError(); 139 qWarning() << query.lastError();
108 errors++; 140 errors++;
109 } 141 }
110 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 142 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
143 delete eq;
111 break; 144 break;
112 } 145 }
113 if ((xml->tokenType() == QXmlStreamReader::StartElement) && 146 if ((xml->tokenType() == QXmlStreamReader::StartElement) &&
114 ((xml->name() == "VERSION") || (xml->name() == "DISPLAY_BOIL_SIZE") || 147 ((xml->name() == "VERSION") || (xml->name() == "DISPLAY_BOIL_SIZE") ||
115 (xml->name() == "DISPLAY_BATCH_SIZE") || (xml->name() == "DISPLAY_TUN_VOLUME") || 148 (xml->name() == "DISPLAY_BATCH_SIZE") || (xml->name() == "DISPLAY_TUN_VOLUME") ||
118 (xml->name() == "ATTENUATION_FACTOR_YEAST") || (xml->name() == "ATTENUATION_FACTOR_WATER_TO_GRAIN_RATIO") || 151 (xml->name() == "ATTENUATION_FACTOR_YEAST") || (xml->name() == "ATTENUATION_FACTOR_WATER_TO_GRAIN_RATIO") ||
119 (xml->name() == "ATTENUATION_FACTOR_TOTAL_MASH_TIME") || (xml->name() == "ATTENUATION_FACTOR_PERC_SIMPLE_SUGAR") || 152 (xml->name() == "ATTENUATION_FACTOR_TOTAL_MASH_TIME") || (xml->name() == "ATTENUATION_FACTOR_PERC_SIMPLE_SUGAR") ||
120 (xml->name() == "ATTENUATION_FACTOR_CONSTANT"))) { 153 (xml->name() == "ATTENUATION_FACTOR_CONSTANT"))) {
121 // Ignore. 154 // Ignore.
122 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { 155 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) {
123 sql.append(QString(", name='%1'").arg(xml->readElementText())); 156 eq->name = xml->readElementText();
124 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { 157 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) {
125 sql.append(QString(", notes='%1'").arg(xml->readElementText())); 158 eq->notes = xml->readElementText();
126 hasnotes = true;
127 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) { 159 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) {
128 sql.append(QString(", boil_size=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 160 eq->boil_size = xml->readElementText().toDouble();
129 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) { 161 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) {
130 sql.append(QString(", batch_size=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); 162 eq->batch_size = xml->readElementText().toDouble();
163 qDebug() << eq->batch_size;
131 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_VOLUME")) { 164 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_VOLUME")) {
132 sql.append(QString(", tun_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 165 eq->tun_volume = xml->readElementText().toDouble();
133 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_WEIGHT")) { 166 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_WEIGHT")) {
134 sql.append(QString(", tun_weight=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 167 eq->tun_weight = xml->readElementText().toDouble();
135 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_SPECIFIC_HEAT")) { 168 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_SPECIFIC_HEAT")) {
136 sql.append(QString(", tun_specific_heat=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 169 eq->tun_specific_heat = xml->readElementText().toDouble();
170 if (eq->tun_specific_heat == 0.22)
171 eq->tun_material = 1;
172 else if (eq->tun_specific_heat == 0.46)
173 eq->tun_material = 2;
174 else if (eq->tun_specific_heat == 0.092)
175 eq->tun_material = 3;
176 else
177 eq->tun_material = 0;
137 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_HEIGHT")) { 178 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_HEIGHT")) {
138 sql.append(QString(", tun_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 179 eq->tun_height = xml->readElementText().toDouble();
139 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TRUB_CHILLER_LOSS")) { 180 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TRUB_CHILLER_LOSS")) {
140 sql.append(QString(", trub_chiller_loss=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 181 eq->trub_chiller_loss = xml->readElementText().toDouble();
141 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EVAP_RATE")) { 182 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EVAP_RATE")) {
142 sql.append(QString(", evap_rate=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); 183 eq->evap_rate = xml->readElementText().toDouble();
143 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_TIME")) { 184 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_TIME")) {
144 sql.append(QString(", boil_time=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0')); 185 eq->boil_time = xml->readElementText().toDouble();
145 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CALC_BOIL_VOLUME")) { 186 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CALC_BOIL_VOLUME")) {
146 sql.append(QString(", calc_boil_volume=%1").arg((xml->readElementText() == "TRUE") ? "true":"false")); 187 eq->calc_boil_volume = (xml->readElementText() == "TRUE") ? true:false;
147 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TOP_UP_KETTLE")) { 188 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TOP_UP_KETTLE")) {
148 sql.append(QString(", top_up_kettle=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 189 eq->top_up_kettle = xml->readElementText().toDouble();
149 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP_UTILIZATION")) { 190 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP_UTILIZATION")) {
150 sql.append(QString(", hop_utilization=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0')); 191 eq->hop_utilization = xml->readElementText().toDouble();
151 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_VOLUME")) { 192 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_VOLUME")) {
152 sql.append(QString(", lauter_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 193 eq->lauter_volume = xml->readElementText().toDouble();
153 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_HEIGHT")) { 194 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_HEIGHT")) {
154 sql.append(QString(", lauter_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 195 eq->lauter_height = xml->readElementText().toDouble();
155 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_DEADSPACE")) { 196 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_DEADSPACE")) {
156 sql.append(QString(", lauter_deadspace=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 197 eq->lauter_deadspace = xml->readElementText().toDouble();
157 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_VOLUME")) { 198 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_VOLUME")) {
158 sql.append(QString(", kettle_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 199 eq->kettle_volume = xml->readElementText().toDouble();
159 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_HEIGHT")) { 200 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_HEIGHT")) {
160 sql.append(QString(", kettle_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 201 eq->kettle_height = xml->readElementText().toDouble();
161 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH_VOLUME")) { 202 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH_VOLUME")) {
162 sql.append(QString(", mash_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 203 eq->mash_volume = xml->readElementText().toDouble();
204 eq->mash_max = eq->mash_volume / 3;
163 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EFFICIENCY")) { 205 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EFFICIENCY")) {
164 sql.append(QString(", efficiency=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 206 eq->efficiency = xml->readElementText().toDouble();
165 } else { 207 } else {
166 if (xml->tokenType() == QXmlStreamReader::StartElement) 208 if (xml->tokenType() == QXmlStreamReader::StartElement)
167 qDebug() << "2 " << xml->tokenType() << xml->name(); 209 qDebug() << "2 " << xml->tokenType() << xml->name();
168 } 210 }
169 } 211 }
678 720
679 log.append(QString(" total errors\n")); 721 log.append(QString(" total errors\n"));
680 log.append(QString(" ----- ------\n")); 722 log.append(QString(" ----- ------\n"));
681 log.append(QString("total %1 %2\n").arg(total, 3).arg(errors, 3)); 723 log.append(QString("total %1 %2\n").arg(total, 3).arg(errors, 3));
682 ui->logEdit->setPlainText(log); 724 ui->logEdit->setPlainText(log);
725 qInfo() << "Import" << total << "records, " << total - errors << "ok, " << errors << "errors";
683 726
684 ui->progressBar->setValue(100); 727 ui->progressBar->setValue(100);
685 if (xml->hasError()) { 728 if (xml->hasError()) {
686 qWarning() << "XML error" << xml->error() << xml->errorString(); 729 qWarning() << "XML error" << xml->error() << xml->errorString();
687 } 730 }

mercurial