src/ImportXML.cpp

changeset 278
ed562a2a4ca4
parent 277
2228d833c52a
child 279
8540fd0166e7
equal deleted inserted replaced
277:2228d833c52a 278:ed562a2a4ca4
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 "global.h"
20 #include "Utils.h"
20 #include "MainWindow.h" 21 #include "MainWindow.h"
21 22
22 23
23 ImportXML::ImportXML(QWidget *parent) : QDialog(parent), ui(new Ui::ImportXML) 24 ImportXML::ImportXML(QWidget *parent) : QDialog(parent), ui(new Ui::ImportXML)
24 { 25 {
45 46
46 47
47 void ImportXML::on_openButton_clicked() 48 void ImportXML::on_openButton_clicked()
48 { 49 {
49 QSqlQuery query; 50 QSqlQuery query;
50 QString sql, log; 51 QString log;
51 int total = 0, errors = 0; 52 int total = 0, errors = 0;
52 bool hasnotes;
53 53
54 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)"));
55 if (fileName == 0) { 55 if (fileName == 0) {
56 QMessageBox::warning(this, tr("Open File"), tr("No XML file selected.")); 56 QMessageBox::warning(this, tr("Open File"), tr("No XML file selected."));
57 return; 57 return;
344 } 344 }
345 } 345 }
346 } 346 }
347 } 347 }
348 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) { 348 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) {
349 qDebug() << "start FERMENTABLES";
350 /* 349 /*
351 * Fermentables 350 * Fermentables
352 */ 351 */
353 while (xml->readNext()) { 352 while (xml->readNext()) {
354 if (xml->atEnd()) 353 if (xml->atEnd())
360 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLE")) { 359 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLE")) {
361 /* 360 /*
362 * Fermentable 361 * Fermentable
363 */ 362 */
364 total++; 363 total++;
365 hasnotes = false; 364 Fermentables *f = new Fermentables;
366 sql = "INSERT INTO inventory_fermentables SET uuid='"; 365 f->f_supplier = f->f_origin = f->f_notes = "";
367 sql.append(QUuid::createUuid().toString().mid(1, 36)); 366 f->f_yield = 80;
368 sql.append("'"); 367 f->f_max_in_batch = 100;
368 f->f_recommend_mash = true;
369 f->f_protein = f->f_dissolved_protein = f->f_coarse_fine_diff = f->f_moisture = f->f_diastatic_power = 0;
370 f->f_di_ph = 5.7;
371 f->f_acid_to_ph_57 = 0;
369 372
370 while (xml->readNext()) { 373 while (xml->readNext()) {
371 if (xml->atEnd()) 374 if (xml->atEnd())
372 break; 375 break;
373 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) { 376 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) {
374 qDebug() << "hasnotes" << hasnotes; 377 query.prepare("INSERT INTO inventory_fermentables SET name=:name, type=:type, yield=:yield, color=:color, "
375 if (! hasnotes) 378 "add_after_boil=:addafter, origin=:origin, supplier=:supplier, notes=:notes, coarse_fine_diff=:coarse, "
376 sql.append(", notes=''"); 379 "moisture=:moisture, diastatic_power=:diastatic, protein=:protein, dissolved_protein=:dissolved, "
377 query.exec(sql); 380 "max_in_batch=:maxinbatch, recommend_mash=:mash, added=:added, di_ph=:diph, "
381 "acid_to_ph_57=:acidph, graintype=:graintype, uuid = :uuid");
382 query.bindValue(":name", f->f_name);
383 query.bindValue(":type", f->f_type);
384 query.bindValue(":yield", QString("%1").arg(f->f_yield, 2, 'f', 1, '0'));
385 query.bindValue(":color", QString("%1").arg(Utils::srm_to_ebc(f->f_color), 1, 'f', 0, '0'));
386 query.bindValue(":addafter", f->f_add_after_boil ? 1:0);
387 query.bindValue(":origin", f->f_origin);
388 query.bindValue(":supplier", f->f_supplier);
389 query.bindValue(":notes", f->f_notes);
390 query.bindValue(":coarse", QString("%1").arg(f->f_coarse_fine_diff, 4, 'f', 3, '0'));
391 query.bindValue(":moisture", QString("%1").arg(f->f_moisture, 4, 'f', 3, '0'));
392 query.bindValue(":diastatic", Utils::kolbach_to_lintner(f->f_diastatic_power));
393 query.bindValue(":protein", QString("%1").arg(f->f_protein, 4, 'f', 3, '0'));
394 query.bindValue(":dissolved", QString("%1").arg(f->f_dissolved_protein, 4, 'f', 3, '0'));
395 query.bindValue(":maxinbatch", QString("%1").arg(f->f_max_in_batch, 2, 'f', 1, '0'));
396 query.bindValue(":mash", f->f_recommend_mash ? 1:0);
397 query.bindValue(":added", f->f_added);
398 query.bindValue(":diph", QString("%1").arg(f->f_di_ph, 6, 'f', 5, '0'));
399 query.bindValue(":acidph", QString("%1").arg(f->f_acid_to_ph_57, 6, 'f', 5, '0'));
400 query.bindValue(":graintype", f->f_graintype);
401 query.bindValue(":uuid", QUuid::createUuid().toString().mid(1, 36));
402 query.exec();
378 if (query.lastError().isValid()) { 403 if (query.lastError().isValid()) {
379 qWarning() << sql << query.lastError(); 404 qWarning() << query.lastError();
380 errors++; 405 errors++;
381 } 406 }
382 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); 407 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
383 break; 408 break;
384 } 409 }
385 if ((xml->tokenType() == QXmlStreamReader::StartElement) && 410 if ((xml->tokenType() == QXmlStreamReader::StartElement) &&
386 ((xml->name() == "VERSION") || (xml->name() == "DISPLAY_COST") || 411 ((xml->name() == "VERSION") || (xml->name() == "DISPLAY_COST") ||
387 (xml->name() == "DISPLAY_COLOR") || (xml->name() == "INVENTORY") || 412 (xml->name() == "DISPLAY_COLOR") || (xml->name() == "INVENTORY") ||
413 (xml->name() == "COST") || (xml->name() == "ALWAYS_ON_STOCK") ||
388 (xml->name() == "PERCENTAGE") || (xml->name() == "ADJUST_TO_TOTAL_100") )) { 414 (xml->name() == "PERCENTAGE") || (xml->name() == "ADJUST_TO_TOTAL_100") )) {
389 // Ignore. 415 // Ignore.
390 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { 416 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) {
391 sql.append(QString(", name='%1'").arg(xml->readElementText())); 417 f->f_name = xml->readElementText();
392 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COST")) {
393 sql.append(QString(", cost=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0'));
394 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { 418 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) {
395 QString temp = xml->readElementText(); 419 QString temp = xml->readElementText();
396 if (temp == "Grain") 420 if (temp == "Sugar")
397 sql.append(", type=0"); 421 f->f_type = 1;
398 else if (temp == "Sugar")
399 sql.append(", type=1");
400 else if (temp == "Extract") 422 else if (temp == "Extract")
401 sql.append(", type=2"); 423 f->f_type = 2;
402 else if (temp == "Dry extract") 424 else if (temp == "Dry extract")
403 sql.append(", type=3"); 425 f->f_type = 3;
404 else if (temp == "Adjunct") 426 else if (temp == "Adjunct")
405 sql.append(", type=4"); 427 f->f_type = 4;
428 else
429 f->f_type = 0;
406 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ORIGIN")) { 430 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ORIGIN")) {
407 sql.append(QString(", origin='%1'").arg(xml->readElementText())); 431 f->f_origin = xml->readElementText();
408 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SUPPLIER")) { 432 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SUPPLIER")) {
409 sql.append(QString(", supplier='%1'").arg(xml->readElementText())); 433 f->f_supplier = xml->readElementText();
410 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { 434 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) {
411 sql.append(QString(", notes='%1'").arg(xml->readElementText())); 435 f->f_notes = xml->readElementText();
412 hasnotes = true;
413 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ALWAYS_ON_STOCK")) {
414 sql.append(QString(", always_on_stock=%1").arg(xml->readElementText().toLower()));
415 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YIELD")) { 436 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YIELD")) {
416 sql.append(QString(", yield=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 437 f->f_yield = xml->readElementText().toDouble();
417 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COARSE_FINE_DIFF")) { 438 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COARSE_FINE_DIFF")) {
418 sql.append(QString(", coarse_fine_diff=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 439 f->f_coarse_fine_diff = xml->readElementText().toDouble();
419 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MOISTURE")) { 440 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MOISTURE")) {
420 sql.append(QString(", moisture=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 441 f->f_moisture = xml->readElementText().toDouble();
421 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DIASTATIC_POWER")) { 442 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DIASTATIC_POWER")) {
422 sql.append(QString(", diastatic_power=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 443 f->f_diastatic_power = xml->readElementText().toDouble();
423 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAX_IN_BATCH")) { 444 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAX_IN_BATCH")) {
424 sql.append(QString(", max_in_batch=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 445 f->f_max_in_batch = xml->readElementText().toDouble();
425 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECOMMEND_MASH")) { 446 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECOMMEND_MASH")) {
426 sql.append(QString(", recommend_mash=%1").arg(xml->readElementText().toLower())); 447 f->f_recommend_mash = (xml->readElementText() == "TRUE") ? true:false;
427 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "GRAINTYPE")) { 448 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "GRAINTYPE")) {
428 QString temp = xml->readElementText(); 449 QString temp = xml->readElementText();
429 if (temp == "Base") 450 if (temp == "Roast")
430 sql.append(QString(", graintype=0")); 451 f->f_graintype = 1;
431 else if (temp == "Roast")
432 sql.append(QString(", graintype=1"));
433 else if (temp == "Crystal") 452 else if (temp == "Crystal")
434 sql.append(QString(", graintype=2")); 453 f->f_graintype = 2;
435 else if (temp == "Kilned") 454 else if (temp == "Kilned")
436 sql.append(QString(", graintype=3")); 455 f->f_graintype = 3;
437 else if (temp == "Sour Malt") 456 else if (temp == "Sour Malt")
438 sql.append(QString(", graintype=4")); 457 f->f_graintype = 4;
439 else if (temp == "Special") 458 else if (temp == "Special")
440 sql.append(QString(", graintype=5")); 459 f->f_graintype = 5;
441 else if (temp == "No malt") 460 else if (temp == "No malt")
442 sql.append(QString(", graintype=6")); 461 f->f_graintype = 6;
462 else
463 f->f_graintype = 0;
443 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADDED")) { 464 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADDED")) {
444 QString temp = xml->readElementText(); 465 QString temp = xml->readElementText();
445 if (temp == "Mash") 466 if (temp == "Boil")
446 sql.append(QString(", added=0")); 467 f->f_added = 1;
447 else if (temp == "Boil")
448 sql.append(QString(", added=1"));
449 else if (temp == "Fermentation") 468 else if (temp == "Fermentation")
450 sql.append(QString(", added=2")); 469 f->f_added = 2;
451 else if (temp == "Lagering") 470 else if (temp == "Lagering")
452 sql.append(QString(", added=3")); 471 f->f_added = 3;
453 else if (temp == "Bottle") 472 else if (temp == "Bottle")
454 sql.append(QString(", added=4")); 473 f->f_added = 4;
474 else
475 f->f_added = 0;
455 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADD_AFTER_BOIL")) { 476 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADD_AFTER_BOIL")) {
456 sql.append(QString(", add_after_boil=%1").arg(xml->readElementText().toLower())); 477 f->f_add_after_boil = (xml->readElementText() == "TRUE") ? true:false;
457 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR")) { 478 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR")) {
458 sql.append(QString(", color=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 479 f->f_color = xml->readElementText().toDouble();
459 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROTEIN")) { 480 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROTEIN")) {
460 sql.append(QString(", protein=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 481 f->f_protein = xml->readElementText().toDouble();
461 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DISSOLVED_PROTEIN")) { 482 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DISSOLVED_PROTEIN")) {
462 sql.append(QString(", dissolved_protein=%1").arg(xml->readElementText().toDouble(), 5, 'f', 4, '0')); 483 f->f_dissolved_protein = xml->readElementText().toDouble();
463 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DI_pH")) { 484 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DI_pH")) {
464 sql.append(QString(", di_ph=%1").arg(xml->readElementText().toDouble(), 6, 'f', 5, '0')); 485 f->f_di_ph = xml->readElementText().toDouble();
465 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ACID_TO_pH_5.7")) { 486 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ACID_TO_pH_5.7")) {
466 sql.append(QString(", acid_to_ph_57=%1").arg(xml->readElementText().toDouble(), 6, 'f', 5, '0')); 487 f->f_acid_to_ph_57 = xml->readElementText().toDouble();
467 } else { 488 } else {
468 if (xml->tokenType() == QXmlStreamReader::StartElement) 489 if (xml->tokenType() == QXmlStreamReader::StartElement)
469 qDebug() << "2 " << xml->tokenType() << xml->name(); 490 qDebug() << "2 " << xml->tokenType() << xml->name();
470 } 491 }
471 } 492 }
485 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP")) { 506 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP")) {
486 /* 507 /*
487 * Hop 508 * Hop
488 */ 509 */
489 total++; 510 total++;
490 sql = "INSERT INTO inventory_hops SET uuid='";
491 sql.append(QUuid::createUuid().toString().mid(1, 36));
492 511
493 while (xml->readNext()) { 512 while (xml->readNext()) {
494 if (xml->atEnd()) 513 if (xml->atEnd())
495 break; 514 break;
496 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOP")) { 515 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOP")) {
525 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISC")) { 544 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISC")) {
526 /* 545 /*
527 * Misc 546 * Misc
528 */ 547 */
529 total++; 548 total++;
530 sql = "INSERT INTO inventory_miscs SET uuid='";
531 sql.append(QUuid::createUuid().toString().mid(1, 36));
532 549
533 while (xml->readNext()) { 550 while (xml->readNext()) {
534 if (xml->atEnd()) 551 if (xml->atEnd())
535 break; 552 break;
536 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISC")) { 553 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISC")) {
565 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEAST")) { 582 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEAST")) {
566 /* 583 /*
567 * Yeast 584 * Yeast
568 */ 585 */
569 total++; 586 total++;
570 sql = "INSERT INTO inventory_yeasts SET uuid='";
571 sql.append(QUuid::createUuid().toString().mid(1, 36));
572 587
573 while (xml->readNext()) { 588 while (xml->readNext()) {
574 if (xml->atEnd()) 589 if (xml->atEnd())
575 break; 590 break;
576 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEAST")) { 591 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEAST")) {
605 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATER")) { 620 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATER")) {
606 /* 621 /*
607 * Water 622 * Water
608 */ 623 */
609 total++; 624 total++;
610 sql = "INSERT INTO inventory_waters SET uuid='";
611 sql.append(QUuid::createUuid().toString().mid(1, 36));
612 625
613 while (xml->readNext()) { 626 while (xml->readNext()) {
614 if (xml->atEnd()) 627 if (xml->atEnd())
615 break; 628 break;
616 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATER")) { 629 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATER")) {
645 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPE")) { 658 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPE")) {
646 /* 659 /*
647 * Recipe 660 * Recipe
648 */ 661 */
649 total++; 662 total++;
650 sql = "INSERT INTO recipes SET uuid='";
651 sql.append(QUuid::createUuid().toString().mid(1, 36));
652 663
653 while (xml->readNext()) { 664 while (xml->readNext()) {
654 if (xml->atEnd()) 665 if (xml->atEnd())
655 break; 666 break;
656 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPE")) { 667 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPE")) {
685 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH")) { 696 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH")) {
686 /* 697 /*
687 * Mash 698 * Mash
688 */ 699 */
689 total++; 700 total++;
690 sql = "INSERT INTO inventory_mashs SET uuid='";
691 sql.append(QUuid::createUuid().toString().mid(1, 36));
692 701
693 while (xml->readNext()) { 702 while (xml->readNext()) {
694 if (xml->atEnd()) 703 if (xml->atEnd())
695 break; 704 break;
696 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH")) { 705 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH")) {

mercurial