Fix default timestamp and add card report asset
Corrected the default timestamp value in multiple database schemas to ensure proper functionality and consistent formatting. Added a new asset file for the card report layout to support UI rendering for card transactions.
This commit is contained in:
parent
ea986addb7
commit
c4f171259b
@ -137,9 +137,6 @@ bool GetLastDaysHistoryScript::openAndSaveDitailInfo(TransactionInfo &transactio
|
||||
void GetLastDaysHistoryScript::doStart() {
|
||||
// берем все транзакции из БД
|
||||
QList<TransactionInfo> localTransactions = TransactionDAO::getTransactionsWithinHours(m_account.id, 48);
|
||||
// for (const TransactionInfo& transaction: transactions) {
|
||||
// qDebug().noquote().nospace() << convertTransactionToString(transaction);
|
||||
// }
|
||||
const DeviceInfo device = DeviceDAO::getDeviceById(m_account.deviceId);
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||
@ -149,124 +146,202 @@ void GetLastDaysHistoryScript::doStart() {
|
||||
findAndTapOnAccount(device.id, m_account.lastNumbers);
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||
Node filterBtn = xmlScreenParser.findButtonNode("РСХБ Онлайн", false);
|
||||
if (!filterBtn.isEmpty()) {
|
||||
AdbUtils::makeTap(m_account.deviceId, filterBtn.x(), filterBtn.y());
|
||||
QThread::msleep(1000);
|
||||
Node actionBtn = xmlScreenParser.findButtonNode("Действия", false);
|
||||
if (!actionBtn.isEmpty()) {
|
||||
AdbUtils::makeTap(m_account.deviceId, actionBtn.x(), actionBtn.y());
|
||||
QThread::msleep(200);
|
||||
} else {
|
||||
qWarning() << "--- filterBtn not found";
|
||||
qWarning() << "--- actionBtn not found";
|
||||
}
|
||||
Node reportButton = swipeToButton(m_account.deviceId, "Выписка", m_counter, device.screenWidth,
|
||||
device.screenHeight);
|
||||
|
||||
if (!reportButton.isEmpty()) {
|
||||
AdbUtils::makeTap(m_account.deviceId, reportButton.x(), reportButton.y());
|
||||
QThread::msleep(1000);
|
||||
}
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||
Node allTransactionFilerBtn = xmlScreenParser.findButtonNode("Все операции", false);
|
||||
if (!allTransactionFilerBtn.isEmpty()) {
|
||||
AdbUtils::makeTap(m_account.deviceId, allTransactionFilerBtn.x(), allTransactionFilerBtn.y());
|
||||
QThread::msleep(1000);
|
||||
} else {
|
||||
qWarning() << "--- allTransactionFilerBtn not found";
|
||||
}
|
||||
|
||||
QList<TransactionInfo> parsedTransactions;
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
parsedTransactions = xmlScreenParser.parseTodayAndYesterdayHistory();
|
||||
if (!parsedTransactions.empty()) {
|
||||
break;
|
||||
}
|
||||
Node reportTitle = xmlScreenParser.findTextNode("Выписка");
|
||||
if (!reportTitle.isEmpty() && reportTitle.y() < 300) {
|
||||
QDate beforeYesterday = DateUtils::getMoscowNow().date().addDays(-2);
|
||||
QString beforeYesterdayTitle = beforeYesterday.toString("dd.MM.yyyy");
|
||||
|
||||
QThread::msleep(1000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||
}
|
||||
|
||||
|
||||
qDebug() << "--- parsedTransactions: " << parsedTransactions.length();
|
||||
// localTransactions
|
||||
QList<TransactionInfo> updatedTransactions;
|
||||
for (TransactionInfo &transaction: parsedTransactions) {
|
||||
// если shortDescription + сумма + день и Complete совпадает и одна
|
||||
int cSimilar = countSimilar(transaction, parsedTransactions);
|
||||
QList<TransactionInfo> txs = findSavedTransaction(localTransactions, transaction);
|
||||
|
||||
if (cSimilar == 1 && txs.length() < 2) {
|
||||
if (txs.length() == 1) {
|
||||
// смотрим, надо ли обновление
|
||||
if (txs[0].status != TransactionStatus::Complete || txs[0].shortDescription.isEmpty()) {
|
||||
txs[0].shortDescription = transaction.shortDescription;
|
||||
openAndSaveDitailInfo(txs[0], device.screenWidth, device.screenHeight);
|
||||
updatedTransactions.append(txs[0]);
|
||||
}
|
||||
} else {
|
||||
// создаем новую
|
||||
openAndSaveDitailInfo(transaction, device.screenWidth, device.screenHeight);
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
Node byDayTitle = xmlScreenParser.findTextNode(beforeYesterdayTitle);
|
||||
if (!byDayTitle.isEmpty()) {
|
||||
qWarning() << "--- beforeYesterdayTitle found!";
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (cSimilar == txs.length()) {
|
||||
// одинаковые транзакции (2 - 2)
|
||||
for (TransactionInfo &tx: txs) {
|
||||
if (!updatedTransactions.contains(tx)) {
|
||||
openAndSaveDitailInfo(tx, device.screenWidth, device.screenHeight);
|
||||
updatedTransactions.append(tx);
|
||||
AdbUtils::makeSwipe(
|
||||
m_account.deviceId,
|
||||
device.screenWidth / 2, device.screenHeight / 4 * 3,
|
||||
device.screenWidth / 2, device.screenHeight / 4
|
||||
);
|
||||
QThread::msleep(1000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||
}
|
||||
} else {
|
||||
qWarning() << "--- reportTitle not found";
|
||||
}
|
||||
|
||||
// все поддвержденные
|
||||
QList<TransactionInfo> parsedTransactions = xmlScreenParser.parseTodayAndYesterdayReportHistory();
|
||||
QSet<int> parsedTransactionIds;
|
||||
qDebug() << "--- parsedTransactions: " << parsedTransactions.length();
|
||||
qDebug() << "--- localTransactions: " << localTransactions.length();
|
||||
for (const TransactionInfo &transaction: parsedTransactions) {
|
||||
bool updated = false;
|
||||
|
||||
for (const TransactionInfo &saved: localTransactions) {
|
||||
if (parsedTransactionIds.contains(saved.id)) {
|
||||
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) {
|
||||
if (transaction.description.startsWith("Перевод")) {
|
||||
// Перевод по номеру
|
||||
if (saved.bankName == transaction.bankName && saved.phone == transaction.phone) {
|
||||
parsedTransactionIds.insert(saved.id);
|
||||
updated = true;
|
||||
if (saved.status != TransactionStatus::Complete || saved.description.isEmpty()) {
|
||||
if (!TransactionDAO::updateTransaction(
|
||||
saved.id,
|
||||
TransactionStatus::Complete,
|
||||
saved.description,
|
||||
transaction.description
|
||||
)) {
|
||||
qDebug().noquote().nospace() << "--- updated+phone failed" <<
|
||||
convertTransactionToString(transaction);;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (cSimilar < txs.length()) {
|
||||
// Дубликаты транзакций или название изменилось (1 - 2)
|
||||
qDebug() << "--- Дубликаты транзакций или название изменилось (1 - 2)!!!!!!!!!!!!";
|
||||
// FIXME alert!!!
|
||||
} else {
|
||||
// нужно создать новую транзакцию, которой не было (2 - 1)
|
||||
bool updated = false;
|
||||
for (TransactionInfo &tx: txs) {
|
||||
if (!updatedTransactions.contains(tx)) {
|
||||
openAndSaveDitailInfo(tx, device.screenWidth, device.screenHeight);
|
||||
updatedTransactions.append(tx);
|
||||
} else {
|
||||
// перевод по карте
|
||||
// перезаписать saved.description -> updatedDescription если не равны
|
||||
if (!saved.description.isEmpty()) {
|
||||
if (saved.description == transaction.description) {
|
||||
// описания совпадают
|
||||
if (saved.status != TransactionStatus::Complete) {
|
||||
if (!TransactionDAO::updateTransaction(
|
||||
saved.id,
|
||||
TransactionStatus::Complete,
|
||||
saved.description,
|
||||
transaction.description
|
||||
)) {
|
||||
qDebug().noquote().nospace() << "--- updated+card[description same] failed"
|
||||
<<
|
||||
convertTransactionToString(transaction);;
|
||||
}
|
||||
}
|
||||
parsedTransactionIds.insert(saved.id);
|
||||
updated = true;
|
||||
break;
|
||||
} else {
|
||||
// описания не совпадают, то пробуем найти такое же, если не находим то это новая
|
||||
bool findWithSameName = false;
|
||||
for (const TransactionInfo &saved2: localTransactions) {
|
||||
if (saved2.description == transaction.description && !parsedTransactionIds.
|
||||
contains(
|
||||
saved2.id)) {
|
||||
// мы нашли с одинаковым описанием и еще не обработанную
|
||||
if (saved2.status != TransactionStatus::Complete) {
|
||||
if (!TransactionDAO::updateTransaction(
|
||||
saved2.id,
|
||||
TransactionStatus::Complete,
|
||||
saved2.description,
|
||||
transaction.description
|
||||
)) {
|
||||
qDebug().noquote().nospace() <<
|
||||
"--- updated+card2[description same] failed"
|
||||
<<
|
||||
convertTransactionToString(transaction);;
|
||||
}
|
||||
}
|
||||
parsedTransactionIds.insert(saved2.id);
|
||||
updated = true;
|
||||
findWithSameName = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!findWithSameName) {
|
||||
// обновляем описание
|
||||
if (!TransactionDAO::updateTransaction(
|
||||
saved.id,
|
||||
TransactionStatus::Complete,
|
||||
saved.description,
|
||||
transaction.description
|
||||
)) {
|
||||
qDebug().noquote().nospace() <<
|
||||
"--- updated+card2+new desc[description same] failed" <<
|
||||
convertTransactionToString(transaction);;
|
||||
}
|
||||
}
|
||||
parsedTransactionIds.insert(saved.id);
|
||||
updated = true;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// пустой описание
|
||||
if (!TransactionDAO::updateTransaction(
|
||||
saved.id,
|
||||
TransactionStatus::Complete,
|
||||
saved.description,
|
||||
transaction.description
|
||||
)) {
|
||||
qDebug().noquote().nospace() <<
|
||||
"--- updated+card[empty description]" <<
|
||||
convertTransactionToString(transaction);;
|
||||
}
|
||||
parsedTransactionIds.insert(saved.id);
|
||||
updated = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!updated) {
|
||||
// создаем новую, так как у нас появилась одинаковая транзакция
|
||||
openAndSaveDitailInfo(transaction, device.screenWidth, device.screenHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!updated) {
|
||||
qDebug() << "--- insert: " << transaction.description;
|
||||
// не нашлась транзакция
|
||||
TransactionInfo tr;
|
||||
tr.accountId = m_account.id;
|
||||
tr.description = transaction.description;
|
||||
tr.bankTime = transaction.bankTime;
|
||||
tr.bankName = transaction.bankName;
|
||||
tr.amount = transaction.amount;
|
||||
tr.phone = transaction.phone;
|
||||
tr.updateTime = DateUtils::getUtcNow();
|
||||
tr.fee = transaction.fee;
|
||||
tr.name = transaction.name;
|
||||
tr.trExternalId = transaction.trExternalId;
|
||||
tr.status = TransactionStatus::Complete;
|
||||
tr.type = transaction.description.startsWith("Перевод")
|
||||
? TransactionType::Phone
|
||||
: TransactionType::Card;
|
||||
tr.completeTime = DateUtils::getUtcNow();
|
||||
if (TransactionDAO::insertTransaction(tr) == -1) {
|
||||
qDebug() << "--- not inserted: " << transaction.description;
|
||||
}
|
||||
}
|
||||
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_account.deviceId, ++m_counter));
|
||||
// Если это перевод
|
||||
// Если совпадает по сумме + телефон + банк дата (без времени) + банк
|
||||
|
||||
// Если по карте, мы знаем ток дату + сумма
|
||||
}
|
||||
// сначала обработаем
|
||||
|
||||
}
|
||||
} else {
|
||||
qDebug() << "--- home screen not found";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
amount: -250
|
||||
shortDescription: Перевод Надежда Юрьевна К** в Сбербанк через СБП, по номеру телефона +7964181514...
|
||||
bankTime: 08.05.2025
|
||||
|
||||
amount: -305
|
||||
shortDescription: Перевод Надежда Юрьевна К** в Альфа-Банк через СБП, по номеру телефона +79641815...
|
||||
bankTime: 08.05.2025
|
||||
|
||||
|
||||
amount: -250
|
||||
shortDescription: Перевод Надежда Юрьевна К** в Альфа-Банк через СБП, по номеру телефона +79641815...
|
||||
bankTime: 07.05.2025
|
||||
|
||||
amount: -250
|
||||
shortDescription: Перевод Надежда Юрьевна К** в Сбербанк через СБП, по номеру телефона +7964181514...
|
||||
bankTime: 07.05.2025
|
||||
|
||||
amount: -250
|
||||
shortDescription: Перевод Надежда Юрьевна К** в Альфа-Банк через СБП, по номеру телефона +79641815...
|
||||
bankTime: 07.05.2025
|
||||
|
||||
amount: 2100
|
||||
shortDescription: Перевод через СБП от Надежда Юрьевна К (+7(964)-181-51-46) из Альфа-Банк на 4081...
|
||||
bankTime: 07.05.2025
|
||||
|
||||
amount: 250
|
||||
shortDescription: Перевод через СБП от Надежда Юрьевна К (+7(964)-181-51-46) из Сбербанк на 408178...
|
||||
bankTime: 07.05.2025
|
||||
*/
|
||||
|
||||
@ -300,6 +300,23 @@ bool hasTimeComponent(const QString &datetimeStr) {
|
||||
return dt.time() != QTime(0, 0, 0); // Проверка, что время не равно 00:00:00
|
||||
}
|
||||
|
||||
QString transformBankDateTime(const QString &date) {
|
||||
QDateTime dt;
|
||||
if (date.contains(",")) {
|
||||
// 10.05.2025, 15:03
|
||||
dt = QDateTime::fromString(date, "dd.MM.yyyy, HH:mm");
|
||||
} else {
|
||||
dt = QDateTime::fromString(date, "dd.MM.yyyy HH:mm:ss");
|
||||
}
|
||||
if (!dt.isValid()) {
|
||||
dt = QDateTime::fromString(date, "dd.MM.yyyy HH:mm");
|
||||
}
|
||||
if (!dt.isValid()) {
|
||||
return date; // не распарсили
|
||||
}
|
||||
return dt.toString("dd.MM.yyyy HH:mm:ss");
|
||||
}
|
||||
|
||||
void parseTransferInfo(const QString &text, TransactionInfo &info) {
|
||||
if (const auto m = reSender.match(text); m.hasMatch()) {
|
||||
info.name = m.captured(1).trimmed();
|
||||
@ -330,9 +347,9 @@ void parseTransferInfo(const QString &text, TransactionInfo &info) {
|
||||
if (const auto m = reDate.match(text); m.hasMatch()) {
|
||||
const QString date = m.captured(1);
|
||||
// если не пустая и дата у нас с 00:00
|
||||
if (hasTimeComponent(date)) {
|
||||
info.bankTime = date;
|
||||
}
|
||||
// if (hasTimeComponent(date)) {
|
||||
info.bankTime = transformBankDateTime(date);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@ -491,6 +508,103 @@ QString beforeAmount(const QString &text) {
|
||||
return text; // если не найдено — вернуть всю строку
|
||||
}
|
||||
|
||||
double parseAmount(const QString &amountAsString) {
|
||||
QString numberString = amountAsString;
|
||||
numberString.remove(QRegularExpression(R"([^\dточка])"));
|
||||
numberString.replace("точка", ".");
|
||||
double amount = numberString.toDouble();
|
||||
|
||||
if (amountAsString.startsWith("-")) {
|
||||
amount *= -1;
|
||||
}
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
QDomElement findElementWithListView(const QDomElement &parent) {
|
||||
QDomElement element = parent.firstChildElement();
|
||||
while (!element.isNull()) {
|
||||
QDomElement child = element.firstChildElement();
|
||||
while (!child.isNull()) {
|
||||
if (child.hasAttribute("class") && child.attribute("class") == "android.widget.ListView") {
|
||||
return child;
|
||||
}
|
||||
child = child.nextSiblingElement();
|
||||
}
|
||||
|
||||
QDomElement found = findElementWithListView(element);
|
||||
if (!found.isNull()) {
|
||||
return found;
|
||||
}
|
||||
element = element.nextSiblingElement();
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
QList<TransactionInfo> ScreenXmlParser::parseTodayAndYesterdayReportHistory() {
|
||||
QList<TransactionInfo> transactions;
|
||||
|
||||
QDomElement child = findElementWithListView(m_xml);
|
||||
QDomNodeList listView = findElementWithListView(m_xml).childNodes();
|
||||
qDebug() << listView.count();
|
||||
if (!listView.isEmpty()) {
|
||||
QString date;
|
||||
for (QDomNode node: listView) {
|
||||
if (node.hasChildNodes()) {
|
||||
QString text;
|
||||
if (node.childNodes().count() > 1) {
|
||||
date = node.firstChildElement().attribute("text");
|
||||
text = node.lastChildElement().attribute("text");
|
||||
} else if (node.childNodes().count() == 1) {
|
||||
text = node.firstChildElement().attribute("text");
|
||||
}
|
||||
|
||||
TransactionInfo transaction;
|
||||
if (text.startsWith("Перевод")) {
|
||||
QRegularExpression re(R"([+-] \d{1,3}(?: \d{3})* точка \d{2} Рубль$)");
|
||||
QRegularExpressionMatch match = re.match(text);
|
||||
if (match.hasMatch()) {
|
||||
QString amount = match.captured(0);
|
||||
transaction.amount = parseAmount(amount.trimmed());
|
||||
text.chop(amount.length());
|
||||
}
|
||||
transaction.description = text.trimmed();
|
||||
parseTransferInfo(text, transaction);
|
||||
if (transaction.bankTime.isEmpty()) {
|
||||
transaction.bankTime = transformBankDateTime(date);
|
||||
}
|
||||
} else {
|
||||
// карта
|
||||
if (text.contains("без учета комиссии")) {
|
||||
QRegularExpression re(R"( без учета комиссии -\d{1,3}(?: \d{3})* точка \d{2} Рубль$)");
|
||||
QRegularExpressionMatch match = re.match(text);
|
||||
if (match.hasMatch()) {
|
||||
QString fee = match.captured(0);
|
||||
text.chop(fee.length());
|
||||
transaction.fee = parseAmount(fee.replace("без учета комиссии", "").trimmed());
|
||||
}
|
||||
}
|
||||
QRegularExpression re(R"([+-] \d{1,3}(?: \d{3})* точка \d{2} Рубль$)");
|
||||
QRegularExpressionMatch match = re.match(text);
|
||||
if (match.hasMatch()) {
|
||||
QString amount = match.captured(0);
|
||||
transaction.amount = parseAmount(amount.trimmed());
|
||||
text.chop(amount.length());
|
||||
}
|
||||
transaction.description = text.trimmed();
|
||||
if (transaction.bankTime.isEmpty()) {
|
||||
transaction.bankTime = transformBankDateTime(date);
|
||||
}
|
||||
}
|
||||
transactions.append(transaction);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
qDebug() << "ListView is empty";
|
||||
}
|
||||
return transactions;
|
||||
}
|
||||
|
||||
QList<TransactionInfo> ScreenXmlParser::parseTodayAndYesterdayHistory() {
|
||||
QDate today = DateUtils::getMoscowNow().date();
|
||||
QDate yesterday = today.addDays(-1);
|
||||
@ -668,7 +782,7 @@ TransactionInfo parseExpandedInfoHistory(const QDomElement &root) {
|
||||
switch (QDomElement e = info.toElement(); e.attribute("index").toInt()) {
|
||||
case 2:
|
||||
// Дата операции
|
||||
transaction.bankTime = findSubInfo(e, "1");
|
||||
transaction.bankTime = transformBankDateTime(findSubInfo(e, "1"));
|
||||
break;
|
||||
case 5:
|
||||
transaction.description = findSubInfo(e, "1");
|
||||
@ -732,7 +846,7 @@ TransactionInfo parseExpandedInfo(const QDomElement &root) {
|
||||
QDomElement ee;
|
||||
switch (index.toInt()) {
|
||||
case 3:
|
||||
transaction.bankTime = findSubInfo(infoElement, "1");
|
||||
transaction.bankTime = transformBankDateTime(findSubInfo(infoElement, "1"));
|
||||
break;
|
||||
case 4:
|
||||
ee = findSubElement(infoElement, "0");
|
||||
@ -786,7 +900,6 @@ TransactionInfo ScreenXmlParser::parseTransactionInfo(int screenWidth, int scree
|
||||
}
|
||||
|
||||
|
||||
|
||||
QList<QPair<AccountInfo, Node> > ScreenXmlParser::parseAccountsInfo() {
|
||||
QList<QPair<AccountInfo, Node> > accounts;
|
||||
for (const Node &node: m_nodes) {
|
||||
@ -835,7 +948,7 @@ void ScreenXmlParser::test() {
|
||||
QDomElement root = doc.documentElement();
|
||||
parseAndSaveXml(doc.toString());
|
||||
// for (const AccountInfo &info: parseAccountsInfo()) {
|
||||
// qDebug().noquote().nospace() << convertAccountToString(info);
|
||||
// qDebug().noquote().nospace() << convertAccountToString(info);
|
||||
// }
|
||||
// TransactionInfo info = parseExpandedInfo(root);
|
||||
// qDebug().noquote().nospace() << convertTransactionToString(info);
|
||||
|
||||
@ -38,6 +38,8 @@ public:
|
||||
TransactionInfo parseTransactionInfoHistory(int screenWidth, int screenHeight);
|
||||
TransactionInfo parseTransactionInfo(int screenWidth, int screenHeight);
|
||||
|
||||
QList<TransactionInfo> parseTodayAndYesterdayReportHistory();
|
||||
|
||||
QList<TransactionInfo> parseTodayAndYesterdayHistory();
|
||||
|
||||
|
||||
|
||||
BIN
assets/rshb/card_report_complete.png
Normal file
BIN
assets/rshb/card_report_complete.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 215 KiB |
430
assets/rshb/card_report_complete.xml
Normal file
430
assets/rshb/card_report_complete.xml
Normal file
@ -0,0 +1,430 @@
|
||||
<?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="true"
|
||||
focused="false" scrollable="true"
|
||||
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,1439]">
|
||||
<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="Период с 08.05.2025 по 10.05.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,473][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,473][720,798]">
|
||||
<node index="0" text="09.05.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="[28,473][691,517]"/>
|
||||
<node index="1"
|
||||
text="Перевод через СБП от Надежда Юрьевна К (+7(964)-181-51-46) из Сбербанк на 40817810328000022077 . Идентификатор операции в СБП С2С A5129141229250080000030011500701 , Дата операции 09.05.2025 17:12:29 Статус перевода Исполнен + 655 точка 00 Рубль"
|
||||
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="[28,533][691,779]"/>
|
||||
</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,794][720,1017]">
|
||||
<node index="0" text="08.05.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="[28,794][691,837]"/>
|
||||
<node index="1"
|
||||
text="Перевод Надежда Юрьевна К** в Сбербанк через СБП, по номеру телефона +79641815146, ID перевода 448627512, дата 08.05.2025 - 250 точка 00 Рубль"
|
||||
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="[28,854][691,995]"/>
|
||||
</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,1012][720,1193]">
|
||||
<node index="0"
|
||||
text="Перевод Надежда Юрьевна К** в Альфа-Банк через СБП, по номеру телефона +79641815146, ID перевода 448628517, дата 08.05.2025 - 305 точка 00 Рубль"
|
||||
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="[28,1030][691,1173]"/>
|
||||
</node>
|
||||
<node index="3" 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,1188][720,1370]">
|
||||
<node index="0"
|
||||
text="Перевод Надежда Юрьевна К** в Сбербанк через СБП, по номеру телефона +79641815146, ID перевода 448713642, дата 08.05.2025 - 405 точка 00 Рубль"
|
||||
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="[28,1208][691,1349]"/>
|
||||
</node>
|
||||
<node index="4" 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,1366][720,1439]">
|
||||
<node index="0"
|
||||
text="Перевод Надежда Юрьевна К** в Альфа-Банк через СБП, по номеру телефона +79641815146, ID перевода 448716504, дата 08.05.2025 - 310 точка 00 Рубль"
|
||||
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="[28,1385][691,1439]"/>
|
||||
</node>
|
||||
</node>
|
||||
</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>
|
||||
BIN
assets/rshb/card_report_complete_0.png
Normal file
BIN
assets/rshb/card_report_complete_0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 248 KiB |
1068
assets/rshb/card_report_complete_0.xml
Normal file
1068
assets/rshb/card_report_complete_0.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
assets/rshb/card_screen_actions.png
Normal file
BIN
assets/rshb/card_screen_actions.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 185 KiB |
869
assets/rshb/card_screen_actions.xml
Normal file
869
assets/rshb/card_screen_actions.xml
Normal file
@ -0,0 +1,869 @@
|
||||
<?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][350,173]"/>
|
||||
<node index="2" 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="[699,89][712,157]"/>
|
||||
</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="true" focused="false" scrollable="true"
|
||||
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,588]">
|
||||
<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,588]">
|
||||
<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.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][80,588]">
|
||||
<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,237][24,588]">
|
||||
<node index="0" 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,82][258,382]"/>
|
||||
<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 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="160"
|
||||
resource-id="aft-operationHistory-money"
|
||||
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 index="1" text="точка 00"
|
||||
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 index="2" 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 index="3" 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 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 index="2" 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 index="3" text="** 5264"
|
||||
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 NAF="true" index="4" 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,0][0,0]"/>
|
||||
<node index="5" 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 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,162][720,588]">
|
||||
<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="[54,237][665,588]">
|
||||
<node index="0" 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="[296,82][720,382]"/>
|
||||
<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,443][423,860]"/>
|
||||
<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="[99,277][620,550]">
|
||||
<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="[99,312][620,368]">
|
||||
<node index="0" text="2 095"
|
||||
resource-id="aft-operationHistory-money"
|
||||
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="[99,312][215,367]"/>
|
||||
<node index="1" text="точка 00"
|
||||
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="[211,312][277,367]"/>
|
||||
<node index="2" 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="[286,312][315,367]"/>
|
||||
<node index="3" 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="[311,312][371,368]"/>
|
||||
</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="[99,380][620,421]"/>
|
||||
<node index="2" 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="[99,419][620,458]"/>
|
||||
<node index="3" text="** 7183"
|
||||
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="[99,517][620,550]"/>
|
||||
<node NAF="true" index="4" 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="[571,277][620,322]"/>
|
||||
<node index="5" 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="[541,524][639,550]"/>
|
||||
</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="[54,172][665,211]"/>
|
||||
</node>
|
||||
</node>
|
||||
<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="true"
|
||||
focused="false" scrollable="false"
|
||||
long-clickable="false" password="false"
|
||||
selected="false" bounds="[78,622][268,773]"/>
|
||||
<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="[264,622][455,773]"/>
|
||||
<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="true"
|
||||
focused="false" scrollable="false"
|
||||
long-clickable="false" password="false"
|
||||
selected="false" bounds="[451,622][641,773]"/>
|
||||
<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="true"
|
||||
focused="false" scrollable="false"
|
||||
long-clickable="false" password="false"
|
||||
selected="false" bounds="[30,788][352,880]"/>
|
||||
<node index="5" 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="[367,788][691,880]"/>
|
||||
<node index="6" 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,880][720,1439]">
|
||||
<node index="0" 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="[30,880][691,959]"/>
|
||||
<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="true" focused="false"
|
||||
scrollable="false" long-clickable="false"
|
||||
password="false" selected="false"
|
||||
bounds="[30,957][691,1072]"/>
|
||||
<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="[30,1070][691,1184]"/>
|
||||
<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="true" focused="false"
|
||||
scrollable="false" long-clickable="false"
|
||||
password="false" selected="false"
|
||||
bounds="[30,1180][691,1295]"/>
|
||||
<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="[30,1293][691,1409]"/>
|
||||
<node index="5" 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="[30,1405][691,1439]"/>
|
||||
<node index="6" 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="7" text="Снятие наличных по QR-коду"
|
||||
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,0][0,0]"/>
|
||||
<node index="8" 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="9" 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,0][0,0]"/>
|
||||
<node index="10" 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="11" 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="12" 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="13" 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 index="14" 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="15" 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="16"
|
||||
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,0][0,0]"/>
|
||||
<node index="17" 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>
|
||||
<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.
@ -292,3 +292,46 @@ QList<TransactionInfo> TransactionDAO::getTransactionsWithinHours(const int acco
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
bool TransactionDAO::updateTransaction(
|
||||
const int id,
|
||||
const TransactionStatus status,
|
||||
const QString &oldDesc,
|
||||
const QString &newDesc
|
||||
) {
|
||||
QSqlQuery query(DatabaseManager::instance().database());
|
||||
|
||||
query.prepare(R"(
|
||||
UPDATE transactions SET
|
||||
status = :status,
|
||||
update_time = :update_time,
|
||||
complete_time = :complete_time,
|
||||
description = :description,
|
||||
updated_description = :updated_description
|
||||
WHERE id = :id
|
||||
)");
|
||||
|
||||
query.bindValue(":id", id);
|
||||
query.bindValue(":status", transactionStatusToString(status));
|
||||
query.bindValue(":update_time", DateUtils::toUtcString(DateUtils::getUtcNow()));
|
||||
|
||||
if (oldDesc.isEmpty() || oldDesc != newDesc) {
|
||||
query.bindValue(":description", newDesc);
|
||||
query.bindValue(":updated_description", oldDesc);
|
||||
} else {
|
||||
query.bindValue(":description", newDesc);
|
||||
query.bindValue(":updated_description", "");
|
||||
}
|
||||
|
||||
if (status == TransactionStatus::Complete) {
|
||||
query.bindValue(":complete_time", DateUtils::toUtcString(DateUtils::getUtcNow()));
|
||||
} else {
|
||||
query.bindValue(":complete_time", QVariant(QMetaType(QMetaType::QString)));
|
||||
}
|
||||
|
||||
if (!query.exec()) {
|
||||
qWarning() << "Ошибка при обновлении transaction:" << query.lastError().text();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -19,4 +19,10 @@ public:
|
||||
[[nodiscard]] static TransactionInfo getTransactionById(int id);
|
||||
|
||||
[[nodiscard]] static QList<TransactionInfo> getTransactionsWithinHours(int accountId, int hours);
|
||||
|
||||
[[nodiscard]] static bool updateTransaction(
|
||||
int id, TransactionStatus status,
|
||||
const QString &oldDesc,
|
||||
const QString &newDesc
|
||||
);
|
||||
};
|
||||
|
||||
@ -13,7 +13,7 @@ QDateTime DateUtils::getUtcNow() {
|
||||
}
|
||||
|
||||
QDateTime DateUtils::fromUtcString(const QString ×tamp) {
|
||||
QDateTime dateTime = QDateTime::fromString(timestamp, "dd.MM.yyyy HH:mm:ss");
|
||||
QDateTime dateTime = QDateTime::fromString(timestamp, "yyyy-MM-dd HH:mm:ss");
|
||||
if (dateTime.isValid()) {
|
||||
dateTime.setTimeZone(QTimeZone::utc());
|
||||
}
|
||||
@ -21,5 +21,5 @@ QDateTime DateUtils::fromUtcString(const QString ×tamp) {
|
||||
}
|
||||
|
||||
QString DateUtils::toUtcString(const QDateTime &dateTime) {
|
||||
return dateTime.toString("dd.MM.yyyy HH:mm:ss");
|
||||
return dateTime.toString("yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
|
||||
37
main.cpp
37
main.cpp
@ -49,6 +49,25 @@ void setupWorkerAndThread(QCoreApplication &app) {
|
||||
thread->start();
|
||||
}
|
||||
|
||||
void setupWorkerAndThreadHistory(QCoreApplication &app) {
|
||||
const QString appName = "rshb";
|
||||
const QString cardNumber = "2200380317107183";
|
||||
AccountInfo account = AccountDAO::findAppAccount(appName, cardNumber);
|
||||
auto *thread = new QThread;
|
||||
auto *deviceScreenerWorker = new GetLastDaysHistoryScript(account);
|
||||
|
||||
deviceScreenerWorker->moveToThread(thread);
|
||||
QObject::connect(thread, &QThread::started, deviceScreenerWorker, &GetLastDaysHistoryScript::start);
|
||||
QObject::connect(deviceScreenerWorker, &GetLastDaysHistoryScript::finished, thread, &QThread::quit);
|
||||
QObject::connect(deviceScreenerWorker, &GetLastDaysHistoryScript::finished, deviceScreenerWorker, &QObject::deleteLater);
|
||||
QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater);
|
||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, [=]() {
|
||||
deviceScreenerWorker->stop();
|
||||
});
|
||||
|
||||
thread->start();
|
||||
}
|
||||
|
||||
void setupScriptAutoPaymentAndThread(QCoreApplication &app) {
|
||||
const QString appName = "rshb";
|
||||
const QString cardNumber = "2200380317107183";
|
||||
@ -56,15 +75,21 @@ void setupScriptAutoPaymentAndThread(QCoreApplication &app) {
|
||||
const QString phoneNumber = "79641815146";
|
||||
const QString bankName = "Альфа-Банк";
|
||||
// const QString bankName = "Сбербанк";
|
||||
const double amount = 310;
|
||||
const double amount = 440;
|
||||
|
||||
AccountInfo account = AccountDAO::findAppAccount(appName, cardNumber);
|
||||
const AccountInfo account = AccountDAO::findAppAccount(appName, cardNumber);
|
||||
if (account.id != -1) {
|
||||
// Функция для подключения потоков к завершению приложения
|
||||
auto connectStopOnQuit = [&](QObject *worker, QThread *thread) {
|
||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, worker, &QObject::deleteLater);
|
||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, thread, &QThread::quit);
|
||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, thread, &QThread::deleteLater);
|
||||
QObject::connect(&app, &QCoreApplication::aboutToQuit, [=]() {
|
||||
if (thread->isRunning()) {
|
||||
qDebug() << "Завершаем поток:" << thread;
|
||||
thread->quit();
|
||||
thread->wait(); // Ожидаем завершения потока
|
||||
}
|
||||
worker->deleteLater();
|
||||
thread->deleteLater();
|
||||
});
|
||||
};
|
||||
|
||||
// Первый поток
|
||||
@ -79,7 +104,7 @@ void setupScriptAutoPaymentAndThread(QCoreApplication &app) {
|
||||
QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater);
|
||||
|
||||
// Обработка результата первого потока
|
||||
QObject::connect(scriptWorker, &PayByPhoneScript::finishedWithResult, &app, [&](const QString &result) {
|
||||
QObject::connect(scriptWorker, &PayByPhoneScript::finishedWithResult, &app, [account, connectStopOnQuit](const QString &result) {
|
||||
qDebug() << "Получен результат: [" << result << "]";
|
||||
|
||||
// Создаем второй поток после завершения первого
|
||||
|
||||
@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS devices
|
||||
screen_height INTEGER,
|
||||
battery INTEGER,
|
||||
update_time DATETIME,
|
||||
timestamp DATETIME DEFAULT (strftime('%d.%m.%Y %H:%M:%S', 'now')),
|
||||
timestamp DATETIME DEFAULT (strftime('%d.%m.%Y %H:%M:%S', 'now')),
|
||||
image BLOB
|
||||
);
|
||||
|
||||
@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS accounts
|
||||
last_numbers TEXT,
|
||||
description TEXT,
|
||||
amount REAL,
|
||||
update_time DATETIME DEFAULT (strftime('%d.%m.%Y %H:%M:%S', 'now')),
|
||||
update_time DATETIME DEFAULT (strftime('%d.%m.%Y %H:%M:%S', 'now')),
|
||||
status TEXT,
|
||||
FOREIGN KEY (device_id) REFERENCES devices (id) ON DELETE CASCADE,
|
||||
UNIQUE (device_id, app_name, last_numbers)
|
||||
@ -66,7 +66,6 @@ CREATE TABLE IF NOT EXISTS transactions
|
||||
|
||||
update_time DATETIME,
|
||||
complete_time DATETIME,
|
||||
timestamp DATETIME DEFAULT (strftime('%d.%m.%Y %H:%M:%S', 'now')),
|
||||
FOREIGN KEY (account_id) REFERENCES accounts (id) ON DELETE CASCADE,
|
||||
UNIQUE (amount, timestamp)
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (account_id) REFERENCES accounts (id) ON DELETE CASCADE
|
||||
);
|
||||
Loading…
Reference in New Issue
Block a user