kima2/src/core/marketplace.h

74 lines
2.0 KiB
C++

#ifndef MARKETPLACE_H
#define MARKETPLACE_H
#include "article.h"
#include "database.h"
#include "sale.h"
#include "seller.h"
#include <filesystem>
#include <vector>
class ExcelReader;
namespace
{
using SellersVec = std::vector<std::unique_ptr<Seller>>;
using SalesVec = std::vector<std::unique_ptr<Sale>>;
using BasketVec = std::vector<std::unique_ptr<Article>>;
} // namespace
class Marketplace
{
public:
Marketplace();
void storeToDb(bool onlyDelete = false);
Database::InitResult loadFromDb();
SellersVec& getSellers();
SalesVec& getSales();
int getNextSellerNo();
int getNextArticleNo();
int getNumSellersDelete();
int getNumArticlesSold();
int getNumArticlesOffered();
BasketVec& getBasket();
int getBasketSumInCent();
std::string getBasketSumAsString();
void sortSellers();
Seller* findSellerWithSellerNo(int sellerNo);
Seller* findSellerWithUuid(const std::string& uuid);
void addArticleToBasket(std::unique_ptr<Article> article);
size_t basketSize();
void finishCurrentSale(std::unique_ptr<Sale> sale);
void removeSale(boost::uuids::uuid uuid);
void setSalesToDelete(int cashPointNo);
int getOverallSumInCent();
std::string getOverallSumAsString();
int getOverallPaymentInCent(int percent, int maxFee);
std::string getOverallPaymentAsString(int percent, int maxFee);
std::string getOverallRevenueAsString(int percent, int maxFee);
void clear();
void exportReportToCSV(const std::filesystem::path& filePath, int feeInPercent,
int maxFeeInEuro);
friend class ExcelReader;
private:
SellersVec sellers_;
SalesVec sales_;
BasketVec basket_;
};
double marketFee(int sumInCent, int percent, int maxFeeInCent);
std::string marketFeeAsString(int sumInCent, int percent, int maxFeeInCent);
std::string paymentAsString(int sumInCent, int percent, int maxFeeInCent);
std::string escapeCsvValue(const std::string& value, const char delimiter);
#endif