kima2/src/core/excelreader.cpp

67 lines
2.0 KiB
C++
Raw Normal View History

2018-08-01 15:36:41 +02:00
#include "excelreader.h"
#include "utils.h"
2018-08-01 15:36:41 +02:00
#include <xlnt/xlnt.hpp>
#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
{
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);
}
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>());
std::string firstName = row[2].value<std::string>();
seller->setFirstName(trim(firstName));
std::string lastName = row[3].value<std::string>();
seller->setLastName(trim(lastName));
2018-08-02 14:39:32 +02:00
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
}