67 lines
2 KiB
C++
67 lines
2 KiB
C++
|
#include "csvreader.h"
|
||
|
#include "utils.h"
|
||
|
|
||
|
#include <fstream>
|
||
|
#include <csv.hpp>
|
||
|
|
||
|
namespace fs = std::filesystem;
|
||
|
|
||
|
std::size_t CsvReader::readSellersFromFile(const fs::path& filePath, Marketplace* market)
|
||
|
{
|
||
|
csv::CSVFormat format;
|
||
|
format.delimiter(';');
|
||
|
|
||
|
csv::CSVReader csvReader(filePath.string(), format);
|
||
|
|
||
|
for (auto& seller : market->getSellers()) {
|
||
|
seller->setState(Seller::State::DELETE);
|
||
|
}
|
||
|
|
||
|
market->storeToDb(true);
|
||
|
|
||
|
int rowCount{};
|
||
|
for (csv::CSVRow &row : csvReader) {
|
||
|
if (!row[0].is_int()) {
|
||
|
++rowCount;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (row[2].get<std::string>().empty() && row[3].get<std::string>().empty()) {
|
||
|
++rowCount;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
auto seller = std::make_unique<Seller>();
|
||
|
seller->createUuid();
|
||
|
seller->setSellerNo(row[0].get<int>());
|
||
|
if (row[1].is_int()) {
|
||
|
seller->setNumArticlesOffered(row[1].get<int>());
|
||
|
} else {
|
||
|
seller->setNumArticlesOffered(0);
|
||
|
}
|
||
|
std::string firstName = row[2].get<std::string>();
|
||
|
seller->setFirstName(trim(firstName));
|
||
|
std::string lastName = row[3].get<std::string>();
|
||
|
seller->setLastName(trim(lastName));
|
||
|
market->getSellers().push_back(std::move(seller));
|
||
|
rowCount++;
|
||
|
}
|
||
|
|
||
|
// If there was no special seller "Sonderkonto" in import data, then create one
|
||
|
auto specialSeller = market->findSellerWithUuid("11111111-1111-1111-1111-111111111111");
|
||
|
if (!specialSeller) {
|
||
|
auto seller = std::make_unique<Seller>();
|
||
|
seller->setUuidFromString("11111111-1111-1111-1111-111111111111");
|
||
|
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
|
||
|
}
|