Compare commits

...

1077 Commits

Author SHA1 Message Date
frappe-pr-bot
fcb4ca21d0 chore: update POT file 2024-07-21 09:35:17 +00:00
HarryPaulo
669cf6094e fix: process on background based on number of invoices on POS Closing Entry (#42417)
* fix: process on background based on number of invoices on POS Closing Entry

* fix: process on background based on number of invoices on POS Closing Entry
2024-07-20 10:17:34 +05:30
Khushi Rawat
f4d4658cbb Merge pull request #42412 from khushi8112/set-filter-on-asset-name-field
fix: set filter to show only submitted asset
2024-07-19 19:16:38 +05:30
Khushi Rawat
69b8e10e20 fix: set filter to show only submitted asset 2024-07-19 19:10:33 +05:30
ruthra kumar
ebb95b7d9a Merge pull request #42407 from ruthra-kumar/test_for_item_wise_purchase_register
test: basic test case for item-wise purchase register
2024-07-19 16:50:06 +05:30
ruthra kumar
c3c5d3f615 test: basic test case for item-wise purchase register 2024-07-19 16:31:58 +05:30
HENRY Florian
1bbe020cfd feat: add make_regional_gl_entries override for Sales Invoice (#42399)
* feat: add make_regional_gl_entries override for Sales Invoice and Stock Controler

* chore: remove regionnal override for stock management
2024-07-19 16:22:11 +05:30
Poorvi-R-Bhat
d62eb0f5c1 fix: Billing hours is not updated in Time sheet#19026 (#42404) 2024-07-19 14:46:24 +05:30
ruthra kumar
930ecb3170 Merge pull request #41959 from hiteshprajapati/bug-Don't_allow_negative_amount_on_Payment_Request
fix: Don't allow negative amount on Payment Request #41905
2024-07-19 10:33:49 +05:30
ruthra kumar
f44de670ca Merge pull request #42386 from ljain112/fix-pos
fix: set pos data if not return doc
2024-07-19 10:23:55 +05:30
rohitwaghchaure
e5dfc5e545 fix: serial and batch bundle for POS Invoice (#41491) 2024-07-18 19:54:00 +05:30
rohitwaghchaure
e1b9b432c3 fix: rounding issue causing incorrect quantity in SE (#42380) 2024-07-18 19:53:45 +05:30
rohitwaghchaure
67bf9bec47 fix: Purchase Order Analysis Report Data (#42387) 2024-07-18 19:52:30 +05:30
ljain112
65d672da65 fix: set pos data if not return doc 2024-07-18 17:40:19 +05:30
ruthra kumar
79a46ad6f8 Merge pull request #42148 from blaggacao/payments/pr-4
feat(payment): add more payment channels than just email and phone (think: chat)
2024-07-18 17:20:33 +05:30
ruthra kumar
a912e07b74 Merge pull request #39638 from blaggacao/feat/add-login-user-to-driver
feat: add login user to driver if available for notifications
2024-07-18 17:18:10 +05:30
ruthra kumar
57f928da55 Merge pull request #42374 from nabinhait/ar_ap_fix
fix: Show the rows in AR/AP report where outstanding equals to 0.01
2024-07-18 13:43:56 +05:30
ruthra kumar
bb9e42cce2 test: AR/AP report on miniscule outstanding 2024-07-18 12:58:09 +05:30
ruthra kumar
c587ede548 Merge pull request #42369 from ruthra-kumar/fix_missing_cr_note_on_payment_reconciliation
fix: missing cr/dr notes on payment reconciliation
2024-07-18 12:37:49 +05:30
Nabin Hait
e1dedc5402 fix: Show the rows in AR/AP report where outstanding equals to 0.01 2024-07-17 21:23:56 +05:30
rohitwaghchaure
62fb495a65 fix: not able to save QC (#42371) 2024-07-17 19:49:53 +05:30
ruthra kumar
2d686c06ea test: payment filter should not affect dr/cr notes 2024-07-17 17:52:55 +05:30
ruthra kumar
a30af68e9e fix: missing cr/dr notes on payment reconciliation 2024-07-17 15:27:58 +05:30
Smit Vora
c8dad976e2 Merge pull request #42307 from Sanket322/update_proprietorship_to_individual
fix: remove redundant proprietorship field from customer type and supplier type
2024-07-17 14:01:18 +05:30
Smit Vora
ea03ce3662 Merge pull request #42352 from ljain112/balance-sheet
fix: show total rows credit row in balance sheet
2024-07-16 19:27:29 +05:30
rohitwaghchaure
001e5b612b fix: items not fetching in End Transit entry (#42358) 2024-07-16 17:49:24 +05:30
Khushi Rawat
81e0b96c30 fix: service item capitalization (#42188)
* feat: capitalize with service expenses only

* chore: added test

* refactor: removed Capitalized In field from asset doc
2024-07-16 17:45:29 +05:30
rohitwaghchaure
85d2d34116 fix: same posting date and time causing incorrect valuation rate (#42351) 2024-07-16 16:08:39 +05:30
rohitwaghchaure
21df38bf18 fix: bin deadlock issue (#42342) 2024-07-16 16:08:03 +05:30
ljain112
327b19cba6 fix: show total rows credit row in balance sheet 2024-07-16 14:33:52 +05:30
rohitwaghchaure
6a50b40976 fix: extra qty pick in pick list (#42345) 2024-07-15 23:00:12 +05:30
Nihantra C. Patel
17b437709c 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
2024-07-15 22:59:43 +05:30
Nihantra C. Patel
66b35ec9fb 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
2024-07-15 16:59:41 +05:30
rohitwaghchaure
6d42cd0f4c fix: not able to cancel the inter transfer DN (#42333) 2024-07-15 16:21:07 +05:30
ruthra kumar
58bfd3b973 Merge pull request #42339 from ruthra-kumar/refactor_gp_test_for_dict_assert
fix(test): incorrect linter changes on test_gross_profit.py by ruff
2024-07-15 16:13:56 +05:30
ruthra kumar
fde348c8a0 fix(test): incorrect ruff changes 2024-07-15 15:52:59 +05:30
ruthra kumar
40cebf257b fix(test): incorrect linter fix from ruff 2024-07-15 15:49:37 +05:30
ruthra kumar
8784966138 Merge pull request #42294 from ruthra-kumar/implicit_repost_on_invoice_update
refactor: make reposting implicit
2024-07-15 15:10:33 +05:30
ruthra kumar
794a62aecb chore: contextual comments 2024-07-15 14:29:07 +05:30
ruthra kumar
c283cda169 refactor(test): reposting happens implicitly 2024-07-15 14:28:15 +05:30
ruthra kumar
8f135e9859 refactor(test): no need to assert repost_required flag
Reposting happens implicitly upon 'Update After Submit'
2024-07-15 14:24:25 +05:30
ruthra kumar
05fedf046c Merge pull request #42330 from ruthra-kumar/fix_gross_profit_valuation_rate_for_diff_warehouse
fix: incorrect valuation rate for items from different warehouses in Gross Profit
2024-07-15 14:19:10 +05:30
ruthra kumar
577ce5ccd4 test(gross profit): valuation rate from different warehouse 2024-07-15 13:05:09 +05:30
ruthra kumar
f9d2dd0a62 fix(gross profit): incorrect valuation rate on different warehouses 2024-07-15 11:44:35 +05:30
rohitwaghchaure
61daa318fe fix: incoming rate zero for supplied items in returned SCR (#42314) 2024-07-13 16:06:24 +05:30
rohitwaghchaure
7656220075 fix: address and contact filters for SCO and SCR (#42310) 2024-07-13 15:29:37 +05:30
Sanket322
c8ad6d1b2c fix: remove proprietorship and update it with individual 2024-07-12 18:58:14 +05:30
rohitwaghchaure
9cf92eaeab fix: not able to submit LCV entry (#42303) 2024-07-12 16:57:50 +05:30
Khushi Rawat
b04da63aad feat: configurable depreciation calculation via accounts settings (#42276)
* feat: configurable depreciation calculation via accounts settings

* refactor: code optimization

* style: changes in description and label
2024-07-12 14:25:57 +05:30
Nabin Hait
d0bbc8ca70 fix: While submitting PCV ensure previous FY is closed (#42284) 2024-07-12 14:24:42 +05:30
rohitwaghchaure
9838f7e6ba fix: cost center filter by company (#42297) 2024-07-12 12:36:39 +05:30
rohitwaghchaure
10280d6140 fix: keep status as In Progress for RIV for Timeout Error (#42274) 2024-07-12 11:54:35 +05:30
ruthra kumar
722ef92324 refactor: make reposting implicit 2024-07-12 10:30:19 +05:30
rohitwaghchaure
b17696a8ae fix: slowness in reposting dependent vouchers. (#42282) 2024-07-11 19:05:46 +05:30
ruthra kumar
3bde29c98b Merge pull request #42192 from ruthra-kumar/tests_for_item_wise_sales_and_purchase_reports
refactor: tests for item wise sales register report
2024-07-11 18:02:52 +05:30
ruthra kumar
cf4fbfb601 refactor(test): use each instance UOM for assertion 2024-07-11 17:40:34 +05:30
ruthra kumar
a4a6d90857 Merge pull request #42287 from ruthra-kumar/fix_missing_discount_on_pos_credit_note
fix: missing discount on POS Credit Notes
2024-07-11 17:28:07 +05:30
ruthra kumar
1049550951 fix: missing discount on POS Credit Notes 2024-07-11 17:21:41 +05:30
Raffael Meyer
22549186ab Merge pull request #42232 from barredterra/warehouse-buttons 2024-07-10 13:14:44 +02:00
ruthra kumar
d4c16c1740 Merge pull request #42247 from ruthra-kumar/fix_purchase_receipt_tax_on_stock_rbnb
fix: don't merge tax into stock account on purchase receipt repost
2024-07-10 15:27:19 +05:30
ruthra kumar
9562628ed6 test: tax account heads on PR report without LCV 2024-07-10 15:05:31 +05:30
ruthra kumar
8633080dff fix: tax on stock_rbnb on repost of Purchase Receipt 2024-07-10 15:05:28 +05:30
Smit Vora
3ef7e6ce5c Merge pull request #42204 from DaizyModi/fix-project-status
fix: Reopen Project if Completion Percentage is Below 100%
2024-07-10 12:38:57 +05:30
Smit Vora
d3520a62cc Merge pull request #42127 from ljain112/fix-disc-validation
fix: removed max discount validation for sales return
2024-07-10 12:30:04 +05:30
Smit Vora
5c0d52f783 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>
2024-07-10 06:26:38 +00:00
Smit Vora
d86e0ad694 Merge pull request #42060 from ljain112/fix-tds
fix: updated logic for calculating tax_withholding_net_total in payment entry
2024-07-10 10:40:14 +05:30
Khushi Rawat
0893a06b42 Merge pull request #42233 from khushi8112/show-only-submitted-assets
fix: added filter to show only submitted assets
2024-07-09 16:40:13 +05:30
rohitwaghchaure
1186ee128c fix: actual qty in sales order (#42248) 2024-07-09 15:09:17 +05:30
Poorvi-R-Bhat
623b4c21cd fix: corrected mismatch in the Purchase Receipt Status #15620 (#42138) 2024-07-09 14:59:31 +05:30
Rucha Mahabal
ad137250fc fix(Holiday List): sort holidays on save to avoid disorienting the user (#42236)
fix: sort holidays on save to avoid disorienting the user
2024-07-09 14:56:25 +05:30
Nihantra C. Patel
0c76a8cc9e fix: Billed Qty and Qty to Bill Calculation in Purchase Order Analysis (#42100) 2024-07-09 14:53:04 +05:30
Raffael Meyer
4936514c8d fix(Stock Entry Type): reduce perms for Stock User (#42225) 2024-07-09 12:15:52 +05:30
Raffael Meyer
96b275c61e fix(Putaway Rule): reduce perms for Stock User (#42227) 2024-07-09 12:13:59 +05:30
Raffael Meyer
edc1f84250 fix(Inventory Dimension): reduce perms for Stock User (#42226) 2024-07-09 12:13:42 +05:30
rohitwaghchaure
5f53ad3117 fix: auto serial and batch bundle not creating for Asset Capitalization (#42231) 2024-07-09 11:11:44 +05:30
ruthra kumar
2383a1a18e Merge pull request #42026 from ljain112/fix-bank-import
fix:  Multiple fixes in Bank Statement Import
2024-07-09 10:09:32 +05:30
Khushi Rawat
cd3a900495 fix: added filter to show only submitted assets 2024-07-08 20:48:53 +05:30
barredterra
10ae5aaf52 fix(Warehouse): add buttons only if the user can use them 2024-07-08 17:08:38 +02:00
Raffael Meyer
fa614dd8d3 Merge pull request #42211 from frappe/pot_develop_2024-07-07 2024-07-08 15:04:43 +02:00
frappe-pr-bot
b4d3dfc234 chore: update POT file 2024-07-07 09:35:29 +00:00
DaizyModi
c52fdffdaf fix: Project Status should be Open again if percent_complete is not 100 2024-07-06 19:05:36 +05:30
ruthra kumar
4cea34c1c6 Merge pull request #42146 from ljain112/fix-general-ledger
fix: Multiple fixes for General Ledger Report
2024-07-06 17:14:36 +05:30
rohitwaghchaure
f06ba0cc36 fix: provision to enable do not use batch-wise valuation (#42186)
fix: provision to enable do not use batchwise valuation
2024-07-05 20:14:32 +05:30
ruthra kumar
3aaa22e672 refactor: test suite for item-wise sales register 2024-07-05 10:04:58 +05:30
ruthra kumar
9474f72776 chore: rename test suite for payable report 2024-07-05 09:40:33 +05:30
ruthra kumar
36403cde98 Merge pull request #42183 from ruthra-kumar/empty_item_on_select
fix: empty item-wise sales/purchase register reports on initial load
2024-07-04 15:06:17 +05:30
ruthra kumar
ee862126e4 fix: empty item-wise sales/purchase register reports on initial load 2024-07-04 15:01:35 +05:30
Syed Mujeer Hashmi
55e2b876a2 fix: Consider adding warranty period to serial nos (#42051) 2024-07-04 14:38:06 +05:30
ruthra kumar
ddaf81fc33 Merge pull request #41975 from Nihantra-Patel/fix_iwpr_v15
fix: group by in item-wise purchase register
2024-07-04 14:37:35 +05:30
Richard Case
9cfe09bdf6 fix: BOM Creator Recursion Error on duplicate save (#41622) 2024-07-04 14:35:56 +05:30
ruthra kumar
1594e7bc25 Merge pull request #42143 from ruthra-kumar/validation_to_prevent_recurse_with_mixed
refactor: validation to prevent recursion with mixed conditions
2024-07-03 20:56:31 +05:30
ruthra kumar
6a2a6667d2 Merge pull request #42165 from ruthra-kumar/fix_recursize_free_items_on_item_group
fix: multiple free items on same Item Group
2024-07-03 17:57:28 +05:30
ruthra kumar
eb4af58bf0 test: validation on mixed condition and recursion on pricing rule 2024-07-03 17:54:41 +05:30
ruthra kumar
9bd4e7b709 test: validation on mixed condition with recursion 2024-07-03 17:11:32 +05:30
ruthra kumar
9d7be293ae fix: use standard method to get _doc_before_save 2024-07-03 17:05:13 +05:30
Raffael Meyer
e923e539d8 Merge pull request #42157 from Nihantra-Patel/fix_asset_log_path 2024-07-03 12:54:48 +02:00
ruthra kumar
c4ae0d283f fix: multiple free items on same Item Group 2024-07-03 15:58:19 +05:30
Markus Lobedann
4512432816 refactor: remove obsolete function call (#42162) 2024-07-03 12:21:12 +02:00
rohitwaghchaure
938dd4b2aa fix: manual pick allow to pick more than available stock (#42155) 2024-07-03 13:33:17 +05:30
Nihantra C. Patel
909aa8f359 fix: path of automatically updates the status of asset maintenance log 2024-07-03 13:12:00 +05:30
rohitwaghchaure
1dae2156e3 fix: show zero stock items filter in the stock balance report (#42147) 2024-07-03 07:39:47 +05:30
ruthra kumar
dc5d3b69be Merge pull request #42073 from ruthra-kumar/fix_lcv_repost_on_item_revaluation
fix: always post to tax account heads if LCV is booked
2024-07-03 07:03:48 +05:30
Frappe PR Bot
9eb0521e95 fix: sync translations from crowdin (#41635) 2024-07-03 00:00:10 +02:00
David Arnold
c39a44c016 perf: flush db at once 2024-07-02 19:48:23 +02:00
ljain112
c8a34cde7f fix: updated logic for calculating tax_withholding_net_total in payment entry 2024-07-02 19:07:31 +05:30
Sagar Vora
97f02015c2 fix: Multiple fixes for General Ledger Report 2024-07-02 17:38:40 +05:30
ruthra kumar
0e256b8b29 refactor(test): fix flaky test 2024-07-02 17:00:16 +05:30
Khushi Rawat
bd98f2f685 Merge pull request #42144 from khushi8112/site-migration-issue
fix: handle none type object error
2024-07-02 16:36:50 +05:30
Khushi Rawat
6760c9c4e2 fix: handle none type object error 2024-07-02 16:10:47 +05:30
ruthra kumar
6ba6b5aa33 refactor(test): cleanup test data 2024-07-02 15:50:01 +05:30
ruthra kumar
406dfd528f refactor: validation to prevent recursion with mixed conditions 2024-07-02 15:44:54 +05:30
ruthra kumar
fa56555150 test: Repost should not merge expense accounts from LCV 2024-07-02 12:45:01 +05:30
ruthra kumar
0fcd5d5130 fix: always post to tax account heads if LCV is booked 2024-07-02 12:10:22 +05:30
rohitwaghchaure
99f2735ad3 fix: stock qty validation in SCR (#42124) 2024-07-01 18:19:20 +05:30
ruthra kumar
cbd25aeaa4 Merge pull request #42126 from ruthra-kumar/sales_order_credit_limit_check_on_reopen
fix: Re-open allows SO's to be over credit limit
2024-07-01 17:02:31 +05:30
Khushi Rawat
c5e474f4f5 fix: add auto-update for overdue status (#42105)
* fix: auto-update for overdue status

* chore: use qb.update
2024-07-01 16:55:49 +05:30
ruthra kumar
60694e09c4 test: credit check on Sales Order re-open 2024-07-01 16:43:33 +05:30
ljain112
db807d433b fix: removed max discount validation for sales return 2024-07-01 16:07:38 +05:30
ruthra kumar
5eed781263 fix: Re-open allows SO's to be over credit limit 2024-07-01 15:49:48 +05:30
rohitwaghchaure
8f424528dd fix: batch reset while making SABB (#42076) 2024-07-01 14:14:19 +05:30
ruthra kumar
7c9129d0be Merge pull request #42119 from ruthra-kumar/ui_typerror_on_lead
fix: broken button under `Actions` in Lead doctype
2024-07-01 13:20:07 +05:30
ruthra kumar
f440e7cd94 fix: broken UI buttons under Actions in Lead 2024-07-01 13:15:36 +05:30
Khushi Rawat
55a4bd469b 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
2024-07-01 13:08:51 +05:30
ruthra kumar
9d8794f3ca Merge pull request #42014 from Nihantra-Patel/fix_lead_issue_dev
fix: creation of contact, customer, opportunity, quotation and prospect from lead
2024-07-01 13:05:41 +05:30
ruthra kumar
ec9ab6d762 Merge pull request #42000 from blaggacao/payments/pr-3
perf: flush db at once
2024-07-01 09:58:08 +05:30
Smit Vora
188f0e0f32 Merge pull request #41896 from cogk/fix-so-supplier-change-detection
fix(SO): Fix logic to check if supplier has changed
2024-07-01 08:09:51 +05:30
ruthra kumar
8b0de4aaf7 Merge pull request #42029 from ruthra-kumar/bug_in_advance_against_journal
fix: incorrect ledger entries on Advance payment against Journals for customer
2024-06-30 05:37:51 +05:30
rohitwaghchaure
32bdcdb08f fix: timeout error while submitting JV (#42040) 2024-06-29 07:35:13 +05:30
rohitwaghchaure
03e674e21d fix: reposting file attachment permission issue (#42068) 2024-06-28 23:25:17 +05:30
ruthra kumar
9ec6aef95d refactor: handle purchase invoice as reference 2024-06-28 20:48:22 +05:30
ruthra kumar
ad7efd5939 chore: better test name 2024-06-28 20:40:35 +05:30
ruthra kumar
1b384b9942 test: advance payment entry against journal - supplier type 2024-06-28 20:40:35 +05:30
ruthra kumar
5e84272cf9 test: advance payment against journal entry - customer type 2024-06-28 20:40:35 +05:30
ruthra kumar
f6c1dffb35 fix: incorrect dr/cr on Adv Payment against Journals 2024-06-28 20:40:35 +05:30
tonspar
affaaee1f4 fix: Correct dunnings resolving after PE submit (#41792)
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2024-06-28 13:47:51 +02:00
Raffael Meyer
0c5cda1380 Merge pull request #42063 from barredterra/stage-only-pot-file 2024-06-28 13:24:17 +02:00
Smit Vora
252d052f86 Merge pull request #41979 from ljain112/fix-dashboard
fix: dynamic_link for party in customer and supplier dashboard
2024-06-28 12:04:23 +05:30
barredterra
1f74439b16 ci: explicitly stage pot file
Avoid accidentally adding any other changed files, like yarn.lock, to the commit.
2024-06-27 19:43:46 +02:00
Khushi Rawat
ba79e68190 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
2024-06-27 17:34:25 +05:30
rohitwaghchaure
9738c04ef0 fix: not able to make purchase return (#42053) 2024-06-27 16:01:51 +05:30
Raffael Meyer
f850ccc4d8 Merge pull request #42054 from frappe/pot_develop_2024-06-27 2024-06-27 12:31:43 +02:00
frappe-pr-bot
7b5e041928 chore: update POT file 2024-06-27 10:15:22 +00:00
Raffael Meyer
42d401a1dd Merge pull request #42048 from barredterra/ci-typo 2024-06-26 18:58:26 +02:00
barredterra
26aa1a128f ci: fix typo in pot file regeneration 2024-06-26 17:54:51 +02:00
Khushi Rawat
80c6981cfa fix: unhide serial no field (#42045) 2024-06-26 12:22:52 +00:00
Nihantra C. Patel
8ae2b8ff8c fix: lead status filter (#41816) 2024-06-26 17:45:57 +05:30
Khushi Rawat
625f16dee0 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
2024-06-26 16:33:53 +05:30
Khushi Rawat
5fdd1d3278 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
2024-06-26 16:28:27 +05:30
rohitwaghchaure
eca3e02f8d fix: manufacturing date issue in the batch (#42034) 2024-06-26 09:11:20 +05:30
Poorvi-R-Bhat
1a9899b32b fix: Stock Reservation Entry was not getting created (#42033) 2024-06-25 18:42:07 +05:30
mergify[bot]
2e76b9f9db 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>
2024-06-25 18:11:41 +05:30
ljain112
ba08b2e8e8 fix: changes as per review 2024-06-25 17:48:10 +05:30
Raffael Meyer
61fe95a0bd Merge pull request #41756 from fzozyurt/tr_account_plan-#41536 2024-06-25 12:56:09 +02:00
Khushi Rawat
1c643a0ead fix: fixed asset value in Fixed Asset Register (#41930) 2024-06-25 16:05:04 +05:30
Khushi Rawat
5738d93f95 perf: code optimization to handle large asset creation (#42018) 2024-06-25 15:30:17 +05:30
ljain112
98ad01c736 fix: field position 2024-06-25 15:04:21 +05:30
ljain112
2112d8f772 fix: download_import_log if rows are greater than 5000 2024-06-25 14:55:51 +05:30
ljain112
1ad264de48 fix: import log preview 2024-06-25 14:47:23 +05:30
rohitwaghchaure
97c9941143 fix: batch picking in pick list based on Stock Settings (#42021) 2024-06-25 14:28:31 +05:30
ljain112
07f68884e0 fix: import status 2024-06-25 14:27:28 +05:30
ljain112
b202409428 fix: remove deprecated field "statement_import_log" 2024-06-25 14:27:04 +05:30
ljain112
13fb560401 fix: custom delimiters 2024-06-25 13:05:30 +05:30
rohitwaghchaure
9ab333d105 fix: valuation rate for the legacy batches (#42011) 2024-06-25 12:32:27 +05:30
Nihantra Patel
5844897c34 fix: creation of contact, customer, opportunity, quotation and prospect from lead --prettier 2024-06-24 16:03:39 +05:30
Nihantra Patel
8304d19e8b fix: creation of contact, customer, opportunity, quotation and prospect from lead 2024-06-24 15:54:01 +05:30
rohitwaghchaure
d50487ce53 fix: Wrong Delete Batch on Purchase Receipt (#42007) 2024-06-24 14:56:08 +05:30
rohitwaghchaure
7d91c6cbd5 fix: incorrect Difference Amount (#42008) 2024-06-24 14:55:57 +05:30
Deepesh Garg
379a290625 Merge pull request #41751 from rtdany10/gp-dimension
feat: accounting dimension filters in gp report
2024-06-24 10:51:55 +05:30
David
cf6c13ecae perf: flush db at once 2024-06-23 16:47:41 +02:00
ruthra kumar
73d56c4b33 Merge pull request #41704 from blaggacao/payments/pr-2
chore: clarify codepath around mute email and make invoice
2024-06-23 05:39:00 +05:30
ruthra kumar
5ec62756fb Merge pull request #41976 from ruthra-kumar/pricing_rule_priority_and_apply_multiple
fix: pricing rule with and without 'apply multiple' and priority
2024-06-23 05:31:20 +05:30
ruthra kumar
a4c0115b5e Merge pull request #41844 from ruthra-kumar/forex_accounts_support_for_advance_accounts
refactor: allow foreign currency advance accounts
2024-06-23 05:26:52 +05:30
Sagar Vora
ac6d85aed6 perf: dont run queries unnecessarily, improved filters (#41993)
* perf: dont run queries unnecessarily, improved filters

* perf: dont run query if `in` filter is empty
2024-06-22 21:27:00 +05:30
ruthra kumar
efebc3662e test: priority takes effect on with and without apply multiple 2024-06-22 20:30:55 +05:30
ruthra kumar
3fabf4aaa4 refactor(test): make and use a different party for subscription 2024-06-22 19:32:07 +05:30
rohitwaghchaure
fd7666a029 feat: default account head for operating cost (#41985) 2024-06-21 18:56:48 +05:30
ruthra kumar
4f92ab0ac7 Merge pull request #41981 from ruthra-kumar/repost_should_update_against_account
fix: incorrect against_account upon reposting
2024-06-21 17:58:14 +05:30
rohitwaghchaure
21adc7b63e fix: decimal issue in pick list (#41972) 2024-06-21 17:41:48 +05:30
ruthra kumar
20c4098399 fix: incorrect against_account upon reposting 2024-06-21 17:21:32 +05:30
ljain112
c0a8800832 fix: dynamic_link for party in customer and supplier dashboard 2024-06-21 16:08:04 +05:30
ruthra kumar
5f8f81c0ba Merge pull request #41956 from ruthra-kumar/discount_on_other_item
fix: incorrect discount on other item
2024-06-21 15:51:17 +05:30
Nihantra C. Patel
3fab00135b fix: group by in item-wise purchase register 2024-06-21 15:49:40 +05:30
ruthra kumar
5e875b238c 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
2024-06-21 15:46:16 +05:30
Raffael Meyer
86869ac8b8 Merge pull request #41966 from barredterra/per-for-shipment 2024-06-20 14:34:39 +02:00
barredterra
100d8e2007 fix: move condition for shipment 2024-06-20 14:33:03 +02:00
rohitwaghchaure
d5ed4582c3 fix: this.frm.events.update_cost is not a function (#41960) 2024-06-20 17:05:19 +05:30
mahsem
f28c692dca fix: add string for translation (#41903)
fix: add string for translation
2024-06-20 14:23:57 +05:30
rohitwaghchaure
306ab454d5 Merge pull request #41957 from rohitwaghchaure/fixed-17237
fix: expense account from item group not fetched
2024-06-20 14:22:22 +05:30
rohitwaghchaure
ef744c1f2c Merge pull request #41958 from rohitwaghchaure/fixed-17439
fix: do not show zero balance stock items in stock balance report
2024-06-20 14:19:13 +05:30
hiteshprajapati
b823aa66bf fix: Don't allow negative amount on Payment Request #41905 2024-06-20 14:11:18 +05:30
Rohit Waghchaure
7f7b363d48 fix: do not show zero balance stock in stock balance 2024-06-20 13:59:02 +05:30
Rohit Waghchaure
86ebe58231 fix: expense account from item group not fetched 2024-06-20 13:42:45 +05:30
ruthra kumar
654764e398 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
2024-06-20 12:04:00 +05:30
Raffael Meyer
a9910817f5 Merge pull request #41421 from frappe/migrate_lead_notes 2024-06-19 00:56:04 +02:00
ruthra kumar
64e63887be refactor(test): enfore use of customer/supplier master
While using advance accounts in foreign currency, always use
Customer/Supplier master to maintain them
2024-06-18 15:10:25 +05:30
ruthra kumar
c696d13a5e fix(test): incorrect field for customer default billing currency 2024-06-18 14:35:35 +05:30
ruthra kumar
8a397a4506 Merge pull request #41900 from ljain112/unreco
refactor: ignore unreconcile doc for PO and SO on cancel/delete
2024-06-18 10:26:58 +05:30
rohitwaghchaure
1cce7064e0 Merge pull request #41936 from casesolved-co-uk/prodplan_bomqty_test
feat: add production plan test for complex bom qtys
2024-06-18 09:42:35 +05:30
Richard Case
3025501500 chore: linting 2024-06-17 17:55:23 +01:00
Richard Case
a2ba0f51a0 feat: add production plan test for complex bom qtys 2024-06-17 17:49:31 +01:00
rohitwaghchaure
46d33d27cf Merge pull request #41931 from rohitwaghchaure/fixed-validation-for-reposting
fix: reposting validation related PCV
2024-06-17 17:49:35 +05:30
rohitwaghchaure
8141eacb02 Merge pull request #41907 from mahsem/fix-add-strings-for-translation-in-pos_item_cart.js
fix: add strings for translation in pos_item_cart.js
2024-06-17 17:09:42 +05:30
Rohit Waghchaure
194f1dc674 fix: reposting validation related PCV 2024-06-17 16:54:02 +05:30
rohitwaghchaure
28f195023e Merge pull request #41920 from ljain112/fix-sales-register
fix: handle NoneType error where customer details are not available in sales register
2024-06-17 14:58:07 +05:30
rohitwaghchaure
2e5b85c329 Merge pull request #41927 from ljain112/fix-item-pur-report
fix: consistent query field name in item wise purchase register with item wise sales register
2024-06-17 14:57:08 +05:30
ljain112
6d539e0fc0 fix: consistent query field name in item wise purchase register with item wise sales register 2024-06-17 14:30:31 +05:30
rohitwaghchaure
1b072228d3 Merge pull request #41921 from Nihantra-Patel/item-wise-sales_purchase_report_v15
fix: item_code filter in item-wise sales-purchase register
2024-06-17 14:01:06 +05:30
rohitwaghchaure
2c0f03d43a Merge pull request #41922 from rohitwaghchaure/fixed-17235
fix: duplicate rows fetching in RFQ
2024-06-17 13:05:18 +05:30
Rohit Waghchaure
555510c128 fix: duplicate rows fetching in RFQ 2024-06-17 12:48:44 +05:30
Nihantra Patel
757aef3972 fix: item_code filter in item-wise sales-purchase register 2024-06-17 12:33:14 +05:30
ljain112
f876fec6f5 fix: handle NoneType error where customer details are not available in sales register 2024-06-17 12:32:17 +05:30
rohitwaghchaure
3f13554bfb Merge pull request #41898 from Nihantra-Patel/upd_mr_received_qty_v15
fix: update received qty in MR on purchase invoice submit with update stock
2024-06-17 11:35:36 +05:30
rohitwaghchaure
4fc43b9009 Merge pull request #41916 from rohitwaghchaure/fixed-incorrect-batch-returned
fix: incorrect batch return from sales return
2024-06-17 11:16:31 +05:30
Rohit Waghchaure
317047c808 fix: incorrect batch return from sales return 2024-06-17 10:22:06 +05:30
ruthra kumar
7e318c0132 chore: remove dead code 2024-06-17 08:45:54 +05:30
ruthra kumar
07d59443b7 chore: fix test data 2024-06-17 07:39:52 +05:30
ruthra kumar
83ff94b9b8 refactor: better error messages 2024-06-17 07:29:24 +05:30
fzozyurt
b401ba2c26 feat: Create Turkish Chart Of Accounts 2024-06-15 20:58:24 +03:00
ruthra kumar
7479459cb6 Merge pull request #40187 from GursheenK/valuation-tax-gle-via-lcv
fix: valuation tax entries on LCV after billing PR
2024-06-15 20:41:22 +05:30
barredterra
895aede590 fix: only show user and date if available 2024-06-14 17:47:02 +02:00
mahsem
2fb3e5da4a fix: add strings for translation in pos_item_cart.js
fix: add strings for translation in pos_item_cart.js
2024-06-14 15:40:08 +02:00
Nihantra Patel
77959596db fix: add test case for update received qty in MR - import sorter 2024-06-14 16:50:49 +05:30
Nihantra Patel
73f22ba9a0 fix: add test case for update received qty in MR - import sorter 2024-06-14 16:50:04 +05:30
Nihantra Patel
62e4e88f1d fix: add test case for update received qty in MR 2024-06-14 16:47:30 +05:30
Nihantra Patel
cff1050159 fix: add test case for update received qty in MR 2024-06-14 16:46:23 +05:30
Nihantra Patel
ebb0cef601 fix: add test case for update received qty in MR 2024-06-14 16:44:26 +05:30
ljain112
b618d685c6 refactor: ignore unreconcile doc for PO and SO on cancel/delete 2024-06-14 13:13:11 +05:30
Nihantra Patel
13cb53fa89 fix: update received qty in MR on purchase invoice submit with update stock 2024-06-14 12:39:45 +05:30
Corentin Flr
339b6692fe fix(SO): Fix logic to check if supplier has changed 2024-06-13 18:11:42 +02:00
Smit Vora
99695df7bc Merge pull request #41842 from ljain112/fix-item-valuation
fix: regional overide for updating item valution
2024-06-13 13:38:24 +05:30
rohitwaghchaure
7996723e07 Merge pull request #41886 from Kishan0330/bugfix/download-materials-required-v15
fix: download materials request plan in production plan
2024-06-13 11:14:02 +05:30
Deepesh Garg
8b3c0f6d69 Merge pull request #41112 from barredterra/print-language
fix: language in sales transactions
2024-06-13 00:09:49 +05:30
Kishan0330
f4e369977a refactor: change warehousesData variable name 2024-06-12 22:08:29 +05:30
Kishan0330
6e55651795 fix: download materials request plan in production plan 2024-06-12 21:46:30 +05:30
mergify[bot]
b44630a28c Merge branch 'develop' into print-language 2024-06-12 15:40:34 +00:00
Bernhard Sirlinger
d85f316995 fix: correct creation of opportunity with lead dashboard plus button (#40987) 2024-06-12 16:52:25 +05:30
Rucha Mahabal
56082f5a29 fix: allow Employee role to select Department (#41877) 2024-06-12 11:19:39 +00:00
rohitwaghchaure
75983ead33 Merge pull request #41872 from rohitwaghchaure/fixed-purchase-receipt-return-issue-16966
fix: return from accepted and rejected warehouse at a same time not working
2024-06-12 15:45:35 +05:30
Rohit Waghchaure
17731f09ef fix: return from accepted and rejected warehouse at a same time not working 2024-06-12 15:13:59 +05:30
rohitwaghchaure
9f3b1ce5d5 Merge pull request #41867 from Nihantra-Patel/download_materials_required_v15
fix: download materials request plan in PP
2024-06-12 13:02:06 +05:30
Himanshu Shivhare
7ee2a19f53 chore: typo in bom_operation.json (#41650)
chore: typo in bom_operation.json
2024-06-12 13:01:28 +05:30
rohitwaghchaure
53d99b7c8c Merge pull request #41865 from rohitwaghchaure/fixed-batch-qty-16601
fix: batch qty in the dropdown field
2024-06-12 13:00:30 +05:30
Nihantra C. Patel
a1c4e0e93c fix: download materials request plan in PP -prettier 2024-06-12 12:36:53 +05:30
Nihantra C. Patel
cb52b76342 fix: download materials request plan in PP 2024-06-12 12:34:46 +05:30
Nihantra C. Patel
f4acdd9636 fix: download materials request plan in PP 2024-06-12 12:26:40 +05:30
Rohit Waghchaure
eb426c69fe fix: batch qty in the dropdown field 2024-06-12 12:12:58 +05:30
rohitwaghchaure
7249a691b3 fix: valuation rate for serial and batch bundle for current bundle (#41850) 2024-06-11 18:10:02 +05:30
Deepesh Garg
db313706a7 Merge pull request #41852 from deepeshgarg007/ledger_views
fix: Add timestamp to key for immutable views
2024-06-11 15:04:55 +05:30
Deepesh Garg
6bded59f1c fix: Add timestamp to key for immutable views 2024-06-11 14:47:08 +05:30
Khushi Rawat
857c689405 fix: asset depreciations and balances report correction (#41824)
* fix: asset depreciations and balances report correction

* chore: suppress linter warnings with # nosemgrep
2024-06-11 14:27:28 +05:30
ruthra kumar
8d7e68d355 Merge pull request #41707 from ruthra-kumar/is_opening_for_payment_entry
refactor: add `Is opening` flag for payment entry
2024-06-11 10:26:01 +05:30
ruthra kumar
4c03dcb4ba Merge pull request #41685 from ruthra-kumar/allow_partial_tds_on_purchase_invoice
refactor: enabling partial TDS application on partial invoice
2024-06-11 10:10:43 +05:30
ruthra kumar
17f968e1e1 test: is_opening flag for advance in separate party account 2024-06-11 10:08:49 +05:30
ruthra kumar
107b614518 refactor: validation in Supplier Group 2024-06-10 20:16:23 +05:30
ruthra kumar
4f9a228175 refactor: validation in customer group 2024-06-10 20:16:23 +05:30
ruthra kumar
0f0b4d88bc refactor: validation to force accounts to be on same currency 2024-06-10 20:16:23 +05:30
ruthra kumar
90c84822d0 test: advance against purchase invoice 2024-06-10 20:16:23 +05:30
ruthra kumar
827d67d02f test: exc gain/loss booking on advances under asset/liability 2024-06-10 20:16:23 +05:30
ruthra kumar
475e0ddeee refactor(test): simpler create_account helper method 2024-06-10 20:16:23 +05:30
ruthra kumar
7dce6e03c7 refactor: for advances uses the party account in references table 2024-06-10 20:16:23 +05:30
ruthra kumar
c9ede1ffbe refactor: convert amount to base currency for advances 2024-06-10 20:16:23 +05:30
ruthra kumar
e7740033ca chore: remove validation on payment entry 2024-06-10 20:16:14 +05:30
ljain112
1a10f0bcbd fix: regional overide for updating item valution 2024-06-10 20:06:05 +05:30
rohitwaghchaure
7ce9f7bc12 chore: patch to enable old serial/batch fields (#41723)
* chore: patch to enable old serial/batch fields

* chore: fix linters issue
2024-06-10 19:08:59 +05:30
Poorvi-R-Bhat
d9ddad0f1f fix:Tasks with duration less than a day not displayed correctly#15554 (#41633)
* fix: Tasks with duration less than a day not displayed correctly#15554

* fix: Tasks with duration less than a day not displayed correctly#15554
2024-06-10 17:30:35 +05:30
ruthra kumar
cf0a29b05f fix: use invoice outstanding on Dunning (#41817) 2024-06-10 17:14:27 +05:30
ruthra kumar
fec9d45ab3 Merge pull request #41793 from Nihantra-Patel/update_totals_taxes_15
fix: calculate totals and taxes
2024-06-10 15:17:28 +05:30
rohitwaghchaure
4b026d66dc fix: terms and conditions for material request (#41834) 2024-06-10 14:47:03 +05:30
rohitwaghchaure
36413d14d8 fix: do not fetch items with no active BOM in PP (#41833) 2024-06-10 14:18:39 +05:30
Deepesh Garg
c9bcd70173 Merge pull request #41424 from Poorvi-R-Bhat/item-code-purchase-sales-register
fix: Item-wise Sales and Purchase register with no item codes #41373
2024-06-09 11:42:09 +05:30
rohitwaghchaure
f6a4d391c0 fix: stock_value_change for legacy serial nos (#41825) 2024-06-07 22:34:05 +05:30
Deepesh Garg
8ec364df6f fix: Add additional condition application 2024-06-07 18:48:16 +05:30
rohitwaghchaure
3956354e08 fix: valuation rate for backdated legacy serial/batches (#41788) 2024-06-07 16:15:38 +05:30
Nihantra C. Patel
699cfd85c6 fix: typo in method - holiday list (#41811) 2024-06-06 19:05:57 +05:30
Deepesh Garg
c992656fa8 Merge pull request #41808 from deepeshgarg007/general_ledger_key
fix: Add posting date to key for consolidated view
2024-06-06 17:43:43 +05:30
Deepesh Garg
2c164b47a1 fix: Add posting date to key for consolidated view 2024-06-06 17:22:27 +05:30
ruthra kumar
746f95660d Merge pull request #41804 from ruthra-kumar/allow_system_manager_for_repost_settings
chore: repost settings permission overhaul
2024-06-06 15:56:33 +05:30
ruthra kumar
458d8f5ed8 chore: repost settings permission overhaul 2024-06-06 13:57:14 +05:30
Deepesh Garg
49e180a9b9 Merge pull request #41727 from deepeshgarg007/price_rule_change
fix: Do no apply pricing rule on qty change for mapped docs
2024-06-06 09:13:24 +05:30
Nihantra C. Patel
a7ec0c1cec fix: calculate totals and taxes 2024-06-05 15:49:44 +05:30
fzozyurt
5c8ea86a3f feat: Create Turkish Chart Of Accounts 2024-06-05 06:17:42 +03:00
Viny Selopal
c76f466528 fix(Vehicle): allow doc renaming and add test (#41729)
fix(Vehicle): allow renaming doc and add test
2024-06-04 21:55:27 +05:30
Nabin Hait
689e1cfc23 fix: Copy depreciation schedule on asset split only if it exists (#41775) 2024-06-04 21:50:43 +05:30
Nabin Hait
d163dbec7d fix: bank account no fieldname mismatch (#41778) 2024-06-04 21:50:05 +05:30
Nabin Hait
4ff3e6caaa fix: local var referenced before assignment (#41780) 2024-06-04 21:49:56 +05:30
Nabin Hait
71f5470dfd fix: convert percentage from str to float (#41766) 2024-06-04 15:19:42 +05:30
Nabin Hait
12e48f0b63 fix: link opportunity in prospect after creating opportunity from prospect (#41769) 2024-06-04 15:19:24 +05:30
rohitwaghchaure
cb6d8afa26 fix: incorrect batch selection while sales return (#41768) 2024-06-04 14:34:10 +05:30
rohitwaghchaure
cf508ce1ed fix: TypeError: 'float' object is not iterable (#41758) 2024-06-04 11:58:32 +05:30
Khushi Rawat
a8fc32dc32 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
2024-06-04 11:44:39 +05:30
Khushi Rawat
60eb03a6c6 fix(minor): corrected wrong filter condition (#41755) 2024-06-04 11:43:15 +05:30
Nabin Hait
80f6228d45 fix: Ignore disabling default currency field while creating new company (#41699) 2024-06-04 11:42:20 +05:30
mergify[bot]
c3ae5bc6a5 fix: get assets received but not billed account only if any asset item is received (backport #41734) (#41750)
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-04 11:22:13 +05:30
Dany Robert
e26bc17c75 feat(gp): group by cost center 2024-06-03 13:55:12 +00:00
Dany Robert
d165638bbb feat: accounting dimension filters in gp report 2024-06-03 13:45:55 +00:00
mergify[bot]
a2039bae10 fix: set expense account as Assets RBNB only if it is booked in linked PR (backport #41368) (#41733)
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-06-03 18:36:37 +05:30
Nabin Hait
740c495014 fix(stock settings): Allowed any number in stock frozen upto days field (#41736) 2024-06-03 18:34:57 +05:30
Nabin Hait
9a3569ff15 fix: Use full name instead of abbreviation (#41738) 2024-06-03 18:34:27 +05:30
Nabin Hait
d30c797d24 fix(Company): Allow Equity type account in unrealised exchange gain/loss account (#41740) 2024-06-03 18:33:48 +05:30
ruthra kumar
2be8e0dce0 Merge pull request #41742 from ruthra-kumar/allow_submit_for_repost
chore: System Manager shluld have  submit permission for repost doctypes
2024-06-03 17:49:31 +05:30
Nihantra C. Patel
441596f795 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
2024-06-03 17:45:31 +05:30
ruthra kumar
4558f64c0f chore: Sys Manager shluld have submit permission for repost doctypes 2024-06-03 17:31:27 +05:30
Nihantra C. Patel
4f0214d00e 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
2024-06-03 17:26:14 +05:30
Nihantra C. Patel
3c3313594d 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
2024-06-03 16:05:49 +05:30
Nihantra C. Patel
5a75c847fe 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
2024-06-03 15:40:07 +05:30
Deepesh Garg
2b1242170c fix: Do no apply pricing rule on qty change for mapped docs 2024-06-03 10:09:20 +05:30
Deepesh Garg
d2af36e1eb chore: update condition queries in qb 2024-06-02 20:17:24 +05:30
rohitwaghchaure
9e9296e444 feat: track Semi-finished goods (including subcontracted items) against Job Cards (#38341)
* feat: Track Semi-finished goods (including subcontracted items) against Job Cards

* feat: option to add raw materials manually against operation
2024-06-02 01:28:58 +05:30
Deepesh Garg
24926ab665 Merge pull request #41717 from deepeshgarg007/jv_transaction_currency_new
fix: Transaction currency value in Journal Entry
2024-06-01 20:46:43 +05:30
Deepesh Garg
169d77da54 fix: Transaction currency value in Journal Entry 2024-06-01 19:31:28 +05:30
ruthra kumar
666232fd1c Merge pull request #41658 from rtdany10/pr-transaction-condition
fix: condition-wise filter for transaction based pricing rule
2024-06-01 16:18:50 +05:30
rohitwaghchaure
ee846f5950 feat: optional to reconcile all serial nos / batches in stock reconciliation (#41696)
feat: optional to reconcile all serial/batch
2024-06-01 15:25:51 +05:30
ruthra kumar
c36f0e4a33 refactor: restrict to 'Advance in Separate Party Account' type 2024-05-31 17:11:40 +05:30
ruthra kumar
05d17d0d73 refactor: is_opening in payment entry 2024-05-31 16:55:04 +05:30
David
ee69ec97dd chore: clarify codepath around mute email and make invoice 2024-05-31 11:00:03 +02:00
rohitwaghchaure
4e37ed9033 fix: key error for stock ledger report (#41700) 2024-05-31 11:55:51 +05:30
ruthra kumar
07c421228b Merge pull request #41232 from FHenry/dev_fix_french_chart_of_account
fix: French chart of account the 4191 code must be of type Income Account
2024-05-31 10:17:21 +05:30
ruthra kumar
c6c696247a Merge pull request #41629 from blaggacao/payments/pr-1
test: add payment channel tests
2024-05-30 20:43:09 +05:30
rohitwaghchaure
968120d0eb fix: batch selection issue (#41692) 2024-05-30 18:06:29 +05:30
rohitwaghchaure
be9f960705 fix: show material to supplier button (#41686) 2024-05-30 14:05:20 +05:30
ruthra kumar
091c5496b2 refactor: enabling partial TDS application on partial invoice 2024-05-30 11:49:47 +05:30
Dany Robert
3f2343614b fix: test for pricing rule transaction with cond 2024-05-30 05:21:22 +00:00
Nijith anil
388ba7f945 fix: work order created message pops up if no items are selected (#41677) 2024-05-29 23:32:07 +05:30
Deepesh Garg
289d216552 Merge pull request #41676 from deepeshgarg007/account_balace_report
fix: Filters in account balance report
2024-05-29 12:48:02 +05:30
Deepesh Garg
1c9fe691ea fix: Filters in account balance report 2024-05-29 12:25:56 +05:30
Deepesh Garg
c41b239881 Merge pull request #41548 from Nihantra-Patel/feat_trends_report
fix: add include closed orders option in so/po trends report
2024-05-29 10:31:51 +05:30
Deepesh Garg
9f85483199 Merge pull request #41374 from Nihantra-Patel/no_add_variant_item_dev
fix: not allow template item in product bundle item
2024-05-29 10:30:21 +05:30
Deepesh Garg
006b1f553c Merge pull request #40873 from Nihantra-Patel/upd_timesheet_task
fix: update the task status from timesheet
2024-05-29 10:00:53 +05:30
Khushi Rawat
6b0ce33030 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-05-28 20:37:52 +05:30
rohitwaghchaure
ce834f5dba fix: multiple issues related to serial and batch bundle (#41662) 2024-05-28 18:48:09 +05:30
Marica
e3cf53a8b7 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
2024-05-28 15:28:02 +05:30
barredterra
4165fd44b5 Merge branch 'develop' into print-language 2024-05-27 18:52:05 +02:00
Raffael Meyer
d3bdd41358 Merge pull request #41659 from barredterra/auditor-perms 2024-05-27 18:48:50 +02:00
barredterra
eaa4efbc45 fix: allow Auditor to read a Fiscal Year 2024-05-27 17:40:08 +02:00
barredterra
06401cc84f fix: allow Auditor to select a company 2024-05-27 17:39:46 +02:00
Dany Robert
e3fd82766f fix: condition filter for transaction pricing rule 2024-05-27 14:50:28 +00:00
ruthra kumar
537e0e32b2 Merge pull request #40775 from casesolved-co-uk/sa_report
feat: significant enhancements to sales analytics report to support charts
2024-05-27 14:31:02 +05:30
ruthra kumar
47bc5691a1 refactor: remove use of can_create for Payment Request (#41647) 2024-05-27 09:57:11 +02:00
ruthra kumar
c5c4d5c61f Merge pull request #41401 from Nihantra-Patel/fix_project_cost_center_filter
fix: cost center filter according to the company in project
2024-05-27 10:09:37 +05:30
David
25931c4db2 test: add payment channel tests 2024-05-24 11:08:23 +02:00
rohitwaghchaure
683c1f04c8 fix: Unable to 'Get Suppliers' using tags in Request for Quotation (#41626) 2024-05-24 13:03:57 +05:30
Akhil Narang
b6350c86d1 Merge pull request #41601 from akhilnarang/add-indices
fix: add in some indices to speed up Purchase Order deletion
2024-05-24 10:57:04 +05:30
ruthra kumar
fac0fcb9d5 Merge pull request #41443 from cogk/fix-use-get-all-for-advance-status-update
fix(AccountsController): Use get_all to get payment requests when updating advance payment status
2024-05-24 10:40:15 +05:30
Akhil Narang
3f06f1905f refactor: use json directly instead of using frappe.json (#41609) 2024-05-23 16:00:42 +02:00
Frappe PR Bot
954ef85b95 fix: sync translations from crowdin (#41549) 2024-05-23 15:56:33 +02:00
Raffael Meyer
06c7ce1e95 Merge branch 'develop' into print-language 2024-05-23 14:36:49 +02:00
ruthra kumar
fffcb5dc9f Merge pull request #41594 from ruthra-kumar/refactor_payment_period_report
refactor: 'Payment Period Based On Invoice Date' report
2024-05-23 17:45:28 +05:30
ruthra kumar
5d0e82f40b Merge pull request #41603 from ruthra-kumar/remove_format_based_naming_on_internal_doctypes
refactor: remove 'format:' based naming in internal doctypes
2024-05-23 17:44:14 +05:30
ruthra kumar
e2ec3e453a refactor: remove 'format:' based naming in internal doctypes 2024-05-23 17:01:24 +05:30
Akhil Narang
0303d7dbdc 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>
2024-05-23 16:36:41 +05:30
rohitwaghchaure
418439b58f fix: SCR batch qty issue (#41595) 2024-05-23 14:51:54 +05:30
Akhil Narang
e39d2e1e69 Merge pull request #41576 from akhilnarang/sync-ruff-config
chore: sync ruff config with framework
2024-05-23 12:50:33 +05:30
ruthra kumar
c4e2abb973 refactor: replace against_voucher with against_voucher_no 2024-05-23 12:08:51 +05:30
ruthra kumar
014b542cf3 refactor: remove debit and credit 2024-05-23 11:59:57 +05:30
ruthra kumar
cb3c20dcd3 refactor: query payment ledger for payments 2024-05-23 11:52:53 +05:30
rohitwaghchaure
ad817cddad perf: sales order UI render (#41591) 2024-05-22 19:57:52 +05:30
rohitwaghchaure
04a49cef24 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
2024-05-22 18:22:40 +05:30
Poorvi-R-Bhat
eafa88b8e9 fix: fixing Item-wise sales register #41373 2024-05-22 12:39:22 +05:30
Poorvi-R-Bhat
76073ae228 fix: fixing Item-wise sales register and purchase register #41373 2024-05-22 12:26:02 +05:30
Ankush Menat
85b1a8001b ci: ruff only fix imports 2024-05-21 16:05:16 +05:30
Ankush Menat
3b4913ec81 ci: dont auto apply fixes
I've personally encountered ~5 instances of bad auto fixes, let
developers apply the fixes.
2024-05-21 16:03:31 +05:30
jabir-elat
d7df2cbdc5 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".
2024-05-21 14:38:13 +05:30
rohitwaghchaure
ac4bcd5ca7 fix: job card time logs overlap issue (#41567) 2024-05-21 14:37:04 +05:30
rohitwaghchaure
4261c3474b fix: not able to delete line items in the subcontracting receipt (#41569) 2024-05-21 14:36:35 +05:30
rohitwaghchaure
4e4c1e4bef fix: Deadlock on submitting Sales Invoice (#41417) 2024-05-21 10:33:29 +05:30
rohitwaghchaure
ae3f5a38e1 fix: BOM creator validation for parent row no (#41413)
fix: bom creator valiation for parent row no
2024-05-20 19:19:45 +05:30
Nabin Hait
dfdb95bbbe patch: create custom field for accounting dimensions only if the field not exists already (#41484)
fix: create custom field for accounting dimensions only if the field not exists already
2024-05-20 12:54:20 +00:00
Nabin Hait
a1d489195d fix: convert invoice_portion value from str to float (#41485) 2024-05-20 17:57:59 +05:30
Nabin Hait
f24d61daea fix: Auto reconcile only after selecting bank account (#41489) 2024-05-20 17:57:33 +05:30
Nabin Hait
0191727149 Merge pull request #41502 from khushi8112/gross-purchase-amount-too-low-to-make-depr-schedule
fix: added validation message for low gross purchase amount
2024-05-20 17:55:09 +05:30
Nabin Hait
e22b0fd6e1 Merge pull request #41495 from nabinhait/target-variance-for-parent-item-groups
fix: Show acheived amount and variance for parent item groups
2024-05-20 16:25:01 +05:30
Nihantra Patel
91c9d964f9 fix: add include closed orders option in so/po trends report 2024-05-20 16:02:10 +05:30
Nihantra Patel
6e3782a061 fix: add include closed orders option in so/po trends report 2024-05-20 15:59:45 +05:30
Nihantra Patel
eb4f94ddf2 fix: add include closed orders option in so/po trends report 2024-05-20 15:51:27 +05:30
ruthra kumar
be1fce2da6 Merge pull request #41492 from ruthra-kumar/reconciliation_on_advance_payment_date
refactor: For advances booked in Separate account, reconciliation date can be configured
2024-05-20 14:58:58 +05:30
ruthra kumar
30aa4e031d test: reconciliation date for advance payments 2024-05-20 14:42:41 +05:30
rohitwaghchaure
214b38f7c8 fix: valuation rate for legacy serial nos (#41543)
fix: valuation rate for serial nos
2024-05-20 13:41:16 +05:30
Frappe PR Bot
28e10dd703 fix: sync translations from crowdin (#41411) 2024-05-19 17:14:23 +02:00
Raffael Meyer
f7eb9d44a8 Merge pull request #41540 from frappe/pot_develop_2024-05-19 2024-05-19 15:22:28 +02:00
frappe-pr-bot
b071e952dd chore: update POT file 2024-05-19 09:35:33 +00:00
Raffael Meyer
7b9fd394b0 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
2024-05-18 10:25:50 +05:30
ruthra kumar
7ce8fc9ba2 Merge pull request #41529 from ruthra-kumar/ignore_internal_doctypes_on_cancel_for_dunning
refactor: ignore internal doctypes on Dunning cancellation
2024-05-17 21:00:22 +05:30
ruthra kumar
63c2cf13fd refactor: ignore internal doctypes on Dunning cancellation 2024-05-17 20:43:19 +05:30
Nabin Hait
37d97fad17 Merge pull request #41523 from ruthra-kumar/fix_pr_and_pi_debit_credit_difference
fix: minor Dr and Cr between Purchase Receipt and Purchase Invoice
2024-05-17 17:46:10 +05:30
rohitwaghchaure
5cf5b18aea fix: priority not working for multiple pricing rules (#41516) 2024-05-17 17:09:01 +05:30
ruthra kumar
1c0a24424a fix: minor Dr and Cr between Purchase Receipt and Purchase Invoice
This applies for Provisional Accounting for Non-stock items
2024-05-17 17:06:39 +05:30
rohitwaghchaure
61a4188440 fix: timeout error while submitting purchase invoice (#41520) 2024-05-17 16:36:38 +05:30
ruthra kumar
3f6787b267 Merge pull request #41517 from ruthra-kumar/fix_typeerror_in_purchase_invoice
fix: typerror on hide_fields
2024-05-17 14:47:07 +05:30
ruthra kumar
deb9766f2a fix: typerror on hide_fields 2024-05-17 14:41:17 +05:30
ruthra kumar
d61f56207c Merge pull request #41511 from ruthra-kumar/possible_sql_error_on_general_ledger
fix: possible sql error on General Ledger
2024-05-17 10:55:19 +05:30
ruthra kumar
76131f8e10 fix: possible sql error on General Ledger 2024-05-17 10:37:07 +05:30
ruthra kumar
cafa2f52e5 refactor: enable no-copy on advance payment flags 2024-05-17 10:21:37 +05:30
Deepesh Garg
e883d6a7d3 Merge pull request #41451 from deepeshgarg007/demo_deletion_fixes
fix: Demo data clearing
2024-05-17 09:16:11 +05:30
Deepesh Garg
44e6563af6 Merge pull request #41504 from deepeshgarg007/pos_error_message
fix: Unable to add items in POS Invoice
2024-05-16 19:31:53 +05:30
Deepesh Garg
7a3f8a5afb fix: Unable to add items in POS Invoice 2024-05-16 19:19:52 +05:30
Khushi Rawat
8a30701893 fix: added validation message for low gross purchase amount 2024-05-16 16:37:49 +05:30
rohitwaghchaure
500c546691 fix: stock levels for batch (#41494) 2024-05-16 15:58:58 +05:30
ruthra kumar
af8275c321 Merge pull request #40072 from Nihantra-Patel/fix_print_bold
fix: print format bold for field "total"
2024-05-16 15:19:37 +05:30
Samuel Danieli
bd381cc0c6 chore(BOM Explorer): display items in the same order as in the BOM (#41496) 2024-05-16 15:13:22 +05:30
Nabin Hait
8ac11ae88d fix: Show achieved amount and variance for parent item groups 2024-05-16 14:28:22 +05:30
Nihantra C. Patel
2761705c62 Merge branch 'develop' into fix_print_bold 2024-05-16 14:11:31 +05:30
ruthra kumar
000c1b49dc chore: better description 2024-05-16 12:40:09 +05:30
ruthra kumar
070e2d4d26 refactor: advance payments, allow configurable reconciliation date 2024-05-16 12:07:19 +05:30
Florian HENRY
3c1ca1cfbb Merge branch 'develop' of https://github.com/frappe/erpnext into dev_fix_french_chart_of_account 2024-05-15 18:37:09 +02:00
rohitwaghchaure
81a9521f04 fix: not able to submit landed cost voucher (#41481) 2024-05-15 17:49:02 +05:30
rohitwaghchaure
0363afcfd0 fix: validate reorder group warehouse (#41478) 2024-05-15 14:03:51 +05:30
Ankush Menat
7a47b2157b ci: remove mergify from release notes (#41475)
Mergify isn't author, just backporter.

All our stable branch PRs don't have authors so eh.
2024-05-15 05:37:30 +00:00
Florian HENRY
abfb8a7201 Merge branch 'develop' of https://github.com/frappe/erpnext into dev_fix_french_chart_of_account 2024-05-15 07:34:20 +02:00
Nabin Hait
fc797836af Merge pull request #41235 from khushi8112/depreciation_based_daily_prorata
Depreciation based on daily prorata
2024-05-15 08:40:16 +05:30
Nabin Hait
7d86881579 style: new line before function 2024-05-15 08:18:05 +05:30
Khushi Rawat
d22df324ec fix: removed same named function 2024-05-15 01:10:54 +05:30
Nabin Hait
4a4c674553 Merge pull request #41467 from khushi8112/unlink-asset-reference-issue
Asset cancelation issue
2024-05-14 22:41:45 +05:30
Khushi Rawat
7b264e5e11 refactor: code optimization 2024-05-14 20:12:01 +05:30
Khushi Rawat
c0c8c1bb02 fix: pro rata based depreciation with opening accumulated depreciation 2024-05-14 20:12:01 +05:30
Khushi Rawat
d40b55468c test: made minor change in existing test 2024-05-14 20:12:01 +05:30
Khushi Rawat
fccd37d32d fix: incorrect total days calculation 2024-05-14 20:12:01 +05:30
Khushi Rawat
b8a98a273b fix: daily prorata based depreciation bug in wdv method 2024-05-14 20:11:52 +05:30
Nabin Hait
99d417bbc2 Merge pull request #41457 from khushi8112/comparison-between-none-type-and-date-time-instances
fix: filtered out data having none values in date field
2024-05-14 20:10:52 +05:30
Khushi Rawat
f337392f3e fix(wip): daily depreciation bug 2024-05-14 20:10:42 +05:30
Khushi Rawat
e843683ad1 style: code optimization 2024-05-14 20:03:58 +05:30
Khushi Rawat
a36b7fb95a style: code optimization 2024-05-14 19:52:57 +05:30
Nabin Hait
16751ec935 Merge pull request #41420 from khushi8112/get-prorata-depreciation-based-on-total-days-per-year
Get prorata depreciation based on total days per year
2024-05-14 19:24:30 +05:30
Nabin Hait
0736154074 Merge pull request #41089 from khushi8112/rename-purchase-receipt-amount-field-to-purchase-amount
Refactor: Rename purchase receipt amount field to purchase amount
2024-05-14 18:16:39 +05:30
Khushi Rawat
fa2b6c4490 fix: Asset cancelation issue 2024-05-14 17:56:06 +05:30
Khushi Rawat
3bd455ac85 fix: filtered out data having none values in date field 2024-05-14 14:24:18 +05:30
Deepesh Garg
d6fe220fab fix: Demo data clearing 2024-05-14 10:27:56 +05:30
Deepesh Garg
e3f539325e Merge pull request #41412 from deepeshgarg007/party_name_ar_ap_report
fix: Duplicate party name column in AR/AP report
2024-05-14 08:22:22 +05:30
rohitwaghchaure
e3a80ebdf3 fix: zero valuation rate for batched item (#41446) 2024-05-14 05:19:32 +05:30
rohitwaghchaure
3309359822 fix: 'Bill for Rejected Quantity in Purchase Invoice' feature not working (#41437) 2024-05-13 21:38:24 +05:30
rohitwaghchaure
6bd13d7452 fix: Unknown column 'tabBatch.batch_no' in 'where clause' (#41418)
fix: unknown column 'tabBatch.batch_no' in 'where clause'
2024-05-13 21:37:35 +05:30
Corentin Flr
13a3a6a82e fix(AccountsController): Use get_all to get payment requests when updating advance payment status 2024-05-13 17:11:08 +02:00
Raffael Meyer
64333373ca Merge pull request #41384 from barredterra/sales-order-actions 2024-05-13 15:40:58 +02:00
Deepesh Garg
c6fd42fe60 Merge pull request #41429 from deepeshgarg007/immutable_ledger
feat: Config to enable immutable ledger
2024-05-13 17:42:59 +05:30
Deepesh Garg
77bfea975f Merge branch 'develop' of https://github.com/frappe/erpnext into immutable_ledger 2024-05-13 17:22:27 +05:30
rohitwaghchaure
663fcb374d fix: data getting override in delivery trip (#41431)
fix: data getting override
2024-05-13 16:24:46 +05:30
rohitwaghchaure
065163146c fix: valuation issue for batch (#41425) 2024-05-13 16:03:44 +05:30
Deepesh Garg
d56f52b0ba feat: Config to enable immutable ledger 2024-05-13 15:39:22 +05:30
Deepesh Garg
32a463652e Merge pull request #40468 from Nihantra-Patel/upd_accounts_description
fix: update description of Supplier Invoice Number
2024-05-13 15:12:23 +05:30
Nihantra C. Patel
7f2062e2c5 Merge branch 'develop' into upd_accounts_description 2024-05-13 14:56:23 +05:30
Poorvi-R-Bhat
1b45ecfcae fix: Item-wise Sales and Purchase register with no item codes #41373 2024-05-13 09:35:10 +05:30
barredterra
382d0ff453 fix: migrate lead notes 2024-05-12 23:01:19 +02:00
Khushi Rawat
98e7dfe97f fix(minor): removed extra parameter 2024-05-13 00:10:43 +05:30
Khushi Rawat
6b24143f72 refactor: removed code duplicacies 2024-05-12 23:01:44 +05:30
Khushi Rawat
d3200fb67f fix(wip): depreciation calculation after asset value adjustment 2024-05-12 23:01:44 +05:30
Deepesh Garg
7501fe8ebd fix: Duplicate party name column in AR/AP report 2024-05-11 19:35:52 +05:30
Frappe PR Bot
3fa8706f57 chore: update POT file (#41326) 2024-05-10 16:29:49 +02:00
Frappe PR Bot
f92aabd0f3 fix: sync translations from crowdin (#41262) 2024-05-10 16:28:17 +02:00
rehanrehman389
628d7e6458 chore: typo in Stock Settings (#41396) 2024-05-10 15:40:02 +05:30
Khushi Rawat
360c3b36ed fix: removed unrelated code modification 2024-05-10 14:39:59 +05:30
“Khushi
31841b4ab2 refactor: renamed purchase receipt amount field to purchase amount 2024-05-10 14:17:03 +05:30
Nihantra C. Patel
ba60b5911a fix: bold total in exponential smoothing forecasting (#41393)
* fix: bold total in exponential smoothing forecasting

* fix: bold total in exponential smoothing forecasting
2024-05-10 13:12:23 +05:30
Nihantra C. Patel
501c6aa126 fix: cost center filter according to the company in project 2024-05-10 12:40:01 +05:30
Nihantra C. Patel
cfde8088b4 fix: cost center filter according to the company in project 2024-05-10 12:35:24 +05:30
Nihantra C. Patel
249e8264dd fix: cost center filter according to the company in project 2024-05-10 12:31:15 +05:30
Poorvi
c90185f533 fix: fixing Item-wise sales register 2024-05-10 11:47:57 +05:30
ruthra kumar
08899d05fb Merge pull request #41040 from Nihantra-Patel/fix_quot_prospect
fix: address filter and quotation to for prospect
2024-05-09 12:14:41 +05:30
ruthra kumar
754c7f6d1c refactor: make use of doc.quotation_to 2024-05-09 11:58:33 +05:30
Nabin Hait
92673d706c Merge pull request #41024 from khushi8112/expense-account-based-on-asset-category
fix: expense account should be fetched from related asset category
2024-05-09 01:30:45 +05:30
Raffael Meyer
9c3a105f85 fix: consistent use of "Address & Contact" (#41386) 2024-05-08 16:20:35 +00:00
barredterra
418bdc1dcc fix(Delivery Note): only show permitted actions 2024-05-08 17:55:16 +02:00
barredterra
c29d955371 fix(Sales Order): only show permitted actions 2024-05-08 16:23:46 +02:00
Khushi Rawat
272ce24016 style: code changes for better readability
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2024-05-08 19:17:09 +05:30
“Khushi
651e4696fd fix: expense account should be fetched from related asset category 2024-05-08 19:14:51 +05:30
rohitwaghchaure
5ed1b6b8fb fix: incorrect qty picked in the pick list (#41378) 2024-05-08 17:56:10 +05:30
Nabin Hait
cd5d244d2c Merge pull request #41236 from nabinhait/merge_gle_in_transaction_currency
fix: Merge debit and credit in transaction currency while merging gle with similar head
2024-05-08 17:50:56 +05:30
Nihantra C. Patel
db5ed972e5 fix: not allow template item in product bundle item 2024-05-08 10:17:49 +05:30
rohitwaghchaure
0887161f2a perf: index on item code for the Pick List Item doctype (#41357) 2024-05-07 16:29:20 +05:30
rohitwaghchaure
544fc60093 fix: filter validation for batch-wise balance history report (#41356)
fix: filter validation for batchwise balance history report
2024-05-07 16:29:08 +05:30
ruthra kumar
c50663c640 Merge pull request #41288 from ruthra-kumar/bug_in_promotional_scheme
fix: pricing rule rounding
2024-05-07 10:01:00 +05:30
ruthra kumar
c41a037174 refactor(test): test floor based rounding 2024-05-07 09:44:10 +05:30
Raffael Meyer
c710ad822c fix(Item): allow UOM conversion for non-stock items (#41267) 2024-05-06 18:50:30 +02:00
rohitwaghchaure
ebfbe94aaf fix: pick list with multiple batch issue (#41335)
fix: pick list with batchb issue
2024-05-06 13:17:07 +05:30
ruthra kumar
e51ccecd8a Merge pull request #41334 from ruthra-kumar/fix_gp_purchase_invoice_item
fix: incorrect query for Purchase Invoice rate in GP
2024-05-06 12:53:46 +05:30
ruthra kumar
bd8382c592 fix: incorrect query for Purchase Invoice rate in GP 2024-05-06 12:07:33 +05:30
Ankush Menat
6142d07f1a fix: update project URLs (#41331) 2024-05-06 06:02:57 +00:00
Deepesh Garg
ed5344d58b Merge pull request #41318 from deepeshgarg007/psoa_cost_center
fix: Cost center not getting saved in PSOA
2024-05-04 13:55:40 +05:30
Deepesh Garg
44228b754f Merge pull request #41314 from deepeshgarg007/tcs_opening
fix: Do not deduct TCS for opening invoices
2024-05-04 13:54:46 +05:30
Deepesh Garg
d19ae4ce4c Merge pull request #41279 from deepeshgarg007/order_advance
fix: GL Entries against orders as an advance
2024-05-03 19:41:24 +05:30
Deepesh Garg
58f7039630 fix: Cost center not getting saved in PSOA 2024-05-03 18:34:27 +05:30
Deepesh Garg
eac7be2d0f test: Add bank account 2024-05-03 18:30:47 +05:30
Deepesh Garg
42ef95759d test: Update failing tests 2024-05-03 17:04:37 +05:30
Deepesh Garg
eb31017058 fix: Add PO reference 2024-05-03 15:56:29 +05:30
Deepesh Garg
69d68592ad Merge pull request #41311 from deepeshgarg007/future_subscription_updates
fix: future subscription updates
2024-05-03 12:04:39 +05:30
Deepesh Garg
eb9f579b8f fix: Do not deduct TCS for opening invoices 2024-05-03 11:47:43 +05:30
Raffael Meyer
e4db0562ac fix: search for item price in stock UOM (#41075) 2024-05-03 10:06:52 +05:30
Raffael Meyer
a61148c464 feat(Item Price): make UOM mandatory (#40588) 2024-05-03 10:04:24 +05:30
Deepesh Garg
7fa22069d8 test: Add posting dates 2024-05-03 09:25:26 +05:30
Deepesh Garg
54a12c5186 Merge pull request #41260 from deepeshgarg007/pi_gl_entries_pi
fix: Purchase Invoice gain loss gl entry for periodic inventory
2024-05-03 08:54:57 +05:30
HENRY Florian
c8e92cb1b2 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
2024-05-02 22:22:12 +05:30
Akhil Narang
93c6324115 Merge pull request #41299 from frappe/revert-41146-fix-add-import
Revert "fix(supplier): add back import that got removed by ruff"
2024-05-02 17:59:10 +05:30
Akhil Narang
f26be2a303 Revert "fix(supplier): add back import that got removed by ruff" 2024-05-02 17:42:33 +05:30
David Arnold
61f5ebd2dd feat: create delivery trip on draft notes (#38559)
feat: create draft delivery trips from draft delivery notes
2024-05-02 16:00:21 +05:30
Akhil Narang
22c345a24a Merge pull request #41146 from akhilnarang/fix-add-import
fix(supplier): add back import that got removed by ruff
2024-05-02 12:23:58 +05:30
ruthra kumar
9bf37426c1 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 |
2024-05-02 09:40:07 +05:30
rohitwaghchaure
1cbc200770 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
2024-05-01 15:46:43 +05:30
Deepesh Garg
8289f3c724 fix: GL Entries against orders as an advance 2024-05-01 12:17:08 +05:30
mergify[bot]
da3010a41f 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>
2024-04-30 21:48:46 +05:30
ruthra kumar
ed9af7d12e Merge pull request #41268 from ruthra-kumar/validation_to_prevent_overallocation_on_reconciliation
fix: validation to prevent overallocation
2024-04-30 17:37:46 +05:30
ruthra kumar
bf755fab55 fix: validation to prevent overallocation 2024-04-30 17:19:41 +05:30
Deepesh Garg
2402447568 fix: Purchase Invoice gain loss gl entry for periodic inventory 2024-04-30 13:28:43 +05:30
Deepesh Garg
f77d5db38e Merge pull request #41258 from deepeshgarg007/psoa_ageing
fix: PSOA ageing
2024-04-30 13:10:12 +05:30
Deepesh Garg
fed2d11905 fix: PSOA ageing 2024-04-30 12:50:21 +05:30
ruthra kumar
8861a76bd0 Merge pull request #41252 from ruthra-kumar/permission_issue_on_tax_withholding_category
fix: permission issue when user permission restricts on company
2024-04-30 11:20:18 +05:30
Deepesh Garg
56f0b2628e Merge pull request #41171 from deepeshgarg007/deferred_revenue_expense_report
fix: Invoice with no GLEs in deferred report
2024-04-30 11:14:54 +05:30
ruthra kumar
7a6cc84d41 fix: permission issue when user permission restricts on company 2024-04-30 10:26:55 +05:30
Deepesh Garg
a34c99385c Merge pull request #41173 from deepeshgarg007/br_paid_amount
fix: paid amount in bank reconciliation tool
2024-04-30 10:25:03 +05:30
Deepesh Garg
94339c569e Merge pull request #41219 from deepeshgarg007/br_company_user_perm
fix: Ignore user perm in Bank Reco Tool for company
2024-04-30 10:22:27 +05:30
ruthra kumar
1df06efd97 Merge pull request #41240 from ruthra-kumar/fix_based_on_payment_term_for_single_term
fix: display term name for single term invoices in AR/AP
2024-04-30 07:09:00 +05:30
ruthra kumar
52e52e83a9 Merge pull request #41194 from ruthra-kumar/fix_incorrectly_applying_tds_when_advance_in_prev_fiscal_year
fix: TDS incorrectly applied when Advance is in previous FY
2024-04-30 06:56:49 +05:30
Frappe PR Bot
9f092dbe9f chore: update POT file (#41220) 2024-04-30 00:51:38 +02:00
Frappe PR Bot
b324a02fbb fix: sync translations from crowdin (#40965) 2024-04-30 00:50:41 +02:00
ruthra kumar
5fa4cfee04 fix: display term name for single term invoices 2024-04-29 19:31:21 +05:30
Deepesh Garg
5e48c1ac51 Merge pull request #41237 from nikkothari22/fix-party-type-label-on-accounting-preview
fix: party and party type label on accounting preview
2024-04-29 18:53:39 +05:30
Nabin Hait
e0d12ba4d0 fix: Patch to fix the incorrect debit and credit in transaction currency 2024-04-29 17:44:41 +05:30
Nikhil Kothari
f7f3b22786 fix: party and party type label on accounting preview 2024-04-29 17:31:39 +05:30
Nabin Hait
e43697d359 fix: Merge debit and credit in transaction currency while merging gle with similar head 2024-04-29 17:01:48 +05:30
Florian HENRY
72057adc94 fix: French chart of account the 4191 code must be of type Income Account 2024-04-29 10:18:02 +02:00
ruthra kumar
2f9a144023 test: TDS deduction across fiscal year 2024-04-29 12:29:05 +05:30
Deepesh Garg
9e2ecd67f9 Merge pull request #40865 from rtdany10/def-expns
fix: missing def expense if no exp in first month
2024-04-29 10:24:35 +05:30
ruthra kumar
b195f519e2 fix: incorrectly applying TDS when Advance is in previous FY 2024-04-29 08:24:20 +05:30
Deepesh Garg
9f346e7ba0 fix: Ignore user perm in Bank Reco Tool for company 2024-04-28 14:41:34 +05:30
Deepesh Garg
8e30debc10 fix: future subscripition updates 2024-04-27 23:07:14 +05:30
ruthra kumar
41695e601d Merge pull request #41208 from ruthra-kumar/incorrect_receivable_account_handling_on_reconciliation_tool
fix: set receivable account based on response type
2024-04-26 14:12:02 +05:30
ruthra kumar
066859cca0 fix: handle and receivable accounts based on response type 2024-04-26 13:59:22 +05:30
rohitwaghchaure
44f9059338 Merge pull request #41165 from rohitwaghchaure/feat-allow-to-do-reposting-for-all-transactions
feat: allow to do reposting for all stock transactions (audit)
2024-04-26 13:43:34 +05:30
rohitwaghchaure
d95d00b7c8 Merge pull request #41167 from rohitwaghchaure/feat-warehouse-type-filter-for-reports
fix: warehouse type filter for stock reports
2024-04-26 13:10:25 +05:30
rohitwaghchaure
880d061164 Merge pull request #41182 from Nihantra-Patel/email_-rendering
fix: rendering the email template when user HTML
2024-04-26 13:09:53 +05:30
rohitwaghchaure
bb5f1dae75 Merge pull request #41185 from Nihantra-Patel/delivery_trip
fix: args when get the delivery note in delivery trip
2024-04-26 13:09:11 +05:30
Rushabh Mehta
1bb1b69dea Merge pull request #40716 from khushi8112/incorrect-cash-flow-report
Incorrect cash flow report
2024-04-26 12:52:57 +05:30
rohitwaghchaure
3562c2d1d1 Merge pull request #41195 from rohitwaghchaure/fixed-incorrect-basic-rate-13963
fix: basic rate for SABB
2024-04-26 12:49:46 +05:30
Khushi Rawat
46736a737f fix(minor): don't translate voucher type 2024-04-26 12:36:34 +05:30
Rushabh Mehta
5b1e860489 Merge pull request #40915 from khushi8112/company-field-should-be-fetch-from-parent-acc
fix: company field should be fetch from parent acc
2024-04-26 12:28:06 +05:30
rohitwaghchaure
8e095335be Merge pull request #41192 from rohitwaghchaure/fixed-13960
fix: duplicate column in the stock ledger report
2024-04-26 12:21:47 +05:30
Rohit Waghchaure
7fa94843aa fix: basic rate for SABB 2024-04-26 12:20:08 +05:30
Rohit Waghchaure
be7fd6bfb4 fix: duplicate column in the stock ledger report 2024-04-26 10:43:30 +05:30
ruthra kumar
90d1873ad0 Merge pull request #41183 from ruthra-kumar/disable_advance_for_non_customer_or_supplier
fix: restrict Advance in separate party to customer and supplier
2024-04-25 19:59:16 +05:30
Ankush Menat
341fb6d8f3 fix: handle stock balance unbuffered_cursor error (#41186) 2024-04-25 11:43:58 +00:00
Nihantra Patel
ca577f7aaa fix: args when get the delivery note in delivery trip 2024-04-25 16:46:29 +05:30
Nihantra Patel
2f359e201d fix: args when get the delivery note in delivery trip 2024-04-25 16:42:38 +05:30
ruthra kumar
3c1af2acf0 fix: enable advance in separate acc only for customer and Supplier 2024-04-25 13:26:15 +05:30
Nihantra C. Patel
7cb66f7fd3 fix: rendering the email template when user HTML 2024-04-25 12:01:28 +05:30
Deepesh Garg
a48966f08c fix: paid amount in bank reconciliation tool 2024-04-24 21:50:03 +05:30
Deepesh Garg
ecf07bd128 chore: remove debug flag 2024-04-24 19:44:47 +05:30
Deepesh Garg
1c613ada6f fix: Invoice with no GLEs in deferred report 2024-04-24 19:40:05 +05:30
Rohit Waghchaure
4250ac821f fix: warehouse type filter for stock reports 2024-04-24 14:41:10 +05:30
Rohit Waghchaure
aefbe21b46 feat: allow to do reposting for all transactions (audit) 2024-04-24 14:31:29 +05:30
Deepesh Garg
5f6bf4c369 Merge pull request #41106 from deepeshgarg007/heatmap_remove
chore: Remove heatmap from party dashboards
2024-04-24 12:01:14 +05:30
Deepesh Garg
cfa3c85f3c Merge pull request #41160 from ruchamahabal/cost-center-perm
fix: allow Employee role to select cost center & project (accounting dimensions)
2024-04-24 11:14:22 +05:30
Rucha Mahabal
d0d496a515 fix: allow Employee role to select cost center & project (accounting dimensions) 2024-04-24 10:57:41 +05:30
rohitwaghchaure
14bdd5da6e Merge pull request #41135 from rohitwaghchaure/available-batch-report
feat: Available batches as on specific date report
2024-04-23 22:17:08 +05:30
Rohit Waghchaure
b8f7979794 feat: Available batches report as on specific date 2024-04-23 17:18:31 +05:30
rohitwaghchaure
3bd598bd1b Merge pull request #41145 from rohitwaghchaure/fixed-13815
fix: incorrect stock posting for current qty
2024-04-23 16:50:09 +05:30
Rohit Waghchaure
d4fe313de2 fix: incorrect stock posting for current qty 2024-04-23 16:18:40 +05:30
ruthra kumar
6d51105082 Merge pull request #41147 from ruthra-kumar/better_description_and_validation
refactor: better description and pop up on Advance accounts
2024-04-23 14:45:04 +05:30
ruthra kumar
9dbd321133 refactor: popup to inform on limited support for Advance accounts 2024-04-23 13:57:12 +05:30
Akhil Narang
808dbfcade fix(supplier): add back import that got removed by ruff
It isn't unused, just isn't directly called

Fixes 3effaf21ef

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-04-23 13:26:05 +05:30
rohitwaghchaure
3b62237570 Merge pull request #41098 from rohitwaghchaure/fixed-stock-reco-negative-qty-validation-13584
fix: stock reconciliation negative qty validation
2024-04-23 13:08:41 +05:30
Rohit Waghchaure
289495c308 fix: stock reco negative qty validation 2024-04-23 12:45:33 +05:30
ruthra kumar
de9c8fc9d6 refactor: better description for advance account 2024-04-23 12:38:44 +05:30
ruthra kumar
6b8f65b7de Merge pull request #41142 from ruthra-kumar/toggle_auto_bank_account_update
fix: mode of payment has precedance in Payment Entry
2024-04-23 11:54:53 +05:30
rohitwaghchaure
eadd892b03 Merge pull request #41013 from Nihantra-Patel/fix_dc_qc
fix: inspection type when create a qc from dc
2024-04-23 11:33:43 +05:30
ruthra kumar
4aef969879 fix: mode of payment has precedance
Mode of Payment is given precedence over company/party bank account
2024-04-23 10:40:36 +05:30
Nabin Hait
4eee3f52a3 Merge pull request #41136 from nabinhait/installation-note-fix
fix: Missing args while fetching items from delivery note in Installation Note
2024-04-23 10:24:01 +05:30
ruthra kumar
3e7ccb24a6 Merge pull request #41086 from ruthra-kumar/prevent_multi_currency_advance_in_separate_party
fix: prevent foreign currency  accounts as advance accounts.
2024-04-23 07:14:16 +05:30
Nabin Hait
bbe323fbb4 fix: Missing args while fetching items from delivery note 2024-04-22 16:28:31 +05:30
Deepesh Garg
7286df86c5 Merge pull request #41104 from deepeshgarg007/payment_entry_test
fix: Payment entry against employee
2024-04-22 11:36:05 +05:30
Gursheen Kaur Anand
58c7922c36 Merge branch 'develop' into valuation-tax-gle-via-lcv 2024-04-21 19:15:21 +05:30
Gursheen Anand
54a58e9205 chore: resolve conflicts 2024-04-21 19:07:08 +05:30
Gursheen Kaur Anand
affe304d47 Merge pull request #40769 from GursheenK/budget-actual-expense
fix: budget validation for purchase orders
2024-04-21 16:54:44 +05:30
rohitwaghchaure
b4cbd5fafa Merge pull request #41120 from frappe/mergify/bp/develop/pr-36459
fix: search not working for so in the Production Plan (backport #36459)
2024-04-21 16:49:58 +05:30
rohitwaghchaure
9a6e762b8b fix: search not working for so in the Production Plan (#36459)
fix: search not working for so
(cherry picked from commit 8c57d56240)
2024-04-21 07:56:37 +00:00
rohitwaghchaure
41035ccba0 Merge pull request #41099 from rohitwaghchaure/fixed-report-13659
fix: not able to update default supplier from Supplier Quotation Comparison report
2024-04-20 11:20:31 +05:30
barredterra
eb119dcb4d fix: language in sales transactions 2024-04-20 01:24:35 +02:00
rohitwaghchaure
29153ed3b4 Merge pull request #41102 from rohitwaghchaure/fixed-stock-ledeger-report-balance-qty-13622
fix: balance qty for stock ledger report
2024-04-19 21:50:14 +05:30
Deepesh Garg
a8f03e8baa chore: Remove heatmap from party dashboards 2024-04-19 19:09:55 +05:30
Deepesh Garg
93e6c6ccab fix: Payment entry against employee 2024-04-19 17:38:11 +05:30
Rohit Waghchaure
f00ae0b92b fix: balance qty for stock ledger report 2024-04-19 17:30:27 +05:30
Deepesh Garg
a4b6eda8a9 Merge pull request #41085 from deepeshgarg007/ldc_permission
fix: Permission for lower deduction certificate
2024-04-19 15:39:35 +05:30
Rohit Waghchaure
ad8e189c26 fix: not able to update default supplier from Supplier Quotation Comparison report 2024-04-19 15:39:22 +05:30
rohitwaghchaure
7ad1bf5840 Merge pull request #41067 from rohitwaghchaure/fixed-validation-for-voucher-no-and-qty
fix: validation for zero qty in SABB
2024-04-19 15:10:19 +05:30
ruthra kumar
1ad065fc54 fix: advance account validation in company master 2024-04-18 17:15:52 +05:30
Rohit Waghchaure
497f560b4b fix: validation for zero qty in SABB 2024-04-18 15:53:42 +05:30
Deepesh Garg
f6f118855b fix: Permission for lower dedcution certificate 2024-04-18 15:26:03 +05:30
rohitwaghchaure
e706b4534c Merge pull request #41083 from rohitwaghchaure/fixed-work-order-qty-to-manuufacture
fix: validation for fraction number in Work Order
2024-04-18 14:44:18 +05:30
Rohit Waghchaure
f8305c2fc0 fix: validation for fraction number in Work Order 2024-04-18 14:24:51 +05:30
ruthra kumar
e3fc5990ee fix: validation to prevent foreign currency advance accounts in PE 2024-04-18 12:24:45 +05:30
s-aga-r
fb6b98c85d Merge pull request #41074 from s-aga-r/FIX-13339-2
fix: validate uom is integer for PR item
2024-04-17 22:29:38 +05:30
s-aga-r
9a290fdfc9 fix: validate uom is integer for PR item 2024-04-17 22:09:28 +05:30
Raffael Meyer
34fd290edb fix: don't attempt to set gender from salutation (#40997) 2024-04-17 17:26:08 +02:00
s-aga-r
244d62df70 Merge pull request #41061 from s-aga-r/FIX-13339
fix: do not add qty to supplied items
2024-04-17 16:33:38 +05:30
s-aga-r
8233c392fb fix: do not add qty to supplied items 2024-04-17 16:15:37 +05:30
rohitwaghchaure
e36f6453d5 Merge pull request #41053 from rohitwaghchaure/fixed-duplicate-serial-batch-in-stock-entry
fix: duplicate serial and batch bundle in stock entry and stock reco
2024-04-17 13:18:48 +05:30
Rohit Waghchaure
732b6e1417 fix: duplicate serial and batch bundle in stock entry and stock reco 2024-04-17 13:00:49 +05:30
Deepesh Garg
7ce6687b68 Merge pull request #40962 from deepeshgarg007/allow_on_submit_ad_v1
fix: Allow updating cost center and project for repostable doctypes
2024-04-17 11:21:50 +05:30
ruthra kumar
96d96bb500 Merge pull request #41047 from ruthra-kumar/incorrect_use_of_wildcard
fix: possible wildcard issue on variable name
2024-04-17 11:04:32 +05:30
ruthra kumar
5357b9e727 fix: possible wildcard issue on variable name 2024-04-17 10:46:00 +05:30
rohitwaghchaure
5b1493b56c fix: not able to submit subcontracting receipt (#41041) 2024-04-17 00:22:09 +05:30
Nihantra Patel
2896e3666c fix: address filter and quotation to for prospect 2024-04-16 18:13:49 +05:30
Nihantra Patel
24a68a79df fix: address filter and quotation to for prospect 2024-04-16 18:12:20 +05:30
Nihantra Patel
fe5b88522e fix: address filter and quotation to for prospect 2024-04-16 18:06:42 +05:30
rohitwaghchaure
d69a18b826 fix: Delayed Order Report not working (#41037) 2024-04-16 17:14:59 +05:30
ruthra kumar
42a5e61ac3 Merge pull request #40373 from Nihantra-Patel/fix_mutiple_address_so
fix: get address if multiple companies
2024-04-16 16:30:17 +05:30
rohitwaghchaure
03231e99ef fix: expense account set as COGS for stock entry Material Issue (#41026) 2024-04-16 13:55:35 +05:30
RitvikSardana
85c63f29c0 Merge pull request #41025 from RitvikSardana/develop-ritvik-remove-customer-check
fix: remove validate_name_in_customer function
2024-04-16 12:44:47 +05:30
RitvikSardana
2b32d3644f fix: remove validate_name_in_customer function 2024-04-16 12:20:16 +05:30
ruthra kumar
9445bd410c Merge pull request #41020 from ruthra-kumar/fix_incorrect_exc_gain_loss_for_pe_against_journals
fix: incorrect exc gain/loss for PE against JE for payable accounts
2024-04-16 10:58:49 +05:30
ruthra kumar
8821c98625 test: exc gain/loss journals booking in Payable accounts 2024-04-16 10:41:54 +05:30
ruthra kumar
81b574053f fix: incorrect exc gain/loss for PE against JE for payable accounts 2024-04-16 10:41:52 +05:30
Deepesh Garg
67a8f50711 Merge pull request #40812 from deepeshgarg007/multi_pr_pi
fix: Multiple partial payment requests against Purchase Invoice
2024-04-15 21:50:11 +05:30
Deepesh Garg
071e5ed648 fix: Test case 2024-04-15 20:49:40 +05:30
Deepesh Garg
b9243569ca Merge branch 'develop' of https://github.com/frappe/erpnext into multi_pr_pi 2024-04-15 19:58:48 +05:30
Nihantra Patel
098b62f0f6 fix: inspection type when create a qc from dc 2024-04-15 17:46:21 +05:30
Nabin Hait
760e341cd0 Merge pull request #40858 from nabinhait/quote-so-delivery-date
fix: Don't set delivery date as today while making SO from Quotation
2024-04-15 12:31:06 +05:30
Gursheen Anand
9a12376e29 refactor: show list for expense breakup 2024-04-14 17:06:01 +05:30
Gursheen Anand
59292a09c4 feat: show expense breakup 2024-04-14 17:03:22 +05:30
rohitwaghchaure
2d82631509 Merge pull request #40993 from rohitwaghchaure/fixed-get_link_to_form-for-SABB
fix: get_link_to_form for serial and batch bundle
2024-04-13 15:27:34 +05:30
Rohit Waghchaure
18ca953d5a fix: get_link_to_form for serial and batch bundle 2024-04-13 15:01:42 +05:30
rohitwaghchaure
a6ed77d378 Merge pull request #40986 from rohitwaghchaure/fixed-validation-to-check-type-of-transaction
fix: type of transaction validation for the stock entry
2024-04-13 14:33:15 +05:30
Rohit Waghchaure
8ad0295f1b fix: type of transaction validation for the stock entry 2024-04-13 13:38:33 +05:30
Deepesh Garg
8d94238db8 Merge pull request #40985 from ruthra-kumar/add_payment_request_to_dimension_list
fix: Add payment request to dimension list
2024-04-13 10:21:11 +05:30
ruthra kumar
3f8d785f02 chore: patch to setup exiting dimensions in Payment Request 2024-04-12 17:23:54 +05:30
ruthra kumar
e93b4a1f2c refactor: add payment request to dimension list 2024-04-12 16:51:11 +05:30
rohitwaghchaure
65bddd2930 Merge pull request #40975 from rohitwaghchaure/fixed-donot-validate-for-lcv
fix: do not validate batch qty for LCV
2024-04-12 14:04:11 +05:30
Rohit Waghchaure
baf0c83cc5 fix: do not validate batch qty for LCV 2024-04-12 13:29:45 +05:30
s-aga-r
bb46f2d8fb Merge pull request #40707 from s-aga-r/FIX-12241
fix(ux): Sales Order Stock Reservation Dialog
2024-04-12 13:20:28 +05:30
rohitwaghchaure
b04d0dfe70 Merge pull request #40773 from s-aga-r/FIX-12181
fix: Subcontracting Receipt GL Entries
2024-04-12 13:14:31 +05:30
ruthra kumar
140fdd4a7e Merge pull request #40973 from ruthra-kumar/fix_link_error_on_dunning_cancellation
fix: Link Validation Error on Dunning cancellation
2024-04-12 10:26:37 +05:30
ruthra kumar
205fd9888c fix: Link Validation Error on Dunning cancellation 2024-04-12 09:26:46 +05:30
rohitwaghchaure
773b63c691 Merge pull request #40967 from rohitwaghchaure/fixed-13250
fix: zero division error
2024-04-11 17:54:23 +05:30
rohitwaghchaure
fac69d852c Merge pull request #40966 from rohitwaghchaure/fixed-legacy-purchase-receipt-landed-cost-issue-13215
fix: landed cost voucher for legacy pr with batch
2024-04-11 17:41:38 +05:30
Rohit Waghchaure
f9e230e758 fix: zero division error 2024-04-11 17:35:06 +05:30
Rohit Waghchaure
fa91cda46c fix: landed cost voucher for legacy pr with batch 2024-04-11 16:49:01 +05:30
Deepesh Garg
c3845ac0f1 fix: Allow updating cost center and project for repostable doctypes 2024-04-11 11:30:56 +05:30
Nabin Hait
fc835ed6b1 Merge pull request #40920 from nabinhait/pe-fetch-reference-docs-amounts
fix: Fetch correct outstanding and total amount for reference journal entry
2024-04-11 11:04:05 +05:30
Nabin Hait
65c74fa3c7 fix: test cases 2024-04-11 11:01:28 +05:30
Nabin Hait
a70f3ef873 Merge pull request #40861 from nabinhait/default-bank-account
fix: Get default party bank account and company bank account for a party
2024-04-11 10:53:49 +05:30
Nabin Hait
6810227be0 Merge pull request #40886 from nabinhait/permission-issue
fix: Ignore permissions while fetching module settings properties
2024-04-11 10:53:22 +05:30
Nabin Hait
9aa361fe1f Merge pull request #40916 from nabinhait/existing-depr-schedule-check
fix: check if there is any existing depreciation schedule
2024-04-11 10:52:43 +05:30
Deepesh Garg
51baa95ad2 Merge pull request #40924 from khushi8112/indicate-correct-currency-code-for-the-payment
Fix: Indicate correct currency code for the payment
2024-04-10 22:22:28 +05:30
Deepesh Garg
f3ec4f1964 chore: remove unwanted changes 2024-04-10 22:06:03 +05:30
Deepesh Garg
b558a4c871 Merge pull request #40940 from Nihantra-Patel/fix_debit_creation_dev
fix: creation of return/debit note from purchase invoice
2024-04-10 21:39:08 +05:30
Deepesh Garg
eb241d0a86 Merge pull request #40941 from Nihantra-Patel/fix_credit_note_creation_dev
fix: creation of return/credit note from sales invoice
2024-04-10 21:38:57 +05:30
Deepesh Garg
8c0ea11f33 Merge pull request #40833 from HarryPaulo/fix-total-payment-decimal
fix: wrong value for total amount in payments
2024-04-10 21:26:00 +05:30
Deepesh Garg
165641e495 Merge pull request #40917 from frappe/l10n_develop
fix: sync translations from crowdin
2024-04-10 21:24:53 +05:30
Deepesh Garg
455565412f Merge pull request #40863 from nabinhait/gl-amount-in-transaction-currency
fix: Show amount in transaction currency in general ledger report
2024-04-10 20:54:01 +05:30
Deepesh Garg
6ab3527987 Merge pull request #40911 from nabinhait/itemised-tds-breakup
fix: Show itemised TDS breakup based on Apply TDS checkbox on item level
2024-04-10 20:51:33 +05:30
Deepesh Garg
c8ae124436 Merge pull request #40931 from cogk/fix-dont-call-get_fiscal_year-before-setup-is-done
fix: Don't call get_fiscal_year if setup is not done yet
2024-04-10 20:45:27 +05:30
Deepesh Garg
3e216e2f95 Merge pull request #40844 from HarryPaulo/notify-update-for-doc
fix: notify update when update outstanding amount
2024-04-10 20:43:49 +05:30
Deepesh Garg
20f20db179 Merge pull request #40849 from deepeshgarg007/transaction_currency_values
fix: Values in transaction currency
2024-04-10 20:42:08 +05:30
Nihantra C. Patel
78bef654ed fix: creation of return/credit note from sales invoice 2024-04-10 15:02:18 +05:30
Nihantra C. Patel
71f3883613 fix: creation of return/debit note from sales invoice prettier 2024-04-10 14:43:38 +05:30
Nihantra C. Patel
dd10087db6 fix: creation of return/debit note from sales invoice 2024-04-10 14:36:58 +05:30
Frappe PR Bot
6b8de22210 fix: Bosnian translations 2024-04-10 14:10:26 +05:30
Frappe PR Bot
2a3a35315b fix: Persian translations 2024-04-10 14:10:21 +05:30
ruthra kumar
9905b9e4b0 Merge pull request #40936 from ruthra-kumar/ignore_dimension_validation_on_pl
fix: ignore dimension validation for cancelled entries
2024-04-10 13:57:29 +05:30
ruthra kumar
971c867f29 fix: ignore dimension validation for cancelled entries 2024-04-10 13:21:24 +05:30
Corentin Flr
c203fafb1b fix: Don't call get_fiscal_year if setup is not done yet 2024-04-09 15:01:09 +02:00
ruthra kumar
5446ed7642 Merge pull request #40695 from ruthra-kumar/ledger_health_monitor
feat: Periodically monitor ledger health
2024-04-09 17:52:55 +05:30
ruthra kumar
3c3009f086 Merge pull request #40926 from ruthra-kumar/incorrect_currency_symbol_on_general_ledger_print
fix: incorrect currency symbol in General Ledger print
2024-04-09 17:45:47 +05:30
ruthra kumar
429e036e8c fix: incorrect currency symbol in General Ledger print 2024-04-09 17:39:32 +05:30
ruthra kumar
24d37d22a3 chore: use super() instead of super(__class__, self) 2024-04-09 17:35:15 +05:30
“Khushi
549ea8a63c fix: indicate correct currency code for the payment 2024-04-09 17:06:56 +05:30
rohitwaghchaure
b5e017a626 Merge pull request #40909 from rohitwaghchaure/fixed-13083
fix: pick list validation didn't consider existing draft pick list
2024-04-09 16:53:39 +05:30
Rohit Waghchaure
3bce4d92f6 fix: pick list validation didn't consider existing draft pick list 2024-04-09 15:36:21 +05:30
Nabin Hait
f331f9b15c fix: Fetch outstanding and total amount for reference journal entry 2024-04-09 15:25:36 +05:30
Khushi Rawat
5f7e06ba6f Merge branch 'develop' into company-field-should-be-fetch-from-parent-acc 2024-04-09 14:36:04 +05:30
Frappe PR Bot
0ade33dd1a fix: Bosnian translations 2024-04-09 13:19:31 +05:30
Frappe PR Bot
9f3a1567b5 fix: Esperanto translations 2024-04-09 13:19:28 +05:30
Frappe PR Bot
cf806fb2d4 fix: Turkish translations 2024-04-09 13:19:24 +05:30
Frappe PR Bot
680dfbfd2b fix: Arabic translations 2024-04-09 13:19:20 +05:30
Frappe PR Bot
6e2475a266 fix: French translations 2024-04-09 13:19:17 +05:30
Frappe PR Bot
f127c33acc fix: Persian translations 2024-04-09 13:19:12 +05:30
Frappe PR Bot
f529386b20 fix: Spanish translations 2024-04-09 13:19:09 +05:30
Frappe PR Bot
fd6195f8cd fix: German translations 2024-04-09 13:19:05 +05:30
Nabin Hait
433c8c450c fix: check if there is any existing depreciation schedule 2024-04-09 11:26:03 +05:30
ruthra kumar
dc79213bb3 chore: make ledger health doctype read_only 2024-04-09 11:18:53 +05:30
ruthra kumar
4776d660b5 test: ledger monitoring function 2024-04-09 11:18:49 +05:30
“Khushi
d791fa7460 fix: by default company field value is fetched from parent account 2024-04-09 11:18:33 +05:30
Raffael Meyer
10c5ed8a3c fix: make help items translatable (#40913) 2024-04-08 23:55:20 +00:00
Frappe PR Bot
b02d5a226c chore: update POT file (#40899) 2024-04-09 01:40:55 +02:00
Frappe PR Bot
6a8bd64c40 fix: sync translations from crowdin (#40772) 2024-04-09 01:40:28 +02:00
Nabin Hait
c66dde6318 fix: Show itemised TDS breakup based on Apply TDS checkbox on item level 2024-04-08 20:26:44 +05:30
Smit Vora
f7c9e1538b feat: new hook fields_for_group_similar_items to group additional fields for print formats (#40831) 2024-04-08 10:17:18 +00:00
ruthra kumar
503687a224 Merge pull request #40878 from ruthra-kumar/merge_taxes_from_DN_to_sales_invoice
refactor: merge taxes from delivery note to Sales Invoice
2024-04-08 14:37:44 +05:30
ruthra kumar
39a48a2e2a test: tax merging from 2 Delivery Note to Sales Invoice 2024-04-08 14:20:45 +05:30
ruthra kumar
286268567e Merge pull request #40876 from ruthra-kumar/fix_advance_against_reverse_advance_for_payable_types
fix: ledger entries for Payment against reverse payment reconciliation
2024-04-08 07:28:00 +05:30
Nabin Hait
219d5a5e8b Merge pull request #40900 from nabinhait/pro-rata-calc-fix
fix: pro-rata amount for straight line method
2024-04-07 15:37:42 +05:30
Nabin Hait
46a2d3cad9 fix: pro-rata amount for straight line method 2024-04-07 15:20:50 +05:30
rohitwaghchaure
4ded8ca07b Merge pull request #40827 from Nihantra-Patel/fix_po_quot_cre
fix: purchase order and quotation creation
2024-04-07 14:36:35 +05:30
rohitwaghchaure
3f6dcfe0a2 Merge pull request #40883 from rohitwaghchaure/fixed-13004
fix: incorrect operator causing incorrect validation
2024-04-07 12:03:03 +05:30
Nabin Hait
a180c502f9 Merge pull request #40698 from nabinhait/pro-rata-fix
fix: Get pro-rata amount based on correct days
2024-04-07 12:01:25 +05:30
rohitwaghchaure
c4ffeedffb Merge pull request #40887 from rohitwaghchaure/fixed-12539
fix: query_report.trigger_refresh is not a function
2024-04-07 11:56:38 +05:30
Rohit Waghchaure
30bbb58ca1 fix: query_report.trigger_refresh is not a function 2024-04-07 11:48:07 +05:30
Rohit Waghchaure
6b317b0c0d fix: incorrect operator causing incorrect validation 2024-04-07 11:43:55 +05:30
Nabin Hait
f61faa85a1 fix: Ignore permissions while fetching module settings properties 2024-04-07 11:33:40 +05:30
Dany Robert
01888c98bc fix: expense causing p&l test case to fail 2024-04-06 06:13:42 +00:00
Dany Robert
581af4eced chore: semgrep 2024-04-05 18:16:26 +00:00
Dany Robert
7ef4dbcaf6 fix: test case for zero deferred expense 2024-04-05 17:59:48 +00:00
ruthra kumar
550cbbd91c refactor: merge taxes from delivery note to Sales Invoice 2024-04-05 16:22:55 +05:30
ruthra kumar
64b7f624a5 refactor(test): include new fields in assertion 2024-04-05 15:31:57 +05:30
ruthra kumar
141f462368 test: advance payment against reverse payment reconciliation 2024-04-05 14:34:36 +05:30
ruthra kumar
248cc6105b test: reverse payment against payment for supplier 2024-04-05 14:06:11 +05:30
Nihantra Patel
4e5bc82a17 fix: update the task status from timesheet 2024-04-05 12:27:34 +05:30
ruthra kumar
74bc38e0af fix(test): for reverse payments, only advance acc should have effect
This applies for Payments against Reverse-Payment reconcilition
2024-04-05 11:08:12 +05:30
ruthra kumar
bdd36b0001 refactor: supplementary field to better handle reverse payments 2024-04-05 10:58:02 +05:30
ruthra kumar
9fd2dddfde 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.
2024-04-05 10:39:16 +05:30
ruthra kumar
a75e095d00 fix(test): Advance Received should be under liability account 2024-04-05 10:39:16 +05:30
ruthra kumar
8b9079d62e Merge pull request #40856 from ruthra-kumar/better_approach_for_exc_rate_updating
fix: unwanted Exc Gain/Loss journals on Payment against Journal entry
2024-04-05 10:32:10 +05:30
s-aga-r
9808ae92a4 fix: Subcontracting Receipt GL Entries 2024-04-05 09:53:23 +05:30
Dany Robert
5c9ce575f6 fix: missing def expense if no exp in first month 2024-04-04 16:18:20 +00:00
ruthra kumar
fe84558b77 test: payment against JE reconciliation with different rates 2024-04-04 20:41:27 +05:30
ruthra kumar
c15690e475 fix: use reference type name to update exc rate 2024-04-04 20:41:24 +05:30
Nabin Hait
be0cb5289f fix:linter issue 2024-04-04 20:11:09 +05:30
Nabin Hait
d868122f12 fix: Show amount in transaction currency in general ledger report 2024-04-04 19:58:17 +05:30
Nabin Hait
68b076cb61 Merge branch 'develop' into pro-rata-fix 2024-04-04 18:19:33 +05:30
Nabin Hait
f87be1d96e fix: Get default party bank account and company bank account for a party 2024-04-04 16:54:42 +05:30
rohitwaghchaure
1816f1d5f0 Merge pull request #40848 from rohitwaghchaure/fixed-12763
fix: group warehouse added in the stock reconciliation
2024-04-04 15:38:58 +05:30
Nabin Hait
fec20decc1 fix: Don't set delivery date as today while making SO from Quotation 2024-04-04 15:25:46 +05:30
Rohit Waghchaure
8f53bc0096 fix: group warehouse added in the stock reconciliation 2024-04-04 15:01:06 +05:30
rohitwaghchaure
ea1b66931a Merge pull request #40852 from Nihantra-Patel/fix_workstation_refresh
fix: workstation refresh after prompt
2024-04-04 11:50:24 +05:30
Nihantra C. Patel
bed1af26e3 fix: workstation refresh after prompt 2024-04-04 10:58:36 +05:30
Deepesh Garg
a3c9fd6567 fix: Values in transaciton currency 2024-04-03 17:28:24 +05:30
ruthra kumar
7d22df2af5 Merge pull request #40643 from blaggacao/fix/adv-pay-status
fix(pr): set adv. pay. status base on PR stati
2024-04-03 15:05:25 +05:30
David
46e12e0981 chore: smaller loop; less indirection 2024-04-03 02:23:37 +02:00
David
b4c815b804 test: differentiate progressing and non progressing flows 2024-04-03 02:23:36 +02:00
David
a8cd850bb6 test: patch payments app interface 2024-04-03 02:23:36 +02:00
David
ec675ea3d8 fix(pr): set adv. pay. status base on pr stati 2024-04-03 02:09:56 +02:00
David
c9c6211009 test: trigger so to invoice flow (fails) 2024-04-03 02:09:56 +02:00
HarryPaulo
198b90eb01 fix: notify update when update outstanding amount - Linters 2024-04-02 18:50:51 -03:00
HarryPaulo
f67f163e7d fix: notify update when update outstanding amount 2024-04-02 18:42:30 -03:00
David
c705a393fe fix(pr): set adv. pay. status for po (still fails; differently) 2024-04-02 20:15:48 +02:00
David
bcdfbee23e test: correctly trigger po payment request ["Outward"] (fails) 2024-04-02 19:36:13 +02:00
David
3228841e68 fix: individual accounting tests
without this no 'run-tests' during development can be run
as soon as payment requests are involved
2024-04-02 19:36:13 +02:00
rohitwaghchaure
c3b2ed57f6 Merge pull request #40723 from rohitwaghchaure/fixed-allow-to-manually-pick-batches
feat: allow to pick manually qty / batches / serial nos
2024-04-02 22:13:50 +05:30
Rohit Waghchaure
50dd9fa8a3 feat: allow to pick manually qty / batches / serial nos 2024-04-02 21:08:04 +05:30
Raffael Meyer
f3bcdbe5bd fix: translatable web footer (#40834) 2024-04-02 15:14:38 +00:00
Nabin Hait
e8dcbe2625 fix: depr amount pro rata and related tests 2024-04-02 18:28:40 +05:30
HarryPaulo
bf88b8eb65 fix: wrong value for total amount in payments 2024-04-02 09:50:30 -03:00
rohitwaghchaure
1e4b920fd2 Merge pull request #40828 from rohitwaghchaure/chore-removed-manual-option-from-bom
chore: remove rate of material based on Manual
2024-04-02 18:10:32 +05:30
Rohit Waghchaure
0b63dbf221 chore: remove rate of material based on Manual 2024-04-02 16:32:03 +05:30
Nihantra C. Patel
7768544226 fix: purchase order and quotation creation upd 2024-04-02 16:18:19 +05:30
Nihantra C. Patel
7acbfc06a0 fix: purchase order and quotation creation 2024-04-02 16:15:27 +05:30
Nihantra C. Patel
f2b96869aa fix: purchase order and quotation creation 2024-04-02 16:06:38 +05:30
Nabin Hait
5281553b61 Merge pull request #40584 from nabinhait/fixed-asset-register-currency
fix: show currency symbol in base currency in fixed asset register report
2024-04-02 15:56:10 +05:30
Nabin Hait
21a40a2236 fix: linter issues 2024-04-02 15:35:06 +05:30
rohitwaghchaure
4c8dfb2e6a Merge pull request #40816 from rohitwaghchaure/fixed-12159
fix: added validation if parent id is missing in BOM Creator
2024-04-02 15:11:56 +05:30
rohitwaghchaure
271fea69b8 Merge pull request #40814 from rohitwaghchaure/fixed-barcode-not-fetch-on-stock-entry
fix: barcode not fetched on selection of item
2024-04-02 11:21:07 +05:30
Rohit Waghchaure
0a1fab762f fix: added validation if parent id is missing in BOM Creator 2024-04-02 11:19:31 +05:30
Rohit Waghchaure
b0730293e2 fix: barcode not fetched on selection of item 2024-04-02 10:39:48 +05:30
rohitwaghchaure
15c3f09898 Merge pull request #40720 from mmdanny89/warehouse-pos
Set default warehouse for pos invoice
2024-04-01 22:37:27 +05:30
Deepesh Garg
45d5f6e00a fix: Multiple partial payment requests against Purchase Invoice 2024-04-01 21:21:46 +05:30
Deepesh Garg
edf51c9ab9 Merge pull request #40797 from deepeshgarg007/po_filter
fix: Party type in Payment Order
2024-04-01 20:38:33 +05:30
Deepesh Garg
6416a6ad94 Merge pull request #40796 from deepeshgarg007/pe_default_company_bank_account
fix: Default company bank account
2024-04-01 20:38:17 +05:30
Deepesh Garg
4f8990602e Merge pull request #40770 from deepeshgarg007/so_commission_update
fix: Recalculate sales commission on item update
2024-04-01 20:37:57 +05:30
Deepesh Garg
81cf970883 Merge pull request #40755 from deepeshgarg007/employee_payment_entry_receive
fix: Receive payment entry from Employee
2024-04-01 20:37:40 +05:30
rohitwaghchaure
4c79d92faa Merge pull request #40735 from rohitwaghchaure/fixed-stock-balance-report
fix: Show Stock Ageing Data filter not working in stock balance report
2024-04-01 16:54:12 +05:30
Rohit Waghchaure
621421bda2 fix: Show Stock Ageing Data filter not working in stock balance report 2024-04-01 16:19:21 +05:30
ruthra kumar
2dd07d9292 Merge pull request #40790 from frappe/pot_develop_2024-03-31
chore: update POT file
2024-04-01 15:49:06 +05:30
ruthra kumar
d2b96b415c Merge pull request #40181 from pps190/fix-show-future-payments
fix: show future payments consider allocated sales returns
2024-04-01 13:03:23 +05:30
Deepesh Garg
91fa41c9ec fix: Party type in Payment Order 2024-03-31 20:08:39 +05:30
Deepesh Garg
7ac91deb83 fix: Default company bank account 2024-03-31 19:48:40 +05:30
Deepesh Garg
b542f21eea Merge pull request #40714 from khushi8112/general_ledger_report_voucher_no
fix: voucher no. is link field for non english user interface
2024-03-31 19:23:01 +05:30
frappe-pr-bot
6283ff5d52 chore: update POT file 2024-03-31 09:35:24 +00:00
rohitwaghchaure
9bacf53f04 Merge pull request #40786 from rtdany10/gp-wh-issue
fix(gp): SLEs not fetched for correct warehouse
2024-03-31 11:45:49 +05:30
rohitwaghchaure
4f91effca9 Merge pull request #40778 from blaggacao/chore/into-child-mapper
chore(stock): use the into child mapper mapper frappe/frappe#22592
2024-03-31 11:43:56 +05:30
Dany Robert
f958e8be06 fix(gp): SLEs not fetched for correct warehouse 2024-03-30 16:32:43 +05:30
rohitwaghchaure
3231ee4d9d Merge pull request #40783 from rohitwaghchaure/fixed-provision-to-add-serial-batch-bundle-in-subcontracting-receipt
fix: button to select serial / batch bundle in the subcontracting receipt
2024-03-30 11:23:20 +05:30
Rohit Waghchaure
d73b1f3e6a fix: button to select serial / batch bundle in the subcontracting receipt 2024-03-30 10:46:56 +05:30
jeshani
679aea607b fix: Warehouse linked company name in multicompany setup (#40779) 2024-03-30 10:16:22 +05:30
Richard Case
ee140369a3 feat: significant enhancements to sales analytics report to support charts 2024-03-29 22:51:28 +00:00
David Arnold
28c75b8f4d chore(stock): use the into child mapper mapper frappe/frappe#22592 2024-03-29 23:28:33 +01:00
Deepesh Garg
2a8a404c69 Merge branch 'develop' of https://github.com/frappe/erpnext into so_commission_update 2024-03-29 18:02:53 +05:30
Deepesh Garg
f76da50b7e fix: Recalculate sales commission on item update 2024-03-29 17:57:58 +05:30
Gursheen Anand
af26ac96e9 fix: do not add actual expense twice for validating budget 2024-03-29 17:22:48 +05:30
David Arnold
7032a108a8 Merge branch 'develop' into feat/add-login-user-to-driver 2024-03-29 10:51:30 +01:00
rohitwaghchaure
8e522183bc Merge pull request #40758 from ashish-greycube/patch-12
fix: payment_order_status should be no_copy
2024-03-29 13:25:13 +05:30
ruthra kumar
66a06ca1a5 Merge pull request #40760 from ruthra-kumar/fix_cost_center_update_in_gain_loss_journal
fix: cost center shouldn't update debit/credit in Exc gain/loss JV
2024-03-29 11:42:44 +05:30
rohitwaghchaure
a3fbeff333 Merge pull request #40757 from rohitwaghchaure/fixed-validation-message
chore: show item name in the validation message
2024-03-29 11:35:07 +05:30
ruthra kumar
398d3022ef fix: cost center shouldn't update debit/credit in Exc gain/loss JV 2024-03-29 11:32:34 +05:30
Rohit Waghchaure
d05412f96a chore: show item name in the validation message 2024-03-29 10:53:04 +05:30
Ashish Shah
adee2ba541 fix: payment_order_status should be no_copy
payment_order_status should be no_copy
2024-03-29 10:52:52 +05:30
rohitwaghchaure
ce2b9de9be Merge pull request #40752 from rohitwaghchaure/provision-to-override-batch-dialog
chore: allow to override serial batch selector using custom app
2024-03-29 09:10:36 +05:30
Deepesh Garg
29e5c6807e fix: Receive payment entry from Employee 2024-03-29 09:05:35 +05:30
Frappe PR Bot
10bf6529ef fix: sync translations from crowdin (#40717)
Co-authored-by: barredterra <14891507+barredterra@users.noreply.github.com>
2024-03-28 17:16:11 +01:00
Raffael Meyer
2e15b224aa Merge pull request #40749 from barredterra/crowdin-config 2024-03-28 14:31:51 +01:00
barredterra
e5f87ef8da chore: copy crowdin config from frappe 2024-03-28 14:14:50 +01:00
Raffael Meyer
a2961a427d Merge pull request #40725 from barredterra/in-context-translation 2024-03-28 14:11:54 +01:00
Deepesh Garg
fe1290a89a Merge pull request #40734 from deepeshgarg007/trend_report_filters
fix: Filters in trend reports
2024-03-28 18:16:14 +05:30
rohitwaghchaure
e04cad3368 Merge pull request #40741 from rohitwaghchaure/fixed-sales-purchase-return-validation-issue
fix: sales / purchase return validation issue
2024-03-28 17:52:55 +05:30
ruthra kumar
139c18f2cc Merge pull request #40739 from ruthra-kumar/use_sql_to_clear_comments_and_communications
refactor: use sql to clear comments
2024-03-28 17:40:54 +05:30
Rohit Waghchaure
59dc4a96e1 fix: sales / prchase return validation issue 2024-03-28 16:45:09 +05:30
ruthra kumar
1f46c1530e refactor: use sql to clear comments 2024-03-28 13:56:20 +05:30
Deepesh Garg
5a151189ad Merge pull request #40731 from Nihantra-Patel/fix_tax_format
fix: markdown to text editor set for supplier quotation
2024-03-28 12:44:45 +05:30
Deepesh Garg
c15a320940 chore: remove hardcoded FY 2024-03-28 12:25:42 +05:30
Deepesh Garg
87324c7349 fix: Filters in trend reports 2024-03-28 12:07:49 +05:30
rohitwaghchaure
4d41516abb Merge pull request #40713 from rohitwaghchaure/fixed-12091
fix: enable list view for the issues on the portal
2024-03-28 11:07:07 +05:30
Nihantra Patel
9828d34b19 fix: markdown to text editor set for supplier quotation 2024-03-28 10:30:13 +05:30
ruthra kumar
6b2f745afe Merge pull request #40719 from frappe/fix-ruff-qb-formatting
fix: exclude some query builder lines from ruff rules
2024-03-28 09:48:05 +05:30
ruthra kumar
eee86d2e4b fix: use 'eq' and isnull() on qb conditions 2024-03-28 09:18:33 +05:30
barredterra
04c91e263d chore: add crowin identifiers for in-context translation 2024-03-27 19:31:19 +01:00
rohitwaghchaure
9709a18ef5 Merge pull request #40718 from rohitwaghchaure/fixed-do-not-fetch-recived-items-12005
fix: do not fetch received items in purchase receipt
2024-03-27 22:40:18 +05:30
Danny
b156937254 fix: set default warehouse for pos invoice 2024-03-27 12:41:58 -04:00
Akhil Narang
ac69513f60 fix: exclude some query builder lines from ruff rules
`== None` and `== True` are intentional here

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-03-27 21:51:09 +05:30
Rohit Waghchaure
5bff434902 fix: do not fetch received items in purchase receipt 2024-03-27 20:05:27 +05:30
“Khushi
db1f7fcf63 fix: fixed incorrect cash flow data in finacial statement report 2024-03-27 16:48:49 +05:30
“Khushi
2b8928cae6 fix: voucher no. is link field for non english user interface 2024-03-27 16:25:13 +05:30
Akhil Narang
a4dd1c2bf6 Merge pull request #40681 from barredterra/ruff
chore: switch to ruff for python formatting/linting
2024-03-27 16:23:00 +05:30
Rohit Waghchaure
bddc1e3974 fix: enable list view for the issues on the portal 2024-03-27 16:17:22 +05:30
Akhil Narang
89b5e061af ci: sync up action versions with framework
Fixup some tests for py312

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-03-27 16:06:04 +05:30
Akhil Narang
54cd492217 chore: update list of revisions for git blame to ignore
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-03-27 16:06:04 +05:30
Akhil Narang
f63396ef47 fix(treewide): manual ruff fixes
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-03-27 16:06:04 +05:30
Akhil Narang
3effaf21ef refactor(treewide): formatting and ruff fixes, + manually enabled F401
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-03-27 16:06:04 +05:30
barredterra
8afb7790de chore: switch to ruff for python formatting/linting 2024-03-27 16:06:04 +05:30
rohitwaghchaure
8c7213ad7d Merge pull request #40708 from rohitwaghchaure/fixed-priority-has-not-copied-11942
fix: Priority not copied from project template
2024-03-27 15:43:30 +05:30
Rohit Waghchaure
33fd7b8a1f fix: Priority not copied from project template 2024-03-27 15:13:51 +05:30
s-aga-r
5daf19da40 fix(ux): Sales Order Stock Reservation Dialog 2024-03-27 14:52:05 +05:30
ruthra kumar
19e054c7a7 Merge pull request #40706 from ruthra-kumar/typeerror_in_purchase_order
fix: typeerror on Purchase Order form UI
2024-03-27 14:38:49 +05:30
ruthra kumar
57f67faba1 fix: typeerror on Purchase Order form UI 2024-03-27 14:28:37 +05:30
Ankush Menat
c2470ccc70 refactor: usage of modified ordering (#40705)
Audited some important code:
- general_ledger.py
- stock_ledger.py
2024-03-27 08:48:01 +00:00
Ankush Menat
dfde490c02 refactor!: switch to creation sort (#40699) 2024-03-27 13:45:34 +05:30
rohitwaghchaure
95dcb75e93 Merge pull request #40700 from rohitwaghchaure/fixed-rate-changing-on-qty-change-11659
fix: rate changed on changing of the qty
2024-03-27 13:36:22 +05:30
Rohit Waghchaure
cd36a1051f fix: rate changed on changing of the qty 2024-03-27 13:29:22 +05:30
Nabin Hait
6c1e9fab27 fix: Get pro-rata amount based on correct days 2024-03-27 12:24:20 +05:30
Rohit Waghchaure
0d9d42ae61 chore: allow to override serial batch selector 2024-03-27 11:52:06 +05:30
Deepesh Garg
1b0f95088a Merge pull request #40641 from deepeshgarg007/cur_frm_reduce
chore: Reduce usage of cur_frm
2024-03-27 11:45:26 +05:30
ruthra kumar
f96cf111ed chore: schedule job to run daily 2024-03-27 10:33:54 +05:30
ruthra kumar
1a43ed763b chore: permission and UI changes 2024-03-27 10:14:29 +05:30
ruthra kumar
00eeacd06a refactor: only run checks on specified companies 2024-03-27 10:10:55 +05:30
ruthra kumar
704925549b refactor: make health check configurable for companies 2024-03-27 10:08:17 +05:30
ruthra kumar
a42482ce35 refactor: control monitoring through settings page 2024-03-27 10:01:50 +05:30
ruthra kumar
b2fb7843d1 chore: settings page for health monitor 2024-03-27 09:53:27 +05:30
Raffael Meyer
652b4e5dcd Merge pull request #40663 from barredterra/uom-data 2024-03-27 00:28:21 +01:00
Frappe PR Bot
edced3fd21 fix: sync translations from crowdin (#40683) 2024-03-27 00:25:03 +01:00
“Khushi
f189be501b fix: default accounting dimension in journal entry child table 2024-03-27 00:08:39 +05:30
ruthra kumar
8c8d9be810 refactor: barebones method to run checks 2024-03-26 20:04:43 +05:30
ruthra kumar
d620b9eae8 refactor: flag for general and payment ledger mismatch 2024-03-26 20:04:43 +05:30
rohitwaghchaure
533627df3b Merge pull request #40685 from rohitwaghchaure/fixed-incorrect-validation-11901
fix: validation error for the subcontracting receipt
2024-03-26 19:54:55 +05:30
Rohit Waghchaure
016585c248 fix: validation error for the subcontracting receipt 2024-03-26 19:33:48 +05:30
rohitwaghchaure
683da71c5e Merge pull request #40684 from rohitwaghchaure/fixed-incorrect-total-qty
fix: incorrect total qty in job card
2024-03-26 19:32:04 +05:30
Rohit Waghchaure
c3546cf8e2 fix: incorrect total qty in job card 2024-03-26 18:16:37 +05:30
ruthra kumar
402ffc6d27 refactor: date on which vouchers was reported 2024-03-26 17:57:04 +05:30
ruthra kumar
9ed74dd8cc feat: ledger health doctype 2024-03-26 17:53:47 +05:30
rohitwaghchaure
2e30dda0cd Merge pull request #40674 from rohitwaghchaure/fixed-batch-queries-in-popup
fix: existing batch from different warehouse not showing in the dropdown
2024-03-26 16:04:14 +05:30
Rohit Waghchaure
662cf21afb fix: existing batch from different warehouse not showing in the dropdown 2024-03-26 14:31:18 +05:30
Nabin Hait
8b6220efd8 fix: show currency symbol in base currency in fixed asset register report 2024-03-26 12:54:50 +05:30
rohitwaghchaure
b3e163e9d8 Merge pull request #40672 from rohitwaghchaure/fixed-item-issue-11972
fix: item not coming in quick entry
2024-03-26 11:42:33 +05:30
Rohit Waghchaure
dcbb54c41f fix: item not coming in quick entry 2024-03-26 11:38:09 +05:30
ruthra kumar
064127935b Merge pull request #40634 from wojosc/patch-42
refactor: better pop up message for Internal Customer validation
2024-03-26 09:47:45 +05:30
Frappe PR Bot
5ed13fa913 chore: sync translations from crowdin (#40343)
chore: sync translations from crowdin
2024-03-26 09:06:11 +05:30
Deepesh Garg
d0e654528b Merge pull request #40431 from FHenry/dev_fix_opportunity_type_translatable
fix: Opportunity Type Doctype must be translatable
2024-03-26 09:04:39 +05:30
Raffael Meyer
1be2df81c9 Merge pull request #40586 from barredterra/validate-item-price-uom 2024-03-25 23:27:18 +01:00
barredterra
4d4d88ec5f fix: use untranslated UOM as default 2024-03-25 23:19:27 +01:00
barredterra
b49d64de63 feat: add translatable string extractor for UOM names 2024-03-25 23:19:13 +01:00
barredterra
8fa5707911 refactor: create UOMs during setup 2024-03-25 23:18:36 +01:00
barredterra
34344a062e fix: translate uom names 2024-03-25 22:59:22 +01:00
barredterra
679204ecb8 chore: enhance uom data
- sort by uom_name
- add common_code and symbol
2024-03-25 22:55:46 +01:00
Raffael Meyer
f20c54a6c1 Merge pull request #40593 from barredterra/uom-fields 2024-03-25 21:53:22 +01:00
Raffael Meyer
f316a29ba6 Merge pull request #40635 from frappe/pot_develop_2024-03-24 2024-03-25 21:41:07 +01:00
David Arnold
462204fc65 fix(Payment Entry): get contact details from existing contact (#40556) 2024-03-25 20:12:44 +01:00
Deepesh Garg
e04a3b107a Merge pull request #40627 from deepeshgarg007/da_code_cleanup
chore: Discount accounting code cleanup
2024-03-25 19:06:26 +05:30
Raffael Meyer
441969d7d6 Merge branch 'develop' into validate-item-price-uom 2024-03-25 14:25:54 +01:00
Deepesh Garg
7d7d10e422 Merge pull request #40577 from barredterra/one-item-price
perf: query one item price only
2024-03-25 17:22:49 +05:30
Deepesh Garg
12945341ce Merge pull request #40589 from barredterra/get_prices_as_dict
refactor: get prices as dict
2024-03-25 17:18:31 +05:30
Deepesh Garg
5ab9656e8f Merge pull request #40640 from deepeshgarg007/default_fb_pl
fix: Add default finance book check in P&L statement
2024-03-25 14:43:29 +05:30
Ankush Menat
e055147849 fix: address_display, text -> text editor (#40621)
* fix: address_display, text -> text editor

* fix: text -> text editor for shipping and dispatch_address
2024-03-25 05:46:16 +00:00
Wolfram Schmidt
b132892b25 refactor: better pop message for Internal Customer validation
-added more meaningful description to message when using "internal Customer" scenario
2024-03-25 09:35:32 +05:30
Deepesh Garg
e44809bcc9 chore: Reduce usage of cur_frm 2024-03-24 19:27:07 +05:30
Deepesh Garg
5be3417fdf fix: Add default finance book check in P&L statement 2024-03-24 19:02:38 +05:30
rohitwaghchaure
c89b0e37ab Merge pull request #40638 from rohitwaghchaure/fixed-40578
fix: Batch No is mandatory while making manufacture entry
2024-03-24 18:31:19 +05:30
Rohit Waghchaure
43fd60a877 fix: Batch No is mandatory while making manufacture entry 2024-03-24 17:44:37 +05:30
rohitwaghchaure
079cc8bd21 Merge pull request #40594 from rohitwaghchaure/fixed-serial-batch-bundle-scr
fix: use serial/batch fields for subcontracting receipt and in transit in stock entry
2024-03-24 16:03:46 +05:30
frappe-pr-bot
d47b87ba71 chore: update POT file 2024-03-24 09:35:26 +00:00
Deepesh Garg
ae31f2c5ad Merge pull request #40504 from khushi8112/selling-coupon-code
feat: Coupon code in sales invoice
2024-03-23 17:07:41 +05:30
Deepesh Garg
24e2672fde Merge branch 'develop' into selling-coupon-code 2024-03-23 14:42:47 +05:30
Deepesh Garg
aaa1df6a1f chore: Discount accounting code cleanup 2024-03-23 00:19:27 +05:30
Rohit Waghchaure
3423334e4f fix: use serial/batch fields for subcontracting receipt and in transit stock entry 2024-03-22 23:13:47 +05:30
ruthra kumar
b1a9b6d64a Merge pull request #40622 from ruthra-kumar/refactor_flag_update_patch
refactor: reset update_outstanding_for_self flag for old records
2024-03-22 20:22:14 +05:30
ruthra kumar
fdcdc8a56e refactor: hide on print formats 2024-03-22 17:50:51 +05:30
ruthra kumar
a88bf8419e refactor: reset flag for old records 2024-03-22 16:16:07 +05:30
rohitwaghchaure
6d603cc35f Merge pull request #40616 from rohitwaghchaure/fixed-rate-reset-to-zero-11988
fix: rate reset to zero
2024-03-22 15:19:54 +05:30
Rohit Waghchaure
6821baa850 fix: rate reset to zero 2024-03-22 15:03:38 +05:30
ruthra kumar
844ad405ff Merge pull request #40509 from blaggacao/fix/cutoff-date-implementation
fix: permissions sales user for selling settings
2024-03-22 10:13:58 +05:30
ruthra kumar
6940c2b0aa Merge pull request #40520 from blaggacao/fix/bulk-tx-log-permissions
fix: permissions during bulk transaction logs
2024-03-22 10:07:08 +05:30
ruthra kumar
f30e5eab11 fix: query 'Selling Settings' 2024-03-22 09:55:47 +05:30
ruthra kumar
4972f6b66f Merge pull request #40208 from barredterra/refactor-semgrep
refactor: reduce usage of `cur_frm`
2024-03-22 09:28:19 +05:30
Akhil Narang
1cd38c860a perf: add in some indexes (#40590)
`Sales Invoice Item.purchase_order`
`Delivery Note Item.purchase_order`

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2024-03-22 08:47:03 +05:30
rohitwaghchaure
eb45a71997 Merge pull request #40595 from rohitwaghchaure/fixed-rate-not-fetch-from-item-price
fix: rate not fetching from the item price
2024-03-21 22:18:28 +05:30
ruthra kumar
2bd9c5b001 Merge pull request #40386 from rtdany10/gp-report-rate
fix: wrong buying amount if delivered and billed qty varies
2024-03-21 21:13:32 +05:30
Rohit Waghchaure
d893a465d7 fix: rate not fetching from the item price 2024-03-21 21:04:03 +05:30
ruthra kumar
ccb51ded95 test: buying amt calculation if DN and SI differ in qty 2024-03-21 20:57:52 +05:30
barredterra
4a49618cd7 feat(UOM): add common code, symbol and description 2024-03-21 15:49:45 +01:00
Raffael Meyer
9fcddc3378 Merge pull request #40587 from barredterra/validate-price-dates 2024-03-21 14:12:37 +01:00
barredterra
58b3ce6a19 refactor: get prices as dict 2024-03-21 13:48:05 +01:00
barredterra
cbcc47b5c4 refactor(Item Price): validate dates 2024-03-21 11:57:22 +01:00
barredterra
69824eff80 feat(Item Price): validate UOM 2024-03-21 11:52:10 +01:00
ruthra kumar
64f686d943 Merge pull request #40580 from ruthra-kumar/config_changes_in_transaction_deletion_record
refactor: config changes in Transaction Deletion Record
2024-03-21 10:45:54 +05:30
ruthra kumar
4ba67fb3ec refactor: config changes in Transaction Deletion Record 2024-03-21 10:29:56 +05:30
barredterra
be9fe7331a perf: query one item price only 2024-03-20 19:37:34 +01:00
Deepesh Garg
1714ac6587 Merge pull request #40572 from GursheenK/pcv-validate-only-valid-gles
fix: PCV validation for previous fiscal year
2024-03-20 20:55:08 +05:30
ruthra kumar
0a495bf65e Merge pull request #39717 from ruthra-kumar/redesign_transaction_deletion_record
refactor: Transaction Deletion record for large volumes
2024-03-20 19:41:39 +05:30
Gursheen Anand
a1d108c062 fix: validate gl for previous fiscal year 2024-03-20 18:45:04 +05:30
Deepesh Garg
986357428d Merge pull request #40563 from GursheenK/tax-breakup-table-docfield
fix: use `Text Editor` for rendering tax breakup table
2024-03-20 18:32:38 +05:30
Ankush Menat
967540da18 fix: style for tax breakup 2024-03-20 16:56:30 +05:30
rohitwaghchaure
e1ce7bfb11 Merge pull request #40545 from barredterra/bom-configurator-labels
fix: translatability of bom configurator labels
2024-03-20 16:18:22 +05:30
Gursheen Anand
1c63983873 fix: use Text Editor for rendering tax breakup table 2024-03-20 16:09:14 +05:30
ruthra kumar
02c522b7cd chore: fix linting issue in JS 2024-03-20 16:01:09 +05:30
ruthra kumar
81309576b0 refactor(test): test cases modified to handle new approach 2024-03-20 15:16:33 +05:30
ruthra kumar
a158b825d7 refactor: ability to process in single transaction 2024-03-20 15:12:26 +05:30
rohitwaghchaure
50bfb8eaa9 Merge pull request #40561 from rohitwaghchaure/fixed-11260
fix: Cannot read properties of undefined (reading 'rate')
2024-03-20 15:00:14 +05:30
Rohit Waghchaure
ac92a22914 fix: Cannot read properties of undefined (reading 'rate') 2024-03-20 14:56:07 +05:30
ruthra kumar
5a3afea8c7 refactor: link running doc validation to company master 2024-03-20 14:47:11 +05:30
ruthra kumar
5fe0b20be1 chore: rename entry point 2024-03-20 14:10:08 +05:30
rohitwaghchaure
dfffaddf03 Merge pull request #40559 from rohitwaghchaure/fixed-pick-list-issue-11688
fix: pick list not picked materials having required qty less than 1
2024-03-20 13:51:43 +05:30
Rohit Waghchaure
1a9ae33110 fix: pick list not picked qty less than 1 2024-03-20 13:18:23 +05:30
Nabin Hait
1d91e1788c Merge pull request #40549 from nabinhait/provisional-entry-fix2
fix: provisional entry for non-stock item
2024-03-19 21:59:11 +05:30
Nabin Hait
b73f51a9bd fix: get unique provisional accounts 2024-03-19 21:06:46 +05:30
rohitwaghchaure
0725707cb1 fix: currency symbol for Landed Cost Voucher Amount (#40550) 2024-03-19 20:15:36 +05:30
Nabin Hait
9996d6b7e6 fix: provisional entry for non-stock item 2024-03-19 18:44:13 +05:30
ruthra kumar
3cec62d4f8 chore: move status and error log to their own section 2024-03-19 17:49:05 +05:30
ruthra kumar
0455d0c46c refactor: minor UI tweaks 2024-03-19 17:41:37 +05:30
ruthra kumar
4a55240e63 refactor: exception propogation 2024-03-19 17:39:20 +05:30
Raffael Meyer
815df8e795 Merge pull request #40546 from barredterra/fix-group-by 2024-03-19 12:50:37 +01:00
barredterra
87e36d290e fix(Supplier Quotation Comparison): group by options 2024-03-19 12:34:23 +01:00
barredterra
4cfe99d74f fix: translatability of bom configurator labels 2024-03-19 12:29:50 +01:00
barredterra
e9e985aea0 refactor: use this.frm instead of cur_frm 2024-03-19 12:26:54 +01:00
barredterra
775e8db04e refactor: reduce usage of cur_frm 2024-03-19 12:26:50 +01:00
Raffael Meyer
a8d458b979 Merge pull request #40542 from barredterra/remove-in-list 2024-03-19 12:11:16 +01:00
barredterra
d238751e6b refactor: usage of in_list 2024-03-19 12:03:36 +01:00
Nabin Hait
5691cc6323 Merge pull request #40456 from nabinhait/pi-optimization-dev
perf: Performance optimization for Purchase Invoice submission
2024-03-19 16:09:17 +05:30
rohitwaghchaure
8136954484 fix: rate changing while making PR (negative discount) (#40539) 2024-03-19 15:26:09 +05:30
rohitwaghchaure
a64c2ecf39 fix: stock reco negative batch (#40533) 2024-03-19 14:54:17 +05:30
Gursheen Kaur Anand
5a8004bc58 Merge pull request #40528 from GursheenK/add-range-for-psoa
fix(minor): missing range for ageing summary in PSOA
2024-03-19 12:39:47 +05:30
Gursheen Anand
643cc022fd fix: missing range for ageing summary 2024-03-19 12:12:26 +05:30
rohitwaghchaure
09ea7edb86 fix: Update Existing Price List Rate not working (#40333) 2024-03-19 12:10:24 +05:30
ruthra kumar
eea260b9f9 chore: code cleanup 2024-03-19 11:18:11 +05:30
ruthra kumar
0182713dd6 Merge pull request #40502 from ruthra-kumar/toggle_http_and_https_on_currency_exchange_settings
refactor: toggle between 'http' and 'https' on exchange rate API
2024-03-19 09:59:16 +05:30
Raffael Meyer
12f97e3c63 Merge pull request #40521 from barredterra/rfq-supplier-count 2024-03-19 02:33:52 +01:00
barredterra
8d1b530070 fix(RFQ): load up to 100 suppliers 2024-03-19 02:22:52 +01:00
David
49dd4c1ef3 fix: permissions during bulk transaction logs 2024-03-18 23:08:38 +01:00
David
2f3d6cd304 fix: permissions for selling settings 2024-03-18 19:52:24 +01:00
Nabin Hait
e43beac086 fix: provisional entry for non-stock item 2024-03-18 22:07:12 +05:30
ruthra kumar
3dd6686d8a Merge pull request #40511 from ruthra-kumar/incorrect_exc_gain_loss
fix: invalid exchange loss booking on invoice against base accounts
2024-03-18 20:39:40 +05:30
ruthra kumar
e1c2d006ca refactor(test): ensure Exchange gain/loss journals aren't created 2024-03-18 20:24:05 +05:30
ruthra kumar
3d5dba6976 fix: invalid exchange loss booking on invoice againts base accounts 2024-03-18 15:34:21 +05:30
rohitwaghchaure
7695759f3c fix: not able to delete cancelled delivery note (#40508) 2024-03-18 15:09:55 +05:30
rohitwaghchaure
00de529a1e fix: balance qty in the stock ledger report (#40506) 2024-03-18 12:41:43 +05:30
“Khushi
08893d1f75 chore: fixed merged conflicts 2024-03-18 11:46:17 +05:30
“Khushi
11616bec26 style: removed print statement 2024-03-18 11:18:14 +05:30
ruthra kumar
8b81274769 refactor: toggle between 'http' and 'https' on exchange rate API 2024-03-18 09:26:27 +05:30
Deepesh Garg
6d47b8a24e Merge pull request #40459 from Nihantra-Patel/fix_sp_address
fix: sales partner address display Issue
2024-03-17 11:05:48 +05:30
Nihantra C. Patel
cefb8f69e5 chore: minor cleanup | add comma 2024-03-17 10:51:34 +05:30
ruthra kumar
1fc099dacf Merge pull request #40494 from ruthra-kumar/bank_statement_import_error
fix: AttributeError in Bank Statement Import
2024-03-17 07:52:19 +05:30
ruthra kumar
c46c329ed8 Merge pull request #40495 from ruthra-kumar/indexerror_on_err_creation
fix: index error on Exchange Rate Revaluation creation
2024-03-17 07:50:21 +05:30
ruthra kumar
bb279e368c fix: index error on Exchange Rate Revaluation creation 2024-03-17 07:32:13 +05:30
ruthra kumar
aec630c74f fix: attribute error on Bank Statement Import retry 2024-03-17 06:46:06 +05:30
ruthra kumar
3cde81be65 fix: don't validate for currency, if account is unavailable 2024-03-17 06:35:31 +05:30
Devin Slauenwhite
3381d0d945 fix: show future payments allocated sales returns is considered as payment 2024-03-16 15:24:12 -04:00
Devin Slauenwhite
daaa00bd4a test: show future payments allocated sales returns is considered as payment 2024-03-16 15:24:12 -04:00
Deepesh Garg
2fadfd7cfc Merge pull request #40428 from deepeshgarg007/search_field_fix
chore: Remove custom party queries
2024-03-16 20:03:31 +05:30
Deepesh Garg
60ba25caf2 fix: Remove custom queries for customer 2024-03-16 19:47:39 +05:30
Deepesh Garg
f3f6bc8042 chore: minor cleanup 2024-03-16 19:15:59 +05:30
Ankush Menat
b171784d85 Merge pull request #40491 from frappe/make_bom_tests_work
test: fix bom test
2024-03-16 19:12:29 +05:30
Deepesh Garg
eccd5b4c5d chore: better description 2024-03-16 19:11:59 +05:30
Ankush Menat
c80356c7c9 test: remove broken bom test
These variables never existed, the test was passing because of a bug in
timeout decorator https://github.com/frappe/frappe/pull/25491
2024-03-16 18:58:19 +05:30
ruthra kumar
c9039d767b Merge pull request #40485 from ruthra-kumar/prevent_partial_links_between_so_and_dn
refactor: validate SO and SI references in Delivery Notes
2024-03-16 14:57:41 +05:30
ruthra kumar
4f396d3049 test: SO reference validation 2024-03-16 14:39:57 +05:30
ruthra kumar
4d090bd3b8 refactor: validate SO and SI references 2024-03-16 14:28:14 +05:30
ruthra kumar
30463657bf refactor: better method naming 2024-03-16 10:41:05 +05:30
ruthra kumar
ec194ef076 refactor: barebones hook on all doctypes with 'company' field 2024-03-16 10:41:05 +05:30
ruthra kumar
78c9cc63b1 refactor: make sure only one task is running for doc 2024-03-16 10:41:05 +05:30
ruthra kumar
98afb4d468 chore: hide docfield in list view 2024-03-16 10:41:05 +05:30
ruthra kumar
31a2da552b refactor: validations to prevent duplicate jobs 2024-03-16 10:41:05 +05:30
ruthra kumar
55e93b3fe1 refactor: no copy on summary table and more validations 2024-03-16 10:41:05 +05:30
ruthra kumar
2dbe68a09d refactor: reset all flags and remove unwanted code 2024-03-16 10:41:05 +05:30
ruthra kumar
1014940953 chore: show correct status in list view 2024-03-16 10:41:04 +05:30
ruthra kumar
86b5e2e277 refactor: validate status before running events 2024-03-16 10:40:26 +05:30
ruthra kumar
7c4cff2649 refactor: make Excluded doctype table read only 2024-03-16 10:40:24 +05:30
ruthra kumar
b98a5e4edc chore: remove unwanted UI code 2024-03-16 10:40:06 +05:30
ruthra kumar
49d3bcbc8d refactor: use separate child table for summary 2024-03-16 10:39:17 +05:30
ruthra kumar
b12ca65fcc refactor: chained callback 2024-03-16 10:38:32 +05:30
ruthra kumar
cccb2d5141 refactor: reorder flags in Tasks section 2024-03-16 10:38:32 +05:30
ruthra kumar
6a77d86a53 refactor: use flags to decide on current stage 2024-03-16 10:38:31 +05:30
ruthra kumar
8944ab8b6a refactor: UI trigger 2024-03-16 10:37:18 +05:30
ruthra kumar
d0dc2c6e77 refactor: tasks section and UI niceties 2024-03-16 10:35:59 +05:30
ruthra kumar
6fbb67b1d2 refactor: set status and trigger job on submit 2024-03-16 10:35:59 +05:30
ruthra kumar
0d65d878de refactor: more options for 'status' and move it to top 2024-03-16 10:35:59 +05:30
rohitwaghchaure
1ff8a6f24f fix: stopped mr showing in the popup (#40478) 2024-03-15 18:20:09 +05:30
rohitwaghchaure
59222813af fix: serial and batch for internal transfer (#40467)
* fix: serial and batch for internal transfer

* chore: fix test cases
2024-03-15 17:55:41 +05:30
ruthra kumar
a84b9434a9 Merge pull request #40473 from ruthra-kumar/config_changes_on_cr_note_self_update_flag
refactor: enable no-copy for update_outstanding_for_self
2024-03-15 17:01:41 +05:30
ruthra kumar
a1e8caa5c1 refactor: enable no-copy for update_outstanding_for_self 2024-03-15 16:44:54 +05:30
Gursheen Kaur Anand
05e8b6c9f6 Merge branch 'develop' into valuation-tax-gle-via-lcv 2024-03-15 12:51:40 +05:30
ruthra kumar
ec55831440 Merge pull request #40260 from ruthra-kumar/support_payment_against_payment
refactor: support payment against reverse payment reconciliation
2024-03-15 12:51:38 +05:30
Gursheen Kaur Anand
a06c3e9f9f Merge pull request #40429 from GursheenK/sales-partner-targets-achieved
fix: achieved targets for territory / partners
2024-03-15 12:45:01 +05:30
Gursheen Kaur Anand
80d3dd2846 Merge pull request #40198 from GursheenK/due-date-for-invoices-via-data-import
fix: auto-update due date for invoices via data import
2024-03-15 12:44:36 +05:30
Nihantra Patel
d721de13aa fix: update description of Supplier Invoice Number 2024-03-15 12:14:34 +05:30
ruthra kumar
a3d4aff29c refactor(test): generate and use unique party 2024-03-15 12:10:57 +05:30
Gursheen Anand
3e0c798cca chore: merge upstream 2024-03-15 12:08:33 +05:30
Gursheen Anand
f504f2caf3 fix: use in_import flag for checking imported records 2024-03-15 12:00:38 +05:30
ruthra kumar
ad42389352 Merge pull request #40461 from ruthra-kumar/prevent_zero_qty_cr_note_on_stock_items
refactor: disallow '0' qty return invoices with stock effect
2024-03-15 11:06:05 +05:30
ruthra kumar
2a08072443 test: advance payment reconciliation against payment
'advance' payments booked in separate party account
2024-03-15 10:55:00 +05:30
ruthra kumar
6d9074d585 test: reverse payment reconciliation 2024-03-15 10:55:00 +05:30
ruthra kumar
5f15297f28 refactor: support payment against reverse payment reconciliation 2024-03-15 10:55:00 +05:30
ruthra kumar
647bba0f00 test: validation to prevent '0' qty return with stock effect 2024-03-15 10:47:32 +05:30
ruthra kumar
898affbee9 refactor: disallow '0' qty return invoices with stock effect 2024-03-14 16:48:55 +05:30
ruthra kumar
4ed7e3eacd Merge pull request #40420 from ruthra-kumar/fix_advance_journal_fixing_logic
fix: advance journal fetching logic in Advances section
2024-03-14 15:35:06 +05:30
ruthra kumar
12029557fe Merge pull request #40445 from ruthra-kumar/fix_flaky_ar_test
fix: flaky Accounts Receivable test case
2024-03-14 15:31:22 +05:30
Nihantra C. Patel
b62a6b6ab0 fix: sales partner address display Issue --upd 2024-03-14 15:21:28 +05:30
ruthra kumar
a9a9b1297e fix(test): manually filter rows and assert 2024-03-14 15:16:29 +05:30
ruthra kumar
437bdc2d8c fix: flaky Accounts Receivable test case 2024-03-14 15:16:29 +05:30
Nihantra Patel
62d2fe50d2 fix: sales partner address display Issue 2024-03-14 15:12:25 +05:30
Nabin Hait
26202d90cb Merge pull request #40263 from nabinhait/pi-optimization
perf: Performance optmization for Purchase Invoice submission
2024-03-14 14:19:24 +05:30
Nabin Hait
c417e7d800 Merge pull request #40457 from rohitwaghchaure/fixed-test-case-closing-stock-balance
chore: fix test case
2024-03-14 14:17:35 +05:30
Rohit Waghchaure
ec83d54826 chore: fix test case 2024-03-14 13:48:51 +05:30
Gursheen Anand
4cda88690f fix: show correct variance for durations with no vouchers 2024-03-14 12:51:51 +05:30
Deepesh Garg
d15cdd9190 Merge pull request #40433 from deepeshgarg007/client_side_tax_updates
fix: Taxes not getting updated on change
2024-03-14 12:13:16 +05:30
“Khushi
a0247d11bd feat: added coupon code functionality onsales invoice 2024-03-14 12:04:09 +05:30
rohitwaghchaure
cd79dcccb6 fix: Data too long for column 'stock_queue' (#40436) 2024-03-14 11:19:57 +05:30
rohitwaghchaure
f4a945aee4 fix: incorrect gross profit on the quotation (#40438) 2024-03-13 17:48:06 +05:30
“Khushi
10bb1c31a2 feat: added coupon code functionality onsales invoice 2024-03-13 17:47:40 +05:30
Deepesh Garg
65ae9616ba fix: Taxes not getting updated on change 2024-03-13 13:59:50 +05:30
Florian HENRY
560eb174f1 fix: Opportunity Type must be translatable 2024-03-13 09:11:14 +01:00
Gursheen Anand
9f3a310300 test: sales partner targets with invoices 2024-03-13 13:35:24 +05:30
Nabin Hait
8d405684ce Merge pull request #40385 from nabinhait/depreciation-asset-sale-dev
fix: Book depreciation until the asset disposal date and removed unwanted commits
2024-03-13 13:17:23 +05:30
Nabin Hait
d7a4c0dfde Merge pull request #40126 from nabinhait/document-modified-error-dev
fix: Reload document on cancel to avoid document modified error
2024-03-13 13:17:13 +05:30
Gursheen Anand
7690a40ebb fix: achieved targets for sales partners 2024-03-13 12:18:25 +05:30
Deepesh Garg
effc9d1492 chore: Add supplier query back 2024-03-13 12:06:32 +05:30
Deepesh Garg
e87b44f758 chore: remove invalid comment 2024-03-13 12:02:06 +05:30
Deepesh Garg
c9623b6fd6 chore: Remove custom party queries 2024-03-13 11:59:43 +05:30
ruthra kumar
83d48ca8d7 Merge pull request #40372 from ruthra-kumar/toggle_for_standalone_cr_dr_notes
refactor: checkbox to toggle standalone Credit/Debit note behaviour
2024-03-13 11:41:44 +05:30
ruthra kumar
445d2acf50 chore: better popup message 2024-03-13 11:04:09 +05:30
ruthra kumar
ce3b1f09f5 test: cr note flag to update self 2024-03-13 10:57:12 +05:30
ruthra kumar
4d0c2d8e82 refactor: make AR/AP report aware of always standalone cr/dr notes 2024-03-13 09:55:23 +05:30
Raffael Meyer
98a12dd66f Merge pull request #39748 from blaggacao/fix/pe-fill-in-contact-fields 2024-03-13 00:40:41 +01:00
David Arnold
98c7f44280 fix(pe): set contact fields 2024-03-12 23:39:20 +01:00
David
9941469fca Merge remote-tracking branch 'upstream/develop' into feat/add-login-user-to-driver 2024-03-12 23:38:24 +01:00
HENRY Florian
f24f51b7de fix: if input manualy material request on WO the material_request_item is not set so validate WO give error (#40180) 2024-03-12 21:53:21 +05:30
ruthra kumar
e786a93c2e fix: advance journal fetching logic in Advances section 2024-03-12 21:29:44 +05:30
Ernesto Ruiz
f3b4237ab6 chore: Add translation to buttons in Update stock_summary_template.html (#40099)
chore: Add translation to buttons in Update stock_summary_template.html
2024-03-12 21:28:07 +05:30
ruthra kumar
849f478894 chore: patch for updating flag in Cr/Dr notes 2024-03-12 20:41:37 +05:30
Rucha Mahabal
daf4ae2a6b fix: conditionally apply is_group filter in accounting dimension query (#40414) 2024-03-12 14:46:59 +00:00
rohitwaghchaure
f8a1a7f515 fix: qc created for raw materials during manufacture entry (#40408) 2024-03-12 18:11:12 +05:30
rohitwaghchaure
948297692e fix: incorrect work order status (#40407) 2024-03-12 18:11:00 +05:30
Raffael Meyer
79a0473705 fix: error message wording (#40403) 2024-03-12 11:24:49 +00:00
rohitwaghchaure
72614bb8ff fix: recursion issue while submitting work order (#40400) 2024-03-12 16:27:49 +05:30
ruthra kumar
77aac6f571 refactor: post ledger entries based on toggle 2024-03-12 15:58:26 +05:30
rohitwaghchaure
4a02d1497c fix: decimal issue while making the stock entry (#40394) 2024-03-12 15:15:31 +05:30
Gursheen Kaur Anand
5ac5b7f258 Merge pull request #40388 from GursheenK/promotional-scheme-recurse-for
feat: add recursion qty field in promotional scheme
2024-03-12 14:28:17 +05:30
rohitwaghchaure
a419812864 fix: negative stock error for the batch (#40389) 2024-03-12 14:18:39 +05:30
Gursheen Anand
0ffc5cf012 test: pricing rule for product discounts 2024-03-12 13:55:43 +05:30
Gursheen Anand
7075c50b85 feat: add recursion qty field in promotional scheme 2024-03-12 13:16:39 +05:30
Dany Robert
b8da0d9334 fix: wrong buying amount if delivered and billed qty varies 2024-03-12 12:52:19 +05:30
Nabin Hait
dedae4fecf fix: Book depreciation until the asset disposal date and removed unwanted commits 2024-03-12 12:32:57 +05:30
rohitwaghchaure
0da19a40a7 fix: barcode field on line item not working (#40381) 2024-03-12 12:27:21 +05:30
Nabin Hait
7e301f02df fix: convert str to date 2024-03-12 12:25:01 +05:30
rohitwaghchaure
b9a8dd468b fix: Use serial/batch fields for delivery note return (#40374)
fix: User serial/batch fields for delivery note return
2024-03-11 17:06:24 +05:30
Nihantra C. Patel
655a1797be fix: get address if multiple companies 2024-03-11 16:46:00 +05:30
ruthra kumar
a97a851333 Merge pull request #40299 from ruthra-kumar/rewrite_fetch_query_on_bank_reconciliation_tool
refactor: run qb directly instead of converting to sql
2024-03-11 16:44:32 +05:30
Nihantra Patel
c6cf1bec76 fix: get address if multiple companies 2024-03-11 16:34:44 +05:30
ruthra kumar
0344ff2aac chore: replace parameter with qb conditions 2024-03-11 16:01:42 +05:30
ruthra kumar
767f2157e6 refactor: checkbox in purchase invoice 2024-03-11 15:00:26 +05:30
ruthra kumar
adf13a19c4 chore: update popup message 2024-03-11 15:00:26 +05:30
ruthra kumar
2cefe2a20e refactor: checkbox to toggle always standalone credit note 2024-03-11 15:00:24 +05:30
Nabin Hait
d2b34ea05d Merge pull request #40121 from nabinhait/asset-cancel-deletion
fix: Patch to remove cancelled asset capitalization from asset
2024-03-11 12:28:55 +05:30
Rushabh Mehta
cde5b934e5 Merge pull request #40368 from frappe/fix-chore-sales-order
fix(chore): remove inscrutable message via DOM injection (via Sentry)
2024-03-11 12:25:35 +05:30
Rushabh Mehta
c4570ccfad fix(chore): remove inscrutable message via DOM injection (via Sentry) 2024-03-11 12:17:22 +05:30
ruthra kumar
711b72b26c refactor: run qb directly instead of converting to sql 2024-03-06 12:05:11 +05:30
David Arnold
c6a3403270 Merge remote-tracking branch 'origin/develop' into feat/add-login-user-to-driver 2024-03-02 13:16:54 +01:00
Gursheen Anand
c096133897 fix: auto-update due date for invoices via data import 2024-02-29 17:42:25 +05:30
Gursheen Anand
0b36cbe307 fix: reset perpetual inventory flag after test 2024-02-29 13:04:01 +05:30
Gursheen Anand
8b3d46610e fix: parameters for PI references 2024-02-29 11:58:14 +05:30
Gursheen Anand
53642e7417 test: LCV entries after billing 2024-02-29 11:26:31 +05:30
Gursheen Anand
baa3fee1bf fix: add LCV flag to determine negative expenses 2024-02-29 09:04:24 +05:30
Nabin Hait
287eff533a fix: Reload document on cancel to avoid document modified error 2024-02-26 14:55:06 +05:30
Nabin Hait
1951f71eeb fix: Patch to remove cancelled asset capitalization from asset 2024-02-26 12:57:19 +05:30
Nihantra C. Patel
3c9640df27 fix: print format bold for field "total" 2024-02-23 16:37:11 +05:30
David Arnold
b39f7b1c2f Merge remote-tracking branch 'origin/develop' into feat/add-login-user-to-driver 2024-01-31 21:11:03 +01:00
David Arnold
ff7e0eaba5 feat: add login user to driver if available for notifications 2024-01-30 10:31:17 +01:00
1285 changed files with 317779 additions and 120639 deletions

View File

@@ -35,3 +35,6 @@ eb9ee3f79b94e594fc6dfa4f6514580e125eee8c
# js formatting
ec74a5e56617bbd76ac402451468fd4668af543d
# ruff formatting
a308792ee7fda18a681e9181f4fd00b36385bc23

View File

@@ -1,7 +1,7 @@
import sys
import requests
from urllib.parse import urlparse
import requests
WEBSITE_REPOS = [
"erpnext_com",
@@ -36,11 +36,7 @@ def is_documentation_link(word: str) -> bool:
def contains_documentation_link(body: str) -> bool:
return any(
is_documentation_link(word)
for line in body.splitlines()
for word in line.split()
)
return any(is_documentation_link(word) for line in body.splitlines() for word in line.split())
def check_pull_request(number: str) -> "tuple[int, str]":
@@ -53,12 +49,7 @@ def check_pull_request(number: str) -> "tuple[int, str]":
head_sha = (payload.get("head") or {}).get("sha")
body = (payload.get("body") or "").lower()
if (
not title.startswith("feat")
or not head_sha
or "no-docs" in body
or "backport" in body
):
if not title.startswith("feat") or not head_sha or "no-docs" in body or "backport" in body:
return 0, "Skipping documentation checks... 🏃"
if contains_documentation_link(body):

View File

@@ -2,7 +2,9 @@ import re
import sys
errors_encounter = 0
pattern = re.compile(r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,(\s*?.*?\n*?)*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)")
pattern = re.compile(
r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,(\s*?.*?\n*?)*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)"
)
words_pattern = re.compile(r"_{1,2}\([\"'`]{1,3}.*?[a-zA-Z]")
start_pattern = re.compile(r"_{1,2}\([f\"'`]{1,3}")
f_string_pattern = re.compile(r"_\(f[\"']")
@@ -10,14 +12,14 @@ starts_with_f_pattern = re.compile(r"_\(f")
# skip first argument
files = sys.argv[1:]
files_to_scan = [_file for _file in files if _file.endswith(('.py', '.js'))]
files_to_scan = [_file for _file in files if _file.endswith((".py", ".js"))]
for _file in files_to_scan:
with open(_file, 'r') as f:
print(f'Checking: {_file}')
with open(_file) as f:
print(f"Checking: {_file}")
file_lines = f.readlines()
for line_number, line in enumerate(file_lines, 1):
if 'frappe-lint: disable-translate' in line:
if "frappe-lint: disable-translate" in line:
continue
start_matches = start_pattern.search(line)
@@ -28,7 +30,9 @@ for _file in files_to_scan:
has_f_string = f_string_pattern.search(line)
if has_f_string:
errors_encounter += 1
print(f'\nF-strings are not supported for translations at line number {line_number}\n{line.strip()[:100]}')
print(
f"\nF-strings are not supported for translations at line number {line_number}\n{line.strip()[:100]}"
)
continue
else:
continue
@@ -36,25 +40,29 @@ for _file in files_to_scan:
match = pattern.search(line)
error_found = False
if not match and line.endswith((',\n', '[\n')):
if not match and line.endswith((",\n", "[\n")):
# concat remaining text to validate multiline pattern
line = "".join(file_lines[line_number - 1:])
line = line[start_matches.start() + 1:]
line = "".join(file_lines[line_number - 1 :])
line = line[start_matches.start() + 1 :]
match = pattern.match(line)
if not match:
error_found = True
print(f'\nTranslation syntax error at line number {line_number}\n{line.strip()[:100]}')
print(f"\nTranslation syntax error at line number {line_number}\n{line.strip()[:100]}")
if not error_found and not words_pattern.search(line):
error_found = True
print(f'\nTranslation is useless because it has no words at line number {line_number}\n{line.strip()[:100]}')
print(
f"\nTranslation is useless because it has no words at line number {line_number}\n{line.strip()[:100]}"
)
if error_found:
errors_encounter += 1
if errors_encounter > 0:
print('\nVisit "https://frappeframework.com/docs/user/en/translations" to learn about valid translation strings.')
print(
'\nVisit "https://frappeframework.com/docs/user/en/translations" to learn about valid translation strings.'
)
sys.exit(1)
else:
print('\nGood To Go!')
print("\nGood To Go!")

View File

@@ -30,7 +30,7 @@ branch_name="pot_${BASE_BRANCH}_${isodate}"
git checkout -b "${branch_name}"
echo "Commiting changes..."
git add .
git add erpnext/locale/main.pot
git commit -m "chore: update POT file"
gh auth setup-git

View File

@@ -9,8 +9,8 @@ on:
workflow_dispatch:
jobs:
regeneratee-pot-file:
name: Release
regenerate-pot-file:
name: Regenerate POT file
runs-on: ubuntu-latest
strategy:
fail-fast: false

View File

@@ -32,7 +32,7 @@ jobs:
steps:
- name: Clone
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Check for valid Python & Merge Conflicts
run: |
@@ -43,12 +43,12 @@ jobs:
fi
- name: Setup Python
uses: "actions/setup-python@v4"
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.11'
- name: Setup Node
uses: actions/setup-node@v2
uses: actions/setup-node@v4
with:
node-version: 18
check-latest: true
@@ -57,7 +57,7 @@ jobs:
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
@@ -66,7 +66,7 @@ jobs:
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v2
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
@@ -81,7 +81,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}

View File

@@ -29,7 +29,11 @@ jobs:
steps:
- name: Update notes
run: |
NEW_NOTES=$(gh api --method POST -H "Accept: application/vnd.github+json" /repos/frappe/erpnext/releases/generate-notes -f tag_name=$RELEASE_TAG | jq -r '.body' | sed -E '/^\* (chore|ci|test|docs|style)/d' )
NEW_NOTES=$(gh api --method POST -H "Accept: application/vnd.github+json" /repos/frappe/erpnext/releases/generate-notes -f tag_name=$RELEASE_TAG \
| jq -r '.body' \
| sed -E '/^\* (chore|ci|test|docs|style)/d' \
| sed -E 's/by @mergify //'
)
RELEASE_ID=$(gh api -H "Accept: application/vnd.github+json" /repos/frappe/erpnext/releases/tags/$RELEASE_TAG | jq -r '.id')
gh api --method PATCH -H "Accept: application/vnd.github+json" /repos/frappe/erpnext/releases/$RELEASE_ID -f body="$NEW_NOTES"

View File

@@ -54,12 +54,12 @@ jobs:
steps:
- name: Clone
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: '3.11'
python-version: '3.12'
- name: Check for valid Python & Merge Conflicts
run: |
@@ -70,7 +70,7 @@ jobs:
fi
- name: Setup Node
uses: actions/setup-node@v2
uses: actions/setup-node@v4
with:
node-version: 18
check-latest: true
@@ -79,7 +79,7 @@ jobs:
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
@@ -88,7 +88,7 @@ jobs:
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v2
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
@@ -103,7 +103,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -144,13 +144,13 @@ jobs:
if: ${{ github.event_name != 'pull_request' }}
steps:
- name: Clone
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v3
- name: Upload coverage data
uses: codecov/codecov-action@v2
uses: codecov/codecov-action@v4
with:
name: MariaDB
token: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -41,12 +41,12 @@ jobs:
steps:
- name: Clone
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.12'
- name: Check for valid Python & Merge Conflicts
run: |
@@ -57,7 +57,7 @@ jobs:
fi
- name: Setup Node
uses: actions/setup-node@v2
uses: actions/setup-node@v4
with:
node-version: 18
check-latest: true
@@ -66,7 +66,7 @@ jobs:
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
@@ -75,7 +75,7 @@ jobs:
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v2
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
@@ -90,7 +90,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}

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

1
babel_extractors.csv Normal file
View File

@@ -0,0 +1 @@
**/setup/setup_wizard/data/uom_data.json,erpnext.gettext.extractors.uom_data.extract
1 **/setup/setup_wizard/data/uom_data.json erpnext.gettext.extractors.uom_data.extract

View File

@@ -1,4 +1,8 @@
files:
- source: /erpnext/locale/main.pot
translation: /erpnext/locale/%two_letters_code%.po
pull_request_title: "chore: sync translations from crowdin"
pull_request_title: "fix: sync translations from crowdin"
pull_request_labels:
- translation
commit_message: "fix: %language% translations"
append_commit_message: false

View File

@@ -37,9 +37,7 @@ def get_default_cost_center(company):
if not frappe.flags.company_cost_center:
frappe.flags.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"
)
frappe.flags.company_cost_center[company] = frappe.get_cached_value("Company", company, "cost_center")
return frappe.flags.company_cost_center[company]

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",
@@ -65,6 +64,8 @@
"label": "Is Group"
},
{
"fetch_from": "parent_account.company",
"fetch_if_empty": 1,
"fieldname": "company",
"fieldtype": "Link",
"in_standard_filter": 1,
@@ -72,7 +73,6 @@
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"read_only": 1,
"remember_last_selected_value": 1,
"reqd": 1
},
@@ -124,7 +124,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",
@@ -193,7 +194,7 @@
"idx": 1,
"is_tree": 1,
"links": [],
"modified": "2024-01-10 04:57:33.681676",
"modified": "2024-06-27 16:23:04.444354",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account",
@@ -251,8 +252,8 @@
"search_fields": "account_number",
"show_name_in_global_search": 1,
"show_preview_popup": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "ASC",
"states": [],
"track_changes": 1
}
}

View File

@@ -88,12 +88,10 @@ 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_single_value(
"Accounts Settings", "frozen_accounts_modifier"
)
frozen_accounts_modifier = frappe.db.get_single_value("Accounts Settings", "frozen_accounts_modifier")
if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles():
self.set_onload("can_freeze_account", True)
@@ -218,9 +216,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 +414,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 +422,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 +589,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
@@ -249,7 +250,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

@@ -129,7 +129,7 @@
"icon": "fa fa-list",
"in_create": 1,
"links": [],
"modified": "2023-03-06 08:56:36.393237",
"modified": "2024-03-27 13:05:56.710541",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account Closing Balance",
@@ -158,7 +158,7 @@
"role": "Auditor"
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

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

@@ -49,7 +49,7 @@
}
],
"links": [],
"modified": "2021-02-08 16:37:53.936656",
"modified": "2024-03-27 13:05:56.890002",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Dimension",
@@ -80,7 +80,8 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "ASC",
"states": [],
"track_changes": 1
}

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

@@ -1,4 +1,5 @@
{
"actions": [],
"creation": "2019-07-16 17:53:18.718831",
"doctype": "DocType",
"editable_grid": 1,
@@ -73,13 +74,15 @@
}
],
"istable": 1,
"modified": "2019-08-15 11:59:09.389891",
"links": [],
"modified": "2024-03-27 13:05:57.056874",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Dimension Detail",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -94,7 +94,7 @@
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2023-06-07 14:59:41.869117",
"modified": "2024-03-27 13:05:57.199186",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Dimension Filter",
@@ -139,7 +139,7 @@
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1

View File

@@ -66,37 +66,39 @@ 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"):
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,
)
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

@@ -1,317 +1,112 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "field:period_name",
"beta": 0,
"creation": "2018-04-13 18:50:14.672323",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"actions": [],
"autoname": "field:period_name",
"creation": "2018-04-13 18:50:14.672323",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"period_name",
"start_date",
"end_date",
"column_break_4",
"company",
"section_break_7",
"closed_documents"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "period_name",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Period Name",
"length": 0,
"no_copy": 0,
"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,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "start_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Start Date",
"length": 0,
"no_copy": 0,
"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,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "end_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "End Date",
"length": 0,
"no_copy": 0,
"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,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_4",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "company",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Company",
"length": 0,
"no_copy": 0,
"options": "Company",
"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,
"translatable": 0,
"unique": 0
"fieldname": "period_name",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Period Name",
"reqd": 1,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "section_break_7",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
"fieldname": "start_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "Start Date",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "closed_documents",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Closed Documents",
"length": 0,
"no_copy": 0,
"options": "Closed Document",
"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,
"translatable": 0,
"unique": 0
"fieldname": "end_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "End Date",
"reqd": 1
},
{
"fieldname": "column_break_4",
"fieldtype": "Column Break"
},
{
"fieldname": "company",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company",
"options": "Company",
"reqd": 1
},
{
"fieldname": "section_break_7",
"fieldtype": "Section Break"
},
{
"fieldname": "closed_documents",
"fieldtype": "Table",
"label": "Closed Documents",
"options": "Closed Document",
"reqd": 1
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2019-08-01 19:14:47.593753",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Period",
"name_case": "",
"owner": "Administrator",
],
"links": [],
"modified": "2024-03-27 13:05:57.388109",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounting Period",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
},
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"share": 1,
"write": 1
},
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts User",
"share": 1,
"write": 1
}
],
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
],
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

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",
@@ -486,7 +507,7 @@
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "ASC",
"states": [],
"track_changes": 1

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

@@ -45,12 +45,13 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-11-25 10:27:51.712286",
"modified": "2024-03-27 13:05:58.308002",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Advance Tax",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC"
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -179,12 +179,13 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-11-25 11:10:10.945027",
"modified": "2024-03-27 13:05:58.437605",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Advance Taxes and Charges",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_order": "ASC"
"sort_field": "creation",
"sort_order": "ASC",
"states": []
}

View File

@@ -14,30 +14,27 @@
"fieldtype": "Link",
"label": "Accounting Dimension",
"options": "DocType",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "dimension_value",
"fieldtype": "Dynamic Link",
"in_list_view": 1,
"options": "accounting_dimension",
"show_days": 1,
"show_seconds": 1
"options": "accounting_dimension"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2020-11-23 09:56:19.744200",
"modified": "2024-03-27 13:05:58.587487",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Allowed Dimension",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -20,14 +20,14 @@
],
"istable": 1,
"links": [],
"modified": "2024-01-03 11:13:02.669632",
"modified": "2024-03-27 13:05:58.698893",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Allowed To Transact With",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1

View File

@@ -15,9 +15,7 @@
"in_list_view": 1,
"label": "Accounts",
"options": "Account",
"reqd": 1,
"show_days": 1,
"show_seconds": 1
"reqd": 1
},
{
"columns": 2,
@@ -25,22 +23,21 @@
"fieldname": "is_mandatory",
"fieldtype": "Check",
"in_list_view": 1,
"label": "Is Mandatory",
"show_days": 1,
"show_seconds": 1
"label": "Is Mandatory"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2020-11-22 19:55:13.324136",
"modified": "2024-03-27 13:05:59.168897",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Applicable On Account",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -101,7 +101,7 @@
}
],
"links": [],
"modified": "2020-07-17 14:00:13.105433",
"modified": "2024-03-27 13:06:36.896195",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank",
@@ -121,7 +121,8 @@
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -209,7 +209,7 @@
}
],
"links": [],
"modified": "2023-09-22 21:31:34.763977",
"modified": "2024-03-27 13:06:37.049542",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Account",
@@ -242,7 +242,7 @@
}
],
"search_fields": "bank,account",
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1

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

@@ -1,134 +1,69 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"actions": [],
"allow_import": 1,
"allow_rename": 1,
"autoname": "field:account_subtype",
"beta": 0,
"creation": "2018-10-25 15:46:08.054586",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"account_subtype"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "account_subtype",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Account Subtype",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 1
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-10-25 15:47:03.841390",
"links": [],
"modified": "2024-03-27 13:06:37.221876",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Account Subtype",
"name_case": "",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
}
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0,
"track_views": 0
"states": []
}

View File

@@ -19,7 +19,7 @@
}
],
"links": [],
"modified": "2020-04-10 21:13:09.137898",
"modified": "2024-03-27 13:06:37.347035",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Account Type",
@@ -63,6 +63,7 @@
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC"
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -91,7 +91,7 @@
"idx": 1,
"issingle": 1,
"links": [],
"modified": "2022-11-28 17:24:13.008692",
"modified": "2024-03-27 13:06:37.477927",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Clearance",
@@ -107,7 +107,7 @@
],
"quick_entry": 1,
"read_only": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "ASC",
"states": []
}

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

@@ -1,340 +1,112 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2013-02-22 01:27:37",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"editable_grid": 1,
"actions": [],
"creation": "2013-02-22 01:27:37",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"payment_document",
"payment_entry",
"against_account",
"amount",
"column_break_5",
"posting_date",
"cheque_number",
"cheque_date",
"clearance_date"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "payment_document",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Payment Document",
"length": 0,
"no_copy": 0,
"options": "DocType",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
"fieldname": "payment_document",
"fieldtype": "Link",
"label": "Payment Document",
"options": "DocType"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 2,
"fieldname": "payment_entry",
"fieldtype": "Dynamic Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Payment Entry",
"length": 0,
"no_copy": 0,
"oldfieldname": "voucher_id",
"oldfieldtype": "Link",
"options": "payment_document",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0,
"columns": 2,
"fieldname": "payment_entry",
"fieldtype": "Dynamic Link",
"in_list_view": 1,
"label": "Payment Entry",
"oldfieldname": "voucher_id",
"oldfieldtype": "Link",
"options": "payment_document",
"width": "50"
},
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 2,
"fieldname": "against_account",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Against Account",
"length": 0,
"no_copy": 0,
"oldfieldname": "against_account",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0,
"columns": 2,
"fieldname": "against_account",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Against Account",
"oldfieldname": "against_account",
"oldfieldtype": "Data",
"read_only": 1,
"width": "15"
},
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 2,
"fieldname": "amount",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Amount",
"length": 0,
"no_copy": 0,
"oldfieldname": "debit",
"oldfieldtype": "Currency",
"options": "",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
"columns": 2,
"fieldname": "amount",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Amount",
"oldfieldname": "debit",
"oldfieldtype": "Currency",
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_5",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0,
"fieldname": "column_break_5",
"fieldtype": "Column Break",
"width": "50%"
},
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 2,
"fieldname": "posting_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Posting Date",
"length": 0,
"no_copy": 0,
"oldfieldname": "posting_date",
"oldfieldtype": "Date",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
"columns": 2,
"fieldname": "posting_date",
"fieldtype": "Date",
"label": "Posting Date",
"oldfieldname": "posting_date",
"oldfieldtype": "Date",
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 2,
"fieldname": "cheque_number",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Cheque Number",
"length": 0,
"no_copy": 0,
"oldfieldname": "cheque_number",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
"columns": 2,
"fieldname": "cheque_number",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Cheque Number",
"oldfieldname": "cheque_number",
"oldfieldtype": "Data",
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "cheque_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Cheque Date",
"length": 0,
"no_copy": 0,
"oldfieldname": "cheque_date",
"oldfieldtype": "Date",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
"fieldname": "cheque_date",
"fieldtype": "Date",
"label": "Cheque Date",
"oldfieldname": "cheque_date",
"oldfieldtype": "Date",
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 2,
"fieldname": "clearance_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Clearance Date",
"length": 0,
"no_copy": 0,
"oldfieldname": "clearance_date",
"oldfieldtype": "Date",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
"columns": 2,
"fieldname": "clearance_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "Clearance Date",
"oldfieldname": "clearance_date",
"oldfieldtype": "Date"
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"menu_index": 0,
"modified": "2019-01-07 16:52:07.174687",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Clearance Detail",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_order": "ASC",
"track_changes": 0,
"track_seen": 0,
"track_views": 0
],
"idx": 1,
"istable": 1,
"links": [],
"modified": "2024-03-27 13:06:37.609319",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Clearance Detail",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "creation",
"sort_order": "ASC",
"states": []
}

File diff suppressed because it is too large Load Diff

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",
@@ -136,7 +137,7 @@
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -9,7 +9,6 @@ from frappe import _
from frappe.model.document import Document
from frappe.query_builder.custom import ConstantColumn
from frappe.utils import cint, flt
from pypika.terms import Parameter
from erpnext import get_default_cost_center
from erpnext.accounts.doctype.bank_transaction.bank_transaction import get_total_allocated_amount
@@ -82,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"])
@@ -97,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
@@ -501,14 +495,26 @@ 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
common_filters = frappe._dict(
{
"amount": transaction.unallocated_amount,
"payment_type": "Receive" if transaction.deposit > 0.0 else "Pay",
"reference_no": transaction.reference_number,
"party_type": transaction.party_type,
"party": transaction.party,
"bank_account": bank_account,
}
)
queries = get_queries(
bank_account,
company,
@@ -520,37 +526,28 @@ def check_matching(
from_reference_date,
to_reference_date,
exact_match,
common_filters,
)
filters = {
"amount": transaction.unallocated_amount,
"payment_type": "Receive" if transaction.deposit > 0.0 else "Pay",
"reference_no": transaction.reference_number,
"party_type": transaction.party_type,
"party": transaction.party,
"bank_account": bank_account,
}
matching_vouchers = []
for query in queries:
matching_vouchers.extend(frappe.db.sql(query, filters, as_dict=True))
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,
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"
@@ -571,6 +568,7 @@ def get_queries(
filter_by_reference_date,
from_reference_date,
to_reference_date,
common_filters,
)
or []
)
@@ -582,14 +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,
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)
@@ -604,6 +603,7 @@ def get_matching_queries(
filter_by_reference_date,
from_reference_date,
to_reference_date,
common_filters,
)
queries.append(query)
@@ -616,16 +616,17 @@ def get_matching_queries(
filter_by_reference_date,
from_reference_date,
to_reference_date,
common_filters,
)
queries.append(query)
if transaction.deposit > 0.0 and "sales_invoice" in document_types:
query = get_si_matching_query(exact_match, currency)
query = get_si_matching_query(exact_match, currency, common_filters)
queries.append(query)
if transaction.withdrawal > 0.0:
if "purchase_invoice" in document_types:
query = get_pi_matching_query(exact_match, currency)
query = get_pi_matching_query(exact_match, currency, common_filters)
queries.append(query)
if "bank_transaction" in document_types:
@@ -646,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)
@@ -680,7 +677,7 @@ def get_bt_matching_query(exact_match, transaction):
.where(amount_condition)
.where(bt.docstatus == 1)
)
return str(query)
return query
def get_pe_matching_query(
@@ -692,6 +689,7 @@ def get_pe_matching_query(
filter_by_reference_date,
from_reference_date,
to_reference_date,
common_filters,
):
# get matching payment entries query
to_from = "to" if transaction.deposit > 0.0 else "from"
@@ -707,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)
@@ -723,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,
@@ -734,16 +730,16 @@ def get_pe_matching_query(
.where(pe.docstatus == 1)
.where(pe.payment_type.isin([payment_type, "Internal Transfer"]))
.where(pe.clearance_date.isnull())
.where(getattr(pe, account_from_to) == Parameter("%(bank_account)s"))
.where(getattr(pe, account_from_to) == common_filters.bank_account)
.where(amount_condition)
.where(filter_by_date)
.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 str(query)
return query
def get_je_matching_query(
@@ -754,6 +750,7 @@ def get_je_matching_query(
filter_by_reference_date,
from_reference_date,
to_reference_date,
common_filters,
):
# get matching journal entry query
# We have mapping at the bank level
@@ -793,29 +790,29 @@ def get_je_matching_query(
.where(je.docstatus == 1)
.where(je.voucher_type != "Opening Entry")
.where(je.clearance_date.isnull())
.where(jea.account == Parameter("%(bank_account)s"))
.where(jea.account == common_filters.bank_account)
.where(amount_equality if exact_match else getattr(jea, amount_field) > 0.0)
.where(je.docstatus == 1)
.where(filter_by_date)
.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 str(query)
return query
def get_si_matching_query(exact_match, currency):
def get_si_matching_query(exact_match, currency, common_filters):
# get matching sales invoice query
si = frappe.qb.DocType("Sales Invoice")
sip = frappe.qb.DocType("Sales Invoice Payment")
amount_equality = sip.amount == Parameter("%(amount)s")
amount_equality = sip.amount == common_filters.amount
amount_rank = frappe.qb.terms.Case().when(amount_equality, 1).else_(0)
amount_condition = amount_equality if exact_match else sip.amount > 0.0
party_condition = si.customer == Parameter("%(party)s")
party_condition = si.customer == common_filters.party
party_rank = frappe.qb.terms.Case().when(party_condition, 1).else_(0)
query = (
@@ -836,23 +833,23 @@ def get_si_matching_query(exact_match, currency):
)
.where(si.docstatus == 1)
.where(sip.clearance_date.isnull())
.where(sip.account == Parameter("%(bank_account)s"))
.where(sip.account == common_filters.bank_account)
.where(amount_condition)
.where(si.currency == currency)
)
return str(query)
return query
def get_pi_matching_query(exact_match, currency):
def get_pi_matching_query(exact_match, currency, common_filters):
# get matching purchase invoice query when they are also used as payment entries (is_paid)
purchase_invoice = frappe.qb.DocType("Purchase Invoice")
amount_equality = purchase_invoice.paid_amount == Parameter("%(amount)s")
amount_equality = purchase_invoice.paid_amount == common_filters.amount
amount_rank = frappe.qb.terms.Case().when(amount_equality, 1).else_(0)
amount_condition = amount_equality if exact_match else purchase_invoice.paid_amount > 0.0
party_condition = purchase_invoice.supplier == Parameter("%(party)s")
party_condition = purchase_invoice.supplier == common_filters.party
party_rank = frappe.qb.terms.Case().when(party_condition, 1).else_(0)
query = (
@@ -872,9 +869,9 @@ def get_pi_matching_query(exact_match, currency):
.where(purchase_invoice.docstatus == 1)
.where(purchase_invoice.is_paid == 1)
.where(purchase_invoice.clearance_date.isnull())
.where(purchase_invoice.cash_bank_account == Parameter("%(bank_account)s"))
.where(purchase_invoice.cash_bank_account == common_filters.bank_account)
.where(amount_condition)
.where(purchase_invoice.currency == currency)
)
return str(query)
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

@@ -130,52 +130,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) {
@@ -297,7 +311,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;
@@ -336,6 +350,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 || "[]");
@@ -411,49 +434,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>
@@ -462,16 +486,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>
@@ -479,16 +503,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>
@@ -498,5 +522,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",
@@ -221,7 +230,8 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

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
)
@@ -123,10 +122,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
@@ -136,9 +140,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)
@@ -149,6 +151,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)
@@ -243,6 +248,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)
@@ -130,7 +131,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),
@@ -147,7 +148,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

@@ -1,107 +1,38 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2018-10-24 15:24:56.713277",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"actions": [],
"creation": "2018-10-24 15:24:56.713277",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"bank_transaction_field",
"file_field"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "bank_transaction_field",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Field in Bank Transaction",
"length": 0,
"no_copy": 0,
"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,
"translatable": 0,
"unique": 0
},
"fieldname": "bank_transaction_field",
"fieldtype": "Select",
"in_list_view": 1,
"label": "Field in Bank Transaction",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "file_field",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Column in Bank File",
"length": 0,
"no_copy": 0,
"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,
"translatable": 0,
"unique": 0
"fieldname": "file_field",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Column in Bank File",
"reqd": 1
}
],
"has_web_view": 0,
"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": "2018-10-24 15:24:56.713277",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Transaction Mapping",
"name_case": "",
"owner": "Administrator",
"permissions": [],
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0,
"track_views": 0
],
"istable": 1,
"links": [],
"modified": "2024-03-27 13:06:38.436517",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Transaction Mapping",
"owner": "Administrator",
"permissions": [],
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -1,116 +1,39 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2018-11-28 08:55:40.815355",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"actions": [],
"creation": "2018-11-28 08:55:40.815355",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"payment_document",
"payment_entry",
"allocated_amount",
"clearance_date"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "payment_document",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Payment Document",
"length": 0,
"no_copy": 0,
"options": "DocType",
"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,
"translatable": 0,
"unique": 0
},
"fieldname": "payment_document",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Payment Document",
"options": "DocType",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "payment_entry",
"fieldtype": "Dynamic Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Payment Entry",
"length": 0,
"no_copy": 0,
"options": "payment_document",
"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,
"translatable": 0,
"unique": 0
},
"fieldname": "payment_entry",
"fieldtype": "Dynamic Link",
"in_list_view": 1,
"label": "Payment Entry",
"options": "payment_document",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "allocated_amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Allocated Amount",
"length": 0,
"no_copy": 0,
"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,
"translatable": 0,
"unique": 0
},
"fieldname": "allocated_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Allocated Amount",
"reqd": 1
},
{
"depends_on": "eval:doc.docstatus==1",
"fieldname": "clearance_date",
@@ -120,31 +43,18 @@
"print_hide": 1,
"read_only": 1
}
],
"has_web_view": 0,
"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": "2020-01-22 00:00:00.000000",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Transaction Payments",
"name_case": "",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0,
"track_views": 0
}
],
"istable": 1,
"links": [],
"modified": "2024-03-27 13:06:38.549438",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Transaction Payments",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -170,7 +170,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-12-01 16:49:54.073890",
"modified": "2024-03-27 13:06:39.619458",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bisect Accounting Statements",
@@ -188,7 +188,7 @@
}
],
"read_only": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -70,7 +70,7 @@
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2023-12-01 17:46:12.437996",
"modified": "2024-03-27 13:06:39.766063",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bisect Nodes",
@@ -91,7 +91,7 @@
}
],
"read_only": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -207,7 +207,7 @@
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2022-10-10 22:14:36.361509",
"modified": "2024-03-27 13:06:42.675933",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Budget",
@@ -231,7 +231,7 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1

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-27 13:06:42.854458",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Budget Account",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -19,13 +19,14 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-05-07 10:43:49.717633",
"modified": "2024-03-27 13:06:44.142625",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Campaign Item",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -124,7 +124,7 @@
],
"is_submittable": 1,
"links": [],
"modified": "2023-12-28 13:15:46.858427",
"modified": "2024-03-27 13:06:44.260440",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cashier Closing",
@@ -145,7 +145,7 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1

View File

@@ -1,109 +1,43 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2018-09-02 14:45:36.303520",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"actions": [],
"creation": "2018-09-02 14:45:36.303520",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"mode_of_payment",
"amount"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "mode_of_payment",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Mode of Payment",
"length": 0,
"no_copy": 0,
"options": "Mode of Payment",
"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,
"translatable": 0,
"unique": 0
},
"fieldname": "mode_of_payment",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Mode of Payment",
"options": "Mode of Payment",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "0.00",
"fieldname": "amount",
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Amount",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
"default": "0.00",
"fieldname": "amount",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Amount"
}
],
"has_web_view": 0,
"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": "2019-02-19 08:34:20.268037",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cashier Closing Payments",
"name_case": "",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0,
"track_views": 0
],
"istable": 1,
"links": [],
"modified": "2024-03-27 13:06:44.414987",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cashier Closing Payments",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -50,7 +50,7 @@
"in_create": 1,
"issingle": 1,
"links": [],
"modified": "2020-02-28 08:49:11.422846",
"modified": "2024-03-27 13:06:44.535780",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Chart of Accounts Importer",
@@ -66,6 +66,7 @@
],
"quick_entry": 1,
"read_only": 1,
"sort_field": "modified",
"sort_order": "DESC"
"sort_field": "creation",
"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

@@ -1,104 +1,41 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2018-04-13 18:51:29.720606",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"actions": [],
"creation": "2018-04-13 18:51:29.720606",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"document_type",
"closed"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "document_type",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Document Type",
"length": 0,
"no_copy": 0,
"options": "DocType",
"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,
"translatable": 0,
"unique": 0
},
"fieldname": "document_type",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Document Type",
"options": "DocType",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "closed",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Closed",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
"default": "0",
"fieldname": "closed",
"fieldtype": "Check",
"in_list_view": 1,
"label": "Closed"
}
],
"has_web_view": 0,
"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": "2018-04-13 18:51:41.118025",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Closed Document",
"name_case": "",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
],
"istable": 1,
"links": [],
"modified": "2024-03-27 13:06:44.854280",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Closed Document",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

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,11 +163,20 @@
{
"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",
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "ASC",
"states": []
}
}

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

@@ -68,11 +68,10 @@
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2022-01-31 11:47:12.086253",
"modified": "2024-03-27 13:06:46.938642",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cost Center Allocation",
"name_case": "UPPER CASE",
"naming_rule": "Expression (old style)",
"owner": "Administrator",
"permissions": [
@@ -122,7 +121,7 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

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

@@ -29,13 +29,13 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2022-02-01 22:22:31.589523",
"modified": "2024-03-27 13:06:47.100633",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cost Center Allocation Percentage",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@@ -1,4 +1,5 @@
{
"actions": [],
"allow_import": 1,
"autoname": "field:coupon_name",
"creation": "2018-01-22 14:34:39.701832",
@@ -115,7 +116,8 @@
"read_only": 1
}
],
"modified": "2024-01-24 02:20:26.145996",
"links": [],
"modified": "2024-03-27 13:06:47.220931",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Coupon Code",
@@ -170,8 +172,9 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"title_field": "coupon_name",
"track_changes": 1
}

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-27 13:06:47.653110",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Currency Exchange Settings",
@@ -133,7 +141,7 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1

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

@@ -27,13 +27,14 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-11-03 19:14:55.889037",
"modified": "2024-03-27 13:06:47.819210",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Currency Exchange Settings Details",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -19,13 +19,14 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-11-03 19:14:40.054245",
"modified": "2024-03-27 13:06:47.937025",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Currency Exchange Settings Result",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -19,13 +19,14 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-05-07 10:39:21.563506",
"modified": "2024-03-27 13:06:48.735688",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Customer Group Item",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -19,13 +19,14 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-05-06 10:02:32.967841",
"modified": "2024-03-27 13:06:48.844074",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Customer Item",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -1,4 +1,5 @@
{
"actions": [],
"creation": "2019-03-07 12:07:09.416101",
"doctype": "DocType",
"editable_grid": 1,
@@ -61,14 +62,16 @@
}
],
"istable": 1,
"modified": "2020-02-20 16:16:20.724620",
"links": [],
"modified": "2024-03-27 13:06:51.610919",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Discounted Invoice",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -185,7 +185,7 @@
},
{
"fieldname": "address_display",
"fieldtype": "Small Text",
"fieldtype": "Text Editor",
"label": "Address",
"read_only": 1
},
@@ -204,7 +204,7 @@
},
{
"fieldname": "company_address_display",
"fieldtype": "Small Text",
"fieldtype": "Text Editor",
"label": "Company Address Display",
"read_only": 1
},
@@ -381,7 +381,7 @@
],
"is_submittable": 1,
"links": [],
"modified": "2023-06-15 15:46:53.865712",
"modified": "2024-03-27 13:08:19.176146",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Dunning",
@@ -430,7 +430,7 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "ASC",
"states": [],
"title_field": "customer_name",

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