2018-08-01 15:36:41 +02:00
|
|
|
#include "excelreader.h"
|
|
|
|
|
|
|
|
#include <xlnt/xlnt.hpp>
|
2018-08-09 12:52:15 +02:00
|
|
|
#include <fstream>
|
2018-08-01 15:36:41 +02:00
|
|
|
|
2018-08-09 16:37:56 +02:00
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
|
|
|
void ExcelReader::readSellersFromFile(const fs::path& filePath, Marketplace* market)
|
2018-08-01 15:36:41 +02:00
|
|
|
{
|
2018-08-09 12:52:15 +02:00
|
|
|
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);
|
|
|
|
|
2018-08-02 14:39:32 +02:00
|
|
|
for (auto& seller : market->getSellers()) {
|
|
|
|
seller->setState(Seller::State::DELETE);
|
|
|
|
}
|
|
|
|
|
2018-08-09 12:52:15 +02:00
|
|
|
market->storeToDb(true);
|
2018-08-01 15:36:41 +02:00
|
|
|
auto ws = wb.sheet_by_index(0);
|
|
|
|
|
2018-08-02 11:15:15 +02:00
|
|
|
const int START_ROW = 5;
|
|
|
|
const int END_ROW = 350;
|
2018-08-01 15:36:41 +02:00
|
|
|
|
2018-08-01 15:55:13 +02:00
|
|
|
int rowCount{};
|
2018-08-01 15:36:41 +02:00
|
|
|
for (const auto& row : ws.rows(false)) {
|
2018-08-02 11:15:15 +02:00
|
|
|
if (rowCount < START_ROW) {
|
2018-08-02 14:39:32 +02:00
|
|
|
++rowCount;
|
2018-08-01 15:55:13 +02:00
|
|
|
continue;
|
2018-08-02 11:15:15 +02:00
|
|
|
} else if (rowCount > END_ROW) {
|
|
|
|
break;
|
|
|
|
}
|
2018-08-02 14:42:15 +02:00
|
|
|
if (row[2].value<std::string>().empty() && row[3].value<std::string>().empty()) {
|
2018-08-02 14:39:32 +02:00
|
|
|
++rowCount;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
auto seller = std::make_unique<Seller>();
|
|
|
|
seller->createUuid();
|
|
|
|
seller->setSellerNo(row[0].value<int>());
|
|
|
|
seller->setNumArticlesOffered(row[1].value<int>());
|
|
|
|
seller->setFirstName(row[2].value<std::string>());
|
|
|
|
seller->setLastName(row[3].value<std::string>());
|
|
|
|
market->getSellers().push_back(std::move(seller));
|
2018-08-01 15:55:13 +02:00
|
|
|
rowCount++;
|
2018-08-01 15:36:41 +02:00
|
|
|
}
|
2018-08-07 08:31:43 +02:00
|
|
|
|
|
|
|
// 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();
|
2018-08-02 14:39:32 +02:00
|
|
|
market->storeToDb();
|
2018-08-01 15:55:13 +02:00
|
|
|
}
|