#include "excelreader.h" #include #include namespace fs = std::filesystem; void ExcelReader::readSellersFromFile(const fs::path& filePath, Marketplace* market) { xlnt::workbook wb; std::ifstream mystream(filePath, std::ios::binary); if(!mystream.is_open()) { throw std::runtime_error("Could not open ecxel file"); } wb.load(mystream); for (auto& seller : market->getSellers()) { seller->setState(Seller::State::DELETE); } market->storeToDb(true); auto ws = wb.sheet_by_index(0); const int START_ROW = 5; const int END_ROW = 350; int rowCount{}; for (const auto& row : ws.rows(false)) { if (rowCount < START_ROW) { ++rowCount; continue; } else if (rowCount > END_ROW) { break; } if (row[2].value().empty() && row[3].value().empty()) { ++rowCount; continue; } auto seller = std::make_unique(); seller->createUuid(); seller->setSellerNo(row[0].value()); seller->setNumArticlesOffered(row[1].value()); seller->setFirstName(row[2].value()); seller->setLastName(row[3].value()); 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->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(); }