2018-07-13 13:04:19 +02:00
|
|
|
#include "marketplace.h"
|
|
|
|
#include "database.h"
|
|
|
|
|
2018-07-16 18:04:25 +02:00
|
|
|
#include <algorithm>
|
|
|
|
|
2018-07-16 12:00:17 +02:00
|
|
|
Marketplace::Marketplace()
|
|
|
|
{
|
2018-07-16 15:30:24 +02:00
|
|
|
auto seller = std::make_unique<Seller>("Max", "Mustermann");
|
2018-07-16 18:04:25 +02:00
|
|
|
seller->createUuid();
|
2018-07-16 15:30:24 +02:00
|
|
|
sellers_.push_back(std::move(seller));
|
2018-07-16 12:00:17 +02:00
|
|
|
}
|
|
|
|
|
2018-07-18 14:36:53 +02:00
|
|
|
void Marketplace::storeToDb(bool onlyDelete)
|
2018-07-16 12:00:17 +02:00
|
|
|
{
|
2018-07-17 10:19:41 +02:00
|
|
|
Database db;
|
2018-07-18 14:36:53 +02:00
|
|
|
db.storeSellers(sellers_, onlyDelete);
|
2018-07-16 12:00:17 +02:00
|
|
|
}
|
|
|
|
|
2018-07-17 11:09:35 +02:00
|
|
|
void Marketplace::loadFromDb()
|
|
|
|
{
|
|
|
|
Database db;
|
|
|
|
db.loadSellers(sellers_);
|
|
|
|
}
|
2018-07-16 18:04:25 +02:00
|
|
|
|
2018-07-20 11:52:26 +02:00
|
|
|
SellersVec& Marketplace::getSellers() { return sellers_; }
|
2018-07-16 18:04:25 +02:00
|
|
|
|
|
|
|
int Marketplace::getNextSellerNo()
|
|
|
|
{
|
|
|
|
auto iter = std::max_element(
|
|
|
|
sellers_.begin(), sellers_.end(),
|
2018-07-20 11:52:26 +02:00
|
|
|
[](const auto& a, const auto& b) -> bool { return a->getSellerNo() < b->getSellerNo(); });
|
2018-07-17 20:17:46 +02:00
|
|
|
if (iter == sellers_.end())
|
|
|
|
return 1;
|
2018-07-16 18:04:25 +02:00
|
|
|
return (*iter)->getSellerNo() + 1;
|
2018-07-17 15:32:16 +02:00
|
|
|
}
|
|
|
|
|
2018-07-22 20:10:22 +02:00
|
|
|
int Marketplace::getNextArticleNo()
|
|
|
|
{
|
2018-07-23 13:39:49 +02:00
|
|
|
int maxArtNoInDb{0};
|
|
|
|
int maxArtNoInBasket{0};
|
|
|
|
|
2018-07-23 08:57:35 +02:00
|
|
|
auto iter = std::max_element(sellers_.begin(), sellers_.end(),
|
|
|
|
[](const auto& a, const auto& b) -> bool {
|
|
|
|
return a->getMaxArticleNo() < b->getMaxArticleNo();
|
|
|
|
});
|
2018-07-23 13:39:49 +02:00
|
|
|
if (iter != sellers_.end())
|
|
|
|
maxArtNoInDb = (*iter)->getMaxArticleNo();
|
|
|
|
|
|
|
|
auto iter2 =
|
|
|
|
std::max_element(basket_.begin(), basket_.end(), [](const auto& a, const auto& b) -> bool {
|
|
|
|
return a->getArticleNo() < b->getArticleNo();
|
|
|
|
});
|
|
|
|
|
|
|
|
if (iter2 != basket_.end())
|
|
|
|
maxArtNoInBasket = (*iter2)->getArticleNo();
|
|
|
|
|
|
|
|
return maxArtNoInBasket > maxArtNoInDb ? maxArtNoInBasket + 1 : maxArtNoInDb + 1;
|
2018-07-22 20:10:22 +02:00
|
|
|
}
|
|
|
|
|
2018-07-17 15:32:16 +02:00
|
|
|
int Marketplace::getNumSellersDelete()
|
|
|
|
{
|
2018-07-17 20:17:46 +02:00
|
|
|
int count = std::count_if(sellers_.begin(), sellers_.end(),
|
|
|
|
[](const auto& a) { return a->getState() == Seller::State::DELETE; });
|
2018-07-17 15:32:16 +02:00
|
|
|
return count;
|
2018-07-18 09:00:46 +02:00
|
|
|
}
|
|
|
|
|
2018-07-20 22:07:42 +02:00
|
|
|
void Marketplace::sortSellers() { std::sort(sellers_.begin(), sellers_.end()); }
|
|
|
|
|
|
|
|
Seller* Marketplace::findSellerWithSellerNo(int sellerNo)
|
|
|
|
{
|
2018-07-21 21:18:22 +02:00
|
|
|
auto iter = std::find_if(sellers_.begin(), sellers_.end(),
|
|
|
|
[sellerNo](const auto& a) { return a->getSellerNo() == sellerNo; });
|
2018-07-20 22:07:42 +02:00
|
|
|
if (iter == sellers_.end())
|
|
|
|
return nullptr;
|
|
|
|
return (*iter).get();
|
2018-07-21 19:24:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Marketplace::addArticleToBasket(std::unique_ptr<Article> article)
|
|
|
|
{
|
|
|
|
basket_.push_back(std::move(article));
|
2018-07-21 21:18:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
size_t Marketplace::basketSize() { return basket_.size(); }
|
|
|
|
|
|
|
|
void Marketplace::finishCurrentSale()
|
|
|
|
{
|
|
|
|
if (basket_.size() == 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
auto sale = std::make_unique<Sale>();
|
|
|
|
|
|
|
|
for (auto iter = basket_.begin(); iter != basket_.end(); ++iter) {
|
|
|
|
sale->addArticle((*iter).get());
|
|
|
|
(*iter)->getSeller()->addArticle(std::move(*iter));
|
|
|
|
}
|
2018-07-23 08:57:35 +02:00
|
|
|
|
2018-07-21 21:18:22 +02:00
|
|
|
sales_.push_back(std::move(sale));
|
2018-07-22 20:10:22 +02:00
|
|
|
basket_.clear();
|
2018-07-23 08:57:35 +02:00
|
|
|
storeToDb();
|
2018-07-22 20:10:22 +02:00
|
|
|
}
|
|
|
|
|
2018-07-23 08:57:35 +02:00
|
|
|
BasketVec& Marketplace::getBasket() { return basket_; }
|