Compare commits

...

1130 Commits

Author SHA1 Message Date
Frappe PR Bot
4b8b3ee46a chore(release): Bumped to Version 15.30.0
# [15.30.0](https://github.com/frappe/erpnext/compare/v15.29.4...v15.30.0) (2024-07-17)

### Bug Fixes

* address and contact filters for SCO and SCR (backport [#42310](https://github.com/frappe/erpnext/issues/42310)) ([#42312](https://github.com/frappe/erpnext/issues/42312)) ([cb64c73](cb64c73c9e))
* bin deadlock issue (backport [#42342](https://github.com/frappe/erpnext/issues/42342)) ([#42357](https://github.com/frappe/erpnext/issues/42357)) ([29ee2d4](29ee2d46f0))
* cost center filter by company (backport [#42297](https://github.com/frappe/erpnext/issues/42297)) ([#42299](https://github.com/frappe/erpnext/issues/42299)) ([4c9ce1b](4c9ce1b188))
* extra qty pick in pick list (backport [#42345](https://github.com/frappe/erpnext/issues/42345)) ([#42349](https://github.com/frappe/erpnext/issues/42349)) ([1754adf](1754adfcd6))
* **gross profit:** incorrect valuation rate on different warehouses ([f161e59](f161e59cd7))
* incoming rate zero for supplied items in returned SCR (backport [#42314](https://github.com/frappe/erpnext/issues/42314)) ([#42315](https://github.com/frappe/erpnext/issues/42315)) ([076bf17](076bf17439))
* items not fetching in End Transit entry (backport [#42358](https://github.com/frappe/erpnext/issues/42358)) ([#42361](https://github.com/frappe/erpnext/issues/42361)) ([b5a2e5a](b5a2e5a375))
* keep status as In Progress for RIV for Timeout Error (backport [#42274](https://github.com/frappe/erpnext/issues/42274)) ([#42296](https://github.com/frappe/erpnext/issues/42296)) ([1de66e5](1de66e56ee))
* missing discount on POS Credit Notes ([4055ef9](4055ef92b5))
* not able to cancel the inter transfer DN (backport [#42333](https://github.com/frappe/erpnext/issues/42333)) ([#42340](https://github.com/frappe/erpnext/issues/42340)) ([cf2651d](cf2651dd85))
* not able to submit LCV entry (backport [#42303](https://github.com/frappe/erpnext/issues/42303)) ([#42304](https://github.com/frappe/erpnext/issues/42304)) ([6d098b7](6d098b7302))
* remove doctype link from serial no ledger report (backport [#42327](https://github.com/frappe/erpnext/issues/42327)) ([#42348](https://github.com/frappe/erpnext/issues/42348)) ([b741b2a](b741b2a285))
* removed patch from patches.txt ([c45d11c](c45d11cd60))
* same posting date and time causing incorrect valuation rate (backport [#42351](https://github.com/frappe/erpnext/issues/42351)) ([#42356](https://github.com/frappe/erpnext/issues/42356)) ([62fc428](62fc42803f))
* service item capitalization ([#42188](https://github.com/frappe/erpnext/issues/42188)) ([2ffe7d5](2ffe7d5838))
* show total rows credit row in balance sheet ([0d2ef0d](0d2ef0df7d))
* slowness in reposting dependent vouchers. (backport [#42282](https://github.com/frappe/erpnext/issues/42282)) ([#42292](https://github.com/frappe/erpnext/issues/42292)) ([ef16313](ef16313e0a))
* **Warehouse:** add buttons only if the user can use them ([a2b21c7](a2b21c7570))
* While submitting PCV ensure previous FY is closed (backport [#42284](https://github.com/frappe/erpnext/issues/42284)) ([#42300](https://github.com/frappe/erpnext/issues/42300)) ([e250dcc](e250dcc7c8))

### Features

* configurable depreciation calculation via accounts settings ([#42276](https://github.com/frappe/erpnext/issues/42276)) ([ddd1ca7](ddd1ca7f7c))
* create variant with/without image (backport [#41317](https://github.com/frappe/erpnext/issues/41317)) ([#42343](https://github.com/frappe/erpnext/issues/42343)) ([5f1d6ed](5f1d6ede31))
2024-07-17 05:19:44 +00:00
ruthra kumar
85aca0ef55 Merge pull request #42354 from frappe/version-15-hotfix
chore: release v15
2024-07-17 10:48:30 +05:30
Khushi Rawat
55dc157694 Merge pull request #42360 from frappe/mergify/bp/version-15-hotfix/pr-42188
fix: service item capitalization (backport #42188)
2024-07-17 01:51:54 +05:30
Khushi Rawat
c45d11cd60 fix: removed patch from patches.txt 2024-07-17 01:35:03 +05:30
Khushi Rawat
cfab956811 chore: resolved conflicts 2024-07-16 22:46:54 +05:30
Smit Vora
d1ba12f581 Merge pull request #42362 from frappe/mergify/bp/version-15-hotfix/pr-42352
fix: show total rows credit row in balance sheet (backport #42352)
2024-07-16 19:52:39 +05:30
ljain112
0d2ef0df7d fix: show total rows credit row in balance sheet
(cherry picked from commit 327b19cba6)
2024-07-16 13:58:37 +00:00
mergify[bot]
b5a2e5a375 fix: items not fetching in End Transit entry (backport #42358) (#42361)
fix: items not fetching in End Transit entry (#42358)

(cherry picked from commit 001e5b612b)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-16 18:45:18 +05:30
Khushi Rawat
2ffe7d5838 fix: service item capitalization (#42188)
* feat: capitalize with service expenses only

* chore: added test

* refactor: removed Capitalized In field from asset doc

(cherry picked from commit 81e0b96c30)

# Conflicts:
#	erpnext/assets/doctype/asset/asset.py
2024-07-16 12:16:47 +00:00
mergify[bot]
62fc42803f fix: same posting date and time causing incorrect valuation rate (backport #42351) (#42356)
fix: same posting date and time causing incorrect valuation rate (#42351)

(cherry picked from commit 85d2d34116)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-16 16:30:24 +05:30
mergify[bot]
29ee2d46f0 fix: bin deadlock issue (backport #42342) (#42357)
fix: bin deadlock issue (#42342)

(cherry picked from commit 21df38bf18)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-16 16:30:11 +05:30
mergify[bot]
b741b2a285 fix: remove doctype link from serial no ledger report (backport #42327) (#42348)
fix: remove doctype link from serial no ledger report (#42327)

* fix: remove doctype link from serial no ledger report

* fix: remove doctype link from serial no ledger report

* fix: remove doctype link from serial no ledger report --update

(cherry picked from commit 17b437709c)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-07-16 16:08:11 +05:30
mergify[bot]
1754adfcd6 fix: extra qty pick in pick list (backport #42345) (#42349)
fix: extra qty pick in pick list (#42345)

(cherry picked from commit 6a50b40976)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-16 15:46:44 +05:30
mergify[bot]
5f1d6ede31 feat: create variant with/without image (backport #41317) (#42343)
feat: create variant with/without image (#41317)

* feat: create variant with/without image

* feat: create variant with/without image

* feat: create variant with/without image

* feat: create variant with/without image

* feat: create variant with/without image

* feat: create variant with/without image

* fix: change the variable name use_same_image to use_template_image

(cherry picked from commit 66b35ec9fb)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-07-15 22:58:30 +05:30
mergify[bot]
cf2651dd85 fix: not able to cancel the inter transfer DN (backport #42333) (#42340)
fix: not able to cancel the inter transfer DN (#42333)

(cherry picked from commit 6d42cd0f4c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-15 16:52:28 +05:30
ruthra kumar
29158652db Merge pull request #42338 from frappe/mergify/bp/version-15-hotfix/pr-42294
refactor: make reposting implicit (backport #42294)
2024-07-15 15:37:00 +05:30
ruthra kumar
4968395372 chore: contextual comments
(cherry picked from commit 794a62aecb)
2024-07-15 09:41:57 +00:00
ruthra kumar
8e70aeae4a refactor(test): reposting happens implicitly
(cherry picked from commit c283cda169)
2024-07-15 09:41:57 +00:00
ruthra kumar
4ac174703c refactor(test): no need to assert repost_required flag
Reposting happens implicitly upon 'Update After Submit'

(cherry picked from commit 8f135e9859)
2024-07-15 09:41:57 +00:00
ruthra kumar
804f1d4772 refactor: make reposting implicit
(cherry picked from commit 722ef92324)
2024-07-15 09:41:56 +00:00
ruthra kumar
609a0b81ae Merge pull request #42336 from frappe/mergify/bp/version-15-hotfix/pr-42330
fix: incorrect valuation rate for items from different warehouses in Gross Profit (backport #42330)
2024-07-15 15:11:47 +05:30
ruthra kumar
cc09d0d218 chore: resolve conflict 2024-07-15 14:34:30 +05:30
ruthra kumar
43eec001ee test(gross profit): valuation rate from different warehouse
(cherry picked from commit 577ce5ccd4)

# Conflicts:
#	erpnext/accounts/report/gross_profit/test_gross_profit.py
2024-07-15 08:50:15 +00:00
ruthra kumar
f161e59cd7 fix(gross profit): incorrect valuation rate on different warehouses
(cherry picked from commit f9d2dd0a62)
2024-07-15 08:50:15 +00:00
mergify[bot]
076bf17439 fix: incoming rate zero for supplied items in returned SCR (backport #42314) (#42315)
fix: incoming rate zero for supplied items in returned SCR (#42314)

(cherry picked from commit 61daa318fe)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-15 13:28:06 +05:30
mergify[bot]
cb64c73c9e fix: address and contact filters for SCO and SCR (backport #42310) (#42312)
fix: address and contact filters for SCO and SCR (#42310)

(cherry picked from commit 7656220075)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-13 15:59:46 +05:30
Nabin Hait
ce8b423ad6 chore: release v15 (#42308)
* fix(Warehouse): add buttons only if the user can use them

(cherry picked from commit 10ae5aaf52)

* fix: missing discount on POS Credit Notes

(cherry picked from commit 1049550951)

* chore: rename test suite for payable report

(cherry picked from commit 9474f72776)

* refactor: test suite for item-wise sales register

(cherry picked from commit 3aaa22e672)

* refactor(test): use each instance UOM for assertion

(cherry picked from commit cf4fbfb601)

* fix: slowness in reposting dependent vouchers. (backport #42282) (#42292)

fix: slowness in reposting dependent vouchers. (#42282)

(cherry picked from commit b17696a8ae)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* refactor(test): clear old records

* fix: keep status as In Progress for RIV for Timeout Error (backport #42274) (#42296)

fix: keep status as In Progress for RIV for Timeout Error (#42274)

(cherry picked from commit 10280d6140)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* fix: cost center filter by company (backport #42297) (#42299)

fix: cost center filter by company (#42297)

(cherry picked from commit 9838f7e6ba)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* feat: configurable depreciation calculation via accounts settings (#42276)

* feat: configurable depreciation calculation via accounts settings

* refactor: code optimization

* style: changes in description and label

(cherry picked from commit b04da63aad)

* fix: not able to submit LCV entry (backport #42303) (#42304)

fix: not able to submit LCV entry (#42303)

(cherry picked from commit 9cf92eaeab)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* fix: While submitting PCV ensure previous FY is closed (backport #42284) (#42300)

fix: While submitting PCV ensure previous FY is closed (#42284)

(cherry picked from commit d0bbc8ca70)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>

---------

Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
Co-authored-by: ruthra kumar <ruthra@erpnext.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-07-12 20:47:27 +05:30
mergify[bot]
e250dcc7c8 fix: While submitting PCV ensure previous FY is closed (backport #42284) (#42300)
fix: While submitting PCV ensure previous FY is closed (#42284)

(cherry picked from commit d0bbc8ca70)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-07-12 20:05:03 +05:30
Khushi Rawat
ad228d80d5 Merge pull request #42301 from frappe/mergify/bp/version-15-hotfix/pr-42276
feat: configurable depreciation calculation via accounts settings (backport #42276)
2024-07-12 18:32:37 +05:30
mergify[bot]
6d098b7302 fix: not able to submit LCV entry (backport #42303) (#42304)
fix: not able to submit LCV entry (#42303)

(cherry picked from commit 9cf92eaeab)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-12 17:27:18 +05:30
Khushi Rawat
ddd1ca7f7c feat: configurable depreciation calculation via accounts settings (#42276)
* feat: configurable depreciation calculation via accounts settings

* refactor: code optimization

* style: changes in description and label

(cherry picked from commit b04da63aad)
2024-07-12 08:57:11 +00:00
mergify[bot]
4c9ce1b188 fix: cost center filter by company (backport #42297) (#42299)
fix: cost center filter by company (#42297)

(cherry picked from commit 9838f7e6ba)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-12 13:40:16 +05:30
mergify[bot]
1de66e56ee fix: keep status as In Progress for RIV for Timeout Error (backport #42274) (#42296)
fix: keep status as In Progress for RIV for Timeout Error (#42274)

(cherry picked from commit 10280d6140)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-12 12:14:55 +05:30
ruthra kumar
5e3810b12a Merge pull request #42291 from frappe/mergify/bp/version-15-hotfix/pr-42192
refactor: tests for item wise sales register report (backport #42192)
2024-07-12 09:28:08 +05:30
ruthra kumar
84a8bb3ce5 refactor(test): clear old records 2024-07-11 21:04:34 +05:30
mergify[bot]
ef16313e0a fix: slowness in reposting dependent vouchers. (backport #42282) (#42292)
fix: slowness in reposting dependent vouchers. (#42282)

(cherry picked from commit b17696a8ae)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-11 19:24:09 +05:30
ruthra kumar
61852bd3f6 refactor(test): use each instance UOM for assertion
(cherry picked from commit cf4fbfb601)
2024-07-11 12:34:12 +00:00
ruthra kumar
cd79d33db2 refactor: test suite for item-wise sales register
(cherry picked from commit 3aaa22e672)
2024-07-11 12:34:12 +00:00
ruthra kumar
4f7e0d2955 chore: rename test suite for payable report
(cherry picked from commit 9474f72776)
2024-07-11 12:34:12 +00:00
ruthra kumar
e07bdcee79 Merge pull request #42289 from frappe/mergify/bp/version-15-hotfix/pr-42287
fix: missing discount on POS Credit Notes (backport #42287)
2024-07-11 17:36:02 +05:30
ruthra kumar
4055ef92b5 fix: missing discount on POS Credit Notes
(cherry picked from commit 1049550951)
2024-07-11 11:59:38 +00:00
Raffael Meyer
2751a9a38c Merge pull request #42273 from frappe/mergify/bp/version-15-hotfix/pr-42232
fix(Warehouse): add buttons only if the user can use them (backport #42232)
2024-07-10 15:26:25 +02:00
barredterra
a2b21c7570 fix(Warehouse): add buttons only if the user can use them
(cherry picked from commit 10ae5aaf52)
2024-07-10 11:15:49 +00:00
Frappe PR Bot
f975333970 chore(release): Bumped to Version 15.29.3
## [15.29.3](https://github.com/frappe/erpnext/compare/v15.29.2...v15.29.3) (2024-07-10)

### Bug Fixes

* actual qty in sales order (backport [#42248](https://github.com/frappe/erpnext/issues/42248)) ([#42256](https://github.com/frappe/erpnext/issues/42256)) ([4866958](4866958a96))
* add missing german translations ([2f89461](2f89461ace))
* added filter to show only submitted assets ([19ed6d1](19ed6d1081))
* auto serial and batch bundle not creating for Asset Capitalization (backport [#42231](https://github.com/frappe/erpnext/issues/42231)) ([#42242](https://github.com/frappe/erpnext/issues/42242)) ([7916d64](7916d6436f))
* Billed Qty and Qty to Bill Calculation in Purchase Order Analysis (backport [#42100](https://github.com/frappe/erpnext/issues/42100)) ([#42249](https://github.com/frappe/erpnext/issues/42249)) ([43c7513](43c7513cfe))
* BOM Creator Recursion Error on duplicate save (backport [#41622](https://github.com/frappe/erpnext/issues/41622)) ([#42179](https://github.com/frappe/erpnext/issues/42179)) ([68a39df](68a39dfa33))
* changes as per review ([57896a8](57896a8f99))
* completed DC will not appear in a delivery trip ([0bab609](0bab609a6f))
* completed DC will not appear in a delivery trip ([#41655](https://github.com/frappe/erpnext/issues/41655)) ([a3444a0](a3444a07b7))
* corrected mismatch in the Purchase Receipt Status [#15620](https://github.com/frappe/erpnext/issues/15620) (backport [#42138](https://github.com/frappe/erpnext/issues/42138)) ([#42252](https://github.com/frappe/erpnext/issues/42252)) ([e1b50ef](e1b50efeea))
* correcting balance sheet calculation for zero liabilities and equity ([d48a2c9](d48a2c9f8e))
* correcting balance sheet calculation for zero liabilities and equity ([#41497](https://github.com/frappe/erpnext/issues/41497)) ([2104d90](2104d903aa))
* custom delimiters ([43ad2fe](43ad2fed63))
* download_import_log if rows are greater than 5000 ([4eb251b](4eb251b59a))
* empty item-wise sales/purchase register reports on initial load ([5ac3b34](5ac3b34a6f))
* field position ([a04938d](a04938d5ae))
* group by in item-wise purchase register ([a967d59](a967d59844))
* **Holiday List:** sort holidays on save to avoid disorienting the user (backport [#42236](https://github.com/frappe/erpnext/issues/42236)) ([#42250](https://github.com/frappe/erpnext/issues/42250)) ([b555615](b5556156c1))
* import log preview ([62aac8b](62aac8bb85))
* import status ([71311ff](71311ffd62))
* **Inventory Dimension:** reduce perms for Stock User (backport [#42226](https://github.com/frappe/erpnext/issues/42226)) ([#42243](https://github.com/frappe/erpnext/issues/42243)) ([3cc59e4](3cc59e4a7a))
* manual pick allow to pick more than available stock (backport [#42155](https://github.com/frappe/erpnext/issues/42155)) ([#42159](https://github.com/frappe/erpnext/issues/42159)) ([a7b6530](a7b6530fde))
* Multiple fixes for General Ledger Report ([ca57fd4](ca57fd4255))
* multiple free items on same Item Group ([9352863](93528631c3))
* path of automatically updates the status of asset maintenance log ([5317418](5317418a53))
* Project Status should be Open again if `percent_complete` is not 100 ([90f5c78](90f5c78607))
* provision to enable do not use batch-wise valuation (backport [#42186](https://github.com/frappe/erpnext/issues/42186)) ([#42198](https://github.com/frappe/erpnext/issues/42198)) ([ec881ac](ec881ace76))
* **Putaway Rule:** reduce perms for Stock User (backport [#42227](https://github.com/frappe/erpnext/issues/42227)) ([#42244](https://github.com/frappe/erpnext/issues/42244)) ([b78a97d](b78a97df85))
* remove deprecated field "statement_import_log" ([2f0b97d](2f0b97d91b))
* removed max discount validation for sales return ([ab987e9](ab987e9a86))
* **Stock Entry Type:** reduce perms for Stock User (backport [#42225](https://github.com/frappe/erpnext/issues/42225)) ([#42245](https://github.com/frappe/erpnext/issues/42245)) ([954d9ab](954d9ab154))
* tax on stock_rbnb on repost of Purchase Receipt ([427439c](427439c3f1))
* **tds:** use doctype reference when mapping keys across multiple doctypes ([#42258](https://github.com/frappe/erpnext/issues/42258)) ([8264e3b](8264e3bc77))
* updated logic for calculating tax_withholding_net_total in payment entry ([3fb5c7a](3fb5c7a3a6))
* use standard method to get `_doc_before_save` ([cfda5f6](cfda5f6d0b))
2024-07-10 10:44:06 +00:00
ruthra kumar
38e176160c Merge pull request #42253 from frappe/version-15-hotfix
chore: release v15
2024-07-10 16:12:52 +05:30
ruthra kumar
92bc227743 Merge pull request #42272 from frappe/mergify/bp/version-15-hotfix/pr-42247
fix: don't merge tax into stock account on purchase receipt repost (backport #42247)
2024-07-10 15:48:28 +05:30
ruthra kumar
7b4fd89658 test: tax account heads on PR report without LCV
(cherry picked from commit 9562628ed6)
2024-07-10 09:58:30 +00:00
ruthra kumar
427439c3f1 fix: tax on stock_rbnb on repost of Purchase Receipt
(cherry picked from commit 8633080dff)
2024-07-10 09:58:30 +00:00
Smit Vora
e0460f4891 Merge pull request #42266 from frappe/mergify/bp/version-15-hotfix/pr-42204
fix: Reopen Project if Completion Percentage is Below 100% (backport #42204)
2024-07-10 15:23:19 +05:30
Smit Vora
38da8afa06 Merge pull request #42265 from frappe/mergify/bp/version-15-hotfix/pr-42127
fix: removed max discount validation for sales return (backport #42127)
2024-07-10 15:23:01 +05:30
Smit Vora
afc1df00ae Merge pull request #42263 from frappe/mergify/bp/version-15-hotfix/pr-42258
fix(tds): use doctype reference when mapping keys across multiple doctypes (backport #42258)
2024-07-10 15:22:36 +05:30
DaizyModi
90f5c78607 fix: Project Status should be Open again if percent_complete is not 100
(cherry picked from commit c52fdffdaf)
2024-07-10 07:10:05 +00:00
ljain112
ab987e9a86 fix: removed max discount validation for sales return
(cherry picked from commit db807d433b)
2024-07-10 07:02:02 +00:00
Smit Vora
23053f45de chore: resolve conflicts 2024-07-10 12:26:35 +05:30
Smit Vora
8264e3bc77 fix(tds): use doctype reference when mapping keys across multiple doctypes (#42258)
* fix(tds): use doctype reference when mapping keys across multiple doctypes

* fix: changes as per review

---------

Co-authored-by: ljain112 <ljain112@gmail.com>
(cherry picked from commit 5c0d52f783)

# Conflicts:
#	erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py
2024-07-10 06:27:29 +00:00
Sagar Vora
b005d7ac52 Merge pull request #42259 from frappe/mergify/bp/version-15-hotfix/pr-42060
fix: updated logic for calculating tax_withholding_net_total in payment entry (backport #42060)
2024-07-10 11:08:53 +05:30
ljain112
3fb5c7a3a6 fix: updated logic for calculating tax_withholding_net_total in payment entry
(cherry picked from commit c8a34cde7f)
2024-07-10 05:11:35 +00:00
ruthra kumar
b9c0f3f402 Merge pull request #41741 from frappe/mergify/bp/version-15-hotfix/pr-41655
fix: completed DC will not appear in a delivery trip (backport #41655)
2024-07-10 10:33:11 +05:30
ruthra kumar
7d0d1cfd18 Merge pull request #41739 from frappe/mergify/bp/version-15-hotfix/pr-41497
fix: correcting balance sheet calculation for zero liabilities and equity (backport #41497)
2024-07-10 10:30:12 +05:30
ruthra kumar
970bb2bca1 Merge pull request #42164 from frappe/mergify/bp/version-15-hotfix/pr-42162
refactor: remove obsolete function call (backport #42162)
2024-07-10 10:26:15 +05:30
ruthra kumar
759781eefe Merge pull request #42240 from frappe/mergify/bp/version-15-hotfix/pr-42026
fix:  Multiple fixes in Bank Statement Import (backport #42026)
2024-07-10 10:24:57 +05:30
mergify[bot]
b5556156c1 fix(Holiday List): sort holidays on save to avoid disorienting the user (backport #42236) (#42250)
fix(Holiday List): sort holidays on save to avoid disorienting the user (#42236)

fix: sort holidays on save to avoid disorienting the user
(cherry picked from commit ad137250fc)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2024-07-09 17:53:38 +05:30
Khushi Rawat
2deea33a85 Merge pull request #42257 from frappe/mergify/bp/version-15-hotfix/pr-42233
fix: added filter to show only submitted assets (backport #42233)
2024-07-09 16:59:20 +05:30
Khushi Rawat
19ed6d1081 fix: added filter to show only submitted assets
(cherry picked from commit cd3a900495)
2024-07-09 11:12:01 +00:00
mergify[bot]
43c7513cfe fix: Billed Qty and Qty to Bill Calculation in Purchase Order Analysis (backport #42100) (#42249)
fix: Billed Qty and Qty to Bill Calculation in Purchase Order Analysis (#42100)

(cherry picked from commit 0c76a8cc9e)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-07-09 16:17:57 +05:30
mergify[bot]
e1b50efeea fix: corrected mismatch in the Purchase Receipt Status #15620 (backport #42138) (#42252)
* fix: corrected mismatch in the Purchase Receipt Status #15620 (#42138)

(cherry picked from commit 623b4c21cd)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py

* chore: fix conflicts

---------

Co-authored-by: Poorvi-R-Bhat <poorvi.r.bhat@gmail.com>
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-09 16:17:35 +05:30
mergify[bot]
4866958a96 fix: actual qty in sales order (backport #42248) (#42256)
fix: actual qty in sales order (#42248)

(cherry picked from commit 1186ee128c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-09 16:17:20 +05:30
mergify[bot]
3cc59e4a7a fix(Inventory Dimension): reduce perms for Stock User (backport #42226) (#42243)
* fix(Inventory Dimension): reduce perms for Stock User (#42226)

(cherry picked from commit edc1f84250)

# Conflicts:
#	erpnext/stock/doctype/inventory_dimension/inventory_dimension.json

* chore: fix conflicts

---------

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-09 14:52:30 +05:30
mergify[bot]
b78a97df85 fix(Putaway Rule): reduce perms for Stock User (backport #42227) (#42244)
* fix(Putaway Rule): reduce perms for Stock User (#42227)

(cherry picked from commit 96b275c61e)

# Conflicts:
#	erpnext/stock/doctype/putaway_rule/putaway_rule.json

* chore: fix conflicts

---------

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-09 14:52:17 +05:30
mergify[bot]
954d9ab154 fix(Stock Entry Type): reduce perms for Stock User (backport #42225) (#42245)
* fix(Stock Entry Type): reduce perms for Stock User (#42225)

(cherry picked from commit 4936514c8d)

# Conflicts:
#	erpnext/stock/doctype/stock_entry_type/stock_entry_type.json

* chore: fix conflicts

---------

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-09 14:52:06 +05:30
mergify[bot]
68a39dfa33 fix: BOM Creator Recursion Error on duplicate save (backport #41622) (#42179)
fix: BOM Creator Recursion Error on duplicate save (#41622)

(cherry picked from commit 9cfe09bdf6)

Co-authored-by: Richard Case <110036763+casesolved-co-uk@users.noreply.github.com>
2024-07-09 12:19:10 +05:30
mergify[bot]
7916d6436f fix: auto serial and batch bundle not creating for Asset Capitalization (backport #42231) (#42242)
fix: auto serial and batch bundle not creating for Asset Capitalization (#42231)

(cherry picked from commit 5f53ad3117)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-09 12:13:19 +05:30
ruthra kumar
f281e064f2 chore: resolve conflict 2024-07-09 10:39:02 +05:30
ljain112
57896a8f99 fix: changes as per review
(cherry picked from commit ba08b2e8e8)
2024-07-09 04:40:37 +00:00
ljain112
a04938d5ae fix: field position
(cherry picked from commit 98ad01c736)

# Conflicts:
#	erpnext/accounts/doctype/bank_statement_import/bank_statement_import.json
2024-07-09 04:40:37 +00:00
ljain112
4eb251b59a fix: download_import_log if rows are greater than 5000
(cherry picked from commit 2112d8f772)
2024-07-09 04:40:37 +00:00
ljain112
62aac8bb85 fix: import log preview
(cherry picked from commit 1ad264de48)
2024-07-09 04:40:37 +00:00
ljain112
71311ffd62 fix: import status
(cherry picked from commit 07f68884e0)
2024-07-09 04:40:37 +00:00
ljain112
2f0b97d91b fix: remove deprecated field "statement_import_log"
(cherry picked from commit b202409428)

# Conflicts:
#	erpnext/accounts/doctype/bank_statement_import/bank_statement_import.json
2024-07-09 04:40:37 +00:00
ljain112
43ad2fed63 fix: custom delimiters
(cherry picked from commit 13fb560401)

# Conflicts:
#	erpnext/accounts/doctype/bank_statement_import/bank_statement_import.json
2024-07-09 04:40:37 +00:00
Raffael Meyer
3f82ce2e77 Merge pull request #42235 from barredterra/de_transaltions_08062024 2024-07-08 19:50:51 +02:00
barredterra
2f89461ace fix: add missing german translations 2024-07-08 19:34:39 +02:00
mergify[bot]
ec881ace76 fix: provision to enable do not use batch-wise valuation (backport #42186) (#42198)
* fix: provision to enable do not use batch-wise valuation (#42186)

fix: provision to enable do not use batchwise valuation
(cherry picked from commit f06ba0cc36)

# Conflicts:
#	erpnext/stock/doctype/stock_settings/stock_settings.json

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-08 11:02:02 +05:30
Sagar Vora
b6bee319da Merge pull request #42215 from frappe/mergify/bp/version-15-hotfix/pr-42146
fix: Multiple fixes for General Ledger Report (backport #42146)
2024-07-08 10:06:50 +05:30
Sagar Vora
ca57fd4255 fix: Multiple fixes for General Ledger Report
(cherry picked from commit 97f02015c2)
2024-07-08 04:36:11 +00:00
Frappe PR Bot
c9e3dee5b2 chore(release): Bumped to Version 15.29.2
## [15.29.2](https://github.com/frappe/erpnext/compare/v15.29.1...v15.29.2) (2024-07-05)

### Bug Fixes

* blank item-wise sales/purchase register reports on first load ([8baef24](8baef24541))
* group by in item-wise purchase register ([20d481d](20d481de5e))
2024-07-05 02:47:13 +00:00
ruthra kumar
a8cd49112d Merge pull request #42191 from frappe/mergify/bp/version-15/pr-41975
fix: group by in item-wise purchase register (backport #41975)
2024-07-05 08:15:58 +05:30
ruthra kumar
8baef24541 fix: blank item-wise sales/purchase register reports on first load 2024-07-05 07:43:13 +05:30
Nihantra C. Patel
20d481de5e fix: group by in item-wise purchase register
(cherry picked from commit 3fab00135b)
2024-07-05 02:05:29 +00:00
ruthra kumar
276b9bc2b9 Merge pull request #42185 from frappe/mergify/bp/version-15-hotfix/pr-42183
fix: empty item-wise sales/purchase register reports on initial load (backport #42183)
2024-07-04 15:12:15 +05:30
ruthra kumar
5ac3b34a6f fix: empty item-wise sales/purchase register reports on initial load
(cherry picked from commit ee862126e4)
2024-07-04 09:36:58 +00:00
ruthra kumar
8ab49f4d9d Merge pull request #42181 from frappe/mergify/bp/version-15-hotfix/pr-41975
fix: group by in item-wise purchase register (backport #41975)
2024-07-04 14:59:52 +05:30
Nihantra C. Patel
b3715b2b82 Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-41655 2024-07-04 14:43:29 +05:30
Nihantra C. Patel
a967d59844 fix: group by in item-wise purchase register
(cherry picked from commit 3fab00135b)
2024-07-04 09:09:09 +00:00
ruthra kumar
cf937edc4e Merge pull request #42173 from frappe/mergify/bp/version-15-hotfix/pr-42143
refactor: validation to prevent recursion with mixed conditions (backport #42143)
2024-07-04 09:20:23 +05:30
ruthra kumar
12bec3be9d test: validation on mixed condition and recursion on pricing rule
(cherry picked from commit eb4af58bf0)
2024-07-03 15:27:43 +00:00
ruthra kumar
0774607f52 test: validation on mixed condition with recursion
(cherry picked from commit 9bd4e7b709)
2024-07-03 15:27:43 +00:00
ruthra kumar
cfda5f6d0b fix: use standard method to get _doc_before_save
(cherry picked from commit 9d7be293ae)
2024-07-03 15:27:43 +00:00
ruthra kumar
4ecb02cb41 refactor: validation to prevent recursion with mixed conditions
(cherry picked from commit 406dfd528f)
2024-07-03 15:27:43 +00:00
ruthra kumar
fcfe78b3bc Merge pull request #42170 from frappe/mergify/bp/version-15-hotfix/pr-42165
fix: multiple free items on same Item Group (backport #42165)
2024-07-03 20:55:45 +05:30
Frappe PR Bot
7568af67e9 chore(release): Bumped to Version 15.29.1
## [15.29.1](https://github.com/frappe/erpnext/compare/v15.29.0...v15.29.1) (2024-07-03)

### Bug Fixes

* path of automatically updates the status of asset maintenance log ([473aaf4](473aaf4e5b))
2024-07-03 14:56:03 +00:00
Raffael Meyer
5dbdcb1158 Merge pull request #42171 from frappe/mergify/bp/version-15/pr-42168
fix: path of automatically updates the status of asset maintenance log (backport #42157) (backport #42168)
2024-07-03 16:54:44 +02:00
Nihantra C. Patel
473aaf4e5b fix: path of automatically updates the status of asset maintenance log
(cherry picked from commit 909aa8f359)
(cherry picked from commit 5317418a53)
2024-07-03 14:15:05 +00:00
Raffael Meyer
de130cb1ab Merge pull request #42168 from frappe/mergify/bp/version-15-hotfix/pr-42157
fix: path of automatically updates the status of asset maintenance log (backport #42157)
2024-07-03 16:11:11 +02:00
ruthra kumar
93528631c3 fix: multiple free items on same Item Group
(cherry picked from commit c4ae0d283f)
2024-07-03 12:28:38 +00:00
Nihantra C. Patel
5317418a53 fix: path of automatically updates the status of asset maintenance log
(cherry picked from commit 909aa8f359)
2024-07-03 10:55:50 +00:00
Markus Lobedann
4f623c3b66 refactor: remove obsolete function call (#42162)
(cherry picked from commit 4512432816)
2024-07-03 10:22:39 +00:00
mergify[bot]
a7b6530fde fix: manual pick allow to pick more than available stock (backport #42155) (#42159)
fix: manual pick allow to pick more than available stock (#42155)

(cherry picked from commit 938dd4b2aa)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-03 15:42:37 +05:30
Frappe PR Bot
5812577854 chore(release): Bumped to Version 15.29.0
# [15.29.0](https://github.com/frappe/erpnext/compare/v15.28.2...v15.29.0) (2024-07-03)

### Bug Fixes

* add auto-update for overdue status ([#42105](https://github.com/frappe/erpnext/issues/42105)) ([317cc03](317cc0358c))
* add string for translation (backport [#41903](https://github.com/frappe/erpnext/issues/41903)) ([#41963](https://github.com/frappe/erpnext/issues/41963)) ([48dc24b](48dc24b9bf))
* always post to tax account heads if LCV is booked ([706a6c1](706a6c1ad7))
* batch picking in pick list based on Stock Settings (backport [#42021](https://github.com/frappe/erpnext/issues/42021)) ([#42134](https://github.com/frappe/erpnext/issues/42134)) ([a45f8ca](a45f8ca5fd))
* batch reset while making SABB (backport [#42076](https://github.com/frappe/erpnext/issues/42076)) ([#42123](https://github.com/frappe/erpnext/issues/42123)) ([c3f5a49](c3f5a494f3))
* decimal issue in pick list (backport [#41972](https://github.com/frappe/erpnext/issues/41972)) ([#41982](https://github.com/frappe/erpnext/issues/41982)) ([9945a90](9945a90b3f))
* **Delivery Note:** only show permitted actions ([cef6d0d](cef6d0d74d))
* do not show zero balance stock items in stock balance report (backport [#41958](https://github.com/frappe/erpnext/issues/41958)) ([#41961](https://github.com/frappe/erpnext/issues/41961)) ([c10b123](c10b123a81))
* expense account from item group not fetched (backport [#41957](https://github.com/frappe/erpnext/issues/41957)) ([#41962](https://github.com/frappe/erpnext/issues/41962)) ([760b2e2](760b2e24f2))
* fixed asset value in Fixed Asset Register (backport [#41930](https://github.com/frappe/erpnext/issues/41930)) ([#42027](https://github.com/frappe/erpnext/issues/42027)) ([f2feeaf](f2feeaf264))
* handle none type object error ([b0aef9e](b0aef9e42b))
* incorrect against_account upon reposting ([a41577a](a41577a1cd))
* incorrect Difference Amount (backport [#42008](https://github.com/frappe/erpnext/issues/42008)) ([#42013](https://github.com/frappe/erpnext/issues/42013)) ([838cc5b](838cc5b72a))
* incorrect discount on other item ([77f4199](77f4199e2a))
* incorrect dr/cr on Adv Payment against Journals ([4e74257](4e74257ba9))
* incorrect time period in asset depreciation schedule (backport [#41805](https://github.com/frappe/erpnext/issues/41805)) ([#42043](https://github.com/frappe/erpnext/issues/42043)) ([cf4d4ba](cf4d4ba3e9))
* lead status filter (backport [#41816](https://github.com/frappe/erpnext/issues/41816)) ([#42046](https://github.com/frappe/erpnext/issues/42046)) ([3536a75](3536a754ff))
* manufacturing date issue in the batch (backport [#42034](https://github.com/frappe/erpnext/issues/42034)) ([#42037](https://github.com/frappe/erpnext/issues/42037)) ([a981633](a981633d94))
* move condition for shipment ([2180239](21802396ce))
* not able to make purchase return (backport [#42053](https://github.com/frappe/erpnext/issues/42053)) ([#42055](https://github.com/frappe/erpnext/issues/42055)) ([8a91bf3](8a91bf3154))
* pricing rule with and without 'apply multiple' and priority ([f3aa885](f3aa885488))
* provisional entry for non stock items ([d61dab8](d61dab8569))
* Re-open allows SO's to be over credit limit ([7fcb0f5](7fcb0f578a))
* refactor Asset Repair and Stock Entry linkage to resolve amendme… (backport [#41919](https://github.com/frappe/erpnext/issues/41919)) ([#42058](https://github.com/frappe/erpnext/issues/42058)) ([97c49b9](97c49b93b6))
* reload asset when creating asset depreciation ([7b5d504](7b5d5043c5))
* reposting file attachment permission issue (backport [#42068](https://github.com/frappe/erpnext/issues/42068)) ([#42075](https://github.com/frappe/erpnext/issues/42075)) ([1f3374f](1f3374fcdf))
* resolve gl entries duplication in asset purchase workflow (backport [#41845](https://github.com/frappe/erpnext/issues/41845)) ([#42120](https://github.com/frappe/erpnext/issues/42120)) ([58e18e2](58e18e2b1f))
* **Sales Order:** only show permitted actions ([a0011c5](a0011c5b52))
* show zero stock items filter in the stock balance report (backport [#42147](https://github.com/frappe/erpnext/issues/42147)) ([#42152](https://github.com/frappe/erpnext/issues/42152)) ([11ebbf2](11ebbf2a9c))
* stock qty validation in SCR (backport [#42124](https://github.com/frappe/erpnext/issues/42124)) ([#42133](https://github.com/frappe/erpnext/issues/42133)) ([d9e62fe](d9e62fef21))
* Stock Reservation Entry was not getting created (backport [#42033](https://github.com/frappe/erpnext/issues/42033)) ([#42035](https://github.com/frappe/erpnext/issues/42035)) ([e278fc6](e278fc683f))
* **test:** incorrect field for customer default billing currency ([3b15708](3b15708f18))
* this.frm.events.update_cost is not a function (backport [#41960](https://github.com/frappe/erpnext/issues/41960)) ([#41965](https://github.com/frappe/erpnext/issues/41965)) ([3b4d397](3b4d39766f))
* timeout error while submitting JV (backport [#42040](https://github.com/frappe/erpnext/issues/42040)) ([#42099](https://github.com/frappe/erpnext/issues/42099)) ([a0e06a4](a0e06a4ba5))
* timeout while cancelling LCV (backport [#42030](https://github.com/frappe/erpnext/issues/42030)) (backport [#42031](https://github.com/frappe/erpnext/issues/42031)) ([#42032](https://github.com/frappe/erpnext/issues/42032)) ([068de08](068de08bbb))
* unhide serial no field (backport [#42045](https://github.com/frappe/erpnext/issues/42045)) ([#42047](https://github.com/frappe/erpnext/issues/42047)) ([482832f](482832f3c2))
* valuation rate for the legacy batches (backport [#42011](https://github.com/frappe/erpnext/issues/42011)) ([#42020](https://github.com/frappe/erpnext/issues/42020)) ([f6be19c](f6be19cb7c))
* Wrong Delete Batch on Purchase Receipt (backport [#42007](https://github.com/frappe/erpnext/issues/42007)) ([#42012](https://github.com/frappe/erpnext/issues/42012)) ([68b318a](68b318a94b))

### Features

* accounting dimension filters in gp report ([fe9dffb](fe9dffb271))
* default account head for operating cost (backport [#41985](https://github.com/frappe/erpnext/issues/41985)) ([#41987](https://github.com/frappe/erpnext/issues/41987)) ([44c1671](44c16713ba))
* **gp:** group by cost center ([068ae87](068ae87b8d))
* Turkish Chart Of Accounts (backport [#41756](https://github.com/frappe/erpnext/issues/41756)) ([#42028](https://github.com/frappe/erpnext/issues/42028)) ([63b26e6](63b26e679b))

### Performance Improvements

* code optimization to handle large asset creation (backport [#42018](https://github.com/frappe/erpnext/issues/42018)) ([#42025](https://github.com/frappe/erpnext/issues/42025)) ([c27f272](c27f272f06))
* dont run queries unnecessarily, improved filters ([#41993](https://github.com/frappe/erpnext/issues/41993)) ([b59c91a](b59c91a341))
* Performance optmization for Purchase Invoice submission (backport [#40263](https://github.com/frappe/erpnext/issues/40263)) ([#41946](https://github.com/frappe/erpnext/issues/41946)) ([d396c18](d396c18689))
2024-07-03 05:06:09 +00:00
ruthra kumar
ebb8d90b4d Merge pull request #42142 from frappe/version-15-hotfix
chore: release v15
2024-07-03 10:33:25 +05:30
mergify[bot]
11ebbf2a9c fix: show zero stock items filter in the stock balance report (backport #42147) (#42152)
fix: show zero stock items filter in the stock balance report (#42147)

(cherry picked from commit 1dae2156e3)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-03 10:09:09 +05:30
ruthra kumar
c9cde259ec Merge branch 'version-15' into version-15-hotfix 2024-07-03 10:06:49 +05:30
ruthra kumar
b15ec238c9 Merge pull request #42151 from frappe/mergify/bp/version-15-hotfix/pr-42073
fix: always post to tax account heads if LCV is booked (backport #42073)
2024-07-03 07:23:08 +05:30
ruthra kumar
09c39face8 Merge pull request #42140 from nabinhait/provisional_entry_fix3
fix: provisional entry for non stock items
2024-07-03 07:20:56 +05:30
ruthra kumar
c3cc363648 refactor(test): fix flaky test
(cherry picked from commit 0e256b8b29)
2024-07-03 01:35:15 +00:00
ruthra kumar
e55fd7204a refactor(test): cleanup test data
(cherry picked from commit 6ba6b5aa33)
2024-07-03 01:35:15 +00:00
ruthra kumar
b7cbafae14 test: Repost should not merge expense accounts from LCV
(cherry picked from commit fa56555150)
2024-07-03 01:35:15 +00:00
ruthra kumar
706a6c1ad7 fix: always post to tax account heads if LCV is booked
(cherry picked from commit 0fcd5d5130)
2024-07-03 01:35:15 +00:00
Khushi Rawat
28e8bb7085 Merge pull request #42130 from frappe/mergify/bp/version-15-hotfix/pr-42105
fix: add auto-update for overdue status (backport #42105)
2024-07-02 23:17:04 +05:30
Khushi Rawat
8b3ffc9949 Merge pull request #42145 from frappe/mergify/bp/version-15-hotfix/pr-42144
fix: handle none type object error (backport #42144)
2024-07-02 16:54:36 +05:30
Khushi Rawat
b0aef9e42b fix: handle none type object error
(cherry picked from commit 6760c9c4e2)
2024-07-02 11:08:42 +00:00
Nabin Hait
d61dab8569 fix: provisional entry for non stock items 2024-07-02 16:10:03 +05:30
mergify[bot]
a45f8ca5fd fix: batch picking in pick list based on Stock Settings (backport #42021) (#42134)
fix: batch picking in pick list based on Stock Settings (#42021)

(cherry picked from commit 97c9941143)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-02 10:51:06 +05:30
mergify[bot]
d9e62fef21 fix: stock qty validation in SCR (backport #42124) (#42133)
fix: stock qty validation in SCR (#42124)

(cherry picked from commit 99f2735ad3)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-01 19:12:58 +05:30
mergify[bot]
3b4d39766f fix: this.frm.events.update_cost is not a function (backport #41960) (#41965)
* fix: this.frm.events.update_cost is not a function (#41960)

(cherry picked from commit d5ed4582c3)

# Conflicts:
#	erpnext/manufacturing/doctype/workstation/workstation.json
#	erpnext/manufacturing/doctype/workstation/workstation.py

* chore: fix conflicts

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-01 18:18:58 +05:30
ruthra kumar
61c0ce6ca8 Merge pull request #42132 from frappe/mergify/bp/version-15-hotfix/pr-42126
fix: Re-open allows SO's to be over credit limit (backport #42126)
2024-07-01 17:21:19 +05:30
ruthra kumar
bff99d89b9 chore: resolve conflict 2024-07-01 17:05:22 +05:30
ruthra kumar
b63eab8cbb test: credit check on Sales Order re-open
(cherry picked from commit 60694e09c4)

# Conflicts:
#	erpnext/selling/doctype/sales_order/test_sales_order.py
2024-07-01 11:33:36 +00:00
ruthra kumar
7fcb0f578a fix: Re-open allows SO's to be over credit limit
(cherry picked from commit 5eed781263)
2024-07-01 11:33:36 +00:00
Khushi Rawat
317cc0358c fix: add auto-update for overdue status (#42105)
* fix: auto-update for overdue status

* chore: use qb.update

(cherry picked from commit c5e474f4f5)
2024-07-01 11:27:02 +00:00
mergify[bot]
58e18e2b1f fix: resolve gl entries duplication in asset purchase workflow (backport #41845) (#42120)
* fix: resolve gl entries duplication in asset purchase workflow (#41845)

* fix: resolve gl entries duplication in asset purchase workflow

* fix: prevent duplicate entry when creating purchase receipt from purchase invoice

* chore: test case added

* fix: fixed missing asset category issue

(cherry picked from commit 55a4bd469b)

* fix: use f-string instead of format call

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-07-01 16:54:14 +05:30
mergify[bot]
97c49b93b6 fix: refactor Asset Repair and Stock Entry linkage to resolve amendme… (backport #41919) (#42058)
* fix: refactor Asset Repair and Stock Entry linkage to resolve amendme… (#41919)

* fix: refactor Asset Repair and Stock Entry linkage to resolve amendment issues

* chore: added missing patch to patches.txt

* chore: fixing previous changes

* chore: fixing minor issues

* fix: code changes to enhance efficiency

* chore: replaced frappe.qb with db.sql because of conflict

* fix: minor changes

(cherry picked from commit ba79e68190)

# Conflicts:
#	erpnext/assets/doctype/asset_repair/asset_repair.json
#	erpnext/assets/doctype/asset_repair_consumed_item/asset_repair_consumed_item.json
#	erpnext/patches.txt
#	erpnext/stock/doctype/stock_entry/stock_entry.json

* chore: fixed conflicts

* fix: removed unmerged patches

* fix: use f-string instead of format call

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-07-01 16:53:29 +05:30
mergify[bot]
c3f5a494f3 fix: batch reset while making SABB (backport #42076) (#42123)
fix: batch reset while making SABB (#42076)

(cherry picked from commit 8f424528dd)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-01 15:12:36 +05:30
mergify[bot]
a0e06a4ba5 fix: timeout error while submitting JV (backport #42040) (#42099)
* fix: timeout error while submitting JV (#42040)

(cherry picked from commit 32bdcdb08f)

# Conflicts:
#	erpnext/accounts/doctype/account/account.json
#	erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
#	erpnext/accounts/utils.py
#	erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-07-01 14:15:13 +05:30
ruthra kumar
deaeb103d5 Merge pull request #42106 from frappe/mergify/bp/version-15-hotfix/pr-42029
fix: incorrect ledger entries on Advance payment against Journals for customer (backport #42029)
2024-06-30 05:55:54 +05:30
ruthra kumar
3c58e0af50 refactor: handle purchase invoice as reference
(cherry picked from commit 9ec6aef95d)
2024-06-30 00:08:42 +00:00
ruthra kumar
cb703ff17c chore: better test name
(cherry picked from commit ad7efd5939)
2024-06-30 00:08:41 +00:00
ruthra kumar
6a0111c7db test: advance payment entry against journal - supplier type
(cherry picked from commit 1b384b9942)
2024-06-30 00:08:41 +00:00
ruthra kumar
e00348fd52 test: advance payment against journal entry - customer type
(cherry picked from commit 5e84272cf9)
2024-06-30 00:08:41 +00:00
ruthra kumar
4e74257ba9 fix: incorrect dr/cr on Adv Payment against Journals
(cherry picked from commit f6c1dffb35)
2024-06-30 00:08:41 +00:00
Frappe PR Bot
fb76daaf9e chore(release): Bumped to Version 15.28.2
## [15.28.2](https://github.com/frappe/erpnext/compare/v15.28.1...v15.28.2) (2024-06-29)

### Bug Fixes

* expense account from item group not fetched (backport [#41957](https://github.com/frappe/erpnext/issues/41957)) ([#41962](https://github.com/frappe/erpnext/issues/41962)) ([d310074](d310074222))
2024-06-29 16:18:59 +00:00
rohitwaghchaure
0df706f14d Merge pull request #42101 from frappe/mergify/bp/version-15/pr-41962
fix: expense account from item group not fetched (backport #41957) (backport #41962)
2024-06-29 21:47:42 +05:30
mergify[bot]
d310074222 fix: expense account from item group not fetched (backport #41957) (#41962)
fix: expense account from item group not fetched

(cherry picked from commit 86ebe58231)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
(cherry picked from commit 760b2e24f2)
2024-06-29 05:31:05 +00:00
mergify[bot]
760b2e24f2 fix: expense account from item group not fetched (backport #41957) (#41962)
fix: expense account from item group not fetched

(cherry picked from commit 86ebe58231)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2024-06-29 10:59:57 +05:30
mergify[bot]
1f3374fcdf fix: reposting file attachment permission issue (backport #42068) (#42075)
* fix: reposting file attachment permission issue (#42068)

(cherry picked from commit 03e674e21d)

# Conflicts:
#	erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-29 07:32:45 +05:30
Frappe PR Bot
c47dcc0eb7 chore(release): Bumped to Version 15.28.1
## [15.28.1](https://github.com/frappe/erpnext/compare/v15.28.0...v15.28.1) (2024-06-28)

### Bug Fixes

* not able to make purchase return (backport [#42053](https://github.com/frappe/erpnext/issues/42053)) ([#42055](https://github.com/frappe/erpnext/issues/42055)) ([460acc3](460acc3e22))
2024-06-28 09:19:54 +00:00
rohitwaghchaure
b738b0fe9f Merge pull request #42056 from frappe/mergify/bp/version-15/pr-42055
fix: not able to make purchase return (backport #42053) (backport #42055)
2024-06-28 14:48:34 +05:30
mergify[bot]
d396c18689 perf: Performance optmization for Purchase Invoice submission (backport #40263) (#41946)
* perf: Optimization for providional gl entries

(cherry picked from commit d7b738ff61)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py

* perf: Performance optimization for validating budget

(cherry picked from commit f204d810bb)

# Conflicts:
#	erpnext/accounts/doctype/budget/budget.py

* perf: Cached accounting dimensions details

(cherry picked from commit 8cd8b8f885)

* perf: Optimzed code for merging similar gl entries

(cherry picked from commit aa75a60142)

* fix: linter issues

(cherry picked from commit acc0b2faf8)

* perf: Cache accounting dimension filter map

(cherry picked from commit e4bd173875)

# Conflicts:
#	erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.py

* fix: minor fixes

(cherry picked from commit 5cd9bf3bda)

* perf: skip unnecessary validation while transaction  cancellation

(cherry picked from commit 05385e4acb)

* perf: refactored handling provisional gl entries for non-stock items

(cherry picked from commit 49c74369a5)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py

* perf: validate expense against budget only if budget exists

(cherry picked from commit c15b2d5490)

* perf: Get bin details only for stock items

(cherry picked from commit 6ff9e6ee84)

# Conflicts:
#	erpnext/stock/get_item_details.py

* fix: added index for price_list column in Item Price

(cherry picked from commit d279e23623)

# Conflicts:
#	erpnext/stock/doctype/item_price/item_price.json

* perf: Caching in checking allowance for qty and amount

(cherry picked from commit 8d682fa884)

* perf: Caching in gl entry

(cherry picked from commit b07769d8d7)

# Conflicts:
#	erpnext/accounts/doctype/gl_entry/gl_entry.py

* chore: resolve conflicts

* chore: resolve conflict in purchase_invoice.py

---------

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
Co-authored-by: ruthra kumar <ruthra@erpnext.com>
2024-06-27 17:32:43 +05:30
mergify[bot]
460acc3e22 fix: not able to make purchase return (backport #42053) (#42055)
fix: not able to make purchase return (#42053)

(cherry picked from commit 9738c04ef0)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit 8a91bf3154)
2024-06-27 11:02:28 +00:00
mergify[bot]
8a91bf3154 fix: not able to make purchase return (backport #42053) (#42055)
fix: not able to make purchase return (#42053)

(cherry picked from commit 9738c04ef0)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-27 16:31:06 +05:30
Frappe PR Bot
b7eabc3112 chore: release v15 (#42024)
* fix(Sales Order): only show permitted actions

(cherry picked from commit c29d955371)

* fix(Delivery Note): only show permitted actions

(cherry picked from commit 418bdc1dcc)

* fix: do not show zero balance stock items in stock balance report (backport #41958) (#41961)

fix: do not show zero balance stock in stock balance

(cherry picked from commit 7f7b363d48)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>

* fix: add string for translation (backport #41903) (#41963)

fix: add string for translation (#41903)

fix: add string for translation
(cherry picked from commit f28c692dca)

Co-authored-by: mahsem <137205921+mahsem@users.noreply.github.com>

* refactor: remove use of can_create for Payment Request (#41647)

(cherry picked from commit 47bc5691a1)

* fix: move condition for shipment

* fix: incorrect discount on other item

When discount is applied on other item, don't update `discount_amount`
as the amount is calculated for current item

(cherry picked from commit 654764e398)

* fix: incorrect against_account upon reposting

(cherry picked from commit 20c4098399)

* fix: decimal issue in pick list (backport #41972) (#41982)

fix: decimal issue in pick list (#41972)

(cherry picked from commit 21adc7b63e)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* refactor: renamed number of depreciations booked to opening booked de… (#41515)

* refactor: renamed number of depreciations booked to opening booked depreciations

* feat: introduced new field for showing total number of booked depreciations

* fix: reload asset when creating asset depreciation

* chore: added nosemgrep for security checks

* feat: default account head for operating cost (backport #41985) (#41987)

* feat: default account head for operating cost (#41985)

(cherry picked from commit fd7666a029)

# Conflicts:
#	erpnext/manufacturing/doctype/bom/bom.py
#	erpnext/setup/doctype/company/company.json

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* perf: dont run queries unnecessarily, improved filters (#41993)

* perf: dont run queries unnecessarily, improved filters

* perf: dont run query if `in` filter is empty

(cherry picked from commit ac6d85aed6)

* chore: remove validation on payment entry

(cherry picked from commit e7740033ca)

* refactor: convert amount to base currency for advances

(cherry picked from commit c9ede1ffbe)

* refactor: for advances uses the party account in references table

(cherry picked from commit 7dce6e03c7)

* refactor(test): simpler create_account helper method

(cherry picked from commit 475e0ddeee)

* test: exc gain/loss booking on advances under asset/liability

(cherry picked from commit 827d67d02f)

* test: advance against purchase invoice

(cherry picked from commit 90c84822d0)

* refactor: validation to force accounts to be on same currency

(cherry picked from commit 0f0b4d88bc)

* refactor: validation in customer group

(cherry picked from commit 4f9a228175)

* refactor: validation in Supplier Group

(cherry picked from commit 107b614518)

* refactor: better error messages

(cherry picked from commit 83ff94b9b8)

* chore: fix test data

(cherry picked from commit 07d59443b7)

* chore: remove dead code

(cherry picked from commit 7e318c0132)

* fix(test): incorrect field for customer default billing currency

(cherry picked from commit c696d13a5e)

* refactor(test): enfore use of customer/supplier master

While using advance accounts in foreign currency, always use
Customer/Supplier master to maintain them

(cherry picked from commit 64e63887be)

* refactor(test): make and use a different party for subscription

(cherry picked from commit 3fabf4aaa4)

* fix: pricing rule with and without 'apply multiple' and priority

Either all of the pricing rules identified for an item should have
'apply multiple' enabled. If not, Priority is applied and only the
highest priority is applied

(cherry picked from commit 5e875b238c)

* test: priority takes effect on with and without apply multiple

(cherry picked from commit efebc3662e)

* feat: accounting dimension filters in gp report

(cherry picked from commit d165638bbb)

* feat(gp): group by cost center

(cherry picked from commit e26bc17c75)

* fix: Wrong Delete Batch on Purchase Receipt (backport #42007) (#42012)

fix: Wrong Delete Batch on Purchase Receipt (#42007)

(cherry picked from commit d50487ce53)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* fix: incorrect Difference Amount (backport #42008) (#42013)

fix: incorrect Difference Amount (#42008)

(cherry picked from commit 7d91c6cbd5)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* fix: valuation rate for the legacy batches (backport #42011) (#42020)

fix: valuation rate for the legacy batches (#42011)

(cherry picked from commit 9ab333d105)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* fix: timeout while cancelling LCV (backport #42030) (backport #42031) (#42032)

fix: timeout while cancelling LCV (backport #42030) (#42031)

fix: timeout while cancelling LCV (#42030)

fix: timeout while canelling LCV
(cherry picked from commit 21bf7fd1f8)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit 2e76b9f9db)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* fix: Stock Reservation Entry was not getting created (backport #42033) (#42035)

fix: Stock Reservation Entry was not getting created (#42033)

(cherry picked from commit 1a9899b32b)

Co-authored-by: Poorvi-R-Bhat <poorvi.r.bhat@gmail.com>

* fix: manufacturing date issue in the batch (backport #42034) (#42037)

* fix: manufacturing date issue in the batch (#42034)

(cherry picked from commit eca3e02f8d)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>

* fix: fixed asset value in Fixed Asset Register (backport #41930) (#42027)

fix: fixed asset value in Fixed Asset Register (#41930)

(cherry picked from commit 1c643a0ead)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>

* feat: Turkish Chart Of Accounts (backport #41756) (#42028)

* feat: Create Turkish Chart Of Accounts

(cherry picked from commit 5c8ea86a3f)

* feat: Create Turkish Chart Of Accounts

(cherry picked from commit b401ba2c26)

---------

Co-authored-by: fzozyurt <fzozyurt@outlook.com>

* perf: code optimization to handle large asset creation (backport #42018) (#42025)

perf: code optimization to handle large asset creation (#42018)

(cherry picked from commit 5738d93f95)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>

* fix: incorrect time period in asset depreciation schedule (backport #41805) (#42043)

fix: incorrect time period in asset depreciation schedule (#41805)

* fix(wip): depreciation calculation for existing asset

* fix(wip): added validation for incorrect depreciation period

* fix: depreciation schedule time period issue for existing asset

* chore: run pre-commit checks and apply fixes

* style: apply formatting changes

* style: made some necessary changes

* chore: modified test

(cherry picked from commit 625f16dee0)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>

* chore: patch to enable total number of booked depreciations field (backport #41940) (#42042)

* chore: patch to enable total number of booked depreciations field (#41940)

* chore: patch to enable total number of booked depreciations field

* fix: conflict resolved

* refactor: replaced fb_row.db_set with set_value

(cherry picked from commit 5fdd1d3278)

# Conflicts:
#	erpnext/patches.txt

* fix: resolved conflicts

* fix: removed unmerged patches

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>

* fix: lead status filter (backport #41816) (#42046)

fix: lead status filter (#41816)

(cherry picked from commit 8ae2b8ff8c)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>

* fix: unhide serial no field (backport #42045) (#42047)

* fix: unhide serial no field (#42045)

(cherry picked from commit 80c6981cfa)

# Conflicts:
#	erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json

* fix: resolved conflicts

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>

---------

Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
Co-authored-by: mahsem <137205921+mahsem@users.noreply.github.com>
Co-authored-by: ruthra kumar <ruthra@erpnext.com>
Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
Co-authored-by: Sagar Vora <sagar@resilient.tech>
Co-authored-by: Dany Robert <danyrt@wahni.com>
Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
Co-authored-by: Poorvi-R-Bhat <poorvi.r.bhat@gmail.com>
Co-authored-by: fzozyurt <fzozyurt@outlook.com>
Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-06-26 21:52:35 +05:30
mergify[bot]
482832f3c2 fix: unhide serial no field (backport #42045) (#42047)
* fix: unhide serial no field (#42045)

(cherry picked from commit 80c6981cfa)

# Conflicts:
#	erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json

* fix: resolved conflicts

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-26 18:01:33 +05:30
mergify[bot]
3536a754ff fix: lead status filter (backport #41816) (#42046)
fix: lead status filter (#41816)

(cherry picked from commit 8ae2b8ff8c)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-06-26 17:47:30 +05:30
mergify[bot]
b29435744f chore: patch to enable total number of booked depreciations field (backport #41940) (#42042)
* chore: patch to enable total number of booked depreciations field (#41940)

* chore: patch to enable total number of booked depreciations field

* fix: conflict resolved

* refactor: replaced fb_row.db_set with set_value

(cherry picked from commit 5fdd1d3278)

# Conflicts:
#	erpnext/patches.txt

* fix: resolved conflicts

* fix: removed unmerged patches

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-26 17:43:57 +05:30
mergify[bot]
cf4d4ba3e9 fix: incorrect time period in asset depreciation schedule (backport #41805) (#42043)
fix: incorrect time period in asset depreciation schedule (#41805)

* fix(wip): depreciation calculation for existing asset

* fix(wip): added validation for incorrect depreciation period

* fix: depreciation schedule time period issue for existing asset

* chore: run pre-commit checks and apply fixes

* style: apply formatting changes

* style: made some necessary changes

* chore: modified test

(cherry picked from commit 625f16dee0)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-26 16:51:16 +05:30
mergify[bot]
c27f272f06 perf: code optimization to handle large asset creation (backport #42018) (#42025)
perf: code optimization to handle large asset creation (#42018)

(cherry picked from commit 5738d93f95)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-26 16:51:07 +05:30
mergify[bot]
63b26e679b feat: Turkish Chart Of Accounts (backport #41756) (#42028)
* feat: Create Turkish Chart Of Accounts

(cherry picked from commit 5c8ea86a3f)

* feat: Create Turkish Chart Of Accounts

(cherry picked from commit b401ba2c26)

---------

Co-authored-by: fzozyurt <fzozyurt@outlook.com>
2024-06-26 16:50:41 +05:30
mergify[bot]
f2feeaf264 fix: fixed asset value in Fixed Asset Register (backport #41930) (#42027)
fix: fixed asset value in Fixed Asset Register (#41930)

(cherry picked from commit 1c643a0ead)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-26 16:49:55 +05:30
mergify[bot]
a981633d94 fix: manufacturing date issue in the batch (backport #42034) (#42037)
* fix: manufacturing date issue in the batch (#42034)

(cherry picked from commit eca3e02f8d)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-26 13:00:36 +05:30
mergify[bot]
e278fc683f fix: Stock Reservation Entry was not getting created (backport #42033) (#42035)
fix: Stock Reservation Entry was not getting created (#42033)

(cherry picked from commit 1a9899b32b)

Co-authored-by: Poorvi-R-Bhat <poorvi.r.bhat@gmail.com>
2024-06-26 09:11:01 +05:30
mergify[bot]
068de08bbb fix: timeout while cancelling LCV (backport #42030) (backport #42031) (#42032)
fix: timeout while cancelling LCV (backport #42030) (#42031)

fix: timeout while cancelling LCV (#42030)

fix: timeout while canelling LCV
(cherry picked from commit 21bf7fd1f8)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit 2e76b9f9db)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-06-25 18:42:43 +05:30
mergify[bot]
f6be19cb7c fix: valuation rate for the legacy batches (backport #42011) (#42020)
fix: valuation rate for the legacy batches (#42011)

(cherry picked from commit 9ab333d105)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-25 13:07:03 +05:30
mergify[bot]
838cc5b72a fix: incorrect Difference Amount (backport #42008) (#42013)
fix: incorrect Difference Amount (#42008)

(cherry picked from commit 7d91c6cbd5)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-24 17:04:24 +05:30
mergify[bot]
68b318a94b fix: Wrong Delete Batch on Purchase Receipt (backport #42007) (#42012)
fix: Wrong Delete Batch on Purchase Receipt (#42007)

(cherry picked from commit d50487ce53)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-24 17:04:13 +05:30
Deepesh Garg
6a0ab23c87 Merge pull request #42006 from frappe/mergify/bp/version-15-hotfix/pr-41751
feat: accounting dimension filters in gp report (#41751)
2024-06-24 11:24:24 +05:30
Dany Robert
068ae87b8d feat(gp): group by cost center
(cherry picked from commit e26bc17c75)
2024-06-24 05:22:39 +00:00
Dany Robert
fe9dffb271 feat: accounting dimension filters in gp report
(cherry picked from commit d165638bbb)
2024-06-24 05:22:39 +00:00
ruthra kumar
521cfb3d4e Merge pull request #41998 from frappe/mergify/bp/version-15-hotfix/pr-41976
fix: pricing rule with and without 'apply multiple' and priority (backport #41976)
2024-06-23 05:49:07 +05:30
ruthra kumar
bc6cbb2656 Merge pull request #41997 from frappe/mergify/bp/version-15-hotfix/pr-41844
refactor: allow foreign currency advance accounts (backport #41844)
2024-06-23 05:43:10 +05:30
ruthra kumar
f52f726e06 test: priority takes effect on with and without apply multiple
(cherry picked from commit efebc3662e)
2024-06-23 00:02:10 +00:00
ruthra kumar
f3aa885488 fix: pricing rule with and without 'apply multiple' and priority
Either all of the pricing rules identified for an item should have
'apply multiple' enabled. If not, Priority is applied and only the
highest priority is applied

(cherry picked from commit 5e875b238c)
2024-06-23 00:02:10 +00:00
ruthra kumar
c45ce75f57 refactor(test): make and use a different party for subscription
(cherry picked from commit 3fabf4aaa4)
2024-06-22 23:58:11 +00:00
ruthra kumar
6dbe820416 refactor(test): enfore use of customer/supplier master
While using advance accounts in foreign currency, always use
Customer/Supplier master to maintain them

(cherry picked from commit 64e63887be)
2024-06-22 23:58:11 +00:00
ruthra kumar
3b15708f18 fix(test): incorrect field for customer default billing currency
(cherry picked from commit c696d13a5e)
2024-06-22 23:58:10 +00:00
ruthra kumar
a1ebd16284 chore: remove dead code
(cherry picked from commit 7e318c0132)
2024-06-22 23:58:10 +00:00
ruthra kumar
d1679d4663 chore: fix test data
(cherry picked from commit 07d59443b7)
2024-06-22 23:58:10 +00:00
ruthra kumar
2bd10d388f refactor: better error messages
(cherry picked from commit 83ff94b9b8)
2024-06-22 23:58:10 +00:00
ruthra kumar
545d0b9730 refactor: validation in Supplier Group
(cherry picked from commit 107b614518)
2024-06-22 23:58:10 +00:00
ruthra kumar
4bde345399 refactor: validation in customer group
(cherry picked from commit 4f9a228175)
2024-06-22 23:58:10 +00:00
ruthra kumar
78ad3f6cdc refactor: validation to force accounts to be on same currency
(cherry picked from commit 0f0b4d88bc)
2024-06-22 23:58:10 +00:00
ruthra kumar
88e1c28e7d test: advance against purchase invoice
(cherry picked from commit 90c84822d0)
2024-06-22 23:58:09 +00:00
ruthra kumar
259d7cde39 test: exc gain/loss booking on advances under asset/liability
(cherry picked from commit 827d67d02f)
2024-06-22 23:58:09 +00:00
ruthra kumar
6ebd4ba2cc refactor(test): simpler create_account helper method
(cherry picked from commit 475e0ddeee)
2024-06-22 23:58:09 +00:00
ruthra kumar
47071cec5d refactor: for advances uses the party account in references table
(cherry picked from commit 7dce6e03c7)
2024-06-22 23:58:09 +00:00
ruthra kumar
5d2f296ca8 refactor: convert amount to base currency for advances
(cherry picked from commit c9ede1ffbe)
2024-06-22 23:58:09 +00:00
ruthra kumar
199a64937b chore: remove validation on payment entry
(cherry picked from commit e7740033ca)
2024-06-22 23:58:09 +00:00
Sagar Vora
a535933a09 Merge pull request #41995 from frappe/mergify/bp/version-15-hotfix/pr-41993
perf: dont run queries unnecessarily, improved filters (backport #41993)
2024-06-22 21:51:27 +05:30
Sagar Vora
b59c91a341 perf: dont run queries unnecessarily, improved filters (#41993)
* perf: dont run queries unnecessarily, improved filters

* perf: dont run query if `in` filter is empty

(cherry picked from commit ac6d85aed6)
2024-06-22 15:58:00 +00:00
Frappe PR Bot
e99ef572a2 chore(release): Bumped to Version 15.28.0
# [15.28.0](https://github.com/frappe/erpnext/compare/v15.27.7...v15.28.0) (2024-06-22)

### Features

* default account head for operating cost (backport [#41985](https://github.com/frappe/erpnext/issues/41985)) ([#41987](https://github.com/frappe/erpnext/issues/41987)) ([6f3a6ca](6f3a6ca2ca))
2024-06-22 05:49:34 +00:00
rohitwaghchaure
ea9095c824 Merge pull request #41991 from frappe/mergify/bp/version-15/pr-41987
feat: default account head for operating cost (backport #41985) (backport #41987)
2024-06-22 11:18:18 +05:30
mergify[bot]
6f3a6ca2ca feat: default account head for operating cost (backport #41985) (#41987)
* feat: default account head for operating cost (#41985)

(cherry picked from commit fd7666a029)

# Conflicts:
#	erpnext/manufacturing/doctype/bom/bom.py
#	erpnext/setup/doctype/company/company.json

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit 44c16713ba)
2024-06-22 05:12:33 +00:00
mergify[bot]
44c16713ba feat: default account head for operating cost (backport #41985) (#41987)
* feat: default account head for operating cost (#41985)

(cherry picked from commit fd7666a029)

# Conflicts:
#	erpnext/manufacturing/doctype/bom/bom.py
#	erpnext/setup/doctype/company/company.json

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-22 10:39:53 +05:30
Khushi Rawat
8d299d1495 Merge pull request #41989 from khushi8112/rename-number-of-depreciation-v15-hotfix
refactor: renamed number of depreciations booked to opening booked depreciations
2024-06-22 01:19:16 +05:30
Khushi Rawat
f9574366b5 chore: added nosemgrep for security checks 2024-06-22 01:01:03 +05:30
Khushi Rawat
7b5d5043c5 fix: reload asset when creating asset depreciation 2024-06-22 00:57:00 +05:30
Khushi Rawat
ca343f12d8 refactor: renamed number of depreciations booked to opening booked de… (#41515)
* refactor: renamed number of depreciations booked to opening booked depreciations

* feat: introduced new field for showing total number of booked depreciations
2024-06-21 19:53:46 +05:30
ruthra kumar
9515b96049 Merge pull request #41984 from frappe/mergify/bp/version-15-hotfix/pr-41981
fix: incorrect against_account upon reposting (backport #41981)
2024-06-21 19:10:33 +05:30
mergify[bot]
9945a90b3f fix: decimal issue in pick list (backport #41972) (#41982)
fix: decimal issue in pick list (#41972)

(cherry picked from commit 21adc7b63e)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-21 18:26:05 +05:30
ruthra kumar
a41577a1cd fix: incorrect against_account upon reposting
(cherry picked from commit 20c4098399)
2024-06-21 12:30:39 +00:00
ruthra kumar
657daf9a43 Merge pull request #41977 from frappe/mergify/bp/version-15-hotfix/pr-41956
fix: incorrect discount on other item (backport #41956)
2024-06-21 15:55:22 +05:30
ruthra kumar
77f4199e2a fix: incorrect discount on other item
When discount is applied on other item, don't update `discount_amount`
as the amount is calculated for current item

(cherry picked from commit 654764e398)
2024-06-21 10:23:42 +00:00
Raffael Meyer
7b322e7437 Merge pull request #41441 from frappe/mergify/bp/version-15-hotfix/pr-41384
fix(SO, DN): only show permitted actions (backport #41384)
2024-06-20 15:58:39 +02:00
barredterra
21802396ce fix: move condition for shipment 2024-06-20 14:32:01 +02:00
barredterra
9bad219f0a refactor: remove use of can_create for Payment Request (#41647)
(cherry picked from commit 47bc5691a1)
2024-06-20 14:28:24 +02:00
barredterra
ddbf9317a1 Merge remote-tracking branch 'upstream/version-15-hotfix' into mergify/bp/version-15-hotfix/pr-41384 2024-06-20 14:27:08 +02:00
mergify[bot]
48dc24b9bf fix: add string for translation (backport #41903) (#41963)
fix: add string for translation (#41903)

fix: add string for translation
(cherry picked from commit f28c692dca)

Co-authored-by: mahsem <137205921+mahsem@users.noreply.github.com>
2024-06-20 17:05:39 +05:30
mergify[bot]
c10b123a81 fix: do not show zero balance stock items in stock balance report (backport #41958) (#41961)
fix: do not show zero balance stock in stock balance

(cherry picked from commit 7f7b363d48)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2024-06-20 17:04:58 +05:30
Frappe PR Bot
fa6a479ed9 chore(release): Bumped to Version 15.27.7
## [15.27.7](https://github.com/frappe/erpnext/compare/v15.27.6...v15.27.7) (2024-06-19)

### Bug Fixes

* add LCV flag to determine negative expenses ([83ccb32](83ccb32be6))
* add strings for translation in pos_item_cart.js ([f4852d4](f4852d472a))
* add test case for update received qty in MR ([858058c](858058c9e1))
* add test case for update received qty in MR ([aaee028](aaee02835b))
* add test case for update received qty in MR ([125d97a](125d97a182))
* add test case for update received qty in MR - import sorter ([084658e](084658e8ff))
* add test case for update received qty in MR - import sorter ([21596c6](21596c6c23))
* allow Employee role to select Department (backport [#41877](https://github.com/frappe/erpnext/issues/41877)) ([#41881](https://github.com/frappe/erpnext/issues/41881)) ([3bc5076](3bc5076dfc))
* batch qty in the dropdown field ([67d1709](67d1709ef8))
* consistent query field name in item wise purchase register with item wise sales register ([a43c181](a43c181673))
* download materials request plan in PP ([7193633](7193633773))
* download materials request plan in PP ([ef2a6c7](ef2a6c788e))
* download materials request plan in PP -prettier ([3370825](337082512e))
* download materials request plan in production plan ([9cb7c27](9cb7c279a4))
* duplicate rows fetching in RFQ ([c159e3b](c159e3b06f))
* handle NoneType error where customer details are not available in sales register ([ceafa0c](ceafa0ce28))
* incorrect batch return from sales return ([b64b433](b64b4330a3))
* item_code filter in item-wise sales-purchase register ([98c8fed](98c8feded0))
* migrate lead notes ([5663432](5663432bd8))
* only show user and date if available ([24ee765](24ee765e6a))
* parameters for PI references ([8618402](8618402829))
* regional overide for updating item valution ([5ea2cdc](5ea2cdcaad))
* reposting validation related PCV ([794ade8](794ade832f))
* reset perpetual inventory flag after test ([4c11f2b](4c11f2bff2))
* return from accepted and rejected warehouse at a same time not working ([6c57971](6c57971abc))
* update received qty in MR on purchase invoice submit with update stock ([7e9f6ae](7e9f6aee58))
* update received qty in MR on purchase invoice submit with update stock ([4551b4b](4551b4b638))
* use invoice outstanding on Dunning ([#41817](https://github.com/frappe/erpnext/issues/41817)) ([04f0c96](04f0c96af7))
2024-06-19 06:28:10 +00:00
ruthra kumar
a60879fec0 Merge pull request #41941 from frappe/version-15-hotfix
chore: release v15
2024-06-19 11:56:54 +05:30
ruthra kumar
cd1db37c74 chore: fix linter 2024-06-19 11:25:02 +05:30
ruthra kumar
e3608f285f Merge branch 'version-15' into version-15-hotfix 2024-06-19 11:02:14 +05:30
Raffael Meyer
c110a9f2ad Merge pull request #41945 from frappe/mergify/bp/version-15-hotfix/pr-41421
fix: migrate lead notes (backport #41421)
2024-06-19 01:17:52 +02:00
barredterra
24ee765e6a fix: only show user and date if available
(cherry picked from commit 895aede590)
2024-06-18 22:57:25 +00:00
barredterra
5663432bd8 fix: migrate lead notes
(cherry picked from commit 382d0ff453)
2024-06-18 22:57:24 +00:00
ruthra kumar
d64432c3f4 Merge pull request #41938 from frappe/mergify/bp/version-15-hotfix/pr-41900
refactor: ignore unreconcile doc for PO and SO on cancel/delete (backport #41900)
2024-06-18 10:54:51 +05:30
ljain112
7cc5579eca refactor: ignore unreconcile doc for PO and SO on cancel/delete
(cherry picked from commit b618d685c6)
2024-06-18 04:58:09 +00:00
rohitwaghchaure
60b16a4b1e Merge pull request #41935 from frappe/mergify/bp/version-15-hotfix/pr-41931
fix: reposting validation related PCV (backport #41931)
2024-06-18 09:41:43 +05:30
mergify[bot]
ff8027b8eb Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-41384 2024-06-17 17:46:28 +00:00
Rohit Waghchaure
794ade832f fix: reposting validation related PCV
(cherry picked from commit 194f1dc674)
2024-06-17 12:21:59 +00:00
rohitwaghchaure
75edb7708f Merge pull request #41932 from frappe/mergify/bp/version-15-hotfix/pr-41907
fix: add strings for translation in pos_item_cart.js (backport #41907)
2024-06-17 17:49:24 +05:30
mahsem
f4852d472a fix: add strings for translation in pos_item_cart.js
fix: add strings for translation in pos_item_cart.js
(cherry picked from commit 2fb3e5da4a)
2024-06-17 11:40:49 +00:00
rohitwaghchaure
db7fb7d7b1 Merge pull request #41928 from frappe/mergify/bp/version-15-hotfix/pr-41927
fix: consistent query field name in item wise purchase register with item wise sales register (backport #41927)
2024-06-17 16:53:28 +05:30
rohitwaghchaure
ae0725d55a Merge pull request #41929 from frappe/mergify/bp/version-15-hotfix/pr-41920
fix: handle NoneType error where customer details are not available in sales register (backport #41920)
2024-06-17 16:52:59 +05:30
Nihantra C. Patel
d48a2c9f8e fix: correcting balance sheet calculation for zero liabilities and equity 2024-06-17 15:14:59 +05:30
Nihantra C. Patel
0bab609a6f fix: completed DC will not appear in a delivery trip 2024-06-17 15:09:31 +05:30
ljain112
ceafa0ce28 fix: handle NoneType error where customer details are not available in sales register
(cherry picked from commit f876fec6f5)
2024-06-17 09:29:38 +00:00
ljain112
a43c181673 fix: consistent query field name in item wise purchase register with item wise sales register
(cherry picked from commit 6d539e0fc0)
2024-06-17 09:28:27 +00:00
rohitwaghchaure
ae83236b7c Merge pull request #41926 from frappe/mergify/bp/version-15-hotfix/pr-41921
fix: item_code filter in item-wise sales-purchase register (backport #41921)
2024-06-17 14:56:21 +05:30
Nihantra Patel
98c8feded0 fix: item_code filter in item-wise sales-purchase register
(cherry picked from commit 757aef3972)
2024-06-17 08:32:26 +00:00
rohitwaghchaure
5a2005395b Merge pull request #41918 from frappe/mergify/bp/version-15-hotfix/pr-41898
fix: update received qty in MR on purchase invoice submit with update stock (backport #41898)
2024-06-17 13:59:54 +05:30
rohitwaghchaure
ecb889707d Merge pull request #41924 from frappe/mergify/bp/version-15-hotfix/pr-41922
fix: duplicate rows fetching in RFQ (backport #41922)
2024-06-17 13:58:15 +05:30
ruthra kumar
e3539ac2de Merge pull request #41913 from frappe/mergify/bp/version-15-hotfix/pr-40187
fix: valuation tax entries on LCV after billing PR (backport #40187)
2024-06-17 13:53:17 +05:30
Rohit Waghchaure
c159e3b06f fix: duplicate rows fetching in RFQ
(cherry picked from commit 555510c128)
2024-06-17 07:36:59 +00:00
Nihantra C. Patel
7e9f6aee58 fix: update received qty in MR on purchase invoice submit with update stock 2024-06-17 11:39:42 +05:30
Nihantra Patel
084658e8ff fix: add test case for update received qty in MR - import sorter
(cherry picked from commit 77959596db)
2024-06-17 06:06:35 +00:00
Nihantra Patel
21596c6c23 fix: add test case for update received qty in MR - import sorter
(cherry picked from commit 73f22ba9a0)
2024-06-17 06:06:35 +00:00
Nihantra Patel
858058c9e1 fix: add test case for update received qty in MR
(cherry picked from commit 62e4e88f1d)
2024-06-17 06:06:34 +00:00
Nihantra Patel
aaee02835b fix: add test case for update received qty in MR
(cherry picked from commit cff1050159)
2024-06-17 06:06:34 +00:00
Nihantra Patel
125d97a182 fix: add test case for update received qty in MR
(cherry picked from commit ebb0cef601)
2024-06-17 06:06:34 +00:00
Nihantra Patel
4551b4b638 fix: update received qty in MR on purchase invoice submit with update stock
(cherry picked from commit 13cb53fa89)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
2024-06-17 06:06:34 +00:00
rohitwaghchaure
9771bbdb75 Merge pull request #41917 from frappe/mergify/bp/version-15-hotfix/pr-41916
fix: incorrect batch return from sales return (backport #41916)
2024-06-17 11:35:24 +05:30
Rohit Waghchaure
b64b4330a3 fix: incorrect batch return from sales return
(cherry picked from commit 317047c808)
2024-06-17 05:47:25 +00:00
ruthra kumar
b577d95ecd chore: resolve conflicts 2024-06-16 20:50:03 +05:30
Gursheen Anand
248e9cac71 chore: resolve conflicts
(cherry picked from commit 54a58e9205)

# Conflicts:
#	erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
2024-06-15 15:12:22 +00:00
Gursheen Anand
4c11f2bff2 fix: reset perpetual inventory flag after test
(cherry picked from commit 0b36cbe307)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
2024-06-15 15:12:22 +00:00
Gursheen Anand
8618402829 fix: parameters for PI references
(cherry picked from commit 8b3d46610e)

# Conflicts:
#	erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
2024-06-15 15:12:22 +00:00
Gursheen Anand
c7c9d33954 test: LCV entries after billing
(cherry picked from commit 53642e7417)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
2024-06-15 15:12:22 +00:00
Gursheen Anand
83ccb32be6 fix: add LCV flag to determine negative expenses
(cherry picked from commit baa3fee1bf)

# Conflicts:
#	erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
2024-06-15 15:12:21 +00:00
Smit Vora
69de359728 Merge pull request #41890 from frappe/mergify/bp/version-15-hotfix/pr-41842
fix: regional overide for updating item valution (backport #41842)
2024-06-15 09:16:01 +05:30
ljain112
5ea2cdcaad fix: regional overide for updating item valution
(cherry picked from commit 1a10f0bcbd)
2024-06-13 08:09:51 +00:00
rohitwaghchaure
ac2e760d81 Merge pull request #41888 from frappe/mergify/bp/version-15-hotfix/pr-41886
fix: download materials request plan in production plan (backport #41886)
2024-06-13 11:23:59 +05:30
Kishan0330
164973a42c refactor: change warehousesData variable name
(cherry picked from commit f4e369977a)
2024-06-13 05:45:17 +00:00
Kishan0330
9cb7c279a4 fix: download materials request plan in production plan
(cherry picked from commit 6e55651795)
2024-06-13 05:45:17 +00:00
Frappe PR Bot
9ccfbe1bf5 chore(release): Bumped to Version 15.27.6
## [15.27.6](https://github.com/frappe/erpnext/compare/v15.27.5...v15.27.6) (2024-06-12)

### Bug Fixes

* batch qty in the dropdown field ([2c9b390](2c9b3908dd))
* return from accepted and rejected warehouse at a same time not working ([00b7c49](00b7c49b4b))
2024-06-12 11:54:13 +00:00
rohitwaghchaure
5004d95f59 Merge pull request #41873 from frappe/mergify/bp/version-15/pr-41868
fix: batch qty in the dropdown field (backport #41865) (backport #41868)
2024-06-12 17:22:57 +05:30
rohitwaghchaure
2990b4ec85 Merge pull request #41875 from frappe/mergify/bp/version-15/pr-41874
fix: return from accepted and rejected warehouse at a same time not working (backport #41872) (backport #41874)
2024-06-12 17:22:39 +05:30
mergify[bot]
3bc5076dfc fix: allow Employee role to select Department (backport #41877) (#41881)
* fix: allow Employee role to select Department (#41877)

(cherry picked from commit 56082f5a29)

# Conflicts:
#	erpnext/setup/doctype/department/department.json

* chore: fix conflicts

---------

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2024-06-12 17:19:36 +05:30
Frappe PR Bot
b34191e81f chore(release): Bumped to Version 15.27.5
## [15.27.5](https://github.com/frappe/erpnext/compare/v15.27.4...v15.27.5) (2024-06-12)

### Bug Fixes

* use invoice outstanding on Dunning ([#41817](https://github.com/frappe/erpnext/issues/41817)) ([a89b4f4](a89b4f49fe))
2024-06-12 11:32:40 +00:00
ruthra kumar
59be55fd8a Merge pull request #41879 from frappe/mergify/bp/version-15/pr-41817
fix: use invoice outstanding on Dunning (backport #41817)
2024-06-12 17:01:13 +05:30
ruthra kumar
a89b4f49fe fix: use invoice outstanding on Dunning (#41817)
(cherry picked from commit cf0a29b05f)
2024-06-12 11:13:34 +00:00
ruthra kumar
2f5533c676 Merge pull request #41876 from frappe/mergify/bp/version-15-hotfix/pr-41817
fix: use invoice outstanding on Dunning (backport #41817)
2024-06-12 16:42:08 +05:30
ruthra kumar
04f0c96af7 fix: use invoice outstanding on Dunning (#41817)
(cherry picked from commit cf0a29b05f)
2024-06-12 10:54:57 +00:00
Rohit Waghchaure
00b7c49b4b fix: return from accepted and rejected warehouse at a same time not working
(cherry picked from commit 17731f09ef)
(cherry picked from commit 6c57971abc)
2024-06-12 10:51:44 +00:00
rohitwaghchaure
6e9ad4ddd2 Merge pull request #41874 from frappe/mergify/bp/version-15-hotfix/pr-41872
fix: return from accepted and rejected warehouse at a same time not working (backport #41872)
2024-06-12 16:20:15 +05:30
Rohit Waghchaure
6c57971abc fix: return from accepted and rejected warehouse at a same time not working
(cherry picked from commit 17731f09ef)
2024-06-12 10:17:33 +00:00
Rohit Waghchaure
2c9b3908dd fix: batch qty in the dropdown field
(cherry picked from commit eb426c69fe)
(cherry picked from commit 67d1709ef8)
2024-06-12 10:17:32 +00:00
rohitwaghchaure
c04ba3864e Merge pull request #41868 from frappe/mergify/bp/version-15-hotfix/pr-41865
fix: batch qty in the dropdown field (backport #41865)
2024-06-12 15:46:06 +05:30
rohitwaghchaure
da15df1f28 Merge pull request #41869 from frappe/mergify/bp/version-15-hotfix/pr-41650
chore: typo in bom_operation.json (backport #41650)
2024-06-12 15:22:51 +05:30
rohitwaghchaure
94ef2eabb1 Merge pull request #41870 from frappe/mergify/bp/version-15-hotfix/pr-41867
fix: download materials request plan in PP (backport #41867)
2024-06-12 15:22:33 +05:30
Nihantra C. Patel
337082512e fix: download materials request plan in PP -prettier
(cherry picked from commit a1c4e0e93c)
2024-06-12 07:33:12 +00:00
Himanshu Shivhare
764235b390 chore: typo in bom_operation.json (#41650)
chore: typo in bom_operation.json
(cherry picked from commit 7ee2a19f53)
2024-06-12 07:33:11 +00:00
Nihantra C. Patel
7193633773 fix: download materials request plan in PP
(cherry picked from commit cb52b76342)
2024-06-12 07:33:11 +00:00
Nihantra C. Patel
ef2a6c788e fix: download materials request plan in PP
(cherry picked from commit f4acdd9636)
2024-06-12 07:33:11 +00:00
Rohit Waghchaure
67d1709ef8 fix: batch qty in the dropdown field
(cherry picked from commit eb426c69fe)
2024-06-12 07:32:03 +00:00
Frappe PR Bot
4d2d38cd9d chore(release): Bumped to Version 15.27.4
## [15.27.4](https://github.com/frappe/erpnext/compare/v15.27.3...v15.27.4) (2024-06-11)

### Bug Fixes

* Add additional condition application ([1fca6ea](1fca6ea5e7))
* Add posting date to key for consolidated view ([9472085](94720851c6))
* Add timestamp to key for immutable views ([9e9bc8b](9e9bc8b59c))
* asset depreciations and balances report correction (backport [#41824](https://github.com/frappe/erpnext/issues/41824)) ([#41851](https://github.com/frappe/erpnext/issues/41851)) ([28b7fad](28b7fad579))
* calculate totals and taxes ([5544309](5544309048))
* Do no apply pricing rule on qty change for mapped docs ([822bc58](822bc581f3))
* do not fetch items with no active BOM in PP (backport [#41833](https://github.com/frappe/erpnext/issues/41833)) ([#41835](https://github.com/frappe/erpnext/issues/41835)) ([30c0b2b](30c0b2bb54))
* enable no_copy for timesheet in sales invoice ([f1ad0f6](f1ad0f6f26))
* fixing Item-wise sales register ([f36db7e](f36db7ebaf))
* fixing Item-wise sales register [#41373](https://github.com/frappe/erpnext/issues/41373) ([5e0fa1b](5e0fa1b75e))
* fixing Item-wise sales register and purchase register [#41373](https://github.com/frappe/erpnext/issues/41373) ([a4b28ba](a4b28ba354))
* Item-wise Sales and Purchase register with no item codes [#41373](https://github.com/frappe/erpnext/issues/41373) ([96405e8](96405e8e49))
* stock_value_change for legacy serial nos (backport [#41825](https://github.com/frappe/erpnext/issues/41825)) ([#41826](https://github.com/frappe/erpnext/issues/41826)) ([a7971cf](a7971cf844))
* terms and conditions for material request (backport [#41834](https://github.com/frappe/erpnext/issues/41834)) ([#41837](https://github.com/frappe/erpnext/issues/41837)) ([1ead667](1ead66721d))
* typo in method - holiday list (backport [#41811](https://github.com/frappe/erpnext/issues/41811)) ([#41812](https://github.com/frappe/erpnext/issues/41812)) ([4d3e883](4d3e883130))
* valuation rate for backdated legacy serial/batches (backport [#41788](https://github.com/frappe/erpnext/issues/41788)) ([#41821](https://github.com/frappe/erpnext/issues/41821)) ([8d31243](8d31243a42))
* valuation rate for serial and batch bundle for current bundle (backport [#41850](https://github.com/frappe/erpnext/issues/41850)) ([#41860](https://github.com/frappe/erpnext/issues/41860)) ([3e4c568](3e4c568ddc))
* **Vehicle:** allow doc renaming and add test (backport [#41729](https://github.com/frappe/erpnext/issues/41729)) ([#41785](https://github.com/frappe/erpnext/issues/41785)) ([4d37739](4d37739dd3))
2024-06-11 13:18:31 +00:00
rohitwaghchaure
b87b438881 Merge pull request #41854 from frappe/version-15-hotfix
chore: release v15
2024-06-11 18:47:08 +05:30
mergify[bot]
3e4c568ddc fix: valuation rate for serial and batch bundle for current bundle (backport #41850) (#41860)
fix: valuation rate for serial and batch bundle for current bundle (#41850)

(cherry picked from commit 7249a691b3)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-11 18:29:54 +05:30
mergify[bot]
28b7fad579 fix: asset depreciations and balances report correction (backport #41824) (#41851)
fix: asset depreciations and balances report correction (#41824)

* fix: asset depreciations and balances report correction

* chore: suppress linter warnings with # nosemgrep

(cherry picked from commit 857c689405)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-11 18:18:11 +05:30
Frappe PR Bot
6157119bcf chore(release): Bumped to Version 15.27.3
## [15.27.3](https://github.com/frappe/erpnext/compare/v15.27.2...v15.27.3) (2024-06-11)

### Bug Fixes

* Add timestamp to key for immutable views ([439ef10](439ef109f3))
2024-06-11 09:50:57 +00:00
Deepesh Garg
144d7828e9 Merge pull request #41856 from frappe/mergify/bp/version-15/pr-41855
fix: Add timestamp to key for immutable views (#41852)
2024-06-11 15:17:29 +05:30
Deepesh Garg
439ef109f3 fix: Add timestamp to key for immutable views
(cherry picked from commit 6bded59f1c)
(cherry picked from commit 9e9bc8b59c)
2024-06-11 09:41:12 +00:00
Deepesh Garg
366f68e49c Merge pull request #41855 from frappe/mergify/bp/version-15-hotfix/pr-41852
fix: Add timestamp to key for immutable views (#41852)
2024-06-11 15:06:50 +05:30
Deepesh Garg
9e9bc8b59c fix: Add timestamp to key for immutable views
(cherry picked from commit 6bded59f1c)
2024-06-11 09:36:07 +00:00
ruthra kumar
75f3b47424 Merge pull request #41847 from frappe/mergify/bp/version-15-hotfix/pr-41707
refactor: add `Is opening` flag for payment entry (backport #41707)
2024-06-11 11:02:57 +05:30
ruthra kumar
acc2e88e7b Merge pull request #41846 from frappe/mergify/bp/version-15-hotfix/pr-41685
refactor: enabling partial TDS application on partial invoice (backport #41685)
2024-06-11 10:53:48 +05:30
ruthra kumar
818a553668 test: is_opening flag for advance in separate party account
(cherry picked from commit 17f968e1e1)
2024-06-11 04:57:07 +00:00
ruthra kumar
1fc802da6f refactor: restrict to 'Advance in Separate Party Account' type
(cherry picked from commit c36f0e4a33)
2024-06-11 04:57:07 +00:00
ruthra kumar
c664a27b1e refactor: is_opening in payment entry
(cherry picked from commit 05d17d0d73)
2024-06-11 04:57:07 +00:00
ruthra kumar
c0668373c7 refactor: enabling partial TDS application on partial invoice
(cherry picked from commit 091c5496b2)
2024-06-11 10:23:53 +05:30
ruthra kumar
45edc57af8 Merge pull request #41839 from frappe/mergify/bp/version-15-hotfix/pr-41793
fix: calculate totals and taxes (backport #41793)
2024-06-10 15:23:01 +05:30
Nihantra C. Patel
5544309048 fix: calculate totals and taxes
(cherry picked from commit a7ec0c1cec)
2024-06-10 09:49:03 +00:00
mergify[bot]
1ead66721d fix: terms and conditions for material request (backport #41834) (#41837)
fix: terms and conditions for material request (#41834)

(cherry picked from commit 4b026d66dc)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-10 15:17:19 +05:30
mergify[bot]
30c0b2bb54 fix: do not fetch items with no active BOM in PP (backport #41833) (#41835)
fix: do not fetch items with no active BOM in PP (#41833)

(cherry picked from commit 36413d14d8)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-10 15:16:57 +05:30
Frappe PR Bot
f2909e9784 chore(release): Bumped to Version 15.27.2
## [15.27.2](https://github.com/frappe/erpnext/compare/v15.27.1...v15.27.2) (2024-06-10)

### Bug Fixes

* Add additional condition application ([45c16f6](45c16f615c))
* fixing Item-wise sales register ([9a629f8](9a629f860c))
* fixing Item-wise sales register [#41373](https://github.com/frappe/erpnext/issues/41373) ([d75d64e](d75d64eb25))
* fixing Item-wise sales register and purchase register [#41373](https://github.com/frappe/erpnext/issues/41373) ([50ef81a](50ef81a997))
* Item-wise Sales and Purchase register with no item codes [#41373](https://github.com/frappe/erpnext/issues/41373) ([3e0123b](3e0123ba7b))
2024-06-10 04:54:40 +00:00
Deepesh Garg
cd478dd74f Merge pull request #41831 from frappe/mergify/bp/version-15/pr-41827
fix: Item-wise Sales and Purchase register with no item codes (#41424)
2024-06-10 10:23:23 +05:30
Deepesh Garg
14c98fe6f0 chore: resolve conflicts
(cherry picked from commit c29db5afcd)
2024-06-10 04:52:42 +00:00
Deepesh Garg
45c16f615c fix: Add additional condition application
(cherry picked from commit 8ec364df6f)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
(cherry picked from commit 1fca6ea5e7)
2024-06-10 04:52:42 +00:00
Deepesh Garg
7ca848c2db chore: update condition queries in qb
(cherry picked from commit d2af36e1eb)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
#	erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
(cherry picked from commit 209af58f83)
2024-06-10 04:52:41 +00:00
Poorvi-R-Bhat
d75d64eb25 fix: fixing Item-wise sales register #41373
(cherry picked from commit eafa88b8e9)

# Conflicts:
#	erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
(cherry picked from commit 5e0fa1b75e)
2024-06-10 04:52:41 +00:00
Poorvi-R-Bhat
50ef81a997 fix: fixing Item-wise sales register and purchase register #41373
(cherry picked from commit 76073ae228)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
(cherry picked from commit a4b28ba354)
2024-06-10 04:52:41 +00:00
Poorvi-R-Bhat
3e0123ba7b fix: Item-wise Sales and Purchase register with no item codes #41373
(cherry picked from commit 1b45ecfcae)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
#	erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
(cherry picked from commit 96405e8e49)
2024-06-10 04:52:41 +00:00
Poorvi
9a629f860c fix: fixing Item-wise sales register
(cherry picked from commit c90185f533)
(cherry picked from commit f36db7ebaf)
2024-06-10 04:52:41 +00:00
Deepesh Garg
873a0dd844 Merge pull request #41827 from frappe/mergify/bp/version-15-hotfix/pr-41424
fix: Item-wise Sales and Purchase register with no item codes (#41424)
2024-06-09 20:19:33 +05:30
Deepesh Garg
c29db5afcd chore: resolve conflicts 2024-06-09 20:02:39 +05:30
Deepesh Garg
1fca6ea5e7 fix: Add additional condition application
(cherry picked from commit 8ec364df6f)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
2024-06-09 06:13:28 +00:00
Deepesh Garg
209af58f83 chore: update condition queries in qb
(cherry picked from commit d2af36e1eb)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
#	erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
2024-06-09 06:13:28 +00:00
Poorvi-R-Bhat
5e0fa1b75e fix: fixing Item-wise sales register #41373
(cherry picked from commit eafa88b8e9)

# Conflicts:
#	erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
2024-06-09 06:13:28 +00:00
Poorvi-R-Bhat
a4b28ba354 fix: fixing Item-wise sales register and purchase register #41373
(cherry picked from commit 76073ae228)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
2024-06-09 06:13:27 +00:00
Poorvi-R-Bhat
96405e8e49 fix: Item-wise Sales and Purchase register with no item codes #41373
(cherry picked from commit 1b45ecfcae)

# Conflicts:
#	erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
#	erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
2024-06-09 06:13:27 +00:00
Poorvi
f36db7ebaf fix: fixing Item-wise sales register
(cherry picked from commit c90185f533)
2024-06-09 06:13:26 +00:00
mergify[bot]
a7971cf844 fix: stock_value_change for legacy serial nos (backport #41825) (#41826)
fix: stock_value_change for legacy serial nos (#41825)

(cherry picked from commit f6a4d391c0)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-07 23:05:50 +05:30
ruthra kumar
3f1d97259a Merge pull request #41823 from ruthra-kumar/enable_no_copy_for_timesheet
fix: enable no copy for timesheet in Sales Invoice
2024-06-07 20:24:44 +05:30
mergify[bot]
8d31243a42 fix: valuation rate for backdated legacy serial/batches (backport #41788) (#41821)
fix: valuation rate for backdated legacy serial/batches (#41788)

(cherry picked from commit 3956354e08)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-07 18:25:58 +05:30
ruthra kumar
f1ad0f6f26 fix: enable no_copy for timesheet in sales invoice 2024-06-07 16:50:21 +05:30
mergify[bot]
4d37739dd3 fix(Vehicle): allow doc renaming and add test (backport #41729) (#41785)
* fix(Vehicle): allow doc renaming and add test (#41729)

fix(Vehicle): allow renaming doc and add test

(cherry picked from commit c76f466528)

# Conflicts:
#	erpnext/setup/doctype/vehicle/vehicle.json

* fix: resolve conflicts for backporting

---------

Co-authored-by: Viny Selopal <52369157+vinyselopal@users.noreply.github.com>
Co-authored-by: Viny Selopal <viny0698@gmail.com>
2024-06-07 15:45:50 +05:30
mergify[bot]
4d3e883130 fix: typo in method - holiday list (backport #41811) (#41812)
fix: typo in method - holiday list (#41811)

(cherry picked from commit 699cfd85c6)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-06-06 19:46:02 +05:30
Frappe PR Bot
df4307fef8 chore(release): Bumped to Version 15.27.1
## [15.27.1](https://github.com/frappe/erpnext/compare/v15.27.0...v15.27.1) (2024-06-06)

### Bug Fixes

* Add posting date to key for consolidated view ([edd4e67](edd4e674d3))
2024-06-06 12:20:49 +00:00
Deepesh Garg
6039fb75e7 Merge pull request #41810 from frappe/mergify/bp/version-15/pr-41809
fix: Add posting date to key for consolidated view (#41808)
2024-06-06 17:49:05 +05:30
Deepesh Garg
edd4e674d3 fix: Add posting date to key for consolidated view
(cherry picked from commit 2c164b47a1)
(cherry picked from commit 94720851c6)
2024-06-06 12:18:29 +00:00
Deepesh Garg
b4838ab098 Merge pull request #41802 from frappe/mergify/bp/version-15-hotfix/pr-41727
fix: Do no apply pricing rule on qty change for mapped docs (#41727)
2024-06-06 17:48:25 +05:30
Deepesh Garg
3507d2e37d Merge pull request #41809 from frappe/mergify/bp/version-15-hotfix/pr-41808
fix: Add posting date to key for consolidated view (#41808)
2024-06-06 17:47:35 +05:30
Deepesh Garg
94720851c6 fix: Add posting date to key for consolidated view
(cherry picked from commit 2c164b47a1)
2024-06-06 12:15:12 +00:00
ruthra kumar
08c06d1142 Merge pull request #41807 from frappe/mergify/bp/version-15-hotfix/pr-41804
chore: repost settings permission overhaul (backport #41804)
2024-06-06 16:34:28 +05:30
ruthra kumar
0e562e9933 chore: repost settings permission overhaul
(cherry picked from commit 458d8f5ed8)
2024-06-06 16:14:27 +05:30
Deepesh Garg
822bc581f3 fix: Do no apply pricing rule on qty change for mapped docs
(cherry picked from commit 2b1242170c)
2024-06-06 03:44:14 +00:00
Frappe PR Bot
dcdaa02173 chore(release): Bumped to Version 15.27.0
# [15.27.0](https://github.com/frappe/erpnext/compare/v15.26.1...v15.27.0) (2024-06-05)

### Bug Fixes

* Auditor permissions (backport [#41659](https://github.com/frappe/erpnext/issues/41659)) ([#41661](https://github.com/frappe/erpnext/issues/41661)) ([27f3981](27f3981269))
* bank account no fieldname mismatch (backport [#41778](https://github.com/frappe/erpnext/issues/41778)) ([#41783](https://github.com/frappe/erpnext/issues/41783)) ([b94a6f2](b94a6f2d5c))
* batch selection issue (backport [#41692](https://github.com/frappe/erpnext/issues/41692)) ([#41693](https://github.com/frappe/erpnext/issues/41693)) ([24775db](24775db97e))
* **Company:** Allow Equity type account in unrealised exchange gain/loss account (backport [#41740](https://github.com/frappe/erpnext/issues/41740)) ([#41747](https://github.com/frappe/erpnext/issues/41747)) ([460ee5d](460ee5d542))
* condition filter for transaction pricing rule ([e493b11](e493b11ae3))
* convert percentage from str to float (backport [#41766](https://github.com/frappe/erpnext/issues/41766)) ([#41776](https://github.com/frappe/erpnext/issues/41776)) ([cd0852f](cd0852f05d))
* Copy depreciation schedule on asset split only if it exists (backport [#41775](https://github.com/frappe/erpnext/issues/41775)) ([#41784](https://github.com/frappe/erpnext/issues/41784)) ([03bf480](03bf48032e))
* filtered out data having none values in date field (backport [#41457](https://github.com/frappe/erpnext/issues/41457)) ([#41765](https://github.com/frappe/erpnext/issues/41765)) ([97b1b7f](97b1b7f842))
* Filters in account balance report ([0b9d89b](0b9d89b966))
* French chart of account the 4191 code must be of type Income Account ([797b718](797b718e5a))
* get assets received but not billed account only if any asset item is received (backport [#41734](https://github.com/frappe/erpnext/issues/41734)) ([#41735](https://github.com/frappe/erpnext/issues/41735)) ([638c944](638c94451e))
* Ignore disabling default currency field while creating new company (backport [#41699](https://github.com/frappe/erpnext/issues/41699)) ([#41761](https://github.com/frappe/erpnext/issues/41761)) ([dc922ab](dc922abfbe))
* incorrect accumulated depr amount in asset depr ledger (backport [#41654](https://github.com/frappe/erpnext/issues/41654)) ([#41763](https://github.com/frappe/erpnext/issues/41763)) ([a93cd02](a93cd02d54))
* incorrect batch selection while sales return (backport [#41768](https://github.com/frappe/erpnext/issues/41768)) ([#41772](https://github.com/frappe/erpnext/issues/41772)) ([95c0dc9](95c0dc9b38))
* key error for stock ledger report (backport [#41700](https://github.com/frappe/erpnext/issues/41700)) ([#41703](https://github.com/frappe/erpnext/issues/41703)) ([b22d714](b22d714103))
* link opportunity in prospect after creating opportunity from prospect (backport [#41769](https://github.com/frappe/erpnext/issues/41769)) ([#41777](https://github.com/frappe/erpnext/issues/41777)) ([d30aee5](d30aee5dd6))
* local var referenced before assignment (backport [#41780](https://github.com/frappe/erpnext/issues/41780)) ([#41782](https://github.com/frappe/erpnext/issues/41782)) ([3777cae](3777cae860))
* **minor:** corrected wrong filter condition (backport [#41755](https://github.com/frappe/erpnext/issues/41755)) ([#41762](https://github.com/frappe/erpnext/issues/41762)) ([a67fa68](a67fa6863e))
* payment term when creating PO from SO (backport [#41376](https://github.com/frappe/erpnext/issues/41376)) ([#41744](https://github.com/frappe/erpnext/issues/41744)) ([806ff5b](806ff5bc19))
* Select both account number and company in the account form (backport [#41731](https://github.com/frappe/erpnext/issues/41731)) ([#41737](https://github.com/frappe/erpnext/issues/41737)) ([c5d72cd](c5d72cd934))
* show material to supplier button (backport [#41686](https://github.com/frappe/erpnext/issues/41686)) ([#41688](https://github.com/frappe/erpnext/issues/41688)) ([1a24914](1a24914aed))
* **stock settings:** Allowed any number in stock frozen upto days field (backport [#41736](https://github.com/frappe/erpnext/issues/41736)) ([#41749](https://github.com/frappe/erpnext/issues/41749)) ([278682f](278682f4df))
* test for pricing rule transaction with cond ([0823de8](0823de86ad))
* Transaction currency value in Journal Entry (backport [#41717](https://github.com/frappe/erpnext/issues/41717)) ([#41720](https://github.com/frappe/erpnext/issues/41720)) ([77f58ca](77f58caa93))
* TypeError: 'float' object is not iterable (backport [#41758](https://github.com/frappe/erpnext/issues/41758)) ([#41764](https://github.com/frappe/erpnext/issues/41764)) ([12addb7](12addb7565))
* Use full name instead of abbreviation ([#41759](https://github.com/frappe/erpnext/issues/41759)) ([5448d5d](5448d5d1cb))
* work order created message pops up if no items are selected (backport [#41677](https://github.com/frappe/erpnext/issues/41677)) ([#41682](https://github.com/frappe/erpnext/issues/41682)) ([4e9faf6](4e9faf6ad6))

### Features

* optional to reconcile all serial nos / batches in stock reconciliation (backport [#41696](https://github.com/frappe/erpnext/issues/41696)) ([#41713](https://github.com/frappe/erpnext/issues/41713)) ([38249f4](38249f4170))
2024-06-05 01:20:36 +00:00
ruthra kumar
cd511c5277 Merge pull request #41773 from frappe/version-15-hotfix
chore: release v15
2024-06-05 06:49:10 +05:30
mergify[bot]
03bf48032e fix: Copy depreciation schedule on asset split only if it exists (backport #41775) (#41784)
fix: Copy depreciation schedule on asset split only if it exists (#41775)

(cherry picked from commit 689e1cfc23)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 22:25:40 +05:30
mergify[bot]
b94a6f2d5c fix: bank account no fieldname mismatch (backport #41778) (#41783)
fix: bank account no fieldname mismatch (#41778)

(cherry picked from commit d163dbec7d)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 22:25:28 +05:30
mergify[bot]
3777cae860 fix: local var referenced before assignment (backport #41780) (#41782)
fix: local var referenced before assignment (#41780)

(cherry picked from commit 4ff3e6caaa)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 22:25:20 +05:30
mergify[bot]
a67fa6863e fix(minor): corrected wrong filter condition (backport #41755) (#41762)
* fix(minor): corrected wrong filter condition (#41755)

(cherry picked from commit 60eb03a6c6)

# Conflicts:
#	erpnext/assets/report/fixed_asset_register/fixed_asset_register.py

* fix: resolved conflict

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 21:53:28 +05:30
mergify[bot]
cd0852f05d fix: convert percentage from str to float (backport #41766) (#41776)
fix: convert percentage from str to float (#41766)

(cherry picked from commit 71f5470dfd)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 21:50:28 +05:30
mergify[bot]
d30aee5dd6 fix: link opportunity in prospect after creating opportunity from prospect (backport #41769) (#41777)
fix: link opportunity in prospect after creating opportunity from prospect (#41769)

(cherry picked from commit 12e48f0b63)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 21:50:18 +05:30
mergify[bot]
12addb7565 fix: TypeError: 'float' object is not iterable (backport #41758) (#41764)
* fix: TypeError: 'float' object is not iterable (#41758)

(cherry picked from commit cf508ce1ed)

# Conflicts:
#	erpnext/manufacturing/doctype/bom_creator/bom_creator.py
#	erpnext/public/js/bom_configurator/bom_configurator.bundle.js

* chore: fix conflicts

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-04 14:54:34 +05:30
mergify[bot]
95c0dc9b38 fix: incorrect batch selection while sales return (backport #41768) (#41772)
fix: incorrect batch selection while sales return (#41768)

(cherry picked from commit cb6d8afa26)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-04 14:54:20 +05:30
mergify[bot]
97b1b7f842 fix: filtered out data having none values in date field (backport #41457) (#41765)
* fix: filtered out data having none values in date field

(cherry picked from commit 3bd455ac85)

* style: code optimization

(cherry picked from commit a36b7fb95a)

---------

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-04 12:21:16 +05:30
mergify[bot]
27f3981269 fix: Auditor permissions (backport #41659) (#41661)
* fix: allow Auditor to select a company

(cherry picked from commit 06401cc84f)

* fix: allow Auditor to read a Fiscal Year

(cherry picked from commit eaa4efbc45)

---------

Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
2024-06-04 12:19:36 +05:30
mergify[bot]
77f58caa93 fix: Transaction currency value in Journal Entry (backport #41717) (#41720)
fix: Transaction currency value in Journal Entry

(cherry picked from commit 169d77da54)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2024-06-04 12:18:28 +05:30
mergify[bot]
a93cd02d54 fix: incorrect accumulated depr amount in asset depr ledger (backport #41654) (#41763)
fix: incorrect accumulated depr amount in asset depr ledger (#41654)

* fix: incorrect accumulated depr amount in asset depr ledger

* refactor: depreciation amount retrieval with query builder

* style: apply formatting changes from pre-commit

(cherry picked from commit a8fc32dc32)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-06-04 12:03:55 +05:30
mergify[bot]
dc922abfbe fix: Ignore disabling default currency field while creating new company (backport #41699) (#41761)
fix: Ignore disabling default currency field while creating new company (#41699)

(cherry picked from commit 80f6228d45)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 11:55:35 +05:30
Nabin Hait
5448d5d1cb fix: Use full name instead of abbreviation (#41759) 2024-06-04 11:41:30 +05:30
mergify[bot]
278682f4df fix(stock settings): Allowed any number in stock frozen upto days field (backport #41736) (#41749)
fix(stock settings): Allowed any number in stock frozen upto days field (#41736)

(cherry picked from commit 740c495014)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-04 11:22:32 +05:30
mergify[bot]
460ee5d542 fix(Company): Allow Equity type account in unrealised exchange gain/loss account (backport #41740) (#41747)
fix(Company): Allow Equity type account in unrealised exchange gain/loss account (#41740)

(cherry picked from commit d30c797d24)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-03 18:38:25 +05:30
mergify[bot]
806ff5bc19 fix: payment term when creating PO from SO (backport #41376) (#41744)
fix: payment term when creating PO from SO (#41376)

* fix: payment term when creating PO from SO

* fix: payment term when creating PO from SO

* fix: payment term when creating PO from SO

* fix: payment term when creating PO from SO

(cherry picked from commit 441596f795)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-06-03 18:37:39 +05:30
mergify[bot]
c5d72cd934 fix: Select both account number and company in the account form (backport #41731) (#41737)
fix: Select both account number and company in the account form (#41731)

* fix: Both the account number and the company should be selected in the account form

* fix: select both account number and company in the account form

(cherry picked from commit 5a75c847fe)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-06-03 18:36:58 +05:30
ruthra kumar
dd0cd8c4f8 Merge pull request #41746 from frappe/mergify/bp/version-15-hotfix/pr-41742
chore: System Manager should have  submit permission for repost doctypes (backport #41742)
2024-06-03 18:33:44 +05:30
ruthra kumar
d5158c6062 chore: Sys Manager shluld have submit permission for repost doctypes
(cherry picked from commit 4558f64c0f)
2024-06-03 12:21:05 +00:00
Nihantra C. Patel
a3444a07b7 fix: completed DC will not appear in a delivery trip (#41655)
* fix: completed DC will not appear in a delivery trip

* fix: completed DC will not appear in a delivery trip

(cherry picked from commit 4f0214d00e)

# Conflicts:
#	erpnext/stock/doctype/delivery_note/delivery_note.js
2024-06-03 11:57:39 +00:00
mergify[bot]
638c94451e fix: get assets received but not billed account only if any asset item is received (backport #41734) (#41735)
fix: get assets received but not billed account only if any asset item is received (#41734)

fix: get assets received but not billed account only if any asset item received
(cherry picked from commit 39885b2b01)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-06-03 16:18:29 +05:30
Nihantra C. Patel
2104d903aa fix: correcting balance sheet calculation for zero liabilities and equity (#41497)
* fix: correcting balance sheet calculation for zero liabilities and equity

* fix: correcting balance sheet calculation for zero liabilities and equity

(cherry picked from commit 3c3313594d)

# Conflicts:
#	erpnext/accounts/report/balance_sheet/balance_sheet.py
2024-06-03 10:36:56 +00:00
ruthra kumar
8ff5a67b99 Merge pull request #41714 from frappe/mergify/bp/version-15-hotfix/pr-41658
fix: condition-wise filter for transaction based pricing rule (backport #41658)
2024-06-01 18:31:11 +05:30
mergify[bot]
38249f4170 feat: optional to reconcile all serial nos / batches in stock reconciliation (backport #41696) (#41713)
* feat: optional to reconcile all serial nos / batches in stock reconciliation (#41696)

feat: optional to reconcile all serial/batch
(cherry picked from commit ee846f5950)

# Conflicts:
#	erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-06-01 18:30:33 +05:30
Dany Robert
0823de86ad fix: test for pricing rule transaction with cond
(cherry picked from commit 3f2343614b)
2024-06-01 12:45:20 +00:00
Dany Robert
e493b11ae3 fix: condition filter for transaction pricing rule
(cherry picked from commit e3fd82766f)
2024-06-01 12:45:19 +00:00
ruthra kumar
f73737db50 Merge pull request #41706 from frappe/mergify/bp/version-15-hotfix/pr-41232
fix: French chart of account the 4191 code must be of type Income Account (backport #41232)
2024-06-01 16:06:59 +05:30
Deepesh Garg
8d997c6703 Merge pull request #41678 from frappe/mergify/bp/version-15-hotfix/pr-41676
fix: Filters in account balance report (#41676)
2024-05-31 20:02:20 +05:30
Florian HENRY
797b718e5a fix: French chart of account the 4191 code must be of type Income Account
(cherry picked from commit 72057adc94)
2024-05-31 09:56:01 +00:00
mergify[bot]
b22d714103 fix: key error for stock ledger report (backport #41700) (#41703)
fix: key error for stock ledger report (#41700)

(cherry picked from commit 4e37ed9033)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-31 12:22:07 +05:30
Frappe PR Bot
55121a22a5 chore(release): Bumped to Version 15.26.1
## [15.26.1](https://github.com/frappe/erpnext/compare/v15.26.0...v15.26.1) (2024-05-30)

### Bug Fixes

* batch selection issue (backport [#41692](https://github.com/frappe/erpnext/issues/41692)) (backport [#41693](https://github.com/frappe/erpnext/issues/41693)) ([#41694](https://github.com/frappe/erpnext/issues/41694)) ([64835b9](64835b99ec))
2024-05-30 13:57:20 +00:00
mergify[bot]
64835b99ec fix: batch selection issue (backport #41692) (backport #41693) (#41694)
fix: batch selection issue (backport #41692) (#41693)

fix: batch selection issue (#41692)

(cherry picked from commit 968120d0eb)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit 24775db97e)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-05-30 19:26:02 +05:30
mergify[bot]
4e9faf6ad6 fix: work order created message pops up if no items are selected (backport #41677) (#41682)
fix: work order created message pops up if no items are selected (#41677)

(cherry picked from commit 388ba7f945)

Co-authored-by: Nijith anil <83776819+nijithanil@users.noreply.github.com>
2024-05-30 18:51:26 +05:30
mergify[bot]
24775db97e fix: batch selection issue (backport #41692) (#41693)
fix: batch selection issue (#41692)

(cherry picked from commit 968120d0eb)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-30 18:49:12 +05:30
mergify[bot]
1a24914aed fix: show material to supplier button (backport #41686) (#41688)
fix: show material to supplier button (#41686)

(cherry picked from commit be9f960705)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-30 16:13:53 +05:30
Frappe PR Bot
56d83d44be chore(release): Bumped to Version 15.26.0
# [15.26.0](https://github.com/frappe/erpnext/compare/v15.25.0...v15.26.0) (2024-05-29)

### Bug Fixes

* add in some indices to speed up Purchase Order deletion ([3ed3b21](3ed3b214c8))
* cost center filter according to the company in project ([193b844](193b844bf1))
* cost center filter according to the company in project ([e6aaab3](e6aaab38b0))
* cost center filter according to the company in project ([563e15e](563e15e1c8))
* multiple issues related to serial and batch bundle (backport [#41662](https://github.com/frappe/erpnext/issues/41662)) ([#41668](https://github.com/frappe/erpnext/issues/41668)) ([dc0bb22](dc0bb220ed))
* not allow template item in product bundle item ([8fb3294](8fb3294674))
* not allow template item in product bundle item ([b64f5a4](b64f5a4e54))
* not allow template item in product bundle item - v15/v14 ([9864377](9864377b47))
* opening stock not showing in the stock ledger report for the bat… (backport [#41584](https://github.com/frappe/erpnext/issues/41584)) ([#41590](https://github.com/frappe/erpnext/issues/41590)) ([162ec7d](162ec7d6e8))
* SCR batch qty issue (backport [#41595](https://github.com/frappe/erpnext/issues/41595)) ([#41599](https://github.com/frappe/erpnext/issues/41599)) ([17ea958](17ea958170))
* set expense account as Assets RBNB only if it is booked in linked PR (backport [#41368](https://github.com/frappe/erpnext/issues/41368)) ([#41673](https://github.com/frappe/erpnext/issues/41673)) ([0a0970e](0a0970e0e7))
* Unable to 'Get Suppliers' using tags in Request for Quotation (backport [#41626](https://github.com/frappe/erpnext/issues/41626)) ([#41627](https://github.com/frappe/erpnext/issues/41627)) ([ca855e8](ca855e8ab8))

### Features

* Add Party details to Serial No Ledger Report ([#41656](https://github.com/frappe/erpnext/issues/41656)) ([7462de6](7462de66ce))

### Performance Improvements

* sales order UI render (backport [#41591](https://github.com/frappe/erpnext/issues/41591)) ([#41592](https://github.com/frappe/erpnext/issues/41592)) ([09d112a](09d112a061))
2024-05-29 07:54:16 +00:00
ruthra kumar
e940d13068 Merge pull request #41666 from frappe/version-15-hotfix
chore: release v15
2024-05-29 13:22:52 +05:30
Deepesh Garg
0b9d89b966 fix: Filters in account balance report
(cherry picked from commit 1c9fe691ea)
2024-05-29 07:20:47 +00:00
mergify[bot]
0a0970e0e7 fix: set expense account as Assets RBNB only if it is booked in linked PR (backport #41368) (#41673)
fix: set expense account as Assets RBNB only if it is booked in linked PR (#41368)

* fix: set expense account as Assets RBNB only if it is booked in linked PR

* fix: broken translations

(cherry picked from commit 014486de39)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-05-29 11:07:07 +05:30
Deepesh Garg
d29686f882 Merge pull request #41375 from Nihantra-Patel/no_add_variant_item_15-14
fix: not allow template item in product bundle item - v15/v14
2024-05-29 10:30:47 +05:30
mergify[bot]
dc0bb220ed fix: multiple issues related to serial and batch bundle (backport #41662) (#41668)
* fix: multiple issues related to serial and batch bundle (#41662)

(cherry picked from commit ce834f5dba)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
#	erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json

* chore: fix conflicts

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-28 21:57:13 +05:30
Marica
2e8ae4dc30 Merge pull request #41667 from frappe/mergify/bp/version-15-hotfix/pr-41656
feat: Add Party details to Serial No Ledger Report (backport #41656)
2024-05-28 16:36:44 +05:30
Marica
7462de66ce feat: Add Party details to Serial No Ledger Report (#41656)
- Since no party details are present in Serial No anymore, it is hard to get a view of which SN was sold to/purchased from which party
- Add Party fields to report

(cherry picked from commit e3cf53a8b7)
2024-05-28 09:59:35 +00:00
ruthra kumar
c8098e9691 Merge pull request #41649 from frappe/mergify/bp/version-15-hotfix/pr-41401
fix: cost center filter according to the company in project (backport #41401)
2024-05-27 10:42:09 +05:30
Nihantra C. Patel
193b844bf1 fix: cost center filter according to the company in project
(cherry picked from commit 501c6aa126)
2024-05-27 04:41:12 +00:00
Nihantra C. Patel
e6aaab38b0 fix: cost center filter according to the company in project
(cherry picked from commit cfde8088b4)
2024-05-27 04:41:12 +00:00
Nihantra C. Patel
563e15e1c8 fix: cost center filter according to the company in project
(cherry picked from commit 249e8264dd)
2024-05-27 04:41:11 +00:00
mergify[bot]
ca855e8ab8 fix: Unable to 'Get Suppliers' using tags in Request for Quotation (backport #41626) (#41627)
fix: Unable to 'Get Suppliers' using tags in Request for Quotation (#41626)

(cherry picked from commit 683c1f04c8)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-24 13:09:15 +05:30
Akhil Narang
7a0aef218f Merge pull request #41625 from frappe/mergify/bp/version-15-hotfix/pr-41601
fix: add in some indices to speed up Purchase Order deletion (backport #41601)
2024-05-24 12:27:29 +05:30
Akhil Narang
8f24fd6a60 Merge pull request #41611 from frappe/mergify/bp/version-15-hotfix/pr-41609
refactor: use `json` directly instead of using `frappe.json` (backport #41609)
2024-05-24 11:07:12 +05:30
Akhil Narang
c68afbc715 chore: resolve conflicts 2024-05-24 11:05:59 +05:30
Akhil Narang
3ed3b214c8 fix: add in some indices to speed up Purchase Order deletion
`tabSales Order`.`inter_company_order_reference`
`tabSales Invoice Item`.`purchase_order`

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
(cherry picked from commit 0303d7dbdc)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
2024-05-24 05:28:24 +00:00
ruthra kumar
26569742fd Merge pull request #41605 from frappe/mergify/bp/version-15-hotfix/pr-41603
refactor: remove 'format:' based naming in internal doctypes (backport #41603)
2024-05-24 10:54:55 +05:30
ruthra kumar
d96c5885a3 Merge pull request #41607 from frappe/mergify/bp/version-15-hotfix/pr-41594
refactor: 'Payment Period Based On Invoice Date' report (backport #41594)
2024-05-24 10:53:51 +05:30
Akhil Narang
7af1b5d4ec refactor: use json directly instead of using frappe.json (#41609)
(cherry picked from commit 3f06f1905f)
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-05-24 10:51:09 +05:30
ruthra kumar
1ad2f06500 chore: resolve conflicts 2024-05-23 17:49:05 +05:30
ruthra kumar
22dd642413 refactor: replace against_voucher with against_voucher_no
(cherry picked from commit c4e2abb973)
2024-05-23 12:16:51 +00:00
ruthra kumar
37c90ef873 refactor: remove debit and credit
(cherry picked from commit 014b542cf3)
2024-05-23 12:16:50 +00:00
ruthra kumar
e0cb3ecc0f refactor: query payment ledger for payments
(cherry picked from commit cb3c20dcd3)
2024-05-23 12:16:50 +00:00
ruthra kumar
3176bb480f refactor: remove 'format:' based naming in internal doctypes
(cherry picked from commit e2ec3e453a)

# Conflicts:
#	erpnext/accounts/doctype/repost_accounting_ledger/repost_accounting_ledger.json
#	erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.json
2024-05-23 12:15:33 +00:00
mergify[bot]
17ea958170 fix: SCR batch qty issue (backport #41595) (#41599)
fix: SCR batch qty issue (#41595)

(cherry picked from commit 418439b58f)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-23 16:30:30 +05:30
Akhil Narang
c16debb8ee Merge pull request #41596 from frappe/mergify/bp/version-15-hotfix/pr-41576
chore: sync ruff config with framework (backport #41576)
2024-05-23 14:15:08 +05:30
Ankush Menat
58feaf1f4a ci: ruff only fix imports
(cherry picked from commit 85b1a8001b)
2024-05-23 07:22:22 +00:00
Ankush Menat
dc813ddaec ci: dont auto apply fixes
I've personally encountered ~5 instances of bad auto fixes, let
developers apply the fixes.

(cherry picked from commit 3b4913ec81)
2024-05-23 07:22:22 +00:00
mergify[bot]
09d112a061 perf: sales order UI render (backport #41591) (#41592)
perf: sales order UI render (#41591)

(cherry picked from commit ad817cddad)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-23 11:50:34 +05:30
mergify[bot]
162ec7d6e8 fix: opening stock not showing in the stock ledger report for the bat… (backport #41584) (#41590)
fix: opening stock not showing in the stock ledger report for the bat… (#41584)

fix: opening stock not showing in the stock ledger report for the batch filter
(cherry picked from commit 04a49cef24)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-22 19:58:27 +05:30
Frappe PR Bot
a3fdfba46f chore(release): Bumped to Version 15.25.0
# [15.25.0](https://github.com/frappe/erpnext/compare/v15.24.1...v15.25.0) (2024-05-22)

### Bug Fixes

* added validation message for low gross purchase amount (backport [#41502](https://github.com/frappe/erpnext/issues/41502)) ([#41553](https://github.com/frappe/erpnext/issues/41553)) ([89ba7a2](89ba7a22fb))
* Auto reconcile only after selecting bank account (backport [#41489](https://github.com/frappe/erpnext/issues/41489)) ([#41554](https://github.com/frappe/erpnext/issues/41554)) ([33eb251](33eb251727))
* bold total in exponential smoothing forecasting (backport [#41393](https://github.com/frappe/erpnext/issues/41393)) ([#41404](https://github.com/frappe/erpnext/issues/41404)) ([8101b51](8101b51899))
* BOM creator validation for parent row no (backport [#41413](https://github.com/frappe/erpnext/issues/41413)) ([#41558](https://github.com/frappe/erpnext/issues/41558)) ([953de99](953de995bc))
* convert invoice_portion value from str to float (backport [#41485](https://github.com/frappe/erpnext/issues/41485)) ([#41555](https://github.com/frappe/erpnext/issues/41555)) ([0a36139](0a36139ef4))
* correct report name in inner button (backport [#41568](https://github.com/frappe/erpnext/issues/41568)) ([#41572](https://github.com/frappe/erpnext/issues/41572)) ([4ccc426](4ccc426fec))
* create custom field for accounting dimensions only if the field not exists already ([#41557](https://github.com/frappe/erpnext/issues/41557)) ([68fa55c](68fa55ca02))
* Deadlock on submitting Sales Invoice (backport [#41417](https://github.com/frappe/erpnext/issues/41417)) ([#41562](https://github.com/frappe/erpnext/issues/41562)) ([49db19d](49db19d57a))
* Demo data clearing ([46ec61f](46ec61f0c9))
* Filters in trend reports ([52d5d7a](52d5d7a4d3))
* job card time logs overlap issue (backport [#41567](https://github.com/frappe/erpnext/issues/41567)) ([#41571](https://github.com/frappe/erpnext/issues/41571)) ([6554f19](6554f192fb))
* minor Dr and Cr between Purchase Receipt and Purchase Invoice ([3872cdc](3872cdc54a))
* not able to delete line items in the subcontracting receipt (backport [#41569](https://github.com/frappe/erpnext/issues/41569)) ([#41570](https://github.com/frappe/erpnext/issues/41570)) ([26c3235](26c3235bf9))
* not able to submit landed cost voucher (backport [#41481](https://github.com/frappe/erpnext/issues/41481)) ([#41486](https://github.com/frappe/erpnext/issues/41486)) ([a070ad7](a070ad786d))
* possible sql error on General Ledger ([e0a0cb7](e0a0cb7b25))
* print format bold for field "total" ([e36880d](e36880da2d))
* priority not working for multiple pricing rules (backport [#41516](https://github.com/frappe/erpnext/issues/41516)) ([#41525](https://github.com/frappe/erpnext/issues/41525)) ([5fd68f9](5fd68f9fcb))
* Show acheived amount and variance for parent item groups (backport [#41495](https://github.com/frappe/erpnext/issues/41495)) ([#41551](https://github.com/frappe/erpnext/issues/41551)) ([5e0bff3](5e0bff3a60))
* stock levels for batch (backport [#41494](https://github.com/frappe/erpnext/issues/41494)) ([#41501](https://github.com/frappe/erpnext/issues/41501)) ([938888c](938888cddd))
* timeout error while submitting purchase invoice (backport [#41520](https://github.com/frappe/erpnext/issues/41520)) ([#41522](https://github.com/frappe/erpnext/issues/41522)) ([fcd9f89](fcd9f89dee))
* typerror on hide_fields ([8ae9da5](8ae9da5484))
* Unable to add items in POS Invoice ([a90186f](a90186f9ae))
* validate reorder group warehouse (backport [#41478](https://github.com/frappe/erpnext/issues/41478)) ([#41480](https://github.com/frappe/erpnext/issues/41480)) ([a1ce514](a1ce514cf3))
* valuation rate for legacy serial nos (backport [#41543](https://github.com/frappe/erpnext/issues/41543)) ([#41545](https://github.com/frappe/erpnext/issues/41545)) ([f121b33](f121b33e29))

### Features

* Config to enable immutable ledger ([32c935b](32c935bc30))
* enter serial range in Serial/Batch Selector (backport [#41530](https://github.com/frappe/erpnext/issues/41530)) ([#41534](https://github.com/frappe/erpnext/issues/41534)) ([7225347](7225347387))
2024-05-22 08:49:10 +00:00
ruthra kumar
1b4987c5b4 Merge pull request #41574 from frappe/version-15-hotfix
chore: release v15
2024-05-22 14:17:49 +05:30
mergify[bot]
5e0bff3a60 fix: Show acheived amount and variance for parent item groups (backport #41495) (#41551)
fix: Show achieved amount and variance for parent item groups

(cherry picked from commit 8ac11ae88d)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-05-21 18:02:37 +05:30
mergify[bot]
6554f192fb fix: job card time logs overlap issue (backport #41567) (#41571)
* fix: job card time logs overlap issue (#41567)

(cherry picked from commit ac4bcd5ca7)

# Conflicts:
#	erpnext/manufacturing/doctype/job_card_time_log/job_card_time_log.json

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-21 15:01:45 +05:30
mergify[bot]
4ccc426fec fix: correct report name in inner button (backport #41568) (#41572)
fix: correct report name in inner button (#41568)

Previously, the report name was incorrectly listed as "Cash Flow Statement" instead of "Cash Flow". This mismatch caused the "Cash Flow" report to not open correctly in the chart of accounts tree view, as the report ID is "Cash Flow".

(cherry picked from commit d7df2cbdc5)

Co-authored-by: jabir-elat <44110258+jabir-elat@users.noreply.github.com>
2024-05-21 14:44:03 +05:30
mergify[bot]
26c3235bf9 fix: not able to delete line items in the subcontracting receipt (backport #41569) (#41570)
fix: not able to delete line items in the subcontracting receipt (#41569)

(cherry picked from commit 4261c3474b)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-21 14:41:13 +05:30
Nabin Hait
68fa55ca02 fix: create custom field for accounting dimensions only if the field not exists already (#41557) 2024-05-21 12:21:15 +05:30
mergify[bot]
49db19d57a fix: Deadlock on submitting Sales Invoice (backport #41417) (#41562)
fix: Deadlock on submitting Sales Invoice (#41417)

(cherry picked from commit 4e4c1e4bef)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-21 11:10:26 +05:30
mergify[bot]
953de995bc fix: BOM creator validation for parent row no (backport #41413) (#41558)
fix: BOM creator validation for parent row no (#41413)

fix: bom creator valiation for parent row no
(cherry picked from commit ae3f5a38e1)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-20 19:42:54 +05:30
mergify[bot]
0a36139ef4 fix: convert invoice_portion value from str to float (backport #41485) (#41555)
fix: convert invoice_portion value from str to float (#41485)

(cherry picked from commit a1d489195d)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-05-20 18:36:48 +05:30
mergify[bot]
33eb251727 fix: Auto reconcile only after selecting bank account (backport #41489) (#41554)
fix: Auto reconcile only after selecting bank account (#41489)

(cherry picked from commit f24d61daea)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-05-20 18:36:38 +05:30
mergify[bot]
89ba7a22fb fix: added validation message for low gross purchase amount (backport #41502) (#41553)
fix: added validation message for low gross purchase amount

(cherry picked from commit 8a30701893)

Co-authored-by: Khushi Rawat <142375893+khushi8112@users.noreply.github.com>
2024-05-20 18:36:26 +05:30
Frappe PR Bot
b1d345ba0b chore(release): Bumped to Version 15.24.1
## [15.24.1](https://github.com/frappe/erpnext/compare/v15.24.0...v15.24.1) (2024-05-20)

### Bug Fixes

* valuation rate for legacy serial nos (backport [#41543](https://github.com/frappe/erpnext/issues/41543)) (backport [#41545](https://github.com/frappe/erpnext/issues/41545)) ([#41546](https://github.com/frappe/erpnext/issues/41546)) ([4ddd6e6](4ddd6e685b))
2024-05-20 10:22:57 +00:00
mergify[bot]
4ddd6e685b fix: valuation rate for legacy serial nos (backport #41543) (backport #41545) (#41546)
fix: valuation rate for legacy serial nos (backport #41543) (#41545)

fix: valuation rate for legacy serial nos (#41543)

fix: valuation rate for serial nos
(cherry picked from commit 214b38f7c8)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit f121b33e29)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-05-20 15:51:42 +05:30
ruthra kumar
a853f6add8 Merge pull request #41547 from frappe/mergify/bp/version-15-hotfix/pr-41492
refactor: For advances booked in Separate account, reconciliation date can be configured (backport #41492)
2024-05-20 15:17:38 +05:30
ruthra kumar
6c455be6a7 test: reconciliation date for advance payments
(cherry picked from commit 30aa4e031d)
2024-05-20 09:30:14 +00:00
ruthra kumar
53e5fc16d5 refactor: enable no-copy on advance payment flags
(cherry picked from commit cafa2f52e5)
2024-05-20 09:30:14 +00:00
ruthra kumar
349caf895b chore: better description
(cherry picked from commit 000c1b49dc)
2024-05-20 09:30:14 +00:00
ruthra kumar
2b307ff526 refactor: advance payments, allow configurable reconciliation date
(cherry picked from commit 070e2d4d26)
2024-05-20 09:30:13 +00:00
mergify[bot]
f121b33e29 fix: valuation rate for legacy serial nos (backport #41543) (#41545)
fix: valuation rate for legacy serial nos (#41543)

fix: valuation rate for serial nos
(cherry picked from commit 214b38f7c8)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-20 13:57:40 +05:30
ruthra kumar
0d55a25e6c Merge pull request #41544 from ruthra-kumar/fix_filters_in_trends_reports
fix: Filters in trend reports
2024-05-20 11:10:24 +05:30
ruthra kumar
52d5d7a4d3 fix: Filters in trend reports 2024-05-20 10:36:42 +05:30
ruthra kumar
e5e1aadc9a Merge pull request #41526 from frappe/mergify/bp/version-15-hotfix/pr-41523
fix: minor Dr and Cr between Purchase Receipt and Purchase Invoice (backport #41523)
2024-05-20 09:17:25 +05:30
ruthra kumar
3872cdc54a fix: minor Dr and Cr between Purchase Receipt and Purchase Invoice 2024-05-20 08:31:12 +05:30
SelenSoft
c609436283 chore: Update turkish translations (#41286) 2024-05-19 15:30:17 +02:00
ruthra kumar
6052e37fc2 Merge pull request #41531 from frappe/mergify/bp/version-15-hotfix/pr-41529
refactor: ignore internal doctypes on Dunning cancellation (backport #41529)
2024-05-18 13:37:35 +05:30
mergify[bot]
7225347387 feat: enter serial range in Serial/Batch Selector (backport #41530) (#41534)
feat: enter serial range in Serial/Batch Selector (#41530)

* feat: util for generating serial nos from range string

* feat: enter serial range in Serial/Batch Selector

(cherry picked from commit 7b9fd394b0)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2024-05-18 10:39:21 +05:30
mergify[bot]
5fd68f9fcb fix: priority not working for multiple pricing rules (backport #41516) (#41525)
* fix: priority not working for multiple pricing rules (#41516)

(cherry picked from commit 5cf5b18aea)

# Conflicts:
#	erpnext/accounts/doctype/pricing_rule/pricing_rule.json

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-18 07:18:06 +05:30
ruthra kumar
97e6415afa refactor: ignore internal doctypes on Dunning cancellation
(cherry picked from commit 63c2cf13fd)
2024-05-17 15:31:36 +00:00
mergify[bot]
fcd9f89dee fix: timeout error while submitting purchase invoice (backport #41520) (#41522)
fix: timeout error while submitting purchase invoice (#41520)

(cherry picked from commit 61a4188440)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-17 16:56:11 +05:30
ruthra kumar
2bac4b1681 Merge pull request #41519 from frappe/mergify/bp/version-15-hotfix/pr-41517
fix: typerror on hide_fields (backport #41517)
2024-05-17 14:52:55 +05:30
ruthra kumar
8ae9da5484 fix: typerror on hide_fields
(cherry picked from commit deb9766f2a)
2024-05-17 09:20:33 +00:00
ruthra kumar
2f2615f9e2 Merge pull request #41513 from frappe/mergify/bp/version-15-hotfix/pr-41511
fix: possible sql error on General Ledger (backport #41511)
2024-05-17 11:11:59 +05:30
Frappe PR Bot
9b7bda958b chore(release): Bumped to Version 15.24.0
# [15.24.0](https://github.com/frappe/erpnext/compare/v15.23.3...v15.24.0) (2024-05-17)

### Features

* Config to enable immutable ledger ([68faf57](68faf575db))
2024-05-17 05:27:58 +00:00
Deepesh Garg
8c8b22bc61 Merge pull request #41509 from frappe/mergify/bp/version-15-hotfix/pr-41451
fix: Demo data clearing (#41451)
2024-05-17 10:57:01 +05:30
ruthra kumar
e0a0cb7b25 fix: possible sql error on General Ledger
(cherry picked from commit 76131f8e10)
2024-05-17 05:26:55 +00:00
Deepesh Garg
00144c92af Merge pull request #41508 from frappe/mergify/bp/version-15/pr-41438
feat: Config to enable immutable ledger
2024-05-17 10:56:45 +05:30
Deepesh Garg
7cbe03174f chore: resolve conflicts 2024-05-17 10:37:32 +05:30
Deepesh Garg
46ec61f0c9 fix: Demo data clearing
(cherry picked from commit d6fe220fab)
2024-05-17 03:47:50 +00:00
Deepesh Garg
e14d4e839f Merge pull request #41505 from frappe/mergify/bp/version-15-hotfix/pr-41504
fix: Unable to add items in POS Invoice (#41504)
2024-05-17 09:15:01 +05:30
Deepesh Garg
ce60b77fa5 chore: Resolve conflicts
(cherry picked from commit 9315607ee7)

# Conflicts:
#	erpnext/accounts/doctype/accounts_settings/accounts_settings.json
2024-05-17 03:42:44 +00:00
Deepesh Garg
f09a6d76a7 chore: Resolve conflicts
(cherry picked from commit 983c55eca1)
2024-05-17 03:42:43 +00:00
Deepesh Garg
68faf575db feat: Config to enable immutable ledger
(cherry picked from commit d56f52b0ba)

# Conflicts:
#	erpnext/accounts/doctype/accounts_settings/accounts_settings.json
#	erpnext/accounts/general_ledger.py
(cherry picked from commit 32c935bc30)

# Conflicts:
#	erpnext/accounts/doctype/accounts_settings/accounts_settings.json
2024-05-17 03:42:43 +00:00
Deepesh Garg
e1f8148129 Merge pull request #41438 from frappe/mergify/bp/version-15-hotfix/pr-41429
feat: Config to enable immutable ledger (#41429)
2024-05-17 09:11:24 +05:30
Deepesh Garg
414a91187f Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-41429 2024-05-16 21:02:55 +05:30
Deepesh Garg
9315607ee7 chore: Resolve conflicts 2024-05-16 20:59:47 +05:30
Deepesh Garg
983c55eca1 chore: Resolve conflicts 2024-05-16 20:27:50 +05:30
Deepesh Garg
a90186f9ae fix: Unable to add items in POS Invoice
(cherry picked from commit 7a3f8a5afb)
2024-05-16 14:02:49 +00:00
mergify[bot]
938888cddd fix: stock levels for batch (backport #41494) (#41501)
fix: stock levels for batch (#41494)

(cherry picked from commit 500c546691)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-16 16:33:02 +05:30
mergify[bot]
7620ae203e chore(BOM Explorer): display items in the same order as in the BOM (backport #41496) (#41498)
chore(BOM Explorer): display items in the same order as in the BOM (#41496)

(cherry picked from commit bd381cc0c6)

Co-authored-by: Samuel Danieli <23150094+scdanieli@users.noreply.github.com>
2024-05-16 15:59:06 +05:30
ruthra kumar
2e6c8632a1 Merge pull request #41499 from frappe/mergify/bp/version-15-hotfix/pr-40072
fix: print format bold for field "total" (backport #40072)
2024-05-16 15:32:17 +05:30
Nihantra C. Patel
e36880da2d fix: print format bold for field "total"
(cherry picked from commit 3c9640df27)
2024-05-16 09:50:48 +00:00
mergify[bot]
8101b51899 fix: bold total in exponential smoothing forecasting (backport #41393) (#41404)
fix: bold total in exponential smoothing forecasting (#41393)

* fix: bold total in exponential smoothing forecasting

* fix: bold total in exponential smoothing forecasting

(cherry picked from commit ba60b5911a)

Co-authored-by: Nihantra C. Patel <141945075+Nihantra-Patel@users.noreply.github.com>
2024-05-16 15:14:43 +05:30
Frappe PR Bot
c1f7d5a2d1 chore(release): Bumped to Version 15.23.3
## [15.23.3](https://github.com/frappe/erpnext/compare/v15.23.2...v15.23.3) (2024-05-15)

### Bug Fixes

* not able to submit landed cost voucher (backport [#41481](https://github.com/frappe/erpnext/issues/41481)) (backport [#41486](https://github.com/frappe/erpnext/issues/41486)) ([#41487](https://github.com/frappe/erpnext/issues/41487)) ([66684e7](66684e7e23))
2024-05-15 13:27:07 +00:00
mergify[bot]
66684e7e23 fix: not able to submit landed cost voucher (backport #41481) (backport #41486) (#41487)
fix: not able to submit landed cost voucher (backport #41481) (#41486)

fix: not able to submit landed cost voucher (#41481)

(cherry picked from commit 81a9521f04)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit a070ad786d)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-05-15 18:55:40 +05:30
mergify[bot]
a070ad786d fix: not able to submit landed cost voucher (backport #41481) (#41486)
fix: not able to submit landed cost voucher (#41481)

(cherry picked from commit 81a9521f04)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-15 18:05:39 +05:30
mergify[bot]
a1ce514cf3 fix: validate reorder group warehouse (backport #41478) (#41480)
fix: validate reorder group warehouse (#41478)

(cherry picked from commit 0363afcfd0)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-15 15:15:24 +05:30
Frappe PR Bot
7b8b58f8ca chore(release): Bumped to Version 15.23.2
## [15.23.2](https://github.com/frappe/erpnext/compare/v15.23.1...v15.23.2) (2024-05-15)

### Bug Fixes

* 'Bill for Rejected Quantity in Purchase Invoice' feature not working (backport [#41437](https://github.com/frappe/erpnext/issues/41437)) ([#41445](https://github.com/frappe/erpnext/issues/41445)) ([b8db903](b8db903320))
* address filter and quotation to for prospect ([37741b5](37741b5b45))
* address filter and quotation to for prospect ([394b1f4](394b1f499d))
* address filter and quotation to for prospect ([cdbb515](cdbb515379))
* Asset cancelation issue ([e18be9b](e18be9b21e))
* consistent use of "Address & Contact" (backport [#41386](https://github.com/frappe/erpnext/issues/41386)) ([#41388](https://github.com/frappe/erpnext/issues/41388)) ([b6f82a6](b6f82a656f))
* daily prorata based depreciation bug in wdv method ([c335c2c](c335c2c85a))
* data getting override in delivery trip (backport [#41431](https://github.com/frappe/erpnext/issues/41431)) ([#41433](https://github.com/frappe/erpnext/issues/41433)) ([15d2881](15d2881bc8))
* Duplicate party name column in AR/AP report ([55edbec](55edbec6fa))
* incorrect  total days calculation ([01b25b5](01b25b5821))
* **minor:** removed extra parameter ([ce2c6c3](ce2c6c3165))
* pro rata based depreciation with opening accumulated depreciation ([72f3fb2](72f3fb2a2c))
* PSOA ageing ([6590d78](6590d78298))
* removed same named function ([955ce9b](955ce9b670))
* removed unrelated code modification ([0aca1e8](0aca1e8e05))
* resolved conflict ([520e1e9](520e1e9c8f))
* resolved conflict ([3a72f4b](3a72f4bd30))
* resolved conflict ([8cca74d](8cca74d5ef))
* Unknown column 'tabBatch.batch_no' in 'where clause' (backport [#41418](https://github.com/frappe/erpnext/issues/41418)) ([#41444](https://github.com/frappe/erpnext/issues/41444)) ([d988c7b](d988c7bd06))
* update description of Supplier Invoice Number ([a7533ff](a7533ff7f6))
* valuation issue for batch (backport [#41425](https://github.com/frappe/erpnext/issues/41425)) ([#41430](https://github.com/frappe/erpnext/issues/41430)) ([f55a131](f55a131dea))
* **wip:** daily depreciation bug ([1016ec2](1016ec2a14))
* **wip:** depreciation calculation after asset value adjustment ([3eff9c9](3eff9c9779))
* zero valuation rate for batched item (backport [#41446](https://github.com/frappe/erpnext/issues/41446)) ([#41447](https://github.com/frappe/erpnext/issues/41447)) ([5c3a096](5c3a0965bc))
2024-05-15 05:12:37 +00:00
Deepesh Garg
71da5d0928 Merge pull request #41459 from frappe/version-15-hotfix
chore: release v15
2024-05-15 10:41:19 +05:30
Nabin Hait
2569b244e2 Merge pull request #41473 from frappe/mergify/bp/version-15-hotfix/pr-41235
Depreciation based on daily prorata (backport #41235)
2024-05-15 09:10:56 +05:30
Nabin Hait
09aefa96ad Merge pull request #41474 from nabinhait/linter-fix5
style: linter issue
2024-05-15 09:10:08 +05:30
Nabin Hait
fd3efd53be style: linter issue 2024-05-15 09:09:16 +05:30
Nabin Hait
6d43d840db style: new line before function
(cherry picked from commit 7d86881579)
2024-05-15 03:11:37 +00:00
Khushi Rawat
955ce9b670 fix: removed same named function
(cherry picked from commit d22df324ec)
2024-05-15 03:11:37 +00:00
Khushi Rawat
b57919e2ce refactor: code optimization
(cherry picked from commit 7b264e5e11)
2024-05-15 03:11:37 +00:00
Khushi Rawat
72f3fb2a2c fix: pro rata based depreciation with opening accumulated depreciation
(cherry picked from commit c0c8c1bb02)
2024-05-15 03:11:37 +00:00
Khushi Rawat
12f383f252 test: made minor change in existing test
(cherry picked from commit d40b55468c)
2024-05-15 03:11:37 +00:00
Khushi Rawat
01b25b5821 fix: incorrect total days calculation
(cherry picked from commit fccd37d32d)
2024-05-15 03:11:36 +00:00
Khushi Rawat
c335c2c85a fix: daily prorata based depreciation bug in wdv method
(cherry picked from commit b8a98a273b)
2024-05-15 03:11:36 +00:00
Khushi Rawat
1016ec2a14 fix(wip): daily depreciation bug
(cherry picked from commit f337392f3e)
2024-05-15 03:11:36 +00:00
Nabin Hait
8da2841fdd Merge pull request #41471 from frappe/mergify/bp/version-15-hotfix/pr-41467
Asset cancelation issue (backport #41467)
2024-05-15 08:19:23 +05:30
Khushi Rawat
ccda17ede2 style: code optimization
(cherry picked from commit e843683ad1)
2024-05-14 17:12:46 +00:00
Khushi Rawat
e18be9b21e fix: Asset cancelation issue
(cherry picked from commit fa2b6c4490)
2024-05-14 17:12:45 +00:00
Deepesh Garg
53ea9ff102 Merge pull request #41259 from frappe/mergify/bp/version-15-hotfix/pr-41258
fix: PSOA ageing (#41258)
2024-05-14 20:08:45 +05:30
Nabin Hait
cb9df5e171 Merge pull request #41428 from frappe/mergify/bp/version-15-hotfix/pr-40468
fix: update description of Supplier Invoice Number (backport #40468)
2024-05-14 20:04:18 +05:30
Nabin Hait
041bcc96a9 Merge pull request #41449 from frappe/mergify/bp/version-15-hotfix/pr-41412
fix: Duplicate party name column in AR/AP report (backport #41412)
2024-05-14 20:03:22 +05:30
Nabin Hait
230cff583f Merge pull request #41461 from frappe/mergify/bp/version-15-hotfix/pr-41089
Refactor: Rename purchase receipt amount field to purchase amount (backport #41089)
2024-05-14 19:58:15 +05:30
Nabin Hait
b543093bde Merge pull request #41462 from frappe/mergify/bp/version-15-hotfix/pr-41420
Get prorata depreciation based on total days per year (backport #41420)
2024-05-14 19:45:44 +05:30
Nabin Hait
520e1e9c8f fix: resolved conflict 2024-05-14 19:37:34 +05:30
Nabin Hait
3a72f4bd30 fix: resolved conflict 2024-05-14 19:34:29 +05:30
Nabin Hait
8cca74d5ef fix: resolved conflict 2024-05-14 19:29:23 +05:30
Khushi Rawat
ce2c6c3165 fix(minor): removed extra parameter
(cherry picked from commit 98e7dfe97f)
2024-05-14 13:56:25 +00:00
Khushi Rawat
0b21026eef refactor: removed code duplicacies
(cherry picked from commit 6b24143f72)
2024-05-14 13:56:25 +00:00
Khushi Rawat
3eff9c9779 fix(wip): depreciation calculation after asset value adjustment
(cherry picked from commit d3200fb67f)
2024-05-14 13:56:24 +00:00
Khushi Rawat
0aca1e8e05 fix: removed unrelated code modification
(cherry picked from commit 360c3b36ed)
2024-05-14 12:47:53 +00:00
“Khushi
9b3f309598 refactor: renamed purchase receipt amount field to purchase amount
(cherry picked from commit 31841b4ab2)

# Conflicts:
#	erpnext/assets/doctype/asset/asset.json
#	erpnext/assets/doctype/asset/asset.py
#	erpnext/patches.txt
2024-05-14 12:47:53 +00:00
mergify[bot]
5c3a0965bc fix: zero valuation rate for batched item (backport #41446) (#41447)
fix: zero valuation rate for batched item (#41446)

(cherry picked from commit e3a80ebdf3)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-14 14:22:51 +05:30
Deepesh Garg
55edbec6fa fix: Duplicate party name column in AR/AP report
(cherry picked from commit 7501fe8ebd)
2024-05-14 02:53:48 +00:00
mergify[bot]
d988c7bd06 fix: Unknown column 'tabBatch.batch_no' in 'where clause' (backport #41418) (#41444)
fix: Unknown column 'tabBatch.batch_no' in 'where clause' (#41418)

fix: unknown column 'tabBatch.batch_no' in 'where clause'
(cherry picked from commit 6bd13d7452)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-14 05:21:17 +05:30
mergify[bot]
b8db903320 fix: 'Bill for Rejected Quantity in Purchase Invoice' feature not working (backport #41437) (#41445)
fix: 'Bill for Rejected Quantity in Purchase Invoice' feature not working (#41437)

(cherry picked from commit 3309359822)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-14 05:20:02 +05:30
barredterra
cef6d0d74d fix(Delivery Note): only show permitted actions
(cherry picked from commit 418bdc1dcc)
2024-05-13 13:43:05 +00:00
barredterra
a0011c5b52 fix(Sales Order): only show permitted actions
(cherry picked from commit c29d955371)
2024-05-13 13:43:05 +00:00
Deepesh Garg
32c935bc30 feat: Config to enable immutable ledger
(cherry picked from commit d56f52b0ba)

# Conflicts:
#	erpnext/accounts/doctype/accounts_settings/accounts_settings.json
#	erpnext/accounts/general_ledger.py
2024-05-13 12:14:15 +00:00
Frappe PR Bot
1b2c2515bc chore(release): Bumped to Version 15.23.1
## [15.23.1](https://github.com/frappe/erpnext/compare/v15.23.0...v15.23.1) (2024-05-13)

### Bug Fixes

* valuation issue for batch (backport [#41425](https://github.com/frappe/erpnext/issues/41425)) (backport [#41430](https://github.com/frappe/erpnext/issues/41430)) ([#41434](https://github.com/frappe/erpnext/issues/41434)) ([aa2b644](aa2b64476e))
2024-05-13 11:24:52 +00:00
mergify[bot]
aa2b64476e fix: valuation issue for batch (backport #41425) (backport #41430) (#41434)
fix: valuation issue for batch (backport #41425) (#41430)

fix: valuation issue for batch (#41425)

(cherry picked from commit 065163146c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit f55a131dea)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-05-13 16:53:35 +05:30
mergify[bot]
15d2881bc8 fix: data getting override in delivery trip (backport #41431) (#41433)
fix: data getting override in delivery trip (#41431)

fix: data getting override
(cherry picked from commit 663fcb374d)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-13 16:31:49 +05:30
mergify[bot]
f55a131dea fix: valuation issue for batch (backport #41425) (#41430)
fix: valuation issue for batch (#41425)

(cherry picked from commit 065163146c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-13 16:24:59 +05:30
Deepesh Garg
4036ef8764 chore: better description
(cherry picked from commit eccd5b4c5d)
2024-05-13 09:43:36 +00:00
Nihantra Patel
a7533ff7f6 fix: update description of Supplier Invoice Number
(cherry picked from commit d721de13aa)
2024-05-13 09:43:36 +00:00
mergify[bot]
b6f82a656f fix: consistent use of "Address & Contact" (backport #41386) (#41388)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix: consistent use of "Address & Contact" (#41386)
2024-05-10 17:42:05 +02:00
mergify[bot]
4190ffc654 chore: typo in Stock Settings (backport #41396) (#41405)
chore: typo in Stock Settings (#41396)

(cherry picked from commit 628d7e6458)

Co-authored-by: rehanrehman389 <32939507+rehanrehman389@users.noreply.github.com>
2024-05-10 15:45:04 +05:30
ruthra kumar
6b5b3afbca Merge pull request #41395 from frappe/mergify/bp/version-15-hotfix/pr-41040
fix: address filter and quotation to for prospect (backport #41040)
2024-05-09 12:48:30 +05:30
ruthra kumar
f337af9e90 refactor: make use of doc.quotation_to
(cherry picked from commit 754c7f6d1c)
2024-05-09 06:46:01 +00:00
Nihantra Patel
37741b5b45 fix: address filter and quotation to for prospect
(cherry picked from commit 2896e3666c)
2024-05-09 06:46:01 +00:00
Nihantra Patel
394b1f499d fix: address filter and quotation to for prospect
(cherry picked from commit 24a68a79df)
2024-05-09 06:46:00 +00:00
Nihantra Patel
cdbb515379 fix: address filter and quotation to for prospect
(cherry picked from commit fe5b88522e)
2024-05-09 06:46:00 +00:00
Frappe PR Bot
5f376009d0 chore(release): Bumped to Version 15.23.0
# [15.23.0](https://github.com/frappe/erpnext/compare/v15.22.2...v15.23.0) (2024-05-09)

### Bug Fixes

* Add PO reference ([c417b0c](c417b0c15a))
* correct ordered qty on SO when removing PO item - v15 ([#41342](https://github.com/frappe/erpnext/issues/41342)) ([5c1043f](5c1043fe88))
* Cost center not getting saved in PSOA ([fbbc0af](fbbc0af7bc))
* Do not deduct TCS for opening invoices ([1999b7a](1999b7a6c5))
* filter validation for batch-wise balance history report (backport [#41356](https://github.com/frappe/erpnext/issues/41356)) ([#41361](https://github.com/frappe/erpnext/issues/41361)) ([913cea0](913cea0018))
* future subscripition updates ([b27a55e](b27a55e802))
* GL Entries against orders as an advance ([e49a401](e49a401c23))
* incorrect qty picked in the pick list (backport [#41378](https://github.com/frappe/erpnext/issues/41378)) ([#41381](https://github.com/frappe/erpnext/issues/41381)) ([a293ec0](a293ec0db3))
* incorrect query for Purchase Invoice rate in GP ([20daae4](20daae4de9))
* **Item:** allow UOM conversion for non-stock items (backport [#41267](https://github.com/frappe/erpnext/issues/41267)) ([#41346](https://github.com/frappe/erpnext/issues/41346)) ([cd3ca1e](cd3ca1ee25))
* Merge debit and credit in transaction currency while merging gle with similar head ([9a58823](9a58823867))
* missing Item Name on Save for Quotation created from Item (backport [#41233](https://github.com/frappe/erpnext/issues/41233)) ([#41304](https://github.com/frappe/erpnext/issues/41304)) ([6491577](6491577501))
* Patch to fix the incorrect debit and credit in transaction currency ([f7e165b](f7e165b5ff))
* Patch to remove cancelled asset capitalization from asset ([a755540](a755540708))
* pick list with multiple batch issue (backport [#41335](https://github.com/frappe/erpnext/issues/41335)) ([#41338](https://github.com/frappe/erpnext/issues/41338)) ([1b1dfa8](1b1dfa8893))
* pricing rule rounding ([b93828c](b93828cd33))
* Purchase Invoice gain loss gl entry for periodic inventory ([0513481](0513481ec8))
* resolved conflict ([5039f45](5039f45be4))
* resolved conflict ([81afdcf](81afdcf745))
* search for item price in stock UOM (backport [#41075](https://github.com/frappe/erpnext/issues/41075)) ([#41313](https://github.com/frappe/erpnext/issues/41313)) ([112f96b](112f96bae0))
* update project URLs (backport [#41331](https://github.com/frappe/erpnext/issues/41331)) ([#41332](https://github.com/frappe/erpnext/issues/41332)) ([bb619a6](bb619a64fe))

### Features

* **Item Price:** make UOM mandatory (backport [#40588](https://github.com/frappe/erpnext/issues/40588)) ([#41312](https://github.com/frappe/erpnext/issues/41312)) ([cab0e30](cab0e30ceb))

### Performance Improvements

* index on item code for the Pick List Item doctype (backport [#41357](https://github.com/frappe/erpnext/issues/41357)) ([#41364](https://github.com/frappe/erpnext/issues/41364)) ([bba738f](bba738f5f4))
2024-05-09 05:31:55 +00:00
ruthra kumar
2ac0009b87 Merge pull request #41355 from frappe/version-15-hotfix
chore: release v15
2024-05-09 11:00:41 +05:30
rohitwaghchaure
307e394da4 Merge branch 'version-15' into version-15-hotfix 2024-05-09 07:30:20 +05:30
mergify[bot]
a293ec0db3 fix: incorrect qty picked in the pick list (backport #41378) (#41381)
fix: incorrect qty picked in the pick list (#41378)

(cherry picked from commit 5ed1b6b8fb)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-08 23:15:21 +05:30
Nabin Hait
d4aae4f311 Merge pull request #41380 from frappe/mergify/bp/version-15-hotfix/pr-41236
fix: Merge debit and credit in transaction currency while merging gle with similar head (backport #41236)
2024-05-08 19:25:17 +05:30
Nabin Hait
4dd58aba78 Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-41236 2024-05-08 19:02:23 +05:30
Nabin Hait
0b20a5d82e Merge pull request #41383 from frappe/mergify/bp/version-15-hotfix/pr-40121
fix: Patch to remove cancelled asset capitalization from asset (backport #40121)
2024-05-08 19:01:02 +05:30
Nabin Hait
5039f45be4 fix: resolved conflict 2024-05-08 18:23:30 +05:30
Nabin Hait
a755540708 fix: Patch to remove cancelled asset capitalization from asset
(cherry picked from commit 1951f71eeb)
2024-05-08 12:42:57 +00:00
Nabin Hait
81afdcf745 fix: resolved conflict 2024-05-08 17:57:43 +05:30
Nabin Hait
f7e165b5ff fix: Patch to fix the incorrect debit and credit in transaction currency
(cherry picked from commit e0d12ba4d0)

# Conflicts:
#	erpnext/patches.txt
2024-05-08 12:23:49 +00:00
Nabin Hait
9a58823867 fix: Merge debit and credit in transaction currency while merging gle with similar head
(cherry picked from commit e43697d359)
2024-05-08 12:23:48 +00:00
mergify[bot]
bba738f5f4 perf: index on item code for the Pick List Item doctype (backport #41357) (#41364)
* perf: index on item code for the Pick List Item doctype (#41357)

(cherry picked from commit 0887161f2a)

# Conflicts:
#	erpnext/stock/doctype/pick_list_item/pick_list_item.json

* chore: fix conflicts

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-08 11:37:51 +05:30
Nihantra C. Patel
8fb3294674 fix: not allow template item in product bundle item 2024-05-08 10:40:24 +05:30
Nihantra C. Patel
b64f5a4e54 fix: not allow template item in product bundle item 2024-05-08 10:38:58 +05:30
Nihantra C. Patel
9864377b47 fix: not allow template item in product bundle item - v15/v14 2024-05-08 10:32:28 +05:30
mergify[bot]
913cea0018 fix: filter validation for batch-wise balance history report (backport #41356) (#41361)
fix: filter validation for batch-wise balance history report (#41356)

fix: filter validation for batchwise balance history report
(cherry picked from commit 544fc60093)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-08 00:15:10 +05:30
ruthra kumar
6602ce9960 Merge pull request #41349 from frappe/mergify/bp/version-15-hotfix/pr-41288
fix: pricing rule rounding (backport #41288)
2024-05-07 10:18:26 +05:30
ruthra kumar
f2864ebdf6 refactor(test): test floor based rounding
(cherry picked from commit c41a037174)
2024-05-07 04:32:13 +00:00
ruthra kumar
b93828cd33 fix: pricing rule rounding
Consider a pricing rule of 20:1 with recursion enabled, free items
should follow the below progression

|   Qty | Free item qty |
|-------+---------------|
|  0-19 |             0 |
| 20-39 |             1 |
| 40-59 |             2 |

(cherry picked from commit 9bf37426c1)
2024-05-07 04:32:12 +00:00
mergify[bot]
cd3ca1ee25 fix(Item): allow UOM conversion for non-stock items (backport #41267) (#41346)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix(Item): allow UOM conversion for non-stock items (#41267)
2024-05-06 20:51:11 +02:00
mergify[bot]
6491577501 fix: missing Item Name on Save for Quotation created from Item (backport #41233) (#41304)
fix: missing Item Name on Save for Quotation created from Item (#41233)

* fix: missing Item Name on Save for Quotation created from Item

* fix: missing Item Name on Save for Quotation created from Item

(cherry picked from commit c8e92cb1b2)

Co-authored-by: HENRY Florian <florian.henry@open-concept.pro>
2024-05-06 21:45:27 +05:30
Nihantra C. Patel
5c1043fe88 fix: correct ordered qty on SO when removing PO item - v15 (#41342) 2024-05-06 21:36:27 +05:30
Frappe PR Bot
78637823c8 chore(release): Bumped to Version 15.22.2
## [15.22.2](https://github.com/frappe/erpnext/compare/v15.22.1...v15.22.2) (2024-05-06)

### Bug Fixes

* pick list with multiple batch issue (backport [#41335](https://github.com/frappe/erpnext/issues/41335)) (backport [#41338](https://github.com/frappe/erpnext/issues/41338)) ([#41340](https://github.com/frappe/erpnext/issues/41340)) ([ee12ec3](ee12ec36cc))
2024-05-06 08:41:26 +00:00
mergify[bot]
ee12ec36cc fix: pick list with multiple batch issue (backport #41335) (backport #41338) (#41340)
fix: pick list with multiple batch issue (backport #41335) (#41338)

fix: pick list with multiple batch issue (#41335)

fix: pick list with batchb issue
(cherry picked from commit ebfbe94aaf)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit 1b1dfa8893)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-05-06 14:10:08 +05:30
mergify[bot]
1b1dfa8893 fix: pick list with multiple batch issue (backport #41335) (#41338)
fix: pick list with multiple batch issue (#41335)

fix: pick list with batchb issue
(cherry picked from commit ebfbe94aaf)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-06 13:36:52 +05:30
ruthra kumar
a482ee1fe4 Merge pull request #41337 from frappe/mergify/bp/version-15-hotfix/pr-41334
fix: incorrect query for Purchase Invoice rate in GP (backport #41334)
2024-05-06 13:13:37 +05:30
ruthra kumar
20daae4de9 fix: incorrect query for Purchase Invoice rate in GP
(cherry picked from commit bd8382c592)
2024-05-06 07:24:48 +00:00
mergify[bot]
bb619a64fe fix: update project URLs (backport #41331) (#41332)
fix: update project URLs (#41331)

(cherry picked from commit 6142d07f1a)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2024-05-06 11:42:25 +05:30
Deepesh Garg
67954a93b2 Merge pull request #41325 from frappe/mergify/bp/version-15-hotfix/pr-41318
fix: Cost center not getting saved in PSOA (#41318)
2024-05-06 11:29:01 +05:30
Deepesh Garg
0b44cebe00 chore: resolve conflicts 2024-05-06 11:12:11 +05:30
Deepesh Garg
21ab8fe89c Merge pull request #41323 from frappe/mergify/bp/version-15-hotfix/pr-41314
fix: Do not deduct TCS for opening invoices (#41314)
2024-05-05 23:19:44 +05:30
Deepesh Garg
fbbc0af7bc fix: Cost center not getting saved in PSOA
(cherry picked from commit 58f7039630)

# Conflicts:
#	erpnext/accounts/doctype/psoa_cost_center/psoa_cost_center.json
2024-05-04 08:27:08 +00:00
Deepesh Garg
1999b7a6c5 fix: Do not deduct TCS for opening invoices
(cherry picked from commit eb9f579b8f)
2024-05-04 08:26:06 +00:00
Frappe PR Bot
fa5462d674 chore(release): Bumped to Version 15.22.1
## [15.22.1](https://github.com/frappe/erpnext/compare/v15.22.0...v15.22.1) (2024-05-03)

### Bug Fixes

* Add PO reference ([44330a6](44330a618b))
* GL Entries against orders as an advance ([4d312cb](4d312cbc65))
2024-05-03 17:32:36 +00:00
Deepesh Garg
b3736d6c6c Merge pull request #41321 from frappe/mergify/bp/version-15-hotfix/pr-41279
fix: GL Entries against orders as an advance (#41279)
2024-05-03 23:01:38 +05:30
Deepesh Garg
031ecb5cb0 Merge pull request #41320 from frappe/mergify/bp/version-15/pr-41279
fix: GL Entries against orders as an advance (#41279)
2024-05-03 23:01:18 +05:30
Deepesh Garg
2faeefb063 test: Add bank account
(cherry picked from commit eac7be2d0f)
2024-05-03 14:12:29 +00:00
Deepesh Garg
d384860c34 test: Update failing tests
(cherry picked from commit 42ef95759d)
2024-05-03 14:12:29 +00:00
Deepesh Garg
c417b0c15a fix: Add PO reference
(cherry picked from commit eb31017058)
2024-05-03 14:12:29 +00:00
Deepesh Garg
e49a401c23 fix: GL Entries against orders as an advance
(cherry picked from commit 8289f3c724)
2024-05-03 14:12:29 +00:00
Deepesh Garg
27f51f1234 test: Add bank account
(cherry picked from commit eac7be2d0f)
2024-05-03 14:12:15 +00:00
Deepesh Garg
ad0f563816 test: Update failing tests
(cherry picked from commit 42ef95759d)
2024-05-03 14:12:14 +00:00
Deepesh Garg
44330a618b fix: Add PO reference
(cherry picked from commit eb31017058)
2024-05-03 14:12:14 +00:00
Deepesh Garg
4d312cbc65 fix: GL Entries against orders as an advance
(cherry picked from commit 8289f3c724)
2024-05-03 14:12:14 +00:00
Deepesh Garg
6bac561789 Merge pull request #41315 from frappe/mergify/bp/version-15-hotfix/pr-41311
fix: future subscription updates (#41311)
2024-05-03 15:57:16 +05:30
Deepesh Garg
31254009cc test: Add posting dates
(cherry picked from commit 7fa22069d8)
2024-05-03 06:35:27 +00:00
Deepesh Garg
b27a55e802 fix: future subscripition updates
(cherry picked from commit 8e30debc10)
2024-05-03 06:35:27 +00:00
mergify[bot]
cab0e30ceb feat(Item Price): make UOM mandatory (backport #40588) (#41312)
* feat(Item Price): make UOM mandatory (#40588)

(cherry picked from commit a61148c464)

# Conflicts:
#	erpnext/stock/doctype/item_price/item_price.json

* chore: `conflicts`

---------

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2024-05-03 11:17:12 +05:30
mergify[bot]
112f96bae0 fix: search for item price in stock UOM (backport #41075) (#41313)
fix: search for item price in stock UOM (#41075)

(cherry picked from commit e4db0562ac)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2024-05-03 10:28:08 +05:30
Deepesh Garg
66b85c96f4 Merge pull request #41310 from frappe/mergify/bp/version-15-hotfix/pr-41260
fix: Purchase Invoice gain loss gl entry for periodic inventory (#41260)
2024-05-03 09:28:18 +05:30
Deepesh Garg
0513481ec8 fix: Purchase Invoice gain loss gl entry for periodic inventory
(cherry picked from commit 2402447568)
2024-05-03 03:25:54 +00:00
Frappe PR Bot
f62762b4d1 chore(release): Bumped to Version 15.22.0
# [15.22.0](https://github.com/frappe/erpnext/compare/v15.21.2...v15.22.0) (2024-05-02)

### Bug Fixes

* added brand column in Warehouse wise Item Balance Age and Value … (backport [#41280](https://github.com/frappe/erpnext/issues/41280)) ([#41282](https://github.com/frappe/erpnext/issues/41282)) ([4bbf0a4](4bbf0a46b5))
* advance account validation in company master ([dd67b0e](dd67b0ee61))
* args when get the delivery note in delivery trip ([61d6838](61d6838b2c))
* args when get the delivery note in delivery trip ([e9acacd](e9acacdd5d))
* basic rate for SABB ([7b79873](7b7987363f))
* compute tree-view parent field name ([#41234](https://github.com/frappe/erpnext/issues/41234)) ([c3077ee](c3077ee067))
* display term name for single term invoices ([a7d1a88](a7d1a88519))
* duplicate column in the stock ledger report ([a62298a](a62298a635))
* enable advance in separate acc only for customer and Supplier ([c3073d6](c3073d6e74))
* expense causing p&l test case to fail ([acfee42](acfee42735))
* handle and receivable accounts based on response type ([f65b28a](f65b28a189))
* handle stock balance unbuffered_cursor error (backport [#41186](https://github.com/frappe/erpnext/issues/41186)) ([#41188](https://github.com/frappe/erpnext/issues/41188)) ([b34582e](b34582e6ba))
* Ignore user perm in Bank Reco Tool for company ([737c480](737c4809e3))
* incorrectly applying TDS when Advance is in previous FY ([08f888a](08f888a326))
* Invoice with no GLEs in deferred report ([44c3ad6](44c3ad6810))
* missing def expense if no exp in first month ([0a65a37](0a65a37eed))
* mode of payment has precedance ([c6145a1](c6145a1101))
* multiple pricing rules with discount amount and discount percentage not working (backport [#41211](https://github.com/frappe/erpnext/issues/41211)) (backport [#41241](https://github.com/frappe/erpnext/issues/41241)) ([#41275](https://github.com/frappe/erpnext/issues/41275)) ([de77894](de77894e59))
* paid amount in bank reconciliation tool ([759c7f5](759c7f5490))
* party and party type label on accounting preview ([ee9822f](ee9822fd42))
* permission issue when user permission restricts on company ([8d70a0e](8d70a0e0bc))
* rendering the email template when user HTML ([3068dad](3068dad410))
* test case for zero deferred expense ([23c3c3c](23c3c3cc0c))
* validation to prevent foreign currency advance accounts in PE ([fb4a75c](fb4a75c5aa))
* validation to prevent overallocation ([ea596eb](ea596eb4a2))
* warehouse type filter for stock reports ([48351d6](48351d6da8))

### Features

* allow to do reposting for all transactions (audit) ([4555f8a](4555f8a9a6))
2024-05-02 04:23:27 +00:00
ruthra kumar
27e0ed30fe Merge pull request #41263 from frappe/version-15-hotfix
chore: release v15
2024-05-02 09:52:07 +05:30
mergify[bot]
4bbf0a46b5 fix: added brand column in Warehouse wise Item Balance Age and Value … (backport #41280) (#41282)
fix: added brand column in Warehouse wise Item Balance Age and Value … (#41280)

fix: added brand coulmn in Warehouse wise Item Balance Age and Value report
(cherry picked from commit 1cbc200770)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-05-01 16:03:37 +05:30
mergify[bot]
de77894e59 fix: multiple pricing rules with discount amount and discount percentage not working (backport #41211) (backport #41241) (#41275)
fix: multiple pricing rules with discount amount and discount percentage not working (backport #41211) (#41241)

fix: multiple pricing rules with discount amount and discount percentage not working (#41211)

(cherry picked from commit 54313b5db9)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit da3010a41f)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-05-01 15:46:52 +05:30
ruthra kumar
5a9615a1f2 Merge pull request #41270 from frappe/mergify/bp/version-15-hotfix/pr-41268
fix: validation to prevent overallocation (backport #41268)
2024-04-30 18:40:22 +05:30
Fritz
c3077ee067 fix: compute tree-view parent field name (#41234)
fix: Fixing treeView lookup incompatibility, see : See https://github.com/frappe/frappe/pull/26199
2024-04-30 17:57:58 +05:30
ruthra kumar
ea596eb4a2 fix: validation to prevent overallocation
(cherry picked from commit bf755fab55)
2024-04-30 12:08:48 +00:00
Deepesh Garg
6590d78298 fix: PSOA ageing
(cherry picked from commit fed2d11905)
2024-04-30 07:41:09 +00:00
Deepesh Garg
378605cd00 Merge pull request #41253 from frappe/mergify/bp/version-15-hotfix/pr-41171
fix: Invoice with no GLEs in deferred report (#41171)
2024-04-30 13:10:53 +05:30
ruthra kumar
56e455c745 Merge pull request #41255 from frappe/mergify/bp/version-15-hotfix/pr-41252
fix: permission issue when user permission restricts on company (backport #41252)
2024-04-30 12:40:02 +05:30
ruthra kumar
8d70a0e0bc fix: permission issue when user permission restricts on company 2024-04-30 12:20:10 +05:30
Deepesh Garg
b67e9e4aa8 chore: remove debug flag
(cherry picked from commit ecf07bd128)
2024-04-30 05:46:18 +00:00
Deepesh Garg
44c3ad6810 fix: Invoice with no GLEs in deferred report
(cherry picked from commit 1c613ada6f)
2024-04-30 05:46:17 +00:00
Deepesh Garg
69c05e5843 Merge pull request #41251 from frappe/mergify/bp/version-15-hotfix/pr-41173
fix: paid amount in bank reconciliation tool (#41173)
2024-04-30 11:15:39 +05:30
Deepesh Garg
6ab91a5c88 Merge pull request #41250 from frappe/mergify/bp/version-15-hotfix/pr-41219
fix: Ignore user perm in Bank Reco Tool for company (#41219)
2024-04-30 11:15:19 +05:30
Deepesh Garg
759c7f5490 fix: paid amount in bank reconciliation tool
(cherry picked from commit a48966f08c)
2024-04-30 04:55:51 +00:00
Deepesh Garg
03b4a85825 chore: resolve conflicts 2024-04-30 10:25:51 +05:30
Deepesh Garg
737c4809e3 fix: Ignore user perm in Bank Reco Tool for company
(cherry picked from commit 9f346e7ba0)

# Conflicts:
#	erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.json
2024-04-30 04:53:24 +00:00
Deepesh Garg
3657badb31 Merge pull request #41239 from frappe/mergify/bp/version-15-hotfix/pr-41237
fix: party and party type label on accounting preview (#41237)
2024-04-30 10:23:17 +05:30
ruthra kumar
ef69a46e6a Merge pull request #41249 from frappe/mergify/bp/version-15-hotfix/pr-41240
fix: display term name for single term invoices in AR/AP (backport #41240)
2024-04-30 07:42:41 +05:30
ruthra kumar
78106836be Merge pull request #41247 from frappe/mergify/bp/version-15-hotfix/pr-41194
fix: TDS incorrectly applied when Advance is in previous FY (backport #41194)
2024-04-30 07:18:04 +05:30
ruthra kumar
a7d1a88519 fix: display term name for single term invoices
(cherry picked from commit 5fa4cfee04)
2024-04-30 01:40:17 +00:00
ruthra kumar
15ac3d8b0b test: TDS deduction across fiscal year
(cherry picked from commit 2f9a144023)
2024-04-30 01:27:55 +00:00
ruthra kumar
08f888a326 fix: incorrectly applying TDS when Advance is in previous FY
(cherry picked from commit b195f519e2)
2024-04-30 01:27:54 +00:00
Nikhil Kothari
ee9822fd42 fix: party and party type label on accounting preview
(cherry picked from commit f7f3b22786)
2024-04-29 13:24:48 +00:00
Deepesh Garg
17eb2f02f4 Merge pull request #41226 from frappe/mergify/bp/version-15-hotfix/pr-40865
fix: missing def expense if no exp in first month (#40865)
2024-04-29 17:25:15 +05:30
Ankush Menat
067419b7cd chore: delete invalid translations (#41227) 2024-04-29 10:31:22 +05:30
Dany Robert
acfee42735 fix: expense causing p&l test case to fail
(cherry picked from commit 01888c98bc)
2024-04-29 04:55:32 +00:00
Dany Robert
62966ac550 chore: semgrep
(cherry picked from commit 581af4eced)
2024-04-29 04:55:32 +00:00
Dany Robert
23c3c3cc0c fix: test case for zero deferred expense
(cherry picked from commit 7ef4dbcaf6)
2024-04-29 04:55:32 +00:00
Dany Robert
0a65a37eed fix: missing def expense if no exp in first month
(cherry picked from commit 5c9ce575f6)
2024-04-29 04:55:31 +00:00
ruthra kumar
0df1005cb2 Merge pull request #41209 from frappe/mergify/bp/version-15-hotfix/pr-41208
fix: set receivable account based on response type (backport #41208)
2024-04-26 20:30:55 +05:30
rohitwaghchaure
807b2d5c0a Merge pull request #41206 from frappe/mergify/bp/version-15-hotfix/pr-41165
feat: allow to do reposting for all stock transactions (audit) (backport #41165)
2024-04-26 14:25:40 +05:30
ruthra kumar
f65b28a189 fix: handle and receivable accounts based on response type
(cherry picked from commit 066859cca0)
2024-04-26 08:43:23 +00:00
rohitwaghchaure
a292e52b34 chore: fix conflicts 2024-04-26 13:47:03 +05:30
Rohit Waghchaure
4555f8a9a6 feat: allow to do reposting for all transactions (audit)
(cherry picked from commit aefbe21b46)

# Conflicts:
#	erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json
2024-04-26 08:15:11 +00:00
rohitwaghchaure
0fea5564b6 Merge pull request #41201 from frappe/mergify/bp/version-15-hotfix/pr-41185
fix: args when get the delivery note in delivery trip (backport #41185)
2024-04-26 13:34:44 +05:30
rohitwaghchaure
476b7f43a2 Merge pull request #41202 from frappe/mergify/bp/version-15-hotfix/pr-41182
fix: rendering the email template when user HTML (backport #41182)
2024-04-26 13:34:27 +05:30
rohitwaghchaure
d5d846f481 Merge pull request #41203 from frappe/mergify/bp/version-15-hotfix/pr-41167
fix: warehouse type filter for stock reports (backport #41167)
2024-04-26 13:34:00 +05:30
rohitwaghchaure
6fd356b654 chore: fix conflicts 2024-04-26 13:13:55 +05:30
Rohit Waghchaure
48351d6da8 fix: warehouse type filter for stock reports
(cherry picked from commit 4250ac821f)
2024-04-26 07:41:48 +00:00
Nihantra C. Patel
3068dad410 fix: rendering the email template when user HTML
(cherry picked from commit 7cb66f7fd3)
2024-04-26 07:41:37 +00:00
Nihantra Patel
61d6838b2c fix: args when get the delivery note in delivery trip
(cherry picked from commit ca577f7aaa)
2024-04-26 07:40:36 +00:00
Nihantra Patel
e9acacdd5d fix: args when get the delivery note in delivery trip
(cherry picked from commit 2f359e201d)

# Conflicts:
#	erpnext/stock/doctype/delivery_note/delivery_note.py
2024-04-26 07:40:36 +00:00
rohitwaghchaure
3bb26fde2b Merge pull request #41199 from frappe/mergify/bp/version-15-hotfix/pr-41195
fix: basic rate for SABB (backport #41195)
2024-04-26 12:54:46 +05:30
Rohit Waghchaure
7b7987363f fix: basic rate for SABB
(cherry picked from commit 7fa94843aa)
2024-04-26 07:21:46 +00:00
rohitwaghchaure
3193ef0a89 Merge pull request #41197 from frappe/mergify/bp/version-15-hotfix/pr-41192
fix: duplicate column in the stock ledger report (backport #41192)
2024-04-26 12:49:25 +05:30
Rohit Waghchaure
a62298a635 fix: duplicate column in the stock ledger report
(cherry picked from commit be7fd6bfb4)
2024-04-26 06:53:14 +00:00
Frappe PR Bot
6a7b6f6262 chore(release): Bumped to Version 15.21.2
## [15.21.2](https://github.com/frappe/erpnext/compare/v15.21.1...v15.21.2) (2024-04-26)

### Bug Fixes

* enable advance in separate acc only for customer and Supplier ([6da927a](6da927a573))
2024-04-26 02:10:51 +00:00
ruthra kumar
5b389bf5ca Merge pull request #41191 from frappe/mergify/bp/version-15/pr-41183
fix: restrict Advance in separate party to customer and supplier (backport #41183)
2024-04-26 07:39:32 +05:30
ruthra kumar
6da927a573 fix: enable advance in separate acc only for customer and Supplier
(cherry picked from commit 3c1af2acf0)
2024-04-26 01:50:34 +00:00
ruthra kumar
e6c7832485 Merge pull request #41189 from frappe/mergify/bp/version-15-hotfix/pr-41183
fix: restrict Advance in separate party to customer and supplier (backport #41183)
2024-04-25 20:35:50 +05:30
ruthra kumar
c3073d6e74 fix: enable advance in separate acc only for customer and Supplier
(cherry picked from commit 3c1af2acf0)
2024-04-25 14:30:58 +00:00
mergify[bot]
b34582e6ba fix: handle stock balance unbuffered_cursor error (backport #41186) (#41188)
fix: handle stock balance unbuffered_cursor error (#41186)

(cherry picked from commit 341fb6d8f3)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2024-04-25 17:26:26 +05:30
ruthra kumar
5136ffd10d Merge pull request #41139 from frappe/mergify/bp/version-15-hotfix/pr-41086
fix: prevent foreign currency  accounts as advance accounts. (backport #41086)
2024-04-25 09:37:49 +05:30
Frappe PR Bot
cacb5bfe03 chore(release): Bumped to Version 15.21.1
## [15.21.1](https://github.com/frappe/erpnext/compare/v15.21.0...v15.21.1) (2024-04-25)

### Bug Fixes

* mode of payment has precedance ([0dfd6fa](0dfd6facc1))
2024-04-25 03:38:33 +00:00
ruthra kumar
88fcb8aebb Merge pull request #41180 from frappe/mergify/bp/version-15/pr-41142
fix: mode of payment has precedance in Payment Entry (backport #41142)
2024-04-25 09:07:05 +05:30
ruthra kumar
0dfd6facc1 fix: mode of payment has precedance
Mode of Payment is given precedence over company/party bank account

(cherry picked from commit 4aef969879)
2024-04-25 03:34:30 +00:00
ruthra kumar
5988941032 Merge pull request #41177 from frappe/mergify/bp/version-15-hotfix/pr-41142
fix: mode of payment has precedance in Payment Entry (backport #41142)
2024-04-25 08:55:20 +05:30
ruthra kumar
c6145a1101 fix: mode of payment has precedance
Mode of Payment is given precedence over company/party bank account

(cherry picked from commit 4aef969879)
2024-04-25 03:13:13 +00:00
Frappe PR Bot
2fb035fe1b chore(release): Bumped to Version 15.21.0
# [15.21.0](https://github.com/frappe/erpnext/compare/v15.20.6...v15.21.0) (2024-04-24)

### Bug Fixes

* account and stock manager read perm ([572e844](572e844a91))
* allow Employee role to select cost center & project (accounting dimensions) (backport [#41160](https://github.com/frappe/erpnext/issues/41160)) ([#41162](https://github.com/frappe/erpnext/issues/41162)) ([90d6e55](90d6e550aa))
* Allow updating cost center and project for repostable doctypes ([e278688](e278688a4b))
* balance qty for stock ledger report ([74ed656](74ed656bb9))
* do not add actual expense twice for validating budget ([c72478c](c72478c74d))
* do not add qty to supplied items (backport [#41061](https://github.com/frappe/erpnext/issues/41061)) ([#41066](https://github.com/frappe/erpnext/issues/41066)) ([1ae447e](1ae447e4fc))
* don't attempt to set gender from salutation (backport [#40997](https://github.com/frappe/erpnext/issues/40997)) ([#41073](https://github.com/frappe/erpnext/issues/41073)) ([ee7aaf0](ee7aaf0ea4))
* duplicate serial and batch bundle in stock entry and stock reco ([c10c211](c10c21157d))
* incorrect stock posting for current qty ([05d5c48](05d5c48d29))
* Missing args while fetching items from delivery note ([3b4575a](3b4575af3d))
* not able to update default supplier from Supplier Quotation Comparison report ([80891da](80891daaed))
* Party type in Payment Order ([83931e8](83931e872b))
* Payment entry against employee ([060d46a](060d46af42))
* Permission for lower dedcution certificate ([d7ddb00](d7ddb00e86))
* search not working for so in the Production Plan ([#36459](https://github.com/frappe/erpnext/issues/36459)) ([544e56a](544e56a71c))
* stock reco negative qty validation ([aee03fe](aee03fe2ef))
* validate uom is integer for PR item (backport [#41074](https://github.com/frappe/erpnext/issues/41074)) ([#41077](https://github.com/frappe/erpnext/issues/41077)) ([93242ca](93242ca883))
* validation for fraction number in Work Order ([ef2553e](ef2553edf9))
* validation for zero qty in SABB ([85796b3](85796b3534))

### Features

* Available batches report as on specific date ([791e426](791e4269d2))
* show expense breakup ([e047e1e](e047e1eb15))
2024-04-24 10:48:02 +00:00
Deepesh Garg
f3be4cd2b3 Merge pull request #41150 from frappe/version-15-hotfix
chore: release v15
2024-04-24 16:16:41 +05:30
Deepesh Garg
15bb41d3c2 Merge pull request #41164 from frappe/mergify/bp/version-15-hotfix/pr-41106
chore: Remove heatmap from party dashboards (#41106)
2024-04-24 13:00:50 +05:30
Deepesh Garg
410990b2a3 chore: Remove heatmap from party dashboards
(cherry picked from commit a8f03e8baa)
2024-04-24 06:32:03 +00:00
Deepesh Garg
51a2b74db9 Merge pull request #41101 from frappe/mergify/bp/version-15-hotfix/pr-41085
fix: Permission for lower deduction certificate (#41085)
2024-04-24 12:00:50 +05:30
Deepesh Garg
bfc34939f2 Merge pull request #41048 from frappe/mergify/bp/version-15-hotfix/pr-40962
fix: Allow updating cost center and project for repostable doctypes (#40962)
2024-04-24 12:00:28 +05:30
mergify[bot]
90d6e550aa fix: allow Employee role to select cost center & project (accounting dimensions) (backport #41160) (#41162)
* fix: allow Employee role to select cost center & project (accounting dimensions)

(cherry picked from commit d0d496a515)

# Conflicts:
#	erpnext/accounts/doctype/cost_center/cost_center.json
#	erpnext/projects/doctype/project/project.json

* chore: fix conflicts

---------

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2024-04-24 11:43:46 +05:30
Deepesh Garg
4f5af0ff9f chore: Resolve conflicts 2024-04-24 11:32:26 +05:30
rohitwaghchaure
ab21b518e1 Merge pull request #41156 from frappe/mergify/bp/version-15-hotfix/pr-41135
feat: Available batches as on specific date report (backport #41135)
2024-04-24 11:14:16 +05:30
Nabin Hait
d4e2adbdb2 Merge pull request #41141 from frappe/mergify/bp/version-15-hotfix/pr-41136
fix: Missing args while fetching items from delivery note in Installation Note (backport #41136)
2024-04-24 10:58:34 +05:30
ruthra kumar
85e0e8110a Merge pull request #41149 from frappe/mergify/bp/version-15-hotfix/pr-41147
refactor: better description and pop up on Advance accounts (backport #41147)
2024-04-24 07:19:19 +05:30
Rohit Waghchaure
791e4269d2 feat: Available batches report as on specific date
(cherry picked from commit b8f7979794)
2024-04-23 16:48:56 +00:00
rohitwaghchaure
3df5aa04b5 Merge pull request #41153 from frappe/mergify/bp/version-15-hotfix/pr-41145
fix: incorrect stock posting for current qty (backport #41145)
2024-04-23 17:12:03 +05:30
Rohit Waghchaure
05d5c48d29 fix: incorrect stock posting for current qty
(cherry picked from commit d4fe313de2)
2024-04-23 11:21:47 +00:00
ruthra kumar
2b736b52d6 chore: resolve conflicts 2024-04-23 15:35:02 +05:30
ruthra kumar
24954b909b refactor: popup to inform on limited support for Advance accounts
(cherry picked from commit 9dbd321133)
2024-04-23 09:17:00 +00:00
ruthra kumar
ed5affe25a refactor: better description for advance account
(cherry picked from commit de9c8fc9d6)

# Conflicts:
#	erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
#	erpnext/setup/doctype/company/company.json
2024-04-23 09:17:00 +00:00
rohitwaghchaure
8591a151de Merge pull request #41143 from frappe/mergify/bp/version-15-hotfix/pr-41098
fix: stock reconciliation negative qty validation (backport #41098)
2024-04-23 13:43:08 +05:30
rohitwaghchaure
b2a0e4b810 chore: fix conflicts 2024-04-23 13:17:23 +05:30
Rohit Waghchaure
aee03fe2ef fix: stock reco negative qty validation
(cherry picked from commit 289495c308)

# Conflicts:
#	erpnext/stock/stock_ledger.py
2024-04-23 07:44:47 +00:00
Deepesh Garg
62702b8bd6 Merge pull request #41134 from frappe/mergify/bp/version-15-hotfix/pr-41104
fix: Payment entry against employee (#41104)
2024-04-23 12:04:13 +05:30
Deepesh Garg
cfb36cc9a8 Merge pull request #41131 from frappe/mergify/bp/version-15-hotfix/pr-40797
fix: Party type in Payment Order (#40797)
2024-04-23 12:03:47 +05:30
Nabin Hait
3b4575af3d fix: Missing args while fetching items from delivery note
(cherry picked from commit bbe323fbb4)
2024-04-23 04:55:06 +00:00
ruthra kumar
dd67b0ee61 fix: advance account validation in company master
(cherry picked from commit 1ad065fc54)
2024-04-23 01:45:45 +00:00
ruthra kumar
fb4a75c5aa fix: validation to prevent foreign currency advance accounts in PE
(cherry picked from commit e3fc5990ee)
2024-04-23 01:45:45 +00:00
Deepesh Garg
060d46af42 fix: Payment entry against employee
(cherry picked from commit 93e6c6ccab)
2024-04-22 06:08:47 +00:00
Deepesh Garg
83931e872b fix: Party type in Payment Order
(cherry picked from commit 91fa41c9ec)
2024-04-22 06:05:12 +00:00
Gursheen Kaur Anand
a8866b61a1 Merge pull request #41124 from frappe/mergify/bp/version-15-hotfix/pr-40769
fix: budget validation for purchase orders (backport #40769)
2024-04-21 18:57:15 +05:30
rohitwaghchaure
f733eddf0b Merge pull request #41122 from frappe/mergify/bp/version-15-hotfix/pr-41120
fix: search not working for so in the Production Plan (backport #36459) (backport #41120)
2024-04-21 17:24:42 +05:30
Gursheen Anand
ba99bc5fff refactor: show list for expense breakup
(cherry picked from commit 9a12376e29)
2024-04-21 11:26:31 +00:00
Gursheen Anand
e047e1eb15 feat: show expense breakup
(cherry picked from commit 59292a09c4)
2024-04-21 11:26:31 +00:00
Gursheen Anand
c72478c74d fix: do not add actual expense twice for validating budget
(cherry picked from commit af26ac96e9)
2024-04-21 11:26:30 +00:00
rohitwaghchaure
544e56a71c fix: search not working for so in the Production Plan (#36459)
fix: search not working for so
(cherry picked from commit 8c57d56240)
(cherry picked from commit 9a6e762b8b)
2024-04-21 11:21:04 +00:00
rohitwaghchaure
bb5096075f Merge pull request #41114 from frappe/mergify/bp/version-15-hotfix/pr-41099
fix: not able to update default supplier from Supplier Quotation Comparison report (backport #41099)
2024-04-20 19:47:01 +05:30
Rohit Waghchaure
80891daaed fix: not able to update default supplier from Supplier Quotation Comparison report
(cherry picked from commit ad8e189c26)
2024-04-20 05:51:36 +00:00
rohitwaghchaure
77a764e5bd Merge pull request #41107 from frappe/mergify/bp/version-15-hotfix/pr-41102
fix: balance qty for stock ledger report (backport #41102)
2024-04-20 11:16:06 +05:30
Rohit Waghchaure
74ed656bb9 fix: balance qty for stock ledger report
(cherry picked from commit f00ae0b92b)
2024-04-19 16:22:16 +00:00
rohitwaghchaure
82ce228433 Merge pull request #41097 from frappe/mergify/bp/version-15-hotfix/pr-41067
fix: validation for zero qty in SABB (backport #41067)
2024-04-19 21:49:55 +05:30
Deepesh Garg
d7ddb00e86 fix: Permission for lower dedcution certificate
(cherry picked from commit f6f118855b)

# Conflicts:
#	erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.json
2024-04-19 10:11:47 +00:00
Rohit Waghchaure
85796b3534 fix: validation for zero qty in SABB
(cherry picked from commit 497f560b4b)
2024-04-19 09:41:27 +00:00
Frappe PR Bot
b582570022 chore(release): Bumped to Version 15.20.6
## [15.20.6](https://github.com/frappe/erpnext/compare/v15.20.5...v15.20.6) (2024-04-19)

### Bug Fixes

* account and stock manager read perm ([6cc7c08](6cc7c08ccf))
2024-04-19 08:40:13 +00:00
Gursheen Kaur Anand
8914bce3d8 Merge pull request #41095 from frappe/mergify/bp/version-15/pr-41093
fix: accounts manager perm for FY (backport #41093)
2024-04-19 14:08:59 +05:30
Gursheen Anand
6cc7c08ccf fix: account and stock manager read perm
(cherry picked from commit 572e844a91)
2024-04-19 08:05:05 +00:00
Gursheen Kaur Anand
a1fb289290 Merge pull request #41093 from GursheenK/fy-accounts-manager-perm
fix: accounts manager perm for FY
2024-04-19 13:28:32 +05:30
Gursheen Anand
572e844a91 fix: account and stock manager read perm 2024-04-19 13:05:25 +05:30
rohitwaghchaure
906b9562de Merge pull request #41084 from frappe/mergify/bp/version-15-hotfix/pr-41083
fix: validation for fraction number in Work Order (backport #41083)
2024-04-18 15:56:07 +05:30
Rohit Waghchaure
ef2553edf9 fix: validation for fraction number in Work Order
(cherry picked from commit f8305c2fc0)
2024-04-18 09:15:49 +00:00
mergify[bot]
93242ca883 fix: validate uom is integer for PR item (backport #41074) (#41077)
fix: validate uom is integer for PR item

(cherry picked from commit 9a290fdfc9)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2024-04-18 07:53:20 +05:30
mergify[bot]
ee7aaf0ea4 fix: don't attempt to set gender from salutation (backport #40997) (#41073)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
fix: don't attempt to set gender from salutation (#40997)
2024-04-17 17:53:43 +02:00
mergify[bot]
1ae447e4fc fix: do not add qty to supplied items (backport #41061) (#41066)
fix: do not add qty to supplied items

(cherry picked from commit 8233c392fb)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2024-04-17 17:30:43 +05:30
Frappe PR Bot
5ecb022abc chore(release): Bumped to Version 15.20.5
## [15.20.5](https://github.com/frappe/erpnext/compare/v15.20.4...v15.20.5) (2024-04-17)

### Bug Fixes

* duplicate serial and batch bundle in stock entry and stock reco ([a1db5f0](a1db5f0f0a))
2024-04-17 09:25:54 +00:00
rohitwaghchaure
12ab3972de Merge pull request #41058 from frappe/mergify/bp/version-15/pr-41056
fix: duplicate serial and batch bundle in stock entry and stock reco (backport #41053) (backport #41056)
2024-04-17 14:54:34 +05:30
Rohit Waghchaure
a1db5f0f0a fix: duplicate serial and batch bundle in stock entry and stock reco
(cherry picked from commit 732b6e1417)
(cherry picked from commit c10c21157d)
2024-04-17 09:00:05 +00:00
rohitwaghchaure
5195d8a765 Merge pull request #41056 from frappe/mergify/bp/version-15-hotfix/pr-41053
fix: duplicate serial and batch bundle in stock entry and stock reco (backport #41053)
2024-04-17 14:29:14 +05:30
Rohit Waghchaure
c10c21157d fix: duplicate serial and batch bundle in stock entry and stock reco
(cherry picked from commit 732b6e1417)
2024-04-17 07:50:06 +00:00
Deepesh Garg
116a429c45 chore: resolve conflicts 2024-04-17 12:09:05 +05:30
Deepesh Garg
6c10783823 chore: resolve conflicts 2024-04-17 11:47:52 +05:30
Frappe PR Bot
00d45c34ba chore(release): Bumped to Version 15.20.4
## [15.20.4](https://github.com/frappe/erpnext/compare/v15.20.3...v15.20.4) (2024-04-17)

### Bug Fixes

* Delayed Order Report not working (backport [#41037](https://github.com/frappe/erpnext/issues/41037)) ([#41039](https://github.com/frappe/erpnext/issues/41039)) ([40d059c](40d059c7c1))
* do not validate batch qty for LCV ([5de9b6a](5de9b6ac75))
* Don't set delivery date as today while making SO from Quotation ([fea906b](fea906b883))
* expense account set as COGS for stock entry Material Issue (backport [#41026](https://github.com/frappe/erpnext/issues/41026)) ([#41029](https://github.com/frappe/erpnext/issues/41029)) ([f59e433](f59e43320b))
* get address if multiple companies ([dcfc768](dcfc768d33))
* get address if multiple companies ([ccdbad9](ccdbad9f90))
* **gp:** SLEs not fetched for correct warehouse ([881dc02](881dc02349))
* incorrect exc gain/loss for PE against JE for payable accounts ([361d7f1](361d7f1ba5))
* landed cost voucher for legacy pr with batch ([4e215c6](4e215c6b7b))
* Link Validation Error on Dunning cancellation ([0053d57](0053d57ec4))
* Multiple partial payment requests against Purchase Invoice ([e287376](e287376cc8))
* not able to submit subcontracting receipt (backport [#41041](https://github.com/frappe/erpnext/issues/41041)) ([#41045](https://github.com/frappe/erpnext/issues/41045)) ([b27ad76](b27ad76557))
* Subcontracting Receipt GL Entries (backport [#40773](https://github.com/frappe/erpnext/issues/40773)) ([#40979](https://github.com/frappe/erpnext/issues/40979)) ([9abc71f](9abc71f9c8))
* Test case ([641b2a4](641b2a4705))
* test cases ([0ee91a2](0ee91a2e54))
* type of transaction validation for the stock entry (backport [#40986](https://github.com/frappe/erpnext/issues/40986)) ([#40992](https://github.com/frappe/erpnext/issues/40992)) ([4342b89](4342b891eb))
* **ux:** Sales Order Stock Reservation Dialog (backport [#40707](https://github.com/frappe/erpnext/issues/40707)) ([#40980](https://github.com/frappe/erpnext/issues/40980)) ([14a1a18](14a1a18243))
* voucher no. is link field for non english user interface ([1c28ed4](1c28ed4d5b))
* zero division error ([e9c6c5a](e9c6c5a8eb))
2024-04-17 06:13:12 +00:00
rohitwaghchaure
44610621ab Merge pull request #41031 from frappe/version-15-hotfix
chore: release v15
2024-04-17 11:41:42 +05:30
Deepesh Garg
5f41036f4a chore: resolve conflicts 2024-04-17 11:38:13 +05:30
Deepesh Garg
e278688a4b fix: Allow updating cost center and project for repostable doctypes
(cherry picked from commit c3845ac0f1)

# Conflicts:
#	erpnext/accounts/doctype/payment_entry/payment_entry.json
#	erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.json
2024-04-17 05:55:02 +00:00
ruthra kumar
088aa94fa1 Merge pull request #40789 from frappe/mergify/bp/version-15-hotfix/pr-40786
fix(gp): SLEs not fetched for correct warehouse (backport #40786)
2024-04-17 10:35:09 +05:30
ruthra kumar
c34b814c16 Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-40786 2024-04-17 10:19:08 +05:30
Dany Robert
881dc02349 fix(gp): SLEs not fetched for correct warehouse
(cherry picked from commit f958e8be06)
2024-04-17 10:17:40 +05:30
mergify[bot]
b27ad76557 fix: not able to submit subcontracting receipt (backport #41041) (#41045)
fix: not able to submit subcontracting receipt (#41041)

(cherry picked from commit 5b1493b56c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-04-17 06:37:38 +05:30
mergify[bot]
40d059c7c1 fix: Delayed Order Report not working (backport #41037) (#41039)
fix: Delayed Order Report not working (#41037)

(cherry picked from commit d69a18b826)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-04-16 18:24:38 +05:30
ruthra kumar
52b42dfc14 Merge pull request #41035 from frappe/mergify/bp/version-15-hotfix/pr-40373
fix: get address if multiple companies (backport #40373)
2024-04-16 16:39:39 +05:30
Nihantra C. Patel
dcfc768d33 fix: get address if multiple companies
(cherry picked from commit 655a1797be)
2024-04-16 11:01:58 +00:00
Nihantra Patel
ccdbad9f90 fix: get address if multiple companies
(cherry picked from commit c6cf1bec76)
2024-04-16 11:01:57 +00:00
mergify[bot]
f59e43320b fix: expense account set as COGS for stock entry Material Issue (backport #41026) (#41029)
fix: expense account set as COGS for stock entry Material Issue (#41026)

(cherry picked from commit 03231e99ef)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-04-16 14:22:43 +05:30
ruthra kumar
ec337d3465 Merge pull request #41023 from frappe/mergify/bp/version-15-hotfix/pr-41020
fix: incorrect exc gain/loss for PE against JE for payable accounts (backport #41020)
2024-04-16 11:22:26 +05:30
ruthra kumar
59950290a2 test: exc gain/loss journals booking in Payable accounts
(cherry picked from commit 8821c98625)
2024-04-16 05:29:53 +00:00
ruthra kumar
361d7f1ba5 fix: incorrect exc gain/loss for PE against JE for payable accounts
(cherry picked from commit 81b574053f)
2024-04-16 05:29:52 +00:00
Deepesh Garg
80adafc207 Merge pull request #41017 from frappe/mergify/bp/version-15-hotfix/pr-40812
fix: Multiple partial payment requests against Purchase Invoice (#40812)
2024-04-16 09:35:17 +05:30
Deepesh Garg
641b2a4705 fix: Test case
(cherry picked from commit 071e5ed648)
2024-04-15 16:21:41 +00:00
Deepesh Garg
e287376cc8 fix: Multiple partial payment requests against Purchase Invoice
(cherry picked from commit 45d5f6e00a)
2024-04-15 16:21:41 +00:00
ruthra kumar
21dfb68763 Merge pull request #41009 from frappe/mergify/bp/version-15-hotfix/pr-40714
fix: voucher no. is link field for non english user interface (backport #40714)
2024-04-15 14:26:54 +05:30
“Khushi
1c28ed4d5b fix: voucher no. is link field for non english user interface
(cherry picked from commit 2b8928cae6)
2024-04-15 14:02:33 +05:30
Nabin Hait
10059309da Merge pull request #41005 from frappe/mergify/bp/version-15-hotfix/pr-40858
fix: Don't set delivery date as today while making SO from Quotation (backport #40858)
2024-04-15 13:05:27 +05:30
Nabin Hait
0ee91a2e54 fix: test cases
(cherry picked from commit 65c74fa3c7)
2024-04-15 07:03:39 +00:00
Nabin Hait
fea906b883 fix: Don't set delivery date as today while making SO from Quotation
(cherry picked from commit fec20decc1)
2024-04-15 07:03:38 +00:00
Deepesh Garg
128391be0a Merge pull request #40990 from frappe/mergify/bp/version-15-hotfix/pr-40985
fix: Add payment request to dimension list (#40985)
2024-04-13 16:37:21 +05:30
Frappe PR Bot
2febb2965e chore(release): Bumped to Version 15.20.3
## [15.20.3](https://github.com/frappe/erpnext/compare/v15.20.2...v15.20.3) (2024-04-13)

### Bug Fixes

* do not validate batch qty for LCV (backport [#40975](https://github.com/frappe/erpnext/issues/40975)) (backport [#40981](https://github.com/frappe/erpnext/issues/40981)) ([#40991](https://github.com/frappe/erpnext/issues/40991)) ([7d12674](7d12674430))
* type of transaction validation for the stock entry (backport [#40986](https://github.com/frappe/erpnext/issues/40986)) (backport [#40992](https://github.com/frappe/erpnext/issues/40992)) ([#40994](https://github.com/frappe/erpnext/issues/40994)) ([e07557c](e07557c9c5))
2024-04-13 10:29:03 +00:00
mergify[bot]
e07557c9c5 fix: type of transaction validation for the stock entry (backport #40986) (backport #40992) (#40994)
fix: type of transaction validation for the stock entry (backport #40986) (#40992)

* fix: type of transaction validation for the stock entry

(cherry picked from commit 8ad0295f1b)

* chore: fix test case

---------

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
(cherry picked from commit 4342b891eb)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-04-13 15:57:50 +05:30
mergify[bot]
7d12674430 fix: do not validate batch qty for LCV (backport #40975) (backport #40981) (#40991)
fix: do not validate batch qty for LCV

(cherry picked from commit baf0c83cc5)
(cherry picked from commit 5de9b6ac75)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2024-04-13 15:57:41 +05:30
mergify[bot]
4342b891eb fix: type of transaction validation for the stock entry (backport #40986) (#40992)
* fix: type of transaction validation for the stock entry

(cherry picked from commit 8ad0295f1b)

* chore: fix test case

---------

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2024-04-13 15:30:58 +05:30
ruthra kumar
2d94ea074c chore: patch to setup exiting dimensions in Payment Request
(cherry picked from commit 3f8d785f02)
2024-04-13 04:52:23 +00:00
ruthra kumar
4dbeabc8ef refactor: add payment request to dimension list
(cherry picked from commit e93b4a1f2c)
2024-04-13 04:52:23 +00:00
Frappe PR Bot
7711b13766 chore(release): Bumped to Version 15.20.2
## [15.20.2](https://github.com/frappe/erpnext/compare/v15.20.1...v15.20.2) (2024-04-12)

### Bug Fixes

* Subcontracting Receipt GL Entries (backport [#40773](https://github.com/frappe/erpnext/issues/40773)) (backport [#40979](https://github.com/frappe/erpnext/issues/40979)) ([#40983](https://github.com/frappe/erpnext/issues/40983)) ([3d6ba6f](3d6ba6f21f))
2024-04-12 10:03:02 +00:00
mergify[bot]
3d6ba6f21f fix: Subcontracting Receipt GL Entries (backport #40773) (backport #40979) (#40983)
fix: Subcontracting Receipt GL Entries (backport #40773) (#40979)

* fix: Subcontracting Receipt GL Entries

(cherry picked from commit 9808ae92a4)

# Conflicts:
#	erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py

* chore: `conflicts`

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
(cherry picked from commit 9abc71f9c8)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-04-12 15:31:40 +05:30
mergify[bot]
9abc71f9c8 fix: Subcontracting Receipt GL Entries (backport #40773) (#40979)
* fix: Subcontracting Receipt GL Entries

(cherry picked from commit 9808ae92a4)

# Conflicts:
#	erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py

* chore: `conflicts`

---------

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2024-04-12 15:15:11 +05:30
rohitwaghchaure
52ee6dcaed Merge pull request #40981 from frappe/mergify/bp/version-15-hotfix/pr-40975
fix: do not validate batch qty for LCV (backport #40975)
2024-04-12 14:52:54 +05:30
Rohit Waghchaure
5de9b6ac75 fix: do not validate batch qty for LCV
(cherry picked from commit baf0c83cc5)
2024-04-12 08:36:12 +00:00
mergify[bot]
14a1a18243 fix(ux): Sales Order Stock Reservation Dialog (backport #40707) (#40980)
fix(ux): Sales Order Stock Reservation Dialog

(cherry picked from commit 5daf19da40)

Co-authored-by: s-aga-r <sagarsharma.s312@gmail.com>
2024-04-12 13:28:17 +05:30
ruthra kumar
3762259d3d Merge pull request #40974 from frappe/mergify/bp/version-15-hotfix/pr-40973
fix: Link Validation Error on Dunning cancellation (backport #40973)
2024-04-12 10:44:18 +05:30
ruthra kumar
0053d57ec4 fix: Link Validation Error on Dunning cancellation
(cherry picked from commit 205fd9888c)
2024-04-12 04:57:40 +00:00
Frappe PR Bot
c24d9675e8 chore(release): Bumped to Version 15.20.1
## [15.20.1](https://github.com/frappe/erpnext/compare/v15.20.0...v15.20.1) (2024-04-11)

### Bug Fixes

* landed cost voucher for legacy pr with batch ([83a5284](83a5284ba9))
* zero division error ([72fc083](72fc0836e1))
2024-04-11 13:23:28 +00:00
rohitwaghchaure
e90b60b5cb Merge pull request #40971 from frappe/mergify/bp/version-15/pr-40969
fix: zero division error (backport #40967) (backport #40969)
2024-04-11 18:52:09 +05:30
rohitwaghchaure
5d2ac5b3e9 Merge pull request #40970 from frappe/mergify/bp/version-15/pr-40968
fix: landed cost voucher for legacy pr with batch (backport #40966) (backport #40968)
2024-04-11 18:51:54 +05:30
Rohit Waghchaure
72fc0836e1 fix: zero division error
(cherry picked from commit f9e230e758)
(cherry picked from commit e9c6c5a8eb)
2024-04-11 12:47:35 +00:00
rohitwaghchaure
ea8c57263b Merge pull request #40969 from frappe/mergify/bp/version-15-hotfix/pr-40967
fix: zero division error (backport #40967)
2024-04-11 18:15:36 +05:30
Rohit Waghchaure
83a5284ba9 fix: landed cost voucher for legacy pr with batch
(cherry picked from commit fa91cda46c)
(cherry picked from commit 4e215c6b7b)
2024-04-11 12:31:50 +00:00
rohitwaghchaure
af0679076b Merge pull request #40968 from frappe/mergify/bp/version-15-hotfix/pr-40966
fix: landed cost voucher for legacy pr with batch (backport #40966)
2024-04-11 17:59:36 +05:30
Rohit Waghchaure
e9c6c5a8eb fix: zero division error
(cherry picked from commit f9e230e758)
2024-04-11 12:25:39 +00:00
Rohit Waghchaure
4e215c6b7b fix: landed cost voucher for legacy pr with batch
(cherry picked from commit fa91cda46c)
2024-04-11 12:12:52 +00:00
Frappe PR Bot
04ca25e199 chore(release): Bumped to Version 15.20.0
# [15.20.0](https://github.com/frappe/erpnext/compare/v15.19.2...v15.20.0) (2024-04-11)

### Bug Fixes

* check if there is any existing depreciation schedule ([dcb7e27](dcb7e27a5e))
* Default company bank account ([d8c5f15](d8c5f15bc0))
* depr amount pro rata and related tests ([350d53d](350d53dbe1))
* depr amount pro rata and related tests ([854d4a9](854d4a9c79))
* Don't call get_fiscal_year if setup is not done yet ([9beaf65](9beaf65d19))
* exclude some query builder lines from ruff rules ([41d7c03](41d7c03cbb))
* Fetch outstanding and total amount for reference journal entry ([c72f61e](c72f61ef2f))
* Get default party bank account and company bank account for a party ([1745673](174567350e))
* Get pro-rata amount based on correct days ([1276855](1276855f40))
* Get pro-rata amount based on correct days ([5bf7c79](5bf7c799e2))
* group warehouse added in the stock reconciliation ([e6d6172](e6d6172b4c))
* ignore dimension validation for cancelled entries ([b288c73](b288c73437))
* Ignore permissions while fetching module settings properties ([5e9f31c](5e9f31cf21))
* incorrect currency symbol in General Ledger print ([9f4663b](9f4663b4d0))
* incorrect operator causing incorrect validation ([80c2a33](80c2a33fd7))
* invalid ledger entries on payment against reverse payments ([f3eb559](f3eb559a71))
* linter issues ([8016b0a](8016b0aee7))
* notify update when update outstanding amount ([b10d3c4](b10d3c4da2))
* notify update when update outstanding amount - Linters ([f514819](f51481983d))
* pass empty string email content of pos invoice ([7a9291b](7a9291b3d1))
* pick list validation didn't consider existing draft pick list ([722abf1](722abf1b6b))
* pro-rata amount for straight line method ([16a5475](16a5475c0c))
* query_report.trigger_refresh is not a function ([4f48ede](4f48ede7a0))
* Recalculate sales commission on item update ([5117494](5117494a52))
* Receive payment entry from Employee ([0cee954](0cee954f84))
* resolved merge conflict ([edd143b](edd143b084))
* Show amount in transaction currency in general ledger report ([67bac41](67bac41df4))
* show currency symbol in base currency in fixed asset register report ([7904389](79043894b2))
* Show itemised TDS breakup based on Apply TDS checkbox on item level ([4e3c885](4e3c885808))
* **test:** Advance Received should be under liability account ([4f13f47](4f13f4779a))
* **test:** for reverse payments, only advance acc should have effect ([3668de7](3668de7cb7))
* translatable web footer ([#40834](https://github.com/frappe/erpnext/issues/40834)) ([e8497b2](e8497b2d80))
* **treewide:** manual ruff fixes ([7828eee](7828eee014))
* use 'eq' and isnull() on qb conditions ([2268995](22689958da))
* use reference type name to update exc rate ([5b62f20](5b62f2050b))
* Values in transaciton currency ([3b179ba](3b179bad89))
* workstation refresh after prompt ([9f12c96](9f12c964dc))
* wrong value for total amount in payments ([807def0](807def0f04))

### Features

* ledger health doctype ([5d978c2](5d978c2729))
* new hook `fields_for_group_similar_items` to group additional fields for print formats ([#40831](https://github.com/frappe/erpnext/issues/40831)) ([4ef4466](4ef4466e67))
2024-04-11 07:38:28 +00:00
Nabin Hait
205e7afb9d Merge pull request #40918 from frappe/version-15-hotfix
chore: release v15
2024-04-11 13:07:06 +05:30
Nabin Hait
3b166ea249 Merge pull request #40891 from frappe/mergify/bp/version-15-hotfix/pr-40698
fix: Get pro-rata amount based on correct days (backport #40698)
2024-04-11 11:56:32 +05:30
Nabin Hait
694187b853 Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-40698 2024-04-11 11:53:20 +05:30
Nabin Hait
91fe25356e Merge pull request #40960 from nabinhait/itemised-tds-breakup-v15-hotfix
fix: Show itemised TDS breakup based on Apply TDS checkbox on item level
2024-04-11 11:49:34 +05:30
Nabin Hait
2e35065070 Merge pull request #40961 from nabinhait/permission-issue-v15
fix: Ignore permissions while fetching module settings properties
2024-04-11 11:49:21 +05:30
Nabin Hait
cca7f17b19 Merge pull request #40963 from frappe/revert-40630-mergify/bp/version-15-hotfix/pr-40514
Revert "fix: pass empty string email content of pos invoice (backport #40514)"
2024-04-11 11:48:49 +05:30
Nabin Hait
4591ba063c Revert "fix: pass empty string email content of pos invoice (backport #40514)" 2024-04-11 11:43:59 +05:30
Nabin Hait
5ba9fbcbdb Merge pull request #40953 from frappe/mergify/bp/version-15-hotfix/pr-40916
fix: check if there is any existing depreciation schedule (backport #40916)
2024-04-11 11:32:44 +05:30
Nabin Hait
23d4b01137 Merge pull request #40825 from frappe/mergify/bp/version-15-hotfix/pr-40584
fix: show currency symbol in base currency in fixed asset register report (backport #40584)
2024-04-11 11:30:51 +05:30
Nabin Hait
a93a9122bb Merge pull request #40955 from frappe/mergify/bp/version-15-hotfix/pr-40861
fix: Get default party bank account and company bank account for a party (backport #40861)
2024-04-11 11:29:30 +05:30
Nabin Hait
ac99d8543d Merge pull request #40958 from frappe/mergify/bp/version-15-hotfix/pr-40920
fix: Fetch correct outstanding and total amount for reference journal entry (backport #40920)
2024-04-11 11:28:53 +05:30
Nabin Hait
5e9f31cf21 fix: Ignore permissions while fetching module settings properties 2024-04-11 11:23:19 +05:30
Nabin Hait
4e3c885808 fix: Show itemised TDS breakup based on Apply TDS checkbox on item level 2024-04-11 11:20:38 +05:30
Nabin Hait
711bc3ff1c Merge pull request #40951 from frappe/mergify/bp/version-15-hotfix/pr-40833
fix: wrong value for total amount in payments (backport #40833)
2024-04-11 11:12:07 +05:30
Nabin Hait
c72f61ef2f fix: Fetch outstanding and total amount for reference journal entry
(cherry picked from commit f331f9b15c)
2024-04-11 05:35:43 +00:00
Nabin Hait
174567350e fix: Get default party bank account and company bank account for a party
(cherry picked from commit f87be1d96e)
2024-04-11 05:25:34 +00:00
Nabin Hait
dcb7e27a5e fix: check if there is any existing depreciation schedule
(cherry picked from commit 433c8c450c)
2024-04-11 05:24:08 +00:00
Nabin Hait
959d9c5fda Merge branch 'version-15' into version-15-hotfix 2024-04-11 10:51:32 +05:30
Deepesh Garg
955ffce775 Merge pull request #40630 from frappe/mergify/bp/version-15-hotfix/pr-40514
fix: pass empty string email content of pos invoice (#40514)
2024-04-10 21:36:57 +05:30
Deepesh Garg
6f3a70d35f Merge pull request #40697 from frappe/mergify/bp/version-15-hotfix/pr-40641
chore: Reduce usage of cur_frm (#40641)
2024-04-10 21:35:08 +05:30
mergify[bot]
0ec1f01b00 Merge branch 'version-15-hotfix' into mergify/bp/version-15-hotfix/pr-40584 2024-04-10 15:57:49 +00:00
HarryPaulo
807def0f04 fix: wrong value for total amount in payments
(cherry picked from commit bf88b8eb65)
2024-04-10 15:57:11 +00:00
Deepesh Garg
87e30a2981 Merge pull request #40950 from frappe/mergify/bp/version-15-hotfix/pr-40863
fix: Show amount in transaction currency in general ledger report (#40863)
2024-04-10 21:24:39 +05:30
Deepesh Garg
0e1c7e8788 Merge pull request #40946 from frappe/mergify/bp/version-15-hotfix/pr-40844
fix: notify update when update outstanding amount (#40844)
2024-04-10 21:22:42 +05:30
Deepesh Garg
21454e4dfb Merge pull request #40948 from frappe/mergify/bp/version-15-hotfix/pr-40931
fix: Don't call get_fiscal_year if setup is not done yet (backport #40931)
2024-04-10 21:22:22 +05:30
Deepesh Garg
18700c26f9 Merge pull request #40945 from frappe/mergify/bp/version-15-hotfix/pr-40849
fix: Values in transaction currency (backport #40849)
2024-04-10 21:22:06 +05:30
Nabin Hait
67bac41df4 fix: Show amount in transaction currency in general ledger report
(cherry picked from commit d868122f12)
2024-04-10 15:26:25 +00:00
Corentin Flr
9beaf65d19 fix: Don't call get_fiscal_year if setup is not done yet
(cherry picked from commit c203fafb1b)
2024-04-10 15:18:26 +00:00
HarryPaulo
f51481983d fix: notify update when update outstanding amount - Linters
(cherry picked from commit 198b90eb01)
2024-04-10 15:17:17 +00:00
HarryPaulo
b10d3c4da2 fix: notify update when update outstanding amount
(cherry picked from commit f67f163e7d)
2024-04-10 15:17:16 +00:00
Deepesh Garg
3b179bad89 fix: Values in transaciton currency
(cherry picked from commit a3c9fd6567)
2024-04-10 15:16:39 +00:00
Akhil Narang
29e3a400f9 Merge pull request #40935 from akhilnarang/v15-ruff
chore: backport ruff linting/formatting
2024-04-10 16:36:13 +05:30
Akhil Narang
3141a1702c chore: gitignore ruff format
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-04-10 16:11:12 +05:30
ruthra kumar
22689958da fix: use 'eq' and isnull() on qb conditions
(cherry picked from commit eee86d2e4b)
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-04-10 16:11:12 +05:30
Akhil Narang
41d7c03cbb fix: exclude some query builder lines from ruff rules
`== None` and `== True` are intentional here

(cherry picked from commit ac69513f60)
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-04-10 16:11:10 +05:30
Akhil Narang
7828eee014 fix(treewide): manual ruff fixes
(cherry picked from commit f63396ef47)
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-04-10 16:11:10 +05:30
ruthra kumar
9b1e36ebf0 Merge pull request #40938 from frappe/mergify/bp/version-15-hotfix/pr-40936
fix: ignore dimension validation for cancelled entries (backport #40936)
2024-04-10 15:28:16 +05:30
Akhil Narang
960ef14b7a refactor(treewide): formatting and ruff fixes, + manually enabled F401
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-04-10 14:15:58 +05:30
ruthra kumar
b288c73437 fix: ignore dimension validation for cancelled entries
(cherry picked from commit 971c867f29)
2024-04-10 08:29:25 +00:00
barredterra
9eeedd8515 chore: switch to ruff for python formatting/linting
(cherry picked from commit 8afb7790de)
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-04-10 13:10:19 +05:30
ruthra kumar
0f58a3918a Merge pull request #40930 from frappe/mergify/bp/version-15-hotfix/pr-40695
feat: Periodically monitor ledger health (backport #40695)
2024-04-09 20:00:23 +05:30
ruthra kumar
501c88ca3a Merge pull request #40928 from frappe/mergify/bp/version-15-hotfix/pr-40926
fix: incorrect currency symbol in General Ledger print (backport #40926)
2024-04-09 19:54:48 +05:30
ruthra kumar
b22784878f chore: use super() instead of super(__class__, self)
(cherry picked from commit 24d37d22a3)
2024-04-09 12:25:56 +00:00
ruthra kumar
d8f627a9d7 chore: make ledger health doctype read_only
(cherry picked from commit dc79213bb3)
2024-04-09 12:25:55 +00:00
ruthra kumar
711a6eaaaf test: ledger monitoring function
(cherry picked from commit 4776d660b5)
2024-04-09 12:25:55 +00:00
ruthra kumar
9834e3ab7f chore: schedule job to run daily
(cherry picked from commit f96cf111ed)
2024-04-09 12:25:55 +00:00
ruthra kumar
a331eadf29 chore: permission and UI changes
(cherry picked from commit 1a43ed763b)
2024-04-09 12:25:55 +00:00
ruthra kumar
bf0cfae9c9 refactor: only run checks on specified companies
(cherry picked from commit 00eeacd06a)
2024-04-09 12:25:54 +00:00
ruthra kumar
522cfd0c9a refactor: make health check configurable for companies
(cherry picked from commit 704925549b)
2024-04-09 12:25:54 +00:00
ruthra kumar
9bae5e37cd refactor: control monitoring through settings page
(cherry picked from commit a42482ce35)
2024-04-09 12:25:53 +00:00
ruthra kumar
9fbb4f676b chore: settings page for health monitor
(cherry picked from commit b2fb7843d1)
2024-04-09 12:25:53 +00:00
ruthra kumar
0f927f99a4 refactor: barebones method to run checks
(cherry picked from commit 8c8d9be810)
2024-04-09 12:25:53 +00:00
ruthra kumar
6bf997ee96 refactor: flag for general and payment ledger mismatch
(cherry picked from commit d620b9eae8)
2024-04-09 12:25:52 +00:00
ruthra kumar
b8bcae9252 refactor: date on which vouchers was reported
(cherry picked from commit 402ffc6d27)
2024-04-09 12:25:51 +00:00
ruthra kumar
5d978c2729 feat: ledger health doctype
(cherry picked from commit 9ed74dd8cc)
2024-04-09 12:25:51 +00:00
ruthra kumar
9f4663b4d0 fix: incorrect currency symbol in General Ledger print
(cherry picked from commit 429e036e8c)
2024-04-09 12:16:47 +00:00
rohitwaghchaure
8cc5b99986 Merge pull request #40922 from frappe/mergify/bp/version-15-hotfix/pr-40909
fix: pick list validation didn't consider existing draft pick list (backport #40909)
2024-04-09 17:28:18 +05:30
rohitwaghchaure
7a0e313895 chore: fix conflicts 2024-04-09 16:57:02 +05:30
Rohit Waghchaure
722abf1b6b fix: pick list validation didn't consider existing draft pick list
(cherry picked from commit 3bce4d92f6)

# Conflicts:
#	erpnext/stock/doctype/pick_list/pick_list.py
2024-04-09 11:25:22 +00:00
Sagar Vora
566d4fa76e Merge pull request #40907 from frappe/mergify/bp/version-15-hotfix/pr-40831 2024-04-08 10:19:31 +00:00
Smit Vora
4ef4466e67 feat: new hook fields_for_group_similar_items to group additional fields for print formats (#40831)
(cherry picked from commit f7c9e1538b)
2024-04-08 10:18:24 +00:00
ruthra kumar
6cefe45e5b Merge pull request #40905 from frappe/mergify/bp/version-15-hotfix/pr-40878
refactor: merge taxes from delivery note to Sales Invoice (backport #40878)
2024-04-08 15:47:11 +05:30
ruthra kumar
d4a74923c1 test: tax merging from 2 Delivery Note to Sales Invoice
(cherry picked from commit 39a48a2e2a)
2024-04-08 09:09:46 +00:00
ruthra kumar
e9b87fdd42 refactor: merge taxes from delivery note to Sales Invoice
(cherry picked from commit 550cbbd91c)
2024-04-08 09:09:46 +00:00
ruthra kumar
7f790ca908 Merge pull request #40903 from frappe/mergify/bp/version-15-hotfix/pr-40876
fix: ledger entries for Payment against reverse payment reconciliation (backport #40876)
2024-04-08 09:11:33 +05:30
ruthra kumar
2373dd9b95 chore: resolve conflicts 2024-04-08 08:52:41 +05:30
ruthra kumar
67df5ae0ec refactor(test): include new fields in assertion
(cherry picked from commit 64b7f624a5)
2024-04-08 01:59:13 +00:00
ruthra kumar
7c0d46409f test: advance payment against reverse payment reconciliation
(cherry picked from commit 141f462368)
2024-04-08 01:59:13 +00:00
ruthra kumar
4ad423b1b9 test: reverse payment against payment for supplier
(cherry picked from commit 248cc6105b)
2024-04-08 01:59:12 +00:00
ruthra kumar
3668de7cb7 fix(test): for reverse payments, only advance acc should have effect
This applies for Payments against Reverse-Payment reconcilition

(cherry picked from commit 74bc38e0af)
2024-04-08 01:59:12 +00:00
ruthra kumar
d9826e3dfc refactor: supplementary field to better handle reverse payments
(cherry picked from commit bdd36b0001)

# Conflicts:
#	erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json
2024-04-08 01:59:12 +00:00
ruthra kumar
f3eb559a71 fix: invalid ledger entries on payment against reverse payments
On Advance payments booked on separate party account, reconciliation
against a reverse payment posted invalid ledger entries.

(cherry picked from commit 9fd2dddfde)

# Conflicts:
#	erpnext/accounts/doctype/payment_entry/payment_entry.py
2024-04-08 01:59:11 +00:00
ruthra kumar
4f13f4779a fix(test): Advance Received should be under liability account
(cherry picked from commit a75e095d00)
2024-04-08 01:59:10 +00:00
Frappe PR Bot
3566a8adc6 chore(release): Bumped to Version 15.19.2
## [15.19.2](https://github.com/frappe/erpnext/compare/v15.19.1...v15.19.2) (2024-04-07)

### Bug Fixes

* depr amount pro rata and related tests ([e41d23d](e41d23d26c))
* Get pro-rata amount based on correct days ([f229282](f229282754))
* pro-rata amount for straight line method ([e71f334](e71f33425c))
2024-04-07 10:40:27 +00:00
Nabin Hait
7fdc8f7c38 Merge pull request #40902 from frappe/mergify/bp/version-15/pr-40901
fix: Get pro-rata depreciation amount based on correct days (backport #40901)
2024-04-07 16:09:14 +05:30
Nabin Hait
e71f33425c fix: pro-rata amount for straight line method
(cherry picked from commit 16a5475c0c)
2024-04-07 10:14:39 +00:00
Nabin Hait
6ddd08d0b0 fix:linter issue
(cherry picked from commit 8247fd1727)
2024-04-07 10:14:39 +00:00
Nabin Hait
e41d23d26c fix: depr amount pro rata and related tests
(cherry picked from commit 350d53dbe1)
2024-04-07 10:14:39 +00:00
Nabin Hait
f229282754 fix: Get pro-rata amount based on correct days
(cherry picked from commit 1276855f40)
2024-04-07 10:14:38 +00:00
Nabin Hait
77fd0436a8 Merge pull request #40901 from nabinhait/pro-rata-depr-v15
fix: Get pro-rata depreciation amount based on correct days
2024-04-07 15:43:32 +05:30
Nabin Hait
16a5475c0c fix: pro-rata amount for straight line method 2024-04-07 15:21:46 +05:30
Nabin Hait
8247fd1727 fix:linter issue 2024-04-07 15:18:29 +05:30
rohitwaghchaure
159d633a62 Merge pull request #40836 from frappe/mergify/bp/version-15-hotfix/pr-40834
fix: translatable web footer (backport #40834)
2024-04-07 14:36:03 +05:30
rohitwaghchaure
99a57e689d Merge pull request #40860 from frappe/mergify/bp/version-15-hotfix/pr-40848
fix: group warehouse added in the stock reconciliation (backport #40848)
2024-04-07 14:34:58 +05:30
rohitwaghchaure
97bf4a829a Merge pull request #40894 from frappe/mergify/bp/version-15-hotfix/pr-40883
fix: incorrect operator causing incorrect validation (backport #40883)
2024-04-07 14:33:43 +05:30
Nabin Hait
350d53dbe1 fix: depr amount pro rata and related tests 2024-04-07 14:14:13 +05:30
Nabin Hait
1276855f40 fix: Get pro-rata amount based on correct days 2024-04-07 14:14:06 +05:30
Nabin Hait
edd143b084 fix: resolved merge conflict 2024-04-07 12:15:52 +05:30
Rohit Waghchaure
80c2a33fd7 fix: incorrect operator causing incorrect validation
(cherry picked from commit 6b317b0c0d)
2024-04-07 06:34:23 +00:00
rohitwaghchaure
25e0a808cd Merge pull request #40889 from frappe/mergify/bp/version-15-hotfix/pr-40887
fix: query_report.trigger_refresh is not a function (backport #40887)
2024-04-07 12:02:46 +05:30
Nabin Hait
0cd94b017f fix:linter issue
(cherry picked from commit be0cb5289f)

# Conflicts:
#	erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
2024-04-07 06:32:22 +00:00
Nabin Hait
854d4a9c79 fix: depr amount pro rata and related tests
(cherry picked from commit e8dcbe2625)
2024-04-07 06:32:22 +00:00
Nabin Hait
5bf7c799e2 fix: Get pro-rata amount based on correct days
(cherry picked from commit 6c1e9fab27)
2024-04-07 06:32:22 +00:00
Rohit Waghchaure
4f48ede7a0 fix: query_report.trigger_refresh is not a function
(cherry picked from commit 30bbb58ca1)
2024-04-07 06:27:51 +00:00
ruthra kumar
0532b1fd94 Merge pull request #40869 from frappe/mergify/bp/version-15-hotfix/pr-40856
fix: unwanted Exc Gain/Loss journals on Payment against Journal entry (backport #40856)
2024-04-05 10:52:43 +05:30
ruthra kumar
4b78eb7e76 test: payment against JE reconciliation with different rates
(cherry picked from commit fe84558b77)
2024-04-05 05:04:02 +00:00
ruthra kumar
5b62f2050b fix: use reference type name to update exc rate
(cherry picked from commit c15690e475)
2024-04-05 05:04:02 +00:00
Rohit Waghchaure
e6d6172b4c fix: group warehouse added in the stock reconciliation
(cherry picked from commit 8f53bc0096)
2024-04-04 10:10:24 +00:00
Deepesh Garg
91f689575e Merge pull request #40810 from frappe/mergify/bp/version-15-hotfix/pr-40796
fix: Default company bank account (#40796)
2024-04-04 14:28:07 +05:30
Frappe PR Bot
dc0c85a227 chore(release): Bumped to Version 15.19.1
## [15.19.1](https://github.com/frappe/erpnext/compare/v15.19.0...v15.19.1) (2024-04-04)

### Bug Fixes

* Receive payment entry from Employee ([3e7abf5](3e7abf5fe5))
2024-04-04 08:57:45 +00:00
Deepesh Garg
5c5a0c965d Merge pull request #40809 from frappe/mergify/bp/version-15-hotfix/pr-40770
fix: Recalculate sales commission on item update (#40770)
2024-04-04 14:27:40 +05:30
Deepesh Garg
162b6bf50b Merge pull request #40855 from frappe/mergify/bp/version-15/pr-40808
fix: Receive payment entry from Employee (#40755)
2024-04-04 14:26:36 +05:30
Deepesh Garg
3e7abf5fe5 fix: Receive payment entry from Employee
(cherry picked from commit 29e5c6807e)
(cherry picked from commit 0cee954f84)
2024-04-04 08:55:02 +00:00
Deepesh Garg
7131e7836d Merge pull request #40808 from frappe/mergify/bp/version-15-hotfix/pr-40755
fix: Receive payment entry from Employee (#40755)
2024-04-04 14:24:13 +05:30
rohitwaghchaure
806a802daa Merge pull request #40853 from frappe/mergify/bp/version-15-hotfix/pr-40852
fix: workstation refresh after prompt (backport #40852)
2024-04-04 12:07:47 +05:30
Nihantra C. Patel
9f12c964dc fix: workstation refresh after prompt
(cherry picked from commit bed1af26e3)
2024-04-04 06:21:36 +00:00
Frappe PR Bot
f78df8dccb chore(release): Bumped to Version 15.19.0
# [15.19.0](https://github.com/frappe/erpnext/compare/v15.18.3...v15.19.0) (2024-04-03)

### Bug Fixes

* added validation if parent id is missing in BOM Creator ([87ce9d8](87ce9d834f))
* barcode not fetched on selection of item ([2b1b51b](2b1b51b5bb))
* button to select serial / batch bundle in the subcontracting receipt ([d2a6509](d2a6509950))
* cost center shouldn't update debit/credit in Exc gain/loss JV ([71704be](71704beb6f))
* do not fetch received items in purchase receipt ([3761e74](3761e74436))
* enable list view for the issues on the portal ([b089eda](b089eda8bf))
* markdown to text editor set for supplier quotation ([5fb6428](5fb642831c))
* payment_order_status should be no_copy ([2dd697e](2dd697ee77))
* Priority not copied from project template ([a3a6bf6](a3a6bf6ae1))
* rate changed on changing of the qty ([41b3a59](41b3a59aae))
* sales / prchase return validation issue ([7a21997](7a21997701))
* show future payments allocated sales returns is considered as payment ([0561d0a](0561d0a81c))
* Show Stock Ageing Data filter not working in stock balance report ([2185a29](2185a29555))
* Warehouse linked company name in multicompany setup (backport [#40779](https://github.com/frappe/erpnext/issues/40779)) ([#40781](https://github.com/frappe/erpnext/issues/40781)) ([33b6244](33b6244ae6))

### Features

* allow to pick manually qty / batches / serial nos ([5ea11af](5ea11af36b))
2024-04-03 10:32:58 +00:00
Deepesh Garg
955078abb0 Merge pull request #40820 from frappe/version-15-hotfix
chore: release v15
2024-04-03 16:01:44 +05:30
rohitwaghchaure
405719cd3d Merge pull request #40838 from frappe/mergify/bp/version-15-hotfix/pr-40723
feat: allow to pick manually qty / batches / serial nos (backport #40723)
2024-04-02 22:55:34 +05:30
rohitwaghchaure
52c4157723 chore: fix conflicts 2024-04-02 22:23:22 +05:30
Rohit Waghchaure
5ea11af36b feat: allow to pick manually qty / batches / serial nos
(cherry picked from commit 50dd9fa8a3)

# Conflicts:
#	erpnext/stock/doctype/pick_list/pick_list.json
2024-04-02 16:45:23 +00:00
Raffael Meyer
e8497b2d80 fix: translatable web footer (#40834)
(cherry picked from commit f3bcdbe5bd)
2024-04-02 15:16:15 +00:00
rohitwaghchaure
d3044e635e Merge pull request #40832 from frappe/mergify/bp/version-15-hotfix/pr-40828
chore: remove rate of material based on Manual (backport #40828)
2024-04-02 19:41:04 +05:30
rohitwaghchaure
ca6caa86bc chore: fix conflicts 2024-04-02 19:18:02 +05:30
rohitwaghchaure
152921b82a chore: fix conflicts 2024-04-02 19:17:41 +05:30
Rohit Waghchaure
ecc317d690 chore: remove rate of material based on Manual
(cherry picked from commit 0b63dbf221)

# Conflicts:
#	erpnext/manufacturing/doctype/bom/bom.json
#	erpnext/manufacturing/doctype/bom_creator/bom_creator.json
2024-04-02 12:42:22 +00:00
Nabin Hait
8016b0aee7 fix: linter issues
(cherry picked from commit 21a40a2236)
2024-04-02 10:27:55 +00:00
Nabin Hait
79043894b2 fix: show currency symbol in base currency in fixed asset register report
(cherry picked from commit 8b6220efd8)
2024-04-02 10:27:55 +00:00
rohitwaghchaure
6607e6b2c3 Merge pull request #40822 from frappe/mergify/bp/version-15-hotfix/pr-40816
fix: added validation if parent id is missing in BOM Creator (backport #40816)
2024-04-02 15:37:29 +05:30
Rohit Waghchaure
87ce9d834f fix: added validation if parent id is missing in BOM Creator
(cherry picked from commit 0a1fab762f)
2024-04-02 09:43:37 +00:00
rohitwaghchaure
204aea856d Merge pull request #40817 from frappe/mergify/bp/version-15-hotfix/pr-40814
fix: barcode not fetched on selection of item (backport #40814)
2024-04-02 14:22:58 +05:30
Rohit Waghchaure
2b1b51b5bb fix: barcode not fetched on selection of item
(cherry picked from commit b0730293e2)
2024-04-02 05:52:11 +00:00
Deepesh Garg
d8c5f15bc0 fix: Default company bank account
(cherry picked from commit 7ac91deb83)
2024-04-01 15:09:57 +00:00
Deepesh Garg
5117494a52 fix: Recalculate sales commission on item update
(cherry picked from commit f76da50b7e)
2024-04-01 15:09:05 +00:00
Deepesh Garg
0cee954f84 fix: Receive payment entry from Employee
(cherry picked from commit 29e5c6807e)
2024-04-01 15:08:35 +00:00
rohitwaghchaure
3971ff5f72 Merge pull request #40806 from frappe/mergify/bp/version-15-hotfix/pr-40735
fix: Show Stock Ageing Data filter not working in stock balance report (backport #40735)
2024-04-01 19:47:20 +05:30
rohitwaghchaure
f32de045e3 chore: fix conflicts 2024-04-01 18:53:04 +05:30
Rohit Waghchaure
2185a29555 fix: Show Stock Ageing Data filter not working in stock balance report
(cherry picked from commit 621421bda2)

# Conflicts:
#	erpnext/stock/report/stock_ageing/stock_ageing.py
2024-04-01 11:25:46 +00:00
ruthra kumar
d12f89cdb2 Merge pull request #40804 from frappe/mergify/bp/version-15-hotfix/pr-40181
fix: show future payments consider allocated sales returns (backport #40181)
2024-04-01 14:13:50 +05:30
Devin Slauenwhite
0561d0a81c fix: show future payments allocated sales returns is considered as payment
(cherry picked from commit 3381d0d945)
2024-04-01 07:34:45 +00:00
Devin Slauenwhite
ed4c6ef1a7 test: show future payments allocated sales returns is considered as payment
(cherry picked from commit daaa00bd4a)
2024-04-01 07:34:44 +00:00
rohitwaghchaure
ec91148672 Merge pull request #40738 from frappe/mergify/bp/version-15-hotfix/pr-40731
fix: markdown to text editor set for supplier quotation (backport #40731)
2024-03-31 21:14:15 +05:30
rohitwaghchaure
458d82aff2 Merge pull request #40784 from frappe/mergify/bp/version-15-hotfix/pr-40783
fix: button to select serial / batch bundle in the subcontracting receipt (backport #40783)
2024-03-31 21:13:45 +05:30
rohitwaghchaure
390b4986f9 chore: fix conflicts 2024-03-31 11:41:00 +05:30
rohitwaghchaure
6ecafe7606 chore: fix linter issue 2024-03-31 11:39:55 +05:30
rohitwaghchaure
04da610288 chore: fix conflicts 2024-03-30 20:05:21 +05:30
rohitwaghchaure
b397535392 chore: fix conflicts 2024-03-30 20:04:53 +05:30
Rohit Waghchaure
d2a6509950 fix: button to select serial / batch bundle in the subcontracting receipt
(cherry picked from commit d73b1f3e6a)

# Conflicts:
#	erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json
#	erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json
2024-03-30 05:54:14 +00:00
mergify[bot]
33b6244ae6 fix: Warehouse linked company name in multicompany setup (backport #40779) (#40781)
fix: Warehouse linked company name in multicompany setup (#40779)

(cherry picked from commit 679aea607b)

Co-authored-by: jeshani <56191568+jeshani@users.noreply.github.com>
2024-03-30 10:18:33 +05:30
Frappe PR Bot
8ab26cd76d chore(release): Bumped to Version 15.18.3
## [15.18.3](https://github.com/frappe/erpnext/compare/v15.18.2...v15.18.3) (2024-03-29)

### Bug Fixes

* sales / prchase return validation issue ([2eac2ef](2eac2ef69f))
2024-03-29 19:09:53 +00:00
rohitwaghchaure
3a380245c6 Merge pull request #40765 from frappe/mergify/bp/version-15/pr-40761
chore: show item name in the validation message (backport #40757) (backport #40761)
2024-03-30 00:38:40 +05:30
rohitwaghchaure
8cde784383 Merge pull request #40759 from frappe/mergify/bp/version-15/pr-40746
fix: sales / purchase return validation issue (backport #40741) (backport #40746)
2024-03-30 00:38:32 +05:30
ruthra kumar
8ef0a66d3e Merge pull request #40767 from frappe/mergify/bp/version-15-hotfix/pr-40758
fix: payment_order_status should be no_copy (backport #40758)
2024-03-29 13:49:16 +05:30
Ashish Shah
2dd697ee77 fix: payment_order_status should be no_copy
payment_order_status should be no_copy

(cherry picked from commit adee2ba541)
2024-03-29 07:57:04 +00:00
Rohit Waghchaure
a8ac196cde chore: show item name in the validation message
(cherry picked from commit d05412f96a)
(cherry picked from commit 0b4b0874f4)
2024-03-29 07:56:05 +00:00
rohitwaghchaure
bd7467a812 Merge pull request #40761 from frappe/mergify/bp/version-15-hotfix/pr-40757
chore: show item name in the validation message (backport #40757)
2024-03-29 13:24:18 +05:30
ruthra kumar
babcc420cc Merge pull request #40763 from frappe/mergify/bp/version-15-hotfix/pr-40760
fix: cost center shouldn't update debit/credit in Exc gain/loss JV (backport #40760)
2024-03-29 11:46:56 +05:30
ruthra kumar
71704beb6f fix: cost center shouldn't update debit/credit in Exc gain/loss JV
(cherry picked from commit 398d3022ef)
2024-03-29 06:13:51 +00:00
Rohit Waghchaure
0b4b0874f4 chore: show item name in the validation message
(cherry picked from commit d05412f96a)
2024-03-29 06:06:54 +00:00
Frappe PR Bot
6077cd8160 chore(release): Bumped to Version 15.18.2
## [15.18.2](https://github.com/frappe/erpnext/compare/v15.18.1...v15.18.2) (2024-03-29)

### Bug Fixes

* use sql to clear comments ([e2196ef](e2196efe1a))
2024-03-29 05:41:25 +00:00
ruthra kumar
aa4998a3b5 Merge pull request #40748 from frappe/mergify/bp/version-15/pr-40739
refactor: use sql to clear comments (backport #40739)
2024-03-29 11:10:07 +05:30
Rohit Waghchaure
2eac2ef69f fix: sales / prchase return validation issue
(cherry picked from commit 59dc4a96e1)
(cherry picked from commit 7a21997701)
2024-03-29 05:28:31 +00:00
ruthra kumar
e2196efe1a fix: use sql to clear comments
(cherry picked from commit 1f46c1530e)
2024-03-29 10:49:33 +05:30
rohitwaghchaure
0eb908e950 Merge pull request #40756 from frappe/mergify/bp/version-15-hotfix/pr-40752
chore: allow to override serial batch selector using custom app (backport #40752)
2024-03-29 09:15:37 +05:30
Rohit Waghchaure
8ca4f63572 chore: allow to override serial batch selector
(cherry picked from commit 0d9d42ae61)
2024-03-29 03:41:49 +00:00
Deepesh Garg
3c3b08f517 Merge pull request #40750 from frappe/mergify/bp/version-15/pr-40742
refactor: configurable exchange gain or loss posting date (#37630)
2024-03-28 22:12:29 +05:30
ruthra kumar
0247d5c87f chore: resolve conflicts
(cherry picked from commit 565bfa16f2)
2024-03-28 15:26:55 +00:00
ruthra kumar
ba4d1bc1a4 test: varying posting date for gain loss journal
(cherry picked from commit 514d5434a3)
(cherry picked from commit fd33437d7a)
2024-03-28 15:26:54 +00:00
ruthra kumar
22d352e875 refactor: pass gain loss posting date to controller
(cherry picked from commit 7e600a6494)

# Conflicts:
#	erpnext/accounts/utils.py
(cherry picked from commit 125722ae41)
2024-03-28 15:26:54 +00:00
ruthra kumar
63c3f51ffa refactor: introduce fields in popup
(cherry picked from commit 5323bb7bee)

# Conflicts:
#	erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
(cherry picked from commit 39571d828e)
2024-03-28 15:26:54 +00:00
ruthra kumar
efd40772ee refactor: gain_loss posting date fields in the allocation table
(cherry picked from commit 55dbcee36a)

# Conflicts:
#	erpnext/accounts/doctype/payment_reconciliation_allocation/payment_reconciliation_allocation.json
(cherry picked from commit 1fe80c2d02)
2024-03-28 15:26:53 +00:00
rohitwaghchaure
fb67648c68 Merge pull request #40746 from frappe/mergify/bp/version-15-hotfix/pr-40741
fix: sales / purchase return validation issue (backport #40741)
2024-03-28 18:10:42 +05:30
ruthra kumar
3d61086ac0 Merge pull request #40745 from frappe/mergify/bp/version-15-hotfix/pr-40739
refactor: use sql to clear comments (backport #40739)
2024-03-28 17:57:14 +05:30
Rohit Waghchaure
7a21997701 fix: sales / prchase return validation issue
(cherry picked from commit 59dc4a96e1)
2024-03-28 12:24:15 +00:00
Deepesh Garg
f2ecc1d2d5 Merge pull request #40742 from frappe/mergify/bp/version-15-hotfix/pr-37630
refactor: configurable exchange gain or loss posting date (#37630)
2024-03-28 17:46:30 +05:30
ruthra kumar
f50a2586b6 refactor: use sql to clear comments
(cherry picked from commit 1f46c1530e)
2024-03-28 12:12:17 +00:00
ruthra kumar
565bfa16f2 chore: resolve conflicts 2024-03-28 17:22:53 +05:30
ruthra kumar
fd33437d7a test: varying posting date for gain loss journal
(cherry picked from commit 514d5434a3)
2024-03-28 10:59:24 +00:00
ruthra kumar
125722ae41 refactor: pass gain loss posting date to controller
(cherry picked from commit 7e600a6494)

# Conflicts:
#	erpnext/accounts/utils.py
2024-03-28 10:59:24 +00:00
ruthra kumar
39571d828e refactor: introduce fields in popup
(cherry picked from commit 5323bb7bee)

# Conflicts:
#	erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
2024-03-28 10:59:23 +00:00
ruthra kumar
1fe80c2d02 refactor: gain_loss posting date fields in the allocation table
(cherry picked from commit 55dbcee36a)

# Conflicts:
#	erpnext/accounts/doctype/payment_reconciliation_allocation/payment_reconciliation_allocation.json
2024-03-28 10:59:22 +00:00
Nihantra Patel
5fb642831c fix: markdown to text editor set for supplier quotation
(cherry picked from commit 9828d34b19)

# Conflicts:
#	erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
2024-03-28 07:16:15 +00:00
rohitwaghchaure
beb8807b2e Merge pull request #40733 from frappe/mergify/bp/version-15-hotfix/pr-40713
fix: enable list view for the issues on the portal (backport #40713)
2024-03-28 12:11:21 +05:30
Rohit Waghchaure
b089eda8bf fix: enable list view for the issues on the portal
(cherry picked from commit bddc1e3974)
2024-03-28 05:38:12 +00:00
rohitwaghchaure
5f125c5e2f Merge pull request #40722 from frappe/mergify/bp/version-15-hotfix/pr-40718
fix: do not fetch received items in purchase receipt (backport #40718)
2024-03-27 22:59:38 +05:30
Rohit Waghchaure
3761e74436 fix: do not fetch received items in purchase receipt
(cherry picked from commit 5bff434902)
2024-03-27 17:11:25 +00:00
rohitwaghchaure
b7525263ff Merge pull request #40711 from frappe/mergify/bp/version-15-hotfix/pr-40708
fix: Priority not copied from project template (backport #40708)
2024-03-27 16:18:26 +05:30
Rohit Waghchaure
a3a6bf6ae1 fix: Priority not copied from project template
(cherry picked from commit 33fd7b8a1f)
2024-03-27 10:18:20 +00:00
Frappe PR Bot
ca3827efea chore(release): Bumped to Version 15.18.1
## [15.18.1](https://github.com/frappe/erpnext/compare/v15.18.0...v15.18.1) (2024-03-27)

### Bug Fixes

* rate changed on changing of the qty ([471f1c8](471f1c835c))
2024-03-27 08:37:31 +00:00
rohitwaghchaure
d2584dd3e8 Merge pull request #40704 from frappe/mergify/bp/version-15/pr-40703
fix: rate changed on changing of the qty (backport #40700) (backport #40703)
2024-03-27 14:06:20 +05:30
Rohit Waghchaure
471f1c835c fix: rate changed on changing of the qty
(cherry picked from commit cd36a1051f)
(cherry picked from commit 41b3a59aae)
2024-03-27 08:24:00 +00:00
rohitwaghchaure
ac4b7f20ca Merge pull request #40703 from frappe/mergify/bp/version-15-hotfix/pr-40700
fix: rate changed on changing of the qty (backport #40700)
2024-03-27 13:52:54 +05:30
Rohit Waghchaure
41b3a59aae fix: rate changed on changing of the qty
(cherry picked from commit cd36a1051f)
2024-03-27 08:07:18 +00:00
Deepesh Garg
c1b9ad2f3a chore: Reduce usage of cur_frm
(cherry picked from commit e44809bcc9)
2024-03-27 06:16:31 +00:00
Frappe PR Bot
70ce49e32c chore(release): Bumped to Version 15.18.0
# [15.18.0](https://github.com/frappe/erpnext/compare/v15.17.6...v15.18.0) (2024-03-27)

### Bug Fixes

* Add default finance book check in P&L statement ([f087159](f08715972a))
* Batch No is mandatory while making manufacture entry ([a638c9c](a638c9c8af))
* Book depreciation until the asset disposal date and removed unwanted commits ([2d7ff5d](2d7ff5d4cf))
* Cannot read properties of undefined (reading 'rate') ([d287ed5](d287ed5e47))
* existing batch from different warehouse not showing in the dropdown ([79d0478](79d047802a))
* incorrect total qty in job card ([68d57c3](68d57c3947))
* item not coming in quick entry ([008894d](008894d32b))
* permissions during bulk transaction logs ([6e6ca42](6e6ca42261))
* pick list not picked qty less than 1 ([5310ec3](5310ec38ca))
* rate not fetching from the item price ([fd02060](fd02060cd2))
* rate reset to zero ([4636ef0](4636ef0a29))
* remove faulty translation ([#40667](https://github.com/frappe/erpnext/issues/40667)) ([afa930f](afa930ff48))
* style for tax breakup ([501b09a](501b09a170))
* translatability of bom configurator labels ([cf49cec](cf49cec203))
* Turkish translations ([#40650](https://github.com/frappe/erpnext/issues/40650)) ([17a0876](17a087663b))
* use serial/batch fields for subcontracting receipt and in transit stock entry ([9ec24bc](9ec24bcc6c))
* use Text Editor for rendering tax breakup table ([a95bb27](a95bb27c65))
* validate gl for previous fiscal year ([4b973b2](4b973b2f86))
* validation error for the subcontracting receipt ([23ae82d](23ae82d282))
* wrong buying amount if delivered and billed qty varies ([c224240](c2242406f4))

### Features

* bisect doctype ([884a18f](884a18f8f1))
* nodes doctype ([bfccfa4](bfccfa4af1))

### Performance Improvements

* add in some indexes (backport [#40590](https://github.com/frappe/erpnext/issues/40590)) ([#40605](https://github.com/frappe/erpnext/issues/40605)) ([f66cf7d](f66cf7d838))
2024-03-27 03:27:37 +00:00
Deepesh Garg
d09821e1e1 Merge pull request #40678 from frappe/version-15-hotfix
chore: release v15
2024-03-27 08:56:26 +05:30
rohitwaghchaure
b6ac3e7d08 Merge pull request #40689 from frappe/mergify/bp/version-15-hotfix/pr-40685
fix: validation error for the subcontracting receipt (backport #40685)
2024-03-27 08:04:58 +05:30
Raffael Meyer
afa930ff48 fix: remove faulty translation (#40667) 2024-03-27 00:21:16 +01:00
Rohit Waghchaure
23ae82d282 fix: validation error for the subcontracting receipt
(cherry picked from commit 016585c248)
2024-03-26 14:27:36 +00:00
rohitwaghchaure
ad8961030e Merge pull request #40688 from frappe/mergify/bp/version-15-hotfix/pr-40684
fix: incorrect total qty in job card (backport #40684)
2024-03-26 19:54:46 +05:30
Rohit Waghchaure
68d57c3947 fix: incorrect total qty in job card
(cherry picked from commit c3546cf8e2)
2024-03-26 14:04:03 +00:00
rohitwaghchaure
9b9892da03 Merge pull request #40680 from frappe/mergify/bp/version-15-hotfix/pr-40674
fix: existing batch from different warehouse not showing in the dropdown (backport #40674)
2024-03-26 16:33:14 +05:30
Rohit Waghchaure
79d047802a fix: existing batch from different warehouse not showing in the dropdown
(cherry picked from commit 662cf21afb)
2024-03-26 10:35:51 +00:00
rohitwaghchaure
108e80419e Merge pull request #40673 from frappe/mergify/bp/version-15-hotfix/pr-40672
fix: item not coming in quick entry (backport #40672)
2024-03-26 14:33:46 +05:30
Rohit Waghchaure
008894d32b fix: item not coming in quick entry
(cherry picked from commit dcbb54c41f)
2024-03-26 06:13:17 +00:00
Deepesh Garg
634054c07b Merge pull request #40430 from frappe/mergify/bp/version-15-hotfix/pr-40385
fix: Book depreciation until the asset disposal date and remove unwanted commits (#40385)
2024-03-26 09:05:20 +05:30
SelenSoft
17a087663b fix: Turkish translations (#40650)
Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
2024-03-25 23:27:51 +01:00
Deepesh Garg
b04cef9f3f Merge pull request #40653 from frappe/mergify/bp/version-15-hotfix/pr-40640
fix: Add default finance book check in P&L statement (backport #40640)
2024-03-25 17:08:40 +05:30
Deepesh Garg
f08715972a fix: Add default finance book check in P&L statement
(cherry picked from commit 5be3417fdf)
2024-03-25 09:14:45 +00:00
Frappe PR Bot
22f3935024 chore(release): Bumped to Version 15.17.6
## [15.17.6](https://github.com/frappe/erpnext/compare/v15.17.5...v15.17.6) (2024-03-25)

### Bug Fixes

* reset update outstanding flag for old records ([1753a13](1753a138e9))
2024-03-25 02:55:11 +00:00
ruthra kumar
0b0b3f0d9d Merge pull request #40645 from frappe/mergify/bp/version-15/pr-40622
fix: reset update_outstanding_for_self flag for old records (backport #40622)
2024-03-25 08:24:03 +05:30
ruthra kumar
0658285a3b refactor: hide on print formats
(cherry picked from commit fdcdc8a56e)
2024-03-25 07:44:37 +05:30
ruthra kumar
1753a138e9 fix: reset update outstanding flag for old records
(cherry picked from commit a88bf8419e)
2024-03-25 07:44:16 +05:30
rohitwaghchaure
4e4e6c669d Merge pull request #40639 from frappe/mergify/bp/version-15-hotfix/pr-40638
fix: Batch No is mandatory while making manufacture entry (backport #40638)
2024-03-24 21:19:51 +05:30
Rohit Waghchaure
a638c9c8af fix: Batch No is mandatory while making manufacture entry
(cherry picked from commit 43fd60a877)
2024-03-24 13:02:10 +00:00
rohitwaghchaure
a95295b9f9 Merge pull request #40637 from frappe/mergify/bp/version-15-hotfix/pr-40594
fix: use serial/batch fields for subcontracting receipt and in transit in stock entry (backport #40594)
2024-03-24 17:45:50 +05:30
ruthra kumar
e33c383345 Merge pull request #40624 from frappe/mergify/bp/version-15-hotfix/pr-40622
refactor: reset update_outstanding_for_self flag for old records (backport #40622)
2024-03-24 16:39:03 +05:30
ruthra kumar
996f7d30b9 chore: resolve conflict 2024-03-24 16:24:10 +05:30
Rohit Waghchaure
9ec24bcc6c fix: use serial/batch fields for subcontracting receipt and in transit stock entry
(cherry picked from commit 3423334e4f)
2024-03-24 10:34:52 +00:00
Danny
7a9291b3d1 fix: pass empty string email content of pos invoice
(cherry picked from commit ee7bd98878)
2024-03-23 09:10:55 +00:00
Deepesh Garg
bfa316ad09 Merge pull request #40591 from frappe/mergify/bp/version-15-hotfix/pr-40587
refactor(Item Price): validate dates (#40587)
2024-03-23 08:58:47 +05:30
ruthra kumar
d238cdbdd5 refactor: hide on print formats
(cherry picked from commit fdcdc8a56e)
2024-03-22 14:54:02 +00:00
ruthra kumar
f25b5bdfab refactor: reset flag for old records
(cherry picked from commit a88bf8419e)

# Conflicts:
#	erpnext/patches.txt
2024-03-22 14:54:02 +00:00
Frappe PR Bot
c39d02fa14 chore(release): Bumped to Version 15.17.5
## [15.17.5](https://github.com/frappe/erpnext/compare/v15.17.4...v15.17.5) (2024-03-22)

### Bug Fixes

* rate reset to zero ([1ed9133](1ed9133bb6))
2024-03-22 10:30:44 +00:00
rohitwaghchaure
4a1c56113e Merge pull request #40619 from frappe/mergify/bp/version-15/pr-40617
fix: rate reset to zero (backport #40616) (backport #40617)
2024-03-22 15:59:36 +05:30
Rohit Waghchaure
1ed9133bb6 fix: rate reset to zero
(cherry picked from commit 6821baa850)
(cherry picked from commit 4636ef0a29)
2024-03-22 10:08:05 +00:00
rohitwaghchaure
9f13b6ed2b Merge pull request #40617 from frappe/mergify/bp/version-15-hotfix/pr-40616
fix: rate reset to zero (backport #40616)
2024-03-22 15:36:51 +05:30
Rohit Waghchaure
4636ef0a29 fix: rate reset to zero
(cherry picked from commit 6821baa850)
2024-03-22 09:50:50 +00:00
ruthra kumar
fcbe2556d3 Merge pull request #40613 from frappe/mergify/bp/version-15-hotfix/pr-38496
feat: utility to debug financial reports - Bisect Accounting Statements (backport #38496)
2024-03-22 14:19:42 +05:30
ruthra kumar
345d5a657a chore: resolve JS linter issue 2024-03-22 14:03:43 +05:30
ruthra kumar
e7b3ef0c90 chore: resolve linter issues
(cherry picked from commit 0890b414b1)
2024-03-22 07:53:45 +00:00
ruthra kumar
b371369699 refactor: cache results
(cherry picked from commit 14c8c8c33d)
2024-03-22 07:53:45 +00:00
ruthra kumar
067f101c99 refactor: flag to differentiate generated and default values
(cherry picked from commit 0925706d5e)
2024-03-22 07:53:44 +00:00
ruthra kumar
0305aafff8 refactor: save results in node
(cherry picked from commit ca14ae8f1b)
2024-03-22 07:53:44 +00:00
ruthra kumar
a59dc8b40c chore: restrict only to administrator and type info
(cherry picked from commit 90c6d4dc85)
2024-03-22 07:53:44 +00:00
ruthra kumar
6b1b2e863a chore: change data type for summary fields
(cherry picked from commit 228aa1a244)
2024-03-22 07:53:44 +00:00
ruthra kumar
415be361b4 refactor: adding labels to important section
(cherry picked from commit 993e2bfbf9)
2024-03-22 07:53:44 +00:00
ruthra kumar
509d6e3ca9 chore: UI cleanup
(cherry picked from commit ea3071db66)
2024-03-22 07:53:44 +00:00
ruthra kumar
6ff311c4e9 chore: add screen freeze on wait
(cherry picked from commit 395299803f)
2024-03-22 07:53:43 +00:00
ruthra kumar
348359ad5a chore: code cleanup
(cherry picked from commit 5e2d21c033)
2024-03-22 07:53:43 +00:00
ruthra kumar
1a08482655 chore: hide internal variables section
(cherry picked from commit c4c3090f46)
2024-03-22 07:53:43 +00:00
ruthra kumar
b686e1f972 chore: rename btree and remove debugging statements
(cherry picked from commit 6492019383)
2024-03-22 07:53:42 +00:00
ruthra kumar
5674ea450d chore: hide internal fields and better painting logic for heatmap
(cherry picked from commit f6831fba13)
2024-03-22 07:53:42 +00:00
ruthra kumar
f376659785 refactor: working heatmap
(cherry picked from commit 16db6c2f47)
2024-03-22 07:53:42 +00:00
ruthra kumar
c678134de6 chore: hide some internal fields
(cherry picked from commit bd3dc6482e)
2024-03-22 07:53:41 +00:00
ruthra kumar
a25f6493de refactor: calculate summary on tree navigation
(cherry picked from commit f7b7b2b438)
2024-03-22 07:53:41 +00:00
ruthra kumar
59ce9ccc8e refactor: use DB to store tree and state
(cherry picked from commit 99fbd8ad18)
2024-03-22 07:53:41 +00:00
ruthra kumar
a14eceb41a chore: use doctype as btree
(cherry picked from commit 9d20256366)
2024-03-22 07:53:41 +00:00
ruthra kumar
bfccfa4af1 feat: nodes doctype
(cherry picked from commit 85f2a6dd54)
2024-03-22 07:53:41 +00:00
ruthra kumar
0bce5d6057 chore: remove unwanted code
(cherry picked from commit de2eba0d98)
2024-03-22 07:53:40 +00:00
ruthra kumar
fd566f134d refactor: add basic navigation
1. remove unnecessary columns
2. added basic tree navigation

(cherry picked from commit 705ef4f5a3)
2024-03-22 07:53:40 +00:00
ruthra kumar
40176a6b41 refactor: ability to build and load tree from DB
(cherry picked from commit b2dde55f2c)
2024-03-22 07:53:40 +00:00
ruthra kumar
9f859c2bd3 refactor: introduce node class
(cherry picked from commit d53b34c0ce)
2024-03-22 07:53:40 +00:00
ruthra kumar
62987372ba refactor: more buttons
(cherry picked from commit a427029151)
2024-03-22 07:53:40 +00:00
ruthra kumar
80b77ffc87 refactor: date validation
(cherry picked from commit 2de3e6ce6d)
2024-03-22 07:53:39 +00:00
ruthra kumar
ed64d691fc refactor: support for BFS and DFS
(cherry picked from commit 03a38ed025)
2024-03-22 07:53:39 +00:00
ruthra kumar
1f235a7ba3 refactor: simplify DFS
(cherry picked from commit 26503a205f)
2024-03-22 07:53:39 +00:00
ruthra kumar
ce039f279b refactor: Depth First Search(DFS)
(cherry picked from commit 5a25c80f2e)
2024-03-22 07:53:39 +00:00
ruthra kumar
b6c2dbe581 refactor: some logic
(cherry picked from commit 4c8a8c3bcd)
2024-03-22 07:53:39 +00:00
ruthra kumar
884a18f8f1 feat: bisect doctype
(cherry picked from commit decdbd2782)
2024-03-22 07:53:39 +00:00
ruthra kumar
0393855243 refactor: primitive summary for p&l and balance sheet
(cherry picked from commit eb4c476490)
2024-03-22 07:53:38 +00:00
ruthra kumar
0e0b8e5ab4 Merge pull request #40608 from frappe/mergify/bp/version-15-hotfix/pr-40520
fix: permissions during bulk transaction logs (backport #40520)
2024-03-22 10:33:28 +05:30
David
6e6ca42261 fix: permissions during bulk transaction logs
(cherry picked from commit 49dd4c1ef3)
2024-03-22 04:38:45 +00:00
ruthra kumar
7344296a39 Merge pull request #40597 from frappe/mergify/bp/version-15-hotfix/pr-40386
fix: wrong buying amount if delivered and billed qty varies (backport #40386)
2024-03-22 09:04:37 +05:30
mergify[bot]
f66cf7d838 perf: add in some indexes (backport #40590) (#40605)
perf: add in some indexes (#40590)

`Sales Invoice Item.purchase_order`
`Delivery Note Item.purchase_order`

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
(cherry picked from commit 1cd38c860a)

Co-authored-by: Akhil Narang <me@akhilnarang.dev>
2024-03-22 08:51:57 +05:30
Frappe PR Bot
2b80cb99be chore(release): Bumped to Version 15.17.4
## [15.17.4](https://github.com/frappe/erpnext/compare/v15.17.3...v15.17.4) (2024-03-21)

### Bug Fixes

* rate not fetching from the item price ([0d95ace](0d95acefa2))
2024-03-21 17:30:02 +00:00
rohitwaghchaure
57e0b4ea5f Merge pull request #40602 from frappe/mergify/bp/version-15/pr-40600
fix: rate not fetching from the item price (backport #40595) (backport #40600)
2024-03-21 22:58:48 +05:30
Rohit Waghchaure
0d95acefa2 fix: rate not fetching from the item price
(cherry picked from commit d893a465d7)
(cherry picked from commit fd02060cd2)
2024-03-21 17:13:04 +00:00
rohitwaghchaure
5b155e37aa Merge pull request #40600 from frappe/mergify/bp/version-15-hotfix/pr-40595
fix: rate not fetching from the item price (backport #40595)
2024-03-21 22:40:47 +05:30
Rohit Waghchaure
fd02060cd2 fix: rate not fetching from the item price
(cherry picked from commit d893a465d7)
2024-03-21 16:50:13 +00:00
ruthra kumar
f5008a1467 test: buying amt calculation if DN and SI differ in qty
(cherry picked from commit ccb51ded95)
2024-03-21 15:46:01 +00:00
Dany Robert
c2242406f4 fix: wrong buying amount if delivered and billed qty varies
(cherry picked from commit b8da0d9334)
2024-03-21 15:46:01 +00:00
barredterra
df6226f07f chore: resolve conflicts 2024-03-21 14:16:27 +01:00
barredterra
357a1c9752 refactor(Item Price): validate dates
(cherry picked from commit cbcc47b5c4)

# Conflicts:
#	erpnext/stock/doctype/item_price/item_price.py
2024-03-21 13:13:27 +00:00
ruthra kumar
9e5e244e7a Merge pull request #40582 from frappe/mergify/bp/version-15-hotfix/pr-40580
refactor: config changes in Transaction Deletion Record (backport #40580)
2024-03-21 11:02:39 +05:30
Gursheen Kaur Anand
3dcd7380ac Merge pull request #40576 from frappe/mergify/bp/version-15-hotfix/pr-40572
fix: PCV validation for previous fiscal year (backport #40572)
2024-03-21 10:57:26 +05:30
ruthra kumar
b7dc28fff9 refactor: config changes in Transaction Deletion Record
(cherry picked from commit 4ba67fb3ec)
2024-03-21 05:17:25 +00:00
rohitwaghchaure
fa95bd331a Merge pull request #40564 from frappe/mergify/bp/version-15-hotfix/pr-40545
fix: translatability of bom configurator labels (backport #40545)
2024-03-21 01:58:16 +05:30
Gursheen Anand
4b973b2f86 fix: validate gl for previous fiscal year
(cherry picked from commit a1d108c062)
2024-03-20 15:30:03 +00:00
ruthra kumar
5194b87dc4 Merge pull request #40575 from frappe/mergify/bp/version-15-hotfix/pr-39717
refactor: Transaction Deletion record for large volumes (backport #39717)
2024-03-20 20:40:27 +05:30
Frappe PR Bot
85aeb1f3b1 chore(release): Bumped to Version 15.17.3
## [15.17.3](https://github.com/frappe/erpnext/compare/v15.17.2...v15.17.3) (2024-03-20)

### Bug Fixes

* style for tax breakup ([07bb836](07bb8360d5))
* use Text Editor for rendering tax breakup table ([64672e6](64672e655a))
2024-03-20 14:58:46 +00:00
Gursheen Kaur Anand
03a40f491b Merge pull request #40568 from frappe/mergify/bp/version-15/pr-40563
fix: use `Text Editor` for rendering tax breakup table (backport #40563)
2024-03-20 20:27:31 +05:30
Gursheen Kaur Anand
36c6820096 Merge pull request #40570 from frappe/mergify/bp/version-15-hotfix/pr-40563
fix: use `Text Editor` for rendering tax breakup table (backport #40563)
2024-03-20 20:27:03 +05:30
Gursheen Kaur Anand
9c204b7106 chore: resolve conflicts 2024-03-20 20:04:44 +05:30
Gursheen Kaur Anand
8e5d481cba chore: resolve conflicts 2024-03-20 20:03:03 +05:30
Gursheen Kaur Anand
37eae8eb4e chore: resolve conflicts 2024-03-20 19:58:01 +05:30
Gursheen Kaur Anand
4ede3a9ba5 chore: resolve conflicts 2024-03-20 19:57:24 +05:30
ruthra kumar
e7d2451f60 chore: fix linting issue in JS
(cherry picked from commit 02c522b7cd)
2024-03-20 14:13:21 +00:00
ruthra kumar
5bbccf1fbd refactor(test): test cases modified to handle new approach
(cherry picked from commit 81309576b0)
2024-03-20 14:13:21 +00:00
ruthra kumar
40574f0d72 refactor: ability to process in single transaction
(cherry picked from commit a158b825d7)
2024-03-20 14:13:20 +00:00
ruthra kumar
1104deb58e refactor: link running doc validation to company master
(cherry picked from commit 5a3afea8c7)
2024-03-20 14:13:20 +00:00
ruthra kumar
29804f6a41 chore: rename entry point
(cherry picked from commit 5fe0b20be1)
2024-03-20 14:13:20 +00:00
ruthra kumar
ae6260f717 chore: move status and error log to their own section
(cherry picked from commit 3cec62d4f8)
2024-03-20 14:13:19 +00:00
ruthra kumar
aceee829d2 refactor: minor UI tweaks
(cherry picked from commit 0455d0c46c)
2024-03-20 14:13:19 +00:00
ruthra kumar
02c3303fee refactor: exception propogation
(cherry picked from commit 4a55240e63)
2024-03-20 14:13:18 +00:00
ruthra kumar
3f45f63ff8 chore: code cleanup
(cherry picked from commit eea260b9f9)
2024-03-20 14:13:17 +00:00
ruthra kumar
3de53999ce refactor: better method naming
(cherry picked from commit 30463657bf)
2024-03-20 14:13:17 +00:00
ruthra kumar
b31e43e3db refactor: barebones hook on all doctypes with 'company' field
(cherry picked from commit ec194ef076)
2024-03-20 14:13:16 +00:00
ruthra kumar
d4c2e6c77d refactor: make sure only one task is running for doc
(cherry picked from commit 78c9cc63b1)
2024-03-20 14:13:16 +00:00
ruthra kumar
049c54bb32 chore: hide docfield in list view
(cherry picked from commit 98afb4d468)
2024-03-20 14:13:15 +00:00
ruthra kumar
d35bef12b6 refactor: validations to prevent duplicate jobs
(cherry picked from commit 31a2da552b)
2024-03-20 14:13:15 +00:00
ruthra kumar
90ad3d3176 refactor: no copy on summary table and more validations
(cherry picked from commit 55e93b3fe1)
2024-03-20 14:13:15 +00:00
ruthra kumar
db9cc5350d refactor: reset all flags and remove unwanted code
(cherry picked from commit 2dbe68a09d)
2024-03-20 14:13:15 +00:00
ruthra kumar
f67c447402 chore: show correct status in list view
(cherry picked from commit 1014940953)
2024-03-20 14:13:14 +00:00
ruthra kumar
cbaee05740 refactor: validate status before running events
(cherry picked from commit 86b5e2e277)
2024-03-20 14:13:14 +00:00
ruthra kumar
c827be4345 refactor: make Excluded doctype table read only
(cherry picked from commit 7c4cff2649)
2024-03-20 14:13:14 +00:00
ruthra kumar
efebec3f95 chore: remove unwanted UI code
(cherry picked from commit b98a5e4edc)
2024-03-20 14:13:14 +00:00
ruthra kumar
c3dd68ecc3 refactor: use separate child table for summary
(cherry picked from commit 49d3bcbc8d)
2024-03-20 14:13:13 +00:00
ruthra kumar
2bb1bfc4a0 refactor: chained callback
(cherry picked from commit b12ca65fcc)
2024-03-20 14:13:13 +00:00
ruthra kumar
195bffdf44 refactor: reorder flags in Tasks section
(cherry picked from commit cccb2d5141)
2024-03-20 14:13:13 +00:00
ruthra kumar
17ed1bb12c refactor: use flags to decide on current stage
(cherry picked from commit 6a77d86a53)
2024-03-20 14:13:13 +00:00
ruthra kumar
f9321767a6 refactor: UI trigger
(cherry picked from commit 8944ab8b6a)
2024-03-20 14:13:13 +00:00
ruthra kumar
9c5108e492 refactor: tasks section and UI niceties
(cherry picked from commit d0dc2c6e77)
2024-03-20 14:13:12 +00:00
ruthra kumar
529abd619a refactor: set status and trigger job on submit
(cherry picked from commit 6fbb67b1d2)
2024-03-20 14:13:12 +00:00
ruthra kumar
03fc3cec70 refactor: more options for 'status' and move it to top
(cherry picked from commit 0d65d878de)
2024-03-20 14:13:11 +00:00
Ankush Menat
501b09a170 fix: style for tax breakup
(cherry picked from commit 967540da18)
2024-03-20 13:06:45 +00:00
Gursheen Anand
a95bb27c65 fix: use Text Editor for rendering tax breakup table
(cherry picked from commit 1c63983873)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.json
#	erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
2024-03-20 13:06:45 +00:00
Ankush Menat
07bb8360d5 fix: style for tax breakup
(cherry picked from commit 967540da18)
2024-03-20 13:06:38 +00:00
Gursheen Anand
64672e655a fix: use Text Editor for rendering tax breakup table
(cherry picked from commit 1c63983873)

# Conflicts:
#	erpnext/buying/doctype/purchase_order/purchase_order.json
#	erpnext/buying/doctype/supplier_quotation/supplier_quotation.json
2024-03-20 13:06:38 +00:00
barredterra
cf49cec203 fix: translatability of bom configurator labels
(cherry picked from commit 4cfe99d74f)
2024-03-20 10:50:39 +00:00
rohitwaghchaure
bc5654b900 Merge pull request #40562 from frappe/mergify/bp/version-15-hotfix/pr-40561
fix: Cannot read properties of undefined (reading 'rate') (backport #40561)
2024-03-20 16:17:08 +05:30
Rohit Waghchaure
d287ed5e47 fix: Cannot read properties of undefined (reading 'rate')
(cherry picked from commit ac92a22914)
2024-03-20 09:31:42 +00:00
rohitwaghchaure
f881d23c05 Merge pull request #40560 from frappe/mergify/bp/version-15-hotfix/pr-40559
fix: pick list not picked materials having required qty less than 1 (backport #40559)
2024-03-20 14:16:44 +05:30
Rohit Waghchaure
5310ec38ca fix: pick list not picked qty less than 1
(cherry picked from commit 1a9ae33110)
2024-03-20 08:23:08 +00:00
Frappe PR Bot
1937059870 chore(release): Bumped to Version 15.17.2
## [15.17.2](https://github.com/frappe/erpnext/compare/v15.17.1...v15.17.2) (2024-03-20)

### Bug Fixes

* achieved targets for sales partners ([1ac8887](1ac888715c))
* advance journal fetching logic in Advances section ([bfa78aa](bfa78aaf74))
* attribute error on Bank Statement Import retry ([a0bf22c](a0bf22c9a5))
* auto-update due date for invoices via data import ([9cdde50](9cdde50f7c))
* balance qty in the stock ledger report (backport [#40506](https://github.com/frappe/erpnext/issues/40506)) ([#40507](https://github.com/frappe/erpnext/issues/40507)) ([69f442d](69f442dd79))
* currency symbol for Landed Cost Voucher Amount (backport [#40550](https://github.com/frappe/erpnext/issues/40550)) ([#40554](https://github.com/frappe/erpnext/issues/40554)) ([1c90797](1c90797879))
* Data too long for column 'stock_queue' (backport [#40436](https://github.com/frappe/erpnext/issues/40436)) ([#40451](https://github.com/frappe/erpnext/issues/40451)) ([ba6b856](ba6b8561c9))
* don't validate for currency, if account is unavailable ([5729ee5](5729ee563c))
* flaky Accounts Receivable test case ([0bb4a7d](0bb4a7d13a))
* incorrect gross profit on the quotation (backport [#40438](https://github.com/frappe/erpnext/issues/40438)) ([#40442](https://github.com/frappe/erpnext/issues/40442)) ([ce2626e](ce2626e911))
* index error on Exchange Rate Revaluation creation ([ebd967d](ebd967d7d3))
* invalid exchange loss booking on invoice againts base accounts ([72c9cd5](72c9cd5582))
* missing range for ageing summary ([dacc69c](dacc69c56f))
* not able to delete cancelled delivery note (backport [#40508](https://github.com/frappe/erpnext/issues/40508)) ([#40510](https://github.com/frappe/erpnext/issues/40510)) ([917a21b](917a21b989))
* rate changing while making PR (negative discount) (backport [#40539](https://github.com/frappe/erpnext/issues/40539)) ([#40540](https://github.com/frappe/erpnext/issues/40540)) ([0bdda12](0bdda1226f))
* Remove custom queries for customer ([3133505](313350534f))
* serial and batch for internal transfer (backport [#40467](https://github.com/frappe/erpnext/issues/40467)) ([#40477](https://github.com/frappe/erpnext/issues/40477)) ([61d59b3](61d59b392a))
* show correct variance for durations with no vouchers ([bc78bc3](bc78bc33f1))
* stock reco negative batch (backport [#40533](https://github.com/frappe/erpnext/issues/40533)) ([#40535](https://github.com/frappe/erpnext/issues/40535)) ([7f1f780](7f1f7809c8))
* stopped mr showing in the popup (backport [#40478](https://github.com/frappe/erpnext/issues/40478)) ([#40480](https://github.com/frappe/erpnext/issues/40480)) ([74b30a6](74b30a6a1d))
* **Supplier Quotation Comparison:** group by options ([1e16d2c](1e16d2ca25))
* Taxes not getting updated on change ([75b610d](75b610d7fc))
* **test:** manually filter rows and assert ([df13517](df1351783e))
* Update Existing Price List Rate not working (backport [#40333](https://github.com/frappe/erpnext/issues/40333)) ([#40527](https://github.com/frappe/erpnext/issues/40527)) ([44bbf4b](44bbf4b983))
* use in_import flag for checking imported records ([8242a9c](8242a9cd46))
2024-03-20 05:23:16 +00:00
rohitwaghchaure
717c78dcda Merge pull request #40538 from frappe/version-15-hotfix
chore: release v15
2024-03-20 10:52:04 +05:30
mergify[bot]
1c90797879 fix: currency symbol for Landed Cost Voucher Amount (backport #40550) (#40554)
fix: currency symbol for Landed Cost Voucher Amount (#40550)

(cherry picked from commit 0725707cb1)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-19 20:42:57 +05:30
Raffael Meyer
ba9f9bff19 Merge pull request #40548 from frappe/mergify/bp/version-15-hotfix/pr-40546
fix(Supplier Quotation Comparison): group by options (backport #40546)
2024-03-19 13:07:25 +01:00
barredterra
1e16d2ca25 fix(Supplier Quotation Comparison): group by options
(cherry picked from commit 87e36d290e)
2024-03-19 11:51:36 +00:00
Raffael Meyer
745e653339 Merge pull request #40544 from frappe/mergify/bp/version-15-hotfix/pr-40542 2024-03-19 12:49:32 +01:00
barredterra
f0e00daa1c refactor: usage of in_list
(cherry picked from commit d238751e6b)
2024-03-19 11:13:02 +00:00
mergify[bot]
0bdda1226f fix: rate changing while making PR (negative discount) (backport #40539) (#40540)
fix: rate changing while making PR (negative discount) (#40539)

(cherry picked from commit 8136954484)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-19 15:37:37 +05:30
rohitwaghchaure
05436dfcac Merge branch 'version-15' into version-15-hotfix 2024-03-19 15:28:47 +05:30
mergify[bot]
7f1f7809c8 fix: stock reco negative batch (backport #40533) (#40535)
fix: stock reco negative batch (#40533)

(cherry picked from commit a64c2ecf39)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-19 15:18:50 +05:30
mergify[bot]
44bbf4b983 fix: Update Existing Price List Rate not working (backport #40333) (#40527)
fix: Update Existing Price List Rate not working (#40333)

(cherry picked from commit 09ea7edb86)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-19 14:26:41 +05:30
Gursheen Kaur Anand
0ddb310dd4 Merge pull request #40531 from frappe/mergify/bp/version-15-hotfix/pr-40528
fix(minor): missing range for ageing summary in PSOA (backport #40528)
2024-03-19 12:44:04 +05:30
Gursheen Anand
dacc69c56f fix: missing range for ageing summary
(cherry picked from commit 643cc022fd)
2024-03-19 07:11:18 +00:00
ruthra kumar
7b4ede9c04 Merge pull request #40523 from frappe/mergify/bp/version-15-hotfix/pr-40502
refactor: toggle between 'http' and 'https' on exchange rate API (backport #40502)
2024-03-19 10:21:28 +05:30
ruthra kumar
1a0a70b5cd refactor: toggle between 'http' and 'https' on exchange rate API
(cherry picked from commit 8b81274769)
2024-03-19 04:30:16 +00:00
ruthra kumar
093b95604f Merge pull request #40516 from frappe/mergify/bp/version-15-hotfix/pr-40511
fix: invalid exchange loss booking on invoice against base accounts (backport #40511)
2024-03-18 21:00:38 +05:30
ruthra kumar
dd30a46f29 refactor(test): ensure Exchange gain/loss journals aren't created
(cherry picked from commit e1c2d006ca)
2024-03-18 15:14:44 +00:00
ruthra kumar
72c9cd5582 fix: invalid exchange loss booking on invoice againts base accounts
(cherry picked from commit 3d5dba6976)
2024-03-18 15:14:43 +00:00
mergify[bot]
917a21b989 fix: not able to delete cancelled delivery note (backport #40508) (#40510)
fix: not able to delete cancelled delivery note (#40508)

(cherry picked from commit 7695759f3c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-18 15:26:32 +05:30
mergify[bot]
69f442dd79 fix: balance qty in the stock ledger report (backport #40506) (#40507)
fix: balance qty in the stock ledger report (#40506)

(cherry picked from commit 00de529a1e)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-18 13:03:27 +05:30
Gursheen Kaur Anand
a82df6ac7b Merge pull request #40503 from GursheenK/achieved-targets-for-territory-v15
fix: achieved targets for territory / partners bpv15
2024-03-18 11:21:59 +05:30
Gursheen Anand
bc78bc33f1 fix: show correct variance for durations with no vouchers 2024-03-18 10:18:16 +05:30
Gursheen Anand
1a3ea0c108 test: sales partner targets with invoices 2024-03-18 10:18:16 +05:30
Gursheen Anand
1ac888715c fix: achieved targets for sales partners 2024-03-18 10:18:16 +05:30
Deepesh Garg
6ecd545f17 Merge pull request #40492 from frappe/mergify/bp/version-15-hotfix/pr-40428
chore: Remove custom party queries (#40428)
2024-03-17 19:47:39 +05:30
ruthra kumar
be730fe66a Merge pull request #40499 from frappe/mergify/bp/version-15-hotfix/pr-40494
fix: AttributeError in Bank Statement Import (backport #40494)
2024-03-17 08:10:18 +05:30
ruthra kumar
09c1da9570 Merge pull request #40497 from frappe/mergify/bp/version-15-hotfix/pr-40495
fix: index error on Exchange Rate Revaluation creation (backport #40495)
2024-03-17 08:06:17 +05:30
ruthra kumar
a0bf22c9a5 fix: attribute error on Bank Statement Import retry
(cherry picked from commit aec630c74f)
2024-03-17 02:23:46 +00:00
ruthra kumar
5729ee563c fix: don't validate for currency, if account is unavailable
(cherry picked from commit 3cde81be65)
2024-03-17 02:23:46 +00:00
ruthra kumar
ebd967d7d3 fix: index error on Exchange Rate Revaluation creation
(cherry picked from commit bb279e368c)
2024-03-17 02:21:37 +00:00
Deepesh Garg
313350534f fix: Remove custom queries for customer
(cherry picked from commit 60ba25caf2)
2024-03-16 14:34:36 +00:00
Deepesh Garg
e3336c603c chore: Add supplier query back
(cherry picked from commit effc9d1492)
2024-03-16 14:34:36 +00:00
Deepesh Garg
2e38f4d599 chore: remove invalid comment
(cherry picked from commit e87b44f758)
2024-03-16 14:34:36 +00:00
Deepesh Garg
2512d4c7f2 chore: Remove custom party queries
(cherry picked from commit c9623b6fd6)
2024-03-16 14:34:36 +00:00
Deepesh Garg
823e377ef1 Merge pull request #40454 from frappe/mergify/bp/version-15-hotfix/pr-40433
fix: Taxes not getting updated on change (#40433)
2024-03-16 19:23:22 +05:30
ruthra kumar
db5cd4eace Merge pull request #40490 from frappe/mergify/bp/version-15-hotfix/pr-40485
refactor: validate SO and SI references in Delivery Notes (backport #40485)
2024-03-16 15:27:37 +05:30
ruthra kumar
409a65ec64 test: SO reference validation
(cherry picked from commit 4f396d3049)
2024-03-16 09:29:15 +00:00
ruthra kumar
28d3525b42 refactor: validate SO and SI references
(cherry picked from commit 4d090bd3b8)
2024-03-16 09:29:14 +00:00
ruthra kumar
f7ef0d69b7 Merge pull request #40474 from frappe/mergify/bp/version-15-hotfix/pr-40473
refactor: enable no-copy for update_outstanding_for_self (backport #40473)
2024-03-16 10:07:51 +05:30
ruthra kumar
0ca5f98ba3 Merge pull request #40471 from frappe/mergify/bp/version-15-hotfix/pr-40260
refactor: support payment against reverse payment reconciliation (backport #40260)
2024-03-16 10:06:25 +05:30
ruthra kumar
78eb6bd9ea Merge pull request #40466 from frappe/mergify/bp/version-15-hotfix/pr-40461
refactor: disallow '0' qty return invoices with stock effect (backport #40461)
2024-03-16 10:05:22 +05:30
mergify[bot]
74b30a6a1d fix: stopped mr showing in the popup (backport #40478) (#40480)
fix: stopped mr showing in the popup (#40478)

(cherry picked from commit 1ff8a6f24f)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-16 09:35:56 +05:30
ruthra kumar
ed4c8461d3 chore: resolve conflict 2024-03-15 20:16:38 +05:30
mergify[bot]
61d59b392a fix: serial and batch for internal transfer (backport #40467) (#40477)
fix: serial and batch for internal transfer (#40467)

* fix: serial and batch for internal transfer

* chore: fix test cases

(cherry picked from commit 59222813af)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-15 18:19:56 +05:30
ruthra kumar
fba13c6dbc refactor: enable no-copy for update_outstanding_for_self
(cherry picked from commit a1e8caa5c1)
2024-03-15 11:33:09 +00:00
Gursheen Kaur Anand
3397b80ddf Merge pull request #40470 from frappe/mergify/bp/version-15-hotfix/pr-40198
fix: auto-update due date for invoices via data import (backport #40198)
2024-03-15 13:16:56 +05:30
ruthra kumar
d82b1fc600 refactor(test): generate and use unique party
(cherry picked from commit a3d4aff29c)
2024-03-15 07:22:42 +00:00
ruthra kumar
7ea1edc4ff test: advance payment reconciliation against payment
'advance' payments booked in separate party account

(cherry picked from commit 2a08072443)
2024-03-15 07:22:42 +00:00
ruthra kumar
1762f9919a test: reverse payment reconciliation
(cherry picked from commit 6d9074d585)

# Conflicts:
#	erpnext/accounts/doctype/payment_entry/test_payment_entry.py
2024-03-15 07:22:41 +00:00
ruthra kumar
17fb287cd9 refactor: support payment against reverse payment reconciliation
(cherry picked from commit 5f15297f28)
2024-03-15 07:22:41 +00:00
Gursheen Anand
8242a9cd46 fix: use in_import flag for checking imported records
(cherry picked from commit f504f2caf3)
2024-03-15 07:16:26 +00:00
Gursheen Anand
9cdde50f7c fix: auto-update due date for invoices via data import
(cherry picked from commit c096133897)
2024-03-15 07:16:25 +00:00
ruthra kumar
5957ef9b9d test: validation to prevent '0' qty return with stock effect
(cherry picked from commit 647bba0f00)
2024-03-15 05:37:36 +00:00
ruthra kumar
144aec8d6a refactor: disallow '0' qty return invoices with stock effect
(cherry picked from commit 898affbee9)
2024-03-15 05:37:36 +00:00
ruthra kumar
3fe45404ea Merge pull request #40460 from frappe/mergify/bp/version-15-hotfix/pr-40420
fix: advance journal fetching logic in Advances section (backport #40420)
2024-03-14 15:51:15 +05:30
ruthra kumar
bfa78aaf74 fix: advance journal fetching logic in Advances section
(cherry picked from commit e786a93c2e)
2024-03-14 10:06:05 +00:00
Frappe PR Bot
436e030961 chore(release): Bumped to Version 15.17.1
## [15.17.1](https://github.com/frappe/erpnext/compare/v15.17.0...v15.17.1) (2024-03-14)

### Bug Fixes

* **test:** manually filter row and assert ([057e433](057e43330f))
2024-03-14 09:17:23 +00:00
ruthra kumar
217cef6f4e Merge pull request #40440 from frappe/mergify/bp/version-15/pr-40372
refactor: checkbox to toggle standalone Credit/Debit note behaviour (backport #40372)
2024-03-14 14:46:16 +05:30
mergify[bot]
54b5064f76 chore: fix test case (backport #40457) (#40458)
chore: fix test case

(cherry picked from commit ec83d54826)

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2024-03-14 14:43:05 +05:30
ruthra kumar
057e43330f fix(test): manually filter row and assert 2024-03-14 13:19:45 +05:30
Deepesh Garg
75b610d7fc fix: Taxes not getting updated on change
(cherry picked from commit 65ae9616ba)
2024-03-14 06:44:05 +00:00
mergify[bot]
ba6b8561c9 fix: Data too long for column 'stock_queue' (backport #40436) (#40451)
fix: Data too long for column 'stock_queue' (#40436)

(cherry picked from commit cd79dcccb6)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-14 11:49:10 +05:30
ruthra kumar
54a8473a91 Merge pull request #40447 from frappe/mergify/copy/version-15-hotfix/pr-40445
fix: flaky Accounts Receivable test case (copy #40445)
2024-03-14 10:29:27 +05:30
ruthra kumar
df1351783e fix(test): manually filter rows and assert 2024-03-14 10:14:35 +05:30
ruthra kumar
0bb4a7d13a fix: flaky Accounts Receivable test case
(cherry picked from commit 40bce240bde508801d07b9c38ededea5b4f297c8)
2024-03-13 16:53:44 +00:00
mergify[bot]
ce2626e911 fix: incorrect gross profit on the quotation (backport #40438) (#40442)
fix: incorrect gross profit on the quotation (#40438)

(cherry picked from commit f4a945aee4)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-13 21:56:20 +05:30
ruthra kumar
9ffb4c5ca9 chore: resolve conflicts 2024-03-13 17:55:22 +05:30
ruthra kumar
e07f9e6754 chore: better popup message
(cherry picked from commit 445d2acf50)

# Conflicts:
#	erpnext/controllers/accounts_controller.py
2024-03-13 12:08:39 +00:00
ruthra kumar
ed7a115511 test: cr note flag to update self
(cherry picked from commit ce3b1f09f5)
2024-03-13 12:08:38 +00:00
ruthra kumar
19763ce545 refactor: make AR/AP report aware of always standalone cr/dr notes
(cherry picked from commit 4d0c2d8e82)
2024-03-13 12:08:37 +00:00
ruthra kumar
95093ba7cd chore: patch for updating flag in Cr/Dr notes
(cherry picked from commit 849f478894)

# Conflicts:
#	erpnext/patches.txt
2024-03-13 12:08:37 +00:00
ruthra kumar
b56fe0e800 refactor: post ledger entries based on toggle
(cherry picked from commit 77aac6f571)
2024-03-13 12:08:36 +00:00
ruthra kumar
006971ecc6 refactor: checkbox in purchase invoice
(cherry picked from commit 767f2157e6)
2024-03-13 12:08:35 +00:00
ruthra kumar
9ccc22ca61 chore: update popup message
(cherry picked from commit adf13a19c4)

# Conflicts:
#	erpnext/controllers/accounts_controller.py
2024-03-13 12:08:35 +00:00
ruthra kumar
18957d7cc4 refactor: checkbox to toggle always standalone credit note
(cherry picked from commit 2cefe2a20e)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.json
2024-03-13 12:08:34 +00:00
ruthra kumar
bc53b67065 Merge pull request #40427 from frappe/mergify/bp/version-15-hotfix/pr-40372
refactor: checkbox to toggle standalone Credit/Debit note behaviour (backport #40372)
2024-03-13 16:28:50 +05:30
Nabin Hait
2d7ff5d4cf fix: Book depreciation until the asset disposal date and removed unwanted commits
(cherry picked from commit dedae4fecf)
2024-03-13 07:48:27 +00:00
ruthra kumar
70375dfbde refactor: pass 'name' to get_link_to_form 2024-03-13 13:15:07 +05:30
ruthra kumar
1093e0d46f chore: resolve conflicts 2024-03-13 12:17:46 +05:30
ruthra kumar
d87b98d945 chore: better popup message
(cherry picked from commit 445d2acf50)

# Conflicts:
#	erpnext/controllers/accounts_controller.py
2024-03-13 06:13:11 +00:00
ruthra kumar
752b01d83b test: cr note flag to update self
(cherry picked from commit ce3b1f09f5)
2024-03-13 06:13:11 +00:00
ruthra kumar
a0f78584e9 refactor: make AR/AP report aware of always standalone cr/dr notes
(cherry picked from commit 4d0c2d8e82)
2024-03-13 06:13:11 +00:00
ruthra kumar
4b44ae435a chore: patch for updating flag in Cr/Dr notes
(cherry picked from commit 849f478894)

# Conflicts:
#	erpnext/patches.txt
2024-03-13 06:13:10 +00:00
ruthra kumar
1c68946fb9 refactor: post ledger entries based on toggle
(cherry picked from commit 77aac6f571)
2024-03-13 06:13:10 +00:00
ruthra kumar
824d6b4102 refactor: checkbox in purchase invoice
(cherry picked from commit 767f2157e6)
2024-03-13 06:13:10 +00:00
ruthra kumar
b5f22c39ec chore: update popup message
(cherry picked from commit adf13a19c4)

# Conflicts:
#	erpnext/controllers/accounts_controller.py
2024-03-13 06:13:10 +00:00
ruthra kumar
f83098e493 refactor: checkbox to toggle always standalone credit note
(cherry picked from commit 2cefe2a20e)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.json
2024-03-13 06:13:09 +00:00
Frappe PR Bot
33185e0a3b chore(release): Bumped to Version 15.17.0
# [15.17.0](https://github.com/frappe/erpnext/compare/v15.16.2...v15.17.0) (2024-03-13)

### Bug Fixes

* **accounts:** Allow setting Number of new Cost Center (backport [#40212](https://github.com/frappe/erpnext/issues/40212)) ([#40314](https://github.com/frappe/erpnext/issues/40314)) ([7001e0a](7001e0a820))
* advance paid amount and ledger entries against SO/PO ([6a5a941](6a5a941a5a))
* barcode field on line item not working (backport [#40381](https://github.com/frappe/erpnext/issues/40381)) ([#40384](https://github.com/frappe/erpnext/issues/40384)) ([9ce68de](9ce68deff5))
* batch no not copied while making Material Consumption entry (backport [#40290](https://github.com/frappe/erpnext/issues/40290)) ([#40300](https://github.com/frappe/erpnext/issues/40300)) ([6d1c144](6d1c144a66))
* Blanket order rate getting changed on converting to order ([d8c6eb0](d8c6eb0bf2))
* conditionally apply `is_group` filter in accounting dimension query (backport [#40414](https://github.com/frappe/erpnext/issues/40414)) ([#40416](https://github.com/frappe/erpnext/issues/40416)) ([40752c1](40752c1f5c))
* decimal issue while making the stock entry (backport [#40394](https://github.com/frappe/erpnext/issues/40394)) ([#40397](https://github.com/frappe/erpnext/issues/40397)) ([91af7c0](91af7c033a))
* error message wording ([#40403](https://github.com/frappe/erpnext/issues/40403)) ([2a40808](2a40808b05))
* Filter for projects in Sales Cycle ([173b3b8](173b3b85f6))
* get_user_default_as_list args order ([44ff607](44ff607dcd))
* if input manualy material request on WO the material_request_item is not set so validate WO give error (backport [#40180](https://github.com/frappe/erpnext/issues/40180)) ([#40421](https://github.com/frappe/erpnext/issues/40421)) ([a5e6763](a5e6763be5))
* incorrect advance paid in Sales/Purchase Order ([6832908](6832908e92))
* incorrect work order status (backport [#40407](https://github.com/frappe/erpnext/issues/40407)) ([#40411](https://github.com/frappe/erpnext/issues/40411)) ([605132a](605132a31c))
* load ignored doctype and include Mode of Payment Account ([#40334](https://github.com/frappe/erpnext/issues/40334)) ([5fac500](5fac50036a))
* MR Default Supplier search query (backport [#40273](https://github.com/frappe/erpnext/issues/40273)) ([#40351](https://github.com/frappe/erpnext/issues/40351)) ([a195dd3](a195dd3c1f))
* negative stock error for the batch (backport [#40389](https://github.com/frappe/erpnext/issues/40389)) ([#40391](https://github.com/frappe/erpnext/issues/40391)) ([478b988](478b988290))
* not able to cancel purchase receipt for old subcontracting flow (backport [#40298](https://github.com/frappe/erpnext/issues/40298)) ([#40302](https://github.com/frappe/erpnext/issues/40302)) ([e0e80f7](e0e80f7eed))
* qc created for raw materials during manufacture entry (backport [#40408](https://github.com/frappe/erpnext/issues/40408)) ([#40413](https://github.com/frappe/erpnext/issues/40413)) ([f932265](f932265218))
* recursion issue while submitting work order (backport [#40400](https://github.com/frappe/erpnext/issues/40400)) ([#40402](https://github.com/frappe/erpnext/issues/40402)) ([d6e87f3](d6e87f3f17))
* Sender email in process statements of accounts ([953f640](953f64091a))
* **Shipment Parcel:** make length, width and height non-mandatory ([1476196](1476196966))
* stock ledger balance qty for the batch (backport [#40274](https://github.com/frappe/erpnext/issues/40274)) ([#40301](https://github.com/frappe/erpnext/issues/40301)) ([62aefce](62aefcef04))
* use serial batch fields for subcontracting receipt (backport [#40311](https://github.com/frappe/erpnext/issues/40311)) ([#40315](https://github.com/frappe/erpnext/issues/40315)) ([4b15c00](4b15c00b11))
* use serial/batch field for rejected items (backport [#40327](https://github.com/frappe/erpnext/issues/40327)) ([#40329](https://github.com/frappe/erpnext/issues/40329)) ([7ca7242](7ca72423b9))
* Use serial/batch fields for delivery note return (backport [#40374](https://github.com/frappe/erpnext/issues/40374)) ([#40376](https://github.com/frappe/erpnext/issues/40376)) ([32660ab](32660abdc8))

### Features

* add recursion qty field in promotional scheme ([5f4b23d](5f4b23d4af))
2024-03-13 04:29:12 +00:00
Deepesh Garg
0e4e0b3084 Merge pull request #40395 from frappe/version-15-hotfix
chore: release v15
2024-03-13 09:57:54 +05:30
mergify[bot]
a5e6763be5 fix: if input manualy material request on WO the material_request_item is not set so validate WO give error (backport #40180) (#40421)
fix: if input manualy material request on WO the material_request_item is not set so validate WO give error (#40180)

(cherry picked from commit f24f51b7de)

Co-authored-by: HENRY Florian <florian.henry@open-concept.pro>
2024-03-12 21:56:14 +05:30
mergify[bot]
26a1d84935 chore: Add translation to buttons in Update stock_summary_template.html (backport #40099) (#40419)
chore: Add translation to buttons in Update stock_summary_template.html (#40099)

chore: Add translation to buttons in Update stock_summary_template.html
(cherry picked from commit f3b4237ab6)

Co-authored-by: Ernesto Ruiz <eruiz@wbapps.com>
2024-03-12 21:31:30 +05:30
mergify[bot]
40752c1f5c fix: conditionally apply is_group filter in accounting dimension query (backport #40414) (#40416)
fix: conditionally apply `is_group` filter in accounting dimension query (#40414)

(cherry picked from commit daf4ae2a6b)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2024-03-12 20:45:31 +05:30
Raffael Meyer
0ad203ab89 Merge pull request #40406 from frappe/mergify/bp/version-15-hotfix/pr-40403
fix: error message wording (backport #40403)
2024-03-12 14:29:49 +01:00
mergify[bot]
605132a31c fix: incorrect work order status (backport #40407) (#40411)
fix: incorrect work order status (#40407)

(cherry picked from commit 948297692e)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-12 18:34:25 +05:30
mergify[bot]
f932265218 fix: qc created for raw materials during manufacture entry (backport #40408) (#40413)
fix: qc created for raw materials during manufacture entry (#40408)

(cherry picked from commit f8a1a7f515)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-12 18:29:11 +05:30
Raffael Meyer
2a40808b05 fix: error message wording (#40403)
(cherry picked from commit 79a0473705)
2024-03-12 11:26:56 +00:00
mergify[bot]
d6e87f3f17 fix: recursion issue while submitting work order (backport #40400) (#40402)
* fix: recursion issue while submitting work order (#40400)

(cherry picked from commit 72614bb8ff)

* chore: fix linter issue

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-12 16:50:00 +05:30
mergify[bot]
91af7c033a fix: decimal issue while making the stock entry (backport #40394) (#40397)
fix: decimal issue while making the stock entry (#40394)

(cherry picked from commit 4a02d1497c)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-03-12 15:35:55 +05:30
833 changed files with 22987 additions and 11464 deletions

View File

@@ -28,4 +28,7 @@ b147b85e6ac19a9220cd1e2958a6ebd99373283a
494bd9ef78313436f0424b918f200dab8fc7c20b
# bulk format python code with black
baec607ff5905b1c67531096a9cf50ec7ff00a5d
baec607ff5905b1c67531096a9cf50ec7ff00a5d
# ruff
960ef14b7a68cfec9e309ec12845f521cb6a721c

View File

@@ -55,29 +55,18 @@ repos:
erpnext/templates/includes/.*
)$
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.2.0
hooks:
- id: flake8
additional_dependencies: [
'flake8-bugbear',
'flake8-tuple',
]
args: ['--config', '.github/helper/.flake8_strict']
exclude: ".*setup.py$"
- id: ruff
name: "Run ruff import sorter"
args: ["--select=I", "--fix"]
- repo: https://github.com/adityahase/black
rev: 9cb0a69f4d0030cdf687eddf314468b39ed54119
hooks:
- id: black
additional_dependencies: ['click==8.0.4']
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
exclude: ".*setup.py$"
- id: ruff
name: "Run ruff linter"
- id: ruff-format
name: "Run ruff formatter"
ci:
autoupdate_schedule: weekly

View File

@@ -3,7 +3,7 @@ import inspect
import frappe
__version__ = "15.16.2"
__version__ = "15.30.0"
def get_default_company(user=None):
@@ -36,10 +36,8 @@ def get_default_cost_center(company):
if not frappe.flags.company_cost_center:
frappe.flags.company_cost_center = {}
if not company in frappe.flags.company_cost_center:
frappe.flags.company_cost_center[company] = frappe.get_cached_value(
"Company", company, "cost_center"
)
if company not in frappe.flags.company_cost_center:
frappe.flags.company_cost_center[company] = frappe.get_cached_value("Company", company, "cost_center")
return frappe.flags.company_cost_center[company]
@@ -47,7 +45,7 @@ def get_company_currency(company):
"""Returns the default company currency"""
if not frappe.flags.company_currency:
frappe.flags.company_currency = {}
if not company in frappe.flags.company_currency:
if company not in frappe.flags.company_currency:
frappe.flags.company_currency[company] = frappe.db.get_value(
"Company", company, "default_currency", cache=True
)
@@ -81,7 +79,7 @@ def is_perpetual_inventory_enabled(company):
if not hasattr(frappe.local, "enable_perpetual_inventory"):
frappe.local.enable_perpetual_inventory = {}
if not company in frappe.local.enable_perpetual_inventory:
if company not in frappe.local.enable_perpetual_inventory:
frappe.local.enable_perpetual_inventory[company] = (
frappe.get_cached_value("Company", company, "enable_perpetual_inventory") or 0
)
@@ -96,7 +94,7 @@ def get_default_finance_book(company=None):
if not hasattr(frappe.local, "default_finance_book"):
frappe.local.default_finance_book = {}
if not company in frappe.local.default_finance_book:
if company not in frappe.local.default_finance_book:
frappe.local.default_finance_book[company] = frappe.get_cached_value(
"Company", company, "default_finance_book"
)
@@ -108,7 +106,7 @@ def get_party_account_type(party_type):
if not hasattr(frappe.local, "party_account_types"):
frappe.local.party_account_types = {}
if not party_type in frappe.local.party_account_types:
if party_type not in frappe.local.party_account_types:
frappe.local.party_account_types[party_type] = (
frappe.db.get_value("Party Type", party_type, "account_type") or ""
)

View File

@@ -11,14 +11,14 @@ class ERPNextAddress(Address):
def validate(self):
self.validate_reference()
self.update_compnay_address()
super(ERPNextAddress, self).validate()
super().validate()
def link_address(self):
"""Link address based on owner"""
if self.is_your_company_address:
return
return super(ERPNextAddress, self).link_address()
return super().link_address()
def update_compnay_address(self):
for link in self.get("links"):
@@ -26,11 +26,11 @@ class ERPNextAddress(Address):
self.is_your_company_address = 1
def validate_reference(self):
if self.is_your_company_address and not [
row for row in self.links if row.link_doctype == "Company"
]:
if self.is_your_company_address and not [row for row in self.links if row.link_doctype == "Company"]:
frappe.throw(
_("Address needs to be linked to a Company. Please add a row for Company in the Links table."),
_(
"Address needs to be linked to a Company. Please add a row for Company in the Links table."
),
title=_("Company Not Linked"),
)

View File

@@ -37,7 +37,7 @@ def get(
filters = frappe.parse_json(filters) or frappe.parse_json(chart.filters_json)
account = filters.get("account")
company = filters.get("company")
filters.get("company")
if not account and chart_name:
frappe.throw(
@@ -83,7 +83,6 @@ def build_result(account, dates, gl_entries):
# get balances in debit
for entry in gl_entries:
# entry date is after the current pointer, so move the pointer forward
while getdate(entry.posting_date) > result[date_index][0]:
date_index += 1
@@ -133,8 +132,6 @@ def get_dates_from_timegrain(from_date, to_date, timegrain):
dates = [get_period_ending(from_date, timegrain)]
while getdate(dates[-1]) < getdate(to_date):
date = get_period_ending(
add_to_date(dates[-1], years=years, months=months, days=days), timegrain
)
date = get_period_ending(add_to_date(dates[-1], years=years, months=months, days=days), timegrain)
dates.append(date)
return dates

View File

@@ -24,14 +24,10 @@ from erpnext.accounts.utils import get_account_currency
def validate_service_stop_date(doc):
"""Validates service_stop_date for Purchase Invoice and Sales Invoice"""
enable_check = (
"enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense"
)
enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense"
old_stop_dates = {}
old_doc = frappe.db.get_all(
"{0} Item".format(doc.doctype), {"parent": doc.name}, ["name", "service_stop_date"]
)
old_doc = frappe.db.get_all(f"{doc.doctype} Item", {"parent": doc.name}, ["name", "service_stop_date"])
for d in old_doc:
old_stop_dates[d.name] = d.service_stop_date or ""
@@ -62,16 +58,14 @@ def build_conditions(process_type, account, company):
)
if account:
conditions += "AND %s='%s'" % (deferred_account, account)
conditions += f"AND {deferred_account}='{account}'"
elif company:
conditions += f"AND p.company = {frappe.db.escape(company)}"
return conditions
def convert_deferred_expense_to_expense(
deferred_process, start_date=None, end_date=None, conditions=""
):
def convert_deferred_expense_to_expense(deferred_process, start_date=None, end_date=None, conditions=""):
# book the expense/income on the last day, but it will be trigger on the 1st of month at 12:00 AM
if not start_date:
@@ -81,16 +75,14 @@ def convert_deferred_expense_to_expense(
# check for the purchase invoice for which GL entries has to be done
invoices = frappe.db.sql_list(
"""
f"""
select distinct item.parent
from `tabPurchase Invoice Item` item, `tabPurchase Invoice` p
where item.service_start_date<=%s and item.service_end_date>=%s
and item.enable_deferred_expense = 1 and item.parent=p.name
and item.docstatus = 1 and ifnull(item.amount, 0) > 0
{0}
""".format(
conditions
),
{conditions}
""",
(end_date, start_date),
) # nosec
@@ -103,9 +95,7 @@ def convert_deferred_expense_to_expense(
send_mail(deferred_process)
def convert_deferred_revenue_to_income(
deferred_process, start_date=None, end_date=None, conditions=""
):
def convert_deferred_revenue_to_income(deferred_process, start_date=None, end_date=None, conditions=""):
# book the expense/income on the last day, but it will be trigger on the 1st of month at 12:00 AM
if not start_date:
@@ -115,16 +105,14 @@ def convert_deferred_revenue_to_income(
# check for the sales invoice for which GL entries has to be done
invoices = frappe.db.sql_list(
"""
f"""
select distinct item.parent
from `tabSales Invoice Item` item, `tabSales Invoice` p
where item.service_start_date<=%s and item.service_end_date>=%s
and item.enable_deferred_revenue = 1 and item.parent=p.name
and item.docstatus = 1 and ifnull(item.amount, 0) > 0
{0}
""".format(
conditions
),
{conditions}
""",
(end_date, start_date),
) # nosec
@@ -243,9 +231,7 @@ def calculate_monthly_amount(
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(
doc, item
)
base_amount = flt(
item.base_net_amount - already_booked_amount, item.precision("base_net_amount")
)
base_amount = flt(item.base_net_amount - already_booked_amount, item.precision("base_net_amount"))
if account_currency == doc.company_currency:
amount = base_amount
else:
@@ -265,17 +251,13 @@ def calculate_amount(doc, item, last_gl_entry, total_days, total_booking_days, a
if account_currency == doc.company_currency:
amount = base_amount
else:
amount = flt(
item.net_amount * total_booking_days / flt(total_days), item.precision("net_amount")
)
amount = flt(item.net_amount * total_booking_days / flt(total_days), item.precision("net_amount"))
else:
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(
doc, item
)
base_amount = flt(
item.base_net_amount - already_booked_amount, item.precision("base_net_amount")
)
base_amount = flt(item.base_net_amount - already_booked_amount, item.precision("base_net_amount"))
if account_currency == doc.company_currency:
amount = base_amount
else:
@@ -296,26 +278,22 @@ def get_already_booked_amount(doc, item):
gl_entries_details = frappe.db.sql(
"""
select sum({0}) as total_credit, sum({1}) as total_credit_in_account_currency, voucher_detail_no
select sum({}) as total_credit, sum({}) as total_credit_in_account_currency, voucher_detail_no
from `tabGL Entry` where company=%s and account=%s and voucher_type=%s and voucher_no=%s and voucher_detail_no=%s
and is_cancelled = 0
group by voucher_detail_no
""".format(
total_credit_debit, total_credit_debit_currency
),
""".format(total_credit_debit, total_credit_debit_currency),
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name),
as_dict=True,
)
journal_entry_details = frappe.db.sql(
"""
SELECT sum(c.{0}) as total_credit, sum(c.{1}) as total_credit_in_account_currency, reference_detail_no
SELECT sum(c.{}) as total_credit, sum(c.{}) as total_credit_in_account_currency, reference_detail_no
FROM `tabJournal Entry` p , `tabJournal Entry Account` c WHERE p.name = c.parent and
p.company = %s and c.account=%s and c.reference_type=%s and c.reference_name=%s and c.reference_detail_no=%s
and p.docstatus < 2 group by reference_detail_no
""".format(
total_credit_debit, total_credit_debit_currency
),
""".format(total_credit_debit, total_credit_debit_currency),
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name),
as_dict=True,
)
@@ -337,9 +315,7 @@ def get_already_booked_amount(doc, item):
def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
enable_check = (
"enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense"
)
enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense"
accounts_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto")
@@ -384,45 +360,45 @@ def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
)
if not amount:
return
gl_posting_date = end_date
prev_posting_date = None
# check if books nor frozen till endate:
if accounts_frozen_upto and getdate(end_date) <= getdate(accounts_frozen_upto):
gl_posting_date = get_last_day(add_days(accounts_frozen_upto, 1))
prev_posting_date = end_date
if via_journal_entry:
book_revenue_via_journal_entry(
doc,
credit_account,
debit_account,
amount,
base_amount,
gl_posting_date,
project,
account_currency,
item.cost_center,
item,
deferred_process,
submit_journal_entry,
)
else:
make_gl_entries(
doc,
credit_account,
debit_account,
against,
amount,
base_amount,
gl_posting_date,
project,
account_currency,
item.cost_center,
item,
deferred_process,
)
gl_posting_date = end_date
prev_posting_date = None
# check if books nor frozen till endate:
if accounts_frozen_upto and getdate(end_date) <= getdate(accounts_frozen_upto):
gl_posting_date = get_last_day(add_days(accounts_frozen_upto, 1))
prev_posting_date = end_date
if via_journal_entry:
book_revenue_via_journal_entry(
doc,
credit_account,
debit_account,
amount,
base_amount,
gl_posting_date,
project,
account_currency,
item.cost_center,
item,
deferred_process,
submit_journal_entry,
)
else:
make_gl_entries(
doc,
credit_account,
debit_account,
against,
amount,
base_amount,
gl_posting_date,
project,
account_currency,
item.cost_center,
item,
deferred_process,
)
# Returned in case of any errors because it tries to submit the same record again and again in case of errors
if frappe.flags.deferred_accounting_error:
@@ -440,9 +416,7 @@ def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
via_journal_entry = cint(
frappe.db.get_singles_value("Accounts Settings", "book_deferred_entries_via_journal_entry")
)
submit_journal_entry = cint(
frappe.db.get_singles_value("Accounts Settings", "submit_journal_entries")
)
submit_journal_entry = cint(frappe.db.get_singles_value("Accounts Settings", "submit_journal_entries"))
book_deferred_entries_based_on = frappe.db.get_singles_value(
"Accounts Settings", "book_deferred_entries_based_on"
)
@@ -462,9 +436,7 @@ def process_deferred_accounting(posting_date=None):
posting_date = today()
if not cint(
frappe.db.get_singles_value(
"Accounts Settings", "automatically_process_deferred_accounting_entry"
)
frappe.db.get_singles_value("Accounts Settings", "automatically_process_deferred_accounting_entry")
):
return
@@ -587,16 +559,13 @@ def book_revenue_via_journal_entry(
deferred_process=None,
submit="No",
):
if amount == 0:
return
journal_entry = frappe.new_doc("Journal Entry")
journal_entry.posting_date = posting_date
journal_entry.company = doc.company
journal_entry.voucher_type = (
"Deferred Revenue" if doc.doctype == "Sales Invoice" else "Deferred Expense"
)
journal_entry.voucher_type = "Deferred Revenue" if doc.doctype == "Sales Invoice" else "Deferred Expense"
journal_entry.process_deferred_accounting = deferred_process
debit_entry = {
@@ -645,7 +614,6 @@ def book_revenue_via_journal_entry(
def get_deferred_booking_accounts(doctype, voucher_detail_no, dr_or_cr):
if doctype == "Sales Invoice":
credit_account, debit_account = frappe.db.get_value(
"Sales Invoice Item",

View File

@@ -22,8 +22,7 @@ frappe.ui.form.on("Account", {
// hide fields if group
frm.toggle_display(["tax_rate"], cint(frm.doc.is_group) == 0);
// disable fields
frm.toggle_enable(["is_group", "company"], false);
frm.toggle_enable(["is_group", "company", "account_number"], frm.is_new());
if (cint(frm.doc.is_group) == 0) {
frm.toggle_display("freeze_account", frm.doc.__onload && frm.doc.__onload.can_freeze_account);

View File

@@ -55,8 +55,7 @@
"fieldtype": "Data",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Account Number",
"read_only": 1
"label": "Account Number"
},
{
"default": "0",
@@ -72,7 +71,6 @@
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"read_only": 1,
"remember_last_selected_value": 1,
"reqd": 1
},
@@ -123,7 +121,8 @@
"label": "Account Type",
"oldfieldname": "account_type",
"oldfieldtype": "Select",
"options": "\nAccumulated Depreciation\nAsset Received But Not Billed\nBank\nCash\nChargeable\nCapital Work in Progress\nCost of Goods Sold\nCurrent Asset\nCurrent Liability\nDepreciation\nDirect Expense\nDirect Income\nEquity\nExpense Account\nExpenses Included In Asset Valuation\nExpenses Included In Valuation\nFixed Asset\nIncome Account\nIndirect Expense\nIndirect Income\nLiability\nPayable\nReceivable\nRound Off\nStock\nStock Adjustment\nStock Received But Not Billed\nService Received But Not Billed\nTax\nTemporary"
"options": "\nAccumulated Depreciation\nAsset Received But Not Billed\nBank\nCash\nChargeable\nCapital Work in Progress\nCost of Goods Sold\nCurrent Asset\nCurrent Liability\nDepreciation\nDirect Expense\nDirect Income\nEquity\nExpense Account\nExpenses Included In Asset Valuation\nExpenses Included In Valuation\nFixed Asset\nIncome Account\nIndirect Expense\nIndirect Income\nLiability\nPayable\nReceivable\nRound Off\nStock\nStock Adjustment\nStock Received But Not Billed\nService Received But Not Billed\nTax\nTemporary",
"search_index": 1
},
{
"description": "Rate at which this tax is applied",
@@ -192,7 +191,7 @@
"idx": 1,
"is_tree": 1,
"links": [],
"modified": "2023-07-20 18:18:44.405723",
"modified": "2024-06-27 16:23:04.444354",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account",
@@ -253,4 +252,4 @@
"sort_order": "ASC",
"states": [],
"track_changes": 1
}
}

View File

@@ -88,7 +88,7 @@ class Account(NestedSet):
if frappe.local.flags.ignore_update_nsm:
return
else:
super(Account, self).on_update()
super().on_update()
def onload(self):
frozen_accounts_modifier = frappe.db.get_value(
@@ -218,9 +218,7 @@ class Account(NestedSet):
def validate_root_company_and_sync_account_to_children(self):
# ignore validation while creating new compnay or while syncing to child companies
if (
frappe.local.flags.ignore_root_company_validation or self.flags.ignore_root_company_validation
):
if frappe.local.flags.ignore_root_company_validation or self.flags.ignore_root_company_validation:
return
ancestors = get_root_company(self.company)
if ancestors:
@@ -418,7 +416,7 @@ class Account(NestedSet):
if self.check_gle_exists():
throw(_("Account with existing transaction can not be deleted"))
super(Account, self).on_trash(True)
super().on_trash(True)
@frappe.whitelist()
@@ -426,9 +424,8 @@ class Account(NestedSet):
def get_parent_account(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql(
"""select name from tabAccount
where is_group = 1 and docstatus != 2 and company = %s
and %s like %s order by name limit %s offset %s"""
% ("%s", searchfield, "%s", "%s", "%s"),
where is_group = 1 and docstatus != 2 and company = {}
and {} like {} order by name limit {} offset {}""".format("%s", searchfield, "%s", "%s", "%s"),
(filters["company"], "%%%s%%" % txt, page_len, start),
as_list=1,
)
@@ -594,7 +591,5 @@ def sync_update_account_number_in_child(
if old_acc_number:
filters["account_number"] = old_acc_number
for d in frappe.db.get_values(
"Account", filters=filters, fieldname=["company", "name"], as_dict=True
):
for d in frappe.db.get_values("Account", filters=filters, fieldname=["company", "name"], as_dict=True):
update_account_number(d["name"], account_name, account_number, from_descendant=True)

View File

@@ -222,7 +222,7 @@ frappe.treeview_settings["Account"] = {
"General Ledger",
"Balance Sheet",
"Profit and Loss Statement",
"Cash Flow Statement",
"Cash Flow",
"Accounts Payable",
"Accounts Receivable",
]) {

View File

@@ -31,7 +31,6 @@ def create_charts(
"tax_rate",
"account_currency",
]:
account_number = cstr(child.get("account_number")).strip()
account_name, account_name_in_db = add_suffix_if_duplicate(
account_name, account_number, accounts
@@ -39,7 +38,9 @@ def create_charts(
is_group = identify_is_group(child)
report_type = (
"Balance Sheet" if root_type in ["Asset", "Liability", "Equity"] else "Profit and Loss"
"Balance Sheet"
if root_type in ["Asset", "Liability", "Equity"]
else "Profit and Loss"
)
account = frappe.get_doc(
@@ -141,7 +142,7 @@ def get_chart(chart_template, existing_company=None):
for fname in os.listdir(path):
fname = frappe.as_unicode(fname)
if fname.endswith(".json"):
with open(os.path.join(path, fname), "r") as f:
with open(os.path.join(path, fname)) as f:
chart = f.read()
if chart and json.loads(chart).get("name") == chart_template:
return json.loads(chart).get("tree")
@@ -173,7 +174,7 @@ def get_charts_for_country(country, with_standard=False):
for fname in os.listdir(path):
fname = frappe.as_unicode(fname)
if (fname.startswith(country_code) or fname.startswith(country)) and fname.endswith(".json"):
with open(os.path.join(path, fname), "r") as f:
with open(os.path.join(path, fname)) as f:
_get_chart_name(f.read())
# if more than one charts, returned then add the standard
@@ -247,7 +248,13 @@ def validate_bank_account(coa, bank_account):
def _get_account_names(account_master):
for account_name, child in account_master.items():
if account_name not in ["account_number", "account_type", "root_type", "is_group", "tax_rate"]:
if account_name not in [
"account_number",
"account_type",
"root_type",
"is_group",
"tax_rate",
]:
accounts.append(account_name)
_get_account_names(child)

View File

@@ -1,531 +0,0 @@
{
"country_code": "tr",
"name": "Turkey - Tek D\u00fczen Hesap Plan\u0131",
"tree": {
"Duran Varl\u0131klar": {
"Di\u011fer Alacaklar": {
"Ba\u011fl\u0131 Ortakl\u0131klardan Alacaklar": {},
"Di\u011fer Alacak Senetleri Reeskontu(-)": {},
"Di\u011fer \u00c7e\u015fitli Alacaklar": {},
"Ortaklardan Alacaklar": {},
"Personelden Alacaklar": {},
"\u0130\u015ftiraklerden Alacaklar": {},
"\u015e\u00fcpheli Di\u011fer Alacaklar Kar\u015f\u0131l\u0131\u011f\u0131(-)": {}
},
"Di\u011fer Duran Varl\u0131klar": {
"Birikmi\u015f Amortismanlar(-)": {},
"Di\u011fer KDV": {},
"Di\u011fer \u00c7e\u015fitli Duran Varl\u0131klar": {},
"Elden \u00c7\u0131kar\u0131lacak Stoklar Ve Maddi Duran Varl\u0131klar": {},
"Gelecek Y\u0131llar \u0130htiyac\u0131 Stoklar": {},
"Gelecek Y\u0131llarda \u0130ndirilecek KDV": {},
"Pe\u015fin \u00d6denen Vergi Ve Fonlar": {},
"Stok De\u011fer D\u00fc\u015f\u00fckl\u00fc\u011f\u00fc Kar\u015f\u0131l\u0131\u011f\u0131(-)": {}
},
"Gelecek Y\u0131llara Ait Giderler ve Gelir Tahakkuklar\u0131": {
"Gelecek Y\u0131llara Ait Giderler": {},
"Gelir Tahakkuklar\u0131": {}
},
"Maddi Duran Varl\u0131klar": {
"Arazi Ve Arsalar": {},
"Binalar": {},
"Birikmi\u015f Amortismanlar(-)": {},
"Demirba\u015flar": {},
"Di\u011fer Maddi Duran Varl\u0131klar": {},
"Ta\u015f\u0131tlar": {},
"Tesis, Makine Ve Cihazlar": {},
"Verilen Avanslar": {},
"Yap\u0131lmakta Olan Yat\u0131r\u0131mlar": {},
"Yer Alt\u0131 Ve Yer \u00dcst\u00fc D\u00fczenleri": {}
},
"Maddi Olmayan Duran Varl\u0131klar": {
"Ara\u015ft\u0131rma Ve Geli\u015ftirme Giderleri": {},
"Birikmi\u015f Amortismanlar(-)": {},
"Di\u011fer Maddi Olmayan Duran Varl\u0131klar": {},
"Haklar": {},
"Kurulu\u015f Ve \u00d6rg\u00fctlenme Giderleri": {},
"Verilen Avanslar": {},
"\u00d6zel Maliyetler": {},
"\u015eerefiye": {}
},
"Mali Duran Varl\u0131klar": {
"Ba\u011fl\u0131 Menkul K\u0131ymetler": {},
"Ba\u011fl\u0131 Menkul K\u0131ymetler De\u011fer D\u00fc\u015f\u00fckl\u00fc\u011f\u00fc Kar\u015f\u0131l\u0131\u011f\u0131(-)": {},
"Ba\u011fl\u0131 Ortakl\u0131klar": {},
"Ba\u011fl\u0131 Ortakl\u0131klar Sermaye Paylar\u0131 De\u011fer D\u00fc\u015f\u00fckl\u00fc\u011f\u00fc Kar\u015f\u0131l\u0131\u011f\u0131(-)": {},
"Ba\u011fl\u0131 Ortakl\u0131klara Sermaye Taahh\u00fctleri(-)": {},
"Di\u011fer Mali Duran Varl\u0131klar": {},
"Di\u011fer Mali Duran Varl\u0131klar Kar\u015f\u0131l\u0131\u011f\u0131(-)": {},
"\u0130\u015ftirakler": {},
"\u0130\u015ftirakler Sermaye Paylar\u0131 De\u011fer D\u00fc\u015f\u00fckl\u00fc\u011f\u00fc Kar\u015f\u0131l\u0131\u011f\u0131(-)": {},
"\u0130\u015ftiraklere Sermaye Taahh\u00fctleri(-)": {}
},
"Ticari Alacaklar": {
"Alacak Senetleri": {},
"Alacak Senetleri Reeskontu(-)": {},
"Al\u0131c\u0131lar": {},
"Kazaqn\u0131lmam\u0131\u015f Finansal Kiralama Faiz Gelirleri(-)": {},
"Verilen Depozito Ve Teminatlar": {},
"\u015e\u00fcpheli Ticari Alacaklar Kar\u015f\u0131l\u0131\u011f\u0131(-)": {}
},
"root_type": "",
"\u00d6zel T\u00fckenmeye Tabi Varl\u0131klar": {
"Arama Giderleri": {},
"Birikmi\u015f T\u00fckenme Paylar\u0131(-)": {},
"Di\u011fer \u00d6zel T\u00fckenmeye Tabi Varl\u0131klar": {},
"Haz\u0131rl\u0131k Ve Geli\u015ftirme Giderleri": {},
"Verilen Avanslar": {}
}
},
"D\u00f6nen Varl\u0131klar": {
"Di\u011fer Alacaklar": {
"Ba\u011fl\u0131 Ortakl\u0131klardan Alacaklar": {},
"Di\u011fer Alacak Senetleri Reeskontu(-)": {},
"Di\u011fer \u00c7e\u015fitli Alacaklar": {},
"Ortaklardan Alacaklar": {},
"Personelden Alacaklar": {},
"\u0130\u015ftiraklerden Alacaklar": {},
"\u015e\u00fcpheli Di\u011fer Alacaklar": {},
"\u015e\u00fcpheli Di\u011fer Alacaklar Kar\u015f\u0131l\u0131\u011f\u0131(-)": {}
},
"Di\u011fer D\u00f6nen Varl\u0131klar": {
"Devreden KDV": {},
"Di\u011fer D\u00f6nen Varl\u0131klar Kar\u015f\u0131l\u0131\u011f\u0131(-)": {},
"Di\u011fer KDV": {},
"Di\u011fer \u00c7e\u015fitli D\u00f6nen Varl\u0131klar": {},
"Personel Avanslar\u0131": {},
"Pe\u015fin \u00d6denen Vergiler Ve Fonlar": {},
"Say\u0131m Ve Tesell\u00fcm Noksanlar\u0131": {},
"\u0130ndirilecek KDV": {},
"\u0130\u015f Avanslar\u0131": {}
},
"Gelecek Aylara Ait Giderler ve Gelir Tahakkuklar\u0131": {
"Gelecek Aylara Ait Giderler": {},
"Gelir Tahakkuklar\u0131": {}
},
"Haz\u0131r De\u011ferler": {
"Al\u0131nan \u00c7ekler": {},
"Bankalar": {
"account_type": "Bank"
},
"Di\u011fer Haz\u0131r De\u011ferler": {},
"Kasa": {
"account_type": "Cash"
},
"Verilen \u00c7ekler ve \u00d6deme Emirleri(-)": {}
},
"Menkul K\u0131ymetler": {
"Di\u011fer Menkul K\u0131ymetler": {},
"Hisse Senetleri": {},
"Kamu Kesimi Tahvil, Senet ve Bonolar\u0131": {},
"Menkul K\u0131ymetler De\u011fer D\u00fc\u015f\u00fckl\u00fc\u011f\u00fc Kar\u015f\u0131l\u0131\u011f\u0131(-)": {},
"\u00d6zel Kesim Tahvil Senet Ve Bonolar\u0131": {}
},
"Stoklar": {
"Mamuller": {},
"Stok De\u011fer D\u00fc\u015f\u00fckl\u00fc\u011f\u00fc Kar\u015f\u0131l\u0131\u011f\u0131(-)": {},
"Ticari Mallar": {},
"Verilen Sipari\u015f Avanslar\u0131": {},
"Yar\u0131 Mamuller": {},
"\u0130lk Madde Malzeme": {}
},
"Ticari Alacaklar": {
"Alacak Senetleri": {},
"Alacak Senetleri Reeskontu(-)": {},
"Al\u0131c\u0131lar": {},
"Di\u011fer Ticari Alacaklar": {},
"Kazan\u0131lmam\u0131\u015f Finansal Kiralama Faiz Gelirleri(-)": {},
"Verilen Depozito ve Teminatlar": {},
"\u015e\u00fcpheli Ticari Alacaklar": {},
"\u015e\u00fcpheli Ticari Alacaklar Kar\u015f\u0131l\u0131\u011f\u0131": {}
},
"Y\u0131llara Yayg\u0131n \u0130n\u015faat ve Onar\u0131m Maliyetleri": {
"Ta\u015feronlara Verilen Avanslar": {},
"Y\u0131llara Yayg\u0131n \u0130n\u015faat Ve Onar\u0131m Maliyetleri": {}
},
"root_type": ""
},
"Gelir Tablosu Hesaplar\u0131": {
"Br\u00fct Sat\u0131\u015flar": {
"Di\u011fer Gelirler": {},
"Yurt D\u0131\u015f\u0131 Sat\u0131\u015flar": {},
"Yurt \u0130\u00e7i Sat\u0131\u015flar": {}
},
"Di\u011fer Faaliyetlerden Olu\u015fan Gelir ve K\u00e2rlar": {
"Ba\u011fl\u0131 Ortakl\u0131klardan Temett\u00fc Gelirleri": {},
"Di\u011fer Ola\u011fan Gelir Ve K\u00e2rlar": {},
"Enflasyon D\u00fczeltme K\u00e2rlar\u0131": {},
"Faiz Gelirleri": {},
"Kambiyo K\u00e2rlar\u0131": {},
"Komisyon Gelirleri": {},
"Konusu Kalmayan Kar\u015f\u0131l\u0131klar": {},
"Menkul K\u0131ymet Sat\u0131\u015f K\u00e2rlar\u0131": {},
"Reeskont Faiz Gelirleri": {},
"\u0130\u015ftiraklerden Temett\u00fc Gelirleri": {}
},
"Di\u011fer Faaliyetlerden Olu\u015fan Gider ve Zararlar (-)": {
"Di\u011fer Ola\u011fan Gider Ve Zararlar(-)": {},
"Enflasyon D\u00fczeltmesi Zararlar\u0131(-)": {},
"Kambiyo Zararlar\u0131(-)": {},
"Kar\u015f\u0131l\u0131k Giderleri(-)": {},
"Komisyon Giderleri(-)": {},
"Menkul K\u0131ymet Sat\u0131\u015f Zararlar\u0131(-)": {},
"Reeskont Faiz Giderleri(-)": {}
},
"D\u00f6nem Net K\u00e2r\u0131 Ve Zarar\u0131": {
"D\u00f6nem K\u00e2r\u0131 Vergi Ve Di\u011fer Yasal Y\u00fck\u00fcml\u00fcl\u00fck Kar\u015f\u0131l\u0131klar\u0131(-)": {},
"D\u00f6nem K\u00e2r\u0131 Veya Zarar\u0131": {},
"D\u00f6nem Net K\u00e2r\u0131 Veya Zarar\u0131": {},
"Enflasyon D\u00fczeltme Hesab\u0131": {},
"Y\u0131llara Yayg\u0131n \u0130n\u015faat Ve Enflasyon D\u00fczeltme Hesab\u0131": {}
},
"Faaliyet Giderleri(-)": {
"Ara\u015ft\u0131rma Ve Geli\u015ftirme Giderleri(-)": {},
"Genel Y\u00f6netim Giderleri(-)": {},
"Pazarlama Sat\u0131\u015f Ve Da\u011f\u0131t\u0131m Giderleri(-)": {}
},
"Finansman Giderleri": {
"K\u0131sa Vadeli Bor\u00e7lanma Giderleri(-)": {},
"Uzun Vadeli Bor\u00e7lanma Giderleri(-)": {}
},
"Ola\u011fan D\u0131\u015f\u0131 Gelir Ve K\u00e2rlar": {
"Di\u011fer Ola\u011fan D\u0131\u015f\u0131 Gelir Ve K\u00e2rlar": {},
"\u00d6nceki D\u00f6nem Gelir Ve K\u00e2rlar\u0131": {}
},
"Ola\u011fan D\u0131\u015f\u0131 Gider Ve Zaralar(-)": {
"Di\u011fer Ola\u011fan D\u0131\u015f\u0131 Gider Ve Zararlar(-)": {},
"\u00c7al\u0131\u015fmayan K\u0131s\u0131m Gider Ve Zararlar\u0131(-)": {},
"\u00d6nceki D\u00f6nem Gider Ve Zararlar\u0131(-)": {}
},
"Sat\u0131\u015f \u0130ndirimleri (-)": {
"Di\u011fer \u0130ndirimler": {},
"Sat\u0131\u015f \u0130ndirimleri(-)": {},
"Sat\u0131\u015ftan \u0130adeler(-)": {}
},
"Sat\u0131\u015flar\u0131n Maliyeti(-)": {
"Di\u011fer Sat\u0131\u015flar\u0131n Maliyeti(-)": {},
"Sat\u0131lan Hizmet Maliyeti(-)": {},
"Sat\u0131lan Mamuller Maliyeti(-)": {},
"Sat\u0131lan Ticari Mallar Maliyeti(-)": {}
},
"root_type": ""
},
"K\u0131sa Vadeli Yabanc\u0131 Kaynaklar": {
"Al\u0131nan Avanslar": {
"Al\u0131nan Di\u011fer Avanslar": {
"account_type": "Payable"
},
"Al\u0131nan Sipari\u015f Avanslar\u0131": {
"account_type": "Payable"
},
"account_type": "Payable"
},
"Bor\u00e7 ve Gider Kar\u015f\u0131l\u0131klar\u0131": {
"Di\u011fer Bor\u00e7 Ve Gider Kar\u015f\u0131l\u0131klar\u0131": {
"account_type": "Payable"
},
"D\u00f6nem K\u00e2r\u0131 Vergi Ve Di\u011fer Yasal Y\u00fck\u00fcml\u00fcl\u00fck Kar\u015f\u0131l\u0131klar\u0131": {
"account_type": "Tax"
},
"D\u00f6nem K\u00e2r\u0131n\u0131n Pe\u015fin \u00d6denen Vergi Ve Di\u011fer Y\u00fck\u00fcml\u00fcl\u00fckler(-)": {
"account_type": "Tax"
},
"K\u0131dem Tazminat\u0131 Kar\u015f\u0131l\u0131\u011f\u0131": {},
"Maliyet Giderleri Kar\u015f\u0131l\u0131\u011f\u0131": {},
"account_type": "Payable"
},
"Di\u011fer Bor\u00e7lar": {
"Ba\u011fl\u0131 Ortakl\u0131klara Bor\u00e7lar": {
"account_type": "Payable"
},
"Di\u011fer Bor\u00e7 Senetleri Reeskontu(-)": {
"account_type": "Payable"
},
"Di\u011fer \u00c7e\u015fitli Bor\u00e7lar": {
"account_type": "Payable"
},
"Ortaklara Bor\u00e7lar": {
"account_type": "Payable"
},
"Personele Bor\u00e7lar": {
"account_type": "Payable"
},
"account_type": "Payable",
"\u0130\u015ftiraklere Bor\u00e7lar": {
"account_type": "Payable"
}
},
"Di\u011fer K\u0131sa Vadeli Yabanc\u0131 Kaynaklar": {
"Di\u011fer KDV": {
"account_type": "Tax"
},
"Di\u011fer \u00c7e\u015fitli Yabanc\u0131 Kaynaklar": {},
"Hesaplanan KDV": {
"account_type": "Tax"
},
"Merkez Ve \u015eubeler Cari Hesab\u0131": {},
"Say\u0131m Ve Tesell\u00fcm Fazlalar\u0131": {},
"account_type": "Payable"
},
"Gelecek Aylara Ait Gelirler Ve Gider Tahakkuklar\u0131": {
"Gelecek Aylara Ait Gelirler": {},
"Gider Tahakkuklar\u0131": {}
},
"Mali Bor\u00e7lar": {
"Banka Kredileri": {
"account_type": "Payable"
},
"Di\u011fer Mali Bor\u00e7lar": {
"account_type": "Payable"
},
"Ertelenmi\u015f Finansal Kiralama Bor\u00e7lanma Maliyetleri(-)": {
"account_type": "Payable"
},
"Finansal Kiralama \u0130\u015flemlerinden Bor\u00e7lar": {
"account_type": "Payable"
},
"Menkul K\u0131ymetler \u0130hra\u00e7 Fark\u0131(-)": {
"account_type": "Payable"
},
"Tahvil Anapara Bor\u00e7, Taksit Ve Faizleri": {
"account_type": "Payable"
},
"Uzun Vadeli Kredilerin Anapara Taksitleri Ve Faizleri": {
"account_type": "Payable"
},
"account_type": "Payable",
"\u00c7\u0131kar\u0131lan Bonolar Ve Senetler": {
"account_type": "Payable"
},
"\u00c7\u0131kar\u0131lm\u0131\u015f Di\u011fer Menkul K\u0131ymetler": {
"account_type": "Payable"
}
},
"Ticari Bor\u00e7lar": {
"Al\u0131nan Depozito Ve Teminatlar": {
"account_type": "Payable"
},
"Bor\u00e7 Senetleri": {
"account_type": "Payable"
},
"Bor\u00e7 Senetleri Reeskontu(-)": {
"account_type": "Payable"
},
"Di\u011fer Ticari Bor\u00e7lar": {
"account_type": "Payable"
},
"Sat\u0131c\u0131lar": {
"account_type": "Payable"
},
"account_type": "Payable"
},
"Y\u0131llara Yayg\u0131n \u0130n\u015faat Ve Onar\u0131m Hakedi\u015fleri": {
"350 Y\u0131llara Yayg\u0131n \u0130n\u015faat Ve Onar\u0131m Hakedi\u015fleri Bedelleri": {
"account_type": "Payable"
},
"account_type": "Payable"
},
"root_type": "",
"\u00d6denecek Vergi ve Di\u011fer Y\u00fck\u00fcml\u00fcl\u00fckler": {
"Vadesi Ge\u00e7mi\u015f, Ertelenmi\u015f Veya Taksitlendirilmi\u015f Vergi Ve Di\u011fer Y\u00fck\u00fcml\u00fcl\u00fckler": {
"account_type": "Tax"
},
"account_type": "Tax",
"\u00d6denecek Di\u011fer Y\u00fck\u00fcml\u00fcl\u00fckler": {
"account_type": "Tax"
},
"\u00d6denecek Sosyal G\u00fcvenl\u00fck Kesintileri": {
"account_type": "Tax"
},
"\u00d6denecek Vergi Ve Fonlar": {
"account_type": "Tax"
}
}
},
"Maliyet Hesaplar\u0131": {
"Ara\u015ft\u0131rma Ve Geli\u015ftirme Giderleri": {},
"Direkt \u0130lk Madde Ve Malzeme Giderleri": {
"Direk \u0130lk Madde Ve Malzeme Giderleri Hesab\u0131": {},
"Direkt \u0130lk Madde Ve Malzeme Fiyat Fark\u0131": {},
"Direkt \u0130lk Madde Ve Malzeme Miktar Fark\u0131": {},
"Direkt \u0130lk Madde Ve Malzeme Yans\u0131tma Hesab\u0131": {}
},
"Direkt \u0130\u015f\u00e7ilik Giderleri": {
"Direkt \u0130\u015f\u00e7ilik Giderleri": {},
"Direkt \u0130\u015f\u00e7ilik Giderleri Yans\u0131tma Hesab\u0131": {},
"Direkt \u0130\u015f\u00e7ilik S\u00fcre Farklar\u0131": {},
"Direkt \u0130\u015f\u00e7ilik \u00dccret Farklar\u0131": {}
},
"Finansman Giderleri": {
"Finansman Giderleri": {},
"Finansman Giderleri Fark Hesab\u0131": {},
"Finansman Giderleri Yans\u0131tma Hesab\u0131": {}
},
"Genel Y\u00f6netim Giderleri": {
"Genel Y\u00f6netim Gider Farklar\u0131 Hesab\u0131": {},
"Genel Y\u00f6netim Giderleri": {},
"Genel Y\u00f6netim Giderleri Yans\u0131tma Hesab\u0131": {}
},
"Genel \u00dcretim Giderleri": {
"Genel \u00dcretim Giderleri": {},
"Genel \u00dcretim Giderleri B\u00fct\u00e7e Farklar\u0131": {},
"Genel \u00dcretim Giderleri Kapasite Farklar\u0131": {},
"Genel \u00dcretim Giderleri Verimlilik Giderleri": {},
"Genel \u00dcretim Giderleri Yans\u0131tma Hesab\u0131": {}
},
"Hizmet \u00dcretim Maliyeti": {
"Hizmet \u00dcretim Maliyeti": {},
"Hizmet \u00dcretim Maliyeti Fark Hesaplar\u0131": {},
"Hizmet \u00dcretim Maliyeti Yans\u0131tma Hesab\u0131": {}
},
"Maliyet Muhasebesi Ba\u011flant\u0131 Hesaplar\u0131": {
"Maliyet Muhasebesi Ba\u011flant\u0131 Hesab\u0131": {},
"Maliyet Muhasebesi Yans\u0131tma Hesab\u0131": {}
},
"Pazarlama, Sat\u0131\u015f Ve Da\u011f\u0131t\u0131m Giderleri": {
"Atra\u015ft\u0131rma Ve Geli\u015ftirme Giderleri": {},
"Pazarlama Sat\u0131\u015f Ve Dag\u0131t\u0131m Giderleri Yans\u0131tma Hesab\u0131": {},
"Pazarlama Sat\u0131\u015f Ve Da\u011f\u0131t\u0131m Giderleri Fark Hesab\u0131": {}
},
"root_type": ""
},
"Naz\u0131m Hesaplar": {
"root_type": ""
},
"Serbest Hesaplar": {
"root_type": ""
},
"Uzun Vadeli Yabanc\u0131 Kaynaklar": {
"Al\u0131nan Avanslar": {
"Al\u0131nan Di\u011fer Avanslar": {
"account_type": "Payable"
},
"Al\u0131nan Sipari\u015f Avanslar\u0131": {
"account_type": "Payable"
},
"account_type": "Payable"
},
"Bor\u00e7 Ve Gider Kar\u015f\u0131l\u0131klar\u0131": {
"Di\u011fer Bor\u00e7 Ve Gider Kar\u015f\u0131l\u0131klar\u0131": {
"account_type": "Payable"
},
"K\u0131dem Tazminat\u0131 Kar\u015f\u0131l\u0131\u011f\u0131": {},
"account_type": "Payable"
},
"Di\u011fer Bor\u00e7lar": {
"Ba\u011fl\u0131 Ortakl\u0131klara Bor\u00e7lar": {
"account_type": "Payable"
},
"Di\u011fer Bor\u00e7 Senetleri Reeskontu(-)": {
"account_type": "Payable"
},
"Di\u011fer \u00c7e\u015fitli Bor\u00e7lar": {
"account_type": "Payable"
},
"Kamuya Olan Ertelenmi\u015f Veya Taksitlendirilmi\u015f Bor\u00e7lar": {
"account_type": "Payable"
},
"Ortaklara Bor\u00e7lar": {
"account_type": "Payable"
},
"account_type": "Payable",
"\u0130\u015ftiraklere Bor\u00e7lar": {
"account_type": "Payable"
}
},
"Di\u011fer Uzun Vadeli Yabanc\u0131 Kaynaklar": {
"Di\u011fer \u00c7e\u015fitli Uzun Vadeli Yabanc\u0131 Kaynaklar": {
"account_type": "Payable"
},
"Gelecek Y\u0131llara Ertelenmi\u015f Veya Terkin Edilecek KDV": {
"account_type": "Payable"
},
"Tesise Kat\u0131lma Paylar\u0131": {
"account_type": "Payable"
},
"account_type": "Payable"
},
"Gelecek Y\u0131llara Ait Gelirler Ve Gider Tahakkuklar\u0131": {
"Gelecek Y\u0131llara Ait Gelirler": {},
"Gider Tahakkuklar\u0131": {}
},
"Mali Bor\u00e7lar": {
"Banka Kredileri": {
"account_type": "Payable"
},
"Di\u011fer Mali Bor\u00e7lar": {
"account_type": "Payable"
},
"Ertelenmi\u015f Finansal Kiralama Bor\u00e7lanma Maliyetleri(-)": {
"account_type": "Payable"
},
"Finansal Kiralama \u0130\u015flemlerinden Bor\u00e7lar": {
"account_type": "Payable"
},
"Menkul K\u0131ymetler \u0130hra\u00e7 Fark\u0131(-)": {
"account_type": "Payable"
},
"account_type": "Payable",
"\u00c7\u0131kar\u0131lm\u0131\u015f Di\u011fer Menkul K\u0131ymetler": {
"account_type": "Payable"
},
"\u00c7\u0131kar\u0131lm\u0131\u015f Tahviller": {
"account_type": "Payable"
}
},
"Ticari Bor\u00e7lar": {
"Al\u0131nan Depozito Ve Teminatlar": {
"account_type": "Payable"
},
"Bor\u00e7 Senetleri": {
"account_type": "Payable"
},
"Bor\u00e7 Senetleri Reeskontu(-)": {
"account_type": "Payable"
},
"Di\u011fer Ticari Bor\u00e7lar": {
"account_type": "Payable"
},
"Sat\u0131c\u0131lar": {
"account_type": "Payable"
},
"account_type": "Payable"
},
"root_type": ""
},
"\u00d6z Kaynaklar": {
"D\u00f6nem Net K\u00e2r\u0131 (Zarar\u0131)": {
"D\u00f6nem Net K\u00e2r\u0131": {},
"D\u00f6nem Net Zarar\u0131(-)": {}
},
"Ge\u00e7mi\u015f Y\u0131llar K\u00e2rlar\u0131": {
"Ge\u00e7mi\u015f Y\u0131llar K\u00e2rlar\u0131": {}
},
"Ge\u00e7mi\u015f Y\u0131llar Zararlar\u0131(-)": {
"Ge\u00e7mi\u015f Y\u0131llar Zararlar\u0131(-)": {}
},
"K\u00e2r Yedekleri": {
"Di\u011fer K\u00e2r Yedekleri": {},
"Ola\u011fan\u00fcst\u00fc Yedekler": {},
"Stat\u00fc Yedekleri": {},
"Yasal Yedekler": {},
"\u00d6zel Fonlar": {}
},
"Sermaye Yedekleri": {
"Di\u011fer Sermaye Yedekleri": {},
"Hisse Senedi \u0130ptal K\u00e2rlar\u0131": {},
"Hisse Senetleri \u0130hra\u00e7 Primleri": {},
"Maddi Duran Varl\u0131k Yeniden De\u011ferlenme Art\u0131\u015flar\u0131": {},
"Maliyet Art\u0131\u015flar\u0131 Fonu": {},
"\u0130\u015ftirakler Yeniden De\u011ferleme Art\u0131\u015flar\u0131": {}
},
"root_type": "",
"\u00d6denmi\u015f Sermaye": {
"Sermaye": {},
"\u00d6denmi\u015f Sermaye(-)": {
"account_type": "Payable"
}
}
}
}
}

View File

@@ -1525,7 +1525,8 @@
"41-Clients et comptes rattach\u00e9s (PASSIF)": {
"Clients cr\u00e9diteurs": {
"Clients - Avances et acomptes re\u00e7us sur commandes": {
"account_number": "4191"
"account_number": "4191",
"account_type": "Income Account"
},
"Clients - Dettes pour emballages et mat\u00e9riels consign\u00e9s": {
"account_number": "4196"
@@ -3141,4 +3142,4 @@
"account_number": "7"
}
}
}
}

View File

@@ -261,28 +261,20 @@ class TestAccount(unittest.TestCase):
acc.insert()
self.assertTrue(
frappe.db.exists(
"Account", {"account_name": "Test Group Account", "company": "_Test Company 4"}
)
frappe.db.exists("Account", {"account_name": "Test Group Account", "company": "_Test Company 4"})
)
self.assertTrue(
frappe.db.exists(
"Account", {"account_name": "Test Group Account", "company": "_Test Company 5"}
)
frappe.db.exists("Account", {"account_name": "Test Group Account", "company": "_Test Company 5"})
)
# Try renaming child company account
acc_tc_5 = frappe.db.get_value(
"Account", {"account_name": "Test Group Account", "company": "_Test Company 5"}
)
self.assertRaises(
frappe.ValidationError, update_account_number, acc_tc_5, "Test Modified Account"
)
self.assertRaises(frappe.ValidationError, update_account_number, acc_tc_5, "Test Modified Account")
# Rename child company account with allow_account_creation_against_child_company enabled
frappe.db.set_value(
"Company", "_Test Company 5", "allow_account_creation_against_child_company", 1
)
frappe.db.set_value("Company", "_Test Company 5", "allow_account_creation_against_child_company", 1)
update_account_number(acc_tc_5, "Test Modified Account")
self.assertTrue(
@@ -291,9 +283,7 @@ class TestAccount(unittest.TestCase):
)
)
frappe.db.set_value(
"Company", "_Test Company 5", "allow_account_creation_against_child_company", 0
)
frappe.db.set_value("Company", "_Test Company 5", "allow_account_creation_against_child_company", 0)
to_delete = [
"Test Group Account - _TC3",
@@ -318,9 +308,7 @@ class TestAccount(unittest.TestCase):
self.assertEqual(acc.account_currency, "INR")
# Make a JV against this account
make_journal_entry(
"Test Currency Account - _TC", "Miscellaneous Expenses - _TC", 100, submit=True
)
make_journal_entry("Test Currency Account - _TC", "Miscellaneous Expenses - _TC", 100, submit=True)
acc.account_currency = "USD"
self.assertRaises(frappe.ValidationError, acc.save)

View File

@@ -40,16 +40,12 @@ class AccountClosingBalance(Document):
def make_closing_entries(closing_entries, voucher_name, company, closing_date):
accounting_dimensions = get_accounting_dimensions()
previous_closing_entries = get_previous_closing_entries(
company, closing_date, accounting_dimensions
)
previous_closing_entries = get_previous_closing_entries(company, closing_date, accounting_dimensions)
combined_entries = closing_entries + previous_closing_entries
merged_entries = aggregate_with_last_account_closing_balance(
combined_entries, accounting_dimensions
)
merged_entries = aggregate_with_last_account_closing_balance(combined_entries, accounting_dimensions)
for key, value in merged_entries.items():
for _key, value in merged_entries.items():
cle = frappe.new_doc("Account Closing Balance")
cle.update(value)
cle.update(value["dimensions"])

View File

@@ -57,9 +57,12 @@ frappe.ui.form.on("Accounting Dimension", {
}
},
label: function (frm) {
frm.set_value("fieldname", frappe.model.scrub(frm.doc.label));
},
document_type: function (frm) {
frm.set_value("label", frm.doc.document_type);
frm.set_value("fieldname", frappe.model.scrub(frm.doc.document_type));
frappe.db.get_value(
"Accounting Dimension",

View File

@@ -40,7 +40,8 @@ class AccountingDimension(Document):
self.set_fieldname_and_label()
def validate(self):
if self.document_type in core_doctypes_list + (
if self.document_type in (
*core_doctypes_list,
"Accounting Dimension",
"Project",
"Cost Center",
@@ -48,13 +49,10 @@ class AccountingDimension(Document):
"Company",
"Account",
):
msg = _("Not allowed to create accounting dimension for {0}").format(self.document_type)
frappe.throw(msg)
exists = frappe.db.get_value(
"Accounting Dimension", {"document_type": self.document_type}, ["name"]
)
exists = frappe.db.get_value("Accounting Dimension", {"document_type": self.document_type}, ["name"])
if exists and self.is_new():
frappe.throw(_("Document Type already used as a dimension"))
@@ -113,7 +111,6 @@ def make_dimension_in_accounting_doctypes(doc, doclist=None):
repostable_doctypes = get_allowed_types_from_settings()
for doctype in doclist:
if (doc_count + 1) % 2 == 0:
insert_after_field = "dimension_col_break"
else:
@@ -148,7 +145,7 @@ def add_dimension_to_budget_doctype(df, doc):
df.update(
{
"insert_after": "cost_center",
"depends_on": "eval:doc.budget_against == '{0}'".format(doc.document_type),
"depends_on": f"eval:doc.budget_against == '{doc.document_type}'",
}
)
@@ -182,19 +179,17 @@ def delete_accounting_dimension(doc):
frappe.db.sql(
"""
DELETE FROM `tabCustom Field`
WHERE fieldname = %s
AND dt IN (%s)"""
% ("%s", ", ".join(["%s"] * len(doclist))), # nosec
tuple([doc.fieldname] + doclist),
WHERE fieldname = {}
AND dt IN ({})""".format("%s", ", ".join(["%s"] * len(doclist))), # nosec
tuple([doc.fieldname, *doclist]),
)
frappe.db.sql(
"""
DELETE FROM `tabProperty Setter`
WHERE field_name = %s
AND doc_type IN (%s)"""
% ("%s", ", ".join(["%s"] * len(doclist))), # nosec
tuple([doc.fieldname] + doclist),
WHERE field_name = {}
AND doc_type IN ({})""".format("%s", ", ".join(["%s"] * len(doclist))), # nosec
tuple([doc.fieldname, *doclist]),
)
budget_against_property = frappe.get_doc("Property Setter", "Budget-budget_against-options")
@@ -243,7 +238,6 @@ def get_doctypes_with_dimensions():
def get_accounting_dimensions(as_list=True, filters=None):
if not filters:
filters = {"disabled": 0}
@@ -261,18 +255,19 @@ def get_accounting_dimensions(as_list=True, filters=None):
def get_checks_for_pl_and_bs_accounts():
dimensions = frappe.db.sql(
"""SELECT p.label, p.disabled, p.fieldname, c.default_dimension, c.company, c.mandatory_for_pl, c.mandatory_for_bs
FROM `tabAccounting Dimension`p ,`tabAccounting Dimension Detail` c
WHERE p.name = c.parent""",
as_dict=1,
)
if frappe.flags.accounting_dimensions_details is None:
# nosemgrep
frappe.flags.accounting_dimensions_details = frappe.db.sql(
"""SELECT p.label, p.disabled, p.fieldname, c.default_dimension, c.company, c.mandatory_for_pl, c.mandatory_for_bs
FROM `tabAccounting Dimension`p ,`tabAccounting Dimension Detail` c
WHERE p.name = c.parent""",
as_dict=1,
)
return dimensions
return frappe.flags.accounting_dimensions_details
def get_dimension_with_children(doctype, dimensions):
if isinstance(dimensions, str):
dimensions = [dimensions]
@@ -280,9 +275,7 @@ def get_dimension_with_children(doctype, dimensions):
for dimension in dimensions:
lft, rgt = frappe.db.get_value(doctype, dimension, ["lft", "rgt"])
children = frappe.get_all(
doctype, filters={"lft": [">=", lft], "rgt": ["<=", rgt]}, order_by="lft"
)
children = frappe.get_all(doctype, filters={"lft": [">=", lft], "rgt": ["<=", rgt]}, order_by="lft")
all_dimensions += [c.name for c in children]
return all_dimensions
@@ -290,14 +283,10 @@ def get_dimension_with_children(doctype, dimensions):
@frappe.whitelist()
def get_dimensions(with_cost_center_and_project=False):
c = frappe.qb.DocType("Accounting Dimension Detail")
p = frappe.qb.DocType("Accounting Dimension")
dimension_filters = (
frappe.qb.from_(p)
.select(p.label, p.fieldname, p.document_type)
.where(p.disabled == 0)
.run(as_dict=1)
frappe.qb.from_(p).select(p.label, p.fieldname, p.document_type).where(p.disabled == 0).run(as_dict=1)
)
default_dimensions = (
frappe.qb.from_(c)

View File

@@ -78,6 +78,8 @@ class TestAccountingDimension(unittest.TestCase):
def tearDown(self):
disable_dimension()
frappe.flags.accounting_dimensions_details = None
frappe.flags.dimension_filter_map = None
def create_dimension():

View File

@@ -66,37 +66,41 @@ class AccountingDimensionFilter(Document):
def get_dimension_filter_map():
filters = frappe.db.sql(
"""
SELECT
a.applicable_on_account, d.dimension_value, p.accounting_dimension,
p.allow_or_restrict, a.is_mandatory
FROM
`tabApplicable On Account` a,
`tabAccounting Dimension Filter` p
LEFT JOIN `tabAllowed Dimension` d ON d.parent = p.name
WHERE
p.name = a.parent
AND p.disabled = 0
""",
as_dict=1,
)
dimension_filter_map = {}
for f in filters:
f.fieldname = scrub(f.accounting_dimension)
build_map(
dimension_filter_map,
f.fieldname,
f.applicable_on_account,
f.dimension_value,
f.allow_or_restrict,
f.is_mandatory,
if not frappe.flags.get("dimension_filter_map"):
# nosemgrep
filters = frappe.db.sql(
"""
SELECT
a.applicable_on_account, d.dimension_value, p.accounting_dimension,
p.allow_or_restrict, a.is_mandatory
FROM
`tabApplicable On Account` a, `tabAllowed Dimension` d,
`tabAccounting Dimension Filter` p
WHERE
p.name = a.parent
AND p.disabled = 0
AND p.name = d.parent
""",
as_dict=1,
)
return dimension_filter_map
dimension_filter_map = {}
for f in filters:
f.fieldname = scrub(f.accounting_dimension)
build_map(
dimension_filter_map,
f.fieldname,
f.applicable_on_account,
f.dimension_value,
f.allow_or_restrict,
f.is_mandatory,
)
frappe.flags.dimension_filter_map = dimension_filter_map
return frappe.flags.dimension_filter_map
def build_map(map_object, dimension, account, filter_value, allow_or_restrict, is_mandatory):

View File

@@ -47,6 +47,8 @@ class TestAccountingDimensionFilter(unittest.TestCase):
def tearDown(self):
disable_dimension_filter()
disable_dimension()
frappe.flags.accounting_dimensions_details = None
frappe.flags.dimension_filter_map = None
for si in self.invoice_list:
si.load_from_db()
@@ -55,9 +57,7 @@ class TestAccountingDimensionFilter(unittest.TestCase):
def create_accounting_dimension_filter():
if not frappe.db.get_value(
"Accounting Dimension Filter", {"accounting_dimension": "Cost Center"}
):
if not frappe.db.get_value("Accounting Dimension Filter", {"accounting_dimension": "Cost Center"}):
frappe.get_doc(
{
"doctype": "Accounting Dimension Filter",

View File

@@ -84,7 +84,10 @@ class AccountingPeriod(Document):
for doctype_for_closing in self.get_doctypes_for_closing():
self.append(
"closed_documents",
{"document_type": doctype_for_closing.document_type, "closed": doctype_for_closing.closed},
{
"document_type": doctype_for_closing.document_type,
"closed": doctype_for_closing.closed,
},
)

View File

@@ -34,9 +34,7 @@ class TestAccountingPeriod(unittest.TestCase):
ap1 = create_accounting_period(period_name="Test Accounting Period 2")
ap1.save()
doc = create_sales_invoice(
do_not_save=1, cost_center="_Test Company - _TC", warehouse="Stores - _TC"
)
doc = create_sales_invoice(do_not_save=1, cost_center="_Test Company - _TC", warehouse="Stores - _TC")
self.assertRaises(ClosedAccountingPeriod, doc.save)
def tearDown(self):

View File

@@ -3,4 +3,23 @@
frappe.ui.form.on("Accounts Settings", {
refresh: function (frm) {},
enable_immutable_ledger: function (frm) {
if (!frm.doc.enable_immutable_ledger) {
return;
}
let msg = __("Enabling this will change the way how cancelled transactions are handled.");
msg += " ";
msg += __("Please enable only if the understand the effects of enabling this.");
msg += "<br>";
msg += "Do you still want to enable immutable ledger?";
frappe.confirm(
msg,
() => {},
() => {
frm.set_value("enable_immutable_ledger", 0);
}
);
},
});

View File

@@ -12,6 +12,7 @@
"unlink_advance_payment_on_cancelation_of_order",
"column_break_13",
"delete_linked_ledger_entries",
"enable_immutable_ledger",
"invoicing_features_section",
"check_supplier_invoice_uniqueness",
"automatically_fetch_payment_terms",
@@ -54,6 +55,8 @@
"post_change_gl_entries",
"assets_tab",
"asset_settings_section",
"calculate_depr_using_total_days",
"column_break_gjcc",
"book_asset_depreciation_entry_automatically",
"closing_settings_tab",
"period_closing_settings_section",
@@ -105,7 +108,7 @@
},
{
"default": "0",
"description": "Enabling ensure each Purchase Invoice has a unique value in Supplier Invoice No. field",
"description": "Enabling this ensures each Purchase Invoice has a unique value in Supplier Invoice No. field within a particular fiscal year",
"fieldname": "check_supplier_invoice_uniqueness",
"fieldtype": "Check",
"label": "Check Supplier Invoice Number Uniqueness"
@@ -454,6 +457,24 @@
"fieldname": "remarks_section",
"fieldtype": "Section Break",
"label": "Remarks Column Length"
},
{
"default": "0",
"description": "On enabling this cancellation entries will be posted on the actual cancellation date and reports will consider cancelled entries as well",
"fieldname": "enable_immutable_ledger",
"fieldtype": "Check",
"label": "Enable Immutable Ledger"
},
{
"fieldname": "column_break_gjcc",
"fieldtype": "Column Break"
},
{
"default": "0",
"description": "Enable this option to calculate daily depreciation by considering the total number of days in the entire depreciation period, (including leap years) while using daily pro-rata based depreciation",
"fieldname": "calculate_depr_using_total_days",
"fieldtype": "Check",
"label": "Calculate daily depreciation using total days in depreciation period"
}
],
"icon": "icon-cog",
@@ -461,7 +482,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2024-01-30 14:04:26.553554",
"modified": "2024-07-12 00:24:20.957726",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",

View File

@@ -33,12 +33,14 @@ class AccountsSettings(Document):
book_deferred_entries_based_on: DF.Literal["Days", "Months"]
book_deferred_entries_via_journal_entry: DF.Check
book_tax_discount_loss: DF.Check
calculate_depr_using_total_days: DF.Check
check_supplier_invoice_uniqueness: DF.Check
credit_controller: DF.Link | None
delete_linked_ledger_entries: DF.Check
determine_address_tax_category_from: DF.Literal["Billing Address", "Shipping Address"]
enable_common_party_accounting: DF.Check
enable_fuzzy_matching: DF.Check
enable_immutable_ledger: DF.Check
enable_party_matching: DF.Check
frozen_accounts_modifier: DF.Link | None
general_ledger_remarks_length: DF.Int

View File

@@ -54,6 +54,7 @@ class BankAccount(Document):
self.validate_company()
self.validate_iban()
self.validate_account()
self.update_default_bank_account()
def validate_account(self):
if self.account:
@@ -100,19 +101,51 @@ class BankAccount(Document):
if to_check % 97 != 1:
frappe.throw(_("IBAN is not valid"))
def update_default_bank_account(self):
if self.is_default and not self.disabled:
frappe.db.set_value(
"Bank Account",
{
"party_type": self.party_type,
"party": self.party,
"is_company_account": self.is_company_account,
"is_default": 1,
"disabled": 0,
},
"is_default",
0,
)
@frappe.whitelist()
def make_bank_account(doctype, docname):
doc = frappe.new_doc("Bank Account")
doc.party_type = doctype
doc.party = docname
doc.is_default = 1
return doc
def get_party_bank_account(party_type, party):
return frappe.db.get_value(party_type, party, "default_bank_account")
return frappe.db.get_value(
"Bank Account",
{"party_type": party_type, "party": party, "is_default": 1, "disabled": 0},
"name",
)
def get_default_company_bank_account(company, party_type, party):
default_company_bank_account = frappe.db.get_value(party_type, party, "default_bank_account")
if default_company_bank_account:
if company != frappe.get_cached_value("Bank Account", default_company_bank_account, "company"):
default_company_bank_account = None
if not default_company_bank_account:
default_company_bank_account = frappe.db.get_value(
"Bank Account", {"company": company, "is_company_account": 1, "is_default": 1}
)
return default_company_bank_account
@frappe.whitelist()

View File

@@ -37,11 +37,11 @@ class TestBankAccount(unittest.TestCase):
try:
bank_account.validate_iban()
except ValidationError:
msg = "BankAccount.validate_iban() failed for valid IBAN {}".format(iban)
msg = f"BankAccount.validate_iban() failed for valid IBAN {iban}"
self.fail(msg=msg)
for not_iban in invalid_ibans:
bank_account.iban = not_iban
msg = "BankAccount.validate_iban() accepted invalid IBAN {}".format(not_iban)
msg = f"BankAccount.validate_iban() accepted invalid IBAN {not_iban}"
with self.assertRaises(ValidationError, msg=msg):
bank_account.validate_iban()

View File

@@ -127,7 +127,7 @@ def get_payment_entries_for_bank_clearance(
condition = "and (clearance_date IS NULL or clearance_date='0000-00-00')"
journal_entries = frappe.db.sql(
"""
f"""
select
"Journal Entry" as payment_document, t1.name as payment_entry,
t1.cheque_no as cheque_number, t1.cheque_date,
@@ -141,9 +141,7 @@ def get_payment_entries_for_bank_clearance(
and ifnull(t1.is_opening, 'No') = 'No' {condition}
group by t2.account, t1.name
order by t1.posting_date ASC, t1.name DESC
""".format(
condition=condition
),
""",
{"account": account, "from": from_date, "to": to_date},
as_dict=1,
)
@@ -152,7 +150,7 @@ def get_payment_entries_for_bank_clearance(
condition += "and bank_account = %(bank_account)s"
payment_entries = frappe.db.sql(
"""
f"""
select
"Payment Entry" as payment_document, name as payment_entry,
reference_no as cheque_number, reference_date as cheque_date,
@@ -167,9 +165,7 @@ def get_payment_entries_for_bank_clearance(
{condition}
order by
posting_date ASC, name DESC
""".format(
condition=condition
),
""",
{
"account": account,
"from": from_date,
@@ -239,10 +235,7 @@ def get_payment_entries_for_bank_clearance(
).run(as_dict=True)
entries = (
list(payment_entries)
+ list(journal_entries)
+ list(pos_sales_invoices)
+ list(pos_purchase_invoices)
list(payment_entries) + list(journal_entries) + list(pos_sales_invoices) + list(pos_purchase_invoices)
)
return entries

View File

@@ -68,9 +68,7 @@ class TestBankClearance(unittest.TestCase):
)
loan.submit()
make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=getdate())
repayment_entry = create_repayment_entry(
loan.name, "_Test Customer", getdate(), loan.loan_amount
)
repayment_entry = create_repayment_entry(loan.name, "_Test Customer", getdate(), loan.loan_amount)
repayment_entry.save()
repayment_entry.submit()

View File

@@ -59,6 +59,10 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
);
frm.add_custom_button(__("Auto Reconcile"), function () {
if (!frm.doc.bank_account) {
frappe.msgprint(__("Please select Bank Account"));
return;
}
frappe.call({
method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.auto_reconcile_vouchers",
args: {

View File

@@ -26,6 +26,7 @@
{
"fieldname": "company",
"fieldtype": "Link",
"ignore_user_permissions": 1,
"label": "Company",
"options": "Company"
},
@@ -118,7 +119,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-03-07 11:02:24.535714",
"modified": "2024-04-28 14:40:50.910884",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Reconciliation Tool",
@@ -139,4 +140,4 @@
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}
}

View File

@@ -81,9 +81,7 @@ def get_bank_transactions(bank_account, from_date=None, to_date=None):
def get_account_balance(bank_account, till_date):
# returns account balance till the specified date
account = frappe.db.get_value("Bank Account", bank_account, "account")
filters = frappe._dict(
{"account": account, "report_date": till_date, "include_pos_transactions": 1}
)
filters = frappe._dict({"account": account, "report_date": till_date, "include_pos_transactions": 1})
data = get_entries(filters)
balance_as_per_system = get_balance_on(filters["account"], filters["report_date"])
@@ -96,10 +94,7 @@ def get_account_balance(bank_account, till_date):
amounts_not_reflected_in_system = get_amounts_not_reflected_in_system(filters)
bank_bal = (
flt(balance_as_per_system)
- flt(total_debit)
+ flt(total_credit)
+ amounts_not_reflected_in_system
flt(balance_as_per_system) - flt(total_debit) + flt(total_credit) + amounts_not_reflected_in_system
)
return bank_bal
@@ -500,12 +495,12 @@ def check_matching(
bank_account,
company,
transaction,
document_types,
from_date,
to_date,
filter_by_reference_date,
from_reference_date,
to_reference_date,
document_types=None,
from_date=None,
to_date=None,
filter_by_reference_date=None,
from_reference_date=None,
to_reference_date=None,
):
exact_match = True if "exact_match" in document_types else False
@@ -538,23 +533,21 @@ def check_matching(
for query in queries:
matching_vouchers.extend(query.run(as_dict=True))
return (
sorted(matching_vouchers, key=lambda x: x["rank"], reverse=True) if matching_vouchers else []
)
return sorted(matching_vouchers, key=lambda x: x["rank"], reverse=True) if matching_vouchers else []
def get_queries(
bank_account,
company,
transaction,
document_types,
from_date,
to_date,
filter_by_reference_date,
from_reference_date,
to_reference_date,
exact_match,
common_filters,
document_types=None,
from_date=None,
to_date=None,
filter_by_reference_date=None,
from_reference_date=None,
to_reference_date=None,
exact_match=None,
common_filters=None,
):
# get queries to get matching vouchers
account_from_to = "paid_to" if transaction.deposit > 0.0 else "paid_from"
@@ -587,15 +580,15 @@ def get_matching_queries(
bank_account,
company,
transaction,
document_types,
exact_match,
account_from_to,
from_date,
to_date,
filter_by_reference_date,
from_reference_date,
to_reference_date,
common_filters,
document_types=None,
exact_match=None,
account_from_to=None,
from_date=None,
to_date=None,
filter_by_reference_date=None,
from_reference_date=None,
to_reference_date=None,
common_filters=None,
):
queries = []
currency = get_account_currency(bank_account)
@@ -654,17 +647,13 @@ def get_bt_matching_query(exact_match, transaction):
amount_rank = frappe.qb.terms.Case().when(amount_equality, 1).else_(0)
amount_condition = amount_equality if exact_match else getattr(bt, field) > 0.0
ref_rank = (
frappe.qb.terms.Case().when(bt.reference_number == transaction.reference_number, 1).else_(0)
)
ref_rank = frappe.qb.terms.Case().when(bt.reference_number == transaction.reference_number, 1).else_(0)
unallocated_rank = (
frappe.qb.terms.Case().when(bt.unallocated_amount == transaction.unallocated_amount, 1).else_(0)
)
party_condition = (
(bt.party_type == transaction.party_type)
& (bt.party == transaction.party)
& bt.party.isnotnull()
(bt.party_type == transaction.party_type) & (bt.party == transaction.party) & bt.party.isnotnull()
)
party_rank = frappe.qb.terms.Case().when(party_condition, 1).else_(0)
@@ -716,9 +705,7 @@ def get_pe_matching_query(
amount_condition = amount_equality if exact_match else pe.paid_amount > 0.0
party_condition = (
(pe.party_type == transaction.party_type)
& (pe.party == transaction.party)
& pe.party.isnotnull()
(pe.party_type == transaction.party_type) & (pe.party == transaction.party) & pe.party.isnotnull()
)
party_rank = frappe.qb.terms.Case().when(party_condition, 1).else_(0)
@@ -732,7 +719,7 @@ def get_pe_matching_query(
(ref_rank + amount_rank + party_rank + 1).as_("rank"),
ConstantColumn("Payment Entry").as_("doctype"),
pe.name,
pe.paid_amount,
pe.paid_amount_after_tax.as_("paid_amount"),
pe.reference_no,
pe.reference_date,
pe.party,
@@ -749,7 +736,7 @@ def get_pe_matching_query(
.orderby(pe.reference_date if cint(filter_by_reference_date) else pe.posting_date)
)
if frappe.flags.auto_reconcile_vouchers == True:
if frappe.flags.auto_reconcile_vouchers is True:
query = query.where(ref_condition)
return query
@@ -810,7 +797,7 @@ def get_je_matching_query(
.orderby(je.cheque_date if cint(filter_by_reference_date) else je.posting_date)
)
if frappe.flags.auto_reconcile_vouchers == True:
if frappe.flags.auto_reconcile_vouchers is True:
query = query.where(ref_condition)
return query

View File

@@ -1,12 +1,11 @@
# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
import unittest
import frappe
from frappe import qb
from frappe.tests.utils import FrappeTestCase, change_settings
from frappe.utils import add_days, flt, getdate, today
from frappe.tests.utils import FrappeTestCase
from frappe.utils import add_days, today
from erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool import (
auto_reconcile_vouchers,
@@ -22,7 +21,7 @@ class TestBankReconciliationTool(AccountsTestMixin, FrappeTestCase):
self.create_customer()
self.clear_old_entries()
bank_dt = qb.DocType("Bank")
q = qb.from_(bank_dt).delete().where(bank_dt.name == "HDFC").run()
qb.from_(bank_dt).delete().where(bank_dt.name == "HDFC").run()
self.create_bank_account()
def tearDown(self):

View File

@@ -120,52 +120,66 @@ frappe.ui.form.on("Bank Statement Import", {
},
show_import_status(frm) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
let successful_records = import_log.filter((log) => log.success);
let failed_records = import_log.filter((log) => !log.success);
if (successful_records.length === 0) return;
if (frm.doc.status == "Pending") return;
let message;
if (failed_records.length === 0) {
let message_args = [successful_records.length];
if (frm.doc.import_type === "Insert New Records") {
message =
successful_records.length > 1
? __("Successfully imported {0} records.", message_args)
: __("Successfully imported {0} record.", message_args);
} else {
message =
successful_records.length > 1
? __("Successfully updated {0} records.", message_args)
: __("Successfully updated {0} record.", message_args);
}
} else {
let message_args = [successful_records.length, import_log.length];
if (frm.doc.import_type === "Insert New Records") {
message =
successful_records.length > 1
? __(
"Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
)
: __(
"Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
);
} else {
message =
successful_records.length > 1
? __(
"Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
)
: __(
"Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
);
}
}
frm.dashboard.set_headline(message);
frappe.call({
method: "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.get_import_status",
args: {
docname: frm.doc.name,
},
callback: function (r) {
let successful_records = cint(r.message.success);
let failed_records = cint(r.message.failed);
let total_records = cint(r.message.total_records);
if (!total_records) {
return;
}
let message;
if (failed_records === 0) {
let message_args = [successful_records];
if (frm.doc.import_type === "Insert New Records") {
message =
successful_records > 1
? __("Successfully imported {0} records.", message_args)
: __("Successfully imported {0} record.", message_args);
} else {
message =
successful_records > 1
? __("Successfully updated {0} records.", message_args)
: __("Successfully updated {0} record.", message_args);
}
} else {
let message_args = [successful_records, total_records];
if (frm.doc.import_type === "Insert New Records") {
message =
successful_records > 1
? __(
"Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
)
: __(
"Successfully imported {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
);
} else {
message =
successful_records > 1
? __(
"Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
)
: __(
"Successfully updated {0} record out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args
);
}
}
frm.dashboard.set_headline(message);
},
});
},
show_report_error_button(frm) {
@@ -287,7 +301,7 @@ frappe.ui.form.on("Bank Statement Import", {
// method: 'frappe.core.doctype.data_import.data_import.get_preview_from_template',
show_import_preview(frm, preview_data) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
let import_log = preview_data.import_log;
if (frm.import_preview && frm.import_preview.doctype === frm.doc.reference_doctype) {
frm.import_preview.preview_data = preview_data;
@@ -326,6 +340,15 @@ frappe.ui.form.on("Bank Statement Import", {
);
},
export_import_log(frm) {
open_url_post(
"/api/method/erpnext.accounts.doctype.bank_statement_import.bank_statement_import.download_import_log",
{
data_import_name: frm.doc.name,
}
);
},
show_import_warnings(frm, preview_data) {
let columns = preview_data.columns;
let warnings = JSON.parse(frm.doc.template_warnings || "[]");
@@ -401,49 +424,50 @@ frappe.ui.form.on("Bank Statement Import", {
frm.trigger("show_import_log");
},
show_import_log(frm) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
let logs = import_log;
frm.toggle_display("import_log", false);
frm.toggle_display("import_log_section", logs.length > 0);
render_import_log(frm) {
frappe.call({
method: "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.get_import_logs",
args: {
docname: frm.doc.name,
},
callback: function (r) {
let logs = r.message;
if (logs.length === 0) {
frm.get_field("import_log_preview").$wrapper.empty();
return;
}
if (logs.length === 0) return;
let rows = logs
.map((log) => {
let html = "";
if (log.success) {
if (frm.doc.import_type === "Insert New Records") {
html = __("Successfully imported {0}", [
`<span class="underline">${frappe.utils.get_form_link(
frm.doc.reference_doctype,
log.docname,
true
)}<span>`,
]);
} else {
html = __("Successfully updated {0}", [
`<span class="underline">${frappe.utils.get_form_link(
frm.doc.reference_doctype,
log.docname,
true
)}<span>`,
]);
}
} else {
let messages = log.messages
.map(JSON.parse)
.map((m) => {
let title = m.title ? `<strong>${m.title}</strong>` : "";
let message = m.message ? `<div>${m.message}</div>` : "";
return title + message;
})
.join("");
let id = frappe.dom.get_unique_id();
html = `${messages}
frm.toggle_display("import_log_section", true);
let rows = logs
.map((log) => {
let html = "";
if (log.success) {
if (frm.doc.import_type === "Insert New Records") {
html = __("Successfully imported {0}", [
`<span class="underline">${frappe.utils.get_form_link(
frm.doc.reference_doctype,
log.docname,
true
)}<span>`,
]);
} else {
html = __("Successfully updated {0}", [
`<span class="underline">${frappe.utils.get_form_link(
frm.doc.reference_doctype,
log.docname,
true
)}<span>`,
]);
}
} else {
let messages = JSON.parse(log.messages || "[]")
.map((m) => {
let title = m.title ? `<strong>${m.title}</strong>` : "";
let message = m.message ? `<div>${m.message}</div>` : "";
return title + message;
})
.join("");
let id = frappe.dom.get_unique_id();
html = `${messages}
<button class="btn btn-default btn-xs" type="button" data-toggle="collapse" data-target="#${id}" aria-expanded="false" aria-controls="${id}" style="margin-top: 15px;">
${__("Show Traceback")}
</button>
@@ -452,16 +476,16 @@ frappe.ui.form.on("Bank Statement Import", {
<pre>${log.exception}</pre>
</div>
</div>`;
}
let indicator_color = log.success ? "green" : "red";
let title = log.success ? __("Success") : __("Failure");
}
let indicator_color = log.success ? "green" : "red";
let title = log.success ? __("Success") : __("Failure");
if (frm.doc.show_failed_logs && log.success) {
return "";
}
if (frm.doc.show_failed_logs && log.success) {
return "";
}
return `<tr>
<td>${log.row_indexes.join(", ")}</td>
return `<tr>
<td>${JSON.parse(log.row_indexes).join(", ")}</td>
<td>
<div class="indicator ${indicator_color}">${title}</div>
</td>
@@ -469,16 +493,16 @@ frappe.ui.form.on("Bank Statement Import", {
${html}
</td>
</tr>`;
})
.join("");
})
.join("");
if (!rows && frm.doc.show_failed_logs) {
rows = `<tr><td class="text-center text-muted" colspan=3>
if (!rows && frm.doc.show_failed_logs) {
rows = `<tr><td class="text-center text-muted" colspan=3>
${__("No failed logs")}
</td></tr>`;
}
}
frm.get_field("import_log_preview").$wrapper.html(`
frm.get_field("import_log_preview").$wrapper.html(`
<table class="table table-bordered">
<tr class="text-muted">
<th width="10%">${__("Row Number")}</th>
@@ -488,5 +512,34 @@ frappe.ui.form.on("Bank Statement Import", {
${rows}
</table>
`);
},
});
},
show_import_log(frm) {
frm.toggle_display("import_log_section", false);
if (frm.is_new() || frm.import_in_progress) {
return;
}
frappe.call({
method: "frappe.client.get_count",
args: {
doctype: "Data Import Log",
filters: {
data_import: frm.doc.name,
},
},
callback: function (r) {
let count = r.message;
if (count < 5000) {
frm.trigger("render_import_log");
} else {
frm.toggle_display("import_log_section", false);
frm.add_custom_button(__("Export Import Log"), () => frm.trigger("export_import_log"));
}
},
});
},
});

View File

@@ -11,6 +11,8 @@
"bank_account",
"bank",
"column_break_4",
"custom_delimiters",
"delimiter_options",
"google_sheets_url",
"refresh_google_sheet",
"html_5",
@@ -24,7 +26,6 @@
"section_import_preview",
"import_preview",
"import_log_section",
"statement_import_log",
"show_failed_logs",
"import_log_preview",
"reference_doctype",
@@ -194,15 +195,23 @@
"fieldtype": "Column Break"
},
{
"fieldname": "statement_import_log",
"fieldtype": "Code",
"label": "Statement Import Log",
"options": "JSON"
"default": "0",
"fieldname": "custom_delimiters",
"fieldtype": "Check",
"label": "Custom delimiters"
},
{
"default": ",;\\t|",
"depends_on": "custom_delimiters",
"description": "If your CSV uses a different delimiter, add that character here, ensuring no spaces or additional characters are included.",
"fieldname": "delimiter_options",
"fieldtype": "Data",
"label": "Delimiter options"
}
],
"hide_toolbar": 1,
"links": [],
"modified": "2022-09-07 11:11:40.293317",
"modified": "2024-06-25 17:32:07.658250",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Statement Import",

View File

@@ -31,13 +31,14 @@ class BankStatementImport(DataImport):
bank: DF.Link | None
bank_account: DF.Link
company: DF.Link
custom_delimiters: DF.Check
delimiter_options: DF.Data | None
google_sheets_url: DF.Data | None
import_file: DF.Attach | None
import_type: DF.Literal["", "Insert New Records", "Update Existing Records"]
mute_emails: DF.Check
reference_doctype: DF.Link
show_failed_logs: DF.Check
statement_import_log: DF.Code | None
status: DF.Literal["Pending", "Success", "Partial Success", "Error"]
submit_after_import: DF.Check
template_options: DF.Code | None
@@ -45,7 +46,7 @@ class BankStatementImport(DataImport):
# end: auto-generated types
def __init__(self, *args, **kwargs):
super(BankStatementImport, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def validate(self):
doc_before_save = self.get_doc_before_save()
@@ -54,7 +55,6 @@ class BankStatementImport(DataImport):
or (doc_before_save and doc_before_save.import_file != self.import_file)
or (doc_before_save and doc_before_save.google_sheets_url != self.google_sheets_url)
):
template_options_dict = {}
column_to_field_map = {}
bank = frappe.get_doc("Bank", self.bank)
@@ -69,7 +69,6 @@ class BankStatementImport(DataImport):
self.validate_google_sheets_url()
def start_import(self):
preview = frappe.get_doc("Bank Statement Import", self.name).get_preview_from_template(
self.import_file, self.google_sheets_url
)
@@ -122,10 +121,15 @@ def download_errored_template(data_import_name):
data_import.export_errored_rows()
@frappe.whitelist()
def download_import_log(data_import_name):
return frappe.get_doc("Bank Statement Import", data_import_name).download_import_log()
def parse_data_from_template(raw_data):
data = []
for i, row in enumerate(raw_data):
for _i, row in enumerate(raw_data):
if all(v in INVALID_VALUES for v in row):
# empty row
continue
@@ -135,9 +139,7 @@ def parse_data_from_template(raw_data):
return data
def start_import(
data_import, bank_account, import_file_path, google_sheets_url, bank, template_options
):
def start_import(data_import, bank_account, import_file_path, google_sheets_url, bank, template_options):
"""This method runs in background job"""
update_mapping_db(bank, template_options)
@@ -148,6 +150,9 @@ def start_import(
import_file = ImportFile("Bank Transaction", file=file, import_type="Insert New Records")
data = parse_data_from_template(import_file.raw_data)
# Importer expects 'Data Import' class, which has 'payload_count' attribute
if not data_import.get("payload_count"):
data_import.payload_count = len(data) - 1
if import_file_path:
add_bank_account(data, bank_account)
@@ -242,6 +247,47 @@ def write_xlsx(data, sheet_name, wb=None, column_widths=None, file_path=None):
return True
@frappe.whitelist()
def get_import_status(docname):
import_status = {}
data_import = frappe.get_doc("Bank Statement Import", docname)
import_status["status"] = data_import.status
logs = frappe.get_all(
"Data Import Log",
fields=["count(*) as count", "success"],
filters={"data_import": docname},
group_by="success",
)
total_payload_count = 0
for log in logs:
total_payload_count += log.get("count", 0)
if log.get("success"):
import_status["success"] = log.get("count")
else:
import_status["failed"] = log.get("count")
import_status["total_records"] = total_payload_count
return import_status
@frappe.whitelist()
def get_import_logs(docname: str):
frappe.has_permission("Bank Statement Import")
return frappe.get_all(
"Data Import Log",
fields=["success", "docname", "messages", "exception", "row_indexes"],
filters={"data_import": docname},
limit_page_length=5000,
order_by="log_index",
)
@frappe.whitelist()
def upload_bank_statement(**args):
args = frappe._dict(args)

View File

@@ -1,5 +1,3 @@
from typing import Tuple, Union
import frappe
from frappe.utils import flt
from rapidfuzz import fuzz, process
@@ -19,7 +17,7 @@ class AutoMatchParty:
def get(self, key):
return self.__dict__.get(key, None)
def match(self) -> Union[Tuple, None]:
def match(self) -> tuple | None:
result = None
result = AutoMatchbyAccountIBAN(
bank_party_account_number=self.bank_party_account_number,
@@ -50,7 +48,7 @@ class AutoMatchbyAccountIBAN:
result = self.match_account_in_party()
return result
def match_account_in_party(self) -> Union[Tuple, None]:
def match_account_in_party(self) -> tuple | None:
"""Check if there is a IBAN/Account No. match in Customer/Supplier/Employee"""
result = None
parties = get_parties_in_order(self.deposit)
@@ -70,6 +68,9 @@ class AutoMatchbyAccountIBAN:
party, or_filters=or_filters, pluck="name", limit_page_length=1
)
if "bank_ac_no" in or_filters:
or_filters["bank_account_no"] = or_filters.pop("bank_ac_no")
if party_result:
result = (
party,
@@ -97,7 +98,7 @@ class AutoMatchbyPartyNameDescription:
def get(self, key):
return self.__dict__.get(key, None)
def match(self) -> Union[Tuple, None]:
def match(self) -> tuple | None:
# fuzzy search by customer/supplier & employee
if not (self.bank_party_name or self.description):
return None
@@ -105,7 +106,7 @@ class AutoMatchbyPartyNameDescription:
result = self.match_party_name_desc_in_party()
return result
def match_party_name_desc_in_party(self) -> Union[Tuple, None]:
def match_party_name_desc_in_party(self) -> tuple | None:
"""Fuzzy search party name and/or description against parties in the system"""
result = None
parties = get_parties_in_order(self.deposit)
@@ -129,7 +130,7 @@ class AutoMatchbyPartyNameDescription:
return result
def fuzzy_search_and_return_result(self, party, names, field) -> Union[Tuple, None]:
def fuzzy_search_and_return_result(self, party, names, field) -> tuple | None:
skip = False
result = process.extract(query=self.get(field), choices=names, scorer=fuzz.token_set_ratio)
party_name, skip = self.process_fuzzy_result(result)
@@ -142,7 +143,7 @@ class AutoMatchbyPartyNameDescription:
party_name,
), skip
def process_fuzzy_result(self, result: Union[list, None]):
def process_fuzzy_result(self, result: list | None):
"""
If there are multiple valid close matches return None as result may be faulty.
Return the result only if one accurate match stands out.

View File

@@ -56,17 +56,19 @@ class BankTransaction(Document):
Bank Transaction should be on the same currency as the Bank Account.
"""
if self.currency and self.bank_account:
account = frappe.get_cached_value("Bank Account", self.bank_account, "account")
account_currency = frappe.get_cached_value("Account", account, "account_currency")
if account := frappe.get_cached_value("Bank Account", self.bank_account, "account"):
account_currency = frappe.get_cached_value("Account", account, "account_currency")
if self.currency != account_currency:
frappe.throw(
_(
"Transaction currency: {0} cannot be different from Bank Account({1}) currency: {2}"
).format(
frappe.bold(self.currency), frappe.bold(self.bank_account), frappe.bold(account_currency)
if self.currency != account_currency:
frappe.throw(
_(
"Transaction currency: {0} cannot be different from Bank Account({1}) currency: {2}"
).format(
frappe.bold(self.currency),
frappe.bold(self.bank_account),
frappe.bold(account_currency),
)
)
)
def set_status(self):
if self.docstatus == 2:
@@ -180,7 +182,7 @@ class BankTransaction(Document):
frappe.throw(_("Voucher {0} is over-allocated by {1}").format(unallocated_amount))
for payment_entry in to_remove:
self.remove(to_remove)
self.remove(payment_entry)
@frappe.whitelist()
def remove_payment_entries(self):
@@ -235,9 +237,7 @@ def get_clearance_details(transaction, payment_entry):
"""
gl_bank_account = frappe.db.get_value("Bank Account", transaction.bank_account, "account")
gles = get_related_bank_gl_entries(payment_entry.payment_document, payment_entry.payment_entry)
bt_allocations = get_total_allocated_amount(
payment_entry.payment_document, payment_entry.payment_entry
)
bt_allocations = get_total_allocated_amount(payment_entry.payment_document, payment_entry.payment_entry)
unallocated_amount = min(
transaction.unallocated_amount,
@@ -332,7 +332,6 @@ def get_total_allocated_amount(doctype, docname):
def get_paid_amount(payment_entry, currency, gl_bank_account):
if payment_entry.payment_document in ["Payment Entry", "Sales Invoice", "Purchase Invoice"]:
paid_amount_field = "paid_amount"
if payment_entry.payment_document == "Payment Entry":
doc = frappe.get_doc("Payment Entry", payment_entry.payment_entry)
@@ -371,9 +370,7 @@ def get_paid_amount(payment_entry, currency, gl_bank_account):
)
elif payment_entry.payment_document == "Loan Repayment":
return frappe.db.get_value(
payment_entry.payment_document, payment_entry.payment_entry, "amount_paid"
)
return frappe.db.get_value(payment_entry.payment_document, payment_entry.payment_entry, "amount_paid")
elif payment_entry.payment_document == "Bank Transaction":
dep, wth = frappe.db.get_value(
@@ -383,9 +380,7 @@ def get_paid_amount(payment_entry, currency, gl_bank_account):
else:
frappe.throw(
"Please reconcile {0}: {1} manually".format(
payment_entry.payment_document, payment_entry.payment_entry
)
f"Please reconcile {payment_entry.payment_document}: {payment_entry.payment_entry} manually"
)

View File

@@ -18,12 +18,12 @@ def upload_bank_statement():
fcontent = frappe.local.uploaded_file
fname = frappe.local.uploaded_filename
if frappe.safe_encode(fname).lower().endswith("csv".encode("utf-8")):
if frappe.safe_encode(fname).lower().endswith(b"csv"):
from frappe.utils.csvutils import read_csv_content
rows = read_csv_content(fcontent, False)
elif frappe.safe_encode(fname).lower().endswith("xlsx".encode("utf-8")):
elif frappe.safe_encode(fname).lower().endswith(b"xlsx"):
from frappe.utils.xlsxutils import read_xlsx_file_from_attached_file
rows = read_xlsx_file_from_attached_file(fcontent=fcontent)

View File

@@ -436,9 +436,7 @@ def add_vouchers(gl_account="_Test Bank - _TC"):
mode_of_payment = frappe.get_doc({"doctype": "Mode of Payment", "name": "Cash"})
if not frappe.db.get_value(
"Mode of Payment Account", {"company": "_Test Company", "parent": "Cash"}
):
if not frappe.db.get_value("Mode of Payment Account", {"company": "_Test Company", "parent": "Cash"}):
mode_of_payment.append("accounts", {"company": "_Test Company", "default_account": gl_account})
mode_of_payment.save()

View File

@@ -0,0 +1,100 @@
// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on("Bisect Accounting Statements", {
onload(frm) {
frm.trigger("render_heatmap");
},
refresh(frm) {
frm.add_custom_button(__("Bisect Left"), () => {
frm.trigger("bisect_left");
});
frm.add_custom_button(__("Bisect Right"), () => {
frm.trigger("bisect_right");
});
frm.add_custom_button(__("Up"), () => {
frm.trigger("move_up");
});
frm.add_custom_button(__("Build Tree"), () => {
frm.trigger("build_tree");
});
},
render_heatmap(frm) {
let bisect_heatmap = frm.get_field("bisect_heatmap").$wrapper;
bisect_heatmap.addClass("bisect_heatmap_location");
// milliseconds in a day
let msiad = 24 * 60 * 60 * 1000;
let datapoints = {};
let fr_dt = new Date(frm.doc.from_date).getTime();
let to_dt = new Date(frm.doc.to_date).getTime();
let bisect_start = new Date(frm.doc.current_from_date).getTime();
let bisect_end = new Date(frm.doc.current_to_date).getTime();
for (let x = fr_dt; x <= to_dt; x += msiad) {
let epoch_in_seconds = x / 1000;
if (bisect_start <= x && x <= bisect_end) {
datapoints[epoch_in_seconds] = 1.0;
} else {
datapoints[epoch_in_seconds] = 0.0;
}
}
new frappe.Chart(".bisect_heatmap_location", {
type: "heatmap",
data: {
dataPoints: datapoints,
start: new Date(frm.doc.from_date),
end: new Date(frm.doc.to_date),
},
countLabel: "Bisecting",
discreteDomains: 1,
});
},
bisect_left(frm) {
frm.call({
doc: frm.doc,
method: "bisect_left",
freeze: true,
freeze_message: __("Bisecting Left ..."),
callback: (r) => {
frm.trigger("render_heatmap");
},
});
},
bisect_right(frm) {
frm.call({
doc: frm.doc,
freeze: true,
freeze_message: __("Bisecting Right ..."),
method: "bisect_right",
callback: (r) => {
frm.trigger("render_heatmap");
},
});
},
move_up(frm) {
frm.call({
doc: frm.doc,
freeze: true,
freeze_message: __("Moving up in tree ..."),
method: "move_up",
callback: (r) => {
frm.trigger("render_heatmap");
},
});
},
build_tree(frm) {
frm.call({
doc: frm.doc,
freeze: true,
freeze_message: __("Rebuilding BTree for period ..."),
method: "build_tree",
callback: (r) => {
frm.trigger("render_heatmap");
},
});
},
});

View File

@@ -0,0 +1,194 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2023-09-15 21:28:28.054773",
"default_view": "List",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"section_break_cvfg",
"company",
"column_break_hcam",
"from_date",
"column_break_qxbi",
"to_date",
"column_break_iwny",
"algorithm",
"section_break_8ph9",
"current_node",
"section_break_ngid",
"bisect_heatmap",
"section_break_hmsy",
"bisecting_from",
"current_from_date",
"column_break_uqyd",
"bisecting_to",
"current_to_date",
"section_break_hbyo",
"heading_cppb",
"p_l_summary",
"column_break_aivo",
"balance_sheet_summary",
"b_s_summary",
"column_break_gvwx",
"difference_heading",
"difference"
],
"fields": [
{
"fieldname": "column_break_qxbi",
"fieldtype": "Column Break"
},
{
"fieldname": "from_date",
"fieldtype": "Datetime",
"label": "From Date"
},
{
"fieldname": "to_date",
"fieldtype": "Datetime",
"label": "To Date"
},
{
"default": "BFS",
"fieldname": "algorithm",
"fieldtype": "Select",
"label": "Algorithm",
"options": "BFS\nDFS"
},
{
"fieldname": "column_break_iwny",
"fieldtype": "Column Break"
},
{
"fieldname": "current_node",
"fieldtype": "Link",
"label": "Current Node",
"options": "Bisect Nodes"
},
{
"fieldname": "section_break_hmsy",
"fieldtype": "Section Break"
},
{
"fieldname": "current_from_date",
"fieldtype": "Datetime",
"read_only": 1
},
{
"fieldname": "current_to_date",
"fieldtype": "Datetime",
"read_only": 1
},
{
"fieldname": "column_break_uqyd",
"fieldtype": "Column Break"
},
{
"fieldname": "section_break_hbyo",
"fieldtype": "Section Break"
},
{
"fieldname": "p_l_summary",
"fieldtype": "Float",
"read_only": 1
},
{
"fieldname": "b_s_summary",
"fieldtype": "Float",
"read_only": 1
},
{
"fieldname": "difference",
"fieldtype": "Float",
"read_only": 1
},
{
"fieldname": "column_break_aivo",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_gvwx",
"fieldtype": "Column Break"
},
{
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
"options": "Company"
},
{
"fieldname": "column_break_hcam",
"fieldtype": "Column Break"
},
{
"fieldname": "section_break_ngid",
"fieldtype": "Section Break"
},
{
"fieldname": "section_break_8ph9",
"fieldtype": "Section Break",
"hidden": 1
},
{
"fieldname": "bisect_heatmap",
"fieldtype": "HTML",
"label": "Heatmap"
},
{
"fieldname": "heading_cppb",
"fieldtype": "Heading",
"label": "Profit and Loss Summary"
},
{
"fieldname": "balance_sheet_summary",
"fieldtype": "Heading",
"label": "Balance Sheet Summary"
},
{
"fieldname": "difference_heading",
"fieldtype": "Heading",
"label": "Difference"
},
{
"fieldname": "bisecting_from",
"fieldtype": "Heading",
"label": "Bisecting From"
},
{
"fieldname": "bisecting_to",
"fieldtype": "Heading",
"label": "Bisecting To"
},
{
"fieldname": "section_break_cvfg",
"fieldtype": "Section Break"
}
],
"hide_toolbar": 1,
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-12-01 16:49:54.073890",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bisect Accounting Statements",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"print": 1,
"read": 1,
"role": "Administrator",
"share": 1,
"write": 1
}
],
"read_only": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@@ -0,0 +1,226 @@
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
import datetime
from collections import deque
from math import floor
import frappe
from dateutil.relativedelta import relativedelta
from frappe import _
from frappe.model.document import Document
from frappe.utils import getdate
from frappe.utils.data import guess_date_format
class BisectAccountingStatements(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
algorithm: DF.Literal["BFS", "DFS"]
b_s_summary: DF.Float
company: DF.Link | None
current_from_date: DF.Datetime | None
current_node: DF.Link | None
current_to_date: DF.Datetime | None
difference: DF.Float
from_date: DF.Datetime | None
p_l_summary: DF.Float
to_date: DF.Datetime | None
# end: auto-generated types
def validate(self):
self.validate_dates()
def validate_dates(self):
if getdate(self.from_date) > getdate(self.to_date):
frappe.throw(
_("From Date: {0} cannot be greater than To date: {1}").format(
frappe.bold(self.from_date), frappe.bold(self.to_date)
)
)
def bfs(self, from_date: datetime, to_date: datetime):
# Make Root node
node = frappe.new_doc("Bisect Nodes")
node.root = None
node.period_from_date = from_date
node.period_to_date = to_date
node.insert()
period_queue = deque([node])
while period_queue:
cur_node = period_queue.popleft()
delta = cur_node.period_to_date - cur_node.period_from_date
if delta.days == 0:
continue
else:
cur_floor = floor(delta.days / 2)
next_to_date = cur_node.period_from_date + relativedelta(days=+cur_floor)
left_node = frappe.new_doc("Bisect Nodes")
left_node.period_from_date = cur_node.period_from_date
left_node.period_to_date = next_to_date
left_node.root = cur_node.name
left_node.generated = False
left_node.insert()
cur_node.left_child = left_node.name
period_queue.append(left_node)
next_from_date = cur_node.period_from_date + relativedelta(days=+(cur_floor + 1))
right_node = frappe.new_doc("Bisect Nodes")
right_node.period_from_date = next_from_date
right_node.period_to_date = cur_node.period_to_date
right_node.root = cur_node.name
right_node.generated = False
right_node.insert()
cur_node.right_child = right_node.name
period_queue.append(right_node)
cur_node.save()
def dfs(self, from_date: datetime, to_date: datetime):
# Make Root node
node = frappe.new_doc("Bisect Nodes")
node.root = None
node.period_from_date = from_date
node.period_to_date = to_date
node.insert()
period_stack = [node]
while period_stack:
cur_node = period_stack.pop()
delta = cur_node.period_to_date - cur_node.period_from_date
if delta.days == 0:
continue
else:
cur_floor = floor(delta.days / 2)
next_to_date = cur_node.period_from_date + relativedelta(days=+cur_floor)
left_node = frappe.new_doc("Bisect Nodes")
left_node.period_from_date = cur_node.period_from_date
left_node.period_to_date = next_to_date
left_node.root = cur_node.name
left_node.generated = False
left_node.insert()
cur_node.left_child = left_node.name
period_stack.append(left_node)
next_from_date = cur_node.period_from_date + relativedelta(days=+(cur_floor + 1))
right_node = frappe.new_doc("Bisect Nodes")
right_node.period_from_date = next_from_date
right_node.period_to_date = cur_node.period_to_date
right_node.root = cur_node.name
right_node.generated = False
right_node.insert()
cur_node.right_child = right_node.name
period_stack.append(right_node)
cur_node.save()
@frappe.whitelist()
def build_tree(self):
frappe.db.delete("Bisect Nodes")
# Convert str to datetime format
dt_format = guess_date_format(self.from_date)
from_date = datetime.datetime.strptime(self.from_date, dt_format)
to_date = datetime.datetime.strptime(self.to_date, dt_format)
if self.algorithm == "BFS":
self.bfs(from_date, to_date)
if self.algorithm == "DFS":
self.dfs(from_date, to_date)
# set root as current node
root = frappe.db.get_all("Bisect Nodes", filters={"root": ["is", "not set"]})[0]
self.get_report_summary()
self.current_node = root.name
self.current_from_date = self.from_date
self.current_to_date = self.to_date
self.save()
def get_report_summary(self):
filters = {
"company": self.company,
"filter_based_on": "Date Range",
"period_start_date": self.current_from_date,
"period_end_date": self.current_to_date,
"periodicity": "Yearly",
}
pl_summary = frappe.get_doc("Report", "Profit and Loss Statement")
self.p_l_summary = pl_summary.execute_script_report(filters=filters)[5]
bs_summary = frappe.get_doc("Report", "Balance Sheet")
self.b_s_summary = bs_summary.execute_script_report(filters=filters)[5]
self.difference = abs(self.p_l_summary - self.b_s_summary)
def update_node(self):
current_node = frappe.get_doc("Bisect Nodes", self.current_node)
current_node.balance_sheet_summary = self.b_s_summary
current_node.profit_loss_summary = self.p_l_summary
current_node.difference = self.difference
current_node.generated = True
current_node.save()
def current_node_has_summary_info(self):
"Assertion method"
return frappe.db.get_value("Bisect Nodes", self.current_node, "generated")
def fetch_summary_info_from_current_node(self):
current_node = frappe.get_doc("Bisect Nodes", self.current_node)
self.p_l_summary = current_node.balance_sheet_summary
self.b_s_summary = current_node.profit_loss_summary
self.difference = abs(self.p_l_summary - self.b_s_summary)
def fetch_or_calculate(self):
if self.current_node_has_summary_info():
self.fetch_summary_info_from_current_node()
else:
self.get_report_summary()
self.update_node()
@frappe.whitelist()
def bisect_left(self):
if self.current_node is not None:
cur_node = frappe.get_doc("Bisect Nodes", self.current_node)
if cur_node.left_child is not None:
lft_node = frappe.get_doc("Bisect Nodes", cur_node.left_child)
self.current_node = cur_node.left_child
self.current_from_date = lft_node.period_from_date
self.current_to_date = lft_node.period_to_date
self.fetch_or_calculate()
self.save()
else:
frappe.msgprint(_("No more children on Left"))
@frappe.whitelist()
def bisect_right(self):
if self.current_node is not None:
cur_node = frappe.get_doc("Bisect Nodes", self.current_node)
if cur_node.right_child is not None:
rgt_node = frappe.get_doc("Bisect Nodes", cur_node.right_child)
self.current_node = cur_node.right_child
self.current_from_date = rgt_node.period_from_date
self.current_to_date = rgt_node.period_to_date
self.fetch_or_calculate()
self.save()
else:
frappe.msgprint(_("No more children on Right"))
@frappe.whitelist()
def move_up(self):
if self.current_node is not None:
cur_node = frappe.get_doc("Bisect Nodes", self.current_node)
if cur_node.root is not None:
root = frappe.get_doc("Bisect Nodes", cur_node.root)
self.current_node = cur_node.root
self.current_from_date = root.period_from_date
self.current_to_date = root.period_to_date
self.fetch_or_calculate()
self.save()
else:
frappe.msgprint(_("Reached Root"))

View File

@@ -0,0 +1,9 @@
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
# import frappe
from frappe.tests.utils import FrappeTestCase
class TestBisectAccountingStatements(FrappeTestCase):
pass

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
// frappe.ui.form.on("Bisect Nodes", {
// refresh(frm) {
// },
// });

View File

@@ -0,0 +1,97 @@
{
"actions": [],
"autoname": "autoincrement",
"creation": "2023-09-27 14:56:38.112462",
"default_view": "List",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"root",
"left_child",
"right_child",
"period_from_date",
"period_to_date",
"difference",
"balance_sheet_summary",
"profit_loss_summary",
"generated"
],
"fields": [
{
"fieldname": "root",
"fieldtype": "Link",
"label": "Root",
"options": "Bisect Nodes"
},
{
"fieldname": "left_child",
"fieldtype": "Link",
"label": "Left Child",
"options": "Bisect Nodes"
},
{
"fieldname": "right_child",
"fieldtype": "Link",
"label": "Right Child",
"options": "Bisect Nodes"
},
{
"fieldname": "period_from_date",
"fieldtype": "Datetime",
"label": "Period_from_date"
},
{
"fieldname": "period_to_date",
"fieldtype": "Datetime",
"label": "Period To Date"
},
{
"fieldname": "difference",
"fieldtype": "Float",
"label": "Difference"
},
{
"fieldname": "balance_sheet_summary",
"fieldtype": "Float",
"label": "Balance Sheet Summary"
},
{
"fieldname": "profit_loss_summary",
"fieldtype": "Float",
"label": "Profit and Loss Summary"
},
{
"default": "0",
"fieldname": "generated",
"fieldtype": "Check",
"label": "Generated"
}
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2023-12-01 17:46:12.437996",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bisect Nodes",
"naming_rule": "Autoincrement",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Administrator",
"share": 1,
"write": 1
}
],
"read_only": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@@ -0,0 +1,29 @@
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class BisectNodes(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
balance_sheet_summary: DF.Float
difference: DF.Float
generated: DF.Check
left_child: DF.Link | None
name: DF.Int | None
period_from_date: DF.Datetime | None
period_to_date: DF.Datetime | None
profit_loss_summary: DF.Float
right_child: DF.Link | None
root: DF.Link | None
# end: auto-generated types
pass

View File

@@ -0,0 +1,9 @@
# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
# import frappe
from frappe.tests.utils import FrappeTestCase
class TestBisectNodes(FrappeTestCase):
pass

View File

@@ -70,10 +70,11 @@ class Budget(Document):
select
b.name, ba.account from `tabBudget` b, `tabBudget Account` ba
where
ba.parent = b.name and b.docstatus < 2 and b.company = %s and %s=%s and
b.fiscal_year=%s and b.name != %s and ba.account in (%s) """
% ("%s", budget_against_field, "%s", "%s", "%s", ",".join(["%s"] * len(accounts))),
(self.company, budget_against, self.fiscal_year, self.name) + tuple(accounts),
ba.parent = b.name and b.docstatus < 2 and b.company = {} and {}={} and
b.fiscal_year={} and b.name != {} and ba.account in ({}) """.format(
"%s", budget_against_field, "%s", "%s", "%s", ",".join(["%s"] * len(accounts))
),
(self.company, budget_against, self.fiscal_year, self.name, *tuple(accounts)),
as_dict=1,
)
@@ -96,12 +97,14 @@ class Budget(Document):
if account_details.is_group:
frappe.throw(_("Budget cannot be assigned against Group Account {0}").format(d.account))
elif account_details.company != self.company:
frappe.throw(_("Account {0} does not belongs to company {1}").format(d.account, self.company))
frappe.throw(
_("Account {0} does not belongs to company {1}").format(d.account, self.company)
)
elif account_details.report_type != "Profit and Loss":
frappe.throw(
_("Budget cannot be assigned against {0}, as it's not an Income or Expense account").format(
d.account
)
_(
"Budget cannot be assigned against {0}, as it's not an Income or Expense account"
).format(d.account)
)
if d.account in account_list:
@@ -139,6 +142,8 @@ class Budget(Document):
def validate_expense_against_budget(args, expense_amount=0):
args = frappe._dict(args)
if not frappe.get_all("Budget", limit=1):
return
if args.get("company") and not args.fiscal_year:
args.fiscal_year = get_fiscal_year(args.get("posting_date"), company=args.get("company"))[0]
@@ -146,6 +151,9 @@ def validate_expense_against_budget(args, expense_amount=0):
"Company", args.get("company"), "exception_budget_approver_role"
)
if not frappe.get_cached_value("Budget", {"fiscal_year": args.fiscal_year, "company": args.company}): # nosec
return
if not args.account:
args.account = args.get("expense_account")
@@ -172,32 +180,26 @@ def validate_expense_against_budget(args, expense_amount=0):
if (
args.get(budget_against)
and args.account
and frappe.db.get_value("Account", {"name": args.account, "root_type": "Expense"})
and (frappe.get_cached_value("Account", args.account, "root_type") == "Expense")
):
doctype = dimension.get("document_type")
if frappe.get_cached_value("DocType", doctype, "is_tree"):
lft, rgt = frappe.db.get_value(doctype, args.get(budget_against), ["lft", "rgt"])
condition = """and exists(select name from `tab%s`
where lft<=%s and rgt>=%s and name=b.%s)""" % (
doctype,
lft,
rgt,
budget_against,
) # nosec
lft, rgt = frappe.get_cached_value(doctype, args.get(budget_against), ["lft", "rgt"])
condition = f"""and exists(select name from `tab{doctype}`
where lft<={lft} and rgt>={rgt} and name=b.{budget_against})""" # nosec
args.is_tree = True
else:
condition = "and b.%s=%s" % (budget_against, frappe.db.escape(args.get(budget_against)))
condition = f"and b.{budget_against}={frappe.db.escape(args.get(budget_against))}"
args.is_tree = False
args.budget_against_field = budget_against
args.budget_against_doctype = doctype
budget_records = frappe.db.sql(
"""
f"""
select
b.{budget_against_field} as budget_against, ba.budget_amount, b.monthly_distribution,
b.{budget_against} as budget_against, ba.budget_amount, b.monthly_distribution,
ifnull(b.applicable_on_material_request, 0) as for_material_request,
ifnull(applicable_on_purchase_order, 0) as for_purchase_order,
ifnull(applicable_on_booking_actual_expenses,0) as for_actual_expenses,
@@ -210,9 +212,7 @@ def validate_expense_against_budget(args, expense_amount=0):
b.name=ba.parent and b.fiscal_year=%s
and ba.account=%s and b.docstatus=1
{condition}
""".format(
condition=condition, budget_against_field=budget_against
),
""",
(args.fiscal_year, args.account),
as_dict=True,
) # nosec
@@ -224,12 +224,18 @@ def validate_expense_against_budget(args, expense_amount=0):
def validate_budget_records(args, budget_records, expense_amount):
for budget in budget_records:
if flt(budget.budget_amount):
amount = expense_amount or get_amount(args, budget)
yearly_action, monthly_action = get_actions(args, budget)
args["for_material_request"] = budget.for_material_request
args["for_purchase_order"] = budget.for_purchase_order
if yearly_action in ("Stop", "Warn"):
compare_expense_with_budget(
args, flt(budget.budget_amount), _("Annual"), yearly_action, budget.budget_against, amount
args,
flt(budget.budget_amount),
_("Annual"),
yearly_action,
budget.budget_against,
expense_amount,
)
if monthly_action in ["Stop", "Warn"]:
@@ -240,18 +246,32 @@ def validate_budget_records(args, budget_records, expense_amount):
args["month_end_date"] = get_last_day(args.posting_date)
compare_expense_with_budget(
args, budget_amount, _("Accumulated Monthly"), monthly_action, budget.budget_against, amount
args,
budget_amount,
_("Accumulated Monthly"),
monthly_action,
budget.budget_against,
expense_amount,
)
def compare_expense_with_budget(args, budget_amount, action_for, action, budget_against, amount=0):
actual_expense = get_actual_expense(args)
total_expense = actual_expense + amount
args.actual_expense, args.requested_amount, args.ordered_amount = get_actual_expense(args), 0, 0
if not amount:
args.requested_amount, args.ordered_amount = get_requested_amount(args), get_ordered_amount(args)
if args.get("doctype") == "Material Request" and args.for_material_request:
amount = args.requested_amount + args.ordered_amount
elif args.get("doctype") == "Purchase Order" and args.for_purchase_order:
amount = args.ordered_amount
total_expense = args.actual_expense + amount
if total_expense > budget_amount:
if actual_expense > budget_amount:
if args.actual_expense > budget_amount:
error_tense = _("is already")
diff = actual_expense - budget_amount
diff = args.actual_expense - budget_amount
else:
error_tense = _("will be")
diff = total_expense - budget_amount
@@ -268,9 +288,10 @@ def compare_expense_with_budget(args, budget_amount, action_for, action, budget_
frappe.bold(fmt_money(diff, currency=currency)),
)
if (
frappe.flags.exception_approver_role
and frappe.flags.exception_approver_role in frappe.get_roles(frappe.session.user)
msg += get_expense_breakup(args, currency, budget_against)
if frappe.flags.exception_approver_role and frappe.flags.exception_approver_role in frappe.get_roles(
frappe.session.user
):
action = "Warn"
@@ -280,6 +301,83 @@ def compare_expense_with_budget(args, budget_amount, action_for, action, budget_
frappe.msgprint(msg, indicator="orange", title=_("Budget Exceeded"))
def get_expense_breakup(args, currency, budget_against):
msg = "<hr>Total Expenses booked through - <ul>"
common_filters = frappe._dict(
{
args.budget_against_field: budget_against,
"account": args.account,
"company": args.company,
}
)
msg += (
"<li>"
+ frappe.utils.get_link_to_report(
"General Ledger",
label="Actual Expenses",
filters=common_filters.copy().update(
{
"from_date": frappe.get_cached_value("Fiscal Year", args.fiscal_year, "year_start_date"),
"to_date": frappe.get_cached_value("Fiscal Year", args.fiscal_year, "year_end_date"),
"is_cancelled": 0,
}
),
)
+ " - "
+ frappe.bold(fmt_money(args.actual_expense, currency=currency))
+ "</li>"
)
msg += (
"<li>"
+ frappe.utils.get_link_to_report(
"Material Request",
label="Material Requests",
report_type="Report Builder",
doctype="Material Request",
filters=common_filters.copy().update(
{
"status": [["!=", "Stopped"]],
"docstatus": 1,
"material_request_type": "Purchase",
"schedule_date": [["fiscal year", "2023-2024"]],
"item_code": args.item_code,
"per_ordered": [["<", 100]],
}
),
)
+ " - "
+ frappe.bold(fmt_money(args.requested_amount, currency=currency))
+ "</li>"
)
msg += (
"<li>"
+ frappe.utils.get_link_to_report(
"Purchase Order",
label="Unbilled Orders",
report_type="Report Builder",
doctype="Purchase Order",
filters=common_filters.copy().update(
{
"status": [["!=", "Closed"]],
"docstatus": 1,
"transaction_date": [["fiscal year", "2023-2024"]],
"item_code": args.item_code,
"per_billed": [["<", 100]],
}
),
)
+ " - "
+ frappe.bold(fmt_money(args.ordered_amount, currency=currency))
+ "</li></ul>"
)
return msg
def get_actions(args, budget):
yearly_action = budget.action_if_annual_budget_exceeded
monthly_action = budget.action_if_accumulated_monthly_budget_exceeded
@@ -295,31 +393,15 @@ def get_actions(args, budget):
return yearly_action, monthly_action
def get_amount(args, budget):
amount = 0
if args.get("doctype") == "Material Request" and budget.for_material_request:
amount = (
get_requested_amount(args, budget) + get_ordered_amount(args, budget) + get_actual_expense(args)
)
elif args.get("doctype") == "Purchase Order" and budget.for_purchase_order:
amount = get_ordered_amount(args, budget) + get_actual_expense(args)
return amount
def get_requested_amount(args, budget):
def get_requested_amount(args):
item_code = args.get("item_code")
condition = get_other_condition(args, budget, "Material Request")
condition = get_other_condition(args, "Material Request")
data = frappe.db.sql(
""" select ifnull((sum(child.stock_qty - child.ordered_qty) * rate), 0) as amount
from `tabMaterial Request Item` child, `tabMaterial Request` parent where parent.name = child.parent and
child.item_code = %s and parent.docstatus = 1 and child.stock_qty > child.ordered_qty and {0} and
parent.material_request_type = 'Purchase' and parent.status != 'Stopped'""".format(
condition
),
child.item_code = %s and parent.docstatus = 1 and child.stock_qty > child.ordered_qty and {} and
parent.material_request_type = 'Purchase' and parent.status != 'Stopped'""".format(condition),
item_code,
as_list=1,
)
@@ -327,17 +409,15 @@ def get_requested_amount(args, budget):
return data[0][0] if data else 0
def get_ordered_amount(args, budget):
def get_ordered_amount(args):
item_code = args.get("item_code")
condition = get_other_condition(args, budget, "Purchase Order")
condition = get_other_condition(args, "Purchase Order")
data = frappe.db.sql(
""" select ifnull(sum(child.amount - child.billed_amt), 0) as amount
f""" select ifnull(sum(child.amount - child.billed_amt), 0) as amount
from `tabPurchase Order Item` child, `tabPurchase Order` parent where
parent.name = child.parent and child.item_code = %s and parent.docstatus = 1 and child.amount > child.billed_amt
and parent.status != 'Closed' and {0}""".format(
condition
),
and parent.status != 'Closed' and {condition}""",
item_code,
as_list=1,
)
@@ -345,12 +425,12 @@ def get_ordered_amount(args, budget):
return data[0][0] if data else 0
def get_other_condition(args, budget, for_doc):
def get_other_condition(args, for_doc):
condition = "expense_account = '%s'" % (args.expense_account)
budget_against_field = args.get("budget_against_field")
if budget_against_field and args.get(budget_against_field):
condition += " and child.%s = '%s'" % (budget_against_field, args.get(budget_against_field))
condition += f" and child.{budget_against_field} = '{args.get(budget_against_field)}'"
if args.get("fiscal_year"):
date_field = "schedule_date" if for_doc == "Material Request" else "transaction_date"
@@ -358,12 +438,8 @@ def get_other_condition(args, budget, for_doc):
"Fiscal Year", args.get("fiscal_year"), ["year_start_date", "year_end_date"]
)
condition += """ and parent.%s
between '%s' and '%s' """ % (
date_field,
start_date,
end_date,
)
condition += f""" and parent.{date_field}
between '{start_date}' and '{end_date}' """
return condition
@@ -382,21 +458,17 @@ def get_actual_expense(args):
args.update(lft_rgt)
condition2 = """and exists(select name from `tab{doctype}`
condition2 = f"""and exists(select name from `tab{args.budget_against_doctype}`
where lft>=%(lft)s and rgt<=%(rgt)s
and name=gle.{budget_against_field})""".format(
doctype=args.budget_against_doctype, budget_against_field=budget_against_field # nosec
)
and name=gle.{budget_against_field})"""
else:
condition2 = """and exists(select name from `tab{doctype}`
where name=gle.{budget_against} and
gle.{budget_against} = %({budget_against})s)""".format(
doctype=args.budget_against_doctype, budget_against=budget_against_field
)
condition2 = f"""and exists(select name from `tab{args.budget_against_doctype}`
where name=gle.{budget_against_field} and
gle.{budget_against_field} = %({budget_against_field})s)"""
amount = flt(
frappe.db.sql(
"""
f"""
select sum(gle.debit) - sum(gle.credit)
from `tabGL Entry` gle
where
@@ -407,9 +479,7 @@ def get_actual_expense(args):
and gle.company=%(company)s
and gle.docstatus=1
{condition2}
""".format(
condition1=condition1, condition2=condition2
),
""",
(args),
)[0][0]
) # nosec

View File

@@ -41,9 +41,7 @@ class TestBudget(unittest.TestCase):
budget = make_budget(budget_against="Cost Center")
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
@@ -63,9 +61,7 @@ class TestBudget(unittest.TestCase):
budget = make_budget(budget_against="Cost Center")
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
@@ -97,9 +93,7 @@ class TestBudget(unittest.TestCase):
)
fiscal_year = get_fiscal_year(nowdate())[0]
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
frappe.db.set_value("Budget", budget.name, "fiscal_year", fiscal_year)
mr = frappe.get_doc(
@@ -138,9 +132,7 @@ class TestBudget(unittest.TestCase):
)
fiscal_year = get_fiscal_year(nowdate())[0]
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
frappe.db.set_value("Budget", budget.name, "fiscal_year", fiscal_year)
po = create_purchase_order(transaction_date=nowdate(), do_not_submit=True)
@@ -158,9 +150,7 @@ class TestBudget(unittest.TestCase):
budget = make_budget(budget_against="Project")
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
project = frappe.get_value("Project", {"project_name": "_Test Project"})
@@ -223,7 +213,7 @@ class TestBudget(unittest.TestCase):
if month > 9:
month = 9
for i in range(month + 1):
for _i in range(month + 1):
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
"_Test Bank - _TC",
@@ -237,9 +227,7 @@ class TestBudget(unittest.TestCase):
frappe.db.get_value("GL Entry", {"voucher_type": "Journal Entry", "voucher_no": jv.name})
)
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
self.assertRaises(BudgetError, jv.cancel)
@@ -255,7 +243,7 @@ class TestBudget(unittest.TestCase):
month = 9
project = frappe.get_value("Project", {"project_name": "_Test Project"})
for i in range(month + 1):
for _i in range(month + 1):
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
"_Test Bank - _TC",
@@ -270,9 +258,7 @@ class TestBudget(unittest.TestCase):
frappe.db.get_value("GL Entry", {"voucher_type": "Journal Entry", "voucher_no": jv.name})
)
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
self.assertRaises(BudgetError, jv.cancel)
@@ -284,9 +270,7 @@ class TestBudget(unittest.TestCase):
set_total_expense_zero(nowdate(), "cost_center", "_Test Cost Center 2 - _TC")
budget = make_budget(budget_against="Cost Center", cost_center="_Test Company - _TC")
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
@@ -316,9 +300,7 @@ class TestBudget(unittest.TestCase):
).insert(ignore_permissions=True)
budget = make_budget(budget_against="Cost Center", cost_center=cost_center)
frappe.db.set_value(
"Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop"
)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
@@ -423,13 +405,11 @@ def make_budget(**args):
fiscal_year = get_fiscal_year(nowdate())[0]
if budget_against == "Project":
project_name = "{0}%".format("_Test Project/" + fiscal_year)
project_name = "{}%".format("_Test Project/" + fiscal_year)
budget_list = frappe.get_all("Budget", fields=["name"], filters={"name": ("like", project_name)})
else:
cost_center_name = "{0}%".format(cost_center or "_Test Cost Center - _TC/" + fiscal_year)
budget_list = frappe.get_all(
"Budget", fields=["name"], filters={"name": ("like", cost_center_name)}
)
cost_center_name = "{}%".format(cost_center or "_Test Cost Center - _TC/" + fiscal_year)
budget_list = frappe.get_all("Budget", fields=["name"], filters={"name": ("like", cost_center_name)})
for d in budget_list:
frappe.db.sql("delete from `tabBudget` where name = %(name)s", d)
frappe.db.sql("delete from `tabBudget Account` where parent = %(name)s", d)
@@ -451,24 +431,18 @@ def make_budget(**args):
budget.action_if_annual_budget_exceeded = "Stop"
budget.action_if_accumulated_monthly_budget_exceeded = "Ignore"
budget.budget_against = budget_against
budget.append(
"accounts", {"account": "_Test Account Cost for Goods Sold - _TC", "budget_amount": 200000}
)
budget.append("accounts", {"account": "_Test Account Cost for Goods Sold - _TC", "budget_amount": 200000})
if args.applicable_on_material_request:
budget.applicable_on_material_request = 1
budget.action_if_annual_budget_exceeded_on_mr = (
args.action_if_annual_budget_exceeded_on_mr or "Warn"
)
budget.action_if_annual_budget_exceeded_on_mr = args.action_if_annual_budget_exceeded_on_mr or "Warn"
budget.action_if_accumulated_monthly_budget_exceeded_on_mr = (
args.action_if_accumulated_monthly_budget_exceeded_on_mr or "Warn"
)
if args.applicable_on_purchase_order:
budget.applicable_on_purchase_order = 1
budget.action_if_annual_budget_exceeded_on_po = (
args.action_if_annual_budget_exceeded_on_po or "Warn"
)
budget.action_if_annual_budget_exceeded_on_po = args.action_if_annual_budget_exceeded_on_po or "Warn"
budget.action_if_accumulated_monthly_budget_exceeded_on_po = (
args.action_if_accumulated_monthly_budget_exceeded_on_po or "Warn"
)

View File

@@ -1,94 +1,42 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2016-05-16 11:54:09.286135",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"actions": [],
"creation": "2016-05-16 11:54:09.286135",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"account",
"budget_amount"
],
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "account",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Account",
"length": 0,
"no_copy": 0,
"options": "Account",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
"fieldname": "account",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Account",
"options": "Account",
"reqd": 1,
"search_index": 1
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "budget_amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Budget Amount",
"length": 0,
"no_copy": 0,
"options": "Company:company:default_currency",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
"fieldname": "budget_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Budget Amount",
"options": "Company:company:default_currency",
"reqd": 1
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-01-02 17:02:53.339420",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Budget Account",
"name_case": "",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_seen": 0
],
"istable": 1,
"links": [],
"modified": "2024-03-04 15:43:27.016947",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Budget Account",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@@ -38,9 +38,7 @@ class ChartofAccountsImporter(Document):
def validate(self):
if self.import_file:
get_coa(
"Chart of Accounts Importer", "All Accounts", file_name=self.import_file, for_validate=1
)
get_coa("Chart of Accounts Importer", "All Accounts", file_name=self.import_file, for_validate=1)
def validate_columns(data):
@@ -116,7 +114,7 @@ def generate_data_from_csv(file_doc, as_dict=False):
file_path = file_doc.get_full_path()
data = []
with open(file_path, "r") as in_file:
with open(file_path) as in_file:
csv_reader = list(csv.reader(in_file))
headers = csv_reader[0]
del csv_reader[0] # delete top row and headers row
@@ -215,10 +213,10 @@ def build_forest(data):
for row in data:
account_name, parent_account, account_number, parent_account_number = row[0:4]
if account_number:
account_name = "{} - {}".format(account_number, account_name)
account_name = f"{account_number} - {account_name}"
if parent_account_number:
parent_account_number = cstr(parent_account_number).strip()
parent_account = "{} - {}".format(parent_account_number, parent_account)
parent_account = f"{parent_account_number} - {parent_account}"
if parent_account == account_name == child:
return [parent_account]
@@ -230,7 +228,7 @@ def build_forest(data):
frappe.bold(parent_account)
)
)
return [child] + parent_account_list
return [child, *parent_account_list]
charts_map, paths = {}, []
@@ -250,12 +248,12 @@ def build_forest(data):
) = i
if not account_name:
error_messages.append("Row {0}: Please enter Account Name".format(line_no))
error_messages.append(f"Row {line_no}: Please enter Account Name")
name = account_name
if account_number:
account_number = cstr(account_number).strip()
account_name = "{} - {}".format(account_number, account_name)
account_name = f"{account_number} - {account_name}"
charts_map[account_name] = {}
charts_map[account_name]["account_name"] = name
@@ -352,9 +350,9 @@ def get_template(template_type, company):
def get_sample_template(writer, company):
currency = frappe.db.get_value("Company", company, "default_currency")
with open(os.path.join(os.path.dirname(__file__), "coa_sample_template.csv"), "r") as f:
with open(os.path.join(os.path.dirname(__file__), "coa_sample_template.csv")) as f:
for row in f:
row = row.strip().split(",") + [currency]
row = [*row.strip().split(","), currency]
writer.writerow(row)
return writer
@@ -463,7 +461,7 @@ def unset_existing_data(company):
"Purchase Taxes and Charges Template",
]:
frappe.db.sql(
'''delete from `tab{0}` where `company`="%s"'''.format(doctype) % (company) # nosec
f'''delete from `tab{doctype}` where `company`="%s"''' % (company) # nosec
)

View File

@@ -66,71 +66,71 @@ def create_or_update_cheque_print_format(template_name):
cheque_print.html = """
<style>
.print-format {
.print-format {{
padding: 0px;
}
@media screen {
.print-format {
}}
@media screen {{
.print-format {{
padding: 0in;
}
}
}}
}}
</style>
<div style="position: relative; top:%(starting_position_from_top_edge)scm">
<div style="width:%(cheque_width)scm;height:%(cheque_height)scm;">
<span style="top:%(acc_pay_dist_from_top_edge)scm; left:%(acc_pay_dist_from_left_edge)scm;
<div style="position: relative; top:{starting_position_from_top_edge}cm">
<div style="width:{cheque_width}cm;height:{cheque_height}cm;">
<span style="top:{acc_pay_dist_from_top_edge}cm; left:{acc_pay_dist_from_left_edge}cm;
border-bottom: solid 1px;border-top:solid 1px; width:2cm;text-align: center; position: absolute;">
%(message_to_show)s
{message_to_show}
</span>
<span style="top:%(date_dist_from_top_edge)scm; left:%(date_dist_from_left_edge)scm;
<span style="top:{date_dist_from_top_edge}cm; left:{date_dist_from_left_edge}cm;
position: absolute;">
{{ frappe.utils.formatdate(doc.reference_date) or '' }}
{{{{ frappe.utils.formatdate(doc.reference_date) or '' }}}}
</span>
<span style="top:%(acc_no_dist_from_top_edge)scm;left:%(acc_no_dist_from_left_edge)scm;
<span style="top:{acc_no_dist_from_top_edge}cm;left:{acc_no_dist_from_left_edge}cm;
position: absolute; min-width: 6cm;">
{{ doc.account_no or '' }}
{{{{ doc.account_no or '' }}}}
</span>
<span style="top:%(payer_name_from_top_edge)scm;left: %(payer_name_from_left_edge)scm;
<span style="top:{payer_name_from_top_edge}cm;left: {payer_name_from_left_edge}cm;
position: absolute; min-width: 6cm;">
{{doc.party_name}}
{{{{doc.party_name}}}}
</span>
<span style="top:%(amt_in_words_from_top_edge)scm; left:%(amt_in_words_from_left_edge)scm;
position: absolute; display: block; width: %(amt_in_word_width)scm;
line-height:%(amt_in_words_line_spacing)scm; word-wrap: break-word;">
{{frappe.utils.money_in_words(doc.base_paid_amount or doc.base_received_amount)}}
<span style="top:{amt_in_words_from_top_edge}cm; left:{amt_in_words_from_left_edge}cm;
position: absolute; display: block; width: {amt_in_word_width}cm;
line-height:{amt_in_words_line_spacing}cm; word-wrap: break-word;">
{{{{frappe.utils.money_in_words(doc.base_paid_amount or doc.base_received_amount)}}}}
</span>
<span style="top:%(amt_in_figures_from_top_edge)scm;left: %(amt_in_figures_from_left_edge)scm;
<span style="top:{amt_in_figures_from_top_edge}cm;left: {amt_in_figures_from_left_edge}cm;
position: absolute; min-width: 4cm;">
{{doc.get_formatted("base_paid_amount") or doc.get_formatted("base_received_amount")}}
{{{{doc.get_formatted("base_paid_amount") or doc.get_formatted("base_received_amount")}}}}
</span>
<span style="top:%(signatory_from_top_edge)scm;left: %(signatory_from_left_edge)scm;
<span style="top:{signatory_from_top_edge}cm;left: {signatory_from_left_edge}cm;
position: absolute; min-width: 6cm;">
{{doc.company}}
{{{{doc.company}}}}
</span>
</div>
</div>""" % {
"starting_position_from_top_edge": doc.starting_position_from_top_edge
</div>""".format(
starting_position_from_top_edge=doc.starting_position_from_top_edge
if doc.cheque_size == "A4"
else 0.0,
"cheque_width": doc.cheque_width,
"cheque_height": doc.cheque_height,
"acc_pay_dist_from_top_edge": doc.acc_pay_dist_from_top_edge,
"acc_pay_dist_from_left_edge": doc.acc_pay_dist_from_left_edge,
"message_to_show": doc.message_to_show if doc.message_to_show else _("Account Pay Only"),
"date_dist_from_top_edge": doc.date_dist_from_top_edge,
"date_dist_from_left_edge": doc.date_dist_from_left_edge,
"acc_no_dist_from_top_edge": doc.acc_no_dist_from_top_edge,
"acc_no_dist_from_left_edge": doc.acc_no_dist_from_left_edge,
"payer_name_from_top_edge": doc.payer_name_from_top_edge,
"payer_name_from_left_edge": doc.payer_name_from_left_edge,
"amt_in_words_from_top_edge": doc.amt_in_words_from_top_edge,
"amt_in_words_from_left_edge": doc.amt_in_words_from_left_edge,
"amt_in_word_width": doc.amt_in_word_width,
"amt_in_words_line_spacing": doc.amt_in_words_line_spacing,
"amt_in_figures_from_top_edge": doc.amt_in_figures_from_top_edge,
"amt_in_figures_from_left_edge": doc.amt_in_figures_from_left_edge,
"signatory_from_top_edge": doc.signatory_from_top_edge,
"signatory_from_left_edge": doc.signatory_from_left_edge,
}
cheque_width=doc.cheque_width,
cheque_height=doc.cheque_height,
acc_pay_dist_from_top_edge=doc.acc_pay_dist_from_top_edge,
acc_pay_dist_from_left_edge=doc.acc_pay_dist_from_left_edge,
message_to_show=doc.message_to_show if doc.message_to_show else _("Account Pay Only"),
date_dist_from_top_edge=doc.date_dist_from_top_edge,
date_dist_from_left_edge=doc.date_dist_from_left_edge,
acc_no_dist_from_top_edge=doc.acc_no_dist_from_top_edge,
acc_no_dist_from_left_edge=doc.acc_no_dist_from_left_edge,
payer_name_from_top_edge=doc.payer_name_from_top_edge,
payer_name_from_left_edge=doc.payer_name_from_left_edge,
amt_in_words_from_top_edge=doc.amt_in_words_from_top_edge,
amt_in_words_from_left_edge=doc.amt_in_words_from_left_edge,
amt_in_word_width=doc.amt_in_word_width,
amt_in_words_line_spacing=doc.amt_in_words_line_spacing,
amt_in_figures_from_top_edge=doc.amt_in_figures_from_top_edge,
amt_in_figures_from_left_edge=doc.amt_in_figures_from_left_edge,
signatory_from_top_edge=doc.signatory_from_top_edge,
signatory_from_left_edge=doc.signatory_from_left_edge,
)
cheque_print.save(ignore_permissions=True)

View File

@@ -125,7 +125,7 @@
"idx": 1,
"is_tree": 1,
"links": [],
"modified": "2022-01-31 13:22:58.916273",
"modified": "2024-04-24 10:55:54.083042",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cost Center",
@@ -163,6 +163,15 @@
{
"read": 1,
"role": "Purchase User"
},
{
"email": 1,
"export": 1,
"print": 1,
"report": 1,
"role": "Employee",
"select": 1,
"share": 1
}
],
"search_fields": "parent_cost_center, is_group",

View File

@@ -34,9 +34,7 @@ class CostCenter(NestedSet):
def autoname(self):
from erpnext.accounts.utils import get_autoname_with_number
self.name = get_autoname_with_number(
self.cost_center_number, self.cost_center_name, self.company
)
self.name = get_autoname_with_number(self.cost_center_number, self.cost_center_name, self.company)
def validate(self):
self.validate_mandatory()
@@ -109,14 +107,14 @@ class CostCenter(NestedSet):
new_cost_center = get_name_with_abbr(newdn, self.company)
# Validate properties before merging
super(CostCenter, self).before_rename(olddn, new_cost_center, merge, "is_group")
super().before_rename(olddn, new_cost_center, merge, "is_group")
if not merge:
new_cost_center = get_name_with_number(new_cost_center, self.cost_center_number)
return new_cost_center
def after_rename(self, olddn, newdn, merge=False):
super(CostCenter, self).after_rename(olddn, newdn, merge)
super().after_rename(olddn, newdn, merge)
if not merge:
new_cost_center = frappe.db.get_value(

View File

@@ -10,7 +10,6 @@ test_records = frappe.get_test_records("Cost Center")
class TestCostCenter(unittest.TestCase):
def test_cost_center_creation_against_child_node(self):
if not frappe.db.get_value("Cost Center", {"name": "_Test Cost Center 2 - _TC"}):
frappe.get_doc(test_records[1]).insert()

View File

@@ -4,7 +4,7 @@
import frappe
from frappe import _
from frappe.model.document import Document
from frappe.utils import add_days, format_date, getdate
from frappe.utils import add_days, flt, format_date, getdate
class MainCostCenterCantBeChild(frappe.ValidationError):
@@ -48,7 +48,7 @@ class CostCenterAllocation(Document):
# end: auto-generated types
def __init__(self, *args, **kwargs):
super(CostCenterAllocation, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self._skip_from_date_validation = False
def validate(self):
@@ -60,12 +60,10 @@ class CostCenterAllocation(Document):
self.validate_child_cost_centers()
def validate_total_allocation_percentage(self):
total_percentage = sum([d.percentage for d in self.get("allocation_percentages", [])])
total_percentage = sum([flt(d.percentage) for d in self.get("allocation_percentages", [])])
if total_percentage != 100:
frappe.throw(
_("Total percentage against cost centers should be 100"), WrongPercentageAllocation
)
frappe.throw(_("Total percentage against cost centers should be 100"), WrongPercentageAllocation)
def validate_from_date_based_on_existing_gle(self):
# Check if GLE exists against the main cost center

View File

@@ -3,22 +3,36 @@
frappe.ui.form.on("Currency Exchange Settings", {
service_provider: function (frm) {
if (frm.doc.service_provider == "exchangerate.host") {
let result = ["result"];
let params = {
date: "{transaction_date}",
from: "{from_currency}",
to: "{to_currency}",
};
add_param(frm, "https://api.exchangerate.host/convert", params, result);
} else if (frm.doc.service_provider == "frankfurter.app") {
let result = ["rates", "{to_currency}"];
let params = {
base: "{from_currency}",
symbols: "{to_currency}",
};
add_param(frm, "https://frankfurter.app/{transaction_date}", params, result);
}
frm.call({
method: "erpnext.accounts.doctype.currency_exchange_settings.currency_exchange_settings.get_api_endpoint",
args: {
service_provider: frm.doc.service_provider,
use_http: frm.doc.use_http,
},
callback: function (r) {
if (r && r.message) {
if (frm.doc.service_provider == "exchangerate.host") {
let result = ["result"];
let params = {
date: "{transaction_date}",
from: "{from_currency}",
to: "{to_currency}",
};
add_param(frm, r.message, params, result);
} else if (frm.doc.service_provider == "frankfurter.app") {
let result = ["rates", "{to_currency}"];
let params = {
base: "{from_currency}",
symbols: "{to_currency}",
};
add_param(frm, r.message, params, result);
}
}
},
});
},
use_http: function (frm) {
frm.trigger("service_provider");
},
});

View File

@@ -9,6 +9,7 @@
"disabled",
"service_provider",
"api_endpoint",
"use_http",
"access_key",
"url",
"column_break_3",
@@ -91,12 +92,19 @@
"fieldname": "access_key",
"fieldtype": "Data",
"label": "Access Key"
},
{
"default": "0",
"depends_on": "eval: doc.service_provider != \"Custom\"",
"fieldname": "use_http",
"fieldtype": "Check",
"label": "Use HTTP Protocol"
}
],
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-10-04 15:30:25.333860",
"modified": "2024-03-18 08:32:26.895076",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Currency Exchange Settings",

View File

@@ -31,6 +31,7 @@ class CurrencyExchangeSettings(Document):
result_key: DF.Table[CurrencyExchangeSettingsResult]
service_provider: DF.Literal["frankfurter.app", "exchangerate.host", "Custom"]
url: DF.Data | None
use_http: DF.Check
# end: auto-generated types
def validate(self):
@@ -42,7 +43,6 @@ class CurrencyExchangeSettings(Document):
def set_parameters_and_result(self):
if self.service_provider == "exchangerate.host":
if not self.access_key:
frappe.throw(
_("Access Key is required for Service Provider: {0}").format(
@@ -53,7 +53,7 @@ class CurrencyExchangeSettings(Document):
self.set("result_key", [])
self.set("req_params", [])
self.api_endpoint = "https://api.exchangerate.host/convert"
self.api_endpoint = get_api_endpoint(self.service_provider, self.use_http)
self.append("result_key", {"key": "result"})
self.append("req_params", {"key": "access_key", "value": self.access_key})
self.append("req_params", {"key": "amount", "value": "1"})
@@ -64,7 +64,7 @@ class CurrencyExchangeSettings(Document):
self.set("result_key", [])
self.set("req_params", [])
self.api_endpoint = "https://frankfurter.app/{transaction_date}"
self.api_endpoint = get_api_endpoint(self.service_provider, self.use_http)
self.append("result_key", {"key": "rates"})
self.append("result_key", {"key": "{to_currency}"})
self.append("req_params", {"key": "base", "value": "{from_currency}"})
@@ -77,9 +77,7 @@ class CurrencyExchangeSettings(Document):
transaction_date=nowdate(), to_currency="INR", from_currency="USD"
)
api_url = self.api_endpoint.format(
transaction_date=nowdate(), to_currency="INR", from_currency="USD"
)
api_url = self.api_endpoint.format(transaction_date=nowdate(), to_currency="INR", from_currency="USD")
try:
response = requests.get(api_url, params=params)
@@ -99,7 +97,23 @@ class CurrencyExchangeSettings(Document):
]
except Exception:
frappe.throw(_("Invalid result key. Response:") + " " + response.text)
if not isinstance(value, (int, float)):
if not isinstance(value, int | float):
frappe.throw(_("Returned exchange rate is neither integer not float."))
self.url = response.url
@frappe.whitelist()
def get_api_endpoint(service_provider: str | None = None, use_http: bool = False):
if service_provider and service_provider in ["exchangerate.host", "frankfurter.app"]:
if service_provider == "exchangerate.host":
api = "api.exchangerate.host/convert"
elif service_provider == "frankfurter.app":
api = "frankfurter.app/{transaction_date}"
protocol = "https://"
if use_http:
protocol = "http://"
return protocol + api
return None

View File

@@ -139,6 +139,22 @@ class Dunning(AccountsController):
)
row.dunning_level = len(past_dunnings) + 1
def on_cancel(self):
super().on_cancel()
self.ignore_linked_doctypes = [
"GL Entry",
"Stock Ledger Entry",
"Repost Item Valuation",
"Repost Payment Ledger",
"Repost Payment Ledger Items",
"Repost Accounting Ledger",
"Repost Accounting Ledger Items",
"Unreconcile Payment",
"Unreconcile Payment Entries",
"Payment Ledger Entry",
"Serial and Batch Bundle",
]
def resolve_dunning(doc, state):
"""

View File

@@ -109,9 +109,7 @@ class TestDunning(FrappeTestCase):
def create_dunning(overdue_days, dunning_type_name=None):
posting_date = add_days(today(), -1 * overdue_days)
sales_invoice = create_sales_invoice_against_cost_center(
posting_date=posting_date, qty=1, rate=100
)
sales_invoice = create_sales_invoice_against_cost_center(posting_date=posting_date, qty=1, rate=100)
dunning = create_dunning_from_sales_invoice(sales_invoice.name)
if dunning_type_name:

View File

@@ -268,7 +268,6 @@ class ExchangeRateRevaluation(Document):
# Handle Accounts with '0' balance in Account/Base Currency
for d in [x for x in account_details if x.zero_balance]:
if d.balance != 0:
current_exchange_rate = new_exchange_rate = 0
@@ -281,7 +280,8 @@ class ExchangeRateRevaluation(Document):
new_balance_in_account_currency = 0
current_exchange_rate = (
calculate_exchange_rate_using_last_gle(company, d.account, d.party_type, d.party) or 0.0
calculate_exchange_rate_using_last_gle(company, d.account, d.party_type, d.party)
or 0.0
)
gain_loss = new_balance_in_account_currency - (
@@ -335,9 +335,7 @@ class ExchangeRateRevaluation(Document):
revaluation_jv = self.make_jv_for_revaluation()
if revaluation_jv:
frappe.msgprint(
f"Revaluation Journal: {get_link_to_form('Journal Entry', revaluation_jv.name)}"
)
frappe.msgprint(f"Revaluation Journal: {get_link_to_form('Journal Entry', revaluation_jv.name)}")
return {
"revaluation_jv": revaluation_jv.name if revaluation_jv else None,
@@ -394,7 +392,8 @@ class ExchangeRateRevaluation(Document):
journal_account.update(
{
dr_or_cr: flt(
abs(d.get("balance_in_account_currency")), d.precision("balance_in_account_currency")
abs(d.get("balance_in_account_currency")),
d.precision("balance_in_account_currency"),
),
reverse_dr_or_cr: 0,
"debit": 0,
@@ -520,7 +519,9 @@ class ExchangeRateRevaluation(Document):
abs(d.get("balance_in_account_currency")), d.precision("balance_in_account_currency")
),
"cost_center": erpnext.get_default_cost_center(self.company),
"exchange_rate": flt(d.get("current_exchange_rate"), d.precision("current_exchange_rate")),
"exchange_rate": flt(
d.get("current_exchange_rate"), d.precision("current_exchange_rate")
),
"reference_type": "Exchange Rate Revaluation",
"reference_name": self.name,
}
@@ -598,7 +599,7 @@ def calculate_exchange_rate_using_last_gle(company, account, party_type, party):
@frappe.whitelist()
def get_account_details(
company, posting_date, account, party_type=None, party=None, rounding_loss_allowance: float = None
company, posting_date, account, party_type=None, party=None, rounding_loss_allowance: float | None = None
):
if not (company and posting_date):
frappe.throw(_("Company and Posting Date is mandatory"))
@@ -611,7 +612,7 @@ def get_account_details(
frappe.throw(_("Party Type and Party is mandatory for {0} account").format(account_type))
account_details = {}
company_currency = erpnext.get_company_currency(company)
erpnext.get_company_currency(company)
account_details = {
"account_currency": account_currency,
@@ -625,24 +626,22 @@ def get_account_details(
rounding_loss_allowance=rounding_loss_allowance,
)
if account_balance and (
account_balance[0].balance or account_balance[0].balance_in_account_currency
):
account_with_new_balance = ExchangeRateRevaluation.calculate_new_account_balance(
if account_balance and (account_balance[0].balance or account_balance[0].balance_in_account_currency):
if account_with_new_balance := ExchangeRateRevaluation.calculate_new_account_balance(
company, posting_date, account_balance
)
row = account_with_new_balance[0]
account_details.update(
{
"balance_in_base_currency": row["balance_in_base_currency"],
"balance_in_account_currency": row["balance_in_account_currency"],
"current_exchange_rate": row["current_exchange_rate"],
"new_exchange_rate": row["new_exchange_rate"],
"new_balance_in_base_currency": row["new_balance_in_base_currency"],
"new_balance_in_account_currency": row["new_balance_in_account_currency"],
"zero_balance": row["zero_balance"],
"gain_loss": row["gain_loss"],
}
)
):
row = account_with_new_balance[0]
account_details.update(
{
"balance_in_base_currency": row["balance_in_base_currency"],
"balance_in_account_currency": row["balance_in_account_currency"],
"current_exchange_rate": row["current_exchange_rate"],
"new_exchange_rate": row["new_exchange_rate"],
"new_balance_in_base_currency": row["new_balance_in_base_currency"],
"new_balance_in_account_currency": row["new_balance_in_account_currency"],
"zero_balance": row["zero_balance"],
"gain_loss": row["gain_loss"],
}
)
return account_details

View File

@@ -1,21 +1,14 @@
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
import unittest
import frappe
from frappe import qb
from frappe.tests.utils import FrappeTestCase, change_settings
from frappe.utils import add_days, flt, today
from erpnext import get_default_cost_center
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.accounts.party import get_party_account
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
from erpnext.stock.doctype.item.test_item import create_item
class TestExchangeRateRevaluation(AccountsTestMixin, FrappeTestCase):
@@ -73,9 +66,7 @@ class TestExchangeRateRevaluation(AccountsTestMixin, FrappeTestCase):
err.extend("accounts", accounts)
row = err.accounts[0]
row.new_exchange_rate = 85
row.new_balance_in_base_currency = flt(
row.new_exchange_rate * flt(row.balance_in_account_currency)
)
row.new_balance_in_base_currency = flt(row.new_exchange_rate * flt(row.balance_in_account_currency))
row.gain_loss = row.new_balance_in_base_currency - flt(row.balance_in_base_currency)
err.set_total_gain_loss()
err = err.save().submit()
@@ -127,9 +118,9 @@ class TestExchangeRateRevaluation(AccountsTestMixin, FrappeTestCase):
pe.save().submit()
# Cancel the auto created gain/loss JE to simulate balance only in base currency
je = frappe.db.get_all(
"Journal Entry Account", filters={"reference_name": si.name}, pluck="parent"
)[0]
je = frappe.db.get_all("Journal Entry Account", filters={"reference_name": si.name}, pluck="parent")[
0
]
frappe.get_doc("Journal Entry", je).cancel()
err = frappe.new_doc("Exchange Rate Revaluation")
@@ -235,9 +226,9 @@ class TestExchangeRateRevaluation(AccountsTestMixin, FrappeTestCase):
self.assertEqual(flt(acc.debit, precision), 0.0)
self.assertEqual(flt(acc.credit, precision), 0.0)
row = [x for x in je.accounts if x.account == self.debtors_usd][0]
row = next(x for x in je.accounts if x.account == self.debtors_usd)
self.assertEqual(flt(row.credit_in_account_currency, precision), 5.0) # in USD
row = [x for x in je.accounts if x.account != self.debtors_usd][0]
row = next(x for x in je.accounts if x.account != self.debtors_usd)
self.assertEqual(flt(row.debit_in_account_currency, precision), 421.06) # in INR
# total_debit and total_credit will be 0.0, as JV is posting only to account currency fields
@@ -294,5 +285,5 @@ class TestExchangeRateRevaluation(AccountsTestMixin, FrappeTestCase):
"new_balance_in_account_currency": 100.0,
}
for key, val in expected_data.items():
for key, _val in expected_data.items():
self.assertEqual(expected_data.get(key), account_details.get(key))

View File

@@ -82,12 +82,12 @@
"icon": "fa fa-calendar",
"idx": 1,
"links": [],
"modified": "2024-01-30 12:35:38.645968",
"modified": "2024-05-27 17:29:55.560840",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Fiscal Year",
"naming_rule": "By fieldname",
"owner": "Administrator",
"owner": "Administrator",
"permissions": [
{
"create": 1,
@@ -119,6 +119,18 @@
{
"read": 1,
"role": "Employee"
},
{
"read": 1,
"role": "Accounts Manager"
},
{
"read": 1,
"role": "Stock Manager"
},
{
"read": 1,
"role": "Auditor"
}
],
"show_name_in_global_search": 1,

View File

@@ -108,9 +108,9 @@ class FiscalYear(Document):
if overlap:
frappe.throw(
_("Year start date or end date is overlapping with {0}. To avoid please set company").format(
existing.name
),
_(
"Year start date or end date is overlapping with {0}. To avoid please set company"
).format(existing.name),
frappe.NameError,
)
@@ -126,9 +126,9 @@ def check_duplicate_fiscal_year(doc):
not frappe.flags.in_test
):
frappe.throw(
_("Fiscal Year Start Date and Fiscal Year End Date are already set in Fiscal Year {0}").format(
fiscal_year
)
_(
"Fiscal Year Start Date and Fiscal Year End Date are already set in Fiscal Year {0}"
).format(fiscal_year)
)

View File

@@ -179,7 +179,8 @@
"fieldname": "voucher_detail_no",
"fieldtype": "Data",
"label": "Voucher Detail No",
"read_only": 1
"read_only": 1,
"search_index": 1
},
{
"fieldname": "project",
@@ -290,7 +291,7 @@
"idx": 1,
"in_create": 1,
"links": [],
"modified": "2023-12-18 15:38:14.006208",
"modified": "2024-07-02 14:31:51.496466",
"modified_by": "Administrator",
"module": "Accounts",
"name": "GL Entry",
@@ -322,7 +323,7 @@
],
"quick_entry": 1,
"search_fields": "voucher_no,account,posting_date,against_voucher",
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}
}

View File

@@ -32,8 +32,6 @@ class GLEntry(Document):
account: DF.Link | None
account_currency: DF.Link | None
against: DF.Text | None
against_link: DF.DynamicLink | None
against_type: DF.Link | None
against_voucher: DF.DynamicLink | None
against_voucher_type: DF.Link | None
company: DF.Link | None
@@ -107,13 +105,18 @@ class GLEntry(Document):
]:
# Update outstanding amt on against voucher
if (
self.against_voucher_type in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"]
self.against_voucher_type
in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"]
and self.against_voucher
and self.flags.update_outstanding == "Yes"
and not frappe.flags.is_reverse_depr_entry
):
update_outstanding_amt(
self.account, self.party_type, self.party, self.against_voucher_type, self.against_voucher
self.account,
self.party_type,
self.party,
self.against_voucher_type,
self.against_voucher,
)
def check_mandatory(self):
@@ -179,12 +182,13 @@ class GLEntry(Document):
and self.company == dimension.company
and dimension.mandatory_for_pl
and not dimension.disabled
and not self.is_cancelled
):
if not self.get(dimension.fieldname):
frappe.throw(
_("Accounting Dimension <b>{0}</b> is required for 'Profit and Loss' account {1}.").format(
dimension.label, self.account
)
_(
"Accounting Dimension <b>{0}</b> is required for 'Profit and Loss' account {1}."
).format(dimension.label, self.account)
)
if (
@@ -192,12 +196,13 @@ class GLEntry(Document):
and self.company == dimension.company
and dimension.mandatory_for_bs
and not dimension.disabled
and not self.is_cancelled
):
if not self.get(dimension.fieldname):
frappe.throw(
_("Accounting Dimension <b>{0}</b> is required for 'Balance Sheet' account {1}.").format(
dimension.label, self.account
)
_(
"Accounting Dimension <b>{0}</b> is required for 'Balance Sheet' account {1}."
).format(dimension.label, self.account)
)
def check_pl_account(self):
@@ -245,9 +250,7 @@ class GLEntry(Document):
if not self.cost_center:
return
is_group, company = frappe.get_cached_value(
"Cost Center", self.cost_center, ["is_group", "company"]
)
is_group, company = frappe.get_cached_value("Cost Center", self.cost_center, ["is_group", "company"])
if company != self.company:
frappe.throw(
@@ -316,31 +319,27 @@ def update_outstanding_amt(
account, party_type, party, against_voucher_type, against_voucher, on_cancel=False
):
if party_type and party:
party_condition = " and party_type={0} and party={1}".format(
party_condition = " and party_type={} and party={}".format(
frappe.db.escape(party_type), frappe.db.escape(party)
)
else:
party_condition = ""
if against_voucher_type == "Sales Invoice":
party_account = frappe.db.get_value(against_voucher_type, against_voucher, "debit_to")
account_condition = "and account in ({0}, {1})".format(
frappe.db.escape(account), frappe.db.escape(party_account)
)
party_account = frappe.get_cached_value(against_voucher_type, against_voucher, "debit_to")
account_condition = f"and account in ({frappe.db.escape(account)}, {frappe.db.escape(party_account)})"
else:
account_condition = " and account = {0}".format(frappe.db.escape(account))
account_condition = f" and account = {frappe.db.escape(account)}"
# get final outstanding amt
bal = flt(
frappe.db.sql(
"""
f"""
select sum(debit_in_account_currency) - sum(credit_in_account_currency)
from `tabGL Entry`
where against_voucher_type=%s and against_voucher=%s
and voucher_type != 'Invoice Discounting'
{0} {1}""".format(
party_condition, account_condition
),
{party_condition} {account_condition}""",
(against_voucher_type, against_voucher),
)[0][0]
or 0.0
@@ -351,12 +350,10 @@ def update_outstanding_amt(
elif against_voucher_type == "Journal Entry":
against_voucher_amount = flt(
frappe.db.sql(
"""
f"""
select sum(debit_in_account_currency) - sum(credit_in_account_currency)
from `tabGL Entry` where voucher_type = 'Journal Entry' and voucher_no = %s
and account = %s and (against_voucher is null or against_voucher='') {0}""".format(
party_condition
),
and account = %s and (against_voucher is null or against_voucher='') {party_condition}""",
(against_voucher, account),
)[0][0]
)
@@ -375,7 +372,9 @@ def update_outstanding_amt(
# Validation : Outstanding can not be negative for JV
if bal < 0 and not on_cancel:
frappe.throw(
_("Outstanding for {0} cannot be less than zero ({1})").format(against_voucher, fmt_money(bal))
_("Outstanding for {0} cannot be less than zero ({1})").format(
against_voucher, fmt_money(bal)
)
)
if against_voucher_type in ["Sales Invoice", "Purchase Invoice", "Fees"]:
@@ -391,7 +390,7 @@ def update_outstanding_amt(
def validate_frozen_account(account, adv_adj=None):
frozen_account = frappe.get_cached_value("Account", account, "freeze_account")
if frozen_account == "Yes" and not adv_adj:
frozen_accounts_modifier = frappe.db.get_value(
frozen_accounts_modifier = frappe.get_cached_value(
"Accounts Settings", None, "frozen_accounts_modifier"
)
@@ -448,7 +447,7 @@ def rename_temporarily_named_docs(doctype):
set_name_from_naming_options(frappe.get_meta(doctype).autoname, doc)
newname = doc.name
frappe.db.sql(
"UPDATE `tab{}` SET name = %s, to_rename = 0 where name = %s".format(doctype),
f"UPDATE `tab{doctype}` SET name = %s, to_rename = 0 where name = %s",
(newname, oldname),
auto_commit=True,
)

View File

@@ -14,9 +14,7 @@ from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journ
class TestGLEntry(unittest.TestCase):
def test_round_off_entry(self):
frappe.db.set_value("Company", "_Test Company", "round_off_account", "_Test Write Off - _TC")
frappe.db.set_value(
"Company", "_Test Company", "round_off_cost_center", "_Test Cost Center - _TC"
)
frappe.db.set_value("Company", "_Test Company", "round_off_cost_center", "_Test Cost Center - _TC")
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
@@ -73,7 +71,9 @@ class TestGLEntry(unittest.TestCase):
)
self.assertTrue(all(entry.to_rename == 0 for entry in new_gl_entries))
self.assertTrue(all(new.name != old.name for new, old in zip(gl_entries, new_gl_entries)))
self.assertTrue(
all(new.name != old.name for new, old in zip(gl_entries, new_gl_entries, strict=False))
)
new_naming_series_current_value = frappe.db.sql(
"SELECT current from tabSeries where name = %s", naming_series

View File

@@ -83,9 +83,7 @@ class InvoiceDiscounting(AccountsController):
frappe.throw(
_(
"Row({0}): Outstanding Amount cannot be greater than actual Outstanding Amount {1} in {2}"
).format(
record.idx, frappe.bold(actual_outstanding), frappe.bold(record.sales_invoice)
)
).format(record.idx, frappe.bold(actual_outstanding), frappe.bold(record.sales_invoice))
)
def calculate_total_amount(self):
@@ -105,7 +103,9 @@ class InvoiceDiscounting(AccountsController):
self.status = status
self.db_set("status", status)
for d in self.invoices:
frappe.get_doc("Sales Invoice", d.sales_invoice).set_status(update=True, update_modified=False)
frappe.get_doc("Sales Invoice", d.sales_invoice).set_status(
update=True, update_modified=False
)
else:
self.status = "Draft"
if self.docstatus == 1:

View File

@@ -75,8 +75,8 @@ class TestInvoiceDiscounting(unittest.TestCase):
gle = get_gl_entries("Invoice Discounting", inv_disc.name)
expected_gle = {inv.debit_to: [0.0, 200], self.ar_credit: [200, 0.0]}
for i, gle in enumerate(gle):
self.assertEqual([gle.debit, gle.credit], expected_gle.get(gle.account))
for _i, gle_value in enumerate(gle):
self.assertEqual([gle_value.debit, gle_value.credit], expected_gle.get(gle_value.account))
def test_loan_on_submit(self):
inv = create_sales_invoice(rate=300)
@@ -92,9 +92,7 @@ class TestInvoiceDiscounting(unittest.TestCase):
period=60,
)
self.assertEqual(inv_disc.status, "Sanctioned")
self.assertEqual(
inv_disc.loan_end_date, add_days(inv_disc.loan_start_date, inv_disc.loan_period)
)
self.assertEqual(inv_disc.loan_end_date, add_days(inv_disc.loan_start_date, inv_disc.loan_period))
def test_on_disbursed(self):
inv = create_sales_invoice(rate=500)
@@ -262,13 +260,9 @@ class TestInvoiceDiscounting(unittest.TestCase):
je_on_payment.submit()
self.assertEqual(je_on_payment.accounts[0].account, self.ar_discounted)
self.assertEqual(
je_on_payment.accounts[0].credit_in_account_currency, flt(inv.outstanding_amount)
)
self.assertEqual(je_on_payment.accounts[0].credit_in_account_currency, flt(inv.outstanding_amount))
self.assertEqual(je_on_payment.accounts[1].account, self.bank_account)
self.assertEqual(
je_on_payment.accounts[1].debit_in_account_currency, flt(inv.outstanding_amount)
)
self.assertEqual(je_on_payment.accounts[1].debit_in_account_currency, flt(inv.outstanding_amount))
inv.reload()
self.assertEqual(inv.outstanding_amount, 0)
@@ -304,13 +298,9 @@ class TestInvoiceDiscounting(unittest.TestCase):
je_on_payment.submit()
self.assertEqual(je_on_payment.accounts[0].account, self.ar_unpaid)
self.assertEqual(
je_on_payment.accounts[0].credit_in_account_currency, flt(inv.outstanding_amount)
)
self.assertEqual(je_on_payment.accounts[0].credit_in_account_currency, flt(inv.outstanding_amount))
self.assertEqual(je_on_payment.accounts[1].account, self.bank_account)
self.assertEqual(
je_on_payment.accounts[1].debit_in_account_currency, flt(inv.outstanding_amount)
)
self.assertEqual(je_on_payment.accounts[1].debit_in_account_currency, flt(inv.outstanding_amount))
inv.reload()
self.assertEqual(inv.outstanding_amount, 0)

View File

@@ -32,7 +32,7 @@ class ItemTaxTemplate(Document):
def autoname(self):
if self.company and self.title:
abbr = frappe.get_cached_value("Company", self.company, "abbr")
self.name = "{0} - {1}".format(self.title, abbr)
self.name = f"{self.title} - {abbr}"
def validate_tax_accounts(self):
"""Check whether Tax Rate is not entered twice for same Tax Type"""

View File

@@ -196,7 +196,7 @@ frappe.ui.form.on("Journal Entry", {
!(frm.doc.accounts || []).length ||
((frm.doc.accounts || []).length === 1 && !frm.doc.accounts[0].account)
) {
if (in_list(["Bank Entry", "Cash Entry"], frm.doc.voucher_type)) {
if (["Bank Entry", "Cash Entry"].includes(frm.doc.voucher_type)) {
return frappe.call({
type: "GET",
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_default_bank_cash_account",
@@ -308,7 +308,7 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
filters: [[jvd.reference_type, "docstatus", "=", 1]],
};
if (in_list(["Sales Invoice", "Purchase Invoice"], jvd.reference_type)) {
if (["Sales Invoice", "Purchase Invoice"].includes(jvd.reference_type)) {
out.filters.push([jvd.reference_type, "outstanding_amount", "!=", 0]);
// Filter by cost center
if (jvd.cost_center) {
@@ -320,7 +320,7 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
out.filters.push([jvd.reference_type, party_account_field, "=", jvd.account]);
}
if (in_list(["Sales Order", "Purchase Order"], jvd.reference_type)) {
if (["Sales Order", "Purchase Order"].includes(jvd.reference_type)) {
// party_type and party mandatory
frappe.model.validate_missing(jvd, "party_type");
frappe.model.validate_missing(jvd, "party");
@@ -453,7 +453,10 @@ frappe.ui.form.on("Journal Entry Account", {
}
},
cost_center: function (frm, dt, dn) {
erpnext.journal_entry.set_account_details(frm, dt, dn);
// Don't reset for Gain/Loss type journals, as it will make Debit and Credit values '0'
if (frm.doc.voucher_type != "Exchange Gain Or Loss") {
erpnext.journal_entry.set_account_details(frm, dt, dn);
}
},
account: function (frm, dt, dn) {

View File

@@ -6,7 +6,7 @@ import json
import frappe
from frappe import _, msgprint, scrub
from frappe.utils import cstr, flt, fmt_money, formatdate, get_link_to_form, nowdate
from frappe.utils import comma_and, cstr, flt, fmt_money, formatdate, get_link_to_form, nowdate
import erpnext
from erpnext.accounts.deferred_revenue import get_deferred_booking_accounts
@@ -112,7 +112,7 @@ class JournalEntry(AccountsController):
# end: auto-generated types
def __init__(self, *args, **kwargs):
super(JournalEntry, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def validate(self):
if self.voucher_type == "Opening Entry":
@@ -146,6 +146,7 @@ class JournalEntry(AccountsController):
self.validate_empty_accounts_table()
self.validate_inter_company_accounts()
self.validate_depr_entry_voucher_type()
self.validate_advance_accounts()
if self.docstatus == 0:
self.apply_tax_withholding()
@@ -153,6 +154,20 @@ class JournalEntry(AccountsController):
if not self.title:
self.title = self.get_title()
def validate_advance_accounts(self):
journal_accounts = set([x.account for x in self.accounts])
advance_accounts = set()
advance_accounts.add(
frappe.get_cached_value("Company", self.company, "default_advance_received_account")
)
advance_accounts.add(frappe.get_cached_value("Company", self.company, "default_advance_paid_account"))
if advance_accounts_used := journal_accounts & advance_accounts:
frappe.msgprint(
_(
"Making Journal Entries against advance accounts: {0} is not recommended. These Journals won't be available for Reconciliation."
).format(frappe.bold(comma_and(advance_accounts_used)))
)
def validate_for_repost(self):
validate_docs_for_voucher_types(["Journal Entry"])
validate_docs_for_deferred_accounting([self.name], [])
@@ -179,6 +194,7 @@ class JournalEntry(AccountsController):
self.update_asset_value()
self.update_inter_company_jv()
self.update_invoice_discounting()
self.update_booked_depreciation()
def on_update_after_submit(self):
if hasattr(self, "repost_required"):
@@ -188,10 +204,11 @@ class JournalEntry(AccountsController):
if self.needs_repost:
self.validate_for_repost()
self.db_set("repost_required", self.needs_repost)
self.repost_accounting_entries()
def on_cancel(self):
# References for this Journal are removed on the `on_cancel` event in accounts_controller
super(JournalEntry, self).on_cancel()
super().on_cancel()
self.ignore_linked_doctypes = (
"GL Entry",
"Stock Ledger Entry",
@@ -210,6 +227,7 @@ class JournalEntry(AccountsController):
self.unlink_inter_company_jv()
self.unlink_asset_adjustment_entry()
self.update_invoice_discounting()
self.update_booked_depreciation(1)
def get_title(self):
return self.pay_to_recd_from or self.accounts[0].account
@@ -226,10 +244,7 @@ class JournalEntry(AccountsController):
frappe.get_doc(voucher_type, voucher_no).set_total_advance_paid()
def validate_inter_company_accounts(self):
if (
self.voucher_type == "Inter Company Journal Entry"
and self.inter_company_journal_entry_reference
):
if self.voucher_type == "Inter Company Journal Entry" and self.inter_company_journal_entry_reference:
doc = frappe.get_doc("Journal Entry", self.inter_company_journal_entry_reference)
account_currency = frappe.get_cached_value("Company", self.company, "default_currency")
previous_account_currency = frappe.get_cached_value("Company", doc.company, "default_currency")
@@ -375,10 +390,7 @@ class JournalEntry(AccountsController):
asset.set_status()
def update_inter_company_jv(self):
if (
self.voucher_type == "Inter Company Journal Entry"
and self.inter_company_journal_entry_reference
):
if self.voucher_type == "Inter Company Journal Entry" and self.inter_company_journal_entry_reference:
frappe.db.set_value(
"Journal Entry",
self.inter_company_journal_entry_reference,
@@ -406,22 +418,49 @@ class JournalEntry(AccountsController):
if d.account == inv_disc_doc.short_term_loan and d.reference_name == inv_disc:
if self.docstatus == 1:
if d.credit > 0:
_validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Sanctioned", d.idx)
_validate_invoice_discounting_status(
inv_disc, inv_disc_doc.status, "Sanctioned", d.idx
)
status = "Disbursed"
elif d.debit > 0:
_validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Disbursed", d.idx)
_validate_invoice_discounting_status(
inv_disc, inv_disc_doc.status, "Disbursed", d.idx
)
status = "Settled"
else:
if d.credit > 0:
_validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Disbursed", d.idx)
_validate_invoice_discounting_status(
inv_disc, inv_disc_doc.status, "Disbursed", d.idx
)
status = "Sanctioned"
elif d.debit > 0:
_validate_invoice_discounting_status(inv_disc, inv_disc_doc.status, "Settled", d.idx)
_validate_invoice_discounting_status(
inv_disc, inv_disc_doc.status, "Settled", d.idx
)
status = "Disbursed"
break
if status:
inv_disc_doc.set_status(status=status)
def update_booked_depreciation(self, cancel=0):
for d in self.get("accounts"):
if (
self.voucher_type == "Depreciation Entry"
and d.reference_type == "Asset"
and d.reference_name
and frappe.get_cached_value("Account", d.account, "root_type") == "Expense"
and d.debit
):
asset = frappe.get_doc("Asset", d.reference_name)
for fb_row in asset.get("finance_books"):
if fb_row.finance_book == self.finance_book:
if cancel:
fb_row.total_number_of_booked_depreciations -= 1
else:
fb_row.total_number_of_booked_depreciations += 1
fb_row.db_update()
break
def unlink_advance_entry_reference(self):
for d in self.get("accounts"):
if d.is_advance == "Yes" and d.reference_type in ("Sales Invoice", "Purchase Invoice"):
@@ -437,7 +476,7 @@ class JournalEntry(AccountsController):
self.voucher_type == "Depreciation Entry"
and d.reference_type == "Asset"
and d.reference_name
and d.account_type == "Depreciation"
and frappe.get_cached_value("Account", d.account, "root_type") == "Expense"
and d.debit
):
asset = frappe.get_doc("Asset", d.reference_name)
@@ -485,10 +524,7 @@ class JournalEntry(AccountsController):
)
def unlink_inter_company_jv(self):
if (
self.voucher_type == "Inter Company Journal Entry"
and self.inter_company_journal_entry_reference
):
if self.voucher_type == "Inter Company Journal Entry" and self.inter_company_journal_entry_reference:
frappe.db.set_value(
"Journal Entry",
self.inter_company_journal_entry_reference,
@@ -510,9 +546,9 @@ class JournalEntry(AccountsController):
if account_type in ["Receivable", "Payable"]:
if not (d.party_type and d.party):
frappe.throw(
_("Row {0}: Party Type and Party is required for Receivable / Payable account {1}").format(
d.idx, d.account
)
_(
"Row {0}: Party Type and Party is required for Receivable / Payable account {1}"
).format(d.idx, d.account)
)
elif (
d.party_type
@@ -577,16 +613,18 @@ class JournalEntry(AccountsController):
def system_generated_gain_loss(self):
return (
self.voucher_type == "Exchange Gain Or Loss"
and self.multi_currency
and self.is_system_generated
self.voucher_type == "Exchange Gain Or Loss" and self.multi_currency and self.is_system_generated
)
def validate_against_jv(self):
for d in self.get("accounts"):
if d.reference_type == "Journal Entry":
account_root_type = frappe.get_cached_value("Account", d.account, "root_type")
if account_root_type == "Asset" and flt(d.debit) > 0 and not self.system_generated_gain_loss():
if (
account_root_type == "Asset"
and flt(d.debit) > 0
and not self.system_generated_gain_loss()
):
frappe.throw(
_(
"Row #{0}: For {1}, you can select reference document only if account gets credited"
@@ -668,11 +706,13 @@ class JournalEntry(AccountsController):
if d.reference_type == "Purchase Order" and flt(d.credit) > 0:
frappe.throw(
_("Row {0}: Credit entry can not be linked with a {1}").format(d.idx, d.reference_type)
_("Row {0}: Credit entry can not be linked with a {1}").format(
d.idx, d.reference_type
)
)
# set totals
if not d.reference_name in self.reference_totals:
if d.reference_name not in self.reference_totals:
self.reference_totals[d.reference_name] = 0.0
if self.voucher_type not in ("Deferred Revenue", "Deferred Expense"):
@@ -690,7 +730,10 @@ class JournalEntry(AccountsController):
# check if party and account match
if d.reference_type in ("Sales Invoice", "Purchase Invoice"):
if self.voucher_type in ("Deferred Revenue", "Deferred Expense") and d.reference_detail_no:
if (
self.voucher_type in ("Deferred Revenue", "Deferred Expense")
and d.reference_detail_no
):
debit_or_credit = "Debit" if d.debit else "Credit"
party_account = get_deferred_booking_accounts(
d.reference_type, d.reference_detail_no, debit_or_credit
@@ -699,7 +742,8 @@ class JournalEntry(AccountsController):
else:
if d.reference_type == "Sales Invoice":
party_account = (
get_party_account_based_on_invoice_discounting(d.reference_name) or against_voucher[1]
get_party_account_based_on_invoice_discounting(d.reference_name)
or against_voucher[1]
)
else:
party_account = against_voucher[1]
@@ -823,7 +867,9 @@ class JournalEntry(AccountsController):
if not (self.voucher_type == "Exchange Gain Or Loss" and self.multi_currency):
if self.difference:
frappe.throw(
_("Total Debit must be equal to Total Credit. The difference is {0}").format(self.difference)
_("Total Debit must be equal to Total Credit. The difference is {0}").format(
self.difference
)
)
def set_total_debit_credit(self):
@@ -887,7 +933,6 @@ class JournalEntry(AccountsController):
and self.posting_date
)
):
ignore_exchange_rate = False
if self.get("flags") and self.flags.get("ignore_exchange_rate"):
ignore_exchange_rate = True
@@ -1008,6 +1053,17 @@ class JournalEntry(AccountsController):
def build_gl_map(self):
gl_map = []
company_currency = erpnext.get_company_currency(self.company)
if self.multi_currency:
for row in self.get("accounts"):
if row.account_currency != company_currency:
self.currency = row.account_currency
self.conversion_rate = row.exchange_rate
break
else:
self.currency = company_currency
for d in self.get("accounts"):
if d.debit or d.credit or (self.voucher_type == "Exchange Gain Or Loss"):
r = [d.user_remark, self.remark]
@@ -1133,27 +1189,21 @@ class JournalEntry(AccountsController):
self.validate_total_debit_and_credit()
def get_values(self):
cond = (
" and outstanding_amount <= {0}".format(self.write_off_amount)
if flt(self.write_off_amount) > 0
else ""
)
cond = f" and outstanding_amount <= {self.write_off_amount}" if flt(self.write_off_amount) > 0 else ""
if self.write_off_based_on == "Accounts Receivable":
return frappe.db.sql(
"""select name, debit_to as account, customer as party, outstanding_amount
from `tabSales Invoice` where docstatus = 1 and company = %s
and outstanding_amount > 0 %s"""
% ("%s", cond),
from `tabSales Invoice` where docstatus = 1 and company = {}
and outstanding_amount > 0 {}""".format("%s", cond),
self.company,
as_dict=True,
)
elif self.write_off_based_on == "Accounts Payable":
return frappe.db.sql(
"""select name, credit_to as account, supplier as party, outstanding_amount
from `tabPurchase Invoice` where docstatus = 1 and company = %s
and outstanding_amount > 0 %s"""
% ("%s", cond),
from `tabPurchase Invoice` where docstatus = 1 and company = {}
and outstanding_amount > 0 {}""".format("%s", cond),
self.company,
as_dict=True,
)
@@ -1262,7 +1312,7 @@ def get_payment_entry_against_order(
"amount_field_bank": amount_field_bank,
"amount": amount,
"debit_in_account_currency": debit_in_account_currency,
"remarks": "Advance Payment received against {0} {1}".format(dt, dn),
"remarks": f"Advance Payment received against {dt} {dn}",
"is_advance": "Yes",
"bank_account": bank_account,
"journal_entry": journal_entry,
@@ -1301,7 +1351,7 @@ def get_payment_entry_against_invoice(
"amount_field_bank": amount_field_bank,
"amount": amount if amount else abs(ref_doc.outstanding_amount),
"debit_in_account_currency": debit_in_account_currency,
"remarks": "Payment received against {0} {1}. {2}".format(dt, dn, ref_doc.remarks),
"remarks": f"Payment received against {dt} {dn}. {ref_doc.remarks}",
"is_advance": "No",
"bank_account": bank_account,
"journal_entry": journal_entry,
@@ -1327,9 +1377,7 @@ def get_payment_entry(ref_doc, args):
)
je = frappe.new_doc("Journal Entry")
je.update(
{"voucher_type": "Bank Entry", "company": ref_doc.company, "remark": args.get("remarks")}
)
je.update({"voucher_type": "Bank Entry", "company": ref_doc.company, "remark": args.get("remarks")})
party_row = je.append(
"accounts",
@@ -1352,9 +1400,7 @@ def get_payment_entry(ref_doc, args):
bank_row = je.append("accounts")
# Make it bank_details
bank_account = get_default_bank_cash_account(
ref_doc.company, "Bank", account=args.get("bank_account")
)
bank_account = get_default_bank_cash_account(ref_doc.company, "Bank", account=args.get("bank_account"))
if bank_account:
bank_row.update(bank_account)
# Modified to include the posting date for which the exchange rate is required.
@@ -1394,7 +1440,7 @@ def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
return []
return frappe.db.sql(
"""
f"""
SELECT jv.name, jv.posting_date, jv.user_remark
FROM `tabJournal Entry` jv, `tabJournal Entry Account` jv_detail
WHERE jv_detail.parent = jv.name
@@ -1405,16 +1451,14 @@ def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
OR jv_detail.reference_type = ''
)
AND jv.docstatus = 1
AND jv.`{0}` LIKE %(txt)s
AND jv.`{searchfield}` LIKE %(txt)s
ORDER BY jv.name DESC
LIMIT %(limit)s offset %(offset)s
""".format(
searchfield
),
""",
dict(
account=filters.get("account"),
party=cstr(filters.get("party")),
txt="%{0}%".format(txt),
txt=f"%{txt}%",
offset=start,
limit=page_len,
),
@@ -1436,19 +1480,15 @@ def get_outstanding(args):
condition = " and party=%(party)s" if args.get("party") else ""
against_jv_amount = frappe.db.sql(
"""
f"""
select sum(debit_in_account_currency) - sum(credit_in_account_currency)
from `tabJournal Entry Account` where parent=%(docname)s and account=%(account)s {0}
and (reference_type is null or reference_type = '')""".format(
condition
),
from `tabJournal Entry Account` where parent=%(docname)s and account=%(account)s {condition}
and (reference_type is null or reference_type = '')""",
args,
)
against_jv_amount = flt(against_jv_amount[0][0]) if against_jv_amount else 0
amount_field = (
"credit_in_account_currency" if against_jv_amount > 0 else "debit_in_account_currency"
)
amount_field = "credit_in_account_currency" if against_jv_amount > 0 else "debit_in_account_currency"
return {amount_field: abs(against_jv_amount)}
elif args.get("doctype") in ("Sales Invoice", "Purchase Invoice"):
party_type = "Customer" if args.get("doctype") == "Sales Invoice" else "Supplier"
@@ -1461,9 +1501,7 @@ def get_outstanding(args):
due_date = invoice.get("due_date")
exchange_rate = (
invoice.conversion_rate if (args.get("account_currency") != company_currency) else 1
)
exchange_rate = invoice.conversion_rate if (args.get("account_currency") != company_currency) else 1
if args["doctype"] == "Sales Invoice":
amount_field = (
@@ -1501,9 +1539,7 @@ def get_party_account_and_currency(company, party_type, party):
@frappe.whitelist()
def get_account_details_and_party_type(
account, date, company, debit=None, credit=None, exchange_rate=None
):
def get_account_details_and_party_type(account, date, company, debit=None, credit=None, exchange_rate=None):
"""Returns dict of account details and party type to be set in Journal Entry on selection of account."""
if not frappe.has_permission("Account"):
frappe.msgprint(_("No Permission"), raise_exception=1)

View File

@@ -69,10 +69,8 @@ class TestJournalEntry(unittest.TestCase):
self.assertTrue(
frappe.db.sql(
"""select name from `tabJournal Entry Account`
where reference_type = %s and reference_name = %s and {0}=400""".format(
dr_or_cr
),
f"""select name from `tabJournal Entry Account`
where reference_type = %s and reference_name = %s and {dr_or_cr}=400""",
(submitted_voucher.doctype, submitted_voucher.name),
)
)
@@ -84,9 +82,8 @@ class TestJournalEntry(unittest.TestCase):
def advance_paid_testcase(self, base_jv, test_voucher, dr_or_cr):
# Test advance paid field
advance_paid = frappe.db.sql(
"""select advance_paid from `tab%s`
where name=%s"""
% (test_voucher.doctype, "%s"),
"""select advance_paid from `tab{}`
where name={}""".format(test_voucher.doctype, "%s"),
(test_voucher.name),
)
payment_against_order = base_jv.get("accounts")[0].get(dr_or_cr)
@@ -159,9 +156,7 @@ class TestJournalEntry(unittest.TestCase):
jv.cancel()
def test_multi_currency(self):
jv = make_journal_entry(
"_Test Bank USD - _TC", "_Test Bank - _TC", 100, exchange_rate=50, save=False
)
jv = make_journal_entry("_Test Bank USD - _TC", "_Test Bank - _TC", 100, exchange_rate=50, save=False)
jv.get("accounts")[1].credit_in_account_currency = 5000
jv.submit()
@@ -459,12 +454,9 @@ class TestJournalEntry(unittest.TestCase):
# Change cost center for bank account - _Test Cost Center for BS Account
create_cost_center(cost_center_name="_Test Cost Center for BS Account", company="_Test Company")
jv.accounts[1].cost_center = "_Test Cost Center for BS Account - _TC"
# Ledger reposted implicitly upon 'Update After Submit'
jv.save()
# Check if repost flag gets set on update after submit
self.assertTrue(jv.repost_required)
jv.repost_accounting_entries()
# Check GL entries after reposting
jv.load_from_db()
self.expected_gle[0]["cost_center"] = "_Test Cost Center for BS Account - _TC"
@@ -477,9 +469,7 @@ class TestJournalEntry(unittest.TestCase):
query = query.select(gl[field])
query = query.where(
(gl.voucher_type == "Journal Entry")
& (gl.voucher_no == self.voucher_no)
& (gl.is_cancelled == 0)
(gl.voucher_type == "Journal Entry") & (gl.voucher_no == self.voucher_no) & (gl.is_cancelled == 0)
).orderby(gl.account)
gl_entries = query.run(as_dict=True)
@@ -488,6 +478,43 @@ class TestJournalEntry(unittest.TestCase):
for field in self.fields:
self.assertEqual(self.expected_gle[i][field], gl_entries[i][field])
def test_negative_debit_and_credit_with_same_account_head(self):
from erpnext.accounts.general_ledger import process_gl_map
# Create JV with defaut cost center - _Test Cost Center
frappe.db.set_single_value("Accounts Settings", "merge_similar_account_heads", 0)
jv = make_journal_entry("_Test Bank - _TC", "_Test Bank - _TC", 100 * -1, save=True)
jv.append(
"accounts",
{
"account": "_Test Cash - _TC",
"debit": 100 * -1,
"credit": 100 * -1,
"debit_in_account_currency": 100 * -1,
"credit_in_account_currency": 100 * -1,
"exchange_rate": 1,
},
)
jv.flags.ignore_validate = True
jv.save()
self.assertEqual(len(jv.accounts), 3)
gl_map = jv.build_gl_map()
for row in gl_map:
if row.account == "_Test Cash - _TC":
self.assertEqual(row.debit_in_account_currency, 100 * -1)
self.assertEqual(row.credit_in_account_currency, 100 * -1)
gl_map = process_gl_map(gl_map, False)
for row in gl_map:
if row.account == "_Test Cash - _TC":
self.assertEqual(row.debit_in_account_currency, 100)
self.assertEqual(row.credit_in_account_currency, 100)
def make_journal_entry(
account1,

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
// frappe.ui.form.on("Ledger Health", {
// refresh(frm) {
// },
// });

View File

@@ -0,0 +1,70 @@
{
"actions": [],
"autoname": "autoincrement",
"creation": "2024-03-26 17:01:47.443986",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"voucher_type",
"voucher_no",
"checked_on",
"debit_credit_mismatch",
"general_and_payment_ledger_mismatch"
],
"fields": [
{
"fieldname": "voucher_type",
"fieldtype": "Data",
"label": "Voucher Type"
},
{
"fieldname": "voucher_no",
"fieldtype": "Data",
"label": "Voucher No"
},
{
"default": "0",
"fieldname": "debit_credit_mismatch",
"fieldtype": "Check",
"label": "Debit-Credit mismatch"
},
{
"fieldname": "checked_on",
"fieldtype": "Datetime",
"label": "Checked On"
},
{
"default": "0",
"fieldname": "general_and_payment_ledger_mismatch",
"fieldtype": "Check",
"label": "General and Payment Ledger mismatch"
}
],
"in_create": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2024-04-09 11:16:07.044484",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Ledger Health",
"naming_rule": "Autoincrement",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"read_only": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@@ -0,0 +1,25 @@
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class LedgerHealth(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
checked_on: DF.Datetime | None
debit_credit_mismatch: DF.Check
general_and_payment_ledger_mismatch: DF.Check
name: DF.Int | None
voucher_no: DF.Data | None
voucher_type: DF.Data | None
# end: auto-generated types
pass

View File

@@ -0,0 +1,109 @@
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
import frappe
from frappe import qb
from frappe.tests.utils import FrappeTestCase
from frappe.utils import nowdate
from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
from erpnext.accounts.utils import run_ledger_health_checks
class TestLedgerHealth(AccountsTestMixin, FrappeTestCase):
def setUp(self):
self.create_company()
self.create_customer()
self.configure_monitoring_tool()
self.clear_old_entries()
def tearDown(self):
frappe.db.rollback()
def configure_monitoring_tool(self):
monitor_settings = frappe.get_doc("Ledger Health Monitor")
monitor_settings.enable_health_monitor = True
monitor_settings.enable_for_last_x_days = 60
monitor_settings.debit_credit_mismatch = True
monitor_settings.general_and_payment_ledger_mismatch = True
exists = [x for x in monitor_settings.companies if x.company == self.company]
if not exists:
monitor_settings.append("companies", {"company": self.company})
monitor_settings.save()
def clear_old_entries(self):
super().clear_old_entries()
lh = qb.DocType("Ledger Health")
qb.from_(lh).delete().run()
def create_journal(self):
je = frappe.new_doc("Journal Entry")
je.company = self.company
je.voucher_type = "Journal Entry"
je.posting_date = nowdate()
je.append(
"accounts",
{
"account": self.debit_to,
"party_type": "Customer",
"party": self.customer,
"debit_in_account_currency": 10000,
},
)
je.append("accounts", {"account": self.income_account, "credit_in_account_currency": 10000})
je.save().submit()
self.je = je
def test_debit_credit_mismatch(self):
self.create_journal()
# manually cause debit-credit mismatch
gle = frappe.db.get_all(
"GL Entry", filters={"voucher_no": self.je.name, "account": self.income_account}
)[0]
frappe.db.set_value("GL Entry", gle.name, "credit", 8000)
run_ledger_health_checks()
expected = {
"voucher_type": self.je.doctype,
"voucher_no": self.je.name,
"debit_credit_mismatch": True,
"general_and_payment_ledger_mismatch": False,
}
actual = frappe.db.get_all(
"Ledger Health",
fields=[
"voucher_type",
"voucher_no",
"debit_credit_mismatch",
"general_and_payment_ledger_mismatch",
],
)
self.assertEqual(len(actual), 1)
self.assertEqual(expected, actual[0])
def test_gl_and_pl_mismatch(self):
self.create_journal()
# manually cause GL and PL discrepancy
ple = frappe.db.get_all("Payment Ledger Entry", filters={"voucher_no": self.je.name})[0]
frappe.db.set_value("Payment Ledger Entry", ple.name, "amount", 11000)
run_ledger_health_checks()
expected = {
"voucher_type": self.je.doctype,
"voucher_no": self.je.name,
"debit_credit_mismatch": False,
"general_and_payment_ledger_mismatch": True,
}
actual = frappe.db.get_all(
"Ledger Health",
fields=[
"voucher_type",
"voucher_no",
"debit_credit_mismatch",
"general_and_payment_ledger_mismatch",
],
)
self.assertEqual(len(actual), 1)
self.assertEqual(expected, actual[0])

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
// frappe.ui.form.on("Ledger Health Monitor", {
// refresh(frm) {
// },
// });

View File

@@ -0,0 +1,104 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2024-03-27 09:38:07.427997",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"enable_health_monitor",
"monitor_section",
"monitor_for_last_x_days",
"debit_credit_mismatch",
"general_and_payment_ledger_mismatch",
"section_break_xdsp",
"companies"
],
"fields": [
{
"default": "0",
"fieldname": "enable_health_monitor",
"fieldtype": "Check",
"label": "Enable Health Monitor"
},
{
"fieldname": "monitor_section",
"fieldtype": "Section Break",
"label": "Configuration"
},
{
"default": "0",
"fieldname": "debit_credit_mismatch",
"fieldtype": "Check",
"label": "Debit-Credit Mismatch"
},
{
"default": "0",
"fieldname": "general_and_payment_ledger_mismatch",
"fieldtype": "Check",
"label": "Discrepancy between General and Payment Ledger"
},
{
"default": "60",
"fieldname": "monitor_for_last_x_days",
"fieldtype": "Int",
"in_list_view": 1,
"label": "Monitor for Last 'X' days",
"reqd": 1
},
{
"fieldname": "section_break_xdsp",
"fieldtype": "Section Break",
"label": "Companies"
},
{
"fieldname": "companies",
"fieldtype": "Table",
"options": "Ledger Health Monitor Company"
}
],
"hide_toolbar": 1,
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2024-03-27 10:14:16.511681",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Ledger Health Monitor",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"print": 1,
"read": 1,
"role": "System Manager",
"share": 1,
"write": 1
},
{
"create": 1,
"delete": 1,
"email": 1,
"print": 1,
"read": 1,
"role": "Accounts Manager",
"share": 1,
"write": 1
},
{
"create": 1,
"delete": 1,
"email": 1,
"print": 1,
"read": 1,
"role": "Accounts User",
"share": 1,
"write": 1
}
],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -0,0 +1,28 @@
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class LedgerHealthMonitor(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
from erpnext.accounts.doctype.ledger_health_monitor_company.ledger_health_monitor_company import (
LedgerHealthMonitorCompany,
)
companies: DF.Table[LedgerHealthMonitorCompany]
debit_credit_mismatch: DF.Check
enable_health_monitor: DF.Check
general_and_payment_ledger_mismatch: DF.Check
monitor_for_last_x_days: DF.Int
# end: auto-generated types
pass

View File

@@ -0,0 +1,9 @@
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
# import frappe
from frappe.tests.utils import FrappeTestCase
class TestLedgerHealthMonitor(FrappeTestCase):
pass

View File

@@ -0,0 +1,32 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2024-03-27 10:04:45.727054",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"company"
],
"fields": [
{
"fieldname": "company",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company",
"options": "Company"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2024-03-27 10:06:22.806155",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Ledger Health Monitor Company",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@@ -0,0 +1,23 @@
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class LedgerHealthMonitorCompany(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
company: DF.Link | None
parent: DF.Data
parentfield: DF.Data
parenttype: DF.Data
# end: auto-generated types
pass

View File

@@ -83,7 +83,10 @@ class TestLedgerMerge(unittest.TestCase):
"account": "Indirect Income - _TC",
"merge_accounts": [
{"account": "Indirect Test Income - _TC", "account_name": "Indirect Test Income"},
{"account": "Administrative Test Income - _TC", "account_name": "Administrative Test Income"},
{
"account": "Administrative Test Income - _TC",
"account_name": "Administrative Test Income",
},
],
}
).insert(ignore_permissions=True)

View File

@@ -52,13 +52,11 @@ def get_loyalty_details(
condition += " and expiry_date>='%s' " % expiry_date
loyalty_point_details = frappe.db.sql(
"""select sum(loyalty_points) as loyalty_points,
f"""select sum(loyalty_points) as loyalty_points,
sum(purchase_amount) as total_spent from `tabLoyalty Point Entry`
where customer=%s and loyalty_program=%s and posting_date <= %s
{condition}
group by customer""".format(
condition=condition
),
group by customer""",
(customer, loyalty_program, expiry_date),
as_dict=1,
)
@@ -79,9 +77,7 @@ def get_loyalty_program_details_with_points(
include_expired_entry=False,
current_transaction_amount=0,
):
lp_details = get_loyalty_program_details(
customer, loyalty_program, company=company, silent=silent
)
lp_details = get_loyalty_program_details(customer, loyalty_program, company=company, silent=silent)
loyalty_program = frappe.get_doc("Loyalty Program", loyalty_program)
lp_details.update(
get_loyalty_details(customer, loyalty_program.name, expiry_date, company, include_expired_entry)

View File

@@ -19,9 +19,7 @@ class TestLoyaltyProgram(unittest.TestCase):
create_records()
def test_loyalty_points_earned_single_tier(self):
frappe.db.set_value(
"Customer", "Test Loyalty Customer", "loyalty_program", "Test Single Loyalty"
)
frappe.db.set_value("Customer", "Test Loyalty Customer", "loyalty_program", "Test Single Loyalty")
# create a new sales invoice
si_original = create_sales_invoice_record()
si_original.insert()
@@ -69,9 +67,7 @@ class TestLoyaltyProgram(unittest.TestCase):
d.cancel()
def test_loyalty_points_earned_multiple_tier(self):
frappe.db.set_value(
"Customer", "Test Loyalty Customer", "loyalty_program", "Test Multiple Loyalty"
)
frappe.db.set_value("Customer", "Test Loyalty Customer", "loyalty_program", "Test Multiple Loyalty")
# assign multiple tier program to the customer
customer = frappe.get_doc("Customer", {"customer_name": "Test Loyalty Customer"})
customer.loyalty_program = frappe.get_doc(
@@ -128,9 +124,7 @@ class TestLoyaltyProgram(unittest.TestCase):
def test_cancel_sales_invoice(self):
"""cancelling the sales invoice should cancel the earned points"""
frappe.db.set_value(
"Customer", "Test Loyalty Customer", "loyalty_program", "Test Single Loyalty"
)
frappe.db.set_value("Customer", "Test Loyalty Customer", "loyalty_program", "Test Single Loyalty")
# create a new sales invoice
si = create_sales_invoice_record()
si.insert()
@@ -140,7 +134,7 @@ class TestLoyaltyProgram(unittest.TestCase):
"Loyalty Point Entry",
{"invoice_type": "Sales Invoice", "invoice": si.name, "customer": si.customer},
)
self.assertEqual(True, not (lpe is None))
self.assertEqual(True, lpe is not None)
# cancelling sales invoice
si.cancel()
@@ -148,9 +142,7 @@ class TestLoyaltyProgram(unittest.TestCase):
self.assertEqual(True, (lpe is None))
def test_sales_invoice_return(self):
frappe.db.set_value(
"Customer", "Test Loyalty Customer", "loyalty_program", "Test Single Loyalty"
)
frappe.db.set_value("Customer", "Test Loyalty Customer", "loyalty_program", "Test Single Loyalty")
# create a new sales invoice
si_original = create_sales_invoice_record(2)
si_original.conversion_rate = flt(1)
@@ -346,9 +338,7 @@ def create_records():
).insert()
# create item price
if not frappe.db.exists(
"Item Price", {"price_list": "Standard Selling", "item_code": "Loyal Item"}
):
if not frappe.db.exists("Item Price", {"price_list": "Standard Selling", "item_code": "Loyal Item"}):
frappe.get_doc(
{
"doctype": "Item Price",

View File

@@ -54,9 +54,7 @@ class MonthlyDistribution(Document):
total = sum(flt(d.percentage_allocation) for d in self.get("percentages"))
if flt(total, 2) != 100.0:
frappe.throw(
_("Percentage Allocation should be equal to 100%") + " ({0}%)".format(str(flt(total, 2)))
)
frappe.throw(_("Percentage Allocation should be equal to 100%") + f" ({flt(total, 2)!s}%)")
def get_periodwise_distribution_data(distribution_id, period_list, periodicity):

View File

@@ -83,9 +83,7 @@ class TestOpeningInvoiceCreationTool(FrappeTestCase):
company = "_Test Opening Invoice Company"
party_1, party_2 = make_customer("Customer A"), make_customer("Customer B")
old_default_receivable_account = frappe.db.get_value(
"Company", company, "default_receivable_account"
)
old_default_receivable_account = frappe.db.get_value("Company", company, "default_receivable_account")
frappe.db.set_value("Company", company, "default_receivable_account", "")
if not frappe.db.exists("Cost Center", "_Test Opening Invoice Company - _TOIC"):
@@ -121,9 +119,7 @@ class TestOpeningInvoiceCreationTool(FrappeTestCase):
self.assertTrue(error_log)
# teardown
frappe.db.set_value(
"Company", company, "default_receivable_account", old_default_receivable_account
)
frappe.db.set_value("Company", company, "default_receivable_account", old_default_receivable_account)
def test_renaming_of_invoice_using_invoice_number_field(self):
company = "_Test Opening Invoice Company"
@@ -169,7 +165,7 @@ def get_opening_invoice_creation_dict(**args):
{
"qty": 1.0,
"outstanding_amount": 300,
"party": args.get("party_1") or "_Test {0}".format(party),
"party": args.get("party_1") or f"_Test {party}",
"item_name": "Opening Item",
"due_date": "2016-09-10",
"posting_date": "2016-09-05",
@@ -179,7 +175,7 @@ def get_opening_invoice_creation_dict(**args):
{
"qty": 2.0,
"outstanding_amount": 250,
"party": args.get("party_2") or "_Test {0} 1".format(party),
"party": args.get("party_2") or f"_Test {party} 1",
"item_name": "Opening Item",
"due_date": "2016-09-10",
"posting_date": "2016-09-05",

View File

@@ -38,7 +38,10 @@ class PartyLink(Document):
if existing_party_link:
frappe.throw(
_("{} {} is already linked with {} {}").format(
self.primary_role, bold(self.primary_party), self.secondary_role, bold(self.secondary_party)
self.primary_role,
bold(self.primary_party),
self.secondary_role,
bold(self.secondary_party),
)
)

View File

@@ -32,7 +32,7 @@ frappe.ui.form.on("Payment Entry", {
frm.set_query("paid_from", function () {
frm.events.validate_company(frm);
var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type)
var account_types = ["Pay", "Internal Transfer"].includes(frm.doc.payment_type)
? ["Bank", "Cash"]
: [frappe.boot.party_account_types[frm.doc.party_type]];
return {
@@ -87,7 +87,7 @@ frappe.ui.form.on("Payment Entry", {
frm.set_query("paid_to", function () {
frm.events.validate_company(frm);
var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type)
var account_types = ["Receive", "Internal Transfer"].includes(frm.doc.payment_type)
? ["Bank", "Cash"]
: [frappe.boot.party_account_types[frm.doc.party_type]];
return {
@@ -134,7 +134,7 @@ frappe.ui.form.on("Payment Entry", {
frm.set_query("payment_term", "references", function (frm, cdt, cdn) {
const child = locals[cdt][cdn];
if (
in_list(["Purchase Invoice", "Sales Invoice"], child.reference_doctype) &&
["Purchase Invoice", "Sales Invoice"].includes(child.reference_doctype) &&
child.reference_name
) {
return {
@@ -395,10 +395,6 @@ frappe.ui.form.on("Payment Entry", {
return {
query: "erpnext.controllers.queries.employee_query",
};
} else if (frm.doc.party_type == "Customer") {
return {
query: "erpnext.controllers.queries.customer_query",
};
}
});
@@ -474,6 +470,9 @@ frappe.ui.form.on("Payment Entry", {
() => frm.events.set_dynamic_labels(frm),
() => {
frm.set_party_account_based_on_party = false;
if (r.message.party_bank_account) {
frm.set_value("party_bank_account", r.message.party_bank_account);
}
if (r.message.bank_account) {
frm.set_value("bank_account", r.message.bank_account);
}
@@ -627,7 +626,7 @@ frappe.ui.form.on("Payment Entry", {
if (frm.doc.paid_from_account_currency == company_currency) {
frm.set_value("source_exchange_rate", 1);
} else if (frm.doc.paid_from) {
if (in_list(["Internal Transfer", "Pay"], frm.doc.payment_type)) {
if (["Internal Transfer", "Pay"].includes(frm.doc.payment_type)) {
let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
frappe.call({
method: "erpnext.setup.utils.get_exchange_rate",
@@ -1046,7 +1045,7 @@ frappe.ui.form.on("Payment Entry", {
}
var allocated_positive_outstanding = paid_amount + allocated_negative_outstanding;
} else if (in_list(["Customer", "Supplier"], frm.doc.party_type)) {
} else if (["Customer", "Supplier"].includes(frm.doc.party_type)) {
total_negative_outstanding = flt(total_negative_outstanding, precision("outstanding_amount"));
if (paid_amount > total_negative_outstanding) {
if (total_negative_outstanding == 0) {
@@ -1217,7 +1216,7 @@ frappe.ui.form.on("Payment Entry", {
if (
frm.doc.party_type == "Customer" &&
!in_list(["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"], row.reference_doctype)
!["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"].includes(row.reference_doctype)
) {
frappe.model.set_value(row.doctype, row.name, "reference_doctype", null);
frappe.msgprint(
@@ -1231,7 +1230,7 @@ frappe.ui.form.on("Payment Entry", {
if (
frm.doc.party_type == "Supplier" &&
!in_list(["Purchase Order", "Purchase Invoice", "Journal Entry"], row.reference_doctype)
!["Purchase Order", "Purchase Invoice", "Journal Entry"].includes(row.reference_doctype)
) {
frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
frappe.msgprint(
@@ -1327,7 +1326,7 @@ frappe.ui.form.on("Payment Entry", {
bank_account: function (frm) {
const field = frm.doc.payment_type == "Pay" ? "paid_from" : "paid_to";
if (frm.doc.bank_account && in_list(["Pay", "Receive"], frm.doc.payment_type)) {
if (frm.doc.bank_account && ["Pay", "Receive"].includes(frm.doc.payment_type)) {
frappe.call({
method: "erpnext.accounts.doctype.bank_account.bank_account.get_bank_account_details",
args: {
@@ -1335,7 +1334,9 @@ frappe.ui.form.on("Payment Entry", {
},
callback: function (r) {
if (r.message) {
frm.set_value(field, r.message.account);
if (!frm.doc.mode_of_payment) {
frm.set_value(field, r.message.account);
}
frm.set_value("bank", r.message.bank);
frm.set_value("bank_account_no", r.message.bank_account_no);
}
@@ -1666,6 +1667,8 @@ frappe.ui.form.on("Payment Entry Reference", {
frm.doc.payment_type == "Receive"
? frm.doc.paid_from_account_currency
: frm.doc.paid_to_account_currency,
party_type: frm.doc.party_type,
party: frm.doc.party,
},
callback: function (r, rt) {
if (r.message) {

View File

@@ -20,6 +20,7 @@
"party",
"party_name",
"book_advance_payments_in_separate_party_account",
"reconcile_on_advance_payment_date",
"column_break_11",
"bank_account",
"party_bank_account",
@@ -88,6 +89,7 @@
"custom_remarks",
"remarks",
"base_in_words",
"is_opening",
"column_break_16",
"letter_head",
"print_heading",
@@ -150,6 +152,7 @@
"reqd": 1
},
{
"allow_on_submit": 1,
"fieldname": "cost_center",
"fieldtype": "Link",
"label": "Cost Center",
@@ -476,6 +479,7 @@
"label": "More Information"
},
{
"allow_on_submit": 1,
"fieldname": "project",
"fieldtype": "Link",
"label": "Project",
@@ -579,6 +583,7 @@
"fieldtype": "Select",
"hidden": 1,
"label": "Payment Order Status",
"no_copy": 1,
"options": "Initiated\nPayment Ordered",
"read_only": 1
},
@@ -747,6 +752,7 @@
"fieldtype": "Check",
"hidden": 1,
"label": "Book Advance Payments in Separate Party Account",
"no_copy": 1,
"read_only": 1
},
{
@@ -762,6 +768,26 @@
"label": "In Words",
"print_hide": 1,
"read_only": 1
},
{
"default": "0",
"fetch_from": "company.reconcile_on_advance_payment_date",
"fieldname": "reconcile_on_advance_payment_date",
"fieldtype": "Check",
"hidden": 1,
"label": "Reconcile on Advance Payment Date",
"no_copy": 1,
"read_only": 1
},
{
"default": "No",
"depends_on": "eval: doc.book_advance_payments_in_separate_party_account == 1",
"fieldname": "is_opening",
"fieldtype": "Select",
"label": "Is Opening",
"options": "No\nYes",
"print_hide": 1,
"search_index": 1
}
],
"index_web_pages_for_search": 1,
@@ -775,7 +801,7 @@
"table_fieldname": "payment_entries"
}
],
"modified": "2024-01-03 12:46:41.759121",
"modified": "2024-05-31 17:07:06.197249",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Entry",
@@ -821,4 +847,4 @@
"states": [],
"title_field": "title",
"track_changes": 1
}
}

View File

@@ -16,6 +16,7 @@ import erpnext
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_dimensions
from erpnext.accounts.doctype.bank_account.bank_account import (
get_bank_account_details,
get_default_company_bank_account,
get_party_bank_account,
)
from erpnext.accounts.doctype.invoice_discounting.invoice_discounting import (
@@ -52,7 +53,7 @@ class InvalidPaymentEntry(ValidationError):
class PaymentEntry(AccountsController):
def __init__(self, *args, **kwargs):
super(PaymentEntry, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if not self.is_new():
self.setup_party_account_field()
@@ -81,7 +82,6 @@ class PaymentEntry(AccountsController):
self.set_exchange_rate()
self.validate_mandatory()
self.validate_reference_documents()
self.set_tax_withholding()
self.set_amounts()
self.validate_amounts()
self.apply_taxes()
@@ -95,6 +95,7 @@ class PaymentEntry(AccountsController):
self.validate_allocated_amount()
self.validate_paid_invoices()
self.ensure_supplier_is_not_blocked()
self.set_tax_withholding()
self.set_status()
self.set_total_in_words()
@@ -112,9 +113,15 @@ class PaymentEntry(AccountsController):
if self.docstatus > 0 or self.payment_type == "Internal Transfer":
return
self.book_advance_payments_in_separate_party_account = False
if self.party_type not in ("Customer", "Supplier"):
self.is_opening = "No"
return
if not frappe.db.get_value(
"Company", self.company, "book_advance_payments_in_separate_party_account"
):
self.is_opening = "No"
return
# Important to set this flag for the gl building logic to work properly
@@ -126,6 +133,7 @@ class PaymentEntry(AccountsController):
if (account_type == "Payable" and self.party_type == "Customer") or (
account_type == "Receivable" and self.party_type == "Supplier"
):
self.is_opening = "No"
return
if self.references:
@@ -135,6 +143,7 @@ class PaymentEntry(AccountsController):
# If there are referencers other than `allowed_types`, treat this as a normal payment entry
if reference_types - allowed_types:
self.book_advance_payments_in_separate_party_account = False
self.is_opening = "No"
return
liability_account = get_party_account(
@@ -165,7 +174,7 @@ class PaymentEntry(AccountsController):
"Unreconcile Payment",
"Unreconcile Payment Entries",
)
super(PaymentEntry, self).on_cancel()
super().on_cancel()
self.make_gl_entries(cancel=1)
self.update_outstanding_amounts()
self.update_advance_paid()
@@ -275,9 +284,7 @@ class PaymentEntry(AccountsController):
# If term based allocation is enabled, throw
if (
d.payment_term is None or d.payment_term == ""
) and self.term_based_allocation_enabled_for_reference(
d.reference_doctype, d.reference_name
):
) and self.term_based_allocation_enabled_for_reference(d.reference_doctype, d.reference_name):
frappe.throw(
_(
"{0} has Payment Term based allocation enabled. Select a Payment Term for Row #{1} in Payment References section"
@@ -289,7 +296,9 @@ class PaymentEntry(AccountsController):
# The reference has already been fully paid
if not latest:
frappe.throw(
_("{0} {1} has already been fully paid.").format(_(d.reference_doctype), d.reference_name)
_("{0} {1} has already been fully paid.").format(
_(d.reference_doctype), d.reference_name
)
)
# The reference has already been partly paid
elif (
@@ -313,14 +322,14 @@ class PaymentEntry(AccountsController):
and latest.payment_term_outstanding
and (flt(d.allocated_amount) > flt(latest.payment_term_outstanding))
)
and self.term_based_allocation_enabled_for_reference(d.reference_doctype, d.reference_name)
and self.term_based_allocation_enabled_for_reference(
d.reference_doctype, d.reference_name
)
):
frappe.throw(
_(
"Row #{0}: Allocated amount:{1} is greater than outstanding amount:{2} for Payment Term {3}"
).format(
d.idx, d.allocated_amount, latest.payment_term_outstanding, d.payment_term
)
).format(d.idx, d.allocated_amount, latest.payment_term_outstanding, d.payment_term)
)
if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(latest.outstanding_amount):
@@ -392,20 +401,30 @@ class PaymentEntry(AccountsController):
self,
force: bool = False,
update_ref_details_only_for: list | None = None,
ref_exchange_rate: float | None = None,
reference_exchange_details: dict | None = None,
) -> None:
for d in self.get("references"):
if d.allocated_amount:
if update_ref_details_only_for and (
not (d.reference_doctype, d.reference_name) in update_ref_details_only_for
(d.reference_doctype, d.reference_name) not in update_ref_details_only_for
):
continue
ref_details = get_reference_details(
d.reference_doctype, d.reference_name, self.party_account_currency
d.reference_doctype,
d.reference_name,
self.party_account_currency,
self.party_type,
self.party,
)
if ref_exchange_rate:
ref_details.update({"exchange_rate": ref_exchange_rate})
# Only update exchange rate when the reference is Journal Entry
if (
reference_exchange_details
and d.reference_doctype == reference_exchange_details.reference_doctype
and d.reference_name == reference_exchange_details.reference_name
):
ref_details.update({"exchange_rate": reference_exchange_details.exchange_rate})
for field, value in ref_details.items():
if d.exchange_gain_loss:
@@ -438,7 +457,9 @@ class PaymentEntry(AccountsController):
else:
if ref_doc:
if self.paid_from_account_currency == ref_doc.currency:
self.source_exchange_rate = ref_doc.get("exchange_rate") or ref_doc.get("conversion_rate")
self.source_exchange_rate = ref_doc.get("exchange_rate") or ref_doc.get(
"conversion_rate"
)
if not self.source_exchange_rate:
self.source_exchange_rate = get_exchange_rate(
@@ -475,7 +496,7 @@ class PaymentEntry(AccountsController):
if d.reference_doctype not in valid_reference_doctypes:
frappe.throw(
_("Reference Doctype must be one of {0}").format(
comma_or((_(d) for d in valid_reference_doctypes))
comma_or(_(d) for d in valid_reference_doctypes)
)
)
@@ -498,7 +519,8 @@ class PaymentEntry(AccountsController):
if d.reference_doctype in frappe.get_hooks("invoice_doctypes"):
if self.party_type == "Customer":
ref_party_account = (
get_party_account_based_on_invoice_discounting(d.reference_name) or ref_doc.debit_to
get_party_account_based_on_invoice_discounting(d.reference_name)
or ref_doc.debit_to
)
elif self.party_type == "Supplier":
ref_party_account = ref_doc.credit_to
@@ -511,7 +533,10 @@ class PaymentEntry(AccountsController):
):
frappe.throw(
_("{0} {1} is associated with {2}, but Party Account is {3}").format(
_(d.reference_doctype), d.reference_name, ref_party_account, self.party_account
_(d.reference_doctype),
d.reference_name,
ref_party_account,
self.party_account,
)
)
@@ -522,13 +547,15 @@ class PaymentEntry(AccountsController):
)
if ref_doc.docstatus != 1:
frappe.throw(_("{0} {1} must be submitted").format(_(d.reference_doctype), d.reference_name))
frappe.throw(
_("{0} {1} must be submitted").format(_(d.reference_doctype), d.reference_name)
)
def get_valid_reference_doctypes(self):
if self.party_type == "Customer":
return ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning")
return ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning", "Payment Entry")
elif self.party_type == "Supplier":
return ("Purchase Order", "Purchase Invoice", "Journal Entry")
return ("Purchase Order", "Purchase Invoice", "Journal Entry", "Payment Entry")
elif self.party_type == "Shareholder":
return ("Journal Entry",)
elif self.party_type == "Employee":
@@ -693,9 +720,7 @@ class PaymentEntry(AccountsController):
if not (is_single_currency and reference_is_multi_currency):
return allocated_amount
allocated_amount = flt(
allocated_amount / ref_exchange_rate, self.precision("total_allocated_amount")
)
allocated_amount = flt(allocated_amount / ref_exchange_rate, self.precision("total_allocated_amount"))
return allocated_amount
@@ -731,9 +756,7 @@ class PaymentEntry(AccountsController):
if not self.apply_tax_withholding_amount:
return
order_amount = self.get_order_net_total()
net_total = flt(order_amount) + flt(self.unallocated_amount)
net_total = self.calculate_tax_withholding_net_total()
# Adding args as purchase invoice to get TDS amount
args = frappe._dict(
@@ -758,7 +781,6 @@ class PaymentEntry(AccountsController):
accounts = []
for d in self.taxes:
if d.account_head == tax_withholding_details.get("account_head"):
# Preserve user updated included in paid amount
if d.included_in_paid_amount:
tax_withholding_details.update({"included_in_paid_amount": d.included_in_paid_amount})
@@ -778,7 +800,26 @@ class PaymentEntry(AccountsController):
for d in to_remove:
self.remove(d)
def get_order_net_total(self):
def calculate_tax_withholding_net_total(self):
net_total = 0
order_details = self.get_order_wise_tax_withholding_net_total()
for d in self.references:
tax_withholding_net_total = order_details.get(d.reference_name)
if not tax_withholding_net_total:
continue
net_taxable_outstanding = max(
0, d.outstanding_amount - (d.total_amount - tax_withholding_net_total)
)
net_total += min(net_taxable_outstanding, d.allocated_amount)
net_total += self.unallocated_amount
return net_total
def get_order_wise_tax_withholding_net_total(self):
if self.party_type == "Supplier":
doctype = "Purchase Order"
else:
@@ -786,12 +827,15 @@ class PaymentEntry(AccountsController):
docnames = [d.reference_name for d in self.references if d.reference_doctype == doctype]
tax_withholding_net_total = frappe.db.get_value(
doctype, {"name": ["in", docnames]}, ["sum(base_tax_withholding_net_total)"]
return frappe._dict(
frappe.db.get_all(
doctype,
filters={"name": ["in", docnames]},
fields=["name", "base_tax_withholding_net_total"],
as_list=True,
)
)
return tax_withholding_net_total
def apply_taxes(self):
self.initialize_taxes()
self.determine_exclusive_rate()
@@ -878,7 +922,6 @@ class PaymentEntry(AccountsController):
flt(d.allocated_amount) * flt(exchange_rate), self.precision("base_paid_amount")
)
else:
# Use source/target exchange rate, so no difference amount is calculated.
# then update exchange gain/loss amount in reference table
# if there is an exchange gain/loss amount in reference table, submit a JE for that
@@ -1016,7 +1059,6 @@ class PaymentEntry(AccountsController):
)
]
else:
remarks = [
_("Amount {0} {1} {2} {3}").format(
_(self.party_account_currency),
@@ -1036,14 +1078,19 @@ class PaymentEntry(AccountsController):
if d.allocated_amount:
remarks.append(
_("Amount {0} {1} against {2} {3}").format(
_(self.party_account_currency), d.allocated_amount, d.reference_doctype, d.reference_name
_(self.party_account_currency),
d.allocated_amount,
d.reference_doctype,
d.reference_name,
)
)
for d in self.get("deductions"):
if d.amount:
remarks.append(
_("Amount {0} {1} deducted against {2}").format(_(self.company_currency), d.amount, d.account)
_("Amount {0} {1} deducted against {2}").format(
_(self.company_currency), d.amount, d.account
)
)
self.set("remarks", "\n".join(remarks))
@@ -1091,78 +1138,71 @@ class PaymentEntry(AccountsController):
)
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
if self.book_advance_payments_in_separate_party_account:
for d in self.get("references"):
# re-defining dr_or_cr for every reference in order to avoid the last value affecting calculation of reverse
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
cost_center = self.cost_center
if d.reference_doctype == "Sales Invoice" and not cost_center:
cost_center = frappe.db.get_value(d.reference_doctype, d.reference_name, "cost_center")
gle = party_gl_dict.copy()
if self.payment_type == "Receive":
amount = self.base_paid_amount
else:
amount = self.base_received_amount
allocated_amount_in_company_currency = self.calculate_base_allocated_amount_for_reference(d)
reverse_dr_or_cr = 0
if d.reference_doctype in ["Sales Invoice", "Purchase Invoice"]:
is_return = frappe.db.get_value(d.reference_doctype, d.reference_name, "is_return")
payable_party_types = get_party_types_from_account_type("Payable")
receivable_party_types = get_party_types_from_account_type("Receivable")
if (
is_return
and self.party_type in receivable_party_types
and (self.payment_type == "Pay")
):
reverse_dr_or_cr = 1
elif (
is_return
and self.party_type in payable_party_types
and (self.payment_type == "Receive")
):
reverse_dr_or_cr = 1
if is_return and not reverse_dr_or_cr:
dr_or_cr = "debit" if dr_or_cr == "credit" else "credit"
exchange_rate = self.get_exchange_rate()
amount_in_account_currency = amount * exchange_rate
gle.update(
{
dr_or_cr: amount,
dr_or_cr + "_in_account_currency": amount_in_account_currency,
"against_voucher_type": "Payment Entry",
"against_voucher": self.name,
"cost_center": self.cost_center,
dr_or_cr: abs(allocated_amount_in_company_currency),
dr_or_cr + "_in_account_currency": abs(d.allocated_amount),
"against_voucher_type": d.reference_doctype,
"against_voucher": d.reference_name,
"cost_center": cost_center,
}
)
gl_entries.append(gle)
else:
for d in self.get("references"):
# re-defining dr_or_cr for every reference in order to avoid the last value affecting calculation of reverse
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
cost_center = self.cost_center
if d.reference_doctype == "Sales Invoice" and not cost_center:
cost_center = frappe.db.get_value(d.reference_doctype, d.reference_name, "cost_center")
gle = party_gl_dict.copy()
if self.unallocated_amount:
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
exchange_rate = self.get_exchange_rate()
base_unallocated_amount = self.unallocated_amount * exchange_rate
allocated_amount_in_company_currency = self.calculate_base_allocated_amount_for_reference(d)
reverse_dr_or_cr = 0
if d.reference_doctype in ["Sales Invoice", "Purchase Invoice"]:
is_return = frappe.db.get_value(d.reference_doctype, d.reference_name, "is_return")
payable_party_types = get_party_types_from_account_type("Payable")
receivable_party_types = get_party_types_from_account_type("Receivable")
if is_return and self.party_type in receivable_party_types and (self.payment_type == "Pay"):
reverse_dr_or_cr = 1
elif (
is_return and self.party_type in payable_party_types and (self.payment_type == "Receive")
):
reverse_dr_or_cr = 1
if is_return and not reverse_dr_or_cr:
dr_or_cr = "debit" if dr_or_cr == "credit" else "credit"
gle = party_gl_dict.copy()
gle.update(
{
dr_or_cr + "_in_account_currency": self.unallocated_amount,
dr_or_cr: base_unallocated_amount,
}
)
if self.book_advance_payments_in_separate_party_account:
gle.update(
{
dr_or_cr: abs(allocated_amount_in_company_currency),
dr_or_cr + "_in_account_currency": abs(d.allocated_amount),
"against_voucher_type": d.reference_doctype,
"against_voucher": d.reference_name,
"cost_center": cost_center,
"against_voucher_type": "Payment Entry",
"against_voucher": self.name,
}
)
gl_entries.append(gle)
if self.unallocated_amount:
dr_or_cr = "credit" if self.payment_type == "Receive" else "debit"
exchange_rate = self.get_exchange_rate()
base_unallocated_amount = self.unallocated_amount * exchange_rate
gle = party_gl_dict.copy()
gle.update(
{
dr_or_cr + "_in_account_currency": self.unallocated_amount,
dr_or_cr: base_unallocated_amount,
}
)
gl_entries.append(gle)
gl_entries.append(gle)
def make_advance_gl_entries(
self, entry: object | dict = None, cancel: bool = 0, update_outstanding: str = "Yes"
@@ -1177,7 +1217,7 @@ class PaymentEntry(AccountsController):
def add_advance_gl_entries(self, gl_entries: list, entry: object | dict | None):
"""
If 'entry' is passed, GL enties only for that reference is added.
If 'entry' is passed, GL entries only for that reference is added.
"""
if self.book_advance_payments_in_separate_party_account:
references = [x for x in self.get("references")]
@@ -1189,11 +1229,30 @@ class PaymentEntry(AccountsController):
"Sales Invoice",
"Purchase Invoice",
"Journal Entry",
"Sales Order",
"Purchase Order",
"Payment Entry",
):
self.add_advance_gl_for_reference(gl_entries, ref)
def get_dr_and_account_for_advances(self, reference):
if reference.reference_doctype == "Sales Invoice":
return "credit", reference.account
if reference.reference_doctype == "Purchase Invoice":
return "debit", reference.account
if reference.reference_doctype == "Payment Entry":
# reference.account_type and reference.payment_type is only available for Reverse payments
if reference.account_type == "Receivable" and reference.payment_type == "Pay":
return "credit", self.party_account
else:
return "debit", self.party_account
if reference.reference_doctype == "Journal Entry":
if self.party_type == "Customer" and self.payment_type == "Receive":
return "credit", reference.account
else:
return "debit", reference.account
def add_advance_gl_for_reference(self, gl_entries, invoice):
args_dict = {
"party_type": self.party_type,
@@ -1205,17 +1264,20 @@ class PaymentEntry(AccountsController):
"voucher_detail_no": invoice.name,
}
date_field = "posting_date"
if invoice.reference_doctype in ["Sales Order", "Purchase Order"]:
date_field = "transaction_date"
posting_date = frappe.db.get_value(invoice.reference_doctype, invoice.reference_name, date_field)
if getdate(posting_date) < getdate(self.posting_date):
if self.reconcile_on_advance_payment_date:
posting_date = self.posting_date
else:
date_field = "posting_date"
if invoice.reference_doctype in ["Sales Order", "Purchase Order"]:
date_field = "transaction_date"
posting_date = frappe.db.get_value(invoice.reference_doctype, invoice.reference_name, date_field)
dr_or_cr = "credit" if invoice.reference_doctype in ["Sales Invoice", "Sales Order"] else "debit"
args_dict["account"] = invoice.account
args_dict[dr_or_cr] = invoice.allocated_amount
if getdate(posting_date) < getdate(self.posting_date):
posting_date = self.posting_date
dr_or_cr, account = self.get_dr_and_account_for_advances(invoice)
args_dict["account"] = account
args_dict[dr_or_cr] = self.calculate_base_allocated_amount_for_reference(invoice)
args_dict[dr_or_cr + "_in_account_currency"] = invoice.allocated_amount
args_dict.update(
{
@@ -1234,7 +1296,7 @@ class PaymentEntry(AccountsController):
args_dict[dr_or_cr + "_in_account_currency"] = 0
dr_or_cr = "debit" if dr_or_cr == "credit" else "credit"
args_dict["account"] = self.party_account
args_dict[dr_or_cr] = invoice.allocated_amount
args_dict[dr_or_cr] = self.calculate_base_allocated_amount_for_reference(invoice)
args_dict[dr_or_cr + "_in_account_currency"] = invoice.allocated_amount
args_dict.update(
{
@@ -1596,7 +1658,8 @@ def get_outstanding_reference_documents(args, validate=False):
return []
elif supplier_status["hold_type"] == "Payments":
if (
not supplier_status["release_date"] or getdate(nowdate()) <= supplier_status["release_date"]
not supplier_status["release_date"]
or getdate(nowdate()) <= supplier_status["release_date"]
):
return []
@@ -1606,7 +1669,7 @@ def get_outstanding_reference_documents(args, validate=False):
# Get positive outstanding sales /purchase invoices
condition = ""
if args.get("voucher_type") and args.get("voucher_no"):
condition = " and voucher_type={0} and voucher_no={1}".format(
condition = " and voucher_type={} and voucher_no={}".format(
frappe.db.escape(args["voucher_type"]), frappe.db.escape(args["voucher_no"])
)
common_filter.append(ple.voucher_type == args["voucher_type"])
@@ -1621,7 +1684,7 @@ def get_outstanding_reference_documents(args, validate=False):
active_dimensions = get_dimensions()[0]
for dim in active_dimensions:
if args.get(dim.fieldname):
condition += " and {0}='{1}'".format(dim.fieldname, args.get(dim.fieldname))
condition += f" and {dim.fieldname}='{args.get(dim.fieldname)}'"
accounting_dimensions_filter.append(ple[dim.fieldname] == args.get(dim.fieldname))
date_fields_dict = {
@@ -1631,21 +1694,21 @@ def get_outstanding_reference_documents(args, validate=False):
for fieldname, date_fields in date_fields_dict.items():
if args.get(date_fields[0]) and args.get(date_fields[1]):
condition += " and {0} between '{1}' and '{2}'".format(
condition += " and {} between '{}' and '{}'".format(
fieldname, args.get(date_fields[0]), args.get(date_fields[1])
)
posting_and_due_date.append(ple[fieldname][args.get(date_fields[0]) : args.get(date_fields[1])])
elif args.get(date_fields[0]):
# if only from date is supplied
condition += " and {0} >= '{1}'".format(fieldname, args.get(date_fields[0]))
condition += f" and {fieldname} >= '{args.get(date_fields[0])}'"
posting_and_due_date.append(ple[fieldname].gte(args.get(date_fields[0])))
elif args.get(date_fields[1]):
# if only to date is supplied
condition += " and {0} <= '{1}'".format(fieldname, args.get(date_fields[1]))
condition += f" and {fieldname} <= '{args.get(date_fields[1])}'"
posting_and_due_date.append(ple[fieldname].lte(args.get(date_fields[1])))
if args.get("company"):
condition += " and company = {0}".format(frappe.db.escape(args.get("company")))
condition += " and company = {}".format(frappe.db.escape(args.get("company")))
common_filter.append(ple.company == args.get("company"))
outstanding_invoices = []
@@ -1660,7 +1723,7 @@ def get_outstanding_reference_documents(args, validate=False):
outstanding_invoices = get_outstanding_invoices(
args.get("party_type"),
args.get("party"),
party_account,
[party_account],
common_filter=common_filter,
posting_date=posting_and_due_date,
min_outstanding=args.get("outstanding_amt_greater_than"),
@@ -1761,12 +1824,10 @@ def split_invoices_based_on_payment_terms(outstanding_invoices, company) -> list
return outstanding_invoices_after_split
def get_currency_data(outstanding_invoices: list, company: str = None) -> dict:
def get_currency_data(outstanding_invoices: list, company: str | None = None) -> dict:
"""Get currency and conversion data for a list of invoices."""
exc_rates = frappe._dict()
company_currency = (
frappe.db.get_value("Company", company, "default_currency") if company else None
)
company_currency = frappe.db.get_value("Company", company, "default_currency") if company else None
for doctype in ["Sales Invoice", "Purchase Invoice"]:
invoices = [x.voucher_no for x in outstanding_invoices if x.voucher_type == doctype]
@@ -1861,7 +1922,7 @@ def get_orders_to_be_billed(
active_dimensions = get_dimensions()[0]
for dim in active_dimensions:
if filters.get(dim.fieldname):
condition += " and {0}='{1}'".format(dim.fieldname, filters.get(dim.fieldname))
condition += f" and {dim.fieldname}='{filters.get(dim.fieldname)}'"
if party_account_currency == company_currency:
grand_total_field = "base_grand_total"
@@ -1984,6 +2045,8 @@ def get_negative_outstanding_invoices(
@frappe.whitelist()
def get_party_details(company, party_type, party, date, cost_center=None):
bank_account = ""
party_bank_account = ""
if not frappe.db.exists(party_type, party):
frappe.throw(_("{0} {1} does not exist").format(_(party_type), party))
@@ -1994,7 +2057,8 @@ def get_party_details(company, party_type, party, date, cost_center=None):
party_name = frappe.db.get_value(party_type, party, _party_name)
party_balance = get_balance_on(party_type=party_type, party=party, cost_center=cost_center)
if party_type in ["Customer", "Supplier"]:
bank_account = get_party_bank_account(party_type, party)
party_bank_account = get_party_bank_account(party_type, party)
bank_account = get_default_company_bank_account(company, party_type, party)
return {
"party_account": party_account,
@@ -2002,6 +2066,7 @@ def get_party_details(company, party_type, party, date, cost_center=None):
"party_account_currency": account_currency,
"party_balance": party_balance,
"account_balance": account_balance,
"party_bank_account": party_bank_account,
"bank_account": bank_account,
}
@@ -2011,18 +2076,14 @@ def get_account_details(account, date, cost_center=None):
frappe.has_permission("Payment Entry", throw=True)
# to check if the passed account is accessible under reference doctype Payment Entry
account_list = frappe.get_list(
"Account", {"name": account}, reference_doctype="Payment Entry", limit=1
)
account_list = frappe.get_list("Account", {"name": account}, reference_doctype="Payment Entry", limit=1)
# There might be some user permissions which will allow account under certain doctypes
# except for Payment Entry, only in such case we should throw permission error
if not account_list:
frappe.throw(_("Account: {0} is not permitted under Payment Entry").format(account))
account_balance = get_balance_on(
account, date, cost_center=cost_center, ignore_account_permission=True
)
account_balance = get_balance_on(account, date, cost_center=cost_center, ignore_account_permission=True)
return frappe._dict(
{
@@ -2039,53 +2100,75 @@ def get_company_defaults(company):
return frappe.get_cached_value("Company", company, fields, as_dict=1)
def get_outstanding_on_journal_entry(name):
gl = frappe.qb.DocType("GL Entry")
res = (
frappe.qb.from_(gl)
.select(
Case()
.when(
gl.party_type == "Customer",
Coalesce(Sum(gl.debit_in_account_currency - gl.credit_in_account_currency), 0),
)
.else_(Coalesce(Sum(gl.credit_in_account_currency - gl.debit_in_account_currency), 0))
.as_("outstanding_amount")
)
def get_outstanding_on_journal_entry(voucher_no, party_type, party):
ple = frappe.qb.DocType("Payment Ledger Entry")
outstanding = (
frappe.qb.from_(ple)
.select(Sum(ple.amount_in_account_currency))
.where(
(Coalesce(gl.party_type, "") != "")
& (gl.is_cancelled == 0)
& ((gl.voucher_no == name) | (gl.against_voucher == name))
(ple.against_voucher_no == voucher_no)
& (ple.party_type == party_type)
& (ple.party == party)
& (ple.delinked == 0)
)
).run(as_dict=True)
).run()
outstanding_amount = res[0].get("outstanding_amount", 0) if res else 0
outstanding_amount = outstanding[0][0] if outstanding else 0
return outstanding_amount
total = (
frappe.qb.from_(ple)
.select(Sum(ple.amount_in_account_currency))
.where(
(ple.voucher_no == voucher_no)
& (ple.party_type == party_type)
& (ple.party == party)
& (ple.delinked == 0)
)
).run()
total_amount = total[0][0] if total else 0
return outstanding_amount, total_amount
@frappe.whitelist()
def get_reference_details(reference_doctype, reference_name, party_account_currency):
def get_reference_details(
reference_doctype, reference_name, party_account_currency, party_type=None, party=None
):
total_amount = outstanding_amount = exchange_rate = account = None
ref_doc = frappe.get_doc(reference_doctype, reference_name)
company_currency = ref_doc.get("company_currency") or erpnext.get_company_currency(
ref_doc.company
)
company_currency = ref_doc.get("company_currency") or erpnext.get_company_currency(ref_doc.company)
# Only applies for Reverse Payment Entries
account_type = None
payment_type = None
if reference_doctype == "Dunning":
total_amount = outstanding_amount = ref_doc.get("dunning_amount")
exchange_rate = 1
elif reference_doctype == "Journal Entry" and ref_doc.docstatus == 1:
total_amount = ref_doc.get("total_amount")
if ref_doc.multi_currency:
exchange_rate = get_exchange_rate(
party_account_currency, company_currency, ref_doc.posting_date
)
exchange_rate = get_exchange_rate(party_account_currency, company_currency, ref_doc.posting_date)
else:
exchange_rate = 1
outstanding_amount = get_outstanding_on_journal_entry(reference_name)
outstanding_amount, total_amount = get_outstanding_on_journal_entry(
reference_name, party_type, party
)
elif reference_doctype == "Payment Entry":
if reverse_payment_details := frappe.db.get_all(
"Payment Entry",
filters={"name": reference_name},
fields=["payment_type", "party_type"],
)[0]:
payment_type = reverse_payment_details.payment_type
account_type = frappe.db.get_value(
"Party Type", reverse_payment_details.party_type, "account_type"
)
exchange_rate = 1
elif reference_doctype != "Journal Entry":
if not total_amount:
@@ -2131,6 +2214,8 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre
"outstanding_amount": flt(outstanding_amount),
"exchange_rate": flt(exchange_rate),
"bill_no": ref_doc.get("bill_no"),
"account_type": account_type,
"payment_type": payment_type,
}
)
if account:
@@ -2151,9 +2236,7 @@ def get_payment_entry(
):
doc = frappe.get_doc(dt, dn)
over_billing_allowance = frappe.db.get_single_value("Accounts Settings", "over_billing_allowance")
if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) >= (
100.0 + over_billing_allowance
):
if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) >= (100.0 + over_billing_allowance):
frappe.throw(_("Can only make payment against unbilled {0}").format(_(dt)))
if not party_type:
@@ -2206,9 +2289,7 @@ def get_payment_entry(
pe.paid_from_account_currency = (
party_account_currency if payment_type == "Receive" else bank.account_currency
)
pe.paid_to_account_currency = (
party_account_currency if payment_type == "Pay" else bank.account_currency
)
pe.paid_to_account_currency = party_account_currency if payment_type == "Pay" else bank.account_currency
pe.paid_amount = paid_amount
pe.received_amount = received_amount
pe.letter_head = doc.get("letter_head")
@@ -2237,7 +2318,6 @@ def get_payment_entry(
doc.payment_terms_template,
"allocate_payment_based_on_payment_terms",
):
for reference in get_reference_as_per_payment_terms(
doc.payment_schedule, dt, dn, doc, grand_total, outstanding_amount, party_account_currency
):
@@ -2421,9 +2501,7 @@ def set_paid_amount_and_received_amount(
return paid_amount, received_amount
def apply_early_payment_discount(
paid_amount, received_amount, doc, party_account_currency, reference_date
):
def apply_early_payment_discount(paid_amount, received_amount, doc, party_account_currency, reference_date):
total_discount = 0
valid_discounts = []
eligible_for_payments = ["Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"]
@@ -2433,7 +2511,6 @@ def apply_early_payment_discount(
if doc.doctype in eligible_for_payments and has_payment_schedule:
for term in doc.payment_schedule:
if not term.discounted_amount and term.discount and reference_date <= term.discount_date:
if term.discount_type == "Percentage":
grand_total = doc.get("grand_total") if is_multi_currency else doc.get("base_grand_total")
discount_amount = flt(grand_total) * (term.discount / 100)
@@ -2462,9 +2539,7 @@ def apply_early_payment_discount(
return paid_amount, received_amount, total_discount, valid_discounts
def set_pending_discount_loss(
pe, doc, discount_amount, base_total_discount_loss, party_account_currency
):
def set_pending_discount_loss(pe, doc, discount_amount, base_total_discount_loss, party_account_currency):
# If multi-currency, get base discount amount to adjust with base currency deductions/losses
if party_account_currency != doc.company_currency:
discount_amount = discount_amount * doc.get("conversion_rate", 1)
@@ -2484,7 +2559,8 @@ def set_pending_discount_loss(
pe.set_gain_or_loss(
account_details={
"account": frappe.get_cached_value("Company", pe.company, account_type),
"cost_center": pe.cost_center or frappe.get_cached_value("Company", pe.company, "cost_center"),
"cost_center": pe.cost_center
or frappe.get_cached_value("Company", pe.company, "cost_center"),
"amount": discount_amount * positive_negative,
}
)
@@ -2507,9 +2583,7 @@ def split_early_payment_discount_loss(pe, doc, valid_discounts) -> float:
def get_total_discount_percent(doc, valid_discounts) -> float:
"""Get total percentage and amount discount applied as a percentage."""
total_discount_percent = (
sum(
discount.get("discount") for discount in valid_discounts if discount.get("type") == "Percentage"
)
sum(discount.get("discount") for discount in valid_discounts if discount.get("type") == "Percentage")
or 0.0
)
@@ -2552,9 +2626,7 @@ def add_tax_discount_loss(pe, doc, total_discount_percentage) -> float:
# The same account head could be used more than once
for tax in doc.get("taxes", []):
base_tax_loss = tax.get("base_tax_amount_after_discount_amount") * (
total_discount_percentage / 100
)
base_tax_loss = tax.get("base_tax_amount_after_discount_amount") * (total_discount_percentage / 100)
account = tax.get("account_head")
if not tax_discount_loss.get(account):
@@ -2571,7 +2643,8 @@ def add_tax_discount_loss(pe, doc, total_discount_percentage) -> float:
"deductions",
{
"account": account,
"cost_center": pe.cost_center or frappe.get_cached_value("Company", pe.company, "cost_center"),
"cost_center": pe.cost_center
or frappe.get_cached_value("Company", pe.company, "cost_center"),
"amount": flt(loss, precision),
},
)
@@ -2594,7 +2667,8 @@ def get_reference_as_per_payment_terms(
if not is_multi_currency_acc:
# If accounting is done in company currency for multi-currency transaction
payment_term_outstanding = flt(
payment_term_outstanding * doc.get("conversion_rate"), payment_term.precision("payment_amount")
payment_term_outstanding * doc.get("conversion_rate"),
payment_term.precision("payment_amount"),
)
if payment_term_outstanding:
@@ -2622,7 +2696,7 @@ def get_paid_amount(dt, dn, party_type, party, account, due_date):
dr_or_cr = "debit_in_account_currency - credit_in_account_currency"
paid_amount = frappe.db.sql(
"""
f"""
select ifnull(sum({dr_or_cr}), 0) as paid_amount
from `tabGL Entry`
where against_voucher_type = %s
@@ -2632,9 +2706,7 @@ def get_paid_amount(dt, dn, party_type, party, account, due_date):
and account = %s
and due_date = %s
and {dr_or_cr} > 0
""".format(
dr_or_cr=dr_or_cr
),
""",
(dt, dn, party_type, party, account, due_date),
)

Some files were not shown because too many files have changed in this diff Show More