diff --git a/libs/BeetRoundCore/formats/csvparser.cpp b/libs/BeetRoundCore/formats/csvparser.cpp index 85e5bac..117127d 100644 --- a/libs/BeetRoundCore/formats/csvparser.cpp +++ b/libs/BeetRoundCore/formats/csvparser.cpp @@ -52,6 +52,11 @@ bool CsvParser::isCsvCompatible(const rapidcsv::Document& doc) { qInfo() << "Checking CSV document for compatiblity..."; const std::vector columnNames = doc.GetColumnNames(); for (const QString& headerName : GET_HEADER_NAMES()) { + if (OPTIONAL_CSV_HEADERS.contains(headerName)) { + /// no need to have a column for the optional values + continue; + } + /// these column must be found in CSV document bool isHeaderNameFound = false; if (std::find(columnNames.begin(), columnNames.end(), headerName) != columnNames.end()) { qDebug() << QString("Header found in column names: %1").arg(headerName); @@ -86,14 +91,13 @@ QHash> CsvParser::extractColumnValues( const rapidcsv::Document& doc) { QHash> columnValueMap; for (const QString& columnName : headerNames) { - // TODO add support for optional columns - // if (optionalCsvHeaderNames.contains(columnName)) { - // const std::vector columnNames = doc.GetColumnNames(); - // int columnIdx = doc.GetColumnIdx(columnName.toStdString()); - // if (columnIdx == -1) { - // continue; - // } - // } + if (OPTIONAL_CSV_HEADERS.contains(columnName)) { + const std::vector columnNames = doc.GetColumnNames(); + int columnIdx = doc.GetColumnIdx(columnName.toStdString()); + if (columnIdx == -1) { + continue; + } + } const std::vector columnValues = doc.GetColumn(columnName.toStdString()); columnValueMap.insert(columnName, columnValues); diff --git a/libs/BeetRoundCore/model/metadata.h b/libs/BeetRoundCore/model/metadata.h index 5d3d69a..435511b 100644 --- a/libs/BeetRoundCore/model/metadata.h +++ b/libs/BeetRoundCore/model/metadata.h @@ -34,8 +34,8 @@ enum UserRoles { static UserRoles DEFAULT_ROLE = FullNameRole; // TODO ?rename USER_FACING_ROLES -> MAIN_ROLES ? static QList USER_FACING_ROLES = { - LastNameRole, FirstNameRole, MembershipNumberRole, Bidding1Role, Bidding2Role, - Bidding3Role, DepotWish1Role, DepotWish2Role, ShareAmountRole, MailRole, + LastNameRole, FirstNameRole, MembershipNumberRole, Bidding1Role, Bidding2Role, + Bidding3Role, DepotWish1Role, DepotWish2Role, ShareAmountRole, MailRole, ShareTypeRole, BiddingTypeRole, OnlineIdRole, AccessCodeRole}; static QHash ROLE_NAMES = {{MembershipNumberRole, "Mitglieds-nr."}, {LastNameRole, "Name"}, @@ -56,8 +56,8 @@ static QHash ROLE_NAMES = {{MembershipNumberRole, "Mitglieds-nr static const QList SHARE_TYPES = {"bezahlt", "teils/teils", "erarbeitet", ""}; static const QList BIDDING_TYPES = {"paper", "digital", "online", "offline", ""}; -static QList STRING_ROLES = {LastNameRole, FirstNameRole, DepotWish1Role, - DepotWish2Role, MailRole, ShareTypeRole, +static QList STRING_ROLES = {LastNameRole, FirstNameRole, DepotWish1Role, + DepotWish2Role, MailRole, ShareTypeRole, BiddingTypeRole, OnlineIdRole, AccessCodeRole}; static QList INT_ROLES = { MembershipNumberRole, @@ -69,10 +69,12 @@ static QList DOUBLE_ROLES = { ShareAmountRole, }; -static const QList TYPE_ROLES = {ShareTypeRole, BiddingTypeRole}; +static const QList TYPE_ROLES = {ShareTypeRole, BiddingTypeRole}; static const QList SHARE_TYPE_ROLES = {ShareTypeRole}; static const QList BIDDING_TYPE_ROLES = {BiddingTypeRole}; +static const QStringList OPTIONAL_CSV_HEADERS = {"Bietart", "Online ID", "Access Code"}; + /// JSON keys static const QString ITEMS_KEY_STRING = "items"; static const QString ITEM_KEY_STRING = "item";