Commit Graph

358 Commits

Author SHA1 Message Date
Jatin3128
58491723e7 feat(accounts): add Bank Charges account for Payment Entry deductions (#57840)
* feat(accounts): add Bank Charges account for Payment Entry deductions

Add an optional Bank Charges Account field on Company. When a Payment
Entry has a difference between the paid and received amount (e.g. a
same-currency Internal Transfer where the bank deducted a fee), that
amount now books to the Bank Charges account in the deductions table
instead of always going to the Exchange Gain/Loss account. Left blank,
behavior is unchanged.

Mirrors the resolution on both the server (set_exchange_gain_loss) and
client (set_exchange_gain_loss_deduction) so the deduction row is
pre-filled consistently before and after save. A user's manual account
edit on an existing deduction row is preserved across recalculation,
same as before this change.

* fix(accounts): only route Payment Entry difference to Bank Charges for same-currency transfers

Cross-currency Payment Entries were also matching the unconditional
bank_charges_account precedence, misrouting a genuine exchange
gain/loss into the Bank Charges account. Only prefer Bank Charges
Account when paid_from and paid_to share a currency; cross-currency
differences continue to book to Exchange Gain/Loss Account.

* test(payment_entry): assert against actual exchange gain/loss account, not a hardcoded name

CI failed: _Test Company's exchange_gain_loss_account is auto-provisioned
as "Exchange Gain/Loss - _TC" by the standard chart of accounts, not the
"_Test Exchange Gain/Loss - _TC" account used only by a sibling test.

* fix(accounts): auto-set Bank Charges Account from chart of accounts default

The standard chart of accounts already ships a "Bank Charges" ledger
account, but set_default_accounts() never picked it up into the
Company's bank_charges_account field, unlike its write_off_account and
exchange_gain_loss_account siblings. New and existing companies now
get it auto-populated the same way.

---------

Co-authored-by: test <test@test.com>
2026-08-11 15:47:51 +05:30
Mihir Kandoi
ce2e7fb7ee refactor(startup): convert boot_session raw SQL to ORM (Postgres-valid)
boot_session used raw `frappe.db.sql`, including a MySQL-only
`ifnull(account_type, '')` over Party Type that is invalid on Postgres.

- customer_count: `SELECT count(*)` → `frappe.db.count`
- setup_complete: `SELECT name ... LIMIT 1` → `frappe.db.get_all(limit=1)`
- companies: raw select → `frappe.get_all`, preserving the `:Company`
  virtual-doc marker
- party_account_types: `ifnull(account_type,'')` → `frappe.get_all` with a
  Python `account_type or ""`, which collapses NULL→'' and ''→''
  identically on both engines (handles Postgres storing '' as NULL)

Adds a test (no test file existed) that runs boot_session and asserts the
company list and party_account_types are populated, on both engines.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 05:03:47 +05:30
Mihir Kandoi
52d7f56922 refactor(setup): make Authorization Control Postgres-valid (ifnull→coalesce, raw SQL→qb)
authorization_control.py used MySQL-only `ifnull()` in its raw rule
lookups (invalid on Postgres) and several raw `frappe.db.sql` selects.

- Replace every `ifnull(...)` with the portable `coalesce(...)` in the
  rule-lookup statements that remain raw (they interpolate dynamic
  conditions and rely on Frappe's Postgres backtick translation).
- Convert the user/role based_on lookups in validate_approving_authority
  and the four value-based lookups in get_value_based_rule to frappe.qb
  (Coalesce, isin, and a fresh Employee-designation subquery per use).

Behaviour is unchanged on MariaDB; the queries now run on Postgres.

Adds a test (no test file existed): a not-authorized case that exercises
the based_on + coalesce rule lookups (run as a non-admin user, since
Administrator implicitly holds every role), and a get_value_based_rule
call that exercises all four query-builder lookups.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 04:55:59 +05:30
Khushi Rawat
23b5afc5de Merge pull request #54946 from Shllokkk/letter-head-fix
feat(company): add a default_letter_head_report field in company doctype
2026-05-21 20:05:56 +05:30
Nabin Hait
6114293b92 chore: remove leaderboard dead code (#55030) 2026-05-19 21:07:52 +05:30
Shllokkk
63daba9715 feat(company): add a default_letter_head_report field in company doctype 2026-05-14 20:13:23 +05:30
ruthra kumar
940d3cfe0a refactor: limit reposting to only supported doctypes 2026-04-16 11:35:23 +05:30
diptanilsaha
11a6db32ae refactor(leaderboard): type annotations for whitelisted methods 2026-03-07 15:00:34 +05:30
Sowmya
f8f82ccf31 Merge pull request #51458 from aerele/default-age-range
feat: add default-age-range in accounts settings
2026-01-06 11:07:28 +05:30
ravibharathi656
8e54be7808 fix(payment entry): fetch gain loss account from company boot 2025-12-11 16:20:10 +05:30
Akhil Narang
1cf9f903e5 fix: adapt to query builder
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2025-11-19 21:36:37 +05:30
El-Shafei H.
83d575206b feat: cache employee name in session data on boot 2025-10-09 08:25:58 +03:00
El-Shafei H.
5d0958c5b1 feat: Cache employee name in session data on boot 2025-10-08 09:51:13 +03:00
El-Shafei H.
1d7a8dda26 Merge branch 'frappe:develop' into add-employee-name-to-session-user 2025-10-08 09:49:56 +03:00
ruthra kumar
9391c8911c refactor: rename reactivity checkbox 2025-09-24 16:24:03 +05:30
El-Shafei H.
4b7cb6bfad feat: add employee name to session user 2025-09-08 13:46:52 +03:00
Ankush Menat
765c7c2bcc refactor: rename get_settings -> get_single_value (#47961) 2025-06-09 04:40:02 +00:00
Ankush Menat
73746e2c71 perf: use cached selling settings (#47949)
* perf: Use cached stock repost settings

* perf: Use cached selling settings
2025-06-06 14:10:12 +00:00
Ankush Menat
45a4beb401 perf: Use cached accounts settings (#47947) 2025-06-06 13:59:18 +00:00
Diptanil Saha
3965e2f3de fix: fiscal year error on new setup and continuous request (#47431)
fix: fiscal year error on new setup
2025-05-12 14:06:03 +05:30
ruthra kumar
6ea9c0c48d refactor: pass config through boot 2024-12-10 17:48:13 +05:30
David Arnold
f1bd6e492a chore: use local deprecation (#44306) 2024-11-23 22:25:12 +00:00
David
41e395a7e3 fix: hot path in page load 2024-08-01 23:23:48 +02:00
Akhil Narang
3effaf21ef refactor(treewide): formatting and ruff fixes, + manually enabled F401
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-03-27 16:06:04 +05:30
Ankush Menat
b897225136 fix: Remove reference to non-existing doctype 2024-01-09 22:04:24 +05:30
Ankush Menat
bb18ae82cf refactor: use db.get_single_value 2024-01-09 21:57:50 +05:30
barredterra
956c3c50a0 chore: deprecate unused method 2023-12-11 19:46:37 +01:00
barredterra
40c1acc961 fix: get sales partner for leaderboard 2023-12-11 19:45:32 +01:00
barredterra
7babfd4ac4 fix: get sales person for leaderboard 2023-12-11 19:44:24 +01:00
barredterra
65df4b6aa8 fix: get suppliers for leaderboard 2023-12-11 19:34:54 +01:00
barredterra
2721ee3a8d fix: get items for leaderboard 2023-12-11 19:34:24 +01:00
barredterra
137b5a6108 fix: get customers for leaderboard 2023-12-11 18:32:49 +01:00
Ankush Menat
6a47a2ceaf chore: remove unused cache=True 2023-12-06 20:53:55 +05:30
Richard Case
525f656cc1 feat: add employee number to client user bootinfo (#38477) 2023-12-06 20:48:13 +05:30
Deepesh Garg
371413a078 fix: Button to clear demo data 2023-07-29 22:39:07 +05:30
Raffael Meyer
870b02b03c fix: allow over-payment against SO (#35079) 2023-05-14 08:59:58 +05:30
Deepesh Garg
148703bfc2 feat: Setting to allow Sales Order creation against expired quotation (#33952)
* feat: Setting to allow Sales Order creation against expired quotation

* chore: linting issues
2023-02-13 10:27:55 +05:30
Ankush Menat
50e9698932 chore: drop dead code (#32595)
[skip ci]
2022-10-13 15:25:22 +05:30
Ankush Menat
90942d2ba5 chore: remove currency info from boot (#31520)
refactor: remove currency info from boot

Framework loads this info by default now, so no need to add it here.
2022-07-05 11:22:32 +05:30
Ankush Menat
494bd9ef78 style: format code with black 2022-03-28 18:52:46 +05:30
Anupam Kumar
3928a402d4 feat: CRM Settings (#27788)
* feat: crm settings

* feat: CRM Settings

* feat: lead and opprtunity section

* feat: added CRM Settings in ERPNext Settings workspace

* fix: review chnages

* added patch

* fix: linter issues

* fix: linter issues

* fix: linter issues

* fix: removed crm settings from selling module

* fix: raw query to frappe.qb

* fix: removed hardcoded value

* fix: linter issue

* fix: simplify CRM Settings migration patch

Co-authored-by: Anupam Kumar <anupam@Anupams-MacBook-Air.local>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-12-06 13:52:00 +05:30
Ankush Menat
8fe5feb6a4 chore: remove all six compat code 2021-11-05 11:16:29 +05:30
Ankush Menat
6098e92ba9 chore: remove utf-8 compat code 2021-11-05 11:16:29 +05:30
Chillar Anand
915b34391c chore: Clean up imports (#27302)
* chore: Added isort to pre-commit config

* chore: Sort imports with isort

* chore: Clean up imports with pycln

* chore: Sort imports with isort

* chore: Fix import issues

* chore: Clean up sider issues

* chore: Remove import errors from flake8 ignore list

* chore: Clean up lint issues
2021-09-02 16:44:59 +05:30
Ankush Menat
4551d7d602 chore: mass trailing whitespace and EOF fixes 2021-08-19 13:43:28 +05:30
prssanna
b57b3c9f6c feat: hook to fetch additional print settings in print view 2020-10-22 15:37:47 +05:30
prssanna
12d4be7f3f feat: icons in leaderboard 2020-10-16 11:31:47 +05:30
marination
2a56000460 fix: Supplier Leaderboard fix 2020-09-03 19:45:04 +05:30
Prssanna Desai
fb89906354 fix: pass date range instead of from date (#22114)
* fix: pass date range instead of from date

* fix: escape inputs

Co-authored-by: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com>
2020-07-22 20:17:50 +05:30
Prssanna Desai
82ddef58c0 feat: date filter for fiscal year (#21880)
* feat: date filter for fiscal year

* fix: rename fieldtypes to valid_for_fieldtypes

* Update utils.py

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2020-06-18 18:18:41 +05:30