1
0
forked from BRT/arc
arc/models/db/TransactionInfo.h
trnsmkot 290f89fae4 Add enhanced account and transaction handling features
Refactored code to improve account and transaction data parsing and management, introducing support for additional fields like card numbers and account statuses. Added new utilities for database connections, device-specific screenshot handling, and XML parsing for enriched account and transaction details.
2025-05-07 14:15:08 +07:00

105 lines
4.3 KiB
C

#pragma once
#include <QString>
#include <QDateTime>
enum class TransactionType {
Card,
Phone,
Unknown
};
enum class TransactionStatus {
Wait,
Complete,
Unknown
};
inline QString transactionTypeToString(const TransactionType type) {
switch (type) {
case TransactionType::Card: return "card";
case TransactionType::Phone: return "phone";
default: return "unknown";
}
}
inline TransactionType transactionTypeFromString(const QString &str) {
if (str == "card") return TransactionType::Card;
if (str == "phone") return TransactionType::Phone;
return TransactionType::Unknown;
}
inline QString transactionStatusToString(const TransactionStatus type) {
switch (type) {
case TransactionStatus::Wait: return "wait";
case TransactionStatus::Complete: return "complete";
default: return "unknown";
}
}
inline TransactionStatus transactionStatusFromString(const QString &str) {
if (str == "wait") return TransactionStatus::Wait;
if (str == "complete") return TransactionStatus::Complete;
return TransactionStatus::Unknown;
}
struct TransactionInfo {
int id = -1;
int accountId = -1;
double amount = 0;
double fee = 0;
TransactionStatus status = TransactionStatus::Unknown;
TransactionType type = TransactionType::Unknown;
QString phone;
QString name;
QString shortDescription;
QString updatedShortDescription;
QString description;
QString updatedDescription;
QString bankName;
QString bankTime;
QString trExternalId;
QDateTime updateTime;
QDateTime completeTime;
QDateTime timestamp;
};
inline QString convertTransactionToString(const TransactionInfo &tx) {
QStringList lines;
QStringList emptyFields;
lines << "TransactionInfo {";
if (tx.id != -1) lines << " id: " + QString::number(tx.id); else emptyFields << "id";
if (tx.accountId != -1) lines << " accountId: " + QString::number(tx.accountId); else emptyFields << "accountId";
if (tx.amount != 0.0) lines << " amount: " + QString::number(tx.amount); else emptyFields << "amount";
if (tx.fee != 0.0) lines << " fee: " + QString::number(tx.fee); else emptyFields << "fee";
if (tx.status != TransactionStatus::Unknown) lines << " status: " + transactionStatusToString(tx.status); else emptyFields << "status";
if (tx.type != TransactionType::Unknown) lines << " type: " + transactionTypeToString(tx.type); else emptyFields << "type";
if (!tx.phone.isEmpty()) lines << " phone: " + tx.phone; else emptyFields << "phone";
if (!tx.shortDescription.isEmpty()) lines << " shortDescription: " + tx.shortDescription; else emptyFields << "shortDescription";
if (!tx.updatedShortDescription.isEmpty()) lines << " updatedShortDescription: " + tx.updatedShortDescription; else emptyFields << "updatedShortDescription";
if (!tx.description.isEmpty()) lines << " description: " + tx.description; else emptyFields << "description";
if (!tx.updatedDescription.isEmpty()) lines << " updatedDescription: " + tx.updatedDescription; else emptyFields << "updatedDescription";
if (!tx.bankName.isEmpty()) lines << " bankName: " + tx.bankName; else emptyFields << "bankName";
if (!tx.bankTime.isEmpty()) lines << " bankTime: " + tx.bankTime; else emptyFields << "bankTime";
if (!tx.name.isEmpty()) lines << " name: " + tx.name; else emptyFields << "name";
if (!tx.trExternalId.isEmpty()) lines << " trExternalId: " + tx.trExternalId; else emptyFields << "trExternalId";
if (tx.updateTime.isValid()) lines << " updateTime: " + tx.updateTime.toString(Qt::ISODate); else emptyFields << "updateTime";
if (tx.completeTime.isValid()) lines << " completeTime: " + tx.completeTime.toString(Qt::ISODate); else emptyFields << "completeTime";
if (tx.timestamp.isValid()) lines << " timestamp: " + tx.timestamp.toString(Qt::ISODate); else emptyFields << "timestamp";
if (!emptyFields.isEmpty()) {
lines << " --- empty: " + emptyFields.join(", ");
}
lines << "}";
return lines.join('\n');
}