Compare commits

..

1685 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
rohitwaghchaure
590e91bb80 Merge pull request #31750 from rohitwaghchaure/minor-fix-change-link
fix: minor URL link
2022-08-01 14:31:09 +05:30
Rohit Waghchaure
0e7c4314b4 fix: minor changed link 2022-08-01 14:03:12 +05:30
Marica
1a2ffc7c6e Merge pull request #31601 from pps190/pref-wh-wise-stock-value
perf: reduce db calls for warehouse wise stock value chart
2022-07-27 17:47:43 +05:30
HENRY Florian
cc1f837685 fix: update fr translations (#31687)
* fix: update fr translations

* fix: update fr translation

* fix: update fr translation

* chore: Replace apostrophe encoding by symbol

Co-authored-by: marination <maricadsouza221197@gmail.com>
2022-07-27 17:21:01 +05:30
Nabin Hait
67fefa37ce Merge pull request #31678 from nabinhait/crm-fixes-5
fix: mentions in notes, workspace links, no-of-employees field type and report fixes
2022-07-27 16:50:18 +05:30
Marica
53b6cea610 Merge pull request #31469 from marination/make-image-field-obsolete-in-web-item
chore: Make `image` field obsolete in Website Item (redundant)
2022-07-27 15:43:01 +05:30
Marica
4fa58d7931 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-07-27 14:53:03 +05:30
Suraj Shetty
273c6ff598 Merge pull request #31690 from phot0n/fix-payments-stuff 2022-07-27 14:37:15 +05:30
Marica
56db91b322 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-07-27 14:12:09 +05:30
marination
af38baeb3b fix: Map Item image to Website Item website_image only if published via UI (v13)
- For v12 Items, `website_image` should be mapped from `Item` to `Website Item`
2022-07-27 14:09:49 +05:30
phot0n
0048bcb067 chore: fix linter 2022-07-27 12:34:52 +05:30
phot0n
76493e928f ci: update install script and patch workflow to accomodate payments app 2022-07-27 12:21:48 +05:30
Nabin Hait
02dd174bc7 Merge branch 'develop' into crm-fixes-5 2022-07-27 11:56:36 +05:30
Deepesh Garg
1e3918d637 Merge pull request #31286 from SolufyPrivateLimited/solufy_rec_pay_report
fix: Added total of future amount, Remaining Balance in Payable and Receivable reports
2022-07-27 08:26:16 +05:30
rohitwaghchaure
cdec6f60de Merge pull request #31681 from rohitwaghchaure/dont-show-zero-qty-data-in-report
fix: dont show zero qty available items in stock ageing report
2022-07-27 00:44:11 +05:30
mergify[bot]
5b7b58322f fix: hero image not loading in portal homepage (backport #31699) (#31700)
fix: hero image not loading in portal homepage (#31699)

(cherry picked from commit 8a6432ec3f)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2022-07-26 13:46:03 +05:30
Sagar Vora
c6fbb7b27d Revert "docs: improve README"
This reverts commit 38e71b0639.
2022-07-26 13:09:46 +05:30
Sagar Vora
38e71b0639 docs: improve README 2022-07-26 13:08:39 +05:30
Deepesh Garg
98b42ce786 Merge pull request #31676 from ruthra-kumar/fix_tax_withholding_checkbox_on_PI
fix: enable tax withholding checkbox in PI with supplier_tds
2022-07-25 12:56:29 +05:30
Marica
d2d651a0c3 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-07-25 12:43:08 +05:30
gavin
7b90986eb0 Merge pull request #31454 from gavindsouza/mariadb-client-refactor
fix: Misc enhancements
2022-07-25 12:22:42 +05:30
Gavin D'souza
3c26415b6f fix(gd): Scan FY only if current_fiscal_year set 2022-07-25 11:54:49 +05:30
Gavin D'souza
cb73528c9c test: Use assertSequenceEqual for comparision between Tuple / Lists
Use AssertSequence for type agnostic checks
2022-07-25 11:54:49 +05:30
Gavin D'souza
b07dd1083a ci: Check for conflicts & valid python in early separate step 2022-07-25 11:54:49 +05:30
ruthra kumar
9439a7fd30 Merge pull request #31576 from ruthra-kumar/return_not_updating_so_billed_percentage
fix: credite note for returned delivery note updates SO's billed percentage
2022-07-25 11:24:00 +05:30
phot0n
8004550444 fix: add payments as a required app for erpnext 2022-07-25 10:46:46 +05:30
phot0n
ef14da21bc fix: payment utils import paths
Since we're splitting payments app from frappe, updating
ERPnext paths as well
2022-07-25 10:38:09 +05:30
Rohit Waghchaure
5da7e01db2 fix: dont show zero qty available items in stock ageing report 2022-07-22 17:54:46 +05:30
Nabin Hait
29b8715205 fix: mentions in notes, workspace links, no-of-employees field type and report fixes 2022-07-22 15:33:39 +05:30
ruthra kumar
b461724416 fix: enable tax withholding checkbox in PI with supplier_tds 2022-07-22 14:32:14 +05:30
Deepesh Garg
538f5a9964 Merge pull request #31497 from HarryPaulo/develop
fix: translated message for credit limit blocking
2022-07-22 14:22:58 +05:30
Deepesh Garg
80b354f1c7 Merge pull request #31656 from ruthra-kumar/use_current_profile_in_pos_return
fix: use current pos profile on sales return
2022-07-22 13:10:53 +05:30
Rucha Mahabal
7b0e5661c6 fix(patch): ignore links while deleting hr payroll doctypes (#31674) 2022-07-22 12:46:59 +05:30
Marica
6883fc95ae Merge pull request #31579 from pps190/fix-pl-customer-name
fix: display customer name on picking list
2022-07-21 18:38:08 +05:30
billy995
8629d01dd5 Update de.csv (#31596)
IN,IM to IN,EIN

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2022-07-21 14:49:11 +05:30
HENRY Florian
3ba0d6cc5c fix: update fr translations (#31526)
* fix: update fr translations

* fix: update fr translations

* fix: update fr translations

* fix: update fr translations

* chore: Update french translation

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2022-07-21 14:48:42 +05:30
mergify[bot]
89f516c32b fix: assign duplicate_items_msg outside conditional (backport #31639) (#31650)
fix: assign duplicate_items_msg outside conditional (#31639)

duplicate_items_msg was defined inside if the statement  of stock_item so when duplicate was found in non_stock_item it raised referenced before assignment

(cherry picked from commit 8e23c6ad69)

Co-authored-by: Maharshi Patel <39730881+maharshivpatel@users.noreply.github.com>
2022-07-21 13:57:03 +05:30
Marc de Lima Lucio
048c037842 FIX: quality inspection quick creation from purchase receipt: pre-fill sample size if available (#31544)
FIX: quality inspection quick creation from transaction documents: pre-fill sample size if available

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2022-07-21 13:46:59 +05:30
Sagar Vora
bf2833b8ee fix: ensure defaults removed in bad frappe patch get set again (#31659) 2022-07-21 13:32:03 +05:30
ruthra kumar
243f66fcd3 test: SO percentage billed when cr_note made against delivery return 2022-07-21 13:05:34 +05:30
ruthra kumar
04c1019242 fix: update SO's percentage billed on credit note
Credit Note created from Sales Return will update precentage billed in
Sales Order accordingly
2022-07-21 13:05:34 +05:30
Marco Fonseca
d30f8387d9 fix: correct Brazilian portuguese translations (#31498)
* fix brazilian portuguese translations

* minor adjustments

* fix minor adjustments

* fix: remove legacy pt_br.csv

* chore: Fix translation quotation marks

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2022-07-21 12:59:04 +05:30
ruthra kumar
739d328412 Merge pull request #31537 from ruthra-kumar/add_index_to_payment_ledger
refactor: create index for payment ledger
2022-07-21 12:50:39 +05:30
Saqib Ansari
d578afab55 fix: rounding errors while closing pos (#31654) 2022-07-21 12:18:28 +05:30
Saqib Ansari
2eaa8b17bd fix(pos): validate product bundles while submitting pos invoice (#31615) 2022-07-21 12:17:58 +05:30
ruthra kumar
5b85af5f1a fix: use current pos profile on sales return 2022-07-21 12:16:16 +05:30
rohitwaghchaure
5a3999e236 Merge pull request #31424 from rohitwaghchaure/feat-inventory-dimension
feat: Inventory Dimension
2022-07-20 19:47:14 +05:30
Deepesh Garg
6d61525ae4 Merge pull request #31648 from deepeshgarg007/dimension-patch-fix
fix: Patch to make accounting dimension in orders
2022-07-20 19:02:00 +05:30
Deepesh Garg
cad2035e07 chore: do not re run patch 2022-07-20 19:01:14 +05:30
Deepesh Garg
d46e406db7 fix: Patch to make accounting dimension in orders 2022-07-20 18:59:36 +05:30
Rucha Mahabal
8b67d627d8 fix(patch): Remove missed records for HR & Payroll separation (#31646)
* fix(patch): delete HR Payroll custom fields from core

* fix: delete HR Payroll dashboard chart, number card, web forms
2022-07-20 18:56:37 +05:30
Rucha Mahabal
2b0b53f587 Merge pull request #31467 from ruchamahabal/hr-separation 2022-07-20 16:54:44 +05:30
Rohit Waghchaure
289e6cd4ce fix: change frappe.db.sql to frappe.qb 2022-07-20 16:02:13 +05:30
Rohit Waghchaure
e576f7f07e test: test cases for inventory dimension 2022-07-20 16:02:13 +05:30
Rohit Waghchaure
dbec5cff00 feat: Inventory Dimension 2022-07-20 16:02:13 +05:30
Rucha Mahabal
f222284c33 Merge branch 'develop' into hr-separation 2022-07-20 15:47:40 +05:30
Nabin Hait
409c2e98a9 Merge pull request #31628 from nabinhait/pcv-perf-enhancements-dev
perf: Optimization of gl entry processing logic in period closing voucher
2022-07-20 15:38:34 +05:30
Nabin Hait
4951a1f0e9 Merge pull request #31637 from nabinhait/asset-monthly-depreciation
fix: Removed 'Allow Monthly Depreciation' checkbox
2022-07-20 15:38:17 +05:30
Nabin Hait
e1fa723eef fix: set args to empty list if None to avoid enumerate error 2022-07-20 15:19:09 +05:30
Nabin Hait
b26438ccf7 test: Fixed test for WDV method depreciation schedule 2022-07-20 14:27:06 +05:30
Nabin Hait
6c29146c91 fix: Removed 'Allow Monthly Depreciation' checkbox 2022-07-20 14:27:06 +05:30
Rucha Mahabal
f2532a6aaa Merge branch 'develop' into hr-separation 2022-07-20 14:22:27 +05:30
Nabin Hait
516be870df fix: Renamed status field to gle_processing_status 2022-07-20 11:07:02 +05:30
Devin Slauenwhite
7083b3148b fix: make customer_name field read only. 2022-07-19 11:02:43 -04:00
Devin Slauenwhite
d3f0897420 Merge branch 'develop' into fix-pl-customer-name 2022-07-19 11:01:28 -04:00
rohitwaghchaure
60dbd6a246 Merge pull request #31631 from rohitwaghchaure/slow-stock-reposting-issue
fix: slow stock reposting
2022-07-19 18:47:23 +05:30
Rucha Mahabal
b30f66c029 chore: use get_single_value in place of get_value 2022-07-19 17:51:03 +05:30
Vladislav
756a7bcc5c fix: update ru translate (#31594)
* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* chore: Missing comma

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2022-07-19 17:35:08 +05:30
Rohit Waghchaure
1d80d37ccf fix: slow stock reposting 2022-07-19 16:36:22 +05:30
Nabin Hait
69b906438d fix: set status on submit/cancel 2022-07-19 15:05:56 +05:30
Ankush Menat
7788bc287c ci: stripped down semantic commit check 2022-07-19 14:59:42 +05:30
Nabin Hait
914a388ee3 test: Added test for PCV cancellation 2022-07-19 14:34:01 +05:30
Nabin Hait
4caaab32d1 perf: Optimization of gl entry processing logic in period closing voucher 2022-07-19 14:33:49 +05:30
Marica
a8179220be Merge pull request #31515 from marination/lcv-future-stock-update
fix: LCV updates wrong future qty/Bin qty
2022-07-19 13:39:39 +05:30
Rucha Mahabal
8ce526115d patch: Add HR & Payroll deprecation warning 2022-07-19 13:19:34 +05:30
Rucha Mahabal
eae39964e8 chore: Remove unused files 2022-07-19 13:04:07 +05:30
Marica
2a2db8c64a Merge branch 'develop' into lcv-future-stock-update 2022-07-19 12:53:51 +05:30
Ankush Menat
885e731872 ci: lint commit messages (#31625) 2022-07-19 12:00:53 +05:30
Deepesh Garg
a6ff4db2ec fix: Supplier details in TDS monthly report (#31599) 2022-07-19 10:14:44 +05:30
Rucha Mahabal
bc2c2aedad fix(minor): Remove extra space from translated string (#31617) 2022-07-18 13:48:14 +05:30
Wolfram Schmidt
340bf905ec fix: added Section translation in German for Salary Slip (#31608) 2022-07-18 13:33:51 +05:30
Ankush Menat
755a060ba7 refactor: dont force issue list options (#31613)
Setting route option forces the filters, only default filters should be
set and not forced for each visit.
2022-07-18 11:12:07 +05:30
Rucha Mahabal
2ae48fbdd4 Merge branch 'develop' into hr-separation 2022-07-18 10:58:22 +05:30
Deepesh Garg
b62028722e Merge pull request #31549 from resilient-tech/ic-lingering-code
chore: remove missed code for India localisation
2022-07-15 15:20:06 +05:30
Ankush Menat
67a74a4d14 fix: dont check first row on report load
- This doesn't actually load the chart but leaves UI and data in
  inconsistent state
- On refresh it randomly keeps toggling the first row - confusing
  behaviour.
2022-07-15 14:09:58 +05:30
Ankush Menat
ceeea6180e fix: dont override default report options in charts
Sales analytics and purchase analytics reports are clearing the default
options which includes number shortening, axis options etc. This makes
report unreadable when dealing with large numbers.
2022-07-15 14:09:58 +05:30
Devin Slauenwhite
1e20358c28 fix: sum stock_value and group by warehouse 2022-07-14 18:53:50 -04:00
Devin Slauenwhite
bc3023318e chore: remove unused import 2022-07-14 18:09:52 -04:00
Devin Slauenwhite
73ade04dcf pref: reduce count of db calls from n to 2 2022-07-14 18:09:08 -04:00
Sagar Vora
70c4117c22 fix: unlink custom fields in patch 2022-07-14 15:02:37 +05:30
Sagar Vora
be4a44fccd Merge remote-tracking branch 'upstream/develop' into ic-lingering-code 2022-07-14 14:36:14 +05:30
Rucha Mahabal
f765428757 chore: Remove HRMS templates 2022-07-14 11:59:06 +05:30
Rucha Mahabal
db586afc7b chore: Remove Salary Component Accounts doctype from Accounts module 2022-07-13 13:38:58 +05:30
Devin Slauenwhite
0a633a212d fix: display customer name on picking list 2022-07-12 13:05:40 -04:00
Rucha Mahabal
d8aa1c59f1 Merge branch 'develop' into hr-separation 2022-07-12 19:27:19 +05:30
Deepesh Garg
d7446fd3ae Merge pull request #31543 from lebmatter/loan_balance_adjustments
feat: Loan balance adjustment doctypes
2022-07-12 18:25:45 +05:30
marination
de9ea70ce3 test: LCV impact on future stock balancees 2022-07-12 13:00:00 +05:30
Ankush Menat
2224b6503b chore: typo
[skip ci]
2022-07-12 12:39:22 +05:30
Deepesh Garg
0bac030ca7 chore: Linting Issues 2022-07-11 22:04:52 +05:30
Deepesh Garg
d933ff5cf6 chore: Linting Issues 2022-07-11 21:50:01 +05:30
Deepesh Garg
9b40f70ac2 Merge branch 'develop' into add_index_to_payment_ledger 2022-07-11 21:18:10 +05:30
Deepesh Garg
0b822dade0 Merge pull request #31566 from deepeshgarg007/ignore_account_currency
fix: Allow multi currency invoice against single party account
2022-07-11 21:14:02 +05:30
Deepesh Garg
e04e67c6bf chore: fix query 2022-07-11 19:25:18 +05:30
Rucha Mahabal
5a51951224 test: Basic Payment Entry for Employee 2022-07-11 14:36:33 +05:30
Deepesh Garg
3cf609fab1 chore: Ignore validation 2022-07-11 13:46:59 +05:30
Deepesh Garg
c83fbd5c50 fix: Allow multi currency invoice against single party account 2022-07-11 13:43:01 +05:30
Rucha Mahabal
cd9a01be5f test: Loan entries in Bank Reco Statement report 2022-07-11 11:57:25 +05:30
Ankush Menat
3031592368 chore: form tour location
closes https://github.com/frappe/frappe/issues/17247

[skip ci]
2022-07-11 11:50:57 +05:30
Marica
681b334236 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-07-11 11:22:51 +05:30
Marica
18a8e3fd60 Merge pull request #31550 from marination/rfq-email-addressing
fix: Use Contact Name instead of Supplier in RFQ Email
2022-07-11 11:21:17 +05:30
ruthra kumar
74d9fc2155 refactor: create index for payment ledger 2022-07-11 11:17:27 +05:30
Rucha Mahabal
f6fb00b59d test: Matching Loan Repayment query in Bank Reco 2022-07-08 19:28:38 +05:30
Ankush Menat
4ec85cb2f0 test: don't silently fail reposts in tests (#31559) 2022-07-08 19:28:03 +05:30
Abhinav Raut
13b7ed1e2c fix: on cancel for loan refund 2022-07-08 17:58:36 +05:30
Labeeb Mattra
35f2717ad2 Consider refund_amount in pending principal amount 2022-07-08 17:53:29 +05:30
Labeeb Mattra
9df1413adb fix excess amount calculation in loan refund 2022-07-08 17:52:36 +05:30
Labeeb Mattra
245b0c7818 Update adjustment_type field options 2022-07-08 16:49:19 +05:30
Labeeb Mattra
6cc09ef3a2 fix adjustment amount field name 2022-07-08 16:38:41 +05:30
Marica
dc3d492c83 Merge branch 'develop' into rfq-email-addressing 2022-07-08 15:39:20 +05:30
marination
300e812a1f chore: Instantiate variable unconditionally 2022-07-08 15:38:44 +05:30
Nabin Hait
8b69a3ec7a Merge pull request #30955 from s-aga-r/subcontracting
feat: subcontracting module
2022-07-08 15:21:46 +05:30
Nabin Hait
a768b4cec3 Merge branch 'develop' into subcontracting 2022-07-08 15:21:03 +05:30
rohitwaghchaure
0c2e0693eb Merge pull request #31553 from s-aga-r/fix/job-card/report/status
fix: status filter in Job Card Summary
2022-07-08 11:56:18 +05:30
Sagar Sharma
57b6dab1da fix: status filter in Job Card Summary 2022-07-07 23:19:17 +05:30
Deepesh Garg
832a863d1e Merge pull request #31451 from Altizo/develop
fix: update ru translate
2022-07-07 21:15:22 +05:30
Deepesh Garg
5eb2e71f0f Merge branch 'develop' into develop 2022-07-07 21:15:03 +05:30
Rucha Mahabal
108cce2785 refactor: rewrite raw sql queries with frappe.qb and database API 2022-07-07 19:00:19 +05:30
Labeeb Mattra
0ed6382ab6 fix indent and imports 2022-07-07 17:40:50 +05:30
Rucha Mahabal
64075cbebc Merge branch 'develop' into hr-separation 2022-07-07 17:36:01 +05:30
Labeeb Mattra
8434ec09c3 fix lint 2022-07-07 17:20:21 +05:30
marination
88ac519b24 fix: Use Contact Name instead of Supplier in RFQ Email 2022-07-07 16:59:23 +05:30
Sagar Vora
93f87cb6e2 chore: remove missed code for India localisation 2022-07-07 16:41:41 +05:30
Ankush Menat
bc3f99321a refactor: department creation (#31548)
- all department creation always fails after first company, this is
handled in exception handling code but better to not attempt this in
first place.
- move department creation to company.py this has nothing to do with
  setup and previous function signature made no sense.
2022-07-07 16:05:18 +05:30
marination
7a6ee8cf2d chore: Remove image use in website item list 2022-07-07 14:25:02 +05:30
Rucha Mahabal
2248276fe9 chore: Remove gratuity rule patch 2022-07-07 13:48:59 +05:30
Rucha Mahabal
ef02e58859 Merge branch 'develop' into hr-separation 2022-07-07 13:46:54 +05:30
Deepesh Garg
0b5101d9c7 Merge pull request #31546 from deepeshgarg007/regional_quotation
fix: Unable to open quotation
2022-07-07 11:53:34 +05:30
Deepesh Garg
f73408bfd6 fix: Unable to open quotation 2022-07-07 10:47:48 +05:30
Sagar Sharma
f9885746a8 Merge branch 'develop' into subcontracting 2022-07-07 09:56:23 +05:30
Suraj Shetty
891fd70882 Merge pull request #31541 from surajshetty3416/update-library-usage 2022-07-07 09:41:05 +05:30
Suraj Shetty
c9dc902dee Merge branch 'develop' into update-library-usage 2022-07-07 09:40:21 +05:30
Labeeb Mattra
1b5b2138ee Use adjustment amounts in pending principal amnt 2022-07-06 18:52:04 +05:30
Labeeb Mattra
a1a51ce1a6 Add ref no to balance adjustment remarks 2022-07-06 18:52:04 +05:30
Labeeb Mattra
74dbf8c5d9 Add reference number to repayment remarks 2022-07-06 18:52:04 +05:30
Labeeb Mattra
27a8e16b28 Add NPA checkbox in Loan 2022-07-06 18:52:04 +05:30
Labeeb Mattra
7d6e4898c4 Update list view for Accrual and Shortfall 2022-07-06 18:52:04 +05:30
Labeeb Mattra
6febcd529b Remove loan account field from doctype 2022-07-06 18:52:04 +05:30
Labeeb Mattra
7d468a8778 Use new adjustment amount fields 2022-07-06 18:52:04 +05:30
Labeeb Mattra
d6f632a770 Seperate credit and debit adjust amount fields in Loan 2022-07-06 18:52:04 +05:30
Abhinav Raut
5c0a25012c feat: add adjustment amount to loan
- fix: bugs in loan balance adjustment
2022-07-06 18:52:04 +05:30
Labeeb Mattra
2e8f056514 Add Loan Balance Adjustment doctype 2022-07-06 18:52:04 +05:30
Labeeb Mattra
e1682965c5 Add Loan Refund doctype 2022-07-06 18:52:04 +05:30
Labeeb Mattra
88cd780ca1 Add refund amount to loan 2022-07-06 18:52:04 +05:30
Labeeb Mattra
a81da2ea85 Add more loan interest accrual types 2022-07-06 18:52:04 +05:30
Labeeb Mattra
900c878e03 update loan interest accrual types 2022-07-06 18:52:04 +05:30
Aditya Hase
7053bb9bb8 fix: Maintain backward compatibility with older bench versions (#31542)
Older versions of bench depend on `name` in setup.py

Setting it to `frappe` causes some weird behavior like moving `apps/erpnext` to `apps/frappe`
2022-07-06 17:32:21 +05:30
Suraj Shetty
f0e8a518cd fix: Update font awesome path 2022-07-06 15:10:39 +05:30
Suraj Shetty
32fd753a14 fix: Update html2text import path 2022-07-06 15:09:44 +05:30
Marica
b58d7d1c89 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-07-06 14:43:23 +05:30
rohitwaghchaure
8eb676eb5a Merge pull request #31519 from rohitwaghchaure/fixed-time-out-error-reposting
fix: timeout error while reposting
2022-07-06 11:45:02 +05:30
Marica
9b6bb1b3fc Merge pull request #31529 from marination/petty-purchase
fix: Use fallback conversion factor while setting incoming rate for petty purchase
2022-07-06 00:38:37 +05:30
Deepesh Garg
b785d7b904 Merge pull request #31531 from nihantra/pur_inv_docstatus
fix: Set the condition to create a purchase receipt
2022-07-05 22:47:17 +05:30
Nihantra C. Patel
3e670eda68 fix: Set the condition to create a purchase receipt 2022-07-05 21:19:50 +05:30
marination
eec07833f4 chore: Remove image from ProductQuery fields 2022-07-05 20:31:04 +05:30
marination
aa043fe961 fix: Use fallback conversion factor while setting incoming rate for petty purchase
- PIs for petty items (that do not need an Item record) are allowed using Item Name field
- If a different UOM is used in this case, conversion factor stays 0 and causes an error
- Fallback to 1 in `set_incoming_rate` for buying
- Selling will need a proper item, so this change is not needed there
2022-07-05 19:43:02 +05:30
rohitwaghchaure
96f46b220b Merge branch 'develop' into fixed-time-out-error-reposting 2022-07-05 19:23:46 +05:30
Deepesh Garg
37f7801cfb Merge pull request #29884 from resilient-tech/remove-india
refactor: remove India specific code
2022-07-05 18:50:41 +05:30
Rohit Waghchaure
78c8bb251e fix: timeout error while reposting 2022-07-05 18:45:13 +05:30
rohitwaghchaure
8835d16b60 Merge pull request #31514 from ruthra-kumar/fix_test_for_pr_tool
fix: test pr output for amount and currency
2022-07-05 18:35:01 +05:30
rohitwaghchaure
c2432778ef Merge branch 'develop' into fix_test_for_pr_tool 2022-07-05 17:18:50 +05:30
rohitwaghchaure
d5b0b5e798 Merge pull request #31523 from rohitwaghchaure/fixed-test-case-backflushed_batch-raw-materials
fix: test case
2022-07-05 15:10:59 +05:30
Rohit Waghchaure
7282c8e65b fix: test case 2022-07-05 15:10:28 +05:30
Sagar Sharma
f75d35ed60 Merge branch 'develop' into subcontracting 2022-07-05 11:25:08 +05:30
Ankush Menat
90942d2ba5 chore: remove currency info from boot (#31520)
refactor: remove currency info from boot

Framework loads this info by default now, so no need to add it here.
2022-07-05 11:22:32 +05:30
Sagar Sharma
a7161d3875 fix: SCO status on SCR cancel 2022-07-05 09:27:56 +05:30
Sagar Sharma
6f7e67db9d chore: hide "Duplicate" button in PO 2022-07-05 08:44:35 +05:30
Sagar Sharma
687329f571 chore: update fg_item_qty based on qty in PO Item 2022-07-05 08:31:31 +05:30
Deepesh Garg
d5da8c7403 Merge pull request #31516 from deepeshgarg007/previsional_accounting_report
fix: Incorrect provisional expense booking while reposting
2022-07-04 20:28:10 +05:30
Deepesh Garg
60aad31162 fix: Incorrect provisional expense booking while reposting 2022-07-04 18:38:26 +05:30
ruthra kumar
104c45ecc4 fix: test pr output for amount and currency 2022-07-04 18:04:29 +05:30
marination
7a5fd71a6c fix: LCV updates wrong future qty/Bin qty
- As -ve LCV SLE case is returned from `repost_current_voucher`, future qty is not updated
- This just doubly shifts all future qty which is then fixed by a repost
- Until the repost balance values are wrong
- Bin continues to show wrong projected qty even after repost, this is fixed by next SLE that recalculates Bin
2022-07-04 17:46:54 +05:30
hrzzz
8cd3eb5286 fix: translation / linters 2022-07-04 08:02:02 -03:00
Rucha Mahabal
694d35e1c4 fix: Add Designation fixtures 2022-07-04 16:17:26 +05:30
Rucha Mahabal
2da427c023 patch: do not run deletion patch if HRMS is already installed 2022-07-04 14:54:23 +05:30
Ankush Menat
42761a315a chore: ignore late binding warnings
Most are false positives

[skip ci]
2022-07-04 13:19:18 +05:30
Marica
75fc4ee938 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-07-04 13:14:12 +05:30
Deepesh Garg
ac9d38aa1c Merge pull request #31499 from ruthra-kumar/bug_use_account_currency_on_reconciliation_tool
fix: Use account currency on Payment Reconciliation tool
2022-07-03 19:20:29 +05:30
Sagar Vora
05351bee8b Merge remote-tracking branch 'upstream/develop' into remove-india 2022-07-03 18:07:44 +05:30
Deepesh Garg
4038c42922 Merge pull request #31405 from deepeshgarg007/e_invoice_discounts
feat: Cash and Non trade discounts in Sales Invoice
2022-07-03 13:34:38 +05:30
Deepesh Garg
b168d2fc25 Merge branch 'develop' of https://github.com/frappe/erpnext into e_invoice_discounts 2022-07-03 11:02:32 +05:30
Deepesh Garg
e54ec4b9b6 chore: use get instead of . operator 2022-07-03 11:02:21 +05:30
Deepesh Garg
6bb203d1f5 Merge pull request #31410 from alyf-de/apply-price-list
fix: apply price list rate
2022-07-02 22:47:55 +05:30
Deepesh Garg
a4edcfe33b Merge pull request #31493 from deepeshgarg007/internal_invoicing_references
fix: Internal PI link in Sales Invoice
2022-07-02 22:47:10 +05:30
Deepesh Garg
38352b3e46 test: Add test for einvoice discounts 2022-07-02 22:27:20 +05:30
Deepesh Garg
b4f6429e32 Merge branch 'develop' of https://github.com/frappe/erpnext into e_invoice_discounts 2022-07-02 18:42:31 +05:30
Sagar Sharma
caeaa3f940 fix: multiple SCO against a PO 2022-07-02 06:20:09 +05:30
Ankush Menat
7e40c86c56 fix(UX): dont apply price list when changing batch on mapped docs (#31503)
fix(UX): dont apply price list batch change on mapped docs
2022-07-01 20:08:16 +05:30
Rucha Mahabal
466bf99835 fix: Remove Expense Claim from Bank Reconciliation
- add hooks `get_matching_queries` and `bank_reconciliation_doctypes` to extend the functionality in other apps
2022-07-01 19:01:17 +05:30
Sagar Sharma
fd162f9b14 fix: supplier warehouse in PR 2022-07-01 16:51:19 +05:30
ruthra kumar
c9d67defd8 test: PR output should have account currency 2022-07-01 13:02:14 +05:30
ruthra kumar
219855311d fix: wrong amount fetched in payment reconciliation tool
- fetch amount on account currency for outstanding invoices and
- unreconcilied dr/cr notes
- fix currency field name in payment ledger entry creation
2022-07-01 12:47:07 +05:30
Rucha Mahabal
ef7299470b Merge branch 'develop' into hr-separation 2022-07-01 11:30:25 +05:30
Rucha Mahabal
a1a6810b58 fix: Remove HR & Payroll from Authorization Control and Rules 2022-07-01 11:28:34 +05:30
mergify[bot]
7b093e5803 fix(Salary Slip): Components not updated when amount evaluates to 0 due to payment days (backport #31425) (#31432)
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2022-07-01 10:35:59 +05:30
Rucha Mahabal
7442a886a6 test: fix Employee and Activation test 2022-07-01 10:34:32 +05:30
hrzzz
fbb71a2611 fix: translated message for credit limit blocking 2022-06-30 16:14:51 -03:00
Rucha Mahabal
3051f6e7f2 fix: Update triggers on Payment Reconciliation 2022-06-30 21:37:55 +05:30
Deepesh Garg
536e768ba9 fix: Internal PI link in Sales Invoice 2022-06-30 21:29:54 +05:30
Rucha Mahabal
9f7511d6bf fix: Remove HR & Payroll Settings from Company master
- moved setup to HRMS app
2022-06-30 18:12:12 +05:30
Ankush Menat
7a02dfe09a Merge pull request #31491 from ankush/update_310
build!: bump min python required to 3.10
2022-06-30 17:41:43 +05:30
Sagar Sharma
b86710bb9a fix(ui): hide "Update Items" button based on subcontracting conditions 2022-06-30 17:28:42 +05:30
Ankush Menat
b9f394a794 ci: patch test w/ diff python versions
Co-Authored-By: Gavin D'souza <gavin18d@gmail.com>
2022-06-30 17:10:08 +05:30
Sagar Sharma
8e4458e0e6 fix: failing test
Removed this test case as the new POs will not have the Supplied Items table.
2022-06-30 16:47:43 +05:30
Deepesh Garg
7ea29d870e Merge pull request #31487 from dj12djdjs/fix-company-default-root-type
fix: gain/loss can be income or expense
2022-06-30 16:45:08 +05:30
Ankush Menat
57d08b7cdf build!: bump min python required to 3.10 2022-06-30 15:49:43 +05:30
Ankush Menat
a51513194e Merge pull request #31475 from ankush/meta_update
build!: declarative builds
2022-06-30 12:02:04 +05:30
Sagar Sharma
e4b1d6f0cb Merge branch 'develop' into subcontracting 2022-06-30 11:55:17 +05:30
Ankush Menat
cd0450b102 refactor: move dev-dependencies to pyproject 2022-06-30 11:43:00 +05:30
Ankush Menat
0e3872aceb chore(meta): update CODEOWNERS
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2022-06-30 11:43:00 +05:30
Ankush Menat
20f85195f4 build!: declarative builds 2022-06-30 11:42:59 +05:30
Ankush Menat
56c6a709cd ci: bump container count for unittests (#31490)
[skip ci]
2022-06-30 11:35:45 +05:30
Devin Slauenwhite
8a13ddc2f2 fix: gain/loss can be income or expense 2022-06-29 12:28:24 -04:00
Marica
3c1002f9be Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-06-29 18:43:00 +05:30
Rucha Mahabal
1497e26f82 fix: patches 2022-06-29 18:38:39 +05:30
Rucha Mahabal
211b46b7e6 fix: Loan Application test 2022-06-29 18:00:48 +05:30
Sagar Sharma
6589c5f5e9 Merge branch 'develop' into subcontracting 2022-06-29 17:29:24 +05:30
gn306029
2a619fd789 fix: Modify opts parameter misspell (#31476)
Modify opts parameter misspell 

closes #31474
2022-06-29 14:45:21 +05:30
Rucha Mahabal
f0e2bdf1dc fix(Projects): Remove total_expense_claim calculation from gross margin 2022-06-29 13:07:06 +05:30
Rucha Mahabal
ef63c61ebd Merge branch 'develop' into hr-separation 2022-06-29 12:35:51 +05:30
Marica
942aadf436 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-06-29 12:23:41 +05:30
Devin Slauenwhite
cdf631b9de fix: validate item dashboard material transfer entry (#31473) 2022-06-29 12:06:47 +05:30
Marica
1a749e2589 Merge branch 'develop' into make-image-field-obsolete-in-web-item 2022-06-29 10:25:30 +05:30
Deepesh Garg
3bbbf02ca8 Merge pull request #31460 from ruthra-kumar/bug_ar/ap_rpt_delivery_note
fix: 'attribute error' on AR/AP report with delivery note filter
2022-06-29 08:06:34 +05:30
Sagar Sharma
78ff1783b1 Merge branch 'develop' into subcontracting 2022-06-28 22:20:32 +05:30
Rucha Mahabal
a24cc982e2 fix: Remove HR validations from Employee master 2022-06-28 18:47:14 +05:30
Rucha Mahabal
26a8de69c9 fix: Remove Designation Skill child table
- moved to HRMS app, since it isn't used anywhere in ERPNext
2022-06-28 17:18:02 +05:30
Ankush Menat
080fcb91f2 ci: pin semgrep to old version
current version has problem with PRs originating from fork
2022-06-28 13:46:12 +05:30
Rucha Mahabal
6bee20c5e3 chore: Add Fleet Management masters in Setup module for Delivery Trip
- Driver, Vehicle, Driving License Category (child table)

- Removed Email Account setup for Job Applicant from setup wizard
2022-06-28 13:29:35 +05:30
Rucha Mahabal
3c059de122 chore: Remove links for Employee Hours Utilization Based On Timesheet and Project Profitability from Projects workspace 2022-06-28 12:34:01 +05:30
Rucha Mahabal
6f407d3c62 chore: fix code formatting 2022-06-28 12:29:22 +05:30
Ankush Menat
5d73697c64 fix: offset some scheduled jobs to avoid locks (#31466)
If your site has multiple background workers then there's possibility
that two jobs will execute in parallal, this creates problem when both
are on operating on same data.

This PR adds a separate section for hourly and daily jobs which have
frequency offset from default frequency to avoid such conflicts.
2022-06-28 12:22:17 +05:30
Rucha Mahabal
6a65c8aff4 Merge branch 'develop' into hr-separation 2022-06-28 11:51:59 +05:30
Ankush Menat
bedb11ee67 fix: youtube stats background sync failures 2022-06-28 10:50:44 +05:30
Nabin Hait
925b9d985e fix: open lead and opportunities based on today's event 2022-06-27 22:13:09 +05:30
Nabin Hait
7921a1a605 fix: Restored city, state and country fields 2022-06-27 22:13:09 +05:30
Rucha Mahabal
930e557fc6 fix: remove HR/Payroll patches 2022-06-27 20:25:16 +05:30
Rucha Mahabal
c8712b02f9 patch: Delete HR/Payroll doctypes 2022-06-27 19:59:04 +05:30
Rucha Mahabal
2b255bdddb fix: Bank Statement loan amount query 2022-06-27 19:18:13 +05:30
ruthra kumar
3cd34ebab6 fix: 'attribute error' on AR/AP report with delivery note filter 2022-06-27 17:29:25 +05:30
Rucha Mahabal
ba8ea0f4fb chore: Remove HR templates and references from other workspaces
- Removed template `employees_to_mark_attendance.html`

- Removed HR references from ERPNext Settings and Home workspaces
2022-06-27 16:56:24 +05:30
Ankush Menat
dd11f26eba fix: dont update RM items table if not required (#31408)
Currently on PO update RM item table is auto computed again and again,
if there was any transfer/consumption against that then it will be lost.

This change:
1. Disables updating RM table if no change in qty of FG was made. Since
   RM table can't possibly be different with same FG qty.
2. Blocks update completely if qty is changed and RM items are already
   transferred.
2022-06-27 15:55:08 +05:30
Ankush Menat
20dac08f5f refactor: clean up product bundle client side code (#31455)
refactor: clean up product bundle cient side code

- Remove deprecated CUR_FRM scripts
- Remove client side fetches and move it to doctype schema
2022-06-27 15:54:54 +05:30
Rucha Mahabal
1d5c8660bb chore: Remove regional HR reports, custom field setups
- Removed reports Provident Fund Deductions, Professional Tax Deductions, helper js file `salary_slip_deductions_report_filters.js`

- Removed Gratuity rules setup for India and UAE

- Removed custom field setup for India

- Moved all setups to the HRMS app
2022-06-27 15:12:05 +05:30
marination
9541354ec7 chore: Make image field obsolete in Website Item (redundant)
- Delete Image field and set `website_image` as form's image field for uploads
- Remove instances of `image` field access via Website Item
- Item -> Web Item via Desk: Map Item's `image` to Web Item's `website_image`
- Item -> Web Item via patch: `website_image` will be mapped with thumbnail
- Remove magic that auto-sets `website_image` from `image` in Website Item
2022-06-27 13:00:00 +05:30
Deepesh Garg
173588e169 Merge pull request #31446 from deepeshgarg007/quotation_order_item_syn
fix: Quotation and Sales Order item sync
2022-06-27 11:17:48 +05:30
Sagar Vora
0aafc75c90 fix: add missing print format 2022-06-26 18:36:00 +05:30
Sagar Vora
85c4c342d8 fix: improve patches 2022-06-26 18:30:54 +05:30
Sagar Vora
7f390fb755 Merge branch 'develop' into remove-india 2022-06-26 18:10:44 +05:30
Smit Vora
64de0d06ad patch: remove custom field creation patch 2022-06-26 11:56:06 +05:30
Vladislav
7c682c55fa Update ru.csv 2022-06-26 01:36:11 +03:00
Vladislav
99504ebe52 Update ru.csv 2022-06-26 00:15:30 +03:00
Deepesh Garg
904e69e541 Merge branch 'develop' into quotation_order_item_syn 2022-06-25 19:46:20 +05:30
Deepesh Garg
9c1eb770ba Merge pull request #31442 from ruthra-kumar/incorrect_outstanding_on_multiple_cost_centers
fix: incorrect outstanding for invoice
2022-06-25 19:42:14 +05:30
Nabin Hait
f72d5506de fix: get_all replace by sql 2022-06-25 15:08:45 +05:30
Nabin Hait
2d226be3c4 fix: Made no of employees a select field 2022-06-25 11:40:23 +05:30
Nabin Hait
483fc420a1 test: invoice from timesheet 2022-06-25 11:40:23 +05:30
Nabin Hait
6a0d0a338d fix: Test cases removed related to copying comments from opportunity to quotation 2022-06-25 11:40:23 +05:30
Nabin Hait
82bf59e2a3 fix: test case 2022-06-25 11:40:23 +05:30
Nabin Hait
d8163f3e47 fix: set exchange rate 2022-06-25 11:40:23 +05:30
Nabin Hait
f904ac599e fix: merge conflicts and sider issues 2022-06-25 11:40:23 +05:30
Vladislav
49aa7634a3 Update ru.csv 2022-06-25 01:32:24 +03:00
Smit Vora
8fb0997cf1 patch: remove related docs and warn 2022-06-24 21:59:28 +05:30
Deepesh Garg
6acd0325be fix: General Ledger and TB opening entries mismatch issues 2022-06-24 21:45:05 +05:30
Deepesh Garg
58fe220479 fix: Quotation and Sales Order item sync 2022-06-24 19:43:50 +05:30
ruthra kumar
321fea322c test: invoice outstanding when gl's are split on cost center allocat 2022-06-24 17:47:11 +05:30
Sagar Vora
b6133c300e test: create TDS payable account 2022-06-24 16:46:52 +05:30
Sagar Vora
4a2a02286a test: create tax withholding category instead of updating 2022-06-24 15:49:19 +05:30
Sagar Vora
69ff61c838 fix: add Lower Deduction Certificate to the Accounting workspace for now 2022-06-24 15:12:43 +05:30
Sagar Vora
9b057d15b2 fix: move hooks to reduce diff 2022-06-24 15:04:28 +05:30
Rucha Mahabal
c619b58ba9 fix: remove HR/Payroll references from form dashboards
- Employee, Holiday List, Project, Task, Timesheet
2022-06-24 15:03:16 +05:30
Vladislav
913b393969 Update ru.csv 2022-06-24 11:16:39 +03:00
Vladislav
2826056d41 Update ru.csv 2022-06-24 11:14:57 +03:00
Smit Vora
3c9eea54a5 fix: remove student naming series 2022-06-24 13:42:07 +05:30
Sagar Vora
593147d337 test: move code to ensure fixtures get created 2022-06-24 14:37:11 +05:30
Sagar Vora
2e6919b7be fix: remove more India patches 2022-06-24 14:14:12 +05:30
Sagar Vora
ff10f557c0 test: use Sales Expenses instead of VAT to test disabled account 2022-06-24 13:49:20 +05:30
Sagar Vora
12b7e14fde chore: keep back code to be a part of other apps / to be ported later 2022-06-24 13:38:13 +05:30
ruthra kumar
71f6f78d94 fix: incorrect outstanding for invoice 2022-06-24 13:36:15 +05:30
Rucha Mahabal
39e0d22044 chore: Remove HR related field references from Employee, Department form scripts
- removed approver fields and payroll cost center from Employee master

- removed query filter code for HR related fields from employee and department form scripts

- removed `update_approver_role`
2022-06-24 13:14:26 +05:30
Sagar Vora
0810674c8a Merge remote-tracking branch 'upstream/develop' into remove-india 2022-06-24 13:08:40 +05:30
Marica
1d683ca9f2 Merge pull request #31421 from s-aga-r/fix/production-plan/test/planned-qty
fix: add UOM validation for planned-qty
2022-06-24 12:40:03 +05:30
Vladislav
f59a6248bc Update ru.csv
- fix logic
- add translate
2022-06-24 01:02:41 +03:00
Rucha Mahabal
eac58abcc5 chore: Remove HR related reports from other modules
- Project Profitability report: Projects

- Employee Hours Utilization Based on Timesheet: Projects

- Unpaid Expense Claims: Accounts
2022-06-23 20:50:55 +05:30
Rucha Mahabal
edb528ce41 chore: Remove code for Expense Claim from Project, Task, Delivery Trip
- Remove `total_expense_claim` field from Project and Task, will be installed with hrms setup

- Remove Expense Claim calculation from `update_costing` in project

- Remove `update_total_expense_claim` from task

- Remove Expense Claim references from employee form tour

- Remove 'Make Expense Claim' button from Delivery Trip, will only be available if hrms is installed

- Update delivery trip tests
2022-06-23 19:48:42 +05:30
Rucha Mahabal
1ff0e4519f chore: Extract Expense Claim, FnF, Gratuity, Employee Advance related code from accounting
- Added hooks `advance_payment_doctypes`, `invoice_doctypes`, `period_closing_doctypes` for other apps to extend accounting functionality

- Removed `set_query` code from `journal_entry.js` and `payment_entry.js`

- removed `update_status_for_full_and_final_statement` trigger on JE submission/cancellation

- refactored `payment_entry.py`: split functions for validating reference doctypes for easy overriding, removed hrms references from `get_reference_details` and `get_payment_entry`

- removed dead code: functions `get_bill_no_and_update_amounts`, `get_total_amount_exchange_rate_base_on_currency`, `get_total_amount_exchange_rate_for_employee_advance`, `get_amounts_based_on_ref_doc`, `get_amounts_based_on_reference_doctype`
2022-06-23 16:17:34 +05:30
GangaManoj
416d578290 fix: Add missing comma 2022-06-23 15:14:31 +05:30
GangaManoj
1b1786532a test: Test monthly depreciation by Written Down Value method 2022-06-23 15:14:31 +05:30
GangaManoj
2b7ab72a72 fix: Convert string to datetime object 2022-06-23 15:14:31 +05:30
GangaManoj
e62beaefc1 test: Test if final day of the month is taken if depr_start_date is the last day of its month 2022-06-23 15:14:31 +05:30
GangaManoj
154e258ad0 fix: Get last day of the monthif depr posting date is the last day of its month 2022-06-23 15:14:31 +05:30
GangaManoj
b07aae4da5 fix: Correct pro-rata amount calculation 2022-06-23 15:14:31 +05:30
GangaManoj
2d9153ea30 fix: Remove misleading comment 2022-06-23 15:14:31 +05:30
GangaManoj
ab13a178b5 fix: Replace asset life with total no of depreciations 2022-06-23 15:14:31 +05:30
Sagar Sharma
73a15adc67 Merge branch 'develop' into fix/production-plan/test/planned-qty 2022-06-23 11:20:22 +05:30
Deepesh Garg
79d5d35df9 Merge pull request #31395 from nihantra/bank_clear_summ
fix: filter set in Bank Clearance Summary
2022-06-23 10:54:56 +05:30
Sagar Sharma
70bc51a8fc Merge branch 'develop' into fix/production-plan/test/planned-qty 2022-06-22 15:33:08 +05:30
s-aga-r
00807abe31 fix: add UOM validation for planned-qty 2022-06-22 14:28:17 +05:30
Deepesh Garg
db2484b6b2 Merge pull request #31418 from ruthra-kumar/payment_ledger_migration_logic_bug
fix: handle empty values("") in against_voucher columns on gl migration
2022-06-22 12:51:21 +05:30
Marica
4c0749e04a Merge pull request #31406 from marination/bom-update-log-cleanup-perf
chore: Clear Progress section for completed logs & `on_submit` UX
2022-06-22 12:16:06 +05:30
Marica
46d02ec4b2 Merge branch 'develop' into bom-update-log-cleanup-perf 2022-06-22 11:50:06 +05:30
Marica
55d67a0d09 Merge pull request #31420 from HarryPaulo/translate-status-filter-orders
fix: translation for filter status on report
2022-06-22 11:45:59 +05:30
rohitwaghchaure
2ed06d7ceb Merge pull request #31248 from rohitwaghchaure/fixed-transferred-materials-are-not-consumed
fix: transferred batches are not fetched while making Manufacture stock entry
2022-06-22 11:37:15 +05:30
hrzzz
8b1ff96e30 fix: translation for filter status on report 2022-06-21 15:10:19 -03:00
rohitwaghchaure
186224a12a Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-21 22:45:05 +05:30
ruthra kumar
5826b7b071 fix: identify empty values "" in against_voucher columns 2022-06-21 19:50:50 +05:30
Vladislav
ce1b4e40a1 fix: update ru translate (#31404)
* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

fix logic

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv
2022-06-21 19:25:05 +05:30
Rucha Mahabal
f6fbcc99a3 chore: Removed payroll dependencies from Loan Management, moved to hrms app
- Salary Slip Loan dt moved to hrms, removed from erpnext app

- Repay from Salary field removed from Loan and Loan Repayment, installed on hrms app setup

- fixed references to salary slip loan fields
2022-06-21 18:13:01 +05:30
Ankush Menat
e866ec6e28 Merge pull request #31412 from s-aga-r/fix/bom/default
fix: set default_bom for item
2022-06-21 16:42:38 +05:30
s-aga-r
dc2830da4d fix: set default_bom for item 2022-06-21 15:13:01 +05:30
Deepesh Garg
b16ab818c5 Merge pull request #31264 from ankush/internal_trasfer_precision_loss
fix: internal transfer GLE validation
2022-06-21 14:31:18 +05:30
marination
4cf2225a29 chore: Implement Log clearing interface in BOM Update Log
- Implement Log clearing interface in BOM Update Log
- Add additional info in sidebar: Log clearing only happens for 'Update Cost' type logs
- 'Replace BOM' logs have important info and is used in BOM timeline, so we'll let users decide if they wanna keep or discard it
2022-06-21 14:10:59 +05:30
Sagar Sharma
912d26361d Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-21 13:23:37 +05:30
Marica
5ae8f5d4b8 Merge branch 'develop' into bom-update-log-cleanup-perf 2022-06-21 11:01:03 +05:30
Deepesh Garg
f572c20009 Merge branch 'develop' into internal_trasfer_precision_loss 2022-06-21 10:45:02 +05:30
Deepesh Garg
e0e2616054 Merge pull request #31350 from deepeshgarg007/sales_exchange_rate_validation
fix: Conversion rate validation for multi-currency invoices
2022-06-21 09:09:38 +05:30
s-aga-r
f6ef3068d7 Merge branch 'develop' into subcontracting 2022-06-20 23:10:31 +05:30
s-aga-r
6d89b2fa28 refactor: backport old subcontracting code 2022-06-20 23:10:02 +05:30
barredterra
e2295b4e2f fix: apply price list rate 2022-06-20 18:52:40 +02:00
Deepesh Garg
46e6c2cd0f Merge branch 'develop' of https://github.com/frappe/erpnext into sales_exchange_rate_validation 2022-06-20 22:00:49 +05:30
Deepesh Garg
8f37393044 test: Add test case 2022-06-20 22:00:32 +05:30
marination
0320b59ea6 chore: Clear Progress section for completed logs & on_submit UX
- Delete `BOM Update Batch` table on 'Completed' log, to save space
- Hide Progress section on 'Completed' log
- Enqueue `on_submit` for 'Update Cost' job, getting leaf boms could take time for huge DBs. Users have to wait for screen to unfreeze.
- Add error handling to `process_boms_cost_level_wise` (Called via cron job and on submit, both in background)
2022-06-20 16:25:34 +05:30
Vladislav
b5e22c8e16 Update ru.csv 2022-06-19 21:54:06 +03:00
Sagar Vora
e48a8cd1e8 fix: remove india hook 2022-06-19 23:20:28 +05:30
Sagar Vora
33b54c50ea chore: remove ITC patch 2022-06-19 23:18:04 +05:30
Sagar Vora
ec9861266e Merge remote-tracking branch 'upstream/develop' into remove-india 2022-06-19 22:57:22 +05:30
Deepesh Garg
f337213f33 fix(India): Discounts in E-Invoicing 2022-06-19 21:19:02 +05:30
Deepesh Garg
169ff5a0dd feat: Cash and Non trade discounts in Sales Invoice 2022-06-19 21:18:12 +05:30
Deepesh Garg
9aea017990 Merge pull request #31136 from ruthra-kumar/refactor_payment_reconciliation_tool
refactor: Payment Reconciliation tool will use Payment Ledger
2022-06-17 21:40:47 +05:30
Conor
ea28ed1bb3 refactor: if() to CASE WHEN (#31360)
* refactor: if() to CASE WHEN

* fix: remove duplicate order by

* fix: remove extraneous table

* style: reformat to black spec

Co-authored-by: Ankush Menat <ankush@frappe.io>
2022-06-17 21:17:48 +05:30
Deepesh Garg
4a90cd6d54 Merge branch 'develop' into refactor_payment_reconciliation_tool 2022-06-17 21:10:48 +05:30
Deepesh Garg
a0cab761b8 Merge pull request #31396 from deepeshgarg007/quotation_lost_update
fix: Quotation lost update
2022-06-17 21:09:03 +05:30
Deepesh Garg
e457288dba chore: fix condition 2022-06-17 18:56:53 +05:30
Deepesh Garg
02f9441e1a fix: Quotation lost update 2022-06-17 18:54:42 +05:30
Nihantra C. Patel
0097a2b60c Update bank_clearance_summary.py 2022-06-17 18:35:11 +05:30
ruthra kumar
3a238b4daa docs: specification of payment ledger 2022-06-17 17:57:07 +05:30
ruthra kumar
7312f22f35 refactor: update voucher outstanding from payment ledger
Outstanding amount is updated from payment ledger, only for
receivable/payable accounts. For remaining account types, update happens
from GL Entry.
2022-06-17 17:57:07 +05:30
ruthra kumar
524c175cf0 refactor: delink gl entry from reconciliation 2022-06-17 17:57:07 +05:30
ruthra kumar
ae8aa8f3e7 refactor: 'get outstanding invoices' popup in payment entry
Payment entry has option to select outstanding invoices using a popup
form. This change refactors the pop to use payment ledger to fetch +ve
outstanding invoices.
2022-06-17 17:57:07 +05:30
ruthra kumar
8c87674c62 refactor: outstanding_invoice function and helper class
outstanding invoice function has been refactored to use payment ledger
2022-06-17 17:57:07 +05:30
ruthra kumar
9cdc388c97 test: payment reconciliation tool
unit test cases for partial reconciliation, return invoice against
invoice, invoice against journals and journal against journal have
been added
2022-06-17 17:57:07 +05:30
ruthra kumar
65f47bca31 refactor: payment reconciliation tool
PR uses payment ledger for outstanding invoice and unreconcilied
cr/dr notes.
2022-06-17 17:57:07 +05:30
ruthra kumar
7b383880c6 feat: helper class for quering Payment Ledger 2022-06-17 17:57:07 +05:30
ruthra kumar
05467ffce2 test: use fixture for payment entry test cases (#31390)
refactor: use fixture for payment entry test cases
2022-06-17 17:23:29 +05:30
Conor
74a782d81d refactor: DB independent quoting and truthy/falsy values (#31358)
* refactor: DB independent quoting and truthy/falsy values

* style: reformat to black spec

* fix: ifnull -> coalesce

* fix: coalesce -> Coalesce

* fix: revert pypika comparison

* refactor: convert queries to QB

* fix: incorrect value types for query

`=` query makes no sense with list of values

* fix: remove warehouse docstatus condition

* fix: keep using base rate as rate

Co-authored-by: Ankush Menat <ankush@frappe.io>
2022-06-17 17:01:27 +05:30
s-aga-r
ca24b5287e chore: make "is_subcontracted" field read-only in PR and PI 2022-06-17 16:47:49 +05:30
s-aga-r
5002f1f1e5 feat: Add hidden field "is_old_subcontracting_flow" in PO, PR and PI 2022-06-17 16:47:41 +05:30
Rucha Mahabal
fbc1330ab0 chore: Remove HR/Payroll related setups and fixtures
- Fixtures moved to HRMS app

- 'HR' field in Terms and Conditions removed, added via HRMS setup
2022-06-17 16:34:13 +05:30
Marica
d6078aa911 fix: Respect system precision for user facing balance qty values (#30837)
* fix: Respect system precision for user facing balance qty values

- `get_precision` -> `set_precision`
- Use system wide currency precision for `stock_value`
- Round of qty defiiciency as per user defined precision (system flt precision), so that it is WYSIWYG for users

* fix: Consider system precision when validating future negative qty

* test: Immediate Negative Qty precision test

- Test for Immediate Negative Qty precision
- Stock Entry Negative Qty message: Format available qty in system precision
- Pass `stock_uom` as confugrable option in `make_item`

* test: Future Negative Qty validation with precision

* fix: Use `get_field_precision` for currency precision as it used to

- `get_field_precision` defaults to number format for precision (maintain old behaviour)
- Don't pass `currency` to `get_field_precision` as its not used anymore
2022-06-17 15:13:13 +05:30
Ankush Menat
74007c8e91 fix(UX): hide irrelevant UOM fields (#31392)
fix(UX): hide UOM-related fields if they are inconsequential
2022-06-17 15:10:21 +05:30
rohitwaghchaure
2ec133df6d Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-17 15:02:07 +05:30
Ankush Menat
10583eb3ce fix: UOM handling for transaction without item (#31389)
If invoice is made without item code then UOM, Stock UOM and
conversion_factor all need to be manually added, this is confusing and
leads missing them out leads to errors.

Simplest solution:

- if either UOM exists then set both to same uom conversion factor to
- also set conversion factor based on UOM conversions
2022-06-17 12:13:27 +05:30
Vladislav
0e8aad9038 Update ru.csv 2022-06-17 00:28:48 +03:00
Sagar Vora
1a3997a566 fix: transaction date gets unset in material request (#31327)
* fix: set date correctly in material request

* fix: use only `transaction_date` in `get_item_details`
2022-06-16 22:33:47 +05:30
Ankush Menat
6f2086d770 test: verify that all patches exist in patches.txt (#31371)
* chore: delete orphaned patches

* test: orphan/missing entries in patches.txt


[skip ci]
2022-06-16 22:15:06 +05:30
Vladislav
75e1f01b9d Update ru.csv 2022-06-16 18:32:57 +03:00
Vladislav
c869077c92 Update ru.csv 2022-06-16 18:18:35 +03:00
Jingxuan He
b4a93da9f3 chore: Fix a potential variable misuse bug (#31372)
* Fix a potential variable misuse bug

* chore: Separate check (separate line) for empty table in Pricing Rule

* chore: Code readability & check for field in row (now row itself)

Co-authored-by: marination <maricadsouza221197@gmail.com>
2022-06-16 12:16:59 +05:30
Rucha Mahabal
4b3fb83850 fix: remove Salary Slip creation from Timesheet
- moved to HRMS app
2022-06-15 23:51:33 +05:30
Ankush Menat
86919d2a6d test: silent test failure in stock assertions (#31377)
If actual values are not present then test is silently passing, # of
actual values should be at least equal to expected values.
2022-06-15 21:19:09 +05:30
Ankush Menat
5c6f22f275 refactor: simpler batching for GLE reposting (#31374)
* refactor: simpler batching for GLE reposting

* test: add "actual" test for chunked GLE reposting
2022-06-15 19:30:26 +05:30
Marica
d9c6b7218a chore: Sponsor credit for BOM Update Tool perf 2022-06-15 18:57:39 +05:30
Vladislav
041a5e7d1f Merge branch 'frappe:develop' into develop 2022-06-15 15:03:19 +03:00
Rucha Mahabal
39c30f5b01 chore: remove test for employee
- Moved to the HRMS app
2022-06-15 17:26:19 +05:30
Rushabh Mehta
c0f9b34ede fix(minor): move variants to separate tab (#31354)
* fix(minor): move variants to separate tab

* fix(minor): variants tab

* fix(minor): add counts

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
Co-authored-by: Ankush Menat <ankush@frappe.io>
2022-06-15 16:08:05 +05:30
Ankush Menat
276267d5a6 fix: remove agriculture module from patch (#31369) 2022-06-15 15:26:05 +05:30
Marica
c83b4043b8 Merge pull request #31353 from marination/so-to-wo-bom
fix: Pick Template BOM if variant BOM absent in WO popup from SO
2022-06-15 14:37:15 +05:30
Rucha Mahabal
0f83e7af56 fix: removed expense claim, advance and salary slip updates from PE/JE events
- moved them to HRMS app hooks
2022-06-15 13:58:41 +05:30
Ankush Menat
94ad66e55b chore: revert naming to default (#31364) 2022-06-15 13:35:42 +05:30
Deepesh Garg
be14a7e657 Merge pull request #31365 from ruthra-kumar/add_gl_migration_to_patch
chore: add gl to payment ledger migarion to patches
2022-06-15 13:20:10 +05:30
ruthra kumar
538faf3639 chore: add gl to payment ledger migarion to patches 2022-06-15 13:17:06 +05:30
Marica
fafdaff4d4 Merge branch 'develop' into so-to-wo-bom 2022-06-15 12:58:13 +05:30
Rucha Mahabal
3fe2ef6790 chore: update import paths for HR 2022-06-15 12:43:45 +05:30
Rucha Mahabal
8b2d045b06 fix(Projects): add a function get_users_email instead of importing from HR 2022-06-15 12:26:15 +05:30
Conor
b8f728a40a refactor: use CURRENT_DATE instead of CURDATE() (#31356)
* refactor: use CURRENT_DATE instead of CURDATE()

* style: reformat to black spec

* refactor: use QB for auto_close queries

Co-authored-by: Ankush Menat <ankush@frappe.io>
2022-06-15 12:07:33 +05:30
Nihantra C. Patel
37e9622426 fix: Spelling mistake in quotation depend on (#31362)
Update quotation.json
2022-06-15 12:02:57 +05:30
Conor
2a9105f26f refactor: DB independent capitalization of test cases (#31359) 2022-06-15 11:24:24 +05:30
rohitwaghchaure
a4c2c3e02f Merge branch 'develop' into fixed-transferred-materials-are-not-consumed 2022-06-15 09:41:01 +05:30
Sagar Sharma
406114374b Merge branch 'develop' into subcontracting 2022-06-14 06:44:29 -07:00
s-aga-r
9a68af36ec Merge branch 'develop' into subcontracting 2022-06-14 19:13:10 +05:30
Marica
639e4c5714 Merge branch 'develop' into so-to-wo-bom 2022-06-14 18:22:11 +05:30
Ankush Menat
2535d5edd0 perf: GLE reposting with progress and chunking (#31343)
If stock voucher count goes >1000 then fetching all gles and reposting
them all at once requires much more memory and can cause crash.

- This PR ensures that GLE reposting is done in chunks of 100 vouchers.
- This PR also starts keeping track of how many such chunks were
  processed so in future progress is resumed in event of timeout.
2022-06-14 18:20:33 +05:30
marination
9f2d325e67 fix: Pick Template BOM if variant BOM absent in WO popup from SO
- Use `get_default_bom` in sales_order.py (reduce duplicate utility functions)
- Remove redundant if else in `get_work_order_items`
- `get_default_bom`: If no BOM and template exists try to fetch template BOM
- test: `get_work_order_items` via SO and if right BOM is picked
2022-06-14 17:20:44 +05:30
s-aga-r
ca9d55a2fd chore: update err msg for FG Item in PO 2022-06-14 13:16:22 +05:30
Deepesh Garg
d05d15346a fix: Conversion rate validation for multi-currency invoices 2022-06-14 12:50:49 +05:30
Deepesh Garg
f8011f30e0 Merge pull request #31322 from deepeshgarg007/quotation_issues
fix: Company address filter in quotation
2022-06-14 11:17:12 +05:30
Deepesh Garg
5b2ba087a3 Merge branch 'develop' of https://github.com/frappe/erpnext into quotation_issues 2022-06-14 10:50:47 +05:30
Deepesh Garg
fb3da124e5 chore: linting issues 2022-06-14 10:50:38 +05:30
Conor
00ef499739 refactor: use db independent offset syntax (#31345)
* chore: use db independent offset syntax

* fix: typo

* style: reformat code to black spec

Co-authored-by: Ankush Menat <ankush@frappe.io>
2022-06-14 10:49:07 +05:30
Marica
39338e70d5 Merge pull request #31341 from marination/subcontract-supplied-items
fix: Supplied Qty not updated on Stock Entry cancel
2022-06-13 20:43:01 +05:30
Rucha Mahabal
23b40ff13c fix: remove active employee validation from timesheets
- moved to hrms hooks, will only be triggered if app is installed
2022-06-13 20:08:48 +05:30
Marica
f5ebaed191 Merge branch 'develop' into subcontract-supplied-items 2022-06-13 18:32:43 +05:30
marination
b8f468cb4f test: PO Supplied Qty reset on cancel/submit 2022-06-13 18:31:35 +05:30
marination
fa1d9d548e fix: Supplied Qty not updated on Stock Entry cancel
- Loop over PO supplied items and update them as data from SE will exclude a row if supplied qty becomes 0 on cancel
- Use DB API insteaf of raw SQL
2022-06-13 17:59:03 +05:30
Ankush Menat
883598d59a chore: delete BOT
RIP
2022-06-13 16:24:48 +05:30
Sagar Sharma
f755430098 Merge branch 'develop' into subcontracting 2022-06-13 03:00:53 -07:00
Ankush Menat
697fbe946a Merge pull request #31337 from gavindsouza/get_fiscal_years-refactor
refactor: get_fiscal_years API
2022-06-13 14:56:33 +05:30
Gavin D'souza
e9af68e947 test: Remove deprecated as_tuple kwarg in FrappeTestAPI.post 2022-06-13 14:26:59 +05:30
Gavin D'souza
6c726a161c ci(patch): Setup python dependencies after switching to current branch 2022-06-13 13:22:04 +05:30
Solufyin
0410752fcf Merge branch 'frappe:develop' into solufy_rec_pay_report 2022-06-13 13:20:41 +05:30
Deepesh Garg
b12b7b51ec Merge pull request #31107 from ruthra-kumar/refactor_ar/ap_report
refactor: Accounts Receivable/Payable Report will use Payment Ledger
2022-06-13 12:57:25 +05:30
Gavin D'souza
5f8cd34da5 fix: Use newer PyPDF2 APIs
Depends on https://github.com/frappe/frappe/pull/17127
2022-06-13 12:43:08 +05:30
Gavin D'souza
0727d1d99b refactor: get_fiscal_years API
* Optimize fiscal year options generation
* Don't pass unrequired criterions / values to prepared query
* Use QB notation for raw query
2022-06-13 12:43:08 +05:30
Deepesh Garg
ea276a7b86 Merge branch 'develop' into refactor_ar/ap_report 2022-06-13 12:34:47 +05:30
Ankush Menat
3701cdbaf1 ci(Mergify): configuration update (#31336)
Signed-off-by: Ankush Menat <ankushmenat@gmail.com>
2022-06-13 12:14:31 +05:30
Marica
d3d0ade89f chore: Accidental '=' instead of comma in French translation (#31335) 2022-06-13 11:54:12 +05:30
HENRY Florian
83367bfe5e fix: update fr translation (#31232)
* update fr translation

* fix:update fr translation

* fix:update fr translation

* fix:update fr translation

* fix:update fr translation

* fix:update fr translation

* fix:update fr translation

* fix:update fr translation

* Update fr.csv

update typo

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* update fr translation

* fix: Use elision instead of HTML code equivalent

* fix: Use elision instead of HTML code equivalent (pt 2)

* fix: Use elision/single quote instead of HTML code equivalent (pt 3)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2022-06-13 11:15:47 +05:30
ruthra kumar
3018756482 refactor: remove 'show remarks' 2022-06-13 10:56:33 +05:30
ruthra kumar
71521b6550 refactor: unit test for AR/AP report 2022-06-13 10:56:33 +05:30
ruthra kumar
cd9d70d6ee refactor: show advance payments in AR/AP report 2022-06-13 10:56:33 +05:30
ruthra kumar
dfe3082596 refactor: AR/AP will use payment ledger 2022-06-13 10:56:30 +05:30
Deepesh Garg
eb93564db6 Merge branch 'develop' of https://github.com/frappe/erpnext into quotation_issues 2022-06-11 21:56:24 +05:30
Deepesh Garg
118c786e63 fix: Partially Ordered status for quotation 2022-06-11 21:55:59 +05:30
Vladislav
7bdeac49f4 Update ru.csv 2022-06-11 15:59:49 +03:00
Sagar Vora
d87dcb756b Merge pull request #31323 from alyf-de/remove-datev-from-accounting-workspace
fix: remove DATEV from accounting workspace
2022-06-11 10:55:31 +00:00
Deepesh Garg
243625898e fix(India): Sales taxes and charges template fetching in quotation 2022-06-10 22:05:58 +05:30
Vladislav
89e720fdf4 Update ru.csv 2022-06-10 17:24:28 +03:00
Deepesh Garg
2fc04f661a fix: Company address filter in quotation 2022-06-10 19:23:17 +05:30
barredterra
f6695909c4 fix: remove DATEV from accounting workspace 2022-06-10 15:51:02 +02:00
Ankush Menat
39ec0aca95 fix(UX): use doc.status for Job Card status (#31320)
fix(UX): use doc.status for JC status

- Use doc.status directly for indicator - single source of truth
- Update status to cancelled when doc is cancelled
2022-06-10 18:43:46 +05:30
Rucha Mahabal
ab8df98cab chore: Remove regional code for India HR, moved to HRMS 2022-06-10 18:22:07 +05:30
Deepesh Garg
3d76b1a093 Merge pull request #31182 from ruthra-kumar/migrate_gl_to_payment_ledger_using_sql
refactor: migrating data from GL to payment ledger using raw SQL
2022-06-10 17:15:58 +05:30
Rucha Mahabal
85b18e23d7 fix: remove employee reminders, move to HRMS app
- change `erpnext.hr.EmployeeController` to `erpnext.setup.EmployeeController`
2022-06-10 16:26:07 +05:30
Vladislav
84620a775d Update ru.csv 2022-06-10 13:35:51 +03:00
Vladislav
3e66f4214d Update ru.csv 2022-06-10 13:12:09 +03:00
Vladislav
37f9692001 Merge branch 'frappe:develop' into develop 2022-06-10 13:03:07 +03:00
Rucha Mahabal
512c82f76d chore: Update imports/paths for doctypes moved to erpnext setup module 2022-06-10 15:06:54 +05:30
hendrik
74b274f555 fix: update Period Closing Voucher per Company
Validate period closing voucher company-wise
2022-06-10 14:52:53 +05:30
Ankush Menat
450bef8443 Merge pull request #31240 from ankush/repost_match_gle
fix: unnecessary GLE reposts
2022-06-10 14:51:45 +05:30
Ankush Menat
3a3d13622d refactor!: drop github connector from ERPNext (#31316) 2022-06-10 14:01:41 +05:30
Ankush Menat
1646fbe478 refactor: remove add_fetch (#31315)
- Sales Team already had fetch from set up
- Set up fetch from on sales partner in sales transaction

Reason for removal: the JS code applies arbitrarily to any field called "sales_person"
2022-06-10 13:52:17 +05:30
ruthra kumar
e2c52436da refactor: migrate gl to payment ledger using sql 2022-06-10 13:17:43 +05:30
Deepesh Garg
9562c28408 Merge pull request #31198 from HarryPaulo/gross-profit-monthly-schedule
feat: two new groupby mode on gross profit: Monthly, Payment Term
2022-06-10 12:52:35 +05:30
Rucha Mahabal
0d34e589fd chore: Remove HR and Payroll modules from ERPNext 2022-06-10 12:51:29 +05:30
Rucha Mahabal
a117af253b fix: remove HR specific fields from depatment and employee
- these will be added to the masters as custom fields on HRMS app setup
2022-06-10 12:42:59 +05:30
Marica
2941a8ce73 Merge pull request #31303 from marination/update-employee-compatibility-fix
fix: locale Currency and Float setting in update_employee
2022-06-10 11:35:02 +05:30
Ankush Menat
6fc32b83c8 fix: revert show title field on Employee doctype (#31312) 2022-06-10 11:03:51 +05:30
Rucha Mahabal
f520f042af chore: move widely used doctypes from HR to Setup module
- Employee: used in Telephony, Stock, Quality, Projects, Manufacturing, Loans, Buying, Assets, Accounts, Dependent Apps: Healthcare

- Holiday List: CRM (Appointment Booking), Projects, Healthcare, Support (SLA), Education (Student's Holiday List)

- Branch: Selling (SMS Center), used widely as an accounting dimension

- Department: Assets, Projects, SMS Center, used widely as an accounting dimension

- Designation: Lead, Healthcare Practitioner, used in Employee master which will now be in core

- Employee Group: Telephony, Communication

- Child Tables for above dts: Employee Group Table (Employee Group), Employee Education (Employee), Employee External Work History (Employee), Employee Internal Work History (Employee), Designation Skill (Designation), Holiday (Holiday List)
2022-06-10 11:02:00 +05:30
Deepesh Garg
bbd930184c Merge pull request #31273 from ruthra-kumar/ignore_payment_ledger_on_loan_cancelation
fix: ignore payment ledger on cancellation of loan
2022-06-10 10:55:48 +05:30
Deepesh Garg
a2f34d74f3 Merge pull request #31225 from vishdha/fix_date_range_print
fix: Print/PDF for financial statement reports displays either wrong date range or wrong fiscal year
2022-06-10 10:52:53 +05:30
Deepesh Garg
8008653082 Merge pull request #31294 from deepeshgarg007/gstr_3b_taxable_value
fix(India): Incorrect taxable in GSTR-3B report
2022-06-10 10:49:14 +05:30
Deepesh Garg
43bf327f9b Merge pull request #31216 from sunhoww/patch-4
fix: Trial Balance failing to ignore Finance Book
2022-06-09 20:34:33 +05:30
Sun Howwrongbum
ee2949aa3f fix: typo in sql condition 2022-06-09 19:28:59 +05:30
Deepesh Garg
c13e5ad741 fix: Reset represents company on disabling internal customer and supplier (#31302) 2022-06-09 19:18:52 +05:30
Deepesh Garg
b9dbb36d0e chore: Linting Issues 2022-06-09 18:58:04 +05:30
Vladislav
2675751d6c fix: update ru translate (#31200)
* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

* Update ru.csv

fix logic

* Update ru.csv

* Update ru.csv

* Update ru.csv
2022-06-09 18:46:08 +05:30
RJPvT
17887cde71 fix: locale Currency and Float setting in update_employee
In fieldtypes locale settings (example NL) . and , changes whereby the field is inproperly filled
2022-06-09 18:40:51 +05:30
Deepesh Garg
7c8bceca34 Merge pull request #31016 from HarryPaulo/fix-average-discount-auth
fix: correction of the calculation to the average value when there is…
2022-06-09 18:33:42 +05:30
mergify[bot]
e6f65e1697 chore: Asset Arabic translation Fix (backport #31221) (#31301)
chore: Asset Arabic translation Fix (#31221)

Update ar.csv

Fix Translation arabic translation that caused an error when submitting an asset if user language was arabic

(cherry picked from commit 9347cbbc9f)

Co-authored-by: meaziz <minaeaziz@gmail.com>
2022-06-09 17:47:15 +05:30
Marica
60968419e7 Merge pull request #31296 from ruthra-kumar/misalinged_columns_in_AR_report
fix: misaligned columns in print format of AR/AP report
2022-06-09 17:35:21 +05:30
Ankush Menat
16c8b7404d Merge pull request #31072 from marination/perf-bom-update-tool
perf: BOM Update Tool
2022-06-09 17:04:00 +05:30
Vladislav
be50d7dd1b Update ru.csv 2022-06-09 14:11:12 +03:00
marination
3fa0a46f39 chore: Less hacky tests, versioning (replace bom) and clearing log data (update cost)
- Remove `auto_commit_on_many_writes` in `update_cost_in_level()` as commits happen every N BOMs
- Auto commit every 50 BOMs
- test: Remove hacky `frappe.flags.in_test` returns
- test: Enqueue `now` if in tests (for update cost and replace bom)
- Replace BOM: Copy bom object to `_doc_before_save` so that version.py finds a difference between the two
- Replace BOM: Add reference to version
- Update Cost: Unset `processed_boms` if Log is completed (useless after completion)
- test: `update_cost_in_all_boms_in_test` works close to actual prod implementation (only call Cron job manually)
- Test: use `enqueue_replace_bom`  so that test works closest to production behaviour

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
2022-06-09 16:27:51 +05:30
Ankush Menat
d9a5213952 fix(ux): hide new version btn on unsaved BOM (#31297) 2022-06-09 15:33:18 +05:30
ruthra kumar
bbaa14af16 fix: misaligned columns in print format of AR/AP report 2022-06-09 15:14:44 +05:30
Deepesh Garg
50aafdbe99 chore: cleanup 2022-06-09 11:52:46 +05:30
Deepesh Garg
20f568c159 fix(India): Incorrect taxable in GSTR-3B report 2022-06-09 11:50:37 +05:30
Ankush Menat
a6edce2397 Merge branch 'develop' into perf-bom-update-tool 2022-06-09 11:45:37 +05:30
Ankush Menat
eb53a9727d perf: commit GL reposting periodically
If you have a huge list of docs to repost then maintaining transaction
throughtout entire GL reposting is not only unnecessary but also creates
performance issues. Periodically commiting the changes prevents lost
progress and reduces memory usage.
2022-06-09 11:37:43 +05:30
Ankush Menat
67c26325ee fix: unnecessary GLE reposts
In Sales/Purchase invoices credit/debit are flipped and negated while making GLE,
this is unflipped while posting them but if we compare the flipped ones
it will always result in comparison failure and repost it.
2022-06-09 11:37:40 +05:30
Ankush Menat
65b21ee7d6 fix: internal transfer GLE validation 2022-06-08 19:26:40 +05:30
Nihantra C. Patel
43b0f2efe6 [DEV] Accounts: Added total of future amount, Remaining Balance in Payable and Receivable reports. 2022-06-08 17:36:42 +05:30
Rushabh Mehta
b29edb302c Merge pull request #31284 from rmehta/item-form-cleanup
fix(ux): Add tabs in Item
2022-06-08 17:01:57 +05:30
Sagar Sharma
f7a52f76d4 Merge branch 'develop' into subcontracting 2022-06-08 04:27:24 -07:00
Rushabh Mehta
5c6937865c fix(ux): Add tabs in Item 2022-06-08 16:30:44 +05:30
Marica
2832731601 fix: Use frappe.as_unicode to decode output of redis module list (#31282)
- As of redis 7, a list is added to the result of fetching the module list
- This list cannot be "decoded",so use `frappe.as_unicode` that handles bytes as well as other types
2022-06-08 15:52:13 +05:30
marination
7e41d84a11 chore: get_valuation_rate sider fixes
- Use qb instead of db.sql
- Don't use `args` as argument for function
- Cleaner variable names
2022-06-08 14:01:04 +05:30
ruthra kumar
018bc2af43 fix: ignore payment ledger on cancellation of loan 2022-06-08 12:03:47 +05:30
marination
9f2793ccf1 test: Fix test_update_bom_cost_in_all_boms
- Use base_rate for assertions as rate is subject to change due to conversion factor (USD)
2022-06-08 11:18:53 +05:30
Saqib Ansari
fb4f8d870b fix(india): e-invoice eligibility if company gstin is not configured (#31247) 2022-06-08 09:36:33 +05:30
Marica
ff0a6b7cbd Merge branch 'develop' into perf-bom-update-tool 2022-06-07 14:49:59 +05:30
marination
6bde1bb5d2 test: Util to update cost in all BOMs
- Utility to update cost in all BOMs without cron jobs or background jobs (run immediately)
- Re-use util wherever all bom costs are to be updated
- Skip explicit commits if in test
- Specify company in test records (dirty data sometimes, company wh mismatch)
- Skip background jobs queueing if in test
2022-06-07 14:44:00 +05:30
Vishal Dhayagude
934cb97d90 Merge branch 'develop' into fix_date_range_print 2022-06-06 21:34:14 +05:30
Rohit Waghchaure
d94ff3ede8 test: test cases to cover batch, serialized raw materials 2022-06-06 17:57:52 +05:30
marination
15101190a6 chore: get_valuation_rate in bom.py must always return float & goto Item master if no bins 2022-06-06 17:54:13 +05:30
Vladislav
6f4b91d94f Update ru.csv 2022-06-06 14:41:54 +03:00
marination
934db57fdd chore: Miscellanous fixes/enhancements
- `get_valuation_rate`: if no bins are found return 0, SLEs do not exist either
- `get_valuation_rate`: Compute average valuation rate via query
- `get_rm_rate_map`: set order_by as None to avoid creating sort index (modified) each time query runs (seen in process list)
- BOM Update Batch: add status field and hide `boms_updated` so that  users can see progress without loading all updated boms (too much data)
- BOM Update Batch: set batch row status to completed after job runs
- BOM Update Log: remove `parent_boms` field (just pass parent boms to processing function) & remove Paused state (not used)
- Move job to long queue to avoid choking default queue
- `update_cost_in_boms`: use `get_doc` as each BOM is accessed only once. Use `for_update` to lock BOM row
- Commit after every 100 BOMs
2022-06-06 17:01:51 +05:30
Deepesh Garg
fe5b9e8bbb Merge branch 'develop' into patch-4 2022-06-06 16:45:20 +05:30
vishdha
53774e0f52 chore: minor change in fetching start and end date 2022-06-06 16:00:56 +05:30
vishdha
3513d54c0a fix: Print/PDF for financial statement reports displays either wrong date range or wrong fiscal year 2022-06-06 16:00:56 +05:30
Vladislav
37d3c5121f Update ru.csv 2022-06-06 11:23:44 +03:00
Sagar Sharma
74fae72939 Merge branch 'develop' into subcontracting 2022-06-06 10:27:25 +05:30
Deepesh Garg
aad887bab9 Merge branch 'develop' into patch-4 2022-06-06 09:16:22 +05:30
Rohit Waghchaure
333c62de72 fix: transferred batches are not fetched while making Manufacture stock entry 2022-06-06 01:19:58 +05:30
s-aga-r
992ba974e2 Merge branch 'develop' into subcontracting 2022-06-03 13:25:49 +05:30
marination
62857e3e08 feat: Track progress in Log Batch/Job wise
- This was done due to stale reads while the background jobs tried updating status of the log
- Added a table where all bom jobs within log will be tracked with what level they are processing
- Cron job will check if table jobs are all processed every 5 mins
- If yes, it will prepare parents and call `process_boms_cost_level_wise` to start next level
- If pending jobs, do nothing
- Current BOM Level is being tracked that helps adding rows to the table
- Individual bom cost jobs (that are queued) will process and update boms > will update BOM Update Batch table row with list of updated BOMs
2022-06-02 13:35:30 +05:30
Ankush Menat
849a2dc349 Merge branch 'develop' into patch-4 2022-06-02 10:25:20 +05:30
Sun Howwrongbum
48bde2de2a fix: Trial Balance failing to ignore Finance Book 2022-06-01 20:20:16 +05:30
Vladislav
e523fd6bad Update ru.csv
fix logic
2022-05-31 17:04:24 +03:00
hrzzz
c4af63ad98 feat: two new groupby mode: Monthly, Payment Term 2022-05-31 10:46:56 -03:00
Vladislav
a4c2eccd56 Update ru.csv 2022-05-31 13:48:32 +03:00
marination
a62bc9b6c9 chore: Limit Update Cost jobs & db_update only if changed values
- If `Update Cost` job is ongoing, then block creation of new ones since all BOMs are updated
- `db_update` in `calculate_rm_cost` only if changed values to reduce redundant row updates
- Misc: Use variable for batch size
2022-05-31 16:00:29 +05:30
Vladislav
105dbad47c Update ru.csv 2022-05-31 03:06:28 +03:00
ruthra kumar
4c74637c91 refactor: remove naming expression for payment ledger 2022-05-30 19:06:56 +05:30
Vladislav
832bedc747 Update ru.csv 2022-05-30 12:56:27 +03:00
Vladislav
5b461bfa75 Merge branch 'frappe:develop' into develop 2022-05-30 12:11:20 +03:00
Vladislav
ac160d58bd Update ru.csv 2022-05-28 04:16:46 +03:00
Vladislav
1cff1df46b Merge branch 'frappe:develop' into develop 2022-05-28 04:11:33 +03:00
marination
978ba5238f fix: Safe cast row.rate (in case of faulty exploded items, edge case but oh well) 2022-05-27 21:59:59 +05:30
marination
2de2491e17 perf: get_next_higher_level_boms
- Separate getting dependants and checking if they are valid (loop within loop led to redundant processing that slowed down function)
- Adding to above, the same dependant(parent) was repeatedly processed as many children shared it. Expensive.
- Use a parent-child map similar to child-parent map to check if all children are resolved
- `map.get()` reduced time: 10 mins -> 0.9s~1 second (as compared to `get_cached_doc` or query)
- Total time: 17 seconds to process 6599 leaf boms and 4.2L parent boms
- Previous Total time: >10 mins (I terminated it due to not wanting to waste time XD)
2022-05-27 20:33:14 +05:30
marination
5949946265 chore: Change BOM Progress field types to Long Text 2022-05-27 17:04:21 +05:30
marination
eabd8290d4 feat: Only update exploded items rate and amount
- Generate RM-Rate map from Items table (will include subassembly items with rate)
- Function to reset exploded item rate from above map
- `db_update` exploded item rate only if rate is changed
- Via Update Cost, only update exploded items rate, do not regenerate table again
- Exploded Items are regenerated on Save and Replace BOM job
- `calculate_exploded_cost` is run only via non doc events (Update Cost button, Update BOMs Cost Job)
2022-05-27 14:32:58 +05:30
Deepesh Garg
d0a9eb4fd0 Merge branch 'develop' into fix-average-discount-auth 2022-05-26 18:22:34 +05:30
Sagar Sharma
61296a0658 fix: Subcontracting through Production Plan 2022-05-26 15:08:16 +05:30
Sagar Sharma
bcaac8f90f Merge branch 'develop' into subcontracting 2022-05-26 15:01:23 +05:30
Sagar Sharma
4ff734c25a Merge branch 'develop' into subcontracting 2022-05-25 12:32:33 +05:30
marination
9f5f18e94d style: Update docstrings and fix/add type hints + Collapsible progress section in Log 2022-05-25 11:22:13 +05:30
marination
ab2d95a74d feat: Level-wise BOM cost updation
- Process BOMs level wise and Pause after level is complete
- Cron job will resume Paused jobs, which will again process the new level and pause at the end
- This will go on until all BOMs are updated
- Added Progress section with fields to track updated BOMs in Log
- Cleanup: Add BOM Updation utils file to contain helper functions/sub-functions
- Cleanup: BOM Update Log file will only contain functions that are in direct context of the Log

Co-authored-by: Gavin D'souza <gavin18d@gmail.com>
2022-05-25 11:21:01 +05:30
Sagar Sharma
6e5effc1b0 Merge branch 'develop' into subcontracting 2022-05-23 11:35:50 +05:30
Vladislav
30c56bfe80 Update ru.csv 2022-05-22 14:04:24 +03:00
Sagar Sharma
07dc5f180d Merge branch 'develop' into subcontracting 2022-05-21 10:02:47 +05:30
Sagar Sharma
213113bc00 Merge branch 'develop' into subcontracting 2022-05-20 12:13:13 +05:30
Sagar Sharma
e9b28452e4 feat: SCR return 2022-05-20 10:45:34 +05:30
Sagar Sharma
323bdf85ce feat: SL and GL reposting 2022-05-20 10:45:34 +05:30
Sagar Sharma
fcc09592b9 refactor!: Stock Ledger Entry 2022-05-20 10:45:34 +05:30
Sagar Sharma
6c794afbe7 refactor!: Item Alternative 2022-05-20 10:45:34 +05:30
Sagar Sharma
92625902ad refactor!: BOM 2022-05-20 10:45:34 +05:30
Sagar Sharma
05f05ab75b refactor!: Subcontracted Item To Be Transferred 2022-05-20 10:45:33 +05:30
Sagar Sharma
3be663b121 refactor!: Subcontracted Item To Be Received 2022-05-20 10:45:33 +05:30
Sagar Sharma
8486bbf31a refactor!: Subcontract Order Summary 2022-05-20 10:45:33 +05:30
Sagar Sharma
3469560105 refactor!: Accounts Controller 2022-05-20 10:45:33 +05:30
Sagar Sharma
5fa3f58c06 refactor!: Purchase Invoice 2022-05-20 10:45:33 +05:30
Sagar Sharma
f09fc46059 refactor!: Purchase Receipt 2022-05-20 10:45:33 +05:30
Sagar Sharma
73484448f2 refactor!: Stock Entry 2022-05-20 10:45:33 +05:30
Sagar Sharma
34bda14b5b refactor!: Buying Controller 2022-05-20 10:45:33 +05:30
Sagar Sharma
dafaed3cbd refactor!: Purchase Order 2022-05-20 10:45:33 +05:30
Sagar Sharma
785d598762 test: SubcontractingReceipt 2022-05-20 10:45:33 +05:30
Sagar Sharma
8bc653b633 test: SubcontractingOrder 2022-05-20 10:45:33 +05:30
Sagar Sharma
574181f3d7 test: SubcontractingController 2022-05-20 10:45:33 +05:30
Sagar Sharma
70a1f40624 feat: New DocType "Subcontracting Receipt" 2022-05-20 10:45:33 +05:30
Sagar Sharma
3b17584bee feat: New DocType "Subcontracting Receipt Supplied Item" 2022-05-20 10:45:33 +05:30
Sagar Sharma
3daf62dce8 feat: New DocType "Subcontracting Receipt Item" 2022-05-20 10:45:33 +05:30
Sagar Sharma
409df263e8 refactor!: change "is_subcontracted" field type from "Select" to "Check" 2022-05-20 10:45:33 +05:30
Sagar Sharma
249726b845 feat: New DocType "Subcontracting Order" 2022-05-20 10:45:33 +05:30
Sagar Sharma
f49c51ab74 feat: New DocType "Subcontracting Order Supplied Item" 2022-05-20 10:45:33 +05:30
Sagar Sharma
f8b7594292 feat: New DocType "Subcontracting Order Item" 2022-05-20 10:45:33 +05:30
Sagar Sharma
dcac7eb67c feat: New DocType "Subcontracting Order Service Item" 2022-05-20 10:45:33 +05:30
Sagar Sharma
29a1cb89c2 feat: SubcontractingController 2022-05-20 10:45:33 +05:30
Sagar Sharma
68c21d9895 feat: Add fields "subcontracting_order" and "sco_rm_detail" in SE and SE Detail 2022-05-20 10:45:33 +05:30
Sagar Sharma
77db843692 refactor!: Make required changes to create SCO from PO 2022-05-20 10:45:30 +05:30
marination
90d4dc0cd6 fix: test_work_order_with_non_stock_item
- Use the right price list and currency to avoid rate conversion (1000/62.9), since rates are reset correctly now
- Use RM rate based on Price List in BOM. Non stock item has no valuation
2022-05-20 03:12:42 +05:30
marination
dd99c00eb6 fix: Get fresh RM rate in calculate_rm_cost 2022-05-19 21:48:24 +05:30
marination
9a7e9d902d perf: Use cached doc instead of get_doc
- Doc is only used to iterate over items(which wont change) and change rate/amount of rows
- These changes are inserted in db via `db_update`, so no harm
- Tested locally: refetching cached doc after db update, reflects fresh data.
2022-05-19 21:24:31 +05:30
marination
9dc3083088 fix: Call calculate_cost for Draft BOM and typo in argument 2022-05-19 20:33:48 +05:30
marination
5932e9d78a fix: DB update child items, remove redundancy, fix perf
- Move `get_boms_in_bottom_up_order` in bom update tool’s file
- Remove repeated rm cost update from `update_cost`. `calculate_cost` handles RM cost update
- db_update children in `calculate_cost` optionally
- Don’t call `update_exploded_items` and regenerate exploded items in `update_cost`. They will stay the same (except cost)
2022-05-19 20:22:13 +05:30
marination
b6e46eea80 perf: get_boms_in_bottom_up_order
- Create child-parent map once and fetch value from child key to get parents
- Get parents recursively for a leaf node (get all ancestors)
- Approx. 44 secs for 4lakh 70k boms
2022-05-18 13:00:00 +05:30
Vladislav
fb586eb7c0 Update ru.csv 2022-05-18 00:02:25 +03:00
Vladislav
0843344119 Update ru.csv 2022-05-17 16:21:42 +03:00
hrzzz
3c35c9b6ae fix: correction of the calculation to the average value when there is a discount on the document and not on the items 2022-05-14 10:45:26 -03:00
Sagar Sharma
f94d607288 feat: New module "Subcontracting" 2022-04-01 16:28:34 +05:30
Sagar Vora
ceccacac1f fix: restore inadvertently deleted patches 2022-03-17 13:43:13 +05:30
Sagar Vora
3d45f3a6a8 Merge remote-tracking branch 'upstream/develop' into remove-india 2022-03-03 10:20:50 +05:30
Smit Vora
80c0d0db21 Merge branch 'remove-india' of github.com:resilient-tech/erpnext into remove-india 2022-03-01 12:59:28 +05:30
Sagar Vora
b90a134d91 fix: remove patches 2022-02-25 11:36:18 +05:30
Sagar Vora
5159e2e6c5 refactor: remove India specific code 2022-02-25 11:36:18 +05:30
Sagar Vora
3936d8b70e refactor: remove India specific code 2022-02-20 11:48:04 +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
1870 changed files with 52560 additions and 315989 deletions

View File

@@ -66,6 +66,7 @@ ignore =
F841,
E713,
E712,
B023
max-line-length = 200

View File

@@ -2,13 +2,6 @@
set -e
# Check for merge conflicts before proceeding
python -m compileall -f "${GITHUB_WORKSPACE}"
if grep -lr --exclude-dir=node_modules "^<<<<<<< " "${GITHUB_WORKSPACE}"
then echo "Found merge conflicts"
exit 1
fi
cd ~ || exit
sudo apt update && sudo apt install redis-server libcups2-dev
@@ -31,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
@@ -63,6 +55,7 @@ sed -i 's/schedule:/# schedule:/g' Procfile
sed -i 's/socketio:/# socketio:/g' Procfile
sed -i 's/redis_socketio:/# redis_socketio:/g' Procfile
bench get-app payments
bench get-app erpnext "${GITHUB_WORKSPACE}"
if [ "$TYPE" == "server" ]; then bench setup requirements --dev; fi

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

View File

@@ -12,7 +12,7 @@ jobs:
- name: 'Setup Environment'
uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: '3.10'
- name: 'Clone repo'
uses: actions/checkout@v2

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,10 +11,10 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
- name: Set up Python 3.10
uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: '3.10'
- name: Install and Run Pre-commit
uses: pre-commit/action@v2.0.3
@@ -22,10 +22,8 @@ jobs:
- name: Download Semgrep rules
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules
- uses: returntocorp/semgrep-action@v1
env:
SEMGREP_TIMEOUT: 120
with:
config: >-
r/python.lang.correctness
./frappe-semgrep-rules/rules
- name: Download semgrep
run: pip install semgrep==0.97.0
- name: Run Semgrep rules
run: semgrep ci --config ./frappe-semgrep-rules/rules --config r/python.lang.correctness

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
@@ -34,10 +34,18 @@ jobs:
- name: Clone
uses: actions/checkout@v2
- name: Check for valid Python & Merge Conflicts
run: |
python -m compileall -f "${GITHUB_WORKSPACE}"
if grep -lr --exclude-dir=node_modules "^<<<<<<< " "${GITHUB_WORKSPACE}"
then echo "Found merge conflicts"
exit 1
fi
- name: Setup Python
uses: actions/setup-python@v2
uses: "gabrielfalcao/pyenv-action@v9"
with:
python-version: 3.8
versions: 3.10:latest, 3.7:latest
- name: Setup Node
uses: actions/setup-node@v2
@@ -52,7 +60,7 @@ jobs:
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
@@ -82,7 +90,10 @@ jobs:
${{ runner.os }}-yarn-
- name: Install
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
run: |
pip install frappe-bench
pyenv global $(pyenv versions | grep '3.10')
bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
env:
DB: mariadb
TYPE: server
@@ -96,6 +107,7 @@ jobs:
git -C "apps/frappe" remote set-url upstream https://github.com/frappe/frappe.git
git -C "apps/erpnext" remote set-url upstream https://github.com/frappe/erpnext.git
pyenv global $(pyenv versions | grep '3.7')
for version in $(seq 12 13)
do
echo "Updating to v$version"
@@ -107,7 +119,11 @@ jobs:
git -C "apps/frappe" checkout -q -f $branch_name
git -C "apps/erpnext" checkout -q -f $branch_name
bench setup requirements --python
rm -rf ~/frappe-bench/env
bench setup env
bench pip install -e ./apps/payments
bench pip install -e ./apps/erpnext
bench --site test_site migrate
done
@@ -115,4 +131,12 @@ jobs:
echo "Updating to latest version"
git -C "apps/frappe" checkout -q -f "${GITHUB_BASE_REF:-${GITHUB_REF##*/}}"
git -C "apps/erpnext" checkout -q -f "$GITHUB_SHA"
pyenv global $(pyenv versions | grep '3.10')
rm -rf ~/frappe-bench/env
bench -v setup env
bench pip install -e ./apps/payments
bench pip install -e ./apps/erpnext
bench --site test_site migrate
bench --site test_site install-app payments

30
.github/workflows/semantic-commits.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: Semantic Commits
on:
pull_request: {}
permissions:
contents: read
concurrency:
group: commitcheck-erpnext-${{ github.event.number }}
cancel-in-progress: true
jobs:
commitlint:
name: Check Commit Titles
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 200
- uses: actions/setup-node@v3
with:
node-version: 14
check-latest: true
- name: Check commit titles
run: |
npm install @commitlint/cli @commitlint/config-conventional
npx commitlint --verbose --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }}

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:
@@ -39,15 +39,15 @@ jobs:
fail-fast: false
matrix:
container: [1, 2, 3]
container: [1, 2, 3, 4]
name: Python Unit Tests
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,15 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: '3.11'
- name: Check for valid Python & Merge Conflicts
run: |
python -m compileall -f "${GITHUB_WORKSPACE}"
if grep -lr --exclude-dir=node_modules "^<<<<<<< " "${GITHUB_WORKSPACE}"
then echo "Found merge conflicts"
exit 1
fi
- name: Setup Node
uses: actions/setup-node@v2
@@ -74,7 +82,7 @@ jobs:
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
@@ -112,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:
@@ -21,7 +21,7 @@ jobs:
strategy:
fail-fast: false
matrix:
container: [1, 2, 3]
container: [1]
name: Python Unit Tests
@@ -46,7 +46,15 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: '3.10'
- name: Check for valid Python & Merge Conflicts
run: |
python -m compileall -f "${GITHUB_WORKSPACE}"
if grep -lr --exclude-dir=node_modules "^<<<<<<< " "${GITHUB_WORKSPACE}"
then echo "Found merge conflicts"
exit 1
fi
- name: Setup Node
uses: actions/setup-node@v2
@@ -61,7 +69,7 @@ jobs:
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
@@ -90,7 +98,6 @@ jobs:
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
env:

View File

@@ -9,6 +9,9 @@ pull_request_rules:
- author!=nabinhait
- author!=ankush
- author!=deepeshgarg007
- author!=frappe-pr-bot
- author!=mergify[bot]
- or:
- base=version-13
- base=version-12
@@ -19,6 +22,16 @@ pull_request_rules:
@{{author}}, thanks for the contribution, but we do not accept pull requests on a stable branch. Please raise PR on an appropriate hotfix branch.
https://github.com/frappe/erpnext/wiki/Pull-Request-Checklist#which-branch
- name: Auto-close PRs on pre-release branch
conditions:
- base=version-13-pre-release
actions:
close:
comment:
message: |
@{{author}}, pre-release branch is not maintained anymore. Releases are directly done by merging hotfix branch to stable branches.
- name: backport to develop
conditions:
- label="backport develop"

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

@@ -3,33 +3,26 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence,
erpnext/accounts/ @nextchamp-saqib @deepeshgarg007
erpnext/assets/ @nextchamp-saqib @deepeshgarg007
erpnext/erpnext_integrations/ @nextchamp-saqib
erpnext/accounts/ @nextchamp-saqib @deepeshgarg007 @ruthra-kumar
erpnext/assets/ @nextchamp-saqib @deepeshgarg007 @ruthra-kumar
erpnext/loan_management/ @nextchamp-saqib @deepeshgarg007
erpnext/regional @nextchamp-saqib @deepeshgarg007
erpnext/selling @nextchamp-saqib @deepeshgarg007
erpnext/regional @nextchamp-saqib @deepeshgarg007 @ruthra-kumar
erpnext/selling @nextchamp-saqib @deepeshgarg007 @ruthra-kumar
erpnext/support/ @nextchamp-saqib @deepeshgarg007
pos* @nextchamp-saqib
erpnext/buying/ @marination @rohitwaghchaure @ankush
erpnext/e_commerce/ @marination
erpnext/maintenance/ @marination @rohitwaghchaure
erpnext/manufacturing/ @marination @rohitwaghchaure @ankush
erpnext/portal/ @marination
erpnext/quality_management/ @marination @rohitwaghchaure
erpnext/shopping_cart/ @marination
erpnext/stock/ @marination @rohitwaghchaure @ankush
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/ @ruchamahabal @pateljannat
erpnext/education/ @ruchamahabal @pateljannat
erpnext/hr/ @ruchamahabal @pateljannat
erpnext/payroll @ruchamahabal @pateljannat
erpnext/projects/ @ruchamahabal @pateljannat
erpnext/crm/ @NagariaHussain
erpnext/education/ @rutwikhdev
erpnext/projects/ @ruchamahabal
erpnext/controllers/ @deepeshgarg007 @nextchamp-saqib @rohitwaghchaure @marination @ankush
erpnext/patches/ @deepeshgarg007 @nextchamp-saqib @marination @ankush
erpnext/public/ @nextchamp-saqib @marination
erpnext/controllers/ @deepeshgarg007 @nextchamp-saqib @rohitwaghchaure
erpnext/patches/ @deepeshgarg007 @nextchamp-saqib
.github/ @ankush
requirements.txt @gavindsouza
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).

25
commitlint.config.js Normal file
View File

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

View File

@@ -1 +0,0 @@
hypothesis~=6.31.0

View File

@@ -2,7 +2,7 @@ import inspect
import frappe
__version__ = "14.0.0-beta.5"
__version__ = "14.0.0-dev"
def get_default_company(user=None):

View File

@@ -10,4 +10,42 @@ Entries are:
- Sales Invoice (Itemised)
- Purchase Invoice (Itemised)
All accounting entries are stored in the `General Ledger`
All accounting entries are stored in the `General Ledger`
## Payment Ledger
Transactions on Receivable and Payable Account types will also be stored in `Payment Ledger`. This is so that payment reconciliation process only requires update on this ledger.
### Key Fields
| Field | Description |
|----------------------|----------------------------------|
| `account_type` | Receivable/Payable |
| `account` | Accounting head |
| `party` | Party Name |
| `voucher_no` | Voucher No |
| `against_voucher_no` | Linked voucher(secondary effect) |
| `amount` | can be +ve/-ve |
### Design
`debit` and `credit` have been replaced with `account_type` and `amount`. `against_voucher_no` is populated for all entries. So, outstanding amount can be calculated by summing up amount only using `against_voucher_no`.
Ex:
1. Consider an invoice for ₹100 and a partial payment of ₹80 against that invoice. Payment Ledger will have following entries.
| voucher_no | against_voucher_no | amount |
|------------|--------------------|--------|
| SINV-01 | SINV-01 | 100 |
| PAY-01 | SINV-01 | -80 |
2. Reconcile a Credit Note against an invoice using a Journal Entry
An invoice for ₹100 partially reconciled against a credit of ₹70 using a Journal Entry. Payment Ledger will have the following entries.
| voucher_no | against_voucher_no | amount |
|------------|--------------------|--------|
| SINV-01 | SINV-01 | 100 |
| | | |
| CR-NOTE-01 | CR-NOTE-01 | -70 |
| | | |
| JE-01 | CR-NOTE-01 | +70 |
| JE-01 | SINV-01 | -70 |

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)
@@ -322,9 +325,9 @@ def get_parent_account(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql(
"""select name from tabAccount
where is_group = 1 and docstatus != 2 and company = %s
and %s like %s order by name limit %s, %s"""
and %s like %s order by name limit %s offset %s"""
% ("%s", searchfield, "%s", "%s", "%s"),
(filters["company"], "%%%s%%" % txt, start, page_len),
(filters["company"], "%%%s%%" % txt, page_len, start),
as_list=1,
)
@@ -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

@@ -49,15 +49,9 @@ class AccountingPeriod(Document):
@frappe.whitelist()
def get_doctypes_for_closing(self):
docs_for_closing = []
doctypes = [
"Sales Invoice",
"Purchase Invoice",
"Journal Entry",
"Payroll Entry",
"Bank Clearance",
"Asset",
"Stock Entry",
]
# get period closing doctypes from all the apps
doctypes = frappe.get_hooks("period_closing_doctypes")
closed_doctypes = [{"document_type": doctype, "closed": 1} for doctype in doctypes]
for closed_doctype in closed_doctypes:
docs_for_closing.append(closed_doctype)

View File

@@ -18,6 +18,7 @@
"automatically_fetch_payment_terms",
"column_break_17",
"enable_common_party_accounting",
"allow_multi_currency_invoices_against_single_party_account",
"report_setting_section",
"use_custom_cash_flow",
"deferred_accounting_settings_section",
@@ -90,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"
@@ -339,6 +340,13 @@
"fieldname": "report_setting_section",
"fieldtype": "Section Break",
"label": "Report Setting"
},
{
"default": "0",
"description": "Enabling this will allow creation of multi-currency invoices against single party account in company currency",
"fieldname": "allow_multi_currency_invoices_against_single_party_account",
"fieldtype": "Check",
"label": "Allow multi-currency invoices against single party account "
}
],
"icon": "icon-cog",
@@ -346,7 +354,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2022-04-08 14:45:06.796418",
"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,12 +99,12 @@ 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")
loan_repayments = (
query = (
frappe.qb.from_(loan_repayment)
.select(
ConstantColumn("Loan Repayment").as_("payment_document"),
@@ -118,13 +118,19 @@ class BankClearance(Document):
)
.where(loan_repayment.docstatus == 1)
.where(loan_repayment.clearance_date.isnull())
.where(loan_repayment.repay_from_salary == 0)
.where(loan_repayment.posting_date >= self.from_date)
.where(loan_repayment.posting_date <= self.to_date)
.where(loan_repayment.payment_account.isin([self.bank_account, self.account]))
.orderby(loan_repayment.posting_date)
.orderby(loan_repayment.name, frappe.qb.desc)
).run(as_dict=1)
)
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, order=frappe.qb.desc
)
loan_repayments = query.run(as_dict=True)
pos_sales_invoices, pos_purchase_invoices = [], []
if self.include_pos_transactions:
@@ -173,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:
@@ -192,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

@@ -10,7 +10,6 @@ from frappe.model.document import Document
from frappe.query_builder.custom import ConstantColumn
from frappe.utils import flt
from erpnext import get_company_currency
from erpnext.accounts.doctype.bank_transaction.bank_transaction import get_paid_amount
from erpnext.accounts.report.bank_reconciliation_statement.bank_reconciliation_statement import (
get_amounts_not_reflected_in_system,
@@ -58,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}
)
@@ -131,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(
@@ -165,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,
@@ -220,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,
@@ -267,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"))
@@ -291,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(
@@ -368,6 +371,27 @@ def get_queries(bank_account, company, transaction, document_types):
account_from_to = "paid_to" if transaction.deposit > 0 else "paid_from"
queries = []
# get matching queries from all the apps
for method_name in frappe.get_hooks("get_matching_queries"):
queries.extend(
frappe.get_attr(method_name)(
bank_account,
company,
transaction,
document_types,
amount_condition,
account_from_to,
)
or []
)
return queries
def get_matching_queries(
bank_account, company, transaction, document_types, amount_condition, account_from_to
):
queries = []
if "payment_entry" in document_types:
pe_amount_matching = get_pe_matching_query(amount_condition, account_from_to, transaction)
queries.extend([pe_amount_matching])
@@ -385,10 +409,6 @@ def get_queries(bank_account, company, transaction, document_types):
pi_amount_matching = get_pi_matching_query(amount_condition)
queries.extend([pi_amount_matching])
if "expense_claim" in document_types:
ec_amount_matching = get_ec_matching_query(bank_account, company, amount_condition)
queries.extend([ec_amount_matching])
return queries
@@ -467,11 +487,13 @@ def get_lr_matching_query(bank_account, amount_condition, filters):
loan_repayment.posting_date,
)
.where(loan_repayment.docstatus == 1)
.where(loan_repayment.repay_from_salary == 0)
.where(loan_repayment.clearance_date.isnull())
.where(loan_repayment.payment_account == bank_account)
)
if frappe.db.has_column("Loan Repayment", "repay_from_salary"):
query = query.where((loan_repayment.repay_from_salary == 0))
if amount_condition:
query.where(loan_repayment.amount_paid == filters.get("amount"))
else:
@@ -602,37 +624,3 @@ def get_pi_matching_query(amount_condition):
AND ifnull(clearance_date, '') = ""
AND cash_bank_account = %(bank_account)s
"""
def get_ec_matching_query(bank_account, company, amount_condition):
# get matching Expense Claim query
mode_of_payments = [
x["parent"]
for x in frappe.db.get_all(
"Mode of Payment Account", filters={"default_account": bank_account}, fields=["parent"]
)
]
mode_of_payments = "('" + "', '".join(mode_of_payments) + "' )"
company_currency = get_company_currency(company)
return f"""
SELECT
( CASE WHEN employee = %(party)s THEN 1 ELSE 0 END
+ 1 ) AS rank,
'Expense Claim' as doctype,
name,
total_sanctioned_amount as paid_amount,
'' as reference_no,
'' as reference_date,
employee as party,
'Employee' as party_type,
posting_date,
'{company_currency}' as currency
FROM
`tabExpense Claim`
WHERE
total_sanctioned_amount {amount_condition} %(amount)s
AND docstatus = 1
AND is_paid = 1
AND ifnull(clearance_date, '') = ""
AND mode_of_payment in {mode_of_payments}
"""

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

@@ -3,28 +3,21 @@
frappe.ui.form.on("Bank Transaction", {
onload(frm) {
frm.set_query("payment_document", "payment_entries", function () {
frm.set_query("payment_document", "payment_entries", function() {
const payment_doctypes = frm.events.get_payment_doctypes(frm);
return {
filters: {
name: [
"in",
[
"Payment Entry",
"Journal Entry",
"Sales Invoice",
"Purchase Invoice",
"Expense Claim",
],
],
name: ["in", payment_doctypes],
},
};
});
},
bank_account: function (frm) {
bank_account: function(frm) {
set_bank_statement_filter(frm);
},
setup: function (frm) {
setup: function(frm) {
frm.set_query("party_type", function () {
return {
filters: {
@@ -33,6 +26,16 @@ frappe.ui.form.on("Bank Transaction", {
};
});
},
get_payment_doctypes: function() {
// get payment doctypes from all the apps
return [
"Payment Entry",
"Journal Entry",
"Sales Invoice",
"Purchase Invoice",
];
}
});
frappe.ui.form.on("Bank Transaction Payments", {

View File

@@ -58,18 +58,10 @@ class BankTransaction(StatusUpdater):
def clear_linked_payment_entries(self, for_cancel=False):
for payment_entry in self.payment_entries:
if payment_entry.payment_document in [
"Payment Entry",
"Journal Entry",
"Purchase Invoice",
"Expense Claim",
"Loan Repayment",
"Loan Disbursement",
]:
self.clear_simple_entry(payment_entry, for_cancel=for_cancel)
elif payment_entry.payment_document == "Sales Invoice":
if payment_entry.payment_document == "Sales Invoice":
self.clear_sales_invoice(payment_entry, for_cancel=for_cancel)
elif payment_entry.payment_document in get_doctypes_for_bank_reconciliation():
self.clear_simple_entry(payment_entry, for_cancel=for_cancel)
def clear_simple_entry(self, payment_entry, for_cancel=False):
if payment_entry.payment_document == "Payment Entry":
@@ -95,6 +87,12 @@ class BankTransaction(StatusUpdater):
)
@frappe.whitelist()
def get_doctypes_for_bank_reconciliation():
"""Get Bank Reconciliation doctypes from all the apps"""
return frappe.get_hooks("bank_reconciliation_doctypes")
def get_reconciled_bank_transactions(payment_entry):
reconciled_bank_transactions = frappe.get_all(
"Bank Transaction Payments",

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

@@ -5,6 +5,7 @@ import json
import unittest
import frappe
from frappe.tests.utils import FrappeTestCase
from erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool import (
get_linked_payments,
@@ -18,28 +19,21 @@ from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sal
test_dependencies = ["Item", "Cost Center"]
class TestBankTransaction(unittest.TestCase):
@classmethod
def setUpClass(cls):
class TestBankTransaction(FrappeTestCase):
def setUp(self):
for dt in [
"Loan Repayment",
"Bank Transaction",
"Payment Entry",
"Payment Entry Reference",
"POS Profile",
]:
frappe.db.delete(dt)
make_pos_profile()
add_transactions()
add_vouchers()
@classmethod
def tearDownClass(cls):
for bt in frappe.get_all("Bank Transaction"):
doc = frappe.get_doc("Bank Transaction", bt.name)
if doc.docstatus == 1:
doc.cancel()
doc.delete()
# Delete directly in DB to avoid validation errors for countries not allowing deletion
frappe.db.sql("""delete from `tabPayment Entry Reference`""")
frappe.db.sql("""delete from `tabPayment Entry`""")
# Delete POS Profile
frappe.db.sql("delete from `tabPOS Profile`")
# This test checks if ERPNext is able to provide a linked payment for a bank transaction based on the amount of the bank transaction.
def test_linked_payments(self):
bank_transaction = frappe.get_doc(
@@ -155,6 +149,35 @@ class TestBankTransaction(unittest.TestCase):
is not None
)
def test_matching_loan_repayment(self):
from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts
create_loan_accounts()
bank_account = frappe.get_doc(
{
"doctype": "Bank Account",
"account_name": "Payment Account",
"bank": "Citi Bank",
"account": "Payment Account - _TC",
}
).insert(ignore_if_duplicate=True)
bank_transaction = frappe.get_doc(
{
"doctype": "Bank Transaction",
"description": "Loan Repayment - OPSKATTUZWXXX AT776000000098709837 Herr G",
"date": "2018-10-27",
"deposit": 500,
"currency": "INR",
"bank_account": bank_account.name,
}
).submit()
repayment_entry = create_loan_and_repayment()
linked_payments = get_linked_payments(bank_transaction.name, ["loan_repayment", "exact_match"])
self.assertEqual(linked_payments[0][2], repayment_entry.name)
def create_bank_account(bank_name="Citi Bank", account_name="_Test Bank - _TC"):
try:
@@ -364,3 +387,59 @@ def add_vouchers():
)
si.insert()
si.submit()
def create_loan_and_repayment():
from erpnext.loan_management.doctype.loan.test_loan import (
create_loan,
create_loan_type,
create_repayment_entry,
make_loan_disbursement_entry,
)
from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import (
process_loan_interest_accrual_for_term_loans,
)
from erpnext.setup.doctype.employee.test_employee import make_employee
create_loan_type(
"Personal Loan",
500000,
8.4,
is_term_loan=1,
mode_of_payment="Cash",
disbursement_account="Disbursement Account - _TC",
payment_account="Payment Account - _TC",
loan_account="Loan Account - _TC",
interest_income_account="Interest Income Account - _TC",
penalty_income_account="Penalty Income Account - _TC",
)
applicant = make_employee("test_bank_reco@loan.com", company="_Test Company")
loan = create_loan(applicant, "Personal Loan", 5000, "Repay Over Number of Periods", 20)
loan = frappe.get_doc(
{
"doctype": "Loan",
"applicant_type": "Employee",
"company": "_Test Company",
"applicant": applicant,
"loan_type": "Personal Loan",
"loan_amount": 5000,
"repayment_method": "Repay Fixed Amount per Period",
"monthly_repayment_amount": 500,
"repayment_start_date": "2018-09-27",
"is_term_loan": 1,
"posting_date": "2018-09-27",
}
).insert()
make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date="2018-09-27")
process_loan_interest_accrual_for_term_loans(posting_date="2018-10-27")
repayment_entry = create_repayment_entry(
loan.name,
applicant,
"2018-10-27",
500,
)
repayment_entry.submit()
return repayment_entry

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

@@ -1 +0,0 @@
C Form (India specific only) - Will be deprecated.

View File

@@ -1,43 +0,0 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
//c-form js file
// -----------------------------
frappe.ui.form.on('C-Form', {
setup(frm) {
frm.fields_dict.invoices.grid.get_field("invoice_no").get_query = function(doc) {
return {
filters: {
"docstatus": 1,
"customer": doc.customer,
"company": doc.company,
"c_form_applicable": 'Yes',
"c_form_no": ''
}
};
}
frm.fields_dict.state.get_query = function() {
return {
filters: {
country: "India"
}
};
}
}
});
frappe.ui.form.on('C-Form Invoice Detail', {
invoice_no(frm, cdt, cdn) {
let d = frappe.get_doc(cdt, cdn);
if (d.invoice_no) {
frm.call('get_invoice_details', {
invoice_no: d.invoice_no
}).then(r => {
frappe.model.set_value(cdt, cdn, r.message);
});
}
}
});

View File

@@ -1,511 +0,0 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "naming_series:",
"beta": 0,
"creation": "2013-03-07 11:55:06",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"editable_grid": 0,
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "",
"fieldname": "naming_series",
"fieldtype": "Select",
"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": "Series",
"length": 0,
"no_copy": 0,
"options": "ACC-CF-.YYYY.-",
"permlevel": 0,
"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": 1,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "c_form_no",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "C-Form No",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "received_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": "Received Date",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "customer",
"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": "Customer",
"length": 0,
"no_copy": 0,
"options": "Customer",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break1",
"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,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "50%",
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0,
"width": "50%"
},
{
"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": 0,
"in_standard_filter": 1,
"label": "Company",
"length": 0,
"no_copy": 0,
"options": "Company",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "quarter",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Quarter",
"length": 0,
"no_copy": 0,
"options": "\nI\nII\nIII\nIV",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "total_amount",
"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 Amount",
"length": 0,
"no_copy": 0,
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "state",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "State",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "section_break0",
"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,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "invoices",
"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": "Invoices",
"length": 0,
"no_copy": 0,
"options": "C-Form Invoice Detail",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "total_invoiced_amount",
"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 Invoiced Amount",
"length": 0,
"no_copy": 0,
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"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": 1,
"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": "C-Form",
"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
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "fa fa-file-text",
"idx": 1,
"image_view": 0,
"in_create": 0,
"is_submittable": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 3,
"modified": "2018-08-21 14:44:30.558767",
"modified_by": "Administrator",
"module": "Accounts",
"name": "C-Form",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 0,
"email": 1,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 0,
"email": 1,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"email": 0,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 1,
"print": 0,
"read": 1,
"report": 1,
"role": "All",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
}
],
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_order": "DESC",
"timeline_field": "customer",
"track_changes": 0,
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,96 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
import frappe
from frappe import _
from frappe.model.document import Document
from frappe.utils import flt
class CForm(Document):
def validate(self):
"""Validate invoice that c-form is applicable
and no other c-form is received for that"""
for d in self.get("invoices"):
if d.invoice_no:
inv = frappe.db.sql(
"""select c_form_applicable, c_form_no from
`tabSales Invoice` where name = %s and docstatus = 1""",
d.invoice_no,
)
if inv and inv[0][0] != "Yes":
frappe.throw(_("C-form is not applicable for Invoice: {0}").format(d.invoice_no))
elif inv and inv[0][1] and inv[0][1] != self.name:
frappe.throw(
_(
"""Invoice {0} is tagged in another C-form: {1}.
If you want to change C-form no for this invoice,
please remove invoice no from the previous c-form and then try again""".format(
d.invoice_no, inv[0][1]
)
)
)
elif not inv:
frappe.throw(
_(
"Row {0}: Invoice {1} is invalid, it might be cancelled / does not exist. \
Please enter a valid Invoice".format(
d.idx, d.invoice_no
)
)
)
def on_update(self):
"""Update C-Form No on invoices"""
self.set_total_invoiced_amount()
def on_submit(self):
self.set_cform_in_sales_invoices()
def before_cancel(self):
# remove cform reference
frappe.db.sql("""update `tabSales Invoice` set c_form_no=null where c_form_no=%s""", self.name)
def set_cform_in_sales_invoices(self):
inv = [d.invoice_no for d in self.get("invoices")]
if inv:
frappe.db.sql(
"""update `tabSales Invoice` set c_form_no=%s, modified=%s where name in (%s)"""
% ("%s", "%s", ", ".join(["%s"] * len(inv))),
tuple([self.name, self.modified] + inv),
)
frappe.db.sql(
"""update `tabSales Invoice` set c_form_no = null, modified = %s
where name not in (%s) and ifnull(c_form_no, '') = %s"""
% ("%s", ", ".join(["%s"] * len(inv)), "%s"),
tuple([self.modified] + inv + [self.name]),
)
else:
frappe.throw(_("Please enter atleast 1 invoice in the table"))
def set_total_invoiced_amount(self):
total = sum(flt(d.grand_total) for d in self.get("invoices"))
frappe.db.set(self, "total_invoiced_amount", total)
@frappe.whitelist()
def get_invoice_details(self, invoice_no):
"""Pull details from invoices for referrence"""
if invoice_no:
inv = frappe.db.get_value(
"Sales Invoice",
invoice_no,
["posting_date", "territory", "base_net_total", "base_grand_total"],
as_dict=True,
)
return {
"invoice_date": inv.posting_date,
"territory": inv.territory,
"net_total": inv.base_net_total,
"grand_total": inv.base_grand_total,
}

View File

@@ -1,10 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
import unittest
# test_records = frappe.get_test_records('C-Form')
class TestCForm(unittest.TestCase):
pass

View File

@@ -1 +0,0 @@
Invoice detail for parent C-Form.

View File

@@ -1,168 +0,0 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2013-02-22 01:27:38",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"editable_grid": 1,
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "invoice_no",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Invoice No",
"length": 0,
"no_copy": 0,
"options": "Sales Invoice",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "160px",
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "160px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "invoice_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Invoice Date",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "120px",
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "120px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"description": "",
"fieldname": "territory",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Territory",
"length": 0,
"no_copy": 0,
"options": "Territory",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "120px",
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "120px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "net_total",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Net Total",
"length": 0,
"no_copy": 0,
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "120px",
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "120px"
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "grand_total",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Grand Total",
"length": 0,
"no_copy": 0,
"options": "Company:company:default_currency",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"print_width": "120px",
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0,
"width": "120px"
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-07-11 03:27:58.768719",
"modified_by": "Administrator",
"module": "Accounts",
"name": "C-Form Invoice Detail",
"owner": "Administrator",
"permissions": [],
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"track_seen": 0
}

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from frappe.model.document import Document
class CFormInvoiceDetail(Document):
pass

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

@@ -29,7 +29,6 @@ def test_create_test_data():
"item_name": "_Test Tesla Car",
"apply_warehouse_wise_reorder_level": 0,
"warehouse": "Stores - _TC",
"gst_hsn_code": "999800",
"valuation_rate": 5000,
"standard_rate": 5000,
"item_defaults": [

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

@@ -42,7 +42,7 @@ class GLEntry(Document):
self.validate_and_set_fiscal_year()
self.pl_must_have_cost_center()
if not self.flags.from_repost:
if not self.flags.from_repost and self.voucher_type != "Period Closing Voucher":
self.check_mandatory()
self.validate_cost_center()
self.check_pl_account()
@@ -51,23 +51,27 @@ class GLEntry(Document):
def on_update(self):
adv_adj = self.flags.adv_adj
if not self.flags.from_repost:
if not self.flags.from_repost and self.voucher_type != "Period Closing Voucher":
self.validate_account_details(adv_adj)
self.validate_dimensions_for_pl_and_bs()
self.validate_allowed_dimensions()
validate_balance_type(self.account, adv_adj)
validate_frozen_account(self.account, adv_adj)
# Update outstanding amt on against voucher
if (
self.against_voucher_type in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"]
and self.against_voucher
and self.flags.update_outstanding == "Yes"
and not frappe.flags.is_reverse_depr_entry
):
update_outstanding_amt(
self.account, self.party_type, self.party, self.against_voucher_type, self.against_voucher
)
if frappe.get_cached_value("Account", self.account, "account_type") not in [
"Receivable",
"Payable",
]:
# Update outstanding amt on against voucher
if (
self.against_voucher_type in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"]
and self.against_voucher
and self.flags.update_outstanding == "Yes"
and not frappe.flags.is_reverse_depr_entry
):
update_outstanding_amt(
self.account, self.party_type, self.party, self.against_voucher_type, self.against_voucher
)
def check_mandatory(self):
mandatory = ["account", "voucher_type", "voucher_no", "company"]
@@ -116,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 (
@@ -184,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(
@@ -277,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)
@@ -362,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

@@ -1,90 +0,0 @@
{
"actions": [],
"creation": "2018-01-02 15:48:58.768352",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"company",
"cgst_account",
"sgst_account",
"igst_account",
"cess_account",
"utgst_account",
"is_reverse_charge_account"
],
"fields": [
{
"columns": 1,
"fieldname": "company",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company",
"options": "Company",
"reqd": 1
},
{
"columns": 2,
"fieldname": "cgst_account",
"fieldtype": "Link",
"in_list_view": 1,
"label": "CGST Account",
"options": "Account",
"reqd": 1
},
{
"columns": 2,
"fieldname": "sgst_account",
"fieldtype": "Link",
"in_list_view": 1,
"label": "SGST Account",
"options": "Account",
"reqd": 1
},
{
"columns": 2,
"fieldname": "igst_account",
"fieldtype": "Link",
"in_list_view": 1,
"label": "IGST Account",
"options": "Account",
"reqd": 1
},
{
"columns": 2,
"fieldname": "cess_account",
"fieldtype": "Link",
"in_list_view": 1,
"label": "CESS Account",
"options": "Account"
},
{
"columns": 1,
"default": "0",
"fieldname": "is_reverse_charge_account",
"fieldtype": "Check",
"in_list_view": 1,
"label": "Is Reverse Charge Account"
},
{
"fieldname": "utgst_account",
"fieldtype": "Link",
"label": "UTGST Account",
"options": "Account"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2022-04-07 12:59:14.039768",
"modified_by": "Administrator",
"module": "Accounts",
"name": "GST Account",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
from frappe.model.document import Document
class GSTAccount(Document):
pass

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

@@ -149,22 +149,6 @@ frappe.ui.form.on("Journal Entry", {
}
});
}
else if(frm.doc.voucher_type=="Opening Entry") {
return frappe.call({
type:"GET",
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_opening_accounts",
args: {
"company": frm.doc.company
},
callback: function(r) {
frappe.model.clear_table(frm.doc, "accounts");
if(r.message) {
update_jv_details(frm.doc, r.message);
}
cur_frm.set_value("is_opening", "Yes");
}
});
}
}
},
@@ -189,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");
}
@@ -240,25 +224,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
me.frm.set_query("reference_name", "accounts", function(doc, cdt, cdn) {
var jvd = frappe.get_doc(cdt, cdn);
// expense claim
if(jvd.reference_type==="Expense Claim") {
return {
filters: {
'total_sanctioned_amount': ['>', 0],
'status': ['!=', 'Paid'],
'docstatus': 1
}
};
}
if(jvd.reference_type==="Employee Advance") {
return {
filters: {
'docstatus': 1
}
};
}
// journal entry
if(jvd.reference_type==="Journal Entry") {
frappe.model.validate_missing(jvd, "account");
@@ -271,13 +236,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
};
}
// payroll entry
if(jvd.reference_type==="Payroll Entry") {
return {
query: "erpnext.payroll.doctype.payroll_entry.payroll_entry.get_payroll_entries_for_jv",
};
}
var out = {
filters: [
[jvd.reference_type, "docstatus", "=", 1]
@@ -295,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)) {
@@ -354,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

@@ -137,7 +137,8 @@
"fieldname": "finance_book",
"fieldtype": "Link",
"label": "Finance Book",
"options": "Finance Book"
"options": "Finance Book",
"read_only": 1
},
{
"fieldname": "2_add_edit_gl_entries",
@@ -538,7 +539,7 @@
"idx": 176,
"is_submittable": 1,
"links": [],
"modified": "2022-04-06 17:18:46.865259",
"modified": "2022-06-23 22:01:32.348337",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry",

View File

@@ -24,7 +24,6 @@ from erpnext.accounts.utils import (
get_stock_and_account_balance,
)
from erpnext.controllers.accounts_controller import AccountsController
from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount
class StockAccountInvalidTransaction(frappe.ValidationError):
@@ -66,7 +65,6 @@ class JournalEntry(AccountsController):
self.set_against_account()
self.create_remarks()
self.set_print_format_fields()
self.validate_expense_claim()
self.validate_credit_debit_note()
self.validate_empty_accounts_table()
self.set_account_and_party_balance()
@@ -83,27 +81,21 @@ class JournalEntry(AccountsController):
self.check_credit_limit()
self.make_gl_entries()
self.update_advance_paid()
self.update_expense_claim()
self.update_inter_company_jv()
self.update_invoice_discounting()
self.update_status_for_full_and_final_statement()
def on_cancel(self):
from erpnext.accounts.utils import unlink_ref_doc_from_payment_entries
from erpnext.payroll.doctype.salary_slip.salary_slip import unlink_ref_doc_from_salary_slip
unlink_ref_doc_from_payment_entries(self)
unlink_ref_doc_from_salary_slip(self.name)
self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Payment Ledger Entry")
self.make_gl_entries(1)
self.update_advance_paid()
self.update_expense_claim()
self.unlink_advance_entry_reference()
self.unlink_asset_reference()
self.unlink_inter_company_jv()
self.unlink_asset_adjustment_entry()
self.update_invoice_discounting()
self.update_status_for_full_and_final_statement()
def get_title(self):
return self.pay_to_recd_from or self.accounts[0].account
@@ -112,21 +104,13 @@ class JournalEntry(AccountsController):
advance_paid = frappe._dict()
for d in self.get("accounts"):
if d.is_advance:
if d.reference_type in ("Sales Order", "Purchase Order", "Employee Advance"):
if d.reference_type in frappe.get_hooks("advance_payment_doctypes"):
advance_paid.setdefault(d.reference_type, []).append(d.reference_name)
for voucher_type, order_list in advance_paid.items():
for voucher_no in list(set(order_list)):
frappe.get_doc(voucher_type, voucher_no).set_total_advance_paid()
def update_status_for_full_and_final_statement(self):
for entry in self.accounts:
if entry.reference_type == "Full and Final Statement":
if self.docstatus == 1:
frappe.db.set_value("Full and Final Statement", entry.reference_name, "status", "Paid")
elif self.docstatus == 2:
frappe.db.set_value("Full and Final Statement", entry.reference_name, "status", "Unpaid")
def validate_inter_company_accounts(self):
if (
self.voucher_type == "Inter Company Journal Entry"
@@ -200,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
@@ -333,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(
@@ -396,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(
_(
@@ -416,7 +402,7 @@ class JournalEntry(AccountsController):
against_entries = frappe.db.sql(
"""select * from `tabJournal Entry Account`
where account = %s and docstatus = 1 and parent = %s
and (reference_type is null or reference_type in ("", "Sales Order", "Purchase Order"))
and (reference_type is null or reference_type in ('', 'Sales Order', 'Purchase Order'))
""",
(d.account, d.reference_name),
as_dict=True,
@@ -645,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:
@@ -776,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
@@ -800,9 +786,7 @@ class JournalEntry(AccountsController):
self.total_amount_in_words = money_in_words(amt, currency)
def make_gl_entries(self, cancel=0, adv_adj=0):
from erpnext.accounts.general_ledger import make_gl_entries
def build_gl_map(self):
gl_map = []
for d in self.get("accounts"):
if d.debit or d.credit:
@@ -838,7 +822,12 @@ class JournalEntry(AccountsController):
item=d,
)
)
return gl_map
def make_gl_entries(self, cancel=0, adv_adj=0):
from erpnext.accounts.general_ledger import make_gl_entries
gl_map = self.build_gl_map()
if self.voucher_type in ("Deferred Revenue", "Deferred Expense"):
update_outstanding = "No"
else:
@@ -932,29 +921,6 @@ class JournalEntry(AccountsController):
as_dict=True,
)
def update_expense_claim(self):
for d in self.accounts:
if d.reference_type == "Expense Claim" and d.reference_name:
doc = frappe.get_doc("Expense Claim", d.reference_name)
if self.docstatus == 2:
update_reimbursed_amount(doc, -1 * d.debit)
else:
update_reimbursed_amount(doc, d.debit)
def validate_expense_claim(self):
for d in self.accounts:
if d.reference_type == "Expense Claim":
sanctioned_amount, reimbursed_amount = frappe.db.get_value(
"Expense Claim", d.reference_name, ("total_sanctioned_amount", "total_amount_reimbursed")
)
pending_amount = flt(sanctioned_amount) - flt(reimbursed_amount)
if d.debit > pending_amount:
frappe.throw(
_(
"Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2}"
).format(d.idx, d.reference_name, pending_amount)
)
def validate_credit_debit_note(self):
if self.stock_entry:
if frappe.db.get_value("Stock Entry", self.stock_entry, "docstatus") != 1:
@@ -1021,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
)
@@ -1150,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")),
@@ -1201,24 +1167,6 @@ def get_payment_entry(ref_doc, args):
return je if args.get("journal_entry") else je.as_dict()
@frappe.whitelist()
def get_opening_accounts(company):
"""get all balance sheet accounts for opening entry"""
accounts = frappe.db.sql_list(
"""select
name from tabAccount
where
is_group=0 and report_type='Balance Sheet' and company={0} and
name not in (select distinct account from tabWarehouse where
account is not null and account != '')
order by name asc""".format(
frappe.db.escape(company)
)
)
return [{"account": a, "balance": get_balance_on(a)} for a in accounts]
@frappe.whitelist()
@frappe.validate_and_sanitize_search_inputs
def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
@@ -1239,7 +1187,7 @@ def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
AND jv.docstatus = 1
AND jv.`{0}` LIKE %(txt)s
ORDER BY jv.name DESC
LIMIT %(offset)s, %(limit)s
LIMIT %(limit)s offset %(offset)s
""".format(
searchfield
),
@@ -1262,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 ""
@@ -1286,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
)
@@ -1312,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,
}
@@ -1331,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"),
}
@@ -1344,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
)
@@ -1397,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

@@ -1,17 +0,0 @@
frappe.ui.form.on("Journal Entry", {
refresh: function(frm) {
frm.set_query('company_address', function(doc) {
if(!doc.company) {
frappe.throw(__('Please set Company'));
}
return {
query: 'frappe.contacts.doctype.address.address.address_query',
filters: {
link_doctype: 'Company',
link_name: doc.company
}
};
});
}
});

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

@@ -110,8 +110,6 @@ frappe.ui.form.on('Payment Entry', {
var doctypes = ["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"];
} else if (frm.doc.party_type == "Supplier") {
var doctypes = ["Purchase Order", "Purchase Invoice", "Journal Entry"];
} else if (frm.doc.party_type == "Employee") {
var doctypes = ["Expense Claim", "Journal Entry"];
} else {
var doctypes = ["Journal Entry"];
}
@@ -140,17 +138,12 @@ frappe.ui.form.on('Payment Entry', {
const child = locals[cdt][cdn];
const filters = {"docstatus": 1, "company": doc.company};
const party_type_doctypes = ['Sales Invoice', 'Sales Order', 'Purchase Invoice',
'Purchase Order', 'Expense Claim', 'Fees', 'Dunning'];
'Purchase Order', 'Dunning'];
if (in_list(party_type_doctypes, child.reference_doctype)) {
filters[doc.party_type.toLowerCase()] = doc.party;
}
if(child.reference_doctype == "Expense Claim") {
filters["docstatus"] = 1;
filters["is_paid"] = 0;
}
return {
filters: filters
};
@@ -730,7 +723,7 @@ frappe.ui.form.on('Payment Entry', {
c.payment_term = d.payment_term;
c.allocated_amount = d.allocated_amount;
if(!in_list(["Sales Order", "Purchase Order", "Expense Claim", "Fees"], d.voucher_type)) {
if(!in_list(frm.events.get_order_doctypes(frm), d.voucher_type)) {
if(flt(d.outstanding_amount) > 0)
total_positive_outstanding += flt(d.outstanding_amount);
else
@@ -745,7 +738,7 @@ frappe.ui.form.on('Payment Entry', {
} else {
c.exchange_rate = 1;
}
if (in_list(['Sales Invoice', 'Purchase Invoice', "Expense Claim", "Fees"], d.reference_doctype)){
if (in_list(frm.events.get_invoice_doctypes(frm), d.reference_doctype)){
c.due_date = d.due_date;
}
});
@@ -776,6 +769,14 @@ frappe.ui.form.on('Payment Entry', {
});
},
get_order_doctypes: function(frm) {
return ["Sales Order", "Purchase Order"];
},
get_invoice_doctypes: function(frm) {
return ["Sales Invoice", "Purchase Invoice"];
},
allocate_party_amount_against_ref_docs: function(frm, paid_amount, paid_amount_change) {
var total_positive_outstanding_including_order = 0;
var total_negative_outstanding = 0;
@@ -946,14 +947,6 @@ frappe.ui.form.on('Payment Entry', {
frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
return false;
}
if(frm.doc.party_type=="Employee" &&
!in_list(["Expense Claim", "Journal Entry"], row.reference_doctype)
) {
frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Expense Claim or Journal Entry", [row.idx]));
return false;
}
}
if (row) {
@@ -1098,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;
});
},
@@ -1189,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))
});
},
@@ -1221,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
@@ -1241,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) {
@@ -1251,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

@@ -6,7 +6,7 @@ import json
from functools import reduce
import frappe
from frappe import ValidationError, _, scrub, throw
from frappe import ValidationError, _, qb, scrub, throw
from frappe.utils import cint, comma_or, flt, getdate, nowdate
import erpnext
@@ -29,7 +29,6 @@ from erpnext.controllers.accounts_controller import (
get_supplier_block_status,
validate_taxes_and_charges,
)
from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount
from erpnext.setup.utils import get_exchange_rate
@@ -63,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()
@@ -88,7 +86,6 @@ class PaymentEntry(AccountsController):
if self.difference_amount:
frappe.throw(_("Difference Amount must be zero"))
self.make_gl_entries()
self.update_expense_claim()
self.update_outstanding_amounts()
self.update_advance_paid()
self.update_payment_schedule()
@@ -97,7 +94,6 @@ class PaymentEntry(AccountsController):
def on_cancel(self):
self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Payment Ledger Entry")
self.make_gl_entries(cancel=1)
self.update_expense_claim()
self.update_outstanding_amounts()
self.update_advance_paid()
self.delink_advance_entry_references()
@@ -184,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:
@@ -242,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)
@@ -296,14 +279,10 @@ class PaymentEntry(AccountsController):
frappe.throw(_("{0} is mandatory").format(self.meta.get_label(field)))
def validate_reference_documents(self):
if self.party_type == "Customer":
valid_reference_doctypes = ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning")
elif self.party_type == "Supplier":
valid_reference_doctypes = ("Purchase Order", "Purchase Invoice", "Journal Entry")
elif self.party_type == "Employee":
valid_reference_doctypes = ("Expense Claim", "Journal Entry", "Employee Advance", "Gratuity")
elif self.party_type == "Shareholder":
valid_reference_doctypes = "Journal Entry"
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:
@@ -329,7 +308,7 @@ class PaymentEntry(AccountsController):
else:
self.validate_journal_entry()
if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Expense Claim", "Fees"):
if d.reference_doctype in frappe.get_hooks("invoice_doctypes"):
if self.party_type == "Customer":
ref_party_account = (
get_party_account_based_on_invoice_discounting(d.reference_name) or ref_doc.debit_to
@@ -355,6 +334,16 @@ class PaymentEntry(AccountsController):
if ref_doc.docstatus != 1:
frappe.throw(_("{0} {1} must be submitted").format(d.reference_doctype, d.reference_name))
def get_valid_reference_doctypes(self):
if self.party_type == "Customer":
return ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning")
elif self.party_type == "Supplier":
return ("Purchase Order", "Purchase Invoice", "Journal Entry")
elif self.party_type == "Shareholder":
return ("Journal Entry",)
elif self.party_type == "Employee":
return ("Journal Entry",)
def validate_paid_invoices(self):
no_oustanding_refs = {}
@@ -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:
@@ -785,7 +774,7 @@ class PaymentEntry(AccountsController):
self.set("remarks", "\n".join(remarks))
def make_gl_entries(self, cancel=0, adv_adj=0):
def build_gl_map(self):
if self.payment_type in ("Receive", "Pay") and not self.get("party_account_field"):
self.setup_party_account_field()
@@ -794,7 +783,10 @@ class PaymentEntry(AccountsController):
self.add_bank_gl_entries(gl_entries)
self.add_deductions_gl_entries(gl_entries)
self.add_tax_gl_entries(gl_entries)
return gl_entries
def make_gl_entries(self, cancel=0, adv_adj=0):
gl_entries = self.build_gl_map()
gl_entries = process_gl_map(gl_entries)
make_gl_entries(gl_entries, cancel=cancel, adv_adj=adv_adj)
@@ -930,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(
{
@@ -977,23 +976,10 @@ class PaymentEntry(AccountsController):
def update_advance_paid(self):
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 (
"Sales Order",
"Purchase Order",
"Employee Advance",
"Gratuity",
):
frappe.get_doc(d.reference_doctype, d.reference_name).set_total_advance_paid()
def update_expense_claim(self):
if self.payment_type in ("Pay") and self.party:
for d in self.get("references"):
if d.reference_doctype == "Expense Claim" and d.reference_name:
doc = frappe.get_doc("Expense Claim", d.reference_name)
if self.docstatus == 2:
update_reimbursed_amount(doc, -1 * d.allocated_amount)
else:
update_reimbursed_amount(doc, d.allocated_amount)
if d.allocated_amount and d.reference_doctype in frappe.get_hooks("advance_payment_doctypes"):
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
@@ -1038,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")):
@@ -1057,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
@@ -1080,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
@@ -1094,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
@@ -1188,13 +1180,16 @@ def validate_inclusive_tax(tax, doc):
@frappe.whitelist()
def get_outstanding_reference_documents(args):
if isinstance(args, str):
args = json.loads(args)
if args.get("party_type") == "Member":
return
ple = qb.DocType("Payment Ledger Entry")
common_filter = []
posting_and_due_date = []
# confirm that Supplier is not blocked
if args.get("party_type") == "Supplier":
supplier_status = get_supplier_block_status(args["party"])
@@ -1210,16 +1205,19 @@ 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(
frappe.db.escape(args["voucher_type"]), frappe.db.escape(args["voucher_no"])
)
common_filter.append(ple.voucher_type == args["voucher_type"])
common_filter.append(ple.voucher_no == args["voucher_no"])
# Add cost center condition
if args.get("cost_center"):
condition += " and cost_center='%s'" % args.get("cost_center")
common_filter.append(ple.cost_center == args.get("cost_center"))
date_fields_dict = {
"posting_date": ["from_posting_date", "to_posting_date"],
@@ -1231,16 +1229,20 @@ 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])
)
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")))
common_filter.append(ple.company == args.get("company"))
outstanding_invoices = get_outstanding_invoices(
args.get("party_type"),
args.get("party"),
args.get("party_account"),
filters=args,
condition=condition,
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"),
)
outstanding_invoices = split_invoices_based_on_payment_terms(outstanding_invoices)
@@ -1248,7 +1250,7 @@ def get_outstanding_reference_documents(args):
for d in outstanding_invoices:
d["exchange_rate"] = 1
if party_account_currency != company_currency:
if d.voucher_type in ("Sales Invoice", "Purchase Invoice", "Expense Claim"):
if d.voucher_type in frappe.get_hooks("invoice_doctypes"):
d["exchange_rate"] = frappe.db.get_value(d.voucher_type, d.voucher_no, "conversion_rate")
elif d.voucher_type == "Journal Entry":
d["exchange_rate"] = get_exchange_rate(
@@ -1301,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:
@@ -1444,7 +1446,7 @@ def get_negative_outstanding_invoices(
voucher_type = "Sales Invoice" if party_type == "Customer" else "Purchase Invoice"
supplier_condition = ""
if voucher_type == "Purchase Invoice":
supplier_condition = "and (release_date is null or release_date <= CURDATE())"
supplier_condition = "and (release_date is null or release_date <= CURRENT_DATE)"
if party_account_currency == company_currency:
grand_total_field = "base_grand_total"
rounded_total_field = "base_rounded_total"
@@ -1533,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"),
}
)
@@ -1575,20 +1577,17 @@ def get_outstanding_on_journal_entry(name):
@frappe.whitelist()
def get_reference_details(reference_doctype, reference_name, party_account_currency):
total_amount = outstanding_amount = exchange_rate = bill_no = None
total_amount = outstanding_amount = exchange_rate = None
ref_doc = frappe.get_doc(reference_doctype, reference_name)
company_currency = ref_doc.get("company_currency") or erpnext.get_company_currency(
ref_doc.company
)
if reference_doctype == "Fees":
total_amount = ref_doc.get("grand_total")
if reference_doctype == "Dunning":
total_amount = outstanding_amount = ref_doc.get("dunning_amount")
exchange_rate = 1
outstanding_amount = ref_doc.get("outstanding_amount")
elif reference_doctype == "Dunning":
total_amount = ref_doc.get("dunning_amount")
exchange_rate = 1
outstanding_amount = ref_doc.get("dunning_amount")
elif reference_doctype == "Journal Entry" and ref_doc.docstatus == 1:
total_amount = ref_doc.get("total_amount")
if ref_doc.multi_currency:
@@ -1598,48 +1597,27 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre
else:
exchange_rate = 1
outstanding_amount = get_outstanding_on_journal_entry(reference_name)
elif reference_doctype != "Journal Entry":
if ref_doc.doctype == "Expense Claim":
total_amount = flt(ref_doc.total_sanctioned_amount) + flt(ref_doc.total_taxes_and_charges)
elif ref_doc.doctype == "Employee Advance":
total_amount = ref_doc.advance_amount
exchange_rate = ref_doc.get("exchange_rate")
if party_account_currency != ref_doc.currency:
total_amount = flt(total_amount) * flt(exchange_rate)
elif ref_doc.doctype == "Gratuity":
total_amount = ref_doc.amount
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.
exchange_rate = ref_doc.get("conversion_rate") or get_exchange_rate(
party_account_currency, company_currency, ref_doc.posting_date
)
if reference_doctype in ("Sales Invoice", "Purchase Invoice"):
outstanding_amount = ref_doc.get("outstanding_amount")
bill_no = ref_doc.get("bill_no")
elif reference_doctype == "Expense Claim":
outstanding_amount = (
flt(ref_doc.get("total_sanctioned_amount"))
+ flt(ref_doc.get("total_taxes_and_charges"))
- flt(ref_doc.get("total_amount_reimbursed"))
- flt(ref_doc.get("total_advance_amount"))
)
elif reference_doctype == "Employee Advance":
outstanding_amount = flt(ref_doc.advance_amount) - flt(ref_doc.paid_amount)
if party_account_currency != ref_doc.currency:
outstanding_amount = flt(outstanding_amount) * flt(exchange_rate)
if party_account_currency == company_currency:
exchange_rate = 1
elif reference_doctype == "Gratuity":
outstanding_amount = ref_doc.amount - flt(ref_doc.paid_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.
exchange_rate = get_exchange_rate(party_account_currency, company_currency, ref_doc.posting_date)
@@ -1650,125 +1628,29 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre
"total_amount": flt(total_amount),
"outstanding_amount": flt(outstanding_amount),
"exchange_rate": flt(exchange_rate),
"bill_no": bill_no,
"bill_no": ref_doc.get("bill_no"),
}
)
def get_amounts_based_on_reference_doctype(
reference_doctype, ref_doc, party_account_currency, company_currency, reference_name
):
total_amount = outstanding_amount = exchange_rate = None
if reference_doctype == "Fees":
total_amount = ref_doc.get("grand_total")
exchange_rate = 1
outstanding_amount = ref_doc.get("outstanding_amount")
elif reference_doctype == "Dunning":
total_amount = ref_doc.get("dunning_amount")
exchange_rate = 1
outstanding_amount = ref_doc.get("dunning_amount")
elif reference_doctype == "Journal Entry" and ref_doc.docstatus == 1:
total_amount = ref_doc.get("total_amount")
if ref_doc.multi_currency:
exchange_rate = get_exchange_rate(
party_account_currency, company_currency, ref_doc.posting_date
)
else:
exchange_rate = 1
outstanding_amount = get_outstanding_on_journal_entry(reference_name)
return total_amount, outstanding_amount, exchange_rate
def get_amounts_based_on_ref_doc(
reference_doctype, ref_doc, party_account_currency, company_currency
):
total_amount = outstanding_amount = exchange_rate = None
if ref_doc.doctype == "Expense Claim":
total_amount = flt(ref_doc.total_sanctioned_amount) + flt(ref_doc.total_taxes_and_charges)
elif ref_doc.doctype == "Employee Advance":
total_amount, exchange_rate = get_total_amount_exchange_rate_for_employee_advance(
party_account_currency, ref_doc
)
if not total_amount:
total_amount, exchange_rate = get_total_amount_exchange_rate_base_on_currency(
party_account_currency, company_currency, ref_doc
)
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
exchange_rate = ref_doc.get("conversion_rate") or get_exchange_rate(
party_account_currency, company_currency, ref_doc.posting_date
)
outstanding_amount, exchange_rate, bill_no = get_bill_no_and_update_amounts(
reference_doctype, ref_doc, total_amount, exchange_rate, party_account_currency, company_currency
)
return total_amount, outstanding_amount, exchange_rate, bill_no
def get_total_amount_exchange_rate_for_employee_advance(party_account_currency, ref_doc):
total_amount = ref_doc.advance_amount
exchange_rate = ref_doc.get("exchange_rate")
if party_account_currency != ref_doc.currency:
total_amount = flt(total_amount) * flt(exchange_rate)
return total_amount, exchange_rate
def get_total_amount_exchange_rate_base_on_currency(
party_account_currency, company_currency, ref_doc
):
exchange_rate = None
if party_account_currency == company_currency:
total_amount = ref_doc.base_grand_total
exchange_rate = 1
else:
total_amount = ref_doc.grand_total
return total_amount, exchange_rate
def get_bill_no_and_update_amounts(
reference_doctype, ref_doc, total_amount, exchange_rate, party_account_currency, company_currency
):
outstanding_amount = bill_no = None
if reference_doctype in ("Sales Invoice", "Purchase Invoice"):
outstanding_amount = ref_doc.get("outstanding_amount")
bill_no = ref_doc.get("bill_no")
elif reference_doctype == "Expense Claim":
outstanding_amount = (
flt(ref_doc.get("total_sanctioned_amount"))
+ flt(ref_doc.get("total_taxes_and_charges"))
- flt(ref_doc.get("total_amount_reimbursed"))
- flt(ref_doc.get("total_advance_amount"))
)
elif reference_doctype == "Employee Advance":
outstanding_amount = flt(ref_doc.advance_amount) - flt(ref_doc.paid_amount)
if party_account_currency != ref_doc.currency:
outstanding_amount = flt(outstanding_amount) * flt(exchange_rate)
if party_account_currency == company_currency:
exchange_rate = 1
else:
outstanding_amount = flt(total_amount) - flt(ref_doc.advance_paid)
return outstanding_amount, exchange_rate, bill_no
@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
)
@@ -1822,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",
):
@@ -1876,8 +1758,6 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
pe.set_missing_values()
if party_account and bank:
if dt == "Employee Advance":
reference_doc = doc
pe.set_exchange_rate(ref_doc=reference_doc)
pe.set_amounts()
if discount_amount:
@@ -1912,8 +1792,6 @@ def set_party_type(dt):
party_type = "Customer"
elif dt in ("Purchase Invoice", "Purchase Order"):
party_type = "Supplier"
elif dt in ("Expense Claim", "Employee Advance", "Gratuity"):
party_type = "Employee"
return party_type
@@ -1922,14 +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
elif dt == "Employee Advance":
party_account = doc.advance_account
elif dt == "Expense Claim":
party_account = doc.payable_account
elif dt == "Gratuity":
party_account = doc.payable_account
else:
party_account = get_party_account(party_type, doc.get(party_type.lower()), doc.company)
return party_account
@@ -1945,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:
@@ -1964,30 +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 in ("Expense Claim"):
grand_total = doc.total_sanctioned_amount + doc.total_taxes_and_charges
outstanding_amount = doc.grand_total - doc.total_amount_reimbursed
elif dt == "Employee Advance":
grand_total = flt(doc.advance_amount)
outstanding_amount = flt(doc.advance_amount) - flt(doc.paid_amount)
if party_account_currency != doc.currency:
grand_total = flt(doc.advance_amount) * flt(doc.exchange_rate)
outstanding_amount = (flt(doc.advance_amount) - flt(doc.paid_amount)) * flt(doc.exchange_rate)
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
elif dt == "Gratuity":
grand_total = doc.amount
outstanding_amount = flt(doc.amount) - flt(doc.paid_amount)
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
@@ -2003,8 +1857,6 @@ def set_paid_amount_and_received_amount(
received_amount = bank_amount
else:
received_amount = paid_amount * doc.get("conversion_rate", 1)
if dt == "Employee Advance":
received_amount = paid_amount * doc.get("exchange_rate", 1)
else:
received_amount = abs(outstanding_amount)
if bank_amount:
@@ -2012,8 +1864,6 @@ def set_paid_amount_and_received_amount(
else:
# if party account currency and bank currency is different then populate paid amount as well
paid_amount = received_amount * doc.get("conversion_rate", 1)
if dt == "Employee Advance":
paid_amount = received_amount * doc.get("exchange_rate", 1)
return paid_amount, received_amount

View File

@@ -1,29 +0,0 @@
frappe.ui.form.on("Payment Entry", {
company: function(frm) {
frappe.call({
'method': 'frappe.contacts.doctype.address.address.get_default_address',
'args': {
'doctype': 'Company',
'name': frm.doc.company
},
'callback': function(r) {
frm.set_value('company_address', r.message);
}
});
},
party: function(frm) {
if (frm.doc.party_type == "Customer" && frm.doc.party) {
frappe.call({
'method': 'frappe.contacts.doctype.address.address.get_default_address',
'args': {
'doctype': 'Customer',
'name': frm.doc.party
},
'callback': function(r) {
frm.set_value('customer_address', r.message);
}
});
}
}
});

View File

@@ -4,6 +4,8 @@
import unittest
import frappe
from frappe import qb
from frappe.tests.utils import FrappeTestCase
from frappe.utils import flt, nowdate
from erpnext.accounts.doctype.payment_entry.payment_entry import (
@@ -18,13 +20,16 @@ from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import (
create_sales_invoice,
create_sales_invoice_against_cost_center,
)
from erpnext.hr.doctype.expense_claim.test_expense_claim import make_expense_claim
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
from erpnext.setup.doctype.employee.test_employee import make_employee
test_dependencies = ["Item"]
class TestPaymentEntry(unittest.TestCase):
class TestPaymentEntry(FrappeTestCase):
def tearDown(self):
frappe.db.rollback()
def test_payment_entry_against_order(self):
so = make_sales_order()
pe = get_payment_entry("Sales Order", so.name, bank_account="_Test Cash - _TC")
@@ -293,31 +298,6 @@ class TestPaymentEntry(unittest.TestCase):
self.assertEqual(flt(outstanding_amount), 250)
self.assertEqual(status, "Unpaid")
def test_payment_entry_against_ec(self):
payable = frappe.get_cached_value("Company", "_Test Company", "default_payable_account")
ec = make_expense_claim(payable, 300, 300, "_Test Company", "Travel Expenses - _TC")
pe = get_payment_entry(
"Expense Claim", ec.name, bank_account="_Test Bank USD - _TC", bank_amount=300
)
pe.reference_no = "1"
pe.reference_date = "2016-01-01"
pe.source_exchange_rate = 1
pe.paid_to = payable
pe.insert()
pe.submit()
expected_gle = dict(
(d[0], d) for d in [[payable, 300, 0, ec.name], ["_Test Bank USD - _TC", 0, 300, None]]
)
self.validate_gl_entries(pe.name, expected_gle)
outstanding_amount = flt(
frappe.db.get_value("Expense Claim", ec.name, "total_sanctioned_amount")
) - flt(frappe.db.get_value("Expense Claim", ec.name, "total_amount_reimbursed"))
self.assertEqual(outstanding_amount, 0)
def test_payment_entry_against_si_usd_to_inr(self):
si = create_sales_invoice(
customer="_Test Customer USD",
@@ -743,6 +723,46 @@ class TestPaymentEntry(unittest.TestCase):
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()
@@ -758,6 +778,10 @@ class TestPaymentEntry(unittest.TestCase):
self.assertTrue("is on hold" in str(err.exception).lower())
def test_payment_entry_for_employee(self):
employee = make_employee("test_payment_entry@salary.com", company="_Test Company")
create_payment_entry(party_type="Employee", party=employee, save=True)
def create_payment_entry(**args):
payment_entry = frappe.new_doc("Payment Entry")

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

@@ -1,7 +1,6 @@
{
"actions": [],
"allow_rename": 1,
"autoname": "format:PLE-{YY}-{MM}-{######}",
"creation": "2022-05-09 19:35:03.334361",
"doctype": "DocType",
"editable_grid": 1,
@@ -23,7 +22,8 @@
"amount",
"account_currency",
"amount_in_account_currency",
"delinked"
"delinked",
"remarks"
],
"fields": [
{
@@ -41,19 +41,22 @@
"fieldname": "account",
"fieldtype": "Link",
"label": "Account",
"options": "Account"
"options": "Account",
"search_index": 1
},
{
"fieldname": "party_type",
"fieldtype": "Link",
"label": "Party Type",
"options": "DocType"
"options": "DocType",
"search_index": 1
},
{
"fieldname": "party",
"fieldtype": "Dynamic Link",
"label": "Party",
"options": "party_type"
"options": "party_type",
"search_index": 1
},
{
"fieldname": "voucher_type",
@@ -115,7 +118,8 @@
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
"options": "Company"
"options": "Company",
"search_index": 1
},
{
"fieldname": "cost_center",
@@ -133,16 +137,20 @@
"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-05-19 18:04:44.609115",
"modified": "2022-08-22 15:32:56.629430",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Ledger Entry",
"naming_rule": "Expression",
"owner": "Administrator",
"permissions": [
{

View File

@@ -6,6 +6,19 @@ import frappe
from frappe import _
from frappe.model.document import Document
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_checks_for_pl_and_bs_accounts,
)
from erpnext.accounts.doctype.accounting_dimension_filter.accounting_dimension_filter import (
get_dimension_filter_map,
)
from erpnext.accounts.doctype.gl_entry.gl_entry import (
validate_balance_type,
validate_frozen_account,
)
from erpnext.accounts.utils import update_voucher_outstanding
from erpnext.exceptions import InvalidAccountDimensionError, MandatoryAccountDimensionError
class PaymentLedgerEntry(Document):
def validate_account(self):
@@ -18,5 +31,124 @@ class PaymentLedgerEntry(Document):
if not valid_account:
frappe.throw(_("{0} account is not of type {1}").format(self.account, self.account_type))
def validate_account_details(self):
"""Account must be ledger, active and not freezed"""
ret = frappe.db.sql(
"""select is_group, docstatus, company
from tabAccount where name=%s""",
self.account,
as_dict=1,
)[0]
if ret.is_group == 1:
frappe.throw(
_(
"""{0} {1}: Account {2} is a Group Account and group accounts cannot be used in transactions"""
).format(self.voucher_type, self.voucher_no, self.account)
)
if ret.docstatus == 2:
frappe.throw(
_("{0} {1}: Account {2} is inactive").format(self.voucher_type, self.voucher_no, self.account)
)
if ret.company != self.company:
frappe.throw(
_("{0} {1}: Account {2} does not belong to Company {3}").format(
self.voucher_type, self.voucher_no, self.account, self.company
)
)
def validate_allowed_dimensions(self):
dimension_filter_map = get_dimension_filter_map()
for key, value in dimension_filter_map.items():
dimension = key[0]
account = key[1]
if self.account == account:
if value["is_mandatory"] and not self.get(dimension):
frappe.throw(
_("{0} is mandatory for account {1}").format(
frappe.bold(frappe.unscrub(dimension)), frappe.bold(self.account)
),
MandatoryAccountDimensionError,
)
if value["allow_or_restrict"] == "Allow":
if self.get(dimension) and self.get(dimension) not in value["allowed_dimensions"]:
frappe.throw(
_("Invalid value {0} for {1} against account {2}").format(
frappe.bold(self.get(dimension)),
frappe.bold(frappe.unscrub(dimension)),
frappe.bold(self.account),
),
InvalidAccountDimensionError,
)
else:
if self.get(dimension) and self.get(dimension) in value["allowed_dimensions"]:
frappe.throw(
_("Invalid value {0} for {1} against account {2}").format(
frappe.bold(self.get(dimension)),
frappe.bold(frappe.unscrub(dimension)),
frappe.bold(self.account),
),
InvalidAccountDimensionError,
)
def validate_dimensions_for_pl_and_bs(self):
account_type = frappe.get_cached_value("Account", self.account, "report_type")
for dimension in get_checks_for_pl_and_bs_accounts():
if (
account_type == "Profit and Loss"
and self.company == dimension.company
and dimension.mandatory_for_pl
and not dimension.disabled
):
if not self.get(dimension.fieldname):
frappe.throw(
_("Accounting Dimension <b>{0}</b> is required for 'Profit and Loss' account {1}.").format(
dimension.label, self.account
)
)
if (
account_type == "Balance Sheet"
and self.company == dimension.company
and dimension.mandatory_for_bs
and not dimension.disabled
):
if not self.get(dimension.fieldname):
frappe.throw(
_("Accounting Dimension <b>{0}</b> is required for 'Balance Sheet' account {1}.").format(
dimension.label, self.account
)
)
def validate(self):
self.validate_account()
def on_update(self):
adv_adj = self.flags.adv_adj
if not self.flags.from_repost:
self.validate_account_details()
self.validate_dimensions_for_pl_and_bs()
self.validate_allowed_dimensions()
validate_balance_type(self.account, adv_adj)
validate_frozen_account(self.account, adv_adj)
# update outstanding amount
if (
self.against_voucher_type in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"]
and self.flags.update_outstanding == "Yes"
and not frappe.flags.is_reverse_depr_entry
):
update_voucher_outstanding(
self.against_voucher_type, self.against_voucher_no, self.account, self.party_type, self.party
)
def on_doctype_update():
frappe.db.add_index("Payment Ledger Entry", ["against_voucher_no", "against_voucher_type"])
frappe.db.add_index("Payment Ledger Entry", ["voucher_no", "voucher_type"])

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

@@ -39,7 +39,7 @@ def get_mop_query(doctype, txt, searchfield, start, page_len, filters):
return frappe.db.sql(
""" select mode_of_payment from `tabPayment Order Reference`
where parent = %(parent)s and mode_of_payment like %(txt)s
limit %(start)s, %(page_len)s""",
limit %(page_len)s offset %(start)s""",
{"parent": filters.get("parent"), "start": start, "page_len": page_len, "txt": "%%%s%%" % txt},
)
@@ -51,7 +51,7 @@ def get_supplier_query(doctype, txt, searchfield, start, page_len, filters):
""" select supplier from `tabPayment Order Reference`
where parent = %(parent)s and supplier like %(txt)s and
(payment_reference is null or payment_reference='')
limit %(start)s, %(page_len)s""",
limit %(page_len)s offset %(start)s""",
{"parent": filters.get("parent"), "start": start, "page_len": page_len, "txt": "%%%s%%" % txt},
)

View File

@@ -3,16 +3,28 @@
import frappe
from frappe import _, msgprint
from frappe import _, msgprint, qb
from frappe.model.document import Document
from frappe.query_builder.custom import ConstantColumn
from frappe.query_builder.functions import IfNull
from frappe.utils import flt, getdate, nowdate, today
import erpnext
from erpnext.accounts.utils import get_outstanding_invoices, reconcile_against_document
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
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):
self.get_nonreconciled_payment_entries()
@@ -108,54 +120,59 @@ class PaymentReconciliation(Document):
return list(journal_entries)
def get_dr_or_cr_notes(self):
condition = self.get_conditions(get_return_invoices=True)
dr_or_cr = (
"credit_in_account_currency"
if erpnext.get_party_account_type(self.party_type) == "Receivable"
else "debit_in_account_currency"
)
reconciled_dr_or_cr = (
"debit_in_account_currency"
if dr_or_cr == "credit_in_account_currency"
else "credit_in_account_currency"
)
self.build_qb_filter_conditions(get_return_invoices=True)
ple = qb.DocType("Payment Ledger Entry")
voucher_type = "Sales Invoice" if self.party_type == "Customer" else "Purchase Invoice"
return frappe.db.sql(
""" SELECT doc.name as reference_name, %(voucher_type)s as reference_type,
(sum(gl.{dr_or_cr}) - sum(gl.{reconciled_dr_or_cr})) as amount, doc.posting_date,
account_currency as currency
FROM `tab{doc}` doc, `tabGL Entry` gl
WHERE
(doc.name = gl.against_voucher or doc.name = gl.voucher_no)
and doc.{party_type_field} = %(party)s
and doc.is_return = 1 and ifnull(doc.return_against, "") = ""
and gl.against_voucher_type = %(voucher_type)s
and doc.docstatus = 1 and gl.party = %(party)s
and gl.party_type = %(party_type)s and gl.account = %(account)s
and gl.is_cancelled = 0 {condition}
GROUP BY doc.name
Having
amount > 0
ORDER BY doc.posting_date
""".format(
doc=voucher_type,
dr_or_cr=dr_or_cr,
reconciled_dr_or_cr=reconciled_dr_or_cr,
party_type_field=frappe.scrub(self.party_type),
condition=condition or "",
),
{
"party": self.party,
"party_type": self.party_type,
"voucher_type": voucher_type,
"account": self.receivable_payable_account,
},
as_dict=1,
if erpnext.get_party_account_type(self.party_type) == "Receivable":
self.common_filter_conditions.append(ple.account_type == "Receivable")
else:
self.common_filter_conditions.append(ple.account_type == "Payable")
self.common_filter_conditions.append(ple.account == self.receivable_payable_account)
# get return invoices
doc = qb.DocType(voucher_type)
return_invoices = (
qb.from_(doc)
.select(ConstantColumn(voucher_type).as_("voucher_type"), doc.name.as_("voucher_no"))
.where(
(doc.docstatus == 1)
& (doc[frappe.scrub(self.party_type)] == self.party)
& (doc.is_return == 1)
& (IfNull(doc.return_against, "") == "")
)
.run(as_dict=True)
)
outstanding_dr_or_cr = []
if return_invoices:
ple_query = QueryPaymentLedger()
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,
)
for inv in return_outstanding:
if inv.outstanding != 0:
outstanding_dr_or_cr.append(
frappe._dict(
{
"reference_type": inv.voucher_type,
"reference_name": inv.voucher_no,
"amount": -(inv.outstanding_in_account_currency),
"posting_date": inv.posting_date,
"currency": inv.currency,
}
)
)
return outstanding_dr_or_cr
def add_payment_entries(self, non_reconciled_payments):
self.set("payments", [])
@@ -166,10 +183,16 @@ class PaymentReconciliation(Document):
def get_invoice_entries(self):
# Fetch JVs, Sales and Purchase Invoices for 'invoices' to reconcile against
condition = self.get_conditions(get_invoices=True)
self.build_qb_filter_conditions(get_invoices=True)
non_reconciled_invoices = get_outstanding_invoices(
self.party_type, self.party, self.receivable_payable_account, condition=condition
self.party_type,
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,
)
if self.invoice_limit:
@@ -190,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()
@@ -205,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
@@ -329,89 +373,57 @@ class PaymentReconciliation(Document):
if not invoices_to_reconcile:
frappe.throw(_("No records found in Allocation table"))
def get_conditions(self, get_invoices=False, get_payments=False, get_return_invoices=False):
condition = " and company = '{0}' ".format(self.company)
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")
if self.get("cost_center") and (get_invoices or get_payments or get_return_invoices):
condition = " and cost_center = '{0}' ".format(self.cost_center)
self.common_filter_conditions.append(ple.company == self.company)
if self.get("cost_center") and (get_invoices or get_return_invoices):
self.common_filter_conditions.append(ple.cost_center == self.cost_center)
if get_invoices:
condition += (
" and posting_date >= {0}".format(frappe.db.escape(self.from_invoice_date))
if self.from_invoice_date
else ""
)
condition += (
" and posting_date <= {0}".format(frappe.db.escape(self.to_invoice_date))
if self.to_invoice_date
else ""
)
dr_or_cr = (
"debit_in_account_currency"
if erpnext.get_party_account_type(self.party_type) == "Receivable"
else "credit_in_account_currency"
)
if self.minimum_invoice_amount:
condition += " and {dr_or_cr} >= {amount}".format(
dr_or_cr=dr_or_cr, amount=flt(self.minimum_invoice_amount)
)
if self.maximum_invoice_amount:
condition += " and {dr_or_cr} <= {amount}".format(
dr_or_cr=dr_or_cr, amount=flt(self.maximum_invoice_amount)
)
if self.from_invoice_date:
self.ple_posting_date_filter.append(ple.posting_date.gte(self.from_invoice_date))
if self.to_invoice_date:
self.ple_posting_date_filter.append(ple.posting_date.lte(self.to_invoice_date))
elif get_return_invoices:
condition = " and doc.company = '{0}' ".format(self.company)
condition += (
" and doc.posting_date >= {0}".format(frappe.db.escape(self.from_payment_date))
if self.from_payment_date
else ""
)
condition += (
" and doc.posting_date <= {0}".format(frappe.db.escape(self.to_payment_date))
if self.to_payment_date
else ""
)
dr_or_cr = (
"debit_in_account_currency"
if erpnext.get_party_account_type(self.party_type) == "Receivable"
else "credit_in_account_currency"
)
if self.from_payment_date:
self.ple_posting_date_filter.append(ple.posting_date.gte(self.from_payment_date))
if self.to_payment_date:
self.ple_posting_date_filter.append(ple.posting_date.lte(self.to_payment_date))
if self.minimum_invoice_amount:
condition += " and gl.{dr_or_cr} >= {amount}".format(
dr_or_cr=dr_or_cr, amount=flt(self.minimum_payment_amount)
)
if self.maximum_invoice_amount:
condition += " and gl.{dr_or_cr} <= {amount}".format(
dr_or_cr=dr_or_cr, amount=flt(self.maximum_payment_amount)
)
def get_conditions(self, get_payments=False):
condition = " and company = '{0}' ".format(self.company)
else:
condition += (
" and posting_date >= {0}".format(frappe.db.escape(self.from_payment_date))
if self.from_payment_date
else ""
)
condition += (
" and posting_date <= {0}".format(frappe.db.escape(self.to_payment_date))
if self.to_payment_date
else ""
)
if self.get("cost_center") and get_payments:
condition = " and cost_center = '{0}' ".format(self.cost_center)
if self.minimum_payment_amount:
condition += (
" and unallocated_amount >= {0}".format(flt(self.minimum_payment_amount))
if get_payments
else " and total_debit >= {0}".format(flt(self.minimum_payment_amount))
)
if self.maximum_payment_amount:
condition += (
" and unallocated_amount <= {0}".format(flt(self.maximum_payment_amount))
if get_payments
else " and total_debit <= {0}".format(flt(self.maximum_payment_amount))
)
condition += (
" and posting_date >= {0}".format(frappe.db.escape(self.from_payment_date))
if self.from_payment_date
else ""
)
condition += (
" and posting_date <= {0}".format(frappe.db.escape(self.to_payment_date))
if self.to_payment_date
else ""
)
if self.minimum_payment_amount:
condition += (
" and unallocated_amount >= {0}".format(flt(self.minimum_payment_amount))
if get_payments
else " and total_debit >= {0}".format(flt(self.minimum_payment_amount))
)
if self.maximum_payment_amount:
condition += (
" and unallocated_amount <= {0}".format(flt(self.maximum_payment_amount))
if get_payments
else " and total_debit <= {0}".format(flt(self.maximum_payment_amount))
)
return condition

View File

@@ -4,93 +4,577 @@
import unittest
import frappe
from frappe.utils import add_days, getdate
from frappe import qb
from frappe.tests.utils import FrappeTestCase
from frappe.utils import add_days, nowdate
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.accounts.party import get_party_account
from erpnext.stock.doctype.item.test_item import create_item
class TestPaymentReconciliation(unittest.TestCase):
@classmethod
def setUpClass(cls):
make_customer()
make_invoice_and_payment()
class TestPaymentReconciliation(FrappeTestCase):
def setUp(self):
self.create_company()
self.create_item()
self.create_customer()
self.create_account()
self.clear_old_entries()
def test_payment_reconciliation(self):
payment_reco = frappe.get_doc("Payment Reconciliation")
payment_reco.company = "_Test Company"
payment_reco.party_type = "Customer"
payment_reco.party = "_Test Payment Reco Customer"
payment_reco.receivable_payable_account = "Debtors - _TC"
payment_reco.from_invoice_date = add_days(getdate(), -1)
payment_reco.to_invoice_date = getdate()
payment_reco.from_payment_date = add_days(getdate(), -1)
payment_reco.to_payment_date = getdate()
payment_reco.maximum_invoice_amount = 1000
payment_reco.maximum_payment_amount = 1000
payment_reco.invoice_limit = 10
payment_reco.payment_limit = 10
payment_reco.bank_cash_account = "_Test Bank - _TC"
payment_reco.cost_center = "_Test Cost Center - _TC"
payment_reco.get_unreconciled_entries()
def tearDown(self):
frappe.db.rollback()
self.assertEqual(len(payment_reco.get("invoices")), 1)
self.assertEqual(len(payment_reco.get("payments")), 1)
def create_company(self):
company = None
if frappe.db.exists("Company", "_Test Payment Reconciliation"):
company = frappe.get_doc("Company", "_Test Payment Reconciliation")
else:
company = frappe.get_doc(
{
"doctype": "Company",
"company_name": "_Test Payment Reconciliation",
"country": "India",
"default_currency": "INR",
"create_chart_of_accounts_based_on": "Standard Template",
"chart_of_accounts": "Standard",
}
)
company = company.save()
payment_entry = payment_reco.get("payments")[0].reference_name
invoice = payment_reco.get("invoices")[0].invoice_number
self.company = company.name
self.cost_center = company.cost_center
self.warehouse = "All Warehouses - _PR"
self.income_account = "Sales - _PR"
self.expense_account = "Cost of Goods Sold - _PR"
self.debit_to = "Debtors - _PR"
self.creditors = "Creditors - _PR"
payment_reco.allocate_entries(
{
"payments": [payment_reco.get("payments")[0].as_dict()],
"invoices": [payment_reco.get("invoices")[0].as_dict()],
}
# create bank account
if frappe.db.exists("Account", "HDFC - _PR"):
self.bank = "HDFC - _PR"
else:
bank_acc = frappe.get_doc(
{
"doctype": "Account",
"account_name": "HDFC",
"parent_account": "Bank Accounts - _PR",
"company": self.company,
}
)
bank_acc.save()
self.bank = bank_acc.name
def create_item(self):
item = create_item(
item_code="_Test PR Item", is_stock_item=0, company=self.company, warehouse=self.warehouse
)
payment_reco.reconcile()
self.item = item if isinstance(item, str) else item.item_code
payment_entry_doc = frappe.get_doc("Payment Entry", payment_entry)
self.assertEqual(payment_entry_doc.get("references")[0].reference_name, invoice)
def create_customer(self):
if frappe.db.exists("Customer", "_Test PR Customer"):
self.customer = "_Test PR Customer"
else:
customer = frappe.new_doc("Customer")
customer.customer_name = "_Test PR Customer"
customer.type = "Individual"
customer.save()
self.customer = customer.name
if frappe.db.exists("Customer", "_Test PR Customer 2"):
self.customer2 = "_Test PR Customer 2"
else:
customer = frappe.new_doc("Customer")
customer.customer_name = "_Test PR Customer 2"
customer.type = "Individual"
customer.save()
self.customer2 = customer.name
def make_customer():
if not frappe.db.get_value("Customer", "_Test Payment Reco Customer"):
frappe.get_doc(
{
"doctype": "Customer",
"customer_name": "_Test Payment Reco Customer",
"customer_type": "Individual",
"customer_group": "_Test Customer Group",
"territory": "_Test Territory",
}
).insert()
if frappe.db.exists("Customer", "_Test PR Customer 3"):
self.customer3 = "_Test PR Customer 3"
else:
customer = frappe.new_doc("Customer")
customer.customer_name = "_Test PR Customer 3"
customer.type = "Individual"
customer.default_currency = "EUR"
customer.save()
self.customer3 = customer.name
def create_account(self):
account_name = "Debtors EUR"
if not frappe.db.get_value(
"Account", filters={"account_name": account_name, "company": self.company}
):
acc = frappe.new_doc("Account")
acc.account_name = account_name
acc.parent_account = "Accounts Receivable - _PR"
acc.company = self.company
acc.account_currency = "EUR"
acc.account_type = "Receivable"
acc.insert()
else:
name = frappe.db.get_value(
"Account",
filters={"account_name": account_name, "company": self.company},
fieldname="name",
pluck=True,
)
acc = frappe.get_doc("Account", name)
self.debtors_eur = acc.name
def make_invoice_and_payment():
si = create_sales_invoice(
customer="_Test Payment Reco Customer", qty=1, rate=690, do_not_save=True
)
si.cost_center = "_Test Cost Center - _TC"
si.save()
si.submit()
def create_sales_invoice(
self, qty=1, rate=100, posting_date=nowdate(), do_not_save=False, do_not_submit=False
):
"""
Helper function to populate default values in sales invoice
"""
sinv = create_sales_invoice(
qty=qty,
rate=rate,
company=self.company,
customer=self.customer,
item_code=self.item,
item_name=self.item,
cost_center=self.cost_center,
warehouse=self.warehouse,
debit_to=self.debit_to,
parent_cost_center=self.cost_center,
update_stock=0,
currency="INR",
is_pos=0,
is_return=0,
return_against=None,
income_account=self.income_account,
expense_account=self.expense_account,
do_not_save=do_not_save,
do_not_submit=do_not_submit,
)
return sinv
pe = frappe.get_doc(
{
"doctype": "Payment Entry",
"payment_type": "Receive",
"party_type": "Customer",
"party": "_Test Payment Reco Customer",
"company": "_Test Company",
"paid_from_account_currency": "INR",
"paid_to_account_currency": "INR",
"source_exchange_rate": 1,
"target_exchange_rate": 1,
"reference_no": "1",
"reference_date": getdate(),
"received_amount": 690,
"paid_amount": 690,
"paid_from": "Debtors - _TC",
"paid_to": "_Test Bank - _TC",
"cost_center": "_Test Cost Center - _TC",
}
)
pe.insert()
pe.submit()
def create_payment_entry(self, amount=100, posting_date=nowdate(), customer=None):
"""
Helper function to populate default values in payment entry
"""
payment = create_payment_entry(
company=self.company,
payment_type="Receive",
party_type="Customer",
party=customer or self.customer,
paid_from=self.debit_to,
paid_to=self.bank,
paid_amount=amount,
)
payment.posting_date = posting_date
return payment
def clear_old_entries(self):
doctype_list = [
"GL Entry",
"Payment Ledger Entry",
"Sales Invoice",
"Purchase Invoice",
"Payment Entry",
"Journal Entry",
]
for doctype in doctype_list:
qb.from_(qb.DocType(doctype)).delete().where(qb.DocType(doctype).company == self.company).run()
def create_payment_reconciliation(self):
pr = frappe.new_doc("Payment Reconciliation")
pr.company = self.company
pr.party_type = "Customer"
pr.party = self.customer
pr.receivable_payable_account = get_party_account(pr.party_type, pr.party, pr.company)
pr.from_invoice_date = pr.to_invoice_date = pr.from_payment_date = pr.to_payment_date = nowdate()
return pr
def create_journal_entry(
self, acc1=None, acc2=None, amount=0, posting_date=None, cost_center=None
):
je = frappe.new_doc("Journal Entry")
je.posting_date = posting_date or nowdate()
je.company = self.company
je.user_remark = "test"
if not cost_center:
cost_center = self.cost_center
je.set(
"accounts",
[
{
"account": acc1,
"cost_center": cost_center,
"debit_in_account_currency": amount if amount > 0 else 0,
"credit_in_account_currency": abs(amount) if amount < 0 else 0,
},
{
"account": acc2,
"cost_center": cost_center,
"credit_in_account_currency": amount if amount > 0 else 0,
"debit_in_account_currency": abs(amount) if amount < 0 else 0,
},
],
)
return je
def test_filter_min_max(self):
# check filter condition minimum and maximum amount
self.create_sales_invoice(qty=1, rate=300)
self.create_sales_invoice(qty=1, rate=400)
self.create_sales_invoice(qty=1, rate=500)
self.create_payment_entry(amount=300).save().submit()
self.create_payment_entry(amount=400).save().submit()
self.create_payment_entry(amount=500).save().submit()
pr = self.create_payment_reconciliation()
pr.minimum_invoice_amount = 400
pr.maximum_invoice_amount = 500
pr.minimum_payment_amount = 300
pr.maximum_payment_amount = 600
pr.get_unreconciled_entries()
self.assertEqual(len(pr.get("invoices")), 2)
self.assertEqual(len(pr.get("payments")), 3)
pr.minimum_invoice_amount = 300
pr.maximum_invoice_amount = 600
pr.minimum_payment_amount = 400
pr.maximum_payment_amount = 500
pr.get_unreconciled_entries()
self.assertEqual(len(pr.get("invoices")), 3)
self.assertEqual(len(pr.get("payments")), 2)
pr.minimum_invoice_amount = (
pr.maximum_invoice_amount
) = pr.minimum_payment_amount = pr.maximum_payment_amount = 0
pr.get_unreconciled_entries()
self.assertEqual(len(pr.get("invoices")), 3)
self.assertEqual(len(pr.get("payments")), 3)
def test_filter_posting_date(self):
# check filter condition using transaction date
date1 = nowdate()
date2 = add_days(nowdate(), -1)
amount = 100
self.create_sales_invoice(qty=1, rate=amount, posting_date=date1)
si2 = self.create_sales_invoice(
qty=1, rate=amount, posting_date=date2, do_not_save=True, do_not_submit=True
)
si2.set_posting_time = 1
si2.posting_date = date2
si2.save().submit()
self.create_payment_entry(amount=amount, posting_date=date1).save().submit()
self.create_payment_entry(amount=amount, posting_date=date2).save().submit()
pr = self.create_payment_reconciliation()
pr.from_invoice_date = pr.to_invoice_date = date1
pr.from_payment_date = pr.to_payment_date = date1
pr.get_unreconciled_entries()
# assert only si and pe are fetched
self.assertEqual(len(pr.get("invoices")), 1)
self.assertEqual(len(pr.get("payments")), 1)
pr.from_invoice_date = date2
pr.to_invoice_date = date1
pr.from_payment_date = date2
pr.to_payment_date = date1
pr.get_unreconciled_entries()
# assert only si and pe are fetched
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()
rate = 100
invoices = []
payments = []
for i in range(5):
invoices.append(self.create_sales_invoice(qty=1, rate=rate, posting_date=transaction_date))
pe = self.create_payment_entry(amount=rate, posting_date=transaction_date).save().submit()
payments.append(pe)
pr = self.create_payment_reconciliation()
pr.from_invoice_date = pr.to_invoice_date = transaction_date
pr.from_payment_date = pr.to_payment_date = transaction_date
pr.invoice_limit = 2
pr.payment_limit = 3
pr.get_unreconciled_entries()
self.assertEqual(len(pr.get("invoices")), 2)
self.assertEqual(len(pr.get("payments")), 3)
def test_payment_against_invoice(self):
si = self.create_sales_invoice(qty=1, rate=200)
pe = self.create_payment_entry(amount=55).save().submit()
# second payment entry
self.create_payment_entry(amount=35).save().submit()
pr = self.create_payment_reconciliation()
# reconcile multiple payments against invoice
pr.get_unreconciled_entries()
invoices = [x.as_dict() for x in pr.get("invoices")]
payments = [x.as_dict() for x in pr.get("payments")]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.reconcile()
si.reload()
self.assertEqual(si.status, "Partly Paid")
# check PR tool output post reconciliation
self.assertEqual(len(pr.get("invoices")), 1)
self.assertEqual(pr.get("invoices")[0].get("outstanding_amount"), 110)
self.assertEqual(pr.get("payments"), [])
# cancel one PE
pe.reload()
pe.cancel()
pr.get_unreconciled_entries()
# check PR tool output
self.assertEqual(len(pr.get("invoices")), 1)
self.assertEqual(len(pr.get("payments")), 0)
self.assertEqual(pr.get("invoices")[0].get("outstanding_amount"), 165)
def test_payment_against_journal(self):
transaction_date = nowdate()
sales = "Sales - _PR"
amount = 921
# debit debtors account to record an invoice
je = self.create_journal_entry(self.debit_to, sales, amount, transaction_date)
je.accounts[0].party_type = "Customer"
je.accounts[0].party = self.customer
je.save()
je.submit()
self.create_payment_entry(amount=amount, posting_date=transaction_date).save().submit()
pr = self.create_payment_reconciliation()
pr.minimum_invoice_amount = pr.maximum_invoice_amount = amount
pr.from_invoice_date = pr.to_invoice_date = transaction_date
pr.from_payment_date = pr.to_payment_date = transaction_date
pr.get_unreconciled_entries()
invoices = [x.as_dict() for x in pr.get("invoices")]
payments = [x.as_dict() for x in pr.get("payments")]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.reconcile()
# check PR tool output
self.assertEqual(len(pr.get("invoices")), 0)
self.assertEqual(len(pr.get("payments")), 0)
def test_journal_against_invoice(self):
transaction_date = nowdate()
amount = 100
si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date)
# credit debtors account to record a payment
je = self.create_journal_entry(self.bank, self.debit_to, amount, transaction_date)
je.accounts[1].party_type = "Customer"
je.accounts[1].party = self.customer
je.save()
je.submit()
pr = self.create_payment_reconciliation()
pr.get_unreconciled_entries()
invoices = [x.as_dict() for x in pr.get("invoices")]
payments = [x.as_dict() for x in pr.get("payments")]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.reconcile()
# assert outstanding
si.reload()
self.assertEqual(si.status, "Paid")
self.assertEqual(si.outstanding_amount, 0)
# check PR tool output
self.assertEqual(len(pr.get("invoices")), 0)
self.assertEqual(len(pr.get("payments")), 0)
def test_journal_against_journal(self):
transaction_date = nowdate()
sales = "Sales - _PR"
amount = 100
# debit debtors account to simulate a invoice
je1 = self.create_journal_entry(self.debit_to, sales, amount, transaction_date)
je1.accounts[0].party_type = "Customer"
je1.accounts[0].party = self.customer
je1.save()
je1.submit()
# credit debtors account to simulate a payment
je2 = self.create_journal_entry(self.bank, self.debit_to, amount, transaction_date)
je2.accounts[1].party_type = "Customer"
je2.accounts[1].party = self.customer
je2.save()
je2.submit()
pr = self.create_payment_reconciliation()
pr.get_unreconciled_entries()
invoices = [x.as_dict() for x in pr.get("invoices")]
payments = [x.as_dict() for x in pr.get("payments")]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.reconcile()
self.assertEqual(pr.get("invoices"), [])
self.assertEqual(pr.get("payments"), [])
def test_cr_note_against_invoice(self):
transaction_date = nowdate()
amount = 100
si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date)
cr_note = self.create_sales_invoice(
qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True
)
cr_note.is_return = 1
cr_note = cr_note.save().submit()
pr = self.create_payment_reconciliation()
pr.get_unreconciled_entries()
invoices = [x.as_dict() for x in pr.get("invoices")]
payments = [x.as_dict() for x in pr.get("payments")]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.reconcile()
pr.get_unreconciled_entries()
# check reconciliation tool output
# reconciled invoice and credit note shouldn't show up in selection
self.assertEqual(pr.get("invoices"), [])
self.assertEqual(pr.get("payments"), [])
# assert outstanding
si.reload()
self.assertEqual(si.status, "Paid")
self.assertEqual(si.outstanding_amount, 0)
def test_cr_note_partial_against_invoice(self):
transaction_date = nowdate()
amount = 100
allocated_amount = 80
si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date)
cr_note = self.create_sales_invoice(
qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True
)
cr_note.is_return = 1
cr_note = cr_note.save().submit()
pr = self.create_payment_reconciliation()
pr.get_unreconciled_entries()
invoices = [x.as_dict() for x in pr.get("invoices")]
payments = [x.as_dict() for x in pr.get("payments")]
pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments}))
pr.allocation[0].allocated_amount = allocated_amount
pr.reconcile()
# assert outstanding
si.reload()
self.assertEqual(si.status, "Partly Paid")
self.assertEqual(si.outstanding_amount, 20)
pr.get_unreconciled_entries()
# check reconciliation tool output
self.assertEqual(len(pr.get("invoices")), 1)
self.assertEqual(len(pr.get("payments")), 1)
self.assertEqual(pr.get("invoices")[0].outstanding_amount, 20)
self.assertEqual(pr.get("payments")[0].amount, 20)
def test_pr_output_foreign_currency_and_amount(self):
# test for currency and amount invoices and payments
transaction_date = nowdate()
# In EUR
amount = 100
exchange_rate = 80
si = self.create_sales_invoice(
qty=1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True
)
si.customer = self.customer3
si.currency = "EUR"
si.conversion_rate = exchange_rate
si.debit_to = self.debtors_eur
si = si.save().submit()
cr_note = self.create_sales_invoice(
qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True
)
cr_note.customer = self.customer3
cr_note.is_return = 1
cr_note.currency = "EUR"
cr_note.conversion_rate = exchange_rate
cr_note.debit_to = self.debtors_eur
cr_note = cr_note.save().submit()
pr = self.create_payment_reconciliation()
pr.party = self.customer3
pr.receivable_payable_account = self.debtors_eur
pr.get_unreconciled_entries()
self.assertEqual(len(pr.invoices), 1)
self.assertEqual(len(pr.payments), 1)
self.assertEqual(pr.invoices[0].amount, amount)
self.assertEqual(pr.invoices[0].currency, "EUR")
self.assertEqual(pr.payments[0].amount, amount)
self.assertEqual(pr.payments[0].currency, "EUR")
cr_note.cancel()
pay = self.create_payment_entry(
amount=amount, posting_date=transaction_date, customer=self.customer3
)
pay.paid_from = self.debtors_eur
pay.paid_from_account_currency = "EUR"
pay.source_exchange_rate = exchange_rate
pay.received_amount = exchange_rate * amount
pay = pay.save().submit()
pr.get_unreconciled_entries()
self.assertEqual(len(pr.invoices), 1)
self.assertEqual(len(pr.payments), 1)
self.assertEqual(pr.payments[0].amount, amount)
self.assertEqual(pr.payments[0].currency, "EUR")

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

@@ -6,10 +6,10 @@ import json
import frappe
from frappe import _
from frappe.integrations.utils import get_payment_gateway_controller
from frappe.model.document import Document
from frappe.utils import flt, get_url, nowdate
from frappe.utils.background_jobs import enqueue
from payments.utils import get_payment_gateway_controller
from erpnext.accounts.doctype.payment_entry.payment_entry import (
get_company_defaults,
@@ -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

@@ -10,10 +10,11 @@
"fiscal_year",
"amended_from",
"company",
"cost_center_wise_pnl",
"column_break1",
"closing_account_head",
"remarks"
"remarks",
"gle_processing_status",
"error_message"
],
"fields": [
{
@@ -86,17 +87,26 @@
"reqd": 1
},
{
"default": "0",
"fieldname": "cost_center_wise_pnl",
"fieldtype": "Check",
"label": "Book Cost Center Wise Profit/Loss"
"depends_on": "eval:doc.docstatus!=0",
"fieldname": "gle_processing_status",
"fieldtype": "Select",
"label": "GL Entry Processing Status",
"options": "In Progress\nCompleted\nFailed",
"read_only": 1
},
{
"depends_on": "eval:doc.gle_processing_status=='Failed'",
"fieldname": "error_message",
"fieldtype": "Text",
"label": "Error Message",
"read_only": 1
}
],
"icon": "fa fa-file-text",
"idx": 1,
"is_submittable": 1,
"links": [],
"modified": "2021-05-20 15:27:37.210458",
"modified": "2022-07-20 14:51:04.714154",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Period Closing Voucher",

View File

@@ -8,7 +8,6 @@ from frappe.utils import flt
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_accounting_dimensions,
get_dimensions,
)
from erpnext.accounts.utils import get_account_currency
from erpnext.controllers.accounts_controller import AccountsController
@@ -20,16 +19,31 @@ class PeriodClosingVoucher(AccountsController):
self.validate_posting_date()
def on_submit(self):
self.db_set("gle_processing_status", "In Progress")
self.make_gl_entries()
def on_cancel(self):
self.db_set("gle_processing_status", "In Progress")
self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry")
from erpnext.accounts.general_ledger import make_reverse_gl_entries
make_reverse_gl_entries(voucher_type="Period Closing Voucher", voucher_no=self.name)
gle_count = frappe.db.count(
"GL Entry",
{"voucher_type": "Period Closing Voucher", "voucher_no": self.name, "is_cancelled": 0},
)
if gle_count > 5000:
frappe.enqueue(
make_reverse_gl_entries,
voucher_type="Period Closing Voucher",
voucher_no=self.name,
queue="long",
)
frappe.msgprint(
_("The GL Entries will be cancelled in the background, it can take a few minutes."), alert=True
)
else:
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(
@@ -54,8 +68,8 @@ class PeriodClosingVoucher(AccountsController):
pce = frappe.db.sql(
"""select name from `tabPeriod Closing Voucher`
where posting_date > %s and fiscal_year = %s and docstatus = 1""",
(self.posting_date, self.fiscal_year),
where posting_date > %s and fiscal_year = %s and docstatus = 1 and company = %s""",
(self.posting_date, self.fiscal_year, self.company),
)
if pce and pce[0][0]:
frappe.throw(
@@ -67,90 +81,80 @@ class PeriodClosingVoucher(AccountsController):
def make_gl_entries(self):
gl_entries = self.get_gl_entries()
if gl_entries:
from erpnext.accounts.general_ledger import make_gl_entries
make_gl_entries(gl_entries)
if len(gl_entries) > 5000:
frappe.enqueue(process_gl_entries, gl_entries=gl_entries, queue="long")
frappe.msgprint(
_("The GL Entries will be processed in the background, it can take a few minutes."),
alert=True,
)
else:
process_gl_entries(gl_entries)
def get_gl_entries(self):
gl_entries = []
pl_accounts = self.get_pl_balances()
for acc in pl_accounts:
# pl account
for acc in self.get_pl_balances_based_on_dimensions(group_by_account=True):
if flt(acc.bal_in_company_currency):
gl_entries.append(
self.get_gl_dict(
{
"account": acc.account,
"cost_center": acc.cost_center,
"finance_book": acc.finance_book,
"account_currency": acc.account_currency,
"debit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) < 0
else 0,
"debit": abs(flt(acc.bal_in_company_currency))
if flt(acc.bal_in_company_currency) < 0
else 0,
"credit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) > 0
else 0,
"credit": abs(flt(acc.bal_in_company_currency))
if flt(acc.bal_in_company_currency) > 0
else 0,
},
item=acc,
)
)
gl_entries.append(self.get_gle_for_pl_account(acc))
if gl_entries:
gle_for_net_pl_bal = self.get_pnl_gl_entry(pl_accounts)
gl_entries += gle_for_net_pl_bal
# closing liability account
for acc in self.get_pl_balances_based_on_dimensions(group_by_account=False):
if flt(acc.bal_in_company_currency):
gl_entries.append(self.get_gle_for_closing_account(acc))
return gl_entries
def get_pnl_gl_entry(self, pl_accounts):
company_cost_center = frappe.db.get_value("Company", self.company, "cost_center")
gl_entries = []
def get_gle_for_pl_account(self, acc):
gl_entry = self.get_gl_dict(
{
"account": acc.account,
"cost_center": acc.cost_center,
"finance_book": acc.finance_book,
"account_currency": acc.account_currency,
"debit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) < 0
else 0,
"debit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) < 0 else 0,
"credit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) > 0
else 0,
"credit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) > 0 else 0,
},
item=acc,
)
self.update_default_dimensions(gl_entry, acc)
return gl_entry
for acc in pl_accounts:
if flt(acc.bal_in_company_currency):
cost_center = acc.cost_center if self.cost_center_wise_pnl else company_cost_center
gl_entry = self.get_gl_dict(
{
"account": self.closing_account_head,
"cost_center": cost_center,
"finance_book": acc.finance_book,
"account_currency": acc.account_currency,
"debit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) > 0
else 0,
"debit": abs(flt(acc.bal_in_company_currency))
if flt(acc.bal_in_company_currency) > 0
else 0,
"credit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) < 0
else 0,
"credit": abs(flt(acc.bal_in_company_currency))
if flt(acc.bal_in_company_currency) < 0
else 0,
},
item=acc,
)
def get_gle_for_closing_account(self, acc):
gl_entry = self.get_gl_dict(
{
"account": self.closing_account_head,
"cost_center": acc.cost_center,
"finance_book": acc.finance_book,
"account_currency": acc.account_currency,
"debit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) > 0
else 0,
"debit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) > 0 else 0,
"credit_in_account_currency": abs(flt(acc.bal_in_account_currency))
if flt(acc.bal_in_account_currency) < 0
else 0,
"credit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) < 0 else 0,
},
item=acc,
)
self.update_default_dimensions(gl_entry, acc)
return gl_entry
self.update_default_dimensions(gl_entry)
gl_entries.append(gl_entry)
return gl_entries
def update_default_dimensions(self, gl_entry):
def update_default_dimensions(self, gl_entry, acc):
if not self.accounting_dimensions:
self.accounting_dimensions = get_accounting_dimensions()
_, default_dimensions = get_dimensions()
for dimension in self.accounting_dimensions:
gl_entry.update({dimension: default_dimensions.get(self.company, {}).get(dimension)})
gl_entry.update({dimension: acc.get(dimension)})
def get_pl_balances(self):
def get_pl_balances_based_on_dimensions(self, group_by_account=False):
"""Get balance for dimension-wise pl accounts"""
dimension_fields = ["t1.cost_center", "t1.finance_book"]
@@ -159,20 +163,56 @@ class PeriodClosingVoucher(AccountsController):
for dimension in self.accounting_dimensions:
dimension_fields.append("t1.{0}".format(dimension))
if group_by_account:
dimension_fields.append("t1.account")
return frappe.db.sql(
"""
select
t1.account, t2.account_currency, {dimension_fields},
t2.account_currency,
{dimension_fields},
sum(t1.debit_in_account_currency) - sum(t1.credit_in_account_currency) as bal_in_account_currency,
sum(t1.debit) - sum(t1.credit) as bal_in_company_currency
from `tabGL Entry` t1, `tabAccount` t2
where t1.is_cancelled = 0 and t1.account = t2.name and t2.report_type = 'Profit and Loss'
and t2.docstatus < 2 and t2.company = %s
and t1.posting_date between %s and %s
group by t1.account, {dimension_fields}
where
t1.is_cancelled = 0
and t1.account = t2.name
and t2.report_type = 'Profit and Loss'
and t2.docstatus < 2
and t2.company = %s
and t1.posting_date between %s and %s
group by {dimension_fields}
""".format(
dimension_fields=", ".join(dimension_fields)
),
(self.company, self.get("year_start_date"), self.posting_date),
as_dict=1,
)
def process_gl_entries(gl_entries):
from erpnext.accounts.general_ledger import make_gl_entries
try:
make_gl_entries(gl_entries, merge_entries=False)
frappe.db.set_value(
"Period Closing Voucher", gl_entries[0].get("voucher_no"), "gle_processing_status", "Completed"
)
except Exception as e:
frappe.db.rollback()
frappe.log_error(e)
frappe.db.set_value(
"Period Closing Voucher", gl_entries[0].get("voucher_no"), "gle_processing_status", "Failed"
)
def make_reverse_gl_entries(voucher_type, voucher_no):
from erpnext.accounts.general_ledger import make_reverse_gl_entries
try:
make_reverse_gl_entries(voucher_type=voucher_type, voucher_no=voucher_no)
frappe.db.set_value("Period Closing Voucher", voucher_no, "gle_processing_status", "Completed")
except Exception as e:
frappe.db.rollback()
frappe.log_error(e)
frappe.db.set_value("Period Closing Voucher", voucher_no, "gle_processing_status", "Failed")

View File

@@ -49,7 +49,7 @@ class TestPeriodClosingVoucher(unittest.TestCase):
expected_gle = (
("Cost of Goods Sold - TPC", 0.0, 600.0),
(surplus_account, 600.0, 400.0),
(surplus_account, 200.0, 0.0),
("Sales - TPC", 400.0, 0.0),
)
@@ -59,7 +59,8 @@ class TestPeriodClosingVoucher(unittest.TestCase):
""",
(pcv.name),
)
pcv.reload()
self.assertEqual(pcv.gle_processing_status, "Completed")
self.assertEqual(pcv_gle, expected_gle)
def test_cost_center_wise_posting(self):
@@ -93,7 +94,6 @@ class TestPeriodClosingVoucher(unittest.TestCase):
)
pcv = self.make_period_closing_voucher(submit=False)
pcv.cost_center_wise_pnl = 1
pcv.save()
pcv.submit()
surplus_account = pcv.closing_account_head
@@ -114,7 +114,17 @@ class TestPeriodClosingVoucher(unittest.TestCase):
(pcv.name),
)
self.assertEqual(pcv_gle, expected_gle)
self.assertSequenceEqual(pcv_gle, expected_gle)
pcv.reload()
pcv.cancel()
self.assertFalse(
frappe.db.get_value(
"GL Entry",
{"voucher_type": "Period Closing Voucher", "voucher_no": pcv.name, "is_cancelled": 0},
)
)
def test_period_closing_with_finance_book_entries(self):
frappe.db.sql("delete from `tabGL Entry` where company='Test PCV Company'")
@@ -165,7 +175,7 @@ class TestPeriodClosingVoucher(unittest.TestCase):
(pcv.name),
)
self.assertEqual(pcv_gle, expected_gle)
self.assertSequenceEqual(pcv_gle, expected_gle)
def make_period_closing_voucher(self, submit=True):
surplus_account = create_account()

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

@@ -164,8 +164,6 @@
"debit_to",
"party_account_currency",
"is_opening",
"c_form_applicable",
"c_form_no",
"column_break8",
"remarks",
"sales_team_section_break",
@@ -345,7 +343,8 @@
"no_copy": 1,
"options": "POS Invoice",
"print_hide": 1,
"read_only": 1
"read_only": 1,
"search_index": 1
},
{
"default": "0",
@@ -1399,23 +1398,6 @@
"options": "No\nYes",
"print_hide": 1
},
{
"fieldname": "c_form_applicable",
"fieldtype": "Select",
"label": "C-Form Applicable",
"no_copy": 1,
"options": "No\nYes",
"print_hide": 1
},
{
"fieldname": "c_form_no",
"fieldtype": "Link",
"label": "C-Form No",
"no_copy": 1,
"options": "C-Form",
"print_hide": 1,
"read_only": 1
},
{
"fieldname": "column_break8",
"fieldtype": "Column Break",
@@ -1572,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

@@ -222,9 +222,6 @@ class POSInvoice(SalesInvoice):
from erpnext.stock.stock_ledger import is_negative_stock_allowed
for d in self.get("items"):
is_service_item = not (frappe.db.get_value("Item", d.get("item_code"), "is_stock_item"))
if is_service_item:
return
if d.serial_no:
self.validate_pos_reserved_serial_nos(d)
self.validate_delivered_serial_nos(d)
@@ -242,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 {}."
@@ -338,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(
@@ -489,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 = (
@@ -535,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)
@@ -635,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
@@ -653,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)

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