From 940688edd5fec478dd549e25b16f8255ae036c01 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Sat, 28 Jul 2018 11:52:43 +0200 Subject: [PATCH] delete sales --- src/core/database.cpp | 6 ++++++ src/core/marketplace.cpp | 9 ++++++++- src/core/marketplace.h | 1 + src/core/sale.cpp | 2 +- src/core/sale.h | 5 ++++- src/gui/salemodel.cpp | 10 +++++++--- 6 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/core/database.cpp b/src/core/database.cpp index 6eb442a..89cbca8 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -495,6 +495,12 @@ unsigned int Database::storeSales(std::vector>& sales) endTransaction(); + // Everything went fine, so we can now update our objects + sales.erase( + std::remove_if(sales.begin(), sales.end(), + [](const auto& sale) { return (sale->getState() == Sale::State::DELETE); }), + sales.end()); + for (auto& sale : sales) { sale->setState(Sale::State::OK); } diff --git a/src/core/marketplace.cpp b/src/core/marketplace.cpp index 6c158c7..d59b281 100644 --- a/src/core/marketplace.cpp +++ b/src/core/marketplace.cpp @@ -124,7 +124,14 @@ std::string Marketplace::getBasketSumAsString() // sumStream << std::fixed << std::setprecision(2) << sumInEuro << " €"; // return sumStream.str(); std::stringstream sumStream; - //sumStream.imbue(std::locale("de_DE.utf8")); + // sumStream.imbue(std::locale("de_DE.utf8")); sumStream << std::right << std::setw(12) << std::showbase << std::put_money(sumInCent, false); return sumStream.str(); +} + +void Marketplace::removeSale(boost::uuids::uuid uuid) +{ + sales_.erase(std::remove_if(sales_.begin(), sales_.end(), + [&uuid](const auto& a) { return a->getUuid() == uuid; }), + sales_.end()); } \ No newline at end of file diff --git a/src/core/marketplace.h b/src/core/marketplace.h index fdb1059..ce27420 100644 --- a/src/core/marketplace.h +++ b/src/core/marketplace.h @@ -39,6 +39,7 @@ class Marketplace void addArticleToBasket(std::unique_ptr
article); size_t basketSize(); void finishCurrentSale(); + void removeSale(boost::uuids::uuid uuid); private: SellersVec sellers_; diff --git a/src/core/sale.cpp b/src/core/sale.cpp index 31fe06e..6c3dd1b 100644 --- a/src/core/sale.cpp +++ b/src/core/sale.cpp @@ -8,7 +8,7 @@ void Sale::addArticle(Article* articlePtr) articles_.push_back(articlePtr); } -std::vector& Sale::getArticles() { return articles_; } +ArticlesVec& Sale::getArticles() { return articles_; } void Sale::removeArticle(const Article* articlePtr) { diff --git a/src/core/sale.h b/src/core/sale.h index 15b963f..ff69b9f 100644 --- a/src/core/sale.h +++ b/src/core/sale.h @@ -7,9 +7,12 @@ #include "boost/date_time/posix_time/posix_time.hpp" -//class Article; +// class Article; +namespace +{ using ArticlesVec = std::vector; +} class Sale : public Entity { diff --git a/src/gui/salemodel.cpp b/src/gui/salemodel.cpp index 8cc813d..ae21dcb 100644 --- a/src/gui/salemodel.cpp +++ b/src/gui/salemodel.cpp @@ -175,14 +175,18 @@ bool SaleModel::removeRows(int row, int count, const QModelIndex& parent) } else if (!parent.parent().isValid()) { // remove one article from a sale auto sale = static_cast(parent.internalPointer()); - auto articles = sale->getArticles(); - emit beginRemoveRows(parent, row, row + count -1); + auto& articles = sale->getArticles(); articles.at(row)->setState(Article::State::DELETE); + emit beginRemoveRows(parent, row, row + count - 1); sale->removeArticle(articles.at(row)); - marketplace_->storeToDb(); + emit endRemoveRows(); if (articles.size() == 0) { std::cout << "No articles left.\n"; + // marketplace_->removeSale(sale->getUuid()); + sale->setState(Sale::State::DELETE); } + emit beginRemoveRows(parent.parent(), 0, 0); + marketplace_->storeToDb(); emit endRemoveRows(); }