Compare commits

...

1120 Commits

Author SHA1 Message Date
Ankush Menat
d3117cca0c perf: add indexes on payment entry reference
Adds index on:
1. reference doctype
2. reference name

*Why not composite index?*

There are three type of queries on this doctype

- filtering ref_doctype - doctype index helps here
- filtering ref_name - name index helps here
- filtering both - name index helps here too. Since it has sufficiently
  high cardinality. Composite index wont help in case where ref_doctype
  isn't specfied.
2022-12-12 12:32:14 +05:30
rohitwaghchaure
7cbb6c4de9 Merge pull request #33236 from rohitwaghchaure/feat-warehouse-wise-stock-balance
feat: warehouse wise stock balance
2022-12-06 17:58:31 +05:30
Deepesh Garg
b602a0dcb0 Merge pull request #33146 from barredterra/reload-currency-exchange-settings
fix: reload Currency Exchange Settings in patch
2022-12-06 17:38:13 +05:30
Deepesh Garg
26adbc6282 Merge pull request #33192 from deepeshgarg007/bundle_item_rates
fix: Bundle item rates
2022-12-06 17:37:22 +05:30
Rohit Waghchaure
861aa9e08a feat: warehouse wise stock balance 2022-12-06 17:33:33 +05:30
Deepesh Garg
c1a82dc9e5 Merge pull request #33191 from ruthra-kumar/key_error_in_profit_loss_report
fix: key error while filtering on date range and reporting on foreign currency
2022-12-06 15:42:53 +05:30
Deepesh Garg
b1242bc56c chore: Update tests 2022-12-06 15:14:48 +05:30
Deepesh Garg
af1f98e188 Merge branch 'develop' of https://github.com/frappe/erpnext into bundle_item_rates 2022-12-06 13:59:51 +05:30
Deepesh Garg
e5566b31d5 chore: Consider bundle qty as well 2022-12-06 13:59:45 +05:30
ruthra kumar
a6794c3606 fix: key error on p/l and balance sheet reports on foreign currency 2022-12-06 13:48:46 +05:30
ruthra kumar
19db7e2989 fix: replace sql code with fields list in get_cached_value 2022-12-06 13:48:46 +05:30
Ankush Menat
d23b5d8f2f ci: use mariadb 10.6 (#33220)
https://github.com/frappe/frappe/pull/19116

[skip ci]
2022-12-06 12:58:07 +05:30
Deepesh Garg
01b84a9751 Merge pull request #33194 from barredterra/validate-employee-dates
refactor: validate dates in Employee
2022-12-06 12:34:15 +05:30
Deepesh Garg
3aa6f97420 Merge pull request #33216 from barredterra/validate-accounts-dates
refactor: validate dates in accounts module
2022-12-06 12:33:01 +05:30
Deepesh Garg
63393fa503 Merge pull request #33217 from barredterra/validate-project-dates
refactor: validate dates in project and task
2022-12-06 12:32:27 +05:30
Deepesh Garg
921f8edde8 Merge pull request #33219 from deepeshgarg007/internal_transfer_editable_rate
fix: Allow item rate updates for non-stock invoices
2022-12-06 09:12:24 +05:30
Raffael Meyer
5853b80d25 Merge branch 'develop' into reload-currency-exchange-settings 2022-12-06 02:30:55 +01:00
Raffael Meyer
8301d3b13f Merge branch 'develop' into key_error_in_profit_loss_report 2022-12-06 02:08:47 +01:00
barredterra
a26a29f33b fix: incorrect dates in test records 2022-12-05 19:49:05 +01:00
Raffael Meyer
a074ffa880 Merge branch 'develop' into validate-employee-dates 2022-12-05 19:38:01 +01:00
Raffael Meyer
e526a0e282 Merge branch 'develop' into validate-accounts-dates 2022-12-05 19:37:54 +01:00
Raffael Meyer
a2abc879c9 Merge branch 'develop' into validate-project-dates 2022-12-05 19:37:46 +01:00
rohitwaghchaure
d0478ec3b8 Merge pull request #33224 from rohitwaghchaure/fixed-partial-work-order-incorrect-batch-picked
fix: non empty FG batch picked while completing work order
2022-12-05 20:29:19 +05:30
Rohit Waghchaure
713330cbf6 fix: non empty FG batch picked while completing work order 2022-12-05 18:15:13 +05:30
ruthra kumar
7bd0e977bf Merge pull request #33222 from ruthra-kumar/data_import_errors_for_sales_invoice
fix: data import mandatory account_head, charge_type
2022-12-05 16:56:43 +05:30
ruthra kumar
3814db02eb fix: data import mandatory account_head, charge_type 2022-12-05 16:24:05 +05:30
Deepesh Garg
ef9d126254 fix: Allow item rate udpates for non-stock invoices 2022-12-05 10:17:19 +05:30
barredterra
31db0e7c79 refactor: validate parent_expected_end_date in Task 2022-12-04 15:28:38 +01:00
barredterra
2c4eb371a6 refactor: validate dates in project and task 2022-12-04 15:15:07 +01:00
barredterra
eb66b749b2 refactor: validate dates in accounts module 2022-12-04 14:41:21 +01:00
Raffael Meyer
083a954b5d Merge branch 'develop' into validate-employee-dates 2022-12-04 14:30:51 +01:00
rohitwaghchaure
66dbf94151 Merge pull request #33199 from s-aga-r/refactor/warehouse-tree
refactor: remove `balance` from `Warehouse Tree`
2022-12-02 14:24:07 +05:30
rohitwaghchaure
295ce0e8e9 Merge pull request #33193 from rohitwaghchaure/clear-repost-logs
fix: clear repost logs using Log Settings
2022-12-02 13:55:59 +05:30
Rohit Waghchaure
2cce6f2a34 fix: test case 2022-12-02 12:43:31 +05:30
Sagar Sharma
b3ae6cc4b9 Merge branch 'develop' into refactor/warehouse-tree 2022-12-02 10:58:33 +05:30
Deepesh Garg
2058fac177 Merge pull request #33195 from ruthra-kumar/type_error_on_sales_pipeline_report
fix: type error on Sales Pipeline Analytics
2022-12-02 10:10:36 +05:30
Rohit Waghchaure
5949a7ecff fix: default clear repost logs 2022-12-01 23:35:21 +05:30
s-aga-r
3ce8386ca3 refactor: remove balance from Warehouse Tree 2022-12-01 19:44:49 +05:30
Deepesh Garg
2106de0fa5 Merge pull request #33170 from deepeshgarg007/se_alert_develop
fix(UX): Alert on change of item rate in Stock Entry
2022-12-01 18:16:55 +05:30
Deepesh Garg
9ddd838f2d Merge pull request #33183 from deepeshgarg007/month_end_due_date
fix: Due date for month end payment term
2022-12-01 18:16:13 +05:30
Deepesh Garg
8d36328544 Merge pull request #33182 from deepeshgarg007/invalid_message_fix
fix: Error on making stock entry from material request
2022-12-01 18:15:29 +05:30
ruthra kumar
4856e750f9 fix: type error on Sales Pipeline Analytics 2022-12-01 18:08:32 +05:30
barredterra
03f7bfbbde refactor: validate dates 2022-12-01 12:42:03 +01:00
Deepesh Garg
826f45ad60 fix: Bundle item rates 2022-12-01 16:11:10 +05:30
ruthra kumar
9b8d6fe411 fix: key error while filtering on date range and different currency 2022-12-01 13:38:41 +05:30
Anand Baburajan
5b1743330d Merge branch 'develop' into invalid_message_fix 2022-12-01 12:35:04 +05:30
Anand Baburajan
2886d8ab5a Merge branch 'develop' into month_end_due_date 2022-12-01 12:34:51 +05:30
Deepesh Garg
5b1798363c Merge pull request #33091 from ssiyad/fix/pos/partial_return_amount
fix(pos): partial return amount update
2022-12-01 11:41:53 +05:30
Sagar Sharma
d892e27289 Merge branch 'develop' into se_alert_develop 2022-12-01 10:37:52 +05:30
Sagar Sharma
93f29d8f08 Merge branch 'develop' into invalid_message_fix 2022-12-01 09:24:40 +05:30
Sagar Sharma
9a8f3f4280 Merge pull request #33185 from AnandBaburajan/asset_last_day_test_bug
fix: use is_last_day_of_the_month in test_scrap_asset
2022-12-01 09:23:13 +05:30
anandbaburajan
827ad01d4f chore: style 2022-11-30 23:57:26 +05:30
Anand Baburajan
ba38001116 Merge branch 'develop' into asset_last_day_test_bug 2022-11-30 23:53:21 +05:30
anandbaburajan
25522444b8 fix: use is_last_day_of_the_month in test_scrap_asset 2022-11-30 23:25:40 +05:30
Sagar Sharma
0e8edd1ee9 Merge branch 'develop' into se_alert_develop 2022-11-30 22:03:31 +05:30
Deepesh Garg
bfb81ef56f fix: Due date for month end payment term 2022-11-30 20:53:41 +05:30
Deepesh Garg
64e5a79a91 fix: Error on making stock entry from material request 2022-11-30 19:35:30 +05:30
Sabu Siyad
c5edbe2e2f fix(lint): trailing whitespace
Signed-off-by: Sabu Siyad <hello@ssiyad.com>
2022-11-30 17:12:06 +05:30
Deepesh Garg
12637cda84 Merge pull request #33174 from s-aga-r/fix/github-issue/33102
fix: add company filter in RFQ Items
2022-11-30 10:36:18 +05:30
Sagar Sharma
43d08b4c74 Merge branch 'develop' into se_alert_develop 2022-11-30 10:15:31 +05:30
s-aga-r
ca0485a503 fix: add company filter in RFQ Items 2022-11-30 10:03:36 +05:30
Deepesh Garg
4bd9289d7d fix(UX): Alert on change of item rate in Stock Entry 2022-11-29 19:21:48 +05:30
Deepesh Garg
2e2590b224 Merge pull request #33162 from deepeshgarg007/tds_report_updates
fix: Tax withholding net total for PI in reports
2022-11-29 18:50:21 +05:30
Deepesh Garg
3eb1ed19a1 fix: Tax withholding net total for PI in reports 2022-11-29 13:10:31 +05:30
Sagar Sharma
bfd7a97ea9 Merge pull request #33136 from s-aga-r/repost-item-valuation
fix: reset `voucher_type` and `voucher_no` if `based_on` is set to `Transaction`
2022-11-29 12:13:46 +05:30
Sagar Sharma
ce7720b14c Merge branch 'develop' into repost-item-valuation 2022-11-29 11:03:22 +05:30
rohitwaghchaure
6dd84cb977 Merge pull request #33013 from rtdany10/riv-validation
fix: validate repost item valuation against accounts freeze date
2022-11-29 10:40:48 +05:30
Deepesh Garg
a7b7d0d99d Merge pull request #33116 from shariquerik/show-batch-selector-only-once
fix: only show serial no batch selector only once
2022-11-29 10:20:30 +05:30
Deepesh Garg
8253f4379f Merge pull request #33098 from ssiyad/fix/pos/warehouse_selection
fix(pos): warehouse selection
2022-11-29 10:15:31 +05:30
Deepesh Garg
56b96f0a9c Merge branch 'develop' into fix/pos/partial_return_amount 2022-11-29 10:12:29 +05:30
Deepesh Garg
bdb15c3331 Merge pull request #33112 from ssiyad/fix/pos/customer_group_filter
fix(pos): filter on customer groups
2022-11-29 09:55:56 +05:30
Deepesh Garg
8287fb5104 Merge pull request #33143 from deepeshgarg007/auto_repeat_dates
fix: Auto repeat date validations
2022-11-29 09:28:19 +05:30
Deepesh Garg
8112493c3c Merge pull request #33138 from deepeshgarg007/bank_reco_button_fix
fix(ux): Action buttons in Bank Reconciliation
2022-11-29 09:23:21 +05:30
rohitwaghchaure
a222b0a6ae Merge pull request #33144 from rohitwaghchaure/fixed-incorrect-stock-balance-qty
fix: incorrect balance qty
2022-11-29 08:48:03 +05:30
barredterra
06e094b5fc fix: reload currency exchange settings 2022-11-28 22:58:31 +01:00
Rohit Waghchaure
b606a9684b test: test case for serialized batched item 2022-11-29 00:08:07 +05:30
Rohit Waghchaure
b2105a8be7 fix: incorrect balance qty 2022-11-28 23:13:30 +05:30
Deepesh Garg
6a47fb6c9e chore: Update condition 2022-11-28 22:47:44 +05:30
Sagar Sharma
4750bfaeab Merge branch 'develop' into repost-item-valuation 2022-11-28 22:06:49 +05:30
Deepesh Garg
a9cf9e5a88 Merge pull request #33107 from barredterra/german-tax-templates
feat: german tax templates
2022-11-28 21:54:08 +05:30
Sagar Sharma
ec95a9b760 Merge branch 'develop' into repost-item-valuation 2022-11-28 21:33:58 +05:30
Sagar Sharma
7a887cf8ba Merge pull request #33139 from s-aga-r/fix/repost-item-valuation
fix: reposting error `AttributeError: 'datetime.timedelta' object has no attribute 'replace'`
2022-11-28 21:31:14 +05:30
Sagar Sharma
8948e42a6d Merge branch 'develop' into repost-item-valuation 2022-11-28 21:29:35 +05:30
s-aga-r
4e10352b48 chore: make posting_date and posting_time read-only if based_on is set to Transaction 2022-11-28 21:22:22 +05:30
s-aga-r
eeec008547 fix: reset voucher_type and voucher_no if based_on is set to Item and Warehouse 2022-11-28 21:22:20 +05:30
Sagar Sharma
6868b4d7c3 Merge branch 'develop' into fix/repost-item-valuation 2022-11-28 21:00:46 +05:30
s-aga-r
eeda264eb6 fix: reposting error AttributeError: 'datetime.timedelta' object has no attribute 'replace' 2022-11-28 20:59:14 +05:30
Deepesh Garg
fa15221455 fix: Auto repeat date validations 2022-11-28 19:22:35 +05:30
s-aga-r
ba77da0874 fix: validation msg in stock entry 2022-11-28 18:01:30 +05:30
Deepesh Garg
6ebe8ad60d fix(ux): Action buttons in Bank Reconciliation 2022-11-28 17:37:41 +05:30
rohitwaghchaure
b8b9d1b0a8 Merge pull request #33135 from rohitwaghchaure/feat-provision-to-make-mr-for-sub-assembly-items
feat: make Material Request for sub-assembly items
2022-11-28 16:53:38 +05:30
Rohit Waghchaure
e02f35c8ff feat: make Material Request for sub-assembly items 2022-11-28 16:20:46 +05:30
ruthra kumar
9fd70a6827 Merge pull request #33115 from ruthra-kumar/duplicate_schema_block
fix: remove product schema block from additional info section on item template
2022-11-28 15:28:50 +05:30
Deepesh Garg
f6126069ee Merge pull request #33129 from deepeshgarg007/accounts_settings_fix
chore: Supplier invoice no field description
2022-11-28 13:05:12 +05:30
Ankush Menat
63b9795d41 fix: opportunity list doesn't show assigned user (#33110)
Because `db_update` is performed `_assign` property is not updated and
hence lead -> opportunity conversion makes it disappear from list view.

Steps to reproduce:

1. Create lead
2. Assign anyone
3. Create opportunity from lead.
4. Form view shows assigned user, list view wont.
2022-11-28 10:58:35 +05:30
Deepesh Garg
4f2ece34df chore: Supplier invoice no field description 2022-11-27 21:50:26 +05:30
Deepesh Garg
dedd722aef Merge pull request #33022 from barredterra/incoterms
feat: Incoterms in buying and selling
2022-11-27 20:52:25 +05:30
rohitwaghchaure
397a0e2a3a Merge pull request #33118 from rohitwaghchaure/production-plan-ux-issues
fix: production plan UX
2022-11-27 08:46:39 +05:30
Sagar Sharma
0919976414 Merge pull request #33120 from s-aga-r/fix/github-issue/32955
fix: `Work Order Summary` and `Job Card Summary` Report
2022-11-26 21:54:00 +05:30
s-aga-r
ef7fd670fc fix: production_item filter in Job Card Summary Report 2022-11-26 16:57:38 +05:30
s-aga-r
481149814e fix: company name with , in Job Card Summary Report 2022-11-26 16:55:45 +05:30
s-aga-r
2e4f3e9317 fix: Work Order filter typo in Job Card Summary Report 2022-11-26 16:54:53 +05:30
s-aga-r
87b39f045c fix: company name with , in Work Order Summary Report 2022-11-26 16:39:32 +05:30
Rohit Waghchaure
8cb7112e72 fix: production plan UX 2022-11-26 15:02:27 +05:30
Sagar Sharma
10a2121361 Merge branch 'develop' into show-batch-selector-only-once 2022-11-26 10:09:10 +05:30
Raffael Meyer
905a50cbb2 Merge branch 'develop' into incoterms 2022-11-25 16:50:55 +01:00
Shariq Ansari
0f87d329d6 fix: only show serial no batch selector only once 2022-11-25 17:03:00 +05:30
ruthra kumar
2c18a95115 fix: remove duplicate schema 2022-11-25 16:23:45 +05:30
Deepesh Garg
c6984cd1c4 Merge pull request #33111 from abhinavxd/fix-disbursable-amount
fix: Loan disbursable amount on current security price
2022-11-25 15:17:54 +05:30
Sabu Siyad
cc63415887 fix(pos): filter on customer groups
Signed-off-by: Sabu Siyad <hello@ssiyad.com>
2022-11-25 15:10:01 +05:30
Abhinav Raut
fe87c27acd fix: disbursable amount on currrent security price 2022-11-25 13:20:01 +05:30
Sagar Sharma
722e29df5c Merge pull request #33090 from s-aga-r/fix/github-issue/20496
fix: MR Item `item_name` and `description` gets reset on `qty` change
2022-11-25 11:19:01 +05:30
barredterra
7fd2639e68 feat: german tax templates 2022-11-25 00:21:33 +01:00
Sagar Sharma
4e7613d4ce Merge branch 'develop' into fix/github-issue/20496 2022-11-24 20:43:52 +05:30
s-aga-r
df0fee2312 fix: MR Item description and item_name gets reset on qty change 2022-11-24 20:42:57 +05:30
rohitwaghchaure
b0c8643517 Merge pull request #33103 from rohitwaghchaure/fixed-job-card-for-qty-ux
fix: job card "Qty to Manufacture" UX
2022-11-24 19:24:05 +05:30
Deepesh Garg
541eb7e43b Merge pull request #33100 from deepeshgarg007/dispatch_address_display
fix: Dispatch address display
2022-11-24 18:00:26 +05:30
Rohit Waghchaure
87d37e90a2 fix: job card for quantity UX 2022-11-24 17:29:50 +05:30
Deepesh Garg
104fdcb9f9 fix: Dispatch address display 2022-11-24 16:41:40 +05:30
Sabu Siyad
80813c66e3 Merge branch 'develop' into fix/pos/warehouse_selection 2022-11-24 16:21:54 +05:30
Deepesh Garg
93f6ea1e55 Merge pull request #33097 from AnandBaburajan/fix_precision_in_asset_tests_again
fix: precision in asset test_scrap_asset
2022-11-24 16:13:41 +05:30
Sabu Siyad
4ad0e2ed7e feat(pos): invoice: fitler warehouse by company
Signed-off-by: Sabu Siyad <hello@ssiyad.com>
2022-11-24 16:11:26 +05:30
Sabu Siyad
95a620a30d fix(pos): warehouse should be in company
Signed-off-by: Sabu Siyad <hello@ssiyad.com>
2022-11-24 15:40:05 +05:30
anandbaburajan
0e726609f1 fix: precision in asset test_scrap_asset 2022-11-24 15:38:05 +05:30
Deepesh Garg
3724f2287c Merge pull request #33092 from deepeshgarg007/debit_credit_issue
fix: Debit and Credit not equal while submitting PI containing asset item
2022-11-24 14:42:56 +05:30
Deepesh Garg
dc8d635120 fix: Debit and Credit not equal while submitting PI containing asset item 2022-11-23 20:29:12 +05:30
Dany Robert
88a0aa4077 chore: pre-commit 2022-11-23 19:04:11 +05:30
Dany Robert
b482e3876d fix: check for session user rather than owner 2022-11-23 18:59:15 +05:30
Deepesh Garg
60740baf3b Merge pull request #33066 from deepeshgarg007/move_taxjar_integration_new
refactor!: Move TaxJar integration from ERPNext
2022-11-23 18:21:55 +05:30
Deepesh Garg
7a7b8c2284 Merge pull request #32836 from resilient-tech/perf-fix-get-cached-value-for-accounts
perf: use `get_cached_value` instead of `db.get_value` in accounts module
2022-11-23 18:20:48 +05:30
Saurabh
5e4a287624 Merge pull request #33065 from saurabh6790/task-view-fix
fix: project website view
2022-11-23 18:17:55 +05:30
Sabu Siyad
a378619c9a fix(pos): partial return amount update
Signed-off-by: Sabu Siyad <hello@ssiyad.com>
2022-11-23 17:52:12 +05:30
Deepesh Garg
0e3438db10 Merge branch 'develop' of https://github.com/frappe/erpnext into move_taxjar_integration_new 2022-11-23 17:47:22 +05:30
Deepesh Garg
f448a077b8 chore: Cleanup patches 2022-11-23 17:47:05 +05:30
rohitwaghchaure
bbfa644475 Merge pull request #33088 from rohitwaghchaure/fixed-ux-for-valuation-rate
fix: Valuation Rate column UX in stock ledger report
2022-11-23 17:29:51 +05:30
Rohit Waghchaure
be19e4f621 fix: Valuation Rate column UX in stock ledger report 2022-11-23 16:44:18 +05:30
Deepesh Garg
a3c81da890 Merge pull request #33062 from nabinhait/pcv-rounding-issue
fix: create rounding gl entry for PCV during gle post processing
2022-11-23 10:36:04 +05:30
rohitwaghchaure
68424887e4 Merge pull request #33077 from rohitwaghchaure/ux-for-inventory-dimension
fix: UX for inventory dimension
2022-11-23 09:53:49 +05:30
Deepesh Garg
06c9c679e6 Merge pull request #33063 from niralisatapara/tds_purchase_order
feat: item wise tds in purchase order
2022-11-23 09:52:00 +05:30
Deepesh Garg
34e775136d Merge pull request #33069 from deepeshgarg007/jv_filter
fix: Remove unnecessary filters from Journal Entry
2022-11-22 20:15:12 +05:30
Deepesh Garg
eb74362263 Merge pull request #33068 from deepeshgarg007/payment_button_visibility
fix: Don't show payment button for invoices on hold
2022-11-22 20:14:41 +05:30
Deepesh Garg
0fffe61e3c Merge pull request #33072 from deepeshgarg007/move_section
chore: Rearrange supplier invoice section in Purchase Invoice
2022-11-22 20:14:14 +05:30
niralisatapara
0fdde2e5c0 feat: item wise tds calculation for purchase order 2022-11-22 14:36:30 +05:30
niralisatapara
46e8cdf31a feat: item wise tds calculation for purchase order. 2022-11-22 14:15:36 +05:30
ruthra kumar
31f463dd83 Merge pull request #33071 from ruthra-kumar/advance_paid_in_account_currency
fix: advance paid updated in account currency for SO/PO
2022-11-22 13:45:04 +05:30
Deepesh Garg
454b598718 chore: Update requirements 2022-11-22 13:00:00 +05:30
Deepesh Garg
e96be712b8 chore: Rearrange supplier invoice section in Purchase Invoice 2022-11-22 12:50:00 +05:30
ruthra kumar
541cf153f7 test: fix test case for SO/PO advance amount 2022-11-22 12:33:29 +05:30
ruthra kumar
bf76b85dfd fix: update advace paid in SO/PO in account currency 2022-11-22 12:33:18 +05:30
Deepesh Garg
cd88a53533 fix: Remove unnecessary filters from Journal Entry 2022-11-21 22:21:03 +05:30
Deepesh Garg
1b9e83251f fix: Don't show payment button for invoices on hold 2022-11-21 21:50:55 +05:30
Deepesh Garg
81c856ccb8 chore: Remove unwanted patch 2022-11-21 21:00:31 +05:30
Deepesh Garg
1100816d7a refactor!: Move TaxJar integration from ERPNext 2022-11-21 20:18:06 +05:30
Saurabh
5d9960ae5b feat: handle empty state 2022-11-21 19:37:57 +05:30
Saurabh
80e45828ae fix: ux for project view on web 2022-11-21 18:16:57 +05:30
Saurabh
7cc99ab63b fix: update tasks route under website route rules 2022-11-21 18:13:54 +05:30
niralisatapara
b9d0b4e2d3 feat: item wise tds in purchase order 2022-11-21 15:43:03 +05:30
Nabin Hait
022d8d5d79 fix: create rounding gl entry for PCV during gle post processing 2022-11-21 15:16:53 +05:30
Deepesh Garg
e25d0ead1a Merge pull request #33051 from deepeshgarg007/timesheet_timer_button
fix: Timesheet timer button
2022-11-21 11:15:02 +05:30
Deepesh Garg
c2b3c3a29d Merge pull request #33052 from deepeshgarg007/soa_routing
fix: Viewing account ledger from party master
2022-11-21 11:14:21 +05:30
Deepesh Garg
15e74c5d7b fix: Viewing account ledger from party master 2022-11-20 20:30:24 +05:30
Deepesh Garg
64802d1220 fix: Timesheet timer button 2022-11-20 19:45:51 +05:30
Deepesh Garg
89631fa744 Merge pull request #32958 from pps190/fix-item-price-brand
fix: link `Item Price` brand to `Brand` doctype.
2022-11-19 19:14:39 +05:30
Deepesh Garg
26dcde2931 Merge pull request #32999 from ruthra-kumar/exchange_rate_reval_company_currency
fix: incorrect currency in Exchange rate revaluation
2022-11-19 18:30:03 +05:30
Deepesh Garg
f96c66bbc0 Merge pull request #33032 from deepeshgarg007/dimension_report_filtering
fix: Accounting Dimension filtering for Sales and Purchase Report
2022-11-19 18:19:37 +05:30
gavin
dd2493a541 fix(realtime): Restrict updates to only last modified or current user (#33034) 2022-11-18 17:17:54 +05:30
ruthra kumar
5caaccc94b fix: always send account currency in response 2022-11-18 17:10:39 +05:30
ruthra kumar
68b04e2577 fix: incorrect currency in Exchange rate revaluation 2022-11-18 17:10:39 +05:30
Raffael Meyer
491857b3c8 fix: remove obsolete comment 2022-11-18 10:57:52 +01:00
Deepesh Garg
df096688f7 Merge pull request #33014 from deepeshgarg007/multi_invoice_payment
fix: Bulk payment generation against invoices
2022-11-18 15:10:35 +05:30
Deepesh Garg
8b394afaa9 fix: Accounting Dimension filtering for Sales and Purchase Report 2022-11-18 15:07:12 +05:30
Sagar Sharma
985ce0dc42 Merge pull request #32986 from s-aga-r/fix/scr-return-rejected-qty
fix: hide rejected-fields in return SCR
2022-11-18 15:00:22 +05:30
Sagar Sharma
602a13b0ac Merge pull request #32905 from vishdha/internal_transfer
fix: Internal Transfer Material Request cycle and tracking fixed till purchase receipt
2022-11-18 13:15:27 +05:30
Daizy Modi
62c0210463 Merge branch 'develop' into perf-fix-get-cached-value-for-accounts 2022-11-18 12:07:52 +05:30
Sagar Sharma
29132609ff Merge branch 'develop' into fix/scr-return-rejected-qty 2022-11-18 12:06:59 +05:30
s-aga-r
12d7b7e9c2 chore: linters 2022-11-18 11:42:44 +05:30
Sagar Sharma
cbfd8da848 Merge branch 'develop' into internal_transfer 2022-11-18 10:38:37 +05:30
Sagar Sharma
d1f85dd9fc Merge pull request #33019 from ssiyad/fix/mutate_iter_list
fix: use `list()` on self mutating iteration
2022-11-18 10:25:13 +05:30
barredterra
a5966b6f84 feat: add connections to Incoterm doctype 2022-11-17 22:37:04 +01:00
barredterra
ffd287d5a6 feat: add german translations for incoterm titles 2022-11-17 22:18:53 +01:00
barredterra
77105306f2 feat: add incoterm to purchasing transactions 2022-11-17 22:18:26 +01:00
barredterra
029f22c549 feat: add incoterm to sales transactions 2022-11-17 22:17:59 +01:00
barredterra
ce83f02f24 feat: create Incoterm records after install 2022-11-17 22:17:19 +01:00
barredterra
d2563ee973 feat: create incoterms and migrate shipments 2022-11-17 22:16:43 +01:00
barredterra
1a1bfc8db9 feat: add doctype Incoterm 2022-11-17 22:14:30 +01:00
Sagar Vora
48413b0778 fix: reduce function call 2022-11-18 02:22:43 +05:30
Sagar Vora
66ac65482d fix: add missing comma 2022-11-18 02:16:56 +05:30
Sagar Vora
8ae58ed427 fix: use doc_before_save and other changes 2022-11-18 02:13:16 +05:30
Daizy Modi
fdfe5cbf93 fix: use get_cached_value to avoid db call with db.exists 2022-11-17 19:14:10 +05:30
Daizy Modi
678a4c33da fix: resolved merge conflicts 2022-11-17 19:13:10 +05:30
Sabu Siyad
0b5584a54a Merge branch 'develop' into fix/mutate_iter_list 2022-11-17 17:58:49 +05:30
Sabu Siyad
546c809cbe fix: use list() on self mutating iteration
https://github.com/frappe/erpnext/issues/30325

Signed-off-by: Sabu Siyad <hello@ssiyad.com>
2022-11-17 17:46:49 +05:30
Deepesh Garg
cbe8fa7fd2 Merge pull request #33009 from ssiyad/fix/pos/item_img_border
fix(pos): item selector image border radius
2022-11-17 17:31:29 +05:30
Sagar Sharma
29a8d9a9b4 Merge branch 'develop' into internal_transfer 2022-11-17 16:42:18 +05:30
Deepesh Garg
2dfe849c7d fix: Bulk payment generation against invoices 2022-11-17 15:53:56 +05:30
Dany Robert
be15419bd5 chore: pre-commit 2022-11-17 11:00:34 +01:00
Dany Robert
61f05132db feat: validate repost item valuation against accounts freeze date 2022-11-17 11:00:01 +01:00
Ankush Menat
fd3c7903ba chore: typo 2022-11-17 14:18:05 +05:30
Sagar Sharma
da4c20f7be Merge branch 'develop' into fix/scr-return-rejected-qty 2022-11-17 14:15:16 +05:30
Sagar Sharma
40f90d3e95 Merge pull request #33006 from s-aga-r/purchase-order/internal-supplier
fix: make `is_internal_supplier` read-only in PO
2022-11-17 14:08:34 +05:30
Sagar Sharma
1349d24514 Merge branch 'develop' into purchase-order/internal-supplier 2022-11-17 14:08:07 +05:30
Sabu Siyad
2f4940cc26 fix(pos): item selector image border radius
Signed-off-by: Sabu Siyad <hello@ssiyad.com>
2022-11-17 13:21:47 +05:30
Ankush Menat
34e4903ed7 refactor: search queries (#33004)
- guard clauses for readability
- use values or format
2022-11-17 13:04:42 +05:30
Sagar Sharma
f71f27462d Merge branch 'develop' into fix/scr-return-rejected-qty 2022-11-17 13:04:15 +05:30
Sagar Sharma
e13b9e839d Merge branch 'develop' into purchase-order/internal-supplier 2022-11-17 13:04:07 +05:30
ruthra kumar
7f6e447d45 Merge pull request #33003 from AnandBaburajan/fix_precision_in_asset_tests
fix: precision in asset tests
2022-11-17 12:54:06 +05:30
s-aga-r
5efbc2cbf8 fix: make is_internal_supplier read-only 2022-11-17 12:36:44 +05:30
anandbaburajan
218da1217a fix: add missing commas and brackets 2022-11-17 12:23:38 +05:30
Anand Baburajan
538da9a58e Merge branch 'develop' into fix_precision_in_asset_tests 2022-11-17 12:17:27 +05:30
anandbaburajan
b5e5d3b3af fix: precision in asset tests 2022-11-17 12:13:06 +05:30
Ritwik Puri
b03b568e6c chore(patch): remove reload_doc from post model sync update_exchange_rate_settings patch (#32994)
[skip ci]
2022-11-17 11:59:42 +05:30
Ankush Menat
1bd886387b chore: hardcode doctype 2022-11-17 11:58:35 +05:30
Sagar Sharma
5083c22490 Merge branch 'develop' into fix/scr-return-rejected-qty 2022-11-17 10:15:23 +05:30
rohitwaghchaure
c460141f0d Merge pull request #32911 from rohitwaghchaure/workstation-type-feat-for-bom
feat: Workstation Type for BOM
2022-11-17 00:00:17 +05:30
rohitwaghchaure
31afae3e75 Merge branch 'develop' into workstation-type-feat-for-bom 2022-11-16 23:26:08 +05:30
Rohit Waghchaure
ffa30127e7 fix: linters failing 2022-11-16 23:23:06 +05:30
Rohit Waghchaure
7bd06e6fbc test: test case to check workstation type 2022-11-16 23:19:04 +05:30
Deepesh Garg
9154d08b89 Merge pull request #32882 from ernestoruiz89/patch-9
fix: add translation function to doctype name on message
2022-11-16 20:41:34 +05:30
Deepesh Garg
3a523b56bf Merge pull request #32983 from deepeshgarg007/journal_entry_template_fix
fix: Opening journal entry templates
2022-11-16 20:41:07 +05:30
Sagar Sharma
aae2408f70 Merge branch 'develop' into fix/scr-return-rejected-qty 2022-11-16 18:40:01 +05:30
Deepesh Garg
aac1f4923b Merge pull request #32989 from deepeshgarg007/flake8
ci: fix flake8 URL
2022-11-16 16:25:46 +05:30
Deepesh Garg
e81bec5fc9 ci: fix flake8 URL 2022-11-16 16:24:28 +05:30
Sagar Sharma
399ee80d80 Merge branch 'develop' into fix/scr-return-rejected-qty 2022-11-16 15:02:55 +05:30
s-aga-r
7dd7617ec7 fix: hide reject-fields in return SCR 2022-11-16 14:28:54 +05:30
s-aga-r
8a73e963ce fix: don't set rejected-qty in return SCR 2022-11-16 14:28:32 +05:30
Vishal
e5dfd53e6f chore: minor fix 2022-11-16 14:25:35 +05:30
Vishal
ba6189d054 fix: minor change 2022-11-16 13:58:29 +05:30
Vishal
343b414b40 fix: test case updated for mr 2022-11-16 13:53:21 +05:30
Vishal
89aabdaaaa fix: test case added for MR internal Transfer 2022-11-16 13:53:21 +05:30
Vishal
d86afddb60 fix: minor issue fixed 2022-11-16 13:53:21 +05:30
Vishal
71412f6877 fix: Internal Transfer Material Request cycle and tracking fixed till purchase receipt 2022-11-16 13:53:21 +05:30
Deepesh Garg
0486078ba9 Merge pull request #32984 from nabinhait/si-needs-repost
fix: Validate for deferred revenue only if sales invoice needs repost
2022-11-16 13:12:09 +05:30
Nabin Hait
b89b07d0ff fix: Validate for deferred revenue only if sales invoice needs repost 2022-11-16 12:16:23 +05:30
Deepesh Garg
33b61aef5a fix: Opening journal entry templates 2022-11-16 11:57:17 +05:30
Devin Slauenwhite
3a35651441 fix: naming 2022-11-15 08:26:16 -05:00
Ankush Menat
c013db6ea1 fix: cast POS query inputs to integers (#32975)
fix: cast POS query inputs to integers
2022-11-15 18:10:45 +05:30
Deepesh Garg
b3bc1c66a3 Merge pull request #32968 from frappe/mergify/bp/develop/pr-32953
chore(payment_entry): Remove dead validations (backport #32953)
2022-11-15 16:32:40 +05:30
Rohit Waghchaure
0a69523940 fix: UX for inventory dimension 2022-11-15 15:57:30 +05:30
Sagar Sharma
6f2989c7f2 Merge pull request #32971 from s-aga-r/revert-32867-fix/scr/rejected-qty
Revert "fix: get `consumed_qty` based on `received_qty` in SCR"
2022-11-15 15:17:15 +05:30
s-aga-r
369db4eacc test: fix test cases for supplied-items consumed_qty 2022-11-15 14:39:43 +05:30
s-aga-r
01f56c621c Revert "fix: get consumed_qty based on received_qty in SCR"
This reverts commit 70c9b8dc50.
2022-11-15 14:32:16 +05:30
s-aga-r
3706a9b4dc Revert "fix: set received_qty before_validate SCR"
This reverts commit c447dfaa9c.
2022-11-15 14:30:13 +05:30
Gavin D'souza
35088bb4c4 chore(payment_entry): Remove dead validations
(cherry picked from commit e1ecc9a819)
2022-11-15 08:34:08 +00:00
Deepesh Garg
a0d9e1bd57 Merge pull request #32962 from deepeshgarg007/return_write_off
fix: Write Off section visibility for non POS Invoices
2022-11-15 13:01:06 +05:30
rohitwaghchaure
91fad1935e Merge pull request #32947 from rohitwaghchaure/incorrect-fix-of-conversion-factor-in-pp
fix: incorrect fix of conversion factor in PP
2022-11-15 10:30:23 +05:30
Deepesh Garg
9f5d613c78 fix: Write Off section visibility for non POS Invoices 2022-11-15 09:45:39 +05:30
Deepesh Garg
a1a992b0dd Merge pull request #32956 from deepeshgarg007/acc_dimension_filter_label
fix: Label for applicable dimension table
2022-11-15 09:24:30 +05:30
Devin Slauenwhite
cee069d426 fix: link to brand doctype. 2022-11-14 17:38:46 -05:00
Deepesh Garg
8c13f70fc5 fix: Label for applicable dimension table 2022-11-14 20:39:40 +05:30
Ernesto Ruiz
01cc58db83 Merge branch 'develop' into patch-9 2022-11-14 07:44:01 -06:00
Rohit Waghchaure
105c272816 feat: Workstation Type for BOM 2022-11-14 13:03:03 +05:30
rohitwaghchaure
ab1722d78e Merge pull request #32937 from s-aga-r/refactor/qb/job-card
refactor: rewrite `job_card.py` queries in QB
2022-11-14 11:25:47 +05:30
Rohit Waghchaure
490b0e3cdf fix: incorrect fix of conversion factor in PP 2022-11-14 10:10:49 +05:30
Sagar Sharma
a191ce6200 Merge branch 'develop' into refactor/qb/job-card 2022-11-13 22:31:35 +05:30
Deepesh Garg
7ba8350089 Merge branch 'develop' into patch-9 2022-11-13 20:42:48 +05:30
Deepesh Garg
22598a09de Merge pull request #32938 from deepeshgarg007/bg_query
chore: Remove raw SQL query
2022-11-13 20:41:08 +05:30
Sagar Vora
b06345af46 fix: check type for reference name 2022-11-13 19:58:49 +05:30
Deepesh Garg
a2260a3dc2 Merge branch 'develop' into bg_query 2022-11-13 19:47:43 +05:30
Deepesh Garg
6b93b3f12a Merge pull request #32866 from ruthra-kumar/gross_profit_fix_buying_amount
fix: incorrect buying amount on Gross Profit
2022-11-13 19:15:03 +05:30
Deepesh Garg
4b9921782b chore: Remove qb doc reference 2022-11-13 18:48:32 +05:30
s-aga-r
7df2921d38 refactor: rewrite job_card.py queries in QB 2022-11-12 22:03:56 +05:30
Deepesh Garg
42a59d5c17 chore: Remove raw SQL query 2022-11-12 17:32:04 +05:30
Sagar Sharma
4e9a63423f Merge pull request #32913 from resilient-tech/fix-item-price-fetch
fix: set stock UOM in args to ensure item price is fetched
2022-11-12 10:08:44 +05:30
Deepesh Garg
d03979eef9 Merge pull request #32878 from abhinavxd/fix-repayment-schedule
fix: repayment schedule regeneration
2022-11-11 14:22:40 +05:30
ruthra kumar
2c8b0b17a7 test: buying amount of invoices
1. Invoice with unset `update_stock`, with and without Delivery Notes
2022-11-11 08:33:54 +05:30
ruthra kumar
e4d16c31da fix: GP incorrect buying amount if no upd on SI and Delivery Note 2022-11-11 08:33:48 +05:30
rohitwaghchaure
8ae9c1d192 Merge pull request #32895 from rohitwaghchaure/fixed-performance-issue-for-purchase-receipt
fix: Purchase Receipt timeout error
2022-11-10 22:41:54 +05:30
Deepesh Garg
902e1ab74b Merge branch 'develop' into patch-9 2022-11-10 20:08:27 +05:30
Deepesh Garg
f4920d6475 Merge pull request #32880 from ernestoruiz89/patch-7
fix: add translate function to valitate company msg in chart of accounts importer
2022-11-10 20:07:52 +05:30
Deepesh Garg
9d5c8d9d6b Merge branch 'develop' into fix-repayment-schedule 2022-11-10 19:52:59 +05:30
Deepesh Garg
06a42caa5b Merge pull request #32923 from deepeshgarg007/rate_quotation
fix: Maintain same rate between Quotation and Sales Order
2022-11-10 19:52:27 +05:30
Deepesh Garg
e559fea8ff Merge pull request #32921 from deepeshgarg007/netvalues_psoa
feat: Add net value filter on PSOA
2022-11-10 19:51:56 +05:30
Deepesh Garg
8f65677cb4 Merge pull request #32912 from nabinhait/customer-supplier-tab-break
fix(ux): Tab break in Customer and Supplier form
2022-11-10 18:30:14 +05:30
Deepesh Garg
362ec7b673 fix: Maintain same rate between Quotation and Sales Order 2022-11-10 18:28:08 +05:30
Deepesh Garg
51521fc19f feat: Add net value filter on PSOA 2022-11-10 17:48:25 +05:30
Sagar Sharma
e9306f3c75 Merge pull request #32918 from s-aga-r/fix/github-issue/28336
fix: WO Skip Material Transfer to WIP Warehouse
2022-11-10 17:12:00 +05:30
Sagar Sharma
e7fa2e08ad fix: set WIP Warehouse in Job Card 2022-11-10 16:40:53 +05:30
Sagar Sharma
9730cd0aec fix: don't set WIP Warehouse if is checked in WO 2022-11-10 16:18:10 +05:30
Ankush Menat
c16553626f build: python 3.11 support (#32843)
ci: use python 3.11 in tests

[skip ci]
2022-11-10 14:22:05 +05:30
Deepesh Garg
1283c5b7a5 Merge branch 'develop' into fix-repayment-schedule 2022-11-10 09:39:39 +05:30
Ernesto Ruiz
a007f1da9d Merge branch 'develop' into patch-7 2022-11-09 15:53:36 -06:00
Ernesto Ruiz
499dfee2d4 Merge branch 'develop' into patch-9 2022-11-09 15:52:35 -06:00
Ankush Menat
7e1742956c refactor: Remove usage of deprecated methods (#32914)
Warn: Just used regex to replace all usage.
```regex
s/frappe.db.set(\(.*\),\(.*\),\(.*\))/\1.db_set(\2, \3)/g
```

Required after: https://github.com/frappe/frappe/pull/18815
2022-11-09 20:09:06 +05:30
Sagar Vora
57038c3969 fix: set stock UOM in args to ensure item price is fetched 2022-11-09 18:56:09 +05:30
Nabin Hait
fb7ee301b5 fix(ux): Tab break in Customer and Supplier form 2022-11-09 18:03:23 +05:30
Deepesh Garg
ff51f3b95e Merge branch 'develop' into patch-7 2022-11-09 14:34:39 +05:30
Deepesh Garg
5f1b226362 Merge pull request #32742 from ruthra-kumar/ple_repost
feat: Tool to repost PLE manually
2022-11-09 14:26:37 +05:30
Deepesh Garg
077f3c515f Merge branch 'develop' into patch-9 2022-11-09 09:19:28 +05:30
Rohit Waghchaure
7278387879 fix: test cases 2022-11-09 01:28:40 +05:30
Sagar Sharma
438f2ac1a8 Merge pull request #32888 from s-aga-r/fix/scr/return-scr-ref
chore: link SCR Return in SCR Dashboard
2022-11-08 21:36:43 +05:30
Sagar Sharma
030ef6da25 Merge branch 'develop' into fix/scr/return-scr-ref 2022-11-08 21:36:00 +05:30
Rohit Waghchaure
4082149f0e fix: Purchase Receipt timeout error 2022-11-08 20:59:20 +05:30
Deepesh Garg
c8619284bc Merge pull request #32883 from deepeshgarg007/timesheet_project_filter
fix: Project filter in timesheet
2022-11-08 14:54:49 +05:30
Sagar Sharma
47248251e2 chore: link SCR Return in SCR Dashboard 2022-11-08 12:29:41 +05:30
Sagar Sharma
a863f59cf0 Merge pull request #32886 from s-aga-r/fix/stock-entry-list
chore: remove `debugger` from `stock_entry_list.js`
2022-11-08 12:10:05 +05:30
Sagar Sharma
84ab100d86 chore: remove debugger from stock_entry_list.js 2022-11-08 12:05:15 +05:30
Deepesh Garg
55d6773be6 Merge branch 'develop' of https://github.com/frappe/erpnext into timesheet_project_filter 2022-11-08 11:02:01 +05:30
Deepesh Garg
7b5cf6978e chore: Linting Issues 2022-11-08 11:00:48 +05:30
ruthra kumar
0448c0fa36 feat: Repost Payment Ledger entries for vouchers
primarily intended to manually correct PLE entries for vouchers
affected by Item Value repost-https://github.com/frappe/erpnext/pull/32567
2022-11-08 07:47:47 +05:30
Sagar Sharma
b5d64bc7c5 Merge pull request #32877 from s-aga-r/fix/ux/scr/supplied-items/consumed-qty
fix: make `consumed_qty` read-only in SCR Supplied Items
2022-11-07 22:58:54 +05:30
Deepesh Garg
2b65b22aa2 fix: Project filter in timesheet 2022-11-07 22:48:52 +05:30
Sagar Sharma
1d52084b05 Merge branch 'develop' into fix/ux/scr/supplied-items/consumed-qty 2022-11-07 21:58:11 +05:30
Sagar Sharma
5e8a22be24 fix: linter 2022-11-07 21:54:12 +05:30
Ernesto Ruiz
1f13bc906b fix: add translation functuinon to doctype name on message in bulk_transaction_processing 2022-11-07 09:43:28 -06:00
Ernesto Ruiz
637c08d189 fix: add translate function to valitate company msg in chart of accounts importer 2022-11-07 09:22:38 -06:00
Deepesh Garg
404662e794 Merge pull request #32625 from deepeshgarg007/editable_inovice
feat: Editable Sales Invoice
2022-11-07 18:29:21 +05:30
Abhinav Raut
d6ab2b3b87 fix: repayment schedule regeneration 2022-11-07 17:43:08 +05:30
Sagar Sharma
734db5b722 Merge branch 'develop' into fix/ux/scr/supplied-items/consumed-qty 2022-11-07 17:36:42 +05:30
Sagar Sharma
bf4b012cec fix: make consumed_qty editable when backflush based on Material Transfer 2022-11-07 17:23:33 +05:30
Sagar Sharma
f8d2e276a5 fix: make consumed_qty read-only in SCR Supplied Items 2022-11-07 17:19:03 +05:30
Deepesh Garg
e29f756146 chore: Validate for deferred revenue invoices 2022-11-07 16:42:45 +05:30
Deepesh Garg
5fe55176ec chore: Enable no-copy for repost required field 2022-11-07 16:42:12 +05:30
Ankush Menat
30daeb90a8 fix: incorrect single valeu fetch
refer https://github.com/frappe/frappe/pull/18787

[skip ci]
2022-11-07 15:38:38 +05:30
Deepesh Garg
eb4820b68b Merge pull request #32874 from SolufyPrivateLimited/incr-clm-wwibav
fix: Increase columns width in Warehouse wise Item Balance Age and Value
2022-11-07 13:34:47 +05:30
Nihantra C. Patel
8355c1092c fix: Increase columns width in Warehouse wise Item Balance Age and Value 2022-11-07 11:45:47 +05:30
rohitwaghchaure
5e7a69e649 Merge pull request #32802 from s-aga-r/fix/github-issue/29006
fix: `Material Consumption` option in case of `Skip Transfer to WIP` in WO
2022-11-07 09:35:39 +05:30
Daizy Modi
4efc947f14 perf: use get_cached_value instead of db.get_value in controllers (#32776) 2022-11-07 09:21:03 +05:30
Sagar Sharma
8859e6f1bb Merge pull request #32867 from s-aga-r/fix/scr/rejected-qty
fix: get `consumed_qty` based on `received_qty` in SCR
2022-11-06 16:18:08 +05:30
Sagar Sharma
4d8da4420e test: add test case for consumed-qty 2022-11-06 14:55:33 +05:30
Sagar Sharma
70c9b8dc50 fix: get consumed_qty based on received_qty in SCR 2022-11-06 13:33:47 +05:30
Sagar Sharma
c447dfaa9c fix: set received_qty before_validate SCR 2022-11-06 13:32:15 +05:30
ruthra kumar
9209ec59c2 refactor: split delete gl utility function into two 2022-11-06 11:39:44 +05:30
Raffael Meyer
d2b6490bca chore: add german translations (#32846)
Mostly for balance sheet
2022-11-06 10:22:33 +05:30
Deepesh Garg
8d30ebb12b fix: Disable tax included prices for internal transfers (#32794)
* fix: Disable tax-included prices for internal transfers
2022-11-05 20:51:15 +05:30
Sagar Sharma
0394080898 Merge branch 'develop' into fix/github-issue/29006 2022-11-05 20:11:55 +05:30
Ankush Menat
75983ce809 fix: remove global _("translation") calls (#32828)
This is not how it works. Translations are dynamic based on language
sets during request (using header, user's preferences etc)

Calling them on global variables makes no sense.

Ref: https://github.com/frappe/frappe/pull/18733
2022-11-05 18:49:15 +05:30
Sagar Sharma
e820629f83 Merge pull request #32850 from s-aga-r/fix/scr/return
fix: wrong consumed items in SCR return
2022-11-05 17:23:04 +05:30
Sagar Sharma
cc8d540943 Merge branch 'develop' into fix/scr/return 2022-11-05 16:48:59 +05:30
Deepesh Garg
90fbab4b1e Merge pull request #32847 from maharshivpatel/fix-pos-opening-entry-profile-filter
fix: Create POS Opening Entry POS Profile filter.
2022-11-05 16:44:39 +05:30
Sagar Sharma
5665d1afa0 Merge branch 'develop' into fix/scr/return 2022-11-05 16:36:07 +05:30
Deepesh Garg
be0f6b3e6e Merge branch 'develop' of https://github.com/frappe/erpnext into editable_inovice 2022-11-05 16:35:55 +05:30
Deepesh Garg
0966867c08 chore: Reset repost_required_flag on cancel 2022-11-05 16:35:43 +05:30
Deepesh Garg
4ff06a9d79 Merge pull request #32844 from deepeshgarg007/auto_allocate_advances
fix: Auto advance allocation against partial invoices
2022-11-05 16:27:59 +05:30
Sagar Sharma
b5221a5c74 Merge branch 'develop' into fix/scr/return 2022-11-05 16:23:58 +05:30
Sagar Sharma
324bfa9fde test: fix test case 2022-11-05 16:18:31 +05:30
Sagar Sharma
760c26e9c0 fix: make BOM required in SCR Item 2022-11-05 15:52:14 +05:30
Sagar Sharma
761e9df1bf test: add test case 2022-11-05 15:52:14 +05:30
Sagar Sharma
611d827e0b fix: rename test method 2022-11-05 15:51:29 +05:30
Sagar Sharma
54072ec9cd fix: map BOM while mapping the return SCR 2022-11-05 15:51:29 +05:30
Sagar Sharma
4a4abf9b64 Merge pull request #32849 from frappe/mergify/bp/develop/pr-32831
fix: mysql syntax issue (backport #32831)
2022-11-05 12:40:34 +05:30
Sagar Sharma
3ca9d53d1b refactor: rewrite query in QB
(cherry picked from commit 2f145f9912)
2022-11-05 06:12:40 +00:00
Bhavesh Maheshwari
f4779df9b3 fix: mysql syntax issue
(cherry picked from commit 4d9bbd4c9c)
2022-11-05 06:12:40 +00:00
Deepesh Garg
428971f127 test: Check parital payment allocation 2022-11-04 15:50:39 +05:30
Deepesh Garg
181df2fe63 fix: Auto advance allocation against partial invoices 2022-11-04 15:49:37 +05:30
Maharshi Patel
1328a45f2a fix: Create POS Opening Entry POS Profile filter.
pos_profile_query was variable instead of function.
2022-11-04 15:29:17 +05:30
Deepesh Garg
cbf82872fb Merge pull request #32646 from niralisatapara/tds_purchase_invoice
feat: Item Wise TDS Calculation
2022-11-04 13:08:10 +05:30
Deepesh Garg
159b511d16 Merge pull request #32809 from monolithon/develop
feat: Optional Hungarian COA for microenterprises
2022-11-04 13:00:13 +05:30
rohitwaghchaure
441f082fcb Merge pull request #32799 from rohitwaghchaure/fix-scan-qrcode-functionality
fix: Scan Barcode UX
2022-11-04 11:04:40 +05:30
Deepesh Garg
f6a61b999f chore: fix patch 2022-11-04 08:11:38 +05:30
Ernesto Ruiz
ad0dd693ac chore: add translation function to Bank Reconciliation Tool related files
chore: add translation  function to Bank Reconciliation Tool related files
2022-11-04 01:06:01 +05:30
Deepesh Garg
153675e52a chore: Update patch 2022-11-04 01:03:45 +05:30
Deepesh Garg
e2ad785422 chore: Hide tax withholding net total field 2022-11-04 01:03:20 +05:30
rohitwaghchaure
0caa35a251 Merge branch 'develop' into fix/github-issue/29006 2022-11-03 16:12:53 +05:30
Rohit Waghchaure
e5b19e3f70 fix: auto increment qty if item table has no items 2022-11-03 14:57:36 +05:30
Daizy Modi
010bd9c558 fix: remove cache param 2022-11-03 14:36:48 +05:30
Daizy Modi
27df455b98 perf: use get_cached_value instead of db.get_value in accounts module 2022-11-03 13:38:48 +05:30
rohitwaghchaure
7a5a500d29 Merge pull request #32832 from rohitwaghchaure/fixed-customer-supplier-not-able-to-select
fix: not able to select customer / supplier
2022-11-03 11:54:58 +05:30
Rohit Waghchaure
b0fc568c80 fix: not able to select customer / supplier 2022-11-03 11:24:58 +05:30
niralisatapara
12456f9850 feat: item wise tds calculation 2022-11-03 10:46:30 +05:30
Deepesh Garg
f5478c871c Merge pull request #32773 from AnandBaburajan/asset_bill_date_new
fix: for asset's purchase_date, if bill_date is set, use that instead of posting_date
2022-11-03 09:51:44 +05:30
Deepesh Garg
8581b7820d Merge pull request #32713 from ernestoruiz89/patch-9
fix: add missing translation function on report related documents
2022-11-03 09:46:43 +05:30
Anand Baburajan
c95f05a3dc Merge branch 'develop' into asset_bill_date_new 2022-11-02 21:30:40 +05:30
Sagar Sharma
cd5836243d Merge branch 'develop' into fix/github-issue/29006 2022-11-02 19:07:47 +05:30
ruthra kumar
c3dc1c272b Merge pull request #32816 from ruthra-kumar/advance_paid_in_so_and_po
fix: update advance paid in SO/PO from Payment Ledger
2022-11-02 16:27:56 +05:30
Sagar Sharma
25a2c8ab82 Merge pull request #32788 from s-aga-r/fix/github-issue/30339
fix: use `flt` instead of `cint` in `get_batch_no`
2022-11-02 15:54:41 +05:30
ruthra kumar
721ac6b847 test: SO advance paid on Payment submission and cancellation 2022-11-02 15:54:23 +05:30
ruthra kumar
1a0a8ac7e2 test: PO advance paid on payment submission and cancellation 2022-11-02 15:53:52 +05:30
ruthra kumar
81d791eea0 test: refactor use @change_settings decorator when possible 2022-11-02 15:40:56 +05:30
Rohit Waghchaure
e1f9ba78e5 fix: Scan Barcode UX 2022-11-02 15:37:46 +05:30
niralisatapara
ea387937d0 feat: item wise tds calculation 2022-11-02 12:30:58 +05:30
niralisatapara
2ca0cf6fc4 feat: item wise tds calculation 2022-11-02 12:19:51 +05:30
Sagar Sharma
be4593c1d9 Merge branch 'develop' into fix/github-issue/30339 2022-11-02 11:50:51 +05:30
Sagar Sharma
aa6e8c9ec0 Merge branch 'develop' into fix/github-issue/29006 2022-11-02 11:50:44 +05:30
niralisatapara
4aff2a32ad Merge branch 'develop' of https://github.com/niralisatapara/erpnext into develop 2022-11-02 11:21:02 +05:30
Muvuk
579afed460 feat: Optional Hungarian COA for microenterprises #32688 2022-11-01 19:36:42 +01:00
rohitwaghchaure
a6a280669c Merge pull request #32800 from rohitwaghchaure/test-cases-failing
fix: test cases
2022-11-01 22:51:31 +05:30
Rohit Waghchaure
3f2728e3f7 test: run tmate 2022-11-01 22:20:13 +05:30
Deepesh Garg
e0a705afe7 Merge pull request #32779 from deepeshgarg007/sales_invoice_default_mop
fix: Mode of payment for returns in POS Sales Invoice
2022-11-01 21:28:54 +05:30
Deepesh Garg
62ae329be3 Merge pull request #32801 from deepeshgarg007/purchase_invoice_cancel_amend
fix: Issues while cancel/amending Purchase Invoice with TDS enabled
2022-11-01 20:47:55 +05:30
Sagar Sharma
31f95da947 Merge branch 'develop' into fix/github-issue/30339 2022-11-01 20:30:55 +05:30
Deepesh Garg
a4f7079270 Merge branch 'develop' of https://github.com/frappe/erpnext into sales_invoice_default_mop 2022-11-01 20:17:43 +05:30
Deepesh Garg
5b74161195 chore: Update tests 2022-11-01 20:17:34 +05:30
Deepesh Garg
f7c9258770 fix: Issues while cancel/amending Purchase Invoice with TDS enabled 2022-11-01 19:54:41 +05:30
Sagar Sharma
8ea6983734 fix: Material Consumption option in case of Skip Transfer to WIP in WO 2022-11-01 19:43:06 +05:30
Rohit Waghchaure
ddd1b4be3f fix: test cases 2022-11-01 19:30:37 +05:30
Anand Baburajan
05d2c7f9ae Merge branch 'develop' into asset_bill_date_new 2022-11-01 17:45:23 +05:30
Dany Robert
1d83fb20d6 feat(pricing rule): free qty rounding and recursion qty (#32577)
Option to specify recursion start qty and repeating qty

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2022-11-01 16:39:32 +05:30
Deepesh Garg
9c57f3d339 Merge pull request #32639 from maharshivpatel/fix-pricing-rule-item-group-uom
fix: Pricing rule item group consider UOM
2022-11-01 16:20:53 +05:30
Maharshi Patel
6b0178e9fb Merge branch 'develop' into fix-pricing-rule-item-group-uom 2022-11-01 15:21:41 +05:30
rohitwaghchaure
790b371e47 Merge pull request #32790 from AnandBaburajan/asset_scrap_and_sale_tests_fix
fix: pro_rata_amount calculation in assets tests
2022-11-01 15:16:06 +05:30
Maharshi Patel
cc6dfd91cf Merge branch 'develop' into fix-pricing-rule-item-group-uom 2022-11-01 15:06:22 +05:30
anandbaburajan
672fbd3849 chore: empty commit to try fixing stuck test 2022-11-01 14:25:38 +05:30
Maharshi Patel
935f31eff9 fix: test cases added for item group 2022-11-01 12:55:46 +05:30
anandbaburajan
65e855bfff fix: pro_rata_amount calculation in assets tests 2022-11-01 12:45:28 +05:30
Sagar Sharma
9fb3fb4c83 fix: use flt instead of cint in get_batch_no 2022-11-01 10:45:13 +05:30
ruthra kumar
4487065b67 fix: update advance paid in SO/PO from Payment Ledger 2022-11-01 10:29:31 +05:30
rohitwaghchaure
1033d34964 Merge pull request #32730 from rohitwaghchaure/duplicate-custom-fields-inventory-dimension
fix: duplicate custom fields for inventory dimension
2022-10-31 22:25:29 +05:30
Deepesh Garg
5b150abdcb Merge pull request #32768 from deepeshgarg007/cc_main_allocation
fix: Budget validation for main cost center
2022-10-31 22:18:50 +05:30
Deepesh Garg
b98d25dafb Merge pull request #32777 from deepeshgarg007/sales_order_advance_paid_amount
fix: Reset advance paid amount on Order cancel and amend
2022-10-31 21:38:43 +05:30
Deepesh Garg
06e8e28531 fix: Mode of payment for returns in POS Sales Invoice 2022-10-31 19:58:46 +05:30
Deepesh Garg
92f37ca111 fix: Reset advance paid amount on Oreder cancel and amend 2022-10-31 19:01:54 +05:30
Deepesh Garg
3a420ec808 Merge pull request #32772 from gn306029/develop
chore: Update zh-TW translations (#31775)
2022-10-31 17:43:36 +05:30
Rohit Waghchaure
45ededbed5 fix: duplicate custom fields for inventory dimension 2022-10-31 15:33:23 +05:30
anandbaburajan
f322c608cf fix: for asset's purchase_date, if bill_date is set, use that instead of posting_date 2022-10-31 12:41:37 +05:30
gn306029
a612a666f3 chore: Update zh-TW translations (#31775) 2022-10-31 12:32:57 +08:00
Deepesh Garg
4e26d42d17 fix: Budget validation for main cost center 2022-10-30 19:33:27 +05:30
Hossein Yousefian
54c2ffc36b fix: Pass project to stock entry items
fix: Pass project to stock entry items
2022-10-29 22:24:59 +05:30
Sagar Sharma
16a8bcc77d Merge pull request #32754 from s-aga-r/fix/github-issue/32734
fix: add `Sales Order` reference in Material Request Dashboard
2022-10-29 12:36:37 +05:30
Sagar Sharma
15ebf4a0cf fix: add Sales Order reference in Material Request Dashboard 2022-10-29 12:01:37 +05:30
Deepesh Garg
cca36cab70 Merge pull request #32744 from ruthra-kumar/so_terms_report_enhancement
refactor: additional filters on Payment Terms status report
2022-10-29 11:09:43 +05:30
Deepesh Garg
49343e9f68 chore: column name 2022-10-28 22:03:09 +05:30
Deepesh Garg
b6ade62211 Merge pull request #32662 from s-aga-r/refactor/stock/remaining-reports
refactor: rewrite stock reports queries in qb
2022-10-28 21:05:15 +05:30
Deepesh Garg
323e45374f Merge pull request #32620 from rtdany10/psa_pdf_issue
feat: page break in SoA pdf
2022-10-28 21:00:01 +05:30
Deepesh Garg
aee4fe9f7b Merge pull request #32722 from deepeshgarg007/reference_due_date
fix: Reference due date field type in Journal Entry Accounts table
2022-10-28 20:55:36 +05:30
Deepesh Garg
50652be6e3 Merge branch 'develop' of https://github.com/frappe/erpnext into editable_inovice 2022-10-28 20:48:26 +05:30
Deepesh Garg
92f2d9f99f Merge pull request #32725 from ernestoruiz89/patch-10
fix: add translate function on remark text on  asset_value_adjustment.py
2022-10-28 20:47:00 +05:30
Deepesh Garg
25eac80ae6 Merge pull request #32718 from deepeshgarg007/total_sales_amount_project
fix: Total Sales amount update in project via Sales Order
2022-10-28 20:46:00 +05:30
Deepesh Garg
9ac1c4bc4f Merge pull request #32699 from deepeshgarg007/general_ledeger_print
fix: Curreny in SOA print for multi-currency party
2022-10-28 20:41:49 +05:30
Deepesh Garg
c3275c3f3c Merge pull request #32692 from deepeshgarg007/opening_invoice_creation_tool_ux
fix: Clear invoice table post importing invoices
2022-10-28 20:40:52 +05:30
Deepesh Garg
d9eda45b0b chore: Minor updates 2022-10-28 20:19:13 +05:30
Deepesh Garg
b9d497c61c chore: Update patch 2022-10-28 20:18:55 +05:30
ruthra kumar
fed39a53cb test: due date filter on Payment Terms report 2022-10-28 18:15:58 +05:30
ruthra kumar
4765f937ea fix: key error in filter access 2022-10-28 17:50:01 +05:30
ruthra kumar
aadb6b1772 feat: additional filters on Payment terms report
Filter on Status and Due dates
2022-10-28 17:46:06 +05:30
Deepesh Garg
fb41bdd700 Merge branch 'develop' of https://github.com/frappe/erpnext into tds_purchase_invoice 2022-10-28 17:18:11 +05:30
Sagar Sharma
c71f805667 Merge pull request #32738 from vishdha/pr_dashboard
fix: Added Material Request Reference in Purchase Recipt Dashboard for Tracking
2022-10-28 14:23:54 +05:30
Vishal Dhayagude
db0f2c0b10 Merge branch 'develop' into pr_dashboard 2022-10-28 13:36:43 +05:30
Deepesh Garg
09fa2298ba Merge pull request #32716 from deepeshgarg007/bank_account_filter
fix: Company bank account filter in Bank Clearance
2022-10-28 12:53:53 +05:30
Vishal
e8c0157017 chore: minor linting issue fixed 2022-10-28 11:59:10 +05:30
Vishal
a04c44fe34 chore: Added Material Request Reference in Purchase Recipt Dashboard for Tracking 2022-10-28 11:36:14 +05:30
Sagar Sharma
334b158f0b Merge branch 'develop' into refactor/stock/remaining-reports 2022-10-28 11:27:42 +05:30
Deepesh Garg
16959c0a8c Merge pull request #32717 from deepeshgarg007/discount_section_collapse
fix: Add condition for discount section collapse
2022-10-28 11:24:25 +05:30
Deepesh Garg
591291caee Merge pull request #32724 from deepeshgarg007/ap_report_filter_fixes
fix: Filter fixes in Accounts Payable report
2022-10-28 11:23:52 +05:30
Dany Robert
de20dfe459 chore: remove commented line 2022-10-27 09:33:49 +05:30
Ernesto Ruiz
8f0e63cd27 fix: add translate function on remark text on make_depreciation_entry in asset_value_adjustment.py 2022-10-26 13:56:35 -06:00
Deepesh Garg
a5a73ba857 fix: Filter fixes in Accounts Payable report 2022-10-26 21:18:50 +05:30
Deepesh Garg
e7caa48e2f fix: Reference due date field type in Journal Entry Accounts table 2022-10-26 20:21:36 +05:30
Deepesh Garg
6063c4e3c0 fix: Total Sales amount update in project via Sales Order 2022-10-26 18:01:39 +05:30
Deepesh Garg
4cd65027c4 fix: Add condition for discount section collapse 2022-10-26 16:48:24 +05:30
Deepesh Garg
f9f78c1086 fix: Company bank account filter in Bank Clearance 2022-10-26 11:02:14 +05:30
Ernesto Ruiz
4c7fa9482d fix: correct linters 2022-10-25 22:39:05 -06:00
Ernesto Ruiz
9c529c61bb fix: correct linters 2022-10-25 22:35:37 -06:00
Ernesto Ruiz
b7b53b5857 fix: correct linters 2022-10-25 22:34:21 -06:00
Ernesto Ruiz
2012bdf4bd fix: add translate function to string on budget_variance_report.js to match the variance word translated 2022-10-25 22:24:33 -06:00
Ernesto Ruiz
48ed6381b3 fix: add translate function to name of chart labels in budget_variance_report.py 2022-10-25 22:18:47 -06:00
Ernesto Ruiz
083a78135c fix: add translate function to period in sales_analytics.py 2022-10-25 22:17:06 -06:00
Ernesto Ruiz
c1e608d9ef fix: add translate function to period in stock_analytics.py 2022-10-25 22:09:02 -06:00
Ernesto Ruiz
71a0ae2e59 fix: refactor code for better translatable string in stock_ageing.py 2022-10-25 22:05:25 -06:00
Ernesto Ruiz
a671652ab2 fix: refactor code for better translatable string 2022-10-25 22:00:46 -06:00
Ernesto Ruiz
a963618b08 fix: add translate function to name of chart labels in deferred_revenue_and_expense.py 2022-10-25 21:54:55 -06:00
niralisatapara
397e3b1ade feat: item wise tds calculation
item wise tds calculation
2022-10-25 15:09:59 +05:30
Deepesh Garg
a18a715bb4 chore: Use account currency as fallback 2022-10-24 19:13:02 +05:30
Deepesh Garg
49ee873655 fix: Curreny in SOA print for multi-currency party 2022-10-24 17:34:12 +05:30
rohitwaghchaure
183662c0e2 Merge pull request #32693 from rohitwaghchaure/searchfield-not-working-for-customer-supplier
fix: Search field not working for customer, supplier
2022-10-24 17:11:27 +05:30
Rohit Waghchaure
5f84993bae test: added test case to validate seachfields for customer, supplier 2022-10-24 16:10:47 +05:30
Rohit Waghchaure
46d148defd fix: searchfield not working for cuctsomer, supplier as per customize form 2022-10-24 15:48:34 +05:30
Deepesh Garg
267e7c3a90 fix: Clear invoice table post importing invoices 2022-10-24 11:45:24 +05:30
Deepesh Garg
1a980123a2 chore: Update tests 2022-10-24 10:08:55 +05:30
Deepesh Garg
ed98015a56 test: Add unit tests 2022-10-23 23:03:50 +05:30
Deepesh Garg
1105e52031 chore: Update allow on submit fields 2022-10-23 22:55:08 +05:30
Deepesh Garg
48808aeb8a Merge pull request #32424 from deepeshgarg007/loan_schedule_types
feat: Repayment schedule types for term loans
2022-10-23 19:37:40 +05:30
Deepesh Garg
e59b147a62 chore: Update tests 2022-10-23 18:51:51 +05:30
Deepesh Garg
77d509eb9a Merge pull request #32650 from barredterra/unset-contact-details
fix: unset contact details
2022-10-23 18:21:01 +05:30
Deepesh Garg
ef0cb17faf chore: Add repayment date on option 2022-10-22 23:46:01 +05:30
Sagar Sharma
26c00f8dd3 Merge branch 'develop' into refactor/stock/remaining-reports 2022-10-21 15:19:23 +05:30
Sagar Sharma
40bd121593 refactor: rewrite Itemwise Recommended Reorder Level Report queries in QB 2022-10-21 14:49:12 +05:30
Sagar Sharma
cde785f1bb refactor: rewrite Product Bundle Balance Report queries in QB 2022-10-21 14:49:09 +05:30
Sagar Sharma
feaa2dbba8 refactor: rewrite Stock Ledger Report queries in QB 2022-10-21 13:12:34 +05:30
ruthra kumar
eedf7e44a2 Merge pull request #32651 from ruthra-kumar/report_payment_ledger
feat: Payment Ledger report
2022-10-21 11:25:24 +05:30
Deepesh Garg
51d8e9dc5e Merge branch 'develop' of https://github.com/frappe/erpnext into loan_schedule_types 2022-10-20 18:35:16 +05:30
Deepesh Garg
2a50a0ce69 Merge pull request #32551 from codezart/subscription-plan-fix-months
fix: number of months subscription plan
2022-10-20 17:24:24 +05:30
Ankush Menat
11207c4e56 fix: dont update item info twice
[skip ci]
2022-10-20 16:18:48 +05:30
Devin Slauenwhite
b88e850d55 perf: cache barcode scan result (#32629)
* perf: cache barcode scan result

* feat: BarcodeScanResult type

* fix: use safe `get_value` `set_value`

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
2022-10-20 15:56:07 +05:30
rohitwaghchaure
adeb1f92c8 Merge pull request #32667 from rohitwaghchaure/fixed-bom-cost-update-message
fix: BOM cost update message
2022-10-20 14:36:43 +05:30
Rohit Waghchaure
9cfe527492 fix: BOM cost update message 2022-10-20 13:49:46 +05:30
Deepesh Garg
1ca472cc8a chore: Linting issues 2022-10-20 12:09:42 +05:30
Deepesh Garg
b4d008b743 Merge branch 'develop' into subscription-plan-fix-months 2022-10-20 12:07:44 +05:30
Deepesh Garg
ae54610b2a Merge pull request #32659 from deepeshgarg007/inter_company_purchase_doc_address
fix: Billing Address for inter-company purchase docs
2022-10-20 11:58:53 +05:30
rohitwaghchaure
873502c95d Merge pull request #32654 from rohitwaghchaure/fixed-conversion-issue-in-material-request
fix: incorrect qty in material request created from PP
2022-10-20 09:59:19 +05:30
Deepesh Garg
796f2d3c09 fix: Billing Address for inter-company purchase docs 2022-10-19 23:50:39 +05:30
FinByz Tech Pvt. Ltd
c52b41d311 feat(report): added account wise redirection
* feat(report):added account wise redirection

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2022-10-19 23:14:10 +05:30
Raffael Meyer
4ad3002861 fix: allow to create Sales Order from expired Quotation (#32641) 2022-10-19 22:07:02 +05:30
ruthra kumar
6e55b419a6 test: invoice outstandings and payments 2022-10-19 21:49:13 +05:30
ruthra kumar
8f60f0a0cf feat: Basic Payment Ledger report 2022-10-19 21:49:08 +05:30
Rohit Waghchaure
4d5ef721f7 test: validate qty and purchase uom in material request which is created from PP 2022-10-19 19:08:27 +05:30
Rohit Waghchaure
ad278b2007 fix: incorrect qty in material request 2022-10-19 18:38:34 +05:30
rohitwaghchaure
de4c0528f9 Merge pull request #32645 from rohitwaghchaure/fixed-capacity-planning-error
fix: overlap error not raised for job card in case of workstation with production capacity
2022-10-19 17:04:48 +05:30
barredterra
23f0bb45b0 fix: unset contact details 2022-10-19 12:26:56 +02:00
Deepesh Garg
430492152f fix: Advance paid amount in orders (#32642) 2022-10-19 15:37:13 +05:30
niralisatapara
4a35a224e2 feat: Item Wise TDS Calculation 2022-10-19 15:34:41 +05:30
niralisatapara
21d09c5bf2 Item Wise TDS Calculation 2022-10-19 14:33:02 +05:30
Rohit Waghchaure
8b2165e0d1 fix: overlap error not raised for job card in case of workstation with production capacity 2022-10-19 14:19:50 +05:30
Maharshi Patel
d100e68fd0 Merge branch 'frappe:develop' into fix-pricing-rule-item-group-uom 2022-10-19 11:08:05 +05:30
ruthra kumar
f844097f8e Merge pull request #32635 from ruthra-kumar/fix_tax_or_charges_acc_updating_voucher_outstanding
fix: Integrity Error on PLE while submitting sales invoice
2022-10-19 09:43:24 +05:30
Maharshi Patel
96b4211ea1 fix: pricing rule for non stock UOM and conversions
* fix: pricing rule for non stock UOM and conversions
2022-10-18 22:26:11 +05:30
ruthra kumar
8f42e7f703 test: use payable account in tax and to trigger party validation 2022-10-18 17:27:46 +05:30
rohitwaghchaure
f08c42e920 Merge pull request #32520 from s-aga-r/refactor/stock/reports
refactor: rewrite stock reports queries in qb
2022-10-18 13:48:15 +05:30
Sagar Sharma
ae8a63827d Merge branch 'develop' into refactor/stock/reports 2022-10-18 10:48:52 +05:30
Deepesh Garg
7184330acd Merge pull request #32527 from s-aga-r/refactor/buying/reports
refactor: rewrite buying reports queries in qb
2022-10-18 10:06:10 +05:30
ruthra kumar
43b80683eb fix: party type and party mandatory on updating outstanding 2022-10-18 09:33:37 +05:30
Deepesh Garg
42e4c37f15 chore: Break into smaller functions 2022-10-17 20:09:07 +05:30
Deepesh Garg
32117c030a Merge pull request #32622 from deepeshgarg007/ignore_pi_reference
fix: Ignore linked purchase invoice on cancel
2022-10-17 19:38:26 +05:30
Dany Robert
9df9915600 fix: query condition change 2022-10-17 15:54:46 +02:00
Deepesh Garg
faadf78332 fix: Ignore linked purchase invoice on cancel 2022-10-17 18:50:54 +05:30
ruthra kumar
aab325eca5 Merge pull request #32598 from ruthra-kumar/refactor_create_payment_ledger_function
refactor: split ple creation function into two
2022-10-17 18:44:36 +05:30
ruthra kumar
9b50221bf0 refactor: split ple creation function into two
refactor create_payment_ledger_entry function into 2.
one for generating ple map and one for DB entry creation
2022-10-17 18:02:52 +05:30
Dany Robert
2665d7d293 feat: page break in SoA pdf 2022-10-17 14:29:03 +02:00
Deepesh Garg
98b695984b Merge branch 'develop' into refactor/buying/reports 2022-10-17 17:15:27 +05:30
Deepesh Garg
8b16ba7f3a Merge branch 'develop' into refactor/stock/reports 2022-10-17 17:15:18 +05:30
Deepesh Garg
d794b834fd Merge pull request #32618 from ruthra-kumar/fix_failing_github_unit_test_workflow
test: lead creation and deletion restricted to dummy company
2022-10-17 17:11:51 +05:30
Deepesh Garg
e626107d3d chore: Update allow on submit for Sales Invoice fields 2022-10-17 16:48:13 +05:30
Sagar Sharma
582e1bf10c Merge branch 'develop' into refactor/stock/reports 2022-10-17 16:30:43 +05:30
ruthra kumar
ced8d2a537 test: lead creation and deletion restricted to dummy company 2022-10-17 16:26:07 +05:30
Sagar Sharma
cda0baa7fe Merge branch 'develop' into refactor/buying/reports 2022-10-17 16:10:52 +05:30
rohitwaghchaure
0f358e3ca1 Merge pull request #32613 from rohitwaghchaure/group-warehouse-filter
fix: group warehouse filter not working for Batch-wise Balance history report
2022-10-17 15:12:42 +05:30
Rohit Waghchaure
2481574a28 chore: seperate function to apply filter for warehouse in case of QB 2022-10-17 14:25:23 +05:30
Rohit Waghchaure
6381e75fa5 fix: group warehouse filter not working for Batchwise Balance history report 2022-10-17 12:17:05 +05:30
Sagar Sharma
484b115b09 Merge branch 'develop' into refactor/stock/reports 2022-10-17 12:08:44 +05:30
Sagar Sharma
309fc6db43 Merge branch 'develop' into refactor/buying/reports 2022-10-17 12:08:37 +05:30
Deepesh Garg
dc3fe85921 chore: Remove HRMS related code (#32607)
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2022-10-17 11:37:50 +05:30
Deepesh Garg
30da6ab2c1 feat: Editable Sales Invoice 2022-10-17 11:10:38 +05:30
Sagar Sharma
682fb171cb Merge branch 'develop' into refactor/buying/reports 2022-10-16 11:50:31 +05:30
Sagar Sharma
177c9c93e8 Merge branch 'develop' into refactor/stock/reports 2022-10-16 11:50:26 +05:30
Deepesh Garg
40b3d8ec1b Merge pull request #32591 from nabinhait/crm-notes-to-comments
fix: Renamed Notes section to Comments
2022-10-15 17:42:45 +05:30
Deepesh Garg
fc795275f2 Merge pull request #32594 from deepeshgarg007/order_account
fix: Party account for multi-order invoices
2022-10-15 16:58:51 +05:30
Sagar Sharma
5f3796f6ea Merge branch 'develop' into refactor/buying/reports 2022-10-14 11:57:11 +05:30
Sagar Sharma
3c1bd90d0d Merge branch 'develop' into refactor/stock/reports 2022-10-14 11:57:04 +05:30
Anand Baburajan
9127b96033 fix: add project settings to projects workspace (#32568) 2022-10-13 18:27:11 +05:30
Ankush Menat
50e9698932 chore: drop dead code (#32595)
[skip ci]
2022-10-13 15:25:22 +05:30
Deepesh Garg
fd49503ba2 fix: Party account for multi-order invoices 2022-10-13 15:08:34 +05:30
ruthra kumar
2d0217abd5 Merge pull request #32567 from ruthra-kumar/remove_duplicate_ple_on_item_value_repost
fix: deduplicate Payment Ledger on Item value repost
2022-10-13 14:01:59 +05:30
Nabin Hait
f561d8f689 fix: Renamed Dashboard tab label to Connections 2022-10-13 12:43:08 +05:30
Nabin Hait
56a4a77398 fix: Renamed Notes section to Comments 2022-10-13 12:35:04 +05:30
Maharshi Patel
edc93ab6aa fix: pricing rule item group uom
Handle use case where pricing rule is applied on item group and user have selected UOM. pricing rule was applied on all UOM's even after specifying UOM. i have added condition in sql to fix this.
2022-10-13 12:00:30 +05:30
Raffael Meyer
e543dca6a0 fix: don't try to update youtube data if disabled in settings (#32588)
fix: cast value from db

[skip ci]
2022-10-13 11:53:52 +05:30
Sagar Sharma
d6c28aa64d Merge pull request #32576 from s-aga-r/fix/github-issue/32559
fix: `Brand Defaults` filters
2022-10-12 19:22:47 +05:30
Sagar Sharma
bb7897caab Merge branch 'develop' into refactor/stock/reports 2022-10-12 19:21:15 +05:30
Sagar Sharma
610d18cc25 Merge branch 'develop' into refactor/buying/reports 2022-10-12 19:21:10 +05:30
Sagar Sharma
7dfd741ced Merge branch 'develop' into fix/github-issue/32559 2022-10-12 19:20:39 +05:30
rohitwaghchaure
e583d17062 Merge pull request #32583 from rohitwaghchaure/removed-unnecessary-imports
fix: removed unnecessary imports
2022-10-12 17:09:08 +05:30
Rohit Waghchaure
692462d7c8 fix: removed unnecessary imports 2022-10-12 16:30:48 +05:30
Deepesh Garg
43c2bd1351 Merge pull request #32272 from deepeshgarg007/internal_transfer_precision_fixes
fix: Incoming rate precision fixes for intra company transfer
2022-10-12 16:23:16 +05:30
Deepesh Garg
ab137472b0 Merge pull request #32563 from rohitwaghchaure/fixed-source-stock-reposting-for-purchase-flow
fix: consider sales rate as incoming rate for transit warehouse in purchase flow
2022-10-12 16:20:12 +05:30
ruthra kumar
eb819368aa test: dedeplication on payment ledger upon repost 2022-10-12 16:08:59 +05:30
Deepesh Garg
9aa5e20ef7 chore: check only for inter-company transfers 2022-10-12 15:53:28 +05:30
Rohit Waghchaure
98bf8e1304 fix: test case 2022-10-12 15:45:36 +05:30
Rohit Waghchaure
3266e54e33 fix: consider outgoingrate while valuation rate calculate 2022-10-12 15:44:53 +05:30
Rohit Waghchaure
683a47f7a1 fix: consider sales rate as incoming rate for transit warehouse in purchase flow 2022-10-12 15:44:53 +05:30
ruthra kumar
65992304bc fix: delete old ple's on item value repost 2022-10-12 15:34:50 +05:30
Deepesh Garg
49601558c6 chore: fix precision condition 2022-10-12 14:57:16 +05:30
Deepesh Garg
1c05c004cd chore: Use proper accounts 2022-10-12 14:19:09 +05:30
Deepesh Garg
c8d2181498 chore: Increase precision for other doc fields 2022-10-12 14:17:55 +05:30
Sagar Sharma
59edf64951 Merge branch 'develop' into refactor/stock/reports 2022-10-12 13:30:00 +05:30
Sagar Sharma
0af385d73f Merge branch 'develop' into refactor/buying/reports 2022-10-12 13:29:50 +05:30
Sagar Sharma
d2755c0106 Merge branch 'develop' into fix/github-issue/32559 2022-10-12 13:28:35 +05:30
Rohan
43037d893d fix: type-cast while saving an item (#32549) 2022-10-12 13:07:58 +05:30
Sagar Sharma
3426d91140 Merge branch 'develop' into refactor/stock/reports 2022-10-12 12:17:53 +05:30
Sagar Sharma
ef60c533a0 Merge branch 'develop' into refactor/buying/reports 2022-10-12 12:17:48 +05:30
Sagar Sharma
7da32c7db3 fix: Brand Defaults filters 2022-10-12 12:15:07 +05:30
Ankush Menat
6ce3ce758c ci: disable orchestrator (#32571) 2022-10-12 10:57:58 +05:30
Sagar Sharma
16aef53470 Merge branch 'develop' into refactor/stock/reports 2022-10-12 00:38:40 +05:30
Sagar Sharma
a161048a9d Merge branch 'develop' into refactor/buying/reports 2022-10-12 00:38:37 +05:30
Deepesh Garg
38b34f2a45 Merge pull request #32408 from nabinhait/sales-purchase-tab-break
feat: Tab Breaks in all Sales and Purchase cycle transactions
2022-10-11 16:02:45 +05:30
Deepesh Garg
df2a0e265b chore: GL Entries for SLE diff 2022-10-11 14:55:09 +05:30
Deepesh Garg
dc20b21fb5 test: Internal tranfer precision loss test 2022-10-11 14:54:27 +05:30
Deepesh Garg
b31c3bd35d chore: Increase incoming_rate field precision to 6 2022-10-11 14:53:26 +05:30
ruthra kumar
633c2a289e Merge pull request #32557 from ruthra-kumar/value_error_on_pos_save
fix: Value error on validation of POS invoices with Serial Nos
2022-10-11 14:42:47 +05:30
Nabin Hait
e71c417f7e fix: minor cleanup 2022-10-11 13:21:27 +05:30
Nabin Hait
5389a35798 fix: more fields reordering related to Tab Break 2022-10-11 13:21:07 +05:30
Nabin Hait
aaf3c2b329 feat: Tab Break in Purchase Invoice 2022-10-11 13:20:41 +05:30
Nabin Hait
35f836c4b7 feat: Tab Break in Purchase Receipt 2022-10-11 13:18:21 +05:30
Nabin Hait
3d9263bf86 feat: Tab Break in Supplier Quotation 2022-10-11 13:18:21 +05:30
Nabin Hait
2172c5034a feat: Tab Break in Material Request 2022-10-11 13:18:21 +05:30
Nabin Hait
10a25603ac feat: Tab Break in Purchase Order 2022-10-11 13:18:21 +05:30
Nabin Hait
7546562139 feat: Tab Break in Quotation 2022-10-11 13:18:21 +05:30
Nabin Hait
f6613e1e4c feat: Tab Break in Sales Order, Delivery Note, Sales Invoice and Purchase Order 2022-10-11 13:18:21 +05:30
ruthra kumar
9e2bd10d03 test: value error on serial no validation on pos 2022-10-11 12:54:50 +05:30
Deepesh Garg
dddbc130db Merge branch 'develop' of https://github.com/frappe/erpnext into internal_transfer_precision_fixes 2022-10-11 12:54:11 +05:30
ruthra kumar
4b908ebcd6 fix: value error on pos submit 2022-10-11 11:21:11 +05:30
Deepesh Garg
b99b2b75ca Merge pull request #32477 from rasos/patch-1
Austria chart of accounts update
2022-10-11 10:20:49 +05:30
Deepesh Garg
6a2edab6eb Merge pull request #32554 from AnandBaburajan/fix_budget_autoname
fix: use naming_series in budget
2022-10-11 10:15:17 +05:30
Anand Baburajan
ba754825b9 Merge branch 'develop' into fix_budget_autoname 2022-10-10 23:17:18 +05:30
anandbaburajan
e4d7d8c42d fix: use naming_series in budget 2022-10-10 23:04:34 +05:30
codezart
2d30b36cca fix: number of months subscription plan 2022-10-10 11:24:42 -04:00
ruthra kumar
65194efa97 Merge pull request #32548 from ruthra-kumar/suppress_linked_doc_valdiation_on_delete
fix: allow deletion of cancelled Invoices once payments are unlinked
2022-10-10 16:41:07 +05:30
ruthra kumar
143f905838 test: update ple on payment unlink for SI's and SO's 2022-10-10 15:57:38 +05:30
Deepesh Garg
a14c5dbcc4 Merge branch 'develop' of https://github.com/frappe/erpnext into internal_transfer_precision_fixes 2022-10-10 15:08:15 +05:30
rohitwaghchaure
be1ebd348b Merge pull request #32497 from s-aga-r/fix/quality-inspection/status
chore: set `Quality Inspection` status based on readings status
2022-10-10 10:49:56 +05:30
ruthra kumar
537d953f4c fix: unlink payment on invoice cancellation 2022-10-10 10:17:19 +05:30
Deepesh Garg
0f033bf8f6 Merge pull request #32536 from deepeshgarg007/po_cancel
fix: PO cancel post advance payment cancel against PO
2022-10-09 18:34:55 +05:30
Deepesh Garg
d806e32030 fix: PO cancel post advance payment cancel against PO 2022-10-08 21:25:11 +05:30
Deepesh Garg
4b828dd276 Merge branch 'develop' of https://github.com/frappe/erpnext into loan_schedule_types 2022-10-08 18:41:39 +05:30
Sagar Sharma
60befcd8a8 Merge branch 'develop' into fix/quality-inspection/status 2022-10-08 13:34:21 +05:30
Sagar Sharma
4992e4a2b8 fix(test): test_rejected_qi_validation 2022-10-08 13:33:36 +05:30
Sagar Sharma
fcc1272d42 test: add test cases for Quality Inspection status 2022-10-08 13:33:36 +05:30
Sagar Sharma
2657ece2cd fix: set Quality Inspection status based on readings status 2022-10-08 13:33:22 +05:30
Sagar Sharma
ce20b05ed0 Merge branch 'develop' into refactor/buying/reports 2022-10-08 10:48:03 +05:30
Sagar Sharma
e78a706994 refactor: rewrite Procurement Tracker Report queries in QB 2022-10-08 10:47:10 +05:30
rohitwaghchaure
ce5a792e34 Merge pull request #32393 from rohitwaghchaure/provision-to-return-components
feat: provision to return non consumed components against the work order
2022-10-08 08:24:36 +05:30
rohitwaghchaure
73a9791401 Merge branch 'develop' into provision-to-return-components 2022-10-07 23:50:05 +05:30
Rohit Waghchaure
d59ed24e6c feat: provision to return non consumed components against the work order 2022-10-07 22:45:53 +05:30
Sagar Sharma
a14b9c7bac refactor: rewrite Supplier Quotation Comparison Report queries in QB 2022-10-07 18:07:53 +05:30
Sagar Sharma
a5b3f8cae9 refactor: rewrite Purchase Order Analysis Report queries in QB 2022-10-07 17:30:01 +05:30
Deepesh Garg
17201facf1 Merge pull request #32522 from deepeshgarg007/tax_withholding_related_fixes
fix: Tax withholding related fixes
2022-10-07 16:32:18 +05:30
Deepesh Garg
781d160c68 fix: Do not add tax withheld vouchers post tax withheding in one document 2022-10-07 14:22:40 +05:30
Deepesh Garg
abf5b6be3e fix: Tax withholding related fixes 2022-10-07 14:04:36 +05:30
Sagar Sharma
f0f2413932 Merge branch 'develop' into refactor/stock/reports 2022-10-07 09:59:56 +05:30
Sagar Sharma
8103856a41 refactor: rewrite Warehouse wise Item Balance Age and Value Report queries in QB 2022-10-07 09:59:35 +05:30
Sagar Sharma
7c759b193c refactor: rewrite Total Stock Summary Report queries in QB 2022-10-07 09:59:28 +05:30
Sagar Sharma
d7c3b7633a fix: make readings status mandatory in Quality Inspection 2022-10-06 22:36:37 +05:30
Ankush Menat
8376fbc982 fix: Explicitly update modified (#32519)
* fix: Explicitly update modified

required after https://github.com/frappe/frappe/pull/18301

* chore: fix broken translations
2022-10-06 20:35:33 +05:30
Sagar Sharma
d3c073dc25 refactor: rewrite Supplier-Wise Sales Analytics Report queries in QB 2022-10-06 17:42:31 +05:30
Sagar Sharma
c18f13a45b refactor: rewrite Stock Projected Qty Report queries in QB 2022-10-06 17:04:50 +05:30
Ankush Menat
07c4a74838 chore: drop stale demo page (#32515) 2022-10-06 13:01:53 +05:30
Ankush Menat
8d1db0ea3d fix: single column indexes (#32425)
refactor: move single column indexes to doctypes
2022-10-06 11:28:26 +05:30
HENRY Florian
0e4017cbe5 chore: update fr translation (#32385) 2022-10-05 18:19:44 +05:30
Deepesh Garg
0235901614 Merge pull request #32478 from rtdany10/patch-23
feat(JE): trigger account field when fetched from template
2022-10-05 16:07:59 +05:30
Deepesh Garg
fbdd1f39e7 Merge pull request #32499 from rohitwaghchaure/fixed-TooManyWritesError-for-reposting
fix: TooManyWritesError during reposting of stock
2022-10-05 16:05:12 +05:30
Deepesh Garg
777ed10e21 Merge pull request #32491 from ruthra-kumar/performance_issue_on_migrate_remarks_patch
refactor: remove duplicate entries on remarks migration patch
2022-10-05 16:04:23 +05:30
Rohit Waghchaure
aaabba9b1e fix: TooManyWritesError during reposting of stock 2022-10-05 10:58:21 +05:30
Sagar Sharma
39707757a6 chore: add Manual Inspection field in Quality Inspection DocType 2022-10-04 23:16:16 +05:30
Dany Robert
74505a116f Merge branch 'develop' into patch-23 2022-10-04 17:17:30 +05:30
ruthra kumar
518ab93e03 refactor: remove duplicate entries on remarks migration patch 2022-10-04 12:39:34 +05:30
Summayya Hashmani
da43a5e371 refactor(UI): clean up portal pages (#29018)
* refactor: list view for portal pages

* refactor: add align center class

* refactor: change footer btn class(primary)

* refactor: add order style page

* refactor: import order page in website

* refactor: remove table elements

* fix: preview image height

* fix: make string translatable

* refactor: change font variables

* refactor: order preview bg white

* refactor: center align items

* fix: breadcrumb padding

* refactor: make preview image rounded

* refactor: add condition for image container

* refactor: change alignment for mobile view

* fix: make footer button secondary

* refactor: clean code

* refactor: code indentantion

* refactor: remove space

* fix: Payment section cleanup

Co-authored-by: Summayya <frappe@Summayyas-MacBook-Air.local>
Co-authored-by: Marica <maricadsouza221197@gmail.com>
Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2022-10-04 09:57:07 +05:30
Dany Robert
c35adcf5a1 feat(JE): trigger account field when fetched from template
Closes #32409
2022-10-03 19:31:20 +05:30
Roland
7d84cca431 Austria chart of accounts update
improved mapping of VAT accounts
2022-10-03 14:13:27 +02:00
niralisatapara
e758a753f8 Item Wise TDS Calculation
For calculating Item wise TDS in Purchase Invoice.
2022-10-03 16:39:35 +05:30
Sagar Sharma
ccf2952b76 Merge pull request #32472 from s-aga-r/fix/pick-list/picked-qty
fix: pick list picked-qty for batch item
2022-10-03 14:45:29 +05:30
Sagar Sharma
e295d0c091 Merge branch 'develop' into fix/pick-list/picked-qty 2022-10-03 14:20:05 +05:30
Sagar Sharma
ba02209f1d fix: pick list picked-qty for batch item 2022-10-03 14:12:42 +05:30
rohitwaghchaure
1c5ae80029 Merge pull request #32466 from rohitwaghchaure/allow-to-return-expired-batches
fix: not able to return sold expired batches
2022-10-03 13:14:59 +05:30
Deepesh Garg
8c23b19da1 Merge pull request #32394 from maharshivpatel/fix-payment-request-fetch-swift-number
fix: fetch swift number in payment request from bank doctype
2022-10-03 12:55:02 +05:30
Rohit Waghchaure
0b1727cf79 fix: not able to return sold expired batches 2022-10-03 12:06:32 +05:30
Shridhar Patil
69efd2ee24 fix: fixes query builder order by issue in postgres (#32441)
* fix: fixes query builder order by issue in postgres

* fix: linter
2022-10-03 11:07:24 +05:30
Dany Robert
91055151ce fix: (bulk transaction) key error and better error logging (#32445)
* fix: (bulk transaction) key error and better error logging

* chore: pre-commit

* chore: linter - missing comma
2022-10-03 10:59:53 +05:30
Muvuk
73e5a7d671 fix: update with new Frappe color. fix #32455 (#32456)
* Update with new Frappe color.

* refactor: use css variables

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
2022-10-02 22:30:36 +05:30
Deepesh Garg
601880f1ce Merge pull request #32454 from AnandBaburajan/fix_test_scrap_asset
fix: test_scrap_asset not working on end of month
2022-10-02 17:44:46 +05:30
Deepesh Garg
28772bc9a4 Merge pull request #32405 from AnandBaburajan/fix_asset_sold_status
fix: status of assets with maintenance_required changing back to 'Partially Depreciated' some time after being sold
2022-10-02 17:41:31 +05:30
Anand Baburajan
04f9e7fa73 Merge branch 'develop' into fix_test_scrap_asset 2022-10-01 17:12:24 +05:30
anandbaburajan
47bd4be71b fix: test_scrap_asset 2022-10-01 17:04:22 +05:30
Deepesh Garg
1c560a967c Merge branch 'develop' into fix-payment-request-fetch-swift-number 2022-10-01 16:14:27 +05:30
Maharshi Patel
62c5b28690 fix: typo in sales_register's filter mode_of_payment (#32371)
* fix: typo in sales_register's filter mode_of_payment
2022-10-01 11:04:53 +05:30
Sagar Sharma
c9275f156e Merge pull request #32439 from s-aga-r/purchase-order/item/fg-item
fix: add non-stock item filter for `fg_item` in PO
2022-09-30 23:59:12 +05:30
Sagar Sharma
e71b25107d Merge branch 'develop' into purchase-order/item/fg-item 2022-09-30 19:10:07 +05:30
Sagar Sharma
793295cfe9 Merge pull request #32428 from s-aga-r/fix/item/update-stock
fix: don't allow to update `Maintain Stock` if the item has a `BOM`
2022-09-30 19:08:19 +05:30
Sagar Sharma
128c4bb7cb Merge branch 'develop' into purchase-order/item/fg-item 2022-09-30 17:06:35 +05:30
Sagar Sharma
f95ed7dca2 fix: add non-stock item filter for fg_item in PO 2022-09-30 17:05:16 +05:30
Sagar Sharma
1f4e4db50d Merge branch 'develop' into fix/item/update-stock 2022-09-30 16:55:26 +05:30
Sagar Sharma
c7d808a560 Merge pull request #32436 from s-aga-r/fix/scr/non-stock-item
fix: add validation for non-stock item in SCR
2022-09-30 16:53:07 +05:30
Sagar Sharma
ca2958a999 Merge branch 'develop' into fix/item/update-stock 2022-09-30 16:36:46 +05:30
Maharshi Patel
dc8d49260c fix: payment request make bank field Link instead of Read Only 2022-09-30 16:22:57 +05:30
Sagar Sharma
eedaf9cd26 Merge branch 'develop' into fix/scr/non-stock-item 2022-09-30 16:19:23 +05:30
Sagar Sharma
fa2290657a fix: add validation for non-stock item in SCR 2022-09-30 16:18:15 +05:30
Deepesh Garg
cceb29c005 Merge pull request #32412 from deepeshgarg007/tcs_deduction_issue
fix: Incorrect TCS amount deducted in Sales Invoice
2022-09-30 16:05:30 +05:30
Deepesh Garg
a79d074436 Merge pull request #32368 from ruthra-kumar/remove_code_for_buying_side_discount_accounting
chore: remove discount accounting logic from PI and PI Item
2022-09-30 15:58:35 +05:30
Deepesh Garg
429303bbb7 Merge pull request #32402 from deepeshgarg007/item_dashboard_create_new
fix: Item details fetching on making transaction from item dashboard
2022-09-30 15:56:32 +05:30
Nabin Hait
fe891aa488 fix: Create accounting dimension fields in asset capitalization 2022-09-30 15:55:41 +05:30
Maharshi Patel
9245d3b5cd Revert "fix: fetch swift_number in payment_request"
This reverts commit f42a8e4e03.
2022-09-30 15:35:12 +05:30
Deepesh Garg
bf7a51791a chore: label post save 2022-09-30 15:29:07 +05:30
Sagar Sharma
6d0842465b fix: don't allow to update Maintain Stock if the item has a BOM 2022-09-30 15:18:10 +05:30
Deepesh Garg
679b5ed551 chore: Add patch to update repayment schedule type in loan documents 2022-09-30 14:06:06 +05:30
Sagar Sharma
b1edd911f9 Merge branch 'develop' into remove_code_for_buying_side_discount_accounting 2022-09-30 12:39:29 +05:30
Sagar Sharma
774097bd10 Merge branch 'develop' into item_dashboard_create_new 2022-09-30 12:37:58 +05:30
Deepesh Garg
2ddee50f27 chore: Update labels as per repayment type 2022-09-30 10:39:45 +05:30
Deepesh Garg
3466461eb3 chore: Remove print statements 2022-09-30 10:19:58 +05:30
Deepesh Garg
76c6ccab5d feat: Repayment schedule types for term loans 2022-09-30 10:13:17 +05:30
anandbaburajan
eadcd8e614 Merge branch 'fix_asset_sold_status' of https://github.com/AnandBaburajan/erpnext into fix_asset_sold_status 2022-09-29 15:34:48 +05:30
anandbaburajan
28952eda87 chore: remove unused function 2022-09-29 15:33:45 +05:30
Anand Baburajan
990514ae6d Merge branch 'develop' into fix_asset_sold_status 2022-09-29 15:32:37 +05:30
anandbaburajan
f1169fb213 chore: refactor by just using a filter 2022-09-29 15:32:01 +05:30
Sagar Sharma
f04ae7a112 Merge pull request #32404 from s-aga-r/fix/supplier-portal/make-pi-btn
fix(ux): show `Make Purchase Invoice` button based on permission
2022-09-29 14:56:02 +05:30
Sagar Sharma
ffef659782 Merge branch 'develop' into fix/supplier-portal/make-pi-btn 2022-09-29 14:54:29 +05:30
rohitwaghchaure
10b7592d14 Merge pull request #32414 from rohitwaghchaure/consider-searchfields-as-per-customize-form
fix: searchfields as per customize form not working for Item
2022-09-29 14:51:55 +05:30
Rohit Waghchaure
3656f7d06f test: added test case 2022-09-29 14:01:51 +05:30
anandbaburajan
469a97ddd2 Merge branch 'fix_asset_sold_status' of https://github.com/AnandBaburajan/erpnext into fix_asset_sold_status 2022-09-29 08:55:30 +05:30
anandbaburajan
0b3b4c99e6 Merge branch 'develop' of https://github.com/frappe/erpnext into fix_asset_sold_status 2022-09-29 08:55:00 +05:30
anandbaburajan
b734f9d237 chore: refactor by creating is_sold 2022-09-29 08:54:35 +05:30
Rohit Waghchaure
fd889fd29a fix: searchfields as per customize form not working for Item 2022-09-28 23:00:45 +05:30
Anand Baburajan
b3c4305fa2 Merge branch 'develop' into fix_asset_sold_status 2022-09-28 21:36:43 +05:30
Deepesh Garg
369a343fb2 Merge pull request #32363 from ernestoruiz89/patch-7
fix: add translate function to strings in www/book appoinment
2022-09-28 20:15:05 +05:30
Deepesh Garg
bff3cd9068 chore: Remove print statements 2022-09-28 20:13:24 +05:30
Deepesh Garg
08443c6421 fix: Incorrect TCS amount deducted in Sales Invoice 2022-09-28 20:11:00 +05:30
Deepesh Garg
84ab5d45fd Merge pull request #32403 from deepeshgarg007/loan_type_patch_fix
fix: Disbursement Account in patch to update old loans
2022-09-28 19:35:42 +05:30
Anand Baburajan
d4242de699 Merge branch 'develop' into fix_asset_sold_status 2022-09-28 18:20:46 +05:30
anandbaburajan
f4bf9c672f chore: rewrite query using frappe.qb 2022-09-28 18:20:20 +05:30
Sagar Sharma
9743add40e Merge pull request #32406 from s-aga-r/fix/stock-entry/supplied-items
fix: supplied items added twice in Stock Entry
2022-09-28 17:50:16 +05:30
Sagar Sharma
a145d1065a Merge branch 'develop' into fix/stock-entry/supplied-items 2022-09-28 16:55:57 +05:30
Sagar Sharma
ac7409bbf3 fix: supplied items added twice in Stock Entry 2022-09-28 16:46:48 +05:30
Anand Baburajan
0618f606b2 Merge branch 'develop' into fix_asset_sold_status 2022-09-28 16:42:21 +05:30
anandbaburajan
a8dd3c3a7c chore: adding missing asset statuses 2022-09-28 16:39:14 +05:30
anandbaburajan
1725672168 chore: adding missing asset statuses 2022-09-28 16:22:35 +05:30
anandbaburajan
f9f68005a5 fix: asset requiring maintenance sold status 2022-09-28 16:21:31 +05:30
Sagar Sharma
e63e017d20 Merge branch 'develop' into fix/supplier-portal/make-pi-btn 2022-09-28 15:46:52 +05:30
Sagar Sharma
80080a3d7b fix: show Make Purchase Invoice button based on permission 2022-09-28 15:40:07 +05:30
Deepesh Garg
be623ce8e8 fix: Disbursement Account in patch to update old loans 2022-09-28 15:36:59 +05:30
Deepesh Garg
0439e41a44 fix: Item details fetching on making transaction from item dashboard 2022-09-28 14:54:53 +05:30
Nabin Hait
dde8b2afff Merge pull request #32226 from AnandBaburajan/fix_asset_scrap_and_sale_dep
fix: calculate depreciation properly on asset sale entry and scrap entry
2022-09-28 14:28:52 +05:30
Maharshi Patel
f42a8e4e03 fix: fetch swift_number in payment_request
There isn't direct link between payment_request and bank so swift_number wasn't fetched using Fetch form. I fixed it by fetching swift_number on_change of bank_account.
2022-09-28 12:54:00 +05:30
Anand Baburajan
c1e3498a2a Merge branch 'develop' into fix_asset_scrap_and_sale_dep 2022-09-28 12:18:38 +05:30
Saqib Ansari
d5359bbdc2 Merge pull request #32379 from maharshivpatel/fix-pos-validate-qty-if-is_stock_item
fix(pos): validate available quantity only if stock item
2022-09-28 12:00:03 +05:30
Deepesh Garg
0c869251ce Merge branch 'develop' into fix_asset_scrap_and_sale_dep 2022-09-28 08:38:52 +05:30
Maharshi Patel
d850b0adb1 Merge branch 'develop' into fix-pos-validate-qty-if-is_stock_item 2022-09-27 23:45:50 +05:30
Maharshi Patel
e392ea1104 fix: POS properly validate stock for bundle products
Stock availability was not calculated properly for Product Bundle with non stock item so i have added logic to properly calculate that as well.
2022-09-27 23:44:56 +05:30
Deepesh Garg
dbe4fdc73d Merge pull request #32382 from deepeshgarg007/subscription_process
fix: Move subscription process to hourly long queue
2022-09-27 23:39:12 +05:30
Deepesh Garg
4c8617e1bb Merge pull request #32378 from deepeshgarg007/add_index_return_against
fix: Add return against indexes for POS Invoice
2022-09-27 22:22:03 +05:30
Deepesh Garg
82a2f31ada fix: Move subscription process to hourly long quque 2022-09-27 22:12:32 +05:30
Anand Baburajan
cf72931816 Merge branch 'develop' into fix_asset_scrap_and_sale_dep 2022-09-27 20:43:53 +05:30
anandbaburajan
c6a7de0e54 chore: add blank lines 2022-09-27 20:43:08 +05:30
anandbaburajan
14e2d31619 test: adding test_asset_with_maintenance_required_status_after_sale 2022-09-27 20:19:01 +05:30
rohitwaghchaure
f95de1fd4d Merge pull request #32377 from s-aga-r/fix/work-order/finish-button
fix: consider overproduction percentage for WO finish button
2022-09-27 17:44:41 +05:30
Deepesh Garg
cbfe28286a fix: Add return against indexes for POS Invoice 2022-09-27 16:22:59 +05:30
Nabin Hait
6145013f30 Merge branch 'develop' into fix_asset_scrap_and_sale_dep 2022-09-27 15:56:39 +05:30
Maharshi Patel
e39e088f18 fix: POS only validate QTY if is_stock_item
POS invoice raised " Item not available " validation error even though item is non_stock.
2022-09-27 15:44:38 +05:30
Deepesh Garg
1f6205e1ea fix: Add return against indexes for POS Invoice 2022-09-27 15:37:41 +05:30
Sagar Sharma
376febb9d1 Merge branch 'develop' into fix/work-order/finish-button 2022-09-27 15:36:15 +05:30
Maharshi Patel
c760ca2323 fix: Scrap Asset Accounting Dimensions (#31949)
* fix: Scrap Asset Accounting Dimensions
2022-09-27 15:31:36 +05:30
Sagar Sharma
05392e0918 fix: consider overproduction percentage for WO finish button 2022-09-27 15:30:08 +05:30
rohitwaghchaure
c917d716f7 Merge pull request #32370 from rohitwaghchaure/fixed-allow-expied-batch-return-using-pr-pi
fix: Not allowing to return expired batches using purchase return
2022-09-27 14:20:40 +05:30
Rohit Waghchaure
a4a86ee23f fix: allow to return expired batches using purchase return 2022-09-27 13:55:27 +05:30
Sagar Sharma
9049db41ae fix: For Quantity error msg in Stock Entry 2022-09-27 12:00:50 +05:30
ruthra kumar
21095502b9 chore: clean up purchase invoice and purchase invoice item
1. remove discount accounting related fields from purchase invoice and
purchase invoice item
2. clean buying settings doctype
2022-09-27 11:10:41 +05:30
Deepesh Garg
ce80b9fa0e Merge branch 'develop' of https://github.com/frappe/erpnext into internal_transfer_precision_fixes 2022-09-26 21:16:25 +05:30
Deepesh Garg
6e47fd54a0 fix: Hanlde rounding loss for internal transfer 2022-09-26 21:15:57 +05:30
rohitwaghchaure
106ee1bf4d Merge pull request #32339 from rohitwaghchaure/fixed-opening-entry-trial-balance-issue
fix: opening entry causing discrepancy between stock and trial balance
2022-09-26 20:32:41 +05:30
rohitwaghchaure
6a67cc96d0 Merge pull request #32049 from djpalshikar/patch-1
Allow Item Templates in Work Order Items
2022-09-26 20:27:33 +05:30
Ernesto Ruiz
499ce5139c fix: add translate function to book appointment verify html 2022-09-26 08:04:14 -06:00
Ernesto Ruiz
728ef46048 fix: add translate function to book appointment index.js 2022-09-26 08:01:48 -06:00
Ernesto Ruiz
e683cccf35 fix: add translate function to book appointment html 2022-09-26 07:59:13 -06:00
Sagar Sharma
e312d17eae refactor: rewrite Item Prices Report queries in QB 2022-09-26 17:50:17 +05:30
hendrik
f41d1500b0 fix: report chart field type
* fix: report chart field type

Co-authored-by: Sagar Sharma <sagarsharma.s312@gmail.com>
Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
2022-09-26 17:47:24 +05:30
Sagar Sharma
a80e8726e7 Merge pull request #32347 from s-aga-r/refactor/stock/report/incorrect-stock-value
refactor: rewrite `Incorrect Stock Value Report` queries in `QB`
2022-09-26 17:09:40 +05:30
Sagar Sharma
afb323b01c Merge branch 'develop' into refactor/stock/report/incorrect-stock-value 2022-09-26 17:09:22 +05:30
Sagar Sharma
2647018870 Merge pull request #32346 from s-aga-r/refactor/stock/report/item-price-stock-report
refactor: rewrite `Item Price Stock Report` queries in `QB`
2022-09-26 17:08:44 +05:30
Sagar Sharma
9a1fa53791 Merge branch 'develop' into refactor/stock/report/item-price-stock-report 2022-09-26 17:08:30 +05:30
Deepesh Garg
d84fd6c925 Merge pull request #32245 from pps190/feat_scan_sound
feat(stock): Audible indication of barcode scan status.
2022-09-26 17:02:37 +05:30
Deepesh Garg
9b38a372fb Merge pull request #32262 from shashankshirke/develop
fix: broken link for item valuation updated
2022-09-26 16:59:36 +05:30
Deepesh Garg
389fa180c8 Merge pull request #32276 from ernestoruiz89/patch-4
fix: add some strings to translate function
2022-09-26 16:39:04 +05:30
Deepesh Garg
539f8550c7 Merge pull request #32336 from ernestoruiz89/patch-6
fix: typo on opportunity summary by sales stage report
2022-09-26 16:37:58 +05:30
ruthra kumar
8b21d27f04 Merge pull request #32310 from nishibakabeer/patch-4
fix: total value in all keys
2022-09-26 11:27:47 +05:30
nishibakabeer
6919f389aa fix: total value in all keys
Gross and net profit report showing wrong values in monthly quarterly and half yearly filters which is the total value
@ruthra-kumar added in develop branch as suggested ( https://github.com/frappe/erpnext/pull/32020)
2022-09-26 10:40:55 +05:30
ruthra kumar
b33fb26b84 Merge pull request #32303 from ruthra-kumar/fix_difference_amount_calculation_on_payment_reconciliation
fix: difference amount calculation and popup on payment reconciliation
2022-09-26 10:25:12 +05:30
Sagar Sharma
b93331e844 refactor: rewrite Incorrect Stock Value Report queries in QB 2022-09-26 09:44:29 +05:30
Sagar Sharma
22299d2382 refactor: rewrite Item Price Stock Report queries in QB 2022-09-26 09:40:49 +05:30
Sagar Sharma
bb59346651 refactor: rewrite Delayed Item Report queries in QB 2022-09-23 15:47:26 +05:30
Rohit Waghchaure
bc3ab45af2 fix: opening entry causing discepancy between stock and trial balance 2022-09-23 15:21:09 +05:30
Sagar Sharma
1c1f991d2f refactor: rewrite Batch-Wise Balance History Report queries in QB 2022-09-23 14:57:44 +05:30
Sagar Sharma
2c9d9577e3 refactor: rewrite Batch Item Expiry Status Report queries in QB 2022-09-23 14:06:37 +05:30
Ernesto Ruiz
c4919cf5ec fix: typo on opportunity summary by sales stage report 2022-09-22 15:42:46 -06:00
Sagar Sharma
4efb8b142c Merge pull request #32324 from s-aga-r/refactor/report/production-planning-report
refactor: rewrite `Production Planning Report` queries in `QB`
2022-09-22 18:12:52 +05:30
Sagar Sharma
729193aca8 Merge branch 'develop' into refactor/report/production-planning-report 2022-09-22 11:18:02 +05:30
Sagar Sharma
8417b9b99c refactor: rewrite Production Planning Report queries in QB 2022-09-22 11:17:11 +05:30
rohitwaghchaure
d7e699ea1a Merge pull request #32309 from rohitwaghchaure/fixed-item-code-key-error
fix: item_code key error in production plan
2022-09-21 15:27:43 +05:30
Rohit Waghchaure
caf23e6b8e fix: item_code key error in production plan 2022-09-21 13:11:51 +05:30
Sagar Sharma
07f87b9147 Merge pull request #32304 from s-aga-r/refactor/report/exponential-smoothing-forecasting
refactor: rewrite `Exponential Smoothing Forecasting` queries in `QB`
2022-09-21 11:47:39 +05:30
Sagar Sharma
86c9ce9c20 Merge branch 'develop' into refactor/report/exponential-smoothing-forecasting 2022-09-21 10:25:47 +05:30
Sagar Sharma
5aff9e999e Merge pull request #32297 from s-aga-r/refactor/report/bom-variance-report
refactor: rewrite `BOM Variance Report` queries in `QB`
2022-09-21 10:00:04 +05:30
Sagar Sharma
1c0f1a2831 Merge branch 'develop' into refactor/report/exponential-smoothing-forecasting 2022-09-21 09:55:28 +05:30
Sagar Sharma
56f9c1b6f7 refactor: rewrite Exponential Smoothing Forecasting queries in QB 2022-09-21 09:54:38 +05:30
ruthra kumar
122d5f2729 fix: difference amount calculation on payment reconciliation 2022-09-21 08:36:09 +05:30
Sagar Sharma
d3a6881737 Merge branch 'develop' into refactor/report/bom-variance-report 2022-09-20 23:11:08 +05:30
Sagar Sharma
2235f31ffe Merge pull request #32295 from s-aga-r/refactor/report/bom-stock-report
refactor: rewrite `BOM Stock Report` queries in `QB`
2022-09-20 23:06:57 +05:30
Sagar Sharma
0048f58500 Merge branch 'develop' into refactor/report/bom-variance-report 2022-09-20 20:21:49 +05:30
Sagar Sharma
92e03e2c22 Merge branch 'develop' into refactor/report/bom-stock-report 2022-09-20 20:21:38 +05:30
ruthra kumar
6e65f01ede Merge pull request #32296 from ruthra-kumar/amount_in_words_for_debit_note
fix: get amount in words for debit note
2022-09-20 18:09:33 +05:30
Sagar Sharma
19e64eb247 refactor: rewrite BOM Variance Report queries in QB 2022-09-20 17:56:47 +05:30
ruthra kumar
70f6484d9d fix: get amount in words for debit note 2022-09-20 17:32:23 +05:30
Sagar Sharma
000c538d65 Merge branch 'develop' into refactor/report/bom-stock-report 2022-09-20 16:27:00 +05:30
Sagar Sharma
390ce5719d fix: warehouse filter in BOM Stock Calculated Report 2022-09-20 16:25:20 +05:30
Sagar Sharma
8fd7c04920 refactor: rewrite BOM Stock Report queries in QB 2022-09-20 16:23:14 +05:30
Deepesh Garg
4f2486a67a Merge pull request #32284 from maharshivpatel/fix-remove-no-copy-for-ignore_pricing_rule
fix: remove no_copy for ignore_pricing_rule
2022-09-20 16:19:16 +05:30
Deepesh Garg
d4b01f6ffd Merge branch 'develop' of https://github.com/frappe/erpnext into fix-remove-no-copy-for-ignore_pricing_rule 2022-09-20 14:58:48 +05:30
Nabin Hait
ecb5fff2ec Merge pull request #32264 from deepeshgarg007/asset_depreciation_date
fix: Depreciation posting date only when calculate depreciation is checked
2022-09-20 14:48:03 +05:30
Deepesh Garg
ef7d7e7d71 Merge pull request #32204 from deepeshgarg007/pending_tds_vouchers
fix(UX): More predictable tax withholding application in invoices
2022-09-20 14:35:16 +05:30
Sagar Sharma
2186a89781 Merge pull request #32280 from s-aga-r/refactor/report/item-shortage-report
refactor: rewrite `Item Shortage Report` queries in QB
2022-09-20 11:14:32 +05:30
Sagar Sharma
dad40b8d51 Merge branch 'develop' into refactor/report/item-shortage-report 2022-09-20 10:48:29 +05:30
Sagar Sharma
3dc754cac2 test: add test cases for Item Shortage Report 2022-09-20 10:48:05 +05:30
Sagar Sharma
f0a78aa559 refactor: rewrite Item Shortage Report queries in QB 2022-09-20 10:47:55 +05:30
Deepesh Garg
3d356763d0 Merge pull request #32217 from ruthra-kumar/bug_in_tax_on_multi_currency_payment_entry
fix: incorrect gl if tax on multi currency payment entry
2022-09-20 09:59:47 +05:30
Deepesh Garg
49538e81de Merge pull request #32235 from maharshivpatel/fix-payment-schedule-description
fix: fetch description only if empty on the payment schedule
2022-09-20 09:13:43 +05:30
Deepesh Garg
1f4932966a Merge branch 'develop' of https://github.com/frappe/erpnext into pending_tds_vouchers 2022-09-20 09:06:35 +05:30
Deepesh Garg
9aa1f84d45 chore: fix tests 2022-09-20 09:06:18 +05:30
Ernesto Ruiz
94199b7867 fix: add translate function to strings 2022-09-19 11:56:42 -06:00
Ernesto Ruiz
aa49ec815a fix: add translate function to strings 2022-09-19 11:55:13 -06:00
Ernesto Ruiz
9decebe6e1 fix: Add strings to translate function 2022-09-19 10:13:30 -06:00
Sagar Sharma
377576f131 Merge pull request #32274 from s-aga-r/fix/stock-entry/subcontract-order-item-reference
fix: `po_detail` or `sco_rm_detail` not getting set while while mapping SE
2022-09-19 19:18:54 +05:30
Sagar Sharma
a4db9abcb4 Merge branch 'develop' into fix/stock-entry/subcontract-order-item-reference 2022-09-19 18:52:27 +05:30
Sagar Sharma
3a9c08e7c9 fix: po_detail or sco_rm_detail not getting set while while mapping SE 2022-09-19 18:47:46 +05:30
Deepesh Garg
083309c056 fix: Incoming rate precision fixes for intra company transfer 2022-09-19 15:06:06 +05:30
ruthra kumar
efc9553561 Merge pull request #32251 from ruthra-kumar/set_default_supplier_currency_for_po_created_from_so
fix: use default supplier currency if default supplier is enabled
2022-09-19 12:44:51 +05:30
Deepesh Garg
fac82cf69b fix: Depreciation posting date only when calculate depreciation is checked 2022-09-18 19:41:05 +05:30
Shashank Shirke
785eaf8e8f fix: broken link for item valuation updated
Old URL (404 Not Found): https://docs.erpnext.com/docs/v13/user/manual/en/stock/item/item-valuation-fifo-and-moving-average

Updated URL: https://docs.erpnext.com/docs/v13/user/manual/en/stock/articles/calculation-of-valuation-rate-in-fifo-and-moving-average
2022-09-18 05:42:47 -07:00
Sagar Sharma
b944849bd4 Merge pull request #32250 from s-aga-r/fix/stock-entry/supplied-item-reference
fix: make `po_detail` or `sco_rm_detail` mandatory for SE Send to Subcontractor
2022-09-18 14:54:08 +05:30
Sagar Sharma
b747d9d05e Merge branch 'develop' into fix/stock-entry/supplied-item-reference 2022-09-18 11:37:38 +05:30
Sagar Sharma
b90875575c fix: make po_detail or sco_rm_detail mandatory for SE Send to Subcontractor 2022-09-18 11:37:07 +05:30
Deepesh Garg
110840aa98 Merge pull request #32244 from deepeshgarg007/project_po_linking
fix: Parent Level project linkning on creating PO from project
2022-09-17 20:29:40 +05:30
ruthra kumar
77fdc37cb7 fix: use default supplier currency if default supplier is enabled 2022-09-17 16:34:33 +05:30
Sagar Sharma
3b5284ec2b Merge pull request #32247 from s-aga-r/fix/stock-entry/sco-rm-detail
fix: add SCO supplied item reference while mapping the Stock Entry
2022-09-17 15:42:03 +05:30
Sagar Sharma
2f97370b8e fix: sco_rm_detail in Stock Entry 2022-09-17 14:29:42 +05:30
rohitwaghchaure
3c01bf3a12 Merge pull request #32238 from rohitwaghchaure/fix-pricing-rules-issues
fix: suggestion threshold label and rule was not working for other item with min and max amount
2022-09-17 12:11:24 +05:30
Devin Slauenwhite
32e75ff808 feat: audible indication of scan status. 2022-09-16 17:58:01 -04:00
Devin Slauenwhite
613c8158a8 fix: actually reject process_scan when update_table fails. 2022-09-16 17:49:00 -04:00
Deepesh Garg
93e134aab0 fix: Parent Level project linkning on creating PO from project 2022-09-16 22:44:23 +05:30
Sagar Sharma
43ebfa7982 Merge pull request #32236 from s-aga-r/fix/production-plan/pending-qty
fix: production plan pending-qty
2022-09-16 18:29:46 +05:30
Maharshi Patel
8c5b420aea fix: remove no_copy for ignore_pricing_rule 2022-09-16 18:26:00 +05:30
Sagar Sharma
bd6af7c613 test: update test case for production plan pending-qty 2022-09-16 18:00:26 +05:30
ruthra kumar
5bd5dd7262 test: gl entries of payments with advance tax 2022-09-16 16:22:21 +05:30
Rohit Waghchaure
f5bd3fa952 fix: suggestion threshold label and rule was not working for other items with min and max amount 2022-09-16 16:03:08 +05:30
Sagar Sharma
5be7d42dfd fix: production plan pending-qty 2022-09-16 14:39:39 +05:30
Maharshi Patel
f4b64686ae fix: fetch description only if empty on the payment schedule
added fetch_if_empty on description field of payment_schedule.
2022-09-16 14:14:14 +05:30
Deepesh Garg
36d0906ea2 fix: TDS deduction via journal entry 2022-09-16 13:50:37 +05:30
Sagar Sharma
487d825ede Merge pull request #32233 from s-aga-r/refactor/file/production_plan.py
refactor: rewrite Production Plan queries in QB
2022-09-16 13:28:54 +05:30
ruthra kumar
f0ae77b23b fix: incorrect gl if tax on multi currency payment entry 2022-09-16 12:40:40 +05:30
Deepesh Garg
0a6462e627 Merge branch 'develop' of https://github.com/frappe/erpnext into pending_tds_vouchers 2022-09-16 12:35:39 +05:30
Sagar Sharma
be0d9d8c13 Merge branch 'develop' into refactor/file/production_plan.py 2022-09-16 12:28:48 +05:30
Sagar Sharma
b8cf3b4c77 refactor: rewrite Production Plan queries in QB 2022-09-16 12:23:43 +05:30
Deepesh Garg
38d00f407e Merge pull request #32225 from nabinhait/dunning-fix
fix: create dunning from sales invoice
2022-09-16 11:04:55 +05:30
Deepesh Garg
e4ef6c9645 Merge pull request #32219 from nabinhait/bank-clearnance-perm-issue
fix: No permission to read doctype
2022-09-16 11:04:42 +05:30
Nabin Hait
0286f2da78 Merge branch 'develop' into dunning-fix 2022-09-16 09:40:18 +05:30
Nabin Hait
a1fcabee0e Merge pull request #32221 from rohitwaghchaure/consider-posting-time-for-internal-po
fix: consider posting time for internal transfer PO
2022-09-16 09:37:45 +05:30
Nabin Hait
9c96cd6090 Merge pull request #32222 from nabinhait/cost-center-renaming
fix: abbreviation issue on renaming cost center
2022-09-16 09:36:55 +05:30
anandbaburajan
43a3400221 fix: fix restore asset value after depreciation 2022-09-15 23:25:04 +05:30
anandbaburajan
5a8b28c194 fix: refactor asset capitilization 2022-09-15 22:52:25 +05:30
anandbaburajan
11ac20e5ee fix: asset tests 2022-09-15 22:43:18 +05:30
Nabin Hait
786891c600 Merge branch 'develop' into bank-clearnance-perm-issue 2022-09-15 17:42:37 +05:30
Nabin Hait
0d732609f0 Merge branch 'develop' into consider-posting-time-for-internal-po 2022-09-15 17:42:26 +05:30
Nabin Hait
c5c6a69269 Merge branch 'develop' into cost-center-renaming 2022-09-15 17:42:13 +05:30
Nabin Hait
73f6c5fe35 Merge branch 'develop' into dunning-fix 2022-09-15 17:42:00 +05:30
Nabin Hait
5fa3450a9c Merge pull request #32218 from nabinhait/asset-cap-tests
fix: Fixed asset capitalization test cases
2022-09-15 17:41:39 +05:30
anandbaburajan
ff5cad1cd6 fix: calculate depreciation properly on asset sale entry and scrap entry 2022-09-15 13:15:34 +05:30
Nabin Hait
29db084dc3 fix: create dunning from sales invoice 2022-09-15 13:11:53 +05:30
Nabin Hait
af21a11e1e fix: abbreviation issue on renaming cost center 2022-09-15 12:09:18 +05:30
Rohit Waghchaure
cb763938dc fix: consider posting time for internal transfer PO 2022-09-15 11:48:43 +05:30
Nabin Hait
c0da948a4e fix: No permission to read doctype 2022-09-15 11:27:35 +05:30
Nabin Hait
3457105504 fix: test cases 2022-09-15 11:19:33 +05:30
Nabin Hait
a5b5885933 fix: test cases 2022-09-15 11:19:14 +05:30
Nabin Hait
cbf973d90f fix: always set default expense account in company 2022-09-15 11:19:06 +05:30
Ankush Menat
97977cdb4b fix: correct sql output format in CRM patch (#32213) 2022-09-14 19:19:05 +05:30
Deepesh Garg
87160c8d2f Merge pull request #32208 from abhinavxd/fix-pending-accrual-entries
fix: Loans pending accrual entries
2022-09-14 14:14:44 +05:30
Abhinav Raut
f2209045f8 fix: pending accrual entries 2022-09-14 11:55:03 +05:30
Deepesh Garg
b6184ce471 test: Add tests 2022-09-14 09:13:02 +05:30
Sagar Sharma
444fda5d82 Merge pull request #32205 from s-aga-r/fix/issue/31557
fix: unknown column error while updating value of maintain-stock in item master
2022-09-14 08:14:21 +05:30
Deepesh Garg
b6d87ae25b Merge branch 'develop' of https://github.com/frappe/erpnext into pending_tds_vouchers 2022-09-13 22:31:21 +05:30
Sagar Sharma
bf1fa014f4 test: add test case for item master maintain-stock 2022-09-13 22:12:56 +05:30
Sagar Sharma
7b878ea3d8 fix: unknown column error while updating value of maintain-stock in item master 2022-09-13 21:52:58 +05:30
Deepesh Garg
3fb1595a4e fix: Fetch vouchers to show in Invoice 2022-09-13 20:31:31 +05:30
Deepesh Garg
246c1a9380 fix: Add child table for tax withheld vouchers 2022-09-13 20:05:20 +05:30
Ankush Menat
8043f4fc10 chore: let frappe pr bot raise stable branch PRs
[skip ci]
2022-09-13 15:14:53 +05:30
Nabin Hait
e24a4b18c4 Merge branch 'SaiFi0102-asset-capitalization' into develop 2022-09-13 15:00:21 +05:30
Nabin Hait
58d430fe3e feat: Asset Capitalization
- manual selection of entry type
- GLE cleanup with smaller functions
- GLE considering periodical inventory
- test cases
2022-09-13 14:56:21 +05:30
Deepesh Garg
dc985e0e83 Merge pull request #32190 from maharshivpatel/fix-item-wise-sales-register
fix: item wise sales register taxes and charges
2022-09-13 13:53:51 +05:30
Shadrak Gurupnor
f2b7c9ee66 fix: validate for active sla (#32132) 2022-09-13 13:42:45 +05:30
Ankush Menat
fffc245922 fix(UX): make Item attachments public by default (#32196) 2022-09-13 13:41:00 +05:30
Deepesh Garg
f8bee0e75f Merge pull request #32091 from nabinhait/lead-notes-patch
fix: Migrate old lead notes as per the new format
2022-09-13 12:20:50 +05:30
Rucha Mahabal
eb01f9729d fix(Employee): shorter tab titles (#32192) 2022-09-13 10:34:35 +05:30
Deepesh Garg
51c37aeee3 Merge branch 'develop' into lead-notes-patch 2022-09-13 09:42:07 +05:30
Raffael Meyer
e00ece7a78 fix: remove EmployeeBoardingController (#32139)
fix: remove employee boarding controller

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2022-09-13 02:00:04 +05:30
Maharshi Patel
62163ab3d3 fix: item wise sales register taxes and charges
i have added separate column for other charges. Instead of adding all values to tax_total, it checks if account_type is tax, and then only it adds to total_tax otherwise it adds to the total_other_charges.
2022-09-12 23:44:56 +05:30
Sagar Sharma
2ecd2a3c44 Merge pull request #32188 from frappe/mergify/bp/develop/pr-32179
fix: pick_list - picked qty getting set to 1 (backport #32179)
2022-09-12 23:15:54 +05:30
Ahmad
4f1cc41b86 fix: pick_list - picked qty getting set to 1
(cherry picked from commit 3256e2b8b7)
2022-09-12 16:49:45 +00:00
Sagar Sharma
d4071575a4 Merge pull request #32150 from s-aga-r/refactor/report/bom-stock-calculated
refactor: BOM Stock Calculated report, fix required-qty
2022-09-12 19:21:18 +05:30
Sagar Sharma
2336bcfe20 Merge branch 'develop' into refactor/report/bom-stock-calculated 2022-09-12 19:20:58 +05:30
rohitwaghchaure
b3b1df7184 Merge pull request #32181 from rohitwaghchaure/fix-min-max-amount-configuration
fix: promotional scheme min and max amount configuration
2022-09-12 18:30:01 +05:30
Sagar Sharma
d3cd3bc5ef Merge branch 'develop' into refactor/report/bom-stock-calculated 2022-09-12 17:23:15 +05:30
Sagar Sharma
e1a98c1ff7 test: add test cases for BOM Stock Calculated report 2022-09-12 17:11:00 +05:30
Rohit Waghchaure
a8fd92ddc1 fix: promotional scheme min and max amount configuration 2022-09-12 16:53:52 +05:30
rohitwaghchaure
8f787c08a2 fix: customer code max characters limit issue (#32177) 2022-09-12 16:48:53 +05:30
Sagar Sharma
7a968a5f0d fix: add missing warehouse filter in BOM Stock Calculated report 2022-09-12 16:12:51 +05:30
Sagar Sharma
56192daabf fix: required_qty in BOM Stock Calculated report 2022-09-12 16:12:49 +05:30
ruthra kumar
ce0676ac70 Merge pull request #32175 from SolufyPrivateLimited/filter_AR
fix: Set filter condition and spell in AR
2022-09-12 15:00:36 +05:30
Nihantra C. Patel
e2b4ae13fa fix: Set filter condition and spell in AR 2022-09-12 14:09:42 +05:30
Ankush Menat
a30f38481d chore: correct license text for GPLv3 (#32170)
[skip ci]
2022-09-12 13:54:08 +05:30
Ankush Menat
12d99b3292 refactor: use util method for checking if job is queued 2022-09-12 13:14:48 +05:30
Deepesh Garg
6b94b5334c Merge pull request #32144 from deepeshgarg007/internal_purchase_invoice_rate
fix: Rate for internal PI have non stock UOM items
2022-09-12 09:09:43 +05:30
Sagar Sharma
ada1ab3509 Merge pull request #32161 from s-aga-r/refactor/report/process-loss-report
refactor: rewrite Process Loss Report queries in QB
2022-09-11 19:47:38 +05:30
Sagar Sharma
a86023eb09 Merge branch 'develop' into refactor/report/process-loss-report 2022-09-11 19:15:16 +05:30
Sagar Sharma
5245928648 refactor: rewrite Process Loss Report queries in QB 2022-09-11 19:03:59 +05:30
ruthra kumar
0aeb7c6484 Merge pull request #32156 from ruthra-kumar/bug_multiple_call_to_ple_creation
fix: remove duplicate call to ple creation
2022-09-11 12:21:01 +05:30
ruthra kumar
4adc372f9a fix: remove multiple call to ple creation 2022-09-11 11:52:17 +05:30
ruthra kumar
4576c1ebc3 Merge pull request #32137 from ruthra-kumar/delete_payment_ledger_entries_on_src_doc_delete
refactor(minor): delete linked payment ledger entries on source doc deletion
2022-09-11 11:21:24 +05:30
Sagar Sharma
e4a1cf0cd2 Merge pull request #32153 from s-aga-r/refactor/report/work-order-stock-report
refactor: rewrite Work Order Stock Report queries in QB
2022-09-10 16:51:00 +05:30
Sagar Sharma
5558191a2a Merge branch 'develop' into refactor/report/work-order-stock-report 2022-09-10 16:30:15 +05:30
Sagar Sharma
d4c4dddfc3 refactor: rewrite Work Order Stock Report queries in QB 2022-09-10 16:29:47 +05:30
ruthra kumar
70313df531 fix: delete linked payment ledger entries no source doc deletion 2022-09-10 09:30:45 +05:30
Sagar Sharma
723fa9eebc refactor: BOM Stock Calculated report 2022-09-09 19:11:36 +05:30
Sagar Sharma
1dce3c98d8 Merge pull request #32145 from s-aga-r/fix/stock-entry/sco
fix: validate Subcontracting Order Status in Stock Entry
2022-09-09 14:55:26 +05:30
Nabin Hait
fefe95052d fix: resolved merge conflict 2022-09-09 14:40:36 +05:30
Sagar Sharma
2e314a20f1 Merge branch 'develop' into fix/stock-entry/sco 2022-09-09 13:48:14 +05:30
Sagar Sharma
9a3dcb9ad1 fix: validate Subcontracting Order in Stock Entry 2022-09-09 13:46:50 +05:30
Sagar Sharma
30909a9b79 fix: status filter for Subcontracting Order in Stock Entry 2022-09-09 13:45:31 +05:30
Deepesh Garg
0f655e4430 fix: Rate for internal PI have non stock UOM items 2022-09-09 12:40:57 +05:30
Sagar Sharma
659d007bf0 Merge pull request #32102 from s-aga-r/fix/v14/stock-entry/send-to-subcontractor
fix: consider Stock Entry purpose while getting total supplied qty
2022-09-09 12:13:42 +05:30
Sagar Sharma
b49caf170c Merge branch 'develop' into fix/v14/stock-entry/send-to-subcontractor 2022-09-09 11:37:12 +05:30
Deepesh Garg
33d0e09497 Merge pull request #32117 from deepeshgarg007/psoa_fontsize
fix: Reduce font size for Process Statement of accounts print/pdf
2022-09-09 11:18:13 +05:30
rohitwaghchaure
6da45144d0 Merge pull request #32135 from rohitwaghchaure/fixed-incorrect-gl-entries-for-internal-transfer
fix: reposting not working for internal transferred purchase receipt
2022-09-09 09:30:21 +05:30
Rohit Waghchaure
a03b4ce213 fix: reposting not working for internal transferred purchase receipt 2022-09-08 19:16:00 +05:30
Sagar Sharma
9d453c91f1 Merge pull request #32128 from s-aga-r/fix/subcontracting-order/returned-qty
fix: SCO Supplied Items returned-qty
2022-09-08 19:00:59 +05:30
Sagar Sharma
61110dbfe4 Merge branch 'develop' into fix/subcontracting-order/returned-qty 2022-09-08 18:26:50 +05:30
Sagar Sharma
3585daab95 fix: hide "Return of Components" button in closed SCO (#32130) 2022-09-08 18:23:56 +05:30
Sagar Sharma
aea7188304 test: add test case for returned-qty 2022-09-08 18:15:48 +05:30
Sagar Sharma
ccb2889cac fix: SCO Supplied Items returned-qty 2022-09-08 18:15:45 +05:30
rohitwaghchaure
72d5366e96 Merge pull request #31918 from s-aga-r/fix/subcontracting-receipt/gl-entries
fix: Subcontracting Receipt GL Entries
2022-09-08 10:17:12 +05:30
rohitwaghchaure
448c5ff3dc Merge pull request #32118 from rohitwaghchaure/provision-to-manual-reposting
fix: option to start reposting from repost item valuation
2022-09-07 16:57:43 +05:30
rohitwaghchaure
7dc8ab4069 Merge pull request #32115 from rohitwaghchaure/fixed-label-not-showing-for-filter
fix: inventory dimension filter's label not showing in the report
2022-09-07 16:38:59 +05:30
Rohit Waghchaure
f1c4aea7b5 fix: option to start reposting from repost item valuation 2022-09-07 16:38:17 +05:30
Deepesh Garg
6bfd193b0d fix: Reduce font size for Process Statement of accounts print/pdf 2022-09-07 16:34:10 +05:30
ruthra kumar
741b5b4978 Merge pull request #32110 from ruthra-kumar/bank_import_statement_bug
fix: error on bank statement import
2022-09-07 15:22:14 +05:30
Sagar Sharma
f19049e643 Merge branch 'develop' into fix/subcontracting-receipt/gl-entries 2022-09-07 14:55:56 +05:30
Sagar Sharma
01c2e4d2cf Merge branch 'develop' into fix/v14/stock-entry/send-to-subcontractor 2022-09-07 14:52:16 +05:30
Rohit Waghchaure
ef7def8f1d fix: inventory dimension filter's label not showing in the reort 2022-09-07 14:43:12 +05:30
rohitwaghchaure
5b02adbd33 Merge pull request #32113 from rohitwaghchaure/fixed-internal-transfer-flow
fix: internal transfer flow
2022-09-07 14:26:14 +05:30
Rohit Waghchaure
9d1be48bd2 test: added test case for internal transfer 2022-09-07 13:51:52 +05:30
Devin Slauenwhite
aab2c9c682 fix: require barcode item barcode. (#31957)
* fix: require barcode item barcode.

* fix: make supplier mandatory in Item Supplier DocType

Co-authored-by: Sagar Sharma <sagarsharma.s312@gmail.com>
2022-09-07 12:59:46 +05:30
Rohit Waghchaure
b4a102d119 fix: internal transfer flow 2022-09-07 12:48:18 +05:30
ruthra kumar
a6fbb80b94 fix: import error on bank statement import
Name collision between frameworks file importer's internal log and
doctype fieldname - import_log.

Frameworks internal log overrode, doctypes field which caused failure
in basic fieldtype validation.
2022-09-07 11:19:54 +05:30
Sagar Sharma
008542b715 fix: AD not getting copied from SCO while creating a Material Transfer (#32106) 2022-09-07 10:15:43 +05:30
Deepesh Garg
8efd305afd Merge pull request #32089 from frappe/mergify/bp/develop/pr-32086
fix: QR Code multi currency issue (backport #32086)
2022-09-07 07:46:55 +05:30
Ankush Menat
506b289b2a ci: auto create release PRs
[skip ci]
2022-09-06 19:05:53 +05:30
Sagar Sharma
2f00413864 fix: consider Stock Entry purpose while getting total supplied qty 2022-09-06 16:42:15 +05:30
rohitwaghchaure
c6380a25d6 Merge pull request #32063 from rohitwaghchaure/fixed-fetch-from-parent
fix: inventory dimension issues
2022-09-06 10:45:36 +05:30
Rucha Mahabal
5ab5811770 feat: tabbed view for Employee form (#31940) 2022-09-06 10:18:14 +05:30
Rohit Waghchaure
75fcab04b1 test: test cases for PI and DN 2022-09-06 01:42:57 +05:30
Nabin Hait
4b13452022 fix: drop old notes column from lead and prospect 2022-09-05 18:28:09 +05:30
Nabin Hait
2a100abef1 perf: lesser SQL queries and no validation
Co-authored-by: Sagar Vora <sagar@resilient.tech>
2022-09-05 18:16:34 +05:30
Nabin Hait
3abd00f3bb fix: Migrate old lead notes as per the new format 2022-09-05 18:10:53 +05:30
Sagar Sharma
fb54277484 Merge pull request #32082 from s-aga-r/t3
fix: validate available qty for consumption in SCR
2022-09-05 14:19:39 +05:30
Sagar Sharma
74c2458bdb Merge branch 'develop' into t3 2022-09-05 13:56:21 +05:30
Sagar Sharma
a349b58306 refactor(test): test_update_reserved_qty_for_subcontracting 2022-09-05 13:55:55 +05:30
Sagar Sharma
4a7add2169 fix: validate available qty for consumption in SCR 2022-09-05 13:27:03 +05:30
hamzaali15
987ac513c8 fix: QR Code multi currency issue
When try to scan qr code on app it is showing correct values for multi currencies because it is not getting base amount

(cherry picked from commit b10a2b87b6)
2022-09-05 07:13:32 +00:00
Nabin Hait
57257a1795 Merge pull request #32061 from resilient-tech/fix-appointment-creation
fix(Appointment): create lead notes as child table
2022-09-05 12:25:45 +05:30
Deepesh Garg
3c055f94e1 Merge pull request #31982 from FHenry/dev_enhance_upgrade_process
fix: upgrade process to version-14 when currency opportunity was not set
2022-09-04 19:03:43 +05:30
Deepesh Garg
118b0c0f86 chore: fix message 2022-09-04 19:03:16 +05:30
Deepesh Garg
10d94ed539 Merge pull request #32045 from SolufyPrivateLimited/Solufy-JET
fix: Naming series in Journal Entry Template
2022-09-04 16:34:05 +05:30
HENRY Florian
86395c6adb feat: better Item Price list view (#31954)
* feat: better Item Price list view
2022-09-04 16:25:03 +05:30
Deepesh Garg
acb88e5c57 Merge pull request #31850 from HarryPaulo/add-two-new-filters-gross-profit
feat: two new filters for gross profit
2022-09-04 15:56:54 +05:30
Deepesh Garg
78d1b83d11 Merge pull request #31822 from nextchamp-saqib/fix-consolidation-precision-error
fix(pos): error while consolidating pos invoices
2022-09-04 13:25:20 +05:30
Deepesh Garg
1a61d4e8a8 Merge branch 'develop' into fix-consolidation-precision-error 2022-09-04 13:18:10 +05:30
Deepesh Garg
ad8d0efa29 chore: Linting Issues 2022-09-04 13:15:59 +05:30
Rohit Waghchaure
237299948a fix: fetch from parent not working for custom field 2022-09-03 17:27:00 +05:30
rohitwaghchaure
0efc6a9abe Merge pull request #32065 from rohitwaghchaure/not-able-to-make-variant-item
fix: not able to make variant item
2022-09-03 11:52:56 +05:30
Rohit Waghchaure
92b0f9cd7e fix: not able to make variant item 2022-09-03 11:42:04 +05:30
Sagar Vora
875ff15109 test: dont create lead manually, add coverage for notes 2022-09-02 18:30:39 +05:30
Sagar Vora
58e553151e fix(Appointment): create lead notes as child table 2022-09-02 12:42:37 +00:00
HENRY Florian
7919513c8a Merge branch 'develop' into dev_enhance_upgrade_process 2022-09-02 13:01:06 +02:00
ruthra kumar
e424ad5ff2 Merge pull request #32054 from ruthra-kumar/bug_in_process_deferred_accounting
fix: type error on cancellation of Process Deferred Accounting
2022-09-02 16:20:31 +05:30
ruthra kumar
64f8010a25 Merge pull request #32052 from ruthra-kumar/key_error_on_consolidate_financial_report
fix: key error on consolidated financial report
2022-09-02 16:13:19 +05:30
ruthra kumar
1c385541fa test: pda document submission and cancellation 2022-09-02 12:34:02 +05:30
ruthra kumar
08f2e4edc3 fix: incorrect import parameter for cancel PDA 2022-09-02 10:51:51 +05:30
ruthra kumar
6e8395cccd fix: key error on consolidated financial report
accounts with same name but different account number will throw key
error on consolidated report
2022-09-02 09:55:24 +05:30
Sagar Sharma
68907ca783 chore: set BOM as default value for Backflush Raw Materials of Subcontract Based On (#32048)
chore: set BOM as default value for Backflush Raw Materials of Subcontract Based On in Buying Settings
2022-09-01 19:31:55 +05:30
Dhananjay Palshikar
75396c02d2 Allow Item Templates in Work Order Items
Item Variants can be a part of the items tables, however, when BOM items are fetched to be a part of the Work Order items, item variants were being filtered out.
The filtering out does not serve a purpose. Having Item variants in BOMs allows for template like behaviour.
2022-09-01 19:07:13 +05:30
HENRY Florian
069cb10d6f Merge branch 'develop' into dev_enhance_upgrade_process 2022-09-01 11:28:49 +02:00
Sagar Vora
2e9f531e2c chore(deps): specify PyPNG as a dependency 2022-09-01 11:54:08 +05:30
Solufyin
2085626390 fix: Naming series in Journal Entry Template 2022-09-01 11:49:13 +05:30
HENRY Florian
b05fdb28ff Merge branch 'develop' into dev_enhance_upgrade_process 2022-08-31 13:52:28 +02:00
Ankush Menat
30039e8e62 fix: encode thumbnail URL
If it contains space the URL won't load
2022-08-31 17:06:20 +05:30
Ankush Menat
4a38ce659d refactor!: drop redisearch
incr: replace text and tag fields

incr: use rediswrapper's make key

incr: indexDefinition from redis

incr: replace index creation

incr: replace AutoCompleter

incr: replace product search ac

incr: replace client querying

fix: broken redisearch load test

fix: pass actual query to get suggestion
2022-08-31 17:06:20 +05:30
Deepesh Garg
8f51ccd002 Merge pull request #32030 from deepeshgarg007/zero_interest_loan
fix: Loan Interest accruals for 0 rated loans
2022-08-30 21:15:15 +05:30
Deepesh Garg
a76d3827ec chore: Add check for principal amount 2022-08-30 19:24:57 +05:30
Deepesh Garg
eefc9b7172 fix: Loan Interest accruals for 0 rated loans 2022-08-30 19:16:36 +05:30
Ankush Menat
ffa3071d36 fix: force delete old report docs (#32026) 2022-08-30 15:43:57 +05:30
Deepesh Garg
9e0e308a44 Merge pull request #32005 from niyazrazak/patch-4
fix: lost quotation not to expired
2022-08-30 10:33:01 +05:30
Raffael Meyer
73f4d5931d fix: permissions for Task Type (#32016) 2022-08-29 21:56:07 +05:30
Ankush Menat
2d41704424 fix(patch): update sla doctype directly (#32014)
fix: update sla doctype directly
2022-08-29 20:50:27 +05:30
ruthra kumar
25072e5d32 Merge pull request #32009 from ruthra-kumar/add_remarks_to_payment_ledger
refactor: readd remarks field to payment ledger
2022-08-29 19:48:36 +05:30
ruthra kumar
d522f13d55 chore: add remarks migration to patches.txt 2022-08-29 15:59:56 +05:30
ruthra kumar
3a6b095ed4 chore: patch for migrating remarks to payment ledger 2022-08-29 15:59:56 +05:30
ruthra kumar
5782c4469a refactor: re-add remarks field to payment ledger and AR/AP report 2022-08-29 15:59:37 +05:30
Deepesh Garg
6881b68ed7 Merge pull request #32006 from deepeshgarg007/cash_and_non_trade_discount_rounded_total
fix: Rounded total for cash and non trade discount invoices
2022-08-29 15:35:23 +05:30
Sagar Sharma
9dbaaa33f5 fix: AD not getting copied from SCO while creating a SE (#32004) 2022-08-29 15:07:20 +05:30
MOHAMMED NIYAS
69ffef8c0e fix: lost quotation not to expired 2022-08-29 14:47:43 +05:30
HENRY Florian
61c143cb82 Merge branch 'develop' into dev_enhance_upgrade_process 2022-08-29 10:49:11 +02:00
Deepesh Garg
318da16b99 fix: Rounded total for cash and non trade discount invoices 2022-08-29 14:18:39 +05:30
Sagar Sharma
af5cbc881f chore: allow return of components in SCO (#31994)
chore: allow return of components in sco
2022-08-26 22:49:40 +05:30
Deepesh Garg
7da39c3ff3 Merge pull request #31991 from frappe/codeowners
chore: Update code owners
2022-08-26 17:39:18 +05:30
Deepesh Garg
ac57101833 chore: Update code owners 2022-08-26 17:37:13 +05:30
Deepesh Garg
87ca23736d Merge pull request #31988 from ruthra-kumar/remove_precision_discount_percentage
chore: remove precision on discount_percentage of Sales Invoice Item
2022-08-26 16:03:57 +05:30
HENRY Florian
6cd7ef9cc3 Merge branch 'develop' into dev_enhance_upgrade_process 2022-08-26 11:33:22 +02:00
ruthra kumar
c42fef541a chore: remove precision on discount_percentage of Sales Invoice Item 2022-08-26 13:15:55 +05:30
rohitwaghchaure
5ac27100a5 Merge pull request #31984 from SolufyPrivateLimited/Solufy-so-to-po
fix: Purchase Order creation from Sales Order
2022-08-26 12:00:52 +05:30
Solufyin
bd4b4ddd8b fix: Purchase Order creation from Sales Order 2022-08-26 11:18:56 +05:30
Florian HENRY
d19b664ba9 chore: better text 2022-08-25 22:35:44 +02:00
Florian HENRY
ac66538651 chore: remove debug 2022-08-25 22:35:08 +02:00
Florian HENRY
9d02fbadb4 fix: upgrade process to version-14 when currency opportunity wass not set 2022-08-25 20:45:35 +02:00
ruthra kumar
902797d0f0 Merge pull request #31977 from ruthra-kumar/ar_ap_report_filter_on_party_type
fix: restrict party types to Supplier/Customer for AR/AP report
2022-08-25 16:19:50 +05:30
ruthra kumar
6aa8fd0f7b fix: restrict party types to Supplier/Customer for AR/AP report 2022-08-25 15:50:06 +05:30
Sagar Sharma
8566832dd5 fix: add validation for PO in Stock Entry (#31974) 2022-08-25 15:05:13 +05:30
Deepesh Garg
9e43c9cff3 Merge pull request #31943 from nabinhait/asset-repair
fix: gl entries for asset repair
2022-08-25 13:24:26 +05:30
rohitwaghchaure
b27f3ab327 Merge pull request #31967 from rohitwaghchaure/connection-added-for-work-order
fix: material request connection on work order
2022-08-25 12:29:10 +05:30
rohitwaghchaure
dae112eed2 Merge pull request #31966 from rohitwaghchaure/set-default-supplier-from-item
fix: default supplier not set in the PP
2022-08-25 12:25:00 +05:30
Rohit Waghchaure
9ab10def49 fix: material request connection on work order 2022-08-25 12:13:17 +05:30
Deepesh Garg
c1f6dd46d1 chore: fix against account 2022-08-25 12:10:52 +05:30
Rohit Waghchaure
5fd468d9ec fix: default supplier not set in the PP 2022-08-25 11:44:12 +05:30
Deepesh Garg
e9b0c7177f Merge branch 'develop' into fix-consolidation-precision-error 2022-08-25 11:41:20 +05:30
Samuel Danieli
915102a400 chore: german translations (#31463) 2022-08-25 11:23:38 +05:30
Deepesh Garg
5187a9a5ad Merge pull request #31776 from HarryPaulo/fix-net-amout-sales-analytics
fix: for Tree Type item and item group show net amout
2022-08-25 11:05:18 +05:30
Deepesh Garg
9b626d06fc Merge pull request #31909 from s-aga-r/filters/repost-item-valuation/voucher-no
fix: Add docstatus filter for voucher_no in Repost Item Valuation
2022-08-25 10:49:29 +05:30
rohitwaghchaure
1af22e5312 Merge pull request #31951 from rohitwaghchaure/maintenance-visit-issue
fix: Purposes not set in Maintenance Visit
2022-08-25 10:48:41 +05:30
Deepesh Garg
77906ea4ab Merge pull request #31934 from ruthra-kumar/disable_discount_accounting_for_buying
refactor: disable discount accounting on Buying module(PI)
2022-08-25 10:34:30 +05:30
Deepesh Garg
40bf1a50fd Merge pull request #31950 from ruthra-kumar/party_currency_or_multi_currency
fix: display amount in account currency if party is supplied
2022-08-25 10:33:49 +05:30
Deepesh Garg
91d6454f87 Merge pull request #31955 from FHenry/dev_fr_translation
chore: update french translation
2022-08-25 10:26:17 +05:30
ruthra kumar
e5b04d54ff fix: display amount in account currency if party is supplied 2022-08-25 10:05:25 +05:30
ruthra kumar
ee889afd4c Merge pull request #31942 from ruthra-kumar/bug_ar_ap_report_include_payment_against_po
fix: include payment against PO in AR/AP report
2022-08-25 09:40:45 +05:30
Florian HENRY
299da5d596 chore: update fr translation 2022-08-24 21:29:22 +02:00
Florian HENRY
1f6f2747d4 chore: update fr translation 2022-08-24 21:20:23 +02:00
Florian HENRY
264f98af14 chore: update french translation 2022-08-24 15:52:00 +02:00
Suraj Shetty
122f1c0ced fix: Explicitly commit "log_error" since its getting called during GET request (#31952) 2022-08-24 18:24:39 +05:30
Rohit Waghchaure
f9a7b31b5b fix: Purposes not set 2022-08-24 17:16:01 +05:30
ruthra kumar
36f5883dda test: payments against so/po will show up as outstanding amount
1. Class will use FrappeTestCase fixture
2. setup and teardown methods are introduced
3. test for payments against SO
2022-08-24 13:59:42 +05:30
Solufyin
0e26df331c fix: Route condition set for stock ledger (#31935) 2022-08-24 13:28:55 +05:30
Nabin Hait
b4a2eb2e65 fix: gl entries for asset repair 2022-08-24 12:29:15 +05:30
ruthra kumar
fdd167cac1 fix: include payment against PO in AR/AP report 2022-08-24 12:24:55 +05:30
HENRY Florian
fe73d55f70 chore: add Work Order test dependencies (#31936) 2022-08-23 16:07:10 +05:30
ruthra kumar
277ef04b60 test: remove discount accounting tests 2022-08-23 15:17:27 +05:30
ruthra kumar
a956e20f29 refactor: disable discount accounting on Buying module(PI) 2022-08-23 11:36:00 +05:30
Deepesh Garg
9fd0c25c9f Merge pull request #31910 from deepeshgarg007/cash_and_non_trade_discount_fix
fix: Cash and non trade discount calculation
2022-08-23 10:19:09 +05:30
Deepesh Garg
1cb7ae16ab chore: Linting issues 2022-08-23 09:12:20 +05:30
Sagar Sharma
2effbb55ae test: Add test case for Subcontracting Receipt GL Entries 2022-08-22 22:14:56 +05:30
Sagar Sharma
bf5c43322a fix: don't allow to create SCR directly (#31924) 2022-08-22 18:36:42 +05:30
Sagar Sharma
e888639c7e fix: Subcontracting Receipt GL Entries 2022-08-22 10:48:21 +05:30
Deepesh Garg
8cb7567fd3 Merge pull request #31914 from frappe/mergify/bp/develop/pr-31894
fix: TDS calculation for advance payment (backport #31894)
2022-08-22 10:31:30 +05:30
Maharshi Patel
42de9ca49e fix: TDS calculation for advance payment
"against_voucher": ["is", "not set"] was used in query due to which if TDS was added on "advance" payment vouchers and then reconciled against purchase invoice. it will not find those vouchers and consider this as first-time threshold due to which it will calculate Tax for all transactions.

(cherry picked from commit a452143782)
2022-08-22 03:29:46 +00:00
Deepesh Garg
ae3dce0cbd fix: Test cases 2022-08-22 08:57:58 +05:30
Sagar Sharma
f4673941e0 chore: move function "add_gl_entry" from purchase_receipt.py to stock_controller.py 2022-08-21 21:26:06 +05:30
Deepesh Garg
3b15966cc9 fix: Cash and non trade discount calculation 2022-08-21 17:51:05 +05:30
Sagar Sharma
520306dc87 fix: Add docstatus filter for voucher_no in Repost Item Valuation 2022-08-21 12:09:08 +05:30
Sagar Sharma
588ca68171 fix: make rate field read-only in subcontracting receipt item (#31905) 2022-08-20 17:50:47 +05:30
Sagar Sharma
3b51874da5 Merge pull request #31899 from s-aga-r/subcontracting-receipt/reposting
fix: repost item valuation for subcontracting receipt
2022-08-19 22:01:22 +05:30
Sagar Sharma
f92f3e0208 chore: add option for "Subcontracting Receipt" in "Voucher Type" 2022-08-19 20:52:26 +05:30
Sagar Sharma
f8c11847bb chore: allow subcontracting receipt backdated entry 2022-08-19 20:44:13 +05:30
Sagar Sharma
1d28ea5458 Merge pull request #31890 from s-aga-r/fix/subcontracting/additional-cost
fix: additional-costs in SCO and SCR
2022-08-19 15:26:00 +05:30
Sagar Sharma
dd719099bc Merge branch 'develop' into fix/subcontracting/additional-cost 2022-08-19 11:47:23 +05:30
Sagar Sharma
c247cf728c chore: add test for additional-cost 2022-08-19 11:46:36 +05:30
Sagar Sharma
addd7347d8 fix: test "test_pending_and_received_qty" 2022-08-19 11:46:27 +05:30
Saqib Ansari
756fe4b375 fix(pos): edge case while closing pos (#31748)
* fix(pos): edge case while closing pos

* fix: linter

* fix: setting posting_time in pos invoice merge log
2022-08-19 10:22:00 +05:30
Sagar Vora
aafb735283 perf: use create_custom_fields (#31853)
* perf: use `create_custom_fields`

* fix: default must be a string
2022-08-18 21:01:20 +05:30
Sagar Sharma
256b4245d5 chore: add additional-cost table in SCR 2022-08-18 20:59:30 +05:30
Sagar Sharma
2fc6833684 fix: recalculate rate of items based on "Recalculate Rate" checkbox 2022-08-18 19:50:00 +05:30
Sagar Sharma
7e88eb549f chore: remove unwanted field "provisional_expense_account" from SCR (#31847) 2022-08-18 17:39:00 +05:30
Sagar Sharma
ea82fe5bc2 chore: move "set_missing_values_in_additional_costs" from SCO to SC" 2022-08-18 17:20:22 +05:30
Sagar Sharma
eabd3135f0 fix: base_amount and exchange_rate in additional-cost table 2022-08-18 17:16:29 +05:30
Sagar Sharma
d7ed4093d8 fix: additional-cost in items table 2022-08-18 16:45:11 +05:30
ruthra kumar
72a7ed5b58 Merge pull request #31871 from ruthra-kumar/fix_gross_profit_valuation_rate
fix: incorrect buying amount in Gross Profit rpt
2022-08-18 16:08:19 +05:30
Deepesh Garg
86bdddd1b8 Merge pull request #31875 from adityahase/fix-projects-typo
fix(projects): Add missing comma
2022-08-18 11:18:51 +05:30
Deepesh Garg
1a6508972e fix: Make expense account editable in Purchase Receipt Item (#31730)
Co-authored-by: Sagar Sharma <sagarsharma.s312@gmail.com>
2022-08-18 10:59:39 +05:30
Sagar Sharma
8704ca783d fix: Add dimension section in subcontracting doctypes (#31849) 2022-08-18 10:58:33 +05:30
Aditya Hase
d38778e400 fix(projects): Add missing comma
Added with https://github.com/frappe/erpnext/pull/31360
2022-08-17 18:21:43 +05:30
Sagar Sharma
f1a612245c fix: Transit filter for Default Target Warehouse in SE (#31839) 2022-08-17 16:44:12 +05:30
ruthra kumar
967dd398e7 fix: incorrect buying amount in Gross Profit rpt 2022-08-17 16:21:03 +05:30
Sagar Sharma
2d04e71412 fix: Make expense account editable in Subcontracting Receipt Item (#31848) 2022-08-17 15:57:41 +05:30
rohitwaghchaure
396667b702 Merge pull request #31860 from rohitwaghchaure/delete-custom-fields-on-dimension-delete
fix: delete custom fields on deletion of inventory dimension
2022-08-17 15:43:54 +05:30
ruthra kumar
ea84c157e0 Merge pull request #31856 from ruthra-kumar/incorrect_tax_due_to_exchange_rate
fix: incorrect tax amt due to different exchange rate in PR and PI
2022-08-17 15:05:57 +05:30
Rohit Waghchaure
0b39a0123e fix: delete custom fields on deletion of inventory dimension 2022-08-17 14:55:02 +05:30
rohitwaghchaure
dd08045f28 Merge pull request #31863 from rohitwaghchaure/allow-to-make-material-issue
fix: not able to issue expired batches
2022-08-17 14:45:14 +05:30
Rohit Waghchaure
795c94384a fix: not able to issue expired batches 2022-08-17 14:03:55 +05:30
Sagar Sharma
313625c349 fix: incorrect rate in BOM exploded items (#31513) 2022-08-17 13:51:53 +05:30
Sagar Sharma
538cd6fdcf fix: incorrect produced-qty in production-plan-item (#31706) 2022-08-17 13:01:56 +05:30
ruthra kumar
5fd0770372 fix: incorrect tax amt due to different exchange rate in PR and PI 2022-08-16 16:41:33 +05:30
ruthra kumar
3b4c0a3fc0 fix(minor): don't print tax rate if its '0' (#31838) 2022-08-16 16:35:46 +05:30
hrzzz
3ef551872a fix: remove spaces and order import 2022-08-15 09:23:56 -03:00
hrzzz
27891ecb77 feat: two new filters for gross profit 2022-08-15 09:14:23 -03:00
Sagar Sharma
0047e18a9b fix: check item_code in all rows of po_items (#31741)
fix: check item-code in each row of po-items
2022-08-13 11:07:22 +05:30
Sagar Sharma
e5e88bb9f1 fix: contact search in request for quotation (#31828) 2022-08-13 11:05:48 +05:30
Deepesh Garg
4ff1cba522 Merge pull request #31830 from deepeshgarg007/fees_payment
fix: Unable to make payment entry against Fees using education app
2022-08-11 20:46:26 +05:30
Deepesh Garg
79ac50d0f7 fix: Unable to make payment entry against Fees using education app 2022-08-11 19:31:31 +05:30
Deepesh Garg
72869ed197 Merge pull request #31799 from abhinavxd/fix-process-loan-interest-accrual
fix: process loan interest accrual
2022-08-11 15:47:18 +05:30
ruthra kumar
5018472840 Merge pull request #31817 from ruthra-kumar/fix_pos_recent_order_crash_due_to_large_data
fix: limit pos recent order page result
2022-08-10 15:48:28 +05:30
Saqib Ansari
33762dbbac fix(pos): error while consolidating pos invoices 2022-08-10 14:17:28 +05:30
Nabin Hait
eb25eddc22 Merge pull request #31816 from nabinhait/crm-no-of-employees
fix: limited options for no-of-employees in the crm documents
2022-08-09 20:47:52 +05:30
Nabin Hait
909945c0ac fix: map old data as per new options of no-of-employees 2022-08-09 20:47:18 +05:30
ruthra kumar
bb40e38451 fix: limit pos recent order page result 2022-08-09 19:35:43 +05:30
Nabin Hait
7ecd67605f fix: limited options for no-of-employees in crm 2022-08-09 19:06:57 +05:30
Ankush Menat
08d7c48dc7 refactor: use browser native lazy loading (#31814) 2022-08-09 18:49:14 +05:30
Akash Krishna
32b30bc5de Tds report (#31801)
* fix: TDS Computation Summary Report not loading, too many values to unpack
2022-08-09 17:41:02 +05:30
Sagar Vora
a2252c9236 ci: ensure unique group ID to prevent workflows from getting cancelled (#31806)
ci: ensure unique group ID to prevent workflows from cancelling
2022-08-09 17:19:48 +05:30
rohitwaghchaure
e93a1cc02e Merge pull request #31804 from rohitwaghchaure/fixed-incorret-incoming-rate-for-internal-suppliier
fix: incorrect incoming rate set for inter transfer purchase receipt
2022-08-09 16:00:31 +05:30
Raffael Meyer
6b510546ae fix: german translations (#31732) 2022-08-09 15:11:52 +05:30
Rohit Waghchaure
ddd24ea8c8 fix: incorrect incoming rate set for inter transfer purchase receipt 2022-08-09 14:50:20 +05:30
Abhinav Raut
534d7ce64b fix: term loan interest calculation 2022-08-08 17:35:31 +05:30
Deepesh Garg
5c4cc5ae5b Merge pull request #31779 from ruthra-kumar/bug_add_accouting_dimension_in_asset_repair
Bug add accouting dimension in asset repair
2022-08-08 16:39:21 +05:30
Abhinav Raut
9ef8d5c5c3 fix: process loan interest accrual 2022-08-08 16:29:13 +05:30
Deepesh Garg
b85dbdc3c1 Merge pull request #31777 from ruthra-kumar/intercompany_po_bug
fix: intercompany SO created from Purchase Order throws exception
2022-08-08 16:06:09 +05:30
Deepesh Garg
e5a68b2dcb Merge pull request #31733 from resilient-tech/fix-party-details
fix: set `billing_address` for purchases in `get_party_details`
2022-08-08 13:00:02 +05:30
Sagar Vora
d05082987f fix: set company_address for purchases in party.js 2022-08-08 06:04:10 +00:00
Sagar Vora
a3625b3817 fix: set billing_address for purchases in get_party_details 2022-08-08 06:04:10 +00:00
Deepesh Garg
03002f7431 Merge pull request #31780 from abhinavxd/fix-loan-pending-principal
Fix: Loan pending principal amount
2022-08-05 16:04:30 +05:30
ruthra kumar
80f508c4b1 chore: patch for creating existing dimensions in asset repair 2022-08-05 15:22:38 +05:30
Abhinav Raut
a272d73dd9 fix: pending principal- amount 2022-08-04 19:04:34 +05:30
ruthra kumar
452584c4bd fix: add asset repair to accounting dimension list 2022-08-04 14:09:26 +05:30
ruthra kumar
c95b986414 Merge pull request #31737 from ruthra-kumar/fix_invoice_outstanding_in_reconciliation_tool
fix: incorrect invoice outstanding in reconciliation tool
2022-08-04 14:07:15 +05:30
ruthra kumar
af0a353b79 fix: intercompany SO throws exception 2022-08-04 14:01:23 +05:30
ruthra kumar
ef312b8fc4 test: posting_date should not affect outstanding amount calculation 2022-08-04 09:38:01 +05:30
ruthra kumar
5f1562c5b2 fix: posting_date of linked vouchers should not affect outstanding
posting_date filter should not be applied for linked vouchers.
2022-08-04 09:38:01 +05:30
hrzzz
91762097a5 fix: for Tree Type item and item group show net amout 2022-08-03 13:09:23 -03:00
Ankush Menat
17b9bfd249 fix(ecommerce): remove query to non-existing field (#31771) 2022-08-03 16:48:27 +05:30
HarryPaulo
ea88451875 fix: getting error to show sales invoice group or print rep… (#31756)
fix: formatter getting error to show sales invoice group or print report.

1 - When I view the Gross Profit report in Sales Invoice mode, the table is all broken.
Error on browser console:
TypeError: Cannot read properties of undefined (reading 'indent')

2 - When I try to print, no matter the Group (Sales Invoice, Item Code, Item Group...) nothing happens. in browser log console I have the following error:
TypeError: Cannot read properties of undefined (reading 'content')

i fixed both errors and all working perfectly.
2022-08-03 11:21:30 +05:30
Devin Slauenwhite
9c580dde39 fix: linter (#31763) 2022-08-03 11:16:59 +05:30
Sagar Vora
9baa222976 fix: specify allowed doctype in queries (#31761) 2022-08-03 11:12:30 +05:30
Ankush Menat
0ef9c03f05 chore: CODEOWNERS
[skip ci]
2022-08-02 16:13:51 +05:30
Ankush Menat
bb00d38dd7 Merge branch 'develop' into asset-capitalization 2021-11-30 19:32:11 +05:30
Saif Ur Rehman
06aead0470 chore: isort 2021-11-10 13:45:40 +05:00
Saif Ur Rehman
cdb1800087 chore: remove unused import 2021-11-09 12:35:01 +05:00
Saif Ur Rehman
13f8edd43f Merge remote-tracking branch 'upstream/develop' into asset-capitalization
# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.py
2021-11-09 12:17:17 +05:00
Saif Ur Rehman
85d1a237ce fix(Asset Capitalization): Reverse depreciation on cancel 2021-11-04 14:15:47 +05:00
Saif Ur Rehman
dc3c27fd1b fix(Asset Capitalization): update code for changes in depreciation logic 2021-11-04 13:47:33 +05:00
Saif Ur Rehman
2d9da22721 Merge branch 'develop' of https://github.com/frappe/erpnext into asset-capitalization
# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.py
#	erpnext/assets/doctype/asset/test_asset.py
#	erpnext/assets/workspace/assets/assets.json
2021-11-04 12:48:33 +05:00
Saif Ur Rehman
86a6293e62 test(Asset Capitalization): unit tests 2021-09-16 23:24:46 +05:00
Saif Ur Rehman
c311b8ea4f fix(Asset Capitalization): validation edge cases 2021-09-16 23:23:22 +05:00
Saif Ur Rehman
e832944dfe fix(Asset): On Depreciation reversal, remove Journal Entry reference 2021-09-16 23:22:31 +05:00
Saif Ur Rehman
003cfe2717 fix(Asset Capitalization): Hide source items section if table is empty 2021-09-16 23:21:09 +05:00
Saif Ur Rehman
132b517584 fix(Asset Captalization): run_serially on posting_date changed 2021-09-16 23:20:36 +05:00
Saif Ur Rehman
d173e06e69 chore(Asset Capitalization): isort linting 2021-09-14 15:13:35 +05:00
Saif Ur Rehman
9ae0380a96 chore(Asset Capitalization): isort linting 2021-09-14 15:09:58 +05:00
Saif Ur Rehman
8873ef7b67 chore(Asset Capitalization): isort linting 2021-09-14 15:05:39 +05:00
Saif Ur Rehman
dc24a657fd chore(Asset Capitalization): linting 2021-09-14 12:40:17 +05:00
Saif Ur Rehman
8c54be7e99 chore(Asset Capitalization): linting 2021-09-14 12:30:40 +05:00
Saif Ur Rehman
7a5d75b68d feat(Asset Capitalization): Submission and Cancellation 2021-09-13 23:01:52 +05:00
Saif Ur Rehman
3b9bc8e4ef feat(Asset Capitalization): Finance Book field in Asset Row 2021-09-12 14:28:14 +05:00
Saif Ur Rehman
702b5c32c1 feat(Asset Capitalization): Accounting Fields 2021-09-08 16:36:07 +05:00
Saif Ur Rehman
6c748966e7 feat: Asset Capitalization Form 2021-09-06 17:27:47 +05:00
519 changed files with 24994 additions and 15278 deletions

View File

@@ -24,15 +24,14 @@ fi
if [ "$DB" == "mariadb" ];then
mysql --host 127.0.0.1 --port 3306 -u root -e "SET GLOBAL character_set_server = 'utf8mb4'"
mysql --host 127.0.0.1 --port 3306 -u root -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"
mysql --host 127.0.0.1 --port 3306 -u root -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'"
mysql --host 127.0.0.1 --port 3306 -u root -e "CREATE DATABASE test_frappe"
mysql --host 127.0.0.1 --port 3306 -u root -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE DATABASE test_frappe"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'"
mysql --host 127.0.0.1 --port 3306 -u root -e "UPDATE mysql.user SET Password=PASSWORD('travis') WHERE User='root'"
mysql --host 127.0.0.1 --port 3306 -u root -e "FLUSH PRIVILEGES"
mysql --host 127.0.0.1 --port 3306 -u root -proot -e "FLUSH PRIVILEGES"
fi
if [ "$DB" == "postgres" ];then

View File

@@ -9,7 +9,7 @@
"mail_password": "test",
"admin_password": "admin",
"root_login": "root",
"root_password": "travis",
"root_password": "root",
"host_name": "http://test_site:8000",
"install_apps": ["erpnext"],
"throttle_user_limit": 100

32
.github/workflows/initiate_release.yml vendored Normal file
View File

@@ -0,0 +1,32 @@
# This workflow is agnostic to branches. Only maintain on develop branch.
# To add/remove versions just modify the matrix.
name: Create weekly release pull requests
on:
schedule:
# 9:30 UTC => 3 PM IST Tuesday
- cron: "30 9 * * 2"
workflow_dispatch:
jobs:
release:
name: Release
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: ["13", "14"]
steps:
- uses: octokit/request-action@v2.x
with:
route: POST /repos/{owner}/{repo}/pulls
owner: frappe
repo: erpnext
title: |-
"chore: release v${{ matrix.version }}"
body: "Automated weekly release."
base: version-${{ matrix.version }}
head: version-${{ matrix.version }}-hotfix
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}

View File

@@ -11,7 +11,7 @@ on:
workflow_dispatch:
concurrency:
group: patch-develop-${{ github.event.number }}
group: patch-develop-${{ github.event_name }}-${{ github.event.number || github.event_name == 'workflow_dispatch' && github.run_id || '' }}
cancel-in-progress: true
jobs:
@@ -25,7 +25,7 @@ jobs:
mysql:
image: mariadb:10.3
env:
MYSQL_ALLOW_EMPTY_PASSWORD: YES
MARIADB_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3

View File

@@ -27,7 +27,7 @@ on:
type: string
concurrency:
group: server-mariadb-develop-${{ github.event.number }}
group: server-mariadb-develop-${{ github.event_name }}-${{ github.event.number || github.event_name == 'workflow_dispatch' && github.run_id || '' }}
cancel-in-progress: true
jobs:
@@ -45,9 +45,9 @@ jobs:
services:
mysql:
image: mariadb:10.3
image: mariadb:10.6
env:
MYSQL_ALLOW_EMPTY_PASSWORD: YES
MARIADB_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
@@ -59,7 +59,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.10'
python-version: '3.11'
- name: Check for valid Python & Merge Conflicts
run: |
@@ -120,7 +120,7 @@ jobs:
FRAPPE_BRANCH: ${{ github.event.inputs.branch }}
- name: Run Tests
run: cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --use-orchestrator --with-coverage
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --with-coverage --total-builds 4 --build-number ${{ matrix.container }}'
env:
TYPE: server
CI_BUILD_ID: ${{ github.run_id }}

View File

@@ -9,7 +9,7 @@ on:
types: [opened, labelled, synchronize, reopened]
concurrency:
group: server-postgres-develop-${{ github.event.number }}
group: server-postgres-develop-${{ github.event_name }}-${{ github.event.number || github.event_name == 'workflow_dispatch' && github.run_id || '' }}
cancel-in-progress: true
jobs:

View File

@@ -9,6 +9,7 @@ pull_request_rules:
- author!=nabinhait
- author!=ankush
- author!=deepeshgarg007
- author!=frappe-pr-bot
- author!=mergify[bot]
- or:

View File

@@ -16,8 +16,8 @@ repos:
- id: check-merge-conflict
- id: check-ast
- repo: https://gitlab.com/pycqa/flake8
rev: 3.9.2
- repo: https://github.com/PyCQA/flake8
rev: 5.0.4
hooks:
- id: flake8
additional_dependencies: [

View File

@@ -11,22 +11,18 @@ erpnext/selling @nextchamp-saqib @deepeshgarg007 @ruthra-kumar
erpnext/support/ @nextchamp-saqib @deepeshgarg007
pos* @nextchamp-saqib
erpnext/buying/ @marination @rohitwaghchaure @s-aga-r
erpnext/e_commerce/ @marination
erpnext/maintenance/ @marination @rohitwaghchaure @s-aga-r
erpnext/manufacturing/ @marination @rohitwaghchaure @s-aga-r
erpnext/portal/ @marination
erpnext/quality_management/ @marination @rohitwaghchaure @s-aga-r
erpnext/shopping_cart/ @marination
erpnext/stock/ @marination @rohitwaghchaure @s-aga-r
erpnext/buying/ @rohitwaghchaure @s-aga-r
erpnext/maintenance/ @rohitwaghchaure @s-aga-r
erpnext/manufacturing/ @rohitwaghchaure @s-aga-r
erpnext/quality_management/ @rohitwaghchaure @s-aga-r
erpnext/stock/ @rohitwaghchaure @s-aga-r
erpnext/crm/ @NagariaHussain
erpnext/education/ @rutwikhdev
erpnext/crm/ @NagariaHussain
erpnext/education/ @rutwikhdev
erpnext/projects/ @ruchamahabal
erpnext/controllers/ @deepeshgarg007 @nextchamp-saqib @rohitwaghchaure @marination
erpnext/patches/ @deepeshgarg007 @nextchamp-saqib @marination
erpnext/public/ @nextchamp-saqib @marination
erpnext/controllers/ @deepeshgarg007 @nextchamp-saqib @rohitwaghchaure
erpnext/patches/ @deepeshgarg007 @nextchamp-saqib
.github/ @ankush
pyproject.toml @gavindsouza @ankush
pyproject.toml @ankush

View File

@@ -82,6 +82,8 @@ GNU/General Public License (see [license.txt](license.txt))
The ERPNext code is licensed as GNU General Public License (v3) and the Documentation is licensed as Creative Commons (CC-BY-SA-3.0) and the copyright is owned by Frappe Technologies Pvt Ltd (Frappe) and Contributors.
By contributing to ERPNext, you agree that your contributions will be licensed under its GNU General Public License (v3).
## Logo and Trademark Policy
Please read our [Logo and Trademark Policy](TRADEMARK_POLICY.md).

View File

@@ -76,7 +76,7 @@ def get(
def build_result(account, dates, gl_entries):
result = [[getdate(date), 0.0] for date in dates]
root_type = frappe.db.get_value("Account", account, "root_type")
root_type = frappe.get_cached_value("Account", account, "root_type")
# start with the first date
date_index = 0

View File

@@ -37,7 +37,7 @@ class Account(NestedSet):
def autoname(self):
from erpnext.accounts.utils import get_autoname_with_number
self.name = get_autoname_with_number(self.account_number, self.account_name, None, self.company)
self.name = get_autoname_with_number(self.account_number, self.account_name, self.company)
def validate(self):
from erpnext.accounts.utils import validate_field_number
@@ -58,7 +58,7 @@ class Account(NestedSet):
def validate_parent(self):
"""Fetch Parent Details and validate parent account"""
if self.parent_account:
par = frappe.db.get_value(
par = frappe.get_cached_value(
"Account", self.parent_account, ["name", "is_group", "company"], as_dict=1
)
if not par:
@@ -82,7 +82,7 @@ class Account(NestedSet):
def set_root_and_report_type(self):
if self.parent_account:
par = frappe.db.get_value(
par = frappe.get_cached_value(
"Account", self.parent_account, ["report_type", "root_type"], as_dict=1
)
@@ -92,7 +92,7 @@ class Account(NestedSet):
self.root_type = par.root_type
if self.is_group:
db_value = frappe.db.get_value("Account", self.name, ["report_type", "root_type"], as_dict=1)
db_value = self.get_doc_before_save()
if db_value:
if self.report_type != db_value.report_type:
frappe.db.sql(
@@ -111,13 +111,13 @@ class Account(NestedSet):
)
def validate_root_details(self):
# does not exists parent
if frappe.db.exists("Account", self.name):
if not frappe.db.get_value("Account", self.name, "parent_account"):
throw(_("Root cannot be edited."), RootNotEditable)
doc_before_save = self.get_doc_before_save()
if doc_before_save and not doc_before_save.parent_account:
throw(_("Root cannot be edited."), RootNotEditable)
if not self.parent_account and not self.is_group:
frappe.throw(_("The root account {0} must be a group").format(frappe.bold(self.name)))
throw(_("The root account {0} must be a group").format(frappe.bold(self.name)))
def validate_root_company_and_sync_account_to_children(self):
# ignore validation while creating new compnay or while syncing to child companies
@@ -127,7 +127,9 @@ class Account(NestedSet):
return
ancestors = get_root_company(self.company)
if ancestors:
if frappe.get_value("Company", self.company, "allow_account_creation_against_child_company"):
if frappe.get_cached_value(
"Company", self.company, "allow_account_creation_against_child_company"
):
return
if not frappe.db.get_value(
"Account", {"account_name": self.account_name, "company": ancestors[0]}, "name"
@@ -138,7 +140,7 @@ class Account(NestedSet):
if not descendants:
return
parent_acc_name_map = {}
parent_acc_name, parent_acc_number = frappe.db.get_value(
parent_acc_name, parent_acc_number = frappe.get_cached_value(
"Account", self.parent_account, ["account_name", "account_number"]
)
filters = {
@@ -159,27 +161,28 @@ class Account(NestedSet):
self.create_account_for_child_company(parent_acc_name_map, descendants, parent_acc_name)
def validate_group_or_ledger(self):
if self.get("__islocal"):
doc_before_save = self.get_doc_before_save()
if not doc_before_save or cint(doc_before_save.is_group) == cint(self.is_group):
return
existing_is_group = frappe.db.get_value("Account", self.name, "is_group")
if cint(self.is_group) != cint(existing_is_group):
if self.check_gle_exists():
throw(_("Account with existing transaction cannot be converted to ledger"))
elif self.is_group:
if self.account_type and not self.flags.exclude_account_type_check:
throw(_("Cannot covert to Group because Account Type is selected."))
elif self.check_if_child_exists():
throw(_("Account with child nodes cannot be set as ledger"))
if self.check_gle_exists():
throw(_("Account with existing transaction cannot be converted to ledger"))
elif self.is_group:
if self.account_type and not self.flags.exclude_account_type_check:
throw(_("Cannot covert to Group because Account Type is selected."))
elif self.check_if_child_exists():
throw(_("Account with child nodes cannot be set as ledger"))
def validate_frozen_accounts_modifier(self):
old_value = frappe.db.get_value("Account", self.name, "freeze_account")
if old_value and old_value != self.freeze_account:
frozen_accounts_modifier = frappe.db.get_value(
"Accounts Settings", None, "frozen_accounts_modifier"
)
if not frozen_accounts_modifier or frozen_accounts_modifier not in frappe.get_roles():
throw(_("You are not authorized to set Frozen value"))
doc_before_save = self.get_doc_before_save()
if not doc_before_save or doc_before_save.freeze_account == self.freeze_account:
return
frozen_accounts_modifier = frappe.get_cached_value(
"Accounts Settings", "Accounts Settings", "frozen_accounts_modifier"
)
if not frozen_accounts_modifier or frozen_accounts_modifier not in frappe.get_roles():
throw(_("You are not authorized to set Frozen value"))
def validate_balance_must_be_debit_or_credit(self):
from erpnext.accounts.utils import get_balance_on
@@ -223,9 +226,9 @@ class Account(NestedSet):
)
# validate if parent of child company account to be added is a group
if frappe.db.get_value("Account", self.parent_account, "is_group") and not frappe.db.get_value(
"Account", parent_acc_name_map[company], "is_group"
):
if frappe.get_cached_value(
"Account", self.parent_account, "is_group"
) and not frappe.get_cached_value("Account", parent_acc_name_map[company], "is_group"):
msg = _(
"While creating account for Child Company {0}, parent account {1} found as a ledger account."
).format(company_bold, parent_acc_name_bold)
@@ -377,17 +380,15 @@ def validate_account_number(name, account_number, company):
@frappe.whitelist()
def update_account_number(name, account_name, account_number=None, from_descendant=False):
account = frappe.db.get_value("Account", name, "company", as_dict=True)
account = frappe.get_cached_doc("Account", name)
if not account:
return
old_acc_name, old_acc_number = frappe.db.get_value(
"Account", name, ["account_name", "account_number"]
)
old_acc_name, old_acc_number = account.account_name, account.account_number
# check if account exists in parent company
ancestors = get_ancestors_of("Company", account.company)
allow_independent_account_creation = frappe.get_value(
allow_independent_account_creation = frappe.get_cached_value(
"Company", account.company, "allow_account_creation_against_child_company"
)
@@ -435,22 +436,24 @@ def update_account_number(name, account_name, account_number=None, from_descenda
@frappe.whitelist()
def merge_account(old, new, is_group, root_type, company):
# Validate properties before merging
if not frappe.db.exists("Account", new):
new_account = frappe.get_cached_doc("Account", new)
if not new_account:
throw(_("Account {0} does not exist").format(new))
val = list(frappe.db.get_value("Account", new, ["is_group", "root_type", "company"]))
if val != [cint(is_group), root_type, company]:
if (new_account.is_group, new_account.root_type, new_account.company) != (
cint(is_group),
root_type,
company,
):
throw(
_(
"""Merging is only possible if following properties are same in both records. Is Group, Root Type, Company"""
)
)
if is_group and frappe.db.get_value("Account", new, "parent_account") == old:
frappe.db.set_value(
"Account", new, "parent_account", frappe.db.get_value("Account", old, "parent_account")
)
if is_group and new_account.parent_account == old:
new_account.db_set("parent_account", frappe.get_cached_value("Account", old, "parent_account"))
frappe.rename_doc("Account", old, new, merge=1, force=1)

View File

@@ -53,7 +53,7 @@ def create_charts(
"account_number": account_number,
"account_type": child.get("account_type"),
"account_currency": child.get("account_currency")
or frappe.db.get_value("Company", company, "default_currency"),
or frappe.get_cached_value("Company", company, "default_currency"),
"tax_rate": child.get("tax_rate"),
}
)
@@ -148,7 +148,7 @@ def get_charts_for_country(country, with_standard=False):
) or frappe.local.flags.allow_unverified_charts:
charts.append(content["name"])
country_code = frappe.db.get_value("Country", country, "code")
country_code = frappe.get_cached_value("Country", country, "code")
if country_code:
folders = ("verified",)
if frappe.local.flags.allow_unverified_charts:

View File

@@ -2,397 +2,438 @@
"country_code": "at",
"name": "Austria - Chart of Accounts",
"tree": {
"Summe Abschreibungen und Aufwendungen": {
"7010 bis 7080 Abschreibungen auf das Anlageverm\u00f6gen (ausgenommen Finanzanlagen)": {},
"7100 bis 7190 Sonstige Steuern": {
"account_type": "Tax"
},
"7200 bis 7290 Instandhaltung u. Reinigung durh Dritte, Entsorgung, Beleuchtung": {},
"7300 bis 7310 Transporte durch Dritte": {},
"7320 bis 7330 Kfz - Aufwand": {},
"7340 bis 7350 Reise- und Fahraufwand": {},
"7360 bis 7370 Tag- und N\u00e4chtigungsgelder": {},
"7380 bis 7390 Nachrichtenaufwand": {},
"7400 bis 7430 Miet- und Pachtaufwand": {},
"7440 bis 7470 Leasingaufwand": {},
"7480 bis 7490 Lizenzaufwand": {},
"7500 bis 7530 Aufwand f\u00fcr beigestelltes Personal": {},
"7540 bis 7570 Provisionen an Dritte": {},
"7580 bis 7590 Aufsichtsratsverg\u00fctungen": {},
"7610 bis 7620 Druckerzeugnisse und Vervielf\u00e4ltigungen": {},
"7650 bis 7680 Werbung und Repr\u00e4sentationen": {},
"7700 bis 7740 Versicherungen": {},
"7750 bis 7760 Beratungs- und Pr\u00fcfungsaufwand": {},
"7800 bis 7810 Schadensf\u00e4lle": {},
"7840 bis 7880 Verschiedene betriebliche Aufwendungen": {},
"7910 bis 7950 Aufwandsstellenrechung der Hersteller": {},
"Abschreibungen auf aktivierte Aufwendungen f\u00fcr das Ingangs. u. Erweitern des Betriebes": {},
"Abschreibungen vom Umlaufverm\u00f6gen, soweit diese die im Unternehmen \u00fcblichen Abschreibungen \u00fcbersteigen": {},
"Aufwandsstellenrechnung": {},
"Aus- und Fortbildung": {},
"Buchwert abgegangener Anlagen, ausgenommen Finanzanlagen": {},
"B\u00fcromaterial und Drucksorten": {},
"Fachliteratur und Zeitungen ": {},
"Herstellungskosten der zur Erzielung der Umsatzerl\u00f6se erbrachten Leistungen": {},
"Mitgliedsbeitr\u00e4ge": {},
"Skontoertr\u00e4ge auf sonstige betriebliche Aufwendungen": {},
"Sonstige betrieblichen Aufwendungen": {},
"Spenden und Trinkgelder": {},
"Spesen des Geldverkehrs": {},
"Verluste aus dem Abgang vom Anlageverm\u00f6gen, ausgenommen Finanzanlagen": {},
"Vertriebskosten": {},
"Verwaltungskosten": {},
"root_type": "Expense"
},
"Summe Betriebliche Ertr\u00e4ge": {
"4400 bis 4490 Erl\u00f6sschm\u00e4lerungen": {},
"4500 bis 4570 Ver\u00e4nderungen des Bestandes an fertigen und unfertigen Erzeugn. sowie an noch nicht abrechenbaren Leistungen": {},
"4580 bis 4590 andere aktivierte Eigenleistungen": {},
"4600 bis 4620 Erl\u00f6se aus dem Abgang vom Anlageverm\u00f6gen, ausgen. Finanzanlagen": {},
"4630 bis 4650 Ertr\u00e4ge aus dem Abgang vom Anlageverm\u00f6gen, ausgen. Finanzanlagen": {},
"4660 bis 4670 Ertr\u00e4ge aus der Zuschreibung zum Anlageverm\u00f6gen, ausgen. Finanzanlagen": {},
"4700 bis 4790 Ertr\u00e4ge aus der Aufl\u00f6sung von R\u00fcckstellungen": {},
"4800 bis 4990 \u00dcbrige betriebliche Ertr\u00e4ge": {},
"Erl\u00f6se 0 % Ausfuhrlieferungen/Drittl\u00e4nder": {},
"Erl\u00f6se 10 %": {},
"Erl\u00f6se 20 %": {},
"Erl\u00f6se aus im Inland stpfl. EG Lieferungen 10 % USt": {},
"Erl\u00f6se aus im Inland stpfl. EG Lieferungen 20 % USt": {},
"Erl\u00f6se i.g. Lieferungen (stfr)": {},
"root_type": "Income"
},
"Summe Eigenkapital R\u00fccklagen Abschlusskonten": {
"9000 bis 9180 Gezeichnetes bzw. gewidmetes Kapital": {
"account_type": "Equity"
},
"9200 bis 9290 Kapitalr\u00fccklagen": {
"account_type": "Equity"
},
"9300 bis 9380 Gewinnr\u00fccklagen": {
"account_type": "Equity"
},
"9400 bis 9590 Bewertungsreserven uns sonst. unversteuerte R\u00fccklagen": {
"account_type": "Equity"
},
"9600 bis 9690 Privat und Verrechnungskonten bei Einzelunternehmen und Personengesellschaften": {},
"9700 bis 9790 Einlagen stiller Gesellschafter ": {},
"9900 bis 9999 Evidenzkonten": {},
"Bilanzgewinn (-verlust )": {
"account_type": "Equity"
},
"Er\u00f6ffnungsbilanz": {},
"Gewinn- und Verlustrechnung": {},
"Schlussbilanz": {},
"nicht eingeforderte ausstehende Einlagen": {
"account_type": "Equity"
},
"root_type": "Equity"
},
"Summe Finanzertr\u00e4ge und Aufwendungen": {
"8000 bis 8040 Ertr\u00e4ge aus Beteiligungen": {},
"8050 bis 8090 Ertr\u00e4ge aus anderen Wertpapieren und Ausleihungen des Finanzanlageverm\u00f6gens": {},
"8100 bis 8130 Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge": {},
"8220 bis 8250 Aufwendungen aus Beteiligungen": {},
"8260 bis 8270 Aufwendungen aus sonst. Fiananzanlagen und aus Wertpapieren des Umlaufverm\u00f6gens": {},
"8280 bis 8340 Zinsen und \u00e4hnliche Aufwendungem": {},
"8400 bis 8440 Au\u00dferordentliche Ertr\u00e4ge": {},
"8450 bis 8490 Au\u00dferordentliche Aufwendungen": {},
"8500 bis 8590 Steuern vom Einkommen und vom Ertrag": {
"account_type": "Tax"
},
"8600 bis 8690 Aufl\u00f6sung unversteuerten R\u00fccklagen": {},
"8700 bis 8740 Aufl\u00f6sung von Kapitalr\u00fccklagen": {},
"8750 bis 8790 Aufl\u00f6sung von Gewinnr\u00fccklagen": {},
"8800 bis 8890 Zuweisung von unversteuerten R\u00fccklagen": {},
"Buchwert abgegangener Beteiligungen": {},
"Buchwert abgegangener Wertpapiere des Umlaufverm\u00f6gens": {},
"Buchwert abgegangener sonstiger Finanzanlagen": {},
"Erl\u00f6se aus dem Abgang von Beteiligungen": {},
"Erl\u00f6se aus dem Abgang von Wertpapieren des Umlaufverm\u00f6gens": {},
"Erl\u00f6se aus dem Abgang von sonstigen Finanzanlagen": {},
"Ertr\u00e4ge aus dem Abgang von und der Zuschreibung zu Finanzanlagen": {},
"Ertr\u00e4ge aus dem Abgang von und der Zuschreibung zu Wertpapieren des Umlaufverm\u00f6gens": {},
"Gewinabfuhr bzw. Verlust\u00fcberrechnung aus Ergebnisabf\u00fchrungsvertr\u00e4gen": {},
"nicht ausgenutzte Lieferantenskonti": {},
"root_type": "Income"
},
"Summe Fremdkapital": {
"3020 bis 3030 Steuerr\u00fcckstellungen": {},
"3040 bis 3090 Sonstige R\u00fcckstellungen": {},
"3110 bis 3170 Verbindlichkeiten gegen\u00fcber Kredidinstituten": {},
"3180 bis 3190 Verbindlichkeiten gegen\u00fcber Finanzinstituten": {},
"3380 bis 3390 Verbindlichkeiten aus der Annahme gezogener Wechsel u. d. Ausstellungen eigener Wechsel": {
"Klasse 0 Aktiva: Anlageverm\u00f6gen": {
"0100 Konzessionen ": {"account_type": "Fixed Asset"},
"0110 Patentrechte und Lizenzen ": {"account_type": "Fixed Asset"},
"0120 Datenverarbeitungsprogramme ": {"account_type": "Fixed Asset"},
"0130 Marken, Warenzeichen und Musterschutzrechte, sonstige Urheberrechte ": {"account_type": "Fixed Asset"},
"0140 Pacht- und Mietrechte ": {"account_type": "Fixed Asset"},
"0150 Bezugs- und ähnliche Rechte ": {"account_type": "Fixed Asset"},
"0160 Geschäfts-/Firmenwert ": {"account_type": "Fixed Asset"},
"0170 Umgründungsmehrwert ": {"account_type": "Fixed Asset"},
"0180 Geleistete Anzahlungen auf immaterielle Vermögensgegenstände": {"account_type": "Fixed Asset"},
"0190 Kumulierte Abschreibungen zu immateriellen Vermögensgegenständen ": {"account_type": "Fixed Asset"},
"0200 Unbebaute Grundstücke, soweit nicht landwirtschaftlich genutzt ": {"account_type": "Fixed Asset"},
"0210 Bebaute Grundstücke (Grundwert) ": {"account_type": "Fixed Asset"},
"0220 Landwirtschaftlich genutzte Grundstücke ": {"account_type": "Fixed Asset"},
"0230 Grundstücksgleiche Rechte ": {"account_type": "Fixed Asset"},
"0300 Betriebs- und Geschäftsgebäude auf eigenem Grund ": {"account_type": "Fixed Asset"},
"0310 Wohn- und Sozialgebäude auf eigenem Grund ": {"account_type": "Fixed Asset"},
"0320 Betriebs- und Geschäftsgebäude auf fremdem Grund ": {"account_type": "Fixed Asset"},
"0330 Wohn- und Sozialgebäude auf fremdem Grund ": {"account_type": "Fixed Asset"},
"0340 Grundstückseinrichtungen auf eigenem Grund ": {"account_type": "Fixed Asset"},
"0350 Grundstückseinrichtungen auf fremdem Grund ": {"account_type": "Fixed Asset"},
"0360 Bauliche Investitionen in fremden (gepachteten) Betriebs- und Geschäftsgebäuden": {"account_type": "Fixed Asset"},
"0370 Bauliche Investitionen in fremden (gepachteten) Wohn- und Sozialgebäuden": {"account_type": "Fixed Asset"},
"0390 Kumulierte Abschreibungen zu Grundstücken ": {"account_type": "Fixed Asset"},
"0400 Maschinen und Geräte ": {"account_type": "Fixed Asset"},
"0500 Maschinenwerkzeuge ": {"account_type": "Fixed Asset"},
"0510 Allgemeine Werkzeuge und Handwerkzeuge ": {"account_type": "Fixed Asset"},
"0520 Prototypen, Formen, Modelle ": {"account_type": "Fixed Asset"},
"0530 Andere Erzeugungshilfsmittel (auch Softwarewerkzeuge)": {"account_type": "Fixed Asset"},
"0540 Hebezeuge und Montageanlagen ": {"account_type": "Fixed Asset"},
"0550 Geringwertige Vermögensgegenstände, soweit im Erzeugungsprozess ": {"account_type": "Fixed Asset"},
"0560 Festwerte technische Anlagen und Maschinen ": {"account_type": "Fixed Asset"},
"0590 Kumulierte Abschreibungen zu technischen Anlagen und Maschinen ": {"account_type": "Fixed Asset"},
"0600 Betriebs- und Geschäftsausstattung, soweit nicht gesondert angeführt ": {"account_type": "Fixed Asset"},
"0610 Andere Anlagen, soweit nicht gesondert angeführt ": {"account_type": "Fixed Asset"},
"0620 Büromaschinen, EDV-Anlagen ": {"account_type": "Fixed Asset"},
"0630 PKW und Kombis ": {"account_type": "Fixed Asset"},
"0640 LKW ": {"account_type": "Fixed Asset"},
"0650 Andere Beförderungsmittel ": {"account_type": "Fixed Asset"},
"0660 Gebinde ": {"account_type": "Fixed Asset"},
"0670 Geringwertige Vermögensgegenstände, soweit nicht im Erzeugungssprozess verwendet": {"account_type": "Fixed Asset"},
"0680 Festwerte außer technische Anlagen und Maschinen ": {"account_type": "Fixed Asset"},
"0690 Kumulierte Abschreibungen zu anderen Anlagen, Betriebs- und Geschäftsausstattung": {"account_type": "Fixed Asset"},
"0700 Geleistete Anzahlungen auf Sachanlagen ": {"account_type": "Fixed Asset"},
"0710 Anlagen in Bau ": {"account_type": "Fixed Asset"},
"0790 Kumulierte Abschreibungen zu geleisteten Anzahlungen auf Sachanlagen ": {"account_type": "Fixed Asset"},
"0800 Anteile an verbundenen Unternehmen ": {"account_type": "Fixed Asset"},
"0810 Beteiligungen an Gemeinschaftsunternehmen ": {"account_type": "Fixed Asset"},
"0820 Beteiligungen an angeschlossenen (assoziierten) Unternehmen ": {"account_type": "Fixed Asset"},
"0830 Eigene Anteile, Anteile an herrschenden oder mit Mehrheit beteiligten ": {"account_type": "Fixed Asset"},
"0840 Sonstige Beteiligungen ": {"account_type": "Fixed Asset"},
"0850 Ausleihungen an verbundene Unternehmen ": {"account_type": "Fixed Asset"},
"0860 Ausleihungen an Unternehmen mit Beteiligungsverhältnis": {"account_type": "Fixed Asset"},
"0870 Ausleihungen an Gesellschafter ": {"account_type": "Fixed Asset"},
"0880 Sonstige Ausleihungen ": {"account_type": "Fixed Asset"},
"0890 Anteile an Kapitalgesellschaften ohne Beteiligungscharakter ": {"account_type": "Fixed Asset"},
"0900 Anteile an Personengesellschaften ohne Beteiligungscharakter ": {"account_type": "Fixed Asset"},
"0910 Genossenschaftsanteile ohne Beteiligungscharakter ": {"account_type": "Fixed Asset"},
"0920 Anteile an Investmentfonds ": {"account_type": "Fixed Asset"},
"0930 Festverzinsliche Wertpapiere des Anlagevermögens ": {"account_type": "Fixed Asset"},
"0980 Geleistete Anzahlungen auf Finanzanlagen ": {"account_type": "Fixed Asset"},
"0990 Kumulierte Abschreibungen zu Finanzanlagen ": {"account_type": "Fixed Asset"},
"root_type": "Asset"
},
"Klasse 1 Aktiva: Vorr\u00e4te": {
"1000 Bezugsverrechnung": {"account_type": "Stock"},
"1100 Rohstoffe": {"account_type": "Stock"},
"1200 Bezogene Teile": {"account_type": "Stock"},
"1300 Hilfsstoffe": {"account_type": "Stock"},
"1350 Betriebsstoffe": {"account_type": "Stock"},
"1360 Vorrat Energietraeger": {"account_type": "Stock"},
"1400 Unfertige Erzeugnisse": {"account_type": "Stock"},
"1500 Fertige Erzeugnisse": {"account_type": "Stock"},
"1600 Handelswarenvorrat": {"account_type": "Stock Received But Not Billed"},
"1700 Noch nicht abrechenbare Leistungen": {"account_type": "Stock"},
"1900 Wertberichtigungen": {"account_type": "Stock"},
"1800 Geleistete Anzahlungen": {"account_type": "Stock"},
"1900 Wertberichtigungen": {"account_type": "Stock"},
"root_type": "Asset"
},
"Klasse 3 Passiva: Verbindlichkeiten": {
"3000 Allgemeine Verbindlichkeiten (Schuld)": {"account_type": "Payable"},
"3010 R\u00fcckstellungen f\u00fcr Pensionen": {"account_type": "Payable"},
"3020 Steuerr\u00fcckstellungen": {"account_type": "Tax"},
"3041 Sonstige R\u00fcckstellungen": {"account_type": "Payable"},
"3110 Verbindlichkeiten gegen\u00fcber Bank": {"account_type": "Payable"},
"3150 Verbindlichkeiten Darlehen": {"account_type": "Payable"},
"3185 Verbindlichkeiten Kreditkarte": {"account_type": "Payable"},
"3380 Verbindlichkeiten aus der Annahme gezogener Wechsel u. d. Ausstellungen eigener Wechsel": {
"account_type": "Payable"
},
"3400 bis 3470 Verbindlichkeiten gegen\u00fc. verb. Untern., Verbindl. gegen\u00fc. Untern., mit denen eine Beteiligungsverh\u00e4lnis besteht": {},
"3600 bis 3690 Verbindlichkeiten im Rahmen der sozialen Sicherheit": {},
"3700 bis 3890 \u00dcbrige sonstige Verbindlichkeiten": {},
"3900 bis 3990 Passive Rechnungsabgrenzungsposten": {},
"Anleihen (einschlie\u00dflich konvertibler)": {},
"Erhaltene Anzahlungenauf Bestellungen": {},
"R\u00fcckstellungen f\u00fcr Abfertigung": {},
"R\u00fcckstellungen f\u00fcr Pensionen": {},
"USt. \u00a719 /art (reverse charge)": {
"3400 Verbindlichkeiten gegen\u00fc. verb. Untern., Verbindl. gegen\u00fc. Untern., mit denen eine Beteiligungsverh\u00e4lnis besteht": {},
"3460 Verbindlichkeiten gegenueber Gesellschaftern": {"account_type": "Payable"},
"3470 Einlagen stiller Gesellschafter": {"account_type": "Payable"},
"3585 Verbindlichkeiten Lohnsteuer": {"account_type": "Tax"},
"3590 Verbindlichkeiten Kommunalabgaben": {"account_type": "Tax"},
"3595 Verbindlichkeiten Dienstgeberbeitrag": {"account_type": "Tax"},
"3600 Verbindlichkeiten Sozialversicherung": {"account_type": "Payable"},
"3640 Verbindlichkeiten Loehne und Gehaelter": {"account_type": "Payable"},
"3700 Sonstige Verbindlichkeiten": {"account_type": "Payable"},
"3900 Passive Rechnungsabgrenzungsposten": {"account_type": "Payable"},
"3100 Anleihen (einschlie\u00dflich konvertibler)": {"account_type": "Payable"},
"3200 Erhaltene Anzahlungen auf Bestellungen": {"account_type": "Payable"},
"3040 R\u00fcckstellungen f\u00fcr Abfertigung": {"account_type": "Payable"},
"3530 USt. \u00a719 (reverse charge)": {
"account_type": "Tax"
},
"Umsatzsteuer": {},
"Umsatzsteuer Zahllast": {
"3500 Verbindlichkeiten aus Umsatzsteuer": {"account_type": "Tax"},
"3580 Umsatzsteuer Zahllast": {
"account_type": "Tax"
},
"Umsatzsteuer aus i.g. Erwerb 10%": {
"3510 Umsatzsteuer Inland 20%": {
"account_type": "Tax"
},
"Umsatzsteuer aus i.g. Erwerb 20%": {
"3515 Umsatzsteuer Inland 10%": {
"account_type": "Tax"
},
"3520 Umsatzsteuer aus i.g. Erwerb 20%": {
"account_type": "Tax"
},
"Umsatzsteuer aus i.g. Lieferungen 10%": {
"3525 Umsatzsteuer aus i.g. Erwerb 10%": {
"account_type": "Tax"
},
"Umsatzsteuer aus i.g. Lieferungen 20%": {
"account_type": "Tax"
},
"Umsatzsteuer-Evidenzkonto f\u00fcr erhaltene Anzahlungen auf Bestellungen": {},
"Verbindlichkeiten aus Lieferungen u. Leistungen EU": {
},
"3560 Umsatzsteuer-Evidenzkonto f\u00fcr erhaltene Anzahlungen auf Bestellungen": {},
"3360 Verbindlichkeiten aus Lieferungen u. Leistungen EU": {
"account_type": "Payable"
},
"Verbindlichkeiten aus Lieferungen u. Leistungen Inland": {
"3000 Verbindlichkeiten aus Lieferungen u. Leistungen Inland": {
"account_type": "Payable"
},
"Verbindlichkeiten aus Lieferungen u. Leistungen sonst. Ausland": {
"3370 Verbindlichkeiten aus Lieferungen u. Leistungen sonst. Ausland": {
"account_type": "Payable"
},
"Verbindlichkeiten gegen\u00fcber Gesellschaften": {},
"Verrechnung Finanzamt": {
"3400 Verbindlichkeiten gegen\u00fcber verbundenen Unternehmen": {},
"3570 Verrechnung Finanzamt": {
"account_type": "Tax"
},
"root_type": "Liability"
},
"Summe Kontoklasse 0 Anlageverm\u00f6gen": {
"44 bis 49 Sonstige Maschinen und maschinelle Anlagen": {},
"920 bis 930 Festverzinsliche Wertpapiere des Anlageverm\u00f6gens": {},
"940 bis 970 Sonstige Finanzanlagen, Wertrechte": {},
"Allgemeine Werkzeuge und Handwerkzeuge": {},
"Andere Bef\u00f6rderungsmittel": {},
"Andere Betriebs- und Gesch\u00e4ftsausstattung": {},
"Andere Erzeugungshilfsmittel": {},
"Anlagen im Bau": {},
"Anteile an Investmentfonds": {},
"Anteile an Kapitalgesellschaften ohne Beteiligungscharakter": {},
"Anteile an Personengesellschaften ohne Beteiligungscharakter": {},
"Anteile an verbundenen Unternehmen": {},
"Antriebsmaschinen": {},
"Aufwendungen f\u00fcs das Ingangssetzen u. Erweitern eines Betriebes": {},
"Ausleihungen an verbundene Unternehmen": {},
"Ausleihungen an verbundene Unternehmen, mit denen ein Beteiligungsverh\u00e4lnis besteht": {},
"Bauliche Investitionen in fremden (gepachteten) Betriebs- und Gesch\u00e4ftsgeb\u00e4uden": {},
"Bauliche Investitionen in fremden (gepachteten) Wohn- und Sozialgeb\u00e4uden": {},
"Bebaute Grundst\u00fccke (Grundwert)": {},
"Beheizungs- und Beleuchtungsanlagen": {},
"Beteiligungen an Gemeinschaftunternehmen": {},
"Beteiligungen an angeschlossenen (assoziierten) Unternehmen": {},
"Betriebs- und Gesch\u00e4ftsgeb\u00e4ude auf eigenem Grund": {},
"Betriebs- und Gesch\u00e4ftsgeb\u00e4ude auf fremdem Grund": {},
"B\u00fcromaschinen, EDV - Anlagen": {},
"Datenverarbeitungsprogramme": {},
"Energieversorgungsanlagen": {},
"Fertigungsmaschinen": {},
"Gebinde": {},
"Geleistete Anzahlungen": {},
"Genossenschaften ohne Beteiligungscharakter": {},
"Geringwertige Verm\u00f6gensgegenst\u00e4nde, soweit im Erzeugerprozess verwendet": {},
"Geringwertige Verm\u00f6gensgegenst\u00e4nde, soweit nicht im Erzeugungsprozess verwendet": {},
"Gesch\u00e4fts(Firmen)wert": {},
"Grundst\u00fcckseinrichtunten auf eigenem Grund": {},
"Grundst\u00fcckseinrichtunten auf fremdem Grund": {},
"Grundst\u00fccksgleiche Rechte": {},
"Hebezeuge und Montageanlagen": {},
"Konzessionen": {},
"Kumulierte Abschreibungen": {},
"LKW": {},
"Marken, Warenzeichen und Musterschutzrechte": {},
"Maschinenwerkzeuge": {},
"Nachrichten- und Kontrollanlagen": {},
"PKW": {},
"Pacht- und Mietrechte": {},
"Patentrechte und Lizenzen": {},
"Sonstige Ausleihungen": {},
"Sonstige Beteiligungen": {},
"Transportanlagen": {},
"Unbebaute Grundst\u00fccke": {},
"Vorrichtungen, Formen und Modelle": {},
"Wohn- und Sozialgeb\u00e4ude auf eigenem Grund": {},
"Wohn- und Sozialgeb\u00e4ude auf fremdem Grund": {},
},
"Klasse 2 Aktiva: Umlaufverm\u00f6gen, Rechnungsabgrenzungen": {
"2030 Forderungen aus Lieferungen und Leistungen Inland (0% USt, umsatzsteuerfrei)": {
"account_type": "Receivable"
},
"2010 Forderungen aus Lieferungen und Leistungen Inland (10% USt, umsatzsteuerfrei)": {
"account_type": "Receivable"
},
"2000 Forderungen aus Lieferungen und Leistungen Inland (20% USt, umsatzsteuerfrei)": {
"account_type": "Receivable"
},
"2040 Forderungen aus Lieferungen und Leistungen Inland (sonstiger USt-Satz)": {
"account_type": "Receivable"
},
"2100 Forderungen aus Lieferungen und Leistungen EU": {
"account_type": "Receivable"
},
"2150 Forderungen aus Lieferungen und Leistungen Ausland (Nicht-EU)": {
"account_type": "Receivable"
},
"2200 Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2250 Forderungen gegen\u00fcber Unternehmen, mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"2300 Sonstige Forderungen und Verm\u00f6gensgegenst\u00e4nde": {
"account_type": "Receivable"
},
"2630 Sonstige Wertpapiere": {
"account_type": "Stock"
},
"2750 Kassenbest\u00e4nde in Fremdw\u00e4hrung": {
"account_type": "Cash"
},
"2900 Aktive Rechnungsabrenzungsposten": {
"account_type": "Receivable"
},
"2600 Anteile an verbundenen Unternehmen": {
"account_type": "Equity"
},
"2680 Besitzwechsel ohne Forderungen": {
"account_type": "Receivable"
},
"2950 Aktiviertes Disagio": {
"account_type": "Receivable"
},
"2610 Eigene Anteile und Wertpapiere an mit Mehrheit beteiligten Unternehmen": {
"account_type": "Receivable"
},
"2570 Einfuhrumsatzsteuer (bezahlt)": {"account_type": "Tax"},
"2460 Eingeforderte aber noch nicht eingezahlte Einlagen": {
"account_type": "Receivable"
},
"2180 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Ausland": {
"account_type": "Receivable"
},
"2130 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"2080 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"account_type": "Receivable"
},
"2270 Einzelwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"2230 Einzelwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2470 Einzelwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"account_type": "Receivable"
},
"2700 Kassenbestand": {
"account_type": "Cash"
},
"2190 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. sonstiges Ausland": {
"account_type": "Receivable"
},
"2130 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"2100 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"account_type": "Receivable"
},
"2280 Pauschalwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"2240 Pauschalwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2480 Pauschalwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"account_type": "Receivable"
},
"2740 Postwertzeichen": {
"account_type": "Cash"
},
"2780 Schecks in Euro": {
"account_type": "Cash"
},
"2800 Guthaben bei Bank": {
"account_type": "Bank"
},
"2801 Guthaben bei Bank - Sparkonto": {
"account_type": "Bank"
},
"2810 Guthaben bei Paypal": {
"account_type": "Bank"
},
"2930 Mietvorauszahlungen": {
"account_type": "Receivable"
},
"2980 Abgrenzung latenter Steuern": {
"account_type": "Receivable"
},
"2500 Vorsteuer": {
"account_type": "Receivable"
},
"2510 Vorsteuer Inland 10%": {
"account_type": "Tax"
},
"2895 Schwebende Geldbewegugen": {
"account_type": "Bank"
},
"2513 Vorsteuer Inland 5%": {
"account_type": "Tax"
},
"2515 Vorsteuer Inland 20%": {
"account_type": "Tax"
},
"2520 Vorsteuer aus innergemeinschaftlichem Erwerb 10%": {
"account_type": "Tax"
},
"2525 Vorsteuer aus innergemeinschaftlichem Erwerb 20%": {
"account_type": "Tax"
},
"2530 Vorsteuer \u00a719/Art 19 ( reverse charge ) ": {
"account_type": "Tax"
},
"2690 Wertberichtigungen zu Wertpapieren und Anteilen": {
"account_type": "Receivable"
},
"root_type": "Asset"
},
"Summe Personalaufwand": {
"6000 bis 6190 L\u00f6hne": {},
"6200 bis 6390 Geh\u00e4lter": {},
"6400 bis 6440 Aufwendungen f\u00fcr Abfertigungen": {},
"6450 bis 6490 Aufwendungen f\u00fcr Altersversorgung": {},
"6500 bis 6550 Gesetzlicher Sozialaufwand Arbeiter": {},
"6560 bis 6590 Gesetzlicher Sozialaufwand Angestellte": {},
"6600 bis 6650 Lohnabh\u00e4ngige Abgaben und Pflichtbeitr\u00e4gte": {},
"6660 bis 6690 Gehaltsabh\u00e4ngige Abgaben und Pflichtbeitr\u00e4gte": {},
"6700 bis 6890 Sonstige Sozialaufwendungen": {},
"Aufwandsstellenrechnung": {},
"Klasse 4: Betriebliche Erträge": {
"4000 Erlöse 20 %": {"account_type": "Income Account"},
"4020 Erl\u00f6se 0 % steuerbefreit": {"account_type": "Income Account"},
"4010 Erl\u00f6se 10 %": {"account_type": "Income Account"},
"4030 Erl\u00f6se 13 %": {"account_type": "Income Account"},
"4040 Erl\u00f6se 0 % innergemeinschaftliche Lieferungen": {"account_type": "Income Account"},
"4400 Erl\u00f6sreduktion 0 % steuerbefreit": {"account_type": "Expense Account"},
"4410 Erl\u00f6sreduktion 10 %": {"account_type": "Expense Account"},
"4420 Erl\u00f6sreduktion 20 %": {"account_type": "Expense Account"},
"4430 Erl\u00f6sreduktion 13 %": {"account_type": "Expense Account"},
"4440 Erl\u00f6sreduktion 0 % innergemeinschaftliche Lieferungen": {"account_type": "Expense Account"},
"4500 Ver\u00e4nderungen des Bestandes an fertigen und unfertigen Erzeugn. sowie an noch nicht abrechenbaren Leistungen": {"account_type": "Income Account"},
"4580 Aktivierte Eigenleistungen": {"account_type": "Income Account"},
"4600 Erl\u00f6se aus dem Abgang vom Anlageverm\u00f6gen, ausgen. Finanzanlagen": {"account_type": "Income Account"},
"4630 Ertr\u00e4ge aus dem Abgang vom Anlageverm\u00f6gen, ausgen. Finanzanlagen": {"account_type": "Income Account"},
"4660 Ertr\u00e4ge aus der Zuschreibung zum Anlageverm\u00f6gen, ausgen. Finanzanlagen": {"account_type": "Income Account"},
"4700 Ertr\u00e4ge aus der Aufl\u00f6sung von R\u00fcckstellungen": {"account_type": "Income Account"},
"4800 \u00dcbrige betriebliche Ertr\u00e4ge": {"account_type": "Income Account"},
"root_type": "Income"
},
"Klasse 5: Aufwand f\u00fcr Material und Leistungen": {
"5000 Einkauf Partnerleistungen": {"account_type": "Cost of Goods Sold"},
"5100 Verbrauch an Rohstoffen": {"account_type": "Cost of Goods Sold"},
"5200 Verbrauch von bezogenen Fertig- und Einzelteilen": {"account_type": "Cost of Goods Sold"},
"5300 Verbrauch von Hilfsstoffen": {"account_type": "Cost of Goods Sold"},
"5340 Verbrauch Verpackungsmaterial": {"account_type": "Cost of Goods Sold"},
"5470 Verbrauch von Kleinmaterial": {"account_type": "Cost of Goods Sold"},
"5450 Verbrauch von Reinigungsmaterial": {"account_type": "Cost of Goods Sold"},
"5400 Verbrauch von Betriebsstoffen": {"account_type": "Cost of Goods Sold"},
"5500 Verbrauch von Werkzeugen und anderen Erzeugungshilfsmittel": {"account_type": "Cost of Goods Sold"},
"5600 Verbrauch von Brenn- und Treibstoffen, Energie und Wasser": {"account_type": "Cost of Goods Sold"},
"5700 Bearbeitung durch Dritte": {"account_type": "Cost of Goods Sold"},
"5900 Aufwandsstellenrechnung Material": {"account_type": "Cost of Goods Sold"},
"5820 Skontoertr\u00e4ge (20% USt.)": {"account_type": "Income Account"},
"5810 Skontoertr\u00e4ge (10% USt.)": {"account_type": "Income Account"},
"5010 Handelswareneinkauf 10 %": {"account_type": "Cost of Goods Sold"},
"5020 Handelswareneinkauf 20 %": {"account_type": "Cost of Goods Sold"},
"5040 Handelswareneinkauf innergemeinschaftlicher Erwerb 10 % VSt/10 % USt": {"account_type": "Cost of Goods Sold"},
"5050 Handelswareneinkauf innergemeinschaftlicher Erwerb 20 % VSt/20 % USt": {"account_type": "Cost of Goods Sold"},
"5070 Handelswareneinkauf innergemeinschaftlicher Erwerb ohne Vorsteuerabzug und 10 % USt": {"account_type": "Cost of Goods Sold"},
"5080 Handelswareneinkauf innergemeinschaftlicher Erwerb ohne Vorsteuerabzug und 20 % USt": {"account_type": "Cost of Goods Sold"},
"root_type": "Expense"
},
"Summe Umlaufverm\u00f6gen": {
"2000 bis 2007 Forderungen aus Lief. und Leist. Inland": {
"account_type": "Receivable"
},
"2100 bis 2120 Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"2150 bis 2170 Forderungen aus Lief. und Leist. Ausland": {
"account_type": "Receivable"
},
"2200 bis 2220 Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2250 bis 2270 Forderungen gegen\u00fcber Unternehmen, mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"2300 bis 2460 Sonstige Forderungen und Verm\u00f6gensgegenst\u00e4nde": {
"account_type": "Receivable"
},
"2630 bis 2670 Sonstige Wertpapiere": {
"account_type": "Receivable"
},
"2750 bis 2770 Kassenbest\u00e4nde in Fremdw\u00e4hrung": {
"account_type": "Receivable"
},
"Aktive Rechnungsabrenzungsposten": {
"account_type": "Receivable"
},
"Anteile an verbundenen Unternehmen": {
"account_type": "Receivable"
},
"Bank / Guthaben bei Kreditinstituten": {
"account_type": "Receivable"
},
"Besitzwechsel ...": {
"account_type": "Receivable"
},
"Disagio": {
"account_type": "Receivable"
},
"Eigene Anteile (Wertpapiere)": {
"account_type": "Receivable"
},
"Einfuhrumsatzsteuer (bezahlt)": {},
"Eingeforderte aber noch nicht eingezahlte Einlagen": {
"account_type": "Receivable"
},
"Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Ausland": {
"account_type": "Receivable"
},
"Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"account_type": "Receivable"
},
"Einzelwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"Einzelwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"Einzelwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"account_type": "Receivable"
},
"Kassenbestand": {
"account_type": "Receivable"
},
"Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. Ausland": {
"account_type": "Receivable"
},
"Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"account_type": "Receivable"
},
"Pauschalwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"Pauschalwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"Pauschalwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"account_type": "Receivable"
},
"Postwertzeichen": {
"account_type": "Receivable"
},
"Schecks in Inlandsw\u00e4hrung": {
"account_type": "Receivable"
},
"Sonstige Anteile": {
"account_type": "Receivable"
},
"Stempelmarken": {
"account_type": "Receivable"
},
"Steuerabgrenzung": {
"account_type": "Receivable"
},
"Unterschiedsbetrag gem. Abschnitt XII Pensionskassengesetz": {
"account_type": "Receivable"
},
"Unterschiedsbetrag zur gebotenen Pensionsr\u00fcckstellung": {
"account_type": "Receivable"
},
"Vorsteuer": {
"account_type": "Receivable"
},
"Vorsteuer aus ig. Erwerb 10%": {
"account_type": "Tax"
},
"Vorsteuer aus ig. Erwerb 20%": {
"account_type": "Tax"
},
"Vorsteuer \u00a719/Art 19 ( reverse charge ) ": {
"account_type": "Tax"
},
"Wertberichtigungen": {
"account_type": "Receivable"
},
"root_type": "Asset"
},
"Summe Vorr\u00e4te": {
"1000 bis 1090 Bezugsverrechnung": {},
"1100 bis 1190 Rohstoffe": {},
"1200 bis 1290 Bezogene Teile": {},
"1300 bis 1340 Hilfsstoffe": {},
"1350 bis 1390 Betriebsstoffe": {},
"1400 bis 1490 Unfertige Erzeugniss": {},
"1500 bis 1590 Fertige Erzeugniss": {},
"1600 bis 1690 Waren": {},
"1700 bis 1790 Noch nicht abgerechenbare Leistungen": {},
"1900 bis 1990 Wertberichtigungen": {},
"geleistete Anzahlungen": {},
"root_type": "Asset"
},
"Summe Wareneinsatz": {
"5100 bis 5190 Verbrauch an Rohstoffen": {},
"5200 bis 5290 Verbrauch von bezogenen Fertig- und Einzelteilen": {},
"5300 bis 5390 Verbrauch von Hilfsstoffen": {},
"5400 bis 5490 Verbrauch von Betriebsstoffen": {},
"5500 bis 5590 Verbrauch von Werkzeugen und anderen Erzeugungshilfsmittel": {},
"5600 bis 5690 Verbrauch von Brenn- und Treibstoffen, Energie und Wasser": {},
"5700 bis 5790 Sonstige bezogene Herstellungsleistungen": {},
"Aufwandsstellenrechnung": {},
"Skontoertr\u00e4ge auf Materialaufwand": {},
"Skontoertr\u00e4ge auf sonstige bezogene Herstellungsleistungen": {},
"Wareneinkauf 10 %": {},
"Wareneinkauf 20 %": {},
"Wareneinkauf igErwerb 10 % VSt/10 % USt": {},
"Wareneinkauf igErwerb 20 % VSt/20 % USt": {},
"Wareneinkauf igErwerb ohne Vorsteuerabzug und 10 % USt": {},
"Wareneinkauf igErwerb ohne Vorsteuerabzug und 20 % USt": {},
"Klasse 6: Personalaufwand": {
"6000 L\u00f6hne": {"account_type": "Payable"},
"6200 Geh\u00e4lter": {"account_type": "Payable"},
"6400 Aufwendungen f\u00fcr Abfertigungen": {"account_type": "Payable"},
"6450 Aufwendungen f\u00fcr Altersversorgung": {"account_type": "Payable"},
"6500 Gesetzlicher Sozialaufwand Arbeiter": {"account_type": "Payable"},
"6560 Gesetzlicher Sozialaufwand Angestellte": {"account_type": "Payable"},
"6600 Lohnabh\u00e4ngige Abgaben und Pflichtbeitr\u00e4gte": {"account_type": "Payable"},
"6660 Gehaltsabh\u00e4ngige Abgaben und Pflichtbeitr\u00e4gte": {"account_type": "Payable"},
"6700 Sonstige Sozialaufwendungen": {"account_type": "Payable"},
"6900 Aufwandsstellenrechnung Personal": {"account_type": "Payable"},
"root_type": "Expense"
},
"Klasse 7: Abschreibungen und sonstige betriebliche Aufwendungen": {
"7010 Abschreibungen auf das Anlageverm\u00f6gen (ausgenommen Finanzanlagen)": {"account_type": "Depreciation"},
"7100 Sonstige Steuern und Geb\u00fchren": {"account_type": "Tax"},
"7200 Instandhaltung u. Reinigung durch Dritte, Entsorgung, Energie": {"account_type": "Expense Account"},
"7300 Transporte durch Dritte": {"account_type": "Expense Account"},
"7310 Fahrrad - Aufwand": {"account_type": "Expense Account"},
"7320 Kfz - Aufwand": {"account_type": "Expense Account"},
"7330 LKW - Aufwand": {"account_type": "Expense Account"},
"7340 Lastenrad - Aufwand": {"account_type": "Expense Account"},
"7350 Reise- und Fahraufwand": {"account_type": "Expense Account"},
"7360 Tag- und N\u00e4chtigungsgelder": {"account_type": "Expense Account"},
"7380 Nachrichtenaufwand": {"account_type": "Expense Account"},
"7400 Miet- und Pachtaufwand": {"account_type": "Expense Account"},
"7440 Leasingaufwand": {"account_type": "Expense Account"},
"7480 Lizenzaufwand": {"account_type": "Expense Account"},
"7500 Aufwand f\u00fcr beigestelltes Personal": {"account_type": "Expense Account"},
"7540 Provisionen an Dritte": {"account_type": "Expense Account"},
"7580 Aufsichtsratsverg\u00fctungen": {"account_type": "Expense Account"},
"7610 Druckerzeugnisse und Vervielf\u00e4ltigungen": {"account_type": "Expense Account"},
"7650 Werbung und Repr\u00e4sentationen": {"account_type": "Expense Account"},
"7700 Versicherungen": {"account_type": "Expense Account"},
"7750 Beratungs- und Pr\u00fcfungsaufwand": {"account_type": "Expense Account"},
"7800 Forderungsverluste und Schadensf\u00e4lle": {"account_type": "Expense Account"},
"7840 Verschiedene betriebliche Aufwendungen": {"account_type": "Expense Account"},
"7910 Aufwandsstellenrechung der Hersteller": {"account_type": "Expense Account"},
"7060 Sofortabschreibungen geringwertig": {"account_type": "Expense Account"},
"7070 Abschreibungen vom Umlaufverm\u00f6gen, soweit diese die im Unternehmen \u00fcblichen Abschreibungen \u00fcbersteigen": {"account_type": "Depreciation"},
"7900 Aufwandsstellenrechnung": {"account_type": "Expense Account"},
"7770 Aus- und Fortbildung": {"account_type": "Expense Account"},
"7820 Buchwert abgegangener Anlagen, ausgenommen Finanzanlagen": {"account_type": "Expense Account"},
"7600 B\u00fcromaterial und Drucksorten": {"account_type": "Expense Account"},
"7630 Fachliteratur und Zeitungen ": {"account_type": "Expense Account"},
"7960 Herstellungskosten der zur Erzielung der Umsatzerl\u00f6se erbrachten Leistungen": {"account_type": "Expense Account"},
"7780 Mitgliedsbeitr\u00e4ge": {"account_type": "Expense Account"},
"7880 Skontoertr\u00e4ge auf sonstige betriebliche Aufwendungen": {"account_type": "Expense Account"},
"7990 Sonstige betrieblichen Aufwendungen": {"account_type": "Expense Account"},
"7680 Spenden und Trinkgelder": {"account_type": "Expense Account"},
"7790 Spesen des Geldverkehrs": {"account_type": "Expense Account"},
"7830 Verluste aus dem Abgang vom Anlageverm\u00f6gen, ausgenommen Finanzanlagen": {"account_type": "Expense Account"},
"7970 Vertriebskosten": {"account_type": "Expense Account"},
"7980 Verwaltungskosten": {"account_type": "Expense Account"},
"root_type": "Expense"
},
"Klasse 8: Finanz- und ausserordentliche Ertr\u00e4ge und Aufwendungen": {
"8000 Ertr\u00e4ge aus Beteiligungen": {"account_type": "Income Account"},
"8050 Ertr\u00e4ge aus anderen Wertpapieren und Ausleihungen des Finanzanlageverm\u00f6gens": {"account_type": "Income Account"},
"8100 Zinsen aus Bankguthaben": {"account_type": "Income Account"},
"8110 Zinsen aus gewaehrten Darlehen": {"account_type": "Income Account"},
"8130 Verzugszinsenertraege": {"account_type": "Income Account"},
"8220 Aufwendungen aus Beteiligungen": {"account_type": "Expense Account"},
"8260 Aufwendungen aus sonst. Fiananzanlagen und aus Wertpapieren des Umlaufverm\u00f6gens": {},
"8280 Zinsen und \u00e4hnliche Aufwendungem": {"account_type": "Expense Account"},
"8400 Au\u00dferordentliche Ertr\u00e4ge": {"account_type": "Income Account"},
"8450 Au\u00dferordentliche Aufwendungen": {"account_type": "Expense Account"},
"8500 Steuern vom Einkommen und vom Ertrag": {
"account_type": "Tax"
},
"8600 Aufl\u00f6sung unversteuerten R\u00fccklagen": {"account_type": "Income Account"},
"8700 Aufl\u00f6sung von Kapitalr\u00fccklagen": {"account_type": "Income Account"},
"8750 Aufl\u00f6sung von Gewinnr\u00fccklagen": {"account_type": "Income Account"},
"8800 Zuweisung zu unversteuerten R\u00fccklagen": {"account_type": "Expense Account"},
"8900 Zuweisung zu Gewinnr\u00fccklagen": {"account_type": "Expense Account"},
"8100 Buchwert abgegangener Beteiligungen": {"account_type": "Expense Account"},
"8130 Buchwert abgegangener Wertpapiere des Umlaufverm\u00f6gens": {"account_type": "Expense Account"},
"8120 Buchwert abgegangener sonstiger Finanzanlagen": {"account_type": "Expense Account"},
"8990 Gewinnabfuhr bzw. Verlust\u00fcberrechnung aus Ergebnisabf\u00fchrungsvertr\u00e4gen": {"account_type": "Expense Account"},
"8350 nicht ausgenutzte Lieferantenskonti": {"account_type": "Expense Account"},
"root_type": "Income"
},
"Klasse 9 Passiva: Eigenkapital, R\u00fccklagen, stille Einlagen, Abschlusskonten": {
"9000 Gezeichnetes bzw. gewidmetes Kapital": {
"account_type": "Equity"
},
"9200 Kapitalr\u00fccklagen": {
"account_type": "Equity"
},
"9300 Gewinnr\u00fccklagen": {
"account_type": "Equity"
},
"9400 Bewertungsreserven uns sonst. unversteuerte R\u00fccklagen": {
"account_type": "Equity"
},
"9600 Private Entnahmen": {"account_type": "Equity"},
"9610 Privatsteuern": {"account_type": "Equity"},
"9700 Einlagen stiller Gesellschafter ": {"account_type": "Equity"},
"9900 Evidenzkonto": {"account_type": "Equity"},
"9800 Er\u00f6ffnungsbilanzkonto (EBK)": {"account_type": "Equity"},
"9880 Jahresergebnis laut Gewinn- und Verlustrechnung (G+V)": {"account_type": "Equity"},
"9850 Schlussbilanzkonto (SBK)": {"account_type": "Round Off"},
"9190 nicht eingeforderte ausstehende Einlagen und berechtigte Entnahmen von Gesellschaftern": {
"account_type": "Equity"
},
"root_type": "Equity"
}
}
}
}
}

View File

@@ -3,10 +3,6 @@
frappe.ui.form.on('Accounting Dimension Filter', {
refresh: function(frm, cdt, cdn) {
if (frm.doc.accounting_dimension) {
frm.set_df_property('dimensions', 'label', frm.doc.accounting_dimension, cdn, 'dimension_value');
}
let help_content =
`<table class="table table-bordered" style="background-color: var(--scrollbar-track-color);">
<tr><td>
@@ -68,6 +64,7 @@ frappe.ui.form.on('Accounting Dimension Filter', {
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.refresh_field("dimensions");
frm.trigger('setup_filters');
},

View File

@@ -91,7 +91,7 @@
},
{
"default": "0",
"description": "Enabling ensure each Sales Invoice has a unique value in Supplier Invoice No. field",
"description": "Enabling ensure each Purchase Invoice has a unique value in Supplier Invoice No. field",
"fieldname": "check_supplier_invoice_uniqueness",
"fieldtype": "Check",
"label": "Check Supplier Invoice Number Uniqueness"
@@ -354,7 +354,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2022-07-11 13:37:50.605141",
"modified": "2022-11-27 21:49:52.538655",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",

View File

@@ -77,6 +77,6 @@ def get_party_bank_account(party_type, party):
@frappe.whitelist()
def get_bank_account_details(bank_account):
return frappe.db.get_value(
return frappe.get_cached_value(
"Bank Account", bank_account, ["account", "bank", "bank_account_no"], as_dict=1
)

View File

@@ -4,6 +4,23 @@
frappe.ui.form.on("Bank Clearance", {
setup: function(frm) {
frm.add_fetch("account", "account_currency", "account_currency");
frm.set_query("account", function() {
return {
"filters": {
"account_type": ["in",["Bank","Cash"]],
"is_group": 0,
}
};
});
frm.set_query("bank_account", function () {
return {
filters: {
'is_company_account': 1
},
};
});
},
onload: function(frm) {
@@ -12,14 +29,7 @@ frappe.ui.form.on("Bank Clearance", {
locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "";
frm.set_value("account", default_bank_account);
frm.set_query("account", function() {
return {
"filters": {
"account_type": ["in",["Bank","Cash"]],
"is_group": 0
}
};
});
frm.set_value("from_date", frappe.datetime.month_start());
frm.set_value("to_date", frappe.datetime.month_end());
@@ -27,6 +37,14 @@ frappe.ui.form.on("Bank Clearance", {
refresh: function(frm) {
frm.disable_save();
if (frm.doc.account && frm.doc.from_date && frm.doc.to_date) {
frm.add_custom_button(__('Get Payment Entries'), () =>
frm.trigger("get_payment_entries")
);
frm.change_custom_button_type('Get Payment Entries', null, 'primary');
}
},
update_clearance_date: function(frm) {
@@ -36,22 +54,30 @@ frappe.ui.form.on("Bank Clearance", {
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');
}
}
});
},
get_payment_entries: function(frm) {
return frappe.call({
method: "get_payment_entries",
doc: frm.doc,
callback: function(r, rt) {
frm.refresh_field("payment_entries");
frm.refresh_fields();
$(frm.fields_dict.payment_entries.wrapper).find("[data-fieldname=amount]").each(function(i,v){
if (i !=0){
$(v).addClass("text-right")
}
})
if (frm.doc.payment_entries.length) {
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');
}
}
});
}

View File

@@ -1,4 +1,5 @@
{
"actions": [],
"allow_copy": 1,
"creation": "2013-01-10 16:34:05",
"doctype": "DocType",
@@ -13,11 +14,8 @@
"bank_account",
"include_reconciled_entries",
"include_pos_transactions",
"get_payment_entries",
"section_break_10",
"payment_entries",
"update_clearance_date",
"total_amount"
"payment_entries"
],
"fields": [
{
@@ -76,11 +74,6 @@
"fieldtype": "Check",
"label": "Include POS Transactions"
},
{
"fieldname": "get_payment_entries",
"fieldtype": "Button",
"label": "Get Payment Entries"
},
{
"fieldname": "section_break_10",
"fieldtype": "Section Break"
@@ -91,25 +84,14 @@
"fieldtype": "Table",
"label": "Payment Entries",
"options": "Bank Clearance Detail"
},
{
"fieldname": "update_clearance_date",
"fieldtype": "Button",
"label": "Update Clearance Date"
},
{
"fieldname": "total_amount",
"fieldtype": "Currency",
"label": "Total Amount",
"options": "account_currency",
"read_only": 1
}
],
"hide_toolbar": 1,
"icon": "fa fa-check",
"idx": 1,
"issingle": 1,
"modified": "2020-04-06 16:12:06.628008",
"links": [],
"modified": "2022-11-28 17:24:13.008692",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Clearance",
@@ -126,5 +108,6 @@
"quick_entry": 1,
"read_only": 1,
"sort_field": "modified",
"sort_order": "ASC"
"sort_order": "ASC",
"states": []
}

View File

@@ -99,7 +99,7 @@ class BankClearance(Document):
.where(loan_disbursement.clearance_date.isnull())
.where(loan_disbursement.disbursement_account.isin([self.bank_account, self.account]))
.orderby(loan_disbursement.disbursement_date)
.orderby(loan_disbursement.name, frappe.qb.desc)
.orderby(loan_disbursement.name, order=frappe.qb.desc)
).run(as_dict=1)
loan_repayment = frappe.qb.DocType("Loan Repayment")
@@ -126,7 +126,9 @@ class BankClearance(Document):
if frappe.db.has_column("Loan Repayment", "repay_from_salary"):
query = query.where((loan_repayment.repay_from_salary == 0))
query = query.orderby(loan_repayment.posting_date).orderby(loan_repayment.name, frappe.qb.desc)
query = query.orderby(loan_repayment.posting_date).orderby(
loan_repayment.name, order=frappe.qb.desc
)
loan_repayments = query.run(as_dict=True)
@@ -177,7 +179,6 @@ class BankClearance(Document):
)
self.set("payment_entries", [])
self.total_amount = 0.0
default_currency = erpnext.get_default_currency()
for d in entries:
@@ -196,7 +197,6 @@ class BankClearance(Document):
d.pop("debit")
d.pop("account_currency")
row.update(d)
self.total_amount += flt(amount)
@frappe.whitelist()
def update_clearance_date(self):

View File

@@ -43,20 +43,13 @@ frappe.ui.form.on('Bank Guarantee', {
reference_docname: function(frm) {
if (frm.doc.reference_docname && frm.doc.reference_doctype) {
let fields_to_fetch = ["grand_total"];
let party_field = frm.doc.reference_doctype == "Sales Order" ? "customer" : "supplier";
if (frm.doc.reference_doctype == "Sales Order") {
fields_to_fetch.push("project");
}
fields_to_fetch.push(party_field);
frappe.call({
method: "erpnext.accounts.doctype.bank_guarantee.bank_guarantee.get_vouchar_detials",
method: "erpnext.accounts.doctype.bank_guarantee.bank_guarantee.get_voucher_details",
args: {
"column_list": fields_to_fetch,
"doctype": frm.doc.reference_doctype,
"docname": frm.doc.reference_docname
"bank_guarantee_type": frm.doc.bg_type,
"reference_name": frm.doc.reference_docname
},
callback: function(r) {
if (r.message) {

View File

@@ -2,11 +2,8 @@
# For license information, please see license.txt
import json
import frappe
from frappe import _
from frappe.desk.search import sanitize_searchfield
from frappe.model.document import Document
@@ -25,14 +22,18 @@ class BankGuarantee(Document):
@frappe.whitelist()
def get_vouchar_detials(column_list, doctype, docname):
column_list = json.loads(column_list)
for col in column_list:
sanitize_searchfield(col)
return frappe.db.sql(
""" select {columns} from `tab{doctype}` where name=%s""".format(
columns=", ".join(column_list), doctype=doctype
),
docname,
as_dict=1,
)[0]
def get_voucher_details(bank_guarantee_type: str, reference_name: str):
if not isinstance(reference_name, str):
raise TypeError("reference_name must be a string")
fields_to_fetch = ["grand_total"]
if bank_guarantee_type == "Receiving":
doctype = "Sales Order"
fields_to_fetch.append("customer")
fields_to_fetch.append("project")
else:
doctype = "Purchase Order"
fields_to_fetch.append("supplier")
return frappe.db.get_value(doctype, reference_name, fields_to_fetch, as_dict=True)

View File

@@ -12,6 +12,9 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
},
};
});
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) {

View File

@@ -81,8 +81,7 @@
},
{
"fieldname": "no_bank_transactions",
"fieldtype": "HTML",
"options": "<div class=\"text-muted text-center\">No Matching Bank Transactions Found</div>"
"fieldtype": "HTML"
}
],
"hide_toolbar": 1,
@@ -109,4 +108,4 @@
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC"
}
}

View File

@@ -57,7 +57,7 @@ def get_bank_transactions(bank_account, from_date=None, to_date=None):
@frappe.whitelist()
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")
account = frappe.get_cached_value("Bank Account", bank_account, "account")
filters = frappe._dict(
{"account": account, "report_date": till_date, "include_pos_transactions": 1}
)
@@ -130,8 +130,10 @@ def create_journal_entry_bts(
fieldname=["name", "deposit", "withdrawal", "bank_account"],
as_dict=True,
)[0]
company_account = frappe.get_value("Bank Account", bank_transaction.bank_account, "account")
account_type = frappe.db.get_value("Account", second_account, "account_type")
company_account = frappe.get_cached_value(
"Bank Account", bank_transaction.bank_account, "account"
)
account_type = frappe.get_cached_value("Account", second_account, "account_type")
if account_type in ["Receivable", "Payable"]:
if not (party_type and party):
frappe.throw(
@@ -164,7 +166,7 @@ def create_journal_entry_bts(
}
)
company = frappe.get_value("Account", company_account, "company")
company = frappe.get_cached_value("Account", company_account, "company")
journal_entry_dict = {
"voucher_type": entry_type,
@@ -219,8 +221,10 @@ def create_payment_entry_bts(
paid_amount = bank_transaction.unallocated_amount
payment_type = "Receive" if bank_transaction.deposit > 0 else "Pay"
company_account = frappe.get_value("Bank Account", bank_transaction.bank_account, "account")
company = frappe.get_value("Account", company_account, "company")
company_account = frappe.get_cached_value(
"Bank Account", bank_transaction.bank_account, "account"
)
company = frappe.get_cached_value("Account", company_account, "company")
payment_entry_dict = {
"company": company,
"payment_type": payment_type,
@@ -266,7 +270,7 @@ def reconcile_vouchers(bank_transaction_name, vouchers):
# updated clear date of all the vouchers based on the bank transaction
vouchers = json.loads(vouchers)
transaction = frappe.get_doc("Bank Transaction", bank_transaction_name)
company_account = frappe.db.get_value("Bank Account", transaction.bank_account, "account")
company_account = frappe.get_cached_value("Bank Account", transaction.bank_account, "account")
if transaction.unallocated_amount == 0:
frappe.throw(_("This bank transaction is already fully reconciled"))
@@ -290,7 +294,7 @@ def reconcile_vouchers(bank_transaction_name, vouchers):
"The sum total of amounts of all selected vouchers should be less than the unallocated amount of the bank transaction"
)
)
account = frappe.db.get_value("Bank Account", transaction.bank_account, "account")
account = frappe.get_cached_value("Bank Account", transaction.bank_account, "account")
for voucher in vouchers:
gl_entry = frappe.db.get_value(

View File

@@ -100,7 +100,7 @@ frappe.ui.form.on("Bank Statement Import", {
if (frm.doc.status.includes("Success")) {
frm.add_custom_button(
__("Go to {0} List", [frm.doc.reference_doctype]),
__("Go to {0} List", [__(frm.doc.reference_doctype)]),
() => frappe.set_route("List", frm.doc.reference_doctype)
);
}
@@ -141,7 +141,7 @@ frappe.ui.form.on("Bank Statement Import", {
},
show_import_status(frm) {
let import_log = JSON.parse(frm.doc.import_log || "[]");
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
let successful_records = import_log.filter((log) => log.success);
let failed_records = import_log.filter((log) => !log.success);
if (successful_records.length === 0) return;
@@ -309,7 +309,7 @@ frappe.ui.form.on("Bank Statement Import", {
// method: 'frappe.core.doctype.data_import.data_import.get_preview_from_template',
show_import_preview(frm, preview_data) {
let import_log = JSON.parse(frm.doc.import_log || "[]");
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
if (
frm.import_preview &&
@@ -439,7 +439,7 @@ frappe.ui.form.on("Bank Statement Import", {
},
show_import_log(frm) {
let import_log = JSON.parse(frm.doc.import_log || "[]");
let import_log = JSON.parse(frm.doc.statement_import_log || "[]");
let logs = import_log;
frm.toggle_display("import_log", false);
frm.toggle_display("import_log_section", logs.length > 0);

View File

@@ -24,7 +24,7 @@
"section_import_preview",
"import_preview",
"import_log_section",
"import_log",
"statement_import_log",
"show_failed_logs",
"import_log_preview",
"reference_doctype",
@@ -90,12 +90,6 @@
"options": "JSON",
"read_only": 1
},
{
"fieldname": "import_log",
"fieldtype": "Code",
"label": "Import Log",
"options": "JSON"
},
{
"fieldname": "import_log_section",
"fieldtype": "Section Break",
@@ -198,11 +192,17 @@
{
"fieldname": "column_break_4",
"fieldtype": "Column Break"
},
{
"fieldname": "statement_import_log",
"fieldtype": "Code",
"label": "Statement Import Log",
"options": "JSON"
}
],
"hide_toolbar": 1,
"links": [],
"modified": "2021-05-12 14:17:37.777246",
"modified": "2022-09-07 11:11:40.293317",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Statement Import",

View File

@@ -53,15 +53,13 @@ class BankStatementImport(DataImport):
if "Bank Account" not in json.dumps(preview["columns"]):
frappe.throw(_("Please add the Bank Account column"))
from frappe.core.page.background_jobs.background_jobs import get_info
from frappe.utils.background_jobs import is_job_queued
from frappe.utils.scheduler import is_scheduler_inactive
if is_scheduler_inactive() and not frappe.flags.in_test:
frappe.throw(_("Scheduler is inactive. Cannot import data."), title=_("Scheduler Inactive"))
enqueued_jobs = [d.get("job_name") for d in get_info()]
if self.name not in enqueued_jobs:
if not is_job_queued(self.name):
enqueue(
start_import,
queue="default",

View File

@@ -74,7 +74,7 @@ def get_header_mapping(columns, bank_account):
def get_bank_mapping(bank_account):
bank_name = frappe.db.get_value("Bank Account", bank_account, "bank")
bank_name = frappe.get_cached_value("Bank Account", bank_account, "bank")
bank = frappe.get_doc("Bank", bank_name)
mapping = {row.file_field: row.bank_transaction_field for row in bank.bank_transaction_mapping}

View File

@@ -1,6 +1,7 @@
{
"actions": [],
"allow_import": 1,
"autoname": "naming_series:",
"creation": "2016-05-16 11:42:29.632528",
"doctype": "DocType",
"editable_grid": 1,
@@ -9,6 +10,7 @@
"budget_against",
"company",
"cost_center",
"naming_series",
"project",
"fiscal_year",
"column_break_3",
@@ -190,15 +192,26 @@
"label": "Budget Accounts",
"options": "Budget Account",
"reqd": 1
},
{
"fieldname": "naming_series",
"fieldtype": "Data",
"hidden": 1,
"label": "Series",
"no_copy": 1,
"print_hide": 1,
"read_only": 1,
"set_only_once": 1
}
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2020-10-06 15:13:54.055854",
"modified": "2022-10-10 22:14:36.361509",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Budget",
"naming_rule": "By \"Naming Series\" field",
"owner": "Administrator",
"permissions": [
{
@@ -220,5 +233,6 @@
],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -5,7 +5,6 @@
import frappe
from frappe import _
from frappe.model.document import Document
from frappe.model.naming import make_autoname
from frappe.utils import add_months, flt, fmt_money, get_last_day, getdate
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
@@ -23,11 +22,6 @@ class DuplicateBudgetError(frappe.ValidationError):
class Budget(Document):
def autoname(self):
self.name = make_autoname(
self.get(frappe.scrub(self.budget_against)) + "/" + self.fiscal_year + "/.###"
)
def validate(self):
if not self.get(frappe.scrub(self.budget_against)):
frappe.throw(_("{0} is mandatory").format(self.budget_against))
@@ -65,7 +59,7 @@ class Budget(Document):
account_list = []
for d in self.get("accounts"):
if d.account:
account_details = frappe.db.get_value(
account_details = frappe.get_cached_value(
"Account", d.account, ["is_group", "company", "report_type"], as_dict=1
)
@@ -109,8 +103,11 @@ class Budget(Document):
):
self.applicable_on_booking_actual_expenses = 1
def before_naming(self):
self.naming_series = f"{{{frappe.scrub(self.budget_against)}}}./.{self.fiscal_year}/.###"
def validate_expense_against_budget(args):
def validate_expense_against_budget(args, expense_amount=0):
args = frappe._dict(args)
if args.get("company") and not args.fiscal_year:
@@ -178,13 +175,13 @@ def validate_expense_against_budget(args):
) # nosec
if budget_records:
validate_budget_records(args, budget_records)
validate_budget_records(args, budget_records, expense_amount)
def validate_budget_records(args, budget_records):
def validate_budget_records(args, budget_records, expense_amount):
for budget in budget_records:
if flt(budget.budget_amount):
amount = get_amount(args, budget)
amount = expense_amount or get_amount(args, budget)
yearly_action, monthly_action = get_actions(args, budget)
if monthly_action in ["Stop", "Warn"]:
@@ -309,7 +306,7 @@ def get_other_condition(args, budget, for_doc):
if args.get("fiscal_year"):
date_field = "schedule_date" if for_doc == "Material Request" else "transaction_date"
start_date, end_date = frappe.db.get_value(
start_date, end_date = frappe.get_cached_value(
"Fiscal Year", args.get("fiscal_year"), ["year_start_date", "year_end_date"]
)
@@ -382,7 +379,7 @@ def get_accumulated_monthly_budget(monthly_distribution, posting_date, fiscal_ye
):
distribution.setdefault(d.month, d.percentage_allocation)
dt = frappe.db.get_value("Fiscal Year", fiscal_year, "year_start_date")
dt = frappe.get_cached_value("Fiscal Year", fiscal_year, "year_start_date")
accumulated_percentage = 0.0
while dt <= getdate(posting_date):

View File

@@ -334,6 +334,39 @@ class TestBudget(unittest.TestCase):
budget.cancel()
jv.cancel()
def test_monthly_budget_against_main_cost_center(self):
from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
from erpnext.accounts.doctype.cost_center_allocation.test_cost_center_allocation import (
create_cost_center_allocation,
)
cost_centers = [
"Main Budget Cost Center 1",
"Sub Budget Cost Center 1",
"Sub Budget Cost Center 2",
]
for cc in cost_centers:
create_cost_center(cost_center_name=cc, company="_Test Company")
create_cost_center_allocation(
"_Test Company",
"Main Budget Cost Center 1 - _TC",
{"Sub Budget Cost Center 1 - _TC": 60, "Sub Budget Cost Center 2 - _TC": 40},
)
make_budget(budget_against="Cost Center", cost_center="Main Budget Cost Center 1 - _TC")
jv = make_journal_entry(
"_Test Account Cost for Goods Sold - _TC",
"_Test Bank - _TC",
400000,
"Main Budget Cost Center 1 - _TC",
posting_date=nowdate(),
)
self.assertRaises(BudgetError, jv.submit)
def set_total_expense_zero(posting_date, budget_against_field=None, budget_against_CC=None):
if budget_against_field == "project":

View File

@@ -45,14 +45,14 @@ def validate_columns(data):
@frappe.whitelist()
def validate_company(company):
parent_company, allow_account_creation_against_child_company = frappe.db.get_value(
"Company", {"name": company}, ["parent_company", "allow_account_creation_against_child_company"]
parent_company, allow_account_creation_against_child_company = frappe.get_cached_value(
"Company", company, ["parent_company", "allow_account_creation_against_child_company"]
)
if parent_company and (not allow_account_creation_against_child_company):
msg = _("{} is a child company.").format(frappe.bold(company)) + " "
msg += _("Please import accounts against parent company or enable {} in company master.").format(
frappe.bold("Allow Account Creation Against Child Company")
frappe.bold(_("Allow Account Creation Against Child Company"))
)
frappe.throw(msg, title=_("Wrong Company"))

View File

@@ -16,7 +16,7 @@ class CostCenter(NestedSet):
from erpnext.accounts.utils import get_autoname_with_number
self.name = get_autoname_with_number(
self.cost_center_number, self.cost_center_name, None, self.company
self.cost_center_number, self.cost_center_name, self.company
)
def validate(self):

View File

@@ -19,7 +19,7 @@ class Dunning(AccountsController):
self.validate_overdue_days()
self.validate_amount()
if not self.income_account:
self.income_account = frappe.db.get_value("Company", self.company, "default_income_account")
self.income_account = frappe.get_cached_value("Company", self.company, "default_income_account")
def validate_overdue_days(self):
self.overdue_days = (getdate(self.posting_date) - getdate(self.due_date)).days or 0

View File

@@ -1,389 +1,138 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "ACC-ERR-.YYYY.-.#####",
"beta": 0,
"creation": "2018-04-13 18:25:55.943587",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"actions": [],
"allow_import": 1,
"autoname": "ACC-ERR-.YYYY.-.#####",
"creation": "2018-04-13 18:25:55.943587",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"posting_date",
"column_break_2",
"company",
"section_break_4",
"get_entries",
"accounts",
"section_break_6",
"total_gain_loss",
"amended_from"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "Today",
"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": 1,
"in_standard_filter": 0,
"label": "Posting 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
},
"default": "Today",
"fieldname": "posting_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "Posting Date",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_2",
"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_2",
"fieldtype": "Column Break"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 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": "company",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company",
"options": "Company",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "section_break_4",
"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": "section_break_4",
"fieldtype": "Section Break"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "get_entries",
"fieldtype": "Button",
"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": "Get Entries",
"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": "get_entries",
"fieldtype": "Button",
"label": "Get Entries"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "accounts",
"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": "Exchange Rate Revaluation Account",
"length": 0,
"no_copy": 1,
"options": "Exchange Rate Revaluation Account",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
"fieldname": "accounts",
"fieldtype": "Table",
"label": "Exchange Rate Revaluation Account",
"no_copy": 1,
"options": "Exchange Rate Revaluation Account",
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "section_break_6",
"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": "section_break_6",
"fieldtype": "Section Break"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "total_gain_loss",
"fieldtype": "Currency",
"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": "Total Gain/Loss",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"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": "total_gain_loss",
"fieldtype": "Currency",
"label": "Total Gain/Loss",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "amended_from",
"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": "Amended From",
"length": 0,
"no_copy": 1,
"options": "Exchange Rate Revaluation",
"permlevel": 0,
"print_hide": 1,
"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": "amended_from",
"fieldtype": "Link",
"label": "Amended From",
"no_copy": 1,
"options": "Exchange Rate Revaluation",
"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": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 16:15:34.660715",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Exchange Rate Revaluation",
"name_case": "",
"owner": "Administrator",
],
"is_submittable": 1,
"links": [],
"modified": "2022-11-17 10:28:03.911554",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Exchange Rate Revaluation",
"naming_rule": "Expression (old style)",
"owner": "Administrator",
"permissions": [
{
"amend": 1,
"cancel": 1,
"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": 1,
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"submit": 1,
"write": 1
},
},
{
"amend": 1,
"cancel": 1,
"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": 1,
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"share": 1,
"submit": 1,
"write": 1
},
},
{
"amend": 1,
"cancel": 1,
"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": 1,
"amend": 1,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts User",
"share": 1,
"submit": 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,
"track_views": 0
],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -222,7 +222,7 @@ class ExchangeRateRevaluation(Document):
@frappe.whitelist()
def get_account_details(account, company, posting_date, party_type=None, party=None):
account_currency, account_type = frappe.db.get_value(
account_currency, account_type = frappe.get_cached_value(
"Account", account, ["account_currency", "account_type"]
)
if account_type in ["Receivable", "Payable"] and not (party_type and party):
@@ -233,6 +233,10 @@ def get_account_details(account, company, posting_date, party_type=None, party=N
balance = get_balance_on(
account, date=posting_date, party_type=party_type, party=party, in_account_currency=False
)
account_details = {
"account_currency": account_currency,
}
if balance:
balance_in_account_currency = get_balance_on(
account, date=posting_date, party_type=party_type, party=party
@@ -242,13 +246,14 @@ def get_account_details(account, company, posting_date, party_type=None, party=N
)
new_exchange_rate = get_exchange_rate(account_currency, company_currency, posting_date)
new_balance_in_base_currency = balance_in_account_currency * new_exchange_rate
account_details = {
"account_currency": account_currency,
"balance_in_base_currency": balance,
"balance_in_account_currency": balance_in_account_currency,
"current_exchange_rate": current_exchange_rate,
"new_exchange_rate": new_exchange_rate,
"new_balance_in_base_currency": new_balance_in_base_currency,
}
account_details = account_details.update(
{
"balance_in_base_currency": balance,
"balance_in_account_currency": balance_in_account_currency,
"current_exchange_rate": current_exchange_rate,
"new_exchange_rate": new_exchange_rate,
"new_balance_in_base_currency": new_balance_in_base_currency,
}
)
return account_details

View File

@@ -1,475 +1,120 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"actions": [],
"creation": "2018-04-13 18:30:06.110433",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"account",
"party_type",
"party",
"column_break_2",
"account_currency",
"balance_in_account_currency",
"balances",
"current_exchange_rate",
"balance_in_base_currency",
"column_break_9",
"new_exchange_rate",
"new_balance_in_base_currency",
"gain_loss"
],
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "account",
"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": "Account",
"length": 0,
"no_copy": 0,
"options": "Account",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "party_type",
"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": "Party Type",
"length": 0,
"no_copy": 0,
"options": "DocType",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
"options": "DocType"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "party",
"fieldtype": "Dynamic 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": "Party",
"length": 0,
"no_copy": 0,
"options": "party_type",
"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
"options": "party_type"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "column_break_2",
"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
"fieldtype": "Column Break"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "account_currency",
"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": "Account Currency",
"length": 0,
"no_copy": 0,
"options": "Currency",
"permlevel": 0,
"precision": "",
"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
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "balance_in_account_currency",
"fieldtype": "Currency",
"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": "Balance In Account Currency",
"length": 0,
"no_copy": 0,
"options": "account_currency",
"permlevel": 0,
"precision": "",
"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
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "balances",
"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,
"label": "",
"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
"fieldtype": "Section Break"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "current_exchange_rate",
"fieldtype": "Float",
"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": "Current Exchange Rate",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"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
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "balance_in_base_currency",
"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": "Balance In Base Currency",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"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
"options": "Company:company:default_currency",
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "column_break_9",
"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
"fieldtype": "Column Break"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "new_exchange_rate",
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "New Exchange Rate",
"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
"reqd": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "new_balance_in_base_currency",
"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": "New Balance In Base Currency",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"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
"options": "Company:company:default_currency",
"read_only": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "gain_loss",
"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": "Gain/Loss",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"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
"options": "Company:company:default_currency",
"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": "2019-06-26 18:57:51.762345",
"links": [],
"modified": "2022-11-17 10:26:18.302728",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Exchange Rate Revaluation Account",
"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
"states": [],
"track_changes": 1
}

View File

@@ -9,10 +9,6 @@ from frappe.model.document import Document
from frappe.utils import add_days, add_years, cstr, getdate
class FiscalYearIncorrectDate(frappe.ValidationError):
pass
class FiscalYear(Document):
@frappe.whitelist()
def set_as_default(self):
@@ -53,23 +49,18 @@ class FiscalYear(Document):
)
def validate_dates(self):
self.validate_from_to_dates("year_start_date", "year_end_date")
if self.is_short_year:
# Fiscal Year can be shorter than one year, in some jurisdictions
# under certain circumstances. For example, in the USA and Germany.
return
if getdate(self.year_start_date) > getdate(self.year_end_date):
frappe.throw(
_("Fiscal Year Start Date should be one year earlier than Fiscal Year End Date"),
FiscalYearIncorrectDate,
)
date = getdate(self.year_start_date) + relativedelta(years=1) - relativedelta(days=1)
if getdate(self.year_end_date) != date:
frappe.throw(
_("Fiscal Year End Date should be one year after Fiscal Year Start Date"),
FiscalYearIncorrectDate,
frappe.exceptions.InvalidDates,
)
def on_update(self):
@@ -169,5 +160,6 @@ def auto_create_fiscal_year():
def get_from_and_to_date(fiscal_year):
fields = ["year_start_date as from_date", "year_end_date as to_date"]
return frappe.db.get_value("Fiscal Year", fiscal_year, fields, as_dict=1)
fields = ["year_start_date", "year_end_date"]
cached_results = frappe.get_cached_value("Fiscal Year", fiscal_year, fields, as_dict=1)
return dict(from_date=cached_results.year_start_date, to_date=cached_results.year_end_date)

View File

@@ -7,8 +7,6 @@ import unittest
import frappe
from frappe.utils import now_datetime
from erpnext.accounts.doctype.fiscal_year.fiscal_year import FiscalYearIncorrectDate
test_ignore = ["Company"]
@@ -26,7 +24,7 @@ class TestFiscalYear(unittest.TestCase):
}
)
self.assertRaises(FiscalYearIncorrectDate, fy.insert)
self.assertRaises(frappe.exceptions.InvalidDates, fy.insert)
def test_record_generator():
@@ -35,8 +33,8 @@ def test_record_generator():
"doctype": "Fiscal Year",
"year": "_Test Short Fiscal Year 2011",
"is_short_year": 1,
"year_end_date": "2011-04-01",
"year_start_date": "2011-12-31",
"year_start_date": "2011-04-01",
"year_end_date": "2011-12-31",
}
]

View File

@@ -58,7 +58,7 @@ class GLEntry(Document):
validate_balance_type(self.account, adv_adj)
validate_frozen_account(self.account, adv_adj)
if frappe.db.get_value("Account", self.account, "account_type") not in [
if frappe.get_cached_value("Account", self.account, "account_type") not in [
"Receivable",
"Payable",
]:
@@ -120,7 +120,7 @@ class GLEntry(Document):
frappe.throw(msg, title=_("Missing Cost Center"))
def validate_dimensions_for_pl_and_bs(self):
account_type = frappe.db.get_value("Account", self.account, "report_type")
account_type = frappe.get_cached_value("Account", self.account, "report_type")
for dimension in get_checks_for_pl_and_bs_accounts():
if (
@@ -188,7 +188,7 @@ class GLEntry(Document):
def check_pl_account(self):
if (
self.is_opening == "Yes"
and frappe.db.get_value("Account", self.account, "report_type") == "Profit and Loss"
and frappe.get_cached_value("Account", self.account, "report_type") == "Profit and Loss"
and not self.is_cancelled
):
frappe.throw(
@@ -281,7 +281,7 @@ class GLEntry(Document):
def validate_balance_type(account, adv_adj=False):
if not adv_adj and account:
balance_must_be = frappe.db.get_value("Account", account, "balance_must_be")
balance_must_be = frappe.get_cached_value("Account", account, "balance_must_be")
if balance_must_be:
balance = frappe.db.sql(
"""select sum(debit) - sum(credit)
@@ -366,7 +366,7 @@ def update_outstanding_amt(
if against_voucher_type in ["Sales Invoice", "Purchase Invoice", "Fees"]:
ref_doc = frappe.get_doc(against_voucher_type, against_voucher)
# Didn't use db_set for optimisation purpose
# Didn't use db_set for optimization purpose
ref_doc.outstanding_amount = bal
frappe.db.set_value(against_voucher_type, against_voucher, "outstanding_amount", bal)

View File

@@ -21,7 +21,7 @@ class ItemTaxTemplate(Document):
check_list = []
for d in self.get("taxes"):
if d.tax_type:
account_type = frappe.db.get_value("Account", d.tax_type, "account_type")
account_type = frappe.get_cached_value("Account", d.tax_type, "account_type")
if account_type not in [
"Tax",

View File

@@ -173,8 +173,8 @@ frappe.ui.form.on("Journal Entry", {
var update_jv_details = function(doc, r) {
$.each(r, function(i, d) {
var row = frappe.model.add_child(doc, "Journal Entry Account", "accounts");
row.account = d.account;
row.balance = d.balance;
frappe.model.set_value(row.doctype, row.name, "account", d.account)
frappe.model.set_value(row.doctype, row.name, "balance", d.balance)
});
refresh_field("accounts");
}
@@ -253,9 +253,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
var party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
out.filters.push([jvd.reference_type, party_account_field, "=", jvd.account]);
if (in_list(['Debit Note', 'Credit Note'], doc.voucher_type)) {
out.filters.push([jvd.reference_type, "is_return", "=", 1]);
}
}
if(in_list(["Sales Order", "Purchase Order"], jvd.reference_type)) {
@@ -312,8 +309,7 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
}
}
get_outstanding(doctype, docname, company, child, due_date) {
var me = this;
get_outstanding(doctype, docname, company, child) {
var args = {
"doctype": doctype,
"docname": docname,

View File

@@ -184,7 +184,9 @@ class JournalEntry(AccountsController):
}
)
tax_withholding_details = get_party_tax_withholding_details(inv, self.tax_withholding_category)
tax_withholding_details, advance_taxes, voucher_wise_amount = get_party_tax_withholding_details(
inv, self.tax_withholding_category
)
if not tax_withholding_details:
return
@@ -317,7 +319,7 @@ class JournalEntry(AccountsController):
def validate_party(self):
for d in self.get("accounts"):
account_type = frappe.db.get_value("Account", d.account, "account_type")
account_type = frappe.get_cached_value("Account", d.account, "account_type")
if account_type in ["Receivable", "Payable"]:
if not (d.party_type and d.party):
frappe.throw(
@@ -380,7 +382,7 @@ class JournalEntry(AccountsController):
def validate_against_jv(self):
for d in self.get("accounts"):
if d.reference_type == "Journal Entry":
account_root_type = frappe.db.get_value("Account", d.account, "root_type")
account_root_type = frappe.get_cached_value("Account", d.account, "root_type")
if account_root_type == "Asset" and flt(d.debit) > 0:
frappe.throw(
_(
@@ -629,7 +631,7 @@ class JournalEntry(AccountsController):
def validate_multi_currency(self):
alternate_currency = []
for d in self.get("accounts"):
account = frappe.db.get_value(
account = frappe.get_cached_value(
"Account", d.account, ["account_currency", "account_type"], as_dict=1
)
if account:
@@ -760,7 +762,7 @@ class JournalEntry(AccountsController):
party_amount += d.debit_in_account_currency or d.credit_in_account_currency
party_account_currency = d.account_currency
elif frappe.db.get_value("Account", d.account, "account_type") in ["Bank", "Cash"]:
elif frappe.get_cached_value("Account", d.account, "account_type") in ["Bank", "Cash"]:
bank_amount += d.debit_in_account_currency or d.credit_in_account_currency
bank_account_currency = d.account_currency
@@ -985,7 +987,7 @@ def get_default_bank_cash_account(company, account_type=None, mode_of_payment=No
account = account_list[0].name
if account:
account_details = frappe.db.get_value(
account_details = frappe.get_cached_value(
"Account", account, ["account_currency", "account_type"], as_dict=1
)
@@ -1114,7 +1116,7 @@ def get_payment_entry(ref_doc, args):
"party_type": args.get("party_type"),
"party": ref_doc.get(args.get("party_type").lower()),
"cost_center": cost_center,
"account_type": frappe.db.get_value("Account", args.get("party_account"), "account_type"),
"account_type": frappe.get_cached_value("Account", args.get("party_account"), "account_type"),
"account_currency": args.get("party_account_currency")
or get_account_currency(args.get("party_account")),
"balance": get_balance_on(args.get("party_account")),
@@ -1208,6 +1210,7 @@ def get_outstanding(args):
args = json.loads(args)
company_currency = erpnext.get_company_currency(args.get("company"))
due_date = None
if args.get("doctype") == "Journal Entry":
condition = " and party=%(party)s" if args.get("party") else ""
@@ -1232,10 +1235,12 @@ def get_outstanding(args):
invoice = frappe.db.get_value(
args["doctype"],
args["docname"],
["outstanding_amount", "conversion_rate", scrub(party_type)],
["outstanding_amount", "conversion_rate", scrub(party_type), "due_date"],
as_dict=1,
)
due_date = invoice.get("due_date")
exchange_rate = (
invoice.conversion_rate if (args.get("account_currency") != company_currency) else 1
)
@@ -1258,6 +1263,7 @@ def get_outstanding(args):
"exchange_rate": exchange_rate,
"party_type": party_type,
"party": invoice.get(scrub(party_type)),
"reference_due_date": due_date,
}
@@ -1277,7 +1283,7 @@ def get_party_account_and_balance(company, party_type, party, cost_center=None):
"account": account,
"balance": account_balance,
"party_balance": party_balance,
"account_currency": frappe.db.get_value("Account", account, "account_currency"),
"account_currency": frappe.get_cached_value("Account", account, "account_currency"),
}
@@ -1290,7 +1296,7 @@ def get_account_balance_and_party_type(
frappe.msgprint(_("No Permission"), raise_exception=1)
company_currency = erpnext.get_company_currency(company)
account_details = frappe.db.get_value(
account_details = frappe.get_cached_value(
"Account", account, ["account_type", "account_currency"], as_dict=1
)
@@ -1343,7 +1349,7 @@ def get_exchange_rate(
):
from erpnext.setup.utils import get_exchange_rate
account_details = frappe.db.get_value(
account_details = frappe.get_cached_value(
"Account", account, ["account_type", "root_type", "account_currency", "company"], as_dict=1
)

View File

@@ -202,6 +202,7 @@
"fieldname": "reference_type",
"fieldtype": "Select",
"label": "Reference Type",
"no_copy": 1,
"options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nLoan\nPayroll Entry\nEmployee Advance\nExchange Rate Revaluation\nInvoice Discounting\nFees\nFull and Final Statement"
},
{
@@ -209,13 +210,15 @@
"fieldtype": "Dynamic Link",
"in_list_view": 1,
"label": "Reference Name",
"no_copy": 1,
"options": "reference_type"
},
{
"depends_on": "eval:doc.reference_type&&!in_list(doc.reference_type, ['Expense Claim', 'Asset', 'Employee Loan', 'Employee Advance'])",
"fieldname": "reference_due_date",
"fieldtype": "Select",
"label": "Reference Due Date"
"fieldtype": "Date",
"label": "Reference Due Date",
"no_copy": 1
},
{
"fieldname": "project",
@@ -274,19 +277,22 @@
"fieldname": "reference_detail_no",
"fieldtype": "Data",
"hidden": 1,
"label": "Reference Detail No"
"label": "Reference Detail No",
"no_copy": 1
}
],
"idx": 1,
"istable": 1,
"links": [],
"modified": "2021-08-30 21:27:32.200299",
"modified": "2022-10-26 20:03:10.906259",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry Account",
"naming_rule": "Random",
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -2,7 +2,7 @@
// For license information, please see license.txt
frappe.ui.form.on("Journal Entry Template", {
setup: function(frm) {
refresh: function(frm) {
frappe.model.set_default_values(frm.doc);
frm.set_query("account" ,"accounts", function(){
@@ -45,21 +45,6 @@ frappe.ui.form.on("Journal Entry Template", {
frm.trigger("clear_child");
switch(frm.doc.voucher_type){
case "Opening Entry":
frm.set_value("is_opening", "Yes");
frappe.call({
type:"GET",
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_opening_accounts",
args: {
"company": frm.doc.company
},
callback: function(r) {
if(r.message) {
add_accounts(frm.doc, r.message);
}
}
});
break;
case "Bank Entry":
case "Cash Entry":
frappe.call({

View File

@@ -4,22 +4,20 @@
import frappe
from frappe import _
from frappe.model.document import Document
from frappe.utils.background_jobs import is_job_queued
from erpnext.accounts.doctype.account.account import merge_account
class LedgerMerge(Document):
def start_merge(self):
from frappe.core.page.background_jobs.background_jobs import get_info
from frappe.utils.background_jobs import enqueue
from frappe.utils.scheduler import is_scheduler_inactive
if is_scheduler_inactive() and not frappe.flags.in_test:
frappe.throw(_("Scheduler is inactive. Cannot merge accounts."), title=_("Scheduler Inactive"))
enqueued_jobs = [d.get("job_name") for d in get_info()]
if self.name not in enqueued_jobs:
if not is_job_queued(self.name):
enqueue(
start_merge,
queue="default",

View File

@@ -25,7 +25,7 @@ class ModeofPayment(Document):
def validate_accounts(self):
for entry in self.accounts:
"""Error when Company of Ledger account doesn't match with Company Selected"""
if frappe.db.get_value("Account", entry.default_account, "company") != entry.company:
if frappe.get_cached_value("Account", entry.default_account, "company") != entry.company:
frappe.throw(
_("Account {0} does not match with Company {1} in Mode of Account: {2}").format(
entry.default_account, entry.company, self.name

View File

@@ -20,15 +20,14 @@ frappe.ui.form.on('Opening Invoice Creation Tool', {
frm.dashboard.reset();
frm.doc.import_in_progress = true;
}
if (data.user != frappe.session.user) return;
if (data.count == data.total) {
setTimeout((title) => {
setTimeout(() => {
frm.doc.import_in_progress = false;
frm.clear_table("invoices");
frm.refresh_fields();
frm.page.clear_indicator();
frm.dashboard.hide_progress(title);
frappe.msgprint(__("Opening {0} Invoice created", [frm.doc.invoice_type]));
frm.dashboard.hide_progress();
frappe.msgprint(__("Opening {0} Invoices created", [frm.doc.invoice_type]));
}, 1500, data.title);
return;
}
@@ -51,13 +50,6 @@ frappe.ui.form.on('Opening Invoice Creation Tool', {
method: "make_invoices",
freeze: 1,
freeze_message: __("Creating {0} Invoice", [frm.doc.invoice_type]),
callback: function(r) {
if (r.message.length == 1) {
frappe.msgprint(__("{0} Invoice created successfully.", [frm.doc.invoice_type]));
} else if (r.message.length < 50) {
frappe.msgprint(__("{0} Invoices created successfully.", [frm.doc.invoice_type]));
}
}
});
});

View File

@@ -6,7 +6,7 @@ import frappe
from frappe import _, scrub
from frappe.model.document import Document
from frappe.utils import flt, nowdate
from frappe.utils.background_jobs import enqueue
from frappe.utils.background_jobs import enqueue, is_job_queued
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_accounting_dimensions,
@@ -207,14 +207,12 @@ class OpeningInvoiceCreationTool(Document):
if len(invoices) < 50:
return start_import(invoices)
else:
from frappe.core.page.background_jobs.background_jobs import get_info
from frappe.utils.scheduler import is_scheduler_inactive
if is_scheduler_inactive() and not frappe.flags.in_test:
frappe.throw(_("Scheduler is inactive. Cannot import data."), title=_("Scheduler Inactive"))
enqueued_jobs = [d.get("job_name") for d in get_info()]
if self.name not in enqueued_jobs:
if not is_job_queued(self.name):
enqueue(
start_import,
queue="default",
@@ -257,17 +255,15 @@ def start_import(invoices):
def publish(index, total, doctype):
if total < 50:
return
frappe.publish_realtime(
"opening_invoice_creation_progress",
dict(
title=_("Opening Invoice Creation In Progress"),
message=_("Creating {} out of {} {}").format(index + 1, total, doctype),
user=frappe.session.user,
count=index + 1,
total=total,
),
user=frappe.session.user,
)

View File

@@ -1091,7 +1091,7 @@ frappe.ui.form.on('Payment Entry', {
$.each(tax_fields, function(i, fieldname) { tax[fieldname] = 0.0; });
frm.doc.paid_amount_after_tax = frm.doc.paid_amount;
frm.doc.paid_amount_after_tax = frm.doc.base_paid_amount;
});
},
@@ -1182,7 +1182,7 @@ frappe.ui.form.on('Payment Entry', {
}
cumulated_tax_fraction += tax.tax_fraction_for_current_item;
frm.doc.paid_amount_after_tax = flt(frm.doc.paid_amount/(1+cumulated_tax_fraction))
frm.doc.paid_amount_after_tax = flt(frm.doc.base_paid_amount/(1+cumulated_tax_fraction))
});
},
@@ -1214,6 +1214,7 @@ frappe.ui.form.on('Payment Entry', {
frm.doc.total_taxes_and_charges = 0.0;
frm.doc.base_total_taxes_and_charges = 0.0;
let company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
let actual_tax_dict = {};
// maintain actual tax rate based on idx
@@ -1234,8 +1235,8 @@ frappe.ui.form.on('Payment Entry', {
}
}
tax.tax_amount = current_tax_amount;
tax.base_tax_amount = tax.tax_amount * frm.doc.source_exchange_rate;
// tax accounts are only in company currency
tax.base_tax_amount = current_tax_amount;
current_tax_amount *= (tax.add_deduct_tax == "Deduct") ? -1.0 : 1.0;
if(i==0) {
@@ -1244,9 +1245,29 @@ frappe.ui.form.on('Payment Entry', {
tax.total = flt(frm.doc["taxes"][i-1].total + current_tax_amount, precision("total", tax));
}
tax.base_total = tax.total * frm.doc.source_exchange_rate;
frm.doc.total_taxes_and_charges += current_tax_amount;
frm.doc.base_total_taxes_and_charges += current_tax_amount * frm.doc.source_exchange_rate;
// tac accounts are only in company currency
tax.base_total = tax.total
// calculate total taxes and base total taxes
if(frm.doc.payment_type == "Pay") {
// tax accounts only have company currency
if(tax.currency != frm.doc.paid_to_account_currency) {
//total_taxes_and_charges has the target currency. so using target conversion rate
frm.doc.total_taxes_and_charges += flt(current_tax_amount / frm.doc.target_exchange_rate);
} else {
frm.doc.total_taxes_and_charges += current_tax_amount;
}
} else if(frm.doc.payment_type == "Receive") {
if(tax.currency != frm.doc.paid_from_account_currency) {
//total_taxes_and_charges has the target currency. so using source conversion rate
frm.doc.total_taxes_and_charges += flt(current_tax_amount / frm.doc.source_exchange_rate);
} else {
frm.doc.total_taxes_and_charges += current_tax_amount;
}
}
frm.doc.base_total_taxes_and_charges += tax.base_tax_amount;
frm.refresh_field('taxes');
frm.refresh_field('total_taxes_and_charges');

View File

@@ -62,7 +62,6 @@ class PaymentEntry(AccountsController):
self.set_missing_values()
self.validate_payment_type()
self.validate_party_details()
self.validate_bank_accounts()
self.set_exchange_rate()
self.validate_mandatory()
self.validate_reference_documents()
@@ -181,7 +180,11 @@ class PaymentEntry(AccountsController):
frappe.throw(_("Party is mandatory"))
_party_name = "title" if self.party_type == "Shareholder" else self.party_type.lower() + "_name"
self.party_name = frappe.db.get_value(self.party_type, self.party, _party_name)
if frappe.db.has_column(self.party_type, _party_name):
self.party_name = frappe.db.get_value(self.party_type, self.party, _party_name)
else:
self.party_name = frappe.db.get_value(self.party_type, self.party, "name")
if self.party:
if not self.party_balance:
@@ -239,23 +242,6 @@ class PaymentEntry(AccountsController):
if not frappe.db.exists(self.party_type, self.party):
frappe.throw(_("Invalid {0}: {1}").format(self.party_type, self.party))
if self.party_account and self.party_type in ("Customer", "Supplier"):
self.validate_account_type(
self.party_account, [erpnext.get_party_account_type(self.party_type)]
)
def validate_bank_accounts(self):
if self.payment_type in ("Pay", "Internal Transfer"):
self.validate_account_type(self.paid_from, ["Bank", "Cash"])
if self.payment_type in ("Receive", "Internal Transfer"):
self.validate_account_type(self.paid_to, ["Bank", "Cash"])
def validate_account_type(self, account, account_types):
account_type = frappe.db.get_value("Account", account, "account_type")
# if account_type not in account_types:
# frappe.throw(_("Account Type for {0} must be {1}").format(account, comma_or(account_types)))
def set_exchange_rate(self, ref_doc=None):
self.set_source_exchange_rate(ref_doc)
self.set_target_exchange_rate(ref_doc)
@@ -295,6 +281,9 @@ class PaymentEntry(AccountsController):
def validate_reference_documents(self):
valid_reference_doctypes = self.get_valid_reference_doctypes()
if not valid_reference_doctypes:
return
for d in self.get("references"):
if not d.allocated_amount:
continue
@@ -362,7 +351,7 @@ class PaymentEntry(AccountsController):
if not d.allocated_amount:
continue
if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Fees"):
if d.reference_doctype in ("Sales Invoice", "Purchase Invoice"):
outstanding_amount, is_return = frappe.get_cached_value(
d.reference_doctype, d.reference_name, ["outstanding_amount", "is_return"]
)
@@ -736,7 +725,7 @@ class PaymentEntry(AccountsController):
def validate_transaction_reference(self):
bank_account = self.paid_to if self.payment_type == "Receive" else self.paid_from
bank_account_type = frappe.db.get_value("Account", bank_account, "account_type")
bank_account_type = frappe.get_cached_value("Account", bank_account, "account_type")
if bank_account_type == "Bank":
if not self.reference_no or not self.reference_date:
@@ -933,6 +922,13 @@ class PaymentEntry(AccountsController):
)
if not d.included_in_paid_amount:
if get_account_currency(payment_account) != self.company_currency:
if self.payment_type == "Receive":
exchange_rate = self.target_exchange_rate
elif self.payment_type in ["Pay", "Internal Transfer"]:
exchange_rate = self.source_exchange_rate
base_tax_amount = flt((tax_amount / exchange_rate), self.precision("paid_amount"))
gl_entries.append(
self.get_gl_dict(
{
@@ -981,7 +977,9 @@ class PaymentEntry(AccountsController):
if self.payment_type in ("Receive", "Pay") and self.party:
for d in self.get("references"):
if d.allocated_amount and d.reference_doctype in frappe.get_hooks("advance_payment_doctypes"):
frappe.get_doc(d.reference_doctype, d.reference_name).set_total_advance_paid()
frappe.get_doc(
d.reference_doctype, d.reference_name, for_update=True
).set_total_advance_paid()
def on_recurring(self, reference_doc, auto_repeat_doc):
self.reference_no = reference_doc.name
@@ -1026,7 +1024,7 @@ class PaymentEntry(AccountsController):
for fieldname in tax_fields:
tax.set(fieldname, 0.0)
self.paid_amount_after_tax = self.paid_amount
self.paid_amount_after_tax = self.base_paid_amount
def determine_exclusive_rate(self):
if not any(cint(tax.included_in_paid_amount) for tax in self.get("taxes")):
@@ -1045,7 +1043,7 @@ class PaymentEntry(AccountsController):
cumulated_tax_fraction += tax.tax_fraction_for_current_item
self.paid_amount_after_tax = flt(self.paid_amount / (1 + cumulated_tax_fraction))
self.paid_amount_after_tax = flt(self.base_paid_amount / (1 + cumulated_tax_fraction))
def calculate_taxes(self):
self.total_taxes_and_charges = 0.0
@@ -1068,7 +1066,7 @@ class PaymentEntry(AccountsController):
current_tax_amount += actual_tax_dict[tax.idx]
tax.tax_amount = current_tax_amount
tax.base_tax_amount = tax.tax_amount * self.source_exchange_rate
tax.base_tax_amount = current_tax_amount
if tax.add_deduct_tax == "Deduct":
current_tax_amount *= -1.0
@@ -1082,14 +1080,20 @@ class PaymentEntry(AccountsController):
self.get("taxes")[i - 1].total + current_tax_amount, self.precision("total", tax)
)
tax.base_total = tax.total * self.source_exchange_rate
tax.base_total = tax.total
if self.payment_type == "Pay":
self.base_total_taxes_and_charges += flt(current_tax_amount / self.source_exchange_rate)
self.total_taxes_and_charges += flt(current_tax_amount / self.target_exchange_rate)
else:
self.base_total_taxes_and_charges += flt(current_tax_amount / self.target_exchange_rate)
self.total_taxes_and_charges += flt(current_tax_amount / self.source_exchange_rate)
if tax.currency != self.paid_to_account_currency:
self.total_taxes_and_charges += flt(current_tax_amount / self.target_exchange_rate)
else:
self.total_taxes_and_charges += current_tax_amount
elif self.payment_type == "Receive":
if tax.currency != self.paid_from_account_currency:
self.total_taxes_and_charges += flt(current_tax_amount / self.source_exchange_rate)
else:
self.total_taxes_and_charges += current_tax_amount
self.base_total_taxes_and_charges += tax.base_tax_amount
if self.get("taxes"):
self.paid_amount_after_tax = self.get("taxes")[-1].base_total
@@ -1184,6 +1188,7 @@ def get_outstanding_reference_documents(args):
ple = qb.DocType("Payment Ledger Entry")
common_filter = []
posting_and_due_date = []
# confirm that Supplier is not blocked
if args.get("party_type") == "Supplier":
@@ -1200,7 +1205,7 @@ def get_outstanding_reference_documents(args):
party_account_currency = get_account_currency(args.get("party_account"))
company_currency = frappe.get_cached_value("Company", args.get("company"), "default_currency")
# Get positive outstanding sales /purchase invoices/ Fees
# Get positive outstanding sales /purchase invoices
condition = ""
if args.get("voucher_type") and args.get("voucher_no"):
condition = " and voucher_type={0} and voucher_no={1}".format(
@@ -1224,7 +1229,7 @@ def get_outstanding_reference_documents(args):
condition += " and {0} between '{1}' and '{2}'".format(
fieldname, args.get(date_fields[0]), args.get(date_fields[1])
)
common_filter.append(ple[fieldname][args.get(date_fields[0]) : args.get(date_fields[1])])
posting_and_due_date.append(ple[fieldname][args.get(date_fields[0]) : args.get(date_fields[1])])
if args.get("company"):
condition += " and company = {0}".format(frappe.db.escape(args.get("company")))
@@ -1235,6 +1240,7 @@ def get_outstanding_reference_documents(args):
args.get("party"),
args.get("party_account"),
common_filter=common_filter,
posting_date=posting_and_due_date,
min_outstanding=args.get("outstanding_amt_greater_than"),
max_outstanding=args.get("outstanding_amt_less_than"),
)
@@ -1297,7 +1303,7 @@ def split_invoices_based_on_payment_terms(outstanding_invoices):
d.voucher_type, d.voucher_no, "payment_terms_template"
)
if payment_term_template:
allocate_payment_based_on_payment_terms = frappe.db.get_value(
allocate_payment_based_on_payment_terms = frappe.get_cached_value(
"Payment Terms Template", payment_term_template, "allocate_payment_based_on_payment_terms"
)
if allocate_payment_based_on_payment_terms:
@@ -1529,7 +1535,7 @@ def get_account_details(account, date, cost_center=None):
{
"account_currency": get_account_currency(account),
"account_balance": account_balance,
"account_type": frappe.db.get_value("Account", account, "account_type"),
"account_type": frappe.get_cached_value("Account", account, "account_type"),
}
)
@@ -1595,10 +1601,11 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre
elif reference_doctype != "Journal Entry":
if not total_amount:
if party_account_currency == company_currency:
total_amount = ref_doc.base_grand_total
# for handling cases that don't have multi-currency (base field)
total_amount = ref_doc.get("grand_total") or ref_doc.get("base_grand_total")
exchange_rate = 1
else:
total_amount = ref_doc.grand_total
total_amount = ref_doc.get("grand_total")
if not exchange_rate:
# Get the exchange rate from the original ref doc
# or get it based on the posting date of the ref doc.
@@ -1609,7 +1616,7 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre
if reference_doctype in ("Sales Invoice", "Purchase Invoice"):
outstanding_amount = ref_doc.get("outstanding_amount")
else:
outstanding_amount = flt(total_amount) - flt(ref_doc.advance_paid)
outstanding_amount = flt(total_amount) - flt(ref_doc.get("advance_paid"))
else:
# Get the exchange rate based on the posting date of the ref doc.
@@ -1627,16 +1634,23 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre
@frappe.whitelist()
def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=None):
def get_payment_entry(
dt, dn, party_amount=None, bank_account=None, bank_amount=None, party_type=None, payment_type=None
):
reference_doc = None
doc = frappe.get_doc(dt, dn)
if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) > 0:
frappe.throw(_("Can only make payment against unbilled {0}").format(dt))
party_type = set_party_type(dt)
if not party_type:
party_type = set_party_type(dt)
party_account = set_party_account(dt, dn, doc, party_type)
party_account_currency = set_party_account_currency(dt, party_account, doc)
payment_type = set_payment_type(dt, doc)
if not payment_type:
payment_type = set_payment_type(dt, doc)
grand_total, outstanding_amount = set_grand_total_and_outstanding_amount(
party_amount, dt, party_account_currency, doc
)
@@ -1690,9 +1704,9 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
if doc.doctype == "Purchase Invoice" and doc.invoice_is_blocked():
frappe.msgprint(_("{0} is on hold till {1}").format(doc.name, doc.release_date))
else:
if doc.doctype in ("Sales Invoice", "Purchase Invoice") and frappe.get_value(
if doc.doctype in ("Sales Invoice", "Purchase Invoice") and frappe.get_cached_value(
"Payment Terms Template",
{"name": doc.payment_terms_template},
doc.payment_terms_template,
"allocate_payment_based_on_payment_terms",
):
@@ -1786,8 +1800,6 @@ def set_party_account(dt, dn, doc, party_type):
party_account = get_party_account_based_on_invoice_discounting(dn) or doc.debit_to
elif dt == "Purchase Invoice":
party_account = doc.credit_to
elif dt == "Fees":
party_account = doc.receivable_account
else:
party_account = get_party_account(party_type, doc.get(party_type.lower()), doc.company)
return party_account
@@ -1803,8 +1815,7 @@ def set_party_account_currency(dt, party_account, doc):
def set_payment_type(dt, doc):
if (
dt == "Sales Order"
or (dt in ("Sales Invoice", "Fees", "Dunning") and doc.outstanding_amount > 0)
dt == "Sales Order" or (dt in ("Sales Invoice", "Dunning") and doc.outstanding_amount > 0)
) or (dt == "Purchase Invoice" and doc.outstanding_amount < 0):
payment_type = "Receive"
else:
@@ -1822,18 +1833,15 @@ def set_grand_total_and_outstanding_amount(party_amount, dt, party_account_curre
else:
grand_total = doc.rounded_total or doc.grand_total
outstanding_amount = doc.outstanding_amount
elif dt == "Fees":
grand_total = doc.grand_total
outstanding_amount = doc.outstanding_amount
elif dt == "Dunning":
grand_total = doc.grand_total
outstanding_amount = doc.grand_total
else:
if party_account_currency == doc.company_currency:
grand_total = flt(doc.get("base_rounded_total") or doc.base_grand_total)
grand_total = flt(doc.get("base_rounded_total") or doc.get("base_grand_total"))
else:
grand_total = flt(doc.get("rounded_total") or doc.grand_total)
outstanding_amount = grand_total - flt(doc.advance_paid)
grand_total = flt(doc.get("rounded_total") or doc.get("grand_total"))
outstanding_amount = doc.get("outstanding_amount") or (grand_total - flt(doc.advance_paid))
return grand_total, outstanding_amount

View File

@@ -4,6 +4,7 @@
import unittest
import frappe
from frappe import qb
from frappe.tests.utils import FrappeTestCase
from frappe.utils import flt, nowdate
@@ -722,6 +723,46 @@ class TestPaymentEntry(FrappeTestCase):
flt(payment_entry.total_taxes_and_charges, 2), flt(10 / payment_entry.target_exchange_rate, 2)
)
def test_gl_of_multi_currency_payment_with_taxes(self):
payment_entry = create_payment_entry(
party="_Test Supplier USD", paid_to="_Test Payable USD - _TC", save=True
)
payment_entry.append(
"taxes",
{
"account_head": "_Test Account Service Tax - _TC",
"charge_type": "Actual",
"tax_amount": 100,
"add_deduct_tax": "Add",
"description": "Test",
},
)
payment_entry.target_exchange_rate = 80
payment_entry.received_amount = 12.5
payment_entry = payment_entry.submit()
gle = qb.DocType("GL Entry")
gl_entries = (
qb.from_(gle)
.select(
gle.account,
gle.debit,
gle.credit,
gle.debit_in_account_currency,
gle.credit_in_account_currency,
)
.orderby(gle.account)
.where(gle.voucher_no == payment_entry.name)
.run()
)
expected_gl_entries = (
("_Test Account Service Tax - _TC", 100.0, 0.0, 100.0, 0.0),
("_Test Bank - _TC", 0.0, 1100.0, 0.0, 1100.0),
("_Test Payable USD - _TC", 1000.0, 0.0, 12.5, 0),
)
self.assertEqual(gl_entries, expected_gl_entries)
def test_payment_entry_against_onhold_purchase_invoice(self):
pi = make_purchase_invoice()

View File

@@ -25,7 +25,8 @@
"in_list_view": 1,
"label": "Type",
"options": "DocType",
"reqd": 1
"reqd": 1,
"search_index": 1
},
{
"columns": 2,
@@ -35,7 +36,8 @@
"in_list_view": 1,
"label": "Name",
"options": "reference_doctype",
"reqd": 1
"reqd": 1,
"search_index": 1
},
{
"fieldname": "due_date",
@@ -104,7 +106,7 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-09-26 17:06:55.597389",
"modified": "2022-12-12 12:31:44.919895",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Entry Reference",
@@ -113,5 +115,6 @@
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -11,7 +11,7 @@ class PaymentGatewayAccount(Document):
self.name = self.payment_gateway + " - " + self.currency
def validate(self):
self.currency = frappe.db.get_value("Account", self.payment_account, "account_currency")
self.currency = frappe.get_cached_value("Account", self.payment_account, "account_currency")
self.update_default_payment_gateway()
self.set_as_default_if_not_set()

View File

@@ -22,7 +22,8 @@
"amount",
"account_currency",
"amount_in_account_currency",
"delinked"
"delinked",
"remarks"
],
"fields": [
{
@@ -136,12 +137,17 @@
"fieldtype": "Link",
"label": "Finance Book",
"options": "Finance Book"
},
{
"fieldname": "remarks",
"fieldtype": "Text",
"label": "Remarks"
}
],
"in_create": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2022-07-11 09:13:54.379168",
"modified": "2022-08-22 15:32:56.629430",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Ledger Entry",

View File

@@ -97,7 +97,7 @@ class PaymentLedgerEntry(Document):
)
def validate_dimensions_for_pl_and_bs(self):
account_type = frappe.db.get_value("Account", self.account, "report_type")
account_type = frappe.get_cached_value("Account", self.account, "report_type")
for dimension in get_checks_for_pl_and_bs_accounts():
if (

View File

@@ -3,12 +3,13 @@
import frappe
from frappe import qb
from frappe.tests.utils import FrappeTestCase
from frappe.tests.utils import FrappeTestCase, change_settings
from frappe.utils import nowdate
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
from erpnext.stock.doctype.item.test_item import create_item
@@ -127,6 +128,25 @@ class TestPaymentLedgerEntry(FrappeTestCase):
payment.posting_date = posting_date
return payment
def create_sales_order(
self, qty=1, rate=100, posting_date=nowdate(), do_not_save=False, do_not_submit=False
):
so = make_sales_order(
company=self.company,
transaction_date=posting_date,
customer=self.customer,
item_code=self.item,
cost_center=self.cost_center,
warehouse=self.warehouse,
debit_to=self.debit_to,
currency="INR",
qty=qty,
rate=100,
do_not_save=do_not_save,
do_not_submit=do_not_submit,
)
return so
def clear_old_entries(self):
doctype_list = [
"GL Entry",
@@ -406,3 +426,89 @@ class TestPaymentLedgerEntry(FrappeTestCase):
]
self.assertEqual(pl_entries_for_crnote[0], expected_values[0])
self.assertEqual(pl_entries_for_crnote[1], expected_values[1])
@change_settings(
"Accounts Settings",
{"unlink_payment_on_cancellation_of_invoice": 1, "delete_linked_ledger_entries": 1},
)
def test_multi_payment_unlink_on_invoice_cancellation(self):
transaction_date = nowdate()
amount = 100
si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date)
for amt in [40, 40, 20]:
# payment 1
pe = get_payment_entry(si.doctype, si.name)
pe.paid_amount = amt
pe.get("references")[0].allocated_amount = amt
pe = pe.save().submit()
si.reload()
si.cancel()
entries = frappe.db.get_list(
"Payment Ledger Entry",
filters={"against_voucher_type": si.doctype, "against_voucher_no": si.name, "delinked": 0},
)
self.assertEqual(entries, [])
# with references removed, deletion should be possible
si.delete()
self.assertRaises(frappe.DoesNotExistError, frappe.get_doc, si.doctype, si.name)
@change_settings(
"Accounts Settings",
{"unlink_payment_on_cancellation_of_invoice": 1, "delete_linked_ledger_entries": 1},
)
def test_multi_je_unlink_on_invoice_cancellation(self):
transaction_date = nowdate()
amount = 100
si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date)
# multiple JE's against invoice
for amt in [40, 40, 20]:
je1 = self.create_journal_entry(
self.income_account, self.debit_to, amt, posting_date=transaction_date
)
je1.get("accounts")[1].party_type = "Customer"
je1.get("accounts")[1].party = self.customer
je1.get("accounts")[1].reference_type = si.doctype
je1.get("accounts")[1].reference_name = si.name
je1 = je1.save().submit()
si.reload()
si.cancel()
entries = frappe.db.get_list(
"Payment Ledger Entry",
filters={"against_voucher_type": si.doctype, "against_voucher_no": si.name, "delinked": 0},
)
self.assertEqual(entries, [])
# with references removed, deletion should be possible
si.delete()
self.assertRaises(frappe.DoesNotExistError, frappe.get_doc, si.doctype, si.name)
@change_settings(
"Accounts Settings",
{"unlink_payment_on_cancellation_of_invoice": 1, "delete_linked_ledger_entries": 1},
)
def test_advance_payment_unlink_on_order_cancellation(self):
transaction_date = nowdate()
amount = 100
so = self.create_sales_order(qty=1, rate=amount, posting_date=transaction_date).save().submit()
pe = get_payment_entry(so.doctype, so.name).save().submit()
so.reload()
so.cancel()
entries = frappe.db.get_list(
"Payment Ledger Entry",
filters={"against_voucher_type": so.doctype, "against_voucher_no": so.name, "delinked": 0},
)
self.assertEqual(entries, [])
# with references removed, deletion should be possible
so.delete()
self.assertRaises(frappe.DoesNotExistError, frappe.get_doc, so.doctype, so.name)

View File

@@ -14,6 +14,7 @@ from erpnext.accounts.utils import (
QueryPaymentLedger,
get_outstanding_invoices,
reconcile_against_document,
update_reference_in_payment_entry,
)
from erpnext.controllers.accounts_controller import get_advance_payment_entries
@@ -22,6 +23,7 @@ class PaymentReconciliation(Document):
def __init__(self, *args, **kwargs):
super(PaymentReconciliation, self).__init__(*args, **kwargs)
self.common_filter_conditions = []
self.ple_posting_date_filter = []
@frappe.whitelist()
def get_unreconciled_entries(self):
@@ -150,6 +152,7 @@ class PaymentReconciliation(Document):
return_outstanding = ple_query.get_voucher_outstandings(
vouchers=return_invoices,
common_filter=self.common_filter_conditions,
posting_date=self.ple_posting_date_filter,
min_outstanding=-(self.minimum_payment_amount) if self.minimum_payment_amount else None,
max_outstanding=-(self.maximum_payment_amount) if self.maximum_payment_amount else None,
get_payments=True,
@@ -187,6 +190,7 @@ class PaymentReconciliation(Document):
self.party,
self.receivable_payable_account,
common_filter=self.common_filter_conditions,
posting_date=self.ple_posting_date_filter,
min_outstanding=self.minimum_invoice_amount if self.minimum_invoice_amount else None,
max_outstanding=self.maximum_invoice_amount if self.maximum_invoice_amount else None,
)
@@ -209,6 +213,23 @@ class PaymentReconciliation(Document):
inv.currency = entry.get("currency")
inv.outstanding_amount = flt(entry.get("outstanding_amount"))
def get_difference_amount(self, allocated_entry):
if allocated_entry.get("reference_type") != "Payment Entry":
return
dr_or_cr = (
"credit_in_account_currency"
if erpnext.get_party_account_type(self.party_type) == "Receivable"
else "debit_in_account_currency"
)
row = self.get_payment_details(allocated_entry, dr_or_cr)
doc = frappe.get_doc(allocated_entry.reference_type, allocated_entry.reference_name)
update_reference_in_payment_entry(row, doc, do_not_save=True)
return doc.difference_amount
@frappe.whitelist()
def allocate_entries(self, args):
self.validate_entries()
@@ -224,12 +245,16 @@ class PaymentReconciliation(Document):
res = self.get_allocated_entry(pay, inv, pay["amount"])
inv["outstanding_amount"] = flt(inv.get("outstanding_amount")) - flt(pay.get("amount"))
pay["amount"] = 0
res.difference_amount = self.get_difference_amount(res)
if pay.get("amount") == 0:
entries.append(res)
break
elif inv.get("outstanding_amount") == 0:
entries.append(res)
continue
else:
break
@@ -350,6 +375,7 @@ class PaymentReconciliation(Document):
def build_qb_filter_conditions(self, get_invoices=False, get_return_invoices=False):
self.common_filter_conditions.clear()
self.ple_posting_date_filter.clear()
ple = qb.DocType("Payment Ledger Entry")
self.common_filter_conditions.append(ple.company == self.company)
@@ -359,15 +385,15 @@ class PaymentReconciliation(Document):
if get_invoices:
if self.from_invoice_date:
self.common_filter_conditions.append(ple.posting_date.gte(self.from_invoice_date))
self.ple_posting_date_filter.append(ple.posting_date.gte(self.from_invoice_date))
if self.to_invoice_date:
self.common_filter_conditions.append(ple.posting_date.lte(self.to_invoice_date))
self.ple_posting_date_filter.append(ple.posting_date.lte(self.to_invoice_date))
elif get_return_invoices:
if self.from_payment_date:
self.common_filter_conditions.append(ple.posting_date.gte(self.from_payment_date))
self.ple_posting_date_filter.append(ple.posting_date.gte(self.from_payment_date))
if self.to_payment_date:
self.common_filter_conditions.append(ple.posting_date.lte(self.to_payment_date))
self.ple_posting_date_filter.append(ple.posting_date.lte(self.to_payment_date))
def get_conditions(self, get_payments=False):
condition = " and company = '{0}' ".format(self.company)

View File

@@ -283,6 +283,41 @@ class TestPaymentReconciliation(FrappeTestCase):
self.assertEqual(len(pr.get("invoices")), 2)
self.assertEqual(len(pr.get("payments")), 2)
def test_filter_posting_date_case2(self):
"""
Posting date should not affect outstanding amount calculation
"""
from_date = add_days(nowdate(), -30)
to_date = nowdate()
self.create_payment_entry(amount=25, posting_date=from_date).submit()
self.create_sales_invoice(rate=25, qty=1, posting_date=to_date)
pr = self.create_payment_reconciliation()
pr.from_invoice_date = pr.from_payment_date = from_date
pr.to_invoice_date = pr.to_payment_date = to_date
pr.get_unreconciled_entries()
self.assertEqual(len(pr.invoices), 1)
self.assertEqual(len(pr.payments), 1)
invoices = [x.as_dict() for x in pr.invoices]
payments = [x.as_dict() for x in pr.payments]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.reconcile()
pr.get_unreconciled_entries()
self.assertEqual(len(pr.invoices), 0)
self.assertEqual(len(pr.payments), 0)
pr.from_invoice_date = pr.from_payment_date = to_date
pr.to_invoice_date = pr.to_payment_date = to_date
pr.get_unreconciled_entries()
self.assertEqual(len(pr.invoices), 0)
def test_filter_invoice_limit(self):
# check filter condition - invoice limit
transaction_date = nowdate()

View File

@@ -186,8 +186,10 @@
{
"fetch_from": "bank_account.bank",
"fieldname": "bank",
"fieldtype": "Read Only",
"label": "Bank"
"fieldtype": "Link",
"label": "Bank",
"options": "Bank",
"read_only": 1
},
{
"fetch_from": "bank_account.bank_account_no",
@@ -366,10 +368,11 @@
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2020-09-18 12:24:14.178853",
"modified": "2022-09-30 16:19:43.680025",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Request",
"naming_rule": "By \"Naming Series\" field",
"owner": "Administrator",
"permissions": [
{
@@ -401,5 +404,6 @@
}
],
"sort_field": "modified",
"sort_order": "DESC"
"sort_order": "DESC",
"states": []
}

View File

@@ -53,7 +53,7 @@ class PaymentRequest(Document):
def validate_currency(self):
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
if self.payment_account and ref_doc.currency != frappe.db.get_value(
if self.payment_account and ref_doc.currency != frappe.get_cached_value(
"Account", self.payment_account, "account_currency"
):
frappe.throw(_("Transaction currency must be same as Payment Gateway currency"))

View File

@@ -39,6 +39,7 @@
{
"columns": 2,
"fetch_from": "payment_term.description",
"fetch_if_empty": 1,
"fieldname": "description",
"fieldtype": "Small Text",
"in_list_view": 1,
@@ -159,7 +160,7 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2021-04-28 05:41:35.084233",
"modified": "2022-09-16 13:57:06.382859",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Schedule",
@@ -168,5 +169,6 @@
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -43,7 +43,7 @@ class PeriodClosingVoucher(AccountsController):
make_reverse_gl_entries(voucher_type="Period Closing Voucher", voucher_no=self.name)
def validate_account_head(self):
closing_account_type = frappe.db.get_value("Account", self.closing_account_head, "root_type")
closing_account_type = frappe.get_cached_value("Account", self.closing_account_head, "root_type")
if closing_account_type not in ["Liability", "Equity"]:
frappe.throw(

View File

@@ -25,7 +25,7 @@ frappe.ui.form.on('POS Closing Entry', {
frappe.realtime.on('closing_process_complete', async function(data) {
await frm.reload_doc();
if (frm.doc.status == 'Failed' && frm.doc.error_message && data.user == frappe.session.user) {
if (frm.doc.status == 'Failed' && frm.doc.error_message) {
frappe.msgprint({
title: __('POS Closing Failed'),
message: frm.doc.error_message,
@@ -36,6 +36,15 @@ frappe.ui.form.on('POS Closing Entry', {
});
set_html_data(frm);
if (frm.doc.docstatus == 1) {
if (!frm.doc.posting_date) {
frm.set_value("posting_date", frappe.datetime.nowdate());
}
if (!frm.doc.posting_time) {
frm.set_value("posting_time", frappe.datetime.now_time());
}
}
},
refresh: function(frm) {

View File

@@ -11,6 +11,7 @@
"period_end_date",
"column_break_3",
"posting_date",
"posting_time",
"pos_opening_entry",
"status",
"section_break_5",
@@ -51,7 +52,6 @@
"fieldtype": "Datetime",
"in_list_view": 1,
"label": "Period End Date",
"read_only": 1,
"reqd": 1
},
{
@@ -219,6 +219,13 @@
"fieldtype": "Small Text",
"label": "Error",
"read_only": 1
},
{
"fieldname": "posting_time",
"fieldtype": "Time",
"label": "Posting Time",
"no_copy": 1,
"reqd": 1
}
],
"is_submittable": 1,
@@ -228,10 +235,11 @@
"link_fieldname": "pos_closing_entry"
}
],
"modified": "2021-10-20 16:19:25.340565",
"modified": "2022-08-01 11:37:14.991228",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Closing Entry",
"naming_rule": "Expression (old style)",
"owner": "Administrator",
"permissions": [
{
@@ -278,5 +286,6 @@
],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -15,6 +15,9 @@ from erpnext.controllers.status_updater import StatusUpdater
class POSClosingEntry(StatusUpdater):
def validate(self):
self.posting_date = self.posting_date or frappe.utils.nowdate()
self.posting_time = self.posting_time or frappe.utils.nowtime()
if frappe.db.get_value("POS Opening Entry", self.pos_opening_entry, "status") != "Open":
frappe.throw(_("Selected POS Opening Entry should be open."), title=_("Invalid Opening Entry"))

View File

@@ -5,6 +5,8 @@
frappe.provide("erpnext.accounts");
erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnext.selling.SellingController {
settings = {};
setup(doc) {
this.setup_posting_date_time_check();
super.setup(doc);
@@ -12,21 +14,37 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
company() {
erpnext.accounts.dimensions.update_dimension(this.frm, this.frm.doctype);
this.frm.set_value("set_warehouse", "");
this.frm.set_value("taxes_and_charges", "");
}
onload(doc) {
super.onload();
this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log', 'POS Closing Entry'];
if(doc.__islocal && doc.is_pos && frappe.get_route_str() !== 'point-of-sale') {
this.frm.script_manager.trigger("is_pos");
this.frm.refresh_fields();
}
this.frm.set_query("set_warehouse", function(doc) {
return {
filters: {
company: doc.company ? doc.company : '',
}
}
});
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
}
onload_post_render(frm) {
this.pos_profile(frm);
}
refresh(doc) {
super.refresh();
if (doc.docstatus == 1 && !doc.is_return) {
this.frm.add_custom_button(__('Return'), this.make_sales_return, __('Create'));
this.frm.page.set_inner_btn_group_as_primary(__('Create'));
@@ -36,6 +54,18 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
this.frm.return_print_format = "Sales Invoice Return";
this.frm.set_value('consolidated_invoice', '');
}
this.frm.set_query("customer", (function () {
const customer_groups = this.settings?.customer_groups;
if (!customer_groups?.length) return {};
return {
filters: {
customer_group: ["in", customer_groups],
}
}
}).bind(this));
}
is_pos() {
@@ -88,6 +118,25 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
});
}
pos_profile(frm) {
if (!frm.pos_profile || frm.pos_profile == '') {
this.update_customer_groups_settings([]);
return;
}
frappe.call({
method: "erpnext.selling.page.point_of_sale.point_of_sale.get_pos_profile_data",
args: { "pos_profile": frm.pos_profile },
callback: ({ message: profile }) => {
this.update_customer_groups_settings(profile?.customer_groups);
},
});
}
update_customer_groups_settings(customer_groups) {
this.settings.customer_groups = customer_groups?.map((group) => group.name)
}
amount(){
this.write_off_outstanding_amount_automatically()
}

View File

@@ -343,7 +343,8 @@
"no_copy": 1,
"options": "POS Invoice",
"print_hide": 1,
"read_only": 1
"read_only": 1,
"search_index": 1
},
{
"default": "0",
@@ -1553,7 +1554,7 @@
"icon": "fa fa-file-text",
"is_submittable": 1,
"links": [],
"modified": "2022-03-22 13:00:24.166684",
"modified": "2022-09-30 03:49:50.455199",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Invoice",

View File

@@ -239,14 +239,14 @@ class POSInvoice(SalesInvoice):
frappe.bold(d.warehouse),
frappe.bold(d.qty),
)
if flt(available_stock) <= 0:
if is_stock_item and flt(available_stock) <= 0:
frappe.throw(
_("Row #{}: Item Code: {} is not available under warehouse {}.").format(
d.idx, item_code, warehouse
),
title=_("Item Unavailable"),
)
elif flt(available_stock) < flt(d.qty):
elif is_stock_item and flt(available_stock) < flt(d.qty):
frappe.throw(
_(
"Row #{}: Stock quantity not enough for Item Code: {} under warehouse {}. Available quantity {}."
@@ -335,7 +335,8 @@ class POSInvoice(SalesInvoice):
if (
self.change_amount
and self.account_for_change_amount
and frappe.db.get_value("Account", self.account_for_change_amount, "company") != self.company
and frappe.get_cached_value("Account", self.account_for_change_amount, "company")
!= self.company
):
frappe.throw(
_("The selected change account {} doesn't belongs to Company {}.").format(
@@ -486,7 +487,7 @@ class POSInvoice(SalesInvoice):
customer_price_list, customer_group, customer_currency = frappe.db.get_value(
"Customer", self.customer, ["default_price_list", "customer_group", "default_currency"]
)
customer_group_price_list = frappe.db.get_value(
customer_group_price_list = frappe.get_cached_value(
"Customer Group", customer_group, "default_price_list"
)
selling_price_list = (
@@ -532,8 +533,8 @@ class POSInvoice(SalesInvoice):
if not self.debit_to:
self.debit_to = get_party_account("Customer", self.customer, self.company)
self.party_account_currency = frappe.db.get_value(
"Account", self.debit_to, "account_currency", cache=True
self.party_account_currency = frappe.get_cached_value(
"Account", self.debit_to, "account_currency"
)
if not self.due_date and self.customer:
self.due_date = get_due_date(self.posting_date, "Customer", self.customer, self.company)
@@ -632,11 +633,12 @@ def get_stock_availability(item_code, warehouse):
pos_sales_qty = get_pos_reserved_qty(item_code, warehouse)
return bin_qty - pos_sales_qty, is_stock_item
else:
is_stock_item = False
is_stock_item = True
if frappe.db.exists("Product Bundle", item_code):
return get_bundle_availability(item_code, warehouse), is_stock_item
else:
# Is a service item
is_stock_item = False
# Is a service item or non_stock item
return 0, is_stock_item
@@ -650,7 +652,9 @@ def get_bundle_availability(bundle_item_code, warehouse):
available_qty = item_bin_qty - item_pos_reserved_qty
max_available_bundles = available_qty / item.qty
if bundle_bin_qty > max_available_bundles:
if bundle_bin_qty > max_available_bundles and frappe.get_value(
"Item", item.item_code, "is_stock_item"
):
bundle_bin_qty = max_available_bundles
pos_sales_qty = get_pos_reserved_qty(bundle_item_code, warehouse)

View File

@@ -495,6 +495,67 @@ class TestPOSInvoice(unittest.TestCase):
self.assertRaises(frappe.ValidationError, pos.submit)
def test_value_error_on_serial_no_validation(self):
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
se = make_serialized_item(
company="_Test Company",
target_warehouse="Stores - _TC",
cost_center="Main - _TC",
expense_account="Cost of Goods Sold - _TC",
)
serial_nos = se.get("items")[0].serial_no
# make a pos invoice
pos = create_pos_invoice(
company="_Test Company",
debit_to="Debtors - _TC",
account_for_change_amount="Cash - _TC",
warehouse="Stores - _TC",
income_account="Sales - _TC",
expense_account="Cost of Goods Sold - _TC",
cost_center="Main - _TC",
item=se.get("items")[0].item_code,
rate=1000,
qty=1,
do_not_save=1,
)
pos.get("items")[0].has_serial_no = 1
pos.get("items")[0].serial_no = serial_nos.split("\n")[0]
pos.set("payments", [])
pos.append(
"payments", {"mode_of_payment": "Cash", "account": "Cash - _TC", "amount": 1000, "default": 1}
)
pos = pos.save().submit()
# make a return
pos_return = make_sales_return(pos.name)
pos_return.paid_amount = pos_return.grand_total
pos_return.save()
pos_return.submit()
# set docstatus to 2 for pos to trigger this issue
frappe.db.set_value("POS Invoice", pos.name, "docstatus", 2)
pos2 = create_pos_invoice(
company="_Test Company",
debit_to="Debtors - _TC",
account_for_change_amount="Cash - _TC",
warehouse="Stores - _TC",
income_account="Sales - _TC",
expense_account="Cost of Goods Sold - _TC",
cost_center="Main - _TC",
item=se.get("items")[0].item_code,
rate=1000,
qty=1,
do_not_save=1,
)
pos2.get("items")[0].has_serial_no = 1
pos2.get("items")[0].serial_no = serial_nos.split("\n")[0]
# Value error should not be triggered on validation
pos2.save()
def test_loyalty_points(self):
from erpnext.accounts.doctype.loyalty_program.loyalty_program import (
get_loyalty_program_details_with_points,

View File

@@ -8,6 +8,7 @@
"engine": "InnoDB",
"field_order": [
"barcode",
"has_item_scanned",
"item_code",
"col_break1",
"item_name",
@@ -808,11 +809,19 @@
"fieldtype": "Check",
"label": "Grant Commission",
"read_only": 1
},
{
"default": "0",
"depends_on": "barcode",
"fieldname": "has_item_scanned",
"fieldtype": "Check",
"label": "Has Item Scanned",
"read_only": 1
}
],
"istable": 1,
"links": [],
"modified": "2021-10-05 12:23:47.506290",
"modified": "2022-11-02 12:52:39.125295",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Invoice Item",
@@ -820,5 +829,6 @@
"owner": "Administrator",
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC"
"sort_order": "DESC",
"states": []
}

View File

@@ -6,6 +6,7 @@
"engine": "InnoDB",
"field_order": [
"posting_date",
"posting_time",
"merge_invoices_based_on",
"column_break_3",
"pos_closing_entry",
@@ -105,12 +106,19 @@
"label": "Customer Group",
"mandatory_depends_on": "eval:doc.merge_invoices_based_on == 'Customer Group'",
"options": "Customer Group"
},
{
"fieldname": "posting_time",
"fieldtype": "Time",
"label": "Posting Time",
"no_copy": 1,
"reqd": 1
}
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2021-09-14 11:17:19.001142",
"modified": "2022-08-01 11:36:42.456429",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Invoice Merge Log",
@@ -173,5 +181,6 @@
],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -6,11 +6,10 @@ import json
import frappe
from frappe import _
from frappe.core.page.background_jobs.background_jobs import get_info
from frappe.model.document import Document
from frappe.model.mapper import map_child_doc, map_doc
from frappe.utils import cint, flt, getdate, nowdate
from frappe.utils.background_jobs import enqueue
from frappe.utils import cint, flt, get_time, getdate, nowdate, nowtime
from frappe.utils.background_jobs import enqueue, is_job_queued
from frappe.utils.scheduler import is_scheduler_inactive
@@ -99,6 +98,7 @@ class POSInvoiceMergeLog(Document):
sales_invoice.is_consolidated = 1
sales_invoice.set_posting_time = 1
sales_invoice.posting_date = getdate(self.posting_date)
sales_invoice.posting_time = get_time(self.posting_time)
sales_invoice.save()
sales_invoice.submit()
@@ -115,6 +115,7 @@ class POSInvoiceMergeLog(Document):
credit_note.is_consolidated = 1
credit_note.set_posting_time = 1
credit_note.posting_date = getdate(self.posting_date)
credit_note.posting_time = get_time(self.posting_time)
# TODO: return could be against multiple sales invoice which could also have been consolidated?
# credit_note.return_against = self.consolidated_invoice
credit_note.save()
@@ -402,6 +403,9 @@ def create_merge_logs(invoice_by_customer, closing_entry=None):
merge_log.posting_date = (
getdate(closing_entry.get("posting_date")) if closing_entry else nowdate()
)
merge_log.posting_time = (
get_time(closing_entry.get("posting_time")) if closing_entry else nowtime()
)
merge_log.customer = customer
merge_log.pos_closing_entry = closing_entry.get("name") if closing_entry else None
@@ -426,7 +430,7 @@ def create_merge_logs(invoice_by_customer, closing_entry=None):
finally:
frappe.db.commit()
frappe.publish_realtime("closing_process_complete", {"user": frappe.session.user})
frappe.publish_realtime("closing_process_complete", user=frappe.session.user)
def cancel_merge_logs(merge_logs, closing_entry=None):
@@ -453,7 +457,7 @@ def cancel_merge_logs(merge_logs, closing_entry=None):
finally:
frappe.db.commit()
frappe.publish_realtime("closing_process_complete", {"user": frappe.session.user})
frappe.publish_realtime("closing_process_complete", user=frappe.session.user)
def enqueue_job(job, **kwargs):
@@ -462,7 +466,7 @@ def enqueue_job(job, **kwargs):
closing_entry = kwargs.get("closing_entry") or {}
job_name = closing_entry.get("name")
if not job_already_enqueued(job_name):
if not is_job_queued(job_name):
enqueue(
job,
**kwargs,
@@ -486,12 +490,6 @@ def check_scheduler_status():
frappe.throw(_("Scheduler is inactive. Cannot enqueue job."), title=_("Scheduler Inactive"))
def job_already_enqueued(job_name):
enqueued_jobs = [d.get("job_name") for d in get_info()]
if job_name in enqueued_jobs:
return True
def safe_load_json(message):
try:
json_message = json.loads(message).get("message")

View File

@@ -43,6 +43,7 @@
"currency",
"write_off_account",
"write_off_cost_center",
"write_off_limit",
"account_for_change_amount",
"disable_rounded_total",
"column_break_23",
@@ -360,6 +361,14 @@
"fieldtype": "Check",
"label": "Validate Stock on Save"
},
{
"default": "1",
"description": "Auto write off precision loss while consolidation",
"fieldname": "write_off_limit",
"fieldtype": "Currency",
"label": "Write Off Limit",
"reqd": 1
},
{
"default": "0",
"description": "If enabled, the consolidated invoices will have rounded total disabled",
@@ -393,7 +402,7 @@
"link_fieldname": "pos_profile"
}
],
"modified": "2022-07-21 11:16:46.911173",
"modified": "2022-08-10 12:57:06.241439",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Profile",

View File

@@ -52,7 +52,10 @@
"free_item_rate",
"column_break_42",
"free_item_uom",
"round_free_qty",
"is_recursive",
"recurse_for",
"apply_recursion_over",
"section_break_23",
"valid_from",
"valid_upto",
@@ -176,7 +179,7 @@
},
{
"collapsible": 1,
"depends_on": "eval:doc.apply_on != 'Transaction'",
"depends_on": "eval:doc.apply_on != 'Transaction' && !doc.mixed_conditions",
"fieldname": "section_break_18",
"fieldtype": "Section Break",
"label": "Discount on Other Item"
@@ -297,12 +300,12 @@
{
"fieldname": "min_qty",
"fieldtype": "Float",
"label": "Min Qty"
"label": "Min Qty (As Per Stock UOM)"
},
{
"fieldname": "max_qty",
"fieldtype": "Float",
"label": "Max Qty"
"label": "Max Qty (As Per Stock UOM)"
},
{
"fieldname": "column_break_21",
@@ -481,7 +484,7 @@
"description": "System will notify to increase or decrease quantity or amount ",
"fieldname": "threshold_percentage",
"fieldtype": "Percent",
"label": "Threshold for Suggestion"
"label": "Threshold for Suggestion (In Percentage)"
},
{
"description": "Higher the number, higher the priority",
@@ -578,15 +581,38 @@
"fieldtype": "Select",
"label": "Naming Series",
"options": "PRLE-.####"
},
{
"default": "0",
"fieldname": "round_free_qty",
"fieldtype": "Check",
"label": "Round Free Qty"
},
{
"depends_on": "is_recursive",
"description": "Give free item for every N quantity",
"fieldname": "recurse_for",
"fieldtype": "Float",
"label": "Recurse Every (As Per Transaction UOM)",
"mandatory_depends_on": "is_recursive"
},
{
"default": "0",
"depends_on": "is_recursive",
"description": "Qty for which recursion isn't applicable.",
"fieldname": "apply_recursion_over",
"fieldtype": "Float",
"label": "Apply Recursion Over (As Per Transaction UOM)"
}
],
"icon": "fa fa-gift",
"idx": 1,
"links": [],
"modified": "2021-08-06 15:10:04.219321",
"modified": "2022-10-13 19:05:35.056304",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Pricing Rule",
"naming_rule": "By \"Naming Series\" field",
"owner": "Administrator",
"permissions": [
{
@@ -642,5 +668,6 @@
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"title_field": "title"
}
}

View File

@@ -10,7 +10,7 @@ import re
import frappe
from frappe import _, throw
from frappe.model.document import Document
from frappe.utils import cint, flt, getdate
from frappe.utils import cint, flt
apply_on_dict = {"Item Code": "items", "Item Group": "item_groups", "Brand": "brands"}
@@ -24,6 +24,7 @@ class PricingRule(Document):
self.validate_applicable_for_selling_or_buying()
self.validate_min_max_amt()
self.validate_min_max_qty()
self.validate_recursion()
self.cleanup_fields_value()
self.validate_rate_or_discount()
self.validate_max_discount()
@@ -109,6 +110,18 @@ class PricingRule(Document):
if self.min_amt and self.max_amt and flt(self.min_amt) > flt(self.max_amt):
throw(_("Min Amt can not be greater than Max Amt"))
def validate_recursion(self):
if self.price_or_product_discount != "Product":
return
if self.free_item or self.same_item:
if flt(self.recurse_for) <= 0:
self.recurse_for = 1
if self.is_recursive:
if flt(self.apply_recursion_over) > flt(self.min_qty):
throw(_("Min Qty should be greater than Recurse Over Qty"))
if flt(self.apply_recursion_over) < 0:
throw(_("Recurse Over Qty cannot be less than 0"))
def cleanup_fields_value(self):
for logic_field in ["apply_on", "applicable_for", "rate_or_discount"]:
fieldname = frappe.scrub(self.get(logic_field) or "")
@@ -171,8 +184,7 @@ class PricingRule(Document):
if self.is_cumulative and not (self.valid_from and self.valid_upto):
frappe.throw(_("Valid from and valid upto fields are mandatory for the cumulative"))
if self.valid_from and self.valid_upto and getdate(self.valid_from) > getdate(self.valid_upto):
frappe.throw(_("Valid from date must be less than valid upto date"))
self.validate_from_to_dates("valid_from", "valid_upto")
def validate_condition(self):
if (
@@ -268,6 +280,18 @@ def get_serial_no_for_item(args):
return item_details
def update_pricing_rule_uom(pricing_rule, args):
child_doc = {"Item Code": "items", "Item Group": "item_groups", "Brand": "brands"}.get(
pricing_rule.apply_on
)
apply_on_field = frappe.scrub(pricing_rule.apply_on)
for row in pricing_rule.get(child_doc):
if row.get(apply_on_field) == args.get(apply_on_field):
pricing_rule.uom = row.uom
def get_pricing_rule_for_item(args, price_list_rate=0, doc=None, for_validate=False):
from erpnext.accounts.doctype.pricing_rule.utils import (
get_applied_pricing_rules,
@@ -324,7 +348,8 @@ def get_pricing_rule_for_item(args, price_list_rate=0, doc=None, for_validate=Fa
if isinstance(pricing_rule, str):
pricing_rule = frappe.get_cached_doc("Pricing Rule", pricing_rule)
pricing_rule.apply_rule_on_other_items = get_pricing_rule_items(pricing_rule)
update_pricing_rule_uom(pricing_rule, args)
pricing_rule.apply_rule_on_other_items = get_pricing_rule_items(pricing_rule) or []
if pricing_rule.get("suggestion"):
continue
@@ -337,7 +362,6 @@ def get_pricing_rule_for_item(args, price_list_rate=0, doc=None, for_validate=Fa
if pricing_rule.mixed_conditions or pricing_rule.apply_rule_on_other:
item_details.update(
{
"apply_rule_on_other_items": json.dumps(pricing_rule.apply_rule_on_other_items),
"price_or_product_discount": pricing_rule.price_or_product_discount,
"apply_rule_on": (
frappe.scrub(pricing_rule.apply_rule_on_other)
@@ -347,6 +371,9 @@ def get_pricing_rule_for_item(args, price_list_rate=0, doc=None, for_validate=Fa
}
)
if pricing_rule.apply_rule_on_other_items:
item_details["apply_rule_on_other_items"] = json.dumps(pricing_rule.apply_rule_on_other_items)
if pricing_rule.coupon_code_based == 1 and args.coupon_code == None:
return item_details
@@ -438,12 +465,15 @@ def apply_price_discount_rule(pricing_rule, item_details, args):
if pricing_rule.currency == args.currency:
pricing_rule_rate = pricing_rule.rate
# TODO https://github.com/frappe/erpnext/pull/23636 solve this in some other way.
if pricing_rule_rate:
is_blank_uom = pricing_rule.get("uom") != args.get("uom")
# Override already set price list rate (from item price)
# if pricing_rule_rate > 0
item_details.update(
{
"price_list_rate": pricing_rule_rate * args.get("conversion_factor", 1),
"price_list_rate": pricing_rule_rate
* (args.get("conversion_factor", 1) if is_blank_uom else 1),
}
)
item_details.update({"discount_percentage": 0.0})
@@ -492,7 +522,7 @@ def remove_pricing_rule_for_item(pricing_rules, item_details, item_code=None, ra
)
if pricing_rule.get("mixed_conditions") or pricing_rule.get("apply_rule_on_other"):
items = get_pricing_rule_items(pricing_rule)
items = get_pricing_rule_items(pricing_rule, other_items=True)
item_details.apply_on = (
frappe.scrub(pricing_rule.apply_rule_on_other)
if pricing_rule.apply_rule_on_other

View File

@@ -595,6 +595,247 @@ class TestPricingRule(unittest.TestCase):
frappe.get_doc("Item Price", {"item_code": "Water Flask"}).delete()
item.delete()
def test_item_price_with_blank_uom_pricing_rule(self):
properties = {
"item_code": "Item Blank UOM",
"stock_uom": "Nos",
"sales_uom": "Box",
"uoms": [dict(uom="Box", conversion_factor=10)],
}
item = make_item(properties=properties)
make_item_price("Item Blank UOM", "_Test Price List", 100)
pricing_rule_record = {
"doctype": "Pricing Rule",
"title": "_Test Item Blank UOM Rule",
"apply_on": "Item Code",
"items": [
{
"item_code": "Item Blank UOM",
}
],
"selling": 1,
"currency": "INR",
"rate_or_discount": "Rate",
"rate": 101,
"company": "_Test Company",
}
rule = frappe.get_doc(pricing_rule_record)
rule.insert()
si = create_sales_invoice(
do_not_save=True, item_code="Item Blank UOM", uom="Box", conversion_factor=10
)
si.selling_price_list = "_Test Price List"
si.save()
# If UOM is blank consider it as stock UOM and apply pricing_rule on all UOM.
# rate is 101, Selling UOM is Box that have conversion_factor of 10 so 101 * 10 = 1010
self.assertEqual(si.items[0].price_list_rate, 1010)
self.assertEqual(si.items[0].rate, 1010)
si.delete()
si = create_sales_invoice(do_not_save=True, item_code="Item Blank UOM", uom="Nos")
si.selling_price_list = "_Test Price List"
si.save()
# UOM is blank so consider it as stock UOM and apply pricing_rule on all UOM.
# rate is 101, Selling UOM is Nos that have conversion_factor of 1 so 101 * 1 = 101
self.assertEqual(si.items[0].price_list_rate, 101)
self.assertEqual(si.items[0].rate, 101)
si.delete()
rule.delete()
frappe.get_doc("Item Price", {"item_code": "Item Blank UOM"}).delete()
item.delete()
def test_item_price_with_selling_uom_pricing_rule(self):
properties = {
"item_code": "Item UOM other than Stock",
"stock_uom": "Nos",
"sales_uom": "Box",
"uoms": [dict(uom="Box", conversion_factor=10)],
}
item = make_item(properties=properties)
make_item_price("Item UOM other than Stock", "_Test Price List", 100)
pricing_rule_record = {
"doctype": "Pricing Rule",
"title": "_Test Item UOM other than Stock Rule",
"apply_on": "Item Code",
"items": [
{
"item_code": "Item UOM other than Stock",
"uom": "Box",
}
],
"selling": 1,
"currency": "INR",
"rate_or_discount": "Rate",
"rate": 101,
"company": "_Test Company",
}
rule = frappe.get_doc(pricing_rule_record)
rule.insert()
si = create_sales_invoice(
do_not_save=True, item_code="Item UOM other than Stock", uom="Box", conversion_factor=10
)
si.selling_price_list = "_Test Price List"
si.save()
# UOM is Box so apply pricing_rule only on Box UOM.
# Selling UOM is Box and as both UOM are same no need to multiply by conversion_factor.
self.assertEqual(si.items[0].price_list_rate, 101)
self.assertEqual(si.items[0].rate, 101)
si.delete()
si = create_sales_invoice(do_not_save=True, item_code="Item UOM other than Stock", uom="Nos")
si.selling_price_list = "_Test Price List"
si.save()
# UOM is Box so pricing_rule won't apply as selling_uom is Nos.
# As Pricing Rule is not applied price of 100 will be fetched from Item Price List.
self.assertEqual(si.items[0].price_list_rate, 100)
self.assertEqual(si.items[0].rate, 100)
si.delete()
rule.delete()
frappe.get_doc("Item Price", {"item_code": "Item UOM other than Stock"}).delete()
item.delete()
def test_item_group_price_with_blank_uom_pricing_rule(self):
group = frappe.get_doc(doctype="Item Group", item_group_name="_Test Pricing Rule Item Group")
group.save()
properties = {
"item_code": "Item with Group Blank UOM",
"item_group": "_Test Pricing Rule Item Group",
"stock_uom": "Nos",
"sales_uom": "Box",
"uoms": [dict(uom="Box", conversion_factor=10)],
}
item = make_item(properties=properties)
make_item_price("Item with Group Blank UOM", "_Test Price List", 100)
pricing_rule_record = {
"doctype": "Pricing Rule",
"title": "_Test Item with Group Blank UOM Rule",
"apply_on": "Item Group",
"item_groups": [
{
"item_group": "_Test Pricing Rule Item Group",
}
],
"selling": 1,
"currency": "INR",
"rate_or_discount": "Rate",
"rate": 101,
"company": "_Test Company",
}
rule = frappe.get_doc(pricing_rule_record)
rule.insert()
si = create_sales_invoice(
do_not_save=True, item_code="Item with Group Blank UOM", uom="Box", conversion_factor=10
)
si.selling_price_list = "_Test Price List"
si.save()
# If UOM is blank consider it as stock UOM and apply pricing_rule on all UOM.
# rate is 101, Selling UOM is Box that have conversion_factor of 10 so 101 * 10 = 1010
self.assertEqual(si.items[0].price_list_rate, 1010)
self.assertEqual(si.items[0].rate, 1010)
si.delete()
si = create_sales_invoice(do_not_save=True, item_code="Item with Group Blank UOM", uom="Nos")
si.selling_price_list = "_Test Price List"
si.save()
# UOM is blank so consider it as stock UOM and apply pricing_rule on all UOM.
# rate is 101, Selling UOM is Nos that have conversion_factor of 1 so 101 * 1 = 101
self.assertEqual(si.items[0].price_list_rate, 101)
self.assertEqual(si.items[0].rate, 101)
si.delete()
rule.delete()
frappe.get_doc("Item Price", {"item_code": "Item with Group Blank UOM"}).delete()
item.delete()
group.delete()
def test_item_group_price_with_selling_uom_pricing_rule(self):
group = frappe.get_doc(doctype="Item Group", item_group_name="_Test Pricing Rule Item Group UOM")
group.save()
properties = {
"item_code": "Item with Group UOM other than Stock",
"item_group": "_Test Pricing Rule Item Group UOM",
"stock_uom": "Nos",
"sales_uom": "Box",
"uoms": [dict(uom="Box", conversion_factor=10)],
}
item = make_item(properties=properties)
make_item_price("Item with Group UOM other than Stock", "_Test Price List", 100)
pricing_rule_record = {
"doctype": "Pricing Rule",
"title": "_Test Item with Group UOM other than Stock Rule",
"apply_on": "Item Group",
"item_groups": [
{
"item_group": "_Test Pricing Rule Item Group UOM",
"uom": "Box",
}
],
"selling": 1,
"currency": "INR",
"rate_or_discount": "Rate",
"rate": 101,
"company": "_Test Company",
}
rule = frappe.get_doc(pricing_rule_record)
rule.insert()
si = create_sales_invoice(
do_not_save=True,
item_code="Item with Group UOM other than Stock",
uom="Box",
conversion_factor=10,
)
si.selling_price_list = "_Test Price List"
si.save()
# UOM is Box so apply pricing_rule only on Box UOM.
# Selling UOM is Box and as both UOM are same no need to multiply by conversion_factor.
self.assertEqual(si.items[0].price_list_rate, 101)
self.assertEqual(si.items[0].rate, 101)
si.delete()
si = create_sales_invoice(
do_not_save=True, item_code="Item with Group UOM other than Stock", uom="Nos"
)
si.selling_price_list = "_Test Price List"
si.save()
# UOM is Box so pricing_rule won't apply as selling_uom is Nos.
# As Pricing Rule is not applied price of 100 will be fetched from Item Price List.
self.assertEqual(si.items[0].price_list_rate, 100)
self.assertEqual(si.items[0].rate, 100)
si.delete()
rule.delete()
frappe.get_doc("Item Price", {"item_code": "Item with Group UOM other than Stock"}).delete()
item.delete()
group.delete()
def test_pricing_rule_for_different_currency(self):
make_item("Test Sanitizer Item")
@@ -766,6 +1007,107 @@ class TestPricingRule(unittest.TestCase):
frappe.delete_doc_if_exists("Pricing Rule", "_Test Pricing Rule with Min Qty - 1")
frappe.delete_doc_if_exists("Pricing Rule", "_Test Pricing Rule with Min Qty - 2")
def test_pricing_rule_for_other_items_cond_with_amount(self):
item = make_item("Water Flask New")
other_item = make_item("Other Water Flask New")
make_item_price(item.name, "_Test Price List", 100)
make_item_price(other_item.name, "_Test Price List", 100)
pricing_rule_record = {
"doctype": "Pricing Rule",
"title": "_Test Water Flask Rule",
"apply_on": "Item Code",
"apply_rule_on_other": "Item Code",
"price_or_product_discount": "Price",
"rate_or_discount": "Discount Percentage",
"other_item_code": other_item.name,
"items": [
{
"item_code": item.name,
}
],
"selling": 1,
"currency": "INR",
"min_amt": 200,
"discount_percentage": 10,
"company": "_Test Company",
}
rule = frappe.get_doc(pricing_rule_record)
rule.insert()
si = create_sales_invoice(do_not_save=True, item_code=item.name)
si.append(
"items",
{
"item_code": other_item.name,
"item_name": other_item.item_name,
"description": other_item.description,
"stock_uom": other_item.stock_uom,
"uom": other_item.stock_uom,
"cost_center": si.items[0].cost_center,
"expense_account": si.items[0].expense_account,
"warehouse": si.items[0].warehouse,
"conversion_factor": 1,
"qty": 1,
},
)
si.selling_price_list = "_Test Price List"
si.save()
self.assertEqual(si.items[0].discount_percentage, 0)
self.assertEqual(si.items[1].discount_percentage, 0)
si.items[0].qty = 2
si.save()
self.assertEqual(si.items[0].discount_percentage, 0)
self.assertEqual(si.items[0].stock_qty, 2)
self.assertEqual(si.items[0].amount, 200)
self.assertEqual(si.items[0].price_list_rate, 100)
self.assertEqual(si.items[1].discount_percentage, 10)
si.delete()
rule.delete()
def test_pricing_rule_for_product_free_item_rounded_qty_and_recursion(self):
frappe.delete_doc_if_exists("Pricing Rule", "_Test Pricing Rule")
test_record = {
"doctype": "Pricing Rule",
"title": "_Test Pricing Rule",
"apply_on": "Item Code",
"currency": "USD",
"items": [
{
"item_code": "_Test Item",
}
],
"selling": 1,
"rate": 0,
"min_qty": 3,
"max_qty": 7,
"price_or_product_discount": "Product",
"same_item": 1,
"free_qty": 1,
"round_free_qty": 1,
"is_recursive": 1,
"recurse_for": 2,
"company": "_Test Company",
}
frappe.get_doc(test_record.copy()).insert()
# With pricing rule
so = make_sales_order(item_code="_Test Item", qty=5)
so.load_from_db()
self.assertEqual(so.items[1].is_free_item, 1)
self.assertEqual(so.items[1].item_code, "_Test Item")
self.assertEqual(so.items[1].qty, 2)
so = make_sales_order(item_code="_Test Item", qty=7)
so.load_from_db()
self.assertEqual(so.items[1].is_free_item, 1)
self.assertEqual(so.items[1].item_code, "_Test Item")
self.assertEqual(so.items[1].qty, 4)
test_dependencies = ["Campaign"]

View File

@@ -111,6 +111,12 @@ def _get_pricing_rules(apply_on, args, values):
)
if apply_on_field == "item_code":
if args.get("uom", None):
item_conditions += (
" and ({child_doc}.uom='{item_uom}' or IFNULL({child_doc}.uom, '')='')".format(
child_doc=child_doc, item_uom=args.get("uom")
)
)
if "variant_of" not in args:
args.variant_of = frappe.get_cached_value("Item", args.item_code, "variant_of")
@@ -121,6 +127,12 @@ def _get_pricing_rules(apply_on, args, values):
values["variant_of"] = args.variant_of
elif apply_on_field == "item_group":
item_conditions = _get_tree_conditions(args, "Item Group", child_doc, False)
if args.get("uom", None):
item_conditions += (
" and ({child_doc}.uom='{item_uom}' or IFNULL({child_doc}.uom, '')='')".format(
child_doc=child_doc, item_uom=args.get("uom")
)
)
conditions += get_other_conditions(conditions, values, args)
warehouse_conditions = _get_tree_conditions(args, "Warehouse", "`tabPricing Rule`")
@@ -252,12 +264,6 @@ def filter_pricing_rules(args, pricing_rules, doc=None):
stock_qty = flt(args.get("stock_qty"))
amount = flt(args.get("price_list_rate")) * flt(args.get("qty"))
if pricing_rules[0].apply_rule_on_other:
field = frappe.scrub(pricing_rules[0].apply_rule_on_other)
if field and pricing_rules[0].get("other_" + field) != args.get(field):
return
pr_doc = frappe.get_cached_doc("Pricing Rule", pricing_rules[0].name)
if pricing_rules[0].mixed_conditions and doc:
@@ -274,7 +280,7 @@ def filter_pricing_rules(args, pricing_rules, doc=None):
amount += data[1]
if pricing_rules[0].apply_rule_on_other and not pricing_rules[0].mixed_conditions and doc:
pricing_rules = get_qty_and_rate_for_other_item(doc, pr_doc, pricing_rules) or []
pricing_rules = get_qty_and_rate_for_other_item(doc, pr_doc, pricing_rules, args) or []
else:
pricing_rules = filter_pricing_rules_for_qty_amount(stock_qty, amount, pricing_rules, args)
@@ -352,16 +358,14 @@ def validate_quantity_and_amount_for_suggestion(args, qty, amount, item_code, tr
if fieldname:
msg = _(
"If you {0} {1} quantities of the item {2}, the scheme {3} will be applied on the item."
).format(
type_of_transaction, args.get(fieldname), bold(item_code), bold(args.rule_description)
)
).format(type_of_transaction, args.get(fieldname), bold(item_code), bold(args.title))
if fieldname in ["min_amt", "max_amt"]:
msg = _("If you {0} {1} worth item {2}, the scheme {3} will be applied on the item.").format(
type_of_transaction,
fmt_money(args.get(fieldname), currency=args.get("currency")),
bold(item_code),
bold(args.rule_description),
bold(args.title),
)
frappe.msgprint(msg)
@@ -454,17 +458,29 @@ def get_qty_and_rate_for_mixed_conditions(doc, pr_doc, args):
return sum_qty, sum_amt, items
def get_qty_and_rate_for_other_item(doc, pr_doc, pricing_rules):
items = get_pricing_rule_items(pr_doc)
def get_qty_and_rate_for_other_item(doc, pr_doc, pricing_rules, row_item):
other_items = get_pricing_rule_items(pr_doc, other_items=True)
pricing_rule_apply_on = apply_on_table.get(pr_doc.get("apply_on"))
apply_on = frappe.scrub(pr_doc.get("apply_on"))
items = []
for d in pr_doc.get(pricing_rule_apply_on):
if apply_on == "item_group":
items.extend(get_child_item_groups(d.get(apply_on)))
else:
items.append(d.get(apply_on))
for row in doc.items:
if row.get(frappe.scrub(pr_doc.apply_rule_on_other)) in items:
pricing_rules = filter_pricing_rules_for_qty_amount(
row.get("stock_qty"), row.get("amount"), pricing_rules, row
)
if row.get(apply_on) in items:
if not row.get("qty"):
continue
stock_qty = row.get("qty") * (row.get("conversion_factor") or 1.0)
amount = stock_qty * (row.get("price_list_rate") or row.get("rate"))
pricing_rules = filter_pricing_rules_for_qty_amount(stock_qty, amount, pricing_rules, row)
if pricing_rules and pricing_rules[0]:
pricing_rules[0].apply_rule_on_other_items = items
pricing_rules[0].apply_rule_on_other_items = other_items
return pricing_rules
@@ -617,9 +633,13 @@ def get_product_discount_rule(pricing_rule, item_details, args=None, doc=None):
qty = pricing_rule.free_qty or 1
if pricing_rule.is_recursive:
transaction_qty = args.get("qty") if args else doc.total_qty
transaction_qty = (
args.get("qty") if args else doc.total_qty
) - pricing_rule.apply_recursion_over
if transaction_qty:
qty = flt(transaction_qty) * qty
qty = flt(transaction_qty) * qty / pricing_rule.recurse_for
if pricing_rule.round_free_qty:
qty = round(qty)
free_item_data_args = {
"item_code": free_item,
@@ -658,21 +678,21 @@ def apply_pricing_rule_for_free_items(doc, pricing_rule_args, set_missing_values
doc.append("items", args)
def get_pricing_rule_items(pr_doc):
def get_pricing_rule_items(pr_doc, other_items=False) -> list:
apply_on_data = []
apply_on = frappe.scrub(pr_doc.get("apply_on"))
pricing_rule_apply_on = apply_on_table.get(pr_doc.get("apply_on"))
for d in pr_doc.get(pricing_rule_apply_on):
if apply_on == "item_group":
apply_on_data.extend(get_child_item_groups(d.get(apply_on)))
else:
apply_on_data.append(d.get(apply_on))
if pr_doc.apply_rule_on_other:
if pr_doc.apply_rule_on_other and other_items:
apply_on = frappe.scrub(pr_doc.apply_rule_on_other)
apply_on_data.append(pr_doc.get("other_" + apply_on))
else:
for d in pr_doc.get(pricing_rule_apply_on):
if apply_on == "item_group":
apply_on_data.extend(get_child_item_groups(d.get(apply_on)))
else:
apply_on_data.append(d.get(apply_on))
return list(set(apply_on_data))

View File

@@ -34,4 +34,4 @@ class ProcessDeferredAccounting(Document):
filters={"against_voucher_type": self.doctype, "against_voucher": self.name},
)
make_gl_entries(gl_entries=gl_entries, cancel=1)
make_gl_entries(gl_map=gl_entries, cancel=1)

View File

@@ -57,3 +57,16 @@ class TestProcessDeferredAccounting(unittest.TestCase):
]
check_gl_entries(self, si.name, expected_gle, "2019-01-10")
def test_pda_submission_and_cancellation(self):
pda = frappe.get_doc(
dict(
doctype="Process Deferred Accounting",
posting_date="2019-01-01",
start_date="2019-01-01",
end_date="2019-01-31",
type="Income",
)
)
pda.submit()
pda.cancel()

View File

@@ -25,7 +25,7 @@
</div>
<br>
<table class="table table-bordered">
<table class="table table-bordered" style="font-size: 10px">
<thead>
<tr>
<th style="width: 12%">{{ _("Date") }}</th>

View File

@@ -9,6 +9,7 @@ frappe.ui.form.on('Process Statement Of Accounts', {
refresh: function(frm){
if(!frm.doc.__islocal) {
frm.add_custom_button(__('Send Emails'), function(){
if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."))
frappe.call({
method: "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_emails",
args: {
@@ -25,7 +26,8 @@ frappe.ui.form.on('Process Statement Of Accounts', {
});
});
frm.add_custom_button(__('Download'), function(){
var url = frappe.urllib.get_full_url(
if (frm.is_dirty()) frappe.throw(__("Please save before proceeding."))
let url = frappe.urllib.get_full_url(
'/api/method/erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.download_statements?'
+ 'document_name='+encodeURIComponent(frm.doc.name))
$.ajax({

View File

@@ -23,10 +23,12 @@
"fetch_customers",
"column_break_6",
"primary_mandatory",
"show_net_values_in_party_account",
"column_break_17",
"customers",
"preferences",
"orientation",
"include_break",
"include_ageing",
"ageing_based_on",
"section_break_14",
@@ -284,10 +286,22 @@
"fieldtype": "Link",
"label": "Terms and Conditions",
"options": "Terms and Conditions"
},
{
"default": "1",
"fieldname": "include_break",
"fieldtype": "Check",
"label": "Page Break After Each SoA"
},
{
"default": "0",
"fieldname": "show_net_values_in_party_account",
"fieldtype": "Check",
"label": "Show Net Values in Party Account"
}
],
"links": [],
"modified": "2021-09-06 21:00:45.732505",
"modified": "2022-11-10 17:44:17.165991",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Process Statement Of Accounts",
@@ -321,5 +335,6 @@
],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -6,6 +6,7 @@ import copy
import frappe
from frappe import _
from frappe.desk.reportview import get_match_cond
from frappe.model.document import Document
from frappe.utils import add_days, add_months, format_date, getdate, today
from frappe.utils.jinja import validate_template
@@ -94,6 +95,7 @@ def get_report_pdf(doc, consolidated=True):
"show_opening_entries": 0,
"include_default_book_entries": 0,
"tax_id": tax_id if tax_id else None,
"show_net_values_in_party_account": doc.show_net_values_in_party_account,
}
)
col, res = get_soa(filters)
@@ -128,7 +130,8 @@ def get_report_pdf(doc, consolidated=True):
if not bool(statement_dict):
return False
elif consolidated:
result = "".join(list(statement_dict.values()))
delimiter = '<div style="page-break-before: always;"></div>' if doc.include_break else ""
result = delimiter.join(list(statement_dict.values()))
return get_pdf(result, {"orientation": doc.orientation})
else:
for customer, statement_html in statement_dict.items():
@@ -240,8 +243,6 @@ def fetch_customers(customer_collection, collection_name, primary_mandatory):
if int(primary_mandatory):
if primary_email == "":
continue
elif (billing_email == "") and (primary_email == ""):
continue
customer_list.append(
{"name": customer.name, "primary_email": primary_email, "billing_email": billing_email}
@@ -273,8 +274,12 @@ def get_customer_emails(customer_name, primary_mandatory, billing_and_primary=Tr
link.link_doctype='Customer'
and link.link_name=%s
and contact.is_billing_contact=1
{mcond}
ORDER BY
contact.creation desc""",
contact.creation desc
""".format(
mcond=get_match_cond("Contact")
),
customer_name,
)
@@ -313,6 +318,8 @@ def send_emails(document_name, from_scheduler=False):
attachments = [{"fname": customer + ".pdf", "fcontent": report_pdf}]
recipients, cc = get_recipients_and_cc(customer, doc)
if not recipients:
continue
context = get_context(customer, doc)
subject = frappe.render_template(doc.subject, context)
message = frappe.render_template(doc.body, context)

View File

@@ -34,8 +34,8 @@ pricing_rule_fields = [
other_fields = [
"min_qty",
"max_qty",
"min_amt",
"max_amt",
"min_amount",
"max_amount",
"priority",
"warehouse",
"threshold_percentage",
@@ -246,7 +246,11 @@ def prepare_pricing_rule(
def set_args(args, pr, doc, child_doc, discount_fields, child_doc_fields):
pr.update(args)
for field in other_fields + discount_fields:
pr.set(field, child_doc_fields.get(field))
target_field = field
if target_field in ["min_amount", "max_amount"]:
target_field = "min_amt" if field == "min_amount" else "max_amt"
pr.set(target_field, child_doc_fields.get(field))
pr.promotional_scheme_id = child_doc_fields.name
pr.promotional_scheme = doc.name

View File

@@ -90,6 +90,23 @@ class TestPromotionalScheme(unittest.TestCase):
price_rules = frappe.get_all("Pricing Rule", filters={"promotional_scheme": ps.name})
self.assertEqual(price_rules, [])
def test_min_max_amount_configuration(self):
ps = make_promotional_scheme()
ps.price_discount_slabs[0].min_amount = 10
ps.price_discount_slabs[0].max_amount = 1000
ps.save()
price_rules_data = frappe.db.get_value(
"Pricing Rule", {"promotional_scheme": ps.name}, ["min_amt", "max_amt"], as_dict=1
)
self.assertEqual(price_rules_data.min_amt, 10)
self.assertEqual(price_rules_data.max_amt, 1000)
frappe.delete_doc("Promotional Scheme", ps.name)
price_rules = frappe.get_all("Pricing Rule", filters={"promotional_scheme": ps.name})
self.assertEqual(price_rules, [])
def make_promotional_scheme(**args):
args = frappe._dict(args)

View File

@@ -31,7 +31,7 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
super.onload();
// Ignore linked advances
this.frm.ignore_doctypes_on_cancel_all = ['Journal Entry', 'Payment Entry'];
this.frm.ignore_doctypes_on_cancel_all = ['Journal Entry', 'Payment Entry', 'Purchase Invoice'];
if(!this.frm.doc.__islocal) {
// show credit_to in print format
@@ -81,7 +81,7 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
}
if(doc.docstatus == 1 && doc.outstanding_amount != 0
&& !(doc.is_return && doc.return_against)) {
&& !(doc.is_return && doc.return_against) && !doc.on_hold) {
this.frm.add_custom_button(__('Payment'), this.make_payment_entry, __('Create'));
cur_frm.page.set_inner_btn_group_as_primary(__('Create'));
}
@@ -99,7 +99,7 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
}
}
if (doc.outstanding_amount > 0 && !cint(doc.is_return)) {
if (doc.outstanding_amount > 0 && !cint(doc.is_return) && !doc.on_hold) {
cur_frm.add_custom_button(__('Payment Request'), function() {
me.make_payment_request()
}, __('Create'));
@@ -569,6 +569,10 @@ frappe.ui.form.on("Purchase Invoice", {
erpnext.queries.setup_queries(frm, "Warehouse", function() {
return erpnext.queries.warehouse(frm.doc);
});
if (frm.is_new()) {
frm.clear_table("tax_withheld_vouchers");
}
},
is_subcontracted: function(frm) {

View File

@@ -12,39 +12,27 @@
"supplier",
"supplier_name",
"tax_id",
"due_date",
"tax_withholding_category",
"column_break1",
"company",
"column_break_6",
"posting_date",
"posting_time",
"set_posting_time",
"due_date",
"column_break1",
"is_paid",
"is_return",
"return_against",
"apply_tds",
"tax_withholding_category",
"amended_from",
"accounting_dimensions_section",
"cost_center",
"dimension_col_break",
"project",
"supplier_invoice_details",
"bill_no",
"column_break_15",
"bill_date",
"returns",
"return_against",
"section_addresses",
"supplier_address",
"address_display",
"contact_person",
"contact_display",
"contact_mobile",
"contact_email",
"col_break_address",
"shipping_address",
"shipping_address_display",
"billing_address",
"billing_address_display",
"accounting_dimensions_section",
"cost_center",
"dimension_col_break",
"project",
"currency_and_price_list",
"currency",
"conversion_rate",
@@ -54,37 +42,36 @@
"plc_conversion_rate",
"ignore_pricing_rule",
"sec_warehouse",
"set_warehouse",
"rejected_warehouse",
"col_break_warehouse",
"set_from_warehouse",
"supplier_warehouse",
"is_subcontracted",
"items_section",
"update_stock",
"scan_barcode",
"col_break_warehouse",
"update_stock",
"set_warehouse",
"set_from_warehouse",
"is_subcontracted",
"rejected_warehouse",
"supplier_warehouse",
"items_section",
"items",
"pricing_rule_details",
"pricing_rules",
"raw_materials_supplied",
"supplied_items",
"section_break_26",
"total_qty",
"total_net_weight",
"column_break_50",
"base_total",
"base_net_total",
"column_break_28",
"total_net_weight",
"total",
"net_total",
"tax_withholding_net_total",
"base_tax_withholding_net_total",
"taxes_section",
"taxes_and_charges",
"column_break_58",
"tax_category",
"column_break_49",
"shipping_rule",
"incoterm",
"section_break_51",
"taxes_and_charges",
"taxes",
"sec_tax_breakup",
"other_charges_calculation",
"totals",
"base_taxes_and_charges_added",
"base_taxes_and_charges_deducted",
@@ -93,13 +80,6 @@
"taxes_and_charges_added",
"taxes_and_charges_deducted",
"total_taxes_and_charges",
"section_break_44",
"apply_discount_on",
"base_discount_amount",
"additional_discount_account",
"column_break_46",
"additional_discount_percentage",
"discount_amount",
"section_break_49",
"base_grand_total",
"base_rounding_adjustment",
@@ -113,24 +93,57 @@
"total_advance",
"outstanding_amount",
"disable_rounded_total",
"section_break_44",
"apply_discount_on",
"base_discount_amount",
"column_break_46",
"additional_discount_percentage",
"discount_amount",
"tax_withheld_vouchers_section",
"tax_withheld_vouchers",
"sec_tax_breakup",
"other_charges_calculation",
"pricing_rule_details",
"pricing_rules",
"raw_materials_supplied",
"supplied_items",
"payments_tab",
"payments_section",
"mode_of_payment",
"cash_bank_account",
"base_paid_amount",
"clearance_date",
"col_br_payments",
"cash_bank_account",
"paid_amount",
"base_paid_amount",
"advances_section",
"allocate_advances_automatically",
"get_advances",
"advances",
"advance_tax",
"write_off",
"write_off_amount",
"base_write_off_amount",
"column_break_61",
"write_off_account",
"write_off_cost_center",
"advances_section",
"allocate_advances_automatically",
"get_advances",
"advances",
"advance_tax",
"address_and_contact_tab",
"section_addresses",
"supplier_address",
"address_display",
"col_break_address",
"contact_person",
"contact_display",
"contact_mobile",
"contact_email",
"company_shipping_address_section",
"shipping_address",
"column_break_126",
"shipping_address_display",
"company_billing_address_section",
"billing_address",
"column_break_130",
"billing_address_display",
"terms_tab",
"payment_schedule_section",
"payment_terms_template",
"ignore_default_payment_terms_template",
@@ -138,23 +151,11 @@
"terms_section_break",
"tc_name",
"terms",
"printing_settings",
"letter_head",
"select_print_heading",
"column_break_112",
"group_same_items",
"language",
"sb_14",
"on_hold",
"release_date",
"cb_17",
"hold_comment",
"more_info",
"more_info_tab",
"status_section",
"status",
"inter_company_invoice_reference",
"represents_company",
"column_break_147",
"is_internal_supplier",
"column_break_177",
"per_received",
"accounting_details_section",
"credit_to",
"party_account_currency",
@@ -162,15 +163,32 @@
"against_expense_account",
"column_break_63",
"unrealized_profit_loss_account",
"remarks",
"subscription_section",
"from_date",
"to_date",
"column_break_114",
"auto_repeat",
"update_auto_repeat_reference",
"per_received",
"is_old_subcontracting_flow"
"column_break_114",
"from_date",
"to_date",
"printing_settings",
"letter_head",
"group_same_items",
"column_break_112",
"select_print_heading",
"language",
"sb_14",
"on_hold",
"release_date",
"cb_17",
"hold_comment",
"additional_info_section",
"is_internal_supplier",
"represents_company",
"column_break_147",
"inter_company_invoice_reference",
"is_old_subcontracting_flow",
"remarks",
"connections_tab",
"column_break_38"
],
"fields": [
{
@@ -353,7 +371,7 @@
"collapsible_depends_on": "bill_no",
"fieldname": "supplier_invoice_details",
"fieldtype": "Section Break",
"label": "Supplier Invoice Details"
"label": "Supplier Invoice"
},
{
"fieldname": "bill_no",
@@ -376,12 +394,6 @@
"oldfieldtype": "Date",
"print_hide": 1
},
{
"depends_on": "return_against",
"fieldname": "returns",
"fieldtype": "Section Break",
"label": "Returns"
},
{
"depends_on": "return_against",
"fieldname": "return_against",
@@ -393,10 +405,9 @@
"read_only": 1
},
{
"collapsible": 1,
"fieldname": "section_addresses",
"fieldtype": "Section Break",
"label": "Address and Contact"
"label": "Supplier Address"
},
{
"fieldname": "supplier_address",
@@ -512,17 +523,17 @@
"fieldname": "ignore_pricing_rule",
"fieldtype": "Check",
"label": "Ignore Pricing Rule",
"no_copy": 1,
"permlevel": 1,
"print_hide": 1
},
{
"fieldname": "sec_warehouse",
"fieldtype": "Section Break"
"fieldtype": "Section Break",
"hide_border": 1,
"label": "Items"
},
{
"depends_on": "update_stock",
"description": "Sets 'Accepted Warehouse' in each row of the items table.",
"fieldname": "set_warehouse",
"fieldtype": "Link",
"label": "Set Accepted Warehouse",
@@ -531,7 +542,6 @@
},
{
"depends_on": "update_stock",
"description": "Warehouse where you are maintaining stock of rejected items",
"fieldname": "rejected_warehouse",
"fieldtype": "Link",
"label": "Rejected Warehouse",
@@ -554,6 +564,7 @@
{
"fieldname": "items_section",
"fieldtype": "Section Break",
"hide_border": 1,
"oldfieldtype": "Section Break",
"options": "fa fa-shopping-cart"
},
@@ -581,6 +592,7 @@
"reqd": 1
},
{
"collapsible": 1,
"fieldname": "pricing_rule_details",
"fieldtype": "Section Break",
"label": "Pricing Rules"
@@ -593,6 +605,7 @@
"read_only": 1
},
{
"collapsible": 1,
"collapsible_depends_on": "supplied_items",
"fieldname": "raw_materials_supplied",
"fieldtype": "Section Break",
@@ -656,6 +669,7 @@
"read_only": 1
},
{
"depends_on": "total_net_weight",
"fieldname": "total_net_weight",
"fieldtype": "Float",
"label": "Total Net Weight",
@@ -665,6 +679,8 @@
{
"fieldname": "taxes_section",
"fieldtype": "Section Break",
"hide_border": 1,
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "fa fa-money"
},
@@ -688,7 +704,8 @@
},
{
"fieldname": "section_break_51",
"fieldtype": "Section Break"
"fieldtype": "Section Break",
"hide_border": 1
},
{
"fieldname": "taxes_and_charges",
@@ -792,7 +809,6 @@
},
{
"collapsible": 1,
"collapsible_depends_on": "discount_amount",
"fieldname": "section_break_44",
"fieldtype": "Section Break",
"label": "Additional Discount"
@@ -832,7 +848,8 @@
},
{
"fieldname": "section_break_49",
"fieldtype": "Section Break"
"fieldtype": "Section Break",
"label": "Totals"
},
{
"fieldname": "base_grand_total",
@@ -1003,8 +1020,6 @@
},
{
"collapsible": 1,
"collapsible_depends_on": "write_off_amount",
"depends_on": "grand_total",
"fieldname": "write_off",
"fieldtype": "Section Break",
"label": "Write Off"
@@ -1081,7 +1096,6 @@
"print_hide": 1
},
{
"collapsible": 1,
"collapsible_depends_on": "eval:(!doc.is_return)",
"fieldname": "payment_schedule_section",
"fieldtype": "Section Break",
@@ -1102,8 +1116,6 @@
"print_hide": 1
},
{
"collapsible": 1,
"collapsible_depends_on": "terms",
"fieldname": "terms_section_break",
"fieldtype": "Section Break",
"label": "Terms and Conditions",
@@ -1119,13 +1131,13 @@
{
"fieldname": "terms",
"fieldtype": "Text Editor",
"label": "Terms and Conditions1"
"label": "Terms and Conditions"
},
{
"collapsible": 1,
"fieldname": "printing_settings",
"fieldtype": "Section Break",
"label": "Printing Settings"
"label": "Print Settings"
},
{
"allow_on_submit": 1,
@@ -1166,15 +1178,6 @@
"print_hide": 1,
"read_only": 1
},
{
"collapsible": 1,
"fieldname": "more_info",
"fieldtype": "Section Break",
"label": "More Information",
"oldfieldtype": "Section Break",
"options": "fa fa-file-text",
"print_hide": 1
},
{
"default": "0",
"fetch_from": "supplier.is_internal_supplier",
@@ -1260,7 +1263,7 @@
"collapsible": 1,
"fieldname": "subscription_section",
"fieldtype": "Section Break",
"label": "Subscription Section",
"label": "Subscription",
"print_hide": 1
},
{
@@ -1339,7 +1342,7 @@
},
{
"depends_on": "eval:doc.is_internal_supplier",
"description": "Unrealized Profit / Loss account for intra-company transfers",
"description": "Unrealized Profit/Loss account for intra-company transfers",
"fieldname": "unrealized_profit_loss_account",
"fieldtype": "Link",
"label": "Unrealized Profit / Loss Account",
@@ -1356,7 +1359,6 @@
},
{
"depends_on": "eval:doc.update_stock && doc.is_internal_supplier",
"description": "Sets 'From Warehouse' in each row of the items table.",
"fieldname": "set_from_warehouse",
"fieldtype": "Link",
"label": "Set From Warehouse",
@@ -1367,7 +1369,7 @@
"width": "50px"
},
{
"depends_on": "eval:doc.is_subcontracted",
"depends_on": "eval:doc.is_subcontracted",
"fieldname": "supplier_warehouse",
"fieldtype": "Link",
"label": "Supplier Warehouse",
@@ -1386,12 +1388,6 @@
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "additional_discount_account",
"fieldtype": "Link",
"label": "Additional Discount Account",
"options": "Account"
},
{
"default": "0",
"fieldname": "ignore_default_payment_terms_template",
@@ -1426,13 +1422,132 @@
"hidden": 1,
"label": "Is Old Subcontracting Flow",
"read_only": 1
}
},
{
"default": "0",
"fieldname": "tax_withholding_net_total",
"fieldtype": "Currency",
"hidden": 1,
"label": "Tax Withholding Net Total",
"no_copy": 1,
"options": "currency",
"read_only": 1
},
{
"fieldname": "base_tax_withholding_net_total",
"fieldtype": "Currency",
"hidden": 1,
"label": "Base Tax Withholding Net Total",
"no_copy": 1,
"options": "currency",
"print_hide": 1,
"read_only": 1
},
{
"collapsible_depends_on": "tax_withheld_vouchers",
"fieldname": "tax_withheld_vouchers_section",
"fieldtype": "Section Break",
"label": "Tax Withheld Vouchers"
},
{
"fieldname": "tax_withheld_vouchers",
"fieldtype": "Table",
"label": "Tax Withheld Vouchers",
"no_copy": 1,
"options": "Tax Withheld Vouchers",
"read_only": 1
},
{
"fieldname": "payments_tab",
"fieldtype": "Tab Break",
"label": "Payments"
},
{
"fieldname": "address_and_contact_tab",
"fieldtype": "Tab Break",
"label": "Address & Contact"
},
{
"fieldname": "terms_tab",
"fieldtype": "Tab Break",
"label": "Terms"
},
{
"fieldname": "more_info_tab",
"fieldtype": "Tab Break",
"label": "More Info"
},
{
"fieldname": "connections_tab",
"fieldtype": "Tab Break",
"label": "Connections",
"show_dashboard": 1
},
{
"fieldname": "column_break_6",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_38",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_50",
"fieldtype": "Column Break"
},
{
"fieldname": "column_break_58",
"fieldtype": "Column Break"
},
{
"fieldname": "company_shipping_address_section",
"fieldtype": "Section Break",
"label": "Company Shipping Address"
},
{
"fieldname": "column_break_126",
"fieldtype": "Column Break"
},
{
"fieldname": "company_billing_address_section",
"fieldtype": "Section Break",
"label": "Company Billing Address"
},
{
"fieldname": "column_break_130",
"fieldtype": "Column Break"
},
{
"collapsible": 1,
"fieldname": "status_section",
"fieldtype": "Section Break",
"label": "Status"
},
{
"fieldname": "column_break_177",
"fieldtype": "Column Break"
},
{
"collapsible": 1,
"fieldname": "additional_info_section",
"fieldtype": "Section Break",
"label": "Additional Info",
"oldfieldtype": "Section Break",
"options": "fa fa-file-text",
"print_hide": 1
},
{
"fieldname": "incoterm",
"fieldtype": "Link",
"label": "Incoterm",
"options": "Incoterm"
}
],
"icon": "fa fa-file-text",
"idx": 204,
"is_submittable": 1,
"links": [],
"modified": "2022-06-15 15:40:58.527065",
"modified": "2022-11-25 12:44:29.935567",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice",
@@ -1492,6 +1607,7 @@
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"timeline_field": "supplier",
"title_field": "title",
"track_changes": 1

View File

@@ -71,6 +71,9 @@ class PurchaseInvoice(BuyingController):
supplier_tds = frappe.db.get_value("Supplier", self.supplier, "tax_withholding_category")
self.set_onload("supplier_tds", supplier_tds)
if self.is_new():
self.set("tax_withheld_vouchers", [])
def before_save(self):
if not self.on_hold:
self.release_date = ""
@@ -150,8 +153,8 @@ class PurchaseInvoice(BuyingController):
def set_missing_values(self, for_validate=False):
if not self.credit_to:
self.credit_to = get_party_account("Supplier", self.supplier, self.company)
self.party_account_currency = frappe.db.get_value(
"Account", self.credit_to, "account_currency", cache=True
self.party_account_currency = frappe.get_cached_value(
"Account", self.credit_to, "account_currency"
)
if not self.due_date:
self.due_date = get_due_date(
@@ -172,7 +175,7 @@ class PurchaseInvoice(BuyingController):
if not self.credit_to:
self.raise_missing_debit_credit_account_error("Supplier", self.supplier)
account = frappe.db.get_value(
account = frappe.get_cached_value(
"Account", self.credit_to, ["account_type", "report_type", "account_currency"], as_dict=True
)
@@ -228,7 +231,9 @@ class PurchaseInvoice(BuyingController):
)
if (
cint(frappe.db.get_single_value("Buying Settings", "maintain_same_rate")) and not self.is_return
cint(frappe.db.get_single_value("Buying Settings", "maintain_same_rate"))
and not self.is_return
and not self.is_internal_supplier
):
self.validate_rate_with_reference_doc(
[
@@ -575,7 +580,6 @@ class PurchaseInvoice(BuyingController):
self.make_supplier_gl_entry(gl_entries)
self.make_item_gl_entries(gl_entries)
self.make_discount_gl_entries(gl_entries)
if self.check_asset_cwip_enabled():
self.get_asset_gl_entry(gl_entries)
@@ -604,7 +608,7 @@ class PurchaseInvoice(BuyingController):
def make_supplier_gl_entry(self, gl_entries):
# Checked both rounding_adjustment and rounded_total
# because rounded_total had value even before introcution of posting GLE based on rounded total
# because rounded_total had value even before introduction of posting GLE based on rounded total
grand_total = (
self.rounded_total if (self.rounding_adjustment and self.rounded_total) else self.grand_total
)
@@ -670,11 +674,8 @@ class PurchaseInvoice(BuyingController):
exchange_rate_map, net_rate_map = get_purchase_document_details(self)
enable_discount_accounting = cint(
frappe.db.get_single_value("Buying Settings", "enable_discount_accounting")
)
provisional_accounting_for_non_stock_items = cint(
frappe.db.get_value(
frappe.get_cached_value(
"Company", self.company, "enable_provisional_accounting_for_non_stock_items"
)
)
@@ -709,6 +710,10 @@ class PurchaseInvoice(BuyingController):
)
)
credit_amount = item.base_net_amount
if self.is_internal_supplier and item.valuation_rate:
credit_amount = flt(item.valuation_rate * item.stock_qty)
# Intentionally passed negative debit amount to avoid incorrect GL Entry validation
gl_entries.append(
self.get_gl_dict(
@@ -718,7 +723,7 @@ class PurchaseInvoice(BuyingController):
"cost_center": item.cost_center,
"project": item.project or self.project,
"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
"debit": -1 * flt(item.base_net_amount, item.precision("base_net_amount")),
"debit": -1 * flt(credit_amount, item.precision("base_net_amount")),
},
warehouse_account[item.from_warehouse]["account_currency"],
item=item,
@@ -806,10 +811,7 @@ class PurchaseInvoice(BuyingController):
else item.deferred_expense_account
)
if not item.is_fixed_asset:
dummy, amount = self.get_amount_and_base_amount(item, enable_discount_accounting)
else:
amount = flt(item.base_net_amount + item.item_tax_amount, item.precision("base_net_amount"))
dummy, amount = self.get_amount_and_base_amount(item, None)
if provisional_accounting_for_non_stock_items:
if item.purchase_receipt:
@@ -981,7 +983,7 @@ class PurchaseInvoice(BuyingController):
asset_amount = flt(item.net_amount) + flt(item.item_tax_amount / self.conversion_rate)
base_asset_amount = flt(item.base_net_amount + item.item_tax_amount)
item_exp_acc_type = frappe.db.get_value("Account", item.expense_account, "account_type")
item_exp_acc_type = frappe.get_cached_value("Account", item.expense_account, "account_type")
if not item.expense_account or item_exp_acc_type not in [
"Asset Received But Not Billed",
"Fixed Asset",
@@ -1160,12 +1162,9 @@ class PurchaseInvoice(BuyingController):
def make_tax_gl_entries(self, gl_entries):
# tax table gl entries
valuation_tax = {}
enable_discount_accounting = cint(
frappe.db.get_single_value("Buying Settings", "enable_discount_accounting")
)
for tax in self.get("taxes"):
amount, base_amount = self.get_tax_amounts(tax, enable_discount_accounting)
amount, base_amount = self.get_tax_amounts(tax, None)
if tax.category in ("Total", "Valuation and Total") and flt(base_amount):
account_currency = get_account_currency(tax.account_head)
@@ -1250,15 +1249,6 @@ class PurchaseInvoice(BuyingController):
)
)
@property
def enable_discount_accounting(self):
if not hasattr(self, "_enable_discount_accounting"):
self._enable_discount_accounting = cint(
frappe.db.get_single_value("Buying Settings", "enable_discount_accounting")
)
return self._enable_discount_accounting
def make_internal_transfer_gl_entries(self, gl_entries):
if self.is_internal_transfer() and flt(self.base_total_taxes_and_charges):
account_currency = get_account_currency(self.unrealized_profit_loss_account)
@@ -1419,7 +1409,7 @@ class PurchaseInvoice(BuyingController):
self.repost_future_sle_and_gle()
self.update_project()
frappe.db.set(self, "status", "Cancelled")
self.db_set("status", "Cancelled")
unlink_inter_company_doc(self.doctype, self.name, self.inter_company_invoice_reference)
self.ignore_linked_doctypes = (
@@ -1427,6 +1417,7 @@ class PurchaseInvoice(BuyingController):
"Stock Ledger Entry",
"Repost Item Valuation",
"Payment Ledger Entry",
"Tax Withheld Vouchers",
)
self.update_advance_tax_references(cancel=1)
@@ -1471,6 +1462,7 @@ class PurchaseInvoice(BuyingController):
def update_billing_status_in_pr(self, update_modified=True):
updated_pr = []
po_details = []
for d in self.get("items"):
if d.pr_detail:
billed_amt = frappe.db.sql(
@@ -1488,7 +1480,10 @@ class PurchaseInvoice(BuyingController):
)
updated_pr.append(d.purchase_receipt)
elif d.po_detail:
updated_pr += update_billed_amount_based_on_po(d.po_detail, update_modified)
po_details.append(d.po_detail)
if po_details:
updated_pr += update_billed_amount_based_on_po(po_details, update_modified)
for pr in set(updated_pr):
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import update_billing_percentage
@@ -1520,7 +1515,7 @@ class PurchaseInvoice(BuyingController):
if not self.tax_withholding_category:
return
tax_withholding_details, advance_taxes = get_party_tax_withholding_details(
tax_withholding_details, advance_taxes, voucher_wise_amount = get_party_tax_withholding_details(
self, self.tax_withholding_category
)
@@ -1549,6 +1544,19 @@ class PurchaseInvoice(BuyingController):
for d in to_remove:
self.remove(d)
## Add pending vouchers on which tax was withheld
self.set("tax_withheld_vouchers", [])
for voucher_no, voucher_details in voucher_wise_amount.items():
self.append(
"tax_withheld_vouchers",
{
"voucher_name": voucher_no,
"voucher_type": voucher_details.get("voucher_type"),
"taxable_amount": voucher_details.get("amount"),
},
)
# calculate totals again after applying TDS
self.calculate_taxes_and_totals()
@@ -1791,4 +1799,6 @@ def make_purchase_receipt(source_name, target_doc=None):
target_doc,
)
doc.set_onload("ignore_price_list", True)
return doc

View File

@@ -63,7 +63,7 @@ frappe.listview_settings["Purchase Invoice"] = {
});
listview.page.add_action_item(__("Payment"), ()=>{
erpnext.bulk_transaction_processing.create(listview, "Purchase Invoice", "Payment");
erpnext.bulk_transaction_processing.create(listview, "Purchase Invoice", "Payment Entry");
});
}
};

View File

@@ -338,59 +338,6 @@ class TestPurchaseInvoice(unittest.TestCase, StockTestMixin):
self.assertEqual(discrepancy_caused_by_exchange_rate_diff, amount)
@change_settings("Buying Settings", {"enable_discount_accounting": 1})
def test_purchase_invoice_with_discount_accounting_enabled(self):
discount_account = create_account(
account_name="Discount Account",
parent_account="Indirect Expenses - _TC",
company="_Test Company",
)
pi = make_purchase_invoice(discount_account=discount_account, rate=45)
expected_gle = [
["_Test Account Cost for Goods Sold - _TC", 250.0, 0.0, nowdate()],
["Creditors - _TC", 0.0, 225.0, nowdate()],
["Discount Account - _TC", 0.0, 25.0, nowdate()],
]
check_gl_entries(self, pi.name, expected_gle, nowdate())
@change_settings("Buying Settings", {"enable_discount_accounting": 1})
def test_additional_discount_for_purchase_invoice_with_discount_accounting_enabled(self):
additional_discount_account = create_account(
account_name="Discount Account",
parent_account="Indirect Expenses - _TC",
company="_Test Company",
)
pi = make_purchase_invoice(do_not_save=1, parent_cost_center="Main - _TC")
pi.apply_discount_on = "Grand Total"
pi.additional_discount_account = additional_discount_account
pi.additional_discount_percentage = 10
pi.disable_rounded_total = 1
pi.append(
"taxes",
{
"charge_type": "On Net Total",
"account_head": "_Test Account VAT - _TC",
"cost_center": "Main - _TC",
"description": "Test",
"rate": 10,
},
)
pi.submit()
expected_gle = [
["_Test Account Cost for Goods Sold - _TC", 250.0, 0.0, nowdate()],
["_Test Account VAT - _TC", 25.0, 0.0, nowdate()],
["Creditors - _TC", 0.0, 247.5, nowdate()],
["Discount Account - _TC", 0.0, 27.5, nowdate()],
]
check_gl_entries(self, pi.name, expected_gle, nowdate())
def test_purchase_invoice_change_naming_series(self):
pi = frappe.copy_doc(test_records[1])
pi.insert()
@@ -1596,6 +1543,37 @@ class TestPurchaseInvoice(unittest.TestCase, StockTestMixin):
pi.save()
self.assertEqual(pi.items[0].conversion_factor, 1000)
def test_batch_expiry_for_purchase_invoice(self):
from erpnext.controllers.sales_and_purchase_return import make_return_doc
item = self.make_item(
"_Test Batch Item For Return Check",
{
"is_purchase_item": 1,
"is_stock_item": 1,
"has_batch_no": 1,
"create_new_batch": 1,
"batch_number_series": "TBIRC.#####",
},
)
pi = make_purchase_invoice(
qty=1,
item_code=item.name,
update_stock=True,
)
pi.load_from_db()
batch_no = pi.items[0].batch_no
self.assertTrue(batch_no)
frappe.db.set_value("Batch", batch_no, "expiry_date", add_days(nowdate(), -1))
return_pi = make_return_doc(pi.doctype, pi.name)
return_pi.save().submit()
self.assertTrue(return_pi.docstatus == 1)
def check_gl_entries(doc, voucher_no, expected_gle, posting_date):
gl_entries = frappe.db.sql(

View File

@@ -49,6 +49,7 @@
"pricing_rules",
"stock_uom_rate",
"is_free_item",
"apply_tds",
"section_break_22",
"net_rate",
"net_amount",
@@ -74,7 +75,6 @@
"manufacturer_part_no",
"accounting",
"expense_account",
"discount_account",
"col_break5",
"is_fixed_asset",
"asset_location",
@@ -215,6 +215,7 @@
"reqd": 1
},
{
"default": "1",
"depends_on": "eval:doc.uom != doc.stock_uom",
"fieldname": "conversion_factor",
"fieldtype": "Float",
@@ -712,6 +713,7 @@
"label": "Valuation Rate",
"no_copy": 1,
"options": "Company:company:default_currency",
"precision": "6",
"print_hide": 1,
"read_only": 1
},
@@ -820,6 +822,7 @@
},
{
"collapsible": 1,
"collapsible_depends_on": "eval: doc.margin_type || doc.discount_amount",
"fieldname": "section_break_26",
"fieldtype": "Section Break",
"label": "Discount and Margin"
@@ -860,24 +863,24 @@
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "discount_account",
"fieldtype": "Link",
"label": "Discount Account",
"options": "Account"
},
{
"fieldname": "product_bundle",
"fieldtype": "Link",
"label": "Product Bundle",
"options": "Product Bundle",
"read_only": 1
},
{
"default": "1",
"fieldname": "apply_tds",
"fieldtype": "Check",
"label": "Apply TDS"
}
],
"idx": 1,
"istable": 1,
"links": [],
"modified": "2022-06-17 05:31:10.520171",
"modified": "2022-11-29 13:01:20.438217",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice Item",

View File

@@ -0,0 +1,53 @@
// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Repost Payment Ledger', {
setup: function(frm) {
frm.set_query("voucher_type", () => {
return {
filters: {
name: ['in', ['Purchase Invoice', 'Sales Invoice', 'Payment Entry', 'Journal Entry']]
}
};
});
frm.fields_dict['repost_vouchers'].grid.get_field('voucher_type').get_query = function(doc) {
return {
filters: {
name: ['in', ['Purchase Invoice', 'Sales Invoice', 'Payment Entry', 'Journal Entry']]
}
}
}
frm.fields_dict['repost_vouchers'].grid.get_field('voucher_no').get_query = function(doc) {
if (doc.company) {
return {
filters: {
company: doc.company,
docstatus: 1
}
}
}
}
},
refresh: function(frm) {
if (frm.doc.docstatus==1 && ['Queued', 'Failed'].find(x => x == frm.doc.repost_status)) {
frm.set_intro(__("Use 'Repost in background' button to trigger background job. Job can only be triggered when document is in Queued or Failed status."));
var btn_label = __("Repost in background")
frm.add_custom_button(btn_label, () => {
frappe.call({
method: 'erpnext.accounts.doctype.repost_payment_ledger.repost_payment_ledger.execute_repost_payment_ledger',
args: {
docname: frm.doc.name,
}
});
frappe.msgprint(__('Reposting in the background.'));
});
}
}
});

View File

@@ -0,0 +1,159 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2022-10-19 21:59:33.553852",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"filters_section",
"company",
"posting_date",
"column_break_4",
"voucher_type",
"add_manually",
"status_section",
"repost_status",
"repost_error_log",
"selected_vouchers_section",
"repost_vouchers",
"amended_from"
],
"fields": [
{
"default": "Today",
"fieldname": "posting_date",
"fieldtype": "Date",
"label": "Posting Date",
"reqd": 1
},
{
"fieldname": "voucher_type",
"fieldtype": "Link",
"label": "Voucher Type",
"options": "DocType"
},
{
"fieldname": "amended_from",
"fieldtype": "Link",
"label": "Amended From",
"no_copy": 1,
"options": "Repost Payment Ledger",
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "company",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company",
"options": "Company",
"reqd": 1
},
{
"fieldname": "selected_vouchers_section",
"fieldtype": "Section Break",
"label": "Vouchers"
},
{
"fieldname": "filters_section",
"fieldtype": "Section Break",
"label": "Filters"
},
{
"fieldname": "column_break_4",
"fieldtype": "Column Break"
},
{
"fieldname": "repost_vouchers",
"fieldtype": "Table",
"label": "Selected Vouchers",
"options": "Repost Payment Ledger Items"
},
{
"fieldname": "repost_status",
"fieldtype": "Select",
"label": "Repost Status",
"options": "\nQueued\nFailed\nCompleted",
"read_only": 1
},
{
"fieldname": "status_section",
"fieldtype": "Section Break",
"label": "Status"
},
{
"default": "0",
"description": "Ignore Voucher Type filter and Select Vouchers Manually",
"fieldname": "add_manually",
"fieldtype": "Check",
"label": "Add Manually"
},
{
"depends_on": "eval:doc.repost_error_log",
"fieldname": "repost_error_log",
"fieldtype": "Long Text",
"label": "Repost Error Log"
}
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
"modified": "2022-11-08 07:38:40.079038",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Repost Payment Ledger",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
},
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"share": 1,
"submit": 1,
"write": 1
},
{
"create": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts User",
"share": 1,
"write": 1
},
{
"email": 1,
"export": 1,
"permlevel": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"share": 1,
"write": 1
}
],
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@@ -0,0 +1,111 @@
# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
import copy
import frappe
from frappe import _, qb
from frappe.model.document import Document
from frappe.query_builder.custom import ConstantColumn
from frappe.utils.background_jobs import is_job_queued
from erpnext.accounts.utils import _delete_pl_entries, create_payment_ledger_entry
VOUCHER_TYPES = ["Sales Invoice", "Purchase Invoice", "Payment Entry", "Journal Entry"]
def repost_ple_for_voucher(voucher_type, voucher_no, gle_map=None):
if voucher_type and voucher_no and gle_map:
_delete_pl_entries(voucher_type, voucher_no)
create_payment_ledger_entry(gle_map, cancel=0)
@frappe.whitelist()
def start_payment_ledger_repost(docname=None):
"""
Repost Payment Ledger Entries for Vouchers through Background Job
"""
if docname:
repost_doc = frappe.get_doc("Repost Payment Ledger", docname)
if repost_doc.docstatus == 1 and repost_doc.repost_status in ["Queued", "Failed"]:
try:
for entry in repost_doc.repost_vouchers:
doc = frappe.get_doc(entry.voucher_type, entry.voucher_no)
if doc.doctype in ["Payment Entry", "Journal Entry"]:
gle_map = doc.build_gl_map()
else:
gle_map = doc.get_gl_entries()
repost_ple_for_voucher(entry.voucher_type, entry.voucher_no, gle_map)
frappe.db.set_value(repost_doc.doctype, repost_doc.name, "repost_error_log", "")
frappe.db.set_value(repost_doc.doctype, repost_doc.name, "repost_status", "Completed")
except Exception as e:
frappe.db.rollback()
traceback = frappe.get_traceback()
if traceback:
message = "Traceback: <br>" + traceback
frappe.db.set_value(repost_doc.doctype, repost_doc.name, "repost_error_log", message)
frappe.db.set_value(repost_doc.doctype, repost_doc.name, "repost_status", "Failed")
class RepostPaymentLedger(Document):
def __init__(self, *args, **kwargs):
super(RepostPaymentLedger, self).__init__(*args, **kwargs)
self.vouchers = []
def before_validate(self):
self.load_vouchers_based_on_filters()
self.set_status()
def load_vouchers_based_on_filters(self):
if not self.add_manually:
self.repost_vouchers.clear()
self.get_vouchers()
self.extend("repost_vouchers", copy.deepcopy(self.vouchers))
def get_vouchers(self):
self.vouchers.clear()
filter_on_voucher_types = [self.voucher_type] if self.voucher_type else VOUCHER_TYPES
for vtype in filter_on_voucher_types:
doc = qb.DocType(vtype)
doctype_name = ConstantColumn(vtype)
query = (
qb.from_(doc)
.select(doctype_name.as_("voucher_type"), doc.name.as_("voucher_no"))
.where(
(doc.docstatus == 1)
& (doc.company == self.company)
& (doc.posting_date.gte(self.posting_date))
)
)
entries = query.run(as_dict=True)
self.vouchers.extend(entries)
def set_status(self):
if self.docstatus == 0:
self.repost_status = "Queued"
def on_submit(self):
execute_repost_payment_ledger(self.name)
frappe.msgprint(_("Repost started in the background"))
@frappe.whitelist()
def execute_repost_payment_ledger(docname):
"""Repost Payment Ledger Entries by background job."""
job_name = "payment_ledger_repost_" + docname
if not is_job_queued(job_name):
frappe.enqueue(
method="erpnext.accounts.doctype.repost_payment_ledger.repost_payment_ledger.start_payment_ledger_repost",
docname=docname,
is_async=True,
job_name=job_name,
)

View File

@@ -0,0 +1,12 @@
frappe.listview_settings["Repost Payment Ledger"] = {
add_fields: ["repost_status"],
get_indicator: function(doc) {
var colors = {
'Queued': 'orange',
'Completed': 'green',
'Failed': 'red',
};
let status = doc.repost_status;
return [__(status), colors[status], 'status,=,'+status];
},
};

View File

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

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