Added roles for BeetRound purpose.

This commit is contained in:
2026-02-07 17:56:46 +01:00
parent 2fcd69df5f
commit c6d6b18ab3
10 changed files with 375 additions and 162 deletions

View File

@ -86,14 +86,6 @@ QJsonArray JsonParser::extractItemArray(const QJsonDocument& doc, const QString&
ModelItemValues JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) {
ModelItemValues values;
const UserRoles idRole = IdRole;
const QString idRoleName = ROLE_NAMES.value(idRole);
// QVariant idValue = data(idRole);
if (itemJsonObject.contains(idRoleName)) {
std::pair<int, QVariant> keyValuePair = getKeyValuePair(itemJsonObject, idRole);
values.insert(keyValuePair.first, keyValuePair.second);
}
QListIterator<UserRoles> i(USER_FACING_ROLES);
while (i.hasNext()) {
const UserRoles role = i.next();

View File

@ -26,11 +26,6 @@ EditItemCommand::EditItemCommand(TableModel* model,
.arg(roleName)
.arg(index.data(DEFAULT_ROLE).toString())
.arg(value.toString());
} else if (role == IdRole) {
commandText = QString("Setting '%1' of item '%2' to '%3'")
.arg(roleName)
.arg(index.data(DEFAULT_ROLE).toString())
.arg(value.toString());
} else {
qWarning() << "Role didn't match! Using a generic command text...";
commandText = QString("Edit item '%1'").arg(index.data(DEFAULT_ROLE).toString());

View File

@ -24,7 +24,7 @@ QItemSelection GeneralSortFilterModel::findItems(const QString& text) const {
}
QString GeneralSortFilterModel::getUuid(const QModelIndex& itemIndex) const {
return data(itemIndex, IdRole).toString();
return data(itemIndex, OnlineIdRole).toString();
}
QByteArray GeneralSortFilterModel::jsonDataForServer(const QModelIndex& proxyIndex) {

View File

@ -10,29 +10,68 @@
/// model data
enum UserRoles {
NameRole = Qt::UserRole + 1,
DescriptionRole,
InfoRole,
AmountRole,
FactorRole,
/// Non user facing
IdRole,
/// read only roles
LastNameRole = Qt::UserRole + 1,
FirstNameRole,
MembershipNumberRole,
Bidding1Role,
Bidding2Role,
Bidding3Role,
DepotWish1Role,
DepotWish2Role,
ShareAmountRole,
MailRole,
ShareTypeRole,
BiddingTypeRole,
OnlineIdRole,
AccessCodeRole,
// read-only (calculated)
FullNameRole,
FactoredBiddingRole,
ToStringRole,
ToJsonRole
JsonObjectRole
};
static UserRoles DEFAULT_ROLE = NameRole;
static UserRoles DEFAULT_ROLE = FullNameRole;
// TODO ?rename USER_FACING_ROLES -> MAIN_ROLES ?
static QList<UserRoles> USER_FACING_ROLES = {NameRole, DescriptionRole, InfoRole, AmountRole,
FactorRole};
static QHash<int, QByteArray> ROLE_NAMES = {
{NameRole, "name"}, {DescriptionRole, "description"}, {InfoRole, "info"},
{AmountRole, "amount"}, {FactorRole, "factor"}, {ToStringRole, "ToString"},
{IdRole, "id"}};
static QList<UserRoles> STRING_ROLES = {NameRole, DescriptionRole, InfoRole, IdRole};
static QList<UserRoles> INT_ROLES = {AmountRole};
static QList<UserRoles> DOUBLE_ROLES = {FactorRole};
static QList<UserRoles> USER_FACING_ROLES = {
LastNameRole, FirstNameRole, MembershipNumberRole, Bidding1Role, Bidding2Role,
Bidding3Role, DepotWish1Role, DepotWish2Role, ShareAmountRole, MailRole,
ShareTypeRole, BiddingTypeRole, OnlineIdRole, AccessCodeRole};
static QHash<int, QByteArray> ROLE_NAMES = {{MembershipNumberRole, "Mitglieds-nr."},
{LastNameRole, "Name"},
{FirstNameRole, "Vorname"},
{Bidding1Role, "Gebot 1"},
{Bidding2Role, "Gebot 2"},
{Bidding3Role, "Gebot 3"},
{DepotWish1Role, "Wunsch 1"},
{DepotWish2Role, "Wunsch 2"},
{ShareAmountRole, "Anzahl"},
{MailRole, "Mail"},
{ShareTypeRole, "Art"},
{BiddingTypeRole, "Bietart"},
{OnlineIdRole, "Online ID"},
{AccessCodeRole, "Access Code"},
{FactoredBiddingRole, "factoredBidding"}};
static const QList<QString> SHARE_TYPES = {"bezahlt", "teils/teils", "erarbeitet", ""};
static const QList<QString> BIDDING_TYPES = {"paper", "digital", "online", "offline", ""};
static QList<UserRoles> STRING_ROLES = {LastNameRole, FirstNameRole, DepotWish1Role,
DepotWish2Role, MailRole, ShareTypeRole,
BiddingTypeRole, OnlineIdRole, AccessCodeRole};
static QList<UserRoles> INT_ROLES = {
MembershipNumberRole,
Bidding1Role,
Bidding2Role,
Bidding3Role,
};
static QList<UserRoles> DOUBLE_ROLES = {
ShareAmountRole,
};
static const QList<UserRoles> TYPE_ROLES = {ShareTypeRole, BiddingTypeRole};
static const QList<UserRoles> SHARE_TYPE_ROLES = {ShareTypeRole};
static const QList<UserRoles> BIDDING_TYPE_ROLES = {BiddingTypeRole};
/// JSON keys
static const QString ITEMS_KEY_STRING = "items";
@ -42,26 +81,53 @@ static const QString ITEM_KEY_STRING = "item";
static const QString ITEMS_FILE_NAME = ITEMS_KEY_STRING + ".json";
/// functions
static int GET_ROLE_FOR_COLUMN(const int column) {
static UserRoles GET_ROLE_FOR_COLUMN(const int column) {
switch (column) {
case 0:
return NameRole;
return MembershipNumberRole;
break;
case 1:
return DescriptionRole;
return LastNameRole;
break;
case 2:
return InfoRole;
return FirstNameRole;
break;
case 3:
return AmountRole;
return ShareTypeRole;
break;
case 4:
return FactorRole;
return ShareAmountRole;
break;
case 5:
return BiddingTypeRole;
break;
case 6:
return Bidding1Role;
break;
case 7:
return Bidding2Role;
break;
case 8:
return Bidding3Role;
break;
case 9:
return DepotWish1Role;
break;
case 10:
return DepotWish2Role;
break;
case 11:
return MailRole;
break;
case 12:
return OnlineIdRole;
break;
case 13:
return AccessCodeRole;
break;
default:
qWarning() << QString("No role found for column %1! Returning 'NameRole'...").arg(column);
return NameRole;
qWarning() << QString("No role found for column %1! Returning 'FullNameRole'...").arg(column);
return FullNameRole;
break;
}
}
@ -74,4 +140,10 @@ static QList<QString> GET_HEADER_NAMES() {
return result;
}
static QString GET_HEADER_FOR_COLUMN(const int column) {
const UserRoles role = GET_ROLE_FOR_COLUMN(column);
const QString headerName = ROLE_NAMES.value(role);
return headerName;
}
#endif // METADATA_H

View File

@ -52,15 +52,7 @@ QString ModelItem::toString() const {
const UserRoles role = i.next();
const QString roleName = ROLE_NAMES.value(role);
const QVariant value = data(role);
// result.append(value.toString());
result.append(QString("%1: %2\n").arg(roleName, data(role).toString()));
}
const UserRoles idRole = IdRole;
QVariant idValue = data(idRole);
if (!idValue.isNull()) {
const QString idRoleName = ROLE_NAMES.value(idRole);
result.append(QString("%1: %2\n").arg(idRoleName, idValue.toString()));
result.append(QString("%1: %2\n").arg(roleName, value.toString()));
}
return result;
}
@ -68,12 +60,6 @@ QString ModelItem::toString() const {
QJsonObject ModelItem::toJsonObject() const {
QJsonObject itemObject;
// TODO add UUID and dates (entry, modification, end)
const UserRoles idRole = IdRole;
QVariant idValue = data(idRole);
if (!idValue.isNull()) {
const QString idRoleName = ROLE_NAMES.value(idRole);
itemObject.insert(idRoleName, idValue.toString());
}
QListIterator<UserRoles> i(USER_FACING_ROLES);
while (i.hasNext()) {

View File

@ -21,11 +21,20 @@ QByteArray TableModel::generateExampleItems() {
QJsonObject itemObject;
// itemObject.insert("uuid", m_uuid.toString());
// itemObject.insert("entryDateUTC", m_entryDateUTC.toString(Qt::ISODate));
itemObject.insert(ROLE_NAMES.value(NameRole), QString("Item %1").arg(row));
itemObject.insert(ROLE_NAMES.value(DescriptionRole), QString("This is item %1").arg(row));
itemObject.insert(ROLE_NAMES.value(InfoRole), QString("Info of item %1").arg(row));
itemObject.insert(ROLE_NAMES.value(AmountRole), row);
itemObject.insert(ROLE_NAMES.value(FactorRole), row * 1.1);
itemObject.insert(ROLE_NAMES.value(MembershipNumberRole), row);
itemObject.insert(ROLE_NAMES.value(LastNameRole), QString("Nachname%1").arg(row));
itemObject.insert(ROLE_NAMES.value(FirstNameRole), QString("Vorname%1").arg(row));
itemObject.insert(ROLE_NAMES.value(Bidding1Role), 100 + row);
itemObject.insert(ROLE_NAMES.value(DepotWish1Role), QString("Depot X%1").arg(row));
itemObject.insert(ROLE_NAMES.value(DepotWish2Role), QString("Depot Y%1").arg(row));
itemObject.insert(ROLE_NAMES.value(MailRole),
QString("%1@%2.com")
.arg(itemObject.value(ROLE_NAMES.value(FirstNameRole)).toString(),
itemObject.value(ROLE_NAMES.value(LastNameRole)).toString()));
itemObject.insert(ROLE_NAMES.value(ShareAmountRole), 1);
itemObject.insert(ROLE_NAMES.value(ShareTypeRole), SHARE_TYPES.at(row % 3));
itemObject.insert(ROLE_NAMES.value(BiddingTypeRole), BIDDING_TYPES.at(row % 4));
// itemObject.insert(ROLE_NAMES.value(FactorRole), row * 1.1);
array.append(itemObject);
}
@ -78,16 +87,25 @@ QVariant TableModel::data(const QModelIndex& index, int role) const {
case Qt::DisplayRole:
case Qt::EditRole:
return m_items.at(row)->data(roleForColumn);
case NameRole:
case DescriptionRole:
case InfoRole:
case AmountRole:
case FactorRole:
case IdRole:
case MembershipNumberRole:
case LastNameRole:
case FirstNameRole:
case FullNameRole:
case Bidding1Role:
case Bidding2Role:
case Bidding3Role:
case DepotWish1Role:
case DepotWish2Role:
case ShareAmountRole:
case MailRole:
case ShareTypeRole:
case BiddingTypeRole:
case OnlineIdRole:
case AccessCodeRole:
return m_items.at(row)->data(role);
case ToStringRole:
return m_items.at(row)->toString();
case ToJsonRole:
case JsonObjectRole:
return m_items.at(row)->toJsonObject();
}
@ -174,7 +192,7 @@ QList<QStringList> TableModel::getItemsAsStringLists() const {
// TODO use item selection as parameter to wrap multiple items into JSON data structure
QByteArray TableModel::jsonDataForServer(const QModelIndex& currentIndex) const {
const QJsonObject itemObject = data(currentIndex, ToJsonRole).toJsonObject();
const QJsonObject itemObject = data(currentIndex, JsonObjectRole).toJsonObject();
QJsonObject rootObject;
rootObject.insert(ITEM_KEY_STRING, itemObject);
const QJsonDocument jsonDoc(rootObject);
@ -350,8 +368,9 @@ QModelIndex TableModel::searchItemIndex(const ModelItemValues givenItemValues) c
bool TableModel::isItemEqualToItemValues(const QModelIndex& itemIndex,
const ModelItemValues givenItemValues) const {
/// do both have a UUID?
QVariant idOfItem = data(itemIndex, IdRole);
QVariant given = givenItemValues.value(IdRole);
const UserRoles idRole = OnlineIdRole;
QVariant idOfItem = data(itemIndex, idRole);
QVariant given = givenItemValues.value(idRole);
if (idOfItem.isValid() && given.isValid()) {
/// are the UUIDs the same?
if (idOfItem.toString() == given.toString()) {