Compare commits

...

1306 Commits

Author SHA1 Message Date
frappe-pr-bot
ee2034410f chore: update POT file 2024-05-12 09:35:37 +00:00
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Deepesh Garg
58e1548640 Merge pull request #40248 from ernestoruiz89/patch-5
chore: Add translate function to text "after"
2024-03-10 22:33:28 +05:30
Deepesh Garg
b660d98f20 Merge pull request #40349 from pps190/fix-rename-tax-rule
fix: allow tax rule to be renamed
2024-03-10 21:14:38 +05:30
Deepesh Garg
dee49e6078 Merge pull request #40344 from pps190/fix-get-default-company
fix: get_user_default_as_list args order
2024-03-10 21:14:08 +05:30
Ankush Menat
f4d69f16c0 Merge pull request #40206 from barredterra/bulk-format-js
ci: add prettier to pre-commit
2024-03-10 20:01:49 +05:30
Deepesh Garg
c5b94df188 Merge pull request #40195 from Nihantra-Patel/fix_timesheet_invoice
fix: skip timesheet on return time
2024-03-10 19:59:03 +05:30
Ankush Menat
0b100782e2 chore: update blame ignore 2024-03-10 19:46:53 +05:30
Ankush Menat
ec74a5e566 style: format js files 2024-03-10 19:45:40 +05:30
barredterra
2c16036ef3 ci: add prettier to pre-commit 2024-03-10 19:45:18 +05:30
Deepesh Garg
1f4c86136f Merge pull request #39886 from barredterra/refactor-sales-invoice-item
refactor(Sales Invoice): move methods into child row controller
2024-03-10 19:44:16 +05:30
Deepesh Garg
b0fcb014c1 Merge pull request #40294 from barredterra/fix-bisect-accounting-statements
fix: define dates before usage
2024-03-10 19:30:29 +05:30
Deepesh Garg
65c8605b88 Merge pull request #40325 from deepeshgarg007/psoa_sender_email
fix: Sender email in process statements of accounts
2024-03-10 19:26:05 +05:30
Deepesh Garg
4c6d28a299 Merge pull request #40323 from deepeshgarg007/project_sales_filter
fix: Filter for projects in Sales Cycle
2024-03-10 19:25:48 +05:30
Deepesh Garg
962b51d6d5 Merge pull request #40355 from deepeshgarg007/blanket_order_rate
fix: Blanket order rate getting changed on converting to order
2024-03-10 18:44:11 +05:30
Deepesh Garg
9702a65a0f fix: Blanket order rate getting changed on converting to order 2024-03-10 17:39:20 +05:30
ruthra kumar
d69c593f93 Merge pull request #39681 from ruthra-kumar/fix_gl_logic_in_advance_as_liability
fix: incorrect advance paid in Sales/Purchase Order
2024-03-10 16:38:43 +05:30
s-aga-r
1e09f584d5 Merge pull request #40273 from s-aga-r/FIX-40272
fix: MR Default Supplier search query
2024-03-10 11:39:59 +05:30
Devin Slauenwhite
0d6afda6b8 fix: allow tax rule to be renamed 2024-03-09 08:09:16 -05:00
Devin Slauenwhite
ac1961b687 fix: get_user_default_as_list args order 2024-03-08 18:09:11 -05:00
s-aga-r
c0a1f298a1 fix: MR Default Supplier search query 2024-03-08 20:32:00 +05:30
Frappe PR Bot
55b9664115 fix: sync translations from crowdin (#40287) 2024-03-07 13:35:21 +01:00
Nihantra C. Patel
68baa3612a fix: load ignored doctype and include Mode of Payment Account (#40334) 2024-03-07 17:43:00 +05:30
rohitwaghchaure
01856a6e9d fix: use serial/batch field for rejected items (#40327) 2024-03-07 14:14:19 +05:30
Deepesh Garg
65a2f3d12c fix: Sender email in process statements of accounts 2024-03-07 10:08:51 +05:30
Deepesh Garg
d0e0b66b2f fix: Filter for projects in Sales Cycle 2024-03-07 09:14:56 +05:30
Raffael Meyer
4b38139b44 Merge pull request #40317 from barredterra/parcel-mandatory-fields 2024-03-06 19:24:47 +01:00
barredterra
898c6e30eb fix(Shipment Parcel): make length, width and height non-mandatory
It's tedious to enter all these values and some shipping providers only need to know the weigth and quantity. Companies can alwas cutomize the values to be mandatory, but the reverse is not possible. I'll make sure that the erpnext-shipping app does not break because of this (or fix any problems).
2024-03-06 16:52:19 +01:00
rohitwaghchaure
cef6291311 fix: use serial batch fields for subcontracting receipt (#40311) 2024-03-06 19:43:36 +05:30
Corentin Flr
a93d14b3f7 fix(accounts): Allow setting Number of new Cost Center (#40212) 2024-03-06 19:33:15 +05:30
rohitwaghchaure
48da952fd7 fix: not able to cancel purchase receipt for old subcontracting flow (#40298) 2024-03-06 12:51:04 +05:30
rohitwaghchaure
e178ffc3c1 fix: stock ledger balance qty for the batch (#40274) 2024-03-06 12:50:44 +05:30
rohitwaghchaure
1eaa386657 fix: batch no not copied while making Material Consumption entry (#40290) 2024-03-06 12:50:26 +05:30
ruthra kumar
711b72b26c refactor: run qb directly instead of converting to sql 2024-03-06 12:05:11 +05:30
barredterra
171b8af3ee fix: define dates before usage 2024-03-05 15:56:42 +01:00
Raffael Meyer
031465f5ec Merge pull request #40286 from barredterra/crowdin-pr-title
chore: set PR title for translation updates
2024-03-05 15:15:12 +01:00
Raffael Meyer
f44a841af7 ci: auto-generate potfile (#40288) 2024-03-05 18:06:31 +05:30
barredterra
28ac53a704 chore: set PR title for translation updates 2024-03-05 11:27:46 +01:00
Frappe PR Bot
bdc0175fe3 chore: sync translations from crowdin 2024-03-05 11:24:35 +01:00
ruthra kumar
e58c2dd43d Merge pull request #40278 from ruthra-kumar/filter_on_party_type_as_well_on_tcs
fix: incorrect TCS on customer and suppliers with same name
2024-03-05 15:22:41 +05:30
Harsh Khatri
092999f2a6 fix: update status of Email Campaign (#39776) 2024-03-05 09:44:32 +00:00
ruthra kumar
e52c4c8f22 refactor(test): make sure party has USD account
1. Don't reset 'party_account_currency' of SO/PO  upon Payment Entry
cancellation. This happens when there are no payments against a SO/PO
2024-03-05 14:56:29 +05:30
ruthra kumar
d9a0494fc3 fix: advance paid amount and ledger entries against SO/PO 2024-03-05 14:56:29 +05:30
ruthra kumar
cb2529cec8 refactor(test): use get_party_account for reference details section 2024-03-05 14:56:29 +05:30
ruthra kumar
158112896e refactor(test): reference details will have account 2024-03-05 14:56:29 +05:30
ruthra kumar
9d9b83362a fix: incorrect advance paid in Sales/Purchase Order 2024-03-05 14:56:29 +05:30
ruthra kumar
9904a9868c fix: incorrect TCS on customer and suppliers with same name 2024-03-05 14:55:51 +05:30
rohitwaghchaure
34051bc04f chore: fixed fetch from (#40270) 2024-03-05 13:44:02 +05:30
Nihantra C. Patel
8e2f9787c1 fix: report path from the Item and Putaway Rule list (#40190) 2024-03-04 19:43:33 +05:30
rohitwaghchaure
6379238893 perf: serial and batch bundle valuation (reposting) (#40255)
perf: serial and batch bundle valuation
2024-03-04 12:04:41 +05:30
Gursheen Kaur Anand
031b99f373 Merge pull request #40250 from GursheenK/company-filter-in-cost-center-allocation
fix(minor): company filter in cost center allocation
2024-03-03 18:13:48 +05:30
Gursheen Anand
51909077bd feat: add company filter to child table field 2024-03-03 18:08:23 +05:30
Ernesto Ruiz
d0140412cd chore: Add translate function to text "after" 2024-03-02 15:46:43 -06:00
rohitwaghchaure
e7d707797a fix: rate change on changing of the qty (#40241) 2024-03-02 16:44:07 +05:30
ruthra kumar
f2f5c1a0eb Merge pull request #40220 from ruthra-kumar/exc_gain_loss_on_journal_against_journals
refactor: Gain/Loss Journal creation for Journals against Journals
2024-03-02 15:36:27 +05:30
ruthra kumar
ceee93e0e8 Merge pull request #40149 from ruthra-kumar/filter_on_party_while_fetching_exc_rate_on_je
fix: incorrect exchange rate if JE has multi parties
2024-03-02 13:51:20 +05:30
ruthra kumar
ed95d41a51 test: exchange rate fetch on JE with multiple forex parties 2024-03-02 13:18:31 +05:30
ruthra kumar
eaac02655b fix: don't override reference exchange rate 2024-03-02 13:18:27 +05:30
rohitwaghchaure
72ac56b6c4 fix: do not allow to cancel incomplete reposting (#40224) 2024-03-02 12:59:59 +05:30
ruthra kumar
e017421708 Merge pull request #38561 from blaggacao/feat/add-delivery-cutoff-date-on-so
feat(delivery): add cutoff item date for so delivery items
2024-03-02 12:55:00 +05:30
Nihantra C. Patel
13b05aa7fb fix: uom wise price in sales or purchase transaction (#40216)
fix: uom wise price
2024-03-02 05:18:30 +05:30
rohitwaghchaure
a5232d9c10 fix: serial no valuation rate (#40221) 2024-03-01 22:26:54 +05:30
ruthra kumar
8a5078b826 test: gain/loss on Journals against Journals 2024-03-01 20:10:57 +05:30
ruthra kumar
5b67631d40 fix: allow gain/loss for Journals against Journals 2024-03-01 17:46:42 +05:30
ruthra kumar
0aa72f841d fix: make use of 'flt' to prevent really low precision exc gain/loss 2024-03-01 17:36:56 +05:30
David Arnold
b8dac84a90 feat: add selling setting for cutoff date 2024-03-01 12:12:07 +01:00
Nihantra Patel
79c492cc4b fix: skip timesheet on return time and revert code 2024-03-01 09:26:49 +05:30
Nihantra C. Patel
a8eb5e5c85 Merge branch 'frappe:develop' into fix_timesheet_invoice 2024-03-01 09:17:34 +05:30
Raffael Meyer
863abc3ee5 Merge pull request #40203 from barredterra/filter-project-department 2024-02-29 18:28:59 +01:00
Deepesh Garg
93c2762f7b Merge pull request #39701 from GursheenK/check-paid-amount-for-orders-before-request
fix: check order paid amount before payment request
2024-02-29 21:24:16 +05:30
Rushabh Mehta
c067ac16a7 Merge pull request #39584 from GursheenK/provisional-accounting-reverse-amt
fix: use receipt amount for reverse provisional entry
2024-02-29 21:16:05 +05:30
barredterra
5e736f0d06 fix(Project): filter department by company 2024-02-29 16:44:46 +01:00
ruthra kumar
983f71975a Merge pull request #40197 from ruthra-kumar/ignore_self_on_gl_account_valiation
fix: ignore self on GL account validation for Bank Account
2024-02-29 19:54:32 +05:30
Raffael Meyer
b235f48067 Merge pull request #39936 from barredterra/label-context 2024-02-29 15:09:49 +01:00
ruthra kumar
9d3614597c Merge pull request #40196 from ruthra-kumar/use_debit_or_credit_to_account_while_fetching_advance
fix: include debit_to or credit_to account while fetching advance on Sales/Purchase Invoice
2024-02-29 17:51:04 +05:30
Gursheen Anand
c096133897 fix: auto-update due date for invoices via data import 2024-02-29 17:42:25 +05:30
ruthra kumar
3c19186654 fix: ignore self on GL account validation for Bank Account 2024-02-29 17:39:29 +05:30
ruthra kumar
646e9ca0dd test: advance pulling logic on Sales/Purchase Invoice 2024-02-29 17:31:08 +05:30
ruthra kumar
3327599c9d fix: include Debit To/Credit To account while fetching advance 2024-02-29 17:18:42 +05:30
Nihantra Patel
dd70fb5f7e fix: skip timesheet link on return time 2024-02-29 15:31:53 +05:30
Gursheen Kaur Anand
ac2b53bf15 Merge pull request #40176 from GursheenK/validating-po-in-so-ux
fix(minor): make warning for previously existing SO an alert
2024-02-29 11:32:44 +05:30
Raffael Meyer
5c47087f20 feat: add persian language (#40178)
* chore: remove locale dir from .gitignore

* feat: add persian language
2024-02-29 05:28:57 +00:00
Rucha Mahabal
29f91a7919 fix(setup): avoid duplicate entry for Analytics role (#40183) 2024-02-29 05:23:30 +00:00
Gursheen Kaur Anand
f6fdfd2c01 Merge pull request #40174 from GursheenK/common-free-item-promotional-scheme
fix: promotional scheme remove free item if pricing rule matches
2024-02-29 10:18:27 +05:30
Gursheen Anand
24dcd64c16 fix: make warning for previously existing SO an alert 2024-02-28 18:01:27 +05:30
Frappe PR Bot
9dcdd5b5ef chore: New Crowdin updates (#40052)
* New translations main.pot (French)

* New translations main.pot (Spanish)

* New translations main.pot (Arabic)

* New translations main.pot (German)

* New translations main.pot (French)

* New translations main.pot (Spanish)

* New translations main.pot (Arabic)

* New translations main.pot (German)

* New translations main.pot (German)

* New translations main.pot (German)

* New translations main.pot (German)

* New translations main.pot (German)

* New translations main.pot (German)

* New translations main.pot (German)
2024-02-28 16:32:43 +05:30
Gursheen Anand
fea20db262 fix: remove free item row only if pricing rule matches 2024-02-28 12:47:41 +05:30
rohitwaghchaure
043d9e3986 fix: Email Template None not found (#40167) 2024-02-27 22:30:01 +05:30
Deepesh Garg
dde4d9e53c Merge pull request #40162 from vorasmit/ic-deps
fix: add flags for repost to ensure correct accounting from India Compliance App
2024-02-27 22:08:09 +05:30
Deepesh Garg
36a0569df2 Merge pull request #40137 from ljain112/fix-tax-breakup
fix: default taxable value for item not found in item list
2024-02-27 22:07:39 +05:30
rohitwaghchaure
f8ba560394 fix: Supplier users not able to see RFQ on the Portal (#40161) 2024-02-27 21:05:19 +05:30
Smit Vora
93170a56a9 fix: add flags for repost to ensure correct accounting from India Compliance App 2024-02-27 20:28:18 +05:30
rohitwaghchaure
6f5815e44f fix: parent warehouse checks in the production plan for sub-assemblies (#40150) 2024-02-27 16:46:47 +05:30
Nabin Hait
0c52eb913b Merge pull request #40102 from GursheenK/update_billed_amount_for_purchases
feat: toggle updation of billed amount in previous purchase docs
2024-02-27 15:49:22 +05:30
Gursheen Kaur Anand
519682bb0e Merge pull request #40095 from GursheenK/unique-gl-account-for-plaid-bank-accounts
fix: unique GL account for plaid bank accounts
2024-02-27 15:38:03 +05:30
ruthra kumar
694c17487d fix: incorrect exchange rate if JE has multi parties 2024-02-27 15:34:34 +05:30
Gursheen Kaur Anand
5b8b40c13b Merge pull request #40143 from GursheenK/hide-company-typeerror
fix(minor): type error for missing form object in hide_company util
2024-02-27 13:14:02 +05:30
Gursheen Anand
ceeb8fc9e5 fix: use frm instead of cur_frm 2024-02-27 13:05:29 +05:30
Gursheen Kaur Anand
b193fafe49 Merge pull request #37477 from GursheenK/editable-journal-entries
feat: editable journal entries
2024-02-27 12:59:18 +05:30
Sajad Alimoradi
c310da7b29 fix: Translate 'mode of payments' in the 'point of sale'. (#39467)
- Due to a language change, the name of 'mode of payments' was not translated in the placeholder.
2024-02-27 07:15:20 +00:00
Rushabh Mehta
d6b29d1cd7 Merge pull request #39719 from niyazrazak/patch-18
feat: project field in installation note
2024-02-27 12:44:39 +05:30
Gursheen Kaur Anand
303433c0ae Merge branch 'develop' into editable-journal-entries 2024-02-27 12:43:32 +05:30
Gursheen Anand
20fa3da950 fix: type error for missing frm obj 2024-02-27 11:18:58 +05:30
rohitwaghchaure
bc9c480246 fix: use serial batch fields for packed items (#40140) 2024-02-26 23:57:52 +05:30
rohitwaghchaure
8aa2b7c183 fix: currency symbol in landed cost voucher and material request (#40138) 2024-02-26 22:48:10 +05:30
rohitwaghchaure
08caa7cfa1 fix: Data too long for column 'serial_no' at row 1 (#40098) 2024-02-26 18:49:56 +05:30
ljain112
5885978fc2 fix: default taxable value for item not found in item list 2024-02-26 18:41:33 +05:30
ruthra kumar
122373fcd3 Merge pull request #40133 from ruthra-kumar/reset_advance_amount_on_unreconciliation
fix: reset advance amount on unreconciliation of Sales/Purchase Orders
2024-02-26 17:51:36 +05:30
ruthra kumar
1f01ff3487 test: advance paid update on sales/purchase order unreconciliation 2024-02-26 17:32:25 +05:30
ruthra kumar
c9e2f03a3a fix: on unreconciliation, update advance paid 2024-02-26 17:08:56 +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
ruthra kumar
924b08e395 Merge pull request #40113 from ruthra-kumar/patch_for_dimension_creation_in_reconciliation_tool
refactor: patch to setup dimensions in Reconciliation tool
2024-02-26 11:58:51 +05:30
ruthra kumar
461fb183fc refactor: patch to setup dimensions in Reconciliation tool 2024-02-26 11:34:37 +05:30
Gursheen Kaur Anand
c9ff769d28 Merge pull request #40062 from GursheenK/sales-person-target-contributions
fix: sales person / partner achieved targets in report
2024-02-26 10:37:14 +05:30
Gursheen Kaur Anand
3658c4754f Merge pull request #40105 from GursheenK/tax-amount-label
fix(minor): tax amount label according to party type
2024-02-26 10:33:32 +05:30
Gursheen Anand
9c8d103d8a fix: amount label according to party type 2024-02-25 21:32:24 +05:30
Gursheen Anand
6d40844894 test: pr billed amount against debit note 2024-02-25 20:03:33 +05:30
Gursheen Anand
81dbfe189e test: po billed amount against debit note 2024-02-25 19:40:28 +05:30
rohitwaghchaure
75f8464724 fix: capacity planning issue in the job card (#40092)
* fix: capacity planning issue in the job card

* test: test case to test capacity planning for workstation
2024-02-25 19:06:52 +05:30
ruthra kumar
e240ccd305 Merge pull request #40096 from ruthra-kumar/fix_fiscal_year_exception_on_demo_data_setup
fix: Fiscal Year exception on demo data setup
2024-02-25 15:42:04 +05:30
ruthra kumar
3c3c57c674 fix: Fiscal Year exception on demo data setup 2024-02-25 15:26:16 +05:30
Gursheen Anand
c42444ab3b fix: remove config for default bank account in test 2024-02-25 13:18:30 +05:30
Gursheen Anand
bf6e32a960 fix: unique gl account for plaid bank accounts 2024-02-25 13:17:41 +05:30
Gursheen Anand
9f6535472d feat: update billed amount in PO and PR 2024-02-25 11:59:44 +05:30
ruthra kumar
7cb07425b1 Merge pull request #40073 from ruthra-kumar/update_payments_section_on_item_removal
refactor: update payments section on item removal
2024-02-25 09:26:52 +05:30
rohitwaghchaure
4c9048fb39 fix: do not make MR against raw materials of available sub assemblies (#40085) 2024-02-24 17:04:55 +05:30
rohitwaghchaure
f4222be027 Merge pull request #40081 from rohitwaghchaure/fixed-10401
fix: Cannot read properties of undefined
2024-02-24 15:57:21 +05:30
Rohit Waghchaure
44ed52c5cf fix: Cannot read properties of undefined 2024-02-24 15:33:59 +05:30
rohitwaghchaure
8aaddb0f9e Merge pull request #40079 from rohitwaghchaure/fixed-linter-issue
chore: change label name
2024-02-24 13:09:57 +05:30
Rohit Waghchaure
635174f1ce fix: change label name 2024-02-24 12:51:52 +05:30
ruthra kumar
406793a6ff refactor: update payments section on item removal 2024-02-23 17:29:08 +05:30
Gursheen Anand
7566c1ee78 test: sales person target variance 2024-02-23 15:05:36 +05:30
ruthra kumar
97c3e27c60 Merge pull request #39830 from Nihantra-Patel/fix_check_credit_limit
fix: check_credit_limit on_update_after_submit of Sales Order
2024-02-23 14:20:36 +05:30
ruthra kumar
467c0898e9 test: credit limit on update after submit 2024-02-23 14:03:09 +05:30
Gursheen Kaur Anand
26ec697a0b Merge pull request #40040 from GursheenK/skip-discount-validation-for-rate-adjustment-entries
fix: skip max discount validation for rate adjustment
2024-02-23 12:56:38 +05:30
Gursheen Kaur Anand
3294282880 Merge pull request #40035 from GursheenK/delete-ple-on-deletion-of-transactions
fix: delete PLE containing invoice in against
2024-02-23 12:36:14 +05:30
Gursheen Anand
a823f16dff feat: show contributed qty in transaction summary 2024-02-23 12:17:54 +05:30
Gursheen Anand
339698d172 fix: only consider contributed qty towards achieved targets 2024-02-23 12:14:54 +05:30
ruthra kumar
dd23ddcd6c Merge pull request #40011 from ruthra-kumar/cr_dr_note_with_payments
fix: Ledger entries for Cr/Dr notes with POS Payments
2024-02-23 06:01:37 +05:30
ruthra kumar
20eff568b1 Merge pull request #39831 from Nihantra-Patel/fix_payment_period_si
fix: remove cancelled payment entry from Payment Period Based On Invoice Date
2024-02-23 06:00:02 +05:30
ruthra kumar
3634c4c284 refactor: skip popup for POS invoices 2024-02-23 05:45:04 +05:30
Raffael Meyer
2e0aaf3521 Merge pull request #40051 from barredterra/transaction-due-date-translatability 2024-02-22 18:43:19 +01:00
barredterra
6249965605 feat: clear payment terms and schedule 2024-02-22 18:39:17 +01:00
Raffael Meyer
a9f8af2fd1 Merge pull request #40050 from barredterra/transaction-due-date-translatability 2024-02-22 18:32:03 +01:00
barredterra
6d43d46fbc fix: translatability 2024-02-22 18:30:20 +01:00
ruthra kumar
4288713abe test: ledger entries of Cr Note of POS Invoice 2024-02-22 20:46:07 +05:30
ruthra kumar
b03c683898 Merge pull request #39828 from Nihantra-Patel/fix_translate_sales_pip_report
fix: translate Sales Pipeline Analytics report
2024-02-22 20:24:00 +05:30
Nihantra C. Patel
c5050c935b fix: translatable columns in Sales Pipeline Analytics report 2024-02-22 20:08:11 +05:30
Gursheen Anand
e2d16955dd fix: skip SO & DN validation for debit note 2024-02-22 16:24:42 +05:30
Gursheen Anand
5a3b133d65 fix: skip max discount validation for rate adjustment 2024-02-22 16:09:29 +05:30
Gursheen Anand
146c5b3e16 fix: only check for delinked PLEs 2024-02-22 16:00:52 +05:30
Gursheen Anand
c1e1fd8829 fix: delete PLE containing invoice in against 2024-02-22 15:12:02 +05:30
rohitwaghchaure
da184d709b fix: negative stock error while making stock reconciliation (#40016)
fix: negative stock error while making stock reco
2024-02-22 09:22:58 +05:30
rohitwaghchaure
864d7ae04c fix: incorrect item name in MR (#40018) 2024-02-22 09:22:30 +05:30
rohitwaghchaure
0b04d04da3 fix: remove microsecond from posting datetime (#40017) 2024-02-22 09:22:05 +05:30
Gursheen Kaur Anand
6707425baa Merge pull request #40005 from GursheenK/communication_date_for_party_dashboard
fix: communication_date in party dashboards
2024-02-22 09:08:22 +05:30
Gursheen Kaur Anand
6cfb8fe439 Merge pull request #39999 from GursheenK/pricing_rule_type_error
fix: TypeError for item pricing rules
2024-02-22 09:06:27 +05:30
rohitwaghchaure
45b25e09c1 fix: negative stock error while submitting stock reconciliation (#40012)
fix: negative stock error while submitting stok reco
2024-02-21 23:01:15 +05:30
Ankush Menat
38e88db2c9 fix: timesheet per billed state edge case (#40010)
If value is 100.0000x then it won't set status correctly but will set it the next time it's loaded from db.
2024-02-21 15:27:26 +00:00
Gursheen Anand
87df7ff717 fix: accommodate for changed orderby statement 2024-02-21 18:44:29 +05:30
rohitwaghchaure
4c061d61fa Merge pull request #39800 from rohitwaghchaure/persistent-indexing
perf: new column Posting Datetime in SLE to optimize stock ledger related queries
2024-02-21 18:39:27 +05:30
Rohit Waghchaure
a73ba2c0d2 chore: remove microsecond from posting_datetime 2024-02-21 18:14:20 +05:30
Gursheen Anand
ecd83b12ab fix: check for pricing rules on item 2024-02-21 16:39:28 +05:30
rohitwaghchaure
408ea0432b Merge pull request #39998 from rohitwaghchaure/fixed-10262
fix: Completed Work Orders report not working
2024-02-21 16:30:08 +05:30
Rohit Waghchaure
11f4cb914a fix: Completed Work Orders report not working 2024-02-21 14:36:14 +05:30
Nabin Hait
66bf6e4041 Merge pull request #39983 from nabinhait/asset-cancel-deletion
fix: Issues regarding asset cancellation and deletion
2024-02-21 11:14:27 +05:30
rohitwaghchaure
f37f7ca5c3 Merge branch 'develop' into persistent-indexing 2024-02-21 11:02:23 +05:30
Nabin Hait
85471533e9 fix: removed unwanted patch 2024-02-21 08:44:03 +05:30
rohitwaghchaure
4b24fcd221 fix: set batch created from bundle to batch field in stock transaction (#39966)
* fix: set batch created from bundle to batch field in stock transaction

* fix: validation for serial and batch no
2024-02-20 23:45:07 +05:30
ruthra kumar
68a23730f3 fix: Cr/Dr notes with POS Payments 2024-02-20 21:53:33 +05:30
Nabin Hait
17f85de6fb fix: Issues regarding asset cancellation and deletion 2024-02-20 18:10:34 +05:30
rohitwaghchaure
8e7d47b3a7 fix: 'NoneType' object is not iterable (#39977) 2024-02-20 15:19:06 +05:30
rohitwaghchaure
133f8bd92a fix: show active bom in the dropdown while making stock entry and MR (#39974) 2024-02-20 12:35:35 +05:30
rohitwaghchaure
d4264f7ba1 fix: reposting failed status not updated (#39970) 2024-02-20 12:13:18 +05:30
rohitwaghchaure
fa1113f912 Merge pull request #39967 from rohitwaghchaure/fixed-subcontracting-pr-10107
fix: float division by zero
2024-02-20 06:30:57 +05:30
Rohit Waghchaure
e8ae4ed61d fix: float division by zero 2024-02-19 22:18:57 +05:30
rohitwaghchaure
a4cbfabe0e fix: do not empty serial batch fields (#39948) 2024-02-19 10:25:36 +05:30
ruthra kumar
9cb83d2198 Merge pull request #39914 from ruthra-kumar/total_row_when_filtered_on_party
refactor: add total row if only one party is being filtered
2024-02-19 08:25:20 +05:30
ruthra kumar
e25b4e24df Merge pull request #39942 from ruthra-kumar/filter_warehouse_on_group
fix: group node in warehouse filter in Item-wise Sales Register
2024-02-19 08:24:49 +05:30
ruthra kumar
4f23d88f62 Merge pull request #39943 from ruthra-kumar/disclaimer_on_credit_debit_notes
refactor: use popup to inform on additional reconciliation step for Cr/Dr Notes
2024-02-19 07:13:08 +05:30
barredterra
0bbf45cd8b refactor: make_gle_for_change_amount 2024-02-17 20:46:52 +01:00
barredterra
2ff06af154 refactor: validate_serial_numbers 2024-02-17 20:29:38 +01:00
barredterra
9c0755d3de refactor: set_income_account_for_fixed_assets 2024-02-17 20:08:49 +01:00
barredterra
701671b2bd refactor: validate_dropship_item 2024-02-17 19:50:34 +01:00
barredterra
4d7d7dac01 refactor(Sales Invoice): validate_delivery_note 2024-02-17 19:40:02 +01:00
Rohit Waghchaure
f04676aaed test: test cases to test clash timestamp entries 2024-02-17 15:01:18 +05:30
ruthra kumar
0d260faa00 refactor: use popup to inform on additional reconciliation step 2024-02-17 07:19:32 +05:30
ruthra kumar
44538bd02a fix: group node in warehouse filter in Item-wise Sales Register 2024-02-17 06:41:00 +05:30
barredterra
75230ece9a refactor: set actual and projected qty in Packed Item and Sales Invoice Item 2024-02-16 23:50:32 +01:00
barredterra
f99f7fd2cf refactor(Sales Invoice): convert to guard clause 2024-02-16 23:17:41 +01:00
barredterra
cc83af0dd4 refactor: move code for unlinking sales invoice to Timesheet 2024-02-16 23:14:50 +01:00
Raffael Meyer
028d31a6f9 Merge pull request #39938 from barredterra/issue-communication 2024-02-16 20:13:58 +01:00
barredterra
3f1d008741 fix(Issue): create communication
Ignore permisions and mandatory. Required, for example, when Issue is created by Customer via portal.
2024-02-16 19:58:58 +01:00
barredterra
0b3ecd24e2 feat: pass doctype as context when translating label 2024-02-16 16:29:40 +01:00
rohitwaghchaure
506fefa186 Merge pull request #39934 from rohitwaghchaure/fixed-batch-filter-in-stock-ledger
fix: batch filter not working in stock ledger report
2024-02-16 20:16:43 +05:30
Rohit Waghchaure
a995e87567 fix: batch filter not working in stock ledger report 2024-02-16 19:43:34 +05:30
rohitwaghchaure
fa4ea7c96d Merge pull request #39930 from rohitwaghchaure/fixed-use-serial-batch-fields-for-se
fix: use serial batch fields not enabled for new stock entry
2024-02-16 15:48:52 +05:30
Rohit Waghchaure
dc9115a586 fix: use serial batch fields not enabled for new stock entry 2024-02-16 15:46:58 +05:30
Raffael Meyer
f3bd53193d Merge pull request #39926 from barredterra/bt-precision 2024-02-15 20:03:31 +01:00
barredterra
8a702a6338 fix(Bank Transaction): precision for (un)allocated_amount 2024-02-15 19:48:54 +01:00
rohitwaghchaure
8360339119 Merge pull request #39916 from rohitwaghchaure/fixed-pr-issue-9877
fix: not able to make purchase receipt
2024-02-15 17:32:57 +05:30
rohitwaghchaure
799794cafb Merge pull request #39905 from rohitwaghchaure/fixed-item-reference-9906
fix: party item code in Blanket Order
2024-02-15 14:58:49 +05:30
Rohit Waghchaure
2fb0499923 fix: not able to make purchase receipt 2024-02-15 14:58:34 +05:30
rohitwaghchaure
230a7d8d53 chore: fix linter issue 2024-02-15 14:28:06 +05:30
ruthra kumar
b1dfa2537b refactor: add total row if only one party is being filtered 2024-02-15 12:53:27 +05:30
Rohit Waghchaure
1a8f7f9403 fix: party item code in Blanket Order 2024-02-14 18:45:11 +05:30
rohitwaghchaure
d0df5df4a6 fix: production plan issue with sales order (#39901) 2024-02-14 16:39:33 +05:30
rohitwaghchaure
6239fd704b fix: landed cost voucher not submitting because of incorrect reference (#39898) 2024-02-14 15:29:20 +05:30
Rohit Gunjegaonkar
b124081065 fix: use correct field name in accounts controller (#39884)
Changes to get advance payments in SI or PI from JV's
2024-02-14 12:08:36 +05:30
Raffael Meyer
4bef6707ec Merge pull request #38649 from pps190/ux-delivery_date-schedule_date 2024-02-14 01:56:29 +01:00
barredterra
76023f1fdc refactor(Sales Invoice Item): validate cost center 2024-02-14 01:14:42 +01:00
Raffael Meyer
f1f8f59bdb Merge pull request #39868 from barredterra/fix-stock-value-diff 2024-02-14 00:50:58 +01:00
Raffael Meyer
24ba26fef3 Merge pull request #39857 from kunhimohamed/company_terms 2024-02-14 00:27:59 +01:00
kunhi
e6949d71f6 fix: update_dimension is required and not need party account method 2024-02-13 22:49:39 +04:00
kunhi
e3bd8d10b0 fix: no need call for company method in sales invoice js 2024-02-13 22:32:10 +04:00
Rohit Waghchaure
d80ca523a4 perf: new column posting datetime in SLE to optimize stock ledger related queries 2024-02-13 11:42:39 +05:30
Nihantra C. Patel
22291d32e6 fix: corrective_operation_cost in Job Card (#39829) 2024-02-13 00:48:38 +05:30
barredterra
5df5851798 fix: calculate stock_value_diff
`d.item_tax_amount` is already in base currency.
2024-02-12 17:05:03 +01:00
s-aga-r
1d1cb86c75 Merge pull request #39862 from s-aga-r/FIX-9779
fix: validate duplicate SBB
2024-02-12 19:59:36 +05:30
s-aga-r
1c2a7801b7 Merge pull request #39835 from s-aga-r/FIX-9623
fix: create SBB for `transfer_qty` in SE
2024-02-12 18:18:46 +05:30
s-aga-r
55e66db315 test: duplicate SBB 2024-02-12 18:16:29 +05:30
s-aga-r
094ecc1f62 fix: validate duplicate SBB 2024-02-12 18:15:42 +05:30
s-aga-r
2b1e0d3bd0 Merge pull request #39846 from s-aga-r/FIX-9699
perf: production plan submission
2024-02-12 15:28:37 +05:30
kunhi
d97b6d38ef fix: fetch company terms 2024-02-12 12:18:37 +04:00
rohitwaghchaure
b966c06a4f perf: cached get_last_purchase_details to fix performance issue (#39854) 2024-02-12 12:49:09 +05:30
Nijith anil
2ee642fb2c fix(ux): sales invoice link in error message (#39841)
fix: sales invoice link in error message

Co-authored-by: Nijith anil <nijithanil501@email.com>
2024-02-11 18:12:01 +05:30
Deepesh Garg
4b1c851da1 fix: Brazilian COA for demo data creation (#39839)
fix: Brazilian COA
2024-02-11 17:18:57 +05:30
s-aga-r
39067c7614 feat: get RM costs from consumption entry in manufacture SE (#39822) 2024-02-11 17:10:57 +05:30
s-aga-r
aa1c69dd7a perf: production plan submission 2024-02-11 16:34:30 +05:30
rohitwaghchaure
e5824fc3f1 fix: stock entry for use serial batch fields (#39843) 2024-02-11 11:10:21 +05:30
s-aga-r
d59caf08e6 fix: create SBB for transfer_qty in SE 2024-02-09 19:13:03 +05:30
Nihantra C. Patel
186cc3d748 fix: remove cancelled payment entry from PPBOID report 2024-02-09 16:27:52 +05:30
Nihantra C. Patel
a2a8a8f2e0 fix: remove cancelled payment entry from Payment Period Based On Invoice Date 2024-02-09 16:13:44 +05:30
Nihantra C. Patel
17452b7693 fix: check_credit_limit on_update_after_submit of Sales Order 2024-02-09 15:18:45 +05:30
Gursheen Anand
8c85404191 fix: test for repost accounting in JVs 2024-02-09 13:11:51 +05:30
rohitwaghchaure
159a123dc7 fix: warehouse issue in pick list (#39826) 2024-02-09 11:14:54 +05:30
s-aga-r
1568af2a7b Merge pull request #39816 from s-aga-r/FIX-9595
fix(ux): set rate as price list rate on uom change in MR
2024-02-08 17:54:19 +05:30
s-aga-r
1745371cd6 chore: linter 2024-02-08 16:44:31 +05:30
Gursheen Anand
ecdc4c8e9b feat: add patch for making repostable dimension fields editable 2024-02-08 16:36:30 +05:30
s-aga-r
5cf0759b0c fix: set rate as price list rate on uom change 2024-02-08 16:34:26 +05:30
s-aga-r
61a29eb5fb fix: add price list rate field in MR Item 2024-02-08 16:33:48 +05:30
Gursheen Anand
8bb83e267c fix: allow editable accounting dimensions for repostable doctypes 2024-02-08 16:09:28 +05:30
Gursheen Anand
781bdd2ec9 fix: disable editable account heads 2024-02-08 15:35:10 +05:30
Gursheen Anand
2d78dba66f chore: rebase 2024-02-08 15:20:50 +05:30
mergify[bot]
2c8e4c1ab3 fix: do not consider rejected warehouses in pick list (backport #39539) (#39804)
* fix: do not consider rejected warehouses in pick list (#39539)

* fix: do not picked rejected materials

* test: test case for pick list without rejected materials

(cherry picked from commit f6725e4342)

# Conflicts:
#	erpnext/selling/doctype/sales_order/test_sales_order.py
#	erpnext/stock/doctype/pick_list/pick_list.json
#	erpnext/stock/doctype/pick_list/pick_list.py

* chore: fix conflicts

* chore: fix conflicts

* chore: fix conflicts

* chore: fixed test case

---------

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2024-02-08 13:54:08 +05:30
ruthra kumar
22a187c3be Merge pull request #39783 from ruthra-kumar/cancel_cr_dr_note_jes_on_cancel
fix: cancelling cr/dr notes should update the linked Invoice status
2024-02-07 20:25:53 +05:30
ruthra kumar
2f676ced5c refactor(test): Forex Credit Note cancellation against Invoice 2024-02-07 19:59:33 +05:30
s-aga-r
e9251c3775 Merge pull request #39785 from s-aga-r/FIX-9505
fix: incorrect planned qty in PP
2024-02-07 19:02:31 +05:30
Ankush Menat
294f562fb9 build: Pin frappe requirements to ^16.0.0 (#39782) 2024-02-07 18:30:35 +05:30
s-aga-r
81e82b0595 Merge pull request #39780 from s-aga-r/FIX-9577
fix: add permissions to SRE
2024-02-07 18:14:08 +05:30
s-aga-r
a8ebc94a36 fix: incorrect planned qty in PP 2024-02-07 18:13:34 +05:30
ruthra kumar
33efe0d12d refactor(test): assert Invoice status as well 2024-02-07 17:33:55 +05:30
ruthra kumar
31a8c3bdc4 test: Invoice status on Cr/Dr note cancellation 2024-02-07 17:21:29 +05:30
ruthra kumar
0549535603 refactor: cancel Cr/Dr JE's on Sales/Purchase return cancel 2024-02-07 16:35:07 +05:30
s-aga-r
50f54d983d fix: add permissions to SRE 2024-02-07 16:06:28 +05:30
Gursheen Kaur Anand
146147316d Merge pull request #39757 from GursheenK/duplicates-in-tax-category-map
fix: duplicates in tax category map
2024-02-07 15:11:59 +05:30
rohitwaghchaure
ab9d6576d0 Merge pull request #39769 from rohitwaghchaure/fixed-inventory-dimension-validation-8004
fix: do not throw validation for canceled SLE
2024-02-06 23:11:50 +05:30
Rohit Waghchaure
32ccf3524a fix: do not throw validation for cancelled sle 2024-02-06 22:48:13 +05:30
rohitwaghchaure
d6d91257b6 Merge pull request #39764 from rohitwaghchaure/fixed-remove-file-from-disk-9515
fix: remove file from the disk after the completion of reposting
2024-02-06 21:26:28 +05:30
s-aga-r
40ce0c851d Merge pull request #39765 from s-aga-r/FIX-9412
fix: set rate for PO created against BO
2024-02-06 21:18:48 +05:30
Rohit Waghchaure
76b57a4338 test: test case to check removed attached file 2024-02-06 21:09:58 +05:30
s-aga-r
0e5b4e5f07 fix: set rate for PO created against BO 2024-02-06 19:21:51 +05:30
Rohit Waghchaure
fb330d1b5a fix: remove file from the disk after the completion of reposting 2024-02-06 19:13:48 +05:30
Ankush Menat
9636458ae1 ci: codecov changes (#39760)
- don't report coverage on individual PRs, instead do it daily
- update tokens for reporting
2024-02-06 10:21:46 +00:00
rohitwaghchaure
4671f65cbd Merge pull request #39718 from rohitwaghchaure/create-bundle-using-old-fields
fix: use old serial / batch fields to make serial batch bundle
2024-02-06 15:47:08 +05:30
Gursheen Anand
9383f5da94 test: single account for multiple tax categories 2024-02-06 15:03:12 +05:30
Rohit Waghchaure
01650120d4 test: test case to check use serial / batch fields feature 2024-02-06 14:31:19 +05:30
Gursheen Kaur Anand
943dcb6dea Merge branch 'frappe:develop' into duplicates-in-tax-category-map 2024-02-06 14:17:40 +05:30
Gursheen Anand
3a26823c62 refactor: fetch rate once tax category is set 2024-02-06 14:01:06 +05:30
Gursheen Anand
e55611497b fix: duplicate for tax category in map 2024-02-06 13:56:41 +05:30
Ankush Menat
798a0510e6 refactor: change server_action args (#39756)
args are now flat, no need to accept them as dict

ref: https://github.com/frappe/frappe/pull/24782
2024-02-06 08:04:28 +00:00
Gursheen Kaur Anand
e38b46300c Merge pull request #39349 from GursheenK/JVs-in-withholding-report
fix: TDS accounts GLE query for withholding category report
2024-02-06 13:00:13 +05:30
s-aga-r
41f58476e1 Merge pull request #39746 from s-aga-r/FIX-9365
fix: show warehouse title field in sales docs
2024-02-06 12:03:33 +05:30
Ankush Menat
56e5611337 chore: update CI badges (#39753) 2024-02-06 06:01:11 +00:00
ruthra kumar
2e509f69d4 Merge pull request #39694 from ruthra-kumar/enforce_separate_account_for_each_bank_account
refactor: enforce unique GL Account for each 'Bank Account'
2024-02-06 09:29:12 +05:30
s-aga-r
ee14faaa39 fix: show warehouse title field in sales docs 2024-02-05 22:08:59 +05:30
s-aga-r
ae4ebcd987 Merge pull request #39733 from s-aga-r/FIX-9458
fix: update company in serial no doc
2024-02-05 21:54:02 +05:30
rohitwaghchaure
1bfbbfe393 Merge pull request #39742 from rohitwaghchaure/fixed-performance-issue-9247
perf: timeout while submitting the purchase receipt entry
2024-02-05 21:01:17 +05:30
Rohit Waghchaure
1fa6233377 perf: timeout while submitting the purchase receipt entry 2024-02-05 19:46:51 +05:30
Rohit Waghchaure
c1e869f040 test: fixed test cases 2024-02-05 19:39:58 +05:30
s-aga-r
3b671d5875 Merge pull request #39725 from s-aga-r/FIX-9411
fix: Blanket Order Ordered Quantity
2024-02-05 16:07:50 +05:30
Gursheen Anand
c5770f2ecc test: partial billing for provisional accounting 2024-02-05 15:58:06 +05:30
Gursheen Anand
ff3ca50a4b test: overbilling for provisional accounting 2024-02-05 15:55:17 +05:30
Gursheen Anand
cc96d2b50c fix: over billing qty along with rate 2024-02-05 15:52:46 +05:30
s-aga-r
4d614c1589 Merge pull request #39688 from s-aga-r/FIX-9169
fix: remove applied pricing rule on qty change
2024-02-05 15:40:44 +05:30
s-aga-r
27d6c8b6d5 test: BO on PO Close/Open 2024-02-05 15:38:31 +05:30
s-aga-r
61ded697a7 fix: update BO Ordered Quantity on PO Close/Open 2024-02-05 15:38:31 +05:30
s-aga-r
5ce5c352e4 fix: disable no-copy for blanket order in PO 2024-02-05 15:38:31 +05:30
Deepesh Garg
6e6c818084 feat: Period-wise closing entries for TB (#39712) 2024-02-05 14:10:42 +05:30
Deepesh Garg
b834ed10d6 perf: Move dimension validation out of GL Entry doctype (#39730) 2024-02-05 14:05:01 +05:30
Gursheen Anand
25c2b79864 fix: precision for tds amount 2024-02-05 13:03:21 +05:30
s-aga-r
7a04f0f7ba fix: update company in serial no doc 2024-02-05 12:35:26 +05:30
rohitwaghchaure
b70f3de16b perf: memory consumption for the stock balance report (#39626) 2024-02-05 11:46:39 +05:30
RitvikSardana
955098c4c0 Merge pull request #39651 from RitvikSardana/develop-ritvik-ignore-permission-flag
fix: add ignore_permissions flag while creating a payment entry.
2024-02-05 11:45:02 +05:30
rohitwaghchaure
675a0b810f Merge pull request #39659 from rohitwaghchaure/fixed-timeout-error-while-making-auto-mr
perf: timeout for auto material request through reorder level
2024-02-05 11:38:11 +05:30
rohitwaghchaure
d7e4a6be13 Merge pull request #39684 from rohitwaghchaure/fixed-landed-cost-voucher-issue-manually
fix: incorrect landed cost voucher amount
2024-02-05 11:37:41 +05:30
Raffael Meyer
617d923f0d Merge pull request #38647 from barredterra/copy-emails-to-customer 2024-02-04 22:13:48 +01:00
Gursheen Kaur Anand
407045a1de fix: production plan date filters for orders (#39702) 2024-02-04 23:01:51 +05:30
NIYAZ RAZAK
d73e42fc41 feat: project field 2024-02-04 17:23:08 +03:00
Rohit Waghchaure
9fafc83632 fix: use old serial / batch fields to make serial batch bundle 2024-02-04 18:32:19 +05:30
Vishnu VS
c81d597ca5 fix(work order): resolve type error during job card creation (#39713)
fix: type error
2024-02-04 06:47:18 +00:00
mergify[bot]
50cff656b4 Merge branch 'develop' into copy-emails-to-customer 2024-02-03 08:37:59 +00:00
Gursheen Kaur Anand
d9a72c1e61 feat: reference for POS SI payments (#39523)
* feat: reference field in SI payment

* fix: document link for pos si

* refactor: pos invoice queries
2024-02-03 13:05:41 +05:30
ruthra kumar
322cdbaccf refactor(test): make use of test fixtures in Payment Order 2024-02-03 12:09:50 +05:30
ruthra kumar
a9a2ec81de refactor(test): generate uniq GL acc and Bank acc for each test case 2024-02-03 12:07:43 +05:30
Raffael Meyer
93259cab1d fix(Bank Statement Import): scheduler not needed in dev mode (#39678) 2024-02-03 09:12:28 +05:30
Gursheen Anand
7efb5a8cb5 fix(portal): context pay_amount for button 2024-02-02 22:01:42 +05:30
Gursheen Anand
c18ff5bd25 fix(portal): payment amount for orders 2024-02-02 21:59:53 +05:30
Gursheen Anand
f7face43cd fix: check payments against orders for getting request amount 2024-02-02 21:57:45 +05:30
ruthra kumar
2caa2d677c refactor: ensure unique accounts for each Bank Account's 2024-02-02 21:03:41 +05:30
Deepesh Garg
6d87cfeb8d fix: Percentage handling in queries (#39692)
* fix: Percentage handling in queries

* test: Account with percent sign

* chore: add test records
2024-02-02 18:08:33 +05:30
s-aga-r
2693fcb446 Merge pull request #39687 from s-aga-r/FIX-9316
fix: out of range for valuation_rate column in SE
2024-02-02 13:35:00 +05:30
s-aga-r
7c6a5a0f23 fix: remove pricing rule 2024-02-02 13:18:52 +05:30
s-aga-r
1e15a3cc15 fix: out of range for valuation_rate column in SE 2024-02-02 13:07:26 +05:30
Rohit Waghchaure
d78a1e7814 fix: incorrect landed cost voucher amount 2024-02-01 19:29:06 +05:30
ruthra kumar
12affa70cf Merge pull request #39674 from ruthra-kumar/add_account_type_warning
refactor: use pop up to inform of possible data issue
2024-02-01 17:11:39 +05:30
ruthra kumar
78483e2ee6 refactor: use pop up to inform of possible data issue
and leave a comment in communcation trail as well
2024-02-01 16:24:47 +05:30
Divyam Mistry
e9fe10c6f1 fix: fetch/change tax template on basis of base_net_rate instead of net_rate (#39448)
fix: change tax template on basis of base_net_rate instead of net_rate

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2024-02-01 16:15:43 +05:30
ruthra kumar
518b06c8eb Merge pull request #39671 from ruthra-kumar/filter_to_ignore_err_journals_in_general_ledger
refactor: move ignore ERR filter from SOA to General Ledger
2024-02-01 16:09:53 +05:30
Gursheen Kaur Anand
27b557bef9 Merge branch 'develop' into editable-journal-entries 2024-02-01 16:08:14 +05:30
ruthra kumar
beff566c82 refactor(test): use party with USD billing currency 2024-02-01 15:46:57 +05:30
ruthra kumar
affca3a519 test: ignore_err filter out in General Ledger 2024-02-01 15:13:28 +05:30
ruthra kumar
c077eda64e refactor: move ignore ERR filters from SOA to General Ledger 2024-02-01 14:53:01 +05:30
Gursheen Kaur Anand
772f540bef fix: correctly calculate diff amount for included taxes (#39655) 2024-02-01 10:13:29 +05:30
Rohit Waghchaure
951023f434 perf: timeout for auto material request through reorder level 2024-01-31 17:27:32 +05:30
rohitwaghchaure
5e71d6ac4e Merge pull request #39643 from GursheenK/portal-po-pay-btn
fix(portal): show PO pay button if payments installed
2024-01-31 14:44:25 +05:30
Gursheen Kaur Anand
7475233fa6 Merge branch 'develop' into portal-po-pay-btn 2024-01-31 13:39:49 +05:30
Gursheen Anand
0c9572bb48 fix: conditionally display show btn setting 2024-01-31 13:37:01 +05:30
Rucha Mahabal
6b8f046fb4 chore: cleanup doctype descriptions (#39637)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
2024-01-31 12:15:52 +05:30
RitvikSardana
1ff473b615 fix: add ignore_permissions flag while creating a payment entry 2024-01-31 11:34:20 +05:30
Deepesh Garg
cfd1666181 fix: Exchange rate on MR to PO creation for muticurrency POs (#39646) 2024-01-31 09:27:52 +05:30
Raffael Meyer
0c6c650c08 Merge pull request #39519 from barredterra/dont-override-tc 2024-01-31 01:12:27 +01:00
rohitwaghchaure
31f586f716 Merge pull request #38362 from rohitwaghchaure/feat-visual-plant-floor
feat: visual plant floor
2024-01-30 22:35:42 +05:30
Rohit Waghchaure
6fea9d6dfe feat: make material request for job card from workstation dashboard 2024-01-30 22:12:34 +05:30
Raffael Meyer
212d656d85 Merge pull request #39468 from blaggacao/feat/payment-request-failure-reason 2024-01-30 15:58:42 +01:00
David Arnold
9a705169fd fix: remove empty dn from bulk creation if date filter renders them empty 2024-01-30 13:51:48 +01:00
David Arnold
00a915b741 feat: hanled payment request failure reasons 2024-01-30 13:00:55 +01:00
Gursheen Anand
ae7be84d87 fix(portal): show PO pay button if payments installed 2024-01-30 17:24:59 +05:30
Raffael Meyer
f8a9554bbd Merge pull request #38157 from blaggacao/fix/notification-comply-with-upstream 2024-01-30 12:33:25 +01:00
David Arnold
d86186ec47 fix: correct receiver field 2024-01-30 12:12:15 +01:00
David Arnold
3fd43cd6bb chore: remove old md files 2024-01-30 12:11:08 +01:00
mergify[bot]
12a4f2761c Merge branch 'develop' into feat/add-delivery-cutoff-date-on-so 2024-01-30 09:56:24 +00:00
mergify[bot]
e9dfb45fca Merge branch 'develop' into fix/notification-comply-with-upstream 2024-01-30 09:49:57 +00:00
rohitwaghchaure
b14886b227 fix: perf issue while submitting stock entry (#39634) 2024-01-30 15:16:52 +05:30
Raffael Meyer
2e49423d3f Merge branch 'develop' into dont-override-tc 2024-01-30 10:44:16 +01:00
Gursheen Anand
ddecbeba75 fix: test JV totals using back calculation logic 2024-01-30 12:39:40 +05:30
ruthra kumar
2e5d716408 Merge pull request #39559 from ruthra-kumar/prevent_cr_note_with_different_account_to_sales_invoice
fix: prevent Return Invoices(Credit/Debit Note) from using a different account
2024-01-30 11:00:44 +05:30
ruthra kumar
bdca718103 test: debit note account mismatch 2024-01-30 10:38:44 +05:30
ruthra kumar
8bdc760733 test: account mismatch validation 2024-01-30 10:38:44 +05:30
ruthra kumar
6f2fae1b61 refactor: prevent '{debit/credit}_to' account mismatch 2024-01-30 10:38:44 +05:30
Raffael Meyer
91b913b5bb chore: regenerate pot file (#39627) 2024-01-30 08:32:55 +05:30
rohitwaghchaure
5cf47ae5f9 fix: not able to submit subcontracting pr (old flow) (#39622) 2024-01-29 20:41:26 +05:30
Deepesh Garg
a673220feb feat: Partly billed status in Purchase Receipt (#39543) 2024-01-29 19:56:46 +05:30
rohitwaghchaure
4e182b89ce fix: not able to save BOM (duplicate key error) (#39620) 2024-01-29 19:35:05 +05:30
Rohit Waghchaure
68c997aa06 feat: visual plant floor 2024-01-29 18:48:35 +05:30
Gursheen Kaur Anand
866df9f1c7 Merge pull request #39616 from GursheenK/item-delivery-date-from-qtn
fix(minor): do not auto-populate item delivery date from qtn
2024-01-29 15:50:23 +05:30
Gursheen Anand
079cd30b9c fix: qtn tests using delivery date 2024-01-29 14:19:25 +05:30
Gursheen Anand
49cb11c1f3 fix: do not auto-populate item delivery date 2024-01-29 13:15:00 +05:30
Jeffry Suryadharma
efade9b9ae fix amount not updated when change rate in material request (#39606)
* fix amount not updated when change rate in material request

* make code consistent
2024-01-29 12:57:49 +05:30
Gursheen Anand
2a46799188 fix: handle partial invoice against provisional entry 2024-01-29 11:34:06 +05:30
Dany Robert
50d56db0c2 fix: specify precision for net_amount (#39481)
* fix: specify precision for net_amount

* fix: correct existing test to account for precision

* fix: rounding issue in test cases

* fix: optional grand total manipulation

* fix: use `grand_total_diff` for manipulation

* fix: patch to set default for grand total manipulation

* fix: wrong rounding assertion for USD

* fix: undefined this.frm error

* chore: linters

* fix: `net_amount` percision and method rename

* fix: missing frm reference

* chore: minor cleanups and depr message

* refactor: remove optional adjusting of grand total
2024-01-29 09:32:44 +05:30
Deepesh Garg
16404110a8 Merge pull request #39588 from CitrusLeafSoft/New-Financial-report-views
feat: New financial views - Growth and margin views for P&L and balance sheet
2024-01-28 11:36:55 +05:30
mergify[bot]
6a63a8997d Merge branch 'develop' into fix/notification-comply-with-upstream 2024-01-28 05:42:37 +00:00
Deepesh Garg
88ff945e40 Merge pull request #39562 from GursheenK/JV-timeout-issue
fix: enqueue JV submission when > 100 accounts
2024-01-28 10:30:25 +05:30
Deepesh Garg
8f6c23cb53 Merge pull request #39598 from GursheenK/type-error-dashboard-report
fix(minor): type error in financial statements for dashboard
2024-01-28 09:55:49 +05:30
mergify[bot]
4c197c8dbd Merge branch 'develop' into copy-emails-to-customer 2024-01-28 04:23:49 +00:00
Deepesh Garg
f2891229ab Merge pull request #38643 from barredterra/quotation-to-customer
refactor: get/create customer for Sales Order
2024-01-28 09:53:15 +05:30
Gursheen Anand
2486b646a1 fix: check page obj before adding menu 2024-01-27 23:30:17 +05:30
rohitwaghchaure
8fdc244e16 fix: prevent extra transfer against inter transfer transaction (#39213)
* fix: prevent extra transfer against inter transfer transaction

* fix: internal transfer dashboard
2024-01-27 21:37:58 +05:30
ruthra kumar
5be868c7f6 Merge pull request #39591 from ruthra-kumar/conversion_on_future_payments
refactor: Do proper currency conversion on Future Payments column in AR/AP report
2024-01-27 12:52:18 +05:30
rohitwaghchaure
67d828dab3 fix: not able to save subcontracting purchase receipt (old flow) (#39590) 2024-01-27 12:00:06 +05:30
ruthra kumar
7b37389115 test: future payment with foreign currency 2024-01-27 11:48:22 +05:30
ruthra kumar
0de4197c88 refactor: do currency conversion on future amount columns 2024-01-27 11:48:19 +05:30
nitmit
92649de5c6 Adding growth and margin views for P&L and balance sheet financial reports in collaboration with Sapcon Instruments Pvt Ltd 2024-01-27 10:18:35 +05:30
Gursheen Anand
3e59c66806 fix: provisional reverse entry amount 2024-01-26 21:46:19 +05:30
Gursheen Anand
fc677811b7 fix: return doc obj after submit 2024-01-26 20:03:21 +05:30
mergify[bot]
19ff10dfeb Merge branch 'develop' into quotation-to-customer 2024-01-26 13:56:08 +00:00
Deepesh Garg
4173203382 Merge pull request #39578 from deepeshgarg007/fix_ci
fix: apply no copy on source docs
2024-01-26 19:25:22 +05:30
Deepesh Garg
dbd4dae3d9 test: Internal transfer using purchase receipt 2024-01-26 18:42:29 +05:30
Deepesh Garg
99b839d2b6 chore: failing ci tests 2024-01-26 10:46:44 +05:30
Deepesh Garg
30cc65d2b7 Merge pull request #39511 from barredterra/set-account-for-mode-of-payments
refactor(Sales Invoice): set account and sum for payments
2024-01-26 09:44:11 +05:30
Deepesh Garg
722ee53fb1 Merge branch 'develop' of https://github.com/frappe/erpnext into copy-emails-to-customer 2024-01-26 09:39:13 +05:30
Deepesh Garg
6173b34b10 Merge branch 'develop' of https://github.com/frappe/erpnext into quotation-to-customer 2024-01-26 09:35:38 +05:30
Deepesh Garg
f7a3af7473 Merge pull request #39532 from GursheenK/type-error-in-transaction-js
fix: type error in transaction.js
2024-01-26 09:30:53 +05:30
Deepesh Garg
d491036f2d Merge pull request #39108 from deepeshgarg007/in_words_pe
feat: In words in payment entry
2024-01-26 09:30:26 +05:30
Deepesh Garg
d2057588dd Merge branch 'develop' of https://github.com/frappe/erpnext into type-error-in-transaction-js 2024-01-26 09:29:05 +05:30
rohitwaghchaure
2bdfdeeb9a fix: incorrect amount in the material request item (#39567)
fix: incoorect amount in the material request
2024-01-25 16:49:12 +05:30
Nabin Hait
be074a2972 Merge pull request #39489 from nabinhait/grouped-asset-value
fix: fetch correct quantity and amount for grouped asset
2024-01-25 16:20:35 +05:30
Gursheen Kaur Anand
2b3cc5ba2d Merge pull request #39557 from GursheenK/validate-item-code-with-prevdoc
fix: make SO item code mandatory
2024-01-25 16:19:23 +05:30
Nabin Hait
06f48c678b fix: fetch correct quantity and amount for grouped asset 2024-01-25 16:18:54 +05:30
Gursheen Anand
53b44ccf29 fix: enqueue JV submission when more than 100 accounts 2024-01-25 16:13:24 +05:30
Deepesh Garg
69db569ca5 Merge pull request #39446 from GursheenK/payment-reco-company-field
fix: ignore user permissions for company in payment reco
2024-01-25 15:06:10 +05:30
Gursheen Anand
7f8303a493 fix: make SO item code reqd 2024-01-25 14:27:35 +05:30
Ankush Menat
dfda5ad673 ci: Add fake passing tests when CI is skipped (#39555) 2024-01-25 14:18:27 +05:30
ruthra kumar
1e89c1c875 Merge pull request #39535 from ruthra-kumar/rename_advance_doctype_variable_hook
refactor: use generic name for advance doctypes variable
2024-01-25 13:25:56 +05:30
rohitwaghchaure
d1fb90edff fix: default enable closing stock balance (#39551) 2024-01-25 12:42:16 +05:30
ruthra kumar
4f215f1b70 Merge pull request #38218 from rtdany10/account-balance-mismatch
fix: honour currency precision while fetching balance
2024-01-25 12:28:36 +05:30
Gursheen Kaur Anand
3f383d81bd Merge branch 'develop' into payment-reco-company-field 2024-01-25 11:44:53 +05:30
rohitwaghchaure
c0a1188067 Merge pull request #39547 from rohitwaghchaure/fixed-item-tax-template-not-working-for-e-commerce
fix: Item Tax template is not working for e-commerce
2024-01-25 11:36:48 +05:30
Nabin Hait
ca02dfa652 Merge pull request #39498 from nabinhait/asset-cancellation-fix
fix: cancellation of asset/asset capitalization
2024-01-25 11:36:19 +05:30
Rohit Waghchaure
7d3240ae3a fix: Item Tax template is not working for e-commerce 2024-01-25 11:08:33 +05:30
ruthra kumar
93681cfa24 Merge branch 'develop' into pr/38218 2024-01-25 09:58:54 +05:30
ruthra kumar
4f1e729b7c Merge pull request #39331 from FHenry/dev_fix_payment_terms_status_for_sales_order_report
fix: Payment Terms Status for Sales Order report show all payment terms from orders (not only when there is a payment terms template)
2024-01-24 16:11:52 +05:30
ruthra kumar
735576ab27 Merge branch 'develop' into dev_fix_payment_terms_status_for_sales_order_report 2024-01-24 15:45:46 +05:30
rohitwaghchaure
23199a3271 Merge pull request #39389 from rohitwaghchaure/fixed-incorrect-active-serial-nos
fix: incorrect active serial nos
2024-01-24 15:36:31 +05:30
Rohit Waghchaure
64cb1153de fix: incorrect active serial nos 2024-01-24 15:15:50 +05:30
ruthra kumar
9fcd89d456 refactor: use generic name for advance doctypes variable 2024-01-24 14:19:21 +05:30
ruthra kumar
4a4c4ba21b Merge pull request #39529 from ruthra-kumar/typeerror_on_company_transaction_deletion
fix: AttributeError in company transaction deletion
2024-01-24 13:09:49 +05:30
Gursheen Anand
030d35628d fix: type error on company doc 2024-01-24 12:47:55 +05:30
rohitwaghchaure
a552df8a9f Merge pull request #39525 from rohitwaghchaure/fixed-auto-mr-email-with-user-permissions-issue
fix: email list for auto reorder material request
2024-01-24 12:35:35 +05:30
ruthra kumar
b127aa308e fix: AttributeError in company transaction deletion 2024-01-24 12:24:02 +05:30
rohitwaghchaure
02028becb3 Merge pull request #39521 from rohitwaghchaure/fixed-not-able-to-edit-adddress
fix: not able to edit address through portal
2024-01-24 11:50:02 +05:30
Rohit Waghchaure
764f3422a0 fix: email list for auto reorder material request 2024-01-24 11:45:15 +05:30
Deepesh Garg
236c7e1e95 Merge pull request #39493 from GursheenK/skip-liability-acc-for-internal-transfers
fix: skip setting liability account for internal transfer
2024-01-24 10:34:19 +05:30
Deepesh Garg
9f1ddeb4e4 Merge pull request #39520 from barredterra/fix-typos
fix: typos
2024-01-24 10:33:27 +05:30
Rohit Waghchaure
b046d980ad fix: not able to edit address through portal 2024-01-24 10:29:55 +05:30
barredterra
806696a003 fix: typos 2024-01-24 02:59:52 +01:00
barredterra
77b044f1a6 fix: don't overwrite existing terms in transaction 2024-01-24 01:48:10 +01:00
Raffael Meyer
7a6a789199 Merge pull request #39512 from barredterra/refactor-split-batch 2024-01-23 17:54:28 +01:00
David Arnold
252fae68df feat: use new bulk creation arguments and contrue a cut-off date selector for dn-from-so 2024-01-23 17:46:12 +01:00
David Arnold
e5a5b6afc8 feat: add better preselection (cut-off: tomorrow) to dn-from-so creation dialogue 2024-01-23 17:45:40 +01:00
David Arnold
ffd38362d5 feat: add an argument pass mechanism to bulk transactions 2024-01-23 17:42:56 +01:00
barredterra
7a7a213285 refactor(Batch): use const instead of var 2024-01-23 15:02:42 +01:00
barredterra
34ec2f8a2b fix(Batch): reload doc after splitting
to show updated qty
2024-01-23 14:57:23 +01:00
rohitwaghchaure
4832175341 Merge pull request #39503 from rohitwaghchaure/fixed-serial-no-ledger-permission
fix: Serial No Ledger permission issue
2024-01-23 19:06:40 +05:30
barredterra
3c7e7a76f0 refactor: split batch 2024-01-23 14:23:32 +01:00
barredterra
3815f07c33 refactor(Sales Invoice): set account for mode of payment 2024-01-23 13:11:06 +01:00
ruthra kumar
ebaa5d3add Merge pull request #39054 from ruthra-kumar/provision_to_set_dimension_in_reconciliation_tool
refactor: provision to filter on dimensions in reconciliation tool
2024-01-23 17:28:21 +05:30
ruthra kumar
0d7dd93284 Merge pull request #38560 from blaggacao/feat/so-po-advance-payment-status
feat!: advance payment status on advance payment doctypes
2024-01-23 16:39:22 +05:30
ruthra kumar
9b4e757b0b test: advance payment status for Purchase Order 2024-01-23 15:53:05 +05:30
ruthra kumar
8de03ef836 test: advance payment status for Sales Order 2024-01-23 15:50:52 +05:30
David Arnold
bd6a4ca1d7 fix: move value initialization to ensure it is commited 2024-01-23 10:30:09 +01:00
David Arnold
7d8aa469d7 fix: align with 'Partly/Fully X' nomenclature in so & po 2024-01-23 10:30:08 +01:00
David Arnold
b1aef01a1f fix: always update the advance payment status 2024-01-23 10:30:08 +01:00
David Arnold
c88ce55242 fix: advance payment doctypes to keep input/output distinction 2024-01-23 10:30:07 +01:00
Rohit Waghchaure
1a670ff266 fix: Serial No Ledger permission issue 2024-01-23 13:27:37 +05:30
Nabin Hait
1a686cb66d fix: Use db_set to set a value in on_cancel 2024-01-23 12:46:15 +05:30
Nabin Hait
31592b8f3a fix: cancellation of asset/asset capitalization 2024-01-23 12:42:54 +05:30
rohitwaghchaure
f8675817e2 Merge pull request #39478 from rohitwaghchaure/fixed-ux-improvement-for-SABB
fix: UX improvements for Serial and Batch Bundle
2024-01-23 11:57:03 +05:30
Gursheen Anand
236b73565e fix: skip liability account for internal transfer 2024-01-22 21:13:32 +05:30
ruthra kumar
72614fe9e1 Merge branch 'develop' into pr/38560 2024-01-22 17:26:35 +05:30
rohitwaghchaure
60809ced85 Merge pull request #39488 from rohitwaghchaure/fixed-validate-stock-uom-integer-value
fix: UOM needs to be whole number not being checked in quotations
2024-01-22 17:24:32 +05:30
Rohit Waghchaure
aaf83da3e9 fix: UOM needs to be whole number not being checked in quotations 2024-01-22 16:43:54 +05:30
ruthra kumar
4c20a4710b Merge pull request #39484 from ruthra-kumar/move_project_filter_to_common
refactor: move 'project' set_query to sales_common.js
2024-01-22 15:50:17 +05:30
ruthra kumar
52814724eb refactor: move 'project' set_query to sales_common.js 2024-01-22 15:32:16 +05:30
Rohit Waghchaure
fc0d2aeeff fix: auto create serial no on scan 2024-01-22 13:42:33 +05:30
ruthra kumar
7c2cb70387 refactor: handle dynamic dimension in order query 2024-01-22 12:06:07 +05:30
ruthra kumar
ec0f17ca8b refactor: update dimensions, only if provided 2024-01-22 11:59:20 +05:30
ruthra kumar
f8bbb0619c refactor: dynamic dimension filters in pop up 2024-01-22 10:43:09 +05:30
ruthra kumar
b17e632a85 Merge pull request #39457 from ruthra-kumar/background_job_transaction_deletion
refactor: delete transactions in background
2024-01-22 09:57:25 +05:30
Deepesh Garg
13aae34e9c Merge branch 'develop' of https://github.com/frappe/erpnext into in_words_pe 2024-01-22 09:33:46 +05:30
Deepesh Garg
6d8949adea Merge pull request #39462 from GursheenK/pdf-party-ap-ar
fix: party field in PDF for AP / AR reports
2024-01-22 09:31:34 +05:30
rohitwaghchaure
faab225126 Merge pull request #39476 from rohitwaghchaure/fixed-added-button-to-create-serial-batch-from-PI
fix: added button to make serial / batch from Purchase Invoice
2024-01-21 22:22:42 +05:30
Rohit Waghchaure
63ffce58cc test: fixed test 2024-01-21 20:59:38 +05:30
Rohit Waghchaure
5d94f0bde5 fix: UX improvements for Serial and Batch Bundle 2024-01-21 20:46:57 +05:30
Rohit Waghchaure
b4393bc03d fix: added button to make serial / batch from Purchase Invoice 2024-01-21 20:17:15 +05:30
rohitwaghchaure
da0ad3bc00 Merge pull request #39475 from rohitwaghchaure/fixed-key-error-during-reposting
fix: key error during reposting
2024-01-21 19:51:43 +05:30
David Arnold
9fc5c0cc58 Merge remote-tracking branch 'origin/develop' into feat/so-po-advance-payment-status 2024-01-21 15:16:13 +01:00
Rohit Waghchaure
ebc8230d45 fix: key error during reposting 2024-01-21 18:05:20 +05:30
Gursheen Anand
e9526b112d test: journals in withholding report 2024-01-21 18:04:47 +05:30
Gursheen Kaur Anand
a6afe50a92 Merge branch 'frappe:develop' into JVs-in-withholding-report 2024-01-21 17:55:56 +05:30
Gursheen Kaur Anand
273bc1b1e3 Merge pull request #39229 from blaggacao/fix/tds-report
fix: use most reliable section reference per report line
2024-01-21 13:39:38 +05:30
Gursheen Kaur Anand
c40719caa5 Merge pull request #39424 from frappe/revert-38556-period-end-date-for-financial-statements
Revert "fix(minor): financial statements period end date"
2024-01-20 17:57:46 +05:30
Gursheen Anand
b2d9380596 fix: party field in pdf html 2024-01-19 17:08:02 +05:30
ruthra kumar
fcf4687c52 test: dimension inheritance on adv allocation 2024-01-19 16:50:54 +05:30
ruthra kumar
cbd443a78a refactor: pass dimensions on advance allocation 2024-01-19 16:44:59 +05:30
ruthra kumar
6148fb024b test: dimension inheritance in PE reconciliation 2024-01-19 15:57:13 +05:30
Gursheen Kaur Anand
9678d050a4 Merge pull request #39426 from GursheenK/insufficient-permissions-for-manager
fix: FY permission for accounts and stock managers
2024-01-19 11:54:20 +05:30
Gursheen Kaur Anand
d468accb02 Merge branch 'frappe:develop' into payment-reco-company-field 2024-01-19 11:52:34 +05:30
ruthra kumar
a50808a077 refactor: delete transactions in background 2024-01-19 11:43:08 +05:30
Gursheen Anand
125847c69f Merge branch 'develop' into revert-38556-period-end-date-for-financial-statements 2024-01-19 11:40:50 +05:30
Gursheen Kaur Anand
4ca63c07f6 Merge branch 'frappe:develop' into insufficient-permissions-for-manager 2024-01-19 11:19:32 +05:30
Rucha Mahabal
35067282cf refactor(UX): Accounts workspace cleanup (#39232)
* refactor(UX): Accounts workspace cleanup

* chore: move asset workspace outside accounting

* fix: remove redundant links from parent workspace

* chore: change icons for payable & receivable workspaces

* chore: remove redundant links from subworkspaces
2024-01-19 11:13:09 +05:30
ruthra kumar
c44eb432a5 refactor: pass dimension values to Gain/Loss journal 2024-01-18 16:42:22 +05:30
Gursheen Kaur Anand
871a1f4565 Merge pull request #39449 from GursheenK/payment-entry-unallocated-amount-after-taxes
fix: unallocated amount after taxes and charges
2024-01-18 16:13:31 +05:30
Gursheen Anand
99b94af49f fix: linting issue 2024-01-18 15:05:19 +05:30
Gursheen Anand
e9bc63aacf fix: set unallocated amount after base tax 2024-01-18 14:33:10 +05:30
ruthra kumar
ba5a7c8cd8 test: dimension inheritance for cr note reconciliation 2024-01-18 13:29:33 +05:30
Gursheen Anand
527cfcd87f fix: ignore user permissions for company field 2024-01-18 11:58:06 +05:30
Ankush Menat
ef7aefeb45 ci: split pre-commit and semgrep jobs (#39445) 2024-01-18 11:29:53 +05:30
rohitwaghchaure
45aea56198 Merge pull request #39436 from rohitwaghchaure/fixed-duplicate-name-error-for-variant-creation
fix: duplicate name error while making variant
2024-01-18 06:50:50 +05:30
Nabin Hait
daf954057f Merge pull request #39429 from nabinhait/composite-asset-using-asset
fix: composite asset capitalization using asset components
2024-01-17 21:04:49 +05:30
Rohit Waghchaure
d7e6b83e64 fix: duplicate name error while making variant 2024-01-17 20:52:16 +05:30
rohitwaghchaure
80dc5a7b1c Merge pull request #39433 from FHenry/dev_better_display_item_BomCreator
refactor: BOM creator item selector with short description
2024-01-17 20:28:50 +05:30
Florian HENRY
0f881bc90a refactor: BOM creator item selector with short description 2024-01-17 13:37:22 +01:00
mergify[bot]
6efa92de70 Merge branch 'develop' into composite-asset-using-asset 2024-01-17 12:20:05 +00:00
Nabin Hait
2adb710751 Merge pull request #39427 from nabinhait/test-fix333
fix: Asset module tests
2024-01-17 17:21:47 +05:30
Nabin Hait
97f69986ff fix: Asset module tests 2024-01-17 16:39:39 +05:30
Nabin Hait
5df40661d2 fix: composite asset capitalization using asset components 2024-01-17 16:17:53 +05:30
Deepesh Garg
889d67bcee Merge pull request #39367 from deepeshgarg007/revert_dynamic_splitting
Revert dynamic splitting
2024-01-17 15:03:13 +05:30
Gursheen Anand
8b91287034 fix: account and stock manager read perm 2024-01-17 13:09:51 +05:30
Deepesh Garg
1148ed1566 Merge pull request #39423 from deepeshgarg007/fix_subscription_period_update
fix: Update subscription period
2024-01-17 12:57:40 +05:30
ruthra kumar
e3c44231ab chore: test dimension filter output 2024-01-17 12:51:44 +05:30
ruthra kumar
188ff8cde7 refactor: apply dimension filters on cr/dr notes 2024-01-17 12:51:41 +05:30
Deepesh Garg
3aa17fa0d6 chore: freezing date check 2024-01-17 12:47:27 +05:30
Deepesh Garg
4f3aeaefc1 chore: Remove unwanted changes 2024-01-17 12:42:22 +05:30
Deepesh Garg
120bfdf33d Merge branch 'develop' of https://github.com/frappe/erpnext into revert_dynamic_splitting 2024-01-17 12:33:07 +05:30
Gursheen Kaur Anand
73625a2622 Revert "fix(minor): financial statements period end date" 2024-01-17 12:25:03 +05:30
Nabin Hait
9f2b62dd1c Merge pull request #39386 from nabinhait/asset-capitalisation-calcellation
fix: Cancel asset capitalisation record on cancellation of asset and vice-versa
2024-01-17 12:14:15 +05:30
Nabin Hait
60f52adc90 Merge pull request #39385 from nabinhait/wdv-as-per-income-tax-act
fix: WDV as per IT Act: calculate yearly amount first and then split it based on months
2024-01-17 12:13:23 +05:30
Deepesh Garg
7eefedfb11 fix: Update subscription period 2024-01-17 10:57:19 +05:30
HENRY Florian
af80d253db fix: consistency in display reserved_stock checkbox on Sales Order Item according global settings and item.is_stock_item (#38322)
* fix: consistency in display reserved_stock checkbox on Sales Order Item according global settings and item.is_stock_item

* fix: evaluate depends_on for fdata visibility in grid

* fix: evaluate depends_on for fdata visibility in grid

* chore: change after review

* chore: change for review
2024-01-17 10:43:36 +05:30
ruthra kumar
ab939cc6e8 refactor: Credit Note and its Exc gain/loss JE inherits dimensions 2024-01-16 16:48:50 +05:30
ruthra kumar
ca9413bc64 Merge pull request #39402 from ruthra-kumar/fix_project_query
fix: project query controller logic
2024-01-16 16:24:02 +05:30
ruthra kumar
bfe42fdccb refactor: better ordering of query result 2024-01-16 15:58:19 +05:30
rohitwaghchaure
ce2dd28a25 Merge pull request #39406 from rohitwaghchaure/fixed-bin-permission-issue
fix: permission issue for the Bin
2024-01-16 15:50:46 +05:30
Deepesh Garg
96dcfba65a Merge branch 'develop' of https://github.com/frappe/erpnext into revert_dynamic_splitting 2024-01-16 15:42:02 +05:30
Rohit Waghchaure
6e4d4a55cd fix: permission issue for the BIN 2024-01-16 15:12:28 +05:30
ruthra kumar
3349dde5e2 fix(test): test case for project query 2024-01-16 14:28:09 +05:30
ruthra kumar
4eefb445a7 fix: project query controller logic 2024-01-16 13:38:53 +05:30
Ankush Menat
ed927f102e perf: use unbuffered_cursor for stock_ageing report (#39399)
perf: use unbuffered_cursor for stock stock_ageing report

Unbuffered cursor lets us load one row at a time in memory from mysql instead of lowing all at once.

This makes it possible to run the report for large number of SLEs.
2024-01-16 11:43:35 +05:30
ruthra kumar
82026f780d Merge pull request #39400 from ruthra-kumar/fix_broken_subscription_test
fix: broken multi currency test case in subscription
2024-01-16 11:39:42 +05:30
ruthra kumar
e5aeab7e7e fix: broken multi currency test case in subscription 2024-01-16 11:16:39 +05:30
Deepesh Garg
32738637ce Merge pull request #39394 from noec764/Fix_UntranslatedColumnsInGlobalLedger
fix: Untranslated columns in Global Ledger Report
2024-01-16 11:03:47 +05:30
Alexandre Lumertz Damiani
80f5026208 fix: translate (#39395) 2024-01-16 10:46:00 +05:30
Alexandre Lumertz Damiani
00619342e1 fix: translate (#39396) 2024-01-16 10:44:59 +05:30
Alexandre Lumertz Damiani
b719585a2f fix: translate (#39397) 2024-01-16 10:44:17 +05:30
Alexandre Lumertz Damiani
4970b5d5bc fix: translate (#39398) 2024-01-16 10:43:33 +05:30
Noé
bdd382bdfd fix: Untranslated columns in Global Ledger 2024-01-15 16:40:45 +01:00
ruthra kumar
92a5cda61a Merge pull request #39391 from ruthra-kumar/multiple_typeerror_fixes
fix: possible typerror in utils.js
2024-01-15 20:45:27 +05:30
ruthra kumar
60b26ad8b2 fix: possible typerror in utils.js
and remove unwanted debugging statements
2024-01-15 20:37:21 +05:30
Nabin Hait
efe9f6656f fix: Cancel asset capitalisation record on cancellation of asset and vice-versa 2024-01-15 17:54:47 +05:30
Nabin Hait
22bd6a54b2 fix: WDV as per IT Act: calculate yearly amount first and then split it based on months 2024-01-15 16:54:19 +05:30
Deepesh Garg
a36b6cb102 Merge pull request #39384 from deepeshgarg007/income_account_filter
feat: Income account filter in item-wise reports
2024-01-15 16:52:39 +05:30
Deepesh Garg
d91813c277 feat: Income account filter in item-wise reports 2024-01-15 16:50:14 +05:30
ruthra kumar
0ec17590ae fix: typo's and parameter changes 2024-01-15 16:17:33 +05:30
ruthra kumar
2154502955 refactor: partial change on outstanding invoice popup 2024-01-15 16:17:33 +05:30
ruthra kumar
a4ddf93492 Merge pull request #39332 from ruthra-kumar/validate_subscription_billing_currency
refactor: prevent foreign currency subscription for a party
2024-01-15 15:05:31 +05:30
ruthra kumar
9c5a79209e refactor: replace sql with query builder for Jourals query 2024-01-15 14:55:15 +05:30
ruthra kumar
5dc22e1811 refactor: pass dimension details to query 2024-01-15 14:55:15 +05:30
ruthra kumar
ad8475cb8b refactor: set query filters for dimensions 2024-01-15 14:55:15 +05:30
ruthra kumar
ff60ec85b8 refactor: pass dimension filters to query 2024-01-15 14:55:15 +05:30
ruthra kumar
c1fe4bcc64 refactor: handle dimension filters 2024-01-15 14:55:15 +05:30
ruthra kumar
20576e0f47 refactor: column break in dimension section 2024-01-15 14:55:15 +05:30
ruthra kumar
20e0acc20a refactor: dimensions filter section in payment reconciliation 2024-01-15 14:55:15 +05:30
ruthra kumar
cfb3d87267 refactor: update dimension doctypes in hooks 2024-01-15 14:55:15 +05:30
ruthra kumar
1cde804c77 refactor: dimensions section in allocation table in reconciliation 2024-01-15 14:55:15 +05:30
ruthra kumar
1387b0ba7f refactor(test): supply default currency for subscription plans 2024-01-15 14:42:57 +05:30
Ankush Menat
2e03af7ac4 perf: use iterator for stock ageing report (#39346) 2024-01-15 14:35:28 +05:30
s-aga-r
749c735627 Merge pull request #39377 from s-aga-r/BUMP-NODE
ci: bump node in release workflow
2024-01-15 11:58:51 +05:30
s-aga-r
aef87cced7 ci: bump node in release workflow 2024-01-15 11:54:26 +05:30
ruthra kumar
6bb2d9195f Merge pull request #39336 from ruthra-kumar/better_validation_on_bank_transaction
refactor: disallow bank transactions on different currencies
2024-01-15 10:01:50 +05:30
ruthra kumar
28ebc4cfee Merge pull request #39371 from ruthra-kumar/fix_customer_ledger_summary_report
fix: incorrect sql error if account name has '%'
2024-01-15 09:38:50 +05:30
rohitwaghchaure
ad5906916d Merge pull request #39372 from rohitwaghchaure/fixed-get-query-for-batch-no-field
fix: batches not coming correctly in the batch selector
2024-01-14 23:48:48 +05:30
Rohit Waghchaure
114f2b4326 fix: batches not coming correctly in the batch selector 2024-01-14 23:27:29 +05:30
ruthra kumar
a27a4db3de refactor(test): supply default currency to Bank Transaction 2024-01-14 18:09:19 +05:30
ruthra kumar
b4354cbc8d refactor: better error message 2024-01-14 18:04:15 +05:30
Deepesh Garg
02fde73545 fix: Against account variable 2024-01-14 18:01:44 +05:30
ruthra kumar
19975dcb7b refactor: making currency mandatory for subcscription plans 2024-01-14 17:59:43 +05:30
ruthra kumar
641c3de0ca fix: incorrect sql error if account name has '%' 2024-01-14 17:37:34 +05:30
rohitwaghchaure
cf6b52e543 Merge pull request #39224 from mahsem/patch-1
Update purchase_taxes_and_charges.json label Rate to Tax Rate
2024-01-14 11:26:35 +05:30
Deepesh Garg
9500254861 Revert "chore: orderby in gle"
This reverts commit 005c5a587f.
2024-01-14 11:25:58 +05:30
Deepesh Garg
13e5578bc6 Revert "fix: check for unmerged gle in purchase receipt test"
This reverts commit 47c78a5a73.
2024-01-14 11:25:50 +05:30
Deepesh Garg
24137ff54f Revert "fix: subcontracting receipt gle test"
This reverts commit 24ccb3eb78.
2024-01-14 11:25:39 +05:30
Deepesh Garg
9a13842751 Revert "fix: check for split entries in stock entry test"
This reverts commit a56b79cc72.
2024-01-14 11:25:30 +05:30
Deepesh Garg
13b4ddec63 Revert "fix: query for against types"
This reverts commit 262cafc430.
2024-01-14 11:25:09 +05:30
Gursheen Anand
39c8507dc2 fix: query for against types 2024-01-14 11:24:51 +05:30
Deepesh Garg
0b1cc7fad1 Revert "fix: fetch against link value in gl report"
This reverts commit 9aeb3932d0.
2024-01-14 11:24:00 +05:30
Deepesh Garg
8bc1efcf8b Revert "refactor: set against account link for jv"
This reverts commit 450c2470e9.
2024-01-14 11:23:34 +05:30
Deepesh Garg
1a67d7d95f Revert "refactor: use both fields to store against values"
This reverts commit 09439334ca.
2024-01-14 11:22:50 +05:30
Deepesh Garg
4dad4b50fb Revert "refactor: keep old against fields intact"
This reverts commit f9c88ea7bc.
2024-01-14 11:21:19 +05:30
Deepesh Garg
0f9734ae37 Revert "fix: split expected jv entries for scrap asset"
This reverts commit 291a499124.
2024-01-14 11:19:46 +05:30
Deepesh Garg
a43ee34bd5 Revert "fix: purchase receipt test"
This reverts commit 5ce395a60a.
2024-01-14 11:16:29 +05:30
Deepesh Garg
e6f599b32d Revert "fix: single dr cr entries"
This reverts commit e845b63228.
2024-01-14 11:16:17 +05:30
Deepesh Garg
8cf6ff69c0 Revert "fix: remove join for against in purchase receipt"
This reverts commit 758ec720de.
2024-01-14 11:14:14 +05:30
Deepesh Garg
2249b7c793 Revert "fix: auto separate against accounts"
This reverts commit ff0343d2cc.
2024-01-14 11:13:34 +05:30
Deepesh Garg
591de1338b Revert "fix: combine jv entries for rate revaluation"
This reverts commit 3d00d74fed.
2024-01-14 11:12:36 +05:30
Deepesh Garg
2c95cd206b Revert "fix: remove multiple against account values from gle"
This reverts commit 35d92abe73.
2024-01-14 11:12:15 +05:30
Deepesh Garg
8ee6dbc1e2 Revert "fix: make JV account against field a dynamic link"
This reverts commit aab5737ff3.
2024-01-14 11:10:22 +05:30
Deepesh Garg
beb169cf75 Revert "fix: asset capitalization tests"
This reverts commit 952e8cf60c.
2024-01-14 11:09:28 +05:30
Deepesh Garg
b40d3b0a05 Revert "fix: purchase receipt tests"
This reverts commit fcfdb9b566.
2024-01-14 11:09:18 +05:30
Deepesh Garg
93ff84bf56 Revert "fix: remove multiple accounts from against in capitalization"
This reverts commit f705bf2efe.
2024-01-14 11:06:01 +05:30
Deepesh Garg
498c9c7955 Revert "fix: set against type in asset"
This reverts commit 6e1565c32c.
2024-01-14 11:04:51 +05:30
Deepesh Garg
073f2fa302 Revert "fix: set against type in stock controller"
This reverts commit 4ea43ebc5d.
2024-01-14 11:04:40 +05:30
Deepesh Garg
9339a8b57f Revert "fix: set against type in utils"
This reverts commit f292a0cc4c.
2024-01-14 11:04:13 +05:30
Deepesh Garg
fbeaf2b398 Revert "fix: set against type in controllers"
This reverts commit 4c5a83d6cf.
2024-01-14 11:04:00 +05:30
Deepesh Garg
7c0e180fd9 Revert "fix: set against type in deferred revenue"
This reverts commit 82774f89b1.
2024-01-14 11:01:40 +05:30
Deepesh Garg
1710e10b31 Revert "fix: set against type in inv gl dict"
This reverts commit 19b220f39c.
2024-01-14 11:01:27 +05:30
Deepesh Garg
8ae7ca7f14 Revert "fix: use dynamic link for against field"
This reverts commit 725a7f90e9.
2024-01-14 10:56:17 +05:30
Deepesh Garg
5fc29ac913 Merge pull request #39366 from frappe/revert-38914-multi_currency_ledger_jv_pe
Revert "fix: GL values in transaction currency via JV"
2024-01-14 10:52:30 +05:30
Deepesh Garg
41d9225bd1 Revert "fix: GL values in transaction currency via JV" 2024-01-14 10:51:30 +05:30
Deepesh Garg
53f6cfb216 Merge pull request #39363 from frappe/revert-39248-set-against-accounts-for-backend-JVs
Revert "fix: JV GLEs for auto-set against accounts"
2024-01-14 10:51:06 +05:30
rohitwaghchaure
6827edb2c5 fix: modified date 2024-01-14 10:45:43 +05:30
rohitwaghchaure
0b525f9d87 Merge pull request #39359 from rohitwaghchaure/fixed-added-field-item-group-in-stock-reco
fix: added item group in stock reco
2024-01-14 10:27:40 +05:30
Deepesh Garg
c7509d8ebf Revert "fix: JV GLEs for auto-set against accounts" 2024-01-14 10:23:19 +05:30
rohitwaghchaure
566876ae7a fix: modified date was not set 2024-01-14 10:15:50 +05:30
rohitwaghchaure
2820a0ac0a Merge pull request #39225 from mahsem/patch-2
Update sales_taxes_and_charges.json
2024-01-14 10:15:22 +05:30
Rohit Waghchaure
116ff8241c fix: added item group in stock reco 2024-01-14 10:05:26 +05:30
rohitwaghchaure
89623aba57 Merge pull request #39201 from rmehta/remove-homepage
fix!(portal): remove Homepage
2024-01-14 09:56:25 +05:30
rohitwaghchaure
f567af49a6 fix: modified date was not updated 2024-01-14 09:48:05 +05:30
Raffael Meyer
1aecb578e6 chore: update po files (#39340) 2024-01-14 09:46:13 +05:30
Deepesh Garg
a87bb21246 Merge pull request #39084 from deepeshgarg007/pricing_rule_remove
fix: Pricing rule application/removal on qty change
2024-01-13 12:47:19 +05:30
Deepesh Garg
ec5c0deb0e Merge pull request #39166 from barredterra/remove-je-list-indicators
refactor(Journal Entry): remove unused/redundant list indicators
2024-01-13 12:21:39 +05:30
Deepesh Garg
3b14c59133 Merge pull request #39048 from barredterra/fix-pl-balance-sheet
fix: calculation of P/L in balance sheet
2024-01-13 11:09:24 +05:30
Deepesh Garg
98e2b6575d Merge pull request #39235 from GursheenK/validation-for-payment-requests
fix(minor): validate doctype before creating payment request
2024-01-13 09:45:56 +05:30
Deepesh Garg
9947bae60e Merge pull request #38984 from Gubbu77/patch-1
fix(Report): Increased the column width in the Account Balance Report
2024-01-13 09:26:42 +05:30
rohitwaghchaure
402a1b91f9 Merge pull request #39335 from s-aga-r/FIX-8359
fix: SBB Total Qty validation for SE
2024-01-12 20:59:46 +05:30
rohitwaghchaure
3b07700ef6 Merge pull request #39333 from rohitwaghchaure/fixed-added-indexing-to-improve-performance
fix: added indexing to improve performance
2024-01-12 18:39:04 +05:30
rohitwaghchaure
d3aff000d9 Merge pull request #38970 from GursheenK/item-variant-local-attributes
fix: use local attribute range in multiple item variant dialog
2024-01-12 18:37:35 +05:30
Gursheen Anand
c648090b5d fix: query for filter by party 2024-01-12 18:33:06 +05:30
s-aga-r
d0687788b5 Merge pull request #39337 from s-aga-r/FIX-1882992786
chore: remove share, print and email permissions from Buying Settings
2024-01-12 16:47:36 +05:30
s-aga-r
3c46abca6c chore: remove share, print and email permissions from Buying Settings 2024-01-12 16:45:39 +05:30
ruthra kumar
cdd0acc672 refactor: disallow bank transactions on different currencies 2024-01-12 16:36:17 +05:30
s-aga-r
c20241fcb5 fix: SBB Total Qty validation for SE 2024-01-12 15:26:35 +05:30
Rohit Waghchaure
ac81323fec fix: added indexing to improve performance 2024-01-12 14:11:37 +05:30
ruthra kumar
6b5fa2c673 refactor: prevent foreign currency subscription for a party 2024-01-12 13:19:03 +05:30
Deepesh Garg
e4755778ae Merge pull request #39248 from GursheenK/set-against-accounts-for-backend-JVs
fix: JV GLEs for auto-set against accounts
2024-01-11 22:45:17 +05:30
Florian HENRY
6c8f52b26f fix: Payment Terms Status for Sales Order report should show all payment terms from order not only this comming from template 2024-01-11 16:00:48 +01:00
Raffael Meyer
0c47396785 Merge pull request #39293 from blaggacao/feat/add-account-preview 2024-01-11 15:12:52 +01:00
Ankush Menat
935622bde8 Update Crowdin configuration file 2024-01-11 19:08:14 +05:30
Raffael Meyer
ea33f902e7 Merge pull request #38974 from barredterra/unreconcile-bank-transaction-on-cancel 2024-01-11 14:36:24 +01:00
Ankush Menat
ea1624fba5 chore: regen po files 2024-01-11 19:03:02 +05:30
Raffael Meyer
f31c6f52e8 Merge pull request #39117 from barredterra/fix-holiday-list 2024-01-11 14:26:38 +01:00
Nabin Hait
3036a6afdc Merge pull request #39305 from GursheenK/naming_series_FY
fix: naming series variable parsing for FY
2024-01-11 18:55:14 +05:30
barredterra
e67ed4fb2d Merge branch 'develop' into quotation-to-customer 2024-01-11 14:04:09 +01:00
barredterra
f32a870a58 Merge branch 'develop' into fix-pl-balance-sheet 2024-01-11 14:03:39 +01:00
barredterra
e69f9ddf8b Merge branch 'develop' into remove-je-list-indicators 2024-01-11 14:03:13 +01:00
barredterra
2bcd032a44 Merge branch 'develop' into fix-holiday-list 2024-01-11 13:55:27 +01:00
barredterra
33bffe8201 Merge branch 'develop' into copy-emails-to-customer 2024-01-11 13:54:59 +01:00
barredterra
8039dc5194 Merge branch 'develop' into unreconcile-bank-transaction-on-cancel 2024-01-11 13:54:07 +01:00
ruthra kumar
2a195d457e Merge pull request #39320 from ruthra-kumar/possible_typeerror_in_consolidated_report
fix: possible typeerror in consolidated report
2024-01-11 16:54:30 +05:30
ruthra kumar
951e8e3a73 Merge pull request #39317 from ruthra-kumar/fix_broken_dimension_filters_in_sales_purchase_register_report
fix: broken dimension filters in Sales/Purchase register
2024-01-11 16:50:12 +05:30
ruthra kumar
268731aec4 fix: possible typeerror in consolidated report 2024-01-11 16:45:49 +05:30
ruthra kumar
7b3f9386d7 fix: broken dimension filters in Sales/Purchase register 2024-01-11 16:24:43 +05:30
Ankush Menat
d9e2427aa8 chore: migrate translations to gettext (#39313) 2024-01-11 15:46:55 +05:30
rohitwaghchaure
eb0bc5c6ad Merge pull request #39215 from rohitwaghchaure/fixed-incorrect-per-received-in-pi
fix: incorrect percentage received in purchase invoice
2024-01-11 14:50:19 +05:30
rohitwaghchaure
fde6fadf4d Merge pull request #39299 from rohitwaghchaure/fixed-cicular-dependecy-error
fix: circular dependency error on deletion of QC and Stock Entry
2024-01-11 14:49:12 +05:30
Ankush Menat
432a14c84c refactor: remove usage of raise_exception (#39309) 2024-01-11 14:02:28 +05:30
Gursheen Anand
813b7a96fb fix: reset default after test 2024-01-11 12:22:08 +05:30
Gursheen Anand
bbdf98a8f0 test: naming series variable parsing 2024-01-10 22:06:06 +05:30
Gursheen Anand
d96a777edd fix: date in master document for dictionary condition 2024-01-10 22:05:02 +05:30
rohitwaghchaure
c67b0a3a64 fix: performance issue related to stock entry (#39301) 2024-01-10 22:01:40 +05:30
Rohit Waghchaure
7cc324e31e fix: circular dependency error while deleting QC 2024-01-10 20:26:51 +05:30
Deepesh Garg
f057dc6867 Merge pull request #39256 from deepeshgarg007/opening_ignore_tempplate
fix: Ignore default payment terms template for opening invoices
2024-01-10 16:06:03 +05:30
David Arnold
e53931e27a feat(accounts): add preview for accounts 2024-01-10 11:07:39 +01:00
Raffael Meyer
6f9fe6a792 fix: wrong usage of get_single_value (#39268)
* fix: wrong usage of get_single_value

* test: fix wrong fieldname

* chore: typo

---------

Co-authored-by: Ankush Menat <ankush@frappe.io>
2024-01-10 12:32:27 +05:30
Ankush Menat
38c5ecf007 fix: set parent doctype on chart (#39286) 2024-01-10 12:26:03 +05:30
Nabin Hait
c1922ea5de Merge pull request #39052 from anandbaburajan/asset_wdv_india_dev
fix: asset WDV depreciation calc according to IT act [dev]
2024-01-10 12:17:09 +05:30
ruthra kumar
54bcbd0bc6 Merge pull request #39282 from ruthra-kumar/type_error_on_transaction_js
fix: possible typeerror on transaction.js
2024-01-10 11:53:22 +05:30
ruthra kumar
9f27ac142b fix: possible typeerror on transaction.js 2024-01-10 11:34:28 +05:30
Nabin Hait
2ef0596df2 Merge pull request #39275 from nabinhait/fetch-timesheet-in-invoice
fix: Show timesheet table after fetching data from timesheet
2024-01-10 11:33:51 +05:30
Nabin Hait
3ff562cb8a Merge pull request #39191 from nabinhait/asset-lcv-validation-fix
fix: Ignore asset qty and status validation while cancelling LCV
2024-01-10 11:33:17 +05:30
Nabin Hait
8fdf0ca2d3 Merge pull request #39207 from nabinhait/get-fixed-asset-acc
fix: Get fixed_asset_account from asset category
2024-01-10 11:32:06 +05:30
Nabin Hait
01f507ebcb Merge pull request #39238 from nabinhait/asset-purchase-amount
fix: Set asset purchase amount based on qty and valuation_rate
2024-01-10 11:31:30 +05:30
Nabin Hait
e1ba5878a3 fix: Show timesheet table after fetching data from timesheet 2024-01-10 11:26:33 +05:30
hyaray
6dceb25fb2 chore: typo 2024-01-10 10:53:14 +05:30
barredterra
5b4c5d59d8 Merge branch 'develop' into unreconcile-bank-transaction-on-cancel 2024-01-09 18:12:30 +01:00
barredterra
28626cd7c0 Merge branch 'develop' into copy-emails-to-customer 2024-01-09 17:50:42 +01:00
barredterra
58343e5b7c Merge branch 'develop' into fix-holiday-list 2024-01-09 17:46:28 +01:00
Gursheen Anand
8e1f6c8149 test: split and auto set against in JV 2024-01-09 21:47:59 +05:30
Deepesh Garg
53bf44d2b8 fix: Ignore default payment terms template for opening invoices 2024-01-09 15:57:38 +05:30
Gursheen Anand
ce7d05aa1f fix: gl_map for auto-set against accounts 2024-01-09 15:08:30 +05:30
Nabin Hait
135e19d0aa fix: Set asset purchase amount based on qty and valuation_rate 2024-01-09 12:51:57 +05:30
Gursheen Anand
bb421c8b07 fix: validate doctype before creating payment request 2024-01-09 11:33:52 +05:30
David Arnold
b5be17c6df fix: use most reliable section reference per report line 2024-01-08 22:12:19 +01:00
mahsem
2b93be1139 Update sales_taxes_and_charges.json
Change Rate label to existing Tax Rate label so it can be correctly translated in other languages
2024-01-08 18:47:44 +01:00
mahsem
bd464197c4 Update purchase_taxes_and_charges.json label Rate to Tax Rate
Change Rate label to existing Tax Rate label so it can be correctly translated in other languages
2024-01-08 18:45:39 +01:00
Rohit Waghchaure
8d2c78867e fix: incorrect percentage received in purchase invoice 2024-01-08 18:17:01 +05:30
Nabin Hait
8548eae368 fix: Get fixed_asset_account from asset category 2024-01-08 16:11:04 +05:30
Rushabh Mehta
d319caa2ee fix(minor): remove Homepage patch 2024-01-08 15:51:09 +05:30
Rushabh Mehta
f01f6d50b5 fix!(portal): remove Homepage 2024-01-08 15:49:49 +05:30
Nabin Hait
e9d36242ce fix: Ignore asset qty and status validation while cancelling LCV 2024-01-08 12:45:42 +05:30
David Arnold
b73507abe0 Merge remote-tracking branch 'origin/develop' into feat/so-po-advance-payment-status 2024-01-05 21:36:14 +01:00
barredterra
5d33bbaff0 refactor(Journal Entry): remove unused/redundant list indicators 2024-01-05 17:26:54 +01:00
barredterra
60329ade9e test: improve test for local holidays 2024-01-04 11:04:25 +01:00
barredterra
300aaa39fe fix: consider all years in holiday list 2024-01-03 13:39:28 +01:00
Deepesh Garg
b21da472f6 feat: In words in payment entry 2024-01-03 13:34:22 +05:30
barredterra
73ecf51a27 test: balance sheet 2024-01-02 20:39:32 +01:00
barredterra
0d3a77dce9 fix: calculation of P/L in balance sheet 2024-01-02 17:26:29 +01:00
Deepesh Garg
f52d7c7665 fix: Pricing rule application/removal on qty change 2024-01-02 13:37:39 +05:30
anandbaburajan
026824880d fix: asset WDV depreciation calc according to IT act 2024-01-01 00:23:19 +05:30
Devin Slauenwhite
c86deceaba fix(ux): default parent delivery_date or schedule_date 2023-12-28 15:19:21 +00:00
Indrajith.vs
37767738b0 fix(Report): Increased the column width in the Account Balance Report 2023-12-28 12:12:52 +05:30
barredterra
517bedeb7e test: cancel voucher linked to Bank Transaction 2023-12-28 00:00:04 +01:00
barredterra
0a95b38166 fix: unreconcile Bank Transaction on cancel of payment voucher 2023-12-27 23:05:37 +01:00
Gursheen Anand
43fed29514 fix: use child table values instead of global min max 2023-12-27 19:32:48 +05:30
David Arnold
f73685f4f6 Merge remote-tracking branch 'origin/develop' into feat/so-po-advance-payment-status 2023-12-20 12:47:48 +01:00
David Arnold
c61925598a fix: translatable strings
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2023-12-15 18:24:34 +01:00
Dany Robert
a8949174c8 chore: avoid explicit escaping for precision
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2023-12-09 09:30:17 +05:30
barredterra
906ac093e3 feat: copy emails from lead to customer 2023-12-08 14:56:10 +01:00
barredterra
8e0a7a8dbc refactor: get/create customer for Sales Order 2023-12-08 14:06:01 +01:00
David Arnold
e824cd012b Merge remote-tracking branch 'upstream/develop' into feat/so-po-advance-payment-status 2023-12-04 13:35:32 +01:00
David Arnold
083da7d8a4 Merge remote-tracking branch 'upstream/develop' into fix/notification-comply-with-upstream 2023-12-04 13:31:02 +01:00
Dany Robert
383a4b132e chore: change f-string to sql params 2023-11-21 12:46:56 +00:00
Dany Robert
bfaa93b0ca fix: honour currency precision while fetching balance 2023-11-20 09:43:02 +00:00
David Arnold
1662a4c9c3 fix(notification): align with https://github.com/frappe/frappe/pull/22595 2023-11-17 15:02:30 +01:00
David Arnold
c2f0fadb6e Merge remote-tracking branch 'upstream/develop' into feat/so-po-advance-payment-status 2023-11-13 10:06:14 +01:00
David Arnold
c78fdaae90 Merge remote-tracking branch 'upstream/develop' into feat/so-po-advance-payment-status 2023-10-30 17:25:08 +01:00
David Arnold
8b21ca2db9 fixup! feat(payment): add advance payment status to advance payment doctypes to better track advance payments 2023-10-17 00:12:19 +02:00
Gursheen Anand
fed8cf4196 fix: test for reposting pi 2023-10-12 17:40:57 +05:30
Gursheen Anand
528ed9c986 fix: check child rows before update 2023-10-12 16:54:41 +05:30
Gursheen Anand
e2cccc4005 chore: correct typo 2023-10-12 15:57:38 +05:30
Gursheen Anand
569d0961f2 test: reposting entries for JV 2023-10-12 15:06:04 +05:30
Gursheen Anand
de46fa8e66 refactor: use qb for JV tests 2023-10-12 15:04:56 +05:30
Gursheen Anand
bfa0c0981c feat: repost ledger button in JV 2023-10-12 13:31:15 +05:30
Gursheen Anand
c77c296b8b feat: validate before allowing repost 2023-10-12 13:10:59 +05:30
Gursheen Anand
9ab55a5bd8 refactor: better abstraction for controller code 2023-10-12 12:48:14 +05:30
Gursheen Anand
e4d657e6fd feat: update after submit in JV 2023-10-12 12:46:50 +05:30
Gursheen Anand
f4c8d63fe0 feat: allow on submit for selected fields 2023-10-12 12:20:01 +05:30
Gursheen Anand
d94f45531a refactor: remove controller logic for setting balances 2023-10-12 12:13:21 +05:30
Gursheen Anand
4d38bd8517 refactor: exclude balances while setting currency 2023-10-12 12:09:58 +05:30
Gursheen Anand
c99e7ca999 refactor: exclude balance while setting acc details 2023-10-12 12:07:36 +05:30
Gursheen Anand
aba3065573 refactor: remove balance formatter 2023-10-12 12:04:44 +05:30
Gursheen Anand
e95dce6d8d refactor: remove balance fields from jv account 2023-10-12 11:54:12 +05:30
David Arnold
e97af14ff4 fixup! feat(payment): add advance payment status to advance payment doctypes to better track advance payments 2023-10-10 23:50:57 +02:00
David Arnold
c809e61103 feat(payment): add advance payment status to advance payment doctypes to better track advance payments 2023-10-10 22:33:06 +02:00
1901 changed files with 1785028 additions and 618826 deletions

View File

@@ -9,6 +9,13 @@ trim_trailing_whitespace = true
charset = utf-8
# python, js indentation settings
[{*.py,*.js}]
[{*.py,*.js,*.vue,*.css,*.scss,*.html}]
indent_style = tab
indent_size = 4
max_line_length = 110
# JSON files - mostly doctype schema files
[{*.json}]
insert_final_newline = false
indent_style = space
indent_size = 2

View File

@@ -124,6 +124,7 @@
"beforeEach": true,
"onScan": true,
"extend_cscript": true,
"localforage": true
"localforage": true,
"Plaid": true
}
}

View File

@@ -32,3 +32,9 @@ baec607ff5905b1c67531096a9cf50ec7ff00a5d
# bulk refactor with sourcery
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!")

40
.github/helper/update_pot_file.sh vendored Normal file
View File

@@ -0,0 +1,40 @@
#!/bin/bash
set -e
cd ~ || exit
echo "Setting Up Bench..."
pip install frappe-bench
bench -v init frappe-bench --skip-assets --skip-redis-config-generation --python "$(which python)"
cd ./frappe-bench || exit
echo "Get ERPNext..."
bench get-app --skip-assets erpnext "${GITHUB_WORKSPACE}"
echo "Generating POT file..."
bench generate-pot-file --app erpnext
cd ./apps/erpnext || exit
echo "Configuring git user..."
git config user.email "developers@erpnext.com"
git config user.name "frappe-pr-bot"
echo "Setting the correct git remote..."
# Here, the git remote is a local file path by default. Let's change it to the upstream repo.
git remote set-url upstream https://github.com/frappe/erpnext.git
echo "Creating a new branch..."
isodate=$(date -u +"%Y-%m-%d")
branch_name="pot_${BASE_BRANCH}_${isodate}"
git checkout -b "${branch_name}"
echo "Commiting changes..."
git add .
git commit -m "chore: update POT file"
gh auth setup-git
git push -u upstream "${branch_name}"
echo "Creating a PR..."
gh pr create --fill --base "${BASE_BRANCH}" --head "${branch_name}" -R frappe/erpnext

38
.github/workflows/generate-pot-file.yml vendored Normal file
View File

@@ -0,0 +1,38 @@
# This workflow is agnostic to branches. Only maintain on develop branch.
# To add/remove branches just modify the matrix.
name: Regenerate POT file (translatable strings)
on:
schedule:
# 9:30 UTC => 3 PM IST Sunday
- cron: "30 9 * * 0"
workflow_dispatch:
jobs:
regeneratee-pot-file:
name: Release
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
branch: ["develop"]
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ matrix.branch }}
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Run script to update POT file
run: |
bash ${GITHUB_WORKSPACE}/.github/helper/update_pot_file.sh
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
BASE_BRANCH: ${{ matrix.branch }}

View File

@@ -20,6 +20,18 @@ jobs:
- name: Install and Run Pre-commit
uses: pre-commit/action@v3.0.0
semgrep:
name: semgrep
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
cache: pip
- name: Download Semgrep rules
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules

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 }}

22
.github/workflows/patch_faux.yml vendored Normal file
View File

@@ -0,0 +1,22 @@
# Tests are skipped for these files but github doesn't allow "passing" hence this is required.
name: Skipped Patch Test
on:
pull_request:
paths:
- "**.js"
- "**.css"
- "**.md"
- "**.html"
- "**.csv"
jobs:
test:
runs-on: ubuntu-latest
name: Patch Test
steps:
- name: Pass skipped tests unconditionally
run: "echo Skipped"

View File

@@ -16,7 +16,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: 18
node-version: 20
- name: Setup dependencies
run: |
npm install @semantic-release/git @semantic-release/exec --no-save

View File

@@ -0,0 +1,24 @@
# Tests are skipped for these files but github doesn't allow "passing" hence this is required.
name: Skipped Tests
on:
pull_request:
paths:
- "**.js"
- "**.css"
- "**.md"
- "**.html"
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
container: [1, 2, 3, 4]
name: Python Unit Tests
steps:
- name: Pass skipped tests unconditionally
run: "echo Skipped"

View File

@@ -31,6 +31,9 @@ jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 60
env:
NODE_ENV: "production"
WITH_COVERAGE: ${{ github.event_name != 'pull_request' }}
strategy:
fail-fast: false
@@ -51,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: |
@@ -67,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
@@ -76,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') }}
@@ -85,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:
@@ -100,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 }}
@@ -117,11 +120,11 @@ jobs:
FRAPPE_BRANCH: ${{ github.event.inputs.branch }}
- name: Run Tests
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --with-coverage --total-builds 4 --build-number ${{ matrix.container }}'
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --total-builds 4 --build-number ${{ matrix.container }}'
env:
TYPE: server
CI_BUILD_ID: ${{ github.run_id }}
ORCHESTRATOR_URL: http://test-orchestrator.frappe.io
CAPTURE_COVERAGE: ${{ github.event_name != 'pull_request' }}
- name: Show bench output
if: ${{ always() }}
@@ -129,6 +132,7 @@ jobs:
- name: Upload coverage data
uses: actions/upload-artifact@v3
if: github.event_name != 'pull_request'
with:
name: coverage-${{ matrix.container }}
path: /home/runner/frappe-bench/sites/coverage.xml
@@ -137,16 +141,18 @@ jobs:
name: Coverage Wrap Up
needs: test
runs-on: ubuntu-latest
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 }}
fail_ci_if_error: true
verbose: true

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 }}

1
.gitignore vendored
View File

@@ -2,7 +2,6 @@
*.py~
.DS_Store
conf.py
locale
latest_updates.json
.wnf-lang-status
*.egg-info

View File

@@ -20,6 +20,23 @@ repos:
- id: check-yaml
- id: debug-statements
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.7.1
hooks:
- id: prettier
types_or: [javascript, vue, scss]
# Ignore any files that might contain jinja / bundles
exclude: |
(?x)^(
erpnext/public/dist/.*|
cypress/.*|
.*node_modules.*|
.*boilerplate.*|
erpnext/public/js/controllers/.*|
erpnext/templates/pages/order.js|
erpnext/templates/includes/.*
)$
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v8.44.0
hooks:
@@ -38,28 +55,15 @@ 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 linter and apply fixes"
args: ["--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-format
name: "Format Python code"
ci:

View File

@@ -7,8 +7,7 @@
<p>ERP made simple</p>
</p>
[![CI](https://github.com/frappe/erpnext/actions/workflows/server-tests.yml/badge.svg?branch=develop)](https://github.com/frappe/erpnext/actions/workflows/server-tests.yml)
[![UI](https://github.com/erpnext/erpnext_ui_tests/actions/workflows/ui-tests.yml/badge.svg?branch=develop&event=schedule)](https://github.com/erpnext/erpnext_ui_tests/actions/workflows/ui-tests.yml)
[![CI](https://github.com/frappe/erpnext/actions/workflows/server-tests-mariadb.yml/badge.svg?event=schedule)](https://github.com/frappe/erpnext/actions/workflows/server-tests-mariadb.yml)
[![Open Source Helpers](https://www.codetriage.com/frappe/erpnext/badges/users.svg)](https://www.codetriage.com/frappe/erpnext)
[![codecov](https://codecov.io/gh/frappe/erpnext/branch/develop/graph/badge.svg?token=0TwvyUg3I5)](https://codecov.io/gh/frappe/erpnext)
[![docker pulls](https://img.shields.io/docker/pulls/frappe/erpnext-worker.svg)](https://hub.docker.com/r/frappe/erpnext-worker)

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,25 +1,13 @@
module.exports = {
parserPreset: 'conventional-changelog-conventionalcommits',
parserPreset: "conventional-changelog-conventionalcommits",
rules: {
'subject-empty': [2, 'never'],
'type-case': [2, 'always', 'lower-case'],
'type-empty': [2, 'never'],
'type-enum': [
"subject-empty": [2, "never"],
"type-case": [2, "always", "lower-case"],
"type-empty": [2, "never"],
"type-enum": [
2,
'always',
[
'build',
'chore',
'ci',
'docs',
'feat',
'fix',
'perf',
'refactor',
'revert',
'style',
'test',
],
"always",
["build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test"],
],
},
};

8
crowdin.yml Normal file
View File

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

View File

@@ -13,7 +13,7 @@ def get_default_company(user=None):
if not user:
user = frappe.session.user
companies = get_user_default_as_list(user, "company")
companies = get_user_default_as_list("company", user)
if companies:
default_company = companies[0]
else:
@@ -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

@@ -1,4 +1,4 @@
frappe.provide('frappe.dashboards.chart_sources');
frappe.provide("frappe.dashboards.chart_sources");
frappe.dashboards.chart_sources["Account Balance Timeline"] = {
method: "erpnext.accounts.dashboard_chart_source.account_balance_timeline.account_balance_timeline.get",
@@ -9,14 +9,14 @@ frappe.dashboards.chart_sources["Account Balance Timeline"] = {
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
reqd: 1
reqd: 1,
},
{
fieldname: "account",
label: __("Account"),
fieldtype: "Link",
options: "Account",
reqd: 1
reqd: 1,
},
]
],
};

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")
@@ -358,11 +334,9 @@ def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
account_currency = get_account_currency(item.expense_account or item.income_account)
if doc.doctype == "Sales Invoice":
against_type = "Customer"
against, project = doc.customer, doc.project
credit_account, debit_account = item.income_account, item.deferred_revenue_account
else:
against_type = "Supplier"
against, project = doc.supplier, item.project
credit_account, debit_account = item.deferred_expense_account, item.expense_account
@@ -386,46 +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_type,
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:
@@ -443,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"
)
@@ -465,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
@@ -497,7 +466,6 @@ def make_gl_entries(
doc,
credit_account,
debit_account,
against_type,
against,
amount,
base_amount,
@@ -519,9 +487,7 @@ def make_gl_entries(
doc.get_gl_dict(
{
"account": credit_account,
"against_type": against_type,
"against": against,
"against_link": against,
"credit": base_amount,
"credit_in_account_currency": amount,
"cost_center": cost_center,
@@ -540,9 +506,7 @@ def make_gl_entries(
doc.get_gl_dict(
{
"account": debit_account,
"against_type": against_type,
"against": against,
"against_link": against,
"debit": base_amount,
"debit_in_account_currency": amount,
"cost_center": cost_center,
@@ -595,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 = {
@@ -653,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

@@ -26,19 +26,14 @@ frappe.ui.form.on("Account", {
frm.toggle_enable(["is_group", "company"], false);
if (cint(frm.doc.is_group) == 0) {
frm.toggle_display(
"freeze_account",
frm.doc.__onload && frm.doc.__onload.can_freeze_account
);
frm.toggle_display("freeze_account", frm.doc.__onload && frm.doc.__onload.can_freeze_account);
}
// read-only for root accounts
if (!frm.is_new()) {
if (!frm.doc.parent_account) {
frm.set_read_only();
frm.set_intro(
__("This is a root account and cannot be edited.")
);
frm.set_intro(__("This is a root account and cannot be edited."));
} else {
// credit days and type if customer or supplier
frm.set_intro(null);
@@ -80,27 +75,33 @@ frappe.ui.form.on("Account", {
);
if (frm.doc.is_group == 1) {
frm.add_custom_button(__('Convert to Non-Group'), function () {
return frappe.call({
doc: frm.doc,
method: 'convert_group_to_ledger',
callback: function() {
frm.refresh();
}
});
}, __('Actions'));
} else if (cint(frm.doc.is_group) == 0
&& frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
frm.add_custom_button(__('General Ledger'), function () {
frappe.route_options = {
"account": frm.doc.name,
"from_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
"to_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
"company": frm.doc.company
};
frappe.set_route("query-report", "General Ledger");
}, __('View'));
frm.add_custom_button(
__("Convert to Non-Group"),
function () {
return frappe.call({
doc: frm.doc,
method: "convert_group_to_ledger",
callback: function () {
frm.refresh();
},
});
},
__("Actions")
);
} else if (cint(frm.doc.is_group) == 0 && frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
frm.add_custom_button(
__("General Ledger"),
function () {
frappe.route_options = {
account: frm.doc.name,
from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
company: frm.doc.company,
};
frappe.set_route("query-report", "General Ledger");
},
__("View")
);
frm.add_custom_button(
__("Convert to Group"),
@@ -193,14 +194,8 @@ frappe.ui.form.on("Account", {
if (r.message) {
frappe.set_route("Form", "Account", r.message);
} else {
frm.set_value(
"account_number",
data.account_number
);
frm.set_value(
"account_name",
data.account_name
);
frm.set_value("account_number", data.account_number);
frm.set_value("account_name", data.account_name);
}
d.hide();
}

View File

@@ -65,6 +65,8 @@
"label": "Is Group"
},
{
"fetch_from": "parent_account.company",
"fetch_if_empty": 1,
"fieldname": "company",
"fieldtype": "Link",
"in_standard_filter": 1,
@@ -108,6 +110,7 @@
"fieldname": "parent_account",
"fieldtype": "Link",
"ignore_user_permissions": 1,
"in_preview": 1,
"label": "Parent Account",
"oldfieldname": "parent_account",
"oldfieldtype": "Link",
@@ -192,7 +195,7 @@
"idx": 1,
"is_tree": 1,
"links": [],
"modified": "2023-07-20 18:18:44.405723",
"modified": "2024-03-27 13:05:55.866034",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account",
@@ -249,7 +252,8 @@
],
"search_fields": "account_number",
"show_name_in_global_search": 1,
"sort_field": "modified",
"show_preview_popup": 1,
"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)
@@ -118,6 +116,7 @@ class Account(NestedSet):
self.validate_balance_must_be_debit_or_credit()
self.validate_account_currency()
self.validate_root_company_and_sync_account_to_children()
self.validate_receivable_payable_account_type()
def validate_parent_child_account_type(self):
if self.parent_account:
@@ -188,6 +187,24 @@ class Account(NestedSet):
"Balance Sheet" if self.root_type in ("Asset", "Liability", "Equity") else "Profit and Loss"
)
def validate_receivable_payable_account_type(self):
doc_before_save = self.get_doc_before_save()
receivable_payable_types = ["Receivable", "Payable"]
if (
doc_before_save
and doc_before_save.account_type in receivable_payable_types
and doc_before_save.account_type != self.account_type
):
# check for ledger entries
if frappe.db.get_all("GL Entry", filters={"account": self.name, "is_cancelled": 0}, limit=1):
msg = _(
"There are ledger entries against this account. Changing {0} to non-{1} in live system will cause incorrect output in 'Accounts {2}' report"
).format(
frappe.bold("Account Type"), doc_before_save.account_type, doc_before_save.account_type
)
frappe.msgprint(msg)
self.add_comment("Comment", msg)
def validate_root_details(self):
doc_before_save = self.get_doc_before_save()
@@ -199,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:
@@ -399,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()
@@ -407,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,
)
@@ -575,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

@@ -1,4 +1,4 @@
frappe.provide("frappe.treeview_settings")
frappe.provide("frappe.treeview_settings");
frappe.treeview_settings["Account"] = {
breadcrumb: "Accounts",
@@ -7,12 +7,12 @@ frappe.treeview_settings["Account"] = {
filters: [
{
fieldname: "company",
fieldtype:"Select",
fieldtype: "Select",
options: erpnext.utils.get_tree_options("company"),
label: __("Company"),
default: erpnext.utils.get_tree_default("company"),
on_change: function() {
var me = frappe.treeview_settings['Account'].treeview;
on_change: function () {
var me = frappe.treeview_settings["Account"].treeview;
var company = me.page.fields_dict.company.get_value();
if (!company) {
frappe.throw(__("Please set a Company"));
@@ -22,30 +22,36 @@ frappe.treeview_settings["Account"] = {
args: {
company: company,
},
callback: function(r) {
if(r.message) {
callback: function (r) {
if (r.message) {
let root_company = r.message.length ? r.message[0] : "";
me.page.fields_dict.root_company.set_value(root_company);
frappe.db.get_value("Company", {"name": company}, "allow_account_creation_against_child_company", (r) => {
frappe.flags.ignore_root_company_validation = r.allow_account_creation_against_child_company;
});
frappe.db.get_value(
"Company",
{ name: company },
"allow_account_creation_against_child_company",
(r) => {
frappe.flags.ignore_root_company_validation =
r.allow_account_creation_against_child_company;
}
);
}
}
},
});
}
},
},
{
fieldname: "root_company",
fieldtype:"Data",
fieldtype: "Data",
label: __("Root Company"),
hidden: true,
disable_onchange: true
}
disable_onchange: true,
},
],
root_label: "Accounts",
get_tree_nodes: 'erpnext.accounts.utils.get_children',
on_get_node: function(nodes, deep=false) {
get_tree_nodes: "erpnext.accounts.utils.get_children",
on_get_node: function (nodes, deep = false) {
if (frappe.boot.user.can_read.indexOf("GL Entry") == -1) return;
let accounts = [];
@@ -57,151 +63,231 @@ frappe.treeview_settings["Account"] = {
}
frappe.db.get_single_value("Accounts Settings", "show_balance_in_coa").then((value) => {
if(value) {
if (value) {
const get_balances = frappe.call({
method: 'erpnext.accounts.utils.get_account_balances',
method: "erpnext.accounts.utils.get_account_balances",
args: {
accounts: accounts,
company: cur_tree.args.company
company: cur_tree.args.company,
},
});
get_balances.then(r => {
get_balances.then((r) => {
if (!r.message || r.message.length == 0) return;
for (let account of r.message) {
const node = cur_tree.nodes && cur_tree.nodes[account.value];
if (!node || node.is_root) continue;
// show Dr if positive since balance is calculated as debit - credit else show Cr
const balance = account.balance_in_account_currency || account.balance;
const dr_or_cr = balance > 0 ? __("Dr"): __("Cr");
const dr_or_cr = balance > 0 ? __("Dr") : __("Cr");
const format = (value, currency) => format_currency(Math.abs(value), currency);
if (account.balance!==undefined) {
node.parent && node.parent.find('.balance-area').remove();
$('<span class="balance-area pull-right">'
+ (account.balance_in_account_currency ?
(format(account.balance_in_account_currency, account.account_currency) + " / ") : "")
+ format(account.balance, account.company_currency)
+ " " + dr_or_cr
+ '</span>').insertBefore(node.$ul);
if (account.balance !== undefined) {
node.parent && node.parent.find(".balance-area").remove();
$(
'<span class="balance-area pull-right">' +
(account.balance_in_account_currency
? format(
account.balance_in_account_currency,
account.account_currency
) + " / "
: "") +
format(account.balance, account.company_currency) +
" " +
dr_or_cr +
"</span>"
).insertBefore(node.$ul);
}
}
});
}
});
},
add_tree_node: 'erpnext.accounts.utils.add_ac',
menu_items:[
add_tree_node: "erpnext.accounts.utils.add_ac",
menu_items: [
{
label: __('New Company'),
action: function() { frappe.new_doc("Company", true) },
condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1'
}
label: __("New Company"),
action: function () {
frappe.new_doc("Company", true);
},
condition: 'frappe.boot.user.can_create.indexOf("Company") !== -1',
},
],
fields: [
{fieldtype:'Data', fieldname:'account_name', label:__('New Account Name'), reqd:true,
description: __("Name of new Account. Note: Please don't create accounts for Customers and Suppliers")},
{fieldtype:'Data', fieldname:'account_number', label:__('Account Number'),
description: __("Number of new Account, it will be included in the account name as a prefix")},
{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
description: __('Further accounts can be made under Groups, but entries can be made against non-Groups')},
{fieldtype:'Select', fieldname:'root_type', label:__('Root Type'),
options: ['Asset', 'Liability', 'Equity', 'Income', 'Expense'].join('\n'),
depends_on: 'eval:doc.is_group && !doc.parent_account'},
{fieldtype:'Select', fieldname:'account_type', label:__('Account Type'),
options: frappe.get_meta("Account").fields.filter(d => d.fieldname=='account_type')[0].options,
description: __("Optional. This setting will be used to filter in various transactions.")
{
fieldtype: "Data",
fieldname: "account_name",
label: __("New Account Name"),
reqd: true,
description: __(
"Name of new Account. Note: Please don't create accounts for Customers and Suppliers"
),
},
{
fieldtype: "Data",
fieldname: "account_number",
label: __("Account Number"),
description: __("Number of new Account, it will be included in the account name as a prefix"),
},
{
fieldtype: "Check",
fieldname: "is_group",
label: __("Is Group"),
description: __(
"Further accounts can be made under Groups, but entries can be made against non-Groups"
),
},
{
fieldtype: "Select",
fieldname: "root_type",
label: __("Root Type"),
options: ["Asset", "Liability", "Equity", "Income", "Expense"].join("\n"),
depends_on: "eval:doc.is_group && !doc.parent_account",
},
{
fieldtype: "Select",
fieldname: "account_type",
label: __("Account Type"),
options: frappe.get_meta("Account").fields.filter((d) => d.fieldname == "account_type")[0]
.options,
description: __("Optional. This setting will be used to filter in various transactions."),
},
{
fieldtype: "Float",
fieldname: "tax_rate",
label: __("Tax Rate"),
depends_on: 'eval:doc.is_group==0&&doc.account_type=="Tax"',
},
{
fieldtype: "Link",
fieldname: "account_currency",
label: __("Currency"),
options: "Currency",
description: __("Optional. Sets company's default currency, if not specified."),
},
{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate'),
depends_on: 'eval:doc.is_group==0&&doc.account_type=="Tax"'},
{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
description: __("Optional. Sets company's default currency, if not specified.")}
],
ignore_fields:["parent_account"],
onload: function(treeview) {
frappe.treeview_settings['Account'].treeview = {};
$.extend(frappe.treeview_settings['Account'].treeview, treeview);
ignore_fields: ["parent_account"],
onload: function (treeview) {
frappe.treeview_settings["Account"].treeview = {};
$.extend(frappe.treeview_settings["Account"].treeview, treeview);
function get_company() {
return treeview.page.fields_dict.company.get_value();
}
// tools
treeview.page.add_inner_button(__("Chart of Cost Centers"), function() {
frappe.set_route('Tree', 'Cost Center', {company: get_company()});
}, __('View'));
treeview.page.add_inner_button(
__("Chart of Cost Centers"),
function () {
frappe.set_route("Tree", "Cost Center", { company: get_company() });
},
__("View")
);
treeview.page.add_inner_button(__("Opening Invoice Creation Tool"), function() {
frappe.set_route('Form', 'Opening Invoice Creation Tool', {company: get_company()});
}, __('View'));
treeview.page.add_inner_button(
__("Opening Invoice Creation Tool"),
function () {
frappe.set_route("Form", "Opening Invoice Creation Tool", { company: get_company() });
},
__("View")
);
treeview.page.add_inner_button(__("Period Closing Voucher"), function() {
frappe.set_route('List', 'Period Closing Voucher', {company: get_company()});
}, __('View'));
treeview.page.add_inner_button(
__("Period Closing Voucher"),
function () {
frappe.set_route("List", "Period Closing Voucher", { company: get_company() });
},
__("View")
);
treeview.page.add_inner_button(__("Journal Entry"), function() {
frappe.new_doc('Journal Entry', {company: get_company()});
}, __('Create'));
treeview.page.add_inner_button(__("Company"), function() {
frappe.new_doc('Company');
}, __('Create'));
treeview.page.add_inner_button(
__("Journal Entry"),
function () {
frappe.new_doc("Journal Entry", { company: get_company() });
},
__("Create")
);
treeview.page.add_inner_button(
__("Company"),
function () {
frappe.new_doc("Company");
},
__("Create")
);
// financial statements
for (let report of ['Trial Balance', 'General Ledger', 'Balance Sheet',
'Profit and Loss Statement', 'Cash Flow Statement', 'Accounts Payable', 'Accounts Receivable']) {
treeview.page.add_inner_button(__(report), function() {
frappe.set_route('query-report', report, {company: get_company()});
}, __('Financial Statements'));
for (let report of [
"Trial Balance",
"General Ledger",
"Balance Sheet",
"Profit and Loss Statement",
"Cash Flow Statement",
"Accounts Payable",
"Accounts Receivable",
]) {
treeview.page.add_inner_button(
__(report),
function () {
frappe.set_route("query-report", report, { company: get_company() });
},
__("Financial Statements")
);
}
},
post_render: function(treeview) {
frappe.treeview_settings['Account'].treeview["tree"] = treeview.tree;
treeview.page.set_primary_action(__("New"), function() {
let root_company = treeview.page.fields_dict.root_company.get_value();
post_render: function (treeview) {
frappe.treeview_settings["Account"].treeview["tree"] = treeview.tree;
treeview.page.set_primary_action(
__("New"),
function () {
let root_company = treeview.page.fields_dict.root_company.get_value();
if(root_company) {
frappe.throw(__("Please add the account to root level Company - {0}"), [root_company]);
} else {
treeview.new_node();
}
}, "add");
if (root_company) {
frappe.throw(__("Please add the account to root level Company - {0}"), [root_company]);
} else {
treeview.new_node();
}
},
"add"
);
},
toolbar: [
{
label:__("Add Child"),
condition: function(node) {
return frappe.boot.user.can_create.indexOf("Account") !== -1
&& (!frappe.treeview_settings['Account'].treeview.page.fields_dict.root_company.get_value()
|| frappe.flags.ignore_root_company_validation)
&& node.expandable && !node.hide_add;
label: __("Add Child"),
condition: function (node) {
return (
frappe.boot.user.can_create.indexOf("Account") !== -1 &&
(!frappe.treeview_settings[
"Account"
].treeview.page.fields_dict.root_company.get_value() ||
frappe.flags.ignore_root_company_validation) &&
node.expandable &&
!node.hide_add
);
},
click: function() {
var me = frappe.views.trees['Account'];
click: function () {
var me = frappe.views.trees["Account"];
me.new_node();
},
btnClass: "hidden-xs"
btnClass: "hidden-xs",
},
{
condition: function(node) {
return !node.root && frappe.boot.user.can_read.indexOf("GL Entry") !== -1
condition: function (node) {
return !node.root && frappe.boot.user.can_read.indexOf("GL Entry") !== -1;
},
label: __("View Ledger"),
click: function(node, btn) {
click: function (node, btn) {
frappe.route_options = {
"account": node.label,
"from_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
"to_date": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
"company": frappe.treeview_settings['Account'].treeview.page.fields_dict.company.get_value()
account: node.label,
from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
company:
frappe.treeview_settings["Account"].treeview.page.fields_dict.company.get_value(),
};
frappe.set_route("query-report", "General Ledger");
},
btnClass: "hidden-xs"
}
btnClass: "hidden-xs",
},
],
extend_toolbar: true
}
extend_toolbar: true,
};

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

@@ -56,7 +56,9 @@
"Constru\u00e7\u00f5es em Andamento de Im\u00f3veis Destinados \u00e0 Venda": {},
"Estoques Destinados \u00e0 Doa\u00e7\u00e3o": {},
"Im\u00f3veis Destinados \u00e0 Venda": {},
"Insumos (materiais diretos)": {},
"Insumos (materiais diretos)": {
"account_type": "Stock"
},
"Insumos Agropecu\u00e1rios": {},
"Mercadorias para Revenda": {},
"Outras 11": {},
@@ -146,6 +148,65 @@
"root_type": "Asset"
},
"CUSTOS DE PRODU\u00c7\u00c3O": {
"CUSTO DOS PRODUTOS E SERVI\u00c7OS VENDIDOS": {
"CUSTO DOS PRODUTOS VENDIDOS": {
"CUSTO DOS PRODUTOS VENDIDOS PARA AS DEMAIS ATIVIDADES": {
"Custos dos Produtos Vendidos em Geral": {
"account_type": "Cost of Goods Sold"
},
"Outros Custos 4": {},
"account_type": "Cost of Goods Sold"
},
"CUSTO DOS PRODUTOS VENDIDOS PARA ASSIST\u00caNCIA SOCIAL": {
"Custos dos Produtos para Assist\u00eancia Social - Gratuidades": {},
"Custos dos Produtos para Assist\u00eancia Social - Vendidos": {},
"Outras": {}
},
"CUSTO DOS PRODUTOS VENDIDOS PARA EDUCA\u00c7\u00c3O": {
"Custos dos Produtos para Educa\u00e7\u00e3o - Gratuidades": {},
"Custos dos Produtos para Educa\u00e7\u00e3o - Vendidos": {},
"Outros Custos 6": {}
},
"CUSTO DOS PRODUTOS VENDIDOS PARA SA\u00daDE": {
"Custos dos Produtos para Sa\u00fade - Gratuidades": {},
"Custos dos Produtos para Sa\u00fade \u2013 Vendidos": {},
"Outros Custos 5": {}
},
"account_type": "Cost of Goods Sold"
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS": {
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA AS DEMAIS ATIVIDADES": {
"Custo dos Servi\u00e7os Prestados em Geral": {},
"Outros Custos": {}
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA ASSIST\u00caNCIA SOCIAL": {
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios/Contratos/Parcerias": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es 1": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es/Subven\u00e7\u00f5es Vinculadas 1": {},
"Custo dos Servi\u00e7os Prestados a Gratuidade 1": {},
"Custo dos Servi\u00e7os Prestados a Pacientes Particulares": {},
"Outros Custos 2": {}
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA EDUCA\u00c7\u00c3O": {
"Custo dos Servi\u00e7os Prestados a Alunos N\u00e3o Bolsistas": {},
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios/Contratos/Parcerias (Exceto PROUNI)": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es/Subven\u00e7\u00f5es Vinculadas": {},
"Custo dos Servi\u00e7os Prestados a Gratuidade": {},
"Custo dos Servi\u00e7os Prestados ao PROUNI": {},
"Outros Custos 1": {}
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA SA\u00daDE": {
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios SUS": {},
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios/Contratos/Parcerias 1": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es 2": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es/Subven\u00e7\u00f5es Vinculadas 2": {},
"Custo dos Servi\u00e7os Prestados a Gratuidade 2": {},
"Custo dos Servi\u00e7os Prestados a Pacientes Particulares 1": {},
"Outros Custos 3": {}
}
}
},
"CUSTO DOS BENS E SERVI\u00c7OS PRODUZIDOS": {
"CUSTO DOS PRODUTOS DE FABRICA\u00c7\u00c3O PR\u00d3PRIA PRODUZIDOS": {
"Alimenta\u00e7\u00e3o do Trabalhador": {},
@@ -621,7 +682,9 @@
"Receita das Unidades Imobili\u00e1rias Vendidas": {},
"Receita de Exporta\u00e7\u00e3o Direta de Mercadorias e Produtos": {},
"Receita de Exporta\u00e7\u00e3o de Servi\u00e7os": {},
"Receita de Loca\u00e7\u00e3o de Bens M\u00f3veis e Im\u00f3veis": {},
"Receita de Loca\u00e7\u00e3o de Bens M\u00f3veis e Im\u00f3veis": {
"account_type": "Income Account"
},
"Receita de Vendas de Mercadorias e Produtos a Comercial Exportadora com Fim Espec\u00edfico de Exporta\u00e7\u00e3o": {}
}
}
@@ -645,65 +708,6 @@
}
},
"RESULTADO OPERACIONAL": {
"CUSTO DOS PRODUTOS E SERVI\u00c7OS VENDIDOS": {
"CUSTO DOS PRODUTOS VENDIDOS": {
"CUSTO DOS PRODUTOS VENDIDOS PARA AS DEMAIS ATIVIDADES": {
"Custos dos Produtos Vendidos em Geral": {
"account_type": "Cost of Goods Sold"
},
"Outros Custos 4": {},
"account_type": "Cost of Goods Sold"
},
"CUSTO DOS PRODUTOS VENDIDOS PARA ASSIST\u00caNCIA SOCIAL": {
"Custos dos Produtos para Assist\u00eancia Social - Gratuidades": {},
"Custos dos Produtos para Assist\u00eancia Social - Vendidos": {},
"Outras": {}
},
"CUSTO DOS PRODUTOS VENDIDOS PARA EDUCA\u00c7\u00c3O": {
"Custos dos Produtos para Educa\u00e7\u00e3o - Gratuidades": {},
"Custos dos Produtos para Educa\u00e7\u00e3o - Vendidos": {},
"Outros Custos 6": {}
},
"CUSTO DOS PRODUTOS VENDIDOS PARA SA\u00daDE": {
"Custos dos Produtos para Sa\u00fade - Gratuidades": {},
"Custos dos Produtos para Sa\u00fade \u2013 Vendidos": {},
"Outros Custos 5": {}
},
"account_type": "Cost of Goods Sold"
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS": {
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA AS DEMAIS ATIVIDADES": {
"Custo dos Servi\u00e7os Prestados em Geral": {},
"Outros Custos": {}
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA ASSIST\u00caNCIA SOCIAL": {
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios/Contratos/Parcerias": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es 1": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es/Subven\u00e7\u00f5es Vinculadas 1": {},
"Custo dos Servi\u00e7os Prestados a Gratuidade 1": {},
"Custo dos Servi\u00e7os Prestados a Pacientes Particulares": {},
"Outros Custos 2": {}
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA EDUCA\u00c7\u00c3O": {
"Custo dos Servi\u00e7os Prestados a Alunos N\u00e3o Bolsistas": {},
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios/Contratos/Parcerias (Exceto PROUNI)": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es/Subven\u00e7\u00f5es Vinculadas": {},
"Custo dos Servi\u00e7os Prestados a Gratuidade": {},
"Custo dos Servi\u00e7os Prestados ao PROUNI": {},
"Outros Custos 1": {}
},
"CUSTO DOS SERVI\u00c7OS PRESTADOS PARA SA\u00daDE": {
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios SUS": {},
"Custo dos Servi\u00e7os Prestados a Conv\u00eanios/Contratos/Parcerias 1": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es 2": {},
"Custo dos Servi\u00e7os Prestados a Doa\u00e7\u00f5es/Subven\u00e7\u00f5es Vinculadas 2": {},
"Custo dos Servi\u00e7os Prestados a Gratuidade 2": {},
"Custo dos Servi\u00e7os Prestados a Pacientes Particulares 1": {},
"Outros Custos 3": {}
}
}
},
"DESPESAS OPERACIONAIS": {
"DESPESAS OPERACIONAIS 1": {
"DESPESAS OPERACIONAIS 2": {

View File

@@ -36,16 +36,16 @@
}
},
"Fixed Assets": {
"Capital Equipments": {
"Capital Equipment": {
"account_type": "Fixed Asset"
},
"Electronic Equipments": {
"Electronic Equipment": {
"account_type": "Fixed Asset"
},
"Furnitures and Fixtures": {
"Furniture and Fixtures": {
"account_type": "Fixed Asset"
},
"Office Equipments": {
"Office Equipment": {
"account_type": "Fixed Asset"
},
"Plants and Machineries": {

View File

@@ -23,13 +23,13 @@ def get():
_("Tax Assets"): {"is_group": 1},
},
_("Fixed Assets"): {
_("Capital Equipments"): {"account_type": "Fixed Asset"},
_("Electronic Equipments"): {"account_type": "Fixed Asset"},
_("Furnitures and Fixtures"): {"account_type": "Fixed Asset"},
_("Office Equipments"): {"account_type": "Fixed Asset"},
_("Capital Equipment"): {"account_type": "Fixed Asset"},
_("Electronic Equipment"): {"account_type": "Fixed Asset"},
_("Furniture and Fixtures"): {"account_type": "Fixed Asset"},
_("Office Equipment"): {"account_type": "Fixed Asset"},
_("Plants and Machineries"): {"account_type": "Fixed Asset"},
_("Buildings"): {"account_type": "Fixed Asset"},
_("Softwares"): {"account_type": "Fixed Asset"},
_("Software"): {"account_type": "Fixed Asset"},
_("Accumulated Depreciation"): {"account_type": "Accumulated Depreciation"},
_("CWIP Account"): {
"account_type": "Capital Work in Progress",

View File

@@ -36,13 +36,13 @@ def get():
"account_number": "1100-1600",
},
_("Fixed Assets"): {
_("Capital Equipments"): {"account_type": "Fixed Asset", "account_number": "1710"},
_("Electronic Equipments"): {"account_type": "Fixed Asset", "account_number": "1720"},
_("Furnitures and Fixtures"): {"account_type": "Fixed Asset", "account_number": "1730"},
_("Office Equipments"): {"account_type": "Fixed Asset", "account_number": "1740"},
_("Capital Equipment"): {"account_type": "Fixed Asset", "account_number": "1710"},
_("Electronic Equipment"): {"account_type": "Fixed Asset", "account_number": "1720"},
_("Furniture and Fixtures"): {"account_type": "Fixed Asset", "account_number": "1730"},
_("Office Equipment"): {"account_type": "Fixed Asset", "account_number": "1740"},
_("Plants and Machineries"): {"account_type": "Fixed Asset", "account_number": "1750"},
_("Buildings"): {"account_type": "Fixed Asset", "account_number": "1760"},
_("Softwares"): {"account_type": "Fixed Asset", "account_number": "1770"},
_("Software"): {"account_type": "Fixed Asset", "account_number": "1770"},
_("Accumulated Depreciation"): {
"account_type": "Accumulated Depreciation",
"account_number": "1780",

View File

@@ -6,6 +6,7 @@ import unittest
import frappe
from frappe.test_runner import make_test_records
from frappe.utils import nowdate
from erpnext.accounts.doctype.account.account import (
InvalidAccountMergeError,
@@ -119,7 +120,7 @@ class TestAccount(unittest.TestCase):
InvalidAccountMergeError,
merge_account,
"Capital Stock - _TC",
"Softwares - _TC",
"Software - _TC",
)
# Raise error as currency doesn't match
@@ -260,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(
@@ -290,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",
@@ -317,13 +308,24 @@ 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)
def test_account_balance(self):
from erpnext.accounts.utils import get_balance_on
if not frappe.db.exists("Account", "Test Percent Account %5 - _TC"):
acc = frappe.new_doc("Account")
acc.account_name = "Test Percent Account %5"
acc.parent_account = "Tax Assets - _TC"
acc.company = "_Test Company"
acc.insert()
balance = get_balance_on(account="Test Percent Account %5 - _TC", date=nowdate())
self.assertEqual(balance, 0)
def _make_test_records(verbose=None):
from frappe.test_runner import make_test_objects

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

@@ -1,74 +1,89 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Accounting Dimension', {
refresh: function(frm) {
frm.set_query('document_type', () => {
frappe.ui.form.on("Accounting Dimension", {
refresh: function (frm) {
frm.set_query("document_type", () => {
let invalid_doctypes = frappe.model.core_doctypes_list;
invalid_doctypes.push('Accounting Dimension', 'Project',
'Cost Center', 'Accounting Dimension Detail', 'Company');
invalid_doctypes.push(
"Accounting Dimension",
"Project",
"Cost Center",
"Accounting Dimension Detail",
"Company"
);
return {
filters: {
name: ['not in', invalid_doctypes]
}
name: ["not in", invalid_doctypes],
},
};
});
frm.set_query("offsetting_account", "dimension_defaults", function(doc, cdt, cdn) {
frm.set_query("offsetting_account", "dimension_defaults", function (doc, cdt, cdn) {
let d = locals[cdt][cdn];
return {
filters: {
company: d.company,
root_type: ["in", ["Asset", "Liability"]],
is_group: 0
}
}
is_group: 0,
},
};
});
if (!frm.is_new()) {
frm.add_custom_button(__('Show {0}', [frm.doc.document_type]), function () {
frm.add_custom_button(__("Show {0}", [frm.doc.document_type]), function () {
frappe.set_route("List", frm.doc.document_type);
});
let button = frm.doc.disabled ? "Enable" : "Disable";
frm.add_custom_button(__(button), function() {
frm.set_value('disabled', 1 - frm.doc.disabled);
frm.add_custom_button(__(button), function () {
frm.set_value("disabled", 1 - frm.doc.disabled);
frappe.call({
method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.disable_dimension",
args: {
doc: frm.doc
doc: frm.doc,
},
freeze: true,
callback: function(r) {
callback: function (r) {
let message = frm.doc.disabled ? "Dimension Disabled" : "Dimension Enabled";
frm.save();
frappe.show_alert({message:__(message), indicator:'green'});
}
frappe.show_alert({ message: __(message), indicator: "green" });
},
});
});
}
},
document_type: function(frm) {
label: function (frm) {
frm.set_value("fieldname", frappe.model.scrub(frm.doc.label));
},
frm.set_value('label', frm.doc.document_type);
frm.set_value('fieldname', frappe.model.scrub(frm.doc.document_type));
document_type: function (frm) {
frm.set_value("label", frm.doc.document_type);
frappe.db.get_value('Accounting Dimension', {'document_type': frm.doc.document_type}, 'document_type', (r) => {
if (r && r.document_type) {
frm.set_df_property('document_type', 'description', "Document type is already set as dimension");
frappe.db.get_value(
"Accounting Dimension",
{ document_type: frm.doc.document_type },
"document_type",
(r) => {
if (r && r.document_type) {
frm.set_df_property(
"document_type",
"description",
"Document type is already set as dimension"
);
}
}
});
);
},
});
frappe.ui.form.on('Accounting Dimension Detail', {
dimension_defaults_add: function(frm, cdt, cdn) {
frappe.ui.form.on("Accounting Dimension Detail", {
dimension_defaults_add: function (frm, cdt, cdn) {
let row = locals[cdt][cdn];
row.reference_document = frm.doc.document_type;
}
},
});

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

@@ -11,6 +11,10 @@ from frappe.model import core_doctypes_list
from frappe.model.document import Document
from frappe.utils import cstr
from erpnext.accounts.doctype.repost_accounting_ledger.repost_accounting_ledger import (
get_allowed_types_from_settings,
)
class AccountingDimension(Document):
# begin: auto-generated types
@@ -36,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",
@@ -44,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"))
@@ -106,9 +108,9 @@ def make_dimension_in_accounting_doctypes(doc, doclist=None):
doc_count = len(get_accounting_dimensions())
count = 0
repostable_doctypes = get_allowed_types_from_settings()
for doctype in doclist:
if (doc_count + 1) % 2 == 0:
insert_after_field = "dimension_col_break"
else:
@@ -121,6 +123,7 @@ def make_dimension_in_accounting_doctypes(doc, doclist=None):
"options": doc.document_type,
"insert_after": insert_after_field,
"owner": "Administrator",
"allow_on_submit": 1 if doctype in repostable_doctypes else 0,
}
meta = frappe.get_meta(doctype, cached=False)
@@ -142,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}'",
}
)
@@ -176,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")
@@ -237,7 +238,6 @@ def get_doctypes_with_dimensions():
def get_accounting_dimensions(as_list=True, filters=None):
if not filters:
filters = {"disabled": 0}
@@ -255,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]
@@ -274,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
@@ -284,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

@@ -1,10 +1,9 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Accounting Dimension Filter', {
refresh: function(frm, cdt, cdn) {
let help_content =
`<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
frappe.ui.form.on("Accounting Dimension Filter", {
refresh: function (frm, cdt, cdn) {
let help_content = `<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
<tr><td>
<p>
<i class="fa fa-hand-right"></i>
@@ -13,77 +12,80 @@ frappe.ui.form.on('Accounting Dimension Filter', {
</td></tr>
</table>`;
frm.set_df_property('dimension_filter_help', 'options', help_content);
frm.set_df_property("dimension_filter_help", "options", help_content);
},
onload: function(frm) {
frm.set_query('applicable_on_account', 'accounts', function() {
onload: function (frm) {
frm.set_query("applicable_on_account", "accounts", function () {
return {
filters: {
'company': frm.doc.company
}
company: frm.doc.company,
},
};
});
frappe.db.get_list('Accounting Dimension',
{fields: ['document_type']}).then((res) => {
let options = ['Cost Center', 'Project'];
frappe.db.get_list("Accounting Dimension", { fields: ["document_type"] }).then((res) => {
let options = ["Cost Center", "Project"];
res.forEach((dimension) => {
options.push(dimension.document_type);
});
frm.set_df_property('accounting_dimension', 'options', options);
frm.set_df_property("accounting_dimension", "options", options);
});
frm.trigger('setup_filters');
frm.trigger("setup_filters");
},
setup_filters: function(frm) {
setup_filters: function (frm) {
let filters = {};
if (frm.doc.accounting_dimension) {
frappe.model.with_doctype(frm.doc.accounting_dimension, function() {
frappe.model.with_doctype(frm.doc.accounting_dimension, function () {
if (frappe.model.is_tree(frm.doc.accounting_dimension)) {
filters['is_group'] = 0;
filters["is_group"] = 0;
}
if (frappe.meta.has_field(frm.doc.accounting_dimension, 'company')) {
filters['company'] = frm.doc.company;
if (frappe.meta.has_field(frm.doc.accounting_dimension, "company")) {
filters["company"] = frm.doc.company;
}
frm.set_query('dimension_value', 'dimensions', function() {
frm.set_query("dimension_value", "dimensions", function () {
return {
filters: filters
filters: filters,
};
});
});
}
},
accounting_dimension: function(frm) {
accounting_dimension: function (frm) {
frm.clear_table("dimensions");
let row = frm.add_child("dimensions");
row.accounting_dimension = frm.doc.accounting_dimension;
frm.fields_dict["dimensions"].grid.update_docfield_property("dimension_value", "label", frm.doc.accounting_dimension);
frm.fields_dict["dimensions"].grid.update_docfield_property(
"dimension_value",
"label",
frm.doc.accounting_dimension
);
frm.refresh_field("dimensions");
frm.trigger('setup_filters');
frm.trigger("setup_filters");
},
apply_restriction_on_values: function(frm) {
apply_restriction_on_values: function (frm) {
/** If restriction on values is not applied, we should set "allow_or_restrict" to "Restrict" with an empty allowed dimension table.
* Hence it's not "restricted" on any value.
*/
*/
if (!frm.doc.apply_restriction_on_values) {
frm.set_value("allow_or_restrict", "Restrict");
frm.clear_table("dimensions");
frm.refresh_field("dimensions");
}
}
},
});
frappe.ui.form.on('Allowed Dimension', {
dimensions_add: function(frm, cdt, cdn) {
frappe.ui.form.on("Allowed Dimension", {
dimensions_add: function (frm, cdt, cdn) {
let row = locals[cdt][cdn];
row.accounting_dimension = frm.doc.accounting_dimension;
frm.refresh_field("dimensions");
}
},
});

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,30 +1,33 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Accounting Period', {
onload: function(frm) {
if(frm.doc.closed_documents.length === 0 || (frm.doc.closed_documents.length === 1 && frm.doc.closed_documents[0].document_type == undefined)) {
frappe.ui.form.on("Accounting Period", {
onload: function (frm) {
if (
frm.doc.closed_documents.length === 0 ||
(frm.doc.closed_documents.length === 1 && frm.doc.closed_documents[0].document_type == undefined)
) {
frappe.call({
method: "get_doctypes_for_closing",
doc:frm.doc,
callback: function(r) {
if(r.message) {
doc: frm.doc,
callback: function (r) {
if (r.message) {
cur_frm.clear_table("closed_documents");
r.message.forEach(function(element) {
r.message.forEach(function (element) {
var c = frm.add_child("closed_documents");
c.document_type = element.document_type;
c.closed = element.closed;
});
refresh_field("closed_documents");
}
}
},
});
}
frm.set_query("document_type", "closed_documents", () => {
return {
query: "erpnext.controllers.queries.get_doctypes_for_closing",
}
};
});
}
},
});

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

@@ -1,8 +1,6 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Accounts Settings', {
refresh: function(frm) {
}
frappe.ui.form.on("Accounts Settings", {
refresh: function (frm) {},
});

View File

@@ -1,7 +1,6 @@
{
"actions": [],
"creation": "2013-06-24 15:49:57",
"description": "Settings for Accounts",
"doctype": "DocType",
"document_type": "Other",
"editable_grid": 1,
@@ -462,7 +461,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2023-11-20 09:37:47.650347",
"modified": "2024-03-27 13:05:57.568638",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",
@@ -487,7 +486,7 @@
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "ASC",
"states": [],
"track_changes": 1

View File

@@ -1,8 +1,11 @@
frappe.ui.form.on('Accounts Settings', {
refresh: function(frm) {
frappe.ui.form.on("Accounts Settings", {
refresh: function (frm) {
frm.set_df_property("acc_frozen_upto", "label", "Books Closed Through");
frm.set_df_property("frozen_accounts_modifier", "label", "Role Allowed to Close Books & Make Changes to Closed Periods");
frm.set_df_property(
"frozen_accounts_modifier",
"label",
"Role Allowed to Close Books & Make Changes to Closed Periods"
);
frm.set_df_property("credit_controller", "label", "Credit Manager");
}
},
});

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

@@ -1,38 +1,36 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.provide('erpnext.integrations');
frappe.provide("erpnext.integrations");
frappe.ui.form.on('Bank', {
onload: function(frm) {
frappe.ui.form.on("Bank", {
onload: function (frm) {
add_fields_to_mapping_table(frm);
},
refresh: function(frm) {
refresh: function (frm) {
add_fields_to_mapping_table(frm);
frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal);
frm.toggle_display(["address_html", "contact_html"], !frm.doc.__islocal);
if (frm.doc.__islocal) {
frm.set_df_property('address_and_contact', 'hidden', 1);
frm.set_df_property("address_and_contact", "hidden", 1);
frappe.contacts.clear_address_and_contact(frm);
}
else {
frm.set_df_property('address_and_contact', 'hidden', 0);
} else {
frm.set_df_property("address_and_contact", "hidden", 0);
frappe.contacts.render_address_and_contact(frm);
}
if (frm.doc.plaid_access_token) {
frm.add_custom_button(__('Refresh Plaid Link'), () => {
frm.add_custom_button(__("Refresh Plaid Link"), () => {
new erpnext.integrations.refreshPlaidLink(frm.doc.plaid_access_token);
});
}
}
},
});
let add_fields_to_mapping_table = function (frm) {
let options = [];
frappe.model.with_doctype("Bank Transaction", function() {
frappe.model.with_doctype("Bank Transaction", function () {
let meta = frappe.get_meta("Bank Transaction");
meta.fields.forEach(value => {
meta.fields.forEach((value) => {
if (!["Section Break", "Column Break"].includes(value.fieldtype)) {
options.push(value.fieldname);
}
@@ -40,30 +38,32 @@ let add_fields_to_mapping_table = function (frm) {
});
frm.fields_dict.bank_transaction_mapping.grid.update_docfield_property(
'bank_transaction_field', 'options', options
"bank_transaction_field",
"options",
options
);
};
erpnext.integrations.refreshPlaidLink = class refreshPlaidLink {
constructor(access_token) {
this.access_token = access_token;
this.plaidUrl = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';
this.plaidUrl = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
this.init_config();
}
async init_config() {
this.plaid_env = await frappe.db.get_single_value('Plaid Settings', 'plaid_env');
this.plaid_env = await frappe.db.get_single_value("Plaid Settings", "plaid_env");
this.token = await this.get_link_token_for_update();
this.init_plaid();
}
async get_link_token_for_update() {
const token = frappe.xcall(
'erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.get_link_token_for_update',
"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.get_link_token_for_update",
{ access_token: this.access_token }
)
);
if (!token) {
frappe.throw(__('Cannot retrieve link token for update. Check Error Log for more information'));
frappe.throw(__("Cannot retrieve link token for update. Check Error Log for more information"));
}
return token;
}
@@ -90,35 +90,45 @@ erpnext.integrations.refreshPlaidLink = class refreshPlaidLink {
resolve();
return;
}
const el = document.createElement('script');
el.type = 'text/javascript';
const el = document.createElement("script");
el.type = "text/javascript";
el.async = true;
el.src = src;
el.addEventListener('load', resolve);
el.addEventListener('error', reject);
el.addEventListener('abort', reject);
el.addEventListener("load", resolve);
el.addEventListener("error", reject);
el.addEventListener("abort", reject);
document.head.appendChild(el);
});
}
onScriptLoaded(me) {
me.linkHandler = Plaid.create({ // eslint-disable-line no-undef
me.linkHandler = Plaid.create({
// eslint-disable-line no-undef
env: me.plaid_env,
token: me.token,
onSuccess: me.plaid_success
onSuccess: me.plaid_success,
});
}
onScriptError(error) {
frappe.msgprint(__("There was an issue connecting to Plaid's authentication server. Check browser console for more information"));
frappe.msgprint(
__(
"There was an issue connecting to Plaid's authentication server. Check browser console for more information"
)
);
console.log(error);
}
plaid_success(token, response) {
frappe.xcall('erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.update_bank_account_ids', {
response: response,
}).then(() => {
frappe.show_alert({ message: __('Plaid Link Updated'), indicator: 'green' });
});
frappe
.xcall(
"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.update_bank_account_ids",
{
response: response,
}
)
.then(() => {
frappe.show_alert({ message: __("Plaid Link Updated"), indicator: "green" });
});
}
};

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

@@ -1,45 +1,49 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Bank Account', {
setup: function(frm) {
frm.set_query("account", function() {
frappe.ui.form.on("Bank Account", {
setup: function (frm) {
frm.set_query("account", function () {
return {
filters: {
'account_type': 'Bank',
'company': frm.doc.company,
'is_group': 0
}
account_type: "Bank",
company: frm.doc.company,
is_group: 0,
},
};
});
frm.set_query("party_type", function() {
frm.set_query("party_type", function () {
return {
query: "erpnext.setup.doctype.party_type.party_type.get_party_type",
};
});
},
refresh: function(frm) {
frappe.dynamic_link = { doc: frm.doc, fieldname: 'name', doctype: 'Bank Account' }
refresh: function (frm) {
frappe.dynamic_link = { doc: frm.doc, fieldname: "name", doctype: "Bank Account" };
frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal);
frm.toggle_display(["address_html", "contact_html"], !frm.doc.__islocal);
if (frm.doc.__islocal) {
frappe.contacts.clear_address_and_contact(frm);
}
else {
} else {
frappe.contacts.render_address_and_contact(frm);
}
if (frm.doc.integration_id) {
frm.add_custom_button(__("Unlink external integrations"), function() {
frappe.confirm(__("This action will unlink this account from any external service integrating ERPNext with your bank accounts. It cannot be undone. Are you certain ?"), function() {
frm.set_value("integration_id", "");
});
frm.add_custom_button(__("Unlink external integrations"), function () {
frappe.confirm(
__(
"This action will unlink this account from any external service integrating ERPNext with your bank accounts. It cannot be undone. Are you certain ?"
),
function () {
frm.set_value("integration_id", "");
}
);
});
}
},
is_company_account: function(frm) {
frm.set_df_property('account', 'reqd', frm.doc.is_company_account);
}
is_company_account: function (frm) {
frm.set_df_property("account", "reqd", frm.doc.is_company_account);
},
});

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

@@ -9,6 +9,7 @@ from frappe.contacts.address_and_contact import (
load_address_and_contact,
)
from frappe.model.document import Document
from frappe.utils import comma_and, get_link_to_form
class BankAccount(Document):
@@ -52,10 +53,24 @@ class BankAccount(Document):
def validate(self):
self.validate_company()
self.validate_iban()
self.validate_account()
self.update_default_bank_account()
def validate_account(self):
if self.account:
if accounts := frappe.db.get_all(
"Bank Account", filters={"account": self.account, "name": ["!=", self.name]}, as_list=1
):
frappe.throw(
_("'{0}' account is already used by {1}. Use another account.").format(
frappe.bold(self.account),
frappe.bold(comma_and([get_link_to_form(self.doctype, x[0]) for x in accounts])),
)
)
def validate_company(self):
if self.is_company_account and not self.company:
frappe.throw(_("Company is manadatory for company account"))
frappe.throw(_("Company is mandatory for company account"))
def validate_iban(self):
"""
@@ -86,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,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Bank Account Subtype', {
refresh: function() {
}
frappe.ui.form.on("Bank Account Subtype", {
refresh: function () {},
});

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

@@ -1,8 +1,7 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Bank Account Type', {
frappe.ui.form.on("Bank Account Type", {
// refresh: function(frm) {
// }
});

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

@@ -2,80 +2,76 @@
// License: GNU General Public License v3. See license.txt
frappe.ui.form.on("Bank Clearance", {
setup: function(frm) {
setup: function (frm) {
frm.add_fetch("account", "account_currency", "account_currency");
frm.set_query("account", function() {
frm.set_query("account", function () {
return {
"filters": {
"account_type": ["in",["Bank","Cash"]],
"is_group": 0,
}
filters: {
account_type: ["in", ["Bank", "Cash"]],
is_group: 0,
},
};
});
frm.set_query("bank_account", function () {
return {
filters: {
'is_company_account': 1
is_company_account: 1,
},
};
});
},
onload: function(frm) {
let default_bank_account = frappe.defaults.get_user_default("Company")?
locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "";
onload: function (frm) {
let default_bank_account = frappe.defaults.get_user_default("Company")
? locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]
: "";
frm.set_value("account", default_bank_account);
frm.set_value("from_date", frappe.datetime.month_start());
frm.set_value("to_date", frappe.datetime.month_end());
},
refresh: function(frm) {
refresh: function (frm) {
frm.disable_save();
frm.add_custom_button(__('Get Payment Entries'), () =>
frm.trigger("get_payment_entries")
);
frm.add_custom_button(__("Get Payment Entries"), () => frm.trigger("get_payment_entries"));
frm.change_custom_button_type(__('Get Payment Entries'), null, 'primary');
frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
},
update_clearance_date: function(frm) {
update_clearance_date: function (frm) {
return frappe.call({
method: "update_clearance_date",
doc: frm.doc,
callback: function(r, rt) {
callback: function (r, rt) {
frm.refresh_field("payment_entries");
frm.refresh_fields();
if (!frm.doc.payment_entries.length) {
frm.change_custom_button_type(__('Get Payment Entries'), null, 'primary');
frm.change_custom_button_type(__('Update Clearance Date'), null, 'default');
frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
frm.change_custom_button_type(__("Update Clearance Date"), null, "default");
}
}
},
});
},
get_payment_entries: function(frm) {
get_payment_entries: function (frm) {
return frappe.call({
method: "get_payment_entries",
doc: frm.doc,
callback: function(r, rt) {
callback: function (r, rt) {
frm.refresh_field("payment_entries");
if (frm.doc.payment_entries.length) {
frm.add_custom_button(__('Update Clearance Date'), () =>
frm.add_custom_button(__("Update Clearance Date"), () =>
frm.trigger("update_clearance_date")
);
frm.change_custom_button_type(__('Get Payment Entries'), null, 'default');
frm.change_custom_button_type(__('Update Clearance Date'), null, 'primary');
frm.change_custom_button_type(__("Get Payment Entries"), null, "default");
frm.change_custom_button_type(__("Update Clearance Date"), null, "primary");
}
}
},
});
}
},
});

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

@@ -5,7 +5,9 @@
import frappe
from frappe import _, msgprint
from frappe.model.document import Document
from frappe.query_builder.custom import ConstantColumn
from frappe.utils import flt, fmt_money, getdate
from pypika import Order
import erpnext
@@ -125,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,
@@ -139,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,
)
@@ -150,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,
@@ -165,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,
@@ -179,45 +177,65 @@ def get_payment_entries_for_bank_clearance(
pos_sales_invoices, pos_purchase_invoices = [], []
if include_pos_transactions:
pos_sales_invoices = frappe.db.sql(
"""
select
"Sales Invoice Payment" as payment_document, sip.name as payment_entry, sip.amount as debit,
si.posting_date, si.customer as against_account, sip.clearance_date,
account.account_currency, 0 as credit
from `tabSales Invoice Payment` sip, `tabSales Invoice` si, `tabAccount` account
where
sip.account=%(account)s and si.docstatus=1 and sip.parent = si.name
and account.name = sip.account and si.posting_date >= %(from)s and si.posting_date <= %(to)s
order by
si.posting_date ASC, si.name DESC
""",
{"account": account, "from": from_date, "to": to_date},
as_dict=1,
)
si_payment = frappe.qb.DocType("Sales Invoice Payment")
si = frappe.qb.DocType("Sales Invoice")
acc = frappe.qb.DocType("Account")
pos_purchase_invoices = frappe.db.sql(
"""
select
"Purchase Invoice" as payment_document, pi.name as payment_entry, pi.paid_amount as credit,
pi.posting_date, pi.supplier as against_account, pi.clearance_date,
account.account_currency, 0 as debit
from `tabPurchase Invoice` pi, `tabAccount` account
where
pi.cash_bank_account=%(account)s and pi.docstatus=1 and account.name = pi.cash_bank_account
and pi.posting_date >= %(from)s and pi.posting_date <= %(to)s
order by
pi.posting_date ASC, pi.name DESC
""",
{"account": account, "from": from_date, "to": to_date},
as_dict=1,
)
pos_sales_invoices = (
frappe.qb.from_(si_payment)
.inner_join(si)
.on(si_payment.parent == si.name)
.inner_join(acc)
.on(si_payment.account == acc.name)
.select(
ConstantColumn("Sales Invoice").as_("payment_document"),
si.name.as_("payment_entry"),
si_payment.reference_no.as_("cheque_number"),
si_payment.amount.as_("debit"),
si.posting_date,
si.customer.as_("against_account"),
si_payment.clearance_date,
acc.account_currency,
ConstantColumn(0).as_("credit"),
)
.where(
(si.docstatus == 1)
& (si_payment.account == account)
& (si.posting_date >= from_date)
& (si.posting_date <= to_date)
)
.orderby(si.posting_date)
.orderby(si.name, order=Order.desc)
).run(as_dict=True)
pi = frappe.qb.DocType("Purchase Invoice")
pos_purchase_invoices = (
frappe.qb.from_(pi)
.inner_join(acc)
.on(pi.cash_bank_account == acc.name)
.select(
ConstantColumn("Purchase Invoice").as_("payment_document"),
pi.name.as_("payment_entry"),
pi.paid_amount.as_("credit"),
pi.posting_date,
pi.supplier.as_("against_account"),
pi.clearance_date,
acc.account_currency,
ConstantColumn(0).as_("debit"),
)
.where(
(pi.docstatus == 1)
& (pi.cash_bank_account == account)
& (pi.posting_date >= from_date)
& (pi.posting_date <= to_date)
)
.orderby(pi.posting_date)
.orderby(pi.name, order=Order.desc)
).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": []
}

View File

@@ -1,39 +1,39 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
cur_frm.add_fetch('bank_account','account','account');
cur_frm.add_fetch('bank_account','bank_account_no','bank_account_no');
cur_frm.add_fetch('bank_account','iban','iban');
cur_frm.add_fetch('bank_account','branch_code','branch_code');
cur_frm.add_fetch('bank','swift_number','swift_number');
cur_frm.add_fetch("bank_account", "account", "account");
cur_frm.add_fetch("bank_account", "bank_account_no", "bank_account_no");
cur_frm.add_fetch("bank_account", "iban", "iban");
cur_frm.add_fetch("bank_account", "branch_code", "branch_code");
cur_frm.add_fetch("bank", "swift_number", "swift_number");
frappe.ui.form.on('Bank Guarantee', {
setup: function(frm) {
frm.set_query("bank", function() {
return {
filters: {
company: frm.doc.company
}
};
});
frm.set_query("bank_account", function() {
frappe.ui.form.on("Bank Guarantee", {
setup: function (frm) {
frm.set_query("bank", function () {
return {
filters: {
company: frm.doc.company,
bank: frm.doc.bank
}
}
},
};
});
frm.set_query("project", function() {
frm.set_query("bank_account", function () {
return {
filters: {
customer: frm.doc.customer
}
company: frm.doc.company,
bank: frm.doc.bank,
},
};
});
frm.set_query("project", function () {
return {
filters: {
customer: frm.doc.customer,
},
};
});
},
bg_type: function(frm) {
bg_type: function (frm) {
if (frm.doc.bg_type == "Receiving") {
frm.set_value("reference_doctype", "Sales Order");
} else if (frm.doc.bg_type == "Providing") {
@@ -41,34 +41,33 @@ frappe.ui.form.on('Bank Guarantee', {
}
},
reference_docname: function(frm) {
reference_docname: function (frm) {
if (frm.doc.reference_docname && frm.doc.reference_doctype) {
let party_field = frm.doc.reference_doctype == "Sales Order" ? "customer" : "supplier";
frappe.call({
method: "erpnext.accounts.doctype.bank_guarantee.bank_guarantee.get_voucher_details",
args: {
"bank_guarantee_type": frm.doc.bg_type,
"reference_name": frm.doc.reference_docname
bank_guarantee_type: frm.doc.bg_type,
reference_name: frm.doc.reference_docname,
},
callback: function(r) {
callback: function (r) {
if (r.message) {
if (r.message[party_field]) frm.set_value(party_field, r.message[party_field]);
if (r.message.project) frm.set_value("project", r.message.project);
if (r.message.grand_total) frm.set_value("amount", r.message.grand_total);
}
}
},
});
}
},
start_date: function(frm) {
start_date: function (frm) {
var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
cur_frm.set_value("end_date", end_date);
},
validity: function(frm) {
validity: function (frm) {
var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
cur_frm.set_value("end_date", end_date);
}
},
});

File diff suppressed because it is too large Load Diff

View File

@@ -48,11 +48,11 @@ class BankGuarantee(Document):
def on_submit(self):
if not self.bank_guarantee_number:
frappe.throw(_("Enter the Bank Guarantee Number before submittting."))
frappe.throw(_("Enter the Bank Guarantee Number before submitting."))
if not self.name_of_beneficiary:
frappe.throw(_("Enter the name of the Beneficiary before submittting."))
frappe.throw(_("Enter the name of the Beneficiary before submitting."))
if not self.bank:
frappe.throw(_("Enter the name of the bank or lending institution before submittting."))
frappe.throw(_("Enter the name of the bank or lending institution before submitting."))
@frappe.whitelist()

View File

@@ -8,21 +8,22 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
return {
filters: {
company: frm.doc.company,
'is_company_account': 1
is_company_account: 1,
},
};
});
let no_bank_transactions_text =
`<div class="text-muted text-center">${__("No Matching Bank Transactions Found")}</div>`
let no_bank_transactions_text = `<div class="text-muted text-center">${__(
"No Matching Bank Transactions Found"
)}</div>`;
set_field_options("no_bank_transactions", no_bank_transactions_text);
},
onload: function (frm) {
// Set default filter dates
let today = frappe.datetime.get_today()
let today = frappe.datetime.get_today();
frm.doc.bank_statement_from_date = frappe.datetime.add_months(today, -1);
frm.doc.bank_statement_to_date = today;
frm.trigger('bank_account');
frm.trigger("bank_account");
},
filter_by_reference_date: function (frm) {
@@ -37,34 +38,27 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
refresh: function (frm) {
frm.disable_save();
frappe.require("bank-reconciliation-tool.bundle.js", () =>
frm.trigger("make_reconciliation_tool")
);
frappe.require("bank-reconciliation-tool.bundle.js", () => frm.trigger("make_reconciliation_tool"));
frm.add_custom_button(__("Upload Bank Statement"), () =>
frappe.call({
method:
"erpnext.accounts.doctype.bank_statement_import.bank_statement_import.upload_bank_statement",
args: {
dt: frm.doc.doctype,
dn: frm.doc.name,
company: frm.doc.company,
bank_account: frm.doc.bank_account,
},
callback: function (r) {
if (!r.exc) {
var doc = frappe.model.sync(r.message);
frappe.set_route(
"Form",
doc[0].doctype,
doc[0].name
);
}
},
})
frappe.call({
method: "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.upload_bank_statement",
args: {
dt: frm.doc.doctype,
dn: frm.doc.name,
company: frm.doc.company,
bank_account: frm.doc.bank_account,
},
callback: function (r) {
if (!r.exc) {
var doc = frappe.model.sync(r.message);
frappe.set_route("Form", doc[0].doctype, doc[0].name);
}
},
})
);
frm.add_custom_button(__('Auto Reconcile'), function() {
frm.add_custom_button(__("Auto Reconcile"), function () {
frappe.call({
method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.auto_reconcile_vouchers",
args: {
@@ -75,33 +69,22 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
from_reference_date: frm.doc.from_reference_date,
to_reference_date: frm.doc.to_reference_date,
},
})
});
});
frm.add_custom_button(__('Get Unreconciled Entries'), function() {
frm.add_custom_button(__("Get Unreconciled Entries"), function () {
frm.trigger("make_reconciliation_tool");
});
frm.change_custom_button_type(__('Get Unreconciled Entries'), null, 'primary');
frm.change_custom_button_type(__("Get Unreconciled Entries"), null, "primary");
},
bank_account: function (frm) {
frappe.db.get_value(
"Bank Account",
frm.doc.bank_account,
"account",
(r) => {
frappe.db.get_value(
"Account",
r.account,
"account_currency",
(r) => {
frm.doc.account_currency = r.account_currency;
frm.trigger("render_chart");
}
);
}
);
frappe.db.get_value("Bank Account", frm.doc.bank_account, "account", (r) => {
frappe.db.get_value("Account", r.account, "account_currency", (r) => {
frm.doc.account_currency = r.account_currency;
frm.trigger("render_chart");
});
});
frm.trigger("get_account_opening_balance");
},
@@ -120,11 +103,7 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
) {
frm.trigger("render_chart");
frm.trigger("render");
frappe.utils.scroll_to(
frm.get_field("reconciliation_tool_cards").$wrapper,
true,
30
);
frappe.utils.scroll_to(frm.get_field("reconciliation_tool_cards").$wrapper, true, 30);
}
});
}
@@ -133,11 +112,10 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
get_account_opening_balance(frm) {
if (frm.doc.bank_account && frm.doc.bank_statement_from_date) {
frappe.call({
method:
"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
args: {
bank_account: frm.doc.bank_account,
till_date: frappe.datetime.add_days(frm.doc.bank_statement_from_date, -1)
till_date: frappe.datetime.add_days(frm.doc.bank_statement_from_date, -1),
},
callback: (response) => {
frm.set_value("account_opening_balance", response.message);
@@ -149,8 +127,7 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
get_cleared_balance(frm) {
if (frm.doc.bank_account && frm.doc.bank_statement_to_date) {
return frappe.call({
method:
"erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
method: "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_account_balance",
args: {
bank_account: frm.doc.bank_account,
till_date: frm.doc.bank_statement_to_date,
@@ -163,41 +140,30 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
},
render_chart(frm) {
frm.cards_manager = new erpnext.accounts.bank_reconciliation.NumberCardManager(
{
$reconciliation_tool_cards: frm.get_field(
"reconciliation_tool_cards"
).$wrapper,
bank_statement_closing_balance:
frm.doc.bank_statement_closing_balance,
cleared_balance: frm.cleared_balance,
currency: frm.doc.account_currency,
}
);
frm.cards_manager = new erpnext.accounts.bank_reconciliation.NumberCardManager({
$reconciliation_tool_cards: frm.get_field("reconciliation_tool_cards").$wrapper,
bank_statement_closing_balance: frm.doc.bank_statement_closing_balance,
cleared_balance: frm.cleared_balance,
currency: frm.doc.account_currency,
});
},
render(frm) {
if (frm.doc.bank_account) {
frm.bank_reconciliation_data_table_manager = new erpnext.accounts.bank_reconciliation.DataTableManager(
{
frm.bank_reconciliation_data_table_manager =
new erpnext.accounts.bank_reconciliation.DataTableManager({
company: frm.doc.company,
bank_account: frm.doc.bank_account,
$reconciliation_tool_dt: frm.get_field(
"reconciliation_tool_dt"
).$wrapper,
$no_bank_transactions: frm.get_field(
"no_bank_transactions"
).$wrapper,
$reconciliation_tool_dt: frm.get_field("reconciliation_tool_dt").$wrapper,
$no_bank_transactions: frm.get_field("no_bank_transactions").$wrapper,
bank_statement_from_date: frm.doc.bank_statement_from_date,
bank_statement_to_date: frm.doc.bank_statement_to_date,
filter_by_reference_date: frm.doc.filter_by_reference_date,
from_reference_date: frm.doc.from_reference_date,
to_reference_date: frm.doc.to_reference_date,
bank_statement_closing_balance:
frm.doc.bank_statement_closing_balance,
bank_statement_closing_balance: frm.doc.bank_statement_closing_balance,
cards_manager: frm.cards_manager,
}
);
});
}
},
});

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
@@ -509,6 +503,18 @@ def check_matching(
to_reference_date,
):
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,24 +526,14 @@ 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(
@@ -551,6 +547,7 @@ def get_queries(
from_reference_date,
to_reference_date,
exact_match,
common_filters,
):
# 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 []
)
@@ -590,6 +588,7 @@ def get_matching_queries(
filter_by_reference_date,
from_reference_date,
to_reference_date,
common_filters,
):
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):
@@ -76,6 +75,7 @@ class TestBankReconciliationTool(AccountsTestMixin, FrappeTestCase):
"deposit": 100,
"bank_account": self.bank_account,
"reference_number": "123",
"currency": "INR",
}
)
.save()

View File

@@ -17,11 +17,9 @@ frappe.ui.form.on("Bank Statement Import", {
frm.import_in_progress = false;
if (data_import !== frm.doc.name) return;
frappe.model.clear_doc("Bank Statement Import", frm.doc.name);
frappe.model
.with_doc("Bank Statement Import", frm.doc.name)
.then(() => {
frm.refresh();
});
frappe.model.with_doc("Bank Statement Import", frm.doc.name).then(() => {
frm.refresh();
});
});
frappe.realtime.on("data_import_progress", (data) => {
frm.import_in_progress = true;
@@ -48,20 +46,9 @@ frappe.ui.form.on("Bank Statement Import", {
: __("Updating {0} of {1}, {2}", message_args);
}
if (data.skipping) {
message = __(
"Skipping {0} of {1}, {2}",
[
data.current,
data.total,
eta_message,
]
);
message = __("Skipping {0} of {1}, {2}", [data.current, data.total, eta_message]);
}
frm.dashboard.show_progress(
__("Import Progress"),
percent,
message
);
frm.dashboard.show_progress(__("Import Progress"), percent, message);
frm.page.set_indicator(__("In Progress"), "orange");
// hide progress when complete
@@ -103,15 +90,12 @@ frappe.ui.form.on("Bank Statement Import", {
frm.trigger("show_report_error_button");
if (frm.doc.status === "Partial Success") {
frm.add_custom_button(__("Export Errored Rows"), () =>
frm.trigger("export_errored_rows")
);
frm.add_custom_button(__("Export Errored Rows"), () => frm.trigger("export_errored_rows"));
}
if (frm.doc.status.includes("Success")) {
frm.add_custom_button(
__("Go to {0} List", [__(frm.doc.reference_doctype)]),
() => frappe.set_route("List", frm.doc.reference_doctype)
frm.add_custom_button(__("Go to {0} List", [__(frm.doc.reference_doctype)]), () =>
frappe.set_route("List", frm.doc.reference_doctype)
);
}
},
@@ -128,13 +112,8 @@ frappe.ui.form.on("Bank Statement Import", {
frm.disable_save();
if (frm.doc.status !== "Success") {
if (!frm.is_new() && frm.has_import_file()) {
let label =
frm.doc.status === "Pending"
? __("Start Import")
: __("Retry");
frm.page.set_primary_action(label, () =>
frm.events.start_import(frm)
);
let label = frm.doc.status === "Pending" ? __("Start Import") : __("Retry");
frm.page.set_primary_action(label, () => frm.events.start_import(frm));
} else {
frm.page.set_primary_action(__("Save"), () => frm.save());
}
@@ -176,24 +155,24 @@ frappe.ui.form.on("Bank Statement Import", {
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} 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
);
"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} 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
);
"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);
@@ -236,8 +215,7 @@ frappe.ui.form.on("Bank Statement Import", {
},
download_template() {
let method =
"/api/method/frappe.core.doctype.data_import.data_import.download_template";
let method = "/api/method/frappe.core.doctype.data_import.data_import.download_template";
open_url_post(method, {
doctype: "Bank Transaction",
@@ -250,7 +228,7 @@ frappe.ui.form.on("Bank Statement Import", {
"description",
"reference_number",
"bank_account",
"currency"
"currency",
],
},
});
@@ -321,10 +299,7 @@ frappe.ui.form.on("Bank Statement Import", {
show_import_preview(frm, preview_data) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
if (
frm.import_preview &&
frm.import_preview.doctype === frm.doc.reference_doctype
) {
if (frm.import_preview && frm.import_preview.doctype === frm.doc.reference_doctype) {
frm.import_preview.preview_data = preview_data;
frm.import_preview.import_log = import_log;
frm.import_preview.refresh();
@@ -340,19 +315,10 @@ frappe.ui.form.on("Bank Statement Import", {
frm,
events: {
remap_column(changed_map) {
let template_options = JSON.parse(
frm.doc.template_options || "{}"
);
template_options.column_to_field_map =
template_options.column_to_field_map || {};
Object.assign(
template_options.column_to_field_map,
changed_map
);
frm.set_value(
"template_options",
JSON.stringify(template_options)
);
let template_options = JSON.parse(frm.doc.template_options || "{}");
template_options.column_to_field_map = template_options.column_to_field_map || {};
Object.assign(template_options.column_to_field_map, changed_map);
frm.set_value("template_options", JSON.stringify(template_options));
frm.save().then(() => frm.trigger("import_file"));
},
},
@@ -386,8 +352,7 @@ frappe.ui.form.on("Bank Statement Import", {
let other_warnings = [];
for (let warning of warnings) {
if (warning.row) {
warnings_by_row[warning.row] =
warnings_by_row[warning.row] || [];
warnings_by_row[warning.row] = warnings_by_row[warning.row] || [];
warnings_by_row[warning.row].push(warning);
} else {
other_warnings.push(warning);
@@ -402,9 +367,7 @@ frappe.ui.form.on("Bank Statement Import", {
if (w.field) {
let label =
w.field.label +
(w.field.parent !== frm.doc.reference_doctype
? ` (${w.field.parent})`
: "");
(w.field.parent !== frm.doc.reference_doctype ? ` (${w.field.parent})` : "");
return `<li>${label}: ${w.message}</li>`;
}
return `<li>${w.message}</li>`;
@@ -423,10 +386,9 @@ frappe.ui.form.on("Bank Statement Import", {
.map((warning) => {
let header = "";
if (warning.col) {
let column_number = `<span class="text-uppercase">${__(
"Column {0}",
[warning.col]
)}</span>`;
let column_number = `<span class="text-uppercase">${__("Column {0}", [
warning.col,
])}</span>`;
let column_header = columns[warning.col].header_title;
header = `${column_number} (${column_header})`;
}
@@ -465,36 +427,28 @@ frappe.ui.form.on("Bank Statement Import", {
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>`,
]
);
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>`,
]
);
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>`
: "";
let title = m.title ? `<strong>${m.title}</strong>` : "";
let message = m.message ? `<div>${m.message}</div>` : "";
return title + message;
})
.join("");

View File

@@ -202,7 +202,7 @@
],
"hide_toolbar": 1,
"links": [],
"modified": "2022-09-07 11:11:40.293317",
"modified": "2024-03-27 13:06:38.098765",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Statement Import",
@@ -221,7 +221,8 @@
"write": 1
}
],
"sort_field": "modified",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

View File

@@ -45,7 +45,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 +54,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 +68,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
)
@@ -80,7 +78,8 @@ class BankStatementImport(DataImport):
from frappe.utils.background_jobs import is_job_enqueued
from frappe.utils.scheduler import is_scheduler_inactive
if is_scheduler_inactive() and not frappe.flags.in_test:
run_now = frappe.flags.in_test or frappe.conf.developer_mode
if is_scheduler_inactive() and not run_now:
frappe.throw(_("Scheduler is inactive. Cannot import data."), title=_("Scheduler Inactive"))
job_id = f"bank_statement_import::{self.name}"
@@ -97,7 +96,7 @@ class BankStatementImport(DataImport):
google_sheets_url=self.google_sheets_url,
bank=self.bank,
template_options=self.template_options,
now=frappe.conf.developer_mode or frappe.flags.in_test,
now=run_now,
)
return True
@@ -125,7 +124,7 @@ def download_errored_template(data_import_name):
def parse_data_from_template(raw_data):
data = []
for i, row in enumerate(raw_data):
for _i, row in enumerate(raw_data):
if all(v in INVALID_VALUES for v in row):
# empty row
continue
@@ -135,9 +134,7 @@ def parse_data_from_template(raw_data):
return data
def start_import(
data_import, bank_account, import_file_path, google_sheets_url, bank, template_options
):
def start_import(data_import, bank_account, import_file_path, google_sheets_url, bank, template_options):
"""This method runs in background job"""
update_mapping_db(bank, template_options)
@@ -148,6 +145,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)

View File

@@ -1,36 +1,34 @@
let imports_in_progress = [];
frappe.listview_settings['Bank Statement Import'] = {
frappe.listview_settings["Bank Statement Import"] = {
onload(listview) {
frappe.realtime.on('data_import_progress', data => {
frappe.realtime.on("data_import_progress", (data) => {
if (!imports_in_progress.includes(data.data_import)) {
imports_in_progress.push(data.data_import);
}
});
frappe.realtime.on('data_import_refresh', data => {
imports_in_progress = imports_in_progress.filter(
d => d !== data.data_import
);
frappe.realtime.on("data_import_refresh", (data) => {
imports_in_progress = imports_in_progress.filter((d) => d !== data.data_import);
listview.refresh();
});
},
get_indicator: function(doc) {
get_indicator: function (doc) {
var colors = {
'Pending': 'orange',
'Not Started': 'orange',
'Partial Success': 'orange',
'Success': 'green',
'In Progress': 'orange',
'Error': 'red'
Pending: "orange",
"Not Started": "orange",
"Partial Success": "orange",
Success: "green",
"In Progress": "orange",
Error: "red",
};
let status = doc.status;
if (imports_in_progress.includes(doc.name)) {
status = 'In Progress';
status = "In Progress";
}
if (status == 'Pending') {
status = 'Not Started';
if (status == "Pending") {
status = "Not Started";
}
return [__(status), colors[status], 'status,=,' + doc.status];
return [__(status), colors[status], "status,=," + doc.status];
},
hide_name_column: true
hide_name_column: true,
};

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)
@@ -97,7 +95,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 +103,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 +128,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 +145,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

@@ -3,7 +3,7 @@
frappe.ui.form.on("Bank Transaction", {
onload(frm) {
frm.set_query("payment_document", "payment_entries", function() {
frm.set_query("payment_document", "payment_entries", function () {
const payment_doctypes = frm.events.get_payment_doctypes(frm);
return {
filters: {
@@ -23,7 +23,7 @@ frappe.ui.form.on("Bank Transaction", {
set_bank_statement_filter(frm);
},
setup: function(frm) {
setup: function (frm) {
frm.set_query("party_type", function () {
return {
filters: {
@@ -33,16 +33,10 @@ frappe.ui.form.on("Bank Transaction", {
});
},
get_payment_doctypes: function() {
get_payment_doctypes: function () {
// get payment doctypes from all the apps
return [
"Payment Entry",
"Journal Entry",
"Sales Invoice",
"Purchase Invoice",
"Bank Transaction",
];
}
return ["Payment Entry", "Journal Entry", "Sales Invoice", "Purchase Invoice", "Bank Transaction"];
},
});
frappe.ui.form.on("Bank Transaction Payments", {
@@ -54,10 +48,11 @@ frappe.ui.form.on("Bank Transaction Payments", {
const update_clearance_date = (frm, cdt, cdn) => {
if (frm.doc.docstatus === 1) {
frappe
.xcall(
"erpnext.accounts.doctype.bank_transaction.bank_transaction.unclear_reference_payment",
{ doctype: cdt, docname: cdn, bt_name: frm.doc.name }
)
.xcall("erpnext.accounts.doctype.bank_transaction.bank_transaction.unclear_reference_payment", {
doctype: cdt,
docname: cdn,
bt_name: frm.doc.name,
})
.then((e) => {
if (e == "success") {
frappe.show_alert({

View File

@@ -3,6 +3,7 @@
import frappe
from frappe import _
from frappe.model.docstatus import DocStatus
from frappe.model.document import Document
from frappe.utils import flt
@@ -48,6 +49,26 @@ class BankTransaction(Document):
def validate(self):
self.validate_duplicate_references()
self.validate_currency()
def validate_currency(self):
"""
Bank Transaction should be on the same currency as the Bank Account.
"""
if self.currency and self.bank_account:
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),
)
)
def set_status(self):
if self.docstatus == 2:
@@ -75,10 +96,13 @@ class BankTransaction(Document):
pe.append(reference)
def update_allocated_amount(self):
self.allocated_amount = (
allocated_amount = (
sum(p.allocated_amount for p in self.payment_entries) if self.payment_entries else 0.0
)
self.unallocated_amount = abs(flt(self.withdrawal) - flt(self.deposit)) - self.allocated_amount
unallocated_amount = abs(flt(self.withdrawal) - flt(self.deposit)) - allocated_amount
self.allocated_amount = flt(allocated_amount, self.precision("allocated_amount"))
self.unallocated_amount = flt(unallocated_amount, self.precision("unallocated_amount"))
def before_submit(self):
self.allocate_payment_entries()
@@ -158,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):
@@ -213,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,
@@ -310,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)
@@ -349,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(
@@ -361,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"
)
@@ -415,3 +432,21 @@ def unclear_reference_payment(doctype, docname, bt_name):
bt = frappe.get_doc("Bank Transaction", bt_name)
set_voucher_clearance(doctype, docname, None, bt)
return docname
def remove_from_bank_transaction(doctype, docname):
"""Remove a (cancelled) voucher from all Bank Transactions."""
for bt_name in get_reconciled_bank_transactions(doctype, docname):
bt = frappe.get_doc("Bank Transaction", bt_name)
if bt.docstatus == DocStatus.cancelled():
continue
modified = False
for pe in bt.payment_entries:
if pe.payment_document == doctype and pe.payment_entry == docname:
bt.remove(pe)
modified = True
if modified:
bt.save()

View File

@@ -1,15 +1,15 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
frappe.listview_settings['Bank Transaction'] = {
frappe.listview_settings["Bank Transaction"] = {
add_fields: ["unallocated_amount"],
get_indicator: function(doc) {
if(doc.docstatus == 2) {
get_indicator: function (doc) {
if (doc.docstatus == 2) {
return [__("Cancelled"), "red", "docstatus,=,2"];
} else if(flt(doc.unallocated_amount)<=0) {
} else if (flt(doc.unallocated_amount) <= 0) {
return [__("Reconciled"), "green", "unallocated_amount,=,0"];
} else if(flt(doc.unallocated_amount)>0) {
} else if (flt(doc.unallocated_amount) > 0) {
return [__("Unreconciled"), "orange", "unallocated_amount,>,0"];
}
}
},
};

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

@@ -2,10 +2,10 @@
# See license.txt
import json
import unittest
import frappe
from frappe import utils
from frappe.model.docstatus import DocStatus
from frappe.tests.utils import FrappeTestCase
from erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool import (
@@ -32,8 +32,16 @@ class TestBankTransaction(FrappeTestCase):
frappe.db.delete(dt)
clear_loan_transactions()
make_pos_profile()
add_transactions()
add_vouchers()
# generate and use a uniq hash identifier for 'Bank Account' and it's linked GL 'Account' to avoid validation error
uniq_identifier = frappe.generate_hash(length=10)
gl_account = create_gl_account("_Test Bank " + uniq_identifier)
bank_account = create_bank_account(
gl_account=gl_account, bank_account_name="Checking Account " + uniq_identifier
)
add_transactions(bank_account=bank_account)
add_vouchers(gl_account=gl_account)
# This test checks if ERPNext is able to provide a linked payment for a bank transaction based on the amount of the bank transaction.
def test_linked_payments(self):
@@ -81,6 +89,29 @@ class TestBankTransaction(FrappeTestCase):
clearance_date = frappe.db.get_value("Payment Entry", payment.name, "clearance_date")
self.assertFalse(clearance_date)
def test_cancel_voucher(self):
bank_transaction = frappe.get_doc(
"Bank Transaction",
dict(description="1512567 BG/000003025 OPSKATTUZWXXX AT776000000098709849 Herr G"),
)
payment = frappe.get_doc("Payment Entry", dict(party="Mr G", paid_amount=1700))
vouchers = json.dumps(
[
{
"payment_doctype": "Payment Entry",
"payment_name": payment.name,
"amount": bank_transaction.unallocated_amount,
}
]
)
reconcile_vouchers(bank_transaction.name, vouchers)
payment.reload()
payment.cancel()
bank_transaction.reload()
self.assertEqual(bank_transaction.docstatus, DocStatus.submitted())
self.assertEqual(bank_transaction.unallocated_amount, 1700)
self.assertEqual(bank_transaction.payment_entries, [])
# Check if ERPNext can correctly filter a linked payments based on the debit/credit amount
def test_debit_credit_output(self):
bank_transaction = frappe.get_doc(
@@ -196,7 +227,9 @@ def clear_loan_transactions():
frappe.db.delete("Loan Repayment")
def create_bank_account(bank_name="Citi Bank", account_name="_Test Bank - _TC"):
def create_bank_account(
bank_name="Citi Bank", gl_account="_Test Bank - _TC", bank_account_name="Checking Account"
):
try:
frappe.get_doc(
{
@@ -208,21 +241,35 @@ def create_bank_account(bank_name="Citi Bank", account_name="_Test Bank - _TC"):
pass
try:
frappe.get_doc(
bank_account = frappe.get_doc(
{
"doctype": "Bank Account",
"account_name": "Checking Account",
"account_name": bank_account_name,
"bank": bank_name,
"account": account_name,
"account": gl_account,
}
).insert(ignore_if_duplicate=True)
except frappe.DuplicateEntryError:
pass
return bank_account.name
def add_transactions():
create_bank_account()
def create_gl_account(gl_account_name="_Test Bank - _TC"):
gl_account = frappe.get_doc(
{
"doctype": "Account",
"company": "_Test Company",
"parent_account": "Current Assets - _TC",
"account_type": "Bank",
"is_group": 0,
"account_name": gl_account_name,
}
).insert()
return gl_account.name
def add_transactions(bank_account="_Test Bank - _TC"):
doc = frappe.get_doc(
{
"doctype": "Bank Transaction",
@@ -230,7 +277,7 @@ def add_transactions():
"date": "2018-10-23",
"deposit": 1200,
"currency": "INR",
"bank_account": "Checking Account - Citi Bank",
"bank_account": bank_account,
}
).insert()
doc.submit()
@@ -242,7 +289,7 @@ def add_transactions():
"date": "2018-10-23",
"deposit": 1700,
"currency": "INR",
"bank_account": "Checking Account - Citi Bank",
"bank_account": bank_account,
}
).insert()
doc.submit()
@@ -254,7 +301,7 @@ def add_transactions():
"date": "2018-10-26",
"withdrawal": 690,
"currency": "INR",
"bank_account": "Checking Account - Citi Bank",
"bank_account": bank_account,
}
).insert()
doc.submit()
@@ -266,7 +313,7 @@ def add_transactions():
"date": "2018-10-27",
"deposit": 3900,
"currency": "INR",
"bank_account": "Checking Account - Citi Bank",
"bank_account": bank_account,
}
).insert()
doc.submit()
@@ -278,13 +325,13 @@ def add_transactions():
"date": "2018-10-27",
"withdrawal": 109080,
"currency": "INR",
"bank_account": "Checking Account - Citi Bank",
"bank_account": bank_account,
}
).insert()
doc.submit()
def add_vouchers():
def add_vouchers(gl_account="_Test Bank - _TC"):
try:
frappe.get_doc(
{
@@ -300,7 +347,7 @@ def add_vouchers():
pi = make_purchase_invoice(supplier="Conrad Electronic", qty=1, rate=690)
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank - _TC")
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account=gl_account)
pe.reference_no = "Conrad Oct 18"
pe.reference_date = "2018-10-24"
pe.insert()
@@ -319,14 +366,14 @@ def add_vouchers():
pass
pi = make_purchase_invoice(supplier="Mr G", qty=1, rate=1200)
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank - _TC")
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account=gl_account)
pe.reference_no = "Herr G Oct 18"
pe.reference_date = "2018-10-24"
pe.insert()
pe.submit()
pi = make_purchase_invoice(supplier="Mr G", qty=1, rate=1700)
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank - _TC")
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account=gl_account)
pe.reference_no = "Herr G Nov 18"
pe.reference_date = "2018-11-01"
pe.insert()
@@ -357,10 +404,10 @@ def add_vouchers():
pass
pi = make_purchase_invoice(supplier="Poore Simon's", qty=1, rate=3900, is_paid=1, do_not_save=1)
pi.cash_bank_account = "_Test Bank - _TC"
pi.cash_bank_account = gl_account
pi.insert()
pi.submit()
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank - _TC")
pe = get_payment_entry("Purchase Invoice", pi.name, bank_account=gl_account)
pe.reference_no = "Poore Simon's Oct 18"
pe.reference_date = "2018-10-28"
pe.paid_amount = 690
@@ -369,7 +416,7 @@ def add_vouchers():
pe.submit()
si = create_sales_invoice(customer="Poore Simon's", qty=1, rate=3900)
pe = get_payment_entry("Sales Invoice", si.name, bank_account="_Test Bank - _TC")
pe = get_payment_entry("Sales Invoice", si.name, bank_account=gl_account)
pe.reference_no = "Poore Simon's Oct 18"
pe.reference_date = "2018-10-28"
pe.insert()
@@ -389,19 +436,13 @@ def add_vouchers():
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"}
):
mode_of_payment.append(
"accounts", {"company": "_Test Company", "default_account": "_Test Bank - _TC"}
)
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()
si = create_sales_invoice(customer="Fayva", qty=1, rate=109080, do_not_save=1)
si.is_pos = 1
si.append(
"payments", {"mode_of_payment": "Cash", "account": "_Test Bank - _TC", "amount": 109080}
)
si.append("payments", {"mode_of_payment": "Cash", "account": gl_account, "amount": 109080})
si.insert()
si.submit()

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

@@ -6,18 +6,18 @@ frappe.ui.form.on("Bisect Accounting Statements", {
frm.trigger("render_heatmap");
},
refresh(frm) {
frm.add_custom_button(__('Bisect Left'), () => {
frm.add_custom_button(__("Bisect Left"), () => {
frm.trigger("bisect_left");
});
frm.add_custom_button(__('Bisect Right'), () => {
frm.add_custom_button(__("Bisect Right"), () => {
frm.trigger("bisect_right");
});
frm.add_custom_button(__('Up'), () => {
frm.add_custom_button(__("Up"), () => {
frm.trigger("move_up");
});
frm.add_custom_button(__('Build Tree'), () => {
frm.add_custom_button(__("Build Tree"), () => {
frm.trigger("build_tree");
});
},
@@ -26,16 +26,16 @@ frappe.ui.form.on("Bisect Accounting Statements", {
bisect_heatmap.addClass("bisect_heatmap_location");
// milliseconds in a day
let msiad=24*60*60*1000;
let msiad = 24 * 60 * 60 * 1000;
let datapoints = {};
let fr_dt = new Date(frm.doc.from_date).getTime();
let to_dt = new Date(frm.doc.to_date).getTime();
let bisect_start = new Date(frm.doc.current_from_date).getTime();
let bisect_end = new Date(frm.doc.current_to_date).getTime();
for(let x=fr_dt; x <= to_dt; x+=msiad){
let epoch_in_seconds = x/1000;
if ((bisect_start <= x) && (x <= bisect_end )) {
for (let x = fr_dt; x <= to_dt; x += msiad) {
let epoch_in_seconds = x / 1000;
if (bisect_start <= x && x <= bisect_end) {
datapoints[epoch_in_seconds] = 1.0;
} else {
datapoints[epoch_in_seconds] = 0.0;
@@ -49,19 +49,19 @@ frappe.ui.form.on("Bisect Accounting Statements", {
start: new Date(frm.doc.from_date),
end: new Date(frm.doc.to_date),
},
countLabel: 'Bisecting',
countLabel: "Bisecting",
discreteDomains: 1,
});
},
bisect_left(frm) {
frm.call({
doc: frm.doc,
method: 'bisect_left',
method: "bisect_left",
freeze: true,
freeze_message: __("Bisecting Left ..."),
callback: (r) => {
frm.trigger("render_heatmap");
}
},
});
},
bisect_right(frm) {
@@ -69,10 +69,10 @@ frappe.ui.form.on("Bisect Accounting Statements", {
doc: frm.doc,
freeze: true,
freeze_message: __("Bisecting Right ..."),
method: 'bisect_right',
method: "bisect_right",
callback: (r) => {
frm.trigger("render_heatmap");
}
},
});
},
move_up(frm) {
@@ -80,10 +80,10 @@ frappe.ui.form.on("Bisect Accounting Statements", {
doc: frm.doc,
freeze: true,
freeze_message: __("Moving up in tree ..."),
method: 'move_up',
method: "move_up",
callback: (r) => {
frm.trigger("render_heatmap");
}
},
});
},
build_tree(frm) {
@@ -91,10 +91,10 @@ frappe.ui.form.on("Bisect Accounting Statements", {
doc: frm.doc,
freeze: true,
freeze_message: __("Rebuilding BTree for period ..."),
method: 'build_tree',
method: "build_tree",
callback: (r) => {
frm.trigger("render_heatmap");
}
},
});
},
});

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

@@ -138,10 +138,11 @@ class BisectAccountingStatements(Document):
# set root as current node
root = frappe.db.get_all("Bisect Nodes", filters={"root": ["is", "not set"]})[0]
self.get_report_summary()
self.current_node = root.name
self.current_from_date = self.from_date
self.current_to_date = self.to_date
self.get_report_summary()
self.save()
def get_report_summary(self):

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

@@ -2,48 +2,48 @@
// For license information, please see license.txt
frappe.provide("erpnext.accounts.dimensions");
frappe.ui.form.on('Budget', {
onload: function(frm) {
frm.set_query("account", "accounts", function() {
frappe.ui.form.on("Budget", {
onload: function (frm) {
frm.set_query("account", "accounts", function () {
return {
filters: {
company: frm.doc.company,
report_type: "Profit and Loss",
is_group: 0
}
is_group: 0,
},
};
});
frm.set_query("monthly_distribution", function() {
frm.set_query("monthly_distribution", function () {
return {
filters: {
fiscal_year: frm.doc.fiscal_year
}
fiscal_year: frm.doc.fiscal_year,
},
};
});
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
refresh: function(frm) {
frm.trigger("toggle_reqd_fields")
refresh: function (frm) {
frm.trigger("toggle_reqd_fields");
},
budget_against: function(frm) {
frm.trigger("set_null_value")
frm.trigger("toggle_reqd_fields")
budget_against: function (frm) {
frm.trigger("set_null_value");
frm.trigger("toggle_reqd_fields");
},
set_null_value: function(frm) {
if(frm.doc.budget_against == 'Cost Center') {
frm.set_value('project', null)
set_null_value: function (frm) {
if (frm.doc.budget_against == "Cost Center") {
frm.set_value("project", null);
} else {
frm.set_value('cost_center', null)
frm.set_value("cost_center", null);
}
},
toggle_reqd_fields: function(frm) {
frm.toggle_reqd("cost_center", frm.doc.budget_against=="Cost Center");
frm.toggle_reqd("project", frm.doc.budget_against=="Project");
}
toggle_reqd_fields: function (frm) {
frm.toggle_reqd("cost_center", frm.doc.budget_against == "Cost Center");
frm.toggle_reqd("project", frm.doc.budget_against == "Project");
},
});

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"
)

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