Commit Graph

222 Commits

Author SHA1 Message Date
Ali f35b19cf14 feat(bank-integration): universal Excel-based bank statement import
Adds 10 doctypes (Bank Integration + 4 child mapping tables + 3
registries + Excel Preset + Excel Column Mapping), 7 backend modules
(parser, import API, matching, creation, mapping resolver, create &
reconcile, migrations), 3 JS files, and a Generic Excel preset fixture.

Two hidden Dynamic Link custom fields on Bank Account
(bank_integration_type / bank_integration) point to either the new
Bank Integration record or the existing Kapital Bank Settings, letting
the universal Create & Reconcile in BRT read mappings from either source
through one resolver. Both apps now share an "Import From..." dropdown
on Bank Transaction list.

Plan and rationale: BANK_INTEGRATION_PLAN.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:23:44 +00:00
Ali cae1de7682 feat(landed-cost-voucher): item-driven taxes table with vendor invoice import
Replaces the free-text description in Landed Cost Taxes and Charges with a
service-item link, drives expense_account from a new Item.default_landed_cost_account,
adds an in-form "Get Items from Vendor Invoices" button, and validates totals
against vendor invoices on submit. Also fixes ERPNext's no-op items_remove
(its `this.trigger` call hits a non-existent method) so applicable_charges
recalculate correctly when rows are deleted from items or taxes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 16:01:41 +00:00
Ali 91268cc466 feat(default-data): auto-sync leave types and company defaults on migrate
Mirrors the salary-component pattern for two more pieces of master data:

- sync_leave_types(): full upsert from default_data/leave_types.json.
  Creates missing, updates existing, deletes those no longer in JSON.
  Leave Type has no `disabled` field, so when a deletion fails due to
  linked Leave Allocation/Application records, the sync logs and skips
  (vs. marking disabled like Salary Component does).

- sync_company_defaults(): for every Company, resolves each account_number
  in default_data/company_defaults.json to the company-scoped Account
  name and sets the corresponding Company field. Non-destructive: if
  the company has no account with that number, the field is left as-is.

Both hooked into after_migrate_combined after sync_salary_components,
since Leave Type's earning_component references a Salary Component.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 12:55:27 +00:00
Ali eef0c82032 chore(default-data): refresh salary components and leave types from accountant
Updated bookkeeper-supplied master data:
- leave_types.json: leave types restructured per AZ Labor Code articles
  (Maddə 95, 130.e, 143.1.4, …) — names now reference statute, flags
  adjusted accordingly.
- salary_components.json: "Keyfiim bonusu" renamed to "Premiya";
  obsolete disabled components removed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 12:48:15 +00:00
Ali 408bacfc84 feat(salary-components): auto-sync from default_data on migrate
Adds sync_salary_components() — full upsert from default_data JSON:
creates missing components, updates existing ones (formula, condition,
flags, accounts), and deletes those no longer in the JSON. If a
component cannot be deleted due to linked records, it is marked
disabled instead. Idempotent and safe to re-run.

Hooked into after_migrate_combined so every "bench migrate" picks up
the latest formulas — single source of truth is the JSON file.

Replaced default_data/salary_components.json with the current
production export (14 components, formulas use the f(base) + g(LE)
pattern for separate ƏH/MK accounting).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 12:45:11 +00:00
Ali 3aa4e61a1d perf: idempotent bulk update for custom fields on migrate
Replace per-field delete+create loop (which forced ALTER TABLE on all 222
custom fields every migrate) with idempotent bulk update that only writes
when a field's definition actually changed. Saves with ignore_version=True
to bypass the Frappe Version diff bug that crashes on certain int values.

Also remove the top-level create_custom_fields() call so the function only
runs from after_migrate, not on every module import.

Optional JEY_ERP_FORCE_RECREATE_FIELDS=1 env var preserves the old
delete+create path for development.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 10:55:21 +00:00
Ali 511e91cbf1 new translations 2026-04-24 20:29:53 +00:00
Ali 5d1e2adee3 feat(company): add E-Taxes reference sections to Tax Policy tab
Adds six new collapsible sections at the very end of the Tax Policy
tab on Company form, each with an HTML field for a reference-data
table rendered by invoice_az/client/company.js:
- E-Taxes Objects
- Cash Registers
- POS Terminals
- Bank Accounts
- Obligation Pacts
- Presented Certificates

Tax Closing Wizards moved to the bottom (insert_after changed from
accounting_method to presented_certificates_list_html) so wizards
sit under the new sections.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 13:59:41 +00:00
Ali cf4d66c2d2 feat: add Tax Free tab to Salary Slip with Tax Free Indicator DocType
Adds a Tax Free tab to Salary Slip with 4 nested sub-tabs (Vergi, MDSS,
İşsizlik sığorta, İcbari Tibbi Sığorta) rendered via the custom_subtabs
app. Each sub-tab has a Göstəricilər (Link to Tax Free Indicator, filtered
by group) and an Amount (Currency) field arranged in two columns.

Introduces a new Tax Free Indicator tree DocType mirroring the tax_article
pattern from taxes_az, seeded via fixtures with 74 indicators scraped from
the e-taxes.gov.az unified declaration (32 Vergi + 30 MDSS + 5 İşsizlik
+ 7 İcbari Tibbi Sığorta) grouped under 4 roots.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:06:04 +00:00
Ali 72f9973000 feat: also rename default groups after setup wizard completion
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 15:33:23 +04:00
Ali 5ea710d77c feat: rename default Item/Supplier Groups to Azerbaijani
Add rename_default_groups.py that uses frappe.rename_doc to rename
standard ERPNext groups (Products -> Məhsullar, etc.) instead of
modifying ERPNext source files directly. Runs on after_migrate.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 15:30:00 +04:00
Ali 09af27e22b added new fields 2026-04-02 20:36:50 +04:00
Ali a9d18c05db fix Link field dropdown not opening on focus when value is already set
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 19:34:44 +04:00
Ali aa9d5640c0 remove broken account_tree_custom.js, fix COA balance offset
Removed account_tree_custom.js which caused console errors due to
accessing undefined treeview fields. Export functionality is already
available via account_list.js.

Added CSS fix for Chart of Accounts tree view where account balances
were visually shifted down by one row due to float:right on balance-area.
Fix uses flexbox on tree nodes instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:04:35 +04:00
Ali fa1efba44d renewed company_defaults 2026-03-26 17:44:45 +04:00
Ali ad1f6783b5 use account_number instead of account_name for company defaults export/import
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 17:35:31 +04:00
Ali ac7a3fe42e move Company Export Defaults button from list to form view
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 17:23:37 +04:00
Ali ee421cf613 add Company default accounts export/import
- Export: company_export.py exports all Link-to-Account fields as account_name
- Import: create_default_company_accounts() resolves account names to full accounts in new company, applied via setup_wizard_complete
- JS: Export Defaults button in Company list view downloads company_defaults.json
- default_data/company_defaults.json: initial defaults

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 17:10:46 +04:00
Ali ea5847b353 fix NameError: restore company variable in create_default_salary_components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 16:41:41 +04:00
Ali 6b3324704c update default salary components data with accounts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 16:36:48 +04:00
Ali fae51ca7ef export SC accounts as account_name, resolve to full account on import
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 16:31:24 +04:00
Ali 0699beb3ba fix SC accounts validation error; delete default HRMS leave types on setup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 16:26:18 +04:00
Ali b91ff07f56 add default leave types data
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 16:16:21 +04:00
Ali 4c2eb7e400 add Leave Type export button and default setup from JSON
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 16:04:06 +04:00
Ali dc273b3f2b fix IBAN masking: support alphanumeric chars, keep AZ prefix
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 15:43:16 +04:00
Ali df9f72be11 add Chart of Accounts export button to list and tree views
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 15:24:00 +04:00
Ali 989cce52b4 delete default HRMS salary components on setup wizard complete
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 15:03:42 +04:00
Ali 6f17b644f2 update default salary components data
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 14:53:18 +04:00
Ali 7cd7b5d887 add salary component export button and default setup from JSON
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 14:46:40 +04:00
Ali 116efda4f2 add test setup_wizard_complete hook that creates TEST COMP salary component
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 14:27:41 +04:00
Ali 24934219f1 added test salary component create 2026-03-26 14:19:38 +04:00
Ali b8b111b74a hide residence_permit_fin when not_available checkbox is checked
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 13:55:44 +04:00
Ali 0a0ef3d032 add Employee custom fields: citizenship_country, residence_permit_fin, residence_permit_not_available
Fields added as Small Text (TEXT in MySQL) to bypass tabEmployee's 65535-byte
row size limit. Added two pre_model_sync patches to fix row format and add
columns directly before Frappe schema sync runs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 20:56:34 +04:00
Ali f7d283cdf1 add job_applicant custom field to Employee to fix EmployeeMaster AttributeError
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 20:08:54 +04:00
Ali 1c292a130f add Employee custom fields: father_name, identification_number, ssn
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 18:45:45 +04:00
Ali 2c7eadc1cd add absent_reason field to Attendance doctype
Adds a Select field 'Absence Reason' visible only when status is Absent,
with 12 predefined Azerbaijani-language absence reason options.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 17:24:40 +04:00
Ali a66945f7d7 added load from cbar currency import 2026-03-12 18:53:47 +04:00
Ali eb62cafbcf brt is now wide and has a bt links 2026-03-11 15:33:33 +04:00
Ali 67518bf4a0 added tittles to je 2026-03-06 23:45:56 +04:00
Ali 0eaa407c1d revert all JE title changes, keep only deductions logic
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 23:34:44 +04:00
Ali 378ccd33ee added tittles to je 2026-03-06 23:24:12 +04:00
Ali f76b09116b added tittles to je 2026-03-06 23:18:50 +04:00
Ali a7deb77e09 added tittles to je 2026-03-06 23:12:53 +04:00
Ali d9c3b02fdc added tittles to je 2026-03-06 23:06:06 +04:00
Ali 4a15e83498 added tittles to je 2026-03-06 22:56:24 +04:00
Ali f300eb3083 added deductions in generated je from payroll entry 2026-03-06 17:22:49 +04:00
Ali d7818af6b0 added deductions in generated je from payroll entry 2026-03-06 17:15:44 +04:00
Ali aaf08e8dc8 added ctc fetch to bulk salary assignment 2026-03-06 16:19:17 +04:00
Ali e02cc9ba06 added ctc fetch to bulk salary assignment 2026-03-06 16:13:24 +04:00
Ali fe8667be50 new vat allocation fields 2026-02-24 15:02:46 +04:00