Compare commits

..

1221 Commits

Author SHA1 Message Date
Rohit Waghchaure
c92dfa988e Merge branch 'version-13-pre-release' into version-13 2021-11-22 22:50:39 +05:30
Rohit Waghchaure
d03bc7d8dc bumped to version 13.15.0 2021-11-22 23:10:38 +05:50
rohitwaghchaure
742249b6c9 Merge pull request #28508 from rohitwaghchaure/change-log-for-v13-15
chore: change log for v13.15.0
2021-11-22 22:48:43 +05:30
Rohit Waghchaure
24c21c7f49 chore: change log for v13.15.0 2021-11-22 22:45:58 +05:30
rohitwaghchaure
c48f60e6e2 Merge pull request #28506 from frappe/revert-28499-mergify/bp/version-13-pre-release/pr-28491
revert: "feat: Accounts, Selling & Assets Onboarding cleanup #28499"
2021-11-22 22:31:54 +05:30
Saqib
8824712feb Revert "feat: Accounts, Selling & Assets Onboarding cleanup (#28499)"
This reverts commit 145bcbaa6d.
2021-11-22 20:26:44 +05:30
Deepesh Garg
3b2b9ce70c Merge pull request #28503 from frappe/mergify/bp/version-13-pre-release/pr-28469
fix: FY query returning None for new company (backport #28469)
2021-11-22 20:20:17 +05:30
Subin Tom
953f46e289 fix: FY query returning None for new company
(cherry picked from commit 350ed1a6c2)
2021-11-22 13:54:11 +00:00
mergify[bot]
761bd8c97b fix: KSA Invoice print format for multicurrency invoices (#28495) 2021-11-22 18:25:37 +05:30
mergify[bot]
145bcbaa6d feat: Accounts, Selling & Assets Onboarding cleanup (#28499) 2021-11-22 18:24:51 +05:30
mergify[bot]
1b4659f028 fix: Closed status error in Work Order Summary (backport #28460)
* fix: Closed status error in Work Order Summary (#28460)

* fix: Closed status error in Work Order Summary

* chore: use get_meta to get status options

* refactor: simplify code

Co-authored-by: Ankush Menat <ankush@frappe.io>
(cherry picked from commit aa689874e3)

# Conflicts:
#	erpnext/manufacturing/report/work_order_summary/work_order_summary.py

* fix: resolve conflict

Co-authored-by: Sagar Sharma <63660334+s-aga-r@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-22 13:23:22 +05:30
mergify[bot]
e40d63dc13 fix(e-invoicing): totals validation of e-invoices (#28476) 2021-11-22 11:23:33 +05:30
Deepesh Garg
2a165d6250 Merge pull request #28474 from frappe/mergify/bp/version-13-pre-release/pr-28471
fix: bug with qrcode generation due to default print format name (backport #28471)
2021-11-22 11:16:53 +05:30
Saqib Ansari
2c6d973dd6 fix: bug with qrcode generation due to default print format name
(cherry picked from commit ac27391a1f)
2021-11-22 05:08:15 +00:00
Deepesh Garg
007057e5f2 Merge pull request #28462 from frappe/mergify/bp/version-13-pre-release/pr-28459
fix(India): GST category not getting auto updated (backport #28459)
2021-11-19 13:06:29 +05:30
Deepesh Garg
08207242c1 fix: Add test for gst category check
(cherry picked from commit cdbc991e3f)
2021-11-19 06:52:22 +00:00
Deepesh Garg
24c113bf68 fix(India): GST category not getting auto updated
(cherry picked from commit f8a26a9fac)
2021-11-19 06:52:22 +00:00
Ankush Menat
bceeb0f751 test: basic test for serialize reco cancel
(cherry picked from commit ed99aca36f)
2021-11-18 14:35:13 +05:30
Ankush Menat
cf9397eea0 fix: can not cancel stock reconciliation with sr no
(cherry picked from commit 8c85012a70)
2021-11-18 14:35:13 +05:30
mergify[bot]
6fdd5e990a chore: remove manual collapsing of section (#28435) (#28451)
(cherry picked from commit 8102e4a210)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-18 14:14:44 +05:30
mergify[bot]
b4db3362e0 fix: added job_card_item link in material request (#28222) (#28434)
* fix: added job_card_item links in material request

* fix: add no copy to row references

(cherry picked from commit cb064b06ad)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-11-17 19:37:20 +05:30
rohitwaghchaure
16b90688bb Merge pull request #28430 from frappe/mergify/bp/version-13-pre-release/pr-28417
fix: currency wise pricing rule not working (backport #28417)
2021-11-17 14:38:51 +05:30
Rohit Waghchaure
c118fa1ada fix: currency wise pricing rule not working
(cherry picked from commit 43aeb541c2)
2021-11-17 08:33:33 +00:00
rohitwaghchaure
801e6df37a Merge pull request #28426 from frappe/mergify/bp/version-13-pre-release/pr-28425
fix: performance issue while submitting the Journal Entry (backport #28425)
2021-11-17 13:34:30 +05:30
Rohit Waghchaure
70a130e78d fix: performance to submit the JV
(cherry picked from commit 7472760ea3)
2021-11-17 07:25:29 +00:00
rohitwaghchaure
af251e439a Merge pull request #28419 from rohitwaghchaure/merge-hotfix-to-pre-release-for-13-15
chore: Merge branch 'version-13-hotfix' into 'version-13-pre-release'
2021-11-16 22:37:01 +05:30
Rohit Waghchaure
d556645455 Merge branch 'version-13-hotfix' into 'version-13-pre-release' 2021-11-16 21:25:53 +05:30
Marica
e6451a3a85 Merge pull request #28414 from frappe/mergify/bp/version-13-hotfix/pr-28228
fix: Pull only Items that are in Job Card in a Stock Entry against Job Card (backport #28228)
2021-11-16 19:09:13 +05:30
marination
a34eae7bc7 fix: test_job_card_partial_material_transfer test
- Use a specific BOM for JC tests
- Utility to create said BOM
- Sider: unused variable

(cherry picked from commit a5f8274d79)
2021-11-16 13:08:31 +00:00
marination
d086039f1b fix: Server side test
- make `tests_that_skip_setup` a tuple (added comma)
- remove manual teardown in `test_job_card_material_transfer_correctness` to avoid premature committing
- transfer_material_against = "Job Card" while making BOM with mulitple operations

(cherry picked from commit bb561ba7a8)
2021-11-16 13:08:30 +00:00
marination
619c066f67 fix: (travis) Production Plan Summary Report breaks if no WO
- `get_cached_value` throws a DoesNotExistError if non-existent value, used `get_value` instead
- accomodate production plan items that dont have WO/PO against them as well (blank values)
- added some None value handling to avoid AttributeError

(cherry picked from commit 1eb3ca2b86)
2021-11-16 13:08:29 +00:00
marination
0ee54b0779 fix: Partial Trabsfers against JC
- Fixed transferred qty not back updating on JC if partial transfer
- Partial transfer not mapping pending qty from JC correctly in SE
- tests for above cases
- minor code cleanup

(cherry picked from commit e8d0c25dff)
2021-11-16 13:08:28 +00:00
marination
e3dcccdd18 test: Stock Entry from JC correctness (items mapping and qty)
(cherry picked from commit 0aa237f38c)
2021-11-16 13:08:26 +00:00
marination
f3c562bd5b fix: Pull Items that are in JC in Stock Entry against JC
- Check if items pulled in stock entry are present in Job Card
- Code cleanup and removed redundant checks

Co-authored-by: Gavin D'souza <gavin18d@gmail.com>
(cherry picked from commit 3da03028f3)
2021-11-16 13:08:24 +00:00
mergify[bot]
0c65206d69 fix: POS idx issue in taxes table while merging (#28411) 2021-11-16 18:19:57 +05:30
mergify[bot]
09251b3ddf refactor: fix help section background in dark mode (#28406) (#28408)
(cherry picked from commit 952fc87c99)

Co-authored-by: Ahmed Shareef <46922290+penieldev@users.noreply.github.com>
2021-11-16 14:32:23 +05:30
rohitwaghchaure
55c13a9917 Merge pull request #28407 from frappe/mergify/bp/version-13-hotfix/pr-28398
fix: Pricing Rule not created against the Promotional Scheme (backport #28398)
2021-11-16 14:17:26 +05:30
Rohit Waghchaure
1837204ab0 fix: Pricing Rule not created against the Promotional Scheme
(cherry picked from commit d82910b08a)
2021-11-16 08:25:06 +00:00
mergify[bot]
2c9b995c71 fix: remove item-item group name validation (#28392) (#28399)
(cherry picked from commit 043e3255d6)

Co-authored-by: Rohan <Alchez@users.noreply.github.com>
2021-11-15 20:01:37 +05:30
mergify[bot]
c1a1e9c399 fix: don't make naming series mandatory for items (backport #28394) (#28396)
* fix: don't make naming series mandatory for items

Item variants are an exception, hence this needs to be checked
conditionally.

(cherry picked from commit 7fcaeca403)

* fix: patch for naming series property setter

(cherry picked from commit 54184e54ed)

# Conflicts:
#	erpnext/patches.txt

* fix: conflicts

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-15 18:56:15 +05:30
mergify[bot]
2899394bcf fix: Work order creation from sales order (#28388) (#28391)
* fix: Work order creation from sales order

* chore: formatting

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
(cherry picked from commit 2eccb7a1ca)

Co-authored-by: Sagar Sharma <63660334+s-aga-r@users.noreply.github.com>
2021-11-15 16:10:28 +05:30
mergify[bot]
11f4e1cca3 perf(minor): general ledger report (#28355) 2021-11-15 13:49:58 +05:30
Rohit Waghchaure
575d41c024 Merge branch 'version-13-pre-release' into version-13 2021-11-12 23:34:56 +05:30
Rohit Waghchaure
7fc2f24470 bumped to version 13.14.1 2021-11-12 23:54:56 +05:50
mergify[bot]
d44cab3926 fix: validate hmac unconditionally (#28372) (#28374)
(cherry picked from commit c0f06bc8e3)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-12 14:53:27 +05:30
mergify[bot]
68ff68a357 fix: Collapse Scrap Items in Job Card (backport #28362) (#28368)
* fix: Collapse Scrap Items in Job Card (#28362)

(cherry picked from commit a424310581)

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

* fix: resolve conflict

Co-authored-by: Sagar Sharma <63660334+s-aga-r@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-12 14:41:00 +05:30
mergify[bot]
4c99f7159d fix(M-Pesa): validate type before executing get_doc (#28369) (#28373)
(cherry picked from commit 6d3e9bce5f)

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2021-11-12 14:39:47 +05:30
mergify[bot]
731f0d71b9 fix(WooCommerce): always expect signature in webhook requests (#28367)
(cherry picked from commit 24b048925b)

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2021-11-12 14:09:53 +05:30
Deepesh Garg
399c0a6452 Merge pull request #28365 from frappe/mergify/bp/version-13-hotfix/pr-28363
fix: Default party account getting overriden in invoices (backport #28363)
2021-11-12 13:38:41 +05:30
Deepesh Garg
2747f263c7 Merge pull request #28366 from frappe/mergify/bp/version-13-pre-release/pr-28363
fix: Default party account getting overriden in invoices (backport #28363)
2021-11-12 13:38:28 +05:30
mergify[bot]
350274edb9 fix: commision rate not fetch from sales person (#28350) 2021-11-12 13:14:22 +05:30
Deepesh Garg
b0a58f4111 fix: Default party account getting overriden in invoices
(cherry picked from commit 88648570d7)
2021-11-12 07:35:03 +00:00
Deepesh Garg
a9452f1277 fix: Default party account getting overriden in invoices
(cherry picked from commit 88648570d7)
2021-11-12 07:34:40 +00:00
Ankush Menat
da64d0b0f9 fix: workspace links to ecommerce settings (#28360) 2021-11-12 10:54:31 +05:30
mergify[bot]
fc5372f201 fix: Unable to edit supplier scorecard criteria name once created (#28348) (#28352)
(cherry picked from commit 944bf8da71)

Co-authored-by: Sagar Sharma <63660334+s-aga-r@users.noreply.github.com>
2021-11-11 20:12:06 +05:30
Deepesh Garg
0f92c68e70 Merge pull request #28340 from frappe/mergify/bp/version-13-hotfix/pr-28334
fix(India): Sales Invoice with duplicate items not showing correct taxable value (backport #28334)
2021-11-11 12:55:48 +05:30
Deepesh Garg
1edafd04fc fix(India): Sales Invoice with duplicate items not showing correct taxable value
(cherry picked from commit 0dca97eb9f)
2021-11-11 06:09:44 +00:00
Deepesh Garg
279ccece57 Merge pull request #28333 from nemesis189/dispatch-address-not-visible-v13
fix: Dispatch address details not displayed in v13
2021-11-11 10:58:19 +05:30
Subin Tom
8ed909da3f fix: Dispatch address details not displayed in v13 2021-11-10 20:36:31 +05:30
Saqib
6661cc7703 fix(pos): get mode of payments query (#28323) 2021-11-10 13:38:21 +05:30
mergify[bot]
eb5320b885 fix(pos): get mode of payments query (#28321) (#28325)
(cherry picked from commit 6d05bb5274)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-11-10 13:37:35 +05:30
Ankush Menat
5f29cd8685 fix: default value for allow neg stock in repost_item_valuation
Negative stock can be toggled back after queuing transactions, this
causes failure when repost is executed.

Now allow_negative_stock stock is set at time of queuing the repost job.
This means setting changes done afterwards won't affect already
submitted reposts.

(cherry picked from commit 12e81df2b7)
2021-11-10 13:32:01 +05:30
mergify[bot]
a40b21cd20 fix(Bank Reconciliation): get credit amount for bank account of type liability (#28319) 2021-11-10 12:57:57 +05:30
Ankush Menat
c04c2108f3 fix: ignore cancelled entries in incorrect balance qty report
(cherry picked from commit e498389b00)
2021-11-10 12:13:02 +05:30
Rohit Waghchaure
ab904c22cc Merge branch 'version-13-pre-release' into version-13 2021-11-09 20:16:01 +05:30
Rohit Waghchaure
6b77bac7da bumped to version 13.14.0 2021-11-09 20:36:00 +05:50
rohitwaghchaure
b9da89a90b Merge pull request #28305 from rohitwaghchaure/change-log-for-v13-14-0
chore: Added change log for version 13.14.0
2021-11-09 20:13:44 +05:30
Rohit Waghchaure
f3cfb93a5f chore: Added change log for version 13.14.0 2021-11-09 20:09:09 +05:30
mergify[bot]
fa2f1348ec fix(India setup): setup company independent fixtures for patch (#28304)
(cherry picked from commit 88b5bda34b)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-11-09 19:50:14 +05:30
Wolfram Schmidt
c7f75aad79 fix: add Email option to contact email field (#28296)
* Update warranty_claim.json

Added the Email in option field of Contact Email so you are able to create a notification mapping to this field as reciever.

* Update warranty_claim.json

(cherry picked from commit 6907ad8adb)
2021-11-09 18:37:54 +05:30
Ankush Menat
b45d9065da fix: patch to update job card status
(cherry picked from commit ccf84ae88a)
2021-11-09 18:37:07 +05:30
Ankush Menat
f2aa5015cb fix: avoid mutating iterator while iterating over it
(cherry picked from commit fdfa39c231)
2021-11-09 18:37:07 +05:30
Ankush Menat
65844932cc fix: use completion qty instead of transfer quantity for JC status
(cherry picked from commit 37799fe3dd)
2021-11-09 18:37:07 +05:30
mergify[bot]
47b609ef1a fix(India setup): setup company independent fixtures for patch (#28299)
(cherry picked from commit 88b5bda34b)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-11-09 17:50:38 +05:30
mergify[bot]
077073f9a3 perf: improve financial statement loading time (#28295)
(cherry picked from commit b7a44fe0a3)

Co-authored-by: Saqib Ansari <nextchamp.saqib@gmail.com>
2021-11-09 17:33:52 +05:30
rohitwaghchaure
9869b17ee0 Merge pull request #28291 from frappe/mergify/bp/version-13-hotfix/pr-28150
feat: provision to close the Work Order (backport #28150)
2021-11-09 16:40:46 +05:30
rohitwaghchaure
346c76cf38 Merge pull request #28290 from frappe/mergify/bp/version-13-pre-release/pr-28150
feat: provision to close the Work Order (backport #28150)
2021-11-09 16:38:10 +05:30
rohitwaghchaure
81e7ebc112 Merge pull request #28293 from frappe/mergify/bp/version-13-pre-release/pr-28219
feat: provision to have limited parameters for in-process quality inspection (backport #28219)
2021-11-09 16:37:37 +05:30
Sagar Vora
442177aeee fix: specify fields to be set in Lead (#28289) 2021-11-09 16:05:03 +05:30
Diksha Jadhav
bb9713a7b2 refactor: use fetch from property for qi template on job card
(cherry picked from commit 467324c87f)
2021-11-09 10:23:00 +00:00
Diksha Jadhav
ac54e80856 feat: provision to have limited parameters for in-process quality inspection
(cherry picked from commit 6c45f8b2c4)
2021-11-09 10:22:59 +00:00
Diksha Jadhav
3c78ac21d9 feat(manufacturing): add link field for quality inspection template on operation
(cherry picked from commit 281a9cc749)
2021-11-09 10:22:58 +00:00
rohitwaghchaure
8079dc1bae Merge pull request #28219 from DeeMysterio/in-process-qi
feat: provision to have limited parameters for in-process quality inspection
2021-11-09 15:49:37 +05:30
Anupam
47851ce754 fix: get_planned_qty chnages
(cherry picked from commit 663a7afe4d)
2021-11-09 10:17:09 +00:00
Anupam
7e256e220b fix: test cases
(cherry picked from commit 27709a1c71)
2021-11-09 10:17:09 +00:00
Anupam
26c23719a0 fix: testcases:
(cherry picked from commit 7044ae5e39)
2021-11-09 10:17:08 +00:00
Anupam
f96ac4e204 fix: linter isuue
(cherry picked from commit cc15cf6ae2)
2021-11-09 10:17:07 +00:00
Anupam
b993d45ba5 fix: sider isuue
(cherry picked from commit ba47bd02b6)
2021-11-09 10:17:02 +00:00
Anupam
e57f53e771 fix: validate job card
(cherry picked from commit 9b4c7e4796)
2021-11-09 10:17:00 +00:00
Anupam
21cc87990a fix: test cases
(cherry picked from commit 9c0906f1b5)
2021-11-09 10:17:00 +00:00
Anupam
fcafc0e184 fix: linter issues
(cherry picked from commit e36da4d137)
2021-11-09 10:16:59 +00:00
Anupam
ab1f12ff66 fix: linter issues
(cherry picked from commit 59e4fd980c)
2021-11-09 10:16:59 +00:00
Anupam
fcb80faadc fix: added testcase
(cherry picked from commit 530a0f481e)
2021-11-09 10:16:58 +00:00
Anupam
ac3605c96a fix: sider issue
(cherry picked from commit 264b0df9ff)
2021-11-09 10:16:57 +00:00
Anupam
e5e16b5dc4 fix: sider issue
(cherry picked from commit 55e97dce8a)
2021-11-09 10:16:57 +00:00
Anupam
91a06b690c fix: sider issue
(cherry picked from commit e290fe0721)
2021-11-09 10:16:56 +00:00
Anupam
e144f199a4 feat: added confirm dialog on closing of workorder
(cherry picked from commit 5d4c5652af)
2021-11-09 10:16:55 +00:00
Anupam
7bdc948a48 feat: provision to close the Work Order
(cherry picked from commit 23af036894)
2021-11-09 10:16:55 +00:00
Anupam
515b8dd8ca fix: get_planned_qty chnages
(cherry picked from commit 663a7afe4d)
2021-11-09 10:16:26 +00:00
Anupam
dac0d87e16 fix: test cases
(cherry picked from commit 27709a1c71)
2021-11-09 10:16:25 +00:00
Anupam
365572f5ea fix: testcases:
(cherry picked from commit 7044ae5e39)
2021-11-09 10:16:25 +00:00
Anupam
029e66709d fix: linter isuue
(cherry picked from commit cc15cf6ae2)
2021-11-09 10:16:24 +00:00
Anupam
8851b7adcf fix: sider isuue
(cherry picked from commit ba47bd02b6)
2021-11-09 10:16:24 +00:00
Anupam
116210dcea fix: validate job card
(cherry picked from commit 9b4c7e4796)
2021-11-09 10:16:23 +00:00
Anupam
dce943b41f fix: test cases
(cherry picked from commit 9c0906f1b5)
2021-11-09 10:16:23 +00:00
Anupam
cb209d9b57 fix: linter issues
(cherry picked from commit e36da4d137)
2021-11-09 10:16:23 +00:00
Anupam
7c7493c91d fix: linter issues
(cherry picked from commit 59e4fd980c)
2021-11-09 10:16:22 +00:00
Anupam
f3da88e301 fix: added testcase
(cherry picked from commit 530a0f481e)
2021-11-09 10:16:22 +00:00
Anupam
8ddeb83191 fix: sider issue
(cherry picked from commit 264b0df9ff)
2021-11-09 10:16:21 +00:00
Anupam
47f8f3d9dd fix: sider issue
(cherry picked from commit 55e97dce8a)
2021-11-09 10:16:20 +00:00
Anupam
44c53deb90 fix: sider issue
(cherry picked from commit e290fe0721)
2021-11-09 10:16:20 +00:00
Anupam
d43aecbe13 feat: added confirm dialog on closing of workorder
(cherry picked from commit 5d4c5652af)
2021-11-09 10:16:19 +00:00
Anupam
e8ef54f4d7 feat: provision to close the Work Order
(cherry picked from commit 23af036894)
2021-11-09 10:16:18 +00:00
mergify[bot]
59632720b2 fix: sum of components in salary register (#28237) (#28287)
* fix: sum of components in salary register

* fix: sum of deduction components

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
(cherry picked from commit 17acb08545)

Co-authored-by: Jannat Patel <31363128+pateljannat@users.noreply.github.com>
2021-11-09 15:45:26 +05:30
mergify[bot]
58ece37d8f fix: filter only submitted fees in student fee collection report (#28280) (#28282)
* Update student_fee_collection.json

Fix: filter and show only submitted fees documents

* fix: add total row for the student fee collection

(cherry picked from commit 0e8e7e21c3)

Co-authored-by: Bibin <17405044+bibinqcs@users.noreply.github.com>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-11-09 15:45:11 +05:30
Diksha Jadhav
467324c87f refactor: use fetch from property for qi template on job card 2021-11-09 14:21:34 +05:30
yadavyk
627dd67a9b fix: Added count for Healthcare Practioner (#28286)
Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-09 13:15:41 +05:30
mergify[bot]
178a883ecc fix: show full item name in search widget (#28283) (#28284)
(cherry picked from commit 34f5283c17)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-09 12:15:09 +05:30
mergify[bot]
eacf26d618 fix: show full item name in search widget (#28283) (#28285)
(cherry picked from commit 34f5283c17)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-09 12:14:54 +05:30
mergify[bot]
40b5bb1d15 fix: do not generate multiple invoices (#28216) 2021-11-08 20:07:57 +05:30
mergify[bot]
5d249016c3 fix: do not generate multiple invoices (#28215) 2021-11-08 20:07:47 +05:30
Deepesh Garg
5d46f765a6 Merge pull request #28276 from frappe/mergify/bp/version-13-pre-release/pr-28262
fix: Taxjar customer_address fix, currency fix (backport #28262)
2021-11-08 19:04:06 +05:30
Deepesh Garg
2654098ce2 Merge pull request #28274 from frappe/mergify/bp/version-13-pre-release/pr-28272
fix: KSA VAT setup issues (backport #28272)
2021-11-08 18:52:20 +05:30
Deepesh Garg
9b2c460cb8 Merge pull request #28275 from frappe/mergify/bp/version-13-hotfix/pr-28272
fix: KSA VAT setup issues (backport #28272)
2021-11-08 18:47:21 +05:30
Subin Tom
a403200516 fix: company condition fix, added company field
(cherry picked from commit 7ad2717acc)
2021-11-08 13:12:00 +00:00
Subin Tom
1dc7cb8ad1 fix: fixed company field, updated patch
(cherry picked from commit 7f2d304f32)
2021-11-08 13:12:00 +00:00
Subin Tom
abe6ef4cd4 fix: Added company field, filtered account heads
(cherry picked from commit 902c03cd37)
2021-11-08 13:12:00 +00:00
Subin Tom
3d1b833f35 fix: Fixed customer address variable, sales invoice item field currency issue
(cherry picked from commit 904010ab64)
2021-11-08 13:11:59 +00:00
Deepesh Garg
bad6c3de43 Merge pull request #28262 from nemesis189/taxjar-cust-address-patch-update
fix: Taxjar customer_address fix, currency fix
2021-11-08 18:40:35 +05:30
Deepesh Garg
6c1bb1ecb9 Merge pull request #28273 from frappe/mergify/bp/version-13-hotfix/pr-28065
fix(minor): check if gst_category exists while validating GSTIN (backport #28065)
2021-11-08 18:33:37 +05:30
Deepesh Garg
2dc12505b2 fix: Resolve conflicts 2021-11-08 18:16:46 +05:30
Deepesh Garg
987bd4fce2 fix: Resolve conflicts 2021-11-08 18:15:53 +05:30
Deepesh Garg
8a510b5441 fix: Add patch to make custom fields
(cherry picked from commit 508832e90a)

# Conflicts:
#	erpnext/patches.txt
2021-11-08 12:40:19 +00:00
Deepesh Garg
a34519c0c4 fix: KSA VAT setup issues
(cherry picked from commit c81d4734c4)
2021-11-08 12:40:18 +00:00
Deepesh Garg
f5251b5a86 fix: Add patch to make custom fields
(cherry picked from commit 508832e90a)

# Conflicts:
#	erpnext/patches.txt
2021-11-08 12:39:55 +00:00
Deepesh Garg
aa6caa00bf fix: KSA VAT setup issues
(cherry picked from commit c81d4734c4)
2021-11-08 12:39:54 +00:00
Subin Tom
7ad2717acc fix: company condition fix, added company field 2021-11-08 18:03:44 +05:30
Subin Tom
7f2d304f32 fix: fixed company field, updated patch 2021-11-08 17:59:03 +05:30
Anuja Pawar
d37ca7b3e0 fix: sider
(cherry picked from commit f2fbcc8124)
2021-11-08 12:24:29 +00:00
Anuja Pawar
bbea156aa6 fix: update set_value query
(cherry picked from commit dd3cadd46b)
2021-11-08 12:24:29 +00:00
Anuja Pawar
10606b242c fix: re-writing sql query with ORM methods
(cherry picked from commit bc1e7bc15f)
2021-11-08 12:24:29 +00:00
Anuja Pawar
1dbb83c03d fix: sider
(cherry picked from commit 6a3bd882b4)
2021-11-08 12:24:28 +00:00
Anuja Pawar
ba08b4fcb3 fix: sider
(cherry picked from commit 4f53837624)
2021-11-08 12:24:27 +00:00
Anuja Pawar
2c0e8c8559 fix: check if gst_category exist
(cherry picked from commit 59c31bb124)
2021-11-08 12:24:27 +00:00
Deepesh Garg
35bd31e939 Merge pull request #28270 from frappe/mergify/bp/version-13-pre-release/pr-28166
feat(Print Format): KSA VAT Invoice (backport #28166)
2021-11-08 17:15:49 +05:30
Deepesh Garg
18e7fbf33a Merge pull request #28271 from frappe/mergify/bp/version-13-hotfix/pr-28166
feat(Print Format): KSA VAT Invoice (backport #28166)
2021-11-08 17:15:29 +05:30
ahmadpak
8f52ebdd68 update(Print Format): Sales Invoice
- KSA VAT Invoice
Customer Identification Number Added

(cherry picked from commit 8df50cf1e0)
2021-11-08 09:58:38 +00:00
ahmadpak
1e08111da4 new (Print Format): KSA VAT Invoice
(cherry picked from commit 2a5beec885)
2021-11-08 09:58:38 +00:00
ahmadpak
0ba59049f9 update(Print Format): Sales Invoice
- KSA VAT Invoice
Customer Identification Number Added

(cherry picked from commit 8df50cf1e0)
2021-11-08 09:58:11 +00:00
ahmadpak
9f6b0dbfdf new (Print Format): KSA VAT Invoice
(cherry picked from commit 2a5beec885)
2021-11-08 09:58:11 +00:00
Subin Tom
902c03cd37 fix: Added company field, filtered account heads 2021-11-08 15:16:20 +05:30
Subin Tom
904010ab64 fix: Fixed customer address variable, sales invoice item field currency issue 2021-11-08 09:49:11 +05:30
Diksha Jadhav
6c45f8b2c4 feat: provision to have limited parameters for in-process quality inspection 2021-11-07 20:50:48 +05:30
Sagar Sharma
bb3957eba3 fix: auto update price list rate (#28255)
* fix: auto update price list rate

* fix: hide field when auto insert isn't enabled
2021-11-07 17:18:00 +05:30
mergify[bot]
4cb3c2a46c feat: replace newline in remarks (DATEV report) (#28152) (#28247)
(cherry picked from commit 114028e473)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2021-11-05 11:15:31 +05:30
mergify[bot]
79be341ea4 feat: replace newline in remarks (DATEV report) (#28152) (#28248)
(cherry picked from commit 114028e473)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2021-11-05 11:15:18 +05:30
fatihustaoglu
95a5ef1d41 fix: Bulk update of valid upto field wasn't working (#28242)
* fix: Bulk update of valid upto field wasn't working

Check in dates for the price list was failing because valid_upto field was string. Converting to date fixed the problem.

* chore: extend fix and cleanup whitespace

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-04 11:27:56 +05:30
Suraj Shetty
b3dc199118 Merge pull request #28191 from frappe/build-on-release
ci: migrate docker to github actions
2021-11-03 18:10:20 +05:30
Saqib
73e9e991cc fix(e-invoicing): link to error log list 2021-11-03 17:49:50 +05:30
Saqib
9a3c6694b9 Merge pull request #28221 from frappe/mergify/bp/version-13-pre-release/pr-27946
fix(Payment Entry): splitting outstanding rows as per payment terms (backport #27946)
2021-11-03 15:41:29 +05:30
Saqib
1ba2a47761 Merge pull request #28220 from frappe/mergify/bp/version-13-hotfix/pr-27946
fix(Payment Entry): splitting outstanding rows as per payment terms (backport #27946)
2021-11-03 15:41:02 +05:30
Anuja Pawar
2c9266807a fix(Payment Entry): splitting outstanding rows as per payment terms (#27946)
(cherry picked from commit d72709dd81)
2021-11-03 09:18:40 +00:00
Anuja Pawar
fa24b9842b fix(Payment Entry): splitting outstanding rows as per payment terms (#27946)
(cherry picked from commit d72709dd81)
2021-11-03 09:18:12 +00:00
Revant Nandgaonkar
afb236a06b ci: change GITHUB_PAT to CI_PAT 2021-11-03 13:56:50 +05:30
mergify[bot]
94905df774 fix: ignore unsupported methods while resyncing (#28210) (#28214)
(cherry picked from commit 72a050fb0b)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-11-03 09:47:00 +05:30
Ankush Menat
72a050fb0b fix: ignore unsupported methods while resyncing (#28210) 2021-11-02 23:05:14 +05:30
Marica
fa5cee479f Merge pull request #28204 from frappe/mergify/bp/version-13-pre-release/pr-28202
fix: Serial Nos not set in the row after scanning in popup (backport #28202)
2021-11-02 20:41:33 +05:30
Deepesh Garg
885f1e0fd8 Merge pull request #28207 from frappe/mergify/bp/version-13-pre-release/pr-28205
fix: Error on LDC creation (backport #28205)
2021-11-02 20:29:43 +05:30
Deepesh Garg
2a1695c7de Merge pull request #28206 from frappe/mergify/bp/version-13-hotfix/pr-28205
fix: Error on LDC creation (backport #28205)
2021-11-02 20:29:31 +05:30
Deepesh Garg
e358d34c4f fix: Error on LDC creation
(cherry picked from commit 66348e1a03)
2021-11-02 14:59:10 +00:00
Deepesh Garg
35c5822115 fix: Error on LDC creation
(cherry picked from commit 66348e1a03)
2021-11-02 14:58:30 +00:00
Marica
df6465d715 Merge pull request #28203 from frappe/mergify/bp/version-13-hotfix/pr-28202
fix: Serial Nos not set in the row after scanning in popup (backport #28202)
2021-11-02 20:25:59 +05:30
marination
093d9f4a70 fix: Serial Nos not set in the row after scanning in popup
- Avoid whitspaces while calculating length of serial nos

(cherry picked from commit 734b57deec)
2021-11-02 14:48:40 +00:00
marination
4262682080 fix: Serial Nos not set in the row after scanning in popup
- Avoid whitspaces while calculating length of serial nos

(cherry picked from commit 734b57deec)
2021-11-02 14:48:14 +00:00
mergify[bot]
4bdde5f706 fix: replaced "=" with "in" for multiple statuses in query #28193 (#28199)
fix: replaced "=" with "in" for multiple statuses in query
(cherry picked from commit 857d87da97)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-11-02 18:20:49 +05:30
mergify[bot]
50fbc167f3 fix(Payment Reconciliation): clear child tables on company/party change (#28194) 2021-11-02 17:12:11 +05:30
mergify[bot]
0a608911f1 fix(Payment Reconciliation): clear child tables on company/party change (#28153) 2021-11-02 17:10:27 +05:30
Marica
0731454f50 Merge pull request #28196 from frappe/mergify/bp/version-13-pre-release/pr-28195
fix: (ux) Remove warehouse filter on Batch field for Material Receipt (backport #28195)
2021-11-02 16:28:02 +05:30
Marica
27570db761 Merge pull request #28197 from frappe/mergify/bp/version-13-hotfix/pr-28195
fix: (ux) Remove warehouse filter on Batch field for Material Receipt (backport #28195)
2021-11-02 16:27:18 +05:30
marination
68646c5756 chore: Add comment above fix for future reference
(cherry picked from commit 48886ee705)
2021-11-02 10:40:41 +00:00
marination
189595b4f7 fix: Remove warehouse filter on Batch field for Material Receipt
(cherry picked from commit 048210a8f6)
2021-11-02 10:40:40 +00:00
marination
b81dfdcd26 chore: Add comment above fix for future reference
(cherry picked from commit 48886ee705)
2021-11-02 10:40:02 +00:00
marination
68809159ba fix: Remove warehouse filter on Batch field for Material Receipt
(cherry picked from commit 048210a8f6)
2021-11-02 10:40:00 +00:00
Revant Nandgaonkar
1736029733 chore: migrate docker to github actions 2021-11-02 12:03:22 +05:30
Diksha Jadhav
281a9cc749 feat(manufacturing): add link field for quality inspection template on operation 2021-11-01 17:19:07 +05:30
Deepesh Garg
982960fc0a Merge pull request #28177 from frappe/mergify/bp/version-13-pre-release/pr-26735
fix: COGS account in purchase receipt (backport #26735)
2021-11-01 16:51:11 +05:30
Deepesh Garg
bb7d661a04 fix: Resolve conflicts 2021-11-01 16:23:39 +05:30
Deepesh Garg
c445d8ea3c Merge pull request #28176 from frappe/mergify/bp/version-13-hotfix/pr-26735
fix: COGS account in purchase receipt (backport #26735)
2021-11-01 16:22:32 +05:30
Ankush Menat
79b087670f fix(ux): stock levels take time after item merge
Item merge creates a repost and depending on number of entries it can
take from 1 to n hours for it to finish. (depending upon queued up
reposts)

Added message so users don't feel confused till this operation is
finished.

(cherry picked from commit 1eab3a44f6)
2021-11-01 15:34:53 +05:30
Ankush Menat
6d0ff88184 fix: use warehouse to find company
(cherry picked from commit f7ffe04a4b)
2021-11-01 15:31:23 +05:30
Ankush Menat
5a40a48e31 fix: pass company while fetching valuation rate
If company is not supplied and valuation rate is 0, then default
company is used for checking if perpetual inventory is enabled or not.
This makes little sense as different companies can have different
setting for perpetual inventory.

(cherry picked from commit a0727b2e82)
2021-11-01 15:31:23 +05:30
Ankush Menat
c6557a136c fix: use warehouse to find company
(cherry picked from commit f7ffe04a4b)
2021-11-01 15:31:11 +05:30
Ankush Menat
271dad941b fix: pass company while fetching valuation rate
If company is not supplied and valuation rate is 0, then default
company is used for checking if perpetual inventory is enabled or not.
This makes little sense as different companies can have different
setting for perpetual inventory.

(cherry picked from commit a0727b2e82)
2021-11-01 15:31:11 +05:30
Deepesh Garg
134ea9214e fix: resolve conflicts 2021-11-01 14:40:19 +05:30
Rohit Waghchaure
e9d1cbb339 fix: COGS account in purchase receipt
(cherry picked from commit 2a14f255cf)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
2021-11-01 07:26:09 +00:00
Rohit Waghchaure
f88c24155c fix: COGS account in purchase receipt
(cherry picked from commit 2a14f255cf)

# Conflicts:
#	erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
2021-11-01 07:25:46 +00:00
mergify[bot]
18dddfdea9 fix: remove duplicate field from selling_settings (#28174)
fix https://github.com/frappe/erpnext/issues/28155

(cherry picked from commit 1cc4eddacb)

Co-authored-by: ahmadRagheb <ahmedragheb75@gmail.com>
2021-11-01 11:11:40 +05:30
Deepesh Garg
b2a3451ca2 Merge pull request #28173 from ahmadRagheb/patch-3
fix: Update selling_settings.json
2021-11-01 10:36:36 +05:30
ahmadRagheb
1cc4eddacb Update selling_settings.json
fix https://github.com/frappe/erpnext/issues/28155
2021-10-31 22:48:52 +02:00
mergify[bot]
f1e3a1cac2 fix: update tax template name for 18% GST (backport #28156)
fix: update tax template name for 18% GST (backport #28156)
2021-10-31 19:18:54 +05:30
Deepesh Garg
978d1cde2d Merge pull request #28165 from frappe/mergify/bp/version-13-pre-release/pr-28162
fix: Error for missing PAN no field (backport #28162)
2021-10-31 18:50:10 +05:30
Deepesh Garg
04f6070df4 Merge pull request #28164 from frappe/mergify/bp/version-13-hotfix/pr-28162
fix: Error for missing PAN no field (backport #28162)
2021-10-31 18:49:52 +05:30
rohitwaghchaure
08e65af5b1 Merge pull request #28169 from frappe/mergify/bp/version-13-hotfix/pr-28168
fix: patch update_category_in_ltds_certificate (backport #28168)
2021-10-31 11:17:31 +05:30
rohitwaghchaure
feaae330d5 Merge pull request #28170 from frappe/mergify/bp/version-13-pre-release/pr-28168
fix: patch update_category_in_ltds_certificate (backport #28168)
2021-10-31 10:28:09 +05:30
Rohit Waghchaure
060127663a fix: patch update_category_in_ltds_certificate
(cherry picked from commit cae29b71d8)
2021-10-31 04:27:51 +00:00
Rohit Waghchaure
57d931dbbe fix: patch update_category_in_ltds_certificate
(cherry picked from commit cae29b71d8)
2021-10-31 04:27:32 +00:00
rohitwaghchaure
88bf748275 Merge pull request #28159 from rohitwaghchaure/merge-hotfix-to-pre-release-for-13-14
chore: merge branch 'version-13-hotfix' into 'version-13-pre-release'
2021-10-30 22:33:26 +05:30
Deepesh Garg
aa464cc615 fix: Error for missing PAN no field
(cherry picked from commit 541c892f97)
2021-10-30 14:00:07 +00:00
Deepesh Garg
686c4fa86f fix: Error for missing PAN no field
(cherry picked from commit 541c892f97)
2021-10-30 13:59:47 +00:00
Rohit Waghchaure
8581b5cdea chore: merge branch 'version-13-hotfix' into 'version-13-pre-release' 2021-10-30 15:15:19 +05:30
mergify[bot]
9abb467127 fix: Make status filter optional (#28151) 2021-10-29 18:16:23 +05:30
mergify[bot]
f16e0e17cc fix: POS consolidated invoice rounded total issue (#28146) 2021-10-29 18:05:49 +05:30
Deepesh Garg
fe59c313d6 Merge pull request #28148 from frappe/mergify/bp/version-13-hotfix/pr-28145
fix: COA importer importing all accounts as group (backport #28145)
2021-10-29 18:03:58 +05:30
Ankush Menat
9e9f730dd1 fix: sort by creation to break tie
(cherry picked from commit ff9cfe0d14)
2021-10-29 17:42:05 +05:30
Ankush Menat
264ffe05b4 refactor: simplify sr no fetching
(cherry picked from commit f4b60a48f5)
2021-10-29 17:42:05 +05:30
Ankush Menat
42686f92e9 fix: fetch serial nos from ledger unconditionally
(cherry picked from commit 2aa019ae4c)
2021-10-29 17:42:05 +05:30
Noah Jacob
7931cfd77b refactor: replaced db.sql with qb
(cherry picked from commit deb6b38fab)
2021-10-29 17:42:05 +05:30
Noah Jacob
835d96c727 fix: incorrect amount of serial_nos fetched
(cherry picked from commit b44945380d)
2021-10-29 17:42:05 +05:30
Deepesh Garg
f7cf3fed8e Merge pull request #28144 from frappe/mergify/bp/version-13-hotfix/pr-27994
fix: incorrect VAT Amount in UAE VAT 201 report (backport #27994)
2021-10-29 17:20:13 +05:30
Deepesh Garg
0664e64003 fix: COA importer importing all accounts as group
(cherry picked from commit 8ccd3fee9e)
2021-10-29 11:37:11 +00:00
Deepesh Garg
4f7046e6c2 Merge pull request #28143 from frappe/mergify/bp/version-13-hotfix/pr-28135
fix: Accounting Dimension filters not honouring user permissions (backport #28135)
2021-10-29 17:04:45 +05:30
Dany Robert
43ca66f461 fix: wrong vat amount
(cherry picked from commit 4c499e804a)
2021-10-29 09:13:18 +00:00
Dany Robert
ff7423f15f fix: incorrect VAT Amount in UAT VAT 201 report
(cherry picked from commit 1aa34d1780)
2021-10-29 09:13:17 +00:00
Deepesh Garg
7cbf577f1f fix: Accounting Dimension filters not honouring user permissions
(cherry picked from commit aa9e78bed1)
2021-10-29 09:10:50 +00:00
mergify[bot]
1454f8bc96 fix: Skip empty rows while updating unsaved BOM cost (#28136) (#28142)
- Dont try to get valuation rate if row has no item code
- Dont try to add exploded items if row has no item code

(cherry picked from commit 292419bc9e)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-10-29 14:19:51 +05:30
mergify[bot]
a33ebbdc54 test: remove unnecessary creation of new company (#28137) (#28140)
(cherry picked from commit afe09d4e80)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-10-29 14:19:25 +05:30
Deepesh Garg
ee6da35c0b Merge pull request #28134 from frappe/mergify/bp/version-13-hotfix/pr-28122
fix: Consolidated Financial Report throws error for empty equity data list (backport #28122)
2021-10-29 13:51:48 +05:30
Deepesh Garg
1c0ae92912 Merge pull request #28133 from frappe/mergify/bp/version-13-hotfix/pr-27609
fix: Unlink PO on cancelling SO (backport #27609)
2021-10-29 13:51:21 +05:30
Subin Tom
3fc2442622 fix: Consolidated Financial Report throws error for empty equity data list
(cherry picked from commit d786855d94)
2021-10-29 06:42:13 +00:00
Deepesh Garg
a60ecb95b0 fix: Ignore PO on So cancel
(cherry picked from commit 051aaa708d)
2021-10-29 06:28:28 +00:00
GangaManoj
ed58f206fa fix: Remove unused imports
(cherry picked from commit d24cfff388)
2021-10-29 06:28:27 +00:00
GangaManoj
305b9508e6 fix: Remove debugger
(cherry picked from commit 1a9d2684e2)
2021-10-29 06:28:27 +00:00
GangaManoj
d47007adb2 fix: Remove print statements
(cherry picked from commit 8844fdbf23)
2021-10-29 06:28:26 +00:00
GangaManoj
7c42b8b702 fix: Unlink PO on cancelling SO
(cherry picked from commit e77534fe13)
2021-10-29 06:28:25 +00:00
GangaManoj
2fb18afea0 fix: Unlink PO on cancelling SO
(cherry picked from commit 8396f24e70)
2021-10-29 06:28:24 +00:00
Deepesh Garg
c822f286c7 Merge pull request #28125 from deepeshgarg007/ksa-vat-v13
feat(regional): KSA E-Invoicing and VAT Report
2021-10-29 11:15:19 +05:30
Deepesh Garg
6260f0caa1 Merge pull request #28128 from frappe/mergify/bp/version-13-hotfix/pr-28071
fix : Get LTDS based on tax withholding category (backport #28071)
2021-10-29 09:05:12 +05:30
Deepesh Garg
4019148a42 fix: Resolve conflicts 2021-10-28 20:26:38 +05:30
Deepesh Garg
7a25d5f2de fix: Rewrite patch using query builder
(cherry picked from commit 09a5616e2d)
2021-10-28 14:31:06 +00:00
Deepesh Garg
1ba0111e16 fix: Replace section code with tax withholding category in LDC
(cherry picked from commit bf13d183d8)

# Conflicts:
#	erpnext/patches.txt
2021-10-28 14:31:06 +00:00
Deepesh Garg
e9c3d3ff0d fix: Get LTDS based on tax withholding category
(cherry picked from commit e6e804e7d7)
2021-10-28 14:31:05 +00:00
Ahmad
6d39b90b8e refactor: make strings translate 2021-10-28 17:53:41 +05:30
Ahmad
b69381117f fix: pre-commit hooks 2021-10-28 17:53:22 +05:30
Ahmad
301b94e06a fix: pre-commit hooks 2021-10-28 17:53:22 +05:30
Ahmad
30f3b4804d refactor (regional): KSA utils 2021-10-28 17:53:22 +05:30
Ahmad
0313b44f1f Update erpnext/regional/saudi_arabia/utils.py
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-10-28 17:53:22 +05:30
Ahmad
f9770b69b2 Update erpnext/regional/saudi_arabia/utils.py
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-10-28 17:53:22 +05:30
Ahmad
5f7c5bcac8 fix: indentations 2021-10-28 17:52:53 +05:30
Ahmad
873ed1ae4f refactor(regional): moved methos to region specific utils for KSA 2021-10-28 17:52:02 +05:30
Ahmad
3fca08e3e8 Update erpnext/regional/saudi_arabia/setup.py
Method name updated

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-10-28 17:46:30 +05:30
Ahmad
220ab16698 Refactor erpnext/regional/__init__.py
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-10-28 17:44:26 +05:30
Ahmad
a8ba52e8a5 Update erpnext/regional/report/ksa_vat/ksa_vat.py
String made translatable

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-10-28 17:44:19 +05:30
Ahmad
60fd96085c feat(regional): QR Code generation for Saudi Arabia Sales Invoices 2021-10-28 17:44:04 +05:30
Ahmad
e03965afa5 feat(Regional): KSA VAT Report 2021-10-28 17:39:15 +05:30
Deepesh Garg
d116aa6f23 Merge pull request #28116 from frappe/mergify/bp/version-13-hotfix/pr-28114
fix: Autoemail report not showing dynamic report filters (backport #28114)
2021-10-28 11:57:28 +05:30
mergify[bot]
9c7cdc1079 fix: opportunity link is missign from customer (#28110) (#28121)
(cherry picked from commit 4787a75208)

Co-authored-by: Anupam Kumar <anupamvns0099@gmail.com>
2021-10-28 11:48:19 +05:30
Marica
a19f0f484c Merge pull request #28098 from marination/so-quote-portal
fix: SO/Quotation Portal Missing Images
2021-10-28 00:16:07 +05:30
Marica
5388ecf85e Merge pull request #27926 from frappe/mergify/bp/version-13-hotfix/pr-27914
fix: Avoid automatic customer creation on website user login (backport #27914)
2021-10-28 00:05:55 +05:30
Deepesh Garg
b34e737930 fix: Autoemail report not showing dynamic report filters
(cherry picked from commit 3a6894fb9c)
2021-10-27 14:29:38 +00:00
Ankush Menat
56c98aa59e fix(ux): make qty 1 by default in WO
(cherry picked from commit d81b87d9b3)
2021-10-27 19:49:00 +05:30
Ankush Menat
aa210ba6c8 fix: don't show blocked supplier in autocomplete
(cherry picked from commit 2221c9ed89)
2021-10-27 19:49:00 +05:30
Ankush Menat
4bfacabf85 fix(ux): alternative item two way validation
(cherry picked from commit 5902762ec8)
2021-10-27 19:49:00 +05:30
Ankush Menat
99a1eea982 fix: remove bad hardcoded max value
(cherry picked from commit 5f9bd9b8e9)
2021-10-27 19:49:00 +05:30
mergify[bot]
48acb56cb0 fix: Remove pointless buttons from Payment Order (#28108)
fix: Remove pointless buttons from Payment Order
(cherry picked from commit c9f3ea5fea)

Co-authored-by: Ganga Manoj <ganga.manoj98@gmail.com>
2021-10-27 16:16:31 +05:30
mergify[bot]
5867d97e7c fix(ux): misleading label for image fields (#28107) (#28109)
(cherry picked from commit e0cf45e7ec)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-10-27 15:29:08 +05:30
mergify[bot]
e757970db3 fix(general_ledger): Order by in case Group by Account (#28093) (#28106)
* Update general_ledger.py

Fix order_by_statement if filter group by: Group by Account

* chore: whitespace

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
(cherry picked from commit f24ed6723e)

Co-authored-by: hendrik <hendrik.zeta@gmail.com>
2021-10-27 14:45:05 +05:30
Saqib
2a60a65ccd Merge pull request #28102 from frappe/mergify/bp/version-13-hotfix/pr-27916
perf(minor): improve sales invoice submission (backport #27916)
2021-10-27 14:26:38 +05:30
Afshan
db5593287e Merge branch 'version-13-hotfix' into mergify/bp/version-13-hotfix/pr-27916 2021-10-27 14:05:51 +05:30
mergify[bot]
e8b46bf3a3 fix(ux): add naming series to ERPNext setting workspace (backport #28090) (#28103)
* fix(ux): add naming series to ERPNext setting workspace  (#28090)

* fix(ux): add naming series to setting workspace

* fix: doctype link to naming series

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>

Co-authored-by: Summayya <frappe@Summayyas-MacBook-Air.local>
Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
(cherry picked from commit 0806e32049)

# Conflicts:
#	erpnext/setup/workspace/erpnext_settings/erpnext_settings.json

* fix: conflicts

Co-authored-by: Summayya Hashmani <58825865+sumaiya2908@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-27 14:03:24 +05:30
Marica
67e5e95466 Merge pull request #27931 from marination/optimize-get-attribute-filters-hotfix
perf: Optimize get_attribute_filters (#26729)
2021-10-27 13:31:58 +05:30
mergify[bot]
f1b7bb8878 fix: Update receivable/payable account on company change (backport #28057) (#28087)
* fix: Update receivable/payable account on company change

(cherry picked from commit 65025fb628)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.js

* fix: Update sales_invoice.js

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-27 13:30:32 +05:30
mergify[bot]
fb742476f8 fix: Payment Terms validation precision (#28104)
(cherry picked from commit 9c1705205f)

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-27 13:26:57 +05:30
mergify[bot]
d4b4bd9d97 fix: update production plan status (backport #27567)
* fix: update production plan status #27567

fix: update production plan status
(cherry picked from commit 05831b18ad)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflicts

Co-authored-by: Alan <2.alan.tom@gmail.com>
Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-10-27 13:20:51 +05:30
Afshan
accb98ccf4 Merge branch 'version-13-hotfix' into mergify/bp/version-13-hotfix/pr-27916 2021-10-27 12:58:30 +05:30
Deepesh Garg
6acab32934 Merge pull request #28085 from frappe/mergify/bp/version-13-hotfix/pr-28055
fix(UX): Add mandatory depends on condition for reference no and date fields (backport #28055)
2021-10-27 11:57:20 +05:30
Saqib
5d4d6bb52b fix: sider
(cherry picked from commit ac381d21fe)
2021-10-27 06:13:33 +00:00
Ankush Menat
a2a462f2f5 fix: undo changes to allow negative stock flag
(cherry picked from commit 7bafa11d57)
2021-10-27 06:13:32 +00:00
Saqib Ansari
b1efb7f80b perf: skip insertion of stock ledger entry
(cherry picked from commit c7fc609236)
2021-10-27 06:13:32 +00:00
Saqib Ansari
97fc449222 perf: get total company stock only for purchase order
(cherry picked from commit eb3aae870f)
2021-10-27 06:13:32 +00:00
Saqib Ansari
cb0168ae65 perf: fetch mode of payments data in single query
(cherry picked from commit 7b691beabb)
2021-10-27 06:13:31 +00:00
Saqib Ansari
de38c70707 perf: skip get_pricing_rules if no pricing rule exists
(cherry picked from commit a500252570)
2021-10-27 06:13:31 +00:00
Saqib
cb97e950e6 feat(e-invoicing): dispatch address (#28084) 2021-10-27 11:39:00 +05:30
Ankush Menat
a046da1e61 test: picklist item grouping
(cherry picked from commit 479ecb8de0)
2021-10-27 11:30:30 +05:30
Ankush Menat
28026f7f1c refactor: use defaultdict and enumeration
(cherry picked from commit 6942900555)
2021-10-27 11:30:30 +05:30
Diksha Jadhav
93a0ea7118 feat(pick list): group items based on item code and warehouse before printing picklist
(cherry picked from commit f2d136e574)
2021-10-27 11:30:30 +05:30
mergify[bot]
a30cfbce42 fix: change modified timestamp to apply changes on migrate #28095 (#28099)
fix: change modified timestamp to apply changes on migrate
(cherry picked from commit 2920f2f614)

Co-authored-by: Dany Robert <rtdany10@gmail.com>
2021-10-27 11:20:13 +05:30
mergify[bot]
019c5a338d fix(ux): overbiling message in SO->SI, PO->PI (bp #28088)
(cherry picked from commit 6ec047cba9)

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-10-27 11:08:23 +05:30
gsi-maruiz
8cad23b8fb fix: add filter to query to avoid send reminder for zero years (#28092)
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-27 11:00:56 +05:30
marination
dd2dba6f01 style: Fixed indentation for visible heirarchy 2021-10-27 10:57:48 +05:30
Deepesh Garg
f63a71e2cc fix(minor): Add mandatory depends on condition for reference no and date fields
(cherry picked from commit a20058a343)
2021-10-26 14:33:10 +00:00
mergify[bot]
f81c5cd478 fix: POS Closing Entry without linked invoices (#28077) 2021-10-26 14:42:44 +05:30
mergify[bot]
a23ef95cd8 refactor: shows opening balance from filtered from_date (#26877) (#28072)
* refactor: shows opening balance from filtered from_date

* refactor: opening balance considered from filtered from_date in stock ledger

* fix: check if stock reco is opening and misc cleanups

(cherry picked from commit fdaf93f76c)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-10-25 09:09:44 +05:30
Deepesh Garg
943def5faa Merge pull request #28014 from deepeshgarg007/tds_computation_summary_fixes
fix: Error in TDS computation summary
2021-10-23 13:16:30 +05:30
Ankush Menat
7a08f8aeec chore: change semgrep rules repo name
[skip ci]
2021-10-22 22:40:56 +05:30
mergify[bot]
a082d70553 ci: move semgrep rules out of repo (backport #28067)
* ci: move semgrep rules out of repo (#28067)

Moving semgrep rules out of repos as it's unnecessary to maintain
same ruleset for different repos and different branches.

(cherry picked from commit cc1baae5eb)

# Conflicts:
#	.github/helper/semgrep_rules/frappe_correctness.py
#	.github/helper/semgrep_rules/frappe_correctness.yml
#	.github/helper/semgrep_rules/report.py
#	.github/helper/semgrep_rules/ux.py
#	.github/workflows/linters.yml

* fix: resolve conflicts

Co-authored-by: Ankush Menat <ankush@frappe.io>
2021-10-22 21:58:45 +05:30
mergify[bot]
60620fe335 fix: don't reset rates in Timesheet Detail when Activity Type is cleared (#28056)
* fix: don't reset rates when activity type is cleared

* refactor: suggestions from review

Co-authored-by: Sagar Vora <sagar@resilient.tech>

* refactor: suggestions from review (fix)

* style: fix sider

* fix: sider issue

Co-authored-by: Sagar Vora <sagar@resilient.tech>
(cherry picked from commit 2bdaf7bb23)

Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
2021-10-22 14:06:11 +05:30
marination
d7e55387fc fix: SO Portal fixes
- SO Portal: fixed missing images issue
- SO Portal: fallback state when no images
- SO Portal: code indentation in `order_macros.html`
- SO Portal: Actions and indicator font size
- Recommendations: fixed space between image and title
- Recommendations: give empty image state min height
2021-10-21 20:14:28 +05:30
mergify[bot]
46567f0fe9 refactor: move process loss report to manufacturing (#28043) (#28047)
* refactor: move process loss report to manufacturing

* test: fix process loss report test

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
(cherry picked from commit 2849297471)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-10-21 11:11:53 +05:30
Ankush Menat
5ed32b5995 fix: unused imports 2021-10-21 11:04:40 +05:30
Devin Slauenwhite
152f9b0a43 fix: useless validation message (#28029)
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-21 10:58:35 +05:30
Ankush Menat
71e517f043 test: fix get_attribute_filter test
The function returns strings directly instead of objects now.
2021-10-21 10:55:11 +05:30
mergify[bot]
e0f2130731 feat: employee initial work history updated when transfer is performed (#27768) (#28045)
* feat: employee initial work history updated when transfer is performed

* fix: sider

* fix: remove commit statement

* fix: tests and code formatting

* fix: tests

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
(cherry picked from commit 03bfc77940)

Co-authored-by: Mohammed Yusuf Shaikh <49878143+mohammedyusufshaikh@users.noreply.github.com>
2021-10-21 10:34:31 +05:30
Rohit Waghchaure
b8d75ff241 Merge branch 'version-13-pre-release' into version-13 2021-10-20 21:30:20 +05:30
Rohit Waghchaure
a3b7682935 bumped to version 13.13.0 2021-10-20 21:50:20 +05:50
rohitwaghchaure
200f6da8b2 Merge pull request #28040 from rohitwaghchaure/change-log-for-v13-13
chore: change log for v13.13.0
2021-10-20 21:23:39 +05:30
Rohit Waghchaure
7c9018f401 chore: change log for v13.13.0 2021-10-20 21:15:13 +05:30
mergify[bot]
4f5d67883c fix: consolidated report issue #28035 (#28039)
fix: consolidated report issue
(cherry picked from commit 871cb1157f)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-10-20 21:10:45 +05:30
Ankush Menat
5ba315eb96 test: execute manufacturing reports
(cherry picked from commit da3635b94f)
2021-10-20 21:00:11 +05:30
Ankush Menat
408c4a6f54 fix: remove debug from query
(cherry picked from commit 126ba16740)
2021-10-20 21:00:11 +05:30
Ankush Menat
e357541509 fix: remove employee_name from job card summary
This field doesn't exist and it's moved on individual line level logs.

(cherry picked from commit 8221e7e01f)
2021-10-20 21:00:11 +05:30
mergify[bot]
1fae8f1fcb Merge pull request #28038 from frappe/mergify/bp/version-13-hotfix/pr-28036
fix: incorrect field name (backport #28036)
2021-10-20 20:55:00 +05:30
Ankush Menat
8fffd1597d fix: dont recompute item wise taxes from front end
(cherry picked from commit 393749a611)
2021-10-20 19:44:26 +05:30
mergify[bot]
34e92ab229 fix: incorrect status being set in Invoices (backport #28019) (#28031)
* fix: incorrect status being set in Invoices (#28019)

Co-authored-by: Pruthvi Patel <pruthvipatel145@gmail.com>
(cherry picked from commit 8d9d0987fe)

# Conflicts:
#	erpnext/patches.txt

* fix: merge conflict

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2021-10-20 19:31:47 +05:30
Sagar Vora
ffadd671b7 fix: add mistakenly removed patches 2021-10-20 19:26:15 +05:30
mergify[bot]
47befa697d fix: incorrect status being set in Invoices (backport #28019) (#28030)
* fix: incorrect status being set in Invoices (#28019)

Co-authored-by: Pruthvi Patel <pruthvipatel145@gmail.com>
(cherry picked from commit 8d9d0987fe)

* fix: merge conflict

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2021-10-20 19:24:19 +05:30
mergify[bot]
9ce7ea692d fix: avoid resetting employee on amending timesheets (#28025) (#28026)
(cherry picked from commit 261f80c5ca)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-20 17:45:43 +05:30
mergify[bot]
a739bf90c4 feat: Tax for recurring additional salary (backport #27459) (#28024)
* feat: Tax for recurring additional salary (#27459)

* fix: Logic for tax calculation on recurring additional salary

* fix: Get actual amount always in case of overwritten additional salary even if based on payment days

* feat: Test case added for recurring additional salary

* fix: use query builder to get additional salaries instead of raw SQL

* fix: query formatting and remove trailing spaces

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
(cherry picked from commit 2ef4844a3c)

# Conflicts:
#	erpnext/payroll/doctype/salary_slip/salary_slip.py
#	erpnext/payroll/doctype/salary_slip/test_salary_slip.py

* fix: conflicts

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-20 16:20:25 +05:30
Jannat Patel
676c5280cc Merge pull request #28016 from frappe/mergify/bp/version-13-pre-release/pr-27728 2021-10-20 15:53:48 +05:30
Marica
e0decb0ae2 Merge pull request #28021 from frappe/mergify/bp/version-13-pre-release/pr-28005
fix: Fetch thumbnail from Item master instead of regenerating (backport #28005)
2021-10-20 15:14:30 +05:30
marination
b906cc20ae fix: Move thumbnail updation to different patch
- Thumbnail updation handled via different patch
- create_website_items will only have one purpose
- added progress bar to `create_website_items`
- code cleanup

(cherry picked from commit 348a961b53)
2021-10-20 09:12:33 +00:00
marination
c98421c69a fix: Check if thumbnail column exists in case of table trimming
(cherry picked from commit ac8014e24c)
2021-10-20 09:12:32 +00:00
marination
d7afb9ef65 fix: Get db values as dict when checking for thumbnail in existing web item
(cherry picked from commit 46a5a83789)
2021-10-20 09:12:32 +00:00
marination
a915b9cf72 fix: re-run patch
- Patch will just fetch thumbnails if website items are created, else it will create new website items

(cherry picked from commit 11c498d9e5)
2021-10-20 09:12:32 +00:00
marination
a022e01d3f fix: Fetch thumbnail from Item master instead of regenerating
(cherry picked from commit 94177c0764)
2021-10-20 09:12:31 +00:00
Marica
077026a7ae Merge pull request #28005 from marination/patch-thumbnail-perf
fix: Fetch thumbnail from Item master instead of regenerating
2021-10-20 14:40:57 +05:30
marination
348a961b53 fix: Move thumbnail updation to different patch
- Thumbnail updation handled via different patch
- create_website_items will only have one purpose
- added progress bar to `create_website_items`
- code cleanup
2021-10-20 14:14:13 +05:30
Jannat Patel
3cf5861a8b Merge pull request #28015 from frappe/mergify/bp/version-13-hotfix/pr-27728
fix: Employee Leave Balance report should only consider ledgers of transaction type Leave Allocation (backport #27728)
2021-10-20 13:10:58 +05:30
Jannat Patel
8e9db11c69 Merge pull request #28012 from frappe/mergify/bp/version-13-hotfix/pr-27904
fix: map missing fields in opportunity (backport #27904)
2021-10-20 12:36:46 +05:30
Goh Yan Chang
867cfa04b2 Update employee_leave_balance.py
fix: Employee Leave Balance report showing wrong figures
(cherry picked from commit 632f7848a3)
2021-10-20 06:58:12 +00:00
Goh Yan Chang
50af32f35c Update employee_leave_balance.py
fix: Employee Leave Balance report showing wrong figures
(cherry picked from commit 632f7848a3)
2021-10-20 06:57:51 +00:00
Jannat Patel
6e63dc1360 Merge pull request #28013 from frappe/mergify/bp/version-13-pre-release/pr-27904 2021-10-20 12:24:37 +05:30
Deepesh Garg
944e3d467c fix: Check for supplier name 2021-10-20 12:17:13 +05:30
Deepesh Garg
b7befe49dc fix: Check for other properties 2021-10-20 12:16:22 +05:30
Jannat Patel
8c57394e78 fix: conflicts 2021-10-20 12:14:15 +05:30
Deepesh Garg
f12deae24b fix: Error in TDS computation summary 2021-10-20 12:07:22 +05:30
Jannat Patel
8e2a84e435 Merge pull request #27997 from govindsmenokee/patch-7
fix: Employee filter in YTD and MTD in salary slip
2021-10-20 11:43:55 +05:30
Jannat Patel
698214bd59 fix: removed unused lines 2021-10-20 11:36:00 +05:30
Jannat Patel
873d166a4e fix: conflicts 2021-10-20 11:32:35 +05:30
Jannat Patel
ae948e31ea fix: linters 2021-10-20 11:30:33 +05:30
Jannat Patel
9166d58717 fix: map missing fields in opportunity (#27904)
(cherry picked from commit d81f811349)

# Conflicts:
#	erpnext/crm/doctype/opportunity/opportunity.py
2021-10-20 05:56:59 +00:00
Jannat Patel
2fff5e5cd1 fix: map missing fields in opportunity (#27904)
(cherry picked from commit d81f811349)

# Conflicts:
#	erpnext/crm/doctype/opportunity/opportunity.py
2021-10-20 05:56:37 +00:00
marination
ac8014e24c fix: Check if thumbnail column exists in case of table trimming 2021-10-19 18:50:44 +05:30
marination
46a5a83789 fix: Get db values as dict when checking for thumbnail in existing web item 2021-10-19 18:39:48 +05:30
marination
11c498d9e5 fix: re-run patch
- Patch will just fetch thumbnails if website items are created, else it will create new website items
2021-10-19 18:32:43 +05:30
Deepesh Garg
7895d2a048 Merge pull request #28004 from frappe/mergify/bp/version-13-pre-release/pr-27867
fix: Totals row incorrect value in GL Entry (backport #27867)
2021-10-19 17:50:20 +05:30
marination
94177c0764 fix: Fetch thumbnail from Item master instead of regenerating 2021-10-19 17:31:55 +05:30
Jannat Patel
0a4abff354 Merge branch 'version-13-hotfix' into patch-7 2021-10-19 16:10:51 +05:30
Deepesh Garg
5a06ee9230 fix: Totals row incorrect value in GL Entry (#27867)
(cherry picked from commit ebe68c1a7a)
2021-10-19 09:39:02 +00:00
Deepesh Garg
ebe68c1a7a fix: Totals row incorrect value in GL Entry (#27867) 2021-10-19 15:08:05 +05:30
mergify[bot]
35448886bc Merge pull request #27999 from frappe/mergify/bp/version-13-hotfix/pr-27990
fix: changes in schedules gets overwritten on save (backport #27990)
2021-10-19 14:33:57 +05:30
Noah Jacob
b6609d1649 Merge pull request #27998 from frappe/mergify/bp/version-13-pre-release/pr-27990
fix: changes in schedules gets overwritten on save (backport #27990)
2021-10-19 14:20:44 +05:30
mergify[bot]
3af060c787 fix: TaxJar update - added nexus list, making api call only for nexus (backport #27497) (#27940)
* fix: TaxJar update - nexus, selective api call

(cherry picked from commit b01fe1c3e2)

* fix: sales_tax attribute in api call before submit

(cherry picked from commit 3bb60a439a)

* Update erpnext/erpnext_integrations/taxjar_integration.py

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit 0e527311b9)

* Update erpnext/erpnext_integrations/doctype/taxjar_settings/taxjar_settings.py

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit 486d7c3a39)

* Update erpnext/erpnext_integrations/doctype/taxjar_settings/taxjar_settings.js

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit 435a5e4fa3)

* Update erpnext/erpnext_integrations/taxjar_integration.py

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit 11bd42467e)

* fix: Renamed child table doctype, delete taxes for non nexus state

(cherry picked from commit 5c18654113)

* fix: updated patch, add fields only if fields are checked

(cherry picked from commit 54754f4eb8)

# Conflicts:
#	erpnext/patches/v13_0/custom_fields_for_taxjar_integration.py

* fix: patch fix, fields disabling

(cherry picked from commit 0a28fed679)

* fix: using db.exists and get_value instead of get_doc

(cherry picked from commit 8675ca5bdd)

* fix: dt instead of document in set_value query

(cherry picked from commit d3bb920e71)

* minor fixes

(cherry picked from commit 254b20bc09)

* fix: improved on_update method, added validation for tax calculation, sandbox mode checks

(cherry picked from commit 7114659ecc)

* fix: linters fix

(cherry picked from commit 3ece05a9f7)

* fix: patch fix added reload_doctype

(cherry picked from commit eaa3614155)

* fix: patch fixes- force reload doc, check for company

(cherry picked from commit 1b25e69af4)

* fix: 'Taxjar' type fix

(cherry picked from commit ea2038489f)

* fix: Update pacthes.txt

(cherry picked from commit 5d4c919c5c)

* fix: Patch

(cherry picked from commit 2d19e2d54b)

# Conflicts:
#	erpnext/patches.txt

* fix: Move product tax category folder to taxjar settings

(cherry picked from commit bd8cfb2e30)

* Update custom_fields_for_taxjar_integration.py

* fix: conflicts

* fix: linter issues

removed extra line

* fix: patch fix

einvoicing deprecation patch removed

Co-authored-by: Subin Tom <subintom2@gmail.com>
Co-authored-by: Subin Tom <36098155+nemesis189@users.noreply.github.com>
Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-19 13:38:50 +05:30
Noah Jacob
9431bb9466 fix: changes in schedules gets overwritten on save
(cherry picked from commit af1b9e100e)
2021-10-19 08:07:42 +00:00
Govind S Menokee
efc292a5dd YTD and MTD Messed up in Salary Slip
The filter for YTD, MTD etc are based on employee name. This seems like an amateur mistake. It should be based on employee id.
2021-10-19 12:49:00 +05:30
mergify[bot]
37088391bb feat: add enabled field in UOM (#27993) (#27996)
(cherry picked from commit 7717b99edb)

Co-authored-by: Himanshu <himanshuwarekar@yahoo.com>
2021-10-19 10:56:33 +05:30
mergify[bot]
fdd9cc76be fix: flaky Org Chart Test (#27971) (#27989)
(cherry picked from commit 8eacaddde7)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-18 11:47:22 +05:30
mergify[bot]
f328b226fb fix: flaky Org Chart Test (#27971) (#27988)
(cherry picked from commit 8eacaddde7)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-18 11:47:12 +05:30
Deepesh Garg
f8348ab681 Merge pull request #27983 from frappe/mergify/bp/version-13-pre-release/pr-27967
fix: Account number and name incorrectly imported using COA importer (backport #27967)
2021-10-18 11:04:39 +05:30
Deepesh Garg
9f71863a6a Merge pull request #27982 from frappe/mergify/bp/version-13-hotfix/pr-27967
fix: Account number and name incorrectly imported using COA importer (backport #27967)
2021-10-18 11:03:51 +05:30
Deepesh Garg
eecfb25c90 Merge pull request #27981 from frappe/mergify/bp/version-13-pre-release/pr-27934
fix: TDS round off not working from second transaction (backport #27934)
2021-10-18 11:03:00 +05:30
Deepesh Garg
c99fe8b57d Merge pull request #27980 from frappe/mergify/bp/version-13-hotfix/pr-27934
fix: TDS round off not working from second transaction (backport #27934)
2021-10-18 11:02:33 +05:30
Deepesh Garg
41a0e12954 Merge pull request #27979 from frappe/mergify/bp/version-13-pre-release/pr-27970
fix (India): Interstate internal transfer invoices not visible in GSTR-1 (backport #27970)
2021-10-18 11:01:06 +05:30
Deepesh Garg
a883f16f31 Merge pull request #27978 from frappe/mergify/bp/version-13-hotfix/pr-27970
fix (India): Interstate internal transfer invoices not visible in GSTR-1 (backport #27970)
2021-10-18 11:00:47 +05:30
Jannat Patel
07a9f16eb5 Merge pull request #27984 from frappe/mergify/bp/version-13-hotfix/pr-27850 2021-10-18 10:35:55 +05:30
Ankush Menat
f0383289d8 Merge pull request #27986 from frappe/mergify/bp/version-13-pre-release/pr-27962
fix: Retain space inside Serial no string while cleaning serial nos (backport #27962)
2021-10-18 10:34:31 +05:30
Jannat Patel
46209023ce Merge pull request #27985 from frappe/mergify/bp/version-13-pre-release/pr-27850 2021-10-18 10:32:48 +05:30
marination
e69bd39cdd test: Include serial no with spaces in it in sanitation test
(cherry picked from commit a9341672cf)
2021-10-18 04:56:11 +00:00
Marica
0fcb3cd918 fix: Use strip instead of lstrip and rstrip
Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
(cherry picked from commit 8cf188d9c0)
2021-10-18 04:56:10 +00:00
marination
44ab131792 fix: Retain space inside Serial no string while cleaning serial nos
(cherry picked from commit 41035b0330)
2021-10-18 04:56:10 +00:00
pateljannat
b648d77316 fix: exclude inactive employees from auto attendance
(cherry picked from commit 921b4be348)
2021-10-18 04:35:18 +00:00
pateljannat
acc5cff7ff fix: exclude inactive employees from auto attendance
(cherry picked from commit 921b4be348)
2021-10-18 04:34:53 +00:00
Deepesh Garg
0012f0b2da fix: Account number and name incorrectly import using COA importer
(cherry picked from commit 17a8649500)
2021-10-18 03:47:22 +00:00
Deepesh Garg
f2340b360f fix: Account number and name incorrectly import using COA importer
(cherry picked from commit 17a8649500)
2021-10-18 03:46:59 +00:00
Deepesh Garg
1796f09c0f fix: TDS round off not working from second transaction
(cherry picked from commit b7a08535b5)
2021-10-18 03:24:46 +00:00
Deepesh Garg
64b58b148f fix: TDS round off not working from second transaction
(cherry picked from commit ca0067212d)
2021-10-18 03:24:46 +00:00
Deepesh Garg
9b71e02003 fix: TDS round off not working from second transaction
(cherry picked from commit b7a08535b5)
2021-10-18 03:24:23 +00:00
Deepesh Garg
50e718f508 fix: TDS round off not working from second transaction
(cherry picked from commit ca0067212d)
2021-10-18 03:24:22 +00:00
Deepesh Garg
4415bf9968 fix: Interstate internal transfer invoices not visible in GSTR-1
(cherry picked from commit d9d42b13ab)
2021-10-18 03:23:55 +00:00
Deepesh Garg
289650748c fix: Interstate internal transfer invoices not visible in GSTR-1
(cherry picked from commit d9d42b13ab)
2021-10-18 03:23:31 +00:00
mergify[bot]
268893d5d0 fix: POS Profile payment methods table (#27956) (#27966)
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
(cherry picked from commit f3cf36f613)

Co-authored-by: Subin Tom <36098155+nemesis189@users.noreply.github.com>
2021-10-15 14:32:55 +05:30
Marica
7b4a5e7e64 Merge pull request #27965 from frappe/mergify/bp/version-13-hotfix/pr-27962
fix: Retain space inside Serial no string while cleaning serial nos (backport #27962)
2021-10-14 20:38:20 +05:30
marination
0d1b04326a test: Include serial no with spaces in it in sanitation test
(cherry picked from commit a9341672cf)
2021-10-14 14:48:24 +00:00
Marica
db9f56bee8 fix: Use strip instead of lstrip and rstrip
Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
(cherry picked from commit 8cf188d9c0)
2021-10-14 14:48:24 +00:00
marination
2e9d08f8b1 fix: Retain space inside Serial no string while cleaning serial nos
(cherry picked from commit 41035b0330)
2021-10-14 14:48:24 +00:00
mergify[bot]
02ddd5f2b0 fix: remove bad description (#27963) (#27964)
(cherry picked from commit 4437eb0c4b)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-14 20:06:07 +05:30
rohitwaghchaure
1b7d94d70d Merge pull request #27961 from rohitwaghchaure/merge-13-hotfix-to-pre-release-for-13-13
chore: Merge branch 'version-13-hotfix' into 'version-13-pre-release'
2021-10-14 19:17:22 +05:30
Rohit Waghchaure
952c60b3f5 Merge branch 'version-13-hotfix' into 'version-13-pre-release' 2021-10-14 18:31:09 +05:30
rohitwaghchaure
8c33103838 Merge pull request #27958 from frappe/mergify/bp/version-13-hotfix/pr-27954
fix: value_after_depreciation calculation (backport #27954)
2021-10-14 18:25:57 +05:30
mergify[bot]
a8c966eb25 fix: patch to enable scheduled job for reposting (backport #27957)
* fix: patch to enable scheduled job for reposting

(cherry picked from commit efc60ec2b5)

# Conflicts:
#	erpnext/patches.txt

* chore: formatting

(cherry picked from commit 3f97413814)

* Update enable_scheduler_job_for_item_reposting.py

(cherry picked from commit 230a5d4b39)

* fix: resolve conflict

Co-authored-by: Rohit Waghchaure <rohitw1991@gmail.com>
2021-10-14 17:31:51 +05:30
Saqib
88b1c1c87e fix: value_after_depreciation calculation (#27954)
(cherry picked from commit 1f70dd6e98)
2021-10-14 10:53:52 +00:00
Marica
771213c415 Merge pull request #27955 from frappe/mergify/bp/version-13-hotfix/pr-27947
fix: Improve error message for Serial No mismatch between SI and DN (backport #27947)
2021-10-14 14:24:54 +05:30
marination
d86f5ec1ba fix: Remove trailing space and line break in translatable string
(cherry picked from commit 60f35ad8a2)
2021-10-14 08:19:54 +00:00
marination
a568fc7924 fix: Improve error message for Serial No mismatch between SI and DN
(cherry picked from commit 646acb6b46)
2021-10-14 08:19:53 +00:00
mergify[bot]
c040256793 fix: cannot add deductions in internal transfer payment entry (backport #27545) (#27930)
* fix: cannot add deductions in internal transfer payment entry

(cherry picked from commit 1b7414e948)

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

* fix: Update message string

(cherry picked from commit 3b9514d6e1)

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

* fix: conflicts

Co-authored-by: Saqib Ansari <nextchamp.saqib@gmail.com>
Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-14 12:34:03 +05:30
Chillar Anand
29996ee726 fix(hr): Update expense account after company is updated (#27843) (#27919)
(cherry picked from commit f0c4ea14a9)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-14 11:13:00 +05:30
Deepesh Garg
1120506e11 Merge pull request #27941 from frappe/mergify/bp/version-13-hotfix/pr-27783
fix(Subscription): reorder updation of end date (backport #27783)
2021-10-13 16:56:07 +05:30
mergify[bot]
e64751e3a2 fix: not authorized to update entries after freezing accounts (backport #27937)
* fix: not authorized to update entries after freezing accounts (#27937)

* fix: not authorized to update entries after freezing accounts

* fix: Add test case

* fix(patch): patched to requeue failed reposts(check_freezing_date)

* chore: misc fixes

Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
(cherry picked from commit 2bb383b178)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflict

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-13 16:41:21 +05:30
Himanshu
bf47c6836e Update subscription.py
(cherry picked from commit 44306bd0e5)
2021-10-13 09:52:21 +00:00
hrwx
e80192e2da fix: create past invoices
(cherry picked from commit ae657c7e4e)
2021-10-13 09:52:21 +00:00
Sagar Vora
b2f1b02e34 test: use test_dependencies instead of duplication
(cherry picked from commit 656015d99d)
2021-10-13 09:52:20 +00:00
Sagar Vora
ed090f2e3e fix: remove newline
(cherry picked from commit fc375c5bde)
2021-10-13 09:52:20 +00:00
hrwx
d796172249 fix: reorder updation of end date
(cherry picked from commit 0f03b19109)
2021-10-13 09:52:20 +00:00
Deepesh Garg
ff9f6366ad Merge pull request #27935 from frappe/mergify/bp/version-13-hotfix/pr-27907
feat: HSN based tax breakup table check in GST Settings  (backport #27907)
2021-10-13 12:56:00 +05:30
Deepesh Garg
b8683d5532 Merge pull request #27925 from frappe/mergify/bp/version-13-hotfix/pr-27758
perf: Add indexes in stock queries and speed up bin updation (backport #27758)
2021-10-13 12:08:38 +05:30
Subin Tom
4a156cdc2e added new section in gst settings page
(cherry picked from commit fc4facc5dc)
2021-10-13 06:38:27 +00:00
Subin Tom
771b076448 feat: HSN wise tax breakup check in GST Settings
(cherry picked from commit 530de12b07)
2021-10-13 06:38:26 +00:00
mergify[bot]
e6346ac982 fix: minor ux fixes in Sales & Purchase Invoice (backport #27927) (#27932)
* fix: keeping sections consistent across sales & purchase invoice

(cherry picked from commit 2bc1ca993a)

* fix: set collapsible & print hide

(cherry picked from commit d181cc42a1)

Co-authored-by: Anuja Pawar <anuja.pawar20@gmail.com>
2021-10-13 11:01:21 +05:30
Faris Ansari
666e8cd076 perf: Optimize get_attribute_filters (#26729)
* perf: Optimize get_attribute_filters

* fix: handle when filter attributes are undefined

* chore: unused imports

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-12 23:43:26 +05:30
Ankush Menat
547e173fe0 ci: rule to fail PRs that add a new manual commit (#27928)
Manual commits are frequent source of bugs, confusions or undefined
behaviour.

All new manual commits should be explcitly ignored with explanation on
why it's added. This will only fail for new additions. Existing ones
need to be cleaned up manually.

(cherry picked from commit 06b426e9c3)
2021-10-12 23:05:09 +05:30
mergify[bot]
37bd0ecf87 fix: force reload custom field doctype (#27909) (#27910)
custom_field.json has the same modified key in both versions but not the same content. This can happen again if something is backported, safe solution is to force reload.

(cherry picked from commit ad444153cc)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-12 20:38:09 +05:30
Marica
8244980d79 Merge pull request #27924 from marination/item-configure-empty-popup
fix: Item Variant selection empty popup on website
2021-10-12 20:32:18 +05:30
marination
f3650b4f9d fix: Merge conflicts with e-commerce 2021-10-12 20:29:13 +05:30
marination
6b8dad9454 fix: Sider, Linter
- Moved return to next line
- Space between function import and body

(cherry picked from commit a780f78f38)
2021-10-12 14:55:08 +00:00
marination
1590ac3ec7 fix: Avoid automatic customer creation on website user login
(cherry picked from commit d824a90fac)

# Conflicts:
#	erpnext/e_commerce/shopping_cart/utils.py
2021-10-12 14:55:08 +00:00
Deepesh Garg
10b239ec50 perf: Add indexes in stock queries and speed up bin updation #27758
perf: Add indexes in stock queries and speed up bin updation
(cherry picked from commit 6f107da165)
2021-10-12 14:46:26 +00:00
marination
c9c4a9995b fix: Item Variant selection empty popup on website
- pass item_code instead of website item name to fetch attributes
2021-10-12 19:56:12 +05:30
Ankush Menat
b6dc71679e fix: remove transaction commit from tests
(cherry picked from commit 8d69ec72a6)
2021-10-12 16:41:48 +05:30
Ankush Menat
5bdb6041b9 refactor: rollback after full test
(cherry picked from commit acdb26a4bb)
2021-10-12 16:41:48 +05:30
Ankush Menat
89828defc5 test: add custom TestCase class and use in stock
(cherry picked from commit 06fa35a9c1)
2021-10-12 16:41:48 +05:30
Deepesh Garg
816236b587 Merge pull request #27918 from frappe/mergify/bp/version-13-hotfix/pr-27884
fix: patch fails if accounts are frozen (backport #27884)
2021-10-12 15:04:01 +05:30
Deepesh Garg
69f17721ef Merge pull request #27917 from frappe/mergify/bp/version-13-hotfix/pr-27896
fix: Status check for closed loans (backport #27896)
2021-10-12 15:03:31 +05:30
Afshan
125bb1f99a Merge branch 'version-13-hotfix' into mergify/bp/version-13-hotfix/pr-27884 2021-10-12 14:32:36 +05:30
mergify[bot]
6f786b42a9 fix: add cost center in gl entry for advance payment entry (#27840) (#27915)
(cherry picked from commit 569dc5f6b1)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-12 14:31:50 +05:30
Saqib Ansari
fed80177de fix: rollback on exception
(cherry picked from commit c103f72fad)
2021-10-12 08:15:17 +00:00
Saqib Ansari
2ce36d1edc feat: handle exceptions
(cherry picked from commit 353ad5f6ff)
2021-10-12 08:15:17 +00:00
Saqib Ansari
7e44c30404 fix: patch fails if accounts are frozen
(cherry picked from commit b0aa4a6e1c)
2021-10-12 08:15:16 +00:00
Deepesh Garg
47ced6810f fix: Linting issues
(cherry picked from commit af14ba43de)
2021-10-12 08:11:47 +00:00
Deepesh Garg
6c3f5687f2 fix: Incorrect maximum loan amount update
(cherry picked from commit 8355af6dcf)
2021-10-12 08:11:47 +00:00
Deepesh Garg
1b632b683f fix: Status check for closed loans
(cherry picked from commit 3337ae120c)
2021-10-12 08:11:46 +00:00
mergify[bot]
c5660e8511 Merge pull request #27906 from Anuja-pawar/accounts-settings (#27912)
fix(Accounts Settings): Update label

(cherry picked from commit e1967870a9)

Co-authored-by: Anuja Pawar <60467153+Anuja-pawar@users.noreply.github.com>
2021-10-12 12:23:53 +05:30
mergify[bot]
c4338d184e fix(accounts): Fix issue with fetching loyalty point entries (#27892) (#27913)
(cherry picked from commit 401e22fb8d)

Co-authored-by: Chillar Anand <chillar@avilpage.com>
2021-10-12 12:23:32 +05:30
Noah Jacob
d598a61556 Merge pull request #27901 from frappe/mergify/bp/version-13-hotfix/pr-27800
refactor: updated buying onboarding tours. (backport #27800)
2021-10-11 16:33:59 +05:30
Noah Jacob
d262d0ac27 refactor: updated onboarding cards and tours
(cherry picked from commit f5e0cad6a1)
2021-10-11 10:04:40 +00:00
mergify[bot]
7dc2f95932 fix: v12 migrate error - unknown column ‘mandatory_depends_on’ (backport #27897) (#27900)
* fix: v12 migrate error - unknown column ‘mandatory_depends_on’ (#27897)

* fix: v12 doesn't have mandatory_depends_on field

* fix: move update_vehicle_no_reqd_condition to v13

* fix: move update_vehicle_no_reqd_condition to v13

* fix: file name missing .py

* refactor!: add back empty line

* fix: linters issue

(cherry picked from commit 7acdcc70ad)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflicts

Co-authored-by: Dany Robert <rtdany10@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-11 10:02:31 +00:00
rohitwaghchaure
cf87c9138e Merge pull request #27898 from frappe/mergify/bp/version-13-hotfix/pr-27863
fix: consolidated report not consider company currency (backport #27863)
2021-10-11 14:07:51 +05:30
Rohit Waghchaure
1a42f82d14 fix: opening balance to calculate 'Unclosed Fiscal Years Profit / Loss (Credit)'
(cherry picked from commit 19d14da0d4)
2021-10-11 08:37:27 +00:00
Rohit Waghchaure
2c5a0bff47 fix: consolidated report not consider company currency
(cherry picked from commit dc4206428d)
2021-10-11 08:37:26 +00:00
mergify[bot]
a831e6b552 fix: bom item query (backport #27890) (#27894)
* fix: bom item query #27890

fix: bom item query
(cherry picked from commit 0a3dd3e954)

# Conflicts:
#	erpnext/manufacturing/doctype/bom/test_bom.py

* fix: resolve conflict

* chore: unused imports

[skip ci]

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-11 12:45:24 +05:30
ChillarAnand
f844c36ab2 fix(CI): Use bugbear instead of flake8-mutable
(cherry picked from commit 4dc17a856e)
2021-10-11 11:23:22 +05:30
mergify[bot]
091c2f3023 fix(perf): index creation on voucher_detail_no (#27866) (#27875)
voucher_detail_no is supposed to have an index, it was added on
on_doctype_update function of table, however this function is only
called if DocType itself is updated and `on_update` is called on
DocType. Stock ledger Entry doctype hasn't changed since addition of
this index in function.

Before: Lack of this index was causing full table scan in
get_future_sle_to_fix function. (~50 seconds in a reposting job)

After: Single row is fetched (~0.5 second in full reposting job)

Learnings:
1. Add simple indexes via doctype only
2. For complex indexes always change doctype.json file for it to take
   effect.

(cherry picked from commit 6019f60d0a)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-08 17:19:41 +05:30
mergify[bot]
119c2f01e1 fix(perf): index creation on voucher_detail_no (#27866) (#27876)
voucher_detail_no is supposed to have an index, it was added on
on_doctype_update function of table, however this function is only
called if DocType itself is updated and `on_update` is called on
DocType. Stock ledger Entry doctype hasn't changed since addition of
this index in function.

Before: Lack of this index was causing full table scan in
get_future_sle_to_fix function. (~50 seconds in a reposting job)

After: Single row is fetched (~0.5 second in full reposting job)

Learnings:
1. Add simple indexes via doctype only
2. For complex indexes always change doctype.json file for it to take
   effect.

(cherry picked from commit 6019f60d0a)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-08 17:19:34 +05:30
gavin
40aac908d1 fix: Ignore mandatory fields if exist (#27871)
The goal of this fix is to not break the patch in case of customizations
In this particular case, it's regarding a customized Note DocType with
multiple custom mandatory fields
2021-10-08 15:10:03 +05:30
mergify[bot]
4e6d588ae1 fix: remove readonly from billing address (#27873)
(cherry picked from commit 41fefa356f)

Co-authored-by: 18alantom <2.alan.tom@gmail.com>
2021-10-08 15:08:45 +05:30
mergify[bot]
504f2f06d3 fix: Salary Slip Label fixes (backport #27865) (#27870)
* fix: Salary Slip Label fixes (#27865)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
(cherry picked from commit d3d4a3da62)

# Conflicts:
#	erpnext/payroll/doctype/salary_slip/salary_slip.json

* fix: conflicts

Co-authored-by: yadavyk <32797974+yadavyk@users.noreply.github.com>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-08 14:16:12 +05:30
mergify[bot]
d96fd60878 fix: update dead links in help_links.js (#27860) (#27868)
(cherry picked from commit 90a249527d)

Co-authored-by: Kenneth Sequeira <33246109+kennethsequeira@users.noreply.github.com>
2021-10-08 13:31:07 +05:30
Deepesh Garg
d9a219850a fix: SO delivery Date not getting set via data import (#27862)
* fix: SO delivery Date not getting set via data import

* fix: logic to add delivery dates

* fix: linting issue

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
Co-authored-by: Afshan <afshan13k@gmail.com>
2021-10-08 12:38:40 +05:30
mergify[bot]
cb6d884058 fix(Payment Reconciliation): minor ux fixes (#27779) (#27859)
* fix: minor fixes

* fix: Linters check

* fix: sider check

* fix: kept unallocated payment amount hidden in allocation

* fix: removed Add row button from the tables (redundant)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
(cherry picked from commit 5cc3ea0aa7)

Co-authored-by: Anuja Pawar <60467153+Anuja-pawar@users.noreply.github.com>
2021-10-07 22:47:05 +05:30
mergify[bot]
4102f799dc fix: trim sales invoice custom field lengths (backport #27665) (#27750)
* fix: trim sales invoice custom field lengths

(cherry picked from commit a7df4227da)

* patch: trim sales invoice custom field lengths

(cherry picked from commit f1fcb385f5)

# Conflicts:
#	erpnext/patches.txt

* fix: do not set length for date field

(cherry picked from commit 83cc597594)

* fix: merge conflicts

Co-authored-by: Saqib Ansari <nextchamp.saqib@gmail.com>
Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-07 20:59:07 +05:30
Subin Tom
3c53c5b660 fix: cancelled sales invoices are considered in billed quantity calculation (#27845)
Co-authored-by: Saqib Ansari <nextchamp.saqib@gmail.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-07 20:36:00 +05:30
mergify[bot]
0a4b3d8129 fix: help links for purchase cycle and JV (#27856) (#27858)
(cherry picked from commit 07c680d7cc)

Co-authored-by: Kenneth Sequeira <33246109+kennethsequeira@users.noreply.github.com>
2021-10-07 20:29:28 +05:30
mergify[bot]
bad489426a feat: (Stock Reco) Ignore Empty Stock while fetching items from warehouse (#27848)
- Added checkbox to `Fetch Items from Warehouse` dialog to ignore empty stock
- fix: Items fetched twice due to Item Defaults
- Improved code readability

(cherry picked from commit 533ee9a401)

Co-authored-by: marination <maricadsouza221197@gmail.com>
2021-10-07 20:28:08 +05:30
mergify[bot]
729e29d268 fix: update help links for Sales Invoice page (#27853) (#27854)
(cherry picked from commit 646fd29f0e)

Co-authored-by: Kenneth Sequeira <33246109+kennethsequeira@users.noreply.github.com>
2021-10-07 18:42:06 +05:30
rohitwaghchaure
8108d4761b Merge pull request #27852 from frappe/mergify/bp/version-13-hotfix/pr-27851
feat: option to set the width for the multi-select dialog box (backport #27851)
2021-10-07 17:39:20 +05:30
Rohit Waghchaure
00cb04df84 feat: option to set the width for the multi-select dialog box
(cherry picked from commit 69ffddf747)
2021-10-07 12:08:58 +00:00
mergify[bot]
dd0cefbeb9 refactor: Clean up mutable defaults and add CI check (#27828) (#27841)
* refactor: Clean up mutable defaults and add CI check

(cherry picked from commit 772d4753e7)

Co-authored-by: Chillar Anand <chillar@avilpage.com>
2021-10-07 09:57:35 +00:00
Rohit Waghchaure
d11c215f85 Merge branch 'version-13-pre-release' into version-13 2021-10-07 11:35:31 +05:30
Rohit Waghchaure
5ea5bfad3d bumped to version 13.12.1 2021-10-07 11:55:31 +05:50
Anoop
4da5cb36e7 Merge pull request #27812 from akurungadam/fix-appointment-slots
fix(healthcare): Availability slots display, disabled Practitioner Schedule
2021-10-07 08:45:56 +05:30
mergify[bot]
56b58cbeea fix: use ceil in case of whole uoms for reorder qty (#27834) (#27838)
* fix: use ceil in case of whole uoms for reorder qty

* fix: cache uom query

(cherry picked from commit d4b2471cea)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-10-06 18:54:22 +05:30
Marica
cd87931cee Merge pull request #27833 from frappe/mergify/bp/version-13-pre-release/pr-27713
fix: Maintenance Schedule child table status for legacy data (backport #27713)
2021-10-06 14:08:15 +05:30
Marica
355ae1fca6 Merge branch 'version-13-pre-release' into mergify/bp/version-13-pre-release/pr-27713 2021-10-06 13:42:46 +05:30
mergify[bot]
91baa22d59 fix: remove stale doctypes and add msg for ecommerce refactor (bp #27700)
(cherry picked from commit 6d99bb5ce6)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-06 13:37:26 +05:30
marination
af57e1e299 fix: reload doc in patch
(cherry picked from commit 6b38778dcb)
2021-10-06 07:57:22 +00:00
marination
1d3ba46107 fix: Add patch to patches.txt
(cherry picked from commit 7c47f36a4c)
2021-10-06 07:57:22 +00:00
Marica
65a590ced1 fix: Maintenance Schedule child table status for legacy data (#27554)
* fix: Maintenance Schedule child table status for legacy data

* fix: Include legacy draft schedules in patch

* fix: Pre-commit formatting

(cherry picked from commit cc143bca0d)
(cherry picked from commit 6ce2111b6d)
2021-10-06 07:57:21 +00:00
Marica
1a68e10742 Merge pull request #27829 from frappe/mergify/bp/version-13-pre-release/pr-27715
fix: Batch scans get overwritten on the same row (backport #27668) (backport #27715)
2021-10-06 12:57:39 +05:30
Marica
71f676eedd Merge pull request #27764 from frappe/mergify/bp/version-13-hotfix/pr-27661
refactor: fetching of account balance in chart of accounts (backport #27661)
2021-10-06 12:56:10 +05:30
mergify[bot]
4fe827e86b Merge pull request #27715 from frappe/mergify/bp/version-13-hotfix/pr-27668
fix: Batch scans get overwritten on the same row (backport #27668)
(cherry picked from commit 15c9c08261)
2021-10-06 07:13:00 +00:00
Deepesh Garg
f573840c9f Merge pull request #27801 from frappe/mergify/bp/version-13-pre-release/pr-27524
fix: Tax breakup based on items, missing GST fields (backport #27524)
2021-10-06 09:33:30 +05:30
Rohit Waghchaure
0bc83deca0 Merge branch 'version-13-pre-release' into version-13 2021-10-06 00:26:31 +05:30
Rohit Waghchaure
696a01765b bumped to version 13.12.0 2021-10-06 00:46:31 +05:50
rohitwaghchaure
047debffeb Merge pull request #27825 from rohitwaghchaure/v13_12_0-change-log
chore: change log for v13_12_0
2021-10-06 00:02:19 +05:30
mergify[bot]
e57037b4cf ci: fail build if asset bundling fails (#27820) (#27823)
(cherry picked from commit 35e30bdcaf)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-05 23:59:47 +05:30
Rohit Waghchaure
633cd0c1a8 chore: change log for v13_12_0 2021-10-05 23:44:32 +05:30
Deepesh Garg
51b2fcc8ef fix: Update setup.py 2021-10-05 21:05:12 +05:30
Deepesh Garg
ff062d501f fix: Update patches.txt 2021-10-05 21:03:40 +05:30
mergify[bot]
2cbd5a9fcf fix: removed redundant piece of code (#27817) (#27821)
(cherry picked from commit cec66d2d10)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-05 19:26:58 +05:30
mergify[bot]
89e421a01d fix: removed redundant piece of code (#27817) (#27822)
(cherry picked from commit cec66d2d10)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-05 19:24:40 +05:30
Noah Jacob
287a7b29e1 Merge pull request #27815 from frappe/mergify/bp/version-13-pre-release/pr-27813
fix: ignore random periodicity in validations (backport #27813)
2021-10-05 17:32:09 +05:30
Noah Jacob
47a7eeca54 Merge pull request #27814 from frappe/mergify/bp/version-13-hotfix/pr-27813
fix: ignore random periodicity in validations (backport #27813)
2021-10-05 17:30:00 +05:30
Ankush Menat
a09647b3c8 fix: ignore random periodicity in validations
(cherry picked from commit 3d3655ed73)
2021-10-05 11:38:06 +00:00
Ankush Menat
62bbf0fe45 fix: ignore random periodicity in validations
(cherry picked from commit 3d3655ed73)
2021-10-05 11:28:34 +00:00
Marica
ae8c1ae311 Merge pull request #27803 from frappe/mergify/bp/version-13-hotfix/pr-27660
fix: tax rate being overridden in case of 0.00 (backport #27660)
2021-10-05 16:44:16 +05:30
Deepesh Garg
c1c5aa7262 Merge pull request #27810 from frappe/mergify/bp/version-13-pre-release/pr-27792
fix: COA Importer showing blank validations (backport #27792)
2021-10-05 15:39:29 +05:30
Deepesh Garg
b4f06c0d77 fix: Use get_list instead of get_all to avoid perm issues
(cherry picked from commit 9507b2d752)
2021-10-05 09:48:42 +00:00
Deepesh Garg
758939eddb fix: COA Importer showing blank validations
(cherry picked from commit 0660d6ed01)
2021-10-05 09:48:42 +00:00
Deepesh Garg
8f5ab94b70 Merge pull request #27792 from deepeshgarg007/pre-release-fixes
fix: COA Importer showing blank validations
2021-10-05 15:18:04 +05:30
mergify[bot]
fa944382c5 fix: using DN for transfer w/o internal customer (backport #27798) (#27805)
* fix: using DN for transfer w/o internal customer (#27798)

This used to be work before though not "advertised", since a lot of
users have started using it as feature, it can't be broken now.

(cherry picked from commit df1f8fddf6)

* fix(ux): use toast instead of popup

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-05 14:53:26 +05:30
Deepesh Garg
9507b2d752 fix: Use get_list instead of get_all to avoid perm issues 2021-10-05 14:51:35 +05:30
mergify[bot]
7e018f94ce fix: batch_no not mapped from PR to Stock Entry (#27804)
(cherry picked from commit 9613af6c4e)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-10-05 14:39:36 +05:30
Ankush Menat
2cfafede44 fix(ux): use toast instead of popup 2021-10-05 14:27:09 +05:30
Ankush Menat
df1f8fddf6 fix: using DN for transfer w/o internal customer (#27798)
This used to be work before though not "advertised", since a lot of
users have started using it as feature, it can't be broken now.
2021-10-05 14:21:27 +05:30
Dany Robert
a17fed9cd9 fix: return tax rate since fetch is removed
(cherry picked from commit 2b4959fb3b)
2021-10-05 08:45:24 +00:00
Dany Robert
d8479a41e5 fix: tax rate being overridden in case of 0.00
Tax rate could be different for different expenses.
Therefore, rate is kept as 0.00 and tax amount entered manually.
But fetching used to override the rate(upon saving) and mess up the amount.

(cherry picked from commit 5ce6a4c107)
2021-10-05 08:45:23 +00:00
Subin Tom
b1244df045 fix: Tax breakup based on items, missing GST fields (#27524)
* fix: Tax breakup based on items

* fix: added gst fields,warehouse validation to pos inv,patch

* fix: tax breakup test fix, eway bill hsn fix

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit d49346ac45)

# Conflicts:
#	erpnext/patches.txt
#	erpnext/regional/india/setup.py
2021-10-05 08:44:31 +00:00
Deepesh Garg
d2f5d31f98 Merge pull request #27559 from frappe-pr-bot/backport/version-13-hotfix/27524
fix: Tax breakup based on items, missing GST fields
2021-10-05 14:13:50 +05:30
Deepesh Garg
28aa9a7215 Merge pull request #27761 from frappe/mergify/bp/version-13-pre-release/pr-27712
fix(India): Internal transfer check fix (backport #27712)
2021-10-05 14:10:57 +05:30
Deepesh Garg
44ee44dec5 Merge pull request #27786 from frappe/mergify/bp/version-13-hotfix/pr-27785
fix: Delete linked Transaction Deletion Record docs on deleting company (backport #27785)
2021-10-05 14:09:16 +05:30
mergify[bot]
bebd77c27d fix: add (uom, brand) Item details in an Item Price (#27561) (#27795)
* fix: add (uom, brand) and update (uom) Item details in an Item Price

* fix: order of query interpolation args

Co-authored-by: Marica <maricadsouza221197@gmail.com>

* fix: named interpolation, remove item price

* fix: sql error

Co-authored-by: Marica <maricadsouza221197@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
(cherry picked from commit 7da777880b)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-10-05 13:28:43 +05:30
Afshan
0c55a98190 Merge branch 'version-13-hotfix' into mergify/bp/version-13-hotfix/pr-27785 2021-10-05 13:26:47 +05:30
mergify[bot]
32d72fdecb fix: Only calculate first_respone_time if SLA is set (#27789) (#27793)
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
(cherry picked from commit ad03eb25df)

Co-authored-by: Ganga Manoj <ganga.manoj98@gmail.com>
2021-10-05 12:49:06 +05:30
mergify[bot]
046ec928e0 fix: Display appropriate message if different Payment Terms are used in PE and its Payment References (#27763)
(cherry picked from commit 9f14695743)

Co-authored-by: GangaManoj <ganga.manoj98@gmail.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-10-05 12:21:21 +05:30
Deepesh Garg
0660d6ed01 fix: COA Importer showing blank validations 2021-10-05 12:20:14 +05:30
Afshan
877820b902 Merge branch 'version-13-hotfix' into mergify/bp/version-13-hotfix/pr-27785 2021-10-05 11:50:25 +05:30
mergify[bot]
ab0e381cfc fix(asset): expected value after useful life validation (#27539) (#27790)
(cherry picked from commit 065a2ce983)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-10-05 11:47:56 +05:30
Saqib
5e34cdf00f Merge branch 'version-13-hotfix' into mergify/bp/version-13-hotfix/pr-27661 2021-10-05 11:34:02 +05:30
Saqib
953073bc77 fix(asset): expected value after useful life validation (#27787) 2021-10-05 11:13:50 +05:30
GangaManoj
4ecb798585 fix: Delete linked Transaction Deletion Record docs on deleting company
(cherry picked from commit 38c7e42f0c)
2021-10-05 05:19:37 +00:00
mergify[bot]
91d269fe1a fix: set item uom as stock_uom if it isn't set (#27623) (#27780)
* fix: set item uom as stock_uom if it isn't set

(cherry picked from commit 5c372202d5)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-10-04 22:41:12 +05:30
mergify[bot]
4535a9415f ci(Mergify): configuration update (#27777) (#27778)
Signed-off-by: Ankush Menat <me@ankush.dev>
(cherry picked from commit 4159361d52)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-04 18:10:52 +05:30
Sagar Vora
e17713c9d6 fix: multiple fixes to timesheets (#27775) 2021-10-04 17:08:50 +05:30
mergify[bot]
21a5498d5d fix: Merge "Accounting Ledger" and "Accounts Receivable" in "View" button (#27769) (#27771)
* fix: Added a new button "View" and merged "Accounting Ledger" and "Accounts Receivable" into it

* fix: sider issues

* chore: dead code

(cherry picked from commit b483f173a6)

Co-authored-by: Komal-Saraf0609 <81952590+Komal-Saraf0609@users.noreply.github.com>
2021-10-04 16:06:55 +05:30
Saqib
c0b17edbbf perf: fetching of account balance in chart of accounts (#27661)
(cherry picked from commit 9051735529)
2021-10-04 06:15:34 +00:00
Deepesh Garg
e6909a0899 fix(India): Internal transfer check fix
(cherry picked from commit f0af24fc6d)
2021-10-04 05:31:59 +00:00
Marica
68cce8eb98 Merge pull request #27757 from frappe/mergify/bp/version-13-pre-release/pr-27720
fix: Website Items with same Item name unhandled, thumbnails missing (backport #27720)
2021-10-03 14:46:18 +05:30
Marica
869c1beb0a Merge pull request #27744 from frappe/mergify/bp/version-13-pre-release/pr-27611
fix: Hero Slider Control & Alignment fixes (backport #27611)
2021-10-03 14:29:39 +05:30
Marica
e9ed379b57 Merge pull request #27743 from frappe/mergify/bp/version-13-hotfix/pr-27611
fix: Hero Slider Control & Alignment fixes (backport #27611)
2021-10-03 14:29:18 +05:30
marination
a453fc6385 fix: Pre-commit formatting
(cherry picked from commit 77d4849ce8)
2021-10-03 08:57:13 +00:00
marination
00978a195a fix: Website Items with same Item name unhandled, thumbnails missing
- Use naming series for Website Item. There could be two items with same name and different item code
- Fix: Website Item Page view breaks if cart is disabled
- Fix: thumbnails not created for Website Items after patch
- Fix: ‘Request for Quote’ button & cart summary not visible if checkout is disabled

(cherry picked from commit 36b519c962)
2021-10-03 08:57:12 +00:00
Marica
4d0d642db7 Merge pull request #27720 from marination/e-comm-web-item-name-thumbnail-fix
fix: Website Items with same Item name unhandled, thumbnails missing
2021-10-03 14:26:20 +05:30
Deepesh Garg
f02438eb54 Merge pull request #27712 from deepeshgarg007/internal_transfer_check_fix
fix(India): Internal transfer check fix
2021-10-03 13:38:51 +05:30
Marica
62fa1f0305 Merge branch 'version-13-hotfix' into e-comm-web-item-name-thumbnail-fix 2021-10-03 13:30:50 +05:30
marination
77d4849ce8 fix: Pre-commit formatting 2021-10-03 13:30:02 +05:30
Deepesh Garg
66286881f3 Merge pull request #27752 from frappe/mergify/bp/version-13-pre-release/pr-27748
fix: Chart Of Accounts import button not visible (backport #27748)
2021-10-02 22:16:15 +05:30
Deepesh Garg
c2e4bbe9cc fix: Linting issues
(cherry picked from commit ff570f48a0)
2021-10-02 16:10:41 +00:00
Deepesh Garg
02984551ce fix: Remove unwanted comments
(cherry picked from commit e4b89d2fcd)
2021-10-02 16:10:40 +00:00
Deepesh Garg
42f0a97d26 fix: Chart Of Accounts import button not visible
(cherry picked from commit 3529622a0d)
2021-10-02 16:10:39 +00:00
Deepesh Garg
fe4df3a14a Merge pull request #27748 from deepeshgarg007/yet_chart_of_accounts_importer_fixes
fix: Chart Of Accounts import button not visible
2021-10-02 21:39:07 +05:30
Deepesh Garg
ff570f48a0 fix: Linting issues 2021-10-02 20:46:20 +05:30
Deepesh Garg
e4b89d2fcd fix: Remove unwanted comments 2021-10-02 20:37:15 +05:30
Deepesh Garg
3529622a0d fix: Chart Of Accounts import button not visible 2021-10-02 20:35:11 +05:30
Shariq Ansari
477d36413b chore: linter fix
(cherry picked from commit 18918e1b4f)
2021-10-02 11:39:01 +00:00
Shariq Ansari
b5fc3076bf fix: Fixed alignment of Title, Subtitle, Action Button
(cherry picked from commit 0de735f20b)
2021-10-02 11:39:00 +00:00
Shariq Ansari
2c9162160a fix: Creating unique hash for slider id instead of slider name
(cherry picked from commit 3e8e6ac4e2)
2021-10-02 11:38:59 +00:00
Shariq Ansari
8f98238114 chore: linter fix
(cherry picked from commit 18918e1b4f)
2021-10-02 11:38:31 +00:00
Shariq Ansari
86e3adf344 fix: Fixed alignment of Title, Subtitle, Action Button
(cherry picked from commit 0de735f20b)
2021-10-02 11:38:31 +00:00
Shariq Ansari
d6152df3b4 fix: Creating unique hash for slider id instead of slider name
(cherry picked from commit 3e8e6ac4e2)
2021-10-02 11:38:30 +00:00
Anurag Mishra
4837238f3d feat(HR): Some Enhancements and Onboarding (#25741)
* feat: Hr settings restructure

* feat: remove validation and make As warning

* feat: made leave policy Assignment feild read only

* feat: send leave Notification via 'Notification'

* patch: for field name change

* feat: removed defaults value for removed field

* feat: removed leave Notification fields

* feat: better label and description

* feat: Hr Module onboarding and Onboarding slides

* fix: sider, test, translations

* chore: remove unnecessary code formatting changes

* refactor: HR Onboarding

* refactor: HR Settings

* revert: Notification changes

* chore: remove unnecessary descriptions from leave type

* fix: linter issues

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-02 12:34:21 +05:30
mergify[bot]
e4f12f0458 fix: update variant qty in BOM, Create Work Order dialog (#27686) (#27732)
(cherry picked from commit ece446ffe5)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-10-01 23:21:08 +05:30
mergify[bot]
3e7a029869 fix: option to limit reposting in certain timeslot (bp #27725)
(cherry picked from commit a04f9c904e)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-01 16:50:05 +05:30
mergify[bot]
23431cf261 fix: option to limit reposting in certain timeslot (#27725) (#27726)
(cherry picked from commit a04f9c904e)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-10-01 13:56:00 +05:30
Anurag Mishra
57e66f958c feat: Tracking Multi-round interview (#25482)
* feat: Tracking Multi-round interview

* fix: releted to scheduler event and formating

* fix: job applicant UI/UX and conflicts

* test: Interview Round

* fix(test): Employee referral, Employee Onboarding, Job Offer

* fix: sider

* feat: set default value in Hr settings

* feat: added validation for designation

* test: Interview

* test: Added validatiolns for skill

* test: Interview feedback

* fix: sider

* fix: remove unnecessary validations and form label cleanups

* chore: clean-up Interview Round and Interview Type doctype

* fix: remove redundant Rating Value, only keep Rating

* fix: update interview details on feedback submission

- make interview feedback submission dialog minimizable

* fix: show submit feedback button only if feedback doesn't exist

* refactor: Interview and Feedback statuses and workflow

* fix(HR Settings): clean up interview settings

* refactor: Interview

* refactor: Interview Feedback, remove unnecessary validations

* chore: update notification messages

* chore: remove unnecessary formatting changes in attendance list and leave application

* refactor: Job Applicant to Interview mapping

* chore: sorted imports

* chore: sorted imports

* fix: sider issues

* fix: linter issues

* fix: sider issues

* fix: tests

* fix: sorted imports

* fix: tests, sider

* fix: therapy plan test

* fix: sider issues

* feat: Include From Time and To Time fields in Interview for cleaner data

* feat: Interview Calendar

* fix: allow renaming masters

* fix: add more fields to list view and standard filter

* fix: validate overlapping interviews

* fix: update tests

* fix: linter issues

* refactor: replace reminder messages with Email Templates

* fix: sider issues

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-10-01 00:10:47 +05:30
mergify[bot]
05374cb8b2 fix(Org Chart): use attribute selectors instead of ID selector for node IDs with special characters (#27717) (#27718)
* fix(Org Chart): use attribute selectors instead of ID selector for node IDs with special chars

* fix: UI tests

(cherry picked from commit 9e08229b7b)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-30 18:45:22 +05:30
mergify[bot]
f572a4e0e5 fix(Org Chart): use attribute selectors instead of ID selector for node IDs with special characters (#27717) (#27719)
* fix(Org Chart): use attribute selectors instead of ID selector for node IDs with special chars

* fix: UI tests

(cherry picked from commit 9e08229b7b)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-30 18:44:55 +05:30
marination
36b519c962 fix: Website Items with same Item name unhandled, thumbnails missing
- Use naming series for Website Item. There could be two items with same name and different item code
- Fix: Website Item Page view breaks if cart is disabled
- Fix: thumbnails not created for Website Items after patch
- Fix: ‘Request for Quote’ button & cart summary not visible if checkout is disabled
2021-09-30 18:34:26 +05:30
rohitwaghchaure
348f082490 Merge pull request #27716 from rohitwaghchaure/merge-v13-hotfix-to-pre-release
chore: Merge branch 'version-13-hotfix' into 'version-13-pre-release'
2021-09-30 18:07:47 +05:30
Rohit Waghchaure
49174cd414 chore: Merge branch 'version-13-hotfix' into 'version-13-pre-release' 2021-09-30 16:59:18 +05:30
mergify[bot]
15c9c08261 Merge pull request #27715 from frappe/mergify/bp/version-13-hotfix/pr-27668
fix: Batch scans get overwritten on the same row (backport #27668)
2021-09-30 16:34:11 +05:30
Marica
5d1de91b68 Merge pull request #27713 from frappe-pr-bot/backport/version-13-hotfix/27554
fix: Maintenance Schedule child table status for legacy data
2021-09-30 15:57:27 +05:30
Marica
cf6e10ac7b Merge branch 'version-13-hotfix' into backport/version-13-hotfix/27554 2021-09-30 15:55:04 +05:30
Ankush Menat
6d99bb5ce6 fix: remove stale doctypes and add msg for ecommerce refactor (#27700) 2021-09-30 15:49:26 +05:30
marination
6b38778dcb fix: reload doc in patch 2021-09-30 14:55:57 +05:30
marination
7c47f36a4c fix: Add patch to patches.txt 2021-09-30 14:18:35 +05:30
Marica
6ce2111b6d fix: Maintenance Schedule child table status for legacy data (#27554)
* fix: Maintenance Schedule child table status for legacy data

* fix: Include legacy draft schedules in patch

* fix: Pre-commit formatting

(cherry picked from commit cc143bca0d)
2021-09-30 08:39:55 +00:00
Deepesh Garg
f0af24fc6d fix(India): Internal transfer check fix 2021-09-30 13:28:53 +05:30
Mohammed Yusuf Shaikh
b478e72cef fix: wrong company selected when marking attendance for all employees (#27685)
* fix: wrong company selected when marking attendance for all employees

* fix: enable caching for repeated queries of the same employee

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>

Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
2021-09-30 12:02:39 +05:30
mergify[bot]
471a8ddce0 fix: distribution of additional costs in mfg stock entry (#27629) (#27706)
* refactor: remove unnecessary list comprehensions

* fix: correct cost distribution logic

While apportioning costs same condition should be present on both sides
so total value is representative of all items to be apportioned.

Here while calculating incoming_items_cost only FG items are considered,
but while apportioning all items with to_warehouse are considered.

Solution: only apportion additional cost on FG items

* test: test cost distribution

* fix: patch for additional cost

fix(patch): consider PCV while patching

- consider Period closing voucher while patching
- recomute rates for SLE of affected stock entries

consider only FG/scrap item SLEs for recomputation of rates

* fix: remove client side logic for addn cost

All of this is done in python code hence removed client side code.

(cherry picked from commit 4685ed5a8c)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-30 11:20:09 +05:30
Deepesh Garg
7fc7405be7 fix: Deferred revenue entries post account freezing (#27551)
* fix: Deferred revenue entries post account freezing

* fix: Test Case

* fix: Test case
2021-09-30 08:35:30 +05:30
rohitwaghchaure
26c16412bb Merge pull request #27702 from frappe/mergify/bp/version-13-hotfix/pr-27701
fix: added project name in the purchase order analysis (backport #27701)
2021-09-29 23:43:54 +05:30
Rohit Waghchaure
c8396f4970 fix: added project name in the purchase order analysis
(cherry picked from commit c1f9997a67)
2021-09-29 18:13:25 +00:00
Deepesh Garg
aeffaf312a Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into deferred_entry_freeze_v13 2021-09-29 22:27:02 +05:30
Deepesh Garg
23863c7663 fix: Test case 2021-09-29 22:26:33 +05:30
Frappe PR Bot
887e3765bf feat: TDS deduction using journal entry and other fixes (#27451) (#27672)
* fix: TDS deduction using journal entry

* fix: Multi category application against single supplier

* refactor: TDS payable monthly report

* fix: Server side handling for default tax withholding category

* fix: Supplier filter for Journal Entry

* refactor: TDS computation summary report

(cherry picked from commit cc5dd5c67d)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-29 20:26:43 +05:30
Frappe PR Bot
633847c514 fix: Ignore user permission for Represents Company field in Sales and Purchase docs (#27684) (#27695)
* fix: Ignore user permission for Represents Company field in Sales and Purchase docs

* fix: Ignore user permission for fiscal year company

(cherry picked from commit b39f8a6215)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-29 20:26:16 +05:30
Deepesh Garg
72986abab9 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into deferred_entry_freeze_v13 2021-09-29 16:13:28 +05:30
mergify[bot]
6b32fa7b1c feat(regional): toggle for reduced depreciation rate as per IT Act (#27688) 2021-09-28 19:48:50 +05:30
Frappe PR Bot
212492220d fix: cannot delete a project if linked with sales order (#27536) (#27689) 2021-09-28 19:46:35 +05:30
Frappe PR Bot
fbae3c7fd6 fix: apply price list after batch or serial no insertion (#27566) (#27683)
(cherry picked from commit 72c081fd8f)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-09-28 12:59:45 +05:30
Frappe PR Bot
745abef0e7 fix: set item.qty as mandatory in picklist (#27680) (#27682)
(cherry picked from commit b91333afdd)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-09-28 12:24:55 +05:30
Frappe PR Bot
1acdadea00 fix(ux): added exception of template item in filters (#27560) (#27675)
(cherry picked from commit 5c249decbb)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-09-27 23:01:14 +05:30
mergify[bot]
2ee9da3504 fix: cannot set custom label for 'total' field in print format (#27667) 2021-09-27 15:03:16 +05:30
Deepesh Garg
6eb9a114be Merge branch 'version-13-hotfix' into backport/version-13-hotfix/27524 2021-09-27 14:55:32 +05:30
Frappe PR Bot
e8de8b8454 fix: Improvements in COA Importer (#27584) (#27587)
(cherry picked from commit f07ff92a35)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-27 14:53:51 +05:30
Frappe PR Bot
1b9e96f760 fix: Tax Breakup table headers fix (#27596) (#27598)
(cherry picked from commit 0ff7367f39)

Co-authored-by: Subin Tom <36098155+nemesis189@users.noreply.github.com>
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-09-27 14:53:29 +05:30
Saqib
0e59873cc0 Merge pull request #27663 from frappe/mergify/bp/version-13-hotfix/pr-27659
fix: setting of gain/loss if party account is in company currency (backport #27659)
2021-09-27 14:29:25 +05:30
Saqib
1063ced7cd fix: linting errors
(cherry picked from commit 711395db22)
2021-09-27 07:36:17 +00:00
Saqib
904c592978 fix: indentation
(cherry picked from commit 1f8ad72418)
2021-09-27 07:36:16 +00:00
Saqib
7a8ff85308 chore: log modified invoices
(cherry picked from commit 30f59b09fd)
2021-09-27 07:36:16 +00:00
Saqib Ansari
8a8921fb5b fix: unknown column 'ref_exchange_rate'
(cherry picked from commit 18e5d59d24)
2021-09-27 07:36:15 +00:00
Saqib Ansari
705f094a1a chore: hide exchange gain loss if empty
(cherry picked from commit e6b4d33f4b)
2021-09-27 07:36:15 +00:00
Saqib Ansari
19b06b0745 patch: invalid gain loss gl entry
(cherry picked from commit beebfb323a)
2021-09-27 07:36:15 +00:00
Saqib Ansari
2108bf9f73 fix: cost center in exchange gain loss gl entry
(cherry picked from commit 78ad50efc2)
2021-09-27 07:36:14 +00:00
Saqib Ansari
677a59b005 chore: hide exchange gain loss if empty
(cherry picked from commit dd2d039ca8)
2021-09-27 07:36:13 +00:00
Saqib Ansari
af531372da fix: setting of gain/loss if party account is in company currency
(cherry picked from commit 64efe8bf15)
2021-09-27 07:36:13 +00:00
Frappe PR Bot
986ca8815d fix: local variable 'fiscal_year_details' referenced before assignment (#27658) 2021-09-26 20:28:06 +05:30
Frappe PR Bot
646f8b7871 fix: update default KSA VAT rate for setup (#27614) (#27622)
(cherry picked from commit abded895f3)

Co-authored-by: Kenneth Sequeira <33246109+kennethsequeira@users.noreply.github.com>
2021-09-26 11:14:20 +05:30
Frappe PR Bot
08e24bd907 fix: holiday message reminder (#27654)
Minor grammatical change

(cherry picked from commit dafe99b6e2)

Co-authored-by: escix <preminik@preminik.com>
2021-09-26 11:12:48 +05:30
Frappe PR Bot
e5a062ceb6 feat: add Partly Paid status in Invoices (#27636)
(cherry picked from commit c8b9a55e96)

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2021-09-22 12:17:58 +05:30
Bhavesh Maheshwari
9ebabb86b3 fix: remove unknown field employee_name from query (#27634)
* fix: remove unknown field employee_name from query

* fix: remove unknown fieldname

Co-authored-by: root <root@vultr.guest>
Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
2021-09-21 20:30:53 +05:30
Frappe PR Bot
5a8d57f2ae fix: remove bad default for anniversary reminders (#27632) (#27633)
🤦

(cherry picked from commit c302c7ab42)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-21 17:55:05 +05:30
Frappe PR Bot
47c6fba317 fix: (ux) Use subassembly schedule date while making WO from Prod Plan (bp #27628)
- Set subassemply WO's planned start date from Production Plan

(cherry picked from commit 9110223341)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-09-21 17:12:45 +05:30
Frappe PR Bot
19446a8ddd feat: Merge POS invoices based on customer group (#27553)
* feat: Merge POS invoices based on customer group (#27471)

* feat: Merge POS invoices based on customer group

* fix: Linting Issues

* fix: fieldname

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
(cherry picked from commit c9c8957250)

# Conflicts:
#	erpnext/patches.txt

* fix: Update patches.txt

* fix: Remove v14 patch

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-21 11:17:44 +05:30
Frappe PR Bot
fec19a9532 Update training_result.js (#27615) (#27620)
cur_frm is deprecated

(cherry picked from commit 5c400da4e2)

Co-authored-by: François de Ryckel <f.deryckel@gmail.com>
2021-09-21 09:32:18 +05:30
mergify[bot]
6ba1b03ee5 fix: reference row added in allocation table (#27613) 2021-09-20 21:37:55 +05:30
Ganga Manoj
1ba4afa986 fix: Set parent_detail_docname to prevent overwriting Packed/Bundle Items on saving (#27571) 2021-09-20 21:36:07 +05:30
mergify[bot]
10cffe81b0 fix: Webform Permission for custom doctype (backport #26232) (#27592)
* fix: Webform Permission for custom doctype (#26232)

* fix: Webform Permission for custom doctype

* fix: sider fix

* fix: app check condition for getting correct list_context

* chore: Better naming convention

* test: Added test case to check permission for webform of custom doctype

* chore: linting issue

* chore: linting issue

* fix: sider fix

* test: minor changes

* chore: linter and better naming method

* chore: linter fix

(cherry picked from commit 9aa6f52edd)

# Conflicts:
#	erpnext/hooks.py

* chore: Resolved Conflicts

Co-authored-by: Shariq Ansari <30859809+shariquerik@users.noreply.github.com>
2021-09-20 20:28:29 +05:30
Ankush Menat
72c22a4219 Merge pull request #27604 from frappe/mergify/bp/version-13-hotfix/pr-27601
fix(ux): warn when overbilling allowance was bypassed due to role (backport #27601)
2021-09-20 18:17:40 +05:30
Ankush Menat
684ca451d3 fix(ux): better error message
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
(cherry picked from commit 21a955d20b)
2021-09-20 12:13:37 +00:00
Ankush Menat
8cdd6eacdd refactor: add guard clause in for loop
Reduce overly indented code/improve readability.

(cherry picked from commit 5e4fbba753)
2021-09-20 12:13:37 +00:00
Ankush Menat
2dc590c0c0 fix: warn when overbilling checks are skipped.
(cherry picked from commit 43bf82b58b)
2021-09-20 12:13:36 +00:00
Ankush Menat
55393d160d perf: extract loop invariant db calls
(cherry picked from commit 648b2d72a5)
2021-09-20 12:13:36 +00:00
Frappe PR Bot
9b46dd512b fix(plaid): query to check if bank account exists (#27595) 2021-09-20 15:45:13 +05:30
Saqib
7aaecbcac9 fix: Move related fields together in Selling Settings (#27383) 2021-09-20 15:30:50 +05:30
Deepesh Garg
846d128c5d fix: Test Case 2021-09-20 11:06:10 +05:30
Rohit Waghchaure
c800ff5068 Merge branch 'version-13-pre-release' into version-13 2021-09-19 14:39:45 +05:30
Rohit Waghchaure
de8b3570f5 bumped to version 13.11.1 2021-09-19 14:59:45 +05:50
Frappe PR Bot
5978286b52 fix: Handle is_search_module_loaded for redis version < 4.0.0 (#27574) (#27578)
- Return False if error occurs

(cherry picked from commit d6ed6d53e9)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-09-18 15:25:44 +05:30
Marica
d6ed6d53e9 fix: Handle is_search_module_loaded for redis version < 4.0.0 (#27574)
- Return False if error occurs
2021-09-18 14:23:44 +05:30
Frappe PR Bot
a741fd1cfe fix: PO/PINV - Check if doctype has company_address field before setting the value (#27441) (#27575)
Co-authored-by: Vama Mehta <vama.mehta@inqubit.in>
(cherry picked from commit 666eaae6ce)

Co-authored-by: vama <vamagithub@gmail.com>
2021-09-18 13:24:33 +05:30
vama
666eaae6ce fix: PO/PINV - Check if doctype has company_address field before setting the value (#27441)
Co-authored-by: Vama Mehta <vama.mehta@inqubit.in>
2021-09-18 13:21:45 +05:30
Anoop
9ffb65b5a4 fix(healthcare): Duplicate Contact error on add Patient (#27427)
* fix: duplicate contact error when linking existing Customer to Patient
validation for existing User email and mobile before creating user on Patient update

* test: patient - test contact, user creation

* fix: test_patient_contact clearing contact breaking other tests
sider issues

* fix: use db_set instead of set_value

* fix(test): overlapping appointments

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-18 01:02:31 +05:30
Subin Tom
8c01ae952b conflict fixes 2021-09-17 20:18:39 +05:30
Subin Tom
e8cf32e1c8 fixing conflicts 2021-09-17 20:16:10 +05:30
Frappe PR Bot
e6d0a57f0c ci: fix docs checker for empty body (#27569)
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-17 17:20:59 +05:30
Saqib
5451aed115 Merge branch 'version-13-hotfix' into backport-fix-selling-settings 2021-09-17 15:56:01 +05:30
Frappe PR Bot
bd1c823aa6 fix: unecessary keyword args were passed in mapper functions (#27563) (#27564)
(cherry picked from commit e03d9aa889)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-09-17 13:21:33 +05:30
Frappe PR Bot
6ed40463a0 fix: unecessary keyword args were passed in mapper functions (#27563) (#27565)
(cherry picked from commit e03d9aa889)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-09-17 13:11:54 +05:30
Subin Tom
8dfdab9dc1 fix: Tax breakup based on items, missing GST fields (#27524)
* fix: Tax breakup based on items

* fix: added gst fields,warehouse validation to pos inv,patch

* fix: tax breakup test fix, eway bill hsn fix

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit d49346ac45)

# Conflicts:
#	erpnext/patches.txt
#	erpnext/regional/india/setup.py
2021-09-17 05:21:40 +00:00
Frappe PR Bot
e990bb8816 fix: Remove duplicates from customer_code field (bp #27555)
(cherry picked from commit 41f11eca72)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-09-17 05:15:03 +00:00
Deepesh Garg
e2eb72eb5b fix: Deferred revenue entries post account freezing 2021-09-16 18:54:57 +05:30
Frappe PR Bot
450e1e8ed4 fix: no validation on item defaults (#27549)
* fix: no validation on item defaults (#27393)

* fix: no validation on item defaults

* fix: cache value while validating

* test: item default company relation

* fix: reorder validations

* refactor: add guard conditions on update_defaults

* test: add default warehouse for item group

* fix: validate item defaults for item groups

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
(cherry picked from commit 5eba1ccd51)

# Conflicts:
#	erpnext/setup/doctype/item_group/item_group.py
#	erpnext/stock/doctype/item/item.py

* fix: resolve conflicts

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-16 12:25:39 +00:00
Saqib
24c08f5092 Merge branch 'version-13-hotfix' into backport-fix-selling-settings 2021-09-16 16:59:54 +05:30
Frappe PR Bot
adc5bf7b9c Merge pull request #27543 from frappe-pr-bot/backport/version-13-hotfix/27538
fix: Validate if item exists on uploading items in stock reco
2021-09-16 16:07:56 +05:30
Frappe PR Bot
e9683fad47 fix(ProdPlan): Get SubAssy Items does not work (bp #27537)
* fix(ProdPlan): Get SubAssy Items does not work

This button wasn't working unless the document was saved already.

* fix: make form dirty when subassy item are fetched

(cherry picked from commit 78fe92542c)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-16 10:22:43 +00:00
Frappe PR Bot
5a34520f3f fix(minor): Employee filter in Unpaid Expense Claims report (#27530) (#27531)
(cherry picked from commit 866763c16a)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-16 00:14:00 +05:30
Frappe PR Bot
8b3ef8e96e test: automated test for running all stock reports (#27510) (#27522)
* test: automated test for running all stock reports

These test do not assert correctness, they just check that "execute" function
is working with sane filters.

* test: make report execution test modular

(cherry picked from commit 70c203d19e)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-15 22:23:07 +05:30
Rohit Waghchaure
79d1cf161e Merge branch 'version-13-pre-release' into version-13 2021-09-15 21:11:53 +05:30
Rohit Waghchaure
fb55b57f5c bumped to version 13.11.0 2021-09-15 21:31:52 +05:50
Frappe PR Bot
0fb112107f fix: not able to submit stock entry with 350 items (#27523) (#27526)
(cherry picked from commit e6a1ad8016)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-15 21:06:44 +05:30
Frappe PR Bot
4c51002cb2 fix: not able to submit stock entry with 350 items (#27523) (#27525)
(cherry picked from commit e6a1ad8016)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-15 21:06:31 +05:30
rohitwaghchaure
abd3aee5b5 chore: change log for version 13.11.0 (#27527) 2021-09-15 21:06:13 +05:30
Frappe PR Bot
6d2d97bac4 fix(minor): Remove b2c limit check from CDNR Invoices (#27516) (#27519)
* fix(minor): Remove b2c limit check from CDNR Invoices

* fix: Remove unnecessary format

(cherry picked from commit 978028c880)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-15 19:11:28 +05:30
Deepesh Garg
978028c880 fix(minor): Remove b2c limit check from CDNR Invoices (#27516)
* fix(minor): Remove b2c limit check from CDNR Invoices

* fix: Remove unnecessary format
2021-09-15 18:51:06 +05:30
Frappe PR Bot
05663268e6 feat: provision to add scrap item in job card (#27483) (#27518)
(cherry picked from commit c5a77f60ed)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-15 18:15:38 +05:30
Frappe PR Bot
4bd1bceee2 fix: table data deleted on submitted maintenance schedule (bp #27513)
(cherry picked from commit 5e0b21582a)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-09-15 17:45:48 +05:30
Frappe PR Bot
7d733af983 feat: link items to supplier / customer (#27479)
* Merge pull request #27281 from DeeMysterio/party-specific-items

feat: link items to supplier / customer
(cherry picked from commit aa82624f31)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflict

Co-authored-by: DeeMysterio <dikshajadhav11.dj@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-15 17:19:50 +05:30
Frappe PR Bot
a87cc12024 feat: provision to add scrap item in job card (#27483) (#27512)
(cherry picked from commit c5a77f60ed)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-15 17:17:59 +05:30
Frappe PR Bot
d1a4761955 fix: Maintain same rate in Stock Ledger until stock become positive (#27227) (#27477)
* fix: Maintain same rate in Stock Ledger until stock become positive

* fix: Maintain same rate in Stock Ledger until stock become positive

(cherry picked from commit 10754831c3)

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2021-09-15 17:08:41 +05:30
Marica
9adb4c8b69 Merge pull request #27509 from frappe-pr-bot/backport/version-13-pre-release/27508
fix: Shopping Cart and Variant Selection
2021-09-15 14:17:53 +05:30
Marica
0572c0ae3e Merge pull request #27508 from marination/shopping-cart-fixes
fix: Shopping Cart and Variant Selection
(cherry picked from commit 9e0fb74ab2)
2021-09-15 08:31:20 +00:00
Marica
9e0fb74ab2 Merge pull request #27508 from marination/shopping-cart-fixes
fix: Shopping Cart and Variant Selection
2021-09-15 14:00:14 +05:30
Frappe PR Bot
604f13c69e fix: Values with same account and different account number in consolidated balance sheet report (#27493) (#27504)
(cherry picked from commit 625626b973)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-15 11:49:19 +05:30
Frappe PR Bot
397fad7eb2 fix: Values with same account and different account number in consolidated balance sheet report (#27493) (#27503)
(cherry picked from commit 625626b973)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-15 11:49:04 +05:30
Frappe PR Bot
5f4a58fb83 fix: Autoname for customer and supplier (#27505)
* fix: Autoname for customer and supplier (#27398)

(cherry picked from commit 759f2b7920)

# Conflicts:
#	erpnext/selling/doctype/selling_settings/selling_settings.json

* fix: Resolve conflicts

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-15 11:31:51 +05:30
vama
50fe23308a fix: Tags getting fetched correctly in Get Supplier in RFQ (Request For Quotation) (#27499)
* fix: Tags getting fetched correctly in Get Supplier in RFQ( Request For Quotation ) #26343

* fix: Linting issues

* fix: remove unnecessary caching

[skip ci]

Co-authored-by: Vama Mehta <vama.mehta@inqubit.in>
Co-authored-by: Ankush Menat <ankush@iwebnotes.in>
2021-09-15 11:07:36 +05:30
Frappe PR Bot
247d9bf5c4 fix: Patch for updating tax withholding category dates (#27489) (#27495)
(cherry picked from commit c53b78e712)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-15 10:30:41 +05:30
Frappe PR Bot
2ae48eeac8 fix: Patch for updating tax withholding category dates (#27489) (#27494)
(cherry picked from commit c53b78e712)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-15 10:29:50 +05:30
Frappe PR Bot
9659acb31e fix: calculate operating cost based on BOM Quantity (#27464) (#27500)
* fix: calculate operating cost based on BOM Quantity

* fix: added test cases

(cherry picked from commit 2e2985e4f1)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-15 01:19:15 +05:30
Frappe PR Bot
e4cbe12a71 fix: calculate operating cost based on BOM Quantity (#27464) (#27501)
* fix: calculate operating cost based on BOM Quantity

* fix: added test cases

(cherry picked from commit 2e2985e4f1)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-15 01:18:56 +05:30
Marica
a3d64c6cb9 Merge pull request #27490 from frappe-pr-bot/backport/version-13-pre-release/27488
fix: Args missing error on changing Price List currency with cart enabled
2021-09-14 19:12:04 +05:30
Marica
52157cc000 Merge pull request #27488 from marination/validate-cart-settings
fix: Args missing error on changing Price List currency with cart enabled
(cherry picked from commit 2a9fbc609d)
2021-09-14 13:14:20 +00:00
Marica
2a9fbc609d Merge pull request #27488 from marination/validate-cart-settings
fix: Args missing error on changing Price List currency with cart enabled
2021-09-14 18:43:15 +05:30
Ankush Menat
4081ecfcd7 chore: sort imports 2021-09-14 18:35:17 +05:30
Marica
e6771f43a7 Merge pull request #27487 from frappe-pr-bot/backport/version-13-pre-release/27486
fix: Handle Excess/Multiple Item Transfer against Job Card
2021-09-14 18:25:02 +05:30
Marica
cf2d1681d8 Merge pull request #27486 from marination/job-card-excess-transfer-hotfix
fix: Handle Excess/Multiple Item Transfer against Job Card
(cherry picked from commit d76e5dcb93)
2021-09-14 12:31:06 +00:00
Marica
d76e5dcb93 Merge pull request #27486 from marination/job-card-excess-transfer-hotfix
fix: Handle Excess/Multiple Item Transfer against Job Card
2021-09-14 17:57:39 +05:30
Frappe PR Bot
3c3f0adbd9 Merge pull request #27481 from deepeshgarg007/gstin_filter_issue_v13 (#27484)
fix: GSTR-1 Reports not showing any data
(cherry picked from commit d5f4160260)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-09-14 17:35:02 +05:30
GangaManoj
b26da043c4 fix: Rename section break 2021-09-14 17:07:58 +05:30
Deepesh Garg
d5f4160260 Merge pull request #27481 from deepeshgarg007/gstin_filter_issue_v13
fix: GSTR-1 Reports not showing any data
2021-09-14 16:59:18 +05:30
Deepesh Garg
7112c6b9d3 Merge pull request #27476 from deepeshgarg007/tds_dates_v13
feat: Validity dates in Tax Withholding Rates
2021-09-14 16:14:36 +05:30
Deepesh Garg
e8411e8bc2 fix: Update fiscal year 2021-09-14 15:32:12 +05:30
Deepesh Garg
49fa06f849 Merge pull request #27473 from deepeshgarg007/tds_validity_v13
feat: Validity dates in Tax Withholding Rates
2021-09-14 15:28:52 +05:30
Deepesh Garg
ca2420f921 fix: Update fiscal year 2021-09-14 15:06:35 +05:30
Deepesh Garg
0b07107144 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into tds_validity_v13 2021-09-14 15:03:30 +05:30
Nabin Hait
10754831c3 fix: Maintain same rate in Stock Ledger until stock become positive (#27227)
* fix: Maintain same rate in Stock Ledger until stock become positive

* fix: Maintain same rate in Stock Ledger until stock become positive
2021-09-14 13:34:36 +05:30
Deepesh Garg
a3db15ccb7 fix: Linting Issues 2021-09-14 12:54:18 +05:30
Deepesh Garg
9fda447dd9 fix: Test Case 2021-09-14 12:54:18 +05:30
Frappe PR Bot
c9e7e72a29 fix(HR): Ignore invalid fields when updating employee details (#27456) (#27474)
(cherry picked from commit 95460d9818)

Co-authored-by: Chillar Anand <chillar@avilpage.com>
2021-09-14 12:48:31 +05:30
Deepesh Garg
0b296e2190 fix: Hardcode fiscal year and posting date 2021-09-14 12:29:00 +05:30
Deepesh Garg
c161daa4be fix: Debug CI 2021-09-14 12:29:00 +05:30
Deepesh Garg
1fa4962723 test: Update test case 2021-09-14 12:28:41 +05:30
Deepesh Garg
9c35e3aa89 fix: Linting and patch fixes 2021-09-14 12:28:41 +05:30
Deepesh Garg
86220e9ed6 fix: Advance TDS test case 2021-09-14 12:28:41 +05:30
Deepesh Garg
b86454e7f4 feat: Validity dates in Tax Withholding Rates 2021-09-14 12:28:36 +05:30
Frappe PR Bot
8fd1aec76c fix: employee advance return through multiple additional salaries (#27470)
* fix: employee advance return through multiple additional salaries (#27438)

* fix: employee advance return through multiple additional salaries

* test: test repay unclaimed amount from salary

* fix: sorting in imports

(cherry picked from commit b98740b44a)

* fix: remove naming rule

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-14 12:01:19 +05:30
Deepesh Garg
9708bf3750 fix: Linting Issues 2021-09-14 12:01:02 +05:30
Deepesh Garg
173ae56aec fix: Test Case 2021-09-14 12:01:02 +05:30
Deepesh Garg
f101241907 fix: Hardcode fiscal year and posting date 2021-09-14 12:00:35 +05:30
Deepesh Garg
0bb16b6b59 fix: Debug CI 2021-09-14 12:00:35 +05:30
Deepesh Garg
7d61181f8b test: Update test case 2021-09-14 12:00:09 +05:30
Deepesh Garg
e8edeecc05 fix: Linting and patch fixes 2021-09-14 12:00:09 +05:30
Deepesh Garg
5c9f2bf4a4 fix: Advance TDS test case 2021-09-14 12:00:09 +05:30
Deepesh Garg
dab0fe56f1 feat: Validity dates in Tax Withholding Rates 2021-09-14 12:00:08 +05:30
Frappe PR Bot
3887a67f7e fix: editable price list rate field in sales transactions (#27455) (#27460)
(cherry picked from commit a5baf909b7)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-09-13 18:48:32 +05:30
Frappe PR Bot
52a99d8da6 fix: editable price list rate field in sales transactions (#27455) (#27461)
(cherry picked from commit a5baf909b7)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-09-13 18:48:05 +05:30
Frappe PR Bot
dc5f7a0c09 fix(Payroll): incorrect component amount calculation if dependent on another payment days based component (#27454)
* fix(Payroll): incorrect component amount calculation if dependent on another payment days based component (#27349)

* fix(Payroll): incorrect component amount calculation if dependent on another payment days based component

* fix: set component amount precision at the end

* fix: consider default amount during taxt calculations

* test: component amount dependent on another payment days based component

* fix: test

(cherry picked from commit bab644a249)

# Conflicts:
#	erpnext/payroll/doctype/salary_slip/test_salary_slip.py

* fix: conflicts in test file

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-13 15:14:28 +05:30
Frappe PR Bot
64796d3029 fix(Payroll): incorrect component amount calculation if dependent on another payment days based component (#27453)
* fix(Payroll): incorrect component amount calculation if dependent on another payment days based component (#27349)

* fix(Payroll): incorrect component amount calculation if dependent on another payment days based component

* fix: set component amount precision at the end

* fix: consider default amount during taxt calculations

* test: component amount dependent on another payment days based component

* fix: test

(cherry picked from commit bab644a249)

# Conflicts:
#	erpnext/payroll/doctype/salary_slip/test_salary_slip.py

* fix: conflicts in test file

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-13 15:13:43 +05:30
Saqib
72d1cf0537 feat: (get_items_from) filter material request item in purchase order (#27452) 2021-09-13 14:01:39 +05:30
Saqib
bb8d90d741 feat: (get_items_from) filter material request item in purchase order (#24725) 2021-09-13 11:46:00 +05:30
Frappe PR Bot
e39db1abe3 revert: "fix: Salary component account filter (#26605)" (#27446) (#27447)
This reverts commit aaea5edbdb.

(cherry picked from commit 5c1f0c98f8)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-13 10:33:28 +05:30
Ankush Menat
71e4230ab0 chore: whitespace/imports 2021-09-13 10:31:00 +05:30
Ankush Menat
5c1f0c98f8 Revert "fix: Salary component account filter (#26605)" (#27446)
This reverts commit aaea5edbdb.
2021-09-13 10:09:01 +05:30
Frappe PR Bot
00c4e346c7 fix(ux): clean invalid fields from variant setting (#27442)
* fix(ux): clean invalid fields from variant setting (#27412)

(cherry picked from commit 6ef879fca2)

# Conflicts:
#	erpnext/stock/doctype/item_variant_settings/item_variant_settings.js

* fix: resolve conflicts

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-12 16:41:31 +05:30
Frappe PR Bot
74fa6fab4c fix(ux): apply proper filtering in stock reports (#27411) (#27443)
* fix(ux): apply proper filtering in stock reports

Stock Balance: apply company filter to warehouse field
Stock Ageing: apply company filter to warehouse field

* fix: unnecessary parens

Co-authored-by: Alan <2.alan.tom@gmail.com>
(cherry picked from commit d743c41b54)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-12 16:41:17 +05:30
Sagar Vora
dd352df168 Merge pull request #27437 from frappe-pr-bot/backport/version-13-hotfix/27433
fix: Template Error due to use of single quote
2021-09-11 17:59:03 +05:30
Sagar Vora
0ecaf23722 fix: Template Error due to use of single quote (#27433)
(cherry picked from commit dae0a1c1d6)
2021-09-11 12:25:27 +00:00
Devin Slauenwhite
becf471a3a fix: fail migration due to None type during v13_0.update_returned_qty_in_pr_dn (#27430)
* fix: fail migration due to None type

* fix: incorrect key: value pair in filter.

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-11 12:22:49 +00:00
rohitwaghchaure
75e108ab81 Merge pull request #27423 from rohitwaghchaure/merge-hotfix-to-pre-release-v13-11-0
chore: Merge branch 'version-13-hotfix' into 'version-13-pre-release' for v13.11.0
2021-09-10 14:17:12 +05:30
Frappe PR Bot
8337ec9fe0 test: basic tests for controllers/queries (bp #27422)
(cherry picked from commit 62fc544280)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-10 13:09:16 +05:30
Ankush Menat
a33de1bdfe chore: remove snyk from dev-dependencies (#27425) 2021-09-10 13:08:06 +05:30
Rohit Waghchaure
135e3b0f09 fix: sider issues 2021-09-10 13:00:30 +05:30
Rohit Waghchaure
c25bc3403d Merge branch 'version-13-hotfix' into merge-hotfix-to-pre-release-v13-11-0 2021-09-10 12:41:54 +05:30
Frappe PR Bot
3b7e981ccd fix: fetch customers and billing email in PSOA (#27418) 2021-09-09 21:31:16 +05:30
Saqib
3cac39c584 fix: pos payment mode selection issue (#27409) (#27417) 2021-09-09 19:36:01 +05:30
Ankush Menat
a6a564c43d chore: whitespace (#27416) 2021-09-09 19:16:21 +05:30
Frappe PR Bot
0950e246c3 refactor: .doc missing and empty row on new doc (#27408) (#27414)
* refactor: .doc missing and empty row on new doc

* fix: let -> const

(cherry picked from commit acdb10377f)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-09-09 19:13:06 +05:30
Marica
ef4b1dba26 Merge pull request #27401 from deepeshgarg007/website_item_patch
fix: Website item patch fixes
2021-09-09 16:57:11 +05:30
Frappe PR Bot
b1eb0c5c75 fix: added Show Remarks checkbox in AR & AP reports (#27374) (#27404)
(cherry picked from commit 3576668638)

Co-authored-by: Anuja Pawar <60467153+Anuja-pawar@users.noreply.github.com>
2021-09-09 14:26:31 +05:30
Deepesh Garg
064ce90e8c Merge pull request #27261 from frappe-pr-bot/backport/version-13-hotfix/27143
feat: Taxjar Integration update
2021-09-09 13:16:01 +05:30
Frappe PR Bot
5126b3f93e fix: job card overlap unknown column jc.employee (#27403) (#27405)
* fix: incorrect query for job card overlap

* test: employee overlap in job cards

* test: simplify/refactor job card tests

(cherry picked from commit 678335f8ac)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-09 12:45:25 +05:30
Frappe PR Bot
81dbf1ed00 fix: added delivery date filters to get sales orders in production plan (#27367) (#27397)
(cherry picked from commit 295020451f)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-09 12:20:49 +05:30
Deepesh Garg
70c5533646 fix: Website item patch fixes 2021-09-09 09:47:18 +05:30
Frappe PR Bot
fea6291399 fix: document naming rule not working for subscription invoices (#27395) 2021-09-08 19:11:47 +05:30
Subin Tom
47c548a070 Merge branch 'version-13-hotfix' into backport/version-13-hotfix/27143 2021-09-08 17:20:20 +05:30
Frappe PR Bot
2d3c036070 fix: auto complete sales order rows in production plan (#27352) (#27396)
* fix: auto complete sales order rows in production plan

* fix: sider

(cherry picked from commit 81d3524d27)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-09-08 16:52:43 +05:30
Frappe PR Bot
30e02f092d fix: General Ledger translation issues (#27298) (#27392)
* fix: remove translations from GL report options

Options need not be translated, their display label gets translated
client side.

* fix: make group by options translatable

* ci: semgrep rule for translated options in report

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>

(cherry picked from commit fa819f2fb0)
2021-09-08 16:41:41 +05:30
Frappe PR Bot
67174ef1b3 fix: scan barcode fields input length (#27390)
* fix: scan barcode fields input length (#27389)

* fix: undo unintentional changes

* fix: scan barcode fields input length

* fix: undo barcode field length change

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>

(cherry picked from commit df3e4ce1c0)
2021-09-08 16:22:35 +05:30
Ganga Manoj
7dce900ff5 Merge branch 'version-13-hotfix' into backport-fix-selling-settings 2021-09-07 20:51:47 +05:30
Saqib
d7e7a5519a fix(SLA): select options for 'Pause SLA On' (#27376) 2021-09-07 18:45:26 +05:30
GangaManoj
d623eac084 fix: Move related fields to the same section 2021-09-07 17:32:01 +05:30
GangaManoj
c128618185 fix: Rename 'Action if Same Rate is Not Maintained' to 'Action if Same Rate is Not Maintained Throughout Sales Cycle' 2021-09-07 17:05:20 +05:30
GangaManoj
d67460bf22 fix: Only display 'Role Allowed to Override Stop Action' if 'Maintain Same Rate Throughout Sales Cycle' is checked 2021-09-07 17:04:29 +05:30
GangaManoj
7f1d611b47 fix: Remove redundant description 2021-09-07 17:04:04 +05:30
Marica
4727bf5806 Merge pull request #27381 from frappe-pr-bot/backport/version-13-hotfix/27358
fix: Check if Item is serialised before trying to fetch SN and set SO in it
2021-09-07 15:11:53 +05:30
Marica
29e0d315db Merge branch 'version-13-hotfix' into backport/version-13-hotfix/27358 2021-09-07 15:01:13 +05:30
Frappe PR Bot
5e97d1b620 ci: fix docs checker for wiki based docs (#27380) (#27382)
(cherry picked from commit 5596988c94)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-07 14:57:37 +05:30
Marica
255155c5b8 fix: Check if Item is serialised before trying to fetch SN and set SO in it (#27358)
(cherry picked from commit 61a1356109)
2021-09-07 09:13:34 +00:00
Rohit Waghchaure
210fc4481a Merge branch 'version-13-pre-release' into version-13 2021-09-07 13:05:13 +05:30
Rohit Waghchaure
4f3e2240b8 bumped to version 13.10.2 2021-09-07 13:25:13 +05:50
Frappe PR Bot
ede188d138 fix: missed to add voucher_type, voucher_no to get GL Entries (#27377)
* fix: missed to add voucher_type, voucher_no to get GL Entries (#27368)

* fix: missed to add voucher_type, voucher_no to get gl entries

* test: get voucherwise details utilities

# Conflicts:
#	erpnext/accounts/test/test_utils.py

* fix: resolve conflicts

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>

(cherry picked from commit 058d98342a)
2021-09-07 13:00:40 +05:30
Frappe PR Bot
454630f2bd fix: missed to add voucher_type, voucher_no to get GL Entries (#27368) (#27378)
* fix: missed to add voucher_type, voucher_no to get gl entries

* test: get voucherwise details utilities


Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>

(cherry picked from commit 058d98342a)
2021-09-07 13:00:18 +05:30
Saqib
40fa4cf77c fix: 'NoneType' has no attribute 'name' (#27375) 2021-09-07 12:13:22 +05:30
Ganga Manoj
e8eb137cd4 fix: update Selling Settings (#27364) 2021-09-07 11:42:26 +05:30
Frappe PR Bot
821d55b0e0 fix: employee remider settings (#27365) (#27366)
(cherry picked from commit 88c9fe35bd)

Co-authored-by: Anupam Kumar <anupamvns0099@gmail.com>
2021-09-07 00:20:38 +05:30
Rohit Waghchaure
f28cb55d0f Merge branch 'version-13-pre-release' into version-13 2021-09-06 23:33:19 +05:30
Rohit Waghchaure
adb07ebe09 bumped to version 13.10.1 2021-09-06 23:53:19 +05:50
Frappe PR Bot
2565b1fb33 fix: patch failure for vat audit report (#27355) (#27356)
(cherry picked from commit 14b01619de)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-06 13:51:27 +05:30
Frappe PR Bot
1708e8b7ce fix: patch failure for vat audit report (#27355) (#27357)
(cherry picked from commit 14b01619de)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-06 13:51:18 +05:30
Frappe PR Bot
61e71d45fa fix: Dont fetch Stopped/Cancelled MRs in Stock Entry Get Items dialog (#27326) (#27354)
(cherry picked from commit 0f2a52078c)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-09-06 13:34:50 +05:30
Chillar Anand
05e06e8455 fix(healthcare): Added item price to default price list (#27353)
Co-authored-by: Dany Robert <rtdany10@gmail.com>
2021-09-06 13:27:28 +05:30
Deepesh Garg
6bab2b0f86 Merge pull request #27344 from frappe-pr-bot/backport/version-13-hotfix/27316
fix: Presentation currency conversion in reports
2021-09-06 10:28:23 +05:30
Deepesh Garg
1ff2562f98 fix: Presentation currency conversion in reports (#27316)
(cherry picked from commit ceaa804f04)
2021-09-05 11:52:39 +00:00
Frappe PR Bot
e9da4ed34d fix: manually added weight per unit reset to zero after save (#27330) (#27338)
(cherry picked from commit 7b4a65484a)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-09-03 22:54:49 +05:30
Marica
aee2e04a45 Merge pull request #27332 from marination/paging-discount-fix
fix: Paging and Discount filter
2021-09-03 19:11:58 +05:30
Ankush Menat
d3330cec87 chore: ignore import cleanup commit in blame 2021-09-03 19:00:47 +05:30
Chillar Anand
4b2be2999f chore: Cleanup imports (#27320)
* chore: Added isort to pre-commit config

* chore: Sort imports with isort

* chore: Remove imports with pycln

* chore: Sort imports with isort

* chore: Fix import issues

* chore: Fix sider issues

* chore: linting

* chore: linting / sorting import

from ecommerce refactor merge

* ci: dont allow unused imports

* chore: sort / clean ecommerce imports

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-03 18:57:43 +05:30
marination
477870eb78 test: Product Discounts 2021-09-03 18:51:56 +05:30
marination
a32bb25407 fix: Linter (whitespace) 2021-09-03 18:04:53 +05:30
marination
99ec4cc7fe fix: Paging and Discount filter
- Convert incoming api args to frappe dict
- Change discount filter condition due to reversal of behaviour
2021-09-03 17:50:14 +05:30
Frappe PR Bot
910b9bc3f4 fix: braintree payment processed twice (#27327) 2021-09-03 14:45:12 +05:30
Suraj Shetty
513822488e Merge pull request #24603 from marination/e-commerce-refactor 2021-09-03 14:07:52 +05:30
Deepesh Garg
1a17f0f844 Merge pull request #26129 from deepeshgarg007/gstr_1_cdnr_unregistered_json
feat: CDNR Unreg json generation
2021-09-03 13:53:35 +05:30
Marica
853f479f58 Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-09-03 13:47:30 +05:30
marination
9d05b2ebfb test: Set Price list and company in data engine test setup 2021-09-03 13:46:28 +05:30
Deepesh Garg
6a9dcf2558 fix: Patch error and tests 2021-09-03 12:40:13 +05:30
Frappe PR Bot
96aee284d2 fix: south africa vat patch failure (#27324)
* fix: south africa vat patch failure (#27323)

reload doc is necessary on new doctypes

(cherry picked from commit d1fe060e4a)

# Conflicts:
#	erpnext/patches/v13_0/add_custom_field_for_south_africa.py

* fix: resolve conflicts

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-03 12:29:27 +05:30
Saqib
0cc301a82b Merge pull request #27319 from GangaManoj/backport-product-bundle-handling
feat: Improve Product Bundle handling
2021-09-03 12:28:51 +05:30
Frappe PR Bot
0228db1e61 fix: south africa vat patch failure (#27325)
* fix: south africa vat patch failure (#27323)

reload doc is necessary on new doctypes

(cherry picked from commit d1fe060e4a)

# Conflicts:
#	erpnext/patches/v13_0/add_custom_field_for_south_africa.py

* fix: resolve conflicts

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-03 12:26:41 +05:30
Deepesh Garg
37e7b3e3ac fix: Patch 2021-09-03 11:18:24 +05:30
Saqib
115fb944c2 fix: undo unintentional changes 2021-09-03 11:06:20 +05:30
Deepesh Garg
20c7237de6 fix: Patch and linting errors 2021-09-02 22:01:24 +05:30
GangaManoj
debffbfb2d fix: Trim trailing whitespaces 2021-09-02 20:53:53 +05:30
GangaManoj
17bf32d8dc fix: Add Product Bundle field in Items table 2021-09-02 20:04:51 +05:30
GangaManoj
758a23eff7 fix: Remove Rate from field_no_map 2021-09-02 20:04:25 +05:30
GangaManoj
b5ef69dd34 fix: Set Product Bundle's Delivery Dates in SO as Bundle Items' Delivery Dates in PO 2021-09-02 20:04:25 +05:30
GangaManoj
4538071e0d fix: Remove Add Row and Delete Row options for Packed Items table 2021-09-02 20:04:25 +05:30
GangaManoj
361605a2b6 fix: Uncheck read-only for Packed Items table 2021-09-02 20:04:25 +05:30
GangaManoj
c757198d8b fix: Make Rate read-only by default 2021-09-02 20:04:25 +05:30
GangaManoj
39ff46afa8 fix: Test Product Bundle price calculation 2021-09-02 20:04:25 +05:30
GangaManoj
9e399ecc87 fix: Test if Product Bundles are mapped properly on creating a Sales Order 2021-09-02 20:04:24 +05:30
GangaManoj
d0b4aa7504 fix: Map Packed Items to Items table of PO 2021-09-02 20:03:52 +05:30
GangaManoj
890705221e fix: Replace Product Bundles in the Items table with their child items 2021-09-02 20:03:52 +05:30
GangaManoj
3c0883d69b fix: Add Product Bundle field in Items table 2021-09-02 20:03:52 +05:30
GangaManoj
4ca150f4ca fix: Remove Bundle Items table 2021-09-02 20:03:52 +05:30
GangaManoj
18680990bf fix: Display Packed/Bundle Items table only if it exists 2021-09-02 20:03:50 +05:30
GangaManoj
f2c4c1dc0e fix: Enable Print Hide for Bundle Items 2021-09-02 20:03:27 +05:30
GangaManoj
fd8482757e fix: Move Packed Items table right below the Items table 2021-09-02 20:02:36 +05:30
GangaManoj
34546d02be fix: Disable Add Row and Delete Row for Bundle Items 2021-09-02 20:02:36 +05:30
GangaManoj
6bfd5daba0 fix: Create separate section for Bundle Items 2021-09-02 20:02:35 +05:30
GangaManoj
2d9138ab64 feat: Populate Bundle Items table 2021-09-02 20:02:35 +05:30
GangaManoj
f10fdb4eeb feat: Add Bundle Items table 2021-09-02 20:02:35 +05:30
GangaManoj
ba73df161d fix: Make Sales Order field editable so the PO can be linked with an SO later 2021-09-02 20:02:35 +05:30
GangaManoj
bb7ad885da fix: Hide Rate of Bundle Items while printing 2021-09-02 20:02:35 +05:30
GangaManoj
288d0191ab fix: Make Rate column read only by default 2021-09-02 20:02:35 +05:30
GangaManoj
b9a33eca97 fix: Display Bundle Items right below the Items table 2021-09-02 20:02:35 +05:30
GangaManoj
1ecec7154b fix: Enable Fetch If Empty for Rate 2021-09-02 20:02:35 +05:30
GangaManoj
2b56e62805 fix: Calculate Product Bundle price based on the prices of its child items 2021-09-02 20:02:35 +05:30
GangaManoj
084b27bb34 fix: Return if there are no Items 2021-09-02 20:02:35 +05:30
GangaManoj
9039effd69 fix: Get Bundle Items 2021-09-02 20:02:33 +05:30
GangaManoj
3e177ede13 fix: Remove comments 2021-09-02 20:01:06 +05:30
GangaManoj
fd8657d2f7 fix: Get data when grouped by invoice and otherwise 2021-09-02 20:00:49 +05:30
GangaManoj
498377fbbc fix: Display only the Invoice rows in bold 2021-09-02 19:59:44 +05:30
GangaManoj
7ef5952176 fix: Remove base_rate and buying_rate for Invoice rows 2021-09-02 19:58:47 +05:30
GangaManoj
8478a83148 fix: Only update Product Bundle prices if 'Calculate Product Bundle Price based on Child Items' Rates' is enabled 2021-09-02 19:58:47 +05:30
GangaManoj
fc9557bbb6 fix: Calculate total buying_amount for each invoice 2021-09-02 19:58:47 +05:30
GangaManoj
b14a87eb2b fix: Fetch bundle item details 2021-09-02 19:58:44 +05:30
GangaManoj
e52b0612fc fix: Fetch base_net_total for each Invoice 2021-09-02 19:58:17 +05:30
GangaManoj
ae40c2ad34 fix: Remove qty from Sales Invoice rows 2021-09-02 19:58:15 +05:30
GangaManoj
d730f0e092 fix: Make Rate editable if editable_bundle_item_rates is checked 2021-09-02 19:56:55 +05:30
GangaManoj
39a3ffcb56 fix: Make fieldname more concise 2021-09-02 19:56:53 +05:30
GangaManoj
80b3a032fb fix: Add checkbox to enable calculation of Product Bundle price based on child Items' rates 2021-09-02 19:52:18 +05:30
GangaManoj
58ef1e30a5 fix: Update Product Bundle rate based on its updated amount 2021-09-02 19:51:16 +05:30
GangaManoj
c37dc7ca33 fix: Update Product Bundle price based on the rates of its child Items 2021-09-02 19:51:16 +05:30
GangaManoj
0967d226ed fix: Add editable Rate column 2021-09-02 19:51:16 +05:30
GangaManoj
272ca96d2c fix: Populate Bundle Items table 2021-09-02 19:51:16 +05:30
GangaManoj
3b23341d35 fix: Add Bundle Items table 2021-09-02 19:51:16 +05:30
GangaManoj
316b65face fix: Calculate total buying_amount and gross profit for each invoice 2021-09-02 19:51:16 +05:30
GangaManoj
0fa13fb3f1 fix: Remove Item Code and Item Name columns 2021-09-02 19:51:15 +05:30
GangaManoj
55781171cc fix: Display Items in the format Item Code: Item Name 2021-09-02 19:51:14 +05:30
GangaManoj
6ab58c7faf fix: Add items belonging to Product Bundles as children 2021-09-02 19:50:20 +05:30
GangaManoj
cacecbbaa5 fix: Set initial_depth to 3 2021-09-02 19:50:19 +05:30
GangaManoj
d2d9f7e758 fix: Assign indent and parent_invoice 2021-09-02 19:50:19 +05:30
GangaManoj
416d1ceb6f fix: Make Invoice row bold 2021-09-02 19:50:19 +05:30
GangaManoj
fdfae33ff4 fix: Display items as descendants of invoices 2021-09-02 19:50:19 +05:30
GangaManoj
1f147e5b9e fix: Display data in tree form 2021-09-02 19:50:19 +05:30
GangaManoj
7a7665d1d0 fix: Return data as dict if the report is grouped by Invoice 2021-09-02 19:50:16 +05:30
Deepesh Garg
20f1b74024 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into gstr_1_cdnr_unregistered_json 2021-09-02 19:09:48 +05:30
Deepesh Garg
f9a1b6682c fix: Linting issues 2021-09-02 19:08:48 +05:30
Frappe PR Bot
0fd037eb6a fix: minor linting issues (#27314) (#27315)
* fix: syntax error in gratuity

* fix: unpacking None into three variables

* fix: unexpected kwarg for delete_accounting_dimensions

(cherry picked from commit eec40513be)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-09-02 18:28:41 +05:30
marination
10a450cb2c fix: Failing search util import and patch
- Use simple function import instead of global variable to check if field is valid to index
- Commit after every 20 items in patch to  create web items from items
2021-09-02 14:30:37 +05:30
marination
c5efb6dc35 feat: (minor) Backorder indicator and fixed inconsistencies
- Checkbox in website item to indicate if item is on backorder
- Indicator on listing on full page if availbale on backorder.
- fix: Allow provision to add any valid field from Website Item in Search Index
- fix: Settings filter fields are as per Item, make as per Website Item
- "Add to quote/ Go to Quote" if cart checkout is disabled
2021-09-02 14:07:59 +05:30
Suraj Shetty
258efd5949 Merge pull request #27311 from surajshetty3416/fix-remove-all-import-version-13-hotfix 2021-09-02 13:22:14 +05:30
Suraj Shetty
6751290988 fix: Use remove_all from file_manager 2021-09-02 13:20:34 +05:30
Marica
7c09a79dd4 Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-09-02 10:25:14 +05:30
Devin Slauenwhite
e10fede1ae fix: track salary slip ytd gross salary. (#27215)
* fix: track salary slip ytd gross salary.

* fix: ytd gross salary unique label

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
Co-authored-by: Jannat Patel <31363128+pateljannat@users.noreply.github.com>
2021-09-02 09:40:28 +05:30
Anupam Kumar
6d7ecb9290 Merge pull request #27291 from anupamvs/comany-name-field-issue
fix: mapping for company name lead->contact
2021-09-02 09:33:00 +05:30
Frappe PR Bot
cf4ff46c1e fix: Org Chart fixes (#27290) (#27305)
* fix(org chart): multiple root nodes not expanding on clicking Expand All

* fix: unstable filter inserts duplicate nodes

(cherry picked from commit f828d853e3)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-09-01 23:53:23 +05:30
Rohit Waghchaure
6440e4f970 Merge branch 'version-13-pre-release' into version-13 2021-09-01 22:33:12 +05:30
Rohit Waghchaure
702eea3b54 bumped to version 13.10.0 2021-09-01 22:53:11 +05:50
rohitwaghchaure
e362e23941 Merge pull request #27303 from rohitwaghchaure/chnage-log-for-v13-10-0
chore: change log for v13.10.0
2021-09-01 22:27:45 +05:30
Rohit Waghchaure
68482b223f chore: change log for v13.10.0 2021-09-01 22:26:41 +05:30
Ankush Menat
9d0b5f1a0d Merge pull request #27299 from ankush/strict_linting_v13
chore: cleanup linting errors and introduce strict linting checks
2021-09-01 21:16:47 +05:30
Ankush Menat
5a9750c144 Merge pull request #27296 from frappe-pr-bot/backport/version-13-hotfix/27278
fix: production plan UX and validation message
2021-09-01 20:38:16 +05:30
Ankush Menat
4069f6c9ac fix: remove duplicate code 2021-09-01 20:27:30 +05:30
Ankush Menat
4fe475b93d chore: ignore whitespace changes in blame 2021-09-01 20:24:30 +05:30
Ankush Menat
f0bcb753fb chore: whitespace trimming 2021-09-01 20:23:48 +05:30
Ankush Menat
77aef302e4 ci: add strict config for flake8 2021-09-01 20:22:00 +05:30
Ankush Menat
b92310eb35 ci: add pre-commit config 2021-09-01 20:21:52 +05:30
Ankush Menat
9ad5de2e57 fix: remove unused format from query
doctype is not used in query and parent alone is enough to identify
packed items.
2021-09-01 20:21:21 +05:30
Ankush Menat
187c3f9630 fix: invalid escape sequences in regex 2021-09-01 20:20:32 +05:30
Ankush Menat
1c63cbb1e4 fix: remove duplicate imports 2021-09-01 20:18:45 +05:30
Ankush Menat
0519b59aa9 fix: undefined variables 2021-09-01 20:16:38 +05:30
Ankush Menat
81391ed54f refactor: itemgetter instead of assigned lambda 2021-09-01 20:16:31 +05:30
Ankush Menat
8746466412 chore: correct indentation 2021-09-01 20:16:24 +05:30
Ankush Menat
76f1ed624a fix: remove bare excepts 2021-09-01 20:15:54 +05:30
rohitwaghchaure
71e1615925 fix: production plan UX and validation message (#27278)
(cherry picked from commit 2a8cd05b44)
2021-09-01 13:49:52 +00:00
Marica
331ec13012 Merge pull request #27294 from frappe-pr-bot/backport/version-13-hotfix/27293
fix: Zero division error while fetching unconsumed materials
2021-09-01 19:11:26 +05:30
Marica
d382c3c101 fix: Zero division error while fetching unconsumed materials (#27293)
`

(cherry picked from commit 9506c14d35)
2021-09-01 13:20:16 +00:00
Ganga Manoj
c4bda6374b fix: calculate first_response_time based on working hours (#26520) 2021-09-01 18:25:36 +05:30
Anupam
5518900af9 fix: mapping for company name lead->contact 2021-09-01 17:45:46 +05:30
Anuja Pawar
d81e837667 refactor: payment reconciliation tool (#27284) 2021-09-01 15:20:37 +05:30
marination
7ab858a9b0 Chore: Miscellaneous UI review changes
- Added bg (variable) to pages, card space separation visible
- Removed `show brand line` in settings, shown by default
- Re-arranged settings by importance
- View toggling primary colour is grey
- Only populate recent searches on successful search
- Hit only one server side api, once while searching
- List view primary button float right
- Discounts takes upper limit eg. 10% and below
- Navbar icons only wiggle on qty increase in cart/wishlist
- Pay button in SO portal
- Remove bottom white space below item full page image, min-height fits to content
- List view vertical space between heading and item code
- Empty offer subtitle handled
2021-09-01 14:57:50 +05:30
Frappe PR Bot
1f1841d232 ci(semgrep): add translation checks for report labels (#27280) (#27286)
* ci(semgrep): add translation checks for report labels

* refactor: shift report tests to it's own yml

path can't be applied on a test id basis

* ci: ignore regional report in translation checks

[skip ci]

(cherry picked from commit 72ece75b11)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-09-01 14:27:00 +05:30
Frappe PR Bot
883e1394ba fix: translate labels (#27282) (#27283)
[skip ci]

(cherry picked from commit 9dc0843cbd)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-09-01 13:00:48 +05:30
Deepesh Garg
22dc317f20 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into gstr_1_cdnr_unregistered_json 2021-09-01 10:23:25 +05:30
Subin Tom
95208ab274 Conflict fixes 2021-09-01 10:08:30 +05:30
Frappe PR Bot
0f00bcda34 fix: Healthcare Service Unit fixes (#27273) (#27275)
* fix: validate service unit setup against practitioner schedule

* fix: service unit properties getting overwritten

(cherry picked from commit ef76f62bc1)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-31 21:18:34 +05:30
Frappe PR Bot
c31bf155f0 fix: Healthcare Service Unit fixes (#27273) (#27274)
* fix: validate service unit setup against practitioner schedule

* fix: service unit properties getting overwritten

(cherry picked from commit ef76f62bc1)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-31 21:18:22 +05:30
Frappe PR Bot
1063d85569 fix: Correct company address not getting copied from Purchase Order to Invoice (#27217) (#27235)
* fix: Correct company adderess not getting copied from Purchase Order to Invoice

* fix: Linting issues

(cherry picked from commit fd467e6d32)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-31 20:11:21 +05:30
Frappe PR Bot
1b338d678a fix: revert "refactor: simplify initialize_previous_data" (#27270) (#27272)
This reverts commit 2f5624e588.

(cherry picked from commit c1d986a0c6)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-31 19:46:25 +05:30
Frappe PR Bot
d641dd68d4 fix: revert "refactor: simplify initialize_previous_data" (#27270) (#27271)
This reverts commit 2f5624e588.

(cherry picked from commit c1d986a0c6)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-31 19:46:13 +05:30
Subin Tom
634abb783f resolving conflicts 2021-08-31 19:27:48 +05:30
Frappe PR Bot
155df936cd Revert "fix: add child item groups into the filters (#26997)" (#27266) (#27268)
This reverts commit c60d5523bc.

(cherry picked from commit 763450dcf8)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-31 19:13:04 +05:30
Frappe PR Bot
d5d193b015 Revert "fix: add child item groups into the filters (#26997)" (#27266) (#27269)
This reverts commit c60d5523bc.

(cherry picked from commit 763450dcf8)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-31 19:12:24 +05:30
Frappe PR Bot
891bccf2c1 fix(minor): Incorrect unallocated amount on type receive (#27262) (#27264)
(cherry picked from commit c37cec9b9d)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-08-31 18:53:49 +05:30
Frappe PR Bot
0c4f29edcf fix(minor): Incorrect unallocated amount on type receive (#27262) (#27263)
(cherry picked from commit c37cec9b9d)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-08-31 18:53:30 +05:30
Subin Tom
ead1397a75 feat: Taxjar Integration update (#27143)
* feat: Taxjar Integration update

* added taxable_amount,taxable_amount fields in setup.py

* Update taxjar_integration.py

Sider issues fix

* Sider issues fix

* Sider issues fix

* sider issue fix: unused import

* sider issue fix

* Update erpnext/erpnext_integrations/taxjar_integration.py

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>

* Removed permission for 'All'

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit 7004944cc0)

# Conflicts:
#	erpnext/patches.txt
2021-08-31 13:04:37 +00:00
Sun Howwrongbum
63cf012c24 fix: pos payment methods not setting rounded_total (#27251) 2021-08-31 18:26:20 +05:30
skjbulcher
a1e5a64a66 fix: payment terms on Sales Order when Invoice Portion field is empty 2021-08-31 18:24:12 +05:30
Frappe PR Bot
2dc2dac56a fix: email digest original_user issue (#27191) (#27256)
(cherry picked from commit 48f2e5ac1d)

Co-authored-by: Jannat Patel <31363128+pateljannat@users.noreply.github.com>
2021-08-31 18:08:33 +05:30
Raffael Meyer
366eb86fdf feat: color and leave type in leave application calendar (#27246)
* feat: color and leave type in leave application calendar

* fix: sider + use cstring
2021-08-31 17:00:44 +05:30
Alan
c1354047a3 fix: pass labels through translation function (#27254) 2021-08-31 15:16:50 +05:30
Frappe PR Bot
45059571f0 fix(payroll): Fixed issue with accessing last salary slip for new employee (#27247) (#27253)
(cherry picked from commit 88d849320f)

Co-authored-by: Chillar Anand <anand21nanda@gmail.com>
2021-08-31 14:46:37 +05:30
Frappe PR Bot
a3c12939ed fix(test): first check for org chart always fails (#27250)
* fix(test): first check for org chart always fails (#27249)

(cherry picked from commit 52dd326f22)

# Conflicts:
#	cypress/integration/test_organizational_chart_desktop.js

* fix: conflict

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-31 14:13:23 +05:30
Frappe PR Bot
fb8c917b97 fix: LTV ratio comparison (#27207) (#27212)
(cherry picked from commit f5cdbf161d)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-08-31 11:46:12 +05:30
Frappe PR Bot
f20913fb69 fix: Correct company address not getting copied from Purchase Order to Invoice (#27217) (#27234)
* fix: Correct company adderess not getting copied from Purchase Order to Invoice

* fix: Linting issues

(cherry picked from commit fd467e6d32)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-08-31 11:08:58 +05:30
marination
fd44b6b340 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-08-30 22:30:02 +05:30
Frappe PR Bot
bafc9ddde4 fix: patches were breaking during migration (#27213) (#27241)
* fix: patches were breaking during migration (#27200)

* fix: patches were breaking during migrating

* fix: patches were breaking during migration

(cherry picked from commit 7433757489)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflicts

Co-authored-by: Shadrak Gurupnor <30501401+shadrak98@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
(cherry picked from commit aa04051416)
2021-08-30 19:04:58 +05:30
Frappe PR Bot
aa04051416 fix: patches were breaking during migration (#27213)
* fix: patches were breaking during migration (#27200)

* fix: patches were breaking during migrating

* fix: patches were breaking during migration

(cherry picked from commit 7433757489)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflicts

Co-authored-by: Shadrak Gurupnor <30501401+shadrak98@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-30 18:51:10 +05:30
Frappe PR Bot
d9b9888ad5 feat: (consistency) Add Primary Address and Contact section in Supplier (#27232) (#27233)
* feat: (consistency) Add Primary Address and Contact section in Supplier

- The same is present in customer and is inconsistent with supplier
- Helps quickly create primary address and contact via quick entry

* fix: Popup stale build and data consistency

- Include `supplier_quick_entry.js` in erpnext.bundle.js
- Create primary supplier address on update
- Set newly created address (quick entry)  in Supplier and Customer
- Clear address set in supplier and customer on delete (dependency)

* fix: Indentation and removed f-strings

- Sider: fixed indentation in js
- Dont use f-strings in queries

(cherry picked from commit 3d87d9f1d3)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-08-30 18:49:40 +05:30
Frappe PR Bot
076e8e9da0 fix: Stock Ageing report issues for serialized items (#27228) (#27239)
* fix: incorrect calculation in get_range_age

* fix: remove serial numbers not in stock from fifo_queue

* refactor: make serial_no condition explicit

* refactor: reduce code duplication


Co-authored-by: Dany Robert <rtdany10@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>

(cherry picked from commit 5fd04101d4)
2021-08-30 18:35:52 +05:30
Frappe PR Bot
03dcecff67 ci: use node action instead of apt (#27226) (#27237)
* ci: use node action instead of apt (#27220)

(cherry picked from commit e5e00700e5)

* ci: keep python version 3.6 for v13

* ci: use node v12

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
(cherry picked from commit dc948cab3e)
2021-08-30 18:07:05 +05:30
Frappe PR Bot
a0cf396712 fix: expense claim reimbursed amount update (#27204) (#27229)
(cherry picked from commit 9cb642238f)

Co-authored-by: Subin Tom <36098155+nemesis189@users.noreply.github.com>
2021-08-30 17:54:57 +05:30
Marica
3d87d9f1d3 feat: (consistency) Add Primary Address and Contact section in Supplier (#27232)
* feat: (consistency) Add Primary Address and Contact section in Supplier

- The same is present in customer and is inconsistent with supplier
- Helps quickly create primary address and contact via quick entry

* fix: Popup stale build and data consistency

- Include `supplier_quick_entry.js` in erpnext.bundle.js
- Create primary supplier address on update
- Set newly created address (quick entry)  in Supplier and Customer
- Clear address set in supplier and customer on delete (dependency)

* fix: Indentation and removed f-strings

- Sider: fixed indentation in js
- Dont use f-strings in queries
2021-08-30 16:56:31 +05:30
Frappe PR Bot
b2d3b8a5ff fix: replace cur_frm with frm (bp #27210)
(cherry picked from commit 327071cb90)

Co-authored-by: François de Ryckel <f.deryckel@gmail.com>
2021-08-30 15:46:28 +05:30
Frappe PR Bot
dc948cab3e ci: use node action instead of apt (#27226)
* ci: use node action instead of apt (#27220)

(cherry picked from commit e5e00700e5)

* ci: keep python version 3.6 for v13

* ci: use node v12

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-30 12:32:43 +05:30
Saqib
f71ff830ef fix: remove non-existent method call in hooks (#27224) 2021-08-30 11:49:43 +05:30
Saqib
085585cbe2 fix: remove non-existent method call in hooks (#27223) 2021-08-30 11:44:26 +05:30
Frappe PR Bot
ee76032fca fix: patches were breaking while migrating (#27206)
* fix: patches were breaking while migrating (#27195)

* fix: patches were breaking while migrating

* fix: Removed duplicate function

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
(cherry picked from commit 17e0fa7a8b)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflicts

Co-authored-by: Shadrak Gurupnor <30501401+shadrak98@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-28 14:54:14 +05:30
Frappe PR Bot
d88346c6cd fix: patches were breaking while migrating (#27205)
* fix: patches were breaking while migrating (#27195)

* fix: patches were breaking while migrating

* fix: Removed duplicate function

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
(cherry picked from commit 17e0fa7a8b)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflicts

Co-authored-by: Shadrak Gurupnor <30501401+shadrak98@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-28 14:53:59 +05:30
Frappe PR Bot
1e97f87c5b feat(healthcare): Added Treatment Plan Template feature (#27185)
* feat(healthcare): Added Treatment Plan Template feature (#26557)

* feat: Added doctypes for treatment plan template

* feat: Added child doctype

* feat: Added validations for patient age

* chore: Clean up treatment plan template

* fix: Limit plan items to templates

* Added multiselectdialogbox for treatment plan template

* Add template name as autoname

* Clean up code

* Cleanup lint issues

* Clean up code

* Added tests for tpt filters

* Added test records

* Fix order of fields

* Added tests for care plan template

* Added age property for patient

* Clean up code

* Clean up list view

* Clean up code

* Fix lint issues

* Clean up test records

* Code cleanup

no-docs

* chore: Code cleanup

* chore: Use ORM instead of raw sql

* fix: Make treatment plan item fields mandatory

* fix: Added healthcare roles in permissions rules

* fix: Added filters for symptoms, diagnosis

* fix: Show applicable treatment plans button only if patient is present

* fix: Fix key error issues

* fix: Fix issues with filters in plan templates

* chore: Fix age filters

* refactor: appending treatment plan items

* fix: treatment plan test

Co-authored-by: Jannat Patel <31363128+pateljannat@users.noreply.github.com>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
(cherry picked from commit f1b77360ee)

# Conflicts:
#	erpnext/healthcare/doctype/patient/patient.py

* chore: Fix merge conflicts

Co-authored-by: Chillar Anand <anand21nanda@gmail.com>
2021-08-27 16:18:34 +05:30
Frappe PR Bot
c4a845d29b fix: period closing voucher tests (#27198) (#27199)
(cherry picked from commit 987746592c)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-08-27 16:15:57 +05:30
Nabin Hait
1b3ff3a8f3 Merge branch 'alyf-de-si_total_billing_hours_v13' into version-13-hotfix 2021-08-27 15:53:52 +05:30
Nabin Hait
8547cb5448 fix: merge conflict 2021-08-27 15:53:32 +05:30
Frappe PR Bot
0767d2dac2 fix: v13 migration fails due to missing reload_doc (#27192) (#27194)
closes #25948

(cherry picked from commit 1eb2526d0b)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-27 12:59:00 +05:30
Ankush Menat
1eb2526d0b fix: v13 migration fails due to missing reload_doc (#27192)
closes #25948
2021-08-27 11:24:38 +05:30
Frappe PR Bot
64fab5b7d1 fix: operation time auto set to zero (#27190)
* fix: operation time auto set to zero (#27188)

(cherry picked from commit e6799d78ef)

# Conflicts:
#	erpnext/patches.txt

* fix: conflicts

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-08-27 11:02:44 +05:30
Frappe PR Bot
85fe755f89 fix: operation time auto set to zero (#27189)
* fix: operation time auto set to zero (#27188)

(cherry picked from commit e6799d78ef)

# Conflicts:
#	erpnext/patches.txt

* Update patches.txt

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-08-27 11:02:37 +05:30
Frappe PR Bot
03039b9e00 fix: use Stripe's Price API for plan-price information (#27183)
* fix: use Stripe's Price API for plan-price information (#26107)

* fix: use Stripe's new Plan API for price information

* patch: use inbuilt function to rename field

* fix: patch call

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
(cherry picked from commit 16eed07a0f)

# Conflicts:
#	erpnext/patches.txt

* fix: resolve conflicts

Co-authored-by: Rohan <Alchez@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-27 10:45:34 +05:30
Deepesh Garg
21d5b3cf4d fix: Base amount in tax GL Entry 2021-08-26 23:53:18 +05:30
Frappe PR Bot
25305cbeb3 fix: fetch from more than one sales order in Maintenance Visit (#26924) (#27187)
* [fix] #26336

* fix(ux): make customer field reqd for fetching SO

Co-authored-by: Pawan Mehta <mehtapawan007@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>

(cherry picked from commit db69d1dc00)
2021-08-26 23:03:20 +05:30
Richard Case
69d88a9212 fix: Production Plan: load document defaults for plan items & remove name column from listview (#26584) 2021-08-26 21:52:16 +05:30
Frappe PR Bot
485b55a799 fix: Pricing Rule on Transaction Based on Coupon (#26949) (#27182)
(cherry picked from commit f91faac7cd)

Co-authored-by: Lovin Maxwell <lovinmaxwell@gmail.com>
2021-08-26 21:33:20 +05:30
Frappe PR Bot
8dae084f23 chore: remove deprecated and empty QUnit tests (#27179) (#27181)
* chore: remove deprecated and empty QUnit tests

* ci: fix UI test config

Testing library was added on Frappe, in order to reuse command testing
library has to be installed during setup process.

(cherry picked from commit ae55eab599)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-26 21:08:08 +05:30
marination
d3702947b8 fix: Sider and CI
- Incorrect path and Settings in price_list.py import due to merge
- Extra space removed in website_item.py
- Changed client side namespace to `erpnext.e_commerce.*`
2021-08-26 20:58:13 +05:30
Saqib
dd1aa5559a feat: depreciate Asset after sale (#27168) 2021-08-26 20:55:22 +05:30
Frappe PR Bot
a9e78e2d3a fix(ux): hide irrelevant fields for asset items (#26274) (#27180)
(cherry picked from commit a9852a5483)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-26 20:12:26 +05:30
Ganga Manoj
6d28507def feat: Handle Asset on Issuing Credit Note (#26519)
* fix(Sales Invoice): Let invoice be created for Sold Assets if it's a return invoice

* fix(Sales Invoice): Print appropriate message if item.asset is missing when the Item is a Fixed Asset

* fix(Sales Invoice): Fix GL Entry creation for Return Invoices linked with Assets

* fix(Sales Invoice): Print appropriate message if Asset isn't specified when the Item is a Fixed Asset

* fix(Sales Invoice): Let invoice be created for Sold Assets if it's a return invoice

* fix(Sales Invoice): Reset disposal_date on returning the Asset

* fix: Rename get_gl_entries_on_asset_movement to get_gl_entries_on_asset_disposal_and_regain

* fix: Make functions more readable

* fix: Let create_item() make items that are fixed assets

* fix: Test GL Entries made when an Asset is returned

* fix: Create asset data

* fix: Test

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
2021-08-26 20:11:18 +05:30
Frappe PR Bot
31561c3f9a fix: cannot reconcile bank transactions against internal transfer payment entries (#27148)
* fix: cannot reconcile bank transactions against internal transfer payment entries (#26932)

* fix: Only set Clearance Date for Payment Entries of type Internal Transfer if both Transactions have been reconciled

* fix: Reset clearance_date for intra-company Payment Entries that have only been reconciled with one Bank Transaction

* fix: indentation and args

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
(cherry picked from commit 842ceb1301)

# Conflicts:
#	erpnext/patches.txt

* fix: merge conflict

* fixed patches

Co-authored-by: Ganga Manoj <ganga.manoj98@gmail.com>
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2021-08-26 19:57:56 +05:30
Frappe PR Bot
e553fa22f3 fix: Customers 'primary_address' not updated automatically (#26798) (#26799) (#27178)
* Fix for Issue #26798

This PR is a fix for GitHub Issue 26798:
https://github.com/frappe/erpnext/issues/26798

TLDR:  When an Address is updated, and that Address is a Customer's Primary Address, update the Read Only field `customer.primary_address`

* Update address.py

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit 1a919773d7)

Co-authored-by: Brian Pond <PMojito@users.noreply.github.com>
2021-08-26 19:50:44 +05:30
rohitwaghchaure
7c31e1f8bf chore: merge branch 'version-13-hotfix' into 'version-13-pre-release' (#27173)
* feat: add provision for process loss in manufac

* feat: add is process loss autoset and validation

* fix: add warehouse and unset is scrap for process loss items

* refactor: shift auto entry of is process loss check, update validations

* test: add bom tests for process loss val, add se test for qty calc

* fix: add more validations, remove source wh req for pl item

* fix: sider

* refactor: polyfill ??

* fix: sider

* refactor: validation error message formatting

* test: check manufacture completion qty in se and wo

* fix: wo tests, sider, account for pl in se validation

* fix: reword error messages, fix test values

* feat: add procss_loss_qty field in work order

* feat: process loss report, fix set pl query condition

* fix: correct value in test

* fix: get filters to work
- reorder and rename columns
- add work order filter

* fix: Shopping cart Exchange rate validation (#27050)

* fix: Shopping cart Exchange rate validation

- Use `get_exchange_rate` to check for price list exchange rate in cart settings
- Move cart exchange rate validation for Price List from hooks to doc event
- Call cart exchange rate validation on PL update only if PL is in cart and currency is changed

* chore: Comment out obsolete test

- Modifying this test means considering extreme edge cases, which seems pointless now

* fix: Remove snippet that got in due to cherry-pick from `develop`

- This snippet is not present in v13-hotfix. Via https://github.com/frappe/erpnext/pull/26520

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

* feat: initialize party link for customer & suppliers

* feat: toggle to enable common party accounting

* feat: auto create advance entry on invoice submission

* test: creation of advance entry on invoice submission

* fix: remove unwanted filter query

* feat: validate multiple links

* fix: party link permissions

* perf: reduce number of queries to get party link

* fix: cost center & naming series

* fix: cost center in test_sales_invoice_against_supplier

* fix: Don't create inward SLE against SI unless is internal customer enabled (#27086)

* fix: Dont create inward SLE against SI unless is internal customer enabled

- Check if is internal customer enabled apart from target warehouse
- Test to check if inward SLE is made if target warehouse is accidentally set but customer is not internal

* test: Use internal customer for delivery of bundle items to target warehouse

- created `create_internal_customer` util
- reused it in delivery note and sales invoice tests
- use internal customer for target warehouse test in delivery note

(cherry picked from commit f4dc9ee2aa)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py

* fix: prevent over riding scrap table values, name kwargs, set currency

* fix(regional): minor fixes and test for South Africa VAT report (#26933) (#27162)

* fix: allow to change incoming rate manually in case of stand-alone credit note (#27164)

* fix: allow to change rate manually in case of stand-alone credit note (#27036)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
(cherry picked from commit fe4540d74d)

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

* fix: resolve conflicts

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>

* fix: Fee Validity fixes (#27161)

* fix: Fee Validity fixes (#27156)

* chore: update Fee Validity form labels

* fix: first appointment should not be considered for Fee Validity

* fix: Fee Validity test cases

* fix: appointment test case

(cherry picked from commit 642b4c805c)

* fix: overlapping appointments

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>

* fix: Merge conflicts and place internal customer creation util in test_customer.py

* fix: internal customer util returns 'str' not doc object

* fix: negative qty validation on stock reco cancellation (#27170) (#27171)

* test: negative stock validation on SR cancel

* fix: negative stock setting ignored in stock reco

In stock reconcilation cancellation negative stock setting is ignored as
`db.get_value` is returning string `'0'` which is not casted to int/bool
for further logic. This causes negative qty, which evantually gets
caught by reposting but by design this should stop cancellation.

* test: typo and minor refactor

(cherry picked from commit e7109c18db)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>

Co-authored-by: 18alantom <2.alan.tom@gmail.com>
Co-authored-by: Marica <maricadsouza221197@gmail.com>
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
Co-authored-by: Saqib Ansari <nextchamp.saqib@gmail.com>
Co-authored-by: Frappe PR Bot <frappe.pr.bot@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-26 19:49:27 +05:30
Frappe PR Bot
9ff14f8609 fix: Use reverse debit and credit to get net amount in GL Entries (#27174) (#27177)
* fix: Use reverse debit and credit to get net amount in GL Entries

* fix: Remove unused import

(cherry picked from commit 4b1f165429)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-08-26 19:49:09 +05:30
Frappe PR Bot
c5c78641e1 fix: don't allow BOM's item code at any level of child items (#27157) (#27176)
* refactor: bom recursion checking

* fix: dont allow bom recursion

if same item_code is added in child items at any level, it shouldn't be allowed.

* test: add test for bom recursion

* test: fix broken prodplan test using recursive bom

* test: fix recursive bom in tests

(cherry picked from commit c07dce940e)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-26 19:05:13 +05:30
rohitwaghchaure
409cc95b7b Merge pull request #27158 from rohitwaghchaure/merge-branch-hotfix-to-pre-release-for-13-10
chore: merge version-13-hotfix into version-13-pre-release for release v13.10.0
2021-08-26 17:39:58 +05:30
Frappe PR Bot
2ad531f66b fix: negative qty validation on stock reco cancellation (#27170) (#27171)
* test: negative stock validation on SR cancel

* fix: negative stock setting ignored in stock reco

In stock reconcilation cancellation negative stock setting is ignored as
`db.get_value` is returning string `'0'` which is not casted to int/bool
for further logic. This causes negative qty, which evantually gets
caught by reposting but by design this should stop cancellation.

* test: typo and minor refactor

(cherry picked from commit e7109c18db)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-26 17:14:17 +05:30
marination
06a6fd512a Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-08-26 16:53:59 +05:30
Marica
6ed52799d7 Merge pull request #27166 from frappe-pr-bot/backport/version-13-hotfix/27086
fix: Don't create inward SLE against SI unless is internal customer enabled
2021-08-26 16:43:14 +05:30
marination
614ee71778 fix: internal customer util returns 'str' not doc object 2021-08-26 16:22:35 +05:30
Marica
6e136c4377 Merge pull request #26151 from 18alantom/feat-bom-process-loss
feat: add provision for process loss in manufac
2021-08-26 16:11:58 +05:30
Marica
8db44189b6 Merge branch 'version-13-hotfix' into feat-bom-process-loss 2021-08-26 16:11:24 +05:30
Marica
57972cab48 Merge branch 'version-13-hotfix' into backport/version-13-hotfix/27086 2021-08-26 15:55:48 +05:30
marination
55ff6277a7 fix: Merge conflicts and place internal customer creation util in test_customer.py 2021-08-26 15:42:23 +05:30
Frappe PR Bot
d12fe79494 fix: Fee Validity fixes (#27161)
* fix: Fee Validity fixes (#27156)

* chore: update Fee Validity form labels

* fix: first appointment should not be considered for Fee Validity

* fix: Fee Validity test cases

* fix: appointment test case

(cherry picked from commit 642b4c805c)

* fix: overlapping appointments

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-26 14:59:21 +05:30
Frappe PR Bot
c3b1376517 fix: allow to change incoming rate manually in case of stand-alone credit note (#27164)
* fix: allow to change rate manually in case of stand-alone credit note (#27036)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
(cherry picked from commit fe4540d74d)

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

* fix: resolve conflicts

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-26 14:36:42 +05:30
Saqib
58dca11cae Merge pull request #27165 from nextchamp-saqib/common-party-acc-v13
feat: common party accounting
2021-08-26 13:47:58 +05:30
Frappe PR Bot
ed617d0939 fix(regional): minor fixes and test for South Africa VAT report (#26933) (#27162) 2021-08-26 13:27:39 +05:30
18alantom
f7f573b11b fix: prevent over riding scrap table values, name kwargs, set currency 2021-08-26 13:19:10 +05:30
Marica
6636d857f7 fix: Don't create inward SLE against SI unless is internal customer enabled (#27086)
* fix: Dont create inward SLE against SI unless is internal customer enabled

- Check if is internal customer enabled apart from target warehouse
- Test to check if inward SLE is made if target warehouse is accidentally set but customer is not internal

* test: Use internal customer for delivery of bundle items to target warehouse

- created `create_internal_customer` util
- reused it in delivery note and sales invoice tests
- use internal customer for target warehouse test in delivery note

(cherry picked from commit f4dc9ee2aa)

# Conflicts:
#	erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
2021-08-26 07:47:13 +00:00
18alantom
466ff46045 Merge branch 'version-13-hotfix' into feat-bom-process-loss 2021-08-26 13:16:43 +05:30
Saqib Ansari
abde7fc085 fix: cost center in test_sales_invoice_against_supplier 2021-08-26 13:04:49 +05:30
Saqib Ansari
970e5af051 fix: cost center & naming series 2021-08-26 13:04:38 +05:30
Saqib Ansari
fb6af0481c perf: reduce number of queries to get party link 2021-08-26 13:04:31 +05:30
Saqib Ansari
e0649c132e fix: party link permissions 2021-08-26 13:04:24 +05:30
Saqib Ansari
f5afd51fa4 feat: validate multiple links 2021-08-26 13:04:13 +05:30
Saqib Ansari
a87139e16a fix: remove unwanted filter query 2021-08-26 13:02:08 +05:30
Saqib Ansari
da54f0a583 test: creation of advance entry on invoice submission 2021-08-26 13:02:05 +05:30
Saqib Ansari
2cb8cc525c feat: auto create advance entry on invoice submission 2021-08-26 13:01:21 +05:30
Saqib Ansari
fb94726d26 feat: toggle to enable common party accounting 2021-08-26 13:01:19 +05:30
Saqib Ansari
5a06618280 feat: initialize party link for customer & suppliers 2021-08-26 13:00:22 +05:30
Marica
16fbee30a6 fix: Shopping cart Exchange rate validation (#27050)
* fix: Shopping cart Exchange rate validation

- Use `get_exchange_rate` to check for price list exchange rate in cart settings
- Move cart exchange rate validation for Price List from hooks to doc event
- Call cart exchange rate validation on PL update only if PL is in cart and currency is changed

* chore: Comment out obsolete test

- Modifying this test means considering extreme edge cases, which seems pointless now

* fix: Remove snippet that got in due to cherry-pick from `develop`

- This snippet is not present in v13-hotfix. Via https://github.com/frappe/erpnext/pull/26520

Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2021-08-26 12:23:52 +05:30
Rohit Waghchaure
327be1cd9d chore: merge version-13-hotfix into version-13-pre-release for release v13.10.0 2021-08-26 11:45:55 +05:30
Frappe PR Bot
6609321399 fix: removing toggle_display for address and contact HTML (#27152) (#27155)
(cherry picked from commit c8f22e5524)

Co-authored-by: Anupam Kumar <anupamvns0099@gmail.com>
2021-08-26 11:02:01 +05:30
Frappe PR Bot
7f27586cbe fix(healthcare): Removed ignore user permissions flag in appointment (#27146)
* fix(healthcare): Removed ignore user permissions flag in appointment (#27129)

(cherry picked from commit 81b28b8998)

# Conflicts:
#	erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.py

* chore: Fix merge conflicts

Co-authored-by: Chillar Anand <anand21nanda@gmail.com>
2021-08-25 22:26:09 +05:30
Frappe PR Bot
4837d8872e fix: unable to create manual / auto asset depreciation entry when cost_center is mandatory (#26912) (#27149)
Summary : unable to create manual / auto asset depreciation entry when cost_center is mandatory

Reason: Though we are calculating value for depreciation_cost_center, it is not passed in credit_entry(it is passed in debit_entry) and this prevents creation of manual / auto asset depreciation entry when cost_center is mandatory

Solution : pass already calculated depreciation_cost_center value in credit_entry (in line with, already done as in debit_entry)
(cherry picked from commit b99c011947)

Co-authored-by: Ashish Shah <mr.ashish.shah@gmail.com>
2021-08-25 22:25:29 +05:30
Nabin Hait
014df08e7b Merge branch 'alyf-de-datev_more_info' into version-13-hotfix 2021-08-25 21:23:45 +05:30
Nabin Hait
09fb90b8ac fix: merge conflict 2021-08-25 21:23:24 +05:30
Dany Robert
7b9a23eb7a feat: Increase number of supported currency exchanges (#26763)
* fix: update test suite to accodomate new currency exchange function

* feat: Increase number of supported currency exchanges

* fix: don't make api call when testing

* remove condition for test(being fixed in another pull request)
2021-08-25 21:15:44 +05:30
Frappe PR Bot
0fe6995816 fix: sequence of sub-operations in job card (#27138) (#27147)
(cherry picked from commit ad45ddcabe)

Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
2021-08-25 20:11:23 +05:30
Frappe PR Bot
f8ec0b6a86 feat: provision to create customer from opportunity (#27145)
* feat: provision to create customer from opportunity (#27141)

* feat: provision to create customer from opportunity

* fead: linking of address and contact

* revert: create_opportunity_address_contact

* enabming print hide and no copy

(cherry picked from commit 4d98be2126)

# Conflicts:
#	erpnext/crm/doctype/opportunity/opportunity.js

* Update opportunity.js

* fix: conflicts

Co-authored-by: Anupam Kumar <anupamvns0099@gmail.com>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-25 20:05:54 +05:30
18alantom
c703ce1c61 fix: get filters to work
- reorder and rename columns
- add work order filter
2021-08-25 19:01:35 +05:30
Frappe PR Bot
4c3034ad79 fix: remove VARCHARs from Sales Invoice (#27136) (#27139)
Sales Invoice doctype is starting to hit row length limit as many
integrations add custom fields on this doctype. This is just a small
change to remove VARCHAR(140) fields and reduce row size wherever
possible.

(cherry picked from commit 8d116fb9ff)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-25 17:47:51 +05:30
Alan
1be810479c refactor: update stock module onboarding (#25745)
* refactor: update stock onboarding

* refactor: add form tour for stock module onboarding

* refactor: move trailing whitespace out of translate func

* refactor: sider/semgrep

* refactor: remove DN, PR; change wording, add/remove steps in tour

* refactor: add watch video step for stock opening balance

* refactor: reorder steps according to stock settings refactor

* refactor: fix typo, remove target warehouse cause SE Type dependency

* fix: semgrep, remove trailing and leading whitespaces

* refactor: reduce steps, reword cards

* fix: minor changes

- remove Is Group from warehouse
- change stock entry type
- link to stock entry type
- add posting date to stock reco
- change report to Stock Projected Qty
- highlight quality inspection action
- remove allow neg highlight

* refactor: use Form Tour doc instead of controller form tour

note - keeping controller form tours as a fallback, new form tours
seem to work only for Stock Settings

* fix: rename form tours to doctype names, remove tours from js controllers

* fix: re-order tour to circumvent glitchy save highlight
2021-08-25 17:45:55 +05:30
Frappe PR Bot
d97a87e28d fix(healthcare): Made payment fields mandatory for new appointments (#27135)
* fix(healthcare): Made payment fields mandatory for new appointments (#26608)

* fix(healthcare): Made payment fields mandatory for new appointments

* fix: sider issues

* fix: Fix failing test

* fix: Patient appointment invoicing

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
Co-authored-by: Syed Mujeer Hashmi <mujeerhashmi@4csolutions.in>
(cherry picked from commit a65498dc61)

# Conflicts:
#	erpnext/healthcare/doctype/patient_appointment/patient_appointment.json
#	erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.py

* chore: Fix merge conflicts

* chore: Fix failing tests

Co-authored-by: Chillar Anand <anand21nanda@gmail.com>
2021-08-25 17:12:04 +05:30
Frappe PR Bot
7ac4916191 feat: unreconcile on cancellation of bank transaction (#27109) (#27137) 2021-08-25 16:59:03 +05:30
Deepesh Garg
4eb7c2a011 fix: TDS calculation on net total (#27058) 2021-08-25 16:54:45 +05:30
Marica
dc6a8863e9 Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-08-25 14:35:06 +05:30
marination
c1f6898f1a refactor: Cache Item Reviews and other review feedback
- `get_doc` -> `get_values` and `db.sql` -> `db.delete` in Wishlist Item deletion
- cache first page of Item Reviews and burst cache on addition and deletion of reviews
- Update redisearch docs link in E Commerce Settings
- Removed unused cint import
- Broke setting attribute context into smaller functions and code cleanup
- Minor recommended items padding tweak
- Item reviews form dict now uses website item as key
- Customer reviews rendered from UI style consistency
- Stock status consistency in listing and full page
- Handle no price in variant dialog for matched item
2021-08-25 14:34:13 +05:30
Frappe PR Bot
fcb17f047d fix: validate party and party type only if both available (#27002) (#27133)
* fix: validate party and party type only if both available

* fix: indentation

(cherry picked from commit 8366b6322e)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-25 12:49:04 +05:30
Marica
688fe4192c Merge pull request #27118 from 18alantom/fix-scrap-items-updation-bp
fix: update scrap table item details; typo (backport #27052)
2021-08-25 12:36:14 +05:30
rohitwaghchaure
2b875bbf52 Merge pull request #27127 from rohitwaghchaure/v13-fixed-stock-ledger-report-with-included-uom
fix: stock ledger report not working if include uom selected in filter
2021-08-25 01:24:53 +05:30
Rohit Waghchaure
1810b73113 fix: stock ledger report not working if include uom selected in filter 2021-08-25 01:24:02 +05:30
rohitwaghchaure
2ea108ae92 Merge pull request #27126 from rohitwaghchaure/fixed-donot-overrride-batch-no-v13
fix: selected batch no changed on updation of qty
2021-08-25 01:23:10 +05:30
Rohit Waghchaure
2f71b740fd fix: selected batch no changed on updation of qty 2021-08-25 01:22:04 +05:30
Frappe PR Bot
5b411dc1f6 fix: Updated timestamp for pos invoice json (#27110) (#27123)
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
(cherry picked from commit fbc5977248)

Co-authored-by: Subin Tom <36098155+nemesis189@users.noreply.github.com>
2021-08-24 23:18:35 +05:30
Frappe PR Bot
f13ae4de0b fix: broken URL in supplier portal (#26823) (#27122)
* fix: broken URL

The quotations are supplier quotations, not sales quotation.

* fix: remove erpnext from path

(cherry picked from commit c7bad657b1)

Co-authored-by: Dany Robert <rtdany10@gmail.com>
2021-08-24 22:28:29 +05:30
Frappe PR Bot
b3ffa0eb57 fix(minor): Update GSTR-1 json version (#27074) (#27121)
(cherry picked from commit c30fb04e96)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-08-24 22:28:07 +05:30
Anuja Pawar
8220117500 feat(regional): South Africa VAT Audit Report (#27017)
* feat: SA VAT Report

* fix: added party column and fixed permissions

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
Co-authored-by: Nabin Hait <nabinhait@gmail.com>
2021-08-24 22:02:05 +05:30
Deepesh Garg
74073ddc85 fix: Ignore due date validations if payment terms are copied from orders/receipts (#27120) 2021-08-24 21:56:49 +05:30
Frappe PR Bot
8474961b79 perf: reduce number of queries to validate selling price (#26225) (#27119)
* perf: reduce number of queries to validate selling price

* fix: improved flow and formatting

* fix: improve condition and use of `as_dict`

Co-authored-by: Sagar Vora <sagar@resilient.tech>
(cherry picked from commit 7c957d72b3)

Co-authored-by: Pruthvi Patel <pruthvipatel145@gmail.com>
2021-08-24 21:51:53 +05:30
Nabin Hait
487952a04e Merge branch 'version-13-hotfix' into fix-scrap-items-updation-bp 2021-08-24 21:08:14 +05:30
Frappe PR Bot
c7508a034a feat: allow draft pos invoices even if no stock available (#27078) (#27106)
(cherry picked from commit f47cbae5e0)

Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-24 20:51:30 +05:30
18alantom
38898d33c6 fix: update scrap table item details; typo 2021-08-24 20:39:51 +05:30
18alantom
8c4d80a58a Merge branch 'feat-bom-process-loss' of https://github.com/18alantom/erpnext into feat-bom-process-loss 2021-08-24 20:19:35 +05:30
18alantom
9e96861f15 fix: correct value in test 2021-08-24 20:19:20 +05:30
Alan
b58496dda4 Merge branch 'version-13-hotfix' into feat-bom-process-loss 2021-08-24 20:12:01 +05:30
Frappe PR Bot
0bf9d1b29f fix: pos invoice test (#27116) 2021-08-24 19:48:05 +05:30
Frappe PR Bot
a7cdba24bc feat: coupon code discount in pos invoice (#27103) 2021-08-24 19:47:40 +05:30
Saqib
f84740e6e4 fix: incorrect gl entry on period closing involving finance books (#27104) 2021-08-24 19:46:35 +05:30
Mohammad Hussain Nagaria
24b2a31581 feat: Employee reminders (#25735)
* feat: Add reminders section to HR Settings

* refactor: Extract generic function for getting Employees

* feat: Employee Work Anniversary Reminder

* feat: Daily Holiday Reminder

* fix: Unnecessary params and replace [] with .get()

* test: Daily Holiday Reminders

* test: is_holiday basic tests

* refactor: Move employee reminders code to separate module

* feat: Add advance reminder to HR settings

* feat: Advance Holiday Reminders

* refactor: get_holidays_for_employee

* feat: Email holiday reminders in advance + tests

* fix: Remove unused import

* refactor: HR Setting Reminder Section

* refactor: Remove Daily Holiday Reminders feat

* feat: Reminder miss warning

* fix: Failing test and function name change

* chore: Add patch for field rename

* chore: Rename frequency label

* fix: Failing patch test

* fix: sider and removed description of fields

* fix: email alignment

Co-authored-by: pateljannat <pateljannat2308@gmail.com>
Co-authored-by: Jannat Patel <31363128+pateljannat@users.noreply.github.com>
2021-08-24 19:43:43 +05:30
Anupam Kumar
f7e0edecc9 refactor: social media post fixes (#24664)
* fix: social media post fixes

* feat: post metrics and some fixes

* fix: sider issues

* fix: sider issue

* fix: reverting optional chaning statements

* fix: sider issues

* fix: review chnages

* fix: text trigger check

* fix: sider issue
2021-08-24 19:15:56 +05:30
Frappe PR Bot
d55d200b47 fix: calculation of gross profit percentage in Gross Profit Report (#27108) 2021-08-24 18:58:56 +05:30
Frappe PR Bot
c8092b7e7a fix: correct price list rate value in return si (#27105) 2021-08-24 18:41:16 +05:30
18alantom
795efcd017 feat: process loss report, fix set pl query condition 2021-08-24 18:39:02 +05:30
Syed Mujeer Hashmi
1604b6cc63 fix: Allow backdated discharge for inpatient (#25124)
* fix: Allow backdated discharge for inpatient

The system is not flexible enough to allow backdated patient discharge.

Signed-off-by: Syed Mujeer Hashmi <mujeerhashmi@4csolutions.in>

* fix: Sider issues and test cases related to this patch

Signed-off-by: Syed Mujeer Hashmi <mujeerhashmi@4csolutions.in>

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
Co-authored-by: Jannat Patel <31363128+pateljannat@users.noreply.github.com>
2021-08-24 18:35:59 +05:30
Rucha Mahabal
27fad29ad6 refactor: Healthcare Redesign Changes (#27100)
* chore: reorder workspace cards

* fix: Patient Progress Page UI

* feat: redesign Patient History

* fix: redesign patient history card

* fix: filter style

* fix: sider

* fix: patient history and patient progress links

* fix: change percentage/donut charts to bar charts

-percentage charts broken in redesign

* fix(style): patient progress heatmap

* chore: semgrep and translation fixes

* fix: patient progress page card views

* fix: tests
2021-08-24 17:54:28 +05:30
Deepesh Garg
0476accf26 fix: Payment Reconciliation link in Accounting Workspace (#27085) 2021-08-24 16:27:10 +05:30
18alantom
a14b93d0d8 feat: add procss_loss_qty field in work order 2021-08-24 16:11:48 +05:30
marination
341d9b4b6d chore: Remove Home Page is Products and Sider fixes
- Removed `Home Page is Products` checkbox in E Comm Settings. Can be manually set in Website Settings
- Removed hooks trigger to reset home page as products
- Sider: duplicate color attribute, shift `return` to next line, over-indentation
2021-08-24 13:52:46 +05:30
Sagar Vora
925a4a28e2 Merge pull request #27092 from frappe-pr-bot/backport/version-13-hotfix/27008
refactor: use `read_only_depends_on` instead of code
2021-08-24 13:33:19 +05:30
Afshan
ac0800511d fix: resolved conflicts 2021-08-24 12:59:07 +05:30
Afshan
d360819384 Merge branch 'version-13-hotfix' into backport/version-13-hotfix/27008 2021-08-24 12:53:13 +05:30
Marica
ff6cda8547 Merge pull request #27096 from frappe-pr-bot/backport/version-13-hotfix/27043
fix(ux): keep stock entry title & purpose in sync
2021-08-24 12:46:31 +05:30
rohitwaghchaure
60c06d3194 Merge pull request #26455 from noahjacob/supplier_defaults_v13hf
feat: fetching details from supplier/customer groups
2021-08-24 12:31:01 +05:30
rohitwaghchaure
5320f3e5ea Merge branch 'version-13-hotfix' into supplier_defaults_v13hf 2021-08-24 12:28:16 +05:30
Ankush Menat
cc7ed1573a fix(ux): keep stock entry title & purpose in sync (#27043)
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
(cherry picked from commit c09d8a2809)
2021-08-24 06:55:25 +00:00
Marica
b932b3f252 Merge pull request #27093 from frappe-pr-bot/backport/version-13-hotfix/27014
fix: stock analytics report date range issues and add company filter
2021-08-24 12:21:43 +05:30
Frappe PR Bot
1e3a6a8a98 fix: discard empty rows from update items (#27021) (#27095)
(cherry picked from commit 6de7b8ea93)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-24 12:20:51 +05:30
Ankush Menat
0a23328151 fix: stock analytics report date range issues and add company filter (#27014)
* test: tests for correct get_period_date_ranges

* fix: stock analytics report date range issues

- Upon selecting second half of month with Monthly filter, data from
  that period was missing.
- Solution: "round down" the date as per expected frequency.

* chore: drop py2 and fix misleading docstring

* test: fix test to avoid FY clash

* feat: add company filter in stock analytics report

[skip ci]

Co-authored-by: Marica <maricadsouza221197@gmail.com>
(cherry picked from commit 0dff0beaba)
2021-08-24 06:47:49 +00:00
Pruthvi Patel
f08d7410be refactor: use read_only_depends_on instead of code (#27008)
(cherry picked from commit 332ac105b5)

# Conflicts:
#	erpnext/accounts/doctype/pos_invoice/pos_invoice.js
#	erpnext/accounts/doctype/sales_invoice/sales_invoice.js
2021-08-24 06:38:39 +00:00
marination
280f615ded Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-08-24 11:48:13 +05:30
Nabin Hait
352157c9fc Merge pull request #27005 from frappe/addl_salary_fix-v13
fix: Additional salary processing
2021-08-24 10:35:51 +05:30
Deepesh Garg
85f582b145 Merge pull request #26725 from deepeshgarg007/payment_entry_validations_and_trigger
fix: Multiple fixes in payment entry
2021-08-23 18:03:11 +05:30
Frappe PR Bot
3d047b83fd fix: Eway bill test update to check ver 1.0.0421 (#27083) (#27084) 2021-08-23 15:43:30 +05:30
Frappe PR Bot
6814509f07 fix: eway bill version changed to 1.0.0421 (#27077) 2021-08-23 15:43:06 +05:30
Saqib
dbca11071e refactor: scan barcode field scanning (#26990) (#27076) 2021-08-23 11:23:46 +05:30
Deepesh Garg
dd688db54c Merge pull request #27072 from frappe-pr-bot/backport/version-13-hotfix/27069
feat: Column for total amount due in Accounts Receivable/Payable Summary
2021-08-22 23:15:58 +05:30
Deepesh Garg
be57dee57a Merge pull request #27068 from frappe-pr-bot/backport/version-13-hotfix/26975
fix: Consolidated balance sheet showing incorrect values
2021-08-22 18:14:15 +05:30
Deepesh Garg
67dbb2bd7f feat: Column for total amount due in Accounts Receivable/Payable Summary (#27069)
(cherry picked from commit 496bff5136)
2021-08-22 12:41:50 +00:00
Deepesh Garg
571178ffbe fix: Revert commit 46372fe 2021-08-22 18:02:51 +05:30
Deepesh Garg
9542da80c5 test: Update test cases 2021-08-21 19:36:38 +05:30
Deepesh Garg
593ab98575 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into payment_entry_validations_and_trigger 2021-08-21 19:19:10 +05:30
Deepesh Garg
43813875ea fix: Consolidated balance sheet showing incorrect values (#26975)
(cherry picked from commit 57e326e7d0)
2021-08-21 12:30:23 +00:00
Ankush Menat
d0e393a4cc fix: Incorrect mandatory error message for warehouse (#27060)
Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-08-20 18:33:28 +05:30
Ankush Menat
05c7905fa3 fix(ux): removed rate from grid view (#27061)
Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-08-20 18:33:08 +05:30
Frappe PR Bot
3f05d928a3 refactor: rectify typo (#27057) (#27059)
[skip ci]

(cherry picked from commit 62c590261c)

Co-authored-by: Alan <2.alan.tom@gmail.com>
2021-08-20 18:24:49 +05:30
Frappe PR Bot
2fd823ffb6 fix: Cascade deletion for Company (#26923) (#27053)
* fix: Cascade deletion for Company

(cherry picked from commit 2b2572b9b9)

Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
2021-08-20 15:20:50 +05:30
Frappe PR Bot
52570cc1f9 refactor: renamed varint_item_code to variant_item_code (#27025) (#27046)
(cherry picked from commit f13315809e)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-08-19 20:55:45 +05:30
Frappe PR Bot
5c6f6c16d6 fix: pass planned start date to created work order (#27031) (#27042)
* fix: pass planned start date to created workorder

* test: production plan to work order start date

Co-authored-by: Alan <2.alan.tom@gmail.com>
Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
(cherry picked from commit 9225f02599)
2021-08-19 18:56:26 +05:30
Anoop
ee9b6d158a feat(Healthcare): Capacity for Service Unit, concurrent appointments based on Capacity, Patient enhancements (#24860)
* fix: (tests) get_healthcare_docs and get_medical_department separated, related changes

* feat: Service Unit option to allow overlap, overlap capacity
Appointment to allow overlapping appointments

Co-authored-by: Akash Krishna <akash@earthianslive.com>

* feat: Create multiple service units from tree view

Co-authored-by: Akash Krishna <akash@earthianslive.com>

* feat: patient address and contact
patient dashboard links, customer stats

* fix: sider review

* fix: untranslated message

* fix: enable non-negative check for service unit capacity

- incorrect depends on statement in dialog

* refactor(UX): Available Slots Dialog

* chore: remove unused field from Healthcare Service Unit Type

Co-authored-by: Akash Krishna <akash@earthianslive.com>
Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-19 18:15:51 +05:30
Frappe PR Bot
c192e9457e fix: add child item groups into the filters (#26997) (#27035)
* fix: add child item groups into the filters

* fix: appending values to proper variable

* fix: refactor the loop

(cherry picked from commit c60d5523bc)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-19 16:44:56 +05:30
Frappe PR Bot
74af3be968 fix: set production plan to completed even on over production (#27027) (#27032)
(cherry picked from commit 09f34e558e)

Co-authored-by: Alan <2.alan.tom@gmail.com>

[skip ci]
2021-08-19 10:50:06 +00:00
Subin Tom
02a23bae58 Fix: Payment Entry party validation issue (#27022)
Co-authored-by: Subin Tom <subin-home@Subins-MacBook-Air.local>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-19 15:49:16 +05:30
Frappe PR Bot
df32fe3d49 Merge pull request #27026 from ankush/eq_assign (#27030)
fix: equality check instead of assignment

[skip ci]

(cherry picked from commit 993b0532f8)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-19 15:45:39 +05:30
Ankush Menat
92b3743c54 Merge pull request #27024 from ankush/whitespace_fix
chore: whitespace cleanup from codebase
2021-08-19 14:57:57 +05:30
Ankush Menat
b42c23cad6 chore: ignore whitespace changes in git blame 2021-08-19 14:36:17 +05:30
Rohit Waghchaure
23c713cc9b Merge branch 'version-13-pre-release' into version-13 2021-08-19 14:35:52 +05:30
Rohit Waghchaure
f0d3a074e0 bumped to version 13.9.2 2021-08-19 14:55:52 +05:50
Ankush Menat
9bb69e711a chore: whitespace cleanup from codebase 2021-08-19 14:33:03 +05:30
Frappe PR Bot
e536f6d13f fix: assigning values to rows in sales register reports (#26546) (#27020)
* fix: assigning values to rows in sales register reports

* fix: check for is_internal_customer for unrealized_profit_loss_account

(cherry picked from commit ecd6584c50)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-19 13:30:50 +05:30
Frappe PR Bot
f37747da25 fix: Add ignore user perms to set_target_warehouse field in sales invoice (#27013)
* fix:  Add ignore user perms to set_target_warehouse field in sales invoice (#26987)

* reverting ot v12.7.1

* fix: Ignore user permissions for set_target_warehouse in SI

Co-authored-by: Subin Tom <subin-home@Subins-MacBook-Air.local>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
(cherry picked from commit ef792971f3)

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

* fix: conflicts

* fix: conflicts

Co-authored-by: Subin Tom <36098155+nemesis189@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-19 12:16:15 +05:30
rohitwaghchaure
cada9b679a Merge pull request #27019 from anupamvs/email-digest-fix-pre
fix: email digest recipient patch
2021-08-19 11:49:49 +05:30
Frappe PR Bot
25b705e2ad fix: sales pipeline graph issue (#26626) (#27018)
(cherry picked from commit 34353df48c)

Co-authored-by: Anupam Kumar <anupamvns0099@gmail.com>
2021-08-19 11:46:55 +05:30
Anupam Kumar
ecbb59a1ce Merge branch 'version-13-pre-release' into email-digest-fix-pre 2021-08-19 11:14:38 +05:30
Anupam
9f79415186 fix: email digest recipient patch 2021-08-19 11:12:32 +05:30
rohitwaghchaure
87326dd489 Merge pull request #27007 from anupamvs/email-digest-fix
fix: [patch]Email digest fix
2021-08-19 11:09:21 +05:30
Frappe PR Bot
8ea5782c69 fix: filtering of items in Sales and Purchase Orders (#26936) (#27012)
* fix: filtering of items in Sales and Purchase Orders

* fix: slider

* fix: slider

(cherry picked from commit dc7280eef0)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-18 20:44:45 +05:30
Frappe PR Bot
6a35d580e4 fix: Dimension filter query fix to avoid including disabled dimensions (#26988) (#27006)
* reverting ot v12.7.1

* fix: Dimension filter query fix to not display disabled dimensions

Co-authored-by: Subin Tom <subin-home@Subins-MacBook-Air.local>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
(cherry picked from commit 333e44eb47)

Co-authored-by: Subin Tom <36098155+nemesis189@users.noreply.github.com>
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-18 18:46:25 +05:30
Frappe PR Bot
77ad668a6f fix: date_unchanged calculation in "Update Items" (#26992) (#27010)
Branch corrected https://github.com/frappe/erpnext/pull/26058

  ERPNext generates "Cannot set quantity less than delivered quantity" error even the delivered qty is zero when user clicks "Update Items".
  "date_unchanged" variable gets false value because of new_date is string.

  "getdate(new_date)" corrects the date comparison.

  ![ERPNext_PR](https://user-images.githubusercontent.com/710051/121928377-c0263180-cd48-11eb-8cd9-eda7dace09d6.gif)

(cherry picked from commit d8a7abcd02)

Co-authored-by: Türker Tunalı <turkert@hotmail.com>
2021-08-18 12:32:59 +00:00
Nabin Hait
5e1ed2d7eb fix: Message (Received Amount should be same as Paid Amount) 2021-08-18 16:46:32 +05:30
Anupam
36f18935d3 fix: email digest recipient patch 2021-08-18 16:30:45 +05:30
Anupam
01a538123b Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into version-13-hotfix 2021-08-18 16:15:38 +05:30
Nabin Hait
44919ac807 fix: Additional salary processing 2021-08-18 16:14:48 +05:30
Frappe PR Bot
e555e8cf05 fix: Return Qty in PR/DN for legacy data (#27001) (#27003)
(cherry picked from commit 112fc888f1)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-08-18 10:30:51 +00:00
Deepesh Garg
0f15ded0cd Merge branch 'payment_entry_validations_and_trigger' of https://github.com/deepeshgarg007/erpnext into payment_entry_validations_and_trigger 2021-08-18 15:58:46 +05:30
Deepesh Garg
46372fe5cd fix: Decide party account debit or credit on payment entry type instead of party type 2021-08-18 15:57:55 +05:30
Deepesh Garg
6950844a74 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into payment_entry_validations_and_trigger 2021-08-18 15:29:48 +05:30
Rohit Waghchaure
8cd3ffc84d Merge branch 'version-13-pre-release' into version-13 2021-08-18 13:00:35 +05:30
Rohit Waghchaure
9c1d739946 bumped to version 13.9.1 2021-08-18 13:20:35 +05:50
Frappe PR Bot
5e17b82779 fix: set account for change amount even if pos profile not found (#26986) (#26989)
(cherry picked from commit 5fec44446e)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-17 20:34:35 +05:30
Deepesh Garg
9c401e75bb Merge pull request #26980 from deepeshgarg007/payment_entry_unallocated_fix_v13
fix: Incorrect unallocated amount calculation in payment entry
2021-08-17 19:14:07 +05:30
Deepesh Garg
c8449702b4 Merge pull request #26981 from deepeshgarg007/payment_entry_unallocated_fix_v13_pre
fix: Incorrect unallocated amount calculation in payment entry
2021-08-17 19:13:27 +05:30
Frappe PR Bot
90818d57f1 fix: change print_format_type from Server to Jinja (#26374) (#26985)
(cherry picked from commit a2966db1e5)

Co-authored-by: Mohammed Redah <mhbu50@gmail.com>
2021-08-17 13:36:08 +00:00
Deepesh Garg
0a5dff1e1f test: Add test case for payment entry 2021-08-17 18:11:29 +05:30
Ankush Menat
333d962ac2 test: fix tests failing due to doc amend feature (bp #26656) (#26907)
* test: fix test due to rename change

* test: fix attendance request tests

- Use `frappe.db.get_value` instead of `get_doc` for asserting values
- Get values after cancellation as reloading attendance doc breaks due to stale doc (primary key changed after cancel of attendance request)
- rollback everything on tearDown

* test: fix Shift Request test

- Use `get_value` instead of `get_doc`
- Remove unnecessary loop, only one shift assignment is made against a shift request
- Get value after cancel again. Get doc is not reliable since primary key changed after cancel

* test: fix POS Closing Entry Test

- Separated into two tests, one checks if SI cancelling is blocked, the other checks PCE cancel impact
- This is done because after cancel via assertRaises, damage done by cancel still exists or is partially comitted
- Dont use this partially cancelled doc for any assertions further, end test at exception assertion
- Use `get_value` to check SI docstatus, as its primary key changes after cancel

* test: fixed asset movement tests

- set cwip account in company to avoid value missing
- removed unused statement
- removed trailing spaces

* Revert "test: fix POS Closing Entry Test"

This reverts commit 8f1a3aef2e.

Co-authored-by: marination <maricadsouza221197@gmail.com>
2021-08-17 18:01:39 +05:30
Deepesh Garg
2730f51ca9 test: Add test case for payment entry 2021-08-17 17:44:30 +05:30
18alantom
f8a47525e1 fix: reword error messages, fix test values 2021-08-17 16:47:45 +05:30
Raffael Meyer
ace8cf965d fix: typo (#26967) 2021-08-17 16:13:28 +05:30
18alantom
1c23544c42 fix: wo tests, sider, account for pl in se validation 2021-08-17 15:54:27 +05:30
Deepesh Garg
e7143d8711 fix: Incorrect unallocated amount calculation in payment entry 2021-08-17 13:36:17 +05:30
Deepesh Garg
94f2c41475 fix: Incorrect unallocated amount calculation in payment entry 2021-08-17 13:31:17 +05:30
Sagar Vora
48a11591cc Merge pull request #26976 from resilient-tech/fix-incorrect-modified (#26979)
fix: Incorrect `modified` time in documents that inherit from `StatusUpdater`
(cherry picked from commit d932cba38a)

Co-authored-by: Sagar Vora <sagar@resilient.tech>
2021-08-17 13:21:00 +05:30
Sagar Vora
6e921b1ccc Merge pull request #26976 from resilient-tech/fix-incorrect-modified
fix: Incorrect `modified` time in documents that inherit from `StatusUpdater`
(cherry picked from commit d932cba38a)
2021-08-17 07:48:29 +00:00
Frappe PR Bot
133486a5c7 Merge pull request #26906 from ChillarAnand/label (#26972)
fix: Changed label to "Inpatient Visit Charge" in appointment type
(cherry picked from commit 8c851b7019)

Co-authored-by: Chillar Anand <anand21nanda@gmail.com>
2021-08-17 11:12:33 +05:30
marination
71b0e0a146 test: Product Query & Filter Engine, Item Group Page
- Test for ProductQuery engine and ProductFilters engine
- Test for engine for Item Group too
- Renamed ‘product_configurator’ to ‘variant_selector’
- Cleaned up filters.py
- Modal freeze backdrop lighter only in cart, since there’s nothing over it
- Fixed unusual spacing in variant selector dialog
- Made `get_child_groups_for_website` more readable
- Replaced ‘Configure’ with ‘Select’ for variant selection
2021-08-17 01:55:46 +05:30
Deepesh Garg
94030e08f1 Merge pull request #26963 from deepeshgarg007/distributed_budget_variance_report_v13
fix: Budget variance missing values
2021-08-16 18:28:09 +05:30
Frappe PR Bot
663e550824 ci: ignore backports while checking docs (#26962) (#26965)
[skip ci]

(cherry picked from commit 2a43fe1a22)

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-16 18:20:07 +05:30
Deepesh Garg
d076ba5c94 fix: Budget variance missing values 2021-08-16 18:02:15 +05:30
Frappe PR Bot
3c9b8dce21 feat: Training Event Status Update and Validations (#26698) (#26961)
* fix: training event employee status not updated on feedback submission

* feat: update attendees status on training event status update

* test: Training Event and Feedback

* chore: remove unused import

(cherry picked from commit bf75ea70fb)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-16 17:57:14 +05:30
Frappe PR Bot
64dfbfaecb feat: enable track changes for leave type (#26917) (#26959)
Co-authored-by: Jannat Patel <31363128+pateljannat@users.noreply.github.com>
(cherry picked from commit a9a24051c9)

Co-authored-by: Anupam Kumar <anupamvns0099@gmail.com>
2021-08-16 15:17:28 +05:30
Deepesh Garg
1351d6e3be Merge pull request #26957 from deepeshgarg007/export_type_mandatory_v13
fix: Add mandatory depends on condition for export type field
2021-08-16 15:15:43 +05:30
Deepesh Garg
2aa0daf47b Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into export_type_mandatory_v13 2021-08-16 14:40:13 +05:30
Deepesh Garg
5fddd27cab fix: Add mandatory depends on condition for export type field 2021-08-16 14:34:40 +05:30
Frappe PR Bot
321dd33015 fix: Org Chart fixes (#26952) (#26953)
* fix: add z-index to filter to avoid svg wrapper overlapping

* fix: expand all nodes not working when there are only 2 levels

- added dom freeze while expanding all nodes and exporting

(cherry picked from commit 67e3971c3b)

Co-authored-by: Rucha Mahabal <ruchamahabal2@gmail.com>
2021-08-16 10:44:35 +05:30
Raffael Meyer
0f2f11cb33 fix: typo 2021-08-15 18:47:51 +02:00
Raffael Meyer
fc717665ea Merge branch 'version-13-hotfix' into si_total_billing_hours_v13 2021-08-15 18:45:33 +02:00
Deepesh Garg
560483eb98 Merge pull request #26946 from GangaManoj/property-enable-discount-accounting
fix: Make enable_discount _accounting a class property
2021-08-14 18:06:17 +05:30
Ankush Menat
6aed9e26ac fix: unknown attribute "string_type" (#26947) 2021-08-14 10:45:43 +05:30
GangaManoj
20a5795d67 fix: Make enable_discount_accounting a class property 2021-08-13 19:23:57 +05:30
Frappe PR Bot
434692ad34 fix: Copy previous balance dict object instead of assigning (#26942) (#26944)
- Due to plain assignment, dict mutation gave wrong monthly values

(cherry picked from commit fe2a34f171)

Co-authored-by: Marica <maricadsouza221197@gmail.com>
2021-08-13 10:26:26 +00:00
marination
34df274bf2 fix: Error state and passing args for product listing
- Show error state in case of unexpected errors in query engine
- Pass args appropriately from `view.js`
- Use args correctly in `api.py`
- Error handling in `api.py` if query engine raises error
- Instantiated product data engine tests
- Fix dotted path for search api call in `search.js`
2021-08-13 14:23:52 +05:30
Frappe PR Bot
7881536e09 ci: ignore js files in unittests (#26937)
* ci: ignore js files in unittests (#26934)

* ci: ignore js files in unittests

- Avoid running python unittests on PRs that ONLY change JS files.

* ci: ignore md files in test workflows

(cherry picked from commit 8a6b82b196)

# Conflicts:
#	.github/workflows/server-tests.yml

* fix: resolve conflicts

Co-authored-by: Ankush Menat <ankush@iwebnotes.com>
2021-08-13 07:59:48 +00:00
Frappe PR Bot
cb583a349f fix: show proper currency symbol in taxes and charges table (#26827) (#26935)
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
Co-authored-by: Deepesh Garg <42651287+deepeshgarg007@users.noreply.github.com>
(cherry picked from commit 587d2db6a9)

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-13 12:43:02 +05:30
Frappe PR Bot
a2a5800b23 fix: Deferred Revenue Section should be collapsible only if its not enabled (#26930)
* fix: Deferred Revenue Section should be collapsible only if its not enabled (#26928)

(cherry picked from commit 1de4c01942)

# Conflicts:
#	erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
#	erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json

* fix: conflicts

* fix: conflicts

* fix: conflicts

* fix: conflicts

* fix: conflicts

Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
2021-08-13 10:58:43 +05:30
Deepesh Garg
ffb174c489 fix: Grammatical error in comments 2021-08-13 10:55:13 +05:30
Suraj Shetty
adfa11d449 fix: Nest .level class style under .hierarchy class (#26905)
fix: Nest `.level` class style under `.hierarchy` class
2021-08-12 21:12:52 +05:30
Frappe PR Bot
9209c1f91a fix: from_warehouse getting set to None (#26920) (#26927)
(cherry picked from commit b8658d003f)

Co-authored-by: Noah Jacob <noahjacobkurian@gmail.com>
2021-08-12 14:54:08 +00:00
Marica
2416634385 Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-08-12 19:03:44 +05:30
marination
1fec5bbdb6 chore: Re-organise files,remove T&C modal in cart
- Moved product query and filters engine to `product_data_engine` folder
- Moved product grid, list, search, view to `product_ui` folder
- Renamed `website_item_indexing.py` to `redisearch.py`
- Render Terms and Conditions server side along with the rest of the Shopping cart. Don’t make another db call
- Style changes to terms and conditions
- Deleted unused `cart_terms.html`
- Removed print statements
2021-08-12 19:01:10 +05:30
Frappe PR Bot
262c1823a5 fix: ZeroDivisionError on creating e-invoice for credit note (#26919) 2021-08-12 17:11:55 +05:30
Marica
703b081172 fix: Stock Analytics Report must consider warehouse during calculation (#26908)
* fix: Stock Analytics Report must consider warehouse during calculation

* fix: Brand filter in Stock Analytics
2021-08-12 10:31:01 +05:30
Frappe PR Bot
f3ae956eae perf: various minor perf fixes for ledger postings (#26775) (#26896)
* perf: only validate if voucher is journal entry

* perf: optimize merge GLE

- Order fields such that comparison will fail faster
- Break out of loops if not matched

* perf: don't try to match SLE if count mismatch

* refactor: simplify initialize_previous_data

* perf: use cache for fetching valuation_method

These are set only once fields

* refactor: simplify get_future_stock_vouchers

* refactor: simplify get_voucherwise_gl_entries

* perf: fetch only required fields for GL comparison

`select *` fetches all fields, output of this function is only used for
comparing.

* perf: reorder conditions in PL cost center check

* perf: reduce query while validating new gle

* perf: use cache for validating warehouse props

These properties don't change often, no need to query everytime.

* perf: use cached stock settings to validate SLE

* docs: update misleading docstring

Co-authored-by: Marica <maricadsouza221197@gmail.com>
(cherry picked from commit 9152715f90)

Co-authored-by: Ankush <ankush@iwebnotes.com>
2021-08-11 12:18:58 +05:30
Deepesh Garg
6691d2ca54 fix: Do not update settings for test 2021-08-11 11:36:49 +05:30
Rucha Mahabal
fd325a123c fix(style): apply svg container margin only in desktop view (#26894) 2021-08-10 23:49:56 +05:30
Deepesh Garg
a16ab92e00 test: Add test case for payment entry unlink 2021-08-10 22:21:52 +05:30
Deepesh Garg
cf9734f98a test: Update exchange rate in test cases 2021-08-10 22:21:28 +05:30
Deepesh Garg
42b340cc66 fix: Only do specific validations on reference unlink 2021-08-10 14:52:24 +05:30
Deepesh Garg
c26f95e3b2 fix: Validation for receivingfrom customer against negative outstanding 2021-08-10 14:04:31 +05:30
marination
e3422f4ba8 chore: debug travis 2021-08-10 12:49:32 +05:30
18alantom
0992b2eeef test: check manufacture completion qty in se and wo 2021-08-10 12:23:19 +05:30
Marica
1854581d33 Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-08-10 12:11:31 +05:30
marination
480dd8b056 test: Recommendations, Reviews and Wishlist
- Tests for verified and unverified item reviewers
- Test for recommended items and their prices
- Test for adding removing items from Wishlist
- Bug: Wishlist deletes all entries of an item code irrespective of user
- Get Item reviews only if enabled
- Removed price fields from Wishlist Item and made fields read only
- Removed unused price stored as data on Wishlist buttons
- Customer Reviews page checks if reviews are enabled else shows No Reviews
- Moved price stock fetching in Wishlist in separate function
- Made fields read only in Item Review
2021-08-10 11:31:09 +05:30
Deepesh Garg
8da3a5cdd4 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into payment_entry_validations_and_trigger 2021-08-09 17:38:03 +05:30
18alantom
ce44e11caf refactor: validation error message formatting 2021-08-09 17:37:17 +05:30
marination
d477b99c1d Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-08-09 13:41:45 +05:30
marination
20bc65c97b test: Website Item (Item full page)
- Tests for website item. Desk tests and portal tests
- Allow guests on method `get_offer_details`
- Fetch stock details only if `show_stock_availability` is enabled
- Validation for duplicate web items on item merge
- Separate method for `validate_properties_before_merge`
- Common error title and exception `DataValidationError` for merge validations on Item
2021-08-09 13:25:13 +05:30
barredterra
c6c2773e02 refactor: def instead of lambda 2021-08-03 11:22:42 +02:00
barredterra
950521299a Merge branch 'version-13-hotfix' into datev_more_info 2021-08-03 10:47:57 +02:00
barredterra
c82611aa62 feat: sort timesheets by start time 2021-08-02 23:19:57 +02:00
barredterra
1110f88e5a feat: refactor and enhance sales invoice timesheet 2021-08-02 23:06:37 +02:00
barredterra
b57521a337 feat: add total_billing_hours to Sales Invoice 2021-08-02 18:37:45 +02:00
Anupam Kumar
c2b5b0edee fix: bank remittance report issue (#26398) 2021-08-02 10:51:21 +05:30
Deepesh Garg
75f23aed1c fix: Multiple fixes in payment entry 2021-08-01 17:48:50 +05:30
Deepesh Garg
c02e42ff84 fix: Multiple fixes in payment entry 2021-07-29 19:46:17 +05:30
barredterra
a21f76f2a1 feat: add voucher-specific data to datev export 2021-07-21 20:08:20 +02:00
Alan
37a886a8a9 Merge branch 'version-13-hotfix' into feat-bom-process-loss 2021-07-21 17:13:36 +05:30
marination
7ef2af203f test: Website Item basic test & removed product configurator tests
- Sider fixes: missing semicolons
- Added two basic tests for Website Item
- Commented Product Configurator tests, needs to re-written fully
2021-07-19 13:27:17 +05:30
marination
ece4f391ac fix: Remove Website Item from Item Dashboard
- Install breaks on CI, will add later
2021-07-19 13:26:08 +05:30
Marica
ea96afca62 Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-07-16 15:17:37 +05:30
marination
401cbc01a9 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-07-15 21:03:01 +05:30
marination
bb60523fa7 feat: Cart minor UI/UX Refresh
- Added Setting to show or hide price if checkout is disabled
- Show Web Item name in cart instead of Desk Item name
- Cart minor UI Refresh: added images in cart
- Cart minor UI Refresh: repositioned remove button and redesigned
- Cart minor UI Refresh: Payment Summary section
- Cart minor UI Refresh: Disable input on free item
- Cart minor UI Refresh: Add address button in cards
- New file for cart payment summary UI with coupon code (old)
2021-07-15 20:09:02 +05:30
Deepesh Garg
dfadae6a92 fix: Report and JSON generation for Advances received 2021-07-15 15:36:54 +05:30
marination
fed3b575eb chore: Wishlist UI (minor)
- Minor wishlist UI refresh, actions on hover, new icon
- Increase max length of wishlist card title
- Dont fetch outdated price in wishlist
- Translate 'out of stock'
- Use ORM
2021-07-14 01:36:50 +05:30
marination
f14596a8f3 feat: Recommended Items and Item full page refresh
- Added Optional Recommended Items
- Item Full Page minor UI Refresh
- Floating wishlist button in item full page
- Reviews section UI Refresh
2021-07-13 23:46:24 +05:30
Noah Jacob
449c58d809 refactor: suggested changes 2021-07-13 11:12:33 +05:30
Noah Jacob
a1a4e8d616 fix: Sider 2021-07-13 11:12:33 +05:30
Noah Jacob
e60a349432 test: updated test cases 2021-07-13 11:12:33 +05:30
Noah Jacob
872cd1cac8 test: test cases for fetching customer group details 2021-07-13 11:12:33 +05:30
Noah Jacob
d160e73c03 test: test case for fetching supplier group details 2021-07-13 11:12:33 +05:30
Noah Jacob
905aebc310 feat: details fetched from customer group in customer 2021-07-13 11:12:33 +05:30
Noah Jacob
47c2317b1a feat: details fetched from supplier group in supplier 2021-07-13 11:12:33 +05:30
marination
cf88b517c8 chore: UI refresh for grid/list view and search
- enhanced UI for grid/list view, actions visible on hover only
- enhanced search UI
- Added indicator to show if item is in cart
- Moved search with view togglers
2021-07-12 03:28:33 +05:30
marination
9920747a26 fix: Discount Filtes & Filter behaviour
- Client: Maintain state where listing is re-rendered due filter trigger
- Client: Handle binding/restoring discount filters separately on filter trigger
- Client: Placeholder Image for search results
- If any filter is checked, query and display items from page 1
- Query Engine: Smaller functions and handle discount filter properly
- Added index on item group and brand for Website item
2021-07-08 19:34:07 +05:30
marination
f39c6db08a fix: Rename Wishlist Item, Use Website Item Name in Wishlist Cards
- Renamed Wishlist Items to Wishlist Item
- Use Website Item Name in Wishlist
- Add Website Item Name field in Wishlist Item
- Remove accidental extra `font-size` attribute
2021-07-08 13:58:56 +05:30
marination
c844f3a612 fix: Sync Website Items on Item Change, Short Website Description
- Added Short Description in Website Item for List View
- Update Website Item on Item info change
- Un-publish Web Item if Item is disabled
- Removed unnecessary dependency on Item from query engine
- Rearranged item detail fields in Website Item
- Added Link to Website Item on Item Dashboard
2021-07-08 12:52:57 +05:30
marination
2107883301 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-07-08 11:12:14 +05:30
marination
66a7924d97 feat: Guest Display Settings
- Re-arranged Settings checkboxes
- Deleted `show_availability_status` from E Commerce Settings
- Added `Hide Price for Guest` functionality
- Added Custom Redirection for Guest Actions in  E Commerce Settings
- Minor cleanups
2021-07-08 10:57:01 +05:30
marination
bcaea4932d fix: Filters state, Search input clearing, Paging buttons
- Fixed repetitive calls on checking filter checkbox
- Query count of items after offset for accurate Paging button display
- Order items by ranking in query
- Search results get empty on clearing input
2021-07-07 16:30:56 +05:30
Deepesh Garg
cc57be51be Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into gstr_1_cdnr_unregistered_json 2021-07-07 10:17:59 +05:30
Deepesh Garg
05b93063aa Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into gstr_1_cdnr_unregistered_json 2021-07-06 11:27:18 +05:30
marination
1701125fca chore: Cleanup Query Engine and Product query API
- Resolved merge conflicts in item_group.py
- Separate api.py file for product listing backend api
- Brought back ORM in query engine, handled missing cases (website item groups, etc)
- Return results from API in a descriptive manner, helps keep sanity in JS
- On toggling views store view preference in localStorage
2021-06-29 11:22:27 +05:30
marination
db792c307f Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-06-28 16:50:08 +05:30
18alantom
7ed8c8c11f fix: sider 2021-06-25 15:48:28 +05:30
18alantom
2d13d5ec31 Merge branch 'feat-bom-process-loss' of https://github.com/18alantom/erpnext into feat-bom-process-loss 2021-06-25 15:15:57 +05:30
18alantom
e81a7cf44e refactor: polyfill ?? 2021-06-25 15:14:55 +05:30
Alan
edb38ad4c7 Merge branch 'version-13-hotfix' into feat-bom-process-loss 2021-06-25 14:51:04 +05:30
18alantom
69d5e2a6f8 fix: sider 2021-06-25 14:46:08 +05:30
18alantom
e957c026bb fix: add more validations, remove source wh req for pl item 2021-06-25 14:21:12 +05:30
18alantom
f34f0a40c4 test: add bom tests for process loss val, add se test for qty calc 2021-06-25 14:20:22 +05:30
18alantom
697a8bce7f refactor: shift auto entry of is process loss check, update validations 2021-06-24 15:05:52 +05:30
18alantom
8032095d81 fix: add warehouse and unset is scrap for process loss items 2021-06-23 15:30:48 +05:30
18alantom
025f4b21de feat: add is process loss autoset and validation 2021-06-23 15:06:00 +05:30
18alantom
867ed3a1e4 feat: add provision for process loss in manufac 2021-06-22 16:53:35 +05:30
Deepesh Garg
2f9f562046 feat: CDNR Unreg json generation 2021-06-20 20:18:23 +05:30
marination
d6a32ea832 fix: Missing Image in Item Page and Variants in Cart
- Added fallback for missing image in item page
- Explore button font
- Incorrectly fetching route from Item master, use Website Item instead
2021-06-09 00:11:48 +05:30
marination
4ba78e73dd fix: Checkbox sizes and paging buttons
- Show paging buttons at all times and enable/disable buttons
- Define checkbox and radio button  sizes within erpnext
- Wishlist cards even height
2021-06-08 22:35:36 +05:30
marination
cdcb18bd16 fix: Font size, empty image styles, and minor cleanup
- some frappe css font variables weren't loading, remove dependency
- fixed fallback display for missing images in views
- py code cleanup (minor)
2021-06-08 19:40:26 +05:30
Marica
791e244b4f Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-06-08 15:00:59 +05:30
marination
bc3ab093b8 fix: Mixin import issue, search error handling, shop-by-category slideshow 2021-06-08 14:53:45 +05:30
marination
5f3e4f0e82 fix: Search UI open/close and Empty product search results 2021-06-02 18:32:35 +05:30
marination
62faa5ba1f fix: Sider and Patch tests 2021-06-02 13:24:06 +05:30
marination
e000be5145 Merge branch 'version-13-hotfix' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-06-01 12:49:55 +05:30
marination
acfdc6f22e feat: Search UI
- Search UI with dropdown results
- Client class to handle Product Search actions and results
- Integrated Search bar into all-products and item group pages
- Run db search without redisearch
- Cleanup: [Search] change decorator names and variables
- Sider fixes
2021-06-01 12:46:35 +05:30
Hussain Nagaria
4f73deeb78 Merge branch 'search-with-redisearch' into e-commerce-refactor 2021-05-28 15:01:00 +05:30
Hussain Nagaria
fd3ce1b573 fix: Documentation link and open in new tab 2021-05-28 07:10:24 +05:30
Hussain Nagaria
8a25523ad7 chore: Redisearch warning in search settings 2021-05-28 06:36:16 +05:30
Hussain Nagaria
6799eb98db feat: Add fallback when redisearch not loaded 2021-05-28 06:25:49 +05:30
Marica
ea4ec3bc7c Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-05-27 19:03:55 +05:30
marination
0712cafa0d chore: Shopping Cart styles and cleanup shallow
- Added remove button to cart item rows
- Freeze on change in Shopping Cart (UX)
- Fixed cart items and taxes/totals alignment issues
- Made Cart responsive
- Added free item indicator
- Fixed item group nested routing issue
- Sales Order is populated with right source warehouse
2021-05-27 18:53:11 +05:30
Hussain Nagaria
50d7989e50 chore: Redisearch module load tracking 2021-05-26 22:43:22 +05:30
Hussain Nagaria
9499db8cd9 feat: Add decorator for redisearch 2021-05-26 20:26:34 +05:30
marination
bba0bc874a fix: Discount Filters and Web templates
- Fixed discount filters (didn’t work after js render change)
- Fix Item Card Group template height and style
- Add placeholder to missing images in Product Category Cards template
- Code cleanup
2021-05-25 01:35:22 +05:30
marination
82cc7f1027 fix: Items Query, Sub categories, Review Button
- Include Item Variant table in query only if attributes are involved
- Render sub categories of they exist, even without items
- 'Write a Review' provision only if user is a customer
2021-05-20 01:45:20 +05:30
marination
fe47761f20 fix: Move get_product_filtrs_data to website item file 2021-05-19 23:59:09 +05:30
marination
2bc68f3f28 fix: Empty states and miscellanous fixes
- Added Wishlist and Product Listing empty states
- Hide ‘Write Review’ button f user is not Customer
- Fixed grid view title (missing arg)
- Render empty state if no items form server side
- Removed unused function
- Guest user redirected to login on clicking Wishlist button
- Fixed ‘Notes’ field clearing issue
2021-05-19 21:17:47 +05:30
marination
681ada9aaf fix: Patch fix for fresh installs
- minor sider fix
- patch fix for fresh installs
2021-05-18 21:38:36 +05:30
marination
a0bbe7fea7 fix: Sider and Patches
- Sider fixes
- Deleted patches that worked as per old schema
- Cleared instances of web fields linked to Item master
2021-05-17 21:27:42 +05:30
marination
6a802f354b feat: Product View toggling
- Added fully functional list and grid view toggling
- Added ProductGrid and ProductList controllers
- Moved html snippets, rendered via JS now
- Item Group page also rendered via common controller
- Paging section rendered via JS
- Minor style changes
2021-05-17 20:44:41 +05:30
Marica
321b8afbff Merge branch 'version-13-hotfix' into e-commerce-refactor 2021-05-13 14:28:45 +05:30
marination
a975f9915b feat: (wip) Toggle Views
- Auto Height on Cards
- Title with ellipses on length exceed
- Changed namepaces
- Moved product card rendering to JS
- Added Image and List View Toggling buttons
- Kept basic filters rendering just as before
2021-05-13 14:26:25 +05:30
marination
163a62476e fix: Show Offers section only if offers exist 2021-05-13 14:26:06 +05:30
marination
acb6ce8f95 feat: Offer Display
- Added offers section in website item
- Added more roles to website item
- Fixed attachment limit issue in website item
- Created Website Offer child doctype
- Added offers listing in Item full page view
- style fixes
2021-05-13 14:25:40 +05:30
Hussain Nagaria
7a278208c8 chores: Add function params and remove unused imports 2021-05-11 13:00:41 +05:30
Hussain Nagaria
1ebb1b822c feat: Show Recent Searches 2021-05-05 16:04:22 +05:30
Hussain Nagaria
b52d283739 feat: Show brand line in search results 2021-05-05 13:47:43 +05:30
Hussain Nagaria
4356ffbfe8 feat: Add brand line display setting 2021-05-05 13:09:46 +05:30
Hussain Nagaria
eb955c7e99 chore: Add placeholder image 2021-05-04 11:08:45 +05:30
Hussain Nagaria
28c2f5d832 chore: Add query clean-up 2021-05-03 05:47:38 +05:30
Hussain Nagaria
a6deace37c refactor: Use global redis connection 2021-04-29 20:48:27 +05:30
Hussain Nagaria
58d08ee307 chore: Make it a little beautiful 2021-04-29 20:01:31 +05:30
Hussain Nagaria
d22951b014 feat: Add Category autocomplete with config in settings 2021-04-26 11:15:20 +05:30
Hussain Nagaria
c376b67725 feat: Make search index fields configurable
- Move indexing logic to separate file
- Add more validation logic for 'search index fields' field
2021-04-26 07:02:52 +05:30
Hussain Nagaria
fdcfa41a6f feat: Add search fields field 2021-04-23 20:00:47 +05:30
Hussain Nagaria
4a0136b524 feat: Basic Query + Autocomplete 2021-04-22 14:21:29 +05:30
Hussain Nagaria
cc402a5d0c feat: Add basic autocomplete using redisearch 2021-04-21 13:52:23 +05:30
marination
b2e607bb55 chore: Sider and Semgrep 2021-04-21 13:08:05 +05:30
marination
ed0aabbb19 Merge branch 'develop' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-04-21 11:55:45 +05:30
marination
8bc90a65e4 feat: Discount Filters
- Discount filters in filters section
- Code cleanup
2021-04-20 21:54:52 +05:30
marination
94d0149756 Merge branch 'develop' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-04-19 13:06:16 +05:30
marination
c2bd7e504d fix: Item schema modified date update
- Modified date changed due to merge conflict
- Changed it to a later date to make sure Item migrates correctly
2021-04-13 16:57:35 +05:30
marination
f10a08ad6b feat: Slashed Prices and Discount display
- Registered mrp and price after discounts
- slashed price with discount in listing, item page and wishlist
- removed redundant imports
- renamed method to `get_web_item_qty_in_stock` to get Website Item stock
- adjusted styles for resizing
- made add to cart button full width on cards
2021-04-13 00:39:26 +05:30
marination
6d85e821c1 fix: Sider and Tests 2021-04-08 17:23:39 +05:30
marination
aff53b762e Merge branch 'develop' of https://github.com/frappe/erpnext into e-commerce-refactor 2021-04-08 00:06:05 +05:30
marination
be68f75348 feat: Customer Ratings & Reviews Full Page
- Created macros for repetitive snippets
- Created Customer Reviews full page
- View more button to reveal 10 more reviews at a time
- Common function to get reviews with start and end
2021-04-07 23:49:04 +05:30
marination
470ec148a4 feat: (wip) Ratings and Reviews
- Added Ratings and Reviews section in Item full page view
- Added provision to write a review with popup
- Created Item Review Doctype to store User-Item unique reviews
- Added privision to enable/disable wishlist and reviews in e commerce settings
- Hide cart and wishlist actions everywhere (even navbar) depending on settings
- Moved some more inline css to scss
- Small logic fixes
TODO: Reviews full page view with paging
2021-03-25 11:52:50 +05:30
marination
fe6e77791b fix: Remove unnecessary css variable and hover state
- Removed wish-red variable
- Removed hover state from remove wishlist item button in card
- Removed inline css from wishlist item card
2021-03-22 16:46:51 +05:30
marination
f42716f348 feat: Product Details Tabbed Section and Add to Wishlist in Item Full Page
- Add to Wishlist button next to add to cart
- Beautified Product Specifications table section
- Product Specifications can be optionally in a tabbed section with custom tabs added
- Removed hard coded gray bg to allow custom theme overwrites
- Fixed resizing issues in Item Full Page view
- Cleaned up inline styles and ported to scss
2021-03-22 16:17:59 +05:30
Marica
cf3f2eadfb Merge branch 'develop' into e-commerce-refactor 2021-03-16 16:00:09 +05:30
marination
075ce7f01a fix: Sider 2021-03-16 11:33:58 +05:30
marination
0b3921e3cf feat: Wishlist Page
- Navbar icon with badge count for wishlist
- Wishlist page with cards
- Cards can be moved to cart or removed in a click
- Separated all wishlist related methods into wishlist.js
- Made a common js method(util) to add/remove wishlist items
- Bug fix: Make sure items are removed from session user's wishlist
2021-03-16 00:05:53 +05:30
marination
0783e3deac feat: Wishlist from card actions
- Add remove items from wishlist
- Wishlist icon at nav bar
- Animate wishlist icon in card and navbar
- Remember wished state after refresh as well
2021-03-14 17:31:34 +05:30
Marica
1c8ee168fb Merge branch 'develop' into e-commerce-refactor 2021-03-11 21:43:45 +05:30
marination
fc40b57c21 feat: Animate Add to Cart List interactions (UX)
- Increased qty in cart on clicking add to cart for existing item
- Simplified macro arguments
- Navbar cart icon animation
- Explore button for template item in card
- Add to cart button animation
2021-03-11 21:44:01 +05:30
marination
e13f7622ba feat: Card Actions and Wishlist
- Rough UI for card actions
- Wishlist doctype
- Indicators on card based on stock availability
2021-03-11 11:42:10 +05:30
marination
aa989a95e3 feat: Shop by Category
- Added Shop by Category Page
- Tabbed sections for item fields in Shop by Category Page
- Added Shop by Category Section in E commerce Settings
- Nested Navigation & Breadcrumbs in Item group pages
- Added scrollable & clickable Sub categories in Item Group page
- Made breadcrumbs slightly dynamic in Item Page
- Added image to Brand doctype
2021-03-08 10:28:02 +05:30
marination
31d97b43e6 chore: Removed Shopping Cart Module
- Moved all files and web templates from Shopping Cart to E-commerce module
- Made Shopping Cart module obsolete
- Moved select E-commerce related files from Portal to E-commerce module
- Minor cleanups
- Fixed Shopping Cart and Product Configurator tests
2021-03-08 10:28:02 +05:30
marination
d93e3a32da chore: Patches for Website Item
- Patch to make website item from item
- Patch to move Products and Shopping Cart Settings into E Commerce Settings
- Patch to move products in Homepage from Item to Website Item
- Minor cleanup, replacing/removing references to Item website fields (obsolete)
2021-03-08 10:28:02 +05:30
marination
333d08f459 fix: Hide Attribute filters if 'Hide Variants' is enabled in E Commerce Settings
- Hide Attribute filters if 'Hide Variants' is enabled in E Commerce Settings
- Consider 'Hide Variants' in ProductQuery Engine
- Added docstrings
- Remove `get_e_commerce_settings`, redundant
2021-03-08 10:26:05 +05:30
marination
2a3f5da6af fix: Sider and indexing (minor) 2021-03-08 10:26:05 +05:30
marination
862a924cd2 chore: Removing Item's Website section & references
- Removed old onboarding slide json and `create_onboarding_docs` methods
- Removed website sections from Item master
- Removed references to item website fields
- Shifted Item doctype website methods to Website Item
- Removed WebsiteGenerator from Item doctype
- Website Items in Homepage Products section
- Removed redundant code from item_group.py
- Fix: Item field filters won’t appear in website
2021-03-08 10:26:05 +05:30
marination
675e2af3ea chore: Drive E-commerce via Website Item
- Removed Shopping Cart Settings
- Portal fully driven via E Commerce Settings
- All Item listing querying will happen via ProductQuery engine only
- Product Listing via Website Items
- removed redundant code
- Moved all website logic from Item to Website Item
2021-03-08 10:26:05 +05:30
marination
978e8aa31c feat: E-commerce Refactor
- Created "Website Item" to handle website related information
- Publishing Item new flow
- Created "E Commerce Settings"
- Removed Products Settings
2021-03-08 10:24:45 +05:30
6299 changed files with 1045889 additions and 2023217 deletions

View File

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

View File

@@ -2,32 +2,65 @@
"env": {
"browser": true,
"node": true,
"es2022": true
"es6": true
},
"parserOptions": {
"ecmaVersion": 9,
"sourceType": "module"
},
"extends": "eslint:recommended",
"rules": {
"indent": "off",
"brace-style": "off",
"no-mixed-spaces-and-tabs": "off",
"no-useless-escape": "off",
"space-unary-ops": ["error", { "words": true }],
"linebreak-style": "off",
"quotes": ["off"],
"semi": "off",
"camelcase": "off",
"no-unused-vars": "off",
"no-console": ["warn"],
"no-extra-boolean-cast": ["off"],
"no-control-regex": ["off"]
"indent": [
"error",
"tab",
{ "SwitchCase": 1 }
],
"brace-style": [
"error",
"1tbs"
],
"space-unary-ops": [
"error",
{ "words": true }
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"off"
],
"semi": [
"warn",
"always"
],
"camelcase": [
"off"
],
"no-unused-vars": [
"warn"
],
"no-redeclare": [
"warn"
],
"no-console": [
"warn"
],
"no-extra-boolean-cast": [
"off"
],
"no-control-regex": [
"off"
],
"space-before-blocks": "warn",
"keyword-spacing": "warn",
"comma-spacing": "warn",
"key-spacing": "warn"
},
"root": true,
"globals": {
"frappe": true,
"Vue": true,
"SetVueGlobals": true,
"erpnext": true,
"hub": true,
"$": true,
@@ -64,10 +97,8 @@
"is_null": true,
"in_list": true,
"has_common": true,
"posthog": true,
"has_words": true,
"validate_email": true,
"open_web_template_values_editor": true,
"get_number_format": true,
"format_number": true,
"format_currency": true,
@@ -123,8 +154,8 @@
"before": true,
"beforeEach": true,
"onScan": true,
"html2canvas": true,
"extend_cscript": true,
"localforage": true,
"Plaid": true
"localforage": true
}
}

View File

@@ -28,10 +28,6 @@ ignore =
B007,
B950,
W191,
E124, # closing bracket, irritating while writing QB code
E131, # continuation line unaligned for hanging indent
E123, # closing bracket does not match indentation of opening bracket's line
E101, # ensured by use of black
max-line-length = 200
exclude=.github/helper/semgrep_rules

View File

@@ -8,33 +8,12 @@
#
# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
# Replace use of Class.extend with native JS class
1fe891b287a1b3f225d29ee3d07e7b1824aba9e7
# This commit just changes spaces to tabs for indentation in some files
5f473611bd6ed57703716244a054d3fb5ba9cd23
# Whitespace fix throughout codebase
4551d7d6029b6f587f6c99d4f8df5519241c6a86
b147b85e6ac19a9220cd1e2958a6ebd99373283a
# Whitespace trimming throughout codebase
9bb69e711a5da43aaf8c8ecb5601aeffd89dbe5a
f0bcb753fb7ebbb64bb0d6906d431d002f0f7d8f
# sort and cleanup imports
915b34391c2066dfc83e60a5813c5a877cebe7ac
# removing six compatibility layer
8fe5feb6a4372bf5f2dfaf65fca41bbcc25c8ce7
# bulk format python code with black
494bd9ef78313436f0424b918f200dab8fc7c20b
# bulk format python code with black
baec607ff5905b1c67531096a9cf50ec7ff00a5d
# bulk refactor with sourcery
eb9ee3f79b94e594fc6dfa4f6514580e125eee8c
# js formatting
ec74a5e56617bbd76ac402451468fd4668af543d
# ruff formatting
a308792ee7fda18a681e9181f4fd00b36385bc23
# imports cleanup
4b2be2999f2203493b49bf74c5b440d49e38b5e3

View File

@@ -23,7 +23,7 @@ If your issue is not clear or does not meet the guidelines, then it will be clos
1. **Steps to Reproduce:** The bug report must have a list of steps needed to reproduce a bug. If we cannot reproduce it, then we cannot solve it.
1. **Version Number:** Please add the version number in your report. Often a bug is fixed in the latest version
1. **Clear Title:** Add a clear subject to your bug report like "Unable to submit Purchase Order without Basic Rate" instead of just "Cannot Submit"
1. **Screenshots:** Screenshots are a great way of communicating issues. Try adding annotations or using LiceCAP to take a screencast in `gif`.
1. **Screenshots:** Screenshots are a great way of communicating the issues. Try adding annotations or using LiceCAP to take a screencast in `gif`.
### Feature Request Guidelines

47
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,47 @@
---
name: Bug report
about: Report a bug encountered while using ERPNext
labels: bug
---
<!--
Welcome to ERPNext issue tracker! Before creating an issue, please heed the following:
1. This tracker should only be used to report bugs and request features / enhancements to ERPNext
- For questions and general support, checkout the manual https://erpnext.com/docs/user/manual/en or use https://discuss.erpnext.com
- For documentation issues, refer to https://github.com/frappe/erpnext_com
2. Use the search function before creating a new issue. Duplicates will be closed and directed to
the original discussion.
3. When making a bug report, make sure you provide all required information. The easier it is for
maintainers to reproduce, the faster it'll be fixed.
4. If you think you know what the reason for the bug is, share it with us. Maybe put in a PR 😉
-->
## Description of the issue
## Context information (for bug reports)
**Output of `bench version`**
```
(paste here)
```
## Steps to reproduce the issue
1.
2.
3.
### Observed result
### Expected result
### Stacktrace / full error message
```
(paste here)
```
## Additional information
OS version / distribution, `ERPNext` install method, etc.

View File

@@ -1,89 +0,0 @@
name: Bug Report
description: Report a bug encountered while using ERPNext
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Welcome to ERPNext issue tracker! Before creating an issue, please heed the following:
1. This tracker should only be used to report bugs and request features / enhancements to ERPNext
- For questions and general support, checkout the [user manual](https://docs.erpnext.com/) or use [forum](https://discuss.erpnext.com)
- For documentation issues, propose edit on [documentation site](https://docs.erpnext.com/) directly.
2. When making a bug report, make sure you provide all required information. The easier it is for
maintainers to reproduce, the faster it'll be fixed.
3. If you think you know what the reason for the bug is, share it with us. Maybe put in a PR 😉
- type: textarea
id: bug-info
attributes:
label: Information about bug
description: Also tell us, what did you expect to happen?
placeholder: Please provide as much information as possible.
validations:
required: true
- type: dropdown
id: module
attributes:
label: Module
description: Select affected module of ERPNext.
multiple: true
options:
- accounts
- stock
- buying
- selling
- ecommerce
- manufacturing
- HR
- projects
- support
- CRM
- assets
- integrations
- quality
- regional
- portal
- agriculture
- education
- non-profit
- other
validations:
required: true
- type: textarea
id: exact-version
attributes:
label: Version
description: Share exact version number of Frappe and ERPNext you are using.
placeholder: |
Frappe version -
ERPNext Verion -
validations:
required: true
- type: dropdown
id: install-method
attributes:
label: Installation method
options:
- docker
- easy-install
- manual install
- FrappeCloud
validations:
required: false
- type: textarea
id: logs
attributes:
label: Relevant log output / Stack trace / Full Error Message.
description: Please copy and paste any relevant log output. This will be automatically formatted.
render: shell
- type: markdown
attributes:
value: |
By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/frappe/erpnext/blob/develop/CODE_OF_CONDUCT.md)

View File

@@ -1,10 +1,7 @@
---
name: Feature request
about: Suggest an idea to improve ERPNext
title: ''
labels: feature-request
assignees: ''
---
<!--
@@ -12,18 +9,10 @@ Welcome to ERPNext issue tracker! Before creating an issue, please heed the foll
1. This tracker should only be used to report bugs and request features / enhancements to ERPNext
- For questions and general support, checkout the manual https://erpnext.com/docs/user/manual/en or use https://discuss.erpnext.com
- For documentation issues, refer to https://github.com/frappe/erpnext_com
2. Use the search function before creating a new issue. Duplicates will be closed and directed to
the original discussion.
3. When making a feature request, make sure to be as verbose as possible. The better you convey your message, the greater the drive to make it happen.
Please keep in mind that we get many many requests and we can't possibly work on all of them, we prioritize development based on the goals of the product and organization. Feature requests are still welcome as it helps us in research when we do decide to work on the requested feature.
If you're in urgent need to a feature, please try the following channels to get paid developments done quickly:
1. Certified ERPNext partners: https://erpnext.com/partners
2. Developer community on ERPNext forums: https://discuss.erpnext.com/c/developers/5
3. Telegram group for ERPNext/Frappe development work: https://t.me/erpnext_opps
3. When making a feature request, make sure to be as verbose as possible. The better you convey your message, the greater the drive to make it happen.
-->
**Is your feature request related to a problem? Please describe.**

View File

@@ -0,0 +1,17 @@
---
name: Question about using ERPNext
about: This is not the appropriate channel
labels: invalid
---
Please post on our forums:
for questions about using `ERPNext`: https://discuss.erpnext.com
for questions about using the `Frappe Framework`: ~~https://discuss.frappe.io~~ => [stackoverflow](https://stackoverflow.com/questions/tagged/frappe) tagged under `frappe`
for questions about using `bench`, probably the best place to start is the [bench repo](https://github.com/frappe/bench)
For documentation issues, use the [ERPNext Documentation](https://erpnext.com/docs/) or [Frappe Framework Documentation](https://frappe.io/docs/user/en) or the [developer cheetsheet](https://github.com/frappe/frappe/wiki/Developer-Cheatsheet)
> **Posts that are not bug reports or feature requests will not be addressed on this issue tracker.**

View File

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

View File

@@ -3,62 +3,52 @@ from urllib.parse import urlparse
import requests
WEBSITE_REPOS = [
docs_repos = [
"frappe_docs",
"erpnext_documentation",
"erpnext_com",
"frappe_io",
]
DOCUMENTATION_DOMAINS = [
"docs.erpnext.com",
"frappeframework.com",
]
def uri_validator(x):
result = urlparse(x)
return all([result.scheme, result.netloc, result.path])
def is_valid_url(url: str) -> bool:
parts = urlparse(url)
return all((parts.scheme, parts.netloc, parts.path))
def is_documentation_link(word: str) -> bool:
if not word.startswith("http") or not is_valid_url(word):
return False
parsed_url = urlparse(word)
if parsed_url.netloc in DOCUMENTATION_DOMAINS:
return True
if parsed_url.netloc == "github.com":
parts = parsed_url.path.split("/")
if len(parts) == 5 and parts[1] == "frappe" and parts[2] in WEBSITE_REPOS:
return True
return False
def contains_documentation_link(body: str) -> bool:
return any(is_documentation_link(word) for line in body.splitlines() for word in line.split())
def check_pull_request(number: str) -> "tuple[int, str]":
response = requests.get(f"https://api.github.com/repos/frappe/erpnext/pulls/{number}")
if not response.ok:
return 1, "Pull Request Not Found! ⚠️"
payload = response.json()
title = (payload.get("title") or "").lower().strip()
head_sha = (payload.get("head") or {}).get("sha")
body = (payload.get("body") or "").lower()
if not title.startswith("feat") or not head_sha or "no-docs" in body or "backport" in body:
return 0, "Skipping documentation checks... 🏃"
if contains_documentation_link(body):
return 0, "Documentation Link Found. You're Awesome! 🎉"
return 1, "Documentation Link Not Found! ⚠️"
def docs_link_exists(body):
for line in body.splitlines():
for word in line.split():
if word.startswith('http') and uri_validator(word):
parsed_url = urlparse(word)
if parsed_url.netloc == "github.com":
parts = parsed_url.path.split('/')
if len(parts) == 5 and parts[1] == "frappe" and parts[2] in docs_repos:
return True
elif parsed_url.netloc == "docs.erpnext.com":
return True
if __name__ == "__main__":
exit_code, message = check_pull_request(sys.argv[1])
print(message)
sys.exit(exit_code)
pr = sys.argv[1]
response = requests.get("https://api.github.com/repos/frappe/erpnext/pulls/{}".format(pr))
if response.ok:
payload = response.json()
title = (payload.get("title") or "").lower().strip()
head_sha = (payload.get("head") or {}).get("sha")
body = (payload.get("body") or "").lower()
if (title.startswith("feat")
and head_sha
and "no-docs" not in body
and "backport" not in body
):
if docs_link_exists(body):
print("Documentation Link Found. You're Awesome! 🎉")
else:
print("Documentation Link Not Found! ⚠️")
sys.exit(1)
else:
print("Skipping documentation checks... 🏃")

View File

@@ -4,57 +4,30 @@ set -e
cd ~ || exit
sudo apt update
sudo apt remove mysql-server mysql-client
sudo apt install libcups2-dev redis-server mariadb-client-10.6
sudo apt-get install redis-server libcups2-dev
pip install frappe-bench
githubbranch=${GITHUB_BASE_REF:-${GITHUB_REF##*/}}
frappeuser=${FRAPPE_USER:-"frappe"}
frappebranch=${FRAPPE_BRANCH:-$githubbranch}
git clone "https://github.com/${frappeuser}/frappe" --branch "${frappebranch}" --depth 1
git clone https://github.com/frappe/frappe --branch "${GITHUB_BASE_REF:-${GITHUB_REF##*/}}" --depth 1
bench init --skip-assets --frappe-path ~/frappe --python "$(which python)" frappe-bench
mkdir ~/frappe-bench/sites/test_site
cp -r "${GITHUB_WORKSPACE}/.github/helper/site_config.json" ~/frappe-bench/sites/test_site/
if [ "$DB" == "mariadb" ];then
cp -r "${GITHUB_WORKSPACE}/.github/helper/site_config_mariadb.json" ~/frappe-bench/sites/test_site/site_config.json
else
cp -r "${GITHUB_WORKSPACE}/.github/helper/site_config_postgres.json" ~/frappe-bench/sites/test_site/site_config.json
fi
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 -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'"
if [ "$DB" == "mariadb" ];then
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE DATABASE test_frappe"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'"
mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "FLUSH PRIVILEGES"
fi
if [ "$DB" == "postgres" ];then
echo "travis" | psql -h 127.0.0.1 -p 5432 -c "CREATE DATABASE test_frappe" -U postgres;
echo "travis" | psql -h 127.0.0.1 -p 5432 -c "CREATE USER test_frappe WITH PASSWORD 'test_frappe'" -U postgres;
fi
install_whktml() {
if [ "$(lsb_release -rs)" = "22.04" ]; then
wget -O /tmp/wkhtmltox.deb https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
sudo apt install /tmp/wkhtmltox.deb
else
echo "Please update this script to support wkhtmltopdf for $(lsb_release -ds)"
exit 1
fi
}
install_whktml &
wkpid=$!
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"
wget -O /tmp/wkhtmltox.tar.xz https://github.com/frappe/wkhtmltopdf/raw/master/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
tar -xf /tmp/wkhtmltox.tar.xz -C /tmp
sudo mv /tmp/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf
sudo chmod o+x /usr/local/bin/wkhtmltopdf
cd ~/frappe-bench || exit
@@ -63,13 +36,6 @@ 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 --branch ${githubbranch%"-hotfix"}
bench get-app erpnext "${GITHUB_WORKSPACE}"
if [ "$TYPE" == "server" ]; then bench setup requirements --dev; fi
wait $wkpid
bench start &>> ~/frappe-bench/bench_start.log &
CI=Yes bench build --app frappe &
bench start &> bench_run_logs.txt &
bench --site test_site reinstall --yes

View File

@@ -0,0 +1,63 @@
import frappe
from frappe import _
from frappe.model.document import Document
# ruleid: frappe-modifying-but-not-comitting
def on_submit(self):
if self.value_of_goods == 0:
frappe.throw(_('Value of goods cannot be 0'))
self.status = 'Submitted'
# ok: frappe-modifying-but-not-comitting
def on_submit(self):
if self.value_of_goods == 0:
frappe.throw(_('Value of goods cannot be 0'))
self.status = 'Submitted'
self.db_set('status', 'Submitted')
# ok: frappe-modifying-but-not-comitting
def on_submit(self):
if self.value_of_goods == 0:
frappe.throw(_('Value of goods cannot be 0'))
x = "y"
self.status = x
self.db_set('status', x)
# ok: frappe-modifying-but-not-comitting
def on_submit(self):
x = "y"
self.status = x
self.save()
# ruleid: frappe-modifying-but-not-comitting-other-method
class DoctypeClass(Document):
def on_submit(self):
self.good_method()
self.tainted_method()
def tainted_method(self):
self.status = "uptate"
# ok: frappe-modifying-but-not-comitting-other-method
class DoctypeClass(Document):
def on_submit(self):
self.good_method()
self.tainted_method()
def tainted_method(self):
self.status = "update"
self.db_set("status", "update")
# ok: frappe-modifying-but-not-comitting-other-method
class DoctypeClass(Document):
def on_submit(self):
self.good_method()
self.tainted_method()
self.save()
def tainted_method(self):
self.status = "uptate"

View File

@@ -0,0 +1,151 @@
# This file specifies rules for correctness according to how frappe doctype data model works.
rules:
- id: frappe-modifying-but-not-comitting
patterns:
- pattern: |
def $METHOD(self, ...):
...
self.$ATTR = ...
- pattern-not: |
def $METHOD(self, ...):
...
self.$ATTR = ...
...
self.db_set(..., self.$ATTR, ...)
- pattern-not: |
def $METHOD(self, ...):
...
self.$ATTR = $SOME_VAR
...
self.db_set(..., $SOME_VAR, ...)
- pattern-not: |
def $METHOD(self, ...):
...
self.$ATTR = $SOME_VAR
...
self.save()
- metavariable-regex:
metavariable: '$ATTR'
# this is negative look-ahead, add more attrs to ignore like (ignore|ignore_this_too|ignore_me)
regex: '^(?!ignore_linked_doctypes|status_updater)(.*)$'
- metavariable-regex:
metavariable: "$METHOD"
regex: "(on_submit|on_cancel)"
message: |
DocType modified in self.$METHOD. Please check if modification of self.$ATTR is commited to database.
languages: [python]
severity: ERROR
- id: frappe-modifying-but-not-comitting-other-method
patterns:
- pattern: |
class $DOCTYPE(...):
def $METHOD(self, ...):
...
self.$ANOTHER_METHOD()
...
def $ANOTHER_METHOD(self, ...):
...
self.$ATTR = ...
- pattern-not: |
class $DOCTYPE(...):
def $METHOD(self, ...):
...
self.$ANOTHER_METHOD()
...
def $ANOTHER_METHOD(self, ...):
...
self.$ATTR = ...
...
self.db_set(..., self.$ATTR, ...)
- pattern-not: |
class $DOCTYPE(...):
def $METHOD(self, ...):
...
self.$ANOTHER_METHOD()
...
def $ANOTHER_METHOD(self, ...):
...
self.$ATTR = $SOME_VAR
...
self.db_set(..., $SOME_VAR, ...)
- pattern-not: |
class $DOCTYPE(...):
def $METHOD(self, ...):
...
self.$ANOTHER_METHOD()
...
self.save()
def $ANOTHER_METHOD(self, ...):
...
self.$ATTR = ...
- metavariable-regex:
metavariable: "$METHOD"
regex: "(on_submit|on_cancel)"
message: |
self.$ANOTHER_METHOD is called from self.$METHOD, check if changes to self.$ATTR are commited to database.
languages: [python]
severity: ERROR
- id: frappe-print-function-in-doctypes
pattern: print(...)
message: |
Did you mean to leave this print statement in? Consider using msgprint or logger instead of print statement.
languages: [python]
severity: WARNING
paths:
include:
- "*/**/doctype/*"
- id: frappe-modifying-child-tables-while-iterating
pattern-either:
- pattern: |
for $ROW in self.$TABLE:
...
self.remove(...)
- pattern: |
for $ROW in self.$TABLE:
...
self.append(...)
message: |
Child table being modified while iterating on it.
languages: [python]
severity: ERROR
paths:
include:
- "*/**/doctype/*"
- id: frappe-same-key-assigned-twice
pattern-either:
- pattern: |
{..., $X: $A, ..., $X: $B, ...}
- pattern: |
dict(..., ($X, $A), ..., ($X, $B), ...)
- pattern: |
_dict(..., ($X, $A), ..., ($X, $B), ...)
message: |
key `$X` is uselessly assigned twice. This could be a potential bug.
languages: [python]
severity: ERROR
- id: frappe-manual-commit
patterns:
- pattern: frappe.db.commit()
- pattern-not-inside: |
try:
...
except ...:
...
message: |
Manually commiting a transaction is highly discouraged. Read about the transaction model implemented by Frappe Framework before adding manual commits: https://frappeframework.com/docs/user/en/api/database#database-transaction-model If you think manual commit is required then add a comment explaining why and `// nosemgrep` on the same line.
paths:
exclude:
- "**/patches/**"
- "**/demo/**"
languages: [python]
severity: ERROR

14
.github/helper/semgrep_rules/report.py vendored Normal file
View File

@@ -0,0 +1,14 @@
from frappe import _
# ruleid: frappe-missing-translate-function-in-report-python
{"label": "Field Label"}
# ruleid: frappe-missing-translate-function-in-report-python
dict(label="Field Label")
# ok: frappe-missing-translate-function-in-report-python
{"label": _("Field Label")}
# ok: frappe-missing-translate-function-in-report-python
dict(label=_("Field Label"))

30
.github/helper/semgrep_rules/ux.py vendored Normal file
View File

@@ -0,0 +1,30 @@
import frappe
from frappe import _, msgprint, throw
# ruleid: frappe-missing-translate-function-python
throw("Error Occured")
# ruleid: frappe-missing-translate-function-python
frappe.throw("Error Occured")
# ruleid: frappe-missing-translate-function-python
frappe.msgprint("Useful message")
# ruleid: frappe-missing-translate-function-python
msgprint("Useful message")
# ok: frappe-missing-translate-function-python
translatedmessage = _("Hello")
# ok: frappe-missing-translate-function-python
throw(translatedmessage)
# ok: frappe-missing-translate-function-python
msgprint(translatedmessage)
# ok: frappe-missing-translate-function-python
msgprint(_("Helpful message"))
# ok: frappe-missing-translate-function-python
frappe.throw(_("Error occured"))

16
.github/helper/site_config.json vendored Normal file
View File

@@ -0,0 +1,16 @@
{
"db_host": "127.0.0.1",
"db_port": 3306,
"db_name": "test_frappe",
"db_password": "test_frappe",
"auto_email_id": "test@example.com",
"mail_server": "smtp.example.com",
"mail_login": "test@example.com",
"mail_password": "test",
"admin_password": "admin",
"root_login": "root",
"root_password": "travis",
"host_name": "http://test_site:8000",
"install_apps": ["erpnext"],
"throttle_user_limit": 100
}

View File

@@ -1,16 +0,0 @@
{
"db_host": "127.0.0.1",
"db_port": 3306,
"db_name": "test_frappe",
"db_password": "test_frappe",
"auto_email_id": "test@example.com",
"mail_server": "smtp.example.com",
"mail_login": "test@example.com",
"mail_password": "test",
"admin_password": "admin",
"root_login": "root",
"root_password": "root",
"host_name": "http://test_site:8000",
"install_apps": ["payments", "erpnext"],
"throttle_user_limit": 100
}

View File

@@ -1,18 +0,0 @@
{
"db_host": "127.0.0.1",
"db_port": 5432,
"db_name": "test_frappe",
"db_password": "test_frappe",
"db_type": "postgres",
"allow_tests": true,
"auto_email_id": "test@example.com",
"mail_server": "smtp.example.com",
"mail_login": "test@example.com",
"mail_password": "test",
"admin_password": "admin",
"root_login": "postgres",
"root_password": "travis",
"host_name": "http://test_site:8000",
"install_apps": ["erpnext"],
"throttle_user_limit": 100
}

View File

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

View File

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

55
.github/labeler.yml vendored
View File

@@ -1,55 +0,0 @@
accounts:
- erpnext/accounts/*
- erpnext/controllers/accounts_controller.py
- erpnext/controllers/taxes_and_totals.py
stock:
- erpnext/stock/*
- erpnext/controllers/stock_controller.py
- erpnext/controllers/item_variant.py
assets:
- erpnext/assets/*
regional:
- erpnext/regional/*
selling:
- erpnext/selling/*
- erpnext/controllers/selling_controller.py
buying:
- erpnext/buying/*
- erpnext/controllers/buying_controller.py
support:
- erpnext/support/*
POS:
- pos*
ecommerce:
- erpnext/e_commerce/*
maintenance:
- erpnext/maintenance/*
manufacturing:
- erpnext/manufacturing/*
crm:
- erpnext/crm/*
HR:
- erpnext/hr/*
payroll:
- erpnext/payroll*
projects:
- erpnext/projects/*
# Any python files modifed but no test files modified
needs-tests:
- any: ['erpnext/**/*.py']
all: ['!erpnext/**/test*.py']

39
.github/stale.yml vendored
View File

@@ -1,27 +1,34 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Label to use when marking as stale
staleLabel: inactive
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 30
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 10
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 7
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- hotfix
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: true
exemptProjects: false
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: true
pulls:
daysUntilStale: 15
daysUntilClose: 3
exemptLabels:
- hotfix
markComment: >
This pull request has been automatically marked as inactive because it has
not had recent activity. It will be closed within 3 days if no further
activity occurs, but it only takes a comment to keep a contribution alive
:) Also, even if it is closed, you can always reopen the PR when you're
ready. Thank you for contributing.
# Label to use when marking as stale
staleLabel: inactive
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This pull request has been automatically marked as stale because it has not had
recent activity. It will be closed within a week if no further activity occurs, but it
only takes a comment to keep a contribution alive :) Also, even if it is closed,
you can always reopen the PR when you're ready. Thank you for contributing.
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Limit to only `issues` or `pulls`
only: pulls

View File

@@ -1,32 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="4 2 193 52">
<g filter="url(#filter0_dd)">
<rect x="4" y="2" width="193" height="52" rx="6" fill="#2490EF"/>
<path d="M28 22.2891H32.8786V35.5H36.2088V22.2891H41.0874V19.5H28V22.2891Z" fill="white"/>
<path d="M41.6982 35.5H45.0129V28.7109C45.0129 27.2344 46.0866 26.2188 47.5494 26.2188C48.0085 26.2188 48.6388 26.2969 48.95 26.3984V23.4453C48.6543 23.375 48.2419 23.3281 47.9074 23.3281C46.5691 23.3281 45.472 24.1094 45.0362 25.5938H44.9117V23.5H41.6982V35.5Z" fill="white"/>
<path d="M52.8331 40C55.2996 40 56.6068 38.7344 57.2837 36.7969L61.9289 23.5156L58.4197 23.5L55.9221 32.3125H55.7976L53.3233 23.5H49.8374L54.1247 35.8437L53.9302 36.3516C53.4944 37.4766 52.6619 37.5312 51.4947 37.1719L50.7478 39.6562C51.2224 39.8594 51.9927 40 52.8331 40Z" fill="white"/>
<path d="M73.6142 35.7344C77.2401 35.7344 79.4966 33.2422 79.4966 29.5469C79.4966 25.8281 77.2401 23.3438 73.6142 23.3438C69.9883 23.3438 67.7319 25.8281 67.7319 29.5469C67.7319 33.2422 69.9883 35.7344 73.6142 35.7344ZM73.6298 33.1562C71.9569 33.1562 71.101 31.6171 71.101 29.5233C71.101 27.4296 71.9569 25.8827 73.6298 25.8827C75.2715 25.8827 76.1274 27.4296 76.1274 29.5233C76.1274 31.6171 75.2715 33.1562 73.6298 33.1562Z" fill="white"/>
<path d="M84.7253 28.5625C84.7331 27.0156 85.6512 26.1094 86.9895 26.1094C88.3201 26.1094 89.1215 26.9844 89.1137 28.4531V35.5H92.4284V27.8594C92.4284 25.0625 90.7945 23.3438 88.3046 23.3438C86.5306 23.3438 85.2466 24.2187 84.7097 25.6172H84.5697V23.5H81.4106V35.5H84.7253V28.5625Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M102.429 19.5H113.429V22.3141H102.429V19.5ZM102.429 35.5V26.6794H112.699V29.4982H105.94V35.5H102.429Z" fill="white"/>
<path d="M131.584 24.9625C131.09 21.5057 128.345 19.5 124.785 19.5C120.589 19.5 117.429 22.463 117.429 27.4924C117.429 32.5142 120.55 35.4848 124.785 35.4848C128.604 35.4848 131.137 33.0916 131.584 30.1211L128.651 30.1059C128.282 31.9293 126.745 32.9549 124.824 32.9549C122.22 32.9549 120.354 31.0632 120.354 27.4924C120.354 23.9824 122.204 22.0299 124.832 22.0299C126.784 22.0299 128.314 23.1011 128.651 24.9625H131.584Z" fill="white"/>
<path d="M136.409 19.7124H133.571V35.2718H136.409V19.7124Z" fill="white"/>
<path d="M144.031 35.5001C147.56 35.5001 149.803 33.0917 149.803 29.483C149.803 25.8667 147.56 23.4507 144.031 23.4507C140.502 23.4507 138.259 25.8667 138.259 29.483C138.259 33.0917 140.502 35.5001 144.031 35.5001ZM144.047 33.2969C142.094 33.2969 141.137 31.6103 141.137 29.4754C141.137 27.3406 142.094 25.6312 144.047 25.6312C145.968 25.6312 146.925 27.3406 146.925 29.4754C146.925 31.6103 145.968 33.2969 144.047 33.2969Z" fill="white"/>
<path d="M159.338 30.3641C159.338 32.1419 158.028 33.0232 156.773 33.0232C155.409 33.0232 154.499 32.0887 154.499 30.6072V23.6025H151.66V31.0327C151.66 33.8361 153.307 35.4239 155.675 35.4239C157.479 35.4239 158.749 34.5046 159.298 33.1979H159.424V35.272H162.176V23.6025H159.338V30.3641Z" fill="white"/>
<path d="M169.014 35.4769C171.084 35.4769 172.017 34.2841 172.464 33.4332H172.637V35.2718H175.429V19.7124H172.582V25.532H172.464C172.033 24.6887 171.147 23.4503 169.022 23.4503C166.238 23.4503 164.05 25.5624 164.05 29.4522C164.05 33.2965 166.175 35.4769 169.014 35.4769ZM169.806 33.2205C167.931 33.2205 166.943 31.6251 166.943 29.437C166.943 27.2642 167.916 25.7067 169.806 25.7067C171.633 25.7067 172.637 27.173 172.637 29.437C172.637 31.701 171.617 33.2205 169.806 33.2205Z" fill="white"/>
</g>
<defs>
<filter id="filter0_dd" x="0" y="0" width="201" height="60" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="0.25"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="2"/>
<feGaussianBlur stdDeviation="2"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.13 0"/>
<feBlend mode="normal" in2="effect1_dropShadow" result="effect2_dropShadow"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow" result="shape"/>
</filter>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -8,7 +8,6 @@ on:
jobs:
main:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout Actions
uses: actions/checkout@v2
@@ -21,6 +20,6 @@ jobs:
- name: Run backport
uses: ./actions/backport
with:
token: ${{secrets.RELEASE_TOKEN}}
token: ${{secrets.BACKPORT_BOT_TOKEN}}
labelsToAdd: "backport"
title: "{{originalTitle}}"

View File

@@ -6,13 +6,12 @@ on:
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: 'Setup Environment'
uses: actions/setup-python@v2
with:
python-version: '3.10'
python-version: 3.6
- name: 'Clone repo'
uses: actions/checkout@v2

View File

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

View File

@@ -1,32 +0,0 @@
# 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:
stable-release:
name: Release
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: ["14", "15"]
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

@@ -1,12 +0,0 @@
name: "Pull Request Labeler"
on:
pull_request_target:
types: [opened, reopened]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v3
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"

View File

@@ -9,34 +9,23 @@ jobs:
name: linters
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
- name: Set up Python 3.10
uses: actions/setup-python@v4
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: '3.10'
cache: pip
python-version: 3.8
- name: Install and Run Pre-commit
uses: pre-commit/action@v3.0.0
semgrep:
name: semgrep
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
cache: pip
uses: pre-commit/action@v2.0.3
- name: Download Semgrep rules
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules
- name: Download semgrep
run: pip install semgrep
- name: Run Semgrep rules
run: semgrep ci --config ./frappe-semgrep-rules/rules --config r/python.lang.correctness
- uses: returntocorp/semgrep-action@v1
env:
SEMGREP_TIMEOUT: 120
with:
config: >-
r/python.lang.correctness
./frappe-semgrep-rules/rules

View File

@@ -1,21 +0,0 @@
name: 'Lock threads'
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v5
with:
github-token: ${{ github.token }}
issue-inactive-days: 14
pr-inactive-days: 14

View File

@@ -4,69 +4,54 @@ on:
pull_request:
paths-ignore:
- '**.js'
- '**.css'
- '**.md'
- '**.html'
- '**.csv'
workflow_dispatch:
concurrency:
group: patch-develop-${{ github.event_name }}-${{ github.event.number || github.event_name == 'workflow_dispatch' && github.run_id || '' }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 60
runs-on: ubuntu-18.04
name: Patch Test
services:
mysql:
image: mariadb:10.6
image: mariadb:10.3
env:
MARIADB_ROOT_PASSWORD: 'root'
MYSQL_ALLOW_EMPTY_PASSWORD: YES
ports:
- 3306:3306
options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- name: Clone
uses: actions/checkout@v4
- 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
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v5
uses: actions/setup-python@v2
with:
python-version: '3.11'
python-version: 3.6
- name: Setup Node
uses: actions/setup-node@v4
uses: actions/setup-node@v2
with:
node-version: 18
node-version: 12
check-latest: true
- name: Add to Hosts
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v4
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v4
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
@@ -81,7 +66,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v4
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -90,71 +75,11 @@ jobs:
${{ runner.os }}-yarn-
- name: Install
run: |
pip install frappe-bench
bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
env:
DB: mariadb
TYPE: server
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
- name: Run Patch Tests
run: |
cd ~/frappe-bench/
bench remove-app payments --force
jq 'del(.install_apps)' ~/frappe-bench/sites/test_site/site_config.json > tmp.json
mv tmp.json ~/frappe-bench/sites/test_site/site_config.json
wget https://erpnext.com/files/v13-erpnext.sql.gz
bench --site test_site --force restore ~/frappe-bench/v13-erpnext.sql.gz
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
function update_to_version() {
version=$1
branch_name="version-$version-hotfix"
echo "Updating to v$version"
# Fetch and checkout branches
git -C "apps/frappe" fetch --depth 1 upstream $branch_name:$branch_name
git -C "apps/erpnext" fetch --depth 1 upstream $branch_name:$branch_name
git -C "apps/frappe" checkout -q -f $branch_name
git -C "apps/erpnext" checkout -q -f $branch_name
# Resetup env and install apps
pgrep honcho | xargs kill
rm -rf ~/frappe-bench/env
bench -v setup env
bench pip install -e ./apps/erpnext
bench start &>> ~/frappe-bench/bench_start.log &
bench --site test_site migrate
}
update_to_version 14
update_to_version 15
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"
pgrep honcho | xargs kill
rm -rf ~/frappe-bench/env
bench -v setup env
bench pip install -e ./apps/erpnext
bench start &>> ~/frappe-bench/bench_start.log &
wget https://erpnext.com/files/v10-erpnext.sql.gz
bench --site test_site --force restore ~/frappe-bench/v10-erpnext.sql.gz
bench --site test_site migrate
- name: Show bench output
if: ${{ always() }}
run: |
cd ~/frappe-bench
cat bench_start.log || true
cd logs
for f in ./*.log*; do
echo "Printing log: $f";
cat $f
done

View File

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

View File

@@ -1,31 +0,0 @@
name: Generate Semantic Release
on:
push:
branches:
- version-13
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout Entire Repository
uses: actions/checkout@v2
with:
fetch-depth: 0
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: 20
- name: Setup dependencies
run: |
npm install @semantic-release/git @semantic-release/exec --no-save
- name: Create Release
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
GIT_AUTHOR_NAME: "Frappe PR Bot"
GIT_AUTHOR_EMAIL: "developers@frappe.io"
GIT_COMMITTER_NAME: "Frappe PR Bot"
GIT_COMMITTER_EMAIL: "developers@frappe.io"
run: npx semantic-release

View File

@@ -1,42 +0,0 @@
# This action:
#
# 1. Generates release notes using github API.
# 2. Strips unnecessary info like chore/style etc from notes.
# 3. Updates release info.
# This action needs to be maintained on all branches that do releases.
name: 'Release Notes'
on:
workflow_dispatch:
inputs:
tag_name:
description: 'Tag of release like v13.0.0'
required: true
type: string
release:
types: [released]
permissions:
contents: read
jobs:
regen-notes:
name: 'Regenerate release notes'
runs-on: ubuntu-latest
steps:
- name: Update notes
run: |
NEW_NOTES=$(gh api --method POST -H "Accept: application/vnd.github+json" /repos/frappe/erpnext/releases/generate-notes -f tag_name=$RELEASE_TAG \
| jq -r '.body' \
| sed -E '/^\* (chore|ci|test|docs|style)/d' \
| sed -E 's/by @mergify //'
)
RELEASE_ID=$(gh api -H "Accept: application/vnd.github+json" /repos/frappe/erpnext/releases/tags/$RELEASE_TAG | jq -r '.id')
gh api --method PATCH -H "Accept: application/vnd.github+json" /repos/frappe/erpnext/releases/$RELEASE_ID -f body="$NEW_NOTES"
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
RELEASE_TAG: ${{ github.event.inputs.tag_name || github.event.release.tag_name }}

View File

@@ -1,30 +0,0 @@
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: 18
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

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

View File

@@ -1,158 +0,0 @@
name: Server (Mariadb)
on:
pull_request:
paths-ignore:
- '**.js'
- '**.css'
- '**.md'
- '**.html'
schedule:
# Run everday at midnight UTC / 5:30 IST
- cron: "0 0 * * *"
workflow_dispatch:
inputs:
user:
description: 'Frappe Framework repository user (add your username for forks)'
required: true
default: 'frappe'
type: string
branch:
description: 'Frappe Framework branch'
default: 'develop'
required: false
type: string
concurrency:
group: server-mariadb-develop-${{ github.event_name }}-${{ github.event.number || github.event_name == 'workflow_dispatch' && github.run_id || '' }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 60
env:
NODE_ENV: "production"
WITH_COVERAGE: ${{ github.event_name != 'pull_request' }}
strategy:
fail-fast: false
matrix:
container: [1, 2, 3, 4]
name: Python Unit Tests
services:
mysql:
image: mariadb:10.6
env:
MARIADB_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- name: Clone
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- 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@v4
with:
node-version: 18
check-latest: true
- name: Add to Hosts
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
env:
DB: mariadb
TYPE: server
FRAPPE_USER: ${{ github.event.inputs.user }}
FRAPPE_BRANCH: ${{ github.event.inputs.branch }}
- name: Run Tests
run: 'cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --total-builds 4 --build-number ${{ matrix.container }}'
env:
TYPE: server
CAPTURE_COVERAGE: ${{ github.event_name != 'pull_request' }}
- name: Show bench output
if: ${{ always() }}
run: cat ~/frappe-bench/bench_start.log || true
- name: Upload coverage data
uses: actions/upload-artifact@v3
if: github.event_name != 'pull_request'
with:
name: coverage-${{ matrix.container }}
path: /home/runner/frappe-bench/sites/coverage.xml
coverage:
name: Coverage Wrap Up
needs: test
runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' }}
steps:
- name: Clone
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v3
- name: Upload coverage data
uses: codecov/codecov-action@v4
with:
name: MariaDB
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
verbose: true

View File

@@ -1,112 +0,0 @@
name: Server (Postgres)
on:
pull_request:
paths-ignore:
- '**.js'
- '**.md'
- '**.html'
types: [opened, labelled, synchronize, reopened]
concurrency:
group: server-postgres-develop-${{ github.event_name }}-${{ github.event.number || github.event_name == 'workflow_dispatch' && github.run_id || '' }}
cancel-in-progress: true
jobs:
test:
if: ${{ contains(github.event.pull_request.labels.*.name, 'postgres') }}
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
container: [1]
name: Python Unit Tests
services:
postgres:
image: postgres:13.3
env:
POSTGRES_PASSWORD: travis
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Clone
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- 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@v4
with:
node-version: 18
check-latest: true
- name: Add to Hosts
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
env:
DB: postgres
TYPE: server
- name: Run Tests
run: cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --use-orchestrator
env:
TYPE: server
CI_BUILD_ID: ${{ github.run_id }}
ORCHESTRATOR_URL: http://test-orchestrator.frappe.io

126
.github/workflows/server-tests.yml vendored Normal file
View File

@@ -0,0 +1,126 @@
name: Server
on:
pull_request:
paths-ignore:
- '**.js'
- '**.md'
workflow_dispatch:
push:
branches: [ develop ]
paths-ignore:
- '**.js'
- '**.md'
jobs:
test:
runs-on: ubuntu-18.04
strategy:
fail-fast: false
matrix:
container: [1, 2, 3]
name: Python Unit Tests
services:
mysql:
image: mariadb:10.3
env:
MYSQL_ALLOW_EMPTY_PASSWORD: YES
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- name: Clone
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.7
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 12
check-latest: true
- name: Add to Hosts
run: echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
- name: Run Tests
run: cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --use-orchestrator --with-coverage
env:
TYPE: server
CI_BUILD_ID: ${{ github.run_id }}
ORCHESTRATOR_URL: http://test-orchestrator.frappe.io
- name: Upload Coverage Data
run: |
cp ~/frappe-bench/sites/.coverage ${GITHUB_WORKSPACE}
cd ${GITHUB_WORKSPACE}
pip3 install coverage==5.5
pip3 install coveralls==3.0.1
coveralls
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_FLAG_NAME: run-${{ matrix.container }}
COVERALLS_SERVICE_NAME: ${{ github.event_name == 'pull_request' && 'github' || 'github-actions' }}
COVERALLS_PARALLEL: true
coveralls:
name: Coverage Wrap Up
needs: test
container: python:3-slim
runs-on: ubuntu-18.04
steps:
- name: Clone
uses: actions/checkout@v2
- name: Coveralls Finished
run: |
cd ${GITHUB_WORKSPACE}
pip3 install coverage==5.5
pip3 install coveralls==3.0.1
coveralls --finish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -0,0 +1,22 @@
name: Frappe Linter
on:
pull_request:
branches:
- develop
- version-12-hotfix
- version-11-hotfix
jobs:
check_translation:
name: Translation Syntax Check
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Setup python3
uses: actions/setup-python@v1
with:
python-version: 3.6
- name: Validating Translation Syntax
run: |
git fetch origin $GITHUB_BASE_REF:$GITHUB_BASE_REF -q
files=$(git diff --name-only --diff-filter=d $GITHUB_BASE_REF)
python $GITHUB_WORKSPACE/.github/helper/translation.py $files

112
.github/workflows/ui-tests.yml vendored Normal file
View File

@@ -0,0 +1,112 @@
name: UI
on:
pull_request:
paths-ignore:
- '**.md'
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-18.04
strategy:
fail-fast: false
name: UI Tests (Cypress)
services:
mysql:
image: mariadb:10.3
env:
MYSQL_ALLOW_EMPTY_PASSWORD: YES
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- name: Clone
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.7
- uses: actions/setup-node@v2
with:
node-version: 14
check-latest: true
- name: Add to Hosts
run: |
echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
- name: Cache pip
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Cache node modules
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Cache cypress binary
uses: actions/cache@v2
with:
path: ~/.cache
key: ${{ runner.os }}-cypress-
restore-keys: |
${{ runner.os }}-cypress-
${{ runner.os }}-
- name: Install
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
env:
DB: mariadb
TYPE: ui
- name: Site Setup
run: cd ~/frappe-bench/ && bench --site test_site execute erpnext.setup.utils.before_tests
- name: cypress pre-requisites
run: cd ~/frappe-bench/apps/frappe && yarn add cypress-file-upload@^5 @testing-library/cypress@^8 --no-lockfile
- name: Build Assets
run: cd ~/frappe-bench/ && bench build
env:
CI: Yes
- name: UI Tests
run: cd ~/frappe-bench/ && bench --site test_site run-ui-tests erpnext --headless
env:
CYPRESS_RECORD_KEY: 60a8e3bf-08f5-45b1-9269-2b207d7d30cd
- name: Show bench console if tests failed
if: ${{ failure() }}
run: cat ~/frappe-bench/bench_run_logs.txt

3
.gitignore vendored
View File

@@ -2,11 +2,11 @@
*.py~
.DS_Store
conf.py
locale
latest_updates.json
.wnf-lang-status
*.egg-info
dist/
erpnext/public/dist
erpnext/docs/current
*.swp
*.swo
@@ -15,4 +15,3 @@ __pycache__
.idea/
.vscode/
node_modules/
.backportrc.json

View File

@@ -7,54 +7,16 @@ pull_request_rules:
- author!=gavindsouza
- author!=rohitwaghchaure
- author!=nabinhait
- author!=ankush
- author!=deepeshgarg007
- author!=frappe-pr-bot
- author!=mergify[bot]
- or:
- base=version-13
- base=version-12
- base=version-14
- base=version-15
- base=version-16
actions:
close:
comment:
message: |
@{{author}}, thanks for the contribution, but we do not accept pull requests on a stable branch. Please raise PR on an appropriate hotfix branch.
@{{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: backport to develop
conditions:
- label="backport develop"
actions:
backport:
branches:
- develop
assignees:
- "{{ author }}"
- name: backport to version-14-hotfix
conditions:
- label="backport version-14-hotfix"
actions:
backport:
branches:
- version-14-hotfix
assignees:
- "{{ author }}"
- name: backport to version-15-hotfix
conditions:
- label="backport version-15-hotfix"
actions:
backport:
branches:
- version-15-hotfix
assignees:
- "{{ author }}"
- name: backport to version-13-hotfix
conditions:
- label="backport version-13-hotfix"
@@ -65,37 +27,32 @@ pull_request_rules:
assignees:
- "{{ author }}"
- name: Automatic merge on CI success and review
- name: backport to version-13-pre-release
conditions:
- status-success=linters
- status-success=Sider
- status-success=Semantic Pull Request
- status-success=Patch Test
- status-success=Python Unit Tests (1)
- status-success=Python Unit Tests (2)
- status-success=Python Unit Tests (3)
- label!=dont-merge
- label!=squash
- "#approved-reviews-by>=1"
- label="backport version-13-pre-release"
actions:
merge:
method: merge
- name: Automatic squash on CI success and review
conditions:
- status-success=linters
- status-success=Sider
- status-success=Patch Test
- status-success=Python Unit Tests (1)
- status-success=Python Unit Tests (2)
- status-success=Python Unit Tests (3)
- label!=dont-merge
- label=squash
- "#approved-reviews-by>=1"
actions:
merge:
method: squash
commit_message_template: |
{{ title }} (#{{ number }})
backport:
branches:
- version-13-pre-release
assignees:
- "{{ author }}"
{{ body }}
- name: backport to version-12-hotfix
conditions:
- label="backport version-12-hotfix"
actions:
backport:
branches:
- version-12-hotfix
assignees:
- "{{ author }}"
- name: backport to version-12-pre-release
conditions:
- label="backport version-12-pre-release"
actions:
backport:
branches:
- version-12-pre-release
assignees:
- "{{ author }}"

View File

@@ -5,7 +5,7 @@ fail_fast: false
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
rev: v4.0.1
hooks:
- id: trailing-whitespace
files: "erpnext.*"
@@ -15,58 +15,22 @@ repos:
args: ['--branch', 'develop']
- id: check-merge-conflict
- id: check-ast
- id: check-json
- id: check-toml
- id: check-yaml
- id: debug-statements
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.7.1
- repo: https://gitlab.com/pycqa/flake8
rev: 3.9.2
hooks:
- id: prettier
types_or: [javascript, vue, scss]
# Ignore any files that might contain jinja / bundles
exclude: |
(?x)^(
erpnext/public/dist/.*|
cypress/.*|
.*node_modules.*|
.*boilerplate.*|
erpnext/public/js/controllers/.*|
erpnext/templates/pages/order.js|
erpnext/templates/includes/.*
)$
- id: flake8
additional_dependencies: [
'flake8-bugbear',
]
args: ['--config', '.github/helper/.flake8_strict']
exclude: ".*setup.py$"
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v8.44.0
- repo: https://github.com/timothycrosley/isort
rev: 5.9.1
hooks:
- id: eslint
types_or: [javascript]
args: ['--quiet']
# Ignore any files that might contain jinja / bundles
exclude: |
(?x)^(
erpnext/public/dist/.*|
cypress/.*|
.*node_modules.*|
.*boilerplate.*|
erpnext/public/js/controllers/.*|
erpnext/templates/pages/order.js|
erpnext/templates/includes/.*
)$
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.2.0
hooks:
- id: ruff
name: "Run ruff import sorter"
args: ["--select=I", "--fix"]
- id: ruff
name: "Run ruff linter"
- id: ruff-format
name: "Run ruff formatter"
- id: isort
exclude: ".*setup.py$"
ci:
autoupdate_schedule: weekly

View File

@@ -1,24 +0,0 @@
{
"branches": ["version-13"],
"plugins": [
"@semantic-release/commit-analyzer", {
"preset": "angular",
"releaseRules": [
{"breaking": true, "release": false}
]
},
"@semantic-release/release-notes-generator",
[
"@semantic-release/exec", {
"prepareCmd": 'sed -ir "s/[0-9]*\.[0-9]*\.[0-9]*/${nextRelease.version}/" erpnext/__init__.py'
}
],
[
"@semantic-release/git", {
"assets": ["erpnext/__init__.py"],
"message": "chore(release): Bumped to Version ${nextRelease.version}\n\n${nextRelease.notes}"
}
],
"@semantic-release/github"
]
}

View File

@@ -3,22 +3,33 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence,
erpnext/accounts/ @deepeshgarg007 @ruthra-kumar
erpnext/assets/ @anandbaburajan @deepeshgarg007
erpnext/regional @deepeshgarg007 @ruthra-kumar
erpnext/selling @deepeshgarg007 @ruthra-kumar
erpnext/support/ @deepeshgarg007
pos*
erpnext/accounts/ @nextchamp-saqib @deepeshgarg007
erpnext/assets/ @nextchamp-saqib @deepeshgarg007
erpnext/erpnext_integrations/ @nextchamp-saqib
erpnext/loan_management/ @nextchamp-saqib @deepeshgarg007
erpnext/regional @nextchamp-saqib @deepeshgarg007
erpnext/selling @nextchamp-saqib @deepeshgarg007
erpnext/support/ @nextchamp-saqib @deepeshgarg007
pos* @nextchamp-saqib
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/subcontracting @rohitwaghchaure @s-aga-r
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/controllers/ @deepeshgarg007 @rohitwaghchaure
erpnext/patches/ @deepeshgarg007
erpnext/crm/ @ruchamahabal @pateljannat
erpnext/education/ @ruchamahabal @pateljannat
erpnext/healthcare/ @ruchamahabal @pateljannat @chillaranand
erpnext/hr/ @ruchamahabal @pateljannat
erpnext/non_profit/ @ruchamahabal
erpnext/payroll @ruchamahabal @pateljannat
erpnext/projects/ @ruchamahabal @pateljannat
.github/ @deepeshgarg007
pyproject.toml @phot0n
erpnext/controllers @deepeshgarg007 @nextchamp-saqib @rohitwaghchaure @marination
.github/ @surajshetty3416 @ankush
requirements.txt @gavindsouza

View File

@@ -1,16 +1,13 @@
<div align="center">
<a href="https://erpnext.com">
<img src="https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/public/images/erpnext-logo.png" height="128">
</a>
<img src="https://raw.githubusercontent.com/frappe/erpnext/develop/erpnext/public/images/erpnext-logo.png" height="128">
<h2>ERPNext</h2>
<p align="center">
<p>ERP made simple</p>
</p>
[![CI](https://github.com/frappe/erpnext/actions/workflows/server-tests-mariadb.yml/badge.svg?event=schedule)](https://github.com/frappe/erpnext/actions/workflows/server-tests-mariadb.yml)
[![CI](https://github.com/frappe/erpnext/actions/workflows/ci-tests.yml/badge.svg?branch=develop)](https://github.com/frappe/erpnext/actions/workflows/ci-tests.yml)
[![Open Source Helpers](https://www.codetriage.com/frappe/erpnext/badges/users.svg)](https://www.codetriage.com/frappe/erpnext)
[![codecov](https://codecov.io/gh/frappe/erpnext/branch/develop/graph/badge.svg?token=0TwvyUg3I5)](https://codecov.io/gh/frappe/erpnext)
[![docker pulls](https://img.shields.io/docker/pulls/frappe/erpnext-worker.svg)](https://hub.docker.com/r/frappe/erpnext-worker)
[![Coverage Status](https://coveralls.io/repos/github/frappe/erpnext/badge.svg?branch=develop)](https://coveralls.io/github/frappe/erpnext?branch=develop)
[https://erpnext.com](https://erpnext.com)
@@ -33,45 +30,34 @@ ERPNext as a monolith includes the following areas for managing businesses:
1. [Customize ERPNext](https://erpnext.com/docs/user/manual/en/customize-erpnext)
1. [And More](https://erpnext.com/docs/user/manual/en/)
ERPNext requires MariaDB.
ERPNext is built on the [Frappe Framework](https://github.com/frappe/frappe), a full-stack web app framework built with Python & JavaScript.
## Installation
- [User Guide](https://erpnext.com/docs/user)
- [Discussion Forum](https://discuss.erpnext.com/)
<div align="center" style="max-height: 40px;">
<a href="https://frappecloud.com/erpnext/signup">
<img src=".github/try-on-f-cloud-button.svg" height="40">
</a>
<a href="https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/frappe/frappe_docker/main/pwd.yml">
<img src="https://raw.githubusercontent.com/play-with-docker/stacks/master/assets/images/button.png" alt="Try in PWD" height="37"/>
</a>
</div>
> Login for the PWD site: (username: Administrator, password: admin)
---
### Containerized Installation
Use docker to deploy ERPNext in production or for development of [Frappe](https://github.com/frappe/frappe) apps. See https://github.com/frappe/frappe_docker for more details.
### Manual Install
### Full Install
The Easy Way: our install script for bench will install all dependencies (e.g. MariaDB). See https://github.com/frappe/bench for more details.
New passwords will be created for the ERPNext "Administrator" user, the MariaDB root user, and the frappe user (the script displays the passwords and saves them to ~/frappe_passwords.txt).
### Virtual Image
## Learning and community
You can download a virtual image to run ERPNext in a virtual machine on your local system.
1. [Frappe School](https://frappe.school) - Learn Frappe Framework and ERPNext from the various courses by the maintainers or from the community.
2. [Official documentation](https://docs.erpnext.com/) - Extensive documentation for ERPNext.
3. [Discussion Forum](https://discuss.erpnext.com/) - Engage with community of ERPNext users and service providers.
4. [Telegram Group](https://erpnext_public.t.me) - Get instant help from huge community of users.
- [ERPNext Download](http://erpnext.com/download)
System and user credentials are listed on the download page.
## Contributing
1. [Issue Guidelines](https://github.com/frappe/erpnext/wiki/Issue-Guidelines)
1. [Report Security Vulnerabilities](https://erpnext.com/security)
1. [Pull Request Requirements](https://github.com/frappe/erpnext/wiki/Contribution-Guidelines)
---
## License
@@ -79,8 +65,51 @@ 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
## Contributing
Please read our [Logo and Trademark Policy](TRADEMARK_POLICY.md).
1. [Issue Guidelines](https://github.com/frappe/erpnext/wiki/Issue-Guidelines)
1. [Report Security Vulnerabilities](https://erpnext.com/security)
1. [Pull Request Requirements](https://github.com/frappe/erpnext/wiki/Contribution-Guidelines)
1. [Translations](https://translate.erpnext.com)
1. [Chart of Accounts](https://charts.erpnext.com)
---
## Logo and Trademark
The brand name ERPNext and the logo are trademarks of Frappe Technologies Pvt. Ltd.
### Introduction
Frappe Technologies Pvt. Ltd. (Frappe) owns and oversees the trademarks for the ERPNext name and logos. We have developed this trademark usage policy with the following goals in mind:
- Wed like to make it easy for anyone to use the ERPNext name or logo for community-oriented efforts that help spread and improve ERPNext.
- Wed like to make it clear how ERPNext-related businesses and projects can (and cannot) use the ERPNext name and logo.
- Wed like to make it hard for anyone to use the ERPNext name and logo to unfairly profit from, trick or confuse people who are looking for official ERPNext resources.
### Frappe Trademark Usage Policy
Permission from Frappe is required to use the ERPNext name or logo as part of any project, product, service, domain or company name.
We will grant permission to use the ERPNext name and logo for projects that meet the following criteria:
- The primary purpose of your project is to promote the spread and improvement of the ERPNext software.
- Your project is non-commercial in nature (it can make money to cover its costs or contribute to non-profit entities, but it cannot be run as a for-profit project or business).
Your project neither promotes nor is associated with entities that currently fail to comply with the GPL license under which ERPNext is distributed.
- If your project meets these criteria, you will be permitted to use the ERPNext name and logo to promote your project in any way you see fit with one exception: Please do not use ERPNext as part of a domain name.
Use of the ERPNext name and logo is additionally allowed in the following situations:
All other ERPNext-related businesses or projects can use the ERPNext name and logo to refer to and explain their services, but they cannot use them as part of a product, project, service, domain, or company name and they cannot use them in any way that suggests an affiliation with or endorsement by ERPNext or Frappe Technologies or the ERPNext open source project. For example, a consulting company can describe its business as “123 Web Services, offering ERPNext consulting for small businesses,” but cannot call its business “The ERPNext Consulting Company.”
Similarly, its OK to use the ERPNext logo as part of a page that describes your products or services, but it is not OK to use it as part of your company or product logo or branding itself. Under no circumstances is it permitted to use ERPNext as part of a top-level domain name.
We do not allow the use of the trademark in advertising, including AdSense/AdWords.
Please note that it is not the goal of this policy to limit commercial activity around ERPNext. We encourage ERPNext-based businesses, and we would love to see hundreds of them.
When in doubt about your use of the ERPNext name or logo, please contact Frappe Technologies for clarification.
(inspired by WordPress)

View File

@@ -1,36 +0,0 @@
## Logo and Trademark Policy
The brand name ERPNext and the logo are trademarks of Frappe Technologies Pvt. Ltd.
### Introduction
Frappe Technologies Pvt. Ltd. (Frappe) owns and oversees the trademarks for the ERPNext name and logos. We have developed this trademark usage policy with the following goals in mind:
- Wed like to make it easy for anyone to use the ERPNext name or logo for community-oriented efforts that help spread and improve ERPNext.
- Wed like to make it clear how ERPNext-related businesses and projects can (and cannot) use the ERPNext name and logo.
- Wed like to make it hard for anyone to use the ERPNext name and logo to unfairly profit from, trick or confuse people who are looking for official ERPNext resources.
### Frappe Trademark Usage Policy
Permission from Frappe is required to use the ERPNext name or logo as part of any project, product, service, domain or company name.
We will grant permission to use the ERPNext name and logo for projects that meet the following criteria:
- The primary purpose of your project is to promote the spread and improvement of the ERPNext software.
- Your project is non-commercial in nature (it can make money to cover its costs or contribute to non-profit entities, but it cannot be run as a for-profit project or business).
Your project neither promotes nor is associated with entities that currently fail to comply with the GPL license under which ERPNext is distributed.
- If your project meets these criteria, you will be permitted to use the ERPNext name and logo to promote your project in any way you see fit with one exception: Please do not use ERPNext as part of a domain name.
Use of the ERPNext name and logo is additionally allowed in the following situations:
All other ERPNext-related businesses or projects can use the ERPNext name and logo to refer to and explain their services, but they cannot use them as part of a product, project, service, domain, or company name and they cannot use them in any way that suggests an affiliation with or endorsement by ERPNext or Frappe Technologies or the ERPNext open source project. For example, a consulting company can describe its business as “123 Web Services, offering ERPNext consulting for small businesses,” but cannot call its business “The ERPNext Consulting Company.”
Similarly, its OK to use the ERPNext logo as part of a page that describes your products or services, but it is not OK to use it as part of your company or product logo or branding itself. Under no circumstances is it permitted to use ERPNext as part of a top-level domain name.
We do not allow the use of the trademark in advertising, including AdSense/AdWords.
Please note that it is not the goal of this policy to limit commercial activity around ERPNext. We encourage ERPNext-based businesses, and we would love to see hundreds of them.
When in doubt about your use of the ERPNext name or logo, please contact Frappe Technologies for clarification.
(inspired by WordPress)

View File

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

View File

@@ -1,26 +0,0 @@
codecov:
require_ci_to_pass: yes
coverage:
status:
project:
default:
target: auto
threshold: 0.5%
patch:
default:
target: 85%
threshold: 0%
base: auto
branches:
- develop
if_ci_failed: ignore
only_pulls: true
comment:
layout: "diff, files"
require_changes: true
ignore:
- "erpnext/demo"

View File

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

11
cypress.json Normal file
View File

@@ -0,0 +1,11 @@
{
"baseUrl": "http://test_site:8000",
"projectId": "da59y9",
"adminPassword": "admin",
"defaultCommandTimeout": 20000,
"pageLoadTimeout": 15000,
"retries": {
"runMode": 2,
"openMode": 2
}
}

View File

@@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}

View File

@@ -0,0 +1,13 @@
context('Customer', () => {
before(() => {
cy.login();
});
it('Check Customer Group', () => {
cy.visit(`app/customer/`);
cy.get('.primary-action').click();
cy.wait(500);
cy.get('.custom-actions > .btn').click();
cy.get_field('customer_group', 'Link').should('have.value', 'All Customer Groups');
});
});

View File

@@ -0,0 +1,116 @@
context('Organizational Chart', () => {
before(() => {
cy.login();
cy.visit('/app/website');
});
it('navigates to org chart', () => {
cy.visit('/app');
cy.visit('/app/organizational-chart');
cy.url().should('include', '/organizational-chart');
cy.window().its('frappe.csrf_token').then(csrf_token => {
return cy.request({
url: `/api/method/erpnext.tests.ui_test_helpers.create_employee_records`,
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
'X-Frappe-CSRF-Token': csrf_token
},
timeout: 60000
}).then(res => {
expect(res.status).eq(200);
cy.get('.frappe-control[data-fieldname=company] input').focus().as('input');
cy.get('@input')
.clear({ force: true })
.type('Test Org Chart{downarrow}{enter}', { force: true })
.blur({ force: true });
});
});
});
it('renders root nodes and loads children for the first expandable node', () => {
// check rendered root nodes and the node name, title, connections
cy.get('.hierarchy').find('.root-level ul.node-children').children()
.should('have.length', 2)
.first()
.as('first-child');
cy.get('@first-child').get('.node-name').contains('Test Employee 1');
cy.get('@first-child').get('.node-info').find('.node-title').contains('CEO');
cy.get('@first-child').get('.node-info').find('.node-connections').contains('· 2 Connections');
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
// children of 1st root visible
cy.get(`div[data-parent="${employee_records.message[0]}"]`).as('child-node');
cy.get('@child-node')
.should('have.length', 1)
.should('be.visible');
cy.get('@child-node').get('.node-name').contains('Test Employee 3');
// connectors between first root node and immediate child
cy.get(`path[data-parent="${employee_records.message[0]}"]`)
.should('be.visible')
.invoke('attr', 'data-child')
.should('equal', employee_records.message[2]);
});
});
it('hides active nodes children and connectors on expanding sibling node', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
// click sibling
cy.get(`#${employee_records.message[1]}`)
.click()
.should('have.class', 'active');
// child nodes and connectors hidden
cy.get(`[data-parent="${employee_records.message[0]}"]`).should('not.be.visible');
cy.get(`path[data-parent="${employee_records.message[0]}"]`).should('not.be.visible');
});
});
it('collapses previous level nodes and refreshes connectors on expanding child node', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
// click child node
cy.get(`#${employee_records.message[3]}`)
.click()
.should('have.class', 'active');
// previous level nodes: parent should be on active-path; other nodes should be collapsed
cy.get(`#${employee_records.message[0]}`).should('have.class', 'collapsed');
cy.get(`#${employee_records.message[1]}`).should('have.class', 'active-path');
// previous level connectors refreshed
cy.get(`path[data-parent="${employee_records.message[1]}"]`)
.should('have.class', 'collapsed-connector');
// child node's children and connectors rendered
cy.get(`[data-parent="${employee_records.message[3]}"]`).should('be.visible');
cy.get(`path[data-parent="${employee_records.message[3]}"]`).should('be.visible');
});
});
it('expands previous level nodes', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
cy.get(`#${employee_records.message[0]}`)
.click()
.should('have.class', 'active');
cy.get(`[data-parent="${employee_records.message[0]}"]`)
.should('be.visible');
cy.get('ul.hierarchy').children().should('have.length', 2);
cy.get(`#connectors`).children().should('have.length', 1);
});
});
it('edit node navigates to employee master', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
cy.get(`#${employee_records.message[0]}`).find('.btn-edit-node')
.click();
cy.url().should('include', `/employee/${employee_records.message[0]}`);
});
});
});

View File

@@ -0,0 +1,195 @@
context('Organizational Chart Mobile', () => {
before(() => {
cy.login();
cy.visit('/app/website');
});
it('navigates to org chart', () => {
cy.viewport(375, 667);
cy.visit('/app');
cy.visit('/app/organizational-chart');
cy.url().should('include', '/organizational-chart');
cy.window().its('frappe.csrf_token').then(csrf_token => {
return cy.request({
url: `/api/method/erpnext.tests.ui_test_helpers.create_employee_records`,
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
'X-Frappe-CSRF-Token': csrf_token
},
timeout: 60000
}).then(res => {
expect(res.status).eq(200);
cy.get('.frappe-control[data-fieldname=company] input').focus().as('input');
cy.get('@input')
.clear({ force: true })
.type('Test Org Chart{downarrow}{enter}', { force: true })
.blur({ force: true });
});
});
});
it('renders root nodes', () => {
// check rendered root nodes and the node name, title, connections
cy.get('.hierarchy-mobile').find('.root-level').children()
.should('have.length', 2)
.first()
.as('first-child');
cy.get('@first-child').get('.node-name').contains('Test Employee 1');
cy.get('@first-child').get('.node-info').find('.node-title').contains('CEO');
cy.get('@first-child').get('.node-info').find('.node-connections').contains('· 2');
});
it('expands root node', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
cy.get(`#${employee_records.message[1]}`)
.click()
.should('have.class', 'active');
// other root node removed
cy.get(`#${employee_records.message[0]}`).should('not.exist');
// children of active root node
cy.get('.hierarchy-mobile').find('.level').first().find('ul.node-children').children()
.should('have.length', 2);
cy.get(`div[data-parent="${employee_records.message[1]}"]`).first().as('child-node');
cy.get('@child-node').should('be.visible');
cy.get('@child-node')
.get('.node-name')
.contains('Test Employee 4');
// connectors between root node and immediate children
cy.get(`path[data-parent="${employee_records.message[1]}"]`).as('connectors');
cy.get('@connectors')
.should('have.length', 2)
.should('be.visible');
cy.get('@connectors')
.first()
.invoke('attr', 'data-child')
.should('eq', employee_records.message[3]);
});
});
it('expands child node', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
cy.get(`#${employee_records.message[3]}`)
.click()
.should('have.class', 'active')
.as('expanded_node');
// 2 levels on screen; 1 on active path; 1 collapsed
cy.get('.hierarchy-mobile').children().should('have.length', 2);
cy.get(`#${employee_records.message[1]}`).should('have.class', 'active-path');
// children of expanded node visible
cy.get('@expanded_node')
.next()
.should('have.class', 'node-children')
.as('node-children');
cy.get('@node-children').children().should('have.length', 1);
cy.get('@node-children')
.first()
.get('.node-card')
.should('have.class', 'active-child')
.contains('Test Employee 7');
// orphan connectors removed
cy.get(`#connectors`).children().should('have.length', 2);
});
});
it('renders sibling group', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
// sibling group visible for parent
cy.get(`#${employee_records.message[1]}`)
.next()
.as('sibling_group');
cy.get('@sibling_group')
.should('have.attr', 'data-parent', 'undefined')
.should('have.class', 'node-group')
.and('have.class', 'collapsed');
cy.get('@sibling_group').get('.avatar-group').children().as('siblings');
cy.get('@siblings').should('have.length', 1);
cy.get('@siblings')
.first()
.should('have.attr', 'title', 'Test Employee 1');
});
});
it('expands previous level nodes', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
cy.get(`#${employee_records.message[6]}`)
.click()
.should('have.class', 'active');
// clicking on previous level node should remove all the nodes ahead
// and expand that node
cy.get(`#${employee_records.message[3]}`).click();
cy.get(`#${employee_records.message[3]}`)
.should('have.class', 'active')
.should('not.have.class', 'active-path');
cy.get(`#${employee_records.message[6]}`).should('have.class', 'active-child');
cy.get('.hierarchy-mobile').children().should('have.length', 2);
cy.get(`#connectors`).children().should('have.length', 2);
});
});
it('expands sibling group', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
// sibling group visible for parent
cy.get(`#${employee_records.message[6]}`).click();
cy.get(`#${employee_records.message[3]}`)
.next()
.click();
// siblings of parent should be visible
cy.get('.hierarchy-mobile').prev().as('sibling_group');
cy.get('@sibling_group')
.should('exist')
.should('have.class', 'sibling-group')
.should('not.have.class', 'collapsed');
cy.get(`#${employee_records.message[1]}`)
.should('be.visible')
.should('have.class', 'active');
cy.get(`[data-parent="${employee_records.message[1]}"]`)
.should('be.visible')
.should('have.length', 2)
.should('have.class', 'active-child');
});
});
it('goes to the respective level after clicking on non-collapsed sibling group', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(() => {
// click on non-collapsed sibling group
cy.get('.hierarchy-mobile')
.prev()
.click();
// should take you to that level
cy.get('.hierarchy-mobile').find('li.level .node-card').should('have.length', 2);
});
});
it('edit node navigates to employee master', () => {
cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => {
cy.get(`#${employee_records.message[0]}`).find('.btn-edit-node')
.click();
cy.url().should('include', `/employee/${employee_records.message[0]}`);
});
});
});

17
cypress/plugins/index.js Normal file
View File

@@ -0,0 +1,17 @@
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
module.exports = () => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
};

View File

@@ -0,0 +1,31 @@
// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add("login", (email, password) => { ... });
//
//
// -- This is a child command --
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... });
//
//
// -- This is a dual command --
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... });
//
//
// -- This is will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... });
const slug = (name) => name.toLowerCase().replace(" ", "-");
Cypress.Commands.add("go_to_doc", (doctype, name) => {
cy.visit(`/app/${slug(doctype)}/${encodeURIComponent(name)}`);
});

26
cypress/support/index.js Normal file
View File

@@ -0,0 +1,26 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands';
import '../../../frappe/cypress/support/commands' // eslint-disable-line
// Alternatively you can use CommonJS syntax:
// require('./commands')
Cypress.Cookies.defaults({
preserve: 'sid'
});

12
cypress/tsconfig.json Normal file
View File

@@ -0,0 +1,12 @@
{
"compilerOptions": {
"allowJs": true,
"baseUrl": "../node_modules",
"types": [
"cypress"
]
},
"include": [
"**/*.*"
]
}

View File

@@ -1,57 +1,55 @@
import functools
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import inspect
import frappe
__version__ = "16.0.0-dev"
from erpnext.hooks import regional_overrides
__version__ = '13.15.0'
def get_default_company(user=None):
"""Get default company for user"""
'''Get default company for user'''
from frappe.defaults import get_user_default_as_list
if not user:
user = frappe.session.user
companies = get_user_default_as_list("company", user)
companies = get_user_default_as_list(user, 'company')
if companies:
default_company = companies[0]
else:
default_company = frappe.db.get_single_value("Global Defaults", "default_company")
default_company = frappe.db.get_single_value('Global Defaults', 'default_company')
return default_company
def get_default_currency():
"""Returns the currency of the default company"""
'''Returns the currency of the default company'''
company = get_default_company()
if company:
return frappe.get_cached_value("Company", company, "default_currency")
return frappe.get_cached_value('Company', company, 'default_currency')
def get_default_cost_center(company):
"""Returns the default cost center of the company"""
'''Returns the default cost center of the company'''
if not company:
return None
if not frappe.flags.company_cost_center:
frappe.flags.company_cost_center = {}
if company not in frappe.flags.company_cost_center:
frappe.flags.company_cost_center[company] = frappe.get_cached_value("Company", company, "cost_center")
if not company in frappe.flags.company_cost_center:
frappe.flags.company_cost_center[company] = frappe.get_cached_value('Company', company, 'cost_center')
return frappe.flags.company_cost_center[company]
def get_company_currency(company):
"""Returns the default company currency"""
'''Returns the default company currency'''
if not frappe.flags.company_currency:
frappe.flags.company_currency = {}
if company not in frappe.flags.company_currency:
frappe.flags.company_currency[company] = frappe.db.get_value(
"Company", company, "default_currency", cache=True
)
if not company in frappe.flags.company_currency:
frappe.flags.company_currency[company] = frappe.db.get_value('Company', company, 'default_currency', cache=True)
return frappe.flags.company_currency[company]
def set_perpetual_inventory(enable=1, company=None):
if not company:
company = "_Test Company" if frappe.flags.in_test else get_default_company()
@@ -60,10 +58,9 @@ def set_perpetual_inventory(enable=1, company=None):
company.enable_perpetual_inventory = enable
company.save()
def encode_company_abbr(name, company=None, abbr=None):
"""Returns name encoded with company abbreviation"""
company_abbr = abbr or frappe.get_cached_value("Company", company, "abbr")
def encode_company_abbr(name, company):
'''Returns name encoded with company abbreviation'''
company_abbr = frappe.get_cached_value('Company', company, "abbr")
parts = name.rsplit(" - ", 1)
if parts[-1].lower() != company_abbr.lower():
@@ -71,81 +68,76 @@ def encode_company_abbr(name, company=None, abbr=None):
return " - ".join(parts)
def is_perpetual_inventory_enabled(company):
if not company:
company = "_Test Company" if frappe.flags.in_test else get_default_company()
if not hasattr(frappe.local, "enable_perpetual_inventory"):
if not hasattr(frappe.local, 'enable_perpetual_inventory'):
frappe.local.enable_perpetual_inventory = {}
if company not in frappe.local.enable_perpetual_inventory:
frappe.local.enable_perpetual_inventory[company] = (
frappe.get_cached_value("Company", company, "enable_perpetual_inventory") or 0
)
if not company in frappe.local.enable_perpetual_inventory:
frappe.local.enable_perpetual_inventory[company] = frappe.get_cached_value('Company',
company, "enable_perpetual_inventory") or 0
return frappe.local.enable_perpetual_inventory[company]
def get_default_finance_book(company=None):
if not company:
company = get_default_company()
if not hasattr(frappe.local, "default_finance_book"):
if not hasattr(frappe.local, 'default_finance_book'):
frappe.local.default_finance_book = {}
if company not in frappe.local.default_finance_book:
frappe.local.default_finance_book[company] = frappe.get_cached_value(
"Company", company, "default_finance_book"
)
if not company in frappe.local.default_finance_book:
frappe.local.default_finance_book[company] = frappe.get_cached_value('Company',
company, "default_finance_book")
return frappe.local.default_finance_book[company]
def get_party_account_type(party_type):
if not hasattr(frappe.local, "party_account_types"):
if not hasattr(frappe.local, 'party_account_types'):
frappe.local.party_account_types = {}
if party_type not in frappe.local.party_account_types:
frappe.local.party_account_types[party_type] = (
frappe.db.get_value("Party Type", party_type, "account_type") or ""
)
if not party_type in frappe.local.party_account_types:
frappe.local.party_account_types[party_type] = frappe.db.get_value("Party Type",
party_type, "account_type") or ''
return frappe.local.party_account_types[party_type]
def get_region(company=None):
"""Return the default country based on flag, company or global settings
'''Return the default country based on flag, company or global settings
You can also set global company flag in `frappe.flags.company`
"""
if not company:
company = frappe.local.flags.company
if company:
return frappe.get_cached_value("Company", company, "country")
return frappe.flags.country or frappe.get_system_settings("country")
'''
if company or frappe.flags.company:
return frappe.get_cached_value('Company',
company or frappe.flags.company, 'country')
elif frappe.flags.country:
return frappe.flags.country
else:
return frappe.get_system_settings('country')
def allow_regional(fn):
"""Decorator to make a function regionally overridable
'''Decorator to make a function regionally overridable
Example:
@erpnext.allow_regional
def myfunction():
pass"""
@functools.wraps(fn)
pass'''
def caller(*args, **kwargs):
overrides = frappe.get_hooks("regional_overrides", {}).get(get_region())
function_path = f"{inspect.getmodule(fn).__name__}.{fn.__name__}"
if not overrides or function_path not in overrides:
region = get_region()
fn_name = inspect.getmodule(fn).__name__ + '.' + fn.__name__
if region in regional_overrides and fn_name in regional_overrides[region]:
return frappe.get_attr(regional_overrides[region][fn_name])(*args, **kwargs)
else:
return fn(*args, **kwargs)
# Priority given to last installed app
return frappe.get_attr(overrides[function_path][-1])(*args, **kwargs)
return caller
def get_last_membership(member):
'''Returns last membership if exists'''
last_membership = frappe.get_all('Membership', 'name,to_date,membership_type',
dict(member=member, paid=1), order_by='to_date desc', limit=1)
if last_membership:
return last_membership[0]

View File

@@ -10,42 +10,4 @@ Entries are:
- Sales Invoice (Itemised)
- Purchase Invoice (Itemised)
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 |
All accounting entries are stored in the `General Ledger`

View File

@@ -10,50 +10,45 @@ from frappe.contacts.doctype.address.address import (
class ERPNextAddress(Address):
def validate(self):
self.validate_reference()
self.update_compnay_address()
super().validate()
super(ERPNextAddress, self).validate()
def link_address(self):
"""Link address based on owner"""
if self.is_your_company_address:
return
return super().link_address()
def update_compnay_address(self):
for link in self.get("links"):
if link.link_doctype == "Company":
self.is_your_company_address = 1
return super(ERPNextAddress, self).link_address()
def validate_reference(self):
if self.is_your_company_address and not [row for row in self.links if row.link_doctype == "Company"]:
frappe.throw(
_(
"Address needs to be linked to a Company. Please add a row for Company in the Links table."
),
title=_("Company Not Linked"),
)
if self.is_your_company_address and not [
row for row in self.links if row.link_doctype == "Company"
]:
frappe.throw(_("Address needs to be linked to a Company. Please add a row for Company in the Links table."),
title=_("Company Not Linked"))
def on_update(self):
"""
After Address is updated, update the related 'Primary Address' on Customer.
"""
address_display = get_address_display(self.as_dict())
filters = {"customer_primary_address": self.name}
filters = {
"customer_primary_address": self.name
}
customers = frappe.db.get_all("Customer", filters=filters, as_list=True)
for customer_name in customers:
frappe.db.set_value("Customer", customer_name[0], "primary_address", address_display)
@frappe.whitelist()
def get_shipping_address(company, address=None):
def get_shipping_address(company, address = None):
filters = [
["Dynamic Link", "link_doctype", "=", "Company"],
["Dynamic Link", "link_name", "=", company],
["Address", "is_your_company_address", "=", 1],
["Address", "is_your_company_address", "=", 1]
]
fields = ["*"]
if address and frappe.db.get_value("Dynamic Link", {"parent": address, "link_name": company}):
if address and frappe.db.get_value('Dynamic Link',
{'parent': address, 'link_name': company}):
filters.append(["Address", "name", "=", address])
if not address:
filters.append(["Address", "is_shipping_address", "=", 1])

View File

@@ -4,19 +4,18 @@
"creation": "2020-07-17 11:25:34.593061",
"docstatus": 0,
"doctype": "Dashboard Chart",
"dynamic_filters_json": "{\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\",\"from_fiscal_year\":\"erpnext.utils.get_fiscal_year()\",\"to_fiscal_year\":\"erpnext.utils.get_fiscal_year()\"}",
"dynamic_filters_json": "{\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\",\"from_fiscal_year\":\"frappe.sys_defaults.fiscal_year\",\"to_fiscal_year\":\"frappe.sys_defaults.fiscal_year\"}",
"filters_json": "{\"period\":\"Monthly\",\"budget_against\":\"Cost Center\",\"show_cumulative\":0}",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"modified": "2023-07-19 13:13:13.307073",
"modified": "2020-07-22 12:24:49.144210",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Budget Variance",
"number_of_groups": 0,
"owner": "Administrator",
"report_name": "Budget Variance Report",
"roles": [],
"timeseries": 0,
"type": "Bar",
"use_report_chart": 1,

View File

@@ -4,19 +4,18 @@
"creation": "2020-07-17 11:25:34.448572",
"docstatus": 0,
"doctype": "Dashboard Chart",
"dynamic_filters_json": "{\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\",\"from_fiscal_year\":\"erpnext.utils.get_fiscal_year()\",\"to_fiscal_year\":\"erpnext.utils.get_fiscal_year()\"}",
"dynamic_filters_json": "{\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\",\"from_fiscal_year\":\"frappe.sys_defaults.fiscal_year\",\"to_fiscal_year\":\"frappe.sys_defaults.fiscal_year\"}",
"filters_json": "{\"filter_based_on\":\"Fiscal Year\",\"period_start_date\":\"2020-04-01\",\"period_end_date\":\"2021-03-31\",\"periodicity\":\"Yearly\",\"include_default_book_entries\":1}",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"modified": "2023-07-19 13:08:56.470390",
"modified": "2020-07-22 12:33:48.888943",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Profit and Loss",
"number_of_groups": 0,
"owner": "Administrator",
"report_name": "Profit and Loss Statement",
"roles": [],
"timeseries": 0,
"type": "Bar",
"use_report_chart": 1,

View File

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

View File

@@ -1,6 +1,7 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
from frappe import _
@@ -12,24 +13,15 @@ from frappe.utils.nestedset import get_descendants_of
@frappe.whitelist()
@cache_source
def get(
chart_name=None,
chart=None,
no_cache=None,
filters=None,
from_date=None,
to_date=None,
timespan=None,
time_interval=None,
heatmap_year=None,
):
def get(chart_name = None, chart = None, no_cache = None, filters = None, from_date = None,
to_date = None, timespan = None, time_interval = None, heatmap_year = None):
if chart_name:
chart = frappe.get_doc("Dashboard Chart", chart_name)
chart = frappe.get_doc('Dashboard Chart', chart_name)
else:
chart = frappe._dict(frappe.parse_json(chart))
timespan = chart.timespan
if chart.timespan == "Select Date Range":
if chart.timespan == 'Select Date Range':
from_date = chart.from_date
to_date = chart.to_date
@@ -37,26 +29,20 @@ def get(
filters = frappe.parse_json(filters) or frappe.parse_json(chart.filters_json)
account = filters.get("account")
filters.get("company")
company = filters.get("company")
if not account and chart_name:
frappe.throw(
_("Account is not set for the dashboard chart {0}").format(
get_link_to_form("Dashboard Chart", chart_name)
)
)
frappe.throw(_("Account is not set for the dashboard chart {0}")
.format(get_link_to_form("Dashboard Chart", chart_name)))
if not frappe.db.exists("Account", account) and chart_name:
frappe.throw(
_("Account {0} does not exists in the dashboard chart {1}").format(
account, get_link_to_form("Dashboard Chart", chart_name)
)
)
frappe.throw(_("Account {0} does not exists in the dashboard chart {1}")
.format(account, get_link_to_form("Dashboard Chart", chart_name)))
if not to_date:
to_date = nowdate()
if not from_date:
if timegrain in ("Monthly", "Quarterly"):
if timegrain in ('Monthly', 'Quarterly'):
from_date = get_from_date_from_timespan(to_date, timespan)
# fetch dates to plot
@@ -69,20 +55,23 @@ def get(
result = build_result(account, dates, gl_entries)
return {
"labels": [formatdate(r[0].strftime("%Y-%m-%d")) for r in result],
"datasets": [{"name": account, "values": [r[1] for r in result]}],
"labels": [formatdate(r[0].strftime('%Y-%m-%d')) for r in result],
"datasets": [{
"name": account,
"values": [r[1] for r in result]
}]
}
def build_result(account, dates, gl_entries):
result = [[getdate(date), 0.0] for date in dates]
root_type = frappe.get_cached_value("Account", account, "root_type")
root_type = frappe.db.get_value('Account', account, 'root_type')
# start with the first date
date_index = 0
# get balances in debit
for entry in gl_entries:
# entry date is after the current pointer, so move the pointer forward
while getdate(entry.posting_date) > result[date_index][0]:
date_index += 1
@@ -90,34 +79,30 @@ def build_result(account, dates, gl_entries):
result[date_index][1] += entry.debit - entry.credit
# if account type is credit, switch balances
if root_type not in ("Asset", "Expense"):
if root_type not in ('Asset', 'Expense'):
for r in result:
r[1] = -1 * r[1]
# for balance sheet accounts, the totals are cumulative
if root_type in ("Asset", "Liability", "Equity"):
if root_type in ('Asset', 'Liability', 'Equity'):
for i, r in enumerate(result):
if i > 0:
r[1] = r[1] + result[i - 1][1]
r[1] = r[1] + result[i-1][1]
return result
def get_gl_entries(account, to_date):
child_accounts = get_descendants_of("Account", account, ignore_permissions=True)
child_accounts = get_descendants_of('Account', account, ignore_permissions=True)
child_accounts.append(account)
return frappe.db.get_all(
"GL Entry",
fields=["posting_date", "debit", "credit"],
filters=[
dict(posting_date=("<", to_date)),
dict(account=("in", child_accounts)),
dict(voucher_type=("!=", "Period Closing Voucher")),
return frappe.db.get_all('GL Entry',
fields = ['posting_date', 'debit', 'credit'],
filters = [
dict(posting_date = ('<', to_date)),
dict(account = ('in', child_accounts)),
dict(voucher_type = ('!=', 'Period Closing Voucher'))
],
order_by="posting_date asc",
)
order_by = 'posting_date asc')
def get_dates_from_timegrain(from_date, to_date, timegrain):
days = months = years = 0

View File

@@ -1,3 +1,5 @@
from __future__ import unicode_literals
import frappe
from frappe import _
from frappe.email import sendmail_to_system_managers
@@ -22,19 +24,20 @@ from erpnext.accounts.utils import get_account_currency
def validate_service_stop_date(doc):
"""Validates service_stop_date for Purchase Invoice and Sales Invoice"""
''' Validates service_stop_date for Purchase Invoice and Sales Invoice '''
enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense"
enable_check = "enable_deferred_revenue" \
if doc.doctype=="Sales Invoice" else "enable_deferred_expense"
old_stop_dates = {}
old_doc = frappe.db.get_all(f"{doc.doctype} Item", {"parent": doc.name}, ["name", "service_stop_date"])
old_doc = frappe.db.get_all("{0} Item".format(doc.doctype),
{"parent": doc.name}, ["name", "service_stop_date"])
for d in old_doc:
old_stop_dates[d.name] = d.service_stop_date or ""
for item in doc.items:
if not item.get(enable_check):
continue
if not item.get(enable_check): continue
if item.service_stop_date:
if date_diff(item.service_stop_date, item.service_start_date) < 0:
@@ -43,29 +46,21 @@ def validate_service_stop_date(doc):
if date_diff(item.service_stop_date, item.service_end_date) > 0:
frappe.throw(_("Service Stop Date cannot be after Service End Date"))
if (
old_stop_dates
and old_stop_dates.get(item.name)
and item.service_stop_date != old_stop_dates.get(item.name)
):
if old_stop_dates and old_stop_dates.get(item.name) and item.service_stop_date!=old_stop_dates.get(item.name):
frappe.throw(_("Cannot change Service Stop Date for item in row {0}").format(item.idx))
def build_conditions(process_type, account, company):
conditions = ""
deferred_account = (
"item.deferred_revenue_account" if process_type == "Income" else "item.deferred_expense_account"
)
conditions=''
deferred_account = "item.deferred_revenue_account" if process_type=="Income" else "item.deferred_expense_account"
if account:
conditions += f"AND {deferred_account}='{account}'"
conditions += "AND %s='%s'"%(deferred_account, account)
elif company:
conditions += f"AND p.company = {frappe.db.escape(company)}"
return conditions
def convert_deferred_expense_to_expense(deferred_process, start_date=None, end_date=None, conditions=""):
def convert_deferred_expense_to_expense(deferred_process, start_date=None, end_date=None, conditions=''):
# book the expense/income on the last day, but it will be trigger on the 1st of month at 12:00 AM
if not start_date:
@@ -74,17 +69,14 @@ def convert_deferred_expense_to_expense(deferred_process, start_date=None, end_d
end_date = add_days(today(), -1)
# check for the purchase invoice for which GL entries has to be done
invoices = frappe.db.sql_list(
f"""
invoices = frappe.db.sql_list('''
select distinct item.parent
from `tabPurchase Invoice Item` item, `tabPurchase Invoice` p
where item.service_start_date<=%s and item.service_end_date>=%s
and item.enable_deferred_expense = 1 and item.parent=p.name
and item.docstatus = 1 and ifnull(item.amount, 0) > 0
{conditions}
""",
(end_date, start_date),
) # nosec
{0}
'''.format(conditions), (end_date, start_date)) #nosec
# For each invoice, book deferred expense
for invoice in invoices:
@@ -94,8 +86,7 @@ def convert_deferred_expense_to_expense(deferred_process, start_date=None, end_d
if frappe.flags.deferred_accounting_error:
send_mail(deferred_process)
def convert_deferred_revenue_to_income(deferred_process, start_date=None, end_date=None, conditions=""):
def convert_deferred_revenue_to_income(deferred_process, start_date=None, end_date=None, conditions=''):
# book the expense/income on the last day, but it will be trigger on the 1st of month at 12:00 AM
if not start_date:
@@ -104,17 +95,14 @@ def convert_deferred_revenue_to_income(deferred_process, start_date=None, end_da
end_date = add_days(today(), -1)
# check for the sales invoice for which GL entries has to be done
invoices = frappe.db.sql_list(
f"""
invoices = frappe.db.sql_list('''
select distinct item.parent
from `tabSales Invoice Item` item, `tabSales Invoice` p
where item.service_start_date<=%s and item.service_end_date>=%s
and item.enable_deferred_revenue = 1 and item.parent=p.name
and item.docstatus = 1 and ifnull(item.amount, 0) > 0
{conditions}
""",
(end_date, start_date),
) # nosec
{0}
'''.format(conditions), (end_date, start_date)) #nosec
for invoice in invoices:
doc = frappe.get_doc("Sales Invoice", invoice)
@@ -123,53 +111,37 @@ def convert_deferred_revenue_to_income(deferred_process, start_date=None, end_da
if frappe.flags.deferred_accounting_error:
send_mail(deferred_process)
def get_booking_dates(doc, item, posting_date=None, prev_posting_date=None):
def get_booking_dates(doc, item, posting_date=None):
if not posting_date:
posting_date = add_days(today(), -1)
last_gl_entry = False
deferred_account = (
"deferred_revenue_account" if doc.doctype == "Sales Invoice" else "deferred_expense_account"
)
deferred_account = "deferred_revenue_account" if doc.doctype=="Sales Invoice" else "deferred_expense_account"
if not prev_posting_date:
prev_gl_entry = frappe.db.sql(
"""
select name, posting_date from `tabGL Entry` where company=%s and account=%s and
voucher_type=%s and voucher_no=%s and voucher_detail_no=%s
and is_cancelled = 0
order by posting_date desc limit 1
""",
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name),
as_dict=True,
)
prev_gl_entry = frappe.db.sql('''
select name, posting_date from `tabGL Entry` where company=%s and account=%s and
voucher_type=%s and voucher_no=%s and voucher_detail_no=%s
order by posting_date desc limit 1
''', (doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name), as_dict=True)
prev_gl_via_je = frappe.db.sql(
"""
SELECT p.name, p.posting_date FROM `tabJournal Entry` p, `tabJournal Entry Account` c
WHERE p.name = c.parent and p.company=%s and c.account=%s
and c.reference_type=%s and c.reference_name=%s
and c.reference_detail_no=%s and c.docstatus < 2 order by posting_date desc limit 1
""",
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name),
as_dict=True,
)
prev_gl_via_je = frappe.db.sql('''
SELECT p.name, p.posting_date FROM `tabJournal Entry` p, `tabJournal Entry Account` c
WHERE p.name = c.parent and p.company=%s and c.account=%s
and c.reference_type=%s and c.reference_name=%s
and c.reference_detail_no=%s and c.docstatus < 2 order by posting_date desc limit 1
''', (doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name), as_dict=True)
if prev_gl_via_je:
if (not prev_gl_entry) or (
prev_gl_entry and prev_gl_entry[0].posting_date < prev_gl_via_je[0].posting_date
):
prev_gl_entry = prev_gl_via_je
if prev_gl_entry:
start_date = getdate(add_days(prev_gl_entry[0].posting_date, 1))
else:
start_date = item.service_start_date
if prev_gl_via_je:
if (not prev_gl_entry) or (prev_gl_entry and
prev_gl_entry[0].posting_date < prev_gl_via_je[0].posting_date):
prev_gl_entry = prev_gl_via_je
if prev_gl_entry:
start_date = getdate(add_days(prev_gl_entry[0].posting_date, 1))
else:
start_date = getdate(add_days(prev_posting_date, 1))
start_date = item.service_start_date
end_date = get_last_day(start_date)
if end_date >= item.service_end_date:
end_date = item.service_end_date
@@ -186,88 +158,66 @@ def get_booking_dates(doc, item, posting_date=None, prev_posting_date=None):
else:
return None, None, None
def calculate_monthly_amount(
doc, item, last_gl_entry, start_date, end_date, total_days, total_booking_days, account_currency
):
def calculate_monthly_amount(doc, item, last_gl_entry, start_date, end_date, total_days, total_booking_days, account_currency):
amount, base_amount = 0, 0
if not last_gl_entry:
total_months = (
(item.service_end_date.year - item.service_start_date.year) * 12
+ (item.service_end_date.month - item.service_start_date.month)
+ 1
)
total_months = (item.service_end_date.year - item.service_start_date.year) * 12 + \
(item.service_end_date.month - item.service_start_date.month) + 1
prorate_factor = flt(date_diff(item.service_end_date, item.service_start_date)) / flt(
date_diff(get_last_day(item.service_end_date), get_first_day(item.service_start_date))
)
prorate_factor = flt(date_diff(item.service_end_date, item.service_start_date)) \
/ flt(date_diff(get_last_day(item.service_end_date), get_first_day(item.service_start_date)))
actual_months = rounded(total_months * prorate_factor, 1)
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(
doc, item
)
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(doc, item)
base_amount = flt(item.base_net_amount / actual_months, item.precision("base_net_amount"))
if base_amount + already_booked_amount > item.base_net_amount:
base_amount = item.base_net_amount - already_booked_amount
if account_currency == doc.company_currency:
if account_currency==doc.company_currency:
amount = base_amount
else:
amount = flt(item.net_amount / actual_months, item.precision("net_amount"))
amount = flt(item.net_amount/actual_months, item.precision("net_amount"))
if amount + already_booked_amount_in_account_currency > item.net_amount:
amount = item.net_amount - already_booked_amount_in_account_currency
if get_first_day(start_date) != start_date or get_last_day(end_date) != end_date:
partial_month = flt(date_diff(end_date, start_date)) / flt(
date_diff(get_last_day(end_date), get_first_day(start_date))
)
if not (get_first_day(start_date) == start_date and get_last_day(end_date) == end_date):
partial_month = flt(date_diff(end_date, start_date)) \
/ flt(date_diff(get_last_day(end_date), get_first_day(start_date)))
base_amount = rounded(partial_month, 1) * base_amount
amount = rounded(partial_month, 1) * amount
else:
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(
doc, item
)
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(doc, item)
base_amount = flt(item.base_net_amount - already_booked_amount, item.precision("base_net_amount"))
if account_currency == doc.company_currency:
if account_currency==doc.company_currency:
amount = base_amount
else:
amount = flt(
item.net_amount - already_booked_amount_in_account_currency, item.precision("net_amount")
)
amount = flt(item.net_amount - already_booked_amount_in_account_currency, item.precision("net_amount"))
return amount, base_amount
def calculate_amount(doc, item, last_gl_entry, total_days, total_booking_days, account_currency):
amount, base_amount = 0, 0
if not last_gl_entry:
base_amount = flt(
item.base_net_amount * total_booking_days / flt(total_days), item.precision("base_net_amount")
)
if account_currency == doc.company_currency:
base_amount = flt(item.base_net_amount*total_booking_days/flt(total_days), item.precision("base_net_amount"))
if account_currency==doc.company_currency:
amount = base_amount
else:
amount = flt(item.net_amount * total_booking_days / flt(total_days), item.precision("net_amount"))
amount = flt(item.net_amount*total_booking_days/flt(total_days), item.precision("net_amount"))
else:
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(
doc, item
)
already_booked_amount, already_booked_amount_in_account_currency = get_already_booked_amount(doc, item)
base_amount = flt(item.base_net_amount - already_booked_amount, item.precision("base_net_amount"))
if account_currency == doc.company_currency:
if account_currency==doc.company_currency:
amount = base_amount
else:
amount = flt(
item.net_amount - already_booked_amount_in_account_currency, item.precision("net_amount")
)
amount = flt(item.net_amount - already_booked_amount_in_account_currency, item.precision("net_amount"))
return amount, base_amount
def get_already_booked_amount(doc, item):
if doc.doctype == "Sales Invoice":
total_credit_debit, total_credit_debit_currency = "debit", "debit_in_account_currency"
@@ -276,27 +226,20 @@ def get_already_booked_amount(doc, item):
total_credit_debit, total_credit_debit_currency = "credit", "credit_in_account_currency"
deferred_account = "deferred_expense_account"
gl_entries_details = frappe.db.sql(
"""
select sum({}) as total_credit, sum({}) as total_credit_in_account_currency, voucher_detail_no
gl_entries_details = frappe.db.sql('''
select sum({0}) as total_credit, sum({1}) as total_credit_in_account_currency, voucher_detail_no
from `tabGL Entry` where company=%s and account=%s and voucher_type=%s and voucher_no=%s and voucher_detail_no=%s
and is_cancelled = 0
group by voucher_detail_no
""".format(total_credit_debit, total_credit_debit_currency),
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name),
as_dict=True,
)
'''.format(total_credit_debit, total_credit_debit_currency),
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name), as_dict=True)
journal_entry_details = frappe.db.sql(
"""
SELECT sum(c.{}) as total_credit, sum(c.{}) as total_credit_in_account_currency, reference_detail_no
journal_entry_details = frappe.db.sql('''
SELECT sum(c.{0}) as total_credit, sum(c.{1}) as total_credit_in_account_currency, reference_detail_no
FROM `tabJournal Entry` p , `tabJournal Entry Account` c WHERE p.name = c.parent and
p.company = %s and c.account=%s and c.reference_type=%s and c.reference_name=%s and c.reference_detail_no=%s
and p.docstatus < 2 group by reference_detail_no
""".format(total_credit_debit, total_credit_debit_currency),
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name),
as_dict=True,
)
'''.format(total_credit_debit, total_credit_debit_currency),
(doc.company, item.get(deferred_account), doc.doctype, doc.name, item.name), as_dict=True)
already_booked_amount = gl_entries_details[0].total_credit if gl_entries_details else 0
already_booked_amount += journal_entry_details[0].total_credit if journal_entry_details else 0
@@ -304,35 +247,20 @@ def get_already_booked_amount(doc, item):
if doc.currency == doc.company_currency:
already_booked_amount_in_account_currency = already_booked_amount
else:
already_booked_amount_in_account_currency = (
gl_entries_details[0].total_credit_in_account_currency if gl_entries_details else 0
)
already_booked_amount_in_account_currency += (
journal_entry_details[0].total_credit_in_account_currency if journal_entry_details else 0
)
already_booked_amount_in_account_currency = gl_entries_details[0].total_credit_in_account_currency if gl_entries_details else 0
already_booked_amount_in_account_currency += journal_entry_details[0].total_credit_in_account_currency if journal_entry_details else 0
return already_booked_amount, already_booked_amount_in_account_currency
def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense"
enable_check = "enable_deferred_revenue" \
if doc.doctype=="Sales Invoice" else "enable_deferred_expense"
accounts_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto")
def _book_deferred_revenue_or_expense(item, via_journal_entry, submit_journal_entry, book_deferred_entries_based_on):
start_date, end_date, last_gl_entry = get_booking_dates(doc, item, posting_date=posting_date)
if not (start_date and end_date): return
def _book_deferred_revenue_or_expense(
item,
via_journal_entry,
submit_journal_entry,
book_deferred_entries_based_on,
prev_posting_date=None,
):
start_date, end_date, last_gl_entry = get_booking_dates(
doc, item, posting_date=posting_date, prev_posting_date=prev_posting_date
)
if not (start_date and end_date):
return
account_currency = get_account_currency(item.expense_account or item.income_account)
account_currency = get_account_currency(item.expense_account)
if doc.doctype == "Sales Invoice":
against, project = doc.customer, doc.project
credit_account, debit_account = item.income_account, item.deferred_revenue_account
@@ -343,182 +271,103 @@ def book_deferred_income_or_expense(doc, deferred_process, posting_date=None):
total_days = date_diff(item.service_end_date, item.service_start_date) + 1
total_booking_days = date_diff(end_date, start_date) + 1
if book_deferred_entries_based_on == "Months":
amount, base_amount = calculate_monthly_amount(
doc,
item,
last_gl_entry,
start_date,
end_date,
total_days,
total_booking_days,
account_currency,
)
if book_deferred_entries_based_on == 'Months':
amount, base_amount = calculate_monthly_amount(doc, item, last_gl_entry,
start_date, end_date, total_days, total_booking_days, account_currency)
else:
amount, base_amount = calculate_amount(
doc, item, last_gl_entry, total_days, total_booking_days, account_currency
)
amount, base_amount = calculate_amount(doc, item, last_gl_entry,
total_days, total_booking_days, account_currency)
if not amount:
prev_posting_date = end_date
else:
gl_posting_date = end_date
prev_posting_date = None
# check if books nor frozen till endate:
if accounts_frozen_upto and getdate(end_date) <= getdate(accounts_frozen_upto):
gl_posting_date = get_last_day(add_days(accounts_frozen_upto, 1))
prev_posting_date = end_date
return
if via_journal_entry:
book_revenue_via_journal_entry(
doc,
credit_account,
debit_account,
amount,
base_amount,
gl_posting_date,
project,
account_currency,
item.cost_center,
item,
deferred_process,
submit_journal_entry,
)
else:
make_gl_entries(
doc,
credit_account,
debit_account,
against,
amount,
base_amount,
gl_posting_date,
project,
account_currency,
item.cost_center,
item,
deferred_process,
)
if via_journal_entry:
book_revenue_via_journal_entry(doc, credit_account, debit_account, against, amount,
base_amount, end_date, project, account_currency, item.cost_center, item, deferred_process, submit_journal_entry)
else:
make_gl_entries(doc, credit_account, debit_account, against,
amount, base_amount, end_date, project, account_currency, item.cost_center, item, deferred_process)
# Returned in case of any errors because it tries to submit the same record again and again in case of errors
if frappe.flags.deferred_accounting_error:
return
if getdate(end_date) < getdate(posting_date) and not last_gl_entry:
_book_deferred_revenue_or_expense(
item,
via_journal_entry,
submit_journal_entry,
book_deferred_entries_based_on,
prev_posting_date,
)
_book_deferred_revenue_or_expense(item, via_journal_entry, submit_journal_entry, book_deferred_entries_based_on)
via_journal_entry = cint(
frappe.db.get_singles_value("Accounts Settings", "book_deferred_entries_via_journal_entry")
)
submit_journal_entry = cint(frappe.db.get_singles_value("Accounts Settings", "submit_journal_entries"))
book_deferred_entries_based_on = frappe.db.get_singles_value(
"Accounts Settings", "book_deferred_entries_based_on"
)
via_journal_entry = cint(frappe.db.get_singles_value('Accounts Settings', 'book_deferred_entries_via_journal_entry'))
submit_journal_entry = cint(frappe.db.get_singles_value('Accounts Settings', 'submit_journal_entries'))
book_deferred_entries_based_on = frappe.db.get_singles_value('Accounts Settings', 'book_deferred_entries_based_on')
for item in doc.get("items"):
for item in doc.get('items'):
if item.get(enable_check):
_book_deferred_revenue_or_expense(
item, via_journal_entry, submit_journal_entry, book_deferred_entries_based_on
)
_book_deferred_revenue_or_expense(item, via_journal_entry, submit_journal_entry, book_deferred_entries_based_on)
def process_deferred_accounting(posting_date=None):
"""Converts deferred income/expense into income/expense
Executed via background jobs on every month end"""
''' Converts deferred income/expense into income/expense
Executed via background jobs on every month end '''
if not posting_date:
posting_date = today()
if not cint(
frappe.db.get_singles_value("Accounts Settings", "automatically_process_deferred_accounting_entry")
):
if not cint(frappe.db.get_singles_value('Accounts Settings', 'automatically_process_deferred_accounting_entry')):
return
start_date = add_months(today(), -1)
end_date = add_days(today(), -1)
companies = frappe.get_all("Company")
companies = frappe.get_all('Company')
for company in companies:
for record_type in ("Income", "Expense"):
doc = frappe.get_doc(
dict(
doctype="Process Deferred Accounting",
company=company.name,
posting_date=posting_date,
start_date=start_date,
end_date=end_date,
type=record_type,
)
)
for record_type in ('Income', 'Expense'):
doc = frappe.get_doc(dict(
doctype='Process Deferred Accounting',
company=company.name,
posting_date=posting_date,
start_date=start_date,
end_date=end_date,
type=record_type
))
doc.insert()
doc.submit()
def make_gl_entries(
doc,
credit_account,
debit_account,
against,
amount,
base_amount,
posting_date,
project,
account_currency,
cost_center,
item,
deferred_process=None,
):
def make_gl_entries(doc, credit_account, debit_account, against,
amount, base_amount, posting_date, project, account_currency, cost_center, item, deferred_process=None):
# GL Entry for crediting the amount in the deferred expense
from erpnext.accounts.general_ledger import make_gl_entries
if amount == 0:
return
if amount == 0: return
gl_entries = []
gl_entries.append(
doc.get_gl_dict(
{
"account": credit_account,
"against": against,
"credit": base_amount,
"credit_in_account_currency": amount,
"cost_center": cost_center,
"voucher_detail_no": item.name,
"posting_date": posting_date,
"project": project,
"against_voucher_type": "Process Deferred Accounting",
"against_voucher": deferred_process,
},
account_currency,
item=item,
)
doc.get_gl_dict({
"account": credit_account,
"against": against,
"credit": base_amount,
"credit_in_account_currency": amount,
"cost_center": cost_center,
"voucher_detail_no": item.name,
'posting_date': posting_date,
'project': project,
'against_voucher_type': 'Process Deferred Accounting',
'against_voucher': deferred_process
}, account_currency, item=item)
)
# GL Entry to debit the amount from the expense
gl_entries.append(
doc.get_gl_dict(
{
"account": debit_account,
"against": against,
"debit": base_amount,
"debit_in_account_currency": amount,
"cost_center": cost_center,
"voucher_detail_no": item.name,
"posting_date": posting_date,
"project": project,
"against_voucher_type": "Process Deferred Accounting",
"against_voucher": deferred_process,
},
account_currency,
item=item,
)
doc.get_gl_dict({
"account": debit_account,
"against": against,
"debit": base_amount,
"debit_in_account_currency": amount,
"cost_center": cost_center,
"voucher_detail_no": item.name,
'posting_date': posting_date,
'project': project,
'against_voucher_type': 'Process Deferred Accounting',
'against_voucher': deferred_process
}, account_currency, item=item)
)
if gl_entries:
@@ -527,107 +376,95 @@ def make_gl_entries(
frappe.db.commit()
except Exception as e:
if frappe.flags.in_test:
doc.log_error(f"Error while processing deferred accounting for Invoice {doc.name}")
raise e
else:
frappe.db.rollback()
doc.log_error(f"Error while processing deferred accounting for Invoice {doc.name}")
frappe.flags.deferred_accounting_error = True
traceback = frappe.get_traceback()
frappe.log_error(message=traceback)
frappe.flags.deferred_accounting_error = True
def send_mail(deferred_process):
title = _("Error while processing deferred accounting for {0}").format(deferred_process)
link = get_link_to_form("Process Deferred Accounting", deferred_process)
link = get_link_to_form('Process Deferred Accounting', deferred_process)
content = _("Deferred accounting failed for some invoices:") + "\n"
content += _(
"Please check Process Deferred Accounting {0} and submit manually after resolving errors."
).format(link)
content += _("Please check Process Deferred Accounting {0} and submit manually after resolving errors.").format(link)
sendmail_to_system_managers(title, content)
def book_revenue_via_journal_entry(doc, credit_account, debit_account, against,
amount, base_amount, posting_date, project, account_currency, cost_center, item,
deferred_process=None, submit='No'):
def book_revenue_via_journal_entry(
doc,
credit_account,
debit_account,
amount,
base_amount,
posting_date,
project,
account_currency,
cost_center,
item,
deferred_process=None,
submit="No",
):
if amount == 0:
return
if amount == 0: return
journal_entry = frappe.new_doc("Journal Entry")
journal_entry = frappe.new_doc('Journal Entry')
journal_entry.posting_date = posting_date
journal_entry.company = doc.company
journal_entry.voucher_type = "Deferred Revenue" if doc.doctype == "Sales Invoice" else "Deferred Expense"
journal_entry.process_deferred_accounting = deferred_process
journal_entry.voucher_type = 'Deferred Revenue' if doc.doctype == 'Sales Invoice' \
else 'Deferred Expense'
debit_entry = {
"account": credit_account,
"credit": base_amount,
"credit_in_account_currency": amount,
"account_currency": account_currency,
"reference_name": doc.name,
"reference_type": doc.doctype,
"reference_detail_no": item.name,
"cost_center": cost_center,
"project": project,
'account': credit_account,
'credit': base_amount,
'credit_in_account_currency': amount,
'party_type': 'Customer' if doc.doctype == 'Sales Invoice' else 'Supplier',
'party': against,
'account_currency': account_currency,
'reference_name': doc.name,
'reference_type': doc.doctype,
'reference_detail_no': item.name,
'cost_center': cost_center,
'project': project,
}
credit_entry = {
"account": debit_account,
"debit": base_amount,
"debit_in_account_currency": amount,
"account_currency": account_currency,
"reference_name": doc.name,
"reference_type": doc.doctype,
"reference_detail_no": item.name,
"cost_center": cost_center,
"project": project,
'account': debit_account,
'debit': base_amount,
'debit_in_account_currency': amount,
'party_type': 'Customer' if doc.doctype == 'Sales Invoice' else 'Supplier',
'party': against,
'account_currency': account_currency,
'reference_name': doc.name,
'reference_type': doc.doctype,
'reference_detail_no': item.name,
'cost_center': cost_center,
'project': project,
}
for dimension in get_accounting_dimensions():
debit_entry.update({dimension: item.get(dimension)})
debit_entry.update({
dimension: item.get(dimension)
})
credit_entry.update({dimension: item.get(dimension)})
credit_entry.update({
dimension: item.get(dimension)
})
journal_entry.append("accounts", debit_entry)
journal_entry.append("accounts", credit_entry)
journal_entry.append('accounts', debit_entry)
journal_entry.append('accounts', credit_entry)
try:
journal_entry.save()
if submit:
journal_entry.submit()
frappe.db.commit()
except Exception:
frappe.db.rollback()
doc.log_error(f"Error while processing deferred accounting for Invoice {doc.name}")
traceback = frappe.get_traceback()
frappe.log_error(message=traceback)
frappe.flags.deferred_accounting_error = True
def get_deferred_booking_accounts(doctype, voucher_detail_no, dr_or_cr):
if doctype == "Sales Invoice":
credit_account, debit_account = frappe.db.get_value(
"Sales Invoice Item",
{"name": voucher_detail_no},
["income_account", "deferred_revenue_account"],
)
else:
credit_account, debit_account = frappe.db.get_value(
"Purchase Invoice Item",
{"name": voucher_detail_no},
["deferred_expense_account", "expense_account"],
)
if dr_or_cr == "Debit":
if doctype == 'Sales Invoice':
credit_account, debit_account = frappe.db.get_value('Sales Invoice Item', {'name': voucher_detail_no},
['income_account', 'deferred_revenue_account'])
else:
credit_account, debit_account = frappe.db.get_value('Purchase Invoice Item', {'name': voucher_detail_no},
['deferred_expense_account', 'expense_account'])
if dr_or_cr == 'Debit':
return debit_account
else:
return credit_account

View File

@@ -0,0 +1 @@
from __future__ import unicode_literals

View File

@@ -0,0 +1 @@
from __future__ import unicode_literals

View File

@@ -1,31 +1,33 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
frappe.ui.form.on("Account", {
setup: function (frm) {
frm.add_fetch("parent_account", "report_type", "report_type");
frm.add_fetch("parent_account", "root_type", "root_type");
frappe.ui.form.on('Account', {
setup: function(frm) {
frm.add_fetch('parent_account', 'report_type', 'report_type');
frm.add_fetch('parent_account', 'root_type', 'root_type');
},
onload: function (frm) {
frm.set_query("parent_account", function (doc) {
onload: function(frm) {
frm.set_query('parent_account', function(doc) {
return {
filters: {
is_group: 1,
company: doc.company,
},
"is_group": 1,
"company": doc.company
}
};
});
},
refresh: function (frm) {
frm.toggle_display("account_name", frm.is_new());
refresh: function(frm) {
frm.toggle_display('account_name', frm.is_new());
// hide fields if group
frm.toggle_display(["tax_rate"], cint(frm.doc.is_group) == 0);
frm.toggle_display(['account_type', 'tax_rate'], cint(frm.doc.is_group) == 0);
frm.toggle_enable(["is_group", "company", "account_number"], frm.is_new());
// disable fields
frm.toggle_enable(['is_group', 'company'], false);
if (cint(frm.doc.is_group) == 0) {
frm.toggle_display("freeze_account", frm.doc.__onload && frm.doc.__onload.can_freeze_account);
frm.toggle_display('freeze_account', frm.doc.__onload
&& frm.doc.__onload.can_freeze_account);
}
// read-only for root accounts
@@ -36,147 +38,123 @@ frappe.ui.form.on("Account", {
} else {
// credit days and type if customer or supplier
frm.set_intro(null);
frm.trigger("account_type");
frm.trigger('account_type');
// show / hide convert buttons
frm.trigger("add_toolbar_buttons");
frm.trigger('add_toolbar_buttons');
}
if (frm.has_perm("write")) {
frm.add_custom_button(
__("Merge Account"),
function () {
frm.trigger("merge_account");
},
__("Actions")
);
frm.add_custom_button(
__("Update Account Name / Number"),
function () {
frm.trigger("update_account_number");
},
__("Actions")
);
if (frm.has_perm('write')) {
frm.add_custom_button(__('Update Account Name / Number'), function () {
frm.trigger("update_account_number");
});
frm.add_custom_button(__('Merge Account'), function () {
frm.trigger("merge_account");
});
}
}
},
account_type: function (frm) {
if (frm.doc.is_group == 0) {
frm.toggle_display(["tax_rate"], frm.doc.account_type == "Tax");
frm.toggle_display("warehouse", frm.doc.account_type == "Stock");
frm.toggle_display(['tax_rate'], frm.doc.account_type == 'Tax');
frm.toggle_display('warehouse', frm.doc.account_type == 'Stock');
}
},
add_toolbar_buttons: function (frm) {
frm.add_custom_button(
__("Chart of Accounts"),
() => {
frappe.set_route("Tree", "Account");
},
__("View")
);
add_toolbar_buttons: function(frm) {
frm.add_custom_button(__('Chart of Accounts'),
function () { frappe.set_route("Tree", "Account"); });
if (frm.doc.is_group == 1) {
frm.add_custom_button(
__("Convert to Non-Group"),
function () {
return frappe.call({
doc: frm.doc,
method: "convert_group_to_ledger",
callback: function () {
frm.refresh();
},
});
},
__("Actions")
);
} else if (cint(frm.doc.is_group) == 0 && frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
frm.add_custom_button(
__("General Ledger"),
function () {
frappe.route_options = {
account: frm.doc.name,
from_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
to_date: erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
company: frm.doc.company,
};
frappe.set_route("query-report", "General Ledger");
},
__("View")
);
frm.add_custom_button(__('Group to Non-Group'), function () {
return frappe.call({
doc: frm.doc,
method: 'convert_group_to_ledger',
callback: function() {
frm.refresh();
}
});
});
} else if (cint(frm.doc.is_group) == 0
&& frappe.boot.user.can_read.indexOf("GL Entry") !== -1) {
frm.add_custom_button(__('Ledger'), function () {
frappe.route_options = {
"account": frm.doc.name,
"from_date": frappe.sys_defaults.year_start_date,
"to_date": frappe.sys_defaults.year_end_date,
"company": frm.doc.company
};
frappe.set_route("query-report", "General Ledger");
});
frm.add_custom_button(
__("Convert to Group"),
function () {
return frappe.call({
doc: frm.doc,
method: "convert_ledger_to_group",
callback: function () {
frm.refresh();
},
});
},
__("Actions")
);
frm.add_custom_button(__('Non-Group to Group'), function () {
return frappe.call({
doc: frm.doc,
method: 'convert_ledger_to_group',
callback: function() {
frm.refresh();
}
});
});
}
},
merge_account: function (frm) {
merge_account: function(frm) {
var d = new frappe.ui.Dialog({
title: __("Merge with Existing Account"),
title: __('Merge with Existing Account'),
fields: [
{
label: "Name",
fieldname: "name",
fieldtype: "Data",
reqd: 1,
default: frm.doc.name,
},
"label" : "Name",
"fieldname": "name",
"fieldtype": "Data",
"reqd": 1,
"default": frm.doc.name
}
],
primary_action: function () {
primary_action: function() {
var data = d.get_values();
frappe.call({
method: "erpnext.accounts.doctype.account.account.merge_account",
args: {
old: frm.doc.name,
new: data.name,
is_group: frm.doc.is_group,
root_type: frm.doc.root_type,
company: frm.doc.company
},
callback: function (r) {
if (!r.exc) {
if (r.message) {
callback: function(r) {
if(!r.exc) {
if(r.message) {
frappe.set_route("Form", "Account", r.message);
}
d.hide();
}
},
}
});
},
primary_action_label: __("Merge"),
primary_action_label: __('Merge')
});
d.show();
},
update_account_number: function (frm) {
update_account_number: function(frm) {
var d = new frappe.ui.Dialog({
title: __("Update Account Number / Name"),
title: __('Update Account Number / Name'),
fields: [
{
label: "Account Name",
fieldname: "account_name",
fieldtype: "Data",
reqd: 1,
default: frm.doc.account_name,
"label": "Account Name",
"fieldname": "account_name",
"fieldtype": "Data",
"reqd": 1,
"default": frm.doc.account_name
},
{
label: "Account Number",
fieldname: "account_number",
fieldtype: "Data",
default: frm.doc.account_number,
},
"label": "Account Number",
"fieldname": "account_number",
"fieldtype": "Data",
"default": frm.doc.account_number
}
],
primary_action: function () {
primary_action: function() {
var data = d.get_values();
if (
data.account_number === frm.doc.account_number &&
data.account_name === frm.doc.account_name
) {
if(data.account_number === frm.doc.account_number && data.account_name === frm.doc.account_name) {
d.hide();
return;
}
@@ -186,11 +164,11 @@ frappe.ui.form.on("Account", {
args: {
account_number: data.account_number,
account_name: data.account_name,
name: frm.doc.name,
name: frm.doc.name
},
callback: function (r) {
if (!r.exc) {
if (r.message) {
callback: function(r) {
if(!r.exc) {
if(r.message) {
frappe.set_route("Form", "Account", r.message);
} else {
frm.set_value("account_number", data.account_number);
@@ -198,11 +176,11 @@ frappe.ui.form.on("Account", {
}
d.hide();
}
},
}
});
},
primary_action_label: __("Update"),
primary_action_label: __('Update')
});
d.show();
},
}
});

View File

@@ -18,6 +18,7 @@
"root_type",
"report_type",
"account_currency",
"inter_company_account",
"column_break1",
"parent_account",
"account_type",
@@ -33,11 +34,15 @@
{
"fieldname": "properties",
"fieldtype": "Section Break",
"oldfieldtype": "Section Break"
"oldfieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "column_break0",
"fieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1,
"width": "50%"
},
{
@@ -48,24 +53,29 @@
"no_copy": 1,
"oldfieldname": "account_name",
"oldfieldtype": "Data",
"reqd": 1
"reqd": 1,
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "account_number",
"fieldtype": "Data",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Account Number"
"label": "Account Number",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
},
{
"default": "0",
"fieldname": "is_group",
"fieldtype": "Check",
"label": "Is Group"
"label": "Is Group",
"show_days": 1,
"show_seconds": 1
},
{
"fetch_from": "parent_account.company",
"fetch_if_empty": 1,
"fieldname": "company",
"fieldtype": "Link",
"in_standard_filter": 1,
@@ -73,8 +83,11 @@
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"read_only": 1,
"remember_last_selected_value": 1,
"reqd": 1
"reqd": 1,
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "root_type",
@@ -82,7 +95,9 @@
"in_standard_filter": 1,
"label": "Root Type",
"options": "\nAsset\nLiability\nIncome\nExpense\nEquity",
"read_only": 1
"read_only": 1,
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "report_type",
@@ -90,31 +105,46 @@
"in_standard_filter": 1,
"label": "Report Type",
"options": "\nBalance Sheet\nProfit and Loss",
"read_only": 1
"read_only": 1,
"show_days": 1,
"show_seconds": 1
},
{
"depends_on": "eval:doc.is_group==0",
"fieldname": "account_currency",
"fieldtype": "Link",
"label": "Currency",
"options": "Currency"
"options": "Currency",
"show_days": 1,
"show_seconds": 1
},
{
"default": "0",
"fieldname": "inter_company_account",
"fieldtype": "Check",
"label": "Inter Company Account",
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "column_break1",
"fieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1,
"width": "50%"
},
{
"fieldname": "parent_account",
"fieldtype": "Link",
"ignore_user_permissions": 1,
"in_preview": 1,
"label": "Parent Account",
"oldfieldname": "parent_account",
"oldfieldtype": "Link",
"options": "Account",
"reqd": 1,
"search_index": 1
"search_index": 1,
"show_days": 1,
"show_seconds": 1
},
{
"description": "Setting Account Type helps in selecting this Account in transactions.",
@@ -124,8 +154,9 @@
"label": "Account Type",
"oldfieldname": "account_type",
"oldfieldtype": "Select",
"options": "\nAccumulated Depreciation\nAsset Received But Not Billed\nBank\nCash\nChargeable\nCapital Work in Progress\nCost of Goods Sold\nCurrent Asset\nCurrent Liability\nDepreciation\nDirect Expense\nDirect Income\nEquity\nExpense Account\nExpenses Included In Asset Valuation\nExpenses Included In Valuation\nFixed Asset\nIncome Account\nIndirect Expense\nIndirect Income\nLiability\nPayable\nReceivable\nRound Off\nStock\nStock Adjustment\nStock Received But Not Billed\nService Received But Not Billed\nTax\nTemporary",
"search_index": 1
"options": "\nAccumulated Depreciation\nAsset Received But Not Billed\nBank\nCash\nChargeable\nCapital Work in Progress\nCost of Goods Sold\nDepreciation\nEquity\nExpense Account\nExpenses Included In Asset Valuation\nExpenses Included In Valuation\nFixed Asset\nIncome Account\nPayable\nReceivable\nRound Off\nStock\nStock Adjustment\nStock Received But Not Billed\nService Received But Not Billed\nTax\nTemporary",
"show_days": 1,
"show_seconds": 1
},
{
"description": "Rate at which this tax is applied",
@@ -133,7 +164,9 @@
"fieldtype": "Float",
"label": "Rate",
"oldfieldname": "tax_rate",
"oldfieldtype": "Currency"
"oldfieldtype": "Currency",
"show_days": 1,
"show_seconds": 1
},
{
"description": "If the account is frozen, entries are allowed to restricted users.",
@@ -142,13 +175,17 @@
"label": "Frozen",
"oldfieldname": "freeze_account",
"oldfieldtype": "Select",
"options": "No\nYes"
"options": "No\nYes",
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "balance_must_be",
"fieldtype": "Select",
"label": "Balance must be",
"options": "\nDebit\nCredit"
"options": "\nDebit\nCredit",
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "lft",
@@ -157,7 +194,9 @@
"label": "Lft",
"print_hide": 1,
"read_only": 1,
"search_index": 1
"search_index": 1,
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "rgt",
@@ -166,7 +205,9 @@
"label": "Rgt",
"print_hide": 1,
"read_only": 1,
"search_index": 1
"search_index": 1,
"show_days": 1,
"show_seconds": 1
},
{
"fieldname": "old_parent",
@@ -174,27 +215,33 @@
"hidden": 1,
"label": "Old Parent",
"print_hide": 1,
"read_only": 1
"read_only": 1,
"show_days": 1,
"show_seconds": 1
},
{
"default": "0",
"depends_on": "eval:(doc.report_type == 'Profit and Loss' && !doc.is_group)",
"fieldname": "include_in_gross",
"fieldtype": "Check",
"label": "Include in gross"
"label": "Include in gross",
"show_days": 1,
"show_seconds": 1
},
{
"default": "0",
"fieldname": "disabled",
"fieldtype": "Check",
"label": "Disable"
"label": "Disable",
"show_days": 1,
"show_seconds": 1
}
],
"icon": "fa fa-money",
"idx": 1,
"is_tree": 1,
"links": [],
"modified": "2024-06-27 16:23:04.444354",
"modified": "2020-06-11 15:15:54.338622",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account",
@@ -245,15 +292,14 @@
"read": 1,
"report": 1,
"role": "Accounts Manager",
"set_user_permissions": 1,
"share": 1,
"write": 1
}
],
"search_fields": "account_number",
"show_name_in_global_search": 1,
"show_preview_popup": 1,
"sort_field": "creation",
"sort_field": "modified",
"sort_order": "ASC",
"states": [],
"track_changes": 1
}

View File

@@ -1,6 +1,7 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
from frappe import _, throw
@@ -10,103 +11,32 @@ from frappe.utils.nestedset import NestedSet, get_ancestors_of, get_descendants_
import erpnext
class RootNotEditable(frappe.ValidationError):
pass
class BalanceMismatchError(frappe.ValidationError):
pass
class InvalidAccountMergeError(frappe.ValidationError):
pass
class RootNotEditable(frappe.ValidationError): pass
class BalanceMismatchError(frappe.ValidationError): pass
class Account(NestedSet):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
account_currency: DF.Link | None
account_name: DF.Data
account_number: DF.Data | None
account_type: DF.Literal[
"",
"Accumulated Depreciation",
"Asset Received But Not Billed",
"Bank",
"Cash",
"Chargeable",
"Capital Work in Progress",
"Cost of Goods Sold",
"Current Asset",
"Current Liability",
"Depreciation",
"Direct Expense",
"Direct Income",
"Equity",
"Expense Account",
"Expenses Included In Asset Valuation",
"Expenses Included In Valuation",
"Fixed Asset",
"Income Account",
"Indirect Expense",
"Indirect Income",
"Liability",
"Payable",
"Receivable",
"Round Off",
"Stock",
"Stock Adjustment",
"Stock Received But Not Billed",
"Service Received But Not Billed",
"Tax",
"Temporary",
]
balance_must_be: DF.Literal["", "Debit", "Credit"]
company: DF.Link
disabled: DF.Check
freeze_account: DF.Literal["No", "Yes"]
include_in_gross: DF.Check
is_group: DF.Check
lft: DF.Int
old_parent: DF.Data | None
parent_account: DF.Link
report_type: DF.Literal["", "Balance Sheet", "Profit and Loss"]
rgt: DF.Int
root_type: DF.Literal["", "Asset", "Liability", "Income", "Expense", "Equity"]
tax_rate: DF.Float
# end: auto-generated types
nsm_parent_field = "parent_account"
nsm_parent_field = 'parent_account'
def on_update(self):
if frappe.local.flags.ignore_update_nsm:
return
else:
super().on_update()
super(Account, self).on_update()
def onload(self):
frozen_accounts_modifier = frappe.db.get_single_value("Accounts Settings", "frozen_accounts_modifier")
frozen_accounts_modifier = frappe.db.get_value("Accounts Settings", "Accounts Settings",
"frozen_accounts_modifier")
if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles():
self.set_onload("can_freeze_account", True)
def autoname(self):
from erpnext.accounts.utils import get_autoname_with_number
self.name = get_autoname_with_number(self.account_number, self.account_name, self.company)
self.name = get_autoname_with_number(self.account_number, self.account_name, None, self.company)
def validate(self):
from erpnext.accounts.utils import validate_field_number
if frappe.local.flags.allow_unverified_charts:
return
self.validate_parent()
self.validate_parent_child_account_type()
self.validate_root_details()
validate_field_number("Account", self.name, self.account_number, self.company, "account_number")
self.validate_group_or_ledger()
@@ -116,52 +46,26 @@ class Account(NestedSet):
self.validate_balance_must_be_debit_or_credit()
self.validate_account_currency()
self.validate_root_company_and_sync_account_to_children()
self.validate_receivable_payable_account_type()
def validate_parent_child_account_type(self):
if self.parent_account:
if self.account_type in [
"Direct Income",
"Indirect Income",
"Current Asset",
"Current Liability",
"Direct Expense",
"Indirect Expense",
]:
parent_account_type = frappe.db.get_value("Account", self.parent_account, ["account_type"])
if parent_account_type == self.account_type:
throw(_("Only Parent can be of type {0}").format(self.account_type))
def validate_parent(self):
"""Fetch Parent Details and validate parent account"""
if self.parent_account:
par = frappe.get_cached_value(
"Account", self.parent_account, ["name", "is_group", "company"], as_dict=1
)
par = frappe.db.get_value("Account", self.parent_account,
["name", "is_group", "company"], as_dict=1)
if not par:
throw(
_("Account {0}: Parent account {1} does not exist").format(self.name, self.parent_account)
)
throw(_("Account {0}: Parent account {1} does not exist").format(self.name, self.parent_account))
elif par.name == self.name:
throw(_("Account {0}: You can not assign itself as parent account").format(self.name))
elif not par.is_group:
throw(
_("Account {0}: Parent account {1} can not be a ledger").format(
self.name, self.parent_account
)
)
throw(_("Account {0}: Parent account {1} can not be a ledger").format(self.name, self.parent_account))
elif par.company != self.company:
throw(
_("Account {0}: Parent account {1} does not belong to company: {2}").format(
self.name, self.parent_account, self.company
)
)
throw(_("Account {0}: Parent account {1} does not belong to company: {2}")
.format(self.name, self.parent_account, self.company))
def set_root_and_report_type(self):
if self.parent_account:
par = frappe.get_cached_value(
"Account", self.parent_account, ["report_type", "root_type"], as_dict=1
)
par = frappe.db.get_value("Account", self.parent_account,
["report_type", "root_type"], as_dict=1)
if par.report_type:
self.report_type = par.report_type
@@ -169,50 +73,27 @@ class Account(NestedSet):
self.root_type = par.root_type
if self.is_group:
db_value = self.get_doc_before_save()
db_value = frappe.db.get_value("Account", self.name, ["report_type", "root_type"], as_dict=1)
if db_value:
if self.report_type != db_value.report_type:
frappe.db.sql(
"update `tabAccount` set report_type=%s where lft > %s and rgt < %s",
(self.report_type, self.lft, self.rgt),
)
frappe.db.sql("update `tabAccount` set report_type=%s where lft > %s and rgt < %s",
(self.report_type, self.lft, self.rgt))
if self.root_type != db_value.root_type:
frappe.db.sql(
"update `tabAccount` set root_type=%s where lft > %s and rgt < %s",
(self.root_type, self.lft, self.rgt),
)
frappe.db.sql("update `tabAccount` set root_type=%s where lft > %s and rgt < %s",
(self.root_type, self.lft, self.rgt))
if self.root_type and not self.report_type:
self.report_type = (
"Balance Sheet" if self.root_type in ("Asset", "Liability", "Equity") else "Profit and Loss"
)
def validate_receivable_payable_account_type(self):
doc_before_save = self.get_doc_before_save()
receivable_payable_types = ["Receivable", "Payable"]
if (
doc_before_save
and doc_before_save.account_type in receivable_payable_types
and doc_before_save.account_type != self.account_type
):
# check for ledger entries
if frappe.db.get_all("GL Entry", filters={"account": self.name, "is_cancelled": 0}, limit=1):
msg = _(
"There are ledger entries against this account. Changing {0} to non-{1} in live system will cause incorrect output in 'Accounts {2}' report"
).format(
frappe.bold("Account Type"), doc_before_save.account_type, doc_before_save.account_type
)
frappe.msgprint(msg)
self.add_comment("Comment", msg)
self.report_type = "Balance Sheet" \
if self.root_type in ("Asset", "Liability", "Equity") else "Profit and Loss"
def validate_root_details(self):
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)
# 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)
if not self.parent_account and not self.is_group:
throw(_("The root account {0} must be a group").format(frappe.bold(self.name)))
frappe.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
@@ -220,22 +101,17 @@ class Account(NestedSet):
return
ancestors = get_root_company(self.company)
if ancestors:
if frappe.get_cached_value(
"Company", self.company, "allow_account_creation_against_child_company"
):
if frappe.get_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"
):
if not frappe.db.get_value("Account",
{'account_name': self.account_name, 'company': ancestors[0]}, 'name'):
frappe.throw(_("Please add the account to root level Company - {}").format(ancestors[0]))
elif self.parent_account:
descendants = get_descendants_of("Company", self.company)
if not descendants:
return
descendants = get_descendants_of('Company', self.company)
if not descendants: return
parent_acc_name_map = {}
parent_acc_name, parent_acc_number = frappe.get_cached_value(
"Account", self.parent_account, ["account_name", "account_number"]
)
parent_acc_name, parent_acc_number = frappe.db.get_value('Account', self.parent_account, \
["account_name", "account_number"])
filters = {
"company": ["in", descendants],
"account_name": parent_acc_name,
@@ -243,69 +119,50 @@ class Account(NestedSet):
if parent_acc_number:
filters["account_number"] = parent_acc_number
for d in frappe.db.get_values(
"Account", filters=filters, fieldname=["company", "name"], as_dict=True
):
for d in frappe.db.get_values('Account', filters=filters, fieldname=["company", "name"], as_dict=True):
parent_acc_name_map[d["company"]] = d["name"]
if not parent_acc_name_map:
return
if not parent_acc_name_map: return
self.create_account_for_child_company(parent_acc_name_map, descendants, parent_acc_name)
def validate_group_or_ledger(self):
doc_before_save = self.get_doc_before_save()
if not doc_before_save or cint(doc_before_save.is_group) == cint(self.is_group):
if self.get("__islocal"):
return
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"))
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"))
def validate_frozen_accounts_modifier(self):
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"))
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"))
def validate_balance_must_be_debit_or_credit(self):
from erpnext.accounts.utils import get_balance_on
if not self.get("__islocal") and self.balance_must_be:
account_balance = get_balance_on(self.name)
if account_balance > 0 and self.balance_must_be == "Credit":
frappe.throw(
_(
"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'"
)
)
frappe.throw(_("Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'"))
elif account_balance < 0 and self.balance_must_be == "Debit":
frappe.throw(
_(
"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'"
)
)
frappe.throw(_("Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'"))
def validate_account_currency(self):
self.currency_explicitly_specified = True
if not self.account_currency:
self.account_currency = frappe.get_cached_value("Company", self.company, "default_currency")
self.currency_explicitly_specified = False
self.account_currency = frappe.get_cached_value('Company', self.company, "default_currency")
gl_currency = frappe.db.get_value("GL Entry", {"account": self.name}, "account_currency")
if gl_currency and self.account_currency != gl_currency:
elif self.account_currency != frappe.db.get_value("Account", self.name, "account_currency"):
if frappe.db.get_value("GL Entry", {"account": self.name}):
frappe.throw(_("Currency can not be changed after making entries using some other currency"))
@@ -314,54 +171,45 @@ class Account(NestedSet):
company_bold = frappe.bold(company)
parent_acc_name_bold = frappe.bold(parent_acc_name)
if not parent_acc_name_map.get(company):
frappe.throw(
_(
"While creating account for Child Company {0}, parent account {1} not found. Please create the parent account in corresponding COA"
).format(company_bold, parent_acc_name_bold),
title=_("Account Not Found"),
)
frappe.throw(_("While creating account for Child Company {0}, parent account {1} not found. Please create the parent account in corresponding COA")
.format(company_bold, parent_acc_name_bold), title=_("Account Not Found"))
# validate if parent of child company account to be added is a 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)
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")):
msg = _("While creating account for Child Company {0}, parent account {1} found as a ledger account.").format(company_bold, parent_acc_name_bold)
msg += "<br><br>"
msg += _(
"Please convert the parent account in corresponding child company to a group account."
)
msg += _("Please convert the parent account in corresponding child company to a group account.")
frappe.throw(msg, title=_("Invalid Parent Account"))
filters = {"account_name": self.account_name, "company": company}
filters = {
"account_name": self.account_name,
"company": company
}
if self.account_number:
filters["account_number"] = self.account_number
child_account = frappe.db.get_value("Account", filters, "name")
child_account = frappe.db.get_value("Account", filters, 'name')
if not child_account:
doc = frappe.copy_doc(self)
doc.flags.ignore_root_company_validation = True
doc.update(
{
"company": company,
# parent account's currency should be passed down to child account's curreny
# if currency explicitly specified by user, child will inherit. else, default currency will be used.
"account_currency": self.account_currency
if self.currency_explicitly_specified
else erpnext.get_company_currency(company),
"parent_account": parent_acc_name_map[company],
}
)
doc.update({
"company": company,
# parent account's currency should be passed down to child account's curreny
# if it is None, it picks it up from default company currency, which might be unintended
"account_currency": erpnext.get_company_currency(company),
"parent_account": parent_acc_name_map[company]
})
doc.save()
frappe.msgprint(_("Account {0} is added in the child company {1}").format(doc.name, company))
frappe.msgprint(_("Account {0} is added in the child company {1}")
.format(doc.name, company))
elif child_account:
# update the parent company's value in child companies
doc = frappe.get_doc("Account", child_account)
parent_value_changed = False
for field in ["account_type", "freeze_account", "balance_must_be"]:
for field in ['account_type', 'freeze_account', 'balance_must_be']:
if doc.get(field) != self.get(field):
parent_value_changed = True
doc.set(field, self.get(field))
@@ -396,11 +244,8 @@ class Account(NestedSet):
return frappe.db.get_value("GL Entry", {"account": self.name})
def check_if_child_exists(self):
return frappe.db.sql(
"""select name from `tabAccount` where parent_account = %s
and docstatus != 2""",
self.name,
)
return frappe.db.sql("""select name from `tabAccount` where parent_account = %s
and docstatus != 2""", self.name)
def validate_mandatory(self):
if not self.root_type:
@@ -414,104 +259,75 @@ class Account(NestedSet):
if self.check_gle_exists():
throw(_("Account with existing transaction can not be deleted"))
super().on_trash(True)
super(Account, self).on_trash(True)
@frappe.whitelist()
@frappe.validate_and_sanitize_search_inputs
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 = {}
and {} like {} order by name limit {} offset {}""".format("%s", searchfield, "%s", "%s", "%s"),
(filters["company"], "%%%s%%" % txt, page_len, start),
as_list=1,
)
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""" %
("%s", searchfield, "%s", "%s", "%s"),
(filters["company"], "%%%s%%" % txt, start, page_len), as_list=1)
def get_account_currency(account):
"""Helper function to get account currency"""
if not account:
return
def generator():
account_currency, company = frappe.get_cached_value(
"Account", account, ["account_currency", "company"]
)
account_currency, company = frappe.get_cached_value("Account", account, ["account_currency", "company"])
if not account_currency:
account_currency = frappe.get_cached_value("Company", company, "default_currency")
account_currency = frappe.get_cached_value('Company', company, "default_currency")
return account_currency
return frappe.local_cache("account_currency", account, generator)
def on_doctype_update():
frappe.db.add_index("Account", ["lft", "rgt"])
def get_account_autoname(account_number, account_name, company):
# first validate if company exists
company = frappe.get_cached_value("Company", company, ["abbr", "name"], as_dict=True)
company = frappe.get_cached_value('Company', company, ["abbr", "name"], as_dict=True)
if not company:
frappe.throw(_("Company {0} does not exist").format(company))
frappe.throw(_('Company {0} does not exist').format(company))
parts = [account_name.strip(), company.abbr]
if cstr(account_number).strip():
parts.insert(0, cstr(account_number).strip())
return " - ".join(parts)
return ' - '.join(parts)
def validate_account_number(name, account_number, company):
if account_number:
account_with_same_number = frappe.db.get_value(
"Account", {"account_number": account_number, "company": company, "name": ["!=", name]}
)
account_with_same_number = frappe.db.get_value("Account",
{"account_number": account_number, "company": company, "name": ["!=", name]})
if account_with_same_number:
frappe.throw(
_("Account Number {0} already used in account {1}").format(
account_number, account_with_same_number
)
)
frappe.throw(_("Account Number {0} already used in account {1}")
.format(account_number, account_with_same_number))
@frappe.whitelist()
def update_account_number(name, account_name, account_number=None, from_descendant=False):
account = frappe.get_cached_doc("Account", name)
if not account:
return
account = frappe.db.get_value("Account", name, "company", as_dict=True)
if not account: return
old_acc_name, old_acc_number = account.account_name, account.account_number
old_acc_name, old_acc_number = frappe.db.get_value('Account', name, \
["account_name", "account_number"])
# check if account exists in parent company
ancestors = get_ancestors_of("Company", account.company)
allow_independent_account_creation = frappe.get_cached_value(
"Company", account.company, "allow_account_creation_against_child_company"
)
allow_independent_account_creation = frappe.get_value("Company", account.company, "allow_account_creation_against_child_company")
if ancestors and not allow_independent_account_creation:
for ancestor in ancestors:
old_name = frappe.db.get_value(
"Account",
{"account_number": old_acc_number, "account_name": old_acc_name, "company": ancestor},
"name",
)
if old_name:
if frappe.db.get_value("Account", {'account_name': old_acc_name, 'company': ancestor}, 'name'):
# same account in parent company exists
allow_child_account_creation = _("Allow Account Creation Against Child Company")
message = _("Account {0} exists in parent company {1}.").format(
frappe.bold(old_acc_name), frappe.bold(ancestor)
)
message = _("Account {0} exists in parent company {1}.").format(frappe.bold(old_acc_name), frappe.bold(ancestor))
message += "<br>"
message += _("Renaming it is only allowed via parent company {0}, to avoid mismatch.").format(
frappe.bold(ancestor)
)
message += _("Renaming it is only allowed via parent company {0}, to avoid mismatch.").format(frappe.bold(ancestor))
message += "<br><br>"
message += _("To overrule this, enable '{0}' in company {1}").format(
allow_child_account_creation, frappe.bold(account.company)
)
message += _("To overrule this, enable '{0}' in company {1}").format(allow_child_account_creation, frappe.bold(account.company))
frappe.throw(message, title=_("Rename Not Allowed"))
@@ -524,64 +340,42 @@ def update_account_number(name, account_name, account_number=None, from_descenda
if not from_descendant:
# Update and rename in child company accounts as well
descendants = get_descendants_of("Company", account.company)
descendants = get_descendants_of('Company', account.company)
if descendants:
sync_update_account_number_in_child(
descendants, old_acc_name, account_name, account_number, old_acc_number
)
sync_update_account_number_in_child(descendants, old_acc_name, account_name, account_number, old_acc_number)
new_name = get_account_autoname(account_number, account_name, account.company)
if name != new_name:
frappe.rename_doc("Account", name, new_name, force=1)
return new_name
@frappe.whitelist()
def merge_account(old, new):
def merge_account(old, new, is_group, root_type, company):
# Validate properties before merging
new_account = frappe.get_cached_doc("Account", new)
old_account = frappe.get_cached_doc("Account", old)
if not new_account:
if not frappe.db.exists("Account", new):
throw(_("Account {0} does not exist").format(new))
if (
cint(new_account.is_group),
new_account.root_type,
new_account.company,
cstr(new_account.account_currency),
) != (
cint(old_account.is_group),
old_account.root_type,
old_account.company,
cstr(old_account.account_currency),
):
throw(
msg=_(
"""Merging is only possible if following properties are same in both records. Is Group, Root Type, Company and Account Currency"""
),
title=("Invalid Accounts"),
exc=InvalidAccountMergeError,
)
val = list(frappe.db.get_value("Account", new,
["is_group", "root_type", "company"]))
if old_account.is_group and new_account.parent_account == old:
new_account.db_set("parent_account", frappe.get_cached_value("Account", old, "parent_account"))
if val != [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"))
frappe.rename_doc("Account", old, new, merge=1, force=1)
return new
@frappe.whitelist()
def get_root_company(company):
# return the topmost company in the hierarchy
ancestors = get_ancestors_of("Company", company, "lft asc")
ancestors = get_ancestors_of('Company', company, "lft asc")
return [ancestors[0]] if ancestors else []
def sync_update_account_number_in_child(
descendants, old_acc_name, account_name, account_number=None, old_acc_number=None
):
def sync_update_account_number_in_child(descendants, old_acc_name, account_name, account_number=None, old_acc_number=None):
filters = {
"company": ["in", descendants],
"account_name": old_acc_name,
@@ -589,5 +383,5 @@ def sync_update_account_number_in_child(
if old_acc_number:
filters["account_number"] = old_acc_number
for d in frappe.db.get_values("Account", filters=filters, fieldname=["company", "name"], as_dict=True):
update_account_number(d["name"], account_name, account_number, from_descendant=True)
for d in frappe.db.get_values('Account', filters=filters, fieldname=["company", "name"], as_dict=True):
update_account_number(d["name"], account_name, account_number, from_descendant=True)

View File

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

View File

@@ -1,5 +1,6 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import json
import os
@@ -7,58 +8,44 @@ import os
import frappe
from frappe.utils import cstr
from frappe.utils.nestedset import rebuild_tree
from six import iteritems
from unidecode import unidecode
def create_charts(
company, chart_template=None, existing_company=None, custom_chart=None, from_coa_importer=None
):
def create_charts(company, chart_template=None, existing_company=None, custom_chart=None, from_coa_importer=None):
chart = custom_chart or get_chart(chart_template, existing_company)
if chart:
accounts = []
def _import_accounts(children, parent, root_type, root_account=False):
for account_name, child in children.items():
for account_name, child in iteritems(children):
if root_account:
root_type = child.get("root_type")
if account_name not in [
"account_name",
"account_number",
"account_type",
"root_type",
"is_group",
"tax_rate",
"account_currency",
]:
if account_name not in ["account_name", "account_number", "account_type",
"root_type", "is_group", "tax_rate"]:
account_number = cstr(child.get("account_number")).strip()
account_name, account_name_in_db = add_suffix_if_duplicate(
account_name, account_number, accounts
)
account_name, account_name_in_db = add_suffix_if_duplicate(account_name,
account_number, accounts)
is_group = identify_is_group(child)
report_type = (
"Balance Sheet"
if root_type in ["Asset", "Liability", "Equity"]
report_type = "Balance Sheet" if root_type in ["Asset", "Liability", "Equity"] \
else "Profit and Loss"
)
account = frappe.get_doc(
{
"doctype": "Account",
"account_name": child.get("account_name") if from_coa_importer else account_name,
"company": company,
"parent_account": parent,
"is_group": is_group,
"root_type": root_type,
"report_type": report_type,
"account_number": account_number,
"account_type": child.get("account_type"),
"account_currency": child.get("account_currency")
or frappe.get_cached_value("Company", company, "default_currency"),
"tax_rate": child.get("tax_rate"),
}
)
account = frappe.get_doc({
"doctype": "Account",
"account_name": child.get('account_name') if from_coa_importer else account_name,
"company": company,
"parent_account": parent,
"is_group": is_group,
"root_type": root_type,
"report_type": report_type,
"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"),
"tax_rate": child.get("tax_rate")
})
if root_account or frappe.local.flags.allow_unverified_charts:
account.flags.ignore_mandatory = True
@@ -75,13 +62,13 @@ def create_charts(
# after all accounts are already inserted.
frappe.local.flags.ignore_update_nsm = True
_import_accounts(chart, None, None, root_account=True)
rebuild_tree("Account")
rebuild_tree("Account", "parent_account")
frappe.local.flags.ignore_update_nsm = False
def add_suffix_if_duplicate(account_name, account_number, accounts):
if account_number:
account_name_in_db = unidecode(" - ".join([account_number, account_name.strip().lower()]))
account_name_in_db = unidecode(" - ".join([account_number,
account_name.strip().lower()]))
else:
account_name_in_db = unidecode(account_name.strip().lower())
@@ -91,31 +78,16 @@ def add_suffix_if_duplicate(account_name, account_number, accounts):
return account_name, account_name_in_db
def identify_is_group(child):
if child.get("is_group"):
is_group = child.get("is_group")
elif len(
set(child.keys())
- set(
[
"account_name",
"account_type",
"root_type",
"is_group",
"tax_rate",
"account_number",
"account_currency",
]
)
):
elif len(set(child.keys()) - set(["account_name", "account_type", "root_type", "is_group", "tax_rate", "account_number"])):
is_group = 1
else:
is_group = 0
return is_group
def get_chart(chart_template, existing_company=None):
chart = {}
if existing_company:
@@ -125,13 +97,11 @@ def get_chart(chart_template, existing_company=None):
from erpnext.accounts.doctype.account.chart_of_accounts.verified import (
standard_chart_of_accounts,
)
return standard_chart_of_accounts.get()
elif chart_template == "Standard with Numbers":
from erpnext.accounts.doctype.account.chart_of_accounts.verified import (
standard_chart_of_accounts_with_account_number,
)
return standard_chart_of_accounts_with_account_number.get()
else:
folders = ("verified",)
@@ -142,12 +112,11 @@ def get_chart(chart_template, existing_company=None):
for fname in os.listdir(path):
fname = frappe.as_unicode(fname)
if fname.endswith(".json"):
with open(os.path.join(path, fname)) as f:
with open(os.path.join(path, fname), "r") as f:
chart = f.read()
if chart and json.loads(chart).get("name") == chart_template:
return json.loads(chart).get("tree")
@frappe.whitelist()
def get_charts_for_country(country, with_standard=False):
charts = []
@@ -155,12 +124,11 @@ def get_charts_for_country(country, with_standard=False):
def _get_chart_name(content):
if content:
content = json.loads(content)
if (
content and content.get("disabled", "No") == "No"
) or frappe.local.flags.allow_unverified_charts:
charts.append(content["name"])
if (content and content.get("disabled", "No") == "No") \
or frappe.local.flags.allow_unverified_charts:
charts.append(content["name"])
country_code = frappe.get_cached_value("Country", country, "code")
country_code = frappe.db.get_value("Country", country, "code")
if country_code:
folders = ("verified",)
if frappe.local.flags.allow_unverified_charts:
@@ -174,7 +142,7 @@ def get_charts_for_country(country, with_standard=False):
for fname in os.listdir(path):
fname = frappe.as_unicode(fname)
if (fname.startswith(country_code) or fname.startswith(country)) and fname.endswith(".json"):
with open(os.path.join(path, fname)) as f:
with open(os.path.join(path, fname), "r") as f:
_get_chart_name(f.read())
# if more than one charts, returned then add the standard
@@ -185,22 +153,11 @@ def get_charts_for_country(country, with_standard=False):
def get_account_tree_from_existing_company(existing_company):
all_accounts = frappe.get_all(
"Account",
filters={"company": existing_company},
fields=[
"name",
"account_name",
"parent_account",
"account_type",
"is_group",
"root_type",
"tax_rate",
"account_number",
"account_currency",
],
order_by="lft, rgt",
)
all_accounts = frappe.get_all('Account',
filters={'company': existing_company},
fields = ["name", "account_name", "parent_account", "account_type",
"is_group", "root_type", "tax_rate", "account_number"],
order_by="lft, rgt")
account_tree = {}
@@ -209,7 +166,6 @@ def get_account_tree_from_existing_company(existing_company):
build_account_tree(account_tree, None, all_accounts)
return account_tree
def build_account_tree(tree, parent, all_accounts):
# find children
parent_account = parent.name if parent else ""
@@ -232,43 +188,33 @@ def build_account_tree(tree, parent, all_accounts):
tree[child.account_name]["account_type"] = child.account_type
if child.tax_rate:
tree[child.account_name]["tax_rate"] = child.tax_rate
if child.account_currency:
tree[child.account_name]["account_currency"] = child.account_currency
if not parent:
tree[child.account_name]["root_type"] = child.root_type
# call recursively to build a subtree for current account
build_account_tree(tree[child.account_name], child, all_accounts)
@frappe.whitelist()
def validate_bank_account(coa, bank_account):
accounts = []
chart = get_chart(coa)
if chart:
def _get_account_names(account_master):
for account_name, child in account_master.items():
if account_name not in [
"account_number",
"account_type",
"root_type",
"is_group",
"tax_rate",
]:
for account_name, child in iteritems(account_master):
if account_name not in ["account_number", "account_type",
"root_type", "is_group", "tax_rate"]:
accounts.append(account_name)
_get_account_names(child)
_get_account_names(chart)
return bank_account in accounts
return (bank_account in accounts)
@frappe.whitelist()
def build_tree_from_json(chart_template, chart_data=None, from_coa_importer=False):
"""get chart template from its folder and parse the json to be rendered as tree"""
''' get chart template from its folder and parse the json to be rendered as tree '''
chart = chart_data or get_chart(chart_template)
# if no template selected, return as it is
@@ -276,34 +222,22 @@ def build_tree_from_json(chart_template, chart_data=None, from_coa_importer=Fals
return
accounts = []
def _import_accounts(children, parent):
"""recursively called to form a parent-child based list of dict from chart template"""
for account_name, child in children.items():
''' recursively called to form a parent-child based list of dict from chart template '''
for account_name, child in iteritems(children):
account = {}
if account_name in [
"account_name",
"account_number",
"account_type",
"root_type",
"is_group",
"tax_rate",
"account_currency",
]:
continue
if account_name in ["account_name", "account_number", "account_type",\
"root_type", "is_group", "tax_rate"]: continue
if from_coa_importer:
account_name = child["account_name"]
account_name = child['account_name']
account["parent_account"] = parent
account["expandable"] = True if identify_is_group(child) else False
account["value"] = (
(cstr(child.get("account_number")).strip() + " - " + account_name)
if child.get("account_number")
else account_name
)
account['parent_account'] = parent
account['expandable'] = True if identify_is_group(child) else False
account['value'] = (cstr(child.get('account_number')).strip() + ' - ' + account_name) \
if child.get('account_number') else account_name
accounts.append(account)
_import_accounts(child, account["value"])
_import_accounts(child, account['value'])
_import_accounts(chart, None)
return accounts

View File

@@ -0,0 +1,271 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
"""
Import chart of accounts from OpenERP sources
"""
from __future__ import print_function, unicode_literals
import ast
import json
import os
from xml.etree import ElementTree as ET
import frappe
from frappe.utils.csvutils import read_csv_content
from six import iteritems
path = "/Users/nabinhait/projects/odoo/addons"
accounts = {}
charts = {}
all_account_types = []
all_roots = {}
def go():
global accounts, charts
default_account_types = get_default_account_types()
country_dirs = []
for basepath, folders, files in os.walk(path):
basename = os.path.basename(basepath)
if basename.startswith("l10n_"):
country_dirs.append(basename)
for country_dir in country_dirs:
accounts, charts = {}, {}
country_path = os.path.join(path, country_dir)
manifest = ast.literal_eval(open(os.path.join(country_path, "__openerp__.py")).read())
data_files = manifest.get("data", []) + manifest.get("init_xml", []) + \
manifest.get("update_xml", [])
files_path = [os.path.join(country_path, d) for d in data_files]
xml_roots = get_xml_roots(files_path)
csv_content = get_csv_contents(files_path)
prefix = country_dir if csv_content else None
account_types = get_account_types(xml_roots.get("account.account.type", []),
csv_content.get("account.account.type", []), prefix)
account_types.update(default_account_types)
if xml_roots:
make_maps_for_xml(xml_roots, account_types, country_dir)
if csv_content:
make_maps_for_csv(csv_content, account_types, country_dir)
make_account_trees()
make_charts()
create_all_roots_file()
def get_default_account_types():
default_types_root = []
default_types_root.append(ET.parse(os.path.join(path, "account", "data",
"data_account_type.xml")).getroot())
return get_account_types(default_types_root, None, prefix="account")
def get_xml_roots(files_path):
xml_roots = frappe._dict()
for filepath in files_path:
fname = os.path.basename(filepath)
if fname.endswith(".xml"):
tree = ET.parse(filepath)
root = tree.getroot()
for node in root[0].findall("record"):
if node.get("model") in ["account.account.template",
"account.chart.template", "account.account.type"]:
xml_roots.setdefault(node.get("model"), []).append(root)
break
return xml_roots
def get_csv_contents(files_path):
csv_content = {}
for filepath in files_path:
fname = os.path.basename(filepath)
for file_type in ["account.account.template", "account.account.type",
"account.chart.template"]:
if fname.startswith(file_type) and fname.endswith(".csv"):
with open(filepath, "r") as csvfile:
try:
csv_content.setdefault(file_type, [])\
.append(read_csv_content(csvfile.read()))
except Exception as e:
continue
return csv_content
def get_account_types(root_list, csv_content, prefix=None):
types = {}
account_type_map = {
'cash': 'Cash',
'bank': 'Bank',
'tr_cash': 'Cash',
'tr_bank': 'Bank',
'receivable': 'Receivable',
'tr_receivable': 'Receivable',
'account rec': 'Receivable',
'payable': 'Payable',
'tr_payable': 'Payable',
'equity': 'Equity',
'stocks': 'Stock',
'stock': 'Stock',
'tax': 'Tax',
'tr_tax': 'Tax',
'tax-out': 'Tax',
'tax-in': 'Tax',
'charges_personnel': 'Chargeable',
'fixed asset': 'Fixed Asset',
'cogs': 'Cost of Goods Sold',
}
for root in root_list:
for node in root[0].findall("record"):
if node.get("model")=="account.account.type":
data = {}
for field in node.findall("field"):
if field.get("name")=="code" and field.text.lower() != "none" \
and account_type_map.get(field.text):
data["account_type"] = account_type_map[field.text]
node_id = prefix + "." + node.get("id") if prefix else node.get("id")
types[node_id] = data
if csv_content and csv_content[0][0]=="id":
for row in csv_content[1:]:
row_dict = dict(zip(csv_content[0], row))
data = {}
if row_dict.get("code") and account_type_map.get(row_dict["code"]):
data["account_type"] = account_type_map[row_dict["code"]]
if data and data.get("id"):
node_id = prefix + "." + data.get("id") if prefix else data.get("id")
types[node_id] = data
return types
def make_maps_for_xml(xml_roots, account_types, country_dir):
"""make maps for `charts` and `accounts`"""
for model, root_list in iteritems(xml_roots):
for root in root_list:
for node in root[0].findall("record"):
if node.get("model")=="account.account.template":
data = {}
for field in node.findall("field"):
if field.get("name")=="name":
data["name"] = field.text
if field.get("name")=="parent_id":
parent_id = field.get("ref") or field.get("eval")
data["parent_id"] = parent_id
if field.get("name")=="user_type":
value = field.get("ref")
if account_types.get(value, {}).get("account_type"):
data["account_type"] = account_types[value]["account_type"]
if data["account_type"] not in all_account_types:
all_account_types.append(data["account_type"])
data["children"] = []
accounts[node.get("id")] = data
if node.get("model")=="account.chart.template":
data = {}
for field in node.findall("field"):
if field.get("name")=="name":
data["name"] = field.text
if field.get("name")=="account_root_id":
data["account_root_id"] = field.get("ref")
data["id"] = country_dir
charts.setdefault(node.get("id"), {}).update(data)
def make_maps_for_csv(csv_content, account_types, country_dir):
for content in csv_content.get("account.account.template", []):
for row in content[1:]:
data = dict(zip(content[0], row))
account = {
"name": data.get("name"),
"parent_id": data.get("parent_id:id") or data.get("parent_id/id"),
"children": []
}
user_type = data.get("user_type/id") or data.get("user_type:id")
if account_types.get(user_type, {}).get("account_type"):
account["account_type"] = account_types[user_type]["account_type"]
if account["account_type"] not in all_account_types:
all_account_types.append(account["account_type"])
accounts[data.get("id")] = account
if not account.get("parent_id") and data.get("chart_template_id:id"):
chart_id = data.get("chart_template_id:id")
charts.setdefault(chart_id, {}).update({"account_root_id": data.get("id")})
for content in csv_content.get("account.chart.template", []):
for row in content[1:]:
if row:
data = dict(zip(content[0], row))
charts.setdefault(data.get("id"), {}).update({
"account_root_id": data.get("account_root_id:id") or \
data.get("account_root_id/id"),
"name": data.get("name"),
"id": country_dir
})
def make_account_trees():
"""build tree hierarchy"""
for id in accounts.keys():
account = accounts[id]
if account.get("parent_id"):
if accounts.get(account["parent_id"]):
# accounts[account["parent_id"]]["children"].append(account)
accounts[account["parent_id"]][account["name"]] = account
del account["parent_id"]
del account["name"]
# remove empty children
for id in accounts.keys():
if "children" in accounts[id] and not accounts[id].get("children"):
del accounts[id]["children"]
def make_charts():
"""write chart files in app/setup/doctype/company/charts"""
for chart_id in charts:
src = charts[chart_id]
if not src.get("name") or not src.get("account_root_id"):
continue
if not src["account_root_id"] in accounts:
continue
filename = src["id"][5:] + "_" + chart_id
print("building " + filename)
chart = {}
chart["name"] = src["name"]
chart["country_code"] = src["id"][5:]
chart["tree"] = accounts[src["account_root_id"]]
for key, val in chart["tree"].items():
if key in ["name", "parent_id"]:
chart["tree"].pop(key)
if type(val) == dict:
val["root_type"] = ""
if chart:
fpath = os.path.join("erpnext", "erpnext", "accounts", "doctype", "account",
"chart_of_accounts", filename + ".json")
with open(fpath, "r") as chartfile:
old_content = chartfile.read()
if not old_content or (json.loads(old_content).get("is_active", "No") == "No" \
and json.loads(old_content).get("disabled", "No") == "No"):
with open(fpath, "w") as chartfile:
chartfile.write(json.dumps(chart, indent=4, sort_keys=True))
all_roots.setdefault(filename, chart["tree"].keys())
def create_all_roots_file():
with open('all_roots.txt', 'w') as f:
for filename, roots in sorted(all_roots.items()):
f.write(filename)
f.write('\n----------------------\n')
for r in sorted(roots):
f.write(r.encode('utf-8'))
f.write('\n')
f.write('\n\n\n')
if __name__=="__main__":
go()

View File

@@ -2,437 +2,397 @@
"country_code": "at",
"name": "Austria - Chart of Accounts",
"tree": {
"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"
"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"
},
"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"},
"1800 Geleistete Anzahlungen": {"account_type": "Stock"},
"1900 Wertberichtigungen": {"account_type": "Stock"},
"root_type": "Asset"
"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"
},
"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": {
"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": {
"account_type": "Payable"
},
"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)": {
"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)": {
"account_type": "Tax"
},
"3500 Verbindlichkeiten aus Umsatzsteuer": {"account_type": "Tax"},
"3580 Umsatzsteuer Zahllast": {
"Umsatzsteuer": {},
"Umsatzsteuer Zahllast": {
"account_type": "Tax"
},
"3510 Umsatzsteuer Inland 20%": {
"Umsatzsteuer aus i.g. Erwerb 10%": {
"account_type": "Tax"
},
"3515 Umsatzsteuer Inland 10%": {
"Umsatzsteuer aus i.g. Erwerb 20%": {
"account_type": "Tax"
},
"3520 Umsatzsteuer aus i.g. Erwerb 20%": {
"Umsatzsteuer aus i.g. Lieferungen 10%": {
"account_type": "Tax"
},
"3525 Umsatzsteuer aus i.g. Erwerb 10%": {
"Umsatzsteuer aus i.g. Lieferungen 20%": {
"account_type": "Tax"
},
"3560 Umsatzsteuer-Evidenzkonto f\u00fcr erhaltene Anzahlungen auf Bestellungen": {},
"3360 Verbindlichkeiten aus Lieferungen u. Leistungen EU": {
"Umsatzsteuer-Evidenzkonto f\u00fcr erhaltene Anzahlungen auf Bestellungen": {},
"Verbindlichkeiten aus Lieferungen u. Leistungen EU": {
"account_type": "Payable"
},
"3000 Verbindlichkeiten aus Lieferungen u. Leistungen Inland": {
"Verbindlichkeiten aus Lieferungen u. Leistungen Inland": {
"account_type": "Payable"
},
"3370 Verbindlichkeiten aus Lieferungen u. Leistungen sonst. Ausland": {
"Verbindlichkeiten aus Lieferungen u. Leistungen sonst. Ausland": {
"account_type": "Payable"
},
"3400 Verbindlichkeiten gegen\u00fcber verbundenen Unternehmen": {},
"3570 Verrechnung Finanzamt": {
"Verbindlichkeiten gegen\u00fcber Gesellschaften": {},
"Verrechnung Finanzamt": {
"account_type": "Tax"
},
"root_type": "Liability"
},
"Klasse 2 Aktiva: Umlaufverm\u00f6gen, Rechnungsabgrenzungen": {
"2030 Forderungen aus Lieferungen und Leistungen Inland (0% USt, umsatzsteuerfrei)": {
"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": {},
"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": {},
"root_type": "Expense"
},
"Summe Umlaufverm\u00f6gen": {
"2000 bis 2007 Forderungen aus Lief. und Leist. Inland": {
"account_type": "Receivable"
},
"2010 Forderungen aus Lieferungen und Leistungen Inland (10% USt, umsatzsteuerfrei)": {
"2100 bis 2120 Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"2000 Forderungen aus Lieferungen und Leistungen Inland (20% USt, umsatzsteuerfrei)": {
"2150 bis 2170 Forderungen aus Lief. und Leist. Ausland": {
"account_type": "Receivable"
},
"2040 Forderungen aus Lieferungen und Leistungen Inland (sonstiger USt-Satz)": {
"2200 bis 2220 Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2100 Forderungen aus Lieferungen und Leistungen EU": {
"2250 bis 2270 Forderungen gegen\u00fcber Unternehmen, mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"2150 Forderungen aus Lieferungen und Leistungen Ausland (Nicht-EU)": {
"2300 bis 2460 Sonstige Forderungen und Verm\u00f6gensgegenst\u00e4nde": {
"account_type": "Receivable"
},
"2200 Forderungen gegen\u00fcber verbundenen Unternehmen": {
"2630 bis 2670 Sonstige Wertpapiere": {
"account_type": "Receivable"
},
"2250 Forderungen gegen\u00fcber Unternehmen, mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"2750 bis 2770 Kassenbest\u00e4nde in Fremdw\u00e4hrung": {
"account_type": "Receivable"
},
"2300 Sonstige Forderungen und Verm\u00f6gensgegenst\u00e4nde": {
"Aktive Rechnungsabrenzungsposten": {
"account_type": "Receivable"
},
"2630 Sonstige Wertpapiere": {
"account_type": "Stock"
},
"2750 Kassenbest\u00e4nde in Fremdw\u00e4hrung": {
"account_type": "Cash"
},
"2900 Aktive Rechnungsabrenzungsposten": {
"Anteile an verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2600 Anteile an verbundenen Unternehmen": {
"account_type": "Equity"
},
"2680 Besitzwechsel ohne Forderungen": {
"Bank / Guthaben bei Kreditinstituten": {
"account_type": "Receivable"
},
"2950 Aktiviertes Disagio": {
"Besitzwechsel ...": {
"account_type": "Receivable"
},
"2610 Eigene Anteile und Wertpapiere an mit Mehrheit beteiligten Unternehmen": {
"Disagio": {
"account_type": "Receivable"
},
"2570 Einfuhrumsatzsteuer (bezahlt)": {"account_type": "Tax"},
"2460 Eingeforderte aber noch nicht eingezahlte Einlagen": {
"Eigene Anteile (Wertpapiere)": {
"account_type": "Receivable"
},
"2180 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Ausland": {
"Einfuhrumsatzsteuer (bezahlt)": {},
"Eingeforderte aber noch nicht eingezahlte Einlagen": {
"account_type": "Receivable"
},
"2130 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Ausland": {
"account_type": "Receivable"
},
"2080 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"2270 Einzelwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"account_type": "Receivable"
},
"2230 Einzelwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"Einzelwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"account_type": "Receivable"
},
"2470 Einzelwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"Einzelwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2700 Kassenbestand": {
"account_type": "Cash"
},
"2190 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. sonstiges Ausland": {
"Einzelwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"account_type": "Receivable"
},
"2130 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"Kassenbestand": {
"account_type": "Receivable"
},
"2100 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. Ausland": {
"account_type": "Receivable"
},
"2280 Pauschalwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
"account_type": "Receivable"
},
"2240 Pauschalwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
"account_type": "Receivable"
},
"2480 Pauschalwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"Pauschalwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
"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": {
"Pauschalwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
"account_type": "Receivable"
},
"2980 Abgrenzung latenter Steuern": {
"Pauschalwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
"account_type": "Receivable"
},
"2500 Vorsteuer": {
"Postwertzeichen": {
"account_type": "Receivable"
},
"2510 Vorsteuer Inland 10%": {
"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"
},
"2895 Schwebende Geldbewegugen": {
"account_type": "Bank"
},
"2513 Vorsteuer Inland 5%": {
"Vorsteuer aus ig. Erwerb 20%": {
"account_type": "Tax"
},
"2515 Vorsteuer Inland 20%": {
"Vorsteuer \u00a719/Art 19 ( reverse charge ) ": {
"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": {
"Wertberichtigungen": {
"account_type": "Receivable"
},
"root_type": "Asset"
},
"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"
"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"
},
"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"},
"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": {},
"root_type": "Expense"
},
"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

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

View File

@@ -437,20 +437,12 @@
},
"Sales": {
"Sales from Other Regions": {
"Sales from Other Region": {
"account_type": "Income Account"
}
"Sales from Other Region": {}
},
"Sales of same region": {
"Management Consultancy Fees 1": {
"account_type": "Income Account"
},
"Sales Account": {
"account_type": "Income Account"
},
"Sales of I/C": {
"account_type": "Income Account"
}
"Management Consultancy Fees 1": {},
"Sales Account": {},
"Sales of I/C": {}
}
},
"root_type": "Income"

View File

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

View File

@@ -33,9 +33,7 @@
},
"Stocks": {
"Mati\u00e8res premi\u00e8res": {},
"Stock de produits fini": {
"account_type": "Stock"
},
"Stock de produits fini": {},
"Stock exp\u00e9di\u00e9 non-factur\u00e9": {},
"Travaux en cours": {},
"account_type": "Stock"
@@ -397,11 +395,9 @@
},
"Produits": {
"Revenus de ventes": {
"Escomptes de volume sur ventes": {},
" Escomptes de volume sur ventes": {},
"Autres produits d'exploitation": {},
"Ventes": {
"account_type": "Income Account"
},
"Ventes": {},
"Ventes avec des provinces harmonis\u00e9es": {},
"Ventes avec des provinces non-harmonis\u00e9es": {},
"Ventes \u00e0 l'\u00e9tranger": {}

View File

@@ -1,569 +0,0 @@
{
"country_code": "de",
"name": "SKR03 mit Kontonummern",
"tree": {
"Aktiva": {
"is_group": 1,
"root_type": "Asset",
"A - Anlagevermögen": {
"is_group": 1,
"EDV-Software": {
"account_number": "0027",
"account_type": "Fixed Asset"
},
"Geschäftsausstattung": {
"account_number": "0410",
"account_type": "Fixed Asset"
},
"Büroeinrichtung": {
"account_number": "0420",
"account_type": "Fixed Asset"
},
"Darlehen": {
"account_number": "0565"
},
"Maschinen": {
"account_number": "0210",
"account_type": "Fixed Asset"
},
"Betriebsausstattung": {
"account_number": "0400",
"account_type": "Fixed Asset"
},
"Ladeneinrichtung": {
"account_number": "0430",
"account_type": "Fixed Asset"
},
"Accumulated Depreciation": {
"account_type": "Accumulated Depreciation"
}
},
"B - Umlaufvermögen": {
"is_group": 1,
"I. Vorräte": {
"is_group": 1,
"Roh-, Hilfs- und Betriebsstoffe (Bestand)": {
"account_number": "3970",
"account_type": "Stock"
},
"Waren (Bestand)": {
"account_number": "3980",
"account_type": "Stock"
}
},
"II. Forderungen und sonstige Vermögensgegenstände": {
"is_group": 1,
"Forderungen aus Lieferungen und Leistungen mit Kontokorrent": {
"account_number": "1400",
"account_type": "Receivable",
"is_group": 1
},
"Forderungen aus Lieferungen und Leistungen ohne Kontokorrent": {
"account_number": "1410",
"account_type": "Receivable"
},
"Durchlaufende Posten": {
"account_number": "1590"
},
"Verrechnungskonto Gewinnermittlung § 4 Abs. 3 EStG, nicht ergebniswirksam": {
"account_number": "1371"
},
"Abziehbare Vorsteuer": {
"is_group": 1,
"Abziehbare Vorsteuer 7 %": {
"account_number": "1571",
"account_type": "Tax",
"tax_rate": 7.0
},
"Abziehbare Vorsteuer 19 %": {
"account_number": "1576",
"account_type": "Tax",
"tax_rate": 19.0
},
"Abziehbare Vorsteuer nach § 13b UStG 19 %": {
"account_number": "1577",
"account_type": "Tax",
"tax_rate": 19.0
}
}
},
"III. Wertpapiere": {
"is_group": 1,
"Anteile an verbundenen Unternehmen (Umlaufvermögen)": {
"account_number": "1340"
},
"Anteile an herrschender oder mit Mehrheit beteiligter Gesellschaft": {
"account_number": "1344"
},
"Sonstige Wertpapiere": {
"account_number": "1348"
}
},
"IV. Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks.": {
"is_group": 1,
"Kasse": {
"is_group": 1,
"account_type": "Cash",
"Kasse": {
"account_number": "1000",
"account_type": "Cash"
}
},
"Bank": {
"is_group": 1,
"account_type": "Bank",
"Postbank": {
"account_number": "1100",
"account_type": "Bank"
},
"Bankkonto": {
"account_number": "1200",
"account_type": "Bank"
}
}
}
},
"C - Rechnungsabgrenzungsposten": {
"is_group": 1,
"Aktive Rechnungsabgrenzung": {
"account_number": "0980"
}
},
"D - Aktive latente Steuern": {
"is_group": 1,
"Aktive latente Steuern": {
"account_number": "0983"
}
},
"E - Aktiver Unterschiedsbetrag aus der Vermögensverrechnung": {
"is_group": 1
}
},
"Passiva": {
"is_group": 1,
"root_type": "Liability",
"A. Eigenkapital": {
"is_group": 1,
"I. Gezeichnetes Kapital": {
"is_group": 1
},
"II. Kapitalrücklage": {
"is_group": 1
},
"III. Gewinnrücklagen": {
"is_group": 1
},
"IV. Gewinnvortrag/Verlustvortrag": {
"is_group": 1
},
"V. Jahresüberschuß/Jahresfehlbetrag": {
"is_group": 1
}
},
"B. Rückstellungen": {
"is_group": 1,
"I. Rückstellungen für Pensionen und ähnliche Verpflichtungen": {
"is_group": 1
},
"II. Steuerrückstellungen": {
"is_group": 1
},
"III. sonstige Rückstellungen": {
"is_group": 1
}
},
"C. Verbindlichkeiten": {
"is_group": 1,
"I. Anleihen": {
"is_group": 1
},
"II. Verbindlichkeiten gegenüber Kreditinstituten": {
"is_group": 1
},
"III. Erhaltene Anzahlungen auf Bestellungen": {
"is_group": 1
},
"IV. Verbindlichkeiten aus Lieferungen und Leistungen": {
"is_group": 1,
"Verbindlichkeiten aus Lieferungen und Leistungen mit Kontokorrent": {
"account_number": "1600",
"account_type": "Payable",
"is_group": 1
},
"Verbindlichkeiten aus Lieferungen und Leistungen ohne Kontokorrent": {
"account_number": "1610",
"account_type": "Payable"
}
},
"V. Verbindlichkeiten aus der Annahme gezogener Wechsel und der Ausstellung eigener Wechsel": {
"is_group": 1
},
"VI. Verbindlichkeiten gegenüber verbundenen Unternehmen": {
"is_group": 1
},
"VII. Verbindlichkeiten gegenüber Unternehmen, mit denen ein Beteiligungsverhältnis besteht": {
"is_group": 1
},
"VIII. sonstige Verbindlichkeiten": {
"is_group": 1,
"Sonstige Verbindlichkeiten": {
"account_number": "1700",
"account_type": "Asset Received But Not Billed"
},
"Sonstige Verbindlichkeiten (1 bis 5 Jahre)": {
"account_number": "1702",
"account_type": "Stock Received But Not Billed"
},
"Verbindlichkeiten aus Lohn und Gehalt": {
"account_number": "1740",
"account_type": "Payable"
},
"Umsatzsteuer": {
"is_group": 1,
"Umsatzsteuer 7 %": {
"account_number": "1771",
"account_type": "Tax",
"tax_rate": 7.0
},
"Umsatzsteuer 19 %": {
"account_number": "1776",
"account_type": "Tax",
"tax_rate": 19.0
},
"Umsatzsteuer-Vorauszahlung": {
"account_number": "1780",
"account_type": "Tax"
},
"Umsatzsteuer-Vorauszahlung 1/11": {
"account_number": "1781"
},
"Umsatzsteuer nach § 13b UStG 19 %": {
"account_number": "1787",
"account_type": "Tax",
"tax_rate": 19.0
},
"Umsatzsteuer Vorjahr": {
"account_number": "1790"
},
"Umsatzsteuer frühere Jahre": {
"account_number": "1791"
}
}
}
},
"D. Rechnungsabgrenzungsposten": {
"is_group": 1,
"Passive Rechnungsabgrenzung": {
"account_number": "0990"
}
},
"E. Passive latente Steuern": {
"is_group": 1
}
},
"Erlöse u. Erträge 2/8": {
"is_group": 1,
"root_type": "Income",
"Erlöskonten 8": {
"is_group": 1,
"Erlöse": {
"account_number": "8200",
"account_type": "Income Account"
},
"Erlöse USt. 19 %": {
"account_number": "8400",
"account_type": "Income Account"
},
"Erlöse USt. 7 %": {
"account_number": "8300",
"account_type": "Income Account"
}
},
"Ertragskonten 2": {
"is_group": 1,
"sonstige Zinsen und ähnliche Erträge": {
"account_number": "2650",
"account_type": "Income Account"
},
"Außerordentliche Erträge": {
"account_number": "2500",
"account_type": "Income Account"
},
"Sonstige Erträge": {
"account_number": "2700",
"account_type": "Income Account"
}
}
},
"Aufwendungen 2/4": {
"is_group": 1,
"root_type": "Expense",
"Fremdleistungen": {
"account_number": "3100",
"account_type": "Expense Account"
},
"Fremdleistungen ohne Vorsteuer": {
"account_number": "3109",
"account_type": "Expense Account"
},
"Bauleistungen eines im Inland ansässigen Unternehmers 19 % Vorsteuer und 19 % Umsatzsteuer": {
"account_number": "3120",
"account_type": "Expense Account"
},
"Wareneingang": {
"account_number": "3200"
},
"Bezugsnebenkosten": {
"account_number": "3800",
"account_type": "Expenses Included In Asset Valuation"
},
"Herstellungskosten": {
"account_number": "4996",
"account_type": "Cost of Goods Sold"
},
"Verluste aus dem Abgang von Gegenständen des Anlagevermögens": {
"account_number": "2320",
"account_type": "Stock Adjustment"
},
"Verwaltungskosten": {
"account_number": "4997",
"account_type": "Expenses Included In Valuation"
},
"Vertriebskosten": {
"account_number": "4998",
"account_type": "Expenses Included In Valuation"
},
"Gegenkonto 4996-4998": {
"account_number": "4999"
},
"Abschreibungen": {
"is_group": 1,
"Abschreibungen auf Sachanlagen (ohne AfA auf Kfz und Gebäude)": {
"account_number": "4830",
"account_type": "Accumulated Depreciation"
},
"Abschreibungen auf Gebäude": {
"account_number": "4831",
"account_type": "Depreciation"
},
"Abschreibungen auf Kfz": {
"account_number": "4832",
"account_type": "Depreciation"
},
"Sofortabschreibung GWG": {
"account_number": "4855",
"account_type": "Expense Account"
}
},
"Kfz-Kosten": {
"is_group": 1,
"Kfz-Steuer": {
"account_number": "4510",
"account_type": "Expense Account"
},
"Kfz-Versicherungen": {
"account_number": "4520",
"account_type": "Expense Account"
},
"laufende Kfz-Betriebskosten": {
"account_number": "4530",
"account_type": "Expense Account"
},
"Kfz-Reparaturen": {
"account_number": "4540",
"account_type": "Expense Account"
},
"Fremdfahrzeuge": {
"account_number": "4570",
"account_type": "Expense Account"
},
"sonstige Kfz-Kosten": {
"account_number": "4580",
"account_type": "Expense Account"
}
},
"Personalkosten": {
"is_group": 1,
"Gehälter": {
"account_number": "4120",
"account_type": "Expense Account"
},
"gesetzliche soziale Aufwendungen": {
"account_number": "4130",
"account_type": "Expense Account"
},
"Aufwendungen für Altersvorsorge": {
"account_number": "4165",
"account_type": "Expense Account"
},
"Vermögenswirksame Leistungen": {
"account_number": "4170",
"account_type": "Expense Account"
},
"Aushilfslöhne": {
"account_number": "4190",
"account_type": "Expense Account"
}
},
"Raumkosten": {
"is_group": 1,
"Miete und Nebenkosten": {
"account_number": "4210",
"account_type": "Expense Account"
},
"Gas, Wasser, Strom (Verwaltung, Vertrieb)": {
"account_number": "4240",
"account_type": "Expense Account"
},
"Reinigung": {
"account_number": "4250",
"account_type": "Expense Account"
}
},
"Reparatur/Instandhaltung": {
"is_group": 1,
"Reparaturen und Instandhaltungen von anderen Anlagen und Betriebs- und Geschäftsausstattung": {
"account_number": "4805",
"account_type": "Expense Account"
}
},
"Versicherungsbeiträge": {
"is_group": 1,
"Versicherungen": {
"account_number": "4360",
"account_type": "Expense Account"
},
"Beiträge": {
"account_number": "4380",
"account_type": "Expense Account"
},
"sonstige Ausgaben": {
"account_number": "4390",
"account_type": "Expense Account"
},
"steuerlich abzugsfähige Verspätungszuschläge und Zwangsgelder": {
"account_number": "4396",
"account_type": "Expense Account"
}
},
"Werbe-/Reisekosten": {
"is_group": 1,
"Werbekosten": {
"account_number": "4610",
"account_type": "Expense Account"
},
"Aufmerksamkeiten": {
"account_number": "4653",
"account_type": "Expense Account"
},
"nicht abzugsfähige Betriebsausg. aus Werbe-, Repräs.- u. Reisekosten": {
"account_number": "4665",
"account_type": "Expense Account"
},
"Reisekosten Unternehmer": {
"account_number": "4670",
"account_type": "Expense Account"
}
},
"verschiedene Kosten": {
"is_group": 1,
"Porto": {
"account_number": "4910",
"account_type": "Expense Account"
},
"Telekom": {
"account_number": "4920",
"account_type": "Expense Account"
},
"Mobilfunk D2": {
"account_number": "4921",
"account_type": "Expense Account"
},
"Internet": {
"account_number": "4922",
"account_type": "Expense Account"
},
"Bürobedarf": {
"account_number": "4930",
"account_type": "Expense Account"
},
"Zeitschriften, Bücher": {
"account_number": "4940",
"account_type": "Expense Account"
},
"Fortbildungskosten": {
"account_number": "4945",
"account_type": "Expense Account"
},
"Buchführungskosten": {
"account_number": "4955",
"account_type": "Expense Account"
},
"Abschluß- u. Prüfungskosten": {
"account_number": "4957",
"account_type": "Expense Account"
},
"Nebenkosten des Geldverkehrs": {
"account_number": "4970",
"account_type": "Expense Account"
},
"Werkzeuge und Kleingeräte": {
"account_number": "4985",
"account_type": "Expense Account"
}
},
"Zinsaufwendungen": {
"is_group": 1,
"Zinsaufwendungen für kurzfristige Verbindlichkeiten": {
"account_number": "2110",
"account_type": "Expense Account"
},
"Zinsaufwendungen für KFZ Finanzierung": {
"account_number": "2121",
"account_type": "Expense Account"
}
}
},
"Anfangsbestand 9": {
"is_group": 1,
"root_type": "Equity",
"Saldenvortragskonten": {
"is_group": 1,
"Saldenvortrag Sachkonten": {
"account_number": "9000"
},
"Saldenvorträge Debitoren": {
"account_number": "9008"
},
"Saldenvorträge Kreditoren": {
"account_number": "9009"
}
}
},
"Privatkonten 1": {
"is_group": 1,
"root_type": "Equity",
"Privatentnahmen/-einlagen": {
"is_group": 1,
"Privatentnahme allgemein": {
"account_number": "1800"
},
"Privatsteuern": {
"account_number": "1810"
},
"Sonderausgaben beschränkt abzugsfähig": {
"account_number": "1820"
},
"Sonderausgaben unbeschränkt abzugsfähig": {
"account_number": "1830"
},
"Außergewöhnliche Belastungen": {
"account_number": "1850"
},
"Privateinlagen": {
"account_number": "1890"
}
}
}
}
}

View File

@@ -0,0 +1,531 @@
{
"country_code": "de",
"name": "SKR03 mit Kontonummern",
"tree": {
"Aktiva": {
"is_group": 1,
"root_type": "Asset",
"A - Anlagevermögen": {
"is_group": 1,
"EDV-Software": {
"account_number": "0027",
"account_type": "Fixed Asset"
},
"Gesch\u00e4ftsausstattung": {
"account_number": "0410",
"account_type": "Fixed Asset"
},
"B\u00fcroeinrichtung": {
"account_number": "0420",
"account_type": "Fixed Asset"
},
"Darlehen": {
"account_number": "0565"
},
"Maschinen": {
"account_number": "0210",
"account_type": "Fixed Asset"
},
"Betriebsausstattung": {
"account_number": "0400",
"account_type": "Fixed Asset"
},
"Ladeneinrichtung": {
"account_number": "0430",
"account_type": "Fixed Asset"
},
"Accumulated Depreciation": {
"account_type": "Accumulated Depreciation"
}
},
"B - Umlaufvermögen": {
"is_group": 1,
"I. Vorräte": {
"is_group": 1,
"Roh-, Hilfs- und Betriebsstoffe (Bestand)": {
"account_number": "3970",
"account_type": "Stock"
},
"Waren (Bestand)": {
"account_number": "3980",
"account_type": "Stock"
}
},
"II. Forderungen und sonstige Vermögensgegenstände": {
"is_group": 1,
"Ford. a. Lieferungen und Leistungen": {
"account_number": "1400",
"account_type": "Receivable"
},
"Durchlaufende Posten": {
"account_number": "1590"
},
"Gewinnermittlung \u00a74/3 nicht Ergebniswirksam": {
"account_number": "1371"
},
"Abziehbare Vorsteuer": {
"account_type": "Tax",
"is_group": 1,
"Abziehbare Vorsteuer 7%": {
"account_number": "1571"
},
"Abziehbare Vorsteuer 19%": {
"account_number": "1576"
},
"Abziehbare Vorsteuer nach \u00a713b UStG 19%": {
"account_number": "1577"
},
"Leistungen \u00a713b UStG 19% Vorsteuer, 19% Umsatzsteuer": {
"account_number": "3120"
}
}
},
"III. Wertpapiere": {
"is_group": 1
},
"IV. Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks.": {
"is_group": 1,
"Kasse": {
"account_type": "Cash",
"is_group": 1,
"Kasse": {
"is_group": 1,
"account_number": "1000",
"account_type": "Cash"
}
},
"Bank": {
"is_group": 1,
"account_type": "Bank",
"Postbank": {
"account_number": "1100",
"account_type": "Bank"
},
"Bankkonto": {
"account_number": "1200",
"account_type": "Bank"
}
}
}
},
"C - Rechnungsabgrenzungsposten": {
"is_group": 1,
"Aktive Rechnungsabgrenzung": {
"account_number": "0980"
}
},
"D - Aktive latente Steuern": {
"is_group": 1,
"Aktive latente Steuern": {
"account_number": "0983"
}
},
"E - Aktiver Unterschiedsbetrag aus der Vermögensverrechnung": {
"is_group": 1
}
},
"Passiva": {
"is_group": 1,
"root_type": "Liability",
"A. Eigenkapital": {
"is_group": 1,
"I. Gezeichnetes Kapital": {
"is_group": 1
},
"II. Kapitalrücklage": {
"is_group": 1
},
"III. Gewinnrücklagen": {
"is_group": 1
},
"IV. Gewinnvortrag/Verlustvortrag": {
"is_group": 1
},
"V. Jahresüberschuß/Jahresfehlbetrag": {
"is_group": 1
}
},
"B. Rückstellungen": {
"is_group": 1,
"I. Rückstellungen für Pensionen und ähnliche Verpflichtungen": {
"is_group": 1
},
"II. Steuerrückstellungen": {
"is_group": 1
},
"III. sonstige Rückstellungen": {
"is_group": 1
}
},
"C. Verbindlichkeiten": {
"is_group": 1,
"I. Anleihen": {
"is_group": 1
},
"II. Verbindlichkeiten gegenüber Kreditinstituten": {
"is_group": 1
},
"III. Erhaltene Anzahlungen auf Bestellungen": {
"is_group": 1
},
"IV. Verbindlichkeiten aus Lieferungen und Leistungen": {
"is_group": 1,
"Verbindlichkeiten aus Lieferungen u. Leistungen": {
"account_number": "1600",
"account_type": "Payable"
}
},
"V. Verbindlichkeiten aus der Annahme gezogener Wechsel und der Ausstellung eigener Wechsel": {
"is_group": 1
},
"VI. Verbindlichkeiten gegenüber verbundenen Unternehmen": {
"is_group": 1
},
"VII. Verbindlichkeiten gegenüber Unternehmen, mit denen ein Beteiligungsverhältnis besteht": {
"is_group": 1
},
"VIII. sonstige Verbindlichkeiten": {
"is_group": 1,
"Sonstige Verbindlichkeiten": {
"account_number": "1700",
"account_type": "Asset Received But Not Billed"
},
"Sonstige Verbindlichkeiten (1 bis 5 Jahre)": {
"account_number": "1702",
"account_type": "Stock Received But Not Billed"
},
"Verbindlichkeiten aus Lohn und Gehalt": {
"account_number": "1740",
"account_type": "Payable"
},
"Umsatzsteuer": {
"is_group": 1,
"account_type": "Tax",
"Umsatzsteuer 7%": {
"account_number": "1771"
},
"Umsatzsteuer 19%": {
"account_number": "1776"
},
"Umsatzsteuer-Vorauszahlung": {
"account_number": "1780"
},
"Umsatzsteuer-Vorauszahlung 1/11": {
"account_number": "1781"
},
"Umsatzsteuer \u00a7 13b UStG 19%": {
"account_number": "1787"
},
"Umsatzsteuer Vorjahr": {
"account_number": "1790"
},
"Umsatzsteuer fr\u00fchere Jahre": {
"account_number": "1791"
}
}
}
},
"D. Rechnungsabgrenzungsposten": {
"is_group": 1,
"Passive Rechnungsabgrenzung": {
"account_number": "0990"
}
},
"E. Passive latente Steuern": {
"is_group": 1
}
},
"Erl\u00f6se u. Ertr\u00e4ge 2/8": {
"is_group": 1,
"root_type": "Income",
"Erl\u00f6skonten 8": {
"is_group": 1,
"Erl\u00f6se": {
"account_number": "8200",
"account_type": "Income Account"
},
"Erl\u00f6se USt. 19%": {
"account_number": "8400",
"account_type": "Income Account"
},
"Erl\u00f6se USt. 7%": {
"account_number": "8300",
"account_type": "Income Account"
}
},
"Ertragskonten 2": {
"is_group": 1,
"sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge": {
"account_number": "2650",
"account_type": "Income Account"
},
"Au\u00dferordentliche Ertr\u00e4ge": {
"account_number": "2500",
"account_type": "Income Account"
},
"Sonstige Ertr\u00e4ge": {
"account_number": "2700",
"account_type": "Income Account"
}
}
},
"Aufwendungen 2/4": {
"is_group": 1,
"root_type": "Expense",
"Wareneingang": {
"account_number": "3200"
},
"Bezugsnebenkosten": {
"account_number": "3800",
"account_type": "Expenses Included In Asset Valuation"
},
"Herstellungskosten": {
"account_number": "4996",
"account_type": "Cost of Goods Sold"
},
"Verluste aus dem Abgang von Gegenständen des Anlagevermögens": {
"account_number": "2320",
"account_type": "Stock Adjustment"
},
"Verwaltungskosten": {
"account_number": "4997",
"account_type": "Expenses Included In Valuation"
},
"Vertriebskosten": {
"account_number": "4998",
"account_type": "Expenses Included In Valuation"
},
"Gegenkonto 4996-4998": {
"account_number": "4999"
},
"Abschreibungen": {
"is_group": 1,
"Abschreibungen auf Sachanlagen (ohne AfA auf Kfz und Gebäude)": {
"account_number": "4830",
"account_type": "Accumulated Depreciation"
},
"Abschreibungen auf Gebäude": {
"account_number": "4831",
"account_type": "Depreciation"
},
"Abschreibungen auf Kfz": {
"account_number": "4832",
"account_type": "Depreciation"
},
"Sofortabschreibung GWG": {
"account_number": "4855",
"account_type": "Expense Account"
}
},
"Kfz-Kosten": {
"is_group": 1,
"Kfz-Steuer": {
"account_number": "4510",
"account_type": "Expense Account"
},
"Kfz-Versicherungen": {
"account_number": "4520",
"account_type": "Expense Account"
},
"laufende Kfz-Betriebskosten": {
"account_number": "4530",
"account_type": "Expense Account"
},
"Kfz-Reparaturen": {
"account_number": "4540",
"account_type": "Expense Account"
},
"Fremdfahrzeuge": {
"account_number": "4570",
"account_type": "Expense Account"
},
"sonstige Kfz-Kosten": {
"account_number": "4580",
"account_type": "Expense Account"
}
},
"Personalkosten": {
"is_group": 1,
"Geh\u00e4lter": {
"account_number": "4120",
"account_type": "Expense Account"
},
"gesetzliche soziale Aufwendungen": {
"account_number": "4130",
"account_type": "Expense Account"
},
"Aufwendungen f\u00fcr Altersvorsorge": {
"account_number": "4165",
"account_type": "Expense Account"
},
"Verm\u00f6genswirksame Leistungen": {
"account_number": "4170",
"account_type": "Expense Account"
},
"Aushilfsl\u00f6hne": {
"account_number": "4190",
"account_type": "Expense Account"
}
},
"Raumkosten": {
"is_group": 1,
"Miete und Nebenkosten": {
"account_number": "4210",
"account_type": "Expense Account"
},
"Gas, Wasser, Strom (Verwaltung, Vertrieb)": {
"account_number": "4240",
"account_type": "Expense Account"
},
"Reinigung": {
"account_number": "4250",
"account_type": "Expense Account"
}
},
"Reparatur/Instandhaltung": {
"is_group": 1,
"Reparatur u. Instandh. von Anlagen/Maschinen u. Betriebs- u. Gesch\u00e4ftsausst.": {
"account_number": "4805",
"account_type": "Expense Account"
}
},
"Versicherungsbeitr\u00e4ge": {
"is_group": 1,
"Versicherungen": {
"account_number": "4360",
"account_type": "Expense Account"
},
"Beitr\u00e4ge": {
"account_number": "4380",
"account_type": "Expense Account"
},
"sonstige Ausgaben": {
"account_number": "4390",
"account_type": "Expense Account"
},
"steuerlich abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
"account_number": "4396",
"account_type": "Expense Account"
}
},
"Werbe-/Reisekosten": {
"is_group": 1,
"Werbekosten": {
"account_number": "4610",
"account_type": "Expense Account"
},
"Aufmerksamkeiten": {
"account_number": "4653",
"account_type": "Expense Account"
},
"nicht abzugsf\u00e4hige Betriebsausg. aus Werbe-, Repr\u00e4s.- u. Reisekosten": {
"account_number": "4665",
"account_type": "Expense Account"
},
"Reisekosten Unternehmer": {
"account_number": "4670",
"account_type": "Expense Account"
}
},
"verschiedene Kosten": {
"is_group": 1,
"Porto": {
"account_number": "4910",
"account_type": "Expense Account"
},
"Telekom": {
"account_number": "4920",
"account_type": "Expense Account"
},
"Mobilfunk D2": {
"account_number": "4921",
"account_type": "Expense Account"
},
"Internet": {
"account_number": "4922",
"account_type": "Expense Account"
},
"B\u00fcrobedarf": {
"account_number": "4930",
"account_type": "Expense Account"
},
"Zeitschriften, B\u00fccher": {
"account_number": "4940",
"account_type": "Expense Account"
},
"Fortbildungskosten": {
"account_number": "4945",
"account_type": "Expense Account"
},
"Buchf\u00fchrungskosten": {
"account_number": "4955",
"account_type": "Expense Account"
},
"Abschlu\u00df- u. Pr\u00fcfungskosten": {
"account_number": "4957",
"account_type": "Expense Account"
},
"Nebenkosten des Geldverkehrs": {
"account_number": "4970",
"account_type": "Expense Account"
},
"Werkzeuge und Kleinger\u00e4te": {
"account_number": "4985",
"account_type": "Expense Account"
}
},
"Zinsaufwendungen": {
"is_group": 1,
"Zinsaufwendungen f\u00fcr kurzfristige Verbindlichkeiten": {
"account_number": "2110",
"account_type": "Expense Account"
},
"Zinsaufwendungen f\u00fcr KFZ Finanzierung": {
"account_number": "2121",
"account_type": "Expense Account"
}
}
},
"Anfangsbestand 9": {
"is_group": 1,
"root_type": "Equity",
"Saldenvortragskonten": {
"is_group": 1,
"Saldenvortrag Sachkonten": {
"account_number": "9000"
},
"Saldenvortr\u00e4ge Debitoren": {
"account_number": "9008"
},
"Saldenvortr\u00e4ge Kreditoren": {
"account_number": "9009"
}
}
},
"Privatkonten 1": {
"is_group": 1,
"root_type": "Equity",
"Privatentnahmen/-einlagen": {
"is_group": 1,
"Privatentnahme allgemein": {
"account_number": "1800"
},
"Privatsteuern": {
"account_number": "1810"
},
"Sonderausgaben beschr\u00e4nkt abzugsf\u00e4hig": {
"account_number": "1820"
},
"Sonderausgaben unbeschr\u00e4nkt abzugsf\u00e4hig": {
"account_number": "1830"
},
"Au\u00dfergew\u00f6hnliche Belastungen": {
"account_number": "1850"
},
"Privateinlagen": {
"account_number": "1890"
}
}
}
}
}

View File

@@ -69,7 +69,8 @@
"Persediaan Barang": {
"Persediaan Barang": {
"account_number": "1141.000",
"account_type": "Stock"
"account_type": "Stock",
"is_group": 1
},
"Uang Muka Pembelian": {
"Uang Muka Pembelian": {
@@ -669,8 +670,7 @@
},
"Penjualan Barang Dagangan": {
"Penjualan": {
"account_number": "4110.000",
"account_type": "Income Account"
"account_number": "4110.000"
},
"Potongan Penjualan": {
"account_number": "4130.000"

View File

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

View File

@@ -109,7 +109,8 @@
}
},
"INVENTARIOS": {
"account_type": "Stock"
"account_type": "Stock",
"is_group": 1
}
},
"ACTIVO LARGO PLAZO": {
@@ -397,18 +398,10 @@
"INGRESOS POR SERVICIOS 1": {}
},
"VENTAS": {
"VENTAS EXPORTACION": {
"account_type": "Income Account"
},
"VENTAS INMUEBLES": {
"account_type": "Income Account"
},
"VENTAS NACIONALES": {
"account_type": "Income Account"
},
"VENTAS NACIONALES AL DETAL": {
"account_type": "Income Account"
}
"VENTAS EXPORTACION": {},
"VENTAS INMUEBLES": {},
"VENTAS NACIONALES": {},
"VENTAS NACIONALES AL DETAL": {}
}
}
},

View File

@@ -1,6 +1,6 @@
{
"country_code": "ni",
"name": "Nicaragua - Catálogo de Cuentas",
"name": "Nicaragua - Catalogo de Cuentas",
"tree": {
"Activo": {
"Activo Corriente": {
@@ -491,4 +491,4 @@
"root_type": "Liability"
}
}
}
}

View File

@@ -2,13 +2,75 @@
"country_code": "nl",
"name": "Netherlands - Grootboekschema",
"tree": {
"FABRIKAGEREKENINGEN": {
"is_group": 1,
"root_type": "Expense"
},
"FINANCIELE REKENINGEN, KORTLOPENDE VORDERINGEN EN SCHULDEN": {
"Bank": {
"RABO Bank": {
"account_type": "Bank"
},
"account_type": "Bank"
},
},
"KORTLOPENDE SCHULDEN": {
"Af te dragen Btw-verlegd": {
"account_type": "Tax"
},
"Afdracht loonheffing": {},
"Btw af te dragen hoog": {
"account_type": "Tax"
},
"Btw af te dragen laag": {
"account_type": "Tax"
},
"Btw af te dragen overig": {
"account_type": "Tax"
},
"Btw oude jaren": {
"account_type": "Tax"
},
"Btw te vorderen hoog": {
"account_type": "Tax"
},
"Btw te vorderen laag": {
"account_type": "Tax"
},
"Btw te vorderen overig": {
"account_type": "Tax"
},
"Btw-afdracht": {
"account_type": "Tax"
},
"Crediteuren": {
"account_type": "Payable"
},
"Dividend": {},
"Dividendbelasting": {},
"Energiekosten 1": {},
"Investeringsaftrek": {},
"Loonheffing": {},
"Overige te betalen posten": {},
"Pensioenpremies 1": {},
"Premie WIR": {},
"Rekening-courant inkoopvereniging": {},
"Rente": {},
"Sociale lasten 1": {},
"Stock Recieved niet gefactureerd": {
"account_type": "Stock Received But Not Billed"
},
"Tanti\u00e8mes 1": {},
"Te vorderen Btw-verlegd": {
"account_type": "Tax"
},
"Telefoon/telefax 1": {},
"Termijnen onderh. werk": {},
"Vakantiedagen": {},
"Vakantiegeld 1": {},
"Vakantiezegels": {},
"Vennootschapsbelasting": {},
"Vooruit ontvangen bedr.": {}
},
"LIQUIDE MIDDELEN": {
"ABN-AMRO bank": {},
"Bankbetaalkaarten": {},
@@ -29,110 +91,6 @@
},
"account_type": "Cash"
},
"TUSSENREKENINGEN": {
"Betaalwijze cadeaubonnen": {
"account_type": "Cash"
},
"Betaalwijze chipknip": {
"account_type": "Cash"
},
"Betaalwijze contant": {
"account_type": "Cash"
},
"Betaalwijze pin": {
"account_type": "Cash"
},
"Inkopen Nederland hoog": {
"account_type": "Cash"
},
"Inkopen Nederland laag": {
"account_type": "Cash"
},
"Inkopen Nederland onbelast": {
"account_type": "Cash"
},
"Inkopen Nederland overig": {
"account_type": "Cash"
},
"Inkopen Nederland verlegd": {
"account_type": "Cash"
},
"Inkopen binnen EU hoog": {
"account_type": "Cash"
},
"Inkopen binnen EU laag": {
"account_type": "Cash"
},
"Inkopen binnen EU overig": {
"account_type": "Cash"
},
"Inkopen buiten EU hoog": {
"account_type": "Cash"
},
"Inkopen buiten EU laag": {
"account_type": "Cash"
},
"Inkopen buiten EU overig": {
"account_type": "Cash"
},
"Kassa 1": {
"account_type": "Cash"
},
"Kassa 2": {
"account_type": "Cash"
},
"Netto lonen": {
"account_type": "Cash"
},
"Tegenrekening Inkopen": {
"account_type": "Cash"
},
"Tussenrek. autom. betalingen": {
"account_type": "Cash"
},
"Tussenrek. autom. loonbetalingen": {
"account_type": "Cash"
},
"Tussenrek. cadeaubonbetalingen": {
"account_type": "Cash"
},
"Tussenrekening balans": {
"account_type": "Cash"
},
"Tussenrekening chipknip": {
"account_type": "Cash"
},
"Tussenrekening correcties": {
"account_type": "Cash"
},
"Tussenrekening pin": {
"account_type": "Cash"
},
"Vraagposten": {
"account_type": "Cash"
},
"VOORRAAD GRONDSTOFFEN, HULPMATERIALEN EN HANDELSGOEDEREN": {
"Emballage": {},
"Gereed product 1": {},
"Gereed product 2": {},
"Goederen 1": {},
"Goederen 2": {},
"Goederen in consignatie": {},
"Goederen onderweg": {},
"Grondstoffen 1": {},
"Grondstoffen 2": {},
"Halffabrikaten 1": {},
"Halffabrikaten 2": {},
"Hulpstoffen 1": {},
"Hulpstoffen 2": {},
"Kantoorbenodigdheden": {},
"Onderhanden werk": {},
"Verpakkingsmateriaal": {},
"Zegels": {},
"root_type": "Asset"
},
"root_type": "Asset"
},
"VORDERINGEN": {
"Debiteuren": {
"account_type": "Receivable"
@@ -146,299 +104,278 @@
"Voorziening dubieuze debiteuren": {}
},
"root_type": "Asset"
},
"KORTLOPENDE SCHULDEN": {
"Af te dragen Btw-verlegd": {
"account_type": "Tax"
},
"Afdracht loonheffing": {},
"Btw af te dragen hoog": {
"account_type": "Tax"
},
"Btw af te dragen laag": {
"account_type": "Tax"
},
"Btw af te dragen overig": {
"account_type": "Tax"
},
"Btw oude jaren": {
"account_type": "Tax"
},
"Btw te vorderen hoog": {
"account_type": "Tax"
},
"Btw te vorderen laag": {
"account_type": "Tax"
},
"Btw te vorderen overig": {
"account_type": "Tax"
},
"Btw-afdracht": {
"account_type": "Tax"
},
"Crediteuren": {
"account_type": "Payable"
},
"Dividend": {},
"Dividendbelasting": {},
"Energiekosten 1": {},
"Investeringsaftrek": {},
"Loonheffing": {},
"Overige te betalen posten": {},
"Pensioenpremies 1": {},
"Premie WIR": {},
"Rekening-courant inkoopvereniging": {},
"Rente": {},
"Sociale lasten 1": {},
"Stock Recieved niet gefactureerd": {
"account_type": "Stock Received But Not Billed"
},
"Tanti\u00e8mes 1": {},
"Te vorderen Btw-verlegd": {
"account_type": "Tax"
},
"Telefoon/telefax 1": {},
"Termijnen onderh. werk": {},
"Vakantiedagen": {},
"Vakantiegeld 1": {},
"Vakantiezegels": {},
"Vennootschapsbelasting": {},
"Vooruit ontvangen bedr.": {},
"is_group": 1,
"root_type": "Liability"
},
"FABRIKAGEREKENINGEN": {
},
"INDIRECTE KOSTEN": {
"is_group": 1,
"root_type": "Expense",
"INDIRECTE KOSTEN": {
"is_group": 1,
"root_type": "Expense"
},
"KOSTENREKENINGEN": {
"AFSCHRIJVINGEN": {
"Aanhangwagens": {},
"Aankoopkosten": {},
"Aanloopkosten": {},
"Auteursrechten": {},
"Bedrijfsgebouwen": {},
"Bedrijfsinventaris": {
"account_type": "Depreciation"
},
"Drankvergunningen": {},
"Fabrieksinventaris": {
"account_type": "Depreciation"
},
"Gebouwen": {},
"Gereedschappen": {},
"Goodwill": {},
"Grondverbetering": {},
"Heftrucks": {},
"Kantine-inventaris": {},
"Kantoorinventaris": {
"account_type": "Depreciation"
},
"Kantoormachines": {},
"Licenties": {},
"Machines 1": {},
"Magazijninventaris": {},
"Octrooien": {},
"Ontwikkelingskosten": {},
"Pachtersinvestering": {},
"Parkeerplaats": {},
"Personenauto's": {
"account_type": "Depreciation"
},
"Rijwielen en bromfietsen": {},
"Tonnagevergunningen": {},
"Verbouwingen": {},
"Vergunningen": {},
"Voorraadverschillen": {},
"Vrachtauto's": {},
"Winkels": {},
"Woon-winkelhuis": {},
"root_type": "Expense"
},
"KOSTENREKENINGEN": {
"AFSCHRIJVINGEN": {
"Aanhangwagens": {},
"Aankoopkosten": {},
"Aanloopkosten": {},
"Auteursrechten": {},
"Bedrijfsgebouwen": {},
"Bedrijfsinventaris": {
"account_type": "Depreciation"
},
"ALGEMENE KOSTEN": {
"Accountantskosten": {},
"Advieskosten": {},
"Assuranties 1": {},
"Bankkosten": {},
"Juridische kosten": {},
"Overige algemene kosten": {},
"Toev. Ass. eigen risico": {}
"Drankvergunningen": {},
"Fabrieksinventaris": {
"account_type": "Depreciation"
},
"BEDRIJFSKOSTEN": {
"Assuranties 2": {},
"Energie (krachtstroom)": {},
"Gereedschappen 1": {},
"Hulpmaterialen 1": {},
"Huur inventaris": {},
"Huur machines": {},
"Leasing invent.operational": {},
"Leasing mach. operational": {},
"Onderhoud inventaris": {},
"Onderhoud machines": {},
"Ophalen/vervoer afval": {},
"Overige bedrijfskosten": {}
"Gebouwen": {},
"Gereedschappen": {},
"Goodwill": {},
"Grondverbetering": {},
"Heftrucks": {},
"Kantine-inventaris": {},
"Kantoorinventaris": {
"account_type": "Depreciation"
},
"FINANCIERINGSKOSTEN 1": {
"Overige rentebaten": {},
"Overige rentelasten": {},
"Rente bankkrediet": {},
"Rente huurkoopcontracten": {},
"Rente hypotheek": {},
"Rente leasecontracten": {},
"Rente lening o/g": {},
"Rente lening u/g": {}
"Kantoormachines": {},
"Licenties": {},
"Machines 1": {},
"Magazijninventaris": {},
"Octrooien": {},
"Ontwikkelingskosten": {},
"Pachtersinvestering": {},
"Parkeerplaats": {},
"Personenauto's": {
"account_type": "Depreciation"
},
"HUISVESTINGSKOSTEN": {
"Assurantie onroerend goed": {},
"Belastingen onr. Goed": {},
"Energiekosten": {},
"Groot onderhoud onr. Goed": {},
"Huur": {},
"Huurwaarde woongedeelte": {},
"Onderhoud onroerend goed": {},
"Ontvangen huren": {},
"Overige huisvestingskosten": {},
"Pacht": {},
"Schoonmaakkosten": {},
"Toevoeging egalisatieres. Groot onderhoud": {}
},
"KANTOORKOSTEN": {
"Administratiekosten": {},
"Contributies/abonnementen": {},
"Huur kantoorapparatuur": {},
"Internetaansluiting": {},
"Kantoorbenodigdh./drukw.": {},
"Onderhoud kantoorinvent.": {},
"Overige kantoorkosten": {},
"Porti": {},
"Telefoon/telefax": {}
},
"OVERIGE BATEN EN LASTEN": {
"Betaalde schadevergoed.": {},
"Boekverlies vaste activa": {},
"Boekwinst van vaste activa": {},
"K.O. regeling OB": {},
"Kasverschillen": {},
"Kosten loonbelasting": {},
"Kosten omzetbelasting": {},
"Nadelige koersverschillen": {},
"Naheffing bedrijfsver.": {},
"Ontvangen schadevergoed.": {},
"Overige baten": {},
"Overige lasten": {},
"Voordelige koersverschil.": {}
},
"PERSONEELSKOSTEN": {
"Autokostenvergoeding": {},
"Bedrijfskleding": {},
"Belastingvrije uitkeringen": {},
"Bijzondere beloningen": {},
"Congressen, seminars en symposia": {},
"Gereedschapsgeld": {},
"Geschenken personeel": {},
"Gratificaties": {},
"Inhouding pensioenpremies": {},
"Inhouding sociale lasten": {},
"Kantinekosten": {},
"Lonen en salarissen": {},
"Loonwerk": {},
"Managementvergoedingen": {},
"Opleidingskosten": {},
"Oprenting stamrechtverpl.": {},
"Overhevelingstoeslag": {},
"Overige kostenverg.": {},
"Overige personeelskosten": {},
"Overige uitkeringen": {},
"Pensioenpremies": {},
"Provisie 1": {},
"Reiskosten": {},
"Rijwielvergoeding": {},
"Sociale lasten": {},
"Tanti\u00e8mes": {},
"Thuiswerkers": {},
"Toev. Backservice pens.verpl.": {},
"Toevoeging pensioenverpl.": {},
"Uitkering ziekengeld": {},
"Uitzendkrachten": {},
"Vakantiebonnen": {},
"Vakantiegeld": {},
"Vergoeding studiekosten": {},
"Wervingskosten personeel": {}
},
"VERKOOPKOSTEN": {
"Advertenties": {},
"Afschrijving dubieuze deb.": {},
"Beurskosten": {},
"Etalagekosten": {},
"Exportkosten": {},
"Kascorrecties": {},
"Overige verkoopkosten": {},
"Provisie": {},
"Reclame": {},
"Reis en verblijfkosten": {},
"Relatiegeschenken": {},
"Representatiekosten": {},
"Uitgaande vrachten": {},
"Veilingkosten": {},
"Verpakkingsmateriaal 1": {},
"Websitekosten": {}
},
"VERVOERSKOSTEN": {
"Assuranties auto's": {},
"Brandstoffen": {},
"Leasing auto's": {},
"Onderhoud personenauto's": {},
"Onderhoud vrachtauto's": {},
"Overige vervoerskosten": {},
"Priv\u00e9-gebruik auto's": {},
"Wegenbelasting": {}
},
"VOORRAAD GEREED PRODUCT EN ONDERHANDEN WERK": {
"Betalingskort. crediteuren": {},
"Garantiekosten": {},
"Hulpmaterialen": {},
"Inkomende vrachten": {
"account_type": "Expenses Included In Valuation"
},
"Inkoop import buiten EU hoog": {},
"Inkoop import buiten EU laag": {},
"Inkoop import buiten EU overig": {},
"Inkoopbonussen": {},
"Inkoopkosten": {},
"Inkoopprovisie": {},
"Inkopen BTW verlegd": {},
"Inkopen EU hoog tarief": {},
"Inkopen EU laag tarief": {},
"Inkopen EU overig": {},
"Inkopen hoog": {},
"Inkopen laag": {},
"Inkopen nul": {},
"Inkopen overig": {},
"Invoerkosten": {},
"Kosten inkoopvereniging": {},
"Kostprijs omzet grondstoffen": {
"account_type": "Cost of Goods Sold"
},
"Kostprijs omzet handelsgoederen": {},
"Onttrekking uitgev.garantie": {},
"Priv\u00e9-gebruik goederen": {},
"Stock aanpassing": {
"account_type": "Stock Adjustment"
},
"Tegenrekening inkoop": {},
"Toev. Voorz. incour. grondst.": {},
"Toevoeging garantieverpl.": {},
"Toevoeging voorz. incour. handelsgoed.": {},
"Uitbesteed werk": {},
"Voorz. Incourourant grondst.": {},
"Voorz.incour. handelsgoed.": {},
"root_type": "Expense"
},
"root_type": "Expense"
}
"Rijwielen en bromfietsen": {},
"Tonnagevergunningen": {},
"Verbouwingen": {},
"Vergunningen": {},
"Voorraadverschillen": {},
"Vrachtauto's": {},
"Winkels": {},
"Woon-winkelhuis": {},
"account_type": "Depreciation"
},
"ALGEMENE KOSTEN": {
"Accountantskosten": {},
"Advieskosten": {},
"Assuranties 1": {},
"Bankkosten": {},
"Juridische kosten": {},
"Overige algemene kosten": {},
"Toev. Ass. eigen risico": {}
},
"BEDRIJFSKOSTEN": {
"Assuranties 2": {},
"Energie (krachtstroom)": {},
"Gereedschappen 1": {},
"Hulpmaterialen 1": {},
"Huur inventaris": {},
"Huur machines": {},
"Leasing invent.operational": {},
"Leasing mach. operational": {},
"Onderhoud inventaris": {},
"Onderhoud machines": {},
"Ophalen/vervoer afval": {},
"Overige bedrijfskosten": {}
},
"FINANCIERINGSKOSTEN 1": {
"Overige rentebaten": {},
"Overige rentelasten": {},
"Rente bankkrediet": {},
"Rente huurkoopcontracten": {},
"Rente hypotheek": {},
"Rente leasecontracten": {},
"Rente lening o/g": {},
"Rente lening u/g": {}
},
"HUISVESTINGSKOSTEN": {
"Assurantie onroerend goed": {},
"Belastingen onr. Goed": {},
"Energiekosten": {},
"Groot onderhoud onr. Goed": {},
"Huur": {},
"Huurwaarde woongedeelte": {},
"Onderhoud onroerend goed": {},
"Ontvangen huren": {},
"Overige huisvestingskosten": {},
"Pacht": {},
"Schoonmaakkosten": {},
"Toevoeging egalisatieres. Groot onderhoud": {}
},
"KANTOORKOSTEN": {
"Administratiekosten": {},
"Contributies/abonnementen": {},
"Huur kantoorapparatuur": {},
"Internetaansluiting": {},
"Kantoorbenodigdh./drukw.": {},
"Onderhoud kantoorinvent.": {},
"Overige kantoorkosten": {},
"Porti": {},
"Telefoon/telefax": {}
},
"OVERIGE BATEN EN LASTEN": {
"Betaalde schadevergoed.": {},
"Boekverlies vaste activa": {},
"Boekwinst van vaste activa": {},
"K.O. regeling OB": {},
"Kasverschillen": {},
"Kosten loonbelasting": {},
"Kosten omzetbelasting": {},
"Nadelige koersverschillen": {},
"Naheffing bedrijfsver.": {},
"Ontvangen schadevergoed.": {},
"Overige baten": {},
"Overige lasten": {},
"Voordelige koersverschil.": {}
},
"PERSONEELSKOSTEN": {
"Autokostenvergoeding": {},
"Bedrijfskleding": {},
"Belastingvrije uitkeringen": {},
"Bijzondere beloningen": {},
"Congressen, seminars en symposia": {},
"Gereedschapsgeld": {},
"Geschenken personeel": {},
"Gratificaties": {},
"Inhouding pensioenpremies": {},
"Inhouding sociale lasten": {},
"Kantinekosten": {},
"Lonen en salarissen": {},
"Loonwerk": {},
"Managementvergoedingen": {},
"Opleidingskosten": {},
"Oprenting stamrechtverpl.": {},
"Overhevelingstoeslag": {},
"Overige kostenverg.": {},
"Overige personeelskosten": {},
"Overige uitkeringen": {},
"Pensioenpremies": {},
"Provisie 1": {},
"Reiskosten": {},
"Rijwielvergoeding": {},
"Sociale lasten": {},
"Tanti\u00e8mes": {},
"Thuiswerkers": {},
"Toev. Backservice pens.verpl.": {},
"Toevoeging pensioenverpl.": {},
"Uitkering ziekengeld": {},
"Uitzendkrachten": {},
"Vakantiebonnen": {},
"Vakantiegeld": {},
"Vergoeding studiekosten": {},
"Wervingskosten personeel": {}
},
"VERKOOPKOSTEN": {
"Advertenties": {},
"Afschrijving dubieuze deb.": {},
"Beurskosten": {},
"Etalagekosten": {},
"Exportkosten": {},
"Kascorrecties": {},
"Overige verkoopkosten": {},
"Provisie": {},
"Reclame": {},
"Reis en verblijfkosten": {},
"Relatiegeschenken": {},
"Representatiekosten": {},
"Uitgaande vrachten": {},
"Veilingkosten": {},
"Verpakkingsmateriaal 1": {},
"Websitekosten": {}
},
"VERVOERSKOSTEN": {
"Assuranties auto's": {},
"Brandstoffen": {},
"Leasing auto's": {},
"Onderhoud personenauto's": {},
"Onderhoud vrachtauto's": {},
"Overige vervoerskosten": {},
"Priv\u00e9-gebruik auto's": {},
"Wegenbelasting": {}
},
"root_type": "Expense"
},
"TUSSENREKENINGEN": {
"Betaalwijze cadeaubonnen": {
"account_type": "Cash"
},
"Betaalwijze chipknip": {
"account_type": "Cash"
},
"Betaalwijze contant": {
"account_type": "Cash"
},
"Betaalwijze pin": {
"account_type": "Cash"
},
"Inkopen Nederland hoog": {
"account_type": "Cash"
},
"Inkopen Nederland laag": {
"account_type": "Cash"
},
"Inkopen Nederland onbelast": {
"account_type": "Cash"
},
"Inkopen Nederland overig": {
"account_type": "Cash"
},
"Inkopen Nederland verlegd": {
"account_type": "Cash"
},
"Inkopen binnen EU hoog": {
"account_type": "Cash"
},
"Inkopen binnen EU laag": {
"account_type": "Cash"
},
"Inkopen binnen EU overig": {
"account_type": "Cash"
},
"Inkopen buiten EU hoog": {
"account_type": "Cash"
},
"Inkopen buiten EU laag": {
"account_type": "Cash"
},
"Inkopen buiten EU overig": {
"account_type": "Cash"
},
"Kassa 1": {
"account_type": "Cash"
},
"Kassa 2": {
"account_type": "Cash"
},
"Netto lonen": {
"account_type": "Cash"
},
"Tegenrekening Inkopen": {
"account_type": "Cash"
},
"Tussenrek. autom. betalingen": {
"account_type": "Cash"
},
"Tussenrek. autom. loonbetalingen": {
"account_type": "Cash"
},
"Tussenrek. cadeaubonbetalingen": {
"account_type": "Cash"
},
"Tussenrekening balans": {
"account_type": "Cash"
},
"Tussenrekening chipknip": {
"account_type": "Cash"
},
"Tussenrekening correcties": {
"account_type": "Cash"
},
"Tussenrekening pin": {
"account_type": "Cash"
},
"Vraagposten": {
"account_type": "Cash"
},
"root_type": "Asset"
},
"VASTE ACTIVA, EIGEN VERMOGEN, LANGLOPEND VREEMD VERMOGEN EN VOORZIENINGEN": {
"EIGEN VERMOGEN": {
@@ -665,7 +602,7 @@
"account_type": "Equity"
}
},
"root_type": "Equity"
"root_type": "Asset"
},
"VERKOOPRESULTATEN": {
"Diensten fabric. 0% niet-EU": {},
@@ -690,6 +627,67 @@
"Verleende Kredietbep. fabricage": {},
"Verleende Kredietbep. handel": {},
"root_type": "Income"
},
"VOORRAAD GEREED PRODUCT EN ONDERHANDEN WERK": {
"Betalingskort. crediteuren": {},
"Garantiekosten": {},
"Hulpmaterialen": {},
"Inkomende vrachten": {
"account_type": "Expenses Included In Valuation"
},
"Inkoop import buiten EU hoog": {},
"Inkoop import buiten EU laag": {},
"Inkoop import buiten EU overig": {},
"Inkoopbonussen": {},
"Inkoopkosten": {},
"Inkoopprovisie": {},
"Inkopen BTW verlegd": {},
"Inkopen EU hoog tarief": {},
"Inkopen EU laag tarief": {},
"Inkopen EU overig": {},
"Inkopen hoog": {},
"Inkopen laag": {},
"Inkopen nul": {},
"Inkopen overig": {},
"Invoerkosten": {},
"Kosten inkoopvereniging": {},
"Kostprijs omzet grondstoffen": {
"account_type": "Cost of Goods Sold"
},
"Kostprijs omzet handelsgoederen": {},
"Onttrekking uitgev.garantie": {},
"Priv\u00e9-gebruik goederen": {},
"Stock aanpassing": {
"account_type": "Stock Adjustment"
},
"Tegenrekening inkoop": {},
"Toev. Voorz. incour. grondst.": {},
"Toevoeging garantieverpl.": {},
"Toevoeging voorz. incour. handelsgoed.": {},
"Uitbesteed werk": {},
"Voorz. Incourourant grondst.": {},
"Voorz.incour. handelsgoed.": {},
"root_type": "Expense"
},
"VOORRAAD GRONDSTOFFEN, HULPMATERIALEN EN HANDELSGOEDEREN": {
"Emballage": {},
"Gereed product 1": {},
"Gereed product 2": {},
"Goederen 1": {},
"Goederen 2": {},
"Goederen in consignatie": {},
"Goederen onderweg": {},
"Grondstoffen 1": {},
"Grondstoffen 2": {},
"Halffabrikaten 1": {},
"Halffabrikaten 2": {},
"Hulpstoffen 1": {},
"Hulpstoffen 2": {},
"Kantoorbenodigdheden": {},
"Onderhanden werk": {},
"Verpakkingsmateriaal": {},
"Zegels": {},
"root_type": "Asset"
}
}
}

View File

@@ -1,109 +1,189 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
from frappe import _
def get():
return {
_("Application of Funds (Assets)"): {
_("Current Assets"): {
_("Accounts Receivable"): {_("Debtors"): {"account_type": "Receivable"}},
_("Bank Accounts"): {"account_type": "Bank", "is_group": 1},
_("Cash In Hand"): {_("Cash"): {"account_type": "Cash"}, "account_type": "Cash"},
_("Loans and Advances (Assets)"): {
_("Employee Advances"): {},
_("Application of Funds (Assets)"): {
_("Current Assets"): {
_("Accounts Receivable"): {
_("Debtors"): {
"account_type": "Receivable"
}
},
_("Bank Accounts"): {
"account_type": "Bank",
"is_group": 1
},
_("Cash In Hand"): {
_("Cash"): {
"account_type": "Cash"
},
"account_type": "Cash"
},
_("Loans and Advances (Assets)"): {
_("Employee Advances"): {
},
},
_("Securities and Deposits"): {
_("Earnest Money"): {}
},
_("Stock Assets"): {
_("Stock In Hand"): {
"account_type": "Stock"
},
"account_type": "Stock",
},
_("Tax Assets"): {
"is_group": 1
}
},
_("Fixed Assets"): {
_("Capital Equipments"): {
"account_type": "Fixed Asset"
},
_("Electronic Equipments"): {
"account_type": "Fixed Asset"
},
_("Furnitures and Fixtures"): {
"account_type": "Fixed Asset"
},
_("Office Equipments"): {
"account_type": "Fixed Asset"
},
_("Plants and Machineries"): {
"account_type": "Fixed Asset"
},
_("Buildings"): {
"account_type": "Fixed Asset"
},
_("Securities and Deposits"): {_("Earnest Money"): {}},
_("Stock Assets"): {
_("Stock In Hand"): {"account_type": "Stock"},
"account_type": "Stock",
_("Softwares"): {
"account_type": "Fixed Asset"
},
_("Tax Assets"): {"is_group": 1},
},
_("Fixed Assets"): {
_("Capital Equipment"): {"account_type": "Fixed Asset"},
_("Electronic Equipment"): {"account_type": "Fixed Asset"},
_("Furniture and Fixtures"): {"account_type": "Fixed Asset"},
_("Office Equipment"): {"account_type": "Fixed Asset"},
_("Plants and Machineries"): {"account_type": "Fixed Asset"},
_("Buildings"): {"account_type": "Fixed Asset"},
_("Software"): {"account_type": "Fixed Asset"},
_("Accumulated Depreciation"): {"account_type": "Accumulated Depreciation"},
_("CWIP Account"): {
"account_type": "Capital Work in Progress",
},
},
_("Investments"): {"is_group": 1},
_("Temporary Accounts"): {_("Temporary Opening"): {"account_type": "Temporary"}},
"root_type": "Asset",
},
_("Expenses"): {
_("Direct Expenses"): {
_("Stock Expenses"): {
_("Cost of Goods Sold"): {"account_type": "Cost of Goods Sold"},
_("Expenses Included In Asset Valuation"): {
"account_type": "Expenses Included In Asset Valuation"
},
_("Expenses Included In Valuation"): {"account_type": "Expenses Included In Valuation"},
_("Stock Adjustment"): {"account_type": "Stock Adjustment"},
},
},
_("Indirect Expenses"): {
_("Administrative Expenses"): {},
_("Commission on Sales"): {},
_("Depreciation"): {"account_type": "Depreciation"},
_("Entertainment Expenses"): {},
_("Freight and Forwarding Charges"): {"account_type": "Chargeable"},
_("Legal Expenses"): {},
_("Marketing Expenses"): {"account_type": "Chargeable"},
_("Miscellaneous Expenses"): {"account_type": "Chargeable"},
_("Office Maintenance Expenses"): {},
_("Office Rent"): {},
_("Postal Expenses"): {},
_("Print and Stationery"): {},
_("Round Off"): {"account_type": "Round Off"},
_("Salary"): {},
_("Sales Expenses"): {},
_("Telephone Expenses"): {},
_("Travel Expenses"): {},
_("Utility Expenses"): {},
_("Accumulated Depreciation"): {
"account_type": "Accumulated Depreciation"
},
_("CWIP Account"): {
"account_type": "Capital Work in Progress",
}
},
_("Investments"): {
"is_group": 1
},
_("Temporary Accounts"): {
_("Temporary Opening"): {
"account_type": "Temporary"
}
},
"root_type": "Asset"
},
_("Expenses"): {
_("Direct Expenses"): {
_("Stock Expenses"): {
_("Cost of Goods Sold"): {
"account_type": "Cost of Goods Sold"
},
_("Expenses Included In Asset Valuation"): {
"account_type": "Expenses Included In Asset Valuation"
},
_("Expenses Included In Valuation"): {
"account_type": "Expenses Included In Valuation"
},
_("Stock Adjustment"): {
"account_type": "Stock Adjustment"
}
},
},
_("Indirect Expenses"): {
_("Administrative Expenses"): {},
_("Commission on Sales"): {},
_("Depreciation"): {
"account_type": "Depreciation"
},
_("Entertainment Expenses"): {},
_("Freight and Forwarding Charges"): {
"account_type": "Chargeable"
},
_("Legal Expenses"): {},
_("Marketing Expenses"): {
"account_type": "Chargeable"
},
_("Miscellaneous Expenses"): {
"account_type": "Chargeable"
},
_("Office Maintenance Expenses"): {},
_("Office Rent"): {},
_("Postal Expenses"): {},
_("Print and Stationery"): {},
_("Round Off"): {
"account_type": "Round Off"
},
_("Salary"): {},
_("Sales Expenses"): {},
_("Telephone Expenses"): {},
_("Travel Expenses"): {},
_("Utility Expenses"): {},
_("Write Off"): {},
_("Exchange Gain/Loss"): {},
_("Gain/Loss on Asset Disposal"): {},
},
"root_type": "Expense",
},
_("Income"): {
_("Direct Income"): {_("Sales"): {}, _("Service"): {}},
_("Indirect Income"): {"is_group": 1},
"root_type": "Income",
},
_("Source of Funds (Liabilities)"): {
_("Current Liabilities"): {
_("Accounts Payable"): {
_("Creditors"): {"account_type": "Payable"},
_("Payroll Payable"): {},
_("Gain/Loss on Asset Disposal"): {}
},
"root_type": "Expense"
},
_("Income"): {
_("Direct Income"): {
_("Sales"): {},
_("Service"): {}
},
_("Indirect Income"): {
"is_group": 1
},
"root_type": "Income"
},
_("Source of Funds (Liabilities)"): {
_("Current Liabilities"): {
_("Accounts Payable"): {
_("Creditors"): {
"account_type": "Payable"
},
_("Payroll Payable"): {},
},
_("Stock Liabilities"): {
_("Stock Received But Not Billed"): {
"account_type": "Stock Received But Not Billed"
},
_("Asset Received But Not Billed"): {
"account_type": "Asset Received But Not Billed"
}
},
_("Duties and Taxes"): {
"account_type": "Tax",
"is_group": 1
},
_("Stock Liabilities"): {
_("Stock Received But Not Billed"): {"account_type": "Stock Received But Not Billed"},
_("Asset Received But Not Billed"): {"account_type": "Asset Received But Not Billed"},
},
_("Duties and Taxes"): {"account_type": "Tax", "is_group": 1},
_("Loans (Liabilities)"): {
_("Secured Loans"): {},
_("Unsecured Loans"): {},
_("Bank Overdraft Account"): {},
},
},
"root_type": "Liability",
},
},
"root_type": "Liability"
},
_("Equity"): {
_("Capital Stock"): {"account_type": "Equity"},
_("Dividends Paid"): {"account_type": "Equity"},
_("Opening Balance Equity"): {"account_type": "Equity"},
_("Retained Earnings"): {"account_type": "Equity"},
"root_type": "Equity",
},
_("Capital Stock"): {
"account_type": "Equity"
},
_("Dividends Paid"): {
"account_type": "Equity"
},
_("Opening Balance Equity"): {
"account_type": "Equity"
},
_("Retained Earnings"): {
"account_type": "Equity"
},
"root_type": "Equity"
}
}

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