2018-07-12 13:34:17 +02:00
|
|
|
#include "sale.h"
|
|
|
|
|
|
|
|
#include <numeric>
|
|
|
|
|
2018-07-12 13:42:22 +02:00
|
|
|
void Sale::addArticle(std::shared_ptr<Article> articlePtr)
|
|
|
|
{
|
2018-07-12 14:39:08 +02:00
|
|
|
articlePtr->setSale(this);
|
2018-07-12 13:42:22 +02:00
|
|
|
articles_.push_back(articlePtr);
|
|
|
|
}
|
|
|
|
|
2018-07-13 10:51:07 +02:00
|
|
|
std::vector<Article*> Sale::getArticles()
|
|
|
|
{
|
|
|
|
std::vector<Article*> articles(articles_.size());
|
|
|
|
for (const auto& article : articles_) {
|
|
|
|
articles.push_back(article.get());
|
|
|
|
}
|
|
|
|
|
|
|
|
return articles;
|
|
|
|
}
|
|
|
|
|
2018-07-13 10:12:16 +02:00
|
|
|
void Sale::removeArticle(const Article* articlePtr)
|
|
|
|
{
|
|
|
|
auto it = std::find_if(articles_.begin(), articles_.end(),
|
|
|
|
[&articlePtr](auto art) { return art.get() == articlePtr; });
|
|
|
|
if (it != articles_.end()) {
|
|
|
|
(*it)->setSale(nullptr);
|
2018-07-13 14:16:16 +02:00
|
|
|
(*it)->setState(
|
|
|
|
Article::State::DELETE); // since we only have ad-hoc articles, that have all been sold
|
2018-07-13 10:12:16 +02:00
|
|
|
articles_.erase(it);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-12 13:34:17 +02:00
|
|
|
int Sale::sumInCents()
|
|
|
|
{
|
2018-07-12 13:42:22 +02:00
|
|
|
int sum = std::accumulate(articles_.begin(), articles_.end(), 0,
|
2018-07-13 10:12:16 +02:00
|
|
|
[](int a, std::shared_ptr<Article> b) { return a + b->getPrice(); });
|
2018-07-12 13:42:22 +02:00
|
|
|
return sum;
|
2018-07-13 10:51:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
std::string Sale::getTimestamp() { return timestamp_; }
|
|
|
|
|
|
|
|
void Sale::setTimestamp(const std::string& timestamp) { timestamp_ = timestamp; }
|