Included XML files for the "pay to new number" and "pay to old number" features in the Ozon platform.
118 lines
3.9 KiB
C++
118 lines
3.9 KiB
C++
#include "BankListWindow.h"
|
||
|
||
#include <QHeaderView>
|
||
#include <QJsonArray>
|
||
#include <QJsonDocument>
|
||
#include <QJsonObject>
|
||
#include <QLabel>
|
||
#include <QMessageBox>
|
||
#include <QNetworkAccessManager>
|
||
#include <QNetworkReply>
|
||
#include <QPushButton>
|
||
#include <QVBoxLayout>
|
||
|
||
#include "dao/BankDAO.h"
|
||
|
||
BankListWindow::BankListWindow(QWidget *parent)
|
||
: QWidget(parent,
|
||
Qt::Window
|
||
| Qt::WindowTitleHint
|
||
| Qt::WindowSystemMenuHint
|
||
| Qt::WindowCloseButtonHint
|
||
| Qt::WindowMinMaxButtonsHint) {
|
||
setWindowTitle("Банки");
|
||
setMinimumSize(600, 400);
|
||
resize(700, 500);
|
||
|
||
auto *layout = new QVBoxLayout(this);
|
||
|
||
auto *topRow = new QHBoxLayout();
|
||
auto *syncBtn = new QPushButton("Синхронизировать");
|
||
syncBtn->setStyleSheet("background-color: #1565C0; color: white;");
|
||
syncBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
||
topRow->addWidget(syncBtn);
|
||
topRow->addStretch();
|
||
layout->addLayout(topRow);
|
||
|
||
connect(syncBtn, &QPushButton::clicked, this, &BankListWindow::syncBanks);
|
||
|
||
m_tableWidget = new QTableWidget(this);
|
||
m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||
m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
m_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||
m_tableWidget->setColumnCount(3);
|
||
m_tableWidget->setHorizontalHeaderLabels({"Alias", "Название", "NSPK"});
|
||
m_tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
||
m_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||
|
||
layout->addWidget(m_tableWidget);
|
||
|
||
reloadTable();
|
||
}
|
||
|
||
void BankListWindow::reloadTable() {
|
||
QList<BankInfo> banks = BankDAO::getAll();
|
||
|
||
m_tableWidget->setRowCount(banks.size());
|
||
for (int i = 0; i < banks.size(); ++i) {
|
||
const BankInfo &b = banks[i];
|
||
|
||
auto *alias = new QTableWidgetItem(b.alias);
|
||
alias->setFlags(alias->flags() & ~Qt::ItemIsEditable);
|
||
m_tableWidget->setItem(i, 0, alias);
|
||
|
||
auto *name = new QTableWidgetItem(b.name);
|
||
name->setFlags(name->flags() & ~Qt::ItemIsEditable);
|
||
m_tableWidget->setItem(i, 1, name);
|
||
|
||
auto *nspk = new QTableWidgetItem(b.nspkName);
|
||
nspk->setFlags(nspk->flags() & ~Qt::ItemIsEditable);
|
||
m_tableWidget->setItem(i, 2, nspk);
|
||
}
|
||
}
|
||
|
||
void BankListWindow::syncBanks() {
|
||
auto *manager = new QNetworkAccessManager(this);
|
||
|
||
QNetworkRequest request(QUrl("https://api.brtservice.io/api/rest/info/"));
|
||
QNetworkReply *reply = manager->get(request);
|
||
|
||
connect(reply, &QNetworkReply::finished, this, [this, reply, manager]() {
|
||
if (reply->error() != QNetworkReply::NoError) {
|
||
QMessageBox::warning(this, "Ошибка", "Не удалось загрузить банки: " + reply->errorString());
|
||
reply->deleteLater();
|
||
manager->deleteLater();
|
||
return;
|
||
}
|
||
|
||
const QByteArray data = reply->readAll();
|
||
const QJsonDocument doc = QJsonDocument::fromJson(data);
|
||
|
||
QJsonArray array;
|
||
if (doc.isArray()) {
|
||
array = doc.array();
|
||
} else if (doc.isObject() && doc.object().contains("data")) {
|
||
array = doc.object()["data"].toArray();
|
||
}
|
||
|
||
QList<BankInfo> banks;
|
||
for (const QJsonValue &val : array) {
|
||
QJsonObject obj = val.toObject();
|
||
BankInfo bank;
|
||
bank.alias = obj["alias"].toString();
|
||
bank.name = obj["name"].toString();
|
||
bank.nspkName = obj["nspk_name"].toString();
|
||
if (!bank.alias.isEmpty()) {
|
||
banks.append(bank);
|
||
}
|
||
}
|
||
|
||
BankDAO::replaceAll(banks);
|
||
reloadTable();
|
||
|
||
qDebug() << "[BankListWindow] Synced" << banks.size() << "banks";
|
||
reply->deleteLater();
|
||
manager->deleteLater();
|
||
});
|
||
}
|