1
0
forked from BRT/arc

Add support for processing pending transactions

Refactored transaction processing to include pending status updates and added logic to handle "Ожидающие обработки" transactions. Updated relevant scripts, XML resources, and database handling for improved transaction tracking and status accuracy.
This commit is contained in:
trnsmkot 2025-06-11 15:28:37 +07:00
parent 0a31b4d717
commit cbcb7cdb9c
8 changed files with 357 additions and 9 deletions

2
.gitignore vendored
View File

@ -21,3 +21,5 @@ Makefile
/.ninja_log
/ARCDesktopProject_autogen/
/ARCDesktopProject
/Contents/
/application.log

View File

@ -86,7 +86,8 @@ QString formatPrice(const double value) {
bool GetLastDaysHistoryScript::saveAndPostNewTransactionData(
const AccountInfo &account,
const TransactionInfo &transaction
const TransactionInfo &transaction,
const TransactionStatus &status
) {
TransactionInfo tr;
tr.accountId = account.id;
@ -99,7 +100,7 @@ bool GetLastDaysHistoryScript::saveAndPostNewTransactionData(
tr.fee = transaction.fee;
tr.name = transaction.name;
tr.bankTrExternalId = transaction.bankTrExternalId;
tr.status = TransactionStatus::Complete;
tr.status = status;
tr.type = transaction.description.startsWith("Перевод") ? TransactionType::Phone : TransactionType::Card;
tr.completeTime = DateUtils::getUtcNow();
tr.id = TransactionDAO::insertTransaction(tr);
@ -338,7 +339,7 @@ void GetLastDaysHistoryScript::doStart() {
}
}
if (!updated) {
if (!saveAndPostNewTransactionData(m_account, transaction)) {
if (!saveAndPostNewTransactionData(m_account, transaction, TransactionStatus::Complete)) {
qDebug() << "--- saveAndPostNewTransactionData failed";
}
}
@ -348,11 +349,47 @@ void GetLastDaysHistoryScript::doStart() {
// Если по карте, мы знаем ток дату + сумма
}
Node waitTab = xmlScreenParser.findButtonNode("Ожидающие обработки", true);
if (!waitTab.isEmpty()) {
AdbUtils::makeTap(m_account.deviceId, waitTab.x(), waitTab.y());
QThread::msleep(1000);
QList<TransactionInfo> parsedWaitTransactions = xmlScreenParser.parseTodayAndYesterdayReportHistory();
for (const TransactionInfo &transaction: parsedWaitTransactions) {
QList<TransactionInfo> localActualTransactions = TransactionDAO::getTransactionsWithinHours(
m_account.id, 48
);
for (const TransactionInfo &saved: localActualTransactions) {
if (saved.status != TransactionStatus::Wait) {
continue;
}
QDate sDate = QDateTime::fromString(saved.bankTime, "dd.MM.yyyy HH:mm:ss").date();
if (!sDate.isValid()) {
sDate = QDateTime::fromString(saved.bankTime, "dd.MM.yyyy").date();
}
QDate pDate = QDateTime::fromString(transaction.bankTime, "dd.MM.yyyy HH:mm:ss").date();
if (!pDate.isValid()) {
pDate = QDateTime::fromString(transaction.bankTime, "dd.MM.yyyy").date();
}
if (saved.amount == transaction.amount && sDate == pDate) {
// одно и тоже
} else {
if (!saveAndPostNewTransactionData(m_account, transaction, TransactionStatus::Wait)) {
qDebug() << "--- saveAndPostNewTransactionData - Wait failed";
}
}
}
}
}
}
} else {
m_error = "GetLastDaysHistoryScript - home screen not found";
qWarning() << m_error;
emit finishedWithResult(m_error);
}
AdbUtils::goBack(m_account.deviceId);
AdbUtils::goBack(m_account.deviceId);
AdbUtils::goBack(m_account.deviceId);
emit finishedWithResult(m_error);
}

View File

@ -19,7 +19,11 @@ private:
const AccountInfo m_account;
QString m_error;
bool saveAndPostNewTransactionData(const AccountInfo &account, const TransactionInfo &transaction);
bool saveAndPostNewTransactionData(
const AccountInfo &account,
const TransactionInfo &transaction,
const TransactionStatus &status
);
bool updateAndPostTransactionData(
const AccountInfo &account,

View File

@ -9,8 +9,8 @@
#include "adb/AdbUtils.h"
HomeScreenScript::HomeScreenScript(const int transactionId, QObject *parent)
: QObject(parent), transactionId(transactionId) {
HomeScreenScript::HomeScreenScript(QObject *parent)
: QObject(parent) {
}
HomeScreenScript::~HomeScreenScript() = default;
@ -500,7 +500,6 @@ void HomeScreenScript::start() {
// 2. Идем дальше
emit finished();
}

View File

@ -9,7 +9,7 @@ class HomeScreenScript final : public QObject {
Q_OBJECT
public:
explicit HomeScreenScript(int transactionId, QObject *parent = nullptr);
explicit HomeScreenScript(QObject *parent = nullptr);
~HomeScreenScript() override;
@ -23,7 +23,6 @@ signals:
private:
bool m_running = true;
int transactionId;
ScreenXmlParser xmlScreenParser;
bool goToHomeScreen(

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -0,0 +1,307 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy rotation="0">
<node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false"
scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][720,1439]">
<node index="0" text="" resource-id="" class="android.widget.LinearLayout" package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false"
scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][720,1439]">
<node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false" password="false" selected="false"
bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="ru.rshb.dbo:id/action_bar_root" class="android.widget.LinearLayout"
package="ru.rshb.dbo" content-desc="" checkable="false" checked="false" clickable="false"
enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="android:id/content" class="android.widget.FrameLayout"
package="ru.rshb.dbo" content-desc="" checkable="false" checked="false" clickable="false"
enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.webkit.WebView" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.webkit.WebView" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false" clickable="false" enabled="true"
focusable="true" focused="true" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false" focused="false"
scrollable="false" long-clickable="false" password="false" selected="false"
bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false" focused="false"
scrollable="false" long-clickable="false" password="false"
selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false"
long-clickable="false" password="false" selected="false"
bounds="[0,82][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false"
long-clickable="false" password="false" selected="false"
bounds="[0,82][720,166]">
<node index="0" text="" resource-id=""
class="android.view.View" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false"
long-clickable="false" password="false"
selected="false" bounds="[7,89][78,157]">
<node index="0" text="Назад" resource-id=""
class="android.widget.Button"
package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false" clickable="true"
enabled="true" focusable="true" focused="false"
scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[7,89][69,157]"/>
</node>
<node index="1" text="Выписка" resource-id=""
class="android.widget.TextView" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false"
long-clickable="false" password="false"
selected="false" bounds="[86,89][260,173]"/>
<node index="2" text="" resource-id=""
class="android.view.View" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false"
long-clickable="false" password="false"
selected="false" bounds="[641,89][712,157]">
<node index="0"
text="Информирование о сроке отображения операций по счету"
resource-id="aft-rbtnClass-buttonIcon"
class="android.widget.Button"
package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false" clickable="true"
enabled="true" focusable="true" focused="false"
scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[650,89][712,157]"/>
</node>
</node>
<node index="1" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false"
long-clickable="false" password="false" selected="false"
bounds="[0,160][720,1379]">
<node index="0" text="" resource-id=""
class="android.view.View" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false"
long-clickable="false" password="false"
selected="false" bounds="[0,160][720,1379]">
<node index="0" text="" resource-id=""
class="android.view.View" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false"
long-clickable="false" password="false"
selected="false" bounds="[0,162][720,571]">
<node index="0" text="по счету 40817 .... 2077"
resource-id="" class="android.widget.TextView"
package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false"
clickable="false" enabled="true"
focusable="false" focused="false"
scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[206,205][513,258]"/>
<node index="1"
text="Период с 02.06.2025 по 04.06.2025 More"
resource-id="" class="android.widget.Button"
package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false"
clickable="true" enabled="true"
focusable="true" focused="false"
scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[0,295][720,391]"/>
<node index="2"
text="Подтвержденные Ожидающие обработки"
resource-id="" class="android.widget.Button"
package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false"
clickable="true" enabled="true"
focusable="true" focused="false"
scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[0,383][720,477]"/>
<node index="3" text="" resource-id=""
class="android.widget.ListView"
package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false"
clickable="false" enabled="true"
focusable="false" focused="false"
scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[0,475][720,475]"/>
<node index="4"
text="Операции с 02.06.2025 по 04.06.2025 отсутствуют"
resource-id="" class="android.widget.TextView"
package="ru.rshb.dbo" content-desc=""
checkable="false" checked="false"
clickable="false" enabled="true"
focusable="false" focused="false"
scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[0,475][720,569]"/>
</node>
</node>
</node>
<node index="2" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false"
long-clickable="false" password="false" selected="false"
bounds="[575,1235][684,1343]">
<node index="0" text="Отправить" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="true"
focused="false" scrollable="false"
long-clickable="false" password="false"
selected="false" bounds="[575,1235][684,1343]"/>
</node>
</node>
</node>
</node>
<node index="1" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,1377][720,1439]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,1377][720,1439]">
<node index="0" text="Главная" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[1,1377][148,1439]"/>
<node index="1" text="История" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[144,1377][290,1439]"/>
<node index="2" text="Своё" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[286,1377][433,1439]"/>
<node index="3" text="Платежи" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[429,1377][575,1439]"/>
<node index="4" text="Ещё" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false"
bounds="[571,1377][718,1439]"/>
</node>
</node>
<node index="2" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,0][0,0]">
<node index="0" text="" resource-id="" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false"
checked="false" clickable="false" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,0][0,0]">
<node index="0" text="В банк" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,0][0,0]"/>
<node index="1" text="Кабинет" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,0][0,0]"/>
<node index="2" text="Продажи" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,0][0,0]"/>
<node index="3" text="Налоги" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,0][0,0]"/>
<node index="4" text="Профиль" resource-id=""
class="android.widget.Button" package="ru.rshb.dbo"
content-desc="" checkable="false" checked="false"
clickable="true" enabled="true" focusable="false"
focused="false" scrollable="false" long-clickable="false"
password="false" selected="false" bounds="[0,0][0,0]"/>
</node>
</node>
</node>
</node>
<node index="1" text="" resource-id="" class="android.widget.TextView"
package="ru.rshb.dbo" content-desc="" checkable="false" checked="false"
clickable="false" enabled="true" focusable="false" focused="false"
scrollable="false" long-clickable="false" password="false" selected="false"
bounds="[0,0][0,0]"/>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node index="1" text="" resource-id="android:id/statusBarBackground" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false" checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false" long-clickable="false" password="false"
selected="false" bounds="[0,0][720,82]"/>
<node index="2" text="" resource-id="android:id/navigationBarBackground" class="android.view.View"
package="ru.rshb.dbo" content-desc="" checkable="false" checked="false" clickable="false" enabled="true"
focusable="false" focused="false" scrollable="false" long-clickable="false" password="false"
selected="false" bounds="[0,0][0,0]"/>
</node>
</hierarchy>

Binary file not shown.