diff --git a/src/core/database.cpp b/src/core/database.cpp index ea990ba..973633c 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -397,5 +397,41 @@ unsigned int Database::storeArticles(std::vector articles) } } + return count; +} + +unsigned int Database::loadSellers(std::vector>& sellers) +{ + int retCode{}; + int count{}; + sqlite3_stmt* stmt; + + retCode = sqlite3_prepare_v2(db_, + "SELECT id, seller_no, first_name, last_name, " + "num_offered_articles FROM sellers ORDER BY seller_no", + -1, &stmt, nullptr); + if (retCode != SQLITE_OK) + throw std::runtime_error(sqlite3_errmsg(db_)); + + retCode = sqlite3_step(stmt); + + sellers.clear(); + + while (retCode != SQLITE_DONE) { + ++count; + auto seller = std::make_unique(); + seller->setUuidFromString(reinterpret_cast(sqlite3_column_text(stmt, 0))); + seller->setSellerNo(sqlite3_column_int(stmt, 1)); + seller->setFirstName(reinterpret_cast(sqlite3_column_text(stmt, 2))); + seller->setLastName(reinterpret_cast(sqlite3_column_text(stmt, 3))); + seller->setNumArticlesOffered(sqlite3_column_int(stmt, 4)); + seller->setState(Seller::State::OK); + sellers.push_back(std::move(seller)); + + retCode = sqlite3_step(stmt); + } + + sqlite3_finalize(stmt); + return count; } \ No newline at end of file diff --git a/src/core/database.h b/src/core/database.h index 6040087..6e91f91 100644 --- a/src/core/database.h +++ b/src/core/database.h @@ -17,6 +17,7 @@ class Database Database& operator=(const Database&) = delete; void exec(const std::string& sql); unsigned int storeSellers(std::vector>& sellers); + unsigned int loadSellers(std::vector>& sellers); private: sqlite3* db_{nullptr}; diff --git a/src/core/marketplace.cpp b/src/core/marketplace.cpp index e1fcc57..5bd3a1f 100644 --- a/src/core/marketplace.cpp +++ b/src/core/marketplace.cpp @@ -12,13 +12,15 @@ Marketplace::Marketplace() void Marketplace::storeToDb() { - //const std::string DB_PATH{"/tmp/kima2.db"}; - Database db; db.storeSellers(sellers_); } -void Marketplace::loadFromDb() {} +void Marketplace::loadFromDb() +{ + Database db; + db.loadSellers(sellers_); +} std::vector>& Marketplace::getSellers() { return sellers_; } diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 8734a64..0839e78 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -27,7 +27,7 @@ void MainWindow::on_actionEditSeller_triggered() STATUSBAR_TIMEOUT); } else { marketplace_->loadFromDb(); - statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten verworfen.", + statusBar()->showMessage("Änderungen an den Verkäufer-Stammdaten verworfen!", STATUSBAR_TIMEOUT); } } \ No newline at end of file diff --git a/src/gui/sellerdialog.cpp b/src/gui/sellerdialog.cpp index 3088028..7063d79 100644 --- a/src/gui/sellerdialog.cpp +++ b/src/gui/sellerdialog.cpp @@ -18,6 +18,7 @@ void SellerDialog::on_newButton_clicked() { ui_.tableView->model()->insertRows(ui_.tableView->model()->rowCount(), 1); ui_.tableView->scrollToBottom(); + ui_.tableView->selectRow(ui_.tableView->model()->rowCount() - 1); } void SellerDialog::accept() diff --git a/src/gui/sellerdialog.ui b/src/gui/sellerdialog.ui index 28b9edd..1dc8f78 100644 --- a/src/gui/sellerdialog.ui +++ b/src/gui/sellerdialog.ui @@ -5,6 +5,14 @@ Qt::NonModal + + + 0 + 0 + 600 + 400 + + 0 @@ -38,7 +46,7 @@ - Neu + &Neu diff --git a/src/gui/sellermodel.cpp b/src/gui/sellermodel.cpp index 4f9815b..a88541d 100644 --- a/src/gui/sellermodel.cpp +++ b/src/gui/sellermodel.cpp @@ -22,6 +22,10 @@ QVariant SellerModel::data(const QModelIndex& index, int role) const return QVariant(); Seller* seller = marketplace_->getSellers().at(index.row()).get(); + + if (seller->getState() == Seller::State::DELETE) + return QVariant::Invalid; + switch (index.column()) { case 0: return seller->getUuidAsString().c_str(); @@ -117,12 +121,12 @@ bool SellerModel::setData(const QModelIndex& index, const QVariant& value, int r bool SellerModel::insertRows(int row, int count, const QModelIndex& parent) { - beginInsertRows(parent, row, row + count - 1); + emit beginInsertRows(parent, row, row + count - 1); auto seller = std::make_unique(); seller->createUuid(); seller->setSellerNo(marketplace_->getNextSellerNo()); marketplace_->getSellers().push_back(std::move(seller)); - endInsertRows(); + emit endInsertRows(); return true; } \ No newline at end of file