#include "excelreader.h" #include "utils.h" #include #include namespace fs = std::filesystem; std::size_t 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 Excel file"); } wb.load(mystream); for (auto &seller : market->getSellers()) { seller->setState(Seller::State::DELETE); } market->storeToDb(true); auto ws = wb.sheet_by_index(0); for (auto row : ws.rows(true)) { // Skip the row if the first value is not a number (= seller no) if (row[0].data_type() != xlnt::cell::type::number) { continue; } auto seller = std::make_unique(); seller->setSellerNo(row[0].value()); seller->setNumArticlesOffered(row[1].value()); // If both, first name and last name, are empty, use N. N. // Else, use the real values. if (row[2].value().empty() && row[3].value().empty()) { seller->setFirstName("N."); seller->setLastName("N."); } else { std::string firstName = row[2].value(); seller->setFirstName(trim(firstName)); std::string lastName = row[3].value(); seller->setLastName(trim(lastName)); } market->getSellers().push_back(std::move(seller)); } // Add one additional seller "RESERVE RESERVE" auto seller = std::make_unique(); seller->setSellerNo(market->getNextSellerNo()); seller->setFirstName("RESERVE"); seller->setLastName("RESERVE"); market->getSellers().push_back(std::move(seller)); // If there was no special seller "Sonderkonto" in import data, then create one auto specialSeller = market->findSellerWithSellerNo(0); if (!specialSeller) { auto seller = std::make_unique(); 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 }