Commit Graph

30 Commits

Author SHA1 Message Date
Ali 53d4eb1cc7 fix: symmetric Azeri translit + VOEN-first dedup
Mirrors the same correctness fixes now in jey_erp.bank_integration:

- Party-name lookup at Create & Reconcile + fuzzy purpose matcher now apply
  Azerbaijani transliteration when settings.consider_azeri_chars is on, with
  per-row override via the new Azeri Translit Select on Customer/Supplier
  Mappings (same pattern as case sensitivity).
- create_unmapped_customers / create_unmapped_suppliers now look up existing
  parties by tax_id first, then by name; when found, the mapping row is
  linked to the existing party instead of silently skipping it. Response
  reports linked_count alongside created_count.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 10:45:43 +00:00
Ali d9d033bfe1 fix: create party without a group when none is configured
The first-leaf fallback meant customers always landed in "Individual"
even when no Customer Group was chosen. Customer/Supplier/Territory
aren't actually mandatory in ERPNext, so now: a configured value is
validated (exists + leaf) and used; nothing configured -> the party is
created with an empty customer_group / supplier_group / territory.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 11:05:09 +00:00
Ali 853c01e3e9 feat: fall back to first leaf node when no group is configured + filter group fields
Creating customers/suppliers no longer requires a default Customer/
Supplier Group or Territory on Kapital Bank Settings — when none is set,
the first leaf (non-group) node of the tree is used. A configured value
is still validated (must exist and be a leaf), with a clear message.
Also: the default-group / default-territory Link fields (and the
matching mapping child-table fields) now filter to is_group=0 so a group
node can't be selected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 10:53:29 +00:00
Ali 8d66f2101d fix: reject group-node Customer/Supplier Group / Territory upfront
Customer/Supplier require a leaf node for customer_group/supplier_group/
territory; selecting a group node makes ERPNext throw "Cannot select a
Group type ...". Creation now checks is_group during the upfront
validation and returns a clear message before touching any record.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 10:45:29 +00:00
Ali aae3dfacfb fix: clear validation message when default groups/company aren't set
Creating customers/suppliers/bank accounts from unmapped rows fell back
to "All Customer Groups" / "All Territories" / "All Supplier Groups",
which don't exist on localized sites, producing ERPNext's cryptic
"Could not find Customer Group: All Customer Groups". Creation now
validates upfront and returns a clear message ("Set a Default Customer
Group on Kapital Bank Settings ...") before touching any records — also
for Territory, Supplier Group, and Company/Bank when creating Bank
Accounts from account/card mappings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 10:31:40 +00:00
Ali dd5ffc0bed feat: enrich card transaction descriptions and add duplicate warning
Build full description from operationName, fullRemark, shortRemark, and
description fields for card statement transactions. Show a warning banner
when card transactions are present since duplicate detection across card
and account statements is not possible due to different reference numbers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:06:07 +04:00
Ali 677c1492e7 fix: use card's own currency for all card statement transactions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:17:59 +04:00
Ali e975cfbe26 fix: use amount instead of originalAmount for card statement imports
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:12:04 +04:00
Ali d8cf942792 fix: use lcyAmount for cross-currency transactions on AZN accounts
Root cause: get_statement_transactions() used fcyAmount (foreign currency
amount) but tagged it with account_currency. For AZN-to-USD exchanges on
AZN accounts, this picked the USD amount (e.g. 400) but labelled it as
AZN, causing wrong BT amounts and cascading JE errors.

Fix: parse acCcy from API and use lcyAmount (always AZN per API docs)
when acCcy differs from account_currency. Also revert txn_currency
fallback in JE creation from kb_currency back to bank_txn.currency so
the amount and currency stay consistent throughout the pipeline.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 19:44:16 +04:00
Ali 57c8cb0925 fix: filter transaction mappings by currency + hide notes from list view
- Add currency field to purpose_rules tuple in _build_import_lookups
- Filter rules by txn currency in _match_purpose_rules (empty = match all)
- Remove in_list_view from notes field so currency column is visible in grid

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 17:39:12 +04:00
Ali 3fbb02a7fc refactor: use existing expense_income_type field from jey_erp
Replace custom kb_account_type field with the existing
expense_income_type field (label: Expense/Income) defined
in jey_erp. Remove the now-unnecessary ensure_journal_entry_custom_fields()
function from setup.py.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 16:32:16 +04:00
Ali 3b44f5a694 feat: add kb_account_type custom field to Journal Entry
Adds a hidden, read-only 'KB Account Type' (Income/Expense) field
to Journal Entry via Custom Field, visible only in list view.
Populated automatically when a JE is created from a KB transaction:
- Pay (drcr=D) → Expense
- Receive (drcr=C) → Income

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 15:31:28 +04:00
Ali 62bc550186 fix: correct multi-currency amounts in Journal Entry creation
Replace ad-hoc if/elif branches with a unified approach:
1. Read txn_currency from the transaction data
2. Convert amount → company currency via txn_rate
3. Derive each account's amount in its own currency
4. Recompute exact exchange rates from rounded amounts
   to keep Frappe's debit == credit in company currency

Fixes the bug where a $40 debit was recorded as ~$25 debit
and 40 AZN credit due to dividing instead of multiplying
when the transaction currency matched the foreign account.

Applies to both bank_api.py (_import_one_transaction JE path)
and mapping.py (_create_journal_entry_for_brt).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 15:10:27 +04:00
Ali f063c5cd0c fix: swap debit/credit for Receive type Journal Entry
For Receive transactions, paid_to (bank account) should be debited
and paid_from (income/receivable account) should be credited.
The logic was inverted in both bank_api.py and mapping.py.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 14:57:05 +04:00
Ali 3e90e872a1 added currency to mappings 2026-03-13 21:28:17 +04:00
Ali 5b47d06eec removed filter for multi currency 2026-03-13 20:21:30 +04:00
Ali 42e5c42ab3 removed filter for multi currency 2026-03-13 20:12:36 +04:00
Ali e54d13ae22 removed filter for multi currency 2026-03-13 20:09:07 +04:00
Ali fc34e5104b added mapping without party 2026-03-13 17:20:08 +04:00
Ali 2f05dfe8d3 hide same operations 2026-03-11 21:24:23 +04:00
Ali c674fed28b bug fix 2026-03-11 19:36:51 +04:00
Ali 7be2112e2a added bulk edit 2026-03-05 22:41:19 +04:00
Ali 896140629c fixed bug with voen 2026-03-05 18:27:31 +04:00
Ali 717c1eb817 changed purpose mapping and more 2026-03-05 17:57:43 +04:00
Ali 6cd30ca4bb bug fixes 2026-03-04 21:50:37 +04:00
Ali fe3ab9a38f fixed small bugs 2026-03-03 22:09:00 +04:00
Ali 89a372c490 added bank transaction 2026-03-03 17:56:08 +04:00
Ali cc12c99608 app polished 2026-02-27 23:10:19 +04:00
Ali 4a560dbde5 payment entry import works 2026-02-26 22:04:10 +04:00
Ali 70c0f33d37 added kapital bank settings and app rework 2026-02-25 22:07:07 +04:00