#pragma once #include enum class AccountStatus { Active, Blocked }; inline QString accountStatusToString(const AccountStatus status) { switch (status) { case AccountStatus::Active: return "active"; case AccountStatus::Blocked: return "blocked"; default: return "active"; } } inline AccountStatus accountStatusFromString(const QString &str) { if (str == "active") return AccountStatus::Active; if (str == "blocked") return AccountStatus::Blocked; return AccountStatus::Active; } struct AccountInfo { int id = -1; QString deviceId; // code QString appCode; QString lastNumbers; double amount = 0.0; QDateTime updateTime; AccountStatus status = AccountStatus::Active; QString description; }; inline QString convertAccountToString(const AccountInfo &info) { QStringList lines; QStringList emptyFields; lines << "AccountInfo {"; if (info.id != -1) lines << " id: " + QString::number(info.id); else emptyFields << "id"; if (!info.deviceId.isEmpty()) lines << " deviceId: " + info.deviceId; else emptyFields << "deviceId"; if (!info.appCode.isEmpty()) lines << " appCode: " + info.appCode; else emptyFields << "appCode"; if (!info.lastNumbers.isEmpty()) lines << " lastNumbers: " + info.lastNumbers; else emptyFields << "lastNumbers"; if (info.amount != 0.0) lines << " amount: " + QString::number(info.amount, 'f', 2); else emptyFields << "amount"; if (info.updateTime.isValid()) lines << " updateTime: " + info.updateTime.toString(Qt::ISODate); else emptyFields << "updateTime"; if (info.status != AccountStatus::Active) lines << " status: " + accountStatusToString(info.status); else emptyFields << "status"; if (!info.description.isEmpty()) lines << " description: " + info.description; else emptyFields << "description"; if (!emptyFields.isEmpty()) { lines << " --- empty: " + emptyFields.join(", "); } lines << "}"; return lines.join('\n'); }