#include "BankListWindow.h" #include #include #include #include #include #include #include #include #include #include #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 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 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(); }); }