Compare commits

..

869 Commits

Author SHA1 Message Date
Saqib
3a3a0a83b7 fix: link to error log list 2021-11-03 17:47:01 +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
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
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
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
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
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
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
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
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
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
Noah Jacob
9431bb9466 fix: changes in schedules gets overwritten on save
(cherry picked from commit af1b9e100e)
2021-10-19 08:07:42 +00:00
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
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
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
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
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
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
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
4415bf9968 fix: Interstate internal transfer invoices not visible in GSTR-1
(cherry picked from commit d9d42b13ab)
2021-10-18 03:23:55 +00:00
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
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
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
1087 changed files with 55608 additions and 21292 deletions

View File

@@ -8,15 +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
# imports cleanup
4b2be2999f2203493b49bf74c5b440d49e38b5e3

View File

@@ -1,7 +1,7 @@
import sys
import requests
from urllib.parse import urlparse
import requests
docs_repos = [
"frappe_docs",

View File

@@ -37,9 +37,5 @@ sed -i 's/socketio:/# socketio:/g' Procfile
sed -i 's/redis_socketio:/# redis_socketio:/g' Procfile
bench get-app erpnext "${GITHUB_WORKSPACE}"
if [ "$TYPE" == "server" ]; then bench setup requirements --dev; fi
bench start &> bench_run_logs.txt &
bench --site test_site reinstall --yes
bench build --app frappe

View File

@@ -1,6 +1,5 @@
import frappe
from frappe import _
from frappe.model.document import Document

View File

@@ -132,6 +132,7 @@ rules:
languages: [python]
severity: ERROR
- id: frappe-manual-commit
patterns:
- pattern: frappe.db.commit()
@@ -148,16 +149,3 @@ rules:
- "**/demo/**"
languages: [python]
severity: ERROR
- id: frappe-using-db-sql
pattern-either:
- pattern: frappe.db.sql(...)
- pattern: frappe.db.sql_ddl(...)
- pattern: frappe.db.sql_list(...)
paths:
exclude:
- "test_*.py"
message: |
The PR contains a SQL query that may be re-written with frappe.qb (https://frappeframework.com/docs/user/en/api/query-builder) or the Database API (https://frappeframework.com/docs/user/en/api/database)
languages: [python]
severity: ERROR

View File

@@ -1,6 +1,5 @@
from frappe import _
# ruleid: frappe-missing-translate-function-in-report-python
{"label": "Field Label"}

View File

@@ -1,6 +1,5 @@
import frappe
from frappe import msgprint, throw, _
from frappe import _, msgprint, throw
# ruleid: frappe-missing-translate-function-python
throw("Error Occured")

4
.github/stale.yml vendored
View File

@@ -1,11 +1,11 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 15
daysUntilStale: 30
# 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: 3
daysUntilClose: 7
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:

View File

@@ -1,32 +0,0 @@
<svg width="201" height="60" viewBox="0 0 201 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<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.4 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

View File

@@ -6,7 +6,6 @@ on:
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: 'Setup Environment'

View File

@@ -10,15 +10,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install and Run Pre-commit
uses: pre-commit/action@v2.0.3
- uses: returntocorp/semgrep-action@v1
env:
SEMGREP_TIMEOUT: 120
@@ -26,3 +17,11 @@ jobs:
config: >-
r/python.lang.correctness
.github/helper/semgrep_rules
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install and Run Pre-commit
uses: pre-commit/action@v2.0.0

View File

@@ -7,14 +7,10 @@ on:
- '**.md'
workflow_dispatch:
concurrency:
group: patch-develop-${{ github.event.number }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 60
runs-on: ubuntu-18.04
name: Patch Test
@@ -34,12 +30,12 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.7
python-version: 3.6
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 14
node-version: 12
check-latest: true
- name: Add to Hosts

View File

@@ -12,14 +12,9 @@ on:
- '**.js'
- '**.md'
concurrency:
group: server-develop-${{ github.event.number }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 60
runs-on: ubuntu-18.04
strategy:
fail-fast: false
@@ -50,7 +45,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: 14
node-version: 12
check-latest: true
- name: Add to Hosts
@@ -91,8 +86,6 @@ jobs:
- name: Install
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
env:
TYPE: server
- name: Run Tests
run: cd ~/frappe-bench/ && bench --site test_site run-parallel-tests --app erpnext --use-orchestrator --with-coverage
@@ -101,10 +94,33 @@ jobs:
CI_BUILD_ID: ${{ github.run_id }}
ORCHESTRATOR_URL: http://test-orchestrator.frappe.io
- name: Upload coverage data
uses: codecov/codecov-action@v2
with:
name: MariaDB
fail_ci_if_error: true
files: /home/runner/frappe-bench/sites/coverage.xml
verbose: true
- 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

View File

@@ -6,14 +6,9 @@ on:
- '**.md'
workflow_dispatch:
concurrency:
group: ui-develop-${{ github.event.number }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 60
runs-on: ubuntu-18.04
strategy:
fail-fast: false

2
.gitignore vendored
View File

@@ -7,7 +7,6 @@ latest_updates.json
.wnf-lang-status
*.egg-info
dist/
erpnext/public/dist
erpnext/docs/current
*.swp
*.swo
@@ -16,4 +15,3 @@ __pycache__
.idea/
.vscode/
node_modules/
.backportrc.json

View File

@@ -5,9 +5,9 @@
<p>ERP made simple</p>
</p>
[![CI](https://github.com/frappe/erpnext/actions/workflows/server-tests.yml/badge.svg?branch=develop)](https://github.com/frappe/erpnext/actions/workflows/server-tests.yml)
[![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)
[![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)
@@ -39,12 +39,6 @@ ERPNext is built on the [Frappe Framework](https://github.com/frappe/frappe), a
---
<div align="center">
<a href="https://frappecloud.com/deploy?apps=frappe,erpnext&source=erpnext_readme">
<img src=".github/try-on-f-cloud-button.svg" height="40">
</a>
</div>
### 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.
@@ -83,12 +77,6 @@ The ERPNext code is licensed as GNU General Public License (v3) and the Document
---
## Learning
1. [Frappe School](https://frappe.school) - Learn Frappe Framework and ERPNext from the various courses by the maintainers or from the community.
---
## Logo and Trademark
The brand name ERPNext and the logo are trademarks of Frappe Technologies Pvt. Ltd.

View File

@@ -1,17 +0,0 @@
codecov:
require_ci_to_pass: yes
coverage:
status:
project:
default:
target: auto
threshold: 0.5%
comment:
layout: "diff, files"
require_changes: true
after_n_builds: 3
ignore:
- "erpnext/demo"

View File

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

View File

@@ -1,44 +0,0 @@
describe("Test Item Dashboard", () => {
before(() => {
cy.login();
cy.visit("/app/item");
cy.insert_doc(
"Item",
{
item_code: "e2e_test_item",
item_group: "All Item Groups",
opening_stock: 42,
valuation_rate: 100,
},
true
);
cy.go_to_doc("item", "e2e_test_item");
});
it("should show dashboard with correct data on first load", () => {
cy.get(".stock-levels").contains("Stock Levels").should("be.visible");
cy.get(".stock-levels").contains("e2e_test_item").should("exist");
// reserved and available qty
cy.get(".stock-levels .inline-graph-count")
.eq(0)
.contains("0")
.should("exist");
cy.get(".stock-levels .inline-graph-count")
.eq(1)
.contains("42")
.should("exist");
});
it("should persist on field change", () => {
cy.get('input[data-fieldname="disabled"]').check();
cy.wait(500);
cy.get(".stock-levels").contains("Stock Levels").should("be.visible");
cy.get(".stock-levels").should("have.length", 1);
});
it("should persist on reload", () => {
cy.reload();
cy.get(".stock-levels").contains("Stock Levels").should("be.visible");
});
});

View File

@@ -7,7 +7,7 @@ import frappe
from erpnext.hooks import regional_overrides
__version__ = '13.9.0'
__version__ = '13.13.0'
def get_default_company(user=None):
'''Get default company for user'''

View File

@@ -31,7 +31,10 @@ class ERPNextAddress(Address):
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)

View File

@@ -6,3 +6,46 @@ frappe.ui.form.on('Accounts Settings', {
}
});
frappe.tour['Accounts Settings'] = [
{
fieldname: "acc_frozen_upto",
title: "Accounts Frozen Upto",
description: __("Freeze accounting transactions up to specified date, nobody can make/modify entry except the specified Role."),
},
{
fieldname: "frozen_accounts_modifier",
title: "Role Allowed to Set Frozen Accounts & Edit Frozen Entries",
description: __("Users with this Role are allowed to set frozen accounts and create/modify accounting entries against frozen accounts.")
},
{
fieldname: "determine_address_tax_category_from",
title: "Determine Address Tax Category From",
description: __("Tax category can be set on Addresses. An address can be Shipping or Billing address. Set which addres to select when applying Tax Category.")
},
{
fieldname: "over_billing_allowance",
title: "Over Billing Allowance Percentage",
description: __("The percentage by which you can overbill transactions. For example, if the order value is $100 for an Item and percentage here is set as 10% then you are allowed to bill for $110.")
},
{
fieldname: "credit_controller",
title: "Credit Controller",
description: __("Select the role that is allowed to submit transactions that exceed credit limits set. The credit limit can be set in the Customer form.")
},
{
fieldname: "make_payment_via_journal_entry",
title: "Make Payment via Journal Entry",
description: __("When checked, if user proceeds to make payment from an invoice, the system will open a Journal Entry instead of a Payment Entry.")
},
{
fieldname: "unlink_payment_on_cancellation_of_invoice",
title: "Unlink Payment on Cancellation of Invoice",
description: __("If checked, system will unlink the payment against the respective invoice.")
},
{
fieldname: "unlink_advance_payment_on_cancelation_of_order",
title: "Unlink Advance Payment on Cancellation of Order",
description: __("Similar to the previous option, this unlinks any advance payments made against Purchase/Sales Orders.")
}
];

View File

@@ -10,7 +10,6 @@
"accounts_transactions_settings_section",
"over_billing_allowance",
"role_allowed_to_over_bill",
"credit_controller",
"make_payment_via_journal_entry",
"column_break_11",
"check_supplier_invoice_uniqueness",
@@ -30,6 +29,7 @@
"acc_frozen_upto",
"frozen_accounts_modifier",
"column_break_4",
"credit_controller",
"deferred_accounting_settings_section",
"book_deferred_entries_based_on",
"column_break_18",
@@ -75,10 +75,11 @@
"fieldtype": "Column Break"
},
{
"description": "This role is allowed to submit transactions that exceed credit limits",
"fieldname": "credit_controller",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Role allowed to bypass Credit Limit",
"label": "Credit Controller",
"options": "Role"
},
{

View File

@@ -15,7 +15,7 @@ frappe.ui.form.on("Bank Reconciliation Tool", {
},
refresh: function (frm) {
frappe.require("bank-reconciliation-tool.bundle.js", () =>
frappe.require("assets/js/bank-reconciliation-tool.min.js", () =>
frm.trigger("make_reconciliation_tool")
);
frm.upload_statement_button = frm.page.set_secondary_action(

View File

@@ -320,7 +320,7 @@ frappe.ui.form.on("Bank Statement Import", {
return;
}
frappe.require("data_import_tools.bundle.js", () => {
frappe.require("/assets/js/data_import_tools.min.js", () => {
frm.import_preview = new frappe.data_import.ImportPreview({
wrapper: frm.get_field("import_preview").$wrapper,
doctype: frm.doc.reference_doctype,

View File

@@ -41,9 +41,6 @@ def test_create_test_data():
"selling_cost_center": "Main - _TC",
"income_account": "Sales - _TC"
}],
"show_in_website": 1,
"route":"-test-tesla-car",
"website_warehouse": "Stores - _TC"
})
item.insert()
# create test item price

View File

@@ -45,6 +45,7 @@ class TestDunning(unittest.TestCase):
self.assertEqual(round(amounts.get('dunning_amount'), 2), 20)
self.assertEqual(round(amounts.get('grand_total'), 2), 120)
def test_gl_entries(self):
dunning = create_dunning()
dunning.submit()

View File

@@ -42,4 +42,4 @@ def create_finance_book():
else:
finance_book = frappe.get_doc("Finance Book", "_Test Finance Book")
return finance_book
return finance_book

View File

@@ -194,19 +194,19 @@ var update_jv_details = function(doc, r) {
refresh_field("accounts");
}
erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Controller {
onload() {
erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
onload: function() {
this.load_defaults();
this.setup_queries();
this.setup_balance_formatter();
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
}
},
onload_post_render() {
onload_post_render: function() {
cur_frm.get_field("accounts").grid.set_multiple_add("account");
}
},
load_defaults() {
load_defaults: function() {
//this.frm.show_print_first = true;
if(this.frm.doc.__islocal && this.frm.doc.company) {
frappe.model.set_default_values(this.frm.doc);
@@ -216,9 +216,9 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
var posting_date = this.frm.doc.posting_date;
if(!this.frm.doc.amended_from) this.frm.set_value('posting_date', posting_date || frappe.datetime.get_today());
}
}
},
setup_queries() {
setup_queries: function() {
var me = this;
me.frm.set_query("account", "accounts", function(doc, cdt, cdn) {
@@ -324,9 +324,9 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
});
}
},
setup_balance_formatter() {
setup_balance_formatter: function() {
const formatter = function(value, df, options, doc) {
var currency = frappe.meta.get_field_currency(df, doc);
var dr_or_cr = value ? ('<label>' + (value > 0.0 ? __("Dr") : __("Cr")) + '</label>') : "";
@@ -337,9 +337,9 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
};
this.frm.fields_dict.accounts.grid.update_docfield_property('balance', 'formatter', formatter);
this.frm.fields_dict.accounts.grid.update_docfield_property('party_balance', 'formatter', formatter);
}
},
reference_name(doc, cdt, cdn) {
reference_name: function(doc, cdt, cdn) {
var d = frappe.get_doc(cdt, cdn);
if(d.reference_name) {
@@ -351,9 +351,9 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
this.get_outstanding('Journal Entry', d.reference_name, doc.company, d);
}
}
}
},
get_outstanding(doctype, docname, company, child, due_date) {
get_outstanding: function(doctype, docname, company, child, due_date) {
var me = this;
var args = {
"doctype": doctype,
@@ -375,9 +375,9 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
}
}
});
}
},
accounts_add(doc, cdt, cdn) {
accounts_add: function(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
$.each(doc.accounts, function(i, d) {
if(d.account && d.party && d.party_type) {
@@ -400,9 +400,9 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
cur_frm.cscript.update_totals(doc);
erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'accounts');
}
},
};
});
cur_frm.script_manager.make(erpnext.accounts.JournalEntry);

View File

@@ -85,7 +85,6 @@ class JournalEntry(AccountsController):
self.update_expense_claim()
self.update_inter_company_jv()
self.update_invoice_discounting()
self.update_status_for_full_and_final_statement()
check_if_stock_and_account_balance_synced(self.posting_date,
self.company, self.doctype, self.name)
@@ -103,7 +102,6 @@ class JournalEntry(AccountsController):
self.unlink_inter_company_jv()
self.unlink_asset_adjustment_entry()
self.update_invoice_discounting()
self.update_status_for_full_and_final_statement()
def get_title(self):
return self.pay_to_recd_from or self.accounts[0].account
@@ -119,15 +117,6 @@ class JournalEntry(AccountsController):
for voucher_no in list(set(order_list)):
frappe.get_doc(voucher_type, voucher_no).set_total_advance_paid()
def update_status_for_full_and_final_statement(self):
for entry in self.accounts:
if entry.reference_type == "Full and Final Statement":
if self.docstatus == 1:
frappe.db.set_value("Full and Final Statement", entry.reference_name, "status", "Paid")
elif self.docstatus == 2:
frappe.db.set_value("Full and Final Statement", entry.reference_name, "status", "Unpaid")
def validate_inter_company_accounts(self):
if self.voucher_type == "Inter Company Journal Entry" and self.inter_company_journal_entry_reference:
doc = frappe.get_doc("Journal Entry", self.inter_company_journal_entry_reference)

View File

@@ -202,7 +202,7 @@
"fieldname": "reference_type",
"fieldtype": "Select",
"label": "Reference Type",
"options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nLoan\nPayroll Entry\nEmployee Advance\nExchange Rate Revaluation\nInvoice Discounting\nFees\nFull and Final Statement"
"options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nLoan\nPayroll Entry\nEmployee Advance\nExchange Rate Revaluation\nInvoice Discounting\nFees"
},
{
"fieldname": "reference_name",
@@ -280,7 +280,7 @@
"idx": 1,
"istable": 1,
"links": [],
"modified": "2021-08-30 21:27:32.200299",
"modified": "2020-06-26 14:06:54.833738",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry Account",

View File

@@ -49,15 +49,7 @@ frappe.ui.form.on('Opening Invoice Creation Tool', {
doc: frm.doc,
btn: $(btn_primary),
method: "make_invoices",
freeze: 1,
freeze_message: __("Creating {0} Invoice", [frm.doc.invoice_type]),
callback: function(r) {
if (r.message.length == 1) {
frappe.msgprint(__("{0} Invoice created successfully.", [frm.doc.invoice_type]));
} else if (r.message.length < 50) {
frappe.msgprint(__("{0} Invoices created successfully.", [frm.doc.invoice_type]));
}
}
freeze_message: __("Creating {0} Invoice", [frm.doc.invoice_type])
});
});

View File

@@ -221,8 +221,7 @@ def start_import(invoices):
return names
def publish(index, total, doctype):
if total < 50:
return
if total < 5: return
frappe.publish_realtime(
"opening_invoice_creation_progress",
dict(

View File

@@ -11,14 +11,12 @@ class PartyLink(Document):
if self.primary_role not in ['Customer', 'Supplier']:
frappe.throw(_("Allowed primary roles are 'Customer' and 'Supplier'. Please select one of these roles only."),
title=_("Invalid Primary Role"))
existing_party_link = frappe.get_all('Party Link', {
'primary_party': self.secondary_party
}, pluck="primary_role")
if existing_party_link:
frappe.throw(_('{} {} is already linked with another {}')
.format(self.secondary_role, self.secondary_party, existing_party_link[0]))
existing_party_link = frappe.get_all('Party Link', {
'secondary_party': self.primary_party
}, pluck="primary_role")

View File

@@ -533,7 +533,7 @@ frappe.ui.form.on('Payment Entry', {
source_exchange_rate: function(frm) {
if (frm.doc.paid_amount) {
frm.set_value("base_paid_amount", flt(frm.doc.paid_amount) * flt(frm.doc.source_exchange_rate));
// target exchange rate should always be same as source if both account currencies is same
// target exchange rate should always be same as source if both account currencies are same
if(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) {
frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
frm.set_value("base_received_amount", frm.doc.base_paid_amount);

View File

@@ -2,8 +2,8 @@
// For license information, please see license.txt
frappe.provide("erpnext.accounts");
erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationController extends frappe.ui.form.Controller {
onload() {
erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.extend({
onload: function() {
var me = this;
this.frm.set_query("party_type", function() {
@@ -48,9 +48,9 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
frappe.throw({message: __("Please Select Both Company and Party Type First"), title: title});
}
};
}
},
refresh() {
refresh: function() {
this.frm.disable_save();
this.frm.set_df_property('invoices', 'cannot_delete_rows', true);
this.frm.set_df_property('payments', 'cannot_delete_rows', true);
@@ -82,9 +82,9 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
this.frm.change_custom_button_type('Get Unreconciled Entries', null, 'default');
this.frm.change_custom_button_type('Allocate', null, 'default');
}
}
},
company() {
company: function() {
var me = this;
this.frm.set_value('receivable_payable_account', '');
me.frm.clear_table("allocation");
@@ -92,9 +92,9 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
me.frm.clear_table("payments");
me.frm.refresh_fields();
me.frm.trigger('party');
}
},
party() {
party: function() {
var me = this;
if (!me.frm.doc.receivable_payable_account && me.frm.doc.party_type && me.frm.doc.party) {
return frappe.call({
@@ -112,9 +112,9 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
}
});
}
}
},
get_unreconciled_entries() {
get_unreconciled_entries: function() {
var me = this;
return this.frm.call({
doc: me.frm.doc,
@@ -127,9 +127,9 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
}
});
}
},
allocate() {
allocate: function() {
var me = this;
let payments = me.frm.fields_dict.payments.grid.get_selected_children();
if (!(payments.length)) {
@@ -150,9 +150,9 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
me.frm.refresh();
}
});
}
},
reconcile() {
reconcile: function() {
var me = this;
var show_dialog = me.frm.doc.allocation.filter(d => d.difference_amount && !d.difference_account);
@@ -234,9 +234,9 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
} else {
this.reconcile_payment_entries();
}
}
},
reconcile_payment_entries() {
reconcile_payment_entries: function() {
var me = this;
return this.frm.call({
@@ -249,6 +249,6 @@ erpnext.accounts.PaymentReconciliationController = class PaymentReconciliationCo
}
});
}
};
});
extend_cscript(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({frm: cur_frm}));
$.extend(cur_frm.cscript, new erpnext.accounts.PaymentReconciliationController({frm: cur_frm}));

View File

@@ -293,7 +293,7 @@ class PaymentRequest(Document):
if not status:
return
shopping_cart_settings = frappe.get_doc("Shopping Cart Settings")
shopping_cart_settings = frappe.get_doc("E Commerce Settings")
if status in ["Authorized", "Completed"]:
redirect_to = None
@@ -443,7 +443,7 @@ def get_gateway_details(args):
return get_payment_gateway_account(args.get("payment_gateway_account"))
if args.order_type == "Shopping Cart":
payment_gateway_account = frappe.get_doc("Shopping Cart Settings").payment_gateway_account
payment_gateway_account = frappe.get_doc("E Commerce Settings").payment_gateway_account
return get_payment_gateway_account(payment_gateway_account)
gateway_account = get_payment_gateway_account({"is_default": 1})

View File

@@ -131,7 +131,7 @@ class PeriodClosingVoucher(AccountsController):
sum(t1.debit_in_account_currency) - sum(t1.credit_in_account_currency) as bal_in_account_currency,
sum(t1.debit) - sum(t1.credit) as bal_in_company_currency
from `tabGL Entry` t1, `tabAccount` t2
where t1.is_cancelled = 0 and t1.account = t2.name and t2.report_type = 'Profit and Loss'
where t1.account = t2.name and t2.report_type = 'Profit and Loss'
and t2.docstatus < 2 and t2.company = %s
and t1.posting_date between %s and %s
group by t1.account, {dimension_fields}

View File

@@ -90,15 +90,9 @@ class TestPOSClosingEntry(unittest.TestCase):
pcv_doc.load_from_db()
pcv_doc.cancel()
cancelled_invoice = frappe.db.get_value(
'POS Invoice Merge Log', {'pos_closing_entry': pcv_doc.name},
'consolidated_invoice'
)
docstatus = frappe.db.get_value("Sales Invoice", cancelled_invoice, 'docstatus')
self.assertEqual(docstatus, 2)
si_doc.load_from_db()
pos_inv1.load_from_db()
self.assertEqual(si_doc.docstatus, 2)
self.assertEqual(pos_inv1.status, 'Paid')

View File

@@ -4,29 +4,29 @@
{% include 'erpnext/selling/sales_common.js' %};
frappe.provide("erpnext.accounts");
erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnext.selling.SellingController {
erpnext.selling.POSInvoiceController = erpnext.selling.SellingController.extend({
setup(doc) {
this.setup_posting_date_time_check();
super.setup(doc);
}
this._super(doc);
},
company() {
company: function() {
erpnext.accounts.dimensions.update_dimension(this.frm, this.frm.doctype);
}
},
onload(doc) {
super.onload();
this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log', 'POS Closing Entry'];
this._super();
this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice Merge Log'];
if(doc.__islocal && doc.is_pos && frappe.get_route_str() !== 'point-of-sale') {
this.frm.script_manager.trigger("is_pos");
this.frm.refresh_fields();
}
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
}
},
refresh(doc) {
super.refresh();
this._super();
if (doc.docstatus == 1 && !doc.is_return) {
this.frm.add_custom_button(__('Return'), this.make_sales_return, __('Create'));
this.frm.page.set_inner_btn_group_as_primary(__('Create'));
@@ -36,13 +36,13 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
this.frm.return_print_format = "Sales Invoice Return";
this.frm.set_value('consolidated_invoice', '');
}
}
},
is_pos() {
is_pos: function() {
this.set_pos_data();
}
},
async set_pos_data() {
set_pos_data: async function() {
if(this.frm.doc.is_pos) {
this.frm.set_value("allocate_advances_automatically", 0);
if(!this.frm.doc.company) {
@@ -69,7 +69,7 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
}
}
}
}
},
customer() {
if (!this.frm.doc.customer) return
@@ -86,13 +86,13 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
}, () => {
this.apply_pricing_rule();
});
}
},
amount(){
amount: function(){
this.write_off_outstanding_amount_automatically()
}
},
change_amount(){
change_amount: function(){
if(this.frm.doc.paid_amount > this.frm.doc.grand_total){
this.calculate_write_off_amount();
}else {
@@ -101,14 +101,14 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
}
this.frm.refresh_fields();
}
},
loyalty_amount(){
loyalty_amount: function(){
this.calculate_outstanding_amount();
this.frm.refresh_field("outstanding_amount");
this.frm.refresh_field("paid_amount");
this.frm.refresh_field("base_paid_amount");
}
},
write_off_outstanding_amount_automatically() {
if (cint(this.frm.doc.write_off_outstanding_amount_automatically)) {
@@ -121,17 +121,17 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex
this.calculate_outstanding_amount(false);
this.frm.refresh_fields();
}
},
make_sales_return() {
make_sales_return: function() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_sales_return",
frm: cur_frm
})
}
}
},
})
extend_cscript(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm }))
$.extend(cur_frm.cscript, new erpnext.selling.POSInvoiceController({ frm: cur_frm }))
frappe.ui.form.on('POS Invoice', {
redeem_loyalty_points: function(frm) {

View File

@@ -120,7 +120,6 @@
{
"fieldname": "payments",
"fieldtype": "Table",
"label": "Payment Methods",
"options": "POS Payment Method",
"reqd": 1
},
@@ -378,7 +377,7 @@
"link_fieldname": "pos_profile"
}
],
"modified": "2021-10-14 14:17:00.469298",
"modified": "2021-02-01 13:52:51.081311",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Profile",

View File

@@ -7,8 +7,10 @@ from __future__ import unicode_literals
import unittest
import frappe
from frappe import MandatoryError
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.healthcare.doctype.lab_test_template.lab_test_template import make_item_price
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
from erpnext.stock.doctype.item.test_item import make_item
from erpnext.stock.get_item_details import get_item_details
@@ -17,7 +19,6 @@ from erpnext.stock.get_item_details import get_item_details
class TestPricingRule(unittest.TestCase):
def setUp(self):
delete_existing_pricing_rules()
setup_pricing_rule_data()
def tearDown(self):
delete_existing_pricing_rules()
@@ -560,8 +561,6 @@ class TestPricingRule(unittest.TestCase):
for doc in [si, si1]:
doc.delete()
test_dependencies = ["Campaign"]
def make_pricing_rule(**args):
args = frappe._dict(args)
@@ -608,25 +607,9 @@ def make_pricing_rule(**args):
if args.get(applicable_for):
doc.db_set(applicable_for, args.get(applicable_for))
def setup_pricing_rule_data():
if not frappe.db.exists('Campaign', '_Test Campaign'):
frappe.get_doc({
'doctype': 'Campaign',
'campaign_name': '_Test Campaign',
'name': '_Test Campaign'
}).insert()
def delete_existing_pricing_rules():
for doctype in ["Pricing Rule", "Pricing Rule Item Code",
"Pricing Rule Item Group", "Pricing Rule Brand"]:
frappe.db.sql("delete from `tab{0}`".format(doctype))
def make_item_price(item, price_list_name, item_price):
frappe.get_doc({
'doctype': 'Item Price',
'price_list': price_list_name,
'item_code': item,
'price_list_rate': item_price
}).insert(ignore_permissions=True, ignore_mandatory=True)

View File

@@ -291,7 +291,6 @@
"modified_by": "Administrator",
"module": "Accounts",
"name": "Process Statement Of Accounts",
"naming_rule": "Set by user",
"owner": "Administrator",
"permissions": [
{

View File

@@ -4,10 +4,10 @@
frappe.provide("erpnext.accounts");
{% include 'erpnext/public/js/controllers/buying.js' %};
erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.BuyingController {
setup(doc) {
erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
setup: function(doc) {
this.setup_posting_date_time_check();
super.setup(doc);
this._super(doc);
// formatter for purchase invoice item
if(this.frm.doc.update_stock) {
@@ -25,10 +25,10 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
}
};
});
}
},
onload() {
super.onload();
onload: function() {
this._super();
if(!this.frm.doc.__islocal) {
// show credit_to in print format
@@ -44,11 +44,11 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
}
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
}
},
refresh(doc) {
refresh: function(doc) {
const me = this;
super.refresh();
this._super();
hide_fields(this.frm.doc);
// Show / Hide button
@@ -157,26 +157,26 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
}
this.frm.set_df_property("tax_withholding_category", "hidden", doc.apply_tds ? 0 : 1);
}
},
unblock_invoice() {
unblock_invoice: function() {
const me = this;
frappe.call({
'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.unblock_invoice',
'args': {'name': me.frm.doc.name},
'callback': (r) => me.frm.reload_doc()
});
}
},
block_invoice() {
block_invoice: function() {
this.make_comment_dialog_and_block_invoice();
}
},
change_release_date() {
change_release_date: function() {
this.make_dialog_and_set_release_date();
}
},
can_change_release_date(date) {
can_change_release_date: function(date) {
const diff = frappe.datetime.get_diff(date, frappe.datetime.nowdate());
if (diff < 0) {
frappe.throw(__('New release date should be in the future'));
@@ -184,9 +184,9 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
} else {
return true;
}
}
},
make_comment_dialog_and_block_invoice(){
make_comment_dialog_and_block_invoice: function(){
const me = this;
const title = __('Block Invoice');
@@ -228,9 +228,9 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
});
this.dialog.show();
}
},
make_dialog_and_set_release_date() {
make_dialog_and_set_release_date: function() {
const me = this;
const title = __('Set New Release Date');
@@ -259,17 +259,17 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
});
this.dialog.show();
}
},
set_release_date(data) {
set_release_date: function(data) {
return frappe.call({
'method': 'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.change_release_date',
'args': data,
'callback': (r) => this.frm.reload_doc()
});
}
},
supplier() {
supplier: function() {
var me = this;
// Do not update if inter company reference is there as the details will already be updated
@@ -292,9 +292,9 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
me.frm.set_df_property("apply_tds", "read_only", me.frm.supplier_tds ? 0 : 1);
me.frm.set_df_property("tax_withholding_category", "hidden", me.frm.supplier_tds ? 0 : 1);
})
}
},
apply_tds(frm) {
apply_tds: function(frm) {
var me = this;
if (!me.frm.doc.apply_tds) {
@@ -304,9 +304,9 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
me.frm.set_value("tax_withholding_category", me.frm.supplier_tds);
me.frm.set_df_property("tax_withholding_category", "hidden", 0);
}
}
},
credit_to() {
credit_to: function() {
var me = this;
if(this.frm.doc.credit_to) {
me.frm.call({
@@ -324,16 +324,16 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
}
});
}
}
},
make_inter_company_invoice(frm) {
make_inter_company_invoice: function(frm) {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_inter_company_sales_invoice",
frm: frm
});
}
},
is_paid() {
is_paid: function() {
hide_fields(this.frm.doc);
if(cint(this.frm.doc.is_paid)) {
this.frm.set_value("allocate_advances_automatically", 0);
@@ -344,44 +344,44 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying.
}
this.calculate_outstanding_amount();
this.frm.refresh_fields();
}
},
write_off_amount() {
write_off_amount: function() {
this.set_in_company_currency(this.frm.doc, ["write_off_amount"]);
this.calculate_outstanding_amount();
this.frm.refresh_fields();
}
},
paid_amount() {
paid_amount: function() {
this.set_in_company_currency(this.frm.doc, ["paid_amount"]);
this.write_off_amount();
this.frm.refresh_fields();
}
},
allocated_amount() {
allocated_amount: function() {
this.calculate_total_advance();
this.frm.refresh_fields();
}
},
items_add(doc, cdt, cdn) {
items_add: function(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
this.frm.script_manager.copy_from_first_row("items", row,
["expense_account", "discount_account", "cost_center", "project"]);
}
},
on_submit() {
on_submit: function() {
$.each(this.frm.doc["items"] || [], function(i, row) {
if(row.purchase_receipt) frappe.model.clear_doc("Purchase Receipt", row.purchase_receipt)
})
}
},
make_debit_note() {
make_debit_note: function() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_debit_note",
frm: cur_frm
})
}
};
},
});
cur_frm.script_manager.make(erpnext.accounts.PurchaseInvoice);

View File

@@ -42,9 +42,6 @@ from erpnext.stock.doctype.purchase_receipt.purchase_receipt import (
update_billed_amount_based_on_po,
)
class WarehouseMissingError(frappe.ValidationError): pass
form_grid_templates = {
"items": "templates/form_grid/item_grid.html"
}
@@ -225,8 +222,8 @@ class PurchaseInvoice(BuyingController):
if self.update_stock and for_validate:
for d in self.get('items'):
if not d.warehouse:
frappe.throw(_("Row No {0}: Warehouse is required. Please set a Default Warehouse for Item {1} and Company {2}").
format(d.idx, d.item_code, self.company), exc=WarehouseMissingError)
frappe.throw(_("Warehouse required at Row No {0}, please set default warehouse for the item {1} for the company {2}").
format(d.idx, d.item_code, self.company))
super(PurchaseInvoice, self).validate_warehouse()
@@ -264,7 +261,7 @@ class PurchaseInvoice(BuyingController):
and (not item.po_detail or
not frappe.db.get_value("Purchase Order Item", item.po_detail, "delivered_by_supplier")):
if self.update_stock and item.warehouse and (not item.from_warehouse):
if self.update_stock and (not item.from_warehouse):
if for_validate and item.expense_account and item.expense_account != warehouse_account[item.warehouse]["account"]:
msg = _("Row {0}: Expense Head changed to {1} because account {2} is not linked to warehouse {3} or it is not the default inventory account").format(
item.idx, frappe.bold(warehouse_account[item.warehouse]["account"]), frappe.bold(item.expense_account), frappe.bold(item.warehouse))
@@ -539,10 +536,6 @@ class PurchaseInvoice(BuyingController):
if d.category in ('Valuation', 'Total and Valuation')
and flt(d.base_tax_amount_after_discount_amount)]
exchange_rate_map, net_rate_map = get_purchase_document_details(self)
enable_discount_accounting = cint(frappe.db.get_single_value('Accounts Settings', 'enable_discount_accounting'))
for item in self.get("items"):
if flt(item.base_net_amount):
account_currency = get_account_currency(item.expense_account)
@@ -633,7 +626,7 @@ class PurchaseInvoice(BuyingController):
if (not item.enable_deferred_expense or self.is_return) else item.deferred_expense_account)
if not item.is_fixed_asset:
dummy, amount = self.get_amount_and_base_amount(item, enable_discount_accounting)
dummy, amount = self.get_amount_and_base_amount(item, self.enable_discount_accounting)
else:
amount = flt(item.base_net_amount + item.item_tax_amount, item.precision("base_net_amount"))
@@ -660,34 +653,6 @@ class PurchaseInvoice(BuyingController):
"project": item.project or self.project
}, account_currency, item=item))
# check if the exchange rate has changed
if item.get('purchase_receipt'):
if exchange_rate_map[item.purchase_receipt] and \
self.conversion_rate != exchange_rate_map[item.purchase_receipt] and \
item.net_rate == net_rate_map[item.pr_detail]:
discrepancy_caused_by_exchange_rate_difference = (item.qty * item.net_rate) * \
(exchange_rate_map[item.purchase_receipt] - self.conversion_rate)
gl_entries.append(
self.get_gl_dict({
"account": expense_account,
"against": self.supplier,
"debit": discrepancy_caused_by_exchange_rate_difference,
"cost_center": item.cost_center,
"project": item.project or self.project
}, account_currency, item=item)
)
gl_entries.append(
self.get_gl_dict({
"account": self.get_company_default("exchange_gain_loss_account"),
"against": self.supplier,
"credit": discrepancy_caused_by_exchange_rate_difference,
"cost_center": item.cost_center,
"project": item.project or self.project
}, account_currency, item=item)
)
# If asset is bought through this document and not linked to PR
if self.update_stock and item.landed_cost_voucher_amount:
expenses_included_in_asset_valuation = self.get_company_default("expenses_included_in_asset_valuation")
@@ -875,10 +840,9 @@ class PurchaseInvoice(BuyingController):
def make_tax_gl_entries(self, gl_entries):
# tax table gl entries
valuation_tax = {}
enable_discount_accounting = cint(frappe.db.get_single_value('Accounts Settings', 'enable_discount_accounting'))
for tax in self.get("taxes"):
amount, base_amount = self.get_tax_amounts(tax, enable_discount_accounting)
amount, base_amount = self.get_tax_amounts(tax, self.enable_discount_accounting)
if tax.category in ("Total", "Valuation and Total") and flt(base_amount):
account_currency = get_account_currency(tax.account_head)
@@ -1213,36 +1177,6 @@ class PurchaseInvoice(BuyingController):
if update:
self.db_set('status', self.status, update_modified = update_modified)
# to get details of purchase invoice/receipt from which this doc was created for exchange rate difference handling
def get_purchase_document_details(doc):
if doc.doctype == 'Purchase Invoice':
doc_reference = 'purchase_receipt'
items_reference = 'pr_detail'
parent_doctype = 'Purchase Receipt'
child_doctype = 'Purchase Receipt Item'
else:
doc_reference = 'purchase_invoice'
items_reference = 'purchase_invoice_item'
parent_doctype = 'Purchase Invoice'
child_doctype = 'Purchase Invoice Item'
purchase_receipts_or_invoices = []
items = []
for item in doc.get('items'):
if item.get(doc_reference):
purchase_receipts_or_invoices.append(item.get(doc_reference))
if item.get(items_reference):
items.append(item.get(items_reference))
exchange_rate_map = frappe._dict(frappe.get_all(parent_doctype, filters={'name': ('in',
purchase_receipts_or_invoices)}, fields=['name', 'conversion_rate'], as_list=1))
net_rate_map = frappe._dict(frappe.get_all(child_doctype, filters={'name': ('in',
items)}, fields=['name', 'net_rate'], as_list=1))
return exchange_rate_map, net_rate_map
def get_list_context(context=None):
from erpnext.controllers.website_list_for_contact import get_list_context
list_context = get_list_context(context)

View File

@@ -235,29 +235,6 @@ class TestPurchaseInvoice(unittest.TestCase):
self.assertEqual(expected_values[gle.account][1], gle.debit)
self.assertEqual(expected_values[gle.account][2], gle.credit)
def test_purchase_invoice_with_exchange_rate_difference(self):
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import (
make_purchase_invoice as create_purchase_invoice,
)
pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse='Stores - TCP1',
currency = "USD", conversion_rate = 70)
pi = create_purchase_invoice(pr.name)
pi.conversion_rate = 80
pi.insert()
pi.submit()
# Get exchnage gain and loss account
exchange_gain_loss_account = frappe.db.get_value('Company', pi.company, 'exchange_gain_loss_account')
# fetching the latest GL Entry with exchange gain and loss account account
amount = frappe.db.get_value('GL Entry', {'account': exchange_gain_loss_account, 'voucher_no': pi.name}, 'debit')
discrepancy_caused_by_exchange_rate_diff = abs(pi.items[0].base_net_amount - pr.items[0].base_net_amount)
self.assertEqual(discrepancy_caused_by_exchange_rate_diff, amount)
def test_purchase_invoice_with_discount_accounting_enabled(self):
enable_discount_accounting()
@@ -1230,7 +1207,7 @@ def check_gl_entries(doc, voucher_no, expected_gle, posting_date):
def update_tax_witholding_category(company, account):
from erpnext.accounts.utils import get_fiscal_year
fiscal_year = get_fiscal_year(fiscal_year='2021')
fiscal_year = get_fiscal_year(fiscal_year='_Test Fiscal Year 2021')
if not frappe.db.get_value('Tax Withholding Rate',
{'parent': 'TDS - 194 - Dividends - Individual', 'from_date': ('>=', fiscal_year[1]),

View File

@@ -878,4 +878,4 @@
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC"
}
}

View File

@@ -1,6 +1,8 @@
{% include "erpnext/regional/india/taxes.js" %}
{% include "erpnext/regional/india/e_invoice/einvoice.js" %}
erpnext.setup_auto_gst_taxation('Sales Invoice');
erpnext.setup_einvoice_actions('Sales Invoice')
frappe.ui.form.on("Sales Invoice", {
setup: function(frm) {

View File

@@ -36,4 +36,139 @@ frappe.listview_settings['Sales Invoice'].onload = function (list_view) {
};
list_view.page.add_actions_menu_item(__('Generate E-Way Bill JSON'), action, false);
const generate_irns = () => {
const docnames = list_view.get_checked_items(true);
if (docnames && docnames.length) {
frappe.call({
method: 'erpnext.regional.india.e_invoice.utils.generate_einvoices',
args: { docnames },
freeze: true,
freeze_message: __('Generating E-Invoices...')
});
} else {
frappe.msgprint({
message: __('Please select at least one sales invoice to generate IRN'),
title: __('No Invoice Selected'),
indicator: 'red'
});
}
};
const cancel_irns = () => {
const docnames = list_view.get_checked_items(true);
const fields = [
{
"label": "Reason",
"fieldname": "reason",
"fieldtype": "Select",
"reqd": 1,
"default": "1-Duplicate",
"options": ["1-Duplicate", "2-Data Entry Error", "3-Order Cancelled", "4-Other"]
},
{
"label": "Remark",
"fieldname": "remark",
"fieldtype": "Data",
"reqd": 1
}
];
const d = new frappe.ui.Dialog({
title: __("Cancel IRN"),
fields: fields,
primary_action: function() {
const data = d.get_values();
frappe.call({
method: 'erpnext.regional.india.e_invoice.utils.cancel_irns',
args: {
doctype: list_view.doctype,
docnames,
reason: data.reason.split('-')[0],
remark: data.remark
},
freeze: true,
freeze_message: __('Cancelling E-Invoices...'),
});
d.hide();
},
primary_action_label: __('Submit')
});
d.show();
};
let einvoicing_enabled = false;
frappe.db.get_single_value("E Invoice Settings", "enable").then(enabled => {
einvoicing_enabled = enabled;
});
list_view.$result.on("change", "input[type=checkbox]", () => {
if (einvoicing_enabled) {
const docnames = list_view.get_checked_items(true);
// show/hide e-invoicing actions when no sales invoices are checked
if (docnames && docnames.length) {
// prevent adding actions twice if e-invoicing action group already exists
if (list_view.page.get_inner_group_button(__('E-Invoicing')).length == 0) {
list_view.page.add_inner_button(__('Generate IRNs'), generate_irns, __('E-Invoicing'));
list_view.page.add_inner_button(__('Cancel IRNs'), cancel_irns, __('E-Invoicing'));
}
} else {
list_view.page.remove_inner_button(__('Generate IRNs'), __('E-Invoicing'));
list_view.page.remove_inner_button(__('Cancel IRNs'), __('E-Invoicing'));
}
}
});
frappe.realtime.on("bulk_einvoice_generation_complete", (data) => {
const { failures, user, invoices } = data;
if (invoices.length != failures.length) {
frappe.msgprint({
message: __('{0} e-invoices generated successfully', [invoices.length]),
title: __('Bulk E-Invoice Generation Complete'),
indicator: 'orange'
});
}
if (failures && failures.length && user == frappe.session.user) {
let message = `
Failed to generate IRNs for following ${failures.length} sales invoices:
<ul style="padding-left: 20px; padding-top: 5px;">
${failures.map(d => `<li>${d.docname}</li>`).join('')}
</ul>
`;
frappe.msgprint({
message: message,
title: __('Bulk E-Invoice Generation Complete'),
indicator: 'orange'
});
}
});
frappe.realtime.on("bulk_einvoice_cancellation_complete", (data) => {
const { failures, user, invoices } = data;
if (invoices.length != failures.length) {
frappe.msgprint({
message: __('{0} e-invoices cancelled successfully', [invoices.length]),
title: __('Bulk E-Invoice Cancellation Complete'),
indicator: 'orange'
});
}
if (failures && failures.length && user == frappe.session.user) {
let message = `
Failed to cancel IRNs for following ${failures.length} sales invoices:
<ul style="padding-left: 20px; padding-top: 5px;">
${failures.map(d => `<li>${d.docname}</li>`).join('')}
</ul>
`;
frappe.msgprint({
message: message,
title: __('Bulk E-Invoice Cancellation Complete'),
indicator: 'orange'
});
}
});
};

View File

@@ -5,17 +5,17 @@
frappe.provide("erpnext.accounts");
erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends erpnext.selling.SellingController {
setup(doc) {
erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.extend({
setup: function(doc) {
this.setup_posting_date_time_check();
super.setup(doc);
}
company() {
this._super(doc);
},
company: function() {
erpnext.accounts.dimensions.update_dimension(this.frm, this.frm.doctype);
}
onload() {
},
onload: function() {
var me = this;
super.onload();
this._super();
this.frm.ignore_doctypes_on_cancel_all = ['POS Invoice', 'Timesheet', 'POS Invoice Merge Log', 'POS Closing Entry'];
if(!this.frm.doc.__islocal && !this.frm.doc.customer && this.frm.doc.debit_to) {
@@ -35,11 +35,11 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
erpnext.queries.setup_warehouse_query(this.frm);
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
}
},
refresh(doc, dt, dn) {
refresh: function(doc, dt, dn) {
const me = this;
super.refresh();
this._super();
if(cur_frm.msgbox && cur_frm.msgbox.$wrapper.is(":visible")) {
// hide new msgbox
cur_frm.msgbox.hide();
@@ -138,28 +138,28 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}, __('Create'));
}
}
}
},
make_maintenance_schedule() {
make_maintenance_schedule: function() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_maintenance_schedule",
frm: cur_frm
})
}
},
on_submit(doc, dt, dn) {
on_submit: function(doc, dt, dn) {
var me = this;
if (frappe.get_route()[0] != 'Form') {
return
}
doc.items.forEach((row) => {
$.each(doc["items"], function(i, row) {
if(row.delivery_note) frappe.model.clear_doc("Delivery Note", row.delivery_note)
});
}
})
},
set_default_print_format() {
set_default_print_format: function() {
// set default print format to POS type or Credit Note
if(cur_frm.doc.is_pos) {
if(cur_frm.pos_print_format) {
@@ -180,9 +180,9 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
cur_frm.meta._default_print_format = null;
}
}
}
},
sales_order_btn() {
sales_order_btn: function() {
var me = this;
this.$sales_order_btn = this.frm.add_custom_button(__('Sales Order'),
function() {
@@ -201,9 +201,9 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
})
}, __("Get Items From"));
}
},
quotation_btn() {
quotation_btn: function() {
var me = this;
this.$quotation_btn = this.frm.add_custom_button(__('Quotation'),
function() {
@@ -225,9 +225,9 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
})
}, __("Get Items From"));
}
},
delivery_note_btn() {
delivery_note_btn: function() {
var me = this;
this.$delivery_note_btn = this.frm.add_custom_button(__('Delivery Note'),
function() {
@@ -253,12 +253,12 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
});
}, __("Get Items From"));
}
},
tc_name() {
tc_name: function() {
this.get_terms();
}
customer() {
},
customer: function() {
if (this.frm.doc.is_pos){
var pos_profile = this.frm.doc.pos_profile;
}
@@ -289,16 +289,16 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
});
}
}
},
make_inter_company_invoice() {
make_inter_company_invoice: function() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_inter_company_purchase_invoice",
frm: me.frm
});
}
},
debit_to() {
debit_to: function() {
var me = this;
if(this.frm.doc.debit_to) {
me.frm.call({
@@ -316,12 +316,12 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
});
}
}
},
allocated_amount() {
allocated_amount: function() {
this.calculate_total_advance();
this.frm.refresh_fields();
}
},
write_off_outstanding_amount_automatically() {
if (cint(this.frm.doc.write_off_outstanding_amount_automatically)) {
@@ -334,39 +334,39 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
this.calculate_outstanding_amount(false);
this.frm.refresh_fields();
}
},
write_off_amount() {
write_off_amount: function() {
this.set_in_company_currency(this.frm.doc, ["write_off_amount"]);
this.write_off_outstanding_amount_automatically();
}
},
items_add(doc, cdt, cdn) {
items_add: function(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
this.frm.script_manager.copy_from_first_row("items", row, ["income_account", "discount_account", "cost_center"]);
}
},
set_dynamic_labels() {
super.set_dynamic_labels();
set_dynamic_labels: function() {
this._super();
this.frm.events.hide_fields(this.frm)
}
},
items_on_form_rendered() {
items_on_form_rendered: function() {
erpnext.setup_serial_or_batch_no();
}
},
packed_items_on_form_rendered(doc, grid_row) {
packed_items_on_form_rendered: function(doc, grid_row) {
erpnext.setup_serial_or_batch_no();
}
},
make_sales_return() {
make_sales_return: function() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_sales_return",
frm: cur_frm
})
}
},
asset(frm, cdt, cdn) {
asset: function(frm, cdt, cdn) {
var row = locals[cdt][cdn];
if(row.asset) {
frappe.call({
@@ -380,18 +380,18 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
})
}
}
},
is_pos(frm){
is_pos: function(frm){
this.set_pos_data();
}
},
pos_profile() {
pos_profile: function() {
this.frm.doc.taxes = []
this.set_pos_data();
}
},
set_pos_data() {
set_pos_data: function() {
if(this.frm.doc.is_pos) {
this.frm.set_value("allocate_advances_automatically", 0);
if(!this.frm.doc.company) {
@@ -421,13 +421,13 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
}
else this.frm.trigger("refresh");
}
},
amount(){
amount: function(){
this.write_off_outstanding_amount_automatically()
}
},
change_amount(){
change_amount: function(){
if(this.frm.doc.paid_amount > this.frm.doc.grand_total){
this.calculate_write_off_amount();
}else {
@@ -436,18 +436,18 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
}
this.frm.refresh_fields();
}
},
loyalty_amount(){
loyalty_amount: function(){
this.calculate_outstanding_amount();
this.frm.refresh_field("outstanding_amount");
this.frm.refresh_field("paid_amount");
this.frm.refresh_field("base_paid_amount");
}
},
currency() {
var me = this;
super.currency();
this._super();
if (this.frm.doc.timesheets) {
this.frm.doc.timesheets.forEach((d) => {
let row = frappe.get_doc(d.doctype, d.name)
@@ -456,10 +456,10 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e
frm.trigger("calculate_timesheet_totals");
}
}
};
});
// for backward compatibility: combine new and previous states
extend_cscript(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_frm}));
$.extend(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_frm}));
cur_frm.cscript['Make Delivery Note'] = function() {
frappe.model.open_mapped_doc({
@@ -1000,12 +1000,14 @@ frappe.ui.form.on('Sales Invoice', {
}
});
frappe.ui.form.on("Sales Invoice Timesheet", {
timesheets_remove(frm) {
frm.trigger("calculate_timesheet_totals");
}
});
var set_timesheet_detail_rate = function(cdt, cdn, currency, timelog) {
frappe.call({
method: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet_detail_rate",
@@ -1051,3 +1053,276 @@ var select_loyalty_program = function(frm, loyalty_programs) {
dialog.show();
}
// Healthcare
var get_healthcare_services_to_invoice = function(frm) {
var me = this;
let selected_patient = '';
var dialog = new frappe.ui.Dialog({
title: __("Get Items from Healthcare Services"),
fields:[
{
fieldtype: 'Link',
options: 'Patient',
label: 'Patient',
fieldname: "patient",
reqd: true
},
{ fieldtype: 'Section Break' },
{ fieldtype: 'HTML', fieldname: 'results_area' }
]
});
var $wrapper;
var $results;
var $placeholder;
dialog.set_values({
'patient': frm.doc.patient
});
dialog.fields_dict["patient"].df.onchange = () => {
var patient = dialog.fields_dict.patient.input.value;
if(patient && patient!=selected_patient){
selected_patient = patient;
var method = "erpnext.healthcare.utils.get_healthcare_services_to_invoice";
var args = {patient: patient, company: frm.doc.company};
var columns = (["service", "reference_name", "reference_type"]);
get_healthcare_items(frm, true, $results, $placeholder, method, args, columns);
}
else if(!patient){
selected_patient = '';
$results.empty();
$results.append($placeholder);
}
}
$wrapper = dialog.fields_dict.results_area.$wrapper.append(`<div class="results"
style="border: 1px solid #d1d8dd; border-radius: 3px; height: 300px; overflow: auto;"></div>`);
$results = $wrapper.find('.results');
$placeholder = $(`<div class="multiselect-empty-state">
<span class="text-center" style="margin-top: -40px;">
<i class="fa fa-2x fa-heartbeat text-extra-muted"></i>
<p class="text-extra-muted">No billable Healthcare Services found</p>
</span>
</div>`);
$results.on('click', '.list-item--head :checkbox', (e) => {
$results.find('.list-item-container .list-row-check')
.prop("checked", ($(e.target).is(':checked')));
});
set_primary_action(frm, dialog, $results, true);
dialog.show();
};
var get_healthcare_items = function(frm, invoice_healthcare_services, $results, $placeholder, method, args, columns) {
var me = this;
$results.empty();
frappe.call({
method: method,
args: args,
callback: function(data) {
if(data.message){
$results.append(make_list_row(columns, invoice_healthcare_services));
for(let i=0; i<data.message.length; i++){
$results.append(make_list_row(columns, invoice_healthcare_services, data.message[i]));
}
}else {
$results.append($placeholder);
}
}
});
}
var make_list_row= function(columns, invoice_healthcare_services, result={}) {
var me = this;
// Make a head row by default (if result not passed)
let head = Object.keys(result).length === 0;
let contents = ``;
columns.forEach(function(column) {
contents += `<div class="list-item__content ellipsis">
${
head ? `<span class="ellipsis">${__(frappe.model.unscrub(column))}</span>`
:(column !== "name" ? `<span class="ellipsis">${__(result[column])}</span>`
: `<a class="list-id ellipsis">
${__(result[column])}</a>`)
}
</div>`;
})
let $row = $(`<div class="list-item">
<div class="list-item__content" style="flex: 0 0 10px;">
<input type="checkbox" class="list-row-check" ${result.checked ? 'checked' : ''}>
</div>
${contents}
</div>`);
$row = list_row_data_items(head, $row, result, invoice_healthcare_services);
return $row;
};
var set_primary_action= function(frm, dialog, $results, invoice_healthcare_services) {
var me = this;
dialog.set_primary_action(__('Add'), function() {
let checked_values = get_checked_values($results);
if(checked_values.length > 0){
if(invoice_healthcare_services) {
frm.set_value("patient", dialog.fields_dict.patient.input.value);
}
frm.set_value("items", []);
add_to_item_line(frm, checked_values, invoice_healthcare_services);
dialog.hide();
}
else{
if(invoice_healthcare_services){
frappe.msgprint(__("Please select Healthcare Service"));
}
else{
frappe.msgprint(__("Please select Drug"));
}
}
});
};
var get_checked_values= function($results) {
return $results.find('.list-item-container').map(function() {
let checked_values = {};
if ($(this).find('.list-row-check:checkbox:checked').length > 0 ) {
checked_values['dn'] = $(this).attr('data-dn');
checked_values['dt'] = $(this).attr('data-dt');
checked_values['item'] = $(this).attr('data-item');
if($(this).attr('data-rate') != 'undefined'){
checked_values['rate'] = $(this).attr('data-rate');
}
else{
checked_values['rate'] = false;
}
if($(this).attr('data-income-account') != 'undefined'){
checked_values['income_account'] = $(this).attr('data-income-account');
}
else{
checked_values['income_account'] = false;
}
if($(this).attr('data-qty') != 'undefined'){
checked_values['qty'] = $(this).attr('data-qty');
}
else{
checked_values['qty'] = false;
}
if($(this).attr('data-description') != 'undefined'){
checked_values['description'] = $(this).attr('data-description');
}
else{
checked_values['description'] = false;
}
return checked_values;
}
}).get();
};
var get_drugs_to_invoice = function(frm) {
var me = this;
let selected_encounter = '';
var dialog = new frappe.ui.Dialog({
title: __("Get Items from Prescriptions"),
fields:[
{ fieldtype: 'Link', options: 'Patient', label: 'Patient', fieldname: "patient", reqd: true },
{ fieldtype: 'Link', options: 'Patient Encounter', label: 'Patient Encounter', fieldname: "encounter", reqd: true,
description:'Quantity will be calculated only for items which has "Nos" as UoM. You may change as required for each invoice item.',
get_query: function(doc) {
return {
filters: {
patient: dialog.get_value("patient"),
company: frm.doc.company,
docstatus: 1
}
};
}
},
{ fieldtype: 'Section Break' },
{ fieldtype: 'HTML', fieldname: 'results_area' }
]
});
var $wrapper;
var $results;
var $placeholder;
dialog.set_values({
'patient': frm.doc.patient,
'encounter': ""
});
dialog.fields_dict["encounter"].df.onchange = () => {
var encounter = dialog.fields_dict.encounter.input.value;
if(encounter && encounter!=selected_encounter){
selected_encounter = encounter;
var method = "erpnext.healthcare.utils.get_drugs_to_invoice";
var args = {encounter: encounter};
var columns = (["drug_code", "quantity", "description"]);
get_healthcare_items(frm, false, $results, $placeholder, method, args, columns);
}
else if(!encounter){
selected_encounter = '';
$results.empty();
$results.append($placeholder);
}
}
$wrapper = dialog.fields_dict.results_area.$wrapper.append(`<div class="results"
style="border: 1px solid #d1d8dd; border-radius: 3px; height: 300px; overflow: auto;"></div>`);
$results = $wrapper.find('.results');
$placeholder = $(`<div class="multiselect-empty-state">
<span class="text-center" style="margin-top: -40px;">
<i class="fa fa-2x fa-heartbeat text-extra-muted"></i>
<p class="text-extra-muted">No Drug Prescription found</p>
</span>
</div>`);
$results.on('click', '.list-item--head :checkbox', (e) => {
$results.find('.list-item-container .list-row-check')
.prop("checked", ($(e.target).is(':checked')));
});
set_primary_action(frm, dialog, $results, false);
dialog.show();
};
var list_row_data_items = function(head, $row, result, invoice_healthcare_services) {
if(invoice_healthcare_services){
head ? $row.addClass('list-item--head')
: $row = $(`<div class="list-item-container"
data-dn= "${result.reference_name}" data-dt= "${result.reference_type}" data-item= "${result.service}"
data-rate = ${result.rate}
data-income-account = "${result.income_account}"
data-qty = ${result.qty}
data-description = "${result.description}">
</div>`).append($row);
}
else{
head ? $row.addClass('list-item--head')
: $row = $(`<div class="list-item-container"
data-item= "${result.drug_code}"
data-qty = ${result.quantity}
data-description = "${result.description}">
</div>`).append($row);
}
return $row
};
var add_to_item_line = function(frm, checked_values, invoice_healthcare_services){
if(invoice_healthcare_services){
frappe.call({
doc: frm.doc,
method: "set_healthcare_services",
args:{
checked_values: checked_values
},
callback: function() {
frm.trigger("validate");
frm.refresh_fields();
}
});
}
else{
for(let i=0; i<checked_values.length; i++){
var si_item = frappe.model.add_child(frm.doc, 'Sales Invoice Item', 'items');
frappe.model.set_value(si_item.doctype, si_item.name, 'item_code', checked_values[i]['item']);
frappe.model.set_value(si_item.doctype, si_item.name, 'qty', 1);
if(checked_values[i]['qty'] > 1){
frappe.model.set_value(si_item.doctype, si_item.name, 'qty', parseFloat(checked_values[i]['qty']));
}
}
frm.refresh_fields();
}
};

View File

@@ -40,6 +40,7 @@ from erpnext.assets.doctype.asset.depreciation import (
post_depreciation_entries,
)
from erpnext.controllers.selling_controller import SellingController
from erpnext.healthcare.utils import manage_invoice_submit_cancel
from erpnext.projects.doctype.timesheet.timesheet import get_projectwise_timesheet_data
from erpnext.setup.doctype.company.company import update_company_current_month_sales
from erpnext.stock.doctype.batch.batch import set_batch_nos
@@ -259,6 +260,13 @@ class SalesInvoice(SellingController):
if self.redeem_loyalty_points and not self.is_consolidated and self.loyalty_points:
self.apply_loyalty_points()
# Healthcare Service Invoice.
domain_settings = frappe.get_doc('Domain Settings')
active_domains = [d.domain for d in domain_settings.active_domains]
if "Healthcare" in active_domains:
manage_invoice_submit_cancel(self, "on_submit")
self.process_common_party_accounting()
def validate_pos_return(self):
@@ -293,6 +301,8 @@ class SalesInvoice(SellingController):
def before_cancel(self):
self.check_if_consolidated_invoice()
super(SalesInvoice, self).before_cancel()
self.update_time_sheet(None)
def on_cancel(self):
@@ -341,6 +351,12 @@ class SalesInvoice(SellingController):
unlink_inter_company_doc(self.doctype, self.name, self.inter_company_invoice_reference)
# Healthcare Service Invoice.
domain_settings = frappe.get_doc('Domain Settings')
active_domains = [d.domain for d in domain_settings.active_domains]
if "Healthcare" in active_domains:
manage_invoice_submit_cancel(self, "on_cancel")
self.unlink_sales_invoice_from_timesheets()
self.ignore_linked_doctypes = ('GL Entry', 'Stock Ledger Entry', 'Repost Item Valuation')
@@ -887,10 +903,8 @@ class SalesInvoice(SellingController):
)
def make_tax_gl_entries(self, gl_entries):
enable_discount_accounting = cint(frappe.db.get_single_value('Accounts Settings', 'enable_discount_accounting'))
for tax in self.get("taxes"):
amount, base_amount = self.get_tax_amounts(tax, enable_discount_accounting)
amount, base_amount = self.get_tax_amounts(tax, self.enable_discount_accounting)
if flt(tax.base_tax_amount_after_discount_amount):
account_currency = get_account_currency(tax.account_head)
@@ -921,8 +935,6 @@ class SalesInvoice(SellingController):
def make_item_gl_entries(self, gl_entries):
# income account gl entries
enable_discount_accounting = cint(frappe.db.get_single_value('Accounts Settings', 'enable_discount_accounting'))
for item in self.get("items"):
if flt(item.base_net_amount, item.precision("base_net_amount")):
if item.is_fixed_asset:
@@ -956,7 +968,7 @@ class SalesInvoice(SellingController):
income_account = (item.income_account
if (not item.enable_deferred_revenue or self.is_return) else item.deferred_revenue_account)
amount, base_amount = self.get_amount_and_base_amount(item, enable_discount_accounting)
amount, base_amount = self.get_amount_and_base_amount(item, self.enable_discount_accounting)
account_currency = get_account_currency(income_account)
gl_entries.append(
@@ -1420,6 +1432,45 @@ class SalesInvoice(SellingController):
if points_to_redeem < 1: # since points_to_redeem is integer
break
# Healthcare
@frappe.whitelist()
def set_healthcare_services(self, checked_values):
self.set("items", [])
from erpnext.stock.get_item_details import get_item_details
for checked_item in checked_values:
item_line = self.append("items", {})
price_list, price_list_currency = frappe.db.get_values("Price List", {"selling": 1}, ['name', 'currency'])[0]
args = {
'doctype': "Sales Invoice",
'item_code': checked_item['item'],
'company': self.company,
'customer': frappe.db.get_value("Patient", self.patient, "customer"),
'selling_price_list': price_list,
'price_list_currency': price_list_currency,
'plc_conversion_rate': 1.0,
'conversion_rate': 1.0
}
item_details = get_item_details(args)
item_line.item_code = checked_item['item']
item_line.qty = 1
if checked_item['qty']:
item_line.qty = checked_item['qty']
if checked_item['rate']:
item_line.rate = checked_item['rate']
else:
item_line.rate = item_details.price_list_rate
item_line.amount = float(item_line.rate) * float(item_line.qty)
if checked_item['income_account']:
item_line.income_account = checked_item['income_account']
if checked_item['dt']:
item_line.reference_dt = checked_item['dt']
if checked_item['dn']:
item_line.reference_dn = checked_item['dn']
if checked_item['description']:
item_line.description = checked_item['description']
self.set_missing_values(for_validate = True)
def set_status(self, update=False, status=None, update_modified=True):
if self.is_new():
if self.get('amended_from'):

View File

@@ -11,10 +11,8 @@ from frappe.model.naming import make_autoname
from frappe.utils import add_days, flt, getdate, nowdate
from six import iteritems
import erpnext
from erpnext.accounts.doctype.account.test_account import create_account, get_inventory_account
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
from erpnext.accounts.doctype.purchase_invoice.purchase_invoice import WarehouseMissingError
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import (
unlink_payment_on_cancel_of_invoice,
)
@@ -1123,6 +1121,15 @@ class TestSalesInvoice(unittest.TestCase):
def test_gle_made_when_asset_is_returned(self):
create_asset_data()
pi = frappe.new_doc('Purchase Invoice')
pi.supplier = '_Test Supplier'
pi.append('items', {
'item_code': 'Macbook Pro',
'qty': 1
})
pi.set_missing_values()
asset = create_asset(item_code="Macbook Pro")
si = create_sales_invoice(item_code="Macbook Pro", asset=asset.name, qty=1, rate=90000)
@@ -1164,6 +1171,18 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEqual(debit_amount, 10.0)
self.assertEqual(incoming_rate, 10.0)
def test_incoming_rate_for_stand_alone_credit_note(self):
return_si = create_sales_invoice(is_return=1, update_stock=1, qty=-1, rate=90000, incoming_rate=10,
company='_Test Company with perpetual inventory', warehouse='Stores - TCP1', debit_to='Debtors - TCP1',
income_account='Sales - TCP1', expense_account='Cost of Goods Sold - TCP1', cost_center='Main - TCP1')
incoming_rate = frappe.db.get_value('Stock Ledger Entry', {'voucher_no': return_si.name}, 'incoming_rate')
debit_amount = frappe.db.get_value('GL Entry',
{'voucher_no': return_si.name, 'account': 'Stock In Hand - TCP1'}, 'debit')
self.assertEqual(debit_amount, 10.0)
self.assertEqual(incoming_rate, 10.0)
def test_discount_on_net_total(self):
si = frappe.copy_doc(test_records[2])
si.apply_discount_on = "Net Total"
@@ -1938,89 +1957,6 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEqual(target_doc.company, "_Test Company 1")
self.assertEqual(target_doc.supplier, "_Test Internal Supplier")
def test_inter_company_transaction_without_default_warehouse(self):
"Check mapping (expense account) of inter company SI to PI in absence of default warehouse."
# setup
old_negative_stock = frappe.db.get_single_value("Stock Settings", "allow_negative_stock")
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
old_perpetual_inventory = erpnext.is_perpetual_inventory_enabled('_Test Company 1')
frappe.local.enable_perpetual_inventory['_Test Company 1'] = 1
frappe.db.set_value("Company", '_Test Company 1', "stock_received_but_not_billed", "Stock Received But Not Billed - _TC1")
frappe.db.set_value("Company", '_Test Company 1', "expenses_included_in_valuation", "Expenses Included In Valuation - _TC1")
if not frappe.db.exists("Customer", "_Test Internal Customer"):
customer = frappe.get_doc({
"customer_group": "_Test Customer Group",
"customer_name": "_Test Internal Customer",
"customer_type": "Individual",
"doctype": "Customer",
"territory": "_Test Territory",
"is_internal_customer": 1,
"represents_company": "_Test Company 1"
})
customer.append("companies", {
"company": "Wind Power LLC"
})
customer.insert()
if not frappe.db.exists("Supplier", "_Test Internal Supplier"):
supplier = frappe.get_doc({
"supplier_group": "_Test Supplier Group",
"supplier_name": "_Test Internal Supplier",
"doctype": "Supplier",
"is_internal_supplier": 1,
"represents_company": "Wind Power LLC"
})
supplier.append("companies", {
"company": "_Test Company 1"
})
supplier.insert()
# begin test
si = create_sales_invoice(
company = "Wind Power LLC",
customer = "_Test Internal Customer",
debit_to = "Debtors - WP",
warehouse = "Stores - WP",
income_account = "Sales - WP",
expense_account = "Cost of Goods Sold - WP",
cost_center = "Main - WP",
currency = "USD",
update_stock = 1,
do_not_save = 1
)
si.selling_price_list = "_Test Price List Rest of the World"
si.submit()
target_doc = make_inter_company_transaction("Sales Invoice", si.name)
# in absence of warehouse Stock Received But Not Billed is set as expense account while mapping
# mapping is not obstructed
self.assertIsNone(target_doc.items[0].warehouse)
self.assertEqual(target_doc.items[0].expense_account, "Stock Received But Not Billed - _TC1")
target_doc.items[0].update({"cost_center": "Main - _TC1"})
# missing warehouse is validated on save, after mapping
self.assertRaises(WarehouseMissingError, target_doc.save)
target_doc.items[0].update({"warehouse": "Stores - _TC1"})
target_doc.save()
# after warehouse is set, linked account or default inventory account is set
self.assertEqual(target_doc.items[0].expense_account, 'Stock In Hand - _TC1')
# tear down
frappe.local.enable_perpetual_inventory['_Test Company 1'] = old_perpetual_inventory
frappe.db.set_value("Stock Settings", None, "allow_negative_stock", old_negative_stock)
def test_sle_for_target_warehouse(self):
se = make_stock_entry(
item_code="138-CMS Shoe",
@@ -2158,6 +2094,54 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEqual(data['billLists'][0]['actualFromStateCode'],7)
self.assertEqual(data['billLists'][0]['fromStateCode'],27)
def test_einvoice_submission_without_irn(self):
# init
einvoice_settings = frappe.get_doc('E Invoice Settings')
einvoice_settings.enable = 1
einvoice_settings.applicable_from = nowdate()
einvoice_settings.append('credentials', {
'company': '_Test Company',
'gstin': '27AAECE4835E1ZR',
'username': 'test',
'password': 'test'
})
einvoice_settings.save()
country = frappe.flags.country
frappe.flags.country = 'India'
si = make_sales_invoice_for_ewaybill()
self.assertRaises(frappe.ValidationError, si.submit)
si.irn = 'test_irn'
si.submit()
# reset
einvoice_settings = frappe.get_doc('E Invoice Settings')
einvoice_settings.enable = 0
frappe.flags.country = country
def test_einvoice_json(self):
from erpnext.regional.india.e_invoice.utils import make_einvoice, validate_totals
si = get_sales_invoice_for_e_invoice()
si.discount_amount = 100
si.save()
einvoice = make_einvoice(si)
self.assertTrue(einvoice['EwbDtls'])
validate_totals(einvoice)
si.apply_discount_on = 'Net Total'
si.save()
einvoice = make_einvoice(si)
validate_totals(einvoice)
[d.set('included_in_print_rate', 1) for d in si.taxes]
si.save()
einvoice = make_einvoice(si)
validate_totals(einvoice)
def test_item_tax_net_range(self):
item = create_item("T Shirt")
@@ -2395,11 +2379,11 @@ def get_sales_invoice_for_e_invoice():
return si
def make_test_address_for_ewaybill():
if not frappe.db.exists('Address', '_Test Address for Eway bill-Billing'):
address = frappe.get_doc({
"address_line1": "_Test Address Line 1",
"address_line2": "_Test Address Line 2",
"address_title": "_Test Address for Eway bill",
"address_type": "Billing",
"city": "_Test City",
@@ -2421,12 +2405,11 @@ def make_test_address_for_ewaybill():
address.save()
if not frappe.db.exists('Address', '_Test Customer-Address for Eway bill-Billing'):
if not frappe.db.exists('Address', '_Test Customer-Address for Eway bill-Shipping'):
address = frappe.get_doc({
"address_line1": "_Test Address Line 1",
"address_line2": "_Test Address Line 2",
"address_title": "_Test Customer-Address for Eway bill",
"address_type": "Billing",
"address_type": "Shipping",
"city": "_Test City",
"state": "Test State",
"country": "India",
@@ -2446,34 +2429,9 @@ def make_test_address_for_ewaybill():
address.save()
if not frappe.db.exists('Address', '_Test Customer-Address for Eway bill-Shipping'):
address = frappe.get_doc({
"address_line1": "_Test Address Line 1",
"address_line2": "_Test Address Line 2",
"address_title": "_Test Customer-Address for Eway bill",
"address_type": "Shipping",
"city": "_Test City",
"state": "Test State",
"country": "India",
"doctype": "Address",
"is_primary_address": 1,
"phone": "+910000000000",
"gst_state": "Maharashtra",
"gst_state_number": "27",
"pincode": "410098"
}).insert()
address.append("links", {
"link_doctype": "Customer",
"link_name": "_Test Customer"
})
address.save()
if not frappe.db.exists('Address', '_Test Dispatch-Address for Eway bill-Shipping'):
address = frappe.get_doc({
"address_line1": "_Test Dispatch Address Line 1",
"address_line2": "_Test Dispatch Address Line 2",
"address_title": "_Test Dispatch-Address for Eway bill",
"address_type": "Shipping",
"city": "_Test City",
@@ -2488,6 +2446,11 @@ def make_test_address_for_ewaybill():
"pincode": "1100101"
}).insert()
address.append("links", {
"link_doctype": "Company",
"link_name": "_Test Company"
})
address.save()
def make_test_transporter_for_ewaybill():
@@ -2527,8 +2490,7 @@ def make_sales_invoice_for_ewaybill():
si.distance = 2000
si.company_address = "_Test Address for Eway bill-Billing"
si.customer_address = "_Test Customer-Address for Eway bill-Billing"
si.shipping_address_name = "_Test Customer-Address for Eway bill-Shipping"
si.customer_address = "_Test Customer-Address for Eway bill-Shipping"
si.dispatch_address_name = "_Test Dispatch-Address for Eway bill-Shipping"
si.vehicle_no = "KA12KA1234"
si.gst_category = "Registered Regular"
@@ -2597,9 +2559,9 @@ def create_sales_invoice(**args):
"price_list_rate": args.price_list_rate if args.get("price_list_rate") is not None else 100,
"income_account": args.income_account or "Sales - _TC",
"expense_account": args.expense_account or "Cost of Goods Sold - _TC",
"asset": args.asset or None,
"discount_account": args.discount_account or None,
"discount_amount": args.discount_amount or 0,
"asset": args.asset or None,
"cost_center": args.cost_center or "_Test Cost Center - _TC",
"serial_no": args.serial_no,
"conversion_factor": 1,

View File

@@ -745,6 +745,7 @@
"fieldname": "asset",
"fieldtype": "Link",
"label": "Asset",
"no_copy": 1,
"options": "Asset"
},
{
@@ -841,4 +842,4 @@
"permissions": [],
"sort_field": "modified",
"sort_order": "DESC"
}
}

View File

@@ -4,3 +4,26 @@
cur_frm.cscript.tax_table = "Sales Taxes and Charges";
{% include "erpnext/public/js/controllers/accounts.js" %}
frappe.tour['Sales Taxes and Charges Template'] = [
{
fieldname: "title",
title: __("Title"),
description: __("A name by which you will identify this template. You can change this later."),
},
{
fieldname: "company",
title: __("Company"),
description: __("Company for which this tax template will be applicable"),
},
{
fieldname: "is_default",
title: __("Is this Default?"),
description: __("Set this template as the default for all sales transactions"),
},
{
fieldname: "taxes",
title: __("Taxes Table"),
description: __("You can add a row for a tax rule here. These rules can be applied on the net total, or can be a flat amount."),
}
];

View File

@@ -397,25 +397,21 @@ class Subscription(Document):
)
# Discounts
if self.is_trialling():
invoice.additional_discount_percentage = 100
else:
if self.additional_discount_percentage:
invoice.additional_discount_percentage = self.additional_discount_percentage
if self.additional_discount_percentage:
invoice.additional_discount_percentage = self.additional_discount_percentage
if self.additional_discount_amount:
invoice.discount_amount = self.additional_discount_amount
if self.additional_discount_amount:
invoice.discount_amount = self.additional_discount_amount
if self.additional_discount_percentage or self.additional_discount_amount:
discount_on = self.apply_additional_discount
invoice.apply_discount_on = discount_on if discount_on else 'Grand Total'
if self.additional_discount_percentage or self.additional_discount_amount:
discount_on = self.apply_additional_discount
invoice.apply_discount_on = discount_on if discount_on else 'Grand Total'
# Subscription period
invoice.from_date = self.current_invoice_start
invoice.to_date = self.current_invoice_end
invoice.flags.ignore_mandatory = True
invoice.set_missing_values()
invoice.save()

View File

@@ -102,7 +102,7 @@ class TaxRule(Document):
def validate_use_for_shopping_cart(self):
'''If shopping cart is enabled and no tax rule exists for shopping cart, enable this one'''
if (not self.use_for_shopping_cart
and cint(frappe.db.get_single_value('Shopping Cart Settings', 'enabled'))
and cint(frappe.db.get_single_value('E Commerce Settings', 'enabled'))
and not frappe.db.get_value('Tax Rule', {'use_for_shopping_cart': 1, 'name': ['!=', self.name]})):
self.use_for_shopping_cart = 1

View File

@@ -1,113 +0,0 @@
{
"creation": "2021-06-29 17:00:18.273054",
"docstatus": 0,
"doctype": "Form Tour",
"idx": 0,
"is_standard": 1,
"modified": "2021-06-29 17:00:26.145996",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",
"owner": "Administrator",
"reference_doctype": "Accounts Settings",
"save_on_complete": 0,
"steps": [
{
"description": "The percentage by which you can overbill transactions. For example, if the order value is $100 for an Item and percentage here is set as 10% then you are allowed to bill for $110.",
"field": "",
"fieldname": "over_billing_allowance",
"fieldtype": "Currency",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Over Billing Allowance (%)",
"parent_field": "",
"position": "Right",
"title": "Over Billing Allowance Percentage"
},
{
"description": "Select the role that is allowed to overbill a transactions.",
"field": "",
"fieldname": "role_allowed_to_over_bill",
"fieldtype": "Link",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Role Allowed to Over Bill ",
"parent_field": "",
"position": "Right",
"title": "Role Allowed to Over Bill"
},
{
"description": "If checked, system will unlink the payment against the respective invoice.",
"field": "",
"fieldname": "unlink_payment_on_cancellation_of_invoice",
"fieldtype": "Check",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Unlink Payment on Cancellation of Invoice",
"parent_field": "",
"position": "Bottom",
"title": "Unlink Payment on Cancellation of Invoice"
},
{
"description": "Similar to the previous option, this unlinks any advance payments made against Purchase/Sales Orders.",
"field": "",
"fieldname": "unlink_advance_payment_on_cancelation_of_order",
"fieldtype": "Check",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Unlink Advance Payment on Cancellation of Order",
"parent_field": "",
"position": "Bottom",
"title": "Unlink Advance Payment on Cancellation of Order"
},
{
"description": "Tax category can be set on Addresses. An address can be Shipping or Billing address. Set which addres to select when applying Tax Category.",
"field": "",
"fieldname": "determine_address_tax_category_from",
"fieldtype": "Select",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Determine Address Tax Category From",
"parent_field": "",
"position": "Right",
"title": "Determine Address Tax Category From"
},
{
"description": "Freeze accounting transactions up to specified date, nobody can make/modify entry except the specified Role.",
"field": "",
"fieldname": "acc_frozen_upto",
"fieldtype": "Date",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Accounts Frozen Till Date",
"parent_field": "",
"position": "Right",
"title": "Accounts Frozen Upto"
},
{
"description": "Users with this Role are allowed to set frozen accounts and create/modify accounting entries against frozen accounts.",
"field": "",
"fieldname": "frozen_accounts_modifier",
"fieldtype": "Link",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Role Allowed to Set Frozen Accounts and Edit Frozen Entries",
"parent_field": "",
"position": "Right",
"title": "Role Allowed to Set Frozen Accounts & Edit Frozen Entries"
},
{
"description": "Select the role that is allowed to submit transactions that exceed credit limits set. The credit limit can be set in the Customer form.",
"field": "",
"fieldname": "credit_controller",
"fieldtype": "Link",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Credit Controller",
"parent_field": "",
"position": "Left",
"title": "Credit Controller"
}
],
"title": "Accounts Settings"
}

View File

@@ -1,96 +0,0 @@
{
"creation": "2021-06-29 16:31:48.558826",
"docstatus": 0,
"doctype": "Form Tour",
"idx": 0,
"is_standard": 1,
"modified": "2021-06-29 16:31:48.558826",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice",
"owner": "Administrator",
"reference_doctype": "Purchase Invoice",
"save_on_complete": 1,
"steps": [
{
"description": "Select Supplier",
"field": "",
"fieldname": "supplier",
"fieldtype": "Link",
"has_next_condition": 1,
"is_table_field": 0,
"label": "Supplier",
"next_step_condition": "supplier",
"parent_field": "",
"position": "Right",
"title": "Select Supplier"
},
{
"description": "Add items in the table",
"field": "",
"fieldname": "items",
"fieldtype": "Table",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Items",
"parent_field": "",
"position": "Bottom",
"title": "List of Items"
},
{
"child_doctype": "Purchase Invoice Item",
"description": "Select an item",
"field": "",
"fieldname": "item_code",
"fieldtype": "Link",
"has_next_condition": 0,
"is_table_field": 1,
"label": "Item",
"parent_field": "",
"parent_fieldname": "items",
"position": "Right",
"title": "Select Item"
},
{
"child_doctype": "Purchase Invoice Item",
"description": "Enter the quantity",
"field": "",
"fieldname": "qty",
"fieldtype": "Float",
"has_next_condition": 0,
"is_table_field": 1,
"label": "Accepted Qty",
"parent_field": "",
"parent_fieldname": "items",
"position": "Right",
"title": "Enter Quantity"
},
{
"child_doctype": "Purchase Invoice Item",
"description": "Enter rate of the item",
"field": "",
"fieldname": "rate",
"fieldtype": "Currency",
"has_next_condition": 0,
"is_table_field": 1,
"label": "Rate",
"parent_field": "",
"parent_fieldname": "items",
"position": "Right",
"title": "Enter Rate"
},
{
"description": "You can add taxes here",
"field": "",
"fieldname": "taxes",
"fieldtype": "Table",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Purchase Taxes and Charges",
"parent_field": "",
"position": "Bottom",
"title": "Select taxes"
}
],
"title": "Purchase Invoice"
}

View File

@@ -1,65 +0,0 @@
{
"creation": "2021-08-24 12:28:18.044902",
"docstatus": 0,
"doctype": "Form Tour",
"idx": 0,
"is_standard": 1,
"modified": "2021-08-24 12:28:18.044902",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Taxes and Charges Template",
"owner": "Administrator",
"reference_doctype": "Sales Taxes and Charges Template",
"save_on_complete": 0,
"steps": [
{
"description": "A name by which you will identify this template. You can change this later.",
"field": "",
"fieldname": "title",
"fieldtype": "Data",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Title",
"parent_field": "",
"position": "Bottom",
"title": "Title"
},
{
"description": "Company for which this tax template will be applicable",
"field": "",
"fieldname": "company",
"fieldtype": "Link",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Company",
"parent_field": "",
"position": "Bottom",
"title": "Company"
},
{
"description": "Set this template as the default for all sales transactions",
"field": "",
"fieldname": "is_default",
"fieldtype": "Check",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Default",
"parent_field": "",
"position": "Bottom",
"title": "Is this Default Tax Template?"
},
{
"description": "You can add a row for a tax rule here. These rules can be applied on the net total, or can be a flat amount.",
"field": "",
"fieldname": "taxes",
"fieldtype": "Table",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Sales Taxes and Charges",
"parent_field": "",
"position": "Bottom",
"title": "Taxes Table"
}
],
"title": "Sales Taxes and Charges Template"
}

View File

@@ -13,15 +13,12 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/accounts",
"idx": 0,
"is_complete": 0,
"modified": "2021-08-13 11:59:35.690443",
"modified": "2020-10-30 15:41:15.547225",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts",
"owner": "Administrator",
"steps": [
{
"step": "Company"
},
{
"step": "Chart of Accounts"
},
@@ -29,19 +26,22 @@
"step": "Setup Taxes"
},
{
"step": "Accounts Settings"
"step": "Create a Product"
},
{
"step": "Cost Centers for Report and Budgeting"
"step": "Create a Supplier"
},
{
"step": "Create Your First Purchase Invoice"
},
{
"step": "Updating Opening Balances"
"step": "Create a Customer"
},
{
"step": "Financial Statements"
"step": "Create Your First Sales Invoice"
},
{
"step": "Configure Account Settings"
}
],
"subtitle": "Accounts, Invoices, Taxation, and more.",

View File

@@ -1,21 +0,0 @@
{
"action": "Show Form Tour",
"action_label": "Take a quick walk-through of Accounts Settings",
"creation": "2021-06-29 16:42:03.400731",
"description": "# Account Settings\n\nIn ERPNext, Accounting features are configurable as per your business needs. Accounts Settings is the place to define some of your accounting preferences like:\n\n - Credit Limit and over billing settings\n - Taxation preferences\n - Deferred accounting preferences\n",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 1,
"is_skipped": 0,
"modified": "2021-08-13 11:50:06.227835",
"modified_by": "Administrator",
"name": "Accounts Settings",
"owner": "Administrator",
"reference_document": "Accounts Settings",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Accounts Settings",
"validate_action": 1
}

View File

@@ -1,10 +1,10 @@
{
"action": "Watch Video",
"action_label": "Learn more about Chart of Accounts",
"action": "Go to Page",
"action_label": "View Chart of Accounts",
"callback_message": "You can continue with the onboarding after exploring this page",
"callback_title": "Awesome Work",
"creation": "2020-05-13 19:58:20.928127",
"description": "# Chart Of Accounts\n\nERPNext sets up a simple chart of accounts for each Company you create, but you can modify it according to business and legal requirements.",
"description": "# Chart Of Accounts\n\nThe Chart of Accounts is the blueprint of the accounts in your organization.\nIt is a tree view of the names of the Accounts (Ledgers and Groups) that a Company requires to manage its books of accounts. ERPNext sets up a simple chart of accounts for each Company you create, but you can modify it according to your needs and legal requirements.\n\nFor each company, Chart of Accounts signifies the way to classify the accounting entries, mostly\nbased on statutory (tax, compliance to government regulations) requirements.\n\nThere's a brief video tutorial about chart of accounts in the next step.",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
@@ -12,7 +12,7 @@
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-13 11:46:25.878506",
"modified": "2020-10-30 14:35:59.474920",
"modified_by": "Administrator",
"name": "Chart of Accounts",
"owner": "Administrator",
@@ -21,6 +21,5 @@
"show_form_tour": 0,
"show_full_form": 0,
"title": "Review Chart of Accounts",
"validate_action": 0,
"video_url": "https://www.youtube.com/embed/AcfMCT7wLLo"
"validate_action": 0
}

View File

@@ -1,22 +0,0 @@
{
"action": "Go to Page",
"action_label": "Let's Review your Company",
"creation": "2021-06-29 14:47:42.497318",
"description": "# Company\n\nIn ERPNext, you can also create multiple companies, and establish relationships (group/subsidiary) among them.\n\nWithin the company master, you can capture various default accounts for that Company and set crucial settings related to the accounting methodology followed for a company. \n",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-13 11:43:35.767341",
"modified_by": "Administrator",
"name": "Company",
"owner": "Administrator",
"path": "app/company",
"reference_document": "Company",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Review Company",
"validate_action": 1
}

View File

@@ -1,21 +0,0 @@
{
"action": "Go to Page",
"action_label": "View Cost Center Tree",
"creation": "2021-07-12 12:02:05.726608",
"description": "# Cost Centers for Budgeting and Analysis\n\nWhile your Books of Accounts are framed to fulfill statutory requirements, you can set up Cost Center and Accounting Dimensions to address your companies reporting and budgeting requirements.\n\nClick here to learn more about how <b>[Cost Center](https://docs.erpnext.com/docs/v13/user/manual/en/accounts/cost-center)</b> and <b> [Dimensions](https://docs.erpnext.com/docs/v13/user/manual/en/accounts/accounting-dimensions)</b> allow you to get advanced financial analytics reports from ERPNext.",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-13 11:55:08.510366",
"modified_by": "Administrator",
"name": "Cost Centers for Report and Budgeting",
"owner": "Administrator",
"path": "cost-center/view/tree",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Cost Centers for Budgeting and Analysis",
"validate_action": 1
}

View File

@@ -1,15 +1,14 @@
{
"action": "Show Form Tour",
"action_label": "Let\u2019s create your first Purchase Invoice",
"action": "Create Entry",
"creation": "2020-05-14 22:10:07.049704",
"description": "# Create your first Purchase Invoice\n\nA Purchase Invoice is a bill received from a Supplier for a product(s) or service(s) delivery to your company. You can track payables through Purchase Invoice and process Payment Entries against it.\n\nPurchase Invoices can also be created against a Purchase Order or Purchase Receipt.",
"description": "# What's a Purchase Invoice?\n\nA Purchase Invoice is a bill you receive from your Suppliers against which you need to make the payment.\nPurchase Invoice is the exact opposite of your Sales Invoice. Here you accrue expenses to your Supplier. \n\nThe following is what a typical purchase cycle looks like, however you can create a purchase invoice directly as well.\n\n![Purchase Flow](https://docs.erpnext.com/docs/assets/img/accounts/pi-flow.png)\n\n",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-13 11:56:11.677253",
"modified": "2020-10-30 15:30:26.337773",
"modified_by": "Administrator",
"name": "Create Your First Purchase Invoice",
"owner": "Administrator",

View File

@@ -1,23 +0,0 @@
{
"action": "View Report",
"creation": "2021-07-12 12:08:47.026115",
"description": "# Financial Statements\n\nIn ERPNext, you can get crucial financial reports like [Balance Sheet] and [Profit and Loss] statements with a click of a button. You can run in the report for a different period and plot analytics charts premised on statement data. For more reports, check sections like Financial Statements, General Ledger, and Profitability reports.\n\n<b>[Check Accounting reports](https://docs.erpnext.com/docs/v13/user/manual/en/accounts/accounting-reports)</b>",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-13 11:59:18.767407",
"modified_by": "Administrator",
"name": "Financial Statements",
"owner": "Administrator",
"reference_report": "General Ledger",
"report_description": "General Ledger",
"report_reference_doctype": "GL Entry",
"report_type": "Script Report",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Financial Statements",
"validate_action": 1
}

View File

@@ -1,21 +1,21 @@
{
"action": "Create Entry",
"action_label": "Manage Sales Tax Templates",
"action_label": "Make a Sales Tax Template",
"creation": "2020-05-13 19:29:43.844463",
"description": "# Setting up Taxes\n\nERPNext lets you configure your taxes so that they are automatically applied in your buying and selling transactions. You can configure them globally or even on Items. ERPNext taxes are pre-configured for most regions.\n",
"description": "# Setting up Taxes\n\nAny sophisticated accounting system, including ERPNext will have automatic tax calculations for your transactions. These calculations are based on user defined rules in compliance to local rules and regulations.\n\nERPNext allows this via *Tax Templates*. These templates can be used in Sales Orders and Sales Invoices. Other types of charges that may apply to your invoices (like shipping, insurance etc.) can also be configured as taxes.\n\nFor Tax Accounts that you want to use in the tax templates, go to:\n\n`> Accounting > Taxes > Sales Taxes and Charges Template`\n\nYou can read more about these templates in our documentation [here](https://docs.erpnext.com/docs/user/manual/en/selling/sales-taxes-and-charges-template)\n",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-13 11:48:37.238610",
"modified": "2020-10-30 14:54:18.087383",
"modified_by": "Administrator",
"name": "Setup Taxes",
"owner": "Administrator",
"reference_document": "Sales Taxes and Charges Template",
"show_form_tour": 1,
"show_full_form": 1,
"title": "Setting up Taxes",
"title": "Lets create a Tax Template for Sales ",
"validate_action": 0
}

View File

@@ -1,22 +0,0 @@
{
"action": "Watch Video",
"action_label": "Learn how to update opening balances",
"creation": "2021-07-12 11:53:50.525030",
"description": "# Updating Opening Balances\n\nOnce you close the financial statement in previous accounting software, you can update the same as opening in your ERPNext's Balance Sheet accounts. This will allow you to get complete financial statements from ERPNext in the coming years, and discontinue the parallel accounting system right away.",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"intro_video_url": "https://www.youtube.com/embed/U5wPIvEn-0c",
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-13 11:56:45.483418",
"modified_by": "Administrator",
"name": "Updating Opening Balances",
"owner": "Administrator",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Updating Opening Balances",
"validate_action": 1,
"video_url": "https://www.youtube.com/embed/U5wPIvEn-0c"
}

View File

@@ -0,0 +1,162 @@
{%- from "templates/print_formats/standard_macros.html" import add_header, render_field, print_value -%}
{%- set einvoice = json.loads(doc.signed_einvoice) -%}
<div class="page-break">
<div {% if print_settings.repeat_header_footer %} id="header-html" class="hidden-pdf" {% endif %}>
{% if letter_head and not no_letterhead %}
<div class="letter-head">{{ letter_head }}</div>
{% endif %}
<div class="print-heading">
<h2>E Invoice<br><small>{{ doc.name }}</small></h2>
</div>
</div>
{% if print_settings.repeat_header_footer %}
<div id="footer-html" class="visible-pdf">
{% if not no_letterhead and footer %}
<div class="letter-head-footer">
{{ footer }}
</div>
{% endif %}
<p class="text-center small page-number visible-pdf">
{{ _("Page {0} of {1}").format('<span class="page"></span>', '<span class="topage"></span>') }}
</p>
</div>
{% endif %}
<h5 class="font-bold" style="margin-top: 0px;">1. Transaction Details</h5>
<div class="row section-break" style="border-bottom: 1px solid #d1d8dd; padding-bottom: 10px;">
<div class="col-xs-8 column-break">
<div class="row data-field">
<div class="col-xs-4"><label>IRN</label></div>
<div class="col-xs-8 value">{{ einvoice.Irn }}</div>
</div>
<div class="row data-field">
<div class="col-xs-4"><label>Ack. No</label></div>
<div class="col-xs-8 value">{{ einvoice.AckNo }}</div>
</div>
<div class="row data-field">
<div class="col-xs-4"><label>Ack. Date</label></div>
<div class="col-xs-8 value">{{ frappe.utils.format_datetime(einvoice.AckDt, "dd/MM/yyyy hh:mm:ss") }}</div>
</div>
<div class="row data-field">
<div class="col-xs-4"><label>Category</label></div>
<div class="col-xs-8 value">{{ einvoice.TranDtls.SupTyp }}</div>
</div>
<div class="row data-field">
<div class="col-xs-4"><label>Document Type</label></div>
<div class="col-xs-8 value">{{ einvoice.DocDtls.Typ }}</div>
</div>
<div class="row data-field">
<div class="col-xs-4"><label>Document No</label></div>
<div class="col-xs-8 value">{{ einvoice.DocDtls.No }}</div>
</div>
</div>
<div class="col-xs-4 column-break">
<img src="{{ doc.qrcode_image }}" width="175px" style="float: right;">
</div>
</div>
<h5 class="font-bold" style="margin-top: 15px; margin-bottom: 10px;">2. Party Details</h5>
<div class="row section-break" style="border-bottom: 1px solid #d1d8dd; padding-bottom: 10px;">
{%- set seller = einvoice.SellerDtls -%}
<div class="col-xs-6 column-break">
<h5 style="margin-bottom: 5px;">Seller</h5>
<p>{{ seller.Gstin }}</p>
<p>{{ seller.LglNm }}</p>
<p>{{ seller.Addr1 }}</p>
{%- if seller.Addr2 -%} <p>{{ seller.Addr2 }}</p> {% endif %}
<p>{{ seller.Loc }}</p>
<p>{{ frappe.db.get_value("Address", doc.company_address, "gst_state") }} - {{ seller.Pin }}</p>
{%- if einvoice.ShipDtls -%}
{%- set shipping = einvoice.ShipDtls -%}
<h5 style="margin-bottom: 5px;">Shipping</h5>
<p>{{ shipping.Gstin }}</p>
<p>{{ shipping.LglNm }}</p>
<p>{{ shipping.Addr1 }}</p>
{%- if shipping.Addr2 -%} <p>{{ shipping.Addr2 }}</p> {% endif %}
<p>{{ shipping.Loc }}</p>
<p>{{ frappe.db.get_value("Address", doc.shipping_address_name, "gst_state") }} - {{ shipping.Pin }}</p>
{% endif %}
</div>
{%- set buyer = einvoice.BuyerDtls -%}
<div class="col-xs-6 column-break">
<h5 style="margin-bottom: 5px;">Buyer</h5>
<p>{{ buyer.Gstin }}</p>
<p>{{ buyer.LglNm }}</p>
<p>{{ buyer.Addr1 }}</p>
{%- if buyer.Addr2 -%} <p>{{ buyer.Addr2 }}</p> {% endif %}
<p>{{ buyer.Loc }}</p>
<p>{{ frappe.db.get_value("Address", doc.customer_address, "gst_state") }} - {{ buyer.Pin }}</p>
</div>
</div>
<div style="overflow-x: auto;">
<h5 class="font-bold" style="margin-top: 15px; margin-bottom: 10px;">3. Item Details</h5>
<table class="table table-bordered">
<thead>
<tr>
<th class="text-left" style="width: 3%;">Sr. No.</th>
<th class="text-left">Item</th>
<th class="text-left" style="width: 10%;">HSN Code</th>
<th class="text-left" style="width: 5%;">Qty</th>
<th class="text-left" style="width: 5%;">UOM</th>
<th class="text-left">Rate</th>
<th class="text-left" style="width: 5%;">Discount</th>
<th class="text-left">Taxable Amount</th>
<th class="text-left" style="width: 7%;">Tax Rate</th>
<th class="text-left" style="width: 5%;">Other Charges</th>
<th class="text-left">Total</th>
</tr>
</thead>
<tbody>
{% for item in einvoice.ItemList %}
<tr>
<td class="text-left" style="width: 3%;">{{ item.SlNo }}</td>
<td class="text-left">{{ item.PrdDesc }}</td>
<td class="text-left" style="width: 10%;">{{ item.HsnCd }}</td>
<td class="text-right" style="width: 5%;">{{ item.Qty }}</td>
<td class="text-left" style="width: 5%;">{{ item.Unit }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(item.UnitPrice, None, "INR") }}</td>
<td class="text-right" style="width: 5%;">{{ frappe.utils.fmt_money(item.Discount, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(item.AssAmt, None, "INR") }}</td>
<td class="text-right" style="width: 7%;">{{ item.GstRt + item.CesRt }} %</td>
<td class="text-right" style="width: 5%;">{{ frappe.utils.fmt_money(0, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(item.TotItemVal, None, "INR") }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div style="overflow-x: auto;">
<h5 class="font-bold" style="margin-bottom: 0px;">4. Value Details</h5>
<table class="table table-bordered">
<thead>
<tr>
<th class="text-left">Taxable Amount</th>
<th class="text-left">CGST</th>
<th class="text-left"">SGST</th>
<th class="text-left">IGST</th>
<th class="text-left">CESS</th>
<th class="text-left" style="width: 10%;">State CESS</th>
<th class="text-left">Discount</th>
<th class="text-left" style="width: 10%;">Other Charges</th>
<th class="text-left" style="width: 10%;">Round Off</th>
<th class="text-left">Total Value</th>
</tr>
</thead>
<tbody>
{%- set value_details = einvoice.ValDtls -%}
<tr>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.AssVal, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.CgstVal, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.SgstVal, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.IgstVal, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.CesVal, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(0, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.Discount, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.OthChrg, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.RndOffAmt, None, "INR") }}</td>
<td class="text-right">{{ frappe.utils.fmt_money(value_details.TotInvVal, None, "INR") }}</td>
</tr>
</tbody>
</table>
</div>
</div>

View File

@@ -0,0 +1,24 @@
{
"align_labels_right": 1,
"creation": "2020-10-10 18:01:21.032914",
"custom_format": 0,
"default_print_language": "en-US",
"disabled": 1,
"doc_type": "Sales Invoice",
"docstatus": 0,
"doctype": "Print Format",
"font": "Default",
"html": "",
"idx": 0,
"line_breaks": 1,
"modified": "2020-10-23 19:54:40.634936",
"modified_by": "Administrator",
"module": "Accounts",
"name": "GST E-Invoice",
"owner": "Administrator",
"print_format_builder": 0,
"print_format_type": "Jinja",
"raw_printing": 0,
"show_section_headings": 1,
"standard": "Yes"
}

View File

@@ -115,7 +115,7 @@ def prepare_companywise_opening_balance(asset_data, liability_data, equity_data,
# opening_value = Aseet - liability - equity
for data in [asset_data, liability_data, equity_data]:
account_name = get_root_account_name(data[0].root_type, company)
opening_value += (get_opening_balance(account_name, data, company) or 0.0)
opening_value += get_opening_balance(account_name, data, company)
opening_balance[company] = opening_value

View File

@@ -273,6 +273,8 @@ class GrossProfitGenerator(object):
new_row.gross_profit = flt(new_row.base_amount - new_row.buying_amount, self.currency_precision)
new_row.gross_profit_percent = flt(((new_row.gross_profit / new_row.base_amount) * 100.0), self.currency_precision) \
if new_row.base_amount else 0
new_row.buying_rate = flt(new_row.buying_amount / flt(new_row.qty), self.float_precision) if flt(new_row.qty) else 0
new_row.base_rate = flt(new_row.base_amount / flt(new_row.qty), self.float_precision) if flt(new_row.qty) else 0
def add_to_totals(self, new_row):
for key in self.totals:

View File

@@ -1,451 +0,0 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
// Contributed by Case Solved and sponsored by Nulight Studios
/* eslint-disable */
frappe.provide('frappe.query_reports');
frappe.query_reports["Tax Detail"] = {
filters: [
{
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("company"),
reqd: 1
},
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.month_start(frappe.datetime.get_today()),
reqd: 1,
width: "60px"
},
{
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.datetime.month_end(frappe.datetime.get_today()),
reqd: 1,
width: "60px"
},
{
fieldname: "report_name",
label: __("Report Name"),
fieldtype: "Read Only",
default: frappe.query_report.report_name,
hidden: 1,
reqd: 1
},
{
fieldname: "mode",
label: __("Mode"),
fieldtype: "Read Only",
default: "edit",
hidden: 1,
reqd: 1
}
],
onload: function onload(report) {
// Remove Add Column and Save from menu
report.page.add_inner_button(__("New Report"), () => new_report(), __("Custom Report"));
report.page.add_inner_button(__("Load Report"), () => load_report(), __("Custom Report"));
hide_filters(report);
}
};
function hide_filters(report) {
report.page.page_form[0].querySelectorAll('.form-group.frappe-control').forEach(function setHidden(field) {
if (field.dataset.fieldtype == "Read Only") {
field.classList.add("hidden");
}
});
}
erpnext.TaxDetail = class TaxDetail {
constructor() {
this.patch();
this.load_report();
}
// Monkey patch the QueryReport class
patch() {
this.qr = frappe.query_report;
this.super = {
refresh_report: this.qr.refresh_report,
show_footer_message: this.qr.show_footer_message
}
this.qr.refresh_report = () => this.refresh_report();
this.qr.show_footer_message = () => this.show_footer_message();
}
show_footer_message() {
// The last thing to run after datatable_render in refresh()
this.super.show_footer_message.apply(this.qr);
if (this.qr.report_name !== 'Tax Detail') {
this.show_help();
if (this.loading) {
this.set_section('');
} else {
this.reload_component('');
}
}
this.loading = false;
}
refresh_report() {
// Infrequent report build (onload), load filters & data
// super function runs a refresh() serially
// already run within frappe.run_serially
this.loading = true;
this.super.refresh_report.apply(this.qr);
if (this.qr.report_name !== 'Tax Detail') {
frappe.call({
method: 'erpnext.accounts.report.tax_detail.tax_detail.get_custom_reports',
args: {name: this.qr.report_name}
}).then((r) => {
const data = JSON.parse(r.message[this.qr.report_name]['json']);
this.create_controls();
this.sections = data.sections || {};
this.controls['show_detail'].set_input(data.show_detail);
});
}
}
load_report() {
// One-off report build like titles, menu, etc
// Run when this object is created which happens in qr.load_report
this.qr.menu_items = this.get_menu_items();
}
get_menu_items() {
// Replace Save action
let new_items = [];
const save = __('Save');
for (let item of this.qr.menu_items) {
if (item.label === save) {
new_items.push({
label: save,
action: () => this.save_report(),
standard: false
});
} else {
new_items.push(item);
}
}
return new_items;
}
save_report() {
this.check_datatable();
if (this.qr.report_name !== 'Tax Detail') {
frappe.call({
method:'erpnext.accounts.report.tax_detail.tax_detail.save_custom_report',
args: {
reference_report: 'Tax Detail',
report_name: this.qr.report_name,
data: {
columns: this.qr.get_visible_columns(),
sections: this.sections,
show_detail: this.controls['show_detail'].get_input_value()
}
},
freeze: true
}).then((r) => {
this.set_section('');
});
}
}
check_datatable() {
if (!this.qr.datatable) {
frappe.throw(__('Please change the date range to load data first'));
}
}
set_section(name) {
// Sets the given section name and then reloads the data
if (name && !this.sections[name]) {
this.sections[name] = {};
}
let options = Object.keys(this.sections);
options.unshift('');
this.controls['section_name'].$wrapper.find("select").empty().add_options(options);
const org_mode = this.qr.get_filter_value('mode');
let refresh = false;
if (name) {
this.controls['section_name'].set_input(name);
this.qr.set_filter_value('mode', 'edit');
if (org_mode === 'run') {
refresh = true;
}
} else {
this.controls['section_name'].set_input('');
this.qr.set_filter_value('mode', 'run');
if (org_mode === 'edit') {
refresh = true;
}
}
if (refresh) {
this.qr.refresh();
}
this.reload_component('');
}
reload_component(component_name) {
const section_name = this.controls['section_name'].get_input_value();
if (section_name) {
const section = this.sections[section_name];
const component_names = Object.keys(section);
component_names.unshift('');
this.controls['component'].$wrapper.find("select").empty().add_options(component_names);
this.controls['component'].set_input(component_name);
if (component_name) {
this.controls['component_type'].set_input(section[component_name].type);
}
} else {
this.controls['component'].$wrapper.find("select").empty();
this.controls['component'].set_input('');
}
this.set_table_filters();
}
set_table_filters() {
let filters = {};
const section_name = this.controls['section_name'].get_input_value();
const component_name = this.controls['component'].get_input_value();
if (section_name && component_name) {
const component_type = this.sections[section_name][component_name].type;
if (component_type === 'filter') {
filters = this.sections[section_name][component_name]['filters'];
}
}
this.setAppliedFilters(filters);
}
setAppliedFilters(filters) {
if (this.qr.datatable) {
Array.from(this.qr.datatable.header.querySelectorAll('.dt-filter')).map(function setFilters(input) {
let idx = input.dataset.colIndex;
if (filters[idx]) {
input.value = filters[idx];
} else {
input.value = null;
}
});
this.qr.datatable.columnmanager.applyFilter(filters);
}
}
delete(name, type) {
if (type === 'section') {
delete this.sections[name];
const new_section = Object.keys(this.sections)[0] || '';
this.set_section(new_section);
}
if (type === 'component') {
const cur_section = this.controls['section_name'].get_input_value();
delete this.sections[cur_section][name];
this.reload_component('');
}
}
create_controls() {
let controls = {};
// SELECT in data.js
controls['section_name'] = this.qr.page.add_field({
label: __('Section'),
fieldtype: 'Select',
fieldname: 'section_name',
change: (e) => {
this.set_section(this.controls['section_name'].get_input_value());
}
});
// BUTTON in button.js
controls['new_section'] = this.qr.page.add_field({
label: __('New Section'),
fieldtype: 'Button',
fieldname: 'new_section',
click: () => {
frappe.prompt({
label: __('Section Name'),
fieldname: 'name',
fieldtype: 'Data'
}, (values) => {
this.set_section(values.name);
});
}
});
controls['delete_section'] = this.qr.page.add_field({
label: __('Delete Section'),
fieldtype: 'Button',
fieldname: 'delete_section',
click: () => {
let cur_section = this.controls['section_name'].get_input_value();
if (cur_section) {
frappe.confirm(__('Are you sure you want to delete section') + ' ' + cur_section + '?',
() => {this.delete(cur_section, 'section')});
}
}
});
controls['component'] = this.qr.page.add_field({
label: __('Component'),
fieldtype: 'Select',
fieldname: 'component',
change: (e) => {
this.reload_component(this.controls['component'].get_input_value());
}
});
controls['component_type'] = this.qr.page.add_field({
label: __('Component Type'),
fieldtype: 'Select',
fieldname: 'component_type',
default: 'filter',
options: [
{label: __('Filtered Row Subtotal'), value: 'filter'},
{label: __('Section Subtotal'), value: 'section'}
]
});
controls['add_component'] = this.qr.page.add_field({
label: __('Add Component'),
fieldtype: 'Button',
fieldname: 'add_component',
click: () => {
this.check_datatable();
let section_name = this.controls['section_name'].get_input_value();
if (section_name) {
const component_type = this.controls['component_type'].get_input_value();
let idx = 0;
const names = Object.keys(this.sections[section_name]);
if (names.length > 0) {
const idxs = names.map((key) => parseInt(key.match(/\d+$/)) || 0);
idx = Math.max(...idxs) + 1;
}
const filters = this.qr.datatable.columnmanager.getAppliedFilters();
if (component_type === 'filter') {
const name = 'Filter' + idx.toString();
let data = {
type: component_type,
filters: filters
}
this.sections[section_name][name] = data;
this.reload_component(name);
} else if (component_type === 'section') {
if (filters && Object.keys(filters).length !== 0) {
frappe.show_alert({
message: __('Column filters ignored'),
indicator: 'yellow'
});
}
let data = {
type: component_type
}
frappe.prompt({
label: __('Section'),
fieldname: 'section',
fieldtype: 'Select',
options: Object.keys(this.sections)
}, (values) => {
this.sections[section_name][values.section] = data;
this.reload_component(values.section);
});
} else {
frappe.throw(__('Please select the Component Type first'));
}
} else {
frappe.throw(__('Please select the Section first'));
}
}
});
controls['delete_component'] = this.qr.page.add_field({
label: __('Delete Component'),
fieldtype: 'Button',
fieldname: 'delete_component',
click: () => {
const component = this.controls['component'].get_input_value();
if (component) {
frappe.confirm(__('Are you sure you want to delete component') + ' ' + component + '?',
() => {this.delete(component, 'component')});
}
}
});
controls['save'] = this.qr.page.add_field({
label: __('Save & Run'),
fieldtype: 'Button',
fieldname: 'save',
click: () => {
this.save_report();
}
});
controls['show_detail'] = this.qr.page.add_field({
label: __('Show Detail'),
fieldtype: 'Check',
fieldname: 'show_detail',
default: 1
});
this.controls = controls;
}
show_help() {
const help = __('Your custom report is built from General Ledger Entries within the date range. You can add multiple sections to the report using the New Section button. Each component added to a section adds a subset of the data into the specified section. Beware of duplicated data rows. The Filtered Row component type saves the datatable column filters to specify the added data. The Section component type refers to the data in a previously defined section, but it cannot refer to its parent section. The Amount column is summed to give the section subtotal. Use the Show Detail box to see the data rows included in each section in the final report. Once finished, hit Save & Run. Report contributed by');
this.qr.$report_footer.append('<div class="col-md-12"><strong>' + __('Help') + `: </strong>${help}<a href="https://www.casesolved.co.uk"> Case Solved</a></div>`);
}
}
if (!window.taxdetail) {
window.taxdetail = new erpnext.TaxDetail();
}
function get_reports(cb) {
frappe.call({
method: 'erpnext.accounts.report.tax_detail.tax_detail.get_custom_reports',
freeze: true
}).then((r) => {
cb(r.message);
})
}
function new_report() {
const dialog = new frappe.ui.Dialog({
title: __('New Report'),
fields: [
{
fieldname: 'report_name',
label: __('Report Name'),
fieldtype: 'Data',
default: 'VAT Return'
}
],
primary_action_label: __('Create'),
primary_action: function new_report_pa(values) {
frappe.call({
method:'erpnext.accounts.report.tax_detail.tax_detail.save_custom_report',
args: {
reference_report: 'Tax Detail',
report_name: values.report_name,
data: {
columns: [],
sections: {},
show_detail: 1
}
},
freeze: true
}).then((r) => {
frappe.set_route('query-report', values.report_name);
});
dialog.hide();
}
});
dialog.show();
}
function load_report() {
get_reports(function load_report_cb(reports) {
const dialog = new frappe.ui.Dialog({
title: __('Load Report'),
fields: [
{
fieldname: 'report_name',
label: __('Report Name'),
fieldtype: 'Select',
options: Object.keys(reports)
}
],
primary_action_label: __('Load'),
primary_action: function load_report_pa(values) {
dialog.hide();
frappe.set_route('query-report', values.report_name);
}
});
dialog.show();
});
}

View File

@@ -1,32 +0,0 @@
{
"add_total_row": 0,
"columns": [],
"creation": "2021-02-19 16:44:21.175113",
"disable_prepared_report": 0,
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [],
"idx": 0,
"is_standard": "Yes",
"modified": "2021-02-19 16:44:21.175113",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Tax Detail",
"owner": "Administrator",
"prepared_report": 0,
"ref_doctype": "GL Entry",
"report_name": "Tax Detail",
"report_type": "Script Report",
"roles": [
{
"role": "Accounts User"
},
{
"role": "Accounts Manager"
},
{
"role": "Auditor"
}
]
}

View File

@@ -1,298 +0,0 @@
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
# Contributed by Case Solved and sponsored by Nulight Studios
from __future__ import unicode_literals
import json
import frappe
from frappe import _
# NOTE: Payroll is implemented using Journal Entries which are included as GL Entries
# field lists in multiple doctypes will be coalesced
required_sql_fields = {
("GL Entry", 1): ["posting_date"],
("Account",): ["root_type", "account_type"],
("GL Entry", 2): ["account", "voucher_type", "voucher_no", "debit", "credit"],
("Purchase Invoice Item", "Sales Invoice Item"): ["base_net_amount", "item_tax_rate", "item_tax_template", "item_group", "item_name"],
("Purchase Invoice", "Sales Invoice"): ["taxes_and_charges", "tax_category"],
}
def execute(filters=None):
if not filters:
return [], []
fieldlist = required_sql_fields
fieldstr = get_fieldstr(fieldlist)
gl_entries = frappe.db.sql("""
select {fieldstr}
from `tabGL Entry` ge
inner join `tabAccount` a on
ge.account=a.name and ge.company=a.company
left join `tabSales Invoice` si on
ge.company=si.company and ge.voucher_type='Sales Invoice' and ge.voucher_no=si.name
left join `tabSales Invoice Item` sii on
a.root_type='Income' and si.name=sii.parent
left join `tabPurchase Invoice` pi on
ge.company=pi.company and ge.voucher_type='Purchase Invoice' and ge.voucher_no=pi.name
left join `tabPurchase Invoice Item` pii on
a.root_type='Expense' and pi.name=pii.parent
where
ge.company=%(company)s and
ge.posting_date>=%(from_date)s and
ge.posting_date<=%(to_date)s
order by ge.posting_date, ge.voucher_no
""".format(fieldstr=fieldstr), filters, as_dict=1)
report_data = modify_report_data(gl_entries)
summary = None
if filters['mode'] == 'run' and filters['report_name'] != 'Tax Detail':
report_data, summary = run_report(filters['report_name'], report_data)
# return columns, data, message, chart, report_summary
return get_columns(fieldlist), report_data, None, None, summary
def run_report(report_name, data):
"Applies the sections and filters saved in the custom report"
report_config = json.loads(frappe.get_doc('Report', report_name).json)
# Columns indexed from 1 wrt colno
columns = report_config.get('columns')
sections = report_config.get('sections', {})
show_detail = report_config.get('show_detail', 1)
report = {}
new_data = []
summary = []
for section_name, section in sections.items():
report[section_name] = {'rows': [], 'subtotal': 0.0}
for component_name, component in section.items():
if component['type'] == 'filter':
for row in data:
matched = True
for colno, filter_string in component['filters'].items():
filter_field = columns[int(colno) - 1]['fieldname']
if not filter_match(row[filter_field], filter_string):
matched = False
break
if matched:
report[section_name]['rows'] += [row]
report[section_name]['subtotal'] += row['amount']
if component['type'] == 'section':
if component_name == section_name:
frappe.throw(_("A report component cannot refer to its parent section") + ": " + section_name)
try:
report[section_name]['rows'] += report[component_name]['rows']
report[section_name]['subtotal'] += report[component_name]['subtotal']
except KeyError:
frappe.throw(_("A report component can only refer to an earlier section") + ": " + section_name)
if show_detail:
new_data += report[section_name]['rows']
new_data += [{'voucher_no': section_name, 'amount': report[section_name]['subtotal']}]
summary += [{'label': section_name, 'datatype': 'Currency', 'value': report[section_name]['subtotal']}]
if show_detail:
new_data += [{}]
return new_data or data, summary or None
def filter_match(value, string):
"Approximation to datatable filters"
import datetime
if string == '':
return True
if value is None:
value = -999999999999999
elif isinstance(value, datetime.date):
return True
if isinstance(value, str):
value = value.lower()
string = string.lower()
if string[0] == '<':
return True if string[1:].strip() else False
elif string[0] == '>':
return False if string[1:].strip() else True
elif string[0] == '=':
return string[1:] in value if string[1:] else False
elif string[0:2] == '!=':
return string[2:] not in value
elif len(string.split(':')) == 2:
pre, post = string.split(':')
return (True if not pre.strip() and post.strip() in value else False)
else:
return string in value
else:
if string[0] in ['<', '>', '=']:
operator = string[0]
if operator == '=':
operator = '=='
string = string[1:].strip()
elif string[0:2] == '!=':
operator = '!='
string = string[2:].strip()
elif len(string.split(':')) == 2:
pre, post = string.split(':')
try:
return (True if float(pre) <= value and float(post) >= value else False)
except ValueError:
return (False if pre.strip() else True)
else:
return string in str(value)
try:
num = float(string) if string.strip() else 0
return frappe.safe_eval(f'{value} {operator} {num}')
except ValueError:
if operator == '<':
return True
return False
def abbrev(dt):
return ''.join(l[0].lower() for l in dt.split(' ')) + '.'
def doclist(dt, dfs):
return [abbrev(dt) + f for f in dfs]
def as_split(fields):
for field in fields:
split = field.split(' as ')
yield (split[0], split[1] if len(split) > 1 else split[0])
def coalesce(doctypes, fields):
coalesce = []
for name, new_name in as_split(fields):
sharedfields = ', '.join(abbrev(dt) + name for dt in doctypes)
coalesce += [f'coalesce({sharedfields}) as {new_name}']
return coalesce
def get_fieldstr(fieldlist):
fields = []
for doctypes, docfields in fieldlist.items():
if len(doctypes) == 1 or isinstance(doctypes[1], int):
fields += doclist(doctypes[0], docfields)
else:
fields += coalesce(doctypes, docfields)
return ', '.join(fields)
def get_columns(fieldlist):
columns = {}
for doctypes, docfields in fieldlist.items():
fieldmap = {name: new_name for name, new_name in as_split(docfields)}
for doctype in doctypes:
if isinstance(doctype, int):
break
meta = frappe.get_meta(doctype)
# get column field metadata from the db
fieldmeta = {}
for field in meta.get('fields'):
if field.fieldname in fieldmap.keys():
new_name = fieldmap[field.fieldname]
fieldmeta[new_name] = {
"label": _(field.label),
"fieldname": new_name,
"fieldtype": field.fieldtype,
"options": field.options
}
# edit the columns to match the modified data
for field in fieldmap.values():
col = modify_report_columns(doctype, field, fieldmeta[field])
if col:
columns[col["fieldname"]] = col
# use of a dict ensures duplicate columns are removed
return list(columns.values())
def modify_report_columns(doctype, field, column):
"Because data is rearranged into other columns"
if doctype in ["Sales Invoice Item", "Purchase Invoice Item"]:
if field in ["item_tax_rate", "base_net_amount"]:
return None
if doctype == "GL Entry" and field in ["debit", "credit"]:
column.update({"label": _("Amount"), "fieldname": "amount"})
if field == "taxes_and_charges":
column.update({"label": _("Taxes and Charges Template")})
return column
def modify_report_data(data):
import json
new_data = []
for line in data:
if line.debit:
line.amount = -line.debit
else:
line.amount = line.credit
# Remove Invoice GL Tax Entries and generate Tax entries from the invoice lines
if "Invoice" in line.voucher_type:
if line.account_type not in ("Tax", "Round Off"):
new_data += [line]
if line.item_tax_rate:
tax_rates = json.loads(line.item_tax_rate)
for account, rate in tax_rates.items():
tax_line = line.copy()
tax_line.account_type = "Tax"
tax_line.account = account
if line.voucher_type == "Sales Invoice":
line.amount = line.base_net_amount
tax_line.amount = line.base_net_amount * (rate / 100)
if line.voucher_type == "Purchase Invoice":
line.amount = -line.base_net_amount
tax_line.amount = -line.base_net_amount * (rate / 100)
new_data += [tax_line]
else:
new_data += [line]
return new_data
# JS client utilities
custom_report_dict = {
'ref_doctype': 'GL Entry',
'report_type': 'Custom Report',
'reference_report': 'Tax Detail'
}
@frappe.whitelist()
def get_custom_reports(name=None):
filters = custom_report_dict.copy()
if name:
filters['name'] = name
reports = frappe.get_list('Report',
filters = filters,
fields = ['name', 'json'],
as_list=False
)
reports_dict = {rep.pop('name'): rep for rep in reports}
# Prevent custom reports with the same name
reports_dict['Tax Detail'] = {'json': None}
return reports_dict
@frappe.whitelist()
def save_custom_report(reference_report, report_name, data):
if reference_report != 'Tax Detail':
frappe.throw(_("The wrong report is referenced."))
if report_name == 'Tax Detail':
frappe.throw(_("The parent report cannot be overwritten."))
doc = {
'doctype': 'Report',
'report_name': report_name,
'is_standard': 'No',
'module': 'Accounts',
'json': data
}
doc.update(custom_report_dict)
try:
newdoc = frappe.get_doc(doc)
newdoc.insert()
frappe.msgprint(_("Report created successfully"))
except frappe.exceptions.DuplicateEntryError:
dbdoc = frappe.get_doc('Report', report_name)
dbdoc.update(doc)
dbdoc.save()
frappe.msgprint(_("Report updated successfully"))
return report_name

View File

@@ -1,840 +0,0 @@
[
{
"account_manager": null,
"accounts": [],
"companies": [],
"credit_limits": [],
"customer_details": null,
"customer_group": "All Customer Groups",
"customer_name": "_Test Customer",
"customer_pos_id": null,
"customer_primary_address": null,
"customer_primary_contact": null,
"customer_type": "Company",
"default_bank_account": null,
"default_commission_rate": 0.0,
"default_currency": null,
"default_price_list": null,
"default_sales_partner": null,
"disabled": 0,
"dn_required": 0,
"docstatus": 0,
"doctype": "Customer",
"email_id": null,
"gender": null,
"image": null,
"industry": null,
"is_frozen": 0,
"is_internal_customer": 0,
"language": "en",
"lead_name": null,
"loyalty_program": null,
"loyalty_program_tier": null,
"market_segment": null,
"mobile_no": null,
"modified": "2021-02-15 05:18:03.624724",
"name": "_Test Customer",
"naming_series": "CUST-.YYYY.-",
"pan": null,
"parent": null,
"parentfield": null,
"parenttype": null,
"payment_terms": null,
"primary_address": null,
"represents_company": "",
"sales_team": [],
"salutation": null,
"so_required": 0,
"tax_category": null,
"tax_id": null,
"tax_withholding_category": null,
"territory": "All Territories",
"website": null
},{
"accounts": [],
"allow_purchase_invoice_creation_without_purchase_order": 0,
"allow_purchase_invoice_creation_without_purchase_receipt": 0,
"companies": [],
"country": "United Kingdom",
"default_bank_account": null,
"default_currency": null,
"default_price_list": null,
"disabled": 0,
"docstatus": 0,
"doctype": "Supplier",
"hold_type": "",
"image": null,
"is_frozen": 0,
"is_internal_supplier": 0,
"is_transporter": 0,
"language": "en",
"modified": "2021-03-31 16:47:10.109316",
"name": "_Test Supplier",
"naming_series": "SUP-.YYYY.-",
"on_hold": 0,
"pan": null,
"parent": null,
"parentfield": null,
"parenttype": null,
"payment_terms": null,
"prevent_pos": 0,
"prevent_rfqs": 0,
"release_date": null,
"represents_company": null,
"supplier_details": null,
"supplier_group": "Raw Material",
"supplier_name": "_Test Supplier",
"supplier_type": "Company",
"tax_category": null,
"tax_id": null,
"tax_withholding_category": null,
"warn_pos": 0,
"warn_rfqs": 0,
"website": null
},{
"account_currency": "GBP",
"account_name": "Debtors",
"account_number": "",
"account_type": "Receivable",
"balance_must_be": "",
"company": "_T",
"disabled": 0,
"docstatus": 0,
"doctype": "Account",
"freeze_account": "No",
"include_in_gross": 0,
"inter_company_account": 0,
"is_group": 0,
"lft": 58,
"modified": "2021-03-26 04:44:19.955468",
"name": "Debtors - _T",
"old_parent": null,
"parent": null,
"parent_account": "Application of Funds (Assets) - _T",
"parentfield": null,
"parenttype": null,
"report_type": "Balance Sheet",
"rgt": 59,
"root_type": "Asset",
"tax_rate": 0.0
},{
"account_currency": "GBP",
"account_name": "Sales",
"account_number": "",
"account_type": "Income Account",
"balance_must_be": "",
"company": "_T",
"disabled": 0,
"docstatus": 0,
"doctype": "Account",
"freeze_account": "No",
"include_in_gross": 0,
"inter_company_account": 0,
"is_group": 0,
"lft": 291,
"modified": "2021-03-26 04:50:21.697703",
"name": "Sales - _T",
"old_parent": null,
"parent": null,
"parent_account": "Income - _T",
"parentfield": null,
"parenttype": null,
"report_type": "Profit and Loss",
"rgt": 292,
"root_type": "Income",
"tax_rate": 0.0
},{
"account_currency": "GBP",
"account_name": "VAT on Sales",
"account_number": "",
"account_type": "Tax",
"balance_must_be": "",
"company": "_T",
"disabled": 0,
"docstatus": 0,
"doctype": "Account",
"freeze_account": "No",
"include_in_gross": 0,
"inter_company_account": 0,
"is_group": 0,
"lft": 317,
"modified": "2021-03-26 04:50:21.697703",
"name": "VAT on Sales - _T",
"old_parent": null,
"parent": null,
"parent_account": "Source of Funds (Liabilities) - _T",
"parentfield": null,
"parenttype": null,
"report_type": "Balance Sheet",
"rgt": 318,
"root_type": "Liability",
"tax_rate": 0.0
},{
"account_currency": "GBP",
"account_name": "Cost of Goods Sold",
"account_number": "",
"account_type": "Cost of Goods Sold",
"balance_must_be": "",
"company": "_T",
"disabled": 0,
"docstatus": 0,
"doctype": "Account",
"freeze_account": "No",
"include_in_gross": 0,
"inter_company_account": 0,
"is_group": 0,
"lft": 171,
"modified": "2021-03-26 04:44:19.994857",
"name": "Cost of Goods Sold - _T",
"old_parent": null,
"parent": null,
"parent_account": "Expenses - _T",
"parentfield": null,
"parenttype": null,
"report_type": "Profit and Loss",
"rgt": 172,
"root_type": "Expense",
"tax_rate": 0.0
},{
"account_currency": "GBP",
"account_name": "VAT on Purchases",
"account_number": "",
"account_type": "Tax",
"balance_must_be": "",
"company": "_T",
"disabled": 0,
"docstatus": 0,
"doctype": "Account",
"freeze_account": "No",
"include_in_gross": 0,
"inter_company_account": 0,
"is_group": 0,
"lft": 80,
"modified": "2021-03-26 04:44:19.961983",
"name": "VAT on Purchases - _T",
"old_parent": null,
"parent": null,
"parent_account": "Application of Funds (Assets) - _T",
"parentfield": null,
"parenttype": null,
"report_type": "Balance Sheet",
"rgt": 81,
"root_type": "Asset",
"tax_rate": 0.0
},{
"account_currency": "GBP",
"account_name": "Creditors",
"account_number": "",
"account_type": "Payable",
"balance_must_be": "",
"company": "_T",
"disabled": 0,
"docstatus": 0,
"doctype": "Account",
"freeze_account": "No",
"include_in_gross": 0,
"inter_company_account": 0,
"is_group": 0,
"lft": 302,
"modified": "2021-03-26 04:50:21.697703",
"name": "Creditors - _T",
"old_parent": null,
"parent": null,
"parent_account": "Source of Funds (Liabilities) - _T",
"parentfield": null,
"parenttype": null,
"report_type": "Balance Sheet",
"rgt": 303,
"root_type": "Liability",
"tax_rate": 0.0
},{
"additional_discount_percentage": 0.0,
"address_display": null,
"adjust_advance_taxes": 0,
"advances": [],
"against_expense_account": "Cost of Goods Sold - _T",
"allocate_advances_automatically": 0,
"amended_from": null,
"apply_discount_on": "Grand Total",
"apply_tds": 0,
"auto_repeat": null,
"base_discount_amount": 0.0,
"base_grand_total": 511.68,
"base_in_words": "GBP Five Hundred And Eleven and Sixty Eight Pence only.",
"base_net_total": 426.4,
"base_paid_amount": 0.0,
"base_rounded_total": 511.68,
"base_rounding_adjustment": 0.0,
"base_taxes_and_charges_added": 85.28,
"base_taxes_and_charges_deducted": 0.0,
"base_total": 426.4,
"base_total_taxes_and_charges": 85.28,
"base_write_off_amount": 0.0,
"bill_date": null,
"bill_no": null,
"billing_address": null,
"billing_address_display": null,
"buying_price_list": "Standard Buying",
"cash_bank_account": null,
"clearance_date": null,
"company": "_T",
"contact_display": null,
"contact_email": null,
"contact_mobile": null,
"contact_person": null,
"conversion_rate": 1.0,
"cost_center": null,
"credit_to": "Creditors - _T",
"currency": "GBP",
"disable_rounded_total": 0,
"discount_amount": 0.0,
"docstatus": 0,
"doctype": "Purchase Invoice",
"due_date": null,
"from_date": null,
"grand_total": 511.68,
"group_same_items": 0,
"hold_comment": null,
"ignore_pricing_rule": 0,
"in_words": "GBP Five Hundred And Eleven and Sixty Eight Pence only.",
"inter_company_invoice_reference": null,
"is_internal_supplier": 0,
"is_opening": "No",
"is_paid": 0,
"is_return": 0,
"is_subcontracted": "No",
"items": [
{
"allow_zero_valuation_rate": 0,
"amount": 426.4,
"asset_category": null,
"asset_location": null,
"base_amount": 426.4,
"base_net_amount": 426.4,
"base_net_rate": 5.33,
"base_price_list_rate": 5.33,
"base_rate": 5.33,
"base_rate_with_margin": 0.0,
"batch_no": null,
"bom": null,
"brand": null,
"conversion_factor": 0.0,
"cost_center": "Main - _T",
"deferred_expense_account": null,
"description": "<div class=\"ql-editor read-mode\"><p>Fluid to make widgets</p></div>",
"discount_amount": 0.0,
"discount_percentage": 0.0,
"enable_deferred_expense": 0,
"expense_account": "Cost of Goods Sold - _T",
"from_warehouse": null,
"image": null,
"include_exploded_items": 0,
"is_fixed_asset": 0,
"is_free_item": 0,
"item_code": null,
"item_group": null,
"item_name": "Widget Fluid 1Litre",
"item_tax_amount": 0.0,
"item_tax_rate": "{\"VAT on Purchases - _T\": 20.0}",
"item_tax_template": null,
"landed_cost_voucher_amount": 0.0,
"manufacturer": null,
"manufacturer_part_no": null,
"margin_rate_or_amount": 0.0,
"margin_type": "",
"net_amount": 426.4,
"net_rate": 5.33,
"page_break": 0,
"parent": null,
"parentfield": "items",
"parenttype": "Purchase Invoice",
"po_detail": null,
"pr_detail": null,
"price_list_rate": 5.33,
"pricing_rules": null,
"project": null,
"purchase_invoice_item": null,
"purchase_order": null,
"purchase_receipt": null,
"qty": 80.0,
"quality_inspection": null,
"rate": 5.33,
"rate_with_margin": 0.0,
"received_qty": 0.0,
"rejected_qty": 0.0,
"rejected_serial_no": null,
"rejected_warehouse": null,
"rm_supp_cost": 0.0,
"sales_invoice_item": null,
"serial_no": null,
"service_end_date": null,
"service_start_date": null,
"service_stop_date": null,
"stock_qty": 0.0,
"stock_uom": "Nos",
"stock_uom_rate": 0.0,
"total_weight": 0.0,
"uom": "Nos",
"valuation_rate": 0.0,
"warehouse": null,
"weight_per_unit": 0.0,
"weight_uom": null
}
],
"language": "en",
"letter_head": null,
"mode_of_payment": null,
"modified": "2021-04-03 03:33:09.180453",
"name": null,
"naming_series": "ACC-PINV-.YYYY.-",
"net_total": 426.4,
"on_hold": 0,
"other_charges_calculation": "<div class=\"tax-break-up\" style=\"overflow-x: auto;\">\n\t<table class=\"table table-bordered table-hover\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<th class=\"text-left\">Item</th>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<th class=\"text-right\">Taxable Amount</th>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<th class=\"text-right\">VAT on Purchases</th>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Widget Fluid 1Litre</td>\n\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 426.40\n\t\t\t\t\t\t\n\t\t\t\t\t</td>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(20.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 85.28\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t</tr>\n\t\t\t\n\t\t</tbody>\n\t</table>\n</div>",
"outstanding_amount": 511.68,
"paid_amount": 0.0,
"parent": null,
"parentfield": null,
"parenttype": null,
"party_account_currency": "GBP",
"payment_schedule": [],
"payment_terms_template": null,
"plc_conversion_rate": 1.0,
"posting_date": null,
"posting_time": "16:59:56.789522",
"price_list_currency": "GBP",
"pricing_rules": [],
"project": null,
"rejected_warehouse": null,
"release_date": null,
"remarks": "No Remarks",
"represents_company": null,
"return_against": null,
"rounded_total": 511.68,
"rounding_adjustment": 0.0,
"scan_barcode": null,
"select_print_heading": null,
"set_from_warehouse": null,
"set_posting_time": 0,
"set_warehouse": null,
"shipping_address": null,
"shipping_address_display": "",
"shipping_rule": null,
"status": "Unpaid",
"supplied_items": [],
"supplier": "_Test Supplier",
"supplier_address": null,
"supplier_name": "_Test Supplier",
"supplier_warehouse": "Stores - _T",
"tax_category": null,
"tax_id": null,
"tax_withholding_category": null,
"taxes": [
{
"account_head": "VAT on Purchases - _T",
"add_deduct_tax": "Add",
"base_tax_amount": 85.28,
"base_tax_amount_after_discount_amount": 85.28,
"base_total": 511.68,
"category": "Total",
"charge_type": "On Net Total",
"cost_center": "Main - _T",
"description": "VAT on Purchases",
"included_in_print_rate": 0,
"item_wise_tax_detail": "{\"Widget Fluid 1Litre\":[20.0,85.28]}",
"parent": null,
"parentfield": "taxes",
"parenttype": "Purchase Invoice",
"rate": 0.0,
"row_id": null,
"tax_amount": 85.28,
"tax_amount_after_discount_amount": 85.28,
"total": 511.68
}
],
"taxes_and_charges": null,
"taxes_and_charges_added": 85.28,
"taxes_and_charges_deducted": 0.0,
"tc_name": null,
"terms": null,
"title": "_Purchase Invoice",
"to_date": null,
"total": 426.4,
"total_advance": 0.0,
"total_net_weight": 0.0,
"total_qty": 80.0,
"total_taxes_and_charges": 85.28,
"unrealized_profit_loss_account": null,
"update_stock": 0,
"write_off_account": null,
"write_off_amount": 0.0,
"write_off_cost_center": null
},{
"account_for_change_amount": null,
"additional_discount_percentage": 0.0,
"address_display": null,
"advances": [],
"against_income_account": "Sales - _T",
"allocate_advances_automatically": 0,
"amended_from": null,
"apply_discount_on": "Grand Total",
"auto_repeat": null,
"base_change_amount": 0.0,
"base_discount_amount": 0.0,
"base_grand_total": 868.25,
"base_in_words": "GBP Eight Hundred And Sixty Eight and Twenty Five Pence only.",
"base_net_total": 825.0,
"base_paid_amount": 0.0,
"base_rounded_total": 868.25,
"base_rounding_adjustment": 0.0,
"base_total": 825.0,
"base_total_taxes_and_charges": 43.25,
"base_write_off_amount": 0.0,
"c_form_applicable": "No",
"c_form_no": null,
"campaign": null,
"cash_bank_account": null,
"change_amount": 0.0,
"commission_rate": 0.0,
"company": "_T",
"company_address": null,
"company_address_display": null,
"company_tax_id": null,
"contact_display": null,
"contact_email": null,
"contact_mobile": null,
"contact_person": null,
"conversion_rate": 1.0,
"cost_center": null,
"currency": "GBP",
"customer": "_Test Customer",
"customer_address": null,
"customer_group": "All Customer Groups",
"customer_name": "_Test Customer",
"debit_to": "Debtors - _T",
"discount_amount": 0.0,
"docstatus": 0,
"doctype": "Sales Invoice",
"due_date": null,
"from_date": null,
"grand_total": 868.25,
"group_same_items": 0,
"ignore_pricing_rule": 0,
"in_words": "GBP Eight Hundred And Sixty Eight and Twenty Five Pence only.",
"inter_company_invoice_reference": null,
"is_consolidated": 0,
"is_discounted": 0,
"is_internal_customer": 0,
"is_opening": "No",
"is_pos": 0,
"is_return": 0,
"items": [
{
"actual_batch_qty": 0.0,
"actual_qty": 0.0,
"allow_zero_valuation_rate": 0,
"amount": 200.0,
"asset": null,
"barcode": null,
"base_amount": 200.0,
"base_net_amount": 200.0,
"base_net_rate": 50.0,
"base_price_list_rate": 0.0,
"base_rate": 50.0,
"base_rate_with_margin": 0.0,
"batch_no": null,
"brand": null,
"conversion_factor": 1.0,
"cost_center": "Main - _T",
"customer_item_code": null,
"deferred_revenue_account": null,
"delivered_by_supplier": 0,
"delivered_qty": 0.0,
"delivery_note": null,
"description": "<div class=\"ql-editor read-mode\"><p>Used</p></div>",
"discount_amount": 0.0,
"discount_percentage": 0.0,
"dn_detail": null,
"enable_deferred_revenue": 0,
"expense_account": null,
"finance_book": null,
"image": null,
"income_account": "Sales - _T",
"incoming_rate": 0.0,
"is_fixed_asset": 0,
"is_free_item": 0,
"item_code": null,
"item_group": null,
"item_name": "Dunlop tyres",
"item_tax_rate": "{\"VAT on Sales - _T\": 20.0}",
"item_tax_template": null,
"margin_rate_or_amount": 0.0,
"margin_type": "",
"net_amount": 200.0,
"net_rate": 50.0,
"page_break": 0,
"parent": null,
"parentfield": "items",
"parenttype": "Sales Invoice",
"price_list_rate": 0.0,
"pricing_rules": null,
"project": null,
"qty": 4.0,
"quality_inspection": null,
"rate": 50.0,
"rate_with_margin": 0.0,
"sales_invoice_item": null,
"sales_order": null,
"serial_no": null,
"service_end_date": null,
"service_start_date": null,
"service_stop_date": null,
"so_detail": null,
"stock_qty": 4.0,
"stock_uom": "Nos",
"stock_uom_rate": 50.0,
"target_warehouse": null,
"total_weight": 0.0,
"uom": "Nos",
"warehouse": null,
"weight_per_unit": 0.0,
"weight_uom": null
},
{
"actual_batch_qty": 0.0,
"actual_qty": 0.0,
"allow_zero_valuation_rate": 0,
"amount": 65.0,
"asset": null,
"barcode": null,
"base_amount": 65.0,
"base_net_amount": 65.0,
"base_net_rate": 65.0,
"base_price_list_rate": 0.0,
"base_rate": 65.0,
"base_rate_with_margin": 0.0,
"batch_no": null,
"brand": null,
"conversion_factor": 1.0,
"cost_center": "Main - _T",
"customer_item_code": null,
"deferred_revenue_account": null,
"delivered_by_supplier": 0,
"delivered_qty": 0.0,
"delivery_note": null,
"description": "<div class=\"ql-editor read-mode\"><p>Used</p></div>",
"discount_amount": 0.0,
"discount_percentage": 0.0,
"dn_detail": null,
"enable_deferred_revenue": 0,
"expense_account": null,
"finance_book": null,
"image": null,
"income_account": "Sales - _T",
"incoming_rate": 0.0,
"is_fixed_asset": 0,
"is_free_item": 0,
"item_code": "",
"item_group": null,
"item_name": "Continental tyres",
"item_tax_rate": "{\"VAT on Sales - _T\": 5.0}",
"item_tax_template": null,
"margin_rate_or_amount": 0.0,
"margin_type": "",
"net_amount": 65.0,
"net_rate": 65.0,
"page_break": 0,
"parent": null,
"parentfield": "items",
"parenttype": "Sales Invoice",
"price_list_rate": 0.0,
"pricing_rules": null,
"project": null,
"qty": 1.0,
"quality_inspection": null,
"rate": 65.0,
"rate_with_margin": 0.0,
"sales_invoice_item": null,
"sales_order": null,
"serial_no": null,
"service_end_date": null,
"service_start_date": null,
"service_stop_date": null,
"so_detail": null,
"stock_qty": 1.0,
"stock_uom": null,
"stock_uom_rate": 65.0,
"target_warehouse": null,
"total_weight": 0.0,
"uom": "Nos",
"warehouse": null,
"weight_per_unit": 0.0,
"weight_uom": null
},
{
"actual_batch_qty": 0.0,
"actual_qty": 0.0,
"allow_zero_valuation_rate": 0,
"amount": 560.0,
"asset": null,
"barcode": null,
"base_amount": 560.0,
"base_net_amount": 560.0,
"base_net_rate": 70.0,
"base_price_list_rate": 0.0,
"base_rate": 70.0,
"base_rate_with_margin": 0.0,
"batch_no": null,
"brand": null,
"conversion_factor": 1.0,
"cost_center": "Main - _T",
"customer_item_code": null,
"deferred_revenue_account": null,
"delivered_by_supplier": 0,
"delivered_qty": 0.0,
"delivery_note": null,
"description": "<div class=\"ql-editor read-mode\"><p>New</p></div>",
"discount_amount": 0.0,
"discount_percentage": 0.0,
"dn_detail": null,
"enable_deferred_revenue": 0,
"expense_account": null,
"finance_book": null,
"image": null,
"income_account": "Sales - _T",
"incoming_rate": 0.0,
"is_fixed_asset": 0,
"is_free_item": 0,
"item_code": null,
"item_group": null,
"item_name": "Toyo tyres",
"item_tax_rate": "{\"VAT on Sales - _T\": 0.0}",
"item_tax_template": null,
"margin_rate_or_amount": 0.0,
"margin_type": "",
"net_amount": 560.0,
"net_rate": 70.0,
"page_break": 0,
"parent": null,
"parentfield": "items",
"parenttype": "Sales Invoice",
"price_list_rate": 0.0,
"pricing_rules": null,
"project": null,
"qty": 8.0,
"quality_inspection": null,
"rate": 70.0,
"rate_with_margin": 0.0,
"sales_invoice_item": null,
"sales_order": null,
"serial_no": null,
"service_end_date": null,
"service_start_date": null,
"service_stop_date": null,
"so_detail": null,
"stock_qty": 8.0,
"stock_uom": null,
"stock_uom_rate": 70.0,
"target_warehouse": null,
"total_weight": 0.0,
"uom": "Nos",
"warehouse": null,
"weight_per_unit": 0.0,
"weight_uom": null
}
],
"language": "en",
"letter_head": null,
"loyalty_amount": 0.0,
"loyalty_points": 0,
"loyalty_program": null,
"loyalty_redemption_account": null,
"loyalty_redemption_cost_center": null,
"modified": "2021-02-16 05:18:59.755144",
"name": null,
"naming_series": "ACC-SINV-.YYYY.-",
"net_total": 825.0,
"other_charges_calculation": "<div class=\"tax-break-up\" style=\"overflow-x: auto;\">\n\t<table class=\"table table-bordered table-hover\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<th class=\"text-left\">Item</th>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<th class=\"text-right\">Taxable Amount</th>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<th class=\"text-right\">VAT on Sales</th>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Dunlop tyres</td>\n\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 200.00\n\t\t\t\t\t\t\n\t\t\t\t\t</td>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(20.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 40.00\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t</tr>\n\t\t\t\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Continental tyres</td>\n\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 65.00\n\t\t\t\t\t\t\n\t\t\t\t\t</td>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(5.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 3.25\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t</tr>\n\t\t\t\n\t\t\t\t<tr>\n\t\t\t\t\t<td>Toyo tyres</td>\n\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\u00a3 560.00\n\t\t\t\t\t\t\n\t\t\t\t\t</td>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<td class='text-right'>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t(0.0%)\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\u00a3 0.00\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t</tr>\n\t\t\t\n\t\t</tbody>\n\t</table>\n</div>",
"outstanding_amount": 868.25,
"packed_items": [],
"paid_amount": 0.0,
"parent": null,
"parentfield": null,
"parenttype": null,
"party_account_currency": "GBP",
"payment_schedule": [],
"payment_terms_template": null,
"payments": [],
"plc_conversion_rate": 1.0,
"po_date": null,
"po_no": "",
"pos_profile": null,
"posting_date": null,
"posting_time": "5:19:02.994077",
"price_list_currency": "GBP",
"pricing_rules": [],
"project": null,
"redeem_loyalty_points": 0,
"remarks": "No Remarks",
"represents_company": "",
"return_against": null,
"rounded_total": 868.25,
"rounding_adjustment": 0.0,
"sales_partner": null,
"sales_team": [],
"scan_barcode": null,
"select_print_heading": null,
"selling_price_list": "Standard Selling",
"set_posting_time": 0,
"set_target_warehouse": null,
"set_warehouse": null,
"shipping_address": null,
"shipping_address_name": "",
"shipping_rule": null,
"source": null,
"status": "Overdue",
"tax_category": "",
"tax_id": null,
"taxes": [
{
"account_head": "VAT on Sales - _T",
"base_tax_amount": 43.25,
"base_tax_amount_after_discount_amount": 43.25,
"base_total": 868.25,
"charge_type": "On Net Total",
"cost_center": "Main - _T",
"description": "VAT on Sales",
"included_in_print_rate": 0,
"item_wise_tax_detail": "{\"Dunlop tyres\":[20.0,40.0],\"Continental tyres\":[5.0,3.25],\"Toyo tyres\":[0.0,0.0]}",
"parent": null,
"parentfield": "taxes",
"parenttype": "Sales Invoice",
"rate": 0.0,
"row_id": null,
"tax_amount": 43.25,
"tax_amount_after_discount_amount": 43.25,
"total": 868.25
}
],
"taxes_and_charges": null,
"tc_name": null,
"terms": null,
"territory": "All Territories",
"timesheets": [],
"title": "_Sales Invoice",
"to_date": null,
"total": 825.0,
"total_advance": 0.0,
"total_billing_amount": 0.0,
"total_commission": 0.0,
"total_net_weight": 0.0,
"total_qty": 13.0,
"total_taxes_and_charges": 43.25,
"unrealized_profit_loss_account": null,
"update_billed_amount_in_sales_order": 0,
"update_stock": 0,
"write_off_account": null,
"write_off_amount": 0.0,
"write_off_cost_center": null,
"write_off_outstanding_amount_automatically": 0
}
]

View File

@@ -1,186 +0,0 @@
from __future__ import unicode_literals
import datetime
import json
import os
import unittest
import frappe
from frappe.utils import (
add_to_date,
get_first_day,
get_last_day,
get_year_ending,
get_year_start,
getdate,
)
from .tax_detail import filter_match, save_custom_report
class TestTaxDetail(unittest.TestCase):
def load_testdocs(self):
from erpnext.accounts.utils import FiscalYearError, get_fiscal_year
datapath, _ = os.path.splitext(os.path.realpath(__file__))
with open(datapath + '.json', 'r') as fp:
docs = json.load(fp)
now = getdate()
self.from_date = get_first_day(now)
self.to_date = get_last_day(now)
try:
get_fiscal_year(now, company="_T")
except FiscalYearError:
docs = [{
"companies": [{
"company": "_T",
"parent": "_Test Fiscal",
"parentfield": "companies",
"parenttype": "Fiscal Year"
}],
"doctype": "Fiscal Year",
"year": "_Test Fiscal",
"year_end_date": get_year_ending(now),
"year_start_date": get_year_start(now)
}] + docs
docs = [{
"abbr": "_T",
"company_name": "_T",
"country": "United Kingdom",
"default_currency": "GBP",
"doctype": "Company",
"name": "_T"
}] + docs
for doc in docs:
try:
db_doc = frappe.get_doc(doc)
if 'Invoice' in db_doc.doctype:
db_doc.due_date = add_to_date(now, days=1)
db_doc.insert()
# Create GL Entries:
db_doc.submit()
else:
db_doc.insert()
except frappe.exceptions.DuplicateEntryError:
pass
def load_defcols(self):
self.company = frappe.get_doc('Company', '_T')
custom_report = frappe.get_doc('Report', 'Tax Detail')
self.default_columns, _ = custom_report.run_query_report(
filters={
'from_date': '2021-03-01',
'to_date': '2021-03-31',
'company': self.company.name,
'mode': 'run',
'report_name': 'Tax Detail'
}, user=frappe.session.user)
def rm_testdocs(self):
"Remove the Company and all data"
from erpnext.setup.doctype.company.company import create_transaction_deletion_request
create_transaction_deletion_request(self.company.name)
def test_report(self):
self.load_testdocs()
self.load_defcols()
report_name = save_custom_report(
'Tax Detail',
'_Test Tax Detail',
json.dumps({
'columns': self.default_columns,
'sections': {
'Box1':{'Filter0':{'type':'filter','filters':{'4':'VAT on Sales'}}},
'Box2':{'Filter0':{'type':'filter','filters':{'4':'Acquisition'}}},
'Box3':{'Box1':{'type':'section'},'Box2':{'type':'section'}},
'Box4':{'Filter0':{'type':'filter','filters':{'4':'VAT on Purchases'}}},
'Box5':{'Box3':{'type':'section'},'Box4':{'type':'section'}},
'Box6':{'Filter0':{'type':'filter','filters':{'3':'!=Tax','4':'Sales'}}},
'Box7':{'Filter0':{'type':'filter','filters':{'2':'Expense','3':'!=Tax'}}},
'Box8':{'Filter0':{'type':'filter','filters':{'3':'!=Tax','4':'Sales','12':'EU'}}},
'Box9':{'Filter0':{'type':'filter','filters':{'2':'Expense','3':'!=Tax','12':'EU'}}}
},
'show_detail': 1
}))
data = frappe.desk.query_report.run(report_name,
filters={
'from_date': self.from_date,
'to_date': self.to_date,
'company': self.company.name,
'mode': 'run',
'report_name': report_name
}, user=frappe.session.user)
self.assertListEqual(data.get('columns'), self.default_columns)
expected = (('Box1', 43.25), ('Box2', 0.0), ('Box3', 43.25), ('Box4', -85.28), ('Box5', -42.03),
('Box6', 825.0), ('Box7', -426.40), ('Box8', 0.0), ('Box9', 0.0))
exrow = iter(expected)
for row in data.get('result'):
if row.get('voucher_no') and not row.get('posting_date'):
label, value = next(exrow)
self.assertDictEqual(row, {'voucher_no': label, 'amount': value})
self.assertListEqual(data.get('report_summary'),
[{'label': label, 'datatype': 'Currency', 'value': value} for label, value in expected])
self.rm_testdocs()
def test_filter_match(self):
# None - treated as -inf number except range
self.assertTrue(filter_match(None, '!='))
self.assertTrue(filter_match(None, '<'))
self.assertTrue(filter_match(None, '<jjj'))
self.assertTrue(filter_match(None, ' : '))
self.assertTrue(filter_match(None, ':56'))
self.assertTrue(filter_match(None, ':de'))
self.assertFalse(filter_match(None, '3.4'))
self.assertFalse(filter_match(None, '='))
self.assertFalse(filter_match(None, '=3.4'))
self.assertFalse(filter_match(None, '>3.4'))
self.assertFalse(filter_match(None, ' <'))
self.assertFalse(filter_match(None, 'ew'))
self.assertFalse(filter_match(None, ' '))
self.assertFalse(filter_match(None, ' f :'))
# Numbers
self.assertTrue(filter_match(3.4, '3.4'))
self.assertTrue(filter_match(3.4, '.4'))
self.assertTrue(filter_match(3.4, '3'))
self.assertTrue(filter_match(-3.4, '< -3'))
self.assertTrue(filter_match(-3.4, '> -4'))
self.assertTrue(filter_match(3.4, '= 3.4 '))
self.assertTrue(filter_match(3.4, '!=4.5'))
self.assertTrue(filter_match(3.4, ' 3 : 4 '))
self.assertTrue(filter_match(0.0, ' : '))
self.assertFalse(filter_match(3.4, '=4.5'))
self.assertFalse(filter_match(3.4, ' = 3.4 '))
self.assertFalse(filter_match(3.4, '!=3.4'))
self.assertFalse(filter_match(3.4, '>6'))
self.assertFalse(filter_match(3.4, '<-4.5'))
self.assertFalse(filter_match(3.4, '4.5'))
self.assertFalse(filter_match(3.4, '5:9'))
# Strings
self.assertTrue(filter_match('ACC-SINV-2021-00001', 'SINV'))
self.assertTrue(filter_match('ACC-SINV-2021-00001', 'sinv'))
self.assertTrue(filter_match('ACC-SINV-2021-00001', '-2021'))
self.assertTrue(filter_match(' ACC-SINV-2021-00001', ' acc'))
self.assertTrue(filter_match('ACC-SINV-2021-00001', '=2021'))
self.assertTrue(filter_match('ACC-SINV-2021-00001', '!=zz'))
self.assertTrue(filter_match('ACC-SINV-2021-00001', '< zzz '))
self.assertTrue(filter_match('ACC-SINV-2021-00001', ' : sinv '))
self.assertFalse(filter_match('ACC-SINV-2021-00001', ' sinv :'))
self.assertFalse(filter_match('ACC-SINV-2021-00001', ' acc'))
self.assertFalse(filter_match('ACC-SINV-2021-00001', '= 2021 '))
self.assertFalse(filter_match('ACC-SINV-2021-00001', '!=sinv'))
self.assertFalse(filter_match('ACC-SINV-2021-00001', ' >'))
self.assertFalse(filter_match('ACC-SINV-2021-00001', '>aa'))
self.assertFalse(filter_match('ACC-SINV-2021-00001', ' <'))
self.assertFalse(filter_match('ACC-SINV-2021-00001', '< '))
self.assertFalse(filter_match('ACC-SINV-2021-00001', ' ='))
self.assertFalse(filter_match('ACC-SINV-2021-00001', '='))
# Date - always match
self.assertTrue(filter_match(datetime.date(2021, 3, 19), ' kdsjkldfs '))

View File

@@ -579,10 +579,10 @@ def remove_ref_doc_link_from_pe(ref_type, ref_no):
frappe.msgprint(_("Payment Entries {0} are un-linked").format("\n".join(linked_pe)))
@frappe.whitelist()
def get_company_default(company, fieldname, ignore_validation=False):
def get_company_default(company, fieldname):
value = frappe.get_cached_value('Company', company, fieldname)
if not ignore_validation and not value:
if not value:
throw(_("Please set default {0} in Company {1}")
.format(frappe.get_meta("Company").get_label(fieldname), company))

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,11 @@
from __future__ import unicode_literals
import frappe
from frappe import _
from erpnext.setup.utils import insert_record
def setup_agriculture():
if frappe.get_all('Agriculture Analysis Criteria'):
# already setup

View File

@@ -1,20 +1,22 @@
{
"category": "Domains",
"charts": [],
"content": "[{\"type\": \"header\", \"data\": {\"text\": \"Reports & Masters\", \"level\": 4, \"col\": 12}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Crops & Lands\", \"col\": 4}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Analytics\", \"col\": 4}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Diseases & Fertilizers\", \"col\": 4}}]",
"creation": "2020-03-02 17:23:34.339274",
"developer_mode_only": 0,
"disable_user_customization": 0,
"docstatus": 0,
"doctype": "Workspace",
"for_user": "",
"extends_another_page": 0,
"hide_custom": 0,
"icon": "agriculture",
"idx": 0,
"is_standard": 1,
"label": "Agriculture",
"links": [
{
"hidden": 0,
"is_query_report": 0,
"label": "Crops & Lands",
"link_count": 0,
"onboard": 0,
"type": "Card Break"
},
@@ -23,7 +25,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Crop",
"link_count": 0,
"link_to": "Crop",
"link_type": "DocType",
"onboard": 1,
@@ -34,7 +35,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Crop Cycle",
"link_count": 0,
"link_to": "Crop Cycle",
"link_type": "DocType",
"onboard": 1,
@@ -45,7 +45,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Location",
"link_count": 0,
"link_to": "Location",
"link_type": "DocType",
"onboard": 1,
@@ -55,7 +54,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Analytics",
"link_count": 0,
"onboard": 0,
"type": "Card Break"
},
@@ -64,7 +62,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Plant Analysis",
"link_count": 0,
"link_to": "Plant Analysis",
"link_type": "DocType",
"onboard": 0,
@@ -75,7 +72,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Soil Analysis",
"link_count": 0,
"link_to": "Soil Analysis",
"link_type": "DocType",
"onboard": 0,
@@ -86,7 +82,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Water Analysis",
"link_count": 0,
"link_to": "Water Analysis",
"link_type": "DocType",
"onboard": 0,
@@ -97,7 +92,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Soil Texture",
"link_count": 0,
"link_to": "Soil Texture",
"link_type": "DocType",
"onboard": 0,
@@ -108,7 +102,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Weather",
"link_count": 0,
"link_to": "Weather",
"link_type": "DocType",
"onboard": 0,
@@ -119,7 +112,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Agriculture Analysis Criteria",
"link_count": 0,
"link_to": "Agriculture Analysis Criteria",
"link_type": "DocType",
"onboard": 0,
@@ -129,7 +121,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Diseases & Fertilizers",
"link_count": 0,
"onboard": 0,
"type": "Card Break"
},
@@ -138,7 +129,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Disease",
"link_count": 0,
"link_to": "Disease",
"link_type": "DocType",
"onboard": 1,
@@ -149,23 +139,19 @@
"hidden": 0,
"is_query_report": 0,
"label": "Fertilizer",
"link_count": 0,
"link_to": "Fertilizer",
"link_type": "DocType",
"onboard": 1,
"type": "Link"
}
],
"modified": "2021-08-05 12:15:54.595198",
"modified": "2020-12-01 13:38:38.477493",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Agriculture",
"owner": "Administrator",
"parent_page": "",
"public": 1,
"pin_to_bottom": 0,
"pin_to_top": 0,
"restrict_to_domain": "Agriculture",
"roles": [],
"sequence_id": 3,
"shortcuts": [],
"title": "Agriculture"
"shortcuts": []
}

View File

@@ -176,7 +176,6 @@
"fieldtype": "Section Break"
},
{
"collapsible": 1,
"fieldname": "accounting_dimensions_section",
"fieldtype": "Section Break",
"label": "Accounting Dimensions"

View File

@@ -1,125 +0,0 @@
{
"creation": "2021-08-24 16:55:10.923434",
"docstatus": 0,
"doctype": "Form Tour",
"idx": 0,
"is_standard": 1,
"modified": "2021-08-24 16:55:10.923434",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset",
"owner": "Administrator",
"reference_doctype": "Asset",
"save_on_complete": 0,
"steps": [
{
"description": "Select Naming Series based on which Asset ID will be generated",
"field": "",
"fieldname": "naming_series",
"fieldtype": "Select",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Naming Series",
"parent_field": "",
"position": "Bottom",
"title": "Naming Series"
},
{
"description": "Select an Asset Item",
"field": "",
"fieldname": "item_code",
"fieldtype": "Link",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Item Code",
"parent_field": "",
"position": "Bottom",
"title": "Item Code"
},
{
"description": "Select a Location",
"field": "",
"fieldname": "location",
"fieldtype": "Link",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Location",
"parent_field": "",
"position": "Bottom",
"title": "Location"
},
{
"description": "Check Is Existing Asset",
"field": "",
"fieldname": "is_existing_asset",
"fieldtype": "Check",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Is Existing Asset",
"parent_field": "",
"position": "Bottom",
"title": "Is Existing Asset?"
},
{
"description": "Set Available for use date",
"field": "",
"fieldname": "available_for_use_date",
"fieldtype": "Date",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Available-for-use Date",
"parent_field": "",
"position": "Bottom",
"title": "Available For Use Date"
},
{
"description": "Set Gross purchase amount",
"field": "",
"fieldname": "gross_purchase_amount",
"fieldtype": "Currency",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Gross Purchase Amount",
"parent_field": "",
"position": "Bottom",
"title": "Gross Purchase Amount"
},
{
"description": "Set Purchase Date",
"field": "",
"fieldname": "purchase_date",
"fieldtype": "Date",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Purchase Date",
"parent_field": "",
"position": "Bottom",
"title": "Purchase Date"
},
{
"description": "Check Calculate Depreciation",
"field": "",
"fieldname": "calculate_depreciation",
"fieldtype": "Check",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Calculate Depreciation",
"parent_field": "",
"position": "Bottom",
"title": "Calculate Depreciation"
},
{
"description": "Enter depreciation which has already been booked for this asset",
"field": "",
"fieldname": "opening_accumulated_depreciation",
"fieldtype": "Currency",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Opening Accumulated Depreciation",
"parent_field": "",
"position": "Bottom",
"title": "Accumulated Depreciation"
}
],
"title": "Asset"
}

View File

@@ -1,65 +0,0 @@
{
"creation": "2021-08-24 12:48:20.763173",
"docstatus": 0,
"doctype": "Form Tour",
"idx": 0,
"is_standard": 1,
"modified": "2021-08-24 12:48:20.763173",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Category",
"owner": "Administrator",
"reference_doctype": "Asset Category",
"save_on_complete": 0,
"steps": [
{
"description": "Name Asset category. You can create categories based on Asset Types like Furniture, Property, Electronics etc.",
"field": "",
"fieldname": "asset_category_name",
"fieldtype": "Data",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Asset Category Name",
"parent_field": "",
"position": "Bottom",
"title": "Asset Category Name"
},
{
"description": "Check to enable Capital Work in Progress accounting",
"field": "",
"fieldname": "enable_cwip_accounting",
"fieldtype": "Check",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Enable Capital Work in Progress Accounting",
"parent_field": "",
"position": "Bottom",
"title": "Enable CWIP Accounting"
},
{
"description": "Add a row to define Depreciation Method and other details. Note that you can leave Finance Book blank to have it's accounting done in the primary books of accounts.",
"field": "",
"fieldname": "finance_books",
"fieldtype": "Table",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Finance Books",
"parent_field": "",
"position": "Bottom",
"title": "Finance Book Detail"
},
{
"description": "Select the Fixed Asset and Depreciation accounts applicable for this Asset Category type",
"field": "",
"fieldname": "accounts",
"fieldtype": "Table",
"has_next_condition": 0,
"is_table_field": 0,
"label": "Accounts",
"parent_field": "",
"position": "Bottom",
"title": "Accounts"
}
],
"title": "Asset Category"
}

View File

@@ -13,26 +13,26 @@
"documentation_url": "https://docs.erpnext.com/docs/user/manual/en/asset",
"idx": 0,
"is_complete": 0,
"modified": "2021-08-24 17:50:41.573281",
"modified": "2020-07-08 14:05:51.828497",
"modified_by": "Administrator",
"module": "Assets",
"name": "Assets",
"owner": "Administrator",
"steps": [
{
"step": "Fixed Asset Accounts"
"step": "Introduction to Assets"
},
{
"step": "Asset Category"
"step": "Create a Fixed Asset Item"
},
{
"step": "Asset Item"
"step": "Create an Asset Category"
},
{
"step": "Asset Purchase"
"step": "Purchase an Asset Item"
},
{
"step": "Existing Asset"
"step": "Create an Asset"
}
],
"subtitle": "Assets, Depreciations, Repairs, and more.",

View File

@@ -1,21 +0,0 @@
{
"action": "Show Form Tour",
"action_label": "Let's review existing Asset Category",
"creation": "2021-08-13 14:26:18.656303",
"description": "# Asset Category\n\nAn Asset Category classifies different assets of a Company.\n\nYou can create an Asset Category based on the type of assets. For example, all your desktops and laptops can be part of an Asset Category named \"Electronic Equipments\". Create a separate category for furniture. Also, you can update default properties for each category, like:\n - Depreciation type and duration\n - Fixed asset account\n - Depreciation account\n",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-24 12:49:37.665239",
"modified_by": "Administrator",
"name": "Asset Category",
"owner": "Administrator",
"reference_document": "Asset Category",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Define Asset Category",
"validate_action": 1
}

View File

@@ -1,21 +0,0 @@
{
"action": "Show Form Tour",
"action_label": "Let's create a new Asset item",
"creation": "2021-08-13 14:27:07.277167",
"description": "# Asset Item\n\nAsset items are created based on Asset Category. You can create one or multiple items against once Asset Category. The sales and purchase transaction for Asset is done via Asset Item. ",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-16 13:59:18.362233",
"modified_by": "Administrator",
"name": "Asset Item",
"owner": "Administrator",
"reference_document": "Item",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Create an Asset Item",
"validate_action": 1
}

View File

@@ -1,21 +0,0 @@
{
"action": "Show Form Tour",
"action_label": "Let's create a Purchase Receipt",
"creation": "2021-08-13 14:27:53.678621",
"description": "# Purchase an Asset\n\nAssets purchases process if done following the standard Purchase cycle. If capital work in progress is enabled in Asset Category, Asset will be created as soon as Purchase Receipt is created for it. You can quickly create a Purchase Receipt for Asset and see its impact on books of accounts.",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-24 17:26:57.180637",
"modified_by": "Administrator",
"name": "Asset Purchase",
"owner": "Administrator",
"reference_document": "Purchase Receipt",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Purchase an Asset",
"validate_action": 1
}

View File

@@ -1,21 +0,0 @@
{
"action": "Show Form Tour",
"action_label": "Add an existing Asset",
"creation": "2021-08-13 14:28:30.650459",
"description": "# Add an Existing Asset\n\nIf you are just starting with ERPNext, you will need to enter Assets you already possess. You can add them as existing fixed assets in ERPNext. Please note that you will have to make a Journal Entry separately updating the opening balance in the fixed asset account.",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-16 14:03:48.850471",
"modified_by": "Administrator",
"name": "Existing Asset",
"owner": "Administrator",
"reference_document": "Asset",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Add an Existing Asset",
"validate_action": 1
}

View File

@@ -1,21 +0,0 @@
{
"action": "Go to Page",
"action_label": "Let's walk-through Chart of Accounts to review setup",
"creation": "2021-08-13 14:23:09.297765",
"description": "# Fixed Asset Accounts\n\nWith the company, a host of fixed asset accounts are pre-configured. To ensure your asset transactions are leading to correct accounting entries, you can review and set up following asset accounts as per your business requirements.\n - Fixed asset accounts (Asset account)\n - Accumulated depreciation\n - Capital Work in progress (CWIP) account\n - Asset Depreciation account (Expense account)",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2021-08-24 17:46:37.646174",
"modified_by": "Administrator",
"name": "Fixed Asset Accounts",
"owner": "Administrator",
"path": "app/account/view/tree",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Review Fixed Asset Accounts",
"validate_action": 1
}

View File

@@ -1,25 +1,27 @@
{
"category": "Modules",
"charts": [
{
"chart_name": "Asset Value Analytics",
"label": "Asset Value Analytics"
}
],
"content": "[{\"type\": \"onboarding\", \"data\": {\"onboarding_name\":\"Assets\", \"col\": 12}}, {\"type\": \"chart\", \"data\": {\"chart_name\": \"Asset Value Analytics\", \"col\": 12}}, {\"type\": \"spacer\", \"data\": {\"col\": 12}}, {\"type\": \"header\", \"data\": {\"text\": \"Your Shortcuts\", \"level\": 4, \"col\": 12}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Asset\", \"col\": 4}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Asset Category\", \"col\": 4}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Fixed Asset Register\", \"col\": 4}}, {\"type\": \"shortcut\", \"data\": {\"shortcut_name\": \"Dashboard\", \"col\": 4}}, {\"type\": \"spacer\", \"data\": {\"col\": 12}}, {\"type\": \"header\", \"data\": {\"text\": \"Reports & Masters\", \"level\": 4, \"col\": 12}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Assets\", \"col\": 4}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Maintenance\", \"col\": 4}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Reports\", \"col\": 4}}]",
"creation": "2020-03-02 15:43:27.634865",
"developer_mode_only": 0,
"disable_user_customization": 0,
"docstatus": 0,
"doctype": "Workspace",
"for_user": "",
"extends_another_page": 0,
"hide_custom": 0,
"icon": "assets",
"idx": 0,
"is_standard": 1,
"label": "Assets",
"links": [
{
"hidden": 0,
"is_query_report": 0,
"label": "Assets",
"link_count": 0,
"onboard": 0,
"type": "Card Break"
},
@@ -28,7 +30,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset",
"link_count": 0,
"link_to": "Asset",
"link_type": "DocType",
"onboard": 1,
@@ -39,7 +40,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Location",
"link_count": 0,
"link_to": "Location",
"link_type": "DocType",
"onboard": 1,
@@ -50,7 +50,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Category",
"link_count": 0,
"link_to": "Asset Category",
"link_type": "DocType",
"onboard": 1,
@@ -61,7 +60,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Movement",
"link_count": 0,
"link_to": "Asset Movement",
"link_type": "DocType",
"onboard": 0,
@@ -71,7 +69,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Maintenance",
"link_count": 0,
"onboard": 0,
"type": "Card Break"
},
@@ -80,7 +77,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Maintenance Team",
"link_count": 0,
"link_to": "Asset Maintenance Team",
"link_type": "DocType",
"onboard": 1,
@@ -91,7 +87,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Maintenance",
"link_count": 0,
"link_to": "Asset Maintenance",
"link_type": "DocType",
"onboard": 1,
@@ -102,7 +97,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Maintenance Log",
"link_count": 0,
"link_to": "Asset Maintenance Log",
"link_type": "DocType",
"onboard": 0,
@@ -113,7 +107,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Value Adjustment",
"link_count": 0,
"link_to": "Asset Value Adjustment",
"link_type": "DocType",
"onboard": 0,
@@ -124,7 +117,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Repair",
"link_count": 0,
"link_to": "Asset Repair",
"link_type": "DocType",
"onboard": 0,
@@ -134,7 +126,6 @@
"hidden": 0,
"is_query_report": 0,
"label": "Reports",
"link_count": 0,
"onboard": 0,
"type": "Card Break"
},
@@ -143,7 +134,6 @@
"hidden": 0,
"is_query_report": 1,
"label": "Asset Depreciation Ledger",
"link_count": 0,
"link_to": "Asset Depreciation Ledger",
"link_type": "Report",
"onboard": 0,
@@ -154,7 +144,6 @@
"hidden": 0,
"is_query_report": 1,
"label": "Asset Depreciations and Balances",
"link_count": 0,
"link_to": "Asset Depreciations and Balances",
"link_type": "Report",
"onboard": 0,
@@ -165,23 +154,20 @@
"hidden": 0,
"is_query_report": 0,
"label": "Asset Maintenance",
"link_count": 0,
"link_to": "Asset Maintenance",
"link_type": "Report",
"onboard": 0,
"type": "Link"
}
],
"modified": "2021-08-05 12:15:54.839453",
"modified": "2020-12-01 13:38:37.977119",
"modified_by": "Administrator",
"module": "Assets",
"name": "Assets",
"onboarding": "Assets",
"owner": "Administrator",
"parent_page": "",
"public": 1,
"restrict_to_domain": "",
"roles": [],
"sequence_id": 4,
"pin_to_bottom": 0,
"pin_to_top": 0,
"shortcuts": [
{
"label": "Asset",
@@ -203,6 +189,5 @@
"link_to": "Asset",
"type": "Dashboard"
}
],
"title": "Assets"
]
}

View File

@@ -102,8 +102,8 @@ frappe.ui.form.on("Purchase Order Item", {
}
});
erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends erpnext.buying.BuyingController {
setup() {
erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend({
setup: function() {
this.frm.custom_make_buttons = {
'Purchase Receipt': 'Purchase Receipt',
'Purchase Invoice': 'Purchase Invoice',
@@ -111,13 +111,13 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
'Payment Entry': 'Payment',
}
super.setup();
this._super();
}
},
refresh(doc, cdt, cdn) {
refresh: function(doc, cdt, cdn) {
var me = this;
super.refresh();
this._super();
var allow_receipt = false;
var is_drop_ship = false;
@@ -223,9 +223,9 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
} else if(doc.docstatus===0) {
cur_frm.cscript.add_from_mappers();
}
}
},
get_items_from_open_material_requests() {
get_items_from_open_material_requests: function() {
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.material_request.material_request.make_purchase_order_based_on_supplier",
args: {
@@ -243,17 +243,17 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
},
get_query_method: "erpnext.stock.doctype.material_request.material_request.get_material_requests_based_on_supplier"
});
}
},
validate() {
validate: function() {
set_schedule_date(this.frm);
}
},
has_unsupplied_items() {
return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty);
}
has_unsupplied_items: function() {
return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty)
},
make_stock_entry() {
make_stock_entry: function() {
var items = $.map(cur_frm.doc.items, function(d) { return d.bom ? d.item_code : false; });
var me = this;
@@ -368,9 +368,9 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
me.dialog.hide();
});
}
},
_make_rm_stock_entry(rm_items) {
_make_rm_stock_entry: function(rm_items) {
frappe.call({
method:"erpnext.buying.doctype.purchase_order.purchase_order.make_rm_stock_entry",
args: {
@@ -383,31 +383,31 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
}
});
}
},
make_inter_company_order(frm) {
make_inter_company_order: function(frm) {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_inter_company_sales_order",
frm: frm
});
}
},
make_purchase_receipt() {
make_purchase_receipt: function() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
frm: cur_frm,
freeze_message: __("Creating Purchase Receipt ...")
})
}
},
make_purchase_invoice() {
make_purchase_invoice: function() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
frm: cur_frm
})
}
},
add_from_mappers() {
add_from_mappers: function() {
var me = this;
this.frm.add_custom_button(__('Material Request'),
function() {
@@ -516,13 +516,13 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
}
});
}, __("Tools"));
}
},
tc_name() {
tc_name: function() {
this.get_terms();
}
},
items_add(doc, cdt, cdn) {
items_add: function(doc, cdt, cdn) {
var row = frappe.get_doc(cdt, cdn);
if(doc.schedule_date) {
row.schedule_date = doc.schedule_date;
@@ -530,13 +530,13 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
} else {
this.frm.script_manager.copy_from_first_row("items", row, ["schedule_date"]);
}
}
},
unhold_purchase_order(){
unhold_purchase_order: function(){
cur_frm.cscript.update_status("Resume", "Draft")
}
},
hold_purchase_order(){
hold_purchase_order: function(){
var me = this;
var d = new frappe.ui.Dialog({
title: __('Reason for Hold'),
@@ -570,31 +570,31 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e
}
});
d.show();
}
},
unclose_purchase_order(){
unclose_purchase_order: function(){
cur_frm.cscript.update_status('Re-open', 'Submitted')
}
},
close_purchase_order(){
close_purchase_order: function(){
cur_frm.cscript.update_status('Close', 'Closed')
}
},
delivered_by_supplier(){
delivered_by_supplier: function(){
cur_frm.cscript.update_status('Deliver', 'Delivered')
}
},
items_on_form_rendered() {
items_on_form_rendered: function() {
set_schedule_date(this.frm);
},
schedule_date: function() {
set_schedule_date(this.frm);
}
schedule_date() {
set_schedule_date(this.frm);
}
};
});
// for backward compatibility: combine new and previous states
extend_cscript(cur_frm.cscript, new erpnext.buying.PurchaseOrderController({frm: cur_frm}));
$.extend(cur_frm.cscript, new erpnext.buying.PurchaseOrderController({frm: cur_frm}));
cur_frm.cscript.update_status= function(label, status){
frappe.call({

View File

@@ -205,10 +205,10 @@ frappe.ui.form.on("Request for Quotation Supplier",{
})
erpnext.buying.RequestforQuotationController = class RequestforQuotationController extends erpnext.buying.BuyingController {
refresh() {
erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.extend({
refresh: function() {
var me = this;
super.refresh();
this._super();
if (this.frm.doc.docstatus===0) {
this.frm.add_custom_button(__('Material Request'),
function() {
@@ -302,17 +302,17 @@ erpnext.buying.RequestforQuotationController = class RequestforQuotationControll
me.get_suppliers_button(me.frm);
}, __("Tools"));
}
}
},
calculate_taxes_and_totals() {
calculate_taxes_and_totals: function() {
return;
}
},
tc_name() {
tc_name: function() {
this.get_terms();
}
},
get_suppliers_button (frm) {
get_suppliers_button: function (frm) {
var doc = frm.doc;
var dialog = new frappe.ui.Dialog({
title: __("Get Suppliers"),
@@ -410,8 +410,8 @@ erpnext.buying.RequestforQuotationController = class RequestforQuotationControll
});
dialog.show();
}
};
},
});
// for backward compatibility: combine new and previous states
extend_cscript(cur_frm.cscript, new erpnext.buying.RequestforQuotationController({frm: cur_frm}));
$.extend(cur_frm.cscript, new erpnext.buying.RequestforQuotationController({frm: cur_frm}));

View File

@@ -4,19 +4,19 @@
// attach required files
{% include 'erpnext/public/js/controllers/buying.js' %};
erpnext.buying.SupplierQuotationController = class SupplierQuotationController extends erpnext.buying.BuyingController {
setup() {
erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.extend({
setup: function() {
this.frm.custom_make_buttons = {
'Purchase Order': 'Purchase Order',
'Quotation': 'Quotation'
}
super.setup();
}
this._super();
},
refresh() {
refresh: function() {
var me = this;
super.refresh();
this._super();
if (this.frm.doc.__islocal && !this.frm.doc.valid_till) {
this.frm.set_value('valid_till', frappe.datetime.add_months(this.frm.doc.transaction_date, 1));
@@ -77,25 +77,25 @@ erpnext.buying.SupplierQuotationController = class SupplierQuotationController e
})
}, __("Get Items From"));
}
}
},
make_purchase_order() {
make_purchase_order: function() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_purchase_order",
frm: cur_frm
})
}
make_quotation() {
},
make_quotation: function() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_quotation",
frm: cur_frm
})
}
};
});
// for backward compatibility: combine new and previous states
extend_cscript(cur_frm.cscript, new erpnext.buying.SupplierQuotationController({frm: cur_frm}));
$.extend(cur_frm.cscript, new erpnext.buying.SupplierQuotationController({frm: cur_frm}));
cur_frm.fields_dict['items'].grid.get_field('project').get_query =
function(doc, cdt, cdn) {

View File

@@ -1,49 +0,0 @@
{
"add_more_button": 1,
"app": "ERPNext",
"creation": "2019-11-15 14:45:32.626641",
"docstatus": 0,
"doctype": "Onboarding Slide",
"domains": [],
"help_links": [
{
"label": "Learn More",
"video_id": "zsrrVDk6VBs"
}
],
"idx": 0,
"image_src": "",
"is_completed": 0,
"max_count": 3,
"modified": "2019-12-09 17:54:18.452038",
"modified_by": "Administrator",
"name": "Add A Few Suppliers",
"owner": "Administrator",
"ref_doctype": "Supplier",
"slide_desc": "",
"slide_fields": [
{
"align": "",
"fieldname": "supplier_name",
"fieldtype": "Data",
"label": "Supplier Name",
"placeholder": "",
"reqd": 1
},
{
"align": "",
"fieldtype": "Column Break",
"reqd": 0
},
{
"align": "",
"fieldname": "supplier_email",
"fieldtype": "Data",
"label": "Supplier Email",
"reqd": 1
}
],
"slide_order": 50,
"slide_title": "Add A Few Suppliers",
"slide_type": "Create"
}

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