From 2f05dfe8d3c8f1375b39f36d84c9e1da793631b8 Mon Sep 17 00:00:00 2001 From: Ali <010109ali@gmail.com> Date: Wed, 11 Mar 2026 21:24:23 +0400 Subject: [PATCH] hide same operations --- kapital_bank/bank_api.py | 24 +++++++++++++++++++++++- kapital_bank/client/bank_transaction.js | 5 ++++- kapital_bank/client/payment_entry.js | 5 ++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/kapital_bank/bank_api.py b/kapital_bank/bank_api.py index d2263cb..07371a3 100644 --- a/kapital_bank/bank_api.py +++ b/kapital_bank/bank_api.py @@ -1264,8 +1264,17 @@ def get_statement_transactions(from_date, to_date, account_iban, login_name=None .get("statementList", []) ) + # Get currency of current account for cross-account filtering + account_currency = frappe.db.get_value("Kapital Bank Account", account_iban, "currency") or "" + + # Build IBAN → currency map for all local accounts (for cross-currency filtering) + local_account_currencies = dict( + frappe.db.get_all("Kapital Bank Account", fields=["name", "currency"], as_list=True) + ) + transactions = [] skipped_duplicates = 0 + skipped_cross_currency = 0 for txn in statement_list: trn_ref = (txn.get("trnRefNo") or "").strip() @@ -1288,7 +1297,19 @@ def get_statement_transactions(from_date, to_date, account_iban, login_name=None dr_cr = (txn.get("drcrInd") or "").upper() # Counterparty - contr_name, contr_voen = _parse_counterparty(txn.get("contrAccount")) + contr_raw = txn.get("contrAccount") or "" + contr_parts = [p.strip() for p in contr_raw.split(" / ")] + contr_iban = contr_parts[0] if contr_parts else "" + contr_name = contr_parts[1] if len(contr_parts) > 1 else "" + contr_voen = contr_parts[2] if len(contr_parts) > 2 else "" + + # Skip if counterparty account exists locally with a different currency + # (that transaction belongs to the counterparty account's currency view) + if contr_iban and contr_iban in local_account_currencies: + contr_account_currency = local_account_currencies[contr_iban] + if contr_account_currency and contr_account_currency != account_currency: + skipped_cross_currency += 1 + continue # Purpose purpose = (txn.get("purpose") or "").strip() @@ -1311,6 +1332,7 @@ def get_statement_transactions(from_date, to_date, account_iban, login_name=None "transactions": transactions, "total_fetched": len(statement_list), "skipped_duplicates": skipped_duplicates, + "skipped_cross_currency": skipped_cross_currency, } except Exception as e: diff --git a/kapital_bank/client/bank_transaction.js b/kapital_bank/client/bank_transaction.js index 2825e9f..847fd36 100644 --- a/kapital_bank/client/bank_transaction.js +++ b/kapital_bank/client/bank_transaction.js @@ -429,6 +429,7 @@ KBBTImport.import = { let totalSkipped = 0; let seenRefNos = new Set(); let crossAccountDuplicates = 0; + let skippedCrossCurrency = 0; function fetchNext() { if (currentSourceIdx >= totalSources) { @@ -447,10 +448,11 @@ KBBTImport.import = { return; } - if (totalSkipped > 0 || crossAccountDuplicates > 0) { + if (totalSkipped > 0 || crossAccountDuplicates > 0 || skippedCrossCurrency > 0) { let parts = []; if (totalSkipped > 0) parts.push(__('already imported: {0}', [totalSkipped])); if (crossAccountDuplicates > 0) parts.push(__('cross-account duplicates: {0}', [crossAccountDuplicates])); + if (skippedCrossCurrency > 0) parts.push(__('other currency account: {0}', [skippedCrossCurrency])); frappe.show_alert({ message: __('Skipped: {0}', [parts.join(', ')]), indicator: 'blue' @@ -500,6 +502,7 @@ KBBTImport.import = { } }); totalSkipped += (r.message.skipped_duplicates || 0); + skippedCrossCurrency += (r.message.skipped_cross_currency || 0); } else { frappe.show_alert({ message: __('Error fetching {0}: {1}', [sourceLabel, r.message ? r.message.message : 'unknown']), diff --git a/kapital_bank/client/payment_entry.js b/kapital_bank/client/payment_entry.js index c7594ff..ca18199 100644 --- a/kapital_bank/client/payment_entry.js +++ b/kapital_bank/client/payment_entry.js @@ -390,6 +390,7 @@ KBImport.import = { let totalSkipped = 0; let seenRefNos = new Set(); let crossAccountDuplicates = 0; + let skippedCrossCurrency = 0; function fetchNext() { if (currentSourceIdx >= totalSources) { @@ -408,10 +409,11 @@ KBImport.import = { return; } - if (totalSkipped > 0 || crossAccountDuplicates > 0) { + if (totalSkipped > 0 || crossAccountDuplicates > 0 || skippedCrossCurrency > 0) { let parts = []; if (totalSkipped > 0) parts.push(__('already imported: {0}', [totalSkipped])); if (crossAccountDuplicates > 0) parts.push(__('cross-account duplicates: {0}', [crossAccountDuplicates])); + if (skippedCrossCurrency > 0) parts.push(__('other currency account: {0}', [skippedCrossCurrency])); frappe.show_alert({ message: __('Skipped: {0}', [parts.join(', ')]), indicator: 'blue' @@ -458,6 +460,7 @@ KBImport.import = { } }); totalSkipped += (r.message.skipped_duplicates || 0); + skippedCrossCurrency += (r.message.skipped_cross_currency || 0); } else { frappe.show_alert({ message: __('Error fetching {0}: {1}', [sourceLabel, r.message ? r.message.message : 'unknown']),