|
|
@ -17,27 +17,91 @@ enum Schedule { |
|
|
|
QString schedule_desc(Schedule s); |
|
|
|
|
|
|
|
struct RecurringPaymentInfo { |
|
|
|
QString hashid; |
|
|
|
QString hashid; |
|
|
|
|
|
|
|
QString desc; |
|
|
|
QString fromAddr; |
|
|
|
QString toAddr; |
|
|
|
double amt; |
|
|
|
QString memo; |
|
|
|
QString currency; |
|
|
|
Schedule schedule; |
|
|
|
int numPayments; |
|
|
|
QString desc; |
|
|
|
QString fromAddr; |
|
|
|
QString toAddr; |
|
|
|
double amt; |
|
|
|
QString memo; |
|
|
|
QString currency; |
|
|
|
Schedule schedule; |
|
|
|
int frequency; |
|
|
|
int numPayments; |
|
|
|
|
|
|
|
QDateTime startDate; |
|
|
|
int completedPayments; |
|
|
|
QDateTime startDate; |
|
|
|
int completedPayments; |
|
|
|
|
|
|
|
struct HistoryItem { |
|
|
|
int paymentNumber; |
|
|
|
QDateTime dt; |
|
|
|
QDateTime date; |
|
|
|
QString txid; |
|
|
|
}; |
|
|
|
QList<HistoryItem> history; |
|
|
|
|
|
|
|
static RecurringPaymentInfo fromJson(QJsonObject j) { |
|
|
|
RecurringPaymentInfo r; |
|
|
|
r.hashid = j["hash"].toString(); |
|
|
|
r.desc = j["desc"].toString(); |
|
|
|
r.fromAddr = j["from"].toString(); |
|
|
|
r.toAddr = j["to"].toString(); |
|
|
|
r.amt = j["amt"].toString().toDouble(); |
|
|
|
r.memo = j["memo"].toString(); |
|
|
|
r.currency = j["currency"].toString(); |
|
|
|
r.schedule = (Schedule)j["schedule"].toInt(); |
|
|
|
r.frequency = j["frequency"].toInt(); |
|
|
|
r.numPayments = j["numpayments"].toInt(); |
|
|
|
r.startDate = QDateTime::fromSecsSinceEpoch(j["startdate"].toString().toLongLong()); |
|
|
|
r.completedPayments = j["completed"].toInt(); |
|
|
|
|
|
|
|
r.history = QList<HistoryItem>(); |
|
|
|
for (auto h : j["history"].toArray()) { |
|
|
|
HistoryItem item; |
|
|
|
|
|
|
|
item.paymentNumber = h.toObject()["paymentnumber"].toInt(); |
|
|
|
item.date = QDateTime::fromSecsSinceEpoch(h.toObject()["date"].toString().toLongLong()); |
|
|
|
item.txid = h.toObject()["txid"].toString(); |
|
|
|
|
|
|
|
r.history.append(item); |
|
|
|
} |
|
|
|
|
|
|
|
return r; |
|
|
|
} |
|
|
|
|
|
|
|
void updateHash() { |
|
|
|
auto val = getScheduleDescription() + fromAddr + toAddr; |
|
|
|
hashid = QCryptographicHash::hash(val.toUtf8(), QCryptographicHash::Sha256); |
|
|
|
} |
|
|
|
|
|
|
|
QJsonObject toJson() { |
|
|
|
QJsonArray historyJson; |
|
|
|
for (auto h : history) { |
|
|
|
historyJson.append(QJsonObject{ |
|
|
|
{"paymentnumber", h.paymentNumber}, |
|
|
|
{"date", QString::number(h.date.toSecsSinceEpoch())}, |
|
|
|
{"txid", h.txid} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
auto j = QJsonObject{ |
|
|
|
{"hash", hashid}, |
|
|
|
{"desc", desc}, |
|
|
|
{"from", fromAddr}, |
|
|
|
{"to", toAddr}, |
|
|
|
{"amt", Settings::getDecimalString(amt)}, |
|
|
|
{"memo", memo}, |
|
|
|
{"currency", currency}, |
|
|
|
{"schedule", (int)schedule}, |
|
|
|
{"frequency", frequency}, |
|
|
|
{"numpayments", numPayments}, |
|
|
|
{"startdate", QString::number(startDate.toSecsSinceEpoch())}, |
|
|
|
{"completed", completedPayments}, |
|
|
|
{"history", historyJson} |
|
|
|
}; |
|
|
|
|
|
|
|
return j; |
|
|
|
} |
|
|
|
|
|
|
|
QString getScheduleDescription() { |
|
|
|
return "Pay " % (currency == "USD" ? Settings::getUSDFormat(amt) : Settings::getZECDisplayFormat(amt)) |
|
|
|
% " every " % schedule_desc(schedule) % ", starting " % startDate.toString("yyyy-MMM-dd") |
|
|
|