1
0
forked from BRT/arc
arc/models/db/TransactionInfo.h
slava a506bca01d Refactor and enhance transaction handling and logging
Introduced new logging system with QInstallMessageHandler. Refactored NetworkService for better modularity and added new methods to handle transaction data. Updated database schema and TransactionDAO to support external transaction ID. Cleaned up and streamlined transaction processing in GetLastDaysHistoryScript.
2025-05-21 16:06:18 +07:00

105 lines
4.4 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 bankTrExternalId;
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.bankTrExternalId.isEmpty()) lines << " bankTrExternalId: " + tx.bankTrExternalId; else emptyFields << "bankTrExternalId";
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');
}