2019-09-26 16:41:39 +02:00
|
|
|
#include "csvreader.h"
|
|
|
|
#include "utils.h"
|
|
|
|
|
|
|
|
#include <fstream>
|
2019-10-11 10:01:21 +02:00
|
|
|
|
2023-04-25 16:11:34 +02:00
|
|
|
// #include <csv.hpp>
|
|
|
|
#include <boost/algorithm/string.hpp>
|
2019-09-26 16:41:39 +02:00
|
|
|
|
2020-02-12 16:13:16 +01:00
|
|
|
#ifdef DELETE
|
|
|
|
#undef DELETE
|
|
|
|
#endif
|
|
|
|
|
2019-09-26 16:41:39 +02:00
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
2022-07-07 15:21:46 +02:00
|
|
|
std::size_t CsvReader::readSellersFromFile(const fs::path &filePath, Marketplace *market)
|
2019-09-26 16:41:39 +02:00
|
|
|
{
|
|
|
|
|
2019-10-01 11:38:41 +02:00
|
|
|
#if defined(_WIN64) || defined(_WIN32)
|
|
|
|
// Windows: Somhow this is necessary in order to open file names with umlauts
|
|
|
|
auto wide = filePath.wstring();
|
|
|
|
std::string fileName(wide.begin(), wide.end());
|
|
|
|
|
2023-04-25 16:11:34 +02:00
|
|
|
std::ifstream infile(fileName);
|
2019-10-01 11:38:41 +02:00
|
|
|
#else
|
2023-04-25 16:11:34 +02:00
|
|
|
// csv::CSVReader csvReader(filePath.string(), format);
|
|
|
|
std::ifstream infile(filePath.string());
|
2019-10-01 11:38:41 +02:00
|
|
|
#endif
|
|
|
|
|
2022-07-07 15:21:46 +02:00
|
|
|
for (auto &seller : market->getSellers()) {
|
2019-09-26 16:41:39 +02:00
|
|
|
seller->setState(Seller::State::DELETE);
|
|
|
|
}
|
|
|
|
|
|
|
|
market->storeToDb(true);
|
2022-07-07 15:21:46 +02:00
|
|
|
|
2023-04-25 16:11:34 +02:00
|
|
|
std::string line;
|
|
|
|
|
|
|
|
while (getline(infile, line)) {
|
|
|
|
std::vector<std::string> strs;
|
|
|
|
boost::split(strs, line, boost::is_any_of(";"));
|
|
|
|
|
|
|
|
auto seller = std::make_unique<Seller>();
|
|
|
|
|
|
|
|
try {
|
|
|
|
int sellerNo = std::stoi(strs[0]);
|
|
|
|
seller->setSellerNo(sellerNo);
|
|
|
|
} catch (std::invalid_argument const &ex) {
|
2019-09-26 16:41:39 +02:00
|
|
|
continue;
|
2022-07-07 15:21:46 +02:00
|
|
|
}
|
2019-09-26 16:41:39 +02:00
|
|
|
|
2023-04-25 16:11:34 +02:00
|
|
|
if (isNumber(strs[1]))
|
|
|
|
seller->setNumArticlesOffered(std::stoi(strs[1]));
|
|
|
|
else
|
2019-09-26 16:41:39 +02:00
|
|
|
seller->setNumArticlesOffered(0);
|
2022-09-24 20:25:33 +02:00
|
|
|
|
|
|
|
// If both, first name and last name, are empty, use N. N.
|
|
|
|
// Else, use the real values.
|
2023-04-25 16:11:34 +02:00
|
|
|
if (strs[2].empty() && strs[2].empty()) {
|
2022-09-24 20:25:33 +02:00
|
|
|
seller->setFirstName("N.");
|
|
|
|
seller->setLastName("N.");
|
|
|
|
} else {
|
2023-04-25 16:11:34 +02:00
|
|
|
std::string firstName = strs[2];
|
2022-09-24 20:25:33 +02:00
|
|
|
seller->setFirstName(trim(firstName));
|
2023-04-25 16:11:34 +02:00
|
|
|
std::string lastName = strs[3];
|
2022-09-24 20:25:33 +02:00
|
|
|
seller->setLastName(trim(lastName));
|
|
|
|
}
|
|
|
|
|
2019-09-26 16:41:39 +02:00
|
|
|
market->getSellers().push_back(std::move(seller));
|
|
|
|
}
|
|
|
|
|
2022-09-24 20:41:15 +02:00
|
|
|
// Add one additional seller "RESERVE RESERVE"
|
|
|
|
auto seller = std::make_unique<Seller>();
|
|
|
|
seller->setSellerNo(market->getNextSellerNo());
|
|
|
|
seller->setFirstName("RESERVE");
|
|
|
|
seller->setLastName("RESERVE");
|
|
|
|
market->getSellers().push_back(std::move(seller));
|
|
|
|
|
2019-09-26 16:41:39 +02:00
|
|
|
// If there was no special seller "Sonderkonto" in import data, then create one
|
2019-10-04 15:15:43 +02:00
|
|
|
auto specialSeller = market->findSellerWithSellerNo(0);
|
2019-09-26 16:41:39 +02:00
|
|
|
if (!specialSeller) {
|
|
|
|
auto seller = std::make_unique<Seller>();
|
|
|
|
seller->setSellerNo(0);
|
|
|
|
seller->setLastName("Sonderkonto");
|
|
|
|
seller->setFirstName("Sonderkonto");
|
|
|
|
seller->setNumArticlesOffered(0);
|
|
|
|
market->getSellers().push_back(std::move(seller));
|
|
|
|
}
|
|
|
|
|
|
|
|
market->sortSellers();
|
|
|
|
market->storeToDb();
|
|
|
|
|
|
|
|
return market->getSellers().size() - 1; // minus 1 because we don't count the "special" seller
|
|
|
|
}
|