src/ImportXML.cpp

changeset 276
7316a419334d
parent 275
f472f9773782
child 277
2228d833c52a
equal deleted inserted replaced
275:f472f9773782 276:7316a419334d
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 #include "ImportXML.h" 17 #include "ImportXML.h"
18 #include "../ui/ui_ImportXML.h" 18 #include "../ui/ui_ImportXML.h"
19 #include "global.h"
19 #include "MainWindow.h" 20 #include "MainWindow.h"
20 21
21 22
22 ImportXML::ImportXML(QWidget *parent) : QDialog(parent), ui(new Ui::ImportXML) 23 ImportXML::ImportXML(QWidget *parent) : QDialog(parent), ui(new Ui::ImportXML)
23 { 24 {
45 46
46 void ImportXML::on_openButton_clicked() 47 void ImportXML::on_openButton_clicked()
47 { 48 {
48 QSqlQuery query; 49 QSqlQuery query;
49 QString sql, log; 50 QString sql, log;
50 int eq_total = 0, eq_errors = 0, f_total = 0, f_errors = 0, h_total = 0, h_errors = 0;
51 int m_total = 0, m_errors = 0, y_total = 0, y_errors = 0, rec_total = 0, rec_errors = 0;
52 int st_total = 0, st_errors = 0, mash_total = 0, mash_errors = 0, w_total = 0, w_errors = 0;
53 int total = 0, errors = 0; 51 int total = 0, errors = 0;
52 bool hasnotes;
54 53
55 QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath() + "/*.xml", tr("Files (*.xml)")); 54 QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath() + "/*.xml", tr("Files (*.xml)"));
56 if (fileName == 0) { 55 if (fileName == 0) {
57 QMessageBox::warning(this, tr("Open File"), tr("No XML file selected.")); 56 QMessageBox::warning(this, tr("Open File"), tr("No XML file selected."));
58 return; 57 return;
72 71
73 if (xml->atEnd()) 72 if (xml->atEnd())
74 break; 73 break;
75 74
76 if (xml->tokenType() == QXmlStreamReader::StartDocument) { 75 if (xml->tokenType() == QXmlStreamReader::StartDocument) {
77 // qDebug() << xml->readElementText(); 76 qDebug() << xml->documentVersion() << xml->documentEncoding();
78 // Just skip 77 // Just skip
79 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENTS")) { 78 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENTS")) {
80 /* 79 /*
81 * Equipments 80 * Equipments
82 */ 81 */
89 } 88 }
90 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENT")) { 89 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENT")) {
91 /* 90 /*
92 * Equipment 91 * Equipment
93 */ 92 */
94 eq_total++;
95 total++; 93 total++;
94 hasnotes = false;
96 sql = "INSERT INTO inventory_equipments SET uuid='"; 95 sql = "INSERT INTO inventory_equipments SET uuid='";
97 sql.append(QUuid::createUuid().toString().mid(1, 36)); 96 sql.append(QUuid::createUuid().toString().mid(1, 36));
98 sql.append("', top_up_water=0"); 97 sql.append("', top_up_water=0");
99 98
100 while (xml->readNext()) { 99 while (xml->readNext()) {
101 if (xml->atEnd()) 100 if (xml->atEnd())
102 break; 101 break;
103 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) { 102 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) {
103 if (! hasnotes)
104 sql.append(", notes=''");
104 query.exec(sql); 105 query.exec(sql);
105 if (query.lastError().isValid()) { 106 if (query.lastError().isValid()) {
106 // qWarning() << sql << query.lastError(); 107 qWarning() << sql << query.lastError();
107 eq_errors++;
108 errors++; 108 errors++;
109 } 109 }
110 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 110 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
111 break; 111 break;
112 } 112 }
113 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { 113 if ((xml->tokenType() == QXmlStreamReader::StartElement) &&
114 ((xml->name() == "VERSION") || (xml->name() == "DISPLAY_BOIL_SIZE") ||
115 (xml->name() == "DISPLAY_BATCH_SIZE") || (xml->name() == "DISPLAY_TUN_VOLUME") ||
116 (xml->name() == "DISPLAY_TUN_WEIGHT") || (xml->name() == "DISPLAY_TRUB_CHILLER_LOSS") ||
117 (xml->name() == "DISPLAY_LAUTERDEADSPACE") || (xml->name() == "TUN_MATERIAL") ||
118 (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") ||
120 (xml->name() == "ATTENUATION_FACTOR_CONSTANT"))) {
114 // Ignore. 121 // Ignore.
115 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { 122 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) {
116 sql.append(QString(", name='%1'").arg(xml->readElementText())); 123 sql.append(QString(", name='%1'").arg(xml->readElementText()));
117 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { 124 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) {
118 sql.append(QString(", notes='%1'").arg(xml->readElementText())); 125 sql.append(QString(", notes='%1'").arg(xml->readElementText()));
126 hasnotes = true;
119 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) { 127 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) {
120 sql.append(QString(", boil_size=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 128 sql.append(QString(", boil_size=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
121 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) { 129 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) {
122 sql.append(QString(", batch_size=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); 130 sql.append(QString(", batch_size=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0'));
123 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_VOLUME")) { 131 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_VOLUME")) {
174 } 182 }
175 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE")) { 183 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE")) {
176 /* 184 /*
177 * Style 185 * Style
178 */ 186 */
179 st_total++; 187 Style *st = new Style;
180 total++; 188 st->notes = st->category = st->style_letter = st->profile = st->ingredients = st->examples = "";
181 sql = "INSERT INTO profile_styles SET uuid='"; 189 st->style_guide = "BKG 2019";
182 sql.append(QUuid::createUuid().toString().mid(1, 36)); 190 st->category_number = 0;
183 sql.append("'"); 191 total++;
184 192
185 while (xml->readNext()) { 193 while (xml->readNext()) {
186 if (xml->atEnd()) 194 if (xml->atEnd())
187 break; 195 break;
188 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "STYLE")) { 196 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "STYLE")) {
189 query.exec(sql); 197 query.prepare("INSERT INTO profile_styles SET name=:name, category=:category, "
190 if (query.lastError().isValid()) { 198 "category_number=:catnr, style_letter=:group, style_guide=:guide, type=:type, "
191 qWarning() << sql << query.lastError(); 199 "og_min=:og_min, og_max=:og_max, fg_min=:fg_min, fg_max=:fg_max, ibu_min=:ibu_min, "
192 st_errors++; 200 "ibu_max=:ibu_max, color_min=:ebc_min, color_max=:ebc_max, carb_min=:co2_min, "
193 errors++; 201 "carb_max=:co2_max, abv_min=:abv_min, abv_max=:abv_max, notes=:notes, "
194 } 202 "profile=:profile, ingredients=:ingredients, examples=:examples, uuid=:uuid");
195 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 203 query.bindValue(":name", st->name);
204 query.bindValue(":category", st->category);
205 query.bindValue(":catnr", st->category_number);
206 query.bindValue(":group", st->style_letter);
207 query.bindValue(":guide", st->style_guide);
208 query.bindValue(":type", st->type);
209 query.bindValue(":og_min", QString("%1").arg(st->og_min, 4, 'f', 3, '0'));
210 query.bindValue(":og_max", QString("%1").arg(st->og_max, 4, 'f', 3, '0'));
211 query.bindValue(":fg_min", QString("%1").arg(st->fg_min, 4, 'f', 3, '0'));
212 query.bindValue(":fg_max", QString("%1").arg(st->fg_max, 4, 'f', 3, '0'));
213 query.bindValue(":ibu_min", QString("%1").arg(st->ibu_min, 1, 'f', 0, '0'));
214 query.bindValue(":ibu_max", QString("%1").arg(st->ibu_max, 1, 'f', 0, '0'));
215 query.bindValue(":ebc_min", QString("%1").arg(st->color_min, 1, 'f', 0, '0'));
216 query.bindValue(":ebc_max", QString("%1").arg(st->color_max, 1, 'f', 0, '0'));
217 query.bindValue(":co2_min", QString("%1").arg(st->carb_min, 2, 'f', 1, '0'));
218 query.bindValue(":co2_max", QString("%1").arg(st->carb_max, 2, 'f', 1, '0'));
219 query.bindValue(":abv_min", QString("%1").arg(st->abv_min, 2, 'f', 1, '0'));
220 query.bindValue(":abv_max", QString("%1").arg(st->abv_max, 2, 'f', 1, '0'));
221 query.bindValue(":notes", st->notes);
222 query.bindValue(":profile", st->profile);
223 query.bindValue(":ingredients", st->ingredients);
224 query.bindValue(":examples", st->examples);
225 query.bindValue(":uuid", QUuid::createUuid().toString().mid(1, 36));
226 query.exec();
227 if (query.lastError().isValid()) {
228 qWarning() << query.lastError();
229 errors++;
230 }
231 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
232 delete st;
196 break; 233 break;
197 } 234 }
198 if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "VERSION")) || 235 if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "VERSION")) ||
199 (xml->name() == "DISPLAY_OG_MIN") || (xml->name() == "DISPLAY_OG_MAX") || (xml->name() == "DISPLAY_FG_MIN") || 236 (xml->name() == "DISPLAY_OG_MIN") || (xml->name() == "DISPLAY_OG_MAX") || (xml->name() == "DISPLAY_FG_MIN") ||
200 (xml->name() == "DISPLAY_FG_MAX") || (xml->name() == "DISPLAY_IBU_MIN") || (xml->name() == "DISPLAY_IBU_MAX") || 237 (xml->name() == "DISPLAY_FG_MAX") || (xml->name() == "DISPLAY_IBU_MIN") || (xml->name() == "DISPLAY_IBU_MAX") ||
202 (xml->name() == "DISPLAY_CARB_MAX") || (xml->name() == "DISPLAY_ABV_MIN") || (xml->name() == "DISPLAY_ABV_MAX") || 239 (xml->name() == "DISPLAY_CARB_MAX") || (xml->name() == "DISPLAY_ABV_MIN") || (xml->name() == "DISPLAY_ABV_MAX") ||
203 (xml->name() == "OG_RANGE") || (xml->name() == "FG_RANGE") || (xml->name() == "IBU_RANGE") || 240 (xml->name() == "OG_RANGE") || (xml->name() == "FG_RANGE") || (xml->name() == "IBU_RANGE") ||
204 (xml->name() == "CARB_RANGE") || (xml->name() == "COLOR_RANGE") || (xml->name() == "ABV_RANGE")) { 241 (xml->name() == "CARB_RANGE") || (xml->name() == "COLOR_RANGE") || (xml->name() == "ABV_RANGE")) {
205 // Ignore. 242 // Ignore.
206 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { 243 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) {
244 st->name = xml->readElementText();
245 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY")) {
246 st->category = xml->readElementText();
247 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY_NUMBER")) {
248 st->category_number = xml->readElementText().toInt();
249 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_LETTER")) {
250 st->style_letter = xml->readElementText();
251 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_GUIDE")) {
252 st->style_guide = xml->readElementText();
253 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) {
254 QString temp = xml->readElementText();
255 if (temp == "Lager")
256 st->type = 0;
257 else if (temp == "Ale")
258 st->type = 1;
259 else if (temp == "Mead")
260 st->type = 2;
261 else if (temp == "Wheat")
262 st->type = 3;
263 else if (temp == "Mixed")
264 st->type = 4;
265 else if (temp == "Cider")
266 st->type = 5;
267 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) {
268 st->notes = xml->readElementText();
269 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MIN")) {
270 st->og_min = xml->readElementText().toDouble();
271 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MAX")) {
272 st->og_max = xml->readElementText().toDouble();
273 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MIN")) {
274 st->fg_min = xml->readElementText().toDouble();
275 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MAX")) {
276 st->fg_max = xml->readElementText().toDouble();
277 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MIN")) {
278 st->ibu_min = xml->readElementText().toDouble();
279 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MAX")) {
280 st->ibu_max = xml->readElementText().toDouble();
281 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MIN")) {
282 st->color_min = xml->readElementText().toDouble();
283 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MAX")) {
284 st->color_max = xml->readElementText().toDouble();
285 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MIN")) {
286 st->carb_min = xml->readElementText().toDouble();
287 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MAX")) {
288 st->carb_max = xml->readElementText().toDouble();
289 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MIN")) {
290 st->abv_min = xml->readElementText().toDouble();
291 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MAX")) {
292 st->abv_max = xml->readElementText().toDouble();
293 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROFILE")) {
294 st->profile = xml->readElementText();
295 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "INGREDIENTS")) {
296 st->ingredients = xml->readElementText();
297 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EXAMPLES")) {
298 st->examples = xml->readElementText();
299 } else {
300 if (xml->tokenType() == QXmlStreamReader::StartElement)
301 qDebug() << "2 " << xml->tokenType() << xml->name();
302 }
303 }
304 }
305 }
306 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) {
307 qDebug() << "start FERMENTABLES";
308 /*
309 * Fermentables
310 */
311 while (xml->readNext()) {
312 if (xml->atEnd())
313 break;
314 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLES")) {
315 qDebug() << "0 /FERMENTABLES";
316 break;
317 }
318 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLE")) {
319 /*
320 * Fermentable
321 */
322 total++;
323 hasnotes = false;
324 sql = "INSERT INTO inventory_fermentables SET uuid='";
325 sql.append(QUuid::createUuid().toString().mid(1, 36));
326 sql.append("'");
327
328 while (xml->readNext()) {
329 if (xml->atEnd())
330 break;
331 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) {
332 qDebug() << "hasnotes" << hasnotes;
333 if (! hasnotes)
334 sql.append(", notes=''");
335 query.exec(sql);
336 if (query.lastError().isValid()) {
337 qWarning() << sql << query.lastError();
338 errors++;
339 }
340 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
341 break;
342 }
343 if ((xml->tokenType() == QXmlStreamReader::StartElement) &&
344 ((xml->name() == "VERSION") || (xml->name() == "DISPLAY_COST") ||
345 (xml->name() == "DISPLAY_COLOR") || (xml->name() == "INVENTORY") ||
346 (xml->name() == "PERCENTAGE") || (xml->name() == "ADJUST_TO_TOTAL_100") )) {
347 // Ignore.
348 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) {
207 sql.append(QString(", name='%1'").arg(xml->readElementText())); 349 sql.append(QString(", name='%1'").arg(xml->readElementText()));
208 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY")) { 350 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COST")) {
209 sql.append(QString(", category='%1'").arg(xml->readElementText())); 351 sql.append(QString(", cost=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0'));
210 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY_NUMBER")) {
211 sql.append(QString(", category_number=%1").arg(xml->readElementText().toInt()));
212 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_LETTER")) {
213 sql.append(QString(", style_letter='%1'").arg(xml->readElementText()));
214 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_GUIDE")) {
215 sql.append(QString(", style_guide='%1'").arg(xml->readElementText()));
216 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { 352 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) {
217 sql.append(QString(", type=%1").arg(xml->readElementText().toInt())); 353 QString temp = xml->readElementText();
354 if (temp == "Grain")
355 sql.append(", type=0");
356 else if (temp == "Sugar")
357 sql.append(", type=1");
358 else if (temp == "Extract")
359 sql.append(", type=2");
360 else if (temp == "Dry extract")
361 sql.append(", type=3");
362 else if (temp == "Adjunct")
363 sql.append(", type=4");
364 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ORIGIN")) {
365 sql.append(QString(", origin='%1'").arg(xml->readElementText()));
366 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SUPPLIER")) {
367 sql.append(QString(", supplier='%1'").arg(xml->readElementText()));
218 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { 368 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) {
219 sql.append(QString(", notes='%1'").arg(xml->readElementText())); 369 sql.append(QString(", notes='%1'").arg(xml->readElementText()));
220 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MIN")) { 370 hasnotes = true;
221 sql.append(QString(", og_min=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 371 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ALWAYS_ON_STOCK")) {
222 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MAX")) { 372 sql.append(QString(", always_on_stock=%1").arg(xml->readElementText().toLower()));
223 sql.append(QString(", og_max=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 373 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YIELD")) {
224 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MIN")) { 374 sql.append(QString(", yield=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
225 sql.append(QString(", fg_min=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 375 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COARSE_FINE_DIFF")) {
226 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MAX")) { 376 sql.append(QString(", coarse_fine_diff=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
227 sql.append(QString(", fg_max=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); 377 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MOISTURE")) {
228 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MIN")) { 378 sql.append(QString(", moisture=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
229 sql.append(QString(", ibu_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 379 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DIASTATIC_POWER")) {
230 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MAX")) { 380 sql.append(QString(", diastatic_power=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
231 sql.append(QString(", ibu_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 381 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAX_IN_BATCH")) {
232 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MIN")) { 382 sql.append(QString(", max_in_batch=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
233 sql.append(QString(", color_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 383 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECOMMEND_MASH")) {
234 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MAX")) { 384 sql.append(QString(", recommend_mash=%1").arg(xml->readElementText().toLower()));
235 sql.append(QString(", color_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 385 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "GRAINTYPE")) {
236 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MIN")) { 386 QString temp = xml->readElementText();
237 sql.append(QString(", carb_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 387 if (temp == "Base")
238 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MAX")) { 388 sql.append(QString(", graintype=0"));
239 sql.append(QString(", carb_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 389 else if (temp == "Roast")
240 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MIN")) { 390 sql.append(QString(", graintype=1"));
241 sql.append(QString(", abv_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 391 else if (temp == "Crystal")
242 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MAX")) { 392 sql.append(QString(", graintype=2"));
243 sql.append(QString(", abv_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); 393 else if (temp == "Kilned")
244 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROFILE")) { 394 sql.append(QString(", graintype=3"));
245 sql.append(QString(", profile='%1'").arg(xml->readElementText())); 395 else if (temp == "Sour Malt")
246 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "INGREDIENTS")) { 396 sql.append(QString(", graintype=4"));
247 sql.append(QString(", ingredients='%1'").arg(xml->readElementText())); 397 else if (temp == "Special")
248 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EXAMPLES")) { 398 sql.append(QString(", graintype=5"));
249 sql.append(QString(", examples='%1'").arg(xml->readElementText())); 399 else if (temp == "No malt")
250 } else { 400 sql.append(QString(", graintype=6"));
251 if (xml->tokenType() == QXmlStreamReader::StartElement) 401 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADDED")) {
252 qDebug() << "2 " << xml->tokenType() << xml->name(); 402 QString temp = xml->readElementText();
253 } 403 if (temp == "Mash")
254 } 404 sql.append(QString(", added=0"));
255 } 405 else if (temp == "Boil")
256 } 406 sql.append(QString(", added=1"));
257 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) { 407 else if (temp == "Fermentation")
258 /* 408 sql.append(QString(", added=2"));
259 * Fermentables 409 else if (temp == "Lagering")
260 */ 410 sql.append(QString(", added=3"));
261 while (xml->readNext()) { 411 else if (temp == "Bottle")
262 if (xml->atEnd()) 412 sql.append(QString(", added=4"));
263 break; 413 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADD_AFTER_BOIL")) {
264 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLES")) { 414 sql.append(QString(", add_after_boil=%1").arg(xml->readElementText().toLower()));
265 qDebug() << "0 /FERMENTABLES"; 415 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR")) {
266 break; 416 sql.append(QString(", color=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
267 } 417 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROTEIN")) {
268 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLE")) { 418 sql.append(QString(", protein=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
269 /* 419 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DISSOLVED_PROTEIN")) {
270 * Fermentable 420 sql.append(QString(", dissolved_protein=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0'));
271 */ 421 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DI_pH")) {
272 f_total++; 422 sql.append(QString(", di_ph=%1").arg(xml->readElementText().toDouble(), 6, 'f', 5, '0'));
273 total++; 423 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ACID_TO_pH_5.7")) {
274 sql = "INSERT INTO inventory_fermentables SET uuid='"; 424 sql.append(QString(", acid_to_ph_57=%1").arg(xml->readElementText().toDouble(), 6, 'f', 5, '0'));
275 sql.append(QUuid::createUuid().toString().mid(1, 36));
276
277 while (xml->readNext()) {
278 if (xml->atEnd())
279 break;
280 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) {
281 // query.exec(sql);
282 if (query.lastError().isValid()) {
283 // qWarning() << sql << query.lastError();
284 f_errors++;
285 errors++;
286 }
287 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
288 break;
289 }
290 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
291 // Ignore.
292 } else { 425 } else {
293 if (xml->tokenType() == QXmlStreamReader::StartElement) 426 if (xml->tokenType() == QXmlStreamReader::StartElement)
294 qDebug() << "2 " << xml->tokenType() << xml->name(); 427 qDebug() << "2 " << xml->tokenType() << xml->name();
295 } 428 }
296 } 429 }
309 } 442 }
310 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP")) { 443 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP")) {
311 /* 444 /*
312 * Hop 445 * Hop
313 */ 446 */
314 h_total++;
315 total++; 447 total++;
316 sql = "INSERT INTO inventory_hops SET uuid='"; 448 sql = "INSERT INTO inventory_hops SET uuid='";
317 sql.append(QUuid::createUuid().toString().mid(1, 36)); 449 sql.append(QUuid::createUuid().toString().mid(1, 36));
318 450
319 while (xml->readNext()) { 451 while (xml->readNext()) {
321 break; 453 break;
322 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOP")) { 454 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOP")) {
323 // query.exec(sql); 455 // query.exec(sql);
324 if (query.lastError().isValid()) { 456 if (query.lastError().isValid()) {
325 // qWarning() << sql << query.lastError(); 457 // qWarning() << sql << query.lastError();
326 h_errors++;
327 errors++; 458 errors++;
328 } 459 }
329 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 460 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
330 break; 461 break;
331 } 462 }
351 } 482 }
352 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISC")) { 483 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISC")) {
353 /* 484 /*
354 * Misc 485 * Misc
355 */ 486 */
356 m_total++;
357 total++; 487 total++;
358 sql = "INSERT INTO inventory_miscs SET uuid='"; 488 sql = "INSERT INTO inventory_miscs SET uuid='";
359 sql.append(QUuid::createUuid().toString().mid(1, 36)); 489 sql.append(QUuid::createUuid().toString().mid(1, 36));
360 490
361 while (xml->readNext()) { 491 while (xml->readNext()) {
363 break; 493 break;
364 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISC")) { 494 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISC")) {
365 // query.exec(sql); 495 // query.exec(sql);
366 if (query.lastError().isValid()) { 496 if (query.lastError().isValid()) {
367 // qWarning() << sql << query.lastError(); 497 // qWarning() << sql << query.lastError();
368 m_errors++;
369 errors++; 498 errors++;
370 } 499 }
371 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 500 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
372 break; 501 break;
373 } 502 }
393 } 522 }
394 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEAST")) { 523 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEAST")) {
395 /* 524 /*
396 * Yeast 525 * Yeast
397 */ 526 */
398 y_total++;
399 total++; 527 total++;
400 sql = "INSERT INTO inventory_yeasts SET uuid='"; 528 sql = "INSERT INTO inventory_yeasts SET uuid='";
401 sql.append(QUuid::createUuid().toString().mid(1, 36)); 529 sql.append(QUuid::createUuid().toString().mid(1, 36));
402 530
403 while (xml->readNext()) { 531 while (xml->readNext()) {
405 break; 533 break;
406 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEAST")) { 534 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEAST")) {
407 // query.exec(sql); 535 // query.exec(sql);
408 if (query.lastError().isValid()) { 536 if (query.lastError().isValid()) {
409 // qWarning() << sql << query.lastError(); 537 // qWarning() << sql << query.lastError();
410 y_errors++;
411 errors++; 538 errors++;
412 } 539 }
413 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 540 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
414 break; 541 break;
415 } 542 }
435 } 562 }
436 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATER")) { 563 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATER")) {
437 /* 564 /*
438 * Water 565 * Water
439 */ 566 */
440 w_total++;
441 total++; 567 total++;
442 sql = "INSERT INTO inventory_waters SET uuid='"; 568 sql = "INSERT INTO inventory_waters SET uuid='";
443 sql.append(QUuid::createUuid().toString().mid(1, 36)); 569 sql.append(QUuid::createUuid().toString().mid(1, 36));
444 570
445 while (xml->readNext()) { 571 while (xml->readNext()) {
447 break; 573 break;
448 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATER")) { 574 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATER")) {
449 // query.exec(sql); 575 // query.exec(sql);
450 if (query.lastError().isValid()) { 576 if (query.lastError().isValid()) {
451 // qWarning() << sql << query.lastError(); 577 // qWarning() << sql << query.lastError();
452 w_errors++;
453 errors++; 578 errors++;
454 } 579 }
455 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 580 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
456 break; 581 break;
457 } 582 }
477 } 602 }
478 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPE")) { 603 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPE")) {
479 /* 604 /*
480 * Recipe 605 * Recipe
481 */ 606 */
482 rec_total++;
483 total++; 607 total++;
484 sql = "INSERT INTO recipes SET uuid='"; 608 sql = "INSERT INTO recipes SET uuid='";
485 sql.append(QUuid::createUuid().toString().mid(1, 36)); 609 sql.append(QUuid::createUuid().toString().mid(1, 36));
486 610
487 while (xml->readNext()) { 611 while (xml->readNext()) {
489 break; 613 break;
490 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPE")) { 614 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPE")) {
491 // query.exec(sql); 615 // query.exec(sql);
492 if (query.lastError().isValid()) { 616 if (query.lastError().isValid()) {
493 // qWarning() << sql << query.lastError(); 617 // qWarning() << sql << query.lastError();
494 rec_errors++;
495 errors++; 618 errors++;
496 } 619 }
497 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 620 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
498 break; 621 break;
499 } 622 }
519 } 642 }
520 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH")) { 643 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH")) {
521 /* 644 /*
522 * Mash 645 * Mash
523 */ 646 */
524 mash_total++;
525 total++; 647 total++;
526 sql = "INSERT INTO inventory_mashs SET uuid='"; 648 sql = "INSERT INTO inventory_mashs SET uuid='";
527 sql.append(QUuid::createUuid().toString().mid(1, 36)); 649 sql.append(QUuid::createUuid().toString().mid(1, 36));
528 650
529 while (xml->readNext()) { 651 while (xml->readNext()) {
531 break; 653 break;
532 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH")) { 654 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH")) {
533 // query.exec(sql); 655 // query.exec(sql);
534 if (query.lastError().isValid()) { 656 if (query.lastError().isValid()) {
535 // qWarning() << sql << query.lastError(); 657 // qWarning() << sql << query.lastError();
536 mash_errors++;
537 errors++; 658 errors++;
538 } 659 }
539 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 660 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
540 break; 661 break;
541 } 662 }
555 break; 676 break;
556 } 677 }
557 678
558 log.append(QString(" total errors\n")); 679 log.append(QString(" total errors\n"));
559 log.append(QString(" ----- ------\n")); 680 log.append(QString(" ----- ------\n"));
560 log.append(QString("styles %1 %2\n").arg(st_total, 3).arg(st_errors, 3));
561 log.append(QString("equipments %1 %2\n").arg(eq_total, 3).arg(eq_errors, 3));
562 log.append(QString("fermentables %1 %2\n").arg(f_total, 3).arg(f_errors, 3));
563 log.append(QString("hops %1 %2\n").arg(h_total, 3).arg(h_errors, 3));
564 log.append(QString("miscs %1 %2\n").arg(m_total, 3).arg(m_errors, 3));
565 log.append(QString("yeasts %1 %2\n").arg(y_total, 3).arg(y_errors, 3));
566 log.append(QString("waters %1 %2\n").arg(w_total, 3).arg(w_errors, 3));
567 log.append(QString("mashes %1 %2\n").arg(mash_total, 3).arg(mash_errors, 3));
568 log.append(QString("recipes %1 %2\n").arg(rec_total, 3).arg(rec_errors, 3));
569 log.append(QString(" ----- ------\n"));
570 log.append(QString("total %1 %2\n").arg(total, 3).arg(errors, 3)); 681 log.append(QString("total %1 %2\n").arg(total, 3).arg(errors, 3));
571 ui->logEdit->setPlainText(log); 682 ui->logEdit->setPlainText(log);
572 683
573 ui->progressBar->setValue(100); 684 ui->progressBar->setValue(100);
574 if (xml->hasError()) { 685 if (xml->hasError()) {
575 qWarning() << "error" << xml->error(); 686 qWarning() << "XML error" << xml->error() << xml->errorString();
576 } else {
577 qDebug() << "all good" << eq_total << eq_errors;
578 } 687 }
579 file.close(); 688 file.close();
580 } 689 }
581 690
582 691

mercurial