Compare commits

..

330 Commits

Author SHA1 Message Date
Frappe Bot
4f3fd030ae Merge branch 'staging-fixes' into staging 2018-12-11 09:55:01 +00:00
Frappe Bot
caed845f3e bumped to version 11.0.3-beta.29 2018-12-11 09:55:01 +00:00
Pawan Mehta
377511165e Simple Trial Balance (#16060) 2018-12-10 21:55:01 +05:30
Frappe Bot
298796bea6 Merge branch 'staging-fixes' into staging 2018-12-10 16:05:45 +00:00
Frappe Bot
ee97a46fde bumped to version 11.0.3-beta.28 2018-12-10 16:05:45 +00:00
Ameya Shenoy
cc552b7e39 Merge pull request #16191 from Alchez/revert-16131
Revert "fix(delivery): update package total on validate (#16131)"
2018-12-10 21:32:53 +05:30
Rohan
c1eb94d37f Revert "fix(delivery): update package total on validate (#16131)"
This reverts commit f43433b43d.
2018-12-10 20:27:14 +05:30
Frappe Bot
43c95e397a Merge branch 'staging-fixes' into staging 2018-12-10 13:08:33 +00:00
Frappe Bot
0509d82701 bumped to version 11.0.3-beta.27 2018-12-10 13:08:33 +00:00
Tyler Matteson
afc55ca821 De-clutter, Regionalize and Domainify Accounts Module Configuration (on staging-fixes) (#16117) 2018-12-10 18:03:19 +05:30
Saif
b52bd9c093 AR/AP Report Enhancement (#16175)
* Modified AR/AP print format

* Filter Sales Person based on either Customer or Voucher's assigned Sales Person

* -Added Sales Person column to Accounts Receivable Summary
-Added all filters in AR/AP Summary Report as in AR/AP Report
-Reordered filters for better grouping
-Fixed a bug that customer_name was not unset after removing Customer from filter
2018-12-10 17:56:42 +05:30
Rohan
f43433b43d fix(delivery): update package total on validate (#16131) 2018-12-10 17:47:31 +05:30
rohitwaghchaure
5472fff027 Added disabled field in the address (#16114) 2018-12-10 17:45:39 +05:30
RicardoJohann
bc0ef0beca Add Serial Number button in Delivery Note and Sales Invoice's Packing List (#16080) 2018-12-10 17:43:03 +05:30
rohitwaghchaure
398e47ecad Merge pull request #16189 from rohitwaghchaure/transferred_qty_issue
[Fix] Transferred qty cannot be null
2018-12-10 17:37:02 +05:30
Rohit Waghchaure
57633b75ed [Fix] Transferred qty cannot be null 2018-12-10 17:36:01 +05:30
Sagar Vora
4c5bd253a2 fix(party dashboard): empty array is truthy, check for length (#16184) 2018-12-10 17:19:10 +05:30
Rohan
39b31ece31 fix(pos): Return empty dict if no results found (#16124) 2018-12-10 17:16:39 +05:30
Deepesh Garg
0c3c148316 Linking company address to pos profile (#16142)
* Linking company address to pos profile

* Translation fix
2018-12-10 16:22:38 +05:30
Nabin Hait
da9c96e9f5 Merge pull request #16150 from rohitwaghchaure/what_is_the_use_of_this_code
Removed unnecessary code
2018-12-07 15:18:11 +05:30
Nabin Hait
2bd6ab9fba Merge pull request #16140 from KanchanChauhan/staging-fixes
[Minor]Method path fix in Material Request js
2018-12-07 15:08:44 +05:30
Frappe Bot
67db77cfa8 Merge branch 'staging-fixes' into staging 2018-12-06 09:50:24 +00:00
Frappe Bot
4f1c659050 bumped to version 11.0.3-beta.26 2018-12-06 09:50:24 +00:00
Frappe Bot
ee5d7e6d0f Merge branch 'master' into staging-fixes 2018-12-06 09:26:42 +00:00
Frappe Bot
efb2712d14 Merge branch 'hotfix' 2018-12-06 09:14:35 +00:00
Frappe Bot
be0a349a52 bumped to version 10.1.74 2018-12-06 09:14:35 +00:00
Nabin Hait
32c95c3292 Merge pull request #16113 from nabinhait/travis-fix
fix(test): Fixed tests for discount with margin and period closing voucher
2018-12-06 11:58:56 +05:30
rohitwaghchaure
f85856d9f8 Merge pull request #16155 from rohitwaghchaure/changed_parent_for_item_attribute_value
[Fix] Permissions issue
2018-12-04 18:45:07 +05:30
Rohit Waghchaure
675567419b [Fix] Permissions issue 2018-12-04 18:43:52 +05:30
Rohit Waghchaure
e61430b471 Removed unnecessary code 2018-12-03 18:54:26 +05:30
Kanchan Chauhan
9dc85153e0 [Minor]Method path fix in Material Request js 2018-12-03 14:39:43 +05:30
Nabin Hait
3ecb995485 Merge pull request #16006 from gbm001/gbm001-item-barcodes-pull
fix/feat: Allow extension of barcode types (without validation)
2018-12-03 14:39:14 +05:30
Nabin Hait
94eafb6674 Merge pull request #16005 from ESS-LLP/pr_staging_fixes
[Feature][Fix] Healthcare - Patient Appointment
2018-12-03 14:38:32 +05:30
Nabin Hait
999dfda37b Merge pull request #16065 from deepeshgarg007/supplier-customer-dashboard-fix
Customer/Supplier dashboard fix for multi company setup
2018-12-03 14:37:05 +05:30
Nabin Hait
046a99acf8 Merge branch 'staging-fixes' into supplier-customer-dashboard-fix 2018-12-03 14:36:38 +05:30
Nabin Hait
02aad03e74 Merge pull request #16022 from ESS-LLP/fix-patch
fix: healthcare patch
2018-12-03 14:36:02 +05:30
Nabin Hait
6b93f2fe0a Merge pull request #16139 from Zlash65/fix-assess
[Minor] Assessment Result fix
2018-12-03 14:33:01 +05:30
Nabin Hait
0b4ea25f83 Merge pull request #16138 from rohitwaghchaure/user_permissions_issue_item
[Fix] Permissions issue while making item variants
2018-12-03 14:32:40 +05:30
Nabin Hait
dd7b020b01 fix(test): Fixed tests for period closing voucher 2018-12-03 14:24:41 +05:30
Nabin Hait
dce68422a7 Merge pull request #16133 from rohitwaghchaure/fixed_stock_value_diifference_calculation_for_stock_reco
[Fix] Stock value difference calculation for stock reconciliation
2018-12-03 14:20:40 +05:30
Nabin Hait
b60deebaa9 Merge pull request #16118 from deepeshgarg007/analytics-fix
Bug fixes for analytics report
2018-12-03 14:19:24 +05:30
Zlash65
db43c3af68 display message if details to fetch grade isnt filled up 2018-12-03 12:15:10 +05:30
Rohit Waghchaure
a8003c1af7 [Fix] Permissions issue while making item variants 2018-12-03 11:49:52 +05:30
deepeshgarg007
4c79274054 Fixed patch and deprecated grid reports 2018-11-30 18:01:22 +05:30
deepeshgarg007
ec5bbe351c Row check fix for purchase analytics 2018-11-30 16:25:16 +05:30
rohitwaghchaure
ce72d26e95 Merge pull request #16125 from frappe/revert-16112-accounts_receivable_summary_print_issue
Revert "[Fix] Accounts receivable summary print is not working"
2018-11-30 16:21:53 +05:30
Rohit Waghchaure
16b8ecbe05 [Fix] Stock value difference calculation for stock reconciliation 2018-11-30 16:20:52 +05:30
deepeshgarg007
94a3539015 Row check fix in stock analytics 2018-11-30 16:20:48 +05:30
deepeshgarg007
37b6a2ca0b row check bug fix 2018-11-30 16:15:43 +05:30
Nabin Hait
eda0a6eb33 fix(test): Fixed tests for period closing voucher 2018-11-30 15:15:17 +05:30
rohitwaghchaure
ca332bdcdb Revert "[Fix] Accounts receivable summary print is not working" 2018-11-29 18:15:29 +05:30
deepeshgarg007
ee05e358d1 Rewrote query using orm 2018-11-29 16:24:28 +05:30
deepeshgarg007
c981fb389b Merge branch 'staging-fixes' of https://github.com/frappe/erpnext into supplier-customer-dashboard-fix 2018-11-29 14:57:50 +05:30
deepeshgarg007
3c7c4a61be Test case fix 2018-11-29 14:28:01 +05:30
deepeshgarg007
3eef6411dd Removed print statement 2018-11-29 13:10:02 +05:30
deepeshgarg007
9ed13f4a90 Merge branch 'staging-fixes' of https://github.com/frappe/erpnext into analytics-fix 2018-11-29 12:52:44 +05:30
deepeshgarg007
1a1c013b2a Analytics report bug fixes and code cleaning 2018-11-29 08:34:47 +05:30
Ameya Shenoy
5780e865b7 bumped to version 11.0.3-beta.25 2018-11-28 08:28:36 +00:00
Ameya Shenoy
2806d83362 Merge branch 'master' into staging-fixes 2018-11-28 08:12:48 +00:00
Ameya Shenoy
e3136c38e1 bumped to version 10.1.73 2018-11-28 07:57:27 +00:00
deepeshgarg007
ebe1e12a82 Codacy issue fixes 2018-11-28 08:21:54 +05:30
Nabin Hait
305c8b1fba Merge pull request #16110 from shreyashah115/fix-timer
[Timesheet] Element selector in Timer
2018-11-27 17:57:46 +05:30
Nabin Hait
ce870316c5 Merge pull request #16112 from rohitwaghchaure/accounts_receivable_summary_print_issue
[Fix] Accounts receivable summary print is not working
2018-11-27 17:57:17 +05:30
Nabin Hait
f642f86982 Merge branch 'hotfix' into accounts_receivable_summary_print_issue 2018-11-27 17:56:49 +05:30
Nabin Hait
96598936ad fix(test): Fixed tests for discount with margin and period closing voucher 2018-11-27 17:48:13 +05:30
deepeshgarg007
c1a3c72b49 final dashboard design 2018-11-27 17:09:12 +05:30
Rohit Waghchaure
10bcd5113c [Fix] Accounts receivable summary print is not working 2018-11-27 16:25:35 +05:30
deepeshgarg007
f31caffa74 Changes in get_dashboard_info 2018-11-27 15:04:12 +05:30
Nabin Hait
3b16dd7377 Merge branch 'staging-fixes' into pr_staging_fixes 2018-11-27 14:19:49 +05:30
Nabin Hait
dfd79b0349 Merge branch 'staging-fixes' into gbm001-item-barcodes-pull 2018-11-27 14:19:20 +05:30
Nabin Hait
15ca2f438f Merge pull request #16029 from Alchez/hotfix-child-task-error
Fix error when trying to convert a task into a group even if no child tasks exist
2018-11-27 14:17:32 +05:30
Nabin Hait
676a2fbc8a Merge branch 'staging-fixes' into hotfix-child-task-error 2018-11-27 14:17:23 +05:30
deepeshgarg007
6372fbba54 Merge branch 'staging-fixes' of https://github.com/frappe/erpnext into supplier-customer-dashboard-fix 2018-11-27 14:06:58 +05:30
Nabin Hait
3854940e42 Merge branch 'staging-fixes' into fix-patch 2018-11-27 13:26:05 +05:30
Nabin Hait
e4cc062cf1 Merge pull request #16109 from rohitwaghchaure/while_pulling_advanced_entry_system_uses_grand_total
[Fix] System allocated grand total amount instead of non zero rounded total for advanced entry in the sales invoice
2018-11-27 13:22:50 +05:30
Nabin Hait
b98d08a2cb Merge pull request #16049 from rohitwaghchaure/incorrect_stock_value_difference_calculation
[Fix] Incorrect stock value difference because of negative stock
2018-11-27 13:21:43 +05:30
Nabin Hait
ccb03fb255 Merge pull request #16073 from deepeshgarg007/receivable-summary
Accounts receivable summary print fix
2018-11-27 13:11:37 +05:30
shreyashah115@gmail.com
5281fe8e50 fix: Element selector 2018-11-27 13:11:30 +05:30
Nabin Hait
72fc1b57be Merge pull request #16083 from Anurag810/new-fix-branch
[fix] delivery note with quantity equal 0 #14211
2018-11-27 13:10:31 +05:30
Nabin Hait
3c31e4ad4b Merge pull request #16088 from rohitwaghchaure/fixed_pos_profile_packing_items
If is pos is enabled and no pos profile then use the item's default warehouse for packing materials
2018-11-27 13:10:14 +05:30
Nabin Hait
6743219dc2 Merge pull request #16094 from rohitwaghchaure/validate_due_date_for_purchase_invoice
[Fix] Due Date cannot be before Posting Date should consider supplier invoice date for purchase invoice
2018-11-27 13:09:16 +05:30
Nabin Hait
5f7b37ee11 Merge pull request #16093 from rohitwaghchaure/manufacturing_settings_permissions_issue
[Fix] No permission for Manufacturing Settings
2018-11-27 13:07:44 +05:30
Rohit Waghchaure
6cc2f52fa4 [Fix] System allocated grand total amount instead of non zero rounded total for advanced entry in the sales invoice 2018-11-27 12:07:03 +05:30
Nabin Hait
dde952d591 Merge pull request #16092 from deepeshgarg007/salary_slip
Salary slip earnings and deductions table bug fix
2018-11-27 11:39:10 +05:30
Nabin Hait
a9f72bd3ce Merge pull request #16108 from KanchanChauhan/indicators-in-leave-applications
[Minor] Indicators in Leave Application
2018-11-27 11:38:44 +05:30
Nabin Hait
9a06543453 Merge branch 'staging-fixes' into indicators-in-leave-applications 2018-11-27 11:38:29 +05:30
Nabin Hait
9a4cf4dce9 Merge pull request #16100 from deepeshgarg007/test-fix
Removed total label from graph
2018-11-27 11:37:30 +05:30
Nabin Hait
f48cf001ed Merge branch 'staging-fixes' into test-fix 2018-11-27 11:37:22 +05:30
Nabin Hait
be65af5dfe Merge pull request #16101 from SaiFi0102/patch-1
Company rename abbr to consider more DocTypes
2018-11-27 11:36:46 +05:30
Nabin Hait
57fa8759ee Merge pull request #16102 from deepeshgarg007/fees
Paid Amount not showing for fees in web portal fix
2018-11-27 11:36:27 +05:30
Nabin Hait
df8fb59511 Merge pull request #16099 from SaiFi0102/SO-Validate-Set-GrossProfit
Set Gross Profit on server-side validation of Sales Order
2018-11-27 11:19:15 +05:30
Nabin Hait
f806cfecaa Merge branch 'staging-fixes' into SO-Validate-Set-GrossProfit 2018-11-27 11:18:54 +05:30
Kanchan Chauhan
2d0b788105 [Minor] Indicators in Leave Application 2018-11-27 10:37:23 +05:30
deepeshgarg007
bc513a8828 Removed paid amount form Fees doctype 2018-11-26 20:43:39 +05:30
deepeshgarg007
a9525de0da paid amount fix in fees 2018-11-26 20:34:32 +05:30
Saif
6a9d9d76ef Company rename abbr to consider more DocTypes 2018-11-26 19:56:13 +05:00
Nabin Hait
78d9fac0ce Merge branch 'staging-fixes' into pr_staging_fixes 2018-11-26 20:25:34 +05:30
Nabin Hait
15951e6e93 Merge branch 'staging-fixes' into gbm001-item-barcodes-pull 2018-11-26 20:25:29 +05:30
Nabin Hait
93595fa60a Merge branch 'staging-fixes' into hotfix-child-task-error 2018-11-26 20:24:47 +05:30
Nabin Hait
91c811f170 Merge branch 'staging-fixes' into new-fix-branch 2018-11-26 20:23:37 +05:30
Nabin Hait
c5064069c7 Merge branch 'staging-fixes' into manufacturing_settings_permissions_issue 2018-11-26 20:23:11 +05:30
Nabin Hait
218fa51dba Merge branch 'staging-fixes' into validate_due_date_for_purchase_invoice 2018-11-26 20:23:00 +05:30
Nabin Hait
9fba32a917 Merge pull request #16098 from rohitwaghchaure/on_uncheck_is_return_clear_reference_number
On disabled is return field clear the reference field
2018-11-26 20:20:30 +05:30
Nabin Hait
73e3138a5b Merge branch 'staging-fixes' into on_uncheck_is_return_clear_reference_number 2018-11-26 20:20:22 +05:30
deepeshgarg007
05c2989698 removed total from graph 2018-11-26 20:19:57 +05:30
Nabin Hait
0ccc05bdf7 Merge pull request #15997 from rohitwaghchaure/address_not_set_from_api
[Fix] Address not set from the API
2018-11-26 20:17:03 +05:30
Nabin Hait
7f02659425 Merge branch 'hotfix' into address_not_set_from_api 2018-11-26 20:16:54 +05:30
Nabin Hait
9170c2daab Merge pull request #15989 from deepeshgarg007/bug-fixes
Minor issue fixes
2018-11-26 20:05:25 +05:30
Nabin Hait
b32abde2ac Merge branch 'staging-fixes' into bug-fixes 2018-11-26 20:05:09 +05:30
Nabin Hait
2598c475ed Merge pull request #15999 from codingCoffee/css
css: build files in v10
2018-11-26 20:02:18 +05:30
Saif Ur Rehman
5fdbc68ca3 Set Gross Profit on server-side validation of Sales Order 2018-11-26 19:32:16 +05:00
Rohit Waghchaure
b4a5993ece On uncheck is return field clear the reference field 2018-11-26 20:02:01 +05:30
Nabin Hait
21983b8432 Merge pull request #16001 from jsukrut/staging-fixes
[FIX][#15018][PATIENT Relation should be unique]
2018-11-26 20:01:19 +05:30
Nabin Hait
bcd0ba0d69 Merge pull request #16041 from surajshetty3416/pos-profile-fix
fix: Add additional condition to get_pos_profile
2018-11-26 19:59:17 +05:30
Nabin Hait
56dc5c1be3 Merge branch 'staging-fixes' into pos-profile-fix 2018-11-26 19:59:07 +05:30
Nabin Hait
212a29ae2c Merge pull request #16028 from rohitwaghchaure/not_able_to_view_general_ledger
[Fix] Not able to view general ledger for purchase invoice
2018-11-26 19:57:24 +05:30
Nabin Hait
25e60f3934 Merge pull request #16044 from ESS-LLP/fix-trial-balance
fix: Trial Balance print
2018-11-26 19:56:27 +05:30
Nabin Hait
4191d7eb52 Merge pull request #16045 from SaiFi0102/GrossProfit-Fix-Buying-Amount-Multiple-Invoice
Fixed get_buying_amount in Gross Profit report:
2018-11-26 19:55:06 +05:30
Nabin Hait
d0af0887be Merge pull request #16051 from SaiFi0102/patch-1
Remove "Test" Letter Head
2018-11-26 19:47:07 +05:30
Nabin Hait
70642a0ae4 Merge pull request #16055 from rohitwaghchaure/fixed_holiday_list_not_working
[Fix] New holiday list form is not working
2018-11-26 19:44:19 +05:30
Nabin Hait
36f266355d Merge branch 'staging-fixes' into fixed_holiday_list_not_working 2018-11-26 19:44:11 +05:30
Nabin Hait
736ce9a176 Merge pull request #16095 from SaiFi0102/BugFix-Rate-Calculation
Fixed error due to incorrect use of 'this' while calculating rate
2018-11-26 19:31:25 +05:30
Saif Ur Rehman
147fa73d3f Fixed incorrect use of 'this' causing errors calculating rate 2018-11-26 18:14:06 +05:00
Rohit Waghchaure
d1a85a3637 [Fix] Due date can not be greter than posting date validation should consider supplier invoice date for purchase invoice 2018-11-26 18:42:29 +05:30
Rohit Waghchaure
15ed7a6351 [Fix] No permission for Manufacturing Settings 2018-11-26 17:31:18 +05:30
Anurag Mishra
e5248b6933 Merge branch 'new-fix-branch' of https://github.com/anurag810/erpnext into new-fix-branch 2018-11-26 17:25:28 +05:30
Anurag Mishra
5b6dd58b3e fixed ZeroDivisionError in sales_order.py 2018-11-26 17:22:50 +05:30
Nabin Hait
fc6194e640 Merge branch 'staging-fixes' into new-fix-branch 2018-11-26 17:16:06 +05:30
Nabin Hait
d5fc05c10b Merge pull request #16090 from frappe/update-stale-bot-1-2
Update stale.yml
2018-11-26 17:15:19 +05:30
Nabin Hait
e8469daf0c Merge branch 'staging-fixes' into update-stale-bot-1-2 2018-11-26 17:14:59 +05:30
deepeshgarg007
bd87903b56 Added condition for default amount 2018-11-26 17:13:59 +05:30
Anurag Mishra
e657fe84b8 making validation generic for sales order,sales invoice,purchase order etc. 2018-11-26 17:13:10 +05:30
Anurag mishra
6ddb15b3df fix(validate): Qty is mandatory in delivery note 2018-11-26 17:13:10 +05:30
Anurag mishra
7b2c445707 Delivery Note fixes 2018-11-26 17:13:10 +05:30
Nabin Hait
059c6f8da5 Merge pull request #16070 from nabinhait/travis-fix-1
Travis fixes
2018-11-26 17:00:10 +05:30
Nabin Hait
73ca3cfca6 fix(test): removed test print 2018-11-26 16:16:42 +05:30
Anurag Mishra
42d3af3bbb making validation generic for sales order,sales invoice,purchase order etc. 2018-11-26 15:19:17 +05:30
deepeshgarg007
533066eb87 Salary slip bug fix 2018-11-26 15:04:21 +05:30
Prateeksha Singh
758ca946fa Update stale.yml 2018-11-26 14:45:54 +05:30
Rohit Waghchaure
3893ba302c If is pos and no pos profile use the item's default warehouse for packing materials 2018-11-26 14:13:24 +05:30
Anurag mishra
66bd5810c5 fix(validate): Qty is mandatory in delivery note 2018-11-26 11:36:57 +05:30
Anurag mishra
bc4574b59d Delivery Note fixes 2018-11-26 11:33:22 +05:30
Nabin Hait
2665c37f38 temp(travis): Print statement to fix travis 2018-11-26 11:05:28 +05:30
Nabin Hait
48e0e19b03 fix(test): Fixed salary slip and sales analytics test cases 2018-11-26 11:05:28 +05:30
Nabin Hait
2508d11097 fix(test): Test cases fixed 2018-11-26 11:05:28 +05:30
Nabin Hait
f77cd54a6c fix(tds): Create tds payable under correct parent 2018-11-26 11:05:28 +05:30
deepeshgarg007
9cdece4ca2 Test case fix and other minor bug fix 2018-11-26 11:05:28 +05:30
deepeshgarg007
5dbb9f5312 Accounts receivable summary print fix 2018-11-23 19:54:08 +05:30
deepeshgarg007
a1cffc3490 minor changes in dashboard 2018-11-23 16:51:35 +05:30
deepeshgarg007
0e8c36473a Added colspan to indicators 2018-11-23 11:22:24 +05:30
deepeshgarg007
920dc1400f Customer/Supplier dashboard fix for multi company setup 2018-11-23 10:17:28 +05:30
Rohit Waghchaure
037a151ef5 [Fix] New holiday list form is not working 2018-11-22 12:57:34 +05:30
Saif
2a2f2742eb Remove "Test" Letter Head 2018-11-21 23:29:09 +05:00
Rohit Waghchaure
6424f47f3b [Fix] Incorrect stock value difference because of negative stock 2018-11-21 23:18:41 +05:30
Ranjith
1879e91148 fix: Trial Balance 2018-11-21 16:04:05 +05:30
Saif Ur Rehman
23eef11cf5 Fixed get_buying_amount in Gross Profit report:
To handle the case where there may be multiple invoices for a single delivery
2018-11-21 15:32:37 +05:00
Suraj Shetty
1eb098caf9 Add additional condition condition to get_pos_profile
- If we have any POS Profile related to the user,
that profile should be used
2018-11-21 14:36:58 +05:30
Rohan Bansal
f838597b5f fix(task): Fix error when trying to convert a task into a group even if no child tasks exist 2018-11-20 13:18:05 +05:30
Rohit Waghchaure
770a13ebc3 [Fix] Not able to view general ledger for purchase invoice 2018-11-20 13:01:52 +05:30
Ranjith
5d2e52c4ef fix: healthcare patch 2018-11-19 20:03:25 +05:30
Jamsheer
64e42e1e88 fix: Patient Appointment - update list view 2018-11-19 13:00:49 +05:30
Jamsheer
ee6b317ab5 fix: Patient Appointment - Code standards 2018-11-19 13:00:49 +05:30
Jamsheer
45695c9bcb fix: Realign Patient Appointment fields 2018-11-19 13:00:49 +05:30
Jamsheer
dc3ae114cd feat: Reschedule - Patient Appointment 2018-11-19 13:00:49 +05:30
Andrew McLeod
f99a68a695 feat: Added unit testing for Item Barcodes in item.py
Adds three different barcodes and barcodes types to a test item and
checks that they are added correctly.
Adds a barcode that already exists, and checks a DuplicateEntryError
is raised.
Adds an invalid EAN barcode and checks InvalidBarcode (a subclass of
ValidationError) is raised.
2018-11-16 13:55:55 +00:00
Andrew McLeod
5607762c0f fix/feat: Allow extension of barcode types (without validation)
Currently, it is difficult to add new custom barcode types for two reasons, both of which relate to validate_barcode in item.py:
- There is a bug where barcode types with a space in, such as Code 128, are split in two (so barcode_type is checked against 'Code' and '128' rather than 'Code 128'). This is fixed by splitting the Options field against a newline, instead of spaces.
- All barcodes are validated against the stdnum.ean library. This only handles EAN-8, EAN-13 and UPC-12 barcodes and any other barcode will fail. Barcodes with no type will continue to not be checked. Barcodes with the default barcode_types of EAN, UPC will continue to be checked. The non-default barcode_types of EAN-13 and EAN-8 will also be checked. The barcode_type is cast to upper case before this check is made so ean, upc, ean-13 and ean-8 will also be validated.
This allows people to add their own barcode types, such as Code 128 and QR codes. Users can add custom validation of these barcodes using the usual hooks, but they cannot remove the standard validation.
2018-11-16 11:08:39 +00:00
Jsukrut
b9a95e29b7 [FIX][#15018][PATIENT Relation should be unique] 2018-11-16 11:30:12 +05:30
Ameya Shenoy
27a0c37963 css: build files in v10 2018-11-15 19:21:30 +00:00
Rohit Waghchaure
f4dc71661d [Fix] Address not set from the API 2018-11-15 17:04:02 +05:30
deepeshgarg007
795686d1cc Merge branch 'staging-fixes' of https://github.com/frappe/erpnext into bug-fixes 2018-11-15 16:30:48 +05:30
Frappe Bot
64b4d98778 Merge branch 'staging-fixes' into staging 2018-11-15 09:43:08 +00:00
Frappe Bot
d9dccaefba bumped to version 11.0.3-beta.24 2018-11-15 09:42:35 +00:00
Frappe Bot
ef745b0197 bumped to version 11.0.3-beta.23 2018-11-15 09:37:17 +00:00
Nabin Hait
0aca5aad14 Merge pull request #15976 from deepeshgarg007/summary
[Fix] Accounts receivable summary print format showing zero values
2018-11-15 14:52:16 +05:30
Nabin Hait
a0a2f58a21 Merge pull request #15985 from adityahase/perf-patch
perf(patch): Use INSERT with ON DUPLICATE KEY UPDATE
2018-11-15 14:50:58 +05:30
Frappe Bot
6647ea270c Merge branch 'staging-fixes' into staging 2018-11-15 09:19:18 +00:00
Frappe Bot
a4fe912382 bumped to version 11.0.3-beta.23 2018-11-15 09:19:18 +00:00
Frappe Bot
98b4a1bc81 Merge branch 'master' into staging-fixes 2018-11-15 09:12:04 +00:00
Frappe Bot
0b697c5298 Merge branch 'hotfix' 2018-11-15 09:04:14 +00:00
Frappe Bot
2426d00dd6 bumped to version 10.1.72 2018-11-15 09:04:14 +00:00
rohitwaghchaure
cc907559d0 Merge pull request #15992 from rohitwaghchaure/code_optimization_for_consolidated_report
Code optimization for consolidated financial statement report
2018-11-15 13:48:17 +05:30
Rohit Waghchaure
704796b1cb Code optimization for consolidated financial statement report 2018-11-15 13:46:18 +05:30
rohitwaghchaure
02a7f8f0b2 Merge pull request #15991 from rohitwaghchaure/fixed_consolidated_conversion_issue
[Fix] Consolidated financial statement report currency conversion issue
2018-11-15 12:56:11 +05:30
Rohit Waghchaure
9d0f90975b [Fix] Consolidated financial statement report currency conversion issue 2018-11-15 12:55:20 +05:30
rohitwaghchaure
93f358778b Merge pull request #15990 from rohitwaghchaure/patch_code_refactor
[Minor] Patch fixes
2018-11-15 12:21:46 +05:30
Rohit Waghchaure
43920530a1 [Minor] Patch fixes 2018-11-15 12:20:27 +05:30
deepeshgarg007
4c366eed23 Minor issue fixes 2018-11-15 12:02:07 +05:30
Deepesh Garg
3b8c84fa75 Merge pull request #15975 from nabinhait/staging-fixes
fix(test): Fixed item discount amount calculation and test cases related to pricing rule
2018-11-15 12:01:09 +05:30
rohitwaghchaure
e907c0d15c Merge pull request #15986 from rohitwaghchaure/added_currency_filter_in_consolidated_report
Added currency filter in consolidated financial statement report
2018-11-15 10:53:02 +05:30
Rohit Waghchaure
a95697f506 Added currency filter in consolidated financial statement report 2018-11-14 19:55:44 +05:30
Aditya Hase
d168a71cfb perf(patch): Use INSERT with ON DUPLICATE KEY UPDATE
update_total_qty_field patch was using UPDATE statement with CASE

Now use INSERT INTO with ON DUPLICATE KEY UPDATE clause which
allows this query to use indexes and update multiple rows per query.
2018-11-14 19:09:07 +05:30
Frappe Bot
e4193030b1 Merge branch 'staging-fixes' into staging 2018-11-14 11:33:03 +00:00
Frappe Bot
fac49983a0 bumped to version 11.0.3-beta.22 2018-11-14 11:32:34 +00:00
rohitwaghchaure
ba97b9b2d8 Merge pull request #15980 from rohitwaghchaure/on_save_allow_transfer_for_manufatured_changed
[Fix] On save Allow Transfer for Manufacture reset to default value even if user has changed manually
2018-11-14 15:12:45 +05:30
rohitwaghchaure
593f3f1756 Merge pull request #15978 from nabinhait/fetch_from_fix
fix(patch): Fetch missing gst hsn code in transactions and set hsn-wise taxes
2018-11-14 15:11:26 +05:30
rohitwaghchaure
5395b164cd Merge pull request #15983 from rohitwaghchaure/fixed_claimed_amount_issue
Claimed amount is not reset on cancel of employee advance
2018-11-14 13:21:11 +05:30
Rohit Waghchaure
047a7123eb Claimed amount is not reset on cancel 2018-11-14 13:20:00 +05:30
Rohit Waghchaure
917dda1b76 [Fix] On save Allow Transfer for Manufacture reset to default value even if user has changed manually 2018-11-14 01:18:41 +05:30
Nabin Hait
367a076fa4 fix(discount): Fixed item discount amount calculation 2018-11-13 18:41:58 +05:30
Nabin Hait
d34bfa8c2c fix(patch): Fetch missing gst hsn code in transactions and set hsn-wise taxes 2018-11-13 18:21:22 +05:30
Frappe Bot
fe62024824 bumped to version 11.0.3-beta.21 2018-11-13 11:41:27 +00:00
Nabin Hait
3409e55d24 Merge pull request #15974 from Alsum/assign-sa
assign-sa-to-group-of-employees
2018-11-13 16:55:17 +05:30
deepeshgarg007
7bc6f3843a Fix for accounts Receivable Summary Showing zero values 2018-11-13 16:54:54 +05:30
Frappe Bot
25a74b8283 Merge branch 'staging-fixes' into staging 2018-11-13 11:23:06 +00:00
Frappe Bot
a29237beeb bumped to version 11.0.3-beta.21 2018-11-13 11:23:06 +00:00
Nabin Hait
7fe4124bb8 fix(field property): Made barcode field non-mandatory in item 2018-11-13 16:48:59 +05:30
Frappe Bot
88c88d6e7c Merge branch 'master' into staging-fixes 2018-11-13 10:59:05 +00:00
Frappe Bot
cb1726d6ec Merge branch 'hotfix' 2018-11-13 10:55:31 +00:00
Frappe Bot
6b78e520d2 bumped to version 10.1.71 2018-11-13 10:55:31 +00:00
Nabin Hait
688758a56f fix(test): Fixed item discount amount calculation and test cases related to pricing rule 2018-11-13 16:13:16 +05:30
alsum
e04a753d53 assign-sa-to-group-of-employees 2018-11-13 11:43:58 +02:00
Nabin Hait
ee887f4db7 Merge pull request #15796 from Alsum/set_current_asset_value
trigger set_current_asset_value when make asset_value_adjustment from asset form
2018-11-13 12:42:28 +05:30
Nabin Hait
ee190e34c2 Update asset_value_adjustment.js 2018-11-13 12:41:36 +05:30
Saif
60ec88bcc8 Added Default Warehouse field that sets all item's warehouse (#15462)
* -Added field def_warehouse that sets warehouse of all items
-Grouped warehouse fields together and put raw materies supplied before items table, it will only show if there are any items supplied

* Set def_warehouse in test_sales_order.py

* Changed from def_warehouse to set_warehouse

* Rest of def_warehouse to set_warehouse
2018-11-13 12:37:53 +05:30
Alchez
ce3340903d Update Delivery Trip status based on visited stops (#15723)
* feat(delivery_trip_status): Update Delivery Trip status based on visited stops

* feat(delivery_trip_status): Fix tests

* feat(delivery_trip_status): Fix allow on submit for status

* feat(delivery_trip_status): Change status mapping

* feat(delivery_trip_status): Fix patch

* Update update_delivery_trip_status.py
2018-11-13 12:22:17 +05:30
Alchez
9f87c441b0 feat(delivery_trip): Create a Delivery Trip by selecting multiple Delivery Notes in list view (#15706) 2018-11-13 12:20:05 +05:30
khushalti
fad08e1bcb [fix] - GL entry not creating on PR if rejected qty mentoned (#15815) 2018-11-13 12:09:32 +05:30
Alchez
6f1fd193eb fix(production_plan): Allow work orders to be cancelled (#15955) 2018-11-13 11:47:23 +05:30
rohitwaghchaure
849169e82b Merge pull request #15969 from rohitwaghchaure/fix_company_dashbord_sales_count
[Fix] Company dashboard sales count condition
2018-11-13 11:37:26 +05:30
Britlog
7d9689cc92 [Fix] Website Conversion factor query (#15866)
* [Fix] Conversion factor query

* Update product.py
2018-11-13 11:36:41 +05:30
Rohit Waghchaure
14ffe8b935 [Fix] Company dashboard sales count condition 2018-11-13 11:35:38 +05:30
Britlog
9e9e37d39b [Fix] Conversion factor in offline POS (#15867) 2018-11-13 11:34:27 +05:30
Deepesh Garg
b65bb5df2e Function renaming, code cleaning and minor fixes (#15938) 2018-11-13 11:28:58 +05:30
Stavros Anastasiadis
a695dad525 Upgrade BOM Stock Report base with Qty to Produce (#15939) 2018-11-13 11:17:41 +05:30
Shreya Shah
89974b221d [Feature] Create Raw Material Request from Sales Order (#15452)
* Add new button to Sales Order form - Request for Raw Materials

* Modify get_work_order_items function

* Commonify functions in Production Plan to make it compatible with new feature

* Create and submit Material Request from Sales Order

* Link Sales Order with Material Request

* Minor

* Rename label

* Fix Codacy

* Modify as per review suggestions

- Move dialog to a new function
- Move checkboxes below other fields

* Minor changes

* Check for permissions

* Add common checkboxes for all items

* Fix codacy

* fix: Travis

* fix: Use variable to store query result

* fix: Add comment before fetching exploded items

* refactor: Break into multiple functions

* test: Add test case
2018-11-13 11:15:03 +05:30
Zarrar
6922415d1b [New Feature]Scan Item Barcode label to quick create/update records in items child table (#15731)
* Update transaction.js

* setup barcode scan

stock entry controller not inherited from transaction.js, need to call setup barcode scan from transaction.js

* fix bug of item_code change always reset qty to 0

when calling frappe.model.set_value(dt,dn,'item_code',xxx), even qty is set, system always reset qty to 0.

* Update transaction.js

* Update transaction.js

* Update transaction.js

* Update transaction.js

* Update transaction.js

* Update transaction.js

* clean up barcode logic for transactions

* call scan_barcode method for stock entry

* separate out logic for searching serial, batch or barcode number

* added scan barcode field in transactions doctype

* search barcode-serial-batch sequence, code rectify

* hide all barcode related field if disabled from settings

* remove print statement

* Update stock_entry.py
2018-11-13 11:11:32 +05:30
Ameya Shenoy
42928f978b fix: work order item sorting (#15967) 2018-11-13 11:04:17 +05:30
Ameya Shenoy
e8d3aa9cc9 Merge pull request #15966 from codingCoffee/frankfurter
fix: changed currency exchange API to frankfurter
2018-11-12 18:35:36 +05:30
Ameya Shenoy
3d58576797 Merge pull request #15963 from codingCoffee/frankfurter
fix: changed currency exchange API to frankfurter
2018-11-12 17:55:48 +05:30
Deepesh Garg
84483ff776 Stock analytics script report (#15630)
* Stock analytics script report

* Codacy Issue Fixes

* Codacy Issue Fixes

* Removed Trailing Whitespaces

* Code cleaning and optimization

* Minor Changes

* Code cleaning and spacing

* Added link for stock analytics in stock.py

* Refactoring and code cleaning

* Codacy issue fixes
2018-11-12 17:05:31 +05:30
Deepesh Garg
a057f4c2a0 Script report for purchase analytics (#15612)
* Purchase Analytics Query Report

* Minor Changes

* Codacy Issue Fixes

* Codacy Issues Fixed

* Code cleaning and optimization

* Indentation Issue Fix

* Code cleaning and better function naming

* Added link for purchase analytics in buying.py

* Added link for production analytics in manufacturing.py

* Commonified purchase-analytics using Analytics class

* Codacy issue fix
2018-11-12 17:01:02 +05:30
rohitwaghchaure
ab76ff0836 Added new option group by voucher(consolidated) in the general ledger report (#15957) 2018-11-12 16:58:24 +05:30
Nabin Hait
5e85ab3b67 Update setup.py 2018-11-12 16:46:12 +05:30
JodeQ
1b8e9cd3bb Permission error for new Sales invoice (#15952)
In version
```
Installed Apps
ERPNext: v11.0.3-beta.20 () (staging)
Frappe Framework: v11.0.3-beta.25 () (staging)
```

When creating a new Sales invoice without healthcare active we have this error
```
Not permitted
Insufficient Permission for Patient
```
Console log
```
Traceback (most recent call last):
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/app.py", line 61, in application
    response = frappe.handler.handle()
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/handler.py", line 21, in handle
    data = execute_cmd(cmd)
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/handler.py", line 56, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/__init__.py", line 1007, in call
    return fn(*args, **newargs)
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/desk/search.py", line 53, in search_link
    search_widget(doctype, txt, query, searchfield=searchfield, page_length=page_length, filters=filters, ignore_user_permissions=ignore_user_permissions)
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/desk/search.py", line 149, in search_widget
    as_list=not as_dict)
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/__init__.py", line 1235, in get_list
    return frappe.model.db_query.DatabaseQuery(doctype).execute(None, *args, **kwargs)
  File "/home/frappe/auroraone-v11/apps/frappe/frappe/model/db_query.py", line 40, in execute
    raise frappe.PermissionError(self.doctype)
PermissionError: Patient
```
2018-11-12 16:42:05 +05:30
Pawan Mehta
aa0bed16f6 [fix] #14038-Std hours at company level to calculate timesheet hours (#15819)
* [fix] #14038

* codacy fixes

* add end time calc method

* test case and rename function

* Update timesheet.py
2018-11-12 16:40:07 +05:30
Deepesh Garg
6714214951 Server side script report for sales analytics (#15589)
* Sales Analytics Report

* Codacy issue fixes and  name column addition

* Minor Fixes

* Minor Changes

* Codacy Issue Fixes

* Codacy Issue Fixes

* Bug Fixes

* Code cleaning and optimization

* Deleted Duplicate code

* Indentation Issue Fixes

* Added Supplier Condition

* Cleaned code and better function naming

* Added report link for sales analytics in selling.py

* fix(patch): Patch to delete old analytics reports

* feat(refactor): Created class and refactored code using object oriented paradigm

* Column condition fix

* Minor condition fix

* Minor fix

* parent child map for purchase analytics

* Minor Fixes in get_periodic_data

* Used dots for filters instead of brackets

* Minor Bug fix in get_period_date_ranges

* Test Cases for Analytics Report
2018-11-12 16:15:54 +05:30
Ameya Shenoy
438490fd29 fix: changed currency exchange API to frankfurter
- Switched to Frankfurter's public API (frankfurter.app) from
self hosted API (frankfurter.erpnext.org)
2018-11-12 15:15:06 +05:30
Frappe Bot
35ec2469e9 Merge branch 'staging-fixes' into staging 2018-11-09 10:19:21 +00:00
Frappe Bot
9159ee83ca bumped to version 11.0.3-beta.20 2018-11-09 10:19:21 +00:00
Frappe Bot
4df671585b Merge branch 'master' into staging-fixes 2018-11-09 10:11:27 +00:00
Frappe Bot
f001a9eb4f Merge branch 'hotfix' 2018-11-09 10:09:04 +00:00
Frappe Bot
f8a5cfe8d8 bumped to version 10.1.70 2018-11-09 10:09:04 +00:00
alsum
852bd76a58 add set_current_asset_value to onload func 2018-11-08 11:12:33 +02:00
rohitwaghchaure
a88eaa6e20 [Fix] User able to change discount if pricing rule has discount value as zero (#15921) 2018-11-08 13:05:08 +05:30
Alchez
bf20be53ef fix(bom): Display item name in new BOM form (#15783) 2018-11-08 12:54:20 +05:30
Shreya Shah
9e484fbc12 fix(payment-entry): Take default value None for paid_from (#15777) 2018-11-08 12:52:14 +05:30
patilsangram
667f0fbd6d [fix] Invoice/Delivery note customer po_no overwritten by Sales order null po_no (#15785) 2018-11-08 12:51:41 +05:30
Ameya Shenoy
49647bfecc fix: develop version should be 12 (#15928) 2018-11-08 12:48:35 +05:30
Nabin Hait
6ff2f395f5 fix(gle): Post gl entry for booking COGS from Sales Invoice even if grand_total is zero (#15825) 2018-11-08 12:30:44 +05:30
Zarrar
5be6d19f4d [Minor] Display Discount Amount when Tax table is empty (#15812)
* show discount amount even when tax table is empty

* negate the value for discount while printing
2018-11-08 12:16:26 +05:30
Alchez
068ba191e7 [Feature] Route optimization for Delivery Trip stops (#15566)
* Minor improvements

* [Feature] Route optimization for Delivery Trip stops

* Process and optimize the entire route, with or without locks

* Form sets of routes for optimization based on applied lock positions

* Re-arrange stops based on the optimized routes and lock positions

* Set delay times between stops - offset estimation times by delays cumulatively

* Fix codacy errors

* Fix travis

* feat(route_optimization): Set estimated route distance from Google Maps

* feat(route_optimization): Add tests for route lists

* feat(route_optimization): Fix tests
2018-11-08 11:57:05 +05:30
Shreya Shah
3f6eb6b393 fix: If party type is Shareholder, set appropriate name field (#15916) 2018-11-08 11:51:13 +05:30
Frappe Bot
823e754565 Merge branch 'master' into staging-fixes 2018-11-07 11:26:11 +00:00
Frappe Bot
ccff3e2aec Merge branch 'hotfix' 2018-11-07 11:26:10 +00:00
Frappe Bot
7f37d26f05 bumped to version 10.1.69 2018-11-07 11:26:10 +00:00
Shreya Shah
c704630d5f fix: Return default if company not found (#15915) 2018-11-06 17:24:45 +05:30
Ameya Shenoy
96a2f00c07 Merge branch 'staging-fixes' into staging 2018-11-06 11:13:36 +00:00
Ameya Shenoy
675636cd03 bumped to version 11.0.3-beta.19 2018-11-06 11:13:36 +00:00
Ameya Shenoy
0c42f99b6f Merge pull request #15920 from rohitwaghchaure/fix_patch_ascii_code_error
[Fix] Patch, ascii codec error
2018-11-06 16:35:21 +05:30
Rohit Waghchaure
56bf39bfea [Fix] Patch 2018-11-06 16:32:29 +05:30
Ameya Shenoy
65797bca64 Merge branch 'master' into staging-fixes 2018-11-06 11:02:08 +00:00
Ameya Shenoy
1a41929c6b Merge branch 'hotfix' 2018-11-06 11:02:04 +00:00
Ameya Shenoy
a97a520aa8 bumped to version 10.1.68 2018-11-06 11:02:04 +00:00
rohitwaghchaure
b5ba867b3f Merge pull request #15917 from nabinhait/encoding-issue
fix(encoding): Fixed encoding issue in financial statements
2018-11-06 15:37:23 +05:30
rohitwaghchaure
9eafe8c23e Update financial_statements.py 2018-11-06 13:28:18 +05:30
Nabin Hait
614b042ed3 fix(encoding): Fixed encoding issue in financial statements 2018-11-06 11:48:51 +05:30
Faris Ansari
0fb943181e Merge pull request #15910 from netchampfaris/marketplace-fixes-3
Hub fixes
2018-11-05 19:19:23 +05:30
Faris Ansari
d6b664f7ee fix(hub): Prevent registered actions 2018-11-05 19:18:48 +05:30
rohitwaghchaure
1b2ceadc93 [Fix] Asset date validation (#15887)
* [Fix] Asset date validation

* Update asset.py
2018-11-05 16:04:04 +05:30
Faris Ansari
0d08da50c6 fix: Refresh PageContainer component based on current route 2018-11-05 15:47:26 +05:30
Nabin Hait
3e6663d47e fix(serial no): Set supplier info based on pur invoice if serial no is created from Purchase Invoice (#15820) 2018-11-05 14:01:59 +05:30
Faris Ansari
a22e16dbe3 Merge pull request #15892 from netchampfaris/marketplace-fixes-1
fix: Use frappe.utils.make_event_emitter
2018-11-05 13:48:16 +05:30
Ameya Shenoy
4a6768791b Merge branch 'staging-fixes' into staging 2018-11-05 06:50:34 +00:00
Ameya Shenoy
5ed0257ce2 bumped to version 11.0.3-beta.18 2018-11-05 06:50:33 +00:00
Ameya Shenoy
4a75d58d89 Merge branch 'master' into staging-fixes 2018-11-05 06:45:04 +00:00
Ameya Shenoy
eeb66dfc8e Merge branch 'hotfix' 2018-11-05 06:40:25 +00:00
Ameya Shenoy
59f16bc942 bumped to version 10.1.67 2018-11-05 06:40:25 +00:00
Shreya Shah
6a206225cb Merge pull request #15902 from agritheory/agritheory-restrict_to_domain
Doctypes in domains that are in beta are now restricted to that domain
2018-11-05 10:56:39 +05:30
Tyler Matteson
d14e46ef02 Doctypes in domains that are in beta are now restricted to that domain
non-profit, agriculture, healthcare, hospitality, education

Please enter the commit message for your changes. Lines starting
2018-11-04 08:39:52 -05:00
rohitwaghchaure
e77f38e7e2 Merge pull request #15894 from rohitwaghchaure/fix_update_claimed_amount
Column ‘claimed_amount’ cannot be null
2018-11-02 18:14:08 +05:30
Rohit Waghchaure
598d34445f [Fix] Column ‘claimed_amount’ cannot be null 2018-11-02 16:02:33 +05:30
Faris Ansari
68dbf7f99c fix: Use frappe.utils.make_event_emitter 2018-11-02 13:30:51 +05:30
rohitwaghchaure
c1d255e7bc Merge pull request #15882 from Zlash65/fixtds
[Minor] TDS not calculated properly fix
2018-11-02 13:18:09 +05:30
Zarrar
16d45c8e2e safe encode non ascii characters (#15755) 2018-11-02 13:17:24 +05:30
Navdeep Ghai
768513f2f9 fixed divided by zero error (#15885) 2018-11-02 12:19:05 +05:30
rohitwaghchaure
dcb71a61ad [Fix] Payment entry not able to submit (#15859) 2018-11-02 12:12:42 +05:30
Charles-Henri Decultot
a89bce0b6e Encoding correction (#15877) 2018-11-01 13:18:49 +05:30
Zlash65
ab9852d31a tds not calculated appropriately 2018-11-01 11:40:15 +05:30
Shreya Shah
9f931780a2 Merge pull request #15868 from ESS-LLP/fix-membership
fix: Membership - allow system users to create membership
2018-11-01 10:54:32 +05:30
Zarrar
92a4ff4e81 Merge pull request #15874 from shreyashah115/portal-fixes
Add overdue status for sales order
2018-11-01 10:46:08 +05:30
Ameya Shenoy
46e618bc6e Merge branch 'staging-fixes' into staging 2018-10-31 13:51:24 +00:00
Ameya Shenoy
9f20f777b2 bumped to version 11.0.3-beta.17 2018-10-31 13:51:24 +00:00
Ameya Shenoy
961849beb4 Merge branch 'master' into staging-fixes 2018-10-31 13:43:12 +00:00
Ameya Shenoy
3f32218bc0 Merge branch 'hotfix' 2018-10-31 13:35:59 +00:00
Ameya Shenoy
b4bff7e298 bumped to version 10.1.66 2018-10-31 13:35:58 +00:00
deepeshgarg007
78b273af43 [Bug-Fix] Cannot Save Bank Statement Transaction Entry (#15793)
* Create bank settings only if bank name is available

* Minor bug-fix in validate_overlap
2018-10-31 18:12:03 +05:30
Shreya Shah
41c5fda196 fix(sms-center): Fix db query (#15774) 2018-10-31 18:04:30 +05:30
Shreya Shah
305c82bd8d fix(medical-record): Remove z-index property (#15790) 2018-10-31 18:02:55 +05:30
rohitwaghchaure
cd11bdfdbb [Fix] Supplier wise sales analytics report not showing item details which is added in purchase invoice with update stock (#15869) 2018-10-31 18:02:00 +05:30
Shreya Shah
0c0e49a421 fix: Fix fieldnames in template (#15860) 2018-10-31 18:00:09 +05:30
rohitwaghchaure
3f398d24f3 [Fix] Precision issue, not able to submit the stock entry (#15863) 2018-10-31 17:58:26 +05:30
Shreya
e3a7c68d4f fix(portal): Add overdue status for sales order 2018-10-31 16:00:27 +05:30
Ranjith
f01bf9048d fix: Membership - allow system users to create membership for existing Members 2018-10-31 14:33:28 +05:30
Ameya Shenoy
71ede099ea Merge branch 'staging-fixes' into staging 2018-10-30 12:53:35 +00:00
Ameya Shenoy
d45fef5423 bumped to version 11.0.3-beta.16 2018-10-30 12:53:35 +00:00
Ameya Shenoy
6178b79555 Merge branch 'master' into staging-fixes 2018-10-30 12:48:45 +00:00
Ameya Shenoy
d9a82738d0 Merge branch 'hotfix' 2018-10-30 12:48:42 +00:00
Ameya Shenoy
1f7a5dcd07 bumped to version 10.1.65 2018-10-30 12:48:42 +00:00
Shreya Shah
452619c668 fix(report): Return if not list (#15849) 2018-10-30 11:26:01 +05:30
rohitwaghchaure
dca4b294bd Merge pull request #15853 from rohitwaghchaure/delete_button_not_working_for_print_in_mobile
[Fix] Delete button not working in POS for mobile
2018-10-29 16:52:34 +05:30
Rohit Waghchaure
152a0c86b0 [Fix] Delete button not working in POS for Ipad 2018-10-29 16:50:18 +05:30
Shreya Shah
85a9b52dfa Merge pull request #15789 from deepeshgarg007/production-analytics
[Bug-fix]Production analytics
2018-10-29 15:49:19 +05:30
Shreya Shah
69bbe1995c Update production_analytics.py 2018-10-29 15:38:21 +05:30
rohitwaghchaure
9d0dba5569 Merge pull request #15851 from frappe/pos-delete-fix
fix: Delete button in POS mobile
2018-10-29 15:19:11 +05:30
deepeshgarg007
7b91f9fa0c Bug Fixes 2018-10-29 15:16:25 +05:30
Faris Ansari
3df1327b94 fix: Delete button in POS mobile
Delete button was covered by page-actions container
2018-10-29 15:15:10 +05:30
Shreya Shah
81cdd967d7 Merge pull request #15794 from ashish-greycube/patch-1
Update employee_advance.py
2018-10-29 14:38:21 +05:30
alsum
27e7c15c16 trigger set_current_asset_value when make asset_value_adjustment from asset form 2018-10-24 13:23:34 +02:00
ashish-greycube
4d47c63db1 Update employee_advance.py
https://github.com/frappe/erpnext/issues/13694
Cancel of  already paid "Expense Claim" gives error IntegrityError: (1048, u"Column 'claimed_amount' cannot be null")
Sol: claimed_amount should be flt
2018-10-24 16:35:31 +05:30
Ameya Shenoy
9750d5c184 Merge branch 'staging-fixes' into staging 2018-10-23 12:56:51 +00:00
Ameya Shenoy
6adcfa6032 bumped to version 11.0.3-beta.15 2018-10-23 12:56:51 +00:00
Ameya Shenoy
3643e7b1b4 Merge branch 'master' into staging-fixes 2018-10-23 12:52:48 +00:00
Ameya Shenoy
38eaaade89 Merge branch 'hotfix' 2018-10-23 12:52:46 +00:00
Ameya Shenoy
2a98e59bd4 bumped to version 10.1.64 2018-10-23 12:52:46 +00:00
Ameya Shenoy
03348364e9 Merge pull request #15739 from kennethsequeira/hotfix
Fix for "Improve this page" incorrect link generated in v10 sites
2018-10-23 18:05:25 +05:30
Kenneth Sequeira
991c121b57 added source link for ERPNext docs 2018-10-19 14:31:21 +05:30
Kenneth Sequeira
23ec18e3e4 added docs_app variable to point docs to foundation app 2018-10-19 03:28:12 +05:30
Nabin Hait
65bb91d1c7 Merge branch 'develop' into staging-fixes 2018-07-31 15:13:30 +05:30
Ameya Shenoy
b8a59547f0 modified date for reload_doc (#15027) 2018-07-30 10:58:19 +05:30
Saurabh
63f87441c8 Update hooks.py 2018-07-19 13:13:15 +05:30
236 changed files with 9160 additions and 5254 deletions

2
.github/stale.yml vendored
View File

@@ -1,7 +1,7 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 10
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.

View File

@@ -5,7 +5,7 @@ import frappe
from erpnext.hooks import regional_overrides
from frappe.utils import getdate
__version__ = '10.1.63'
__version__ = '10.1.74'
def get_default_company(user=None):
'''Get default company for user'''

View File

@@ -16,10 +16,11 @@ import copy
class BankStatementTransactionEntry(Document):
def autoname(self):
self.name = self.bank_account + "-" + self.from_date + "-" + self.to_date
mapper_name = self.bank + "-Statement-Settings"
if not frappe.db.exists("Bank Statement Settings", mapper_name):
self.create_settings(self.bank)
self.bank_settings = mapper_name
if self.bank:
mapper_name = self.bank + "-Statement-Settings"
if not frappe.db.exists("Bank Statement Settings", mapper_name):
self.create_settings(self.bank)
self.bank_settings = mapper_name
def create_settings(self, bank):
mapper = frappe.new_doc("Bank Statement Settings")

View File

@@ -807,15 +807,25 @@ frappe.ui.form.on('Payment Entry', {
var write_off_row = $.map(frm.doc["deductions"] || [], function(t) {
return t.account==r.message[account] ? t : null; });
if (!write_off_row.length) {
var row = frm.add_child("deductions");
var row = [];
var difference_amount = flt(frm.doc.difference_amount,
precision("difference_amount"));
if (!write_off_row.length && difference_amount) {
row = frm.add_child("deductions");
row.account = r.message[account];
row.cost_center = r.message["cost_center"];
} else {
var row = write_off_row[0];
row = write_off_row[0];
}
if (row) {
row.amount = flt(row.amount) + difference_amount;
} else {
frappe.msgprint(__("No gain or loss in the exchange rate"))
}
row.amount = flt(row.amount) + flt(frm.doc.difference_amount);
refresh_field("deductions");
frm.events.set_unallocated_amount(frm);

View File

@@ -933,7 +933,7 @@ def get_paid_amount(dt, dn, party_type, party, account, due_date):
return paid_amount[0][0] if paid_amount else 0
@frappe.whitelist()
def get_party_and_account_balance(company, date, paid_from, paid_to=None, ptype=None, pty=None, cost_center=None):
def get_party_and_account_balance(company, date, paid_from=None, paid_to=None, ptype=None, pty=None, cost_center=None):
return frappe._dict({
"party_balance": get_balance_on(party_type=ptype, party=pty, cost_center=cost_center),
"paid_from_account_balance": get_balance_on(paid_from, date, cost_center=cost_center),

View File

@@ -70,12 +70,14 @@ class PeriodClosingVoucher(AccountsController):
net_pl_balance += flt(acc.balance_in_company_currency)
if net_pl_balance:
cost_center = frappe.db.get_value("Company", self.company, "cost_center")
gl_entries.append(self.get_gl_dict({
"account": self.closing_account_head,
"debit_in_account_currency": abs(net_pl_balance) if net_pl_balance > 0 else 0,
"debit": abs(net_pl_balance) if net_pl_balance > 0 else 0,
"credit_in_account_currency": abs(net_pl_balance) if net_pl_balance < 0 else 0,
"credit": abs(net_pl_balance) if net_pl_balance < 0 else 0
"credit": abs(net_pl_balance) if net_pl_balance < 0 else 0,
"cost_center": cost_center
}))
from erpnext.accounts.general_ledger import make_gl_entries

View File

@@ -72,6 +72,7 @@ class TestPeriodClosingVoucher(unittest.TestCase):
"company": "_Test Company",
"fiscal_year": get_fiscal_year(today(), company="_Test Company")[0],
"posting_date": today(),
"cost_center": "_Test Cost Center - _TC",
"remarks": "test"
})
pcv.insert()

View File

@@ -42,6 +42,20 @@ frappe.ui.form.on('POS Profile', {
frm.toggle_display('offline_pos_section', is_offline);
frm.toggle_display('print_format_for_online', !is_offline);
});
frm.set_query('company_address', function(doc) {
if(!doc.company) {
frappe.throw(__('Please set Company'));
}
return {
query: 'frappe.contacts.doctype.address.address.address_query',
filters: {
link_doctype: 'Company',
link_name: doc.company
}
};
});
},
refresh: function(frm) {
@@ -49,11 +63,11 @@ frappe.ui.form.on('POS Profile', {
frm.trigger("toggle_display_account_head");
}
},
company: function(frm) {
frm.trigger("toggle_display_account_head");
},
toggle_display_account_head: function(frm) {
frm.toggle_display('expense_account',
erpnext.is_perpetual_inventory_enabled(frm.doc.company));

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 1,
@@ -13,6 +14,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -40,11 +42,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -70,11 +73,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,11 +105,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
"translatable": 0,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -134,11 +139,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -166,11 +172,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -197,11 +204,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -228,11 +236,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -259,11 +268,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -290,11 +300,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -321,11 +332,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -352,10 +364,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -381,11 +395,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -414,11 +429,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -447,16 +463,17 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "company.country",
"fetch_from": "company.country",
"fieldname": "country",
"fieldtype": "Read Only",
"hidden": 0,
@@ -480,11 +497,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -514,11 +532,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -546,11 +565,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -577,11 +597,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -609,11 +630,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -639,11 +661,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -671,11 +694,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -702,11 +726,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -734,11 +759,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -764,11 +790,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -796,11 +823,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -827,11 +855,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -859,11 +888,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -892,11 +922,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -925,11 +956,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -955,11 +987,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -988,11 +1021,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1021,11 +1055,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1052,11 +1087,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1086,11 +1122,77 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "company_address_section",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Company Address",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "company_address",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Company Address Name",
"length": 0,
"no_copy": 0,
"options": "Address",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1118,11 +1220,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1152,11 +1255,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1182,11 +1286,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1215,11 +1320,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1247,11 +1353,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1279,11 +1386,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1312,11 +1420,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1345,11 +1454,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1377,11 +1487,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1409,11 +1520,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1439,11 +1551,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1472,11 +1585,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1504,11 +1618,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1537,11 +1652,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1570,7 +1686,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
}
],
@@ -1585,7 +1701,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-09-05 12:43:37.272875",
"modified": "2018-12-03 14:16:08.589778",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Profile",
@@ -1639,5 +1755,6 @@
"sort_order": "DESC",
"title_field": "pos_profile_name",
"track_changes": 0,
"track_seen": 0
}
"track_seen": 0,
"track_views": 0
}

View File

@@ -201,8 +201,8 @@ def get_pricing_rule_for_item(args):
"discount_percentage": 0.0
})
else:
item_details.discount_percentage = pricing_rule.discount_percentage or args.discount_percentage
item_details.discount_percentage = (pricing_rule.get('discount_percentage', 0)
if pricing_rule else args.discount_percentage)
elif args.get('pricing_rule'):
item_details = remove_pricing_rule_for_item(args.get("pricing_rule"), item_details)
@@ -393,4 +393,4 @@ def make_pricing_rule(doctype, docname):
doc.selling = 1 if doctype == "Customer" else 0
doc.buying = 1 if doctype == "Supplier" else 0
return doc
return doc

View File

@@ -11,12 +11,16 @@ from erpnext.stock.get_item_details import get_item_details
from frappe import MandatoryError
class TestPricingRule(unittest.TestCase):
def setUp(self):
frappe.db.sql("delete from `tabPricing Rule`")
def tearDown(self):
frappe.db.sql("delete from `tabPricing Rule`")
def test_pricing_rule_for_discount(self):
from erpnext.stock.get_item_details import get_item_details
from frappe import MandatoryError
frappe.db.sql("delete from `tabPricing Rule`")
test_record = {
"doctype": "Pricing Rule",
"title": "_Test Pricing Rule",
@@ -87,16 +91,12 @@ class TestPricingRule(unittest.TestCase):
args.item_code = "_Test Item 2"
details = get_item_details(args)
self.assertEqual(details.get("discount_percentage"), 15)
frappe.db.sql("delete from `tabPricing Rule`")
self.assertEquals(details.get("discount_percentage"), 15)
def test_pricing_rule_for_margin(self):
from erpnext.stock.get_item_details import get_item_details
from frappe import MandatoryError
frappe.db.sql("delete from `tabPricing Rule`")
test_record = {
"doctype": "Pricing Rule",
"title": "_Test Pricing Rule",
@@ -111,14 +111,14 @@ class TestPricingRule(unittest.TestCase):
"company": "_Test Company"
}
frappe.get_doc(test_record.copy()).insert()
item_price = frappe.get_doc({
"doctype": "Item Price",
"price_list": "_Test Price List 2",
"item_code": "_Test FG Item 2",
"price_list_rate": 100
})
item_price.insert(ignore_permissions=True)
args = frappe._dict({
@@ -135,17 +135,13 @@ class TestPricingRule(unittest.TestCase):
"name": None
})
details = get_item_details(args)
self.assertEqual(details.get("margin_type"), "Percentage")
self.assertEqual(details.get("margin_rate_or_amount"), 10)
frappe.db.sql("delete from `tabPricing Rule`")
self.assertEquals(details.get("margin_type"), "Percentage")
self.assertEquals(details.get("margin_rate_or_amount"), 10)
def test_pricing_rule_for_variants(self):
from erpnext.stock.get_item_details import get_item_details
from frappe import MandatoryError
frappe.db.sql("delete from `tabPricing Rule`")
if not frappe.db.exists("Item", "Test Variant PRT"):
frappe.get_doc({
"doctype": "Item",
@@ -213,8 +209,6 @@ class TestPricingRule(unittest.TestCase):
self.assertEqual(details.get("discount_percentage"), 17.5)
def test_pricing_rule_for_stock_qty(self):
frappe.db.sql("delete from `tabPricing Rule`")
test_record = {
"doctype": "Pricing Rule",
"title": "_Test Pricing Rule",
@@ -258,24 +252,18 @@ class TestPricingRule(unittest.TestCase):
def test_pricing_rule_with_margin_and_discount(self):
frappe.delete_doc_if_exists('Pricing Rule', '_Test Pricing Rule')
make_pricing_rule(selling=1, margin_type="Percentage", margin_rate_or_amount=10)
make_pricing_rule(selling=1, margin_type="Percentage", margin_rate_or_amount=10, discount_percentage=10)
si = create_sales_invoice(do_not_save=True)
si.items[0].price_list_rate = 1000
si.payment_schedule = []
si.insert(ignore_permissions=True)
item = si.items[0]
self.assertEqual(item.rate, 1100)
self.assertEqual(item.margin_rate_or_amount, 10)
# With discount
item.discount_percentage = 10
si.payment_schedule = []
si.save()
item = si.items[0]
self.assertEqual(item.rate, 990)
self.assertEquals(item.margin_rate_or_amount, 10)
self.assertEquals(item.rate_with_margin, 1100)
self.assertEqual(item.discount_percentage, 10)
frappe.db.sql("delete from `tabPricing Rule`")
self.assertEquals(item.discount_amount, 110)
self.assertEquals(item.rate, 990)
def make_pricing_rule(**args):
args = frappe._dict(args)
@@ -305,4 +293,4 @@ def make_pricing_rule(**args):
applicable_for = doc.applicable_for.replace(' ', '_').lower()
if args.get(applicable_for):
doc.db_set(applicable_for, args.get(applicable_for))
doc.db_set(applicable_for, args.get(applicable_for))

View File

@@ -514,25 +514,9 @@ frappe.ui.form.on("Purchase Invoice", {
me.frm.set_df_property("apply_tds", "read_only", 1);
}
$.each(["warehouse", "rejected_warehouse"], function(i, field) {
frm.set_query(field, "items", function() {
return {
filters: [
["Warehouse", "company", "in", ["", cstr(frm.doc.company)]],
["Warehouse", "is_group", "=", 0]
]
}
})
})
frm.set_query("supplier_warehouse", function() {
return {
filters: [
["Warehouse", "company", "in", ["", cstr(frm.doc.company)]],
["Warehouse", "is_group", "=", 0]
]
}
})
erpnext.queries.setup_queries(frm, "Warehouse", function() {
return erpnext.queries.warehouse(frm.doc);
});
},
is_subcontracted: function(frm) {

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
@@ -1485,6 +1486,207 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "sec_warehouse",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "update_stock",
"fieldname": "set_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Set Accepted Warehouse",
"length": 0,
"no_copy": 0,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "update_stock",
"description": "Warehouse where you are maintaining stock of rejected items",
"fieldname": "rejected_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Rejected Warehouse",
"length": 0,
"no_copy": 1,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "col_break_warehouse",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "No",
"fieldname": "is_subcontracted",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Raw Materials Supplied",
"length": 0,
"no_copy": 0,
"options": "No\nYes",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:doc.is_subcontracted==\"Yes\"",
"fieldname": "supplier_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplier Warehouse",
"length": 0,
"no_copy": 1,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"print_width": "50px",
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0,
"width": "50px"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -1551,6 +1753,38 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "scan_barcode",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Scan Barcode",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 1,
"allow_in_quick_entry": 0,
@@ -1585,6 +1819,73 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"collapsible_depends_on": "supplied_items",
"columns": 0,
"depends_on": "",
"fieldname": "raw_materials_supplied",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Raw Materials Supplied",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "supplied_items",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplied Items",
"length": 0,
"no_copy": 0,
"options": "Purchase Receipt Item Supplied",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -3723,140 +4024,6 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "raw_materials_supplied",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Raw Materials Supplied",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "No",
"fieldname": "is_subcontracted",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Raw Materials Supplied",
"length": 0,
"no_copy": 0,
"options": "No\nYes",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "supplier_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplier Warehouse",
"length": 0,
"no_copy": 1,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"print_width": "50px",
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0,
"width": "50px"
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "supplied_items",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplied Items",
"length": 0,
"no_copy": 0,
"options": "Purchase Receipt Item Supplied",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -4351,40 +4518,6 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"description": "Warehouse where you are maintaining stock of rejected items",
"fieldname": "rejected_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Rejected Warehouse",
"length": 0,
"no_copy": 1,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -4593,7 +4726,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2018-09-11 14:44:31.220376",
"modified": "2018-11-13 19:55:58.018816",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice",

View File

@@ -61,11 +61,11 @@ class PurchaseInvoice(BuyingController):
self.validate_posting_time()
super(PurchaseInvoice, self).validate()
# apply tax withholding only if checked and applicable
self.set_tax_withholding()
super(PurchaseInvoice, self).validate()
if not self.is_return:
self.po_required()
self.pr_required()
@@ -226,7 +226,7 @@ class PurchaseInvoice(BuyingController):
item.expense_account = warehouse_account[item.warehouse]["account"]
else:
item.expense_account = stock_not_billed_account
elif not item.expense_account and for_validate:
throw(_("Expense account is mandatory for item {0}").format(item.item_code or item.item_name))
@@ -379,7 +379,7 @@ class PurchaseInvoice(BuyingController):
return gl_entries
def make_supplier_gl_entry(self, gl_entries):
# Checked both rounding_adjustment and rounded_total
# Checked both rounding_adjustment and rounded_total
# because rounded_total had value even before introcution of posting GLE based on rounded total
grand_total = self.rounded_total if (self.rounding_adjustment and self.rounded_total) else self.grand_total
@@ -839,6 +839,9 @@ class PurchaseInvoice(BuyingController):
if not accounts or tax_withholding_details.get("account_head") not in accounts:
self.append("taxes", tax_withholding_details)
# calculate totals again after applying TDS
self.calculate_taxes_and_totals()
@frappe.whitelist()
def make_debit_note(source_name, target_doc=None):
from erpnext.controllers.sales_and_purchase_return import make_return_doc
@@ -856,7 +859,8 @@ def make_stock_entry(source_name, target_doc=None):
"Purchase Invoice Item": {
"doctype": "Stock Entry Detail",
"field_map": {
"stock_qty": "transfer_qty"
"stock_qty": "transfer_qty",
"batch_no": "batch_no"
},
}
}, target_doc)

View File

@@ -165,9 +165,12 @@ def get_items_list(pos_profile, company):
select
i.name, i.item_code, i.item_name, i.description, i.item_group, i.has_batch_no,
i.has_serial_no, i.is_stock_item, i.brand, i.stock_uom, i.image,
id.expense_account, id.selling_cost_center, id.default_warehouse
id.expense_account, id.selling_cost_center, id.default_warehouse,
i.sales_uom, c.conversion_factor
from
`tabItem` i LEFT JOIN `tabItem Default` id ON id.parent = i.name and id.company = %s
`tabItem` i
left join `tabItem Default` id on id.parent = i.name and id.company = %s
left join `tabUOM Conversion Detail` c on i.name = c.parent and i.sales_uom = c.uom
where
i.disabled = 0 and i.has_variants = 0 and i.is_sales_item = 1
{cond}
@@ -534,6 +537,7 @@ def validate_item(doc):
item_doc.item_name = item.get('item_name')
item_doc.description = item.get('description')
item_doc.stock_uom = item.get('stock_uom')
item_doc.uom = item.get('uom')
item_doc.item_group = item.get('item_group')
item_doc.append('item_defaults', {
"company": doc.get("company"),

View File

@@ -313,6 +313,10 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
erpnext.setup_serial_no();
},
packed_items_on_form_rendered: function(doc, grid_row) {
erpnext.setup_serial_no();
},
make_sales_return: function() {
frappe.model.open_mapped_doc({
method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_sales_return",
@@ -585,7 +589,7 @@ frappe.ui.form.on('Sales Invoice', {
frm.set_query('company_address', function(doc) {
if(!doc.company) {
frappe.throw(_('Please set Company'));
frappe.throw(__('Please set Company'));
}
return {
@@ -939,7 +943,9 @@ var set_primary_action= function(frm, dialog, $results, invoice_healthcare_servi
dialog.set_primary_action(__('Add'), function() {
let checked_values = get_checked_values($results);
if(checked_values.length > 0){
frm.set_value("patient", dialog.fields_dict.patient.input.value);
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();

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
@@ -1585,6 +1586,71 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "sec_warehouse",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "update_stock",
"fieldname": "set_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Set Source Warehouse",
"length": 0,
"no_copy": 0,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -1651,6 +1717,38 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "scan_barcode",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Scan Barcode",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 1,
"allow_in_quick_entry": 0,
@@ -5546,7 +5644,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2018-09-07 14:24:58.854289",
"modified": "2018-11-12 20:01:21.289303",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",

View File

@@ -131,7 +131,7 @@ class SalesInvoice(SellingController):
#validate amount in mode of payments for returned invoices for pos must be negative
if self.is_pos and self.is_return:
self.verify_payment_amount_is_negative()
if self.redeem_loyalty_points and self.loyalty_program and self.loyalty_points:
validate_loyalty_points(self, self.loyalty_points)
@@ -397,7 +397,7 @@ class SalesInvoice(SellingController):
self.account_for_change_amount = pos.get('account_for_change_amount')
for fieldname in ('territory', 'naming_series', 'currency', 'taxes_and_charges', 'letter_head', 'tc_name',
'selling_price_list', 'company', 'select_print_heading', 'cash_bank_account',
'selling_price_list', 'company', 'select_print_heading', 'cash_bank_account', 'company_address',
'write_off_account', 'write_off_cost_center', 'apply_discount_on'):
if (not for_validate) or (for_validate and not self.get(fieldname)):
self.set(fieldname, pos.get(fieldname))
@@ -662,9 +662,6 @@ class SalesInvoice(SellingController):
def make_gl_entries(self, gl_entries=None, repost_future_gle=True, from_repost=False):
auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
if not self.grand_total:
return
if not gl_entries:
gl_entries = self.get_gl_entries()
@@ -716,7 +713,7 @@ class SalesInvoice(SellingController):
return gl_entries
def make_customer_gl_entry(self, gl_entries):
# Checked both rounding_adjustment and rounded_total
# Checked both rounding_adjustment and rounded_total
# because rounded_total had value even before introcution of posting GLE based on rounded total
grand_total = self.rounded_total if (self.rounding_adjustment and self.rounded_total) else self.grand_total
if grand_total:
@@ -747,9 +744,11 @@ class SalesInvoice(SellingController):
self.get_gl_dict({
"account": tax.account_head,
"against": self.customer,
"credit": flt(tax.base_tax_amount_after_discount_amount),
"credit_in_account_currency": flt(tax.base_tax_amount_after_discount_amount) \
if account_currency==self.company_currency else flt(tax.tax_amount_after_discount_amount),
"credit": flt(tax.base_tax_amount_after_discount_amount,
tax.precision("tax_amount_after_discount_amount")),
"credit_in_account_currency": (flt(tax.base_tax_amount_after_discount_amount,
tax.precision("base_tax_amount_after_discount_amount")) if account_currency==self.company_currency else
flt(tax.tax_amount_after_discount_amount, tax.precision("tax_amount_after_discount_amount"))),
"cost_center": tax.cost_center
}, account_currency)
)
@@ -757,7 +756,7 @@ class SalesInvoice(SellingController):
def make_item_gl_entries(self, gl_entries):
# income account gl entries
for item in self.get("items"):
if flt(item.base_net_amount):
if flt(item.base_net_amount, item.precision("base_net_amount")):
if item.is_fixed_asset:
asset = frappe.get_doc("Asset", item.asset)
@@ -774,9 +773,10 @@ class SalesInvoice(SellingController):
self.get_gl_dict({
"account": item.income_account if not item.enable_deferred_revenue else item.deferred_revenue_account,
"against": self.customer,
"credit": item.base_net_amount,
"credit_in_account_currency": item.base_net_amount \
if account_currency==self.company_currency else item.net_amount,
"credit": flt(item.base_net_amount, item.precision("base_net_amount")),
"credit_in_account_currency": (flt(item.base_net_amount, item.precision("base_net_amount"))
if account_currency==self.company_currency
else flt(item.net_amount, item.precision("net_amount"))),
"cost_center": item.cost_center
}, account_currency)
)
@@ -875,7 +875,7 @@ class SalesInvoice(SellingController):
def make_write_off_gl_entry(self, gl_entries):
# write off entries, applicable if only pos
if self.write_off_account and self.write_off_amount:
if self.write_off_account and flt(self.write_off_amount, self.precision("write_off_amount")):
write_off_account_currency = get_account_currency(self.write_off_account)
default_cost_center = frappe.get_cached_value('Company', self.company, 'cost_center')
@@ -885,10 +885,11 @@ class SalesInvoice(SellingController):
"party_type": "Customer",
"party": self.customer,
"against": self.write_off_account,
"credit": self.base_write_off_amount,
"credit_in_account_currency": self.base_write_off_amount \
if self.party_account_currency==self.company_currency else self.write_off_amount,
"against_voucher": self.return_against if cint(self.is_return) and self.return_against else self.name,
"credit": flt(self.base_write_off_amount, self.precision("base_write_off_amount")),
"credit_in_account_currency": (flt(self.base_write_off_amount,
self.precision("base_write_off_amount")) if self.party_account_currency==self.company_currency
else flt(self.write_off_amount, self.precision("write_off_amount"))),
"against_voucher": self.return_against if cint(self.is_return) else self.name,
"against_voucher_type": self.doctype,
"cost_center": self.cost_center
}, self.party_account_currency)
@@ -897,15 +898,16 @@ class SalesInvoice(SellingController):
self.get_gl_dict({
"account": self.write_off_account,
"against": self.customer,
"debit": self.base_write_off_amount,
"debit_in_account_currency": self.base_write_off_amount \
if write_off_account_currency==self.company_currency else self.write_off_amount,
"debit": flt(self.base_write_off_amount, self.precision("base_write_off_amount")),
"debit_in_account_currency": (flt(self.base_write_off_amount,
self.precision("base_write_off_amount")) if write_off_account_currency==self.company_currency
else flt(self.write_off_amount, self.precision("write_off_amount"))),
"cost_center": self.cost_center or self.write_off_cost_center or default_cost_center
}, write_off_account_currency)
)
def make_gle_for_rounding_adjustment(self, gl_entries):
if self.rounding_adjustment:
if flt(self.rounding_adjustment, self.precision("rounding_adjustment")):
round_off_account, round_off_cost_center = \
get_round_off_account_and_cost_center(self.company)
@@ -913,8 +915,10 @@ class SalesInvoice(SellingController):
self.get_gl_dict({
"account": round_off_account,
"against": self.customer,
"credit_in_account_currency": self.base_rounding_adjustment,
"credit": self.base_rounding_adjustment,
"credit_in_account_currency": flt(self.rounding_adjustment,
self.precision("rounding_adjustment")),
"credit": flt(self.base_rounding_adjustment,
self.precision("base_rounding_adjustment")),
"cost_center": self.cost_center or round_off_cost_center,
}
))
@@ -1022,7 +1026,7 @@ class SalesInvoice(SellingController):
def verify_payment_amount_is_negative(self):
for entry in self.payments:
if entry.amount > 0:
frappe.throw(_("Row #{0} (Payment Table): Amount must be negative").format(entry.idx))
frappe.throw(_("Row #{0} (Payment Table): Amount must be negative").format(entry.idx))
# collection of the loyalty points, create the ledger entry for that.
def make_loyalty_point_entry(self):

View File

@@ -189,7 +189,7 @@ class ShareTransfer(Document):
if (shareholder == 'from_shareholder') else self.to_folio_no;
doc.save()
else:
if doc.folio_no != (self.from_folio_no if (shareholder == 'from_shareholder') else self.to_folio_no):
if doc.folio_no and doc.folio_no != (self.from_folio_no if (shareholder == 'from_shareholder') else self.to_folio_no):
frappe.throw(_('The folio numbers are not matching'))
def autoname_folio(self, shareholder, is_company=False):

View File

@@ -79,7 +79,8 @@ class TestShareTransfer(unittest.TestCase):
}
]
for d in share_transfers:
frappe.get_doc(d).submit()
st = frappe.get_doc(d)
st.submit()
def test_invalid_share_transfer(self):
doc = frappe.get_doc({

View File

@@ -1407,6 +1407,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
this.child.item_code = this.items[0].item_code;
this.child.item_name = this.items[0].item_name;
this.child.stock_uom = this.items[0].stock_uom;
this.child.uom = this.items[0].sales_uom || this.items[0].stock_uom;
this.child.conversion_factor = this.items[0].conversion_factor || 1;
this.child.brand = this.items[0].brand;
this.child.description = this.items[0].description || this.items[0].item_name;
this.child.discount_percentage = 0.0;
@@ -1416,8 +1418,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
this.child.income_account = this.pos_profile_data['income_account'] || this.items[0].income_account;
this.child.warehouse = (this.item_serial_no[this.child.item_code]
? this.item_serial_no[this.child.item_code][1] : (this.pos_profile_data['warehouse'] || this.items[0].default_warehouse));
this.child.price_list_rate = flt(this.price_list_data[this.child.item_code], 9) / flt(this.frm.doc.conversion_rate, 9);
this.child.rate = flt(this.price_list_data[this.child.item_code], 9) / flt(this.frm.doc.conversion_rate, 9);
this.child.price_list_rate = flt(this.price_list_data[this.child.item_code] * this.child.conversion_factor, 9) / flt(this.frm.doc.conversion_rate, 9);
this.child.rate = flt(this.price_list_data[this.child.item_code] * this.child.conversion_factor, 9) / flt(this.frm.doc.conversion_rate, 9);
this.child.actual_qty = me.get_actual_qty(this.items[0]);
this.child.amount = flt(this.child.qty) * flt(this.child.rate);
this.child.batch_no = this.item_batch_no[this.child.item_code];
@@ -1573,15 +1575,16 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
style="margin-right: 5px;">${__('Print')}</a>
<a class="btn btn-default new_doc">${__('New')}</a>`);
$('.print_doc').click(function () {
var html = frappe.render(me.print_template_data, me.frm.doc)
me.print_document(html)
this.msgprint.msg_area.find('.print_doc').on('click', function() {
var html = frappe.render(me.print_template_data, me.frm.doc);
me.print_document(html);
})
$('.new_doc').click(function () {
me.msgprint.hide()
me.make_new_cart()
this.msgprint.msg_area.find('.new_doc').on('click', function() {
me.msgprint.hide();
me.make_new_cart();
})
},
print_document: function (html) {

View File

@@ -72,7 +72,7 @@ def _get_party_details(party=None, account=None, party_type="Customer", company=
return out
def set_address_details(out, party, party_type, doctype=None, company=None, party_address=None, shipping_address=None):
def set_address_details(out, party, party_type, doctype=None, company=None, party_address=None, shipping_address=None):
billing_address_field = "customer_address" if party_type == "Lead" \
else party_type.lower() + "_address"
out[billing_address_field] = party_address or get_default_address(party_type, party.name)
@@ -335,7 +335,7 @@ def get_due_date_from_template(template_name, posting_date, bill_date):
def validate_due_date(posting_date, due_date, party_type, party, company=None, bill_date=None, template_name=None):
if getdate(due_date) < getdate(posting_date):
frappe.throw(_("Due Date cannot be before Posting Date"))
frappe.throw(_("Due Date cannot be before Posting / Supplier Invoice Date"))
else:
if not template_name: return
@@ -459,38 +459,65 @@ def get_timeline_data(doctype, name):
def get_dashboard_info(party_type, party):
current_fiscal_year = get_fiscal_year(nowdate(), as_dict=True)
company = frappe.db.get_default("company") or frappe.get_all("Company")[0].name
party_account_currency = get_party_account_currency(party_type, party, company)
company_default_currency = get_default_currency() \
or frappe.get_cached_value('Company', company, 'default_currency')
if party_account_currency==company_default_currency:
total_field = "base_grand_total"
else:
total_field = "grand_total"
doctype = "Sales Invoice" if party_type=="Customer" else "Purchase Invoice"
billing_this_year = frappe.db.sql("""
select sum({0})
from `tab{1}`
where {2}=%s and docstatus=1 and posting_date between %s and %s
""".format(total_field, doctype, party_type.lower()),
(party, current_fiscal_year.year_start_date, current_fiscal_year.year_end_date))
companies = frappe.get_all(doctype, filters={
'docstatus': 1,
party_type.lower(): party
}, distinct=1, fields=['company'])
total_unpaid = frappe.db.sql("""
select sum(debit_in_account_currency) - sum(credit_in_account_currency)
company_wise_info = []
company_wise_grand_total = frappe.get_all(doctype,
filters={
'docstatus': 1,
party_type.lower(): party,
'posting_date': ('between', [current_fiscal_year.year_start_date, current_fiscal_year.year_end_date])
},
group_by="company",
fields=["company", "sum(grand_total) as grand_total", "sum(base_grand_total) as base_grand_total"]
)
company_wise_billing_this_year = frappe._dict()
for d in company_wise_grand_total:
company_wise_billing_this_year.setdefault(
d.company,{
"grand_total": d.grand_total,
"base_grand_total": d.base_grand_total
})
company_wise_total_unpaid = frappe._dict(frappe.db.sql("""
select company, sum(debit_in_account_currency) - sum(credit_in_account_currency)
from `tabGL Entry`
where party_type = %s and party=%s""", (party_type, party))
where party_type = %s and party=%s
group by company""", (party_type, party)))
info = {}
info["billing_this_year"] = flt(billing_this_year[0][0]) if billing_this_year else 0
info["currency"] = party_account_currency
info["total_unpaid"] = flt(total_unpaid[0][0]) if total_unpaid else 0
if party_type == "Supplier":
info["total_unpaid"] = -1 * info["total_unpaid"]
for d in companies:
company_default_currency = frappe.db.get_value("Company", d.company, 'default_currency')
party_account_currency = get_party_account_currency(party_type, party, d.company)
return info
if party_account_currency==company_default_currency:
billing_this_year = flt(company_wise_billing_this_year.get(d.company,{}).get("base_grand_total"))
else:
billing_this_year = flt(company_wise_billing_this_year.get(d.company,{}).get("grand_total"))
total_unpaid = flt(company_wise_total_unpaid.get(d.company))
info = {}
info["billing_this_year"] = flt(billing_this_year) if billing_this_year else 0
info["currency"] = party_account_currency
info["total_unpaid"] = flt(total_unpaid) if total_unpaid else 0
info["company"] = d.company
if party_type == "Supplier":
info["total_unpaid"] = -1 * info["total_unpaid"]
company_wise_info.append(info)
return company_wise_info
def get_party_shipping_address(doctype, name):
"""
@@ -510,7 +537,7 @@ def get_party_shipping_address(doctype, name):
'dl.link_doctype=%s '
'and dl.link_name=%s '
'and dl.parenttype="Address" '
'and '
'and ifnull(ta.disabled, 0) = 0 and'
'(ta.address_type="Shipping" or ta.is_shipping_address=1) '
'order by ta.is_shipping_address desc, ta.address_type desc limit 1',
(doctype, name)

View File

@@ -10,36 +10,6 @@ frappe.query_reports["Accounts Payable"] = {
"options": "Company",
"default": frappe.defaults.get_user_default("Company")
},
{
"fieldname":"finance_book",
"label": __("Finance Book"),
"fieldtype": "Link",
"options": "Finance Book"
},
{
"fieldname":"supplier",
"label": __("Supplier"),
"fieldtype": "Link",
"options": "Supplier",
on_change: () => {
var supplier = frappe.query_report.get_filter_value('supplier');
frappe.db.get_value('Supplier', supplier, "tax_id", function(value) {
frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
});
}
},
{
"fieldname":"supplier_group",
"label": __("Supplier Group"),
"fieldtype": "Link",
"options": "Supplier Group"
},
{
"fieldname":"report_date",
"label": __("As on Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today()
},
{
"fieldname":"ageing_based_on",
"label": __("Ageing Based On"),
@@ -48,7 +18,10 @@ frappe.query_reports["Accounts Payable"] = {
"default": "Posting Date"
},
{
"fieldtype": "Break",
"fieldname":"report_date",
"label": __("As on Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today()
},
{
"fieldname":"range1",
@@ -71,6 +44,34 @@ frappe.query_reports["Accounts Payable"] = {
"default": "90",
"reqd": 1
},
{
"fieldname":"finance_book",
"label": __("Finance Book"),
"fieldtype": "Link",
"options": "Finance Book"
},
{
"fieldname":"supplier",
"label": __("Supplier"),
"fieldtype": "Link",
"options": "Supplier",
on_change: () => {
var supplier = frappe.query_report.get_filter_value('supplier');
if (supplier) {
frappe.db.get_value('Supplier', supplier, "tax_id", function(value) {
frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
});
} else {
frappe.query_report.set_filter_value('tax_id', "");
}
}
},
{
"fieldname":"supplier_group",
"label": __("Supplier Group"),
"fieldtype": "Link",
"options": "Supplier Group"
},
{
"fieldname":"tax_id",
"label": __("Tax Id"),

View File

@@ -10,24 +10,6 @@ frappe.query_reports["Accounts Payable Summary"] = {
"options": "Company",
"default": frappe.defaults.get_user_default("Company")
},
{
"fieldname":"supplier",
"label": __("Supplier"),
"fieldtype": "Link",
"options": "Supplier"
},
{
"fieldname":"supplier_group",
"label": __("Supplier Group"),
"fieldtype": "Link",
"options": "Supplier Group"
},
{
"fieldname":"report_date",
"label": __("Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today()
},
{
"fieldname":"ageing_based_on",
"label": __("Ageing Based On"),
@@ -36,7 +18,10 @@ frappe.query_reports["Accounts Payable Summary"] = {
"default": "Posting Date"
},
{
"fieldtype": "Break",
"fieldname":"report_date",
"label": __("Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today()
},
{
"fieldname":"range1",
@@ -58,6 +43,24 @@ frappe.query_reports["Accounts Payable Summary"] = {
"fieldtype": "Int",
"default": "90",
"reqd": 1
},
{
"fieldname":"finance_book",
"label": __("Finance Book"),
"fieldtype": "Link",
"options": "Finance Book"
},
{
"fieldname":"supplier",
"label": __("Supplier"),
"fieldtype": "Link",
"options": "Supplier"
},
{
"fieldname":"supplier_group",
"label": __("Supplier Group"),
"fieldtype": "Link",
"options": "Supplier Group"
}
],

View File

@@ -1,24 +1,14 @@
{% if(filters.show_pdc_in_print) { %}
<style>
@media screen {
.print-format {
padding: 4mm;
font-size: 8.0pt !important;
font-family: Tahoma, sans-serif;
}
}
</style>
{% } %}
<style>
.print-format {
padding: 4mm;
font-size: 8.0pt !important;
font-family: Tahoma, sans-serif;
}
.print-format {
padding: 4mm;
font-size: 8.0pt !important;
}
.print-format td {
vertical-align:middle !important;
}
</style>
<h2 class="text-center">{%= __(report.report_name) %}</h2>
<h2 class="text-center" style="margin-top:0">{%= __(report.report_name) %}</h2>
<h4 class="text-center">
{% if (filters.customer_name) { %}
{%= filters.customer_name %}
@@ -36,7 +26,20 @@
{%= __("Until") %}
{%= frappe.datetime.str_to_user(filters.report_date) %}
</h5>
<hr>
<div class="clearfix">
<div class="pull-left">
{% if(filters.payment_terms) { %}
<strong>{%= __("Payment Terms") %}:</strong> {%= filters.payment_terms %}
{% } %}
</div>
<div class="pull-right">
{% if(filters.credit_limit) { %}
<strong>{%= __("Credit Limit") %}:</strong> {%= format_currency(filters.credit_limit) %}
{% } %}
</div>
</div>
{% if(filters.show_pdc_in_print) { %}
{% var balance_row = data.slice(-1).pop();
var range1 = report.columns[11].label;
@@ -75,7 +78,7 @@
<td class="text-right">{%= format_currency(balance_row[range3]) %}</td>
<td class="text-right">{%= format_currency(balance_row[range4]) %}</td>
<td class="text-right">
{%= format_currency(flt(balance_row[__("Outstanding Amount")]), data[data.length-1]["currency"]) %}
{%= format_currency(flt(balance_row[("outstanding_amount")]), data[data.length-1]["currency"]) %}
</td>
</tr>
<td>{%= __("PDC/LC") %}</td>
@@ -84,7 +87,7 @@
<td></td>
<td></td>
<td class="text-right">
{%= format_currency(flt(balance_row[__("PDC/LC Amount")]), data[data.length-1]["currency"]) %}
{%= format_currency(flt(balance_row[("pdc/lc_amount")]), data[data.length-1]["currency"]) %}
</td>
<tr class="cvs-footer">
<th class="text-left">{%= __("Cheques Required") %}</th>
@@ -93,7 +96,7 @@
<th></th>
<th></th>
<th class="text-right">
{%= format_currency(flt(balance_row[__("Outstanding Amount")]-balance_row[__("PDC/LC Amount")]), data[data.length-1]["currency"]) %}</th>
{%= format_currency(flt(balance_row[("outstanding_amount")]-balance_row[("pdc/lc_amount")]), data[data.length-1]["currency"]) %}</th>
</tr>
</tbody>
@@ -104,17 +107,21 @@
<thead>
<tr>
{% if(report.report_name === "Accounts Receivable" || report.report_name === "Accounts Payable") { %}
<th style="width: 18%">{%= __("Date") %}</th>
<th style="width: 17%">{%= __("Reference") %}</th>
<th style="width: 7%">{%= __("Date") %}</th>
<th style="width: 7%">{%= __("Age (Days)") %}</th>
<th style="width: 13%">{%= __("Reference") %}</th>
{% if(report.report_name === "Accounts Receivable") { %}
<th style="width: 10%">{%= __("Sales Person") %}</th>
{% } %}
{% if(!filters.show_pdc_in_print) { %}
<th style="width: 20%">{%= (filters.customer || filters.supplier) ? __("Remarks"): __("Party") %}</th>
{% } %}
<th style="width: 10%">{%= __("Invoiced Amount") %}</th>
<th style="width: 10%; text-align: right">{%= __("Invoiced Amount") %}</th>
{% if(!filters.show_pdc_in_print) { %}
<th style="width: 10%">{%= __("Paid Amount") %}</th>
<th style="width: 10%">{%= report.report_name === "Accounts Receivable" ? __('Credit Note') : __('Debit Note') %}</th>
<th style="width: 10%; text-align: right">{%= __("Paid Amount") %}</th>
<th style="width: 10%; text-align: right">{%= report.report_name === "Accounts Receivable" ? __('Credit Note') : __('Debit Note') %}</th>
{% } %}
<th style="width: 15%">{%= __("Outstanding Amount") %}</th>
<th style="width: 15%; text-align: right">{%= __("Outstanding Amount") %}</th>
{% if(filters.show_pdc_in_print) { %}
{% if(report.report_name === "Accounts Receivable") { %}
<th style="width: 10%">{%= __("Customer LPO No.") %}</th>
@@ -139,6 +146,7 @@
{% if(report.report_name === "Accounts Receivable" || report.report_name === "Accounts Payable") { %}
{% if(data[i][__("Customer")] || data[i][__("Supplier")]) { %}
<td>{%= frappe.datetime.str_to_user(data[i]["posting_date"]) %}</td>
<td style="text-align: right">{%= data[i][__("Age (Days)")] %}</td>
<td>
{% if(!filters.show_pdc_in_print) { %}
{%= data[i]["voucher_type"] %}
@@ -146,6 +154,11 @@
{% } %}
{%= data[i]["voucher_no"] %}
</td>
{% if(report.report_name === "Accounts Receivable") { %}
<td>{%= data[i]["sales_person"] %}</td>
{% } %}
{% if(!filters.show_pdc_in_print) { %}
<td>
{% if(!(filters.customer || filters.supplier)) { %}
@@ -156,10 +169,15 @@
<br> {%= data[i][__("Supplier Name")] %}
{% } %}
{% } %}
<br>{%= __("Remarks") %}:
{%= data[i][__("Remarks")] %}
<div>
{% if data[i][__("Remarks")] %}
{%= __("Remarks") %}:
{%= data[i][__("Remarks")] %}
{% } %}
</div>
</td>
{% } %}
<td style="text-align: right">
{%= format_currency(data[i]["invoiced_amount"], data[i]["currency"]) %}</td>
@@ -177,24 +195,28 @@
<td style="text-align: right">
{%= data[i]["po_no"] %}</td>
{% } %}
<td style="text-align: right">{%= frappe.datetime.str_to_user(data[i][__("PDC/LC Date")]) %}</td>
<td style="text-align: right">{%= data[i][__("PDC/LC Ref")] %}</td>
<td style="text-align: right">{%= format_currency(data[i][__("PDC/LC Amount")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][__("Remaining Balance")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= frappe.datetime.str_to_user(data[i][("pdc/lc_date")]) %}</td>
<td style="text-align: right">{%= data[i][("pdc/lc_ref")] %}</td>
<td style="text-align: right">{%= format_currency(data[i][("pdc/lc_amount")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][("remaining_balance")], data[i]["currency"]) %}</td>
{% } %}
{% } else { %}
<td></td>
{% if(!filters.show_pdc_in_print) { %}
<td></td>
{% } %}
<td><b>{%= __("Total") %}</b></td>
{% if(report.report_name === "Accounts Receivable") { %}
<td></td>
{% } %}
<td></td>
<td style="text-align: right"><b>{%= __("Total") %}</b></td>
<td style="text-align: right">
{%= format_currency(data[i]["invoiced_amount"], data[i]["currency"] ) %}</td>
{% if(!filters.show_pdc_in_print) { %}
<td style="text-align: right">
{%= format_currency(data[i]["paid_amount"], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= report.report_name === "Accounts Receivable" ? format_currency(data[i]["credit_note"], data[i]["currency"]) : format_currency(data[i]["Debit Note"], data[i]["currency"]) %} </td>
<td style="text-align: right">{%= report.report_name === "Accounts Receivable" ? format_currency(data[i]["credit_note"], data[i]["currency"]) : format_currency(data[i]["debit_note"], data[i]["currency"]) %} </td>
{% } %}
<td style="text-align: right">
{%= format_currency(data[i]["outstanding_amount"], data[i]["currency"]) %}</td>
@@ -205,9 +227,9 @@
{%= data[i][__("Customer LPO")] %}</td>
{% } %}
<td style="text-align: right">{%= frappe.datetime.str_to_user(data[i][__("PDC/LC Date")]) %}</td>
<td style="text-align: right">{%= data[i][__("PDC/LC Ref")] %}</td>
<td style="text-align: right">{%= format_currency(data[i][__("PDC/LC Amount")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][__("Remaining Balance")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= data[i][("pdc/lc_ref")] %}</td>
<td style="text-align: right">{%= format_currency(data[i][("pdc/lc_amount")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][("remaining_balance")], data[i]["currency"]) %}</td>
{% } %}
{% } %}
{% } else { %}
@@ -228,10 +250,10 @@
{% } else { %}
<td><b>{%= __("Total") %}</b></td>
{% } %}
<td style="text-align: right">{%= format_currency(data[i][__("Total Invoiced Amt")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][__("Total Paid Amt")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= report.report_name === "Accounts Receivable Summary" ? format_currency(data[i][__("Credit Note Amt")], data[i]["currency"]) : format_currency(data[i][__("Debit Note Amt")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][__("Total Outstanding Amt")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][("total_invoiced_amt")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][("total_paid_amt")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= report.report_name === "Accounts Receivable Summary" ? format_currency(data[i][__("credit_note_amt")], data[i]["currency"]) : format_currency(data[i][__("debit_note_amt")], data[i]["currency"]) %}</td>
<td style="text-align: right">{%= format_currency(data[i][("total_outstanding_amt")], data[i]["currency"]) %}</td>
{% } %}
{% } %}
</tr>

View File

@@ -10,6 +10,40 @@ frappe.query_reports["Accounts Receivable"] = {
"options": "Company",
"default": frappe.defaults.get_user_default("Company")
},
{
"fieldname":"ageing_based_on",
"label": __("Ageing Based On"),
"fieldtype": "Select",
"options": 'Posting Date\nDue Date',
"default": "Posting Date"
},
{
"fieldname":"report_date",
"label": __("As on Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today()
},
{
"fieldname":"range1",
"label": __("Ageing Range 1"),
"fieldtype": "Int",
"default": "30",
"reqd": 1
},
{
"fieldname":"range2",
"label": __("Ageing Range 2"),
"fieldtype": "Int",
"default": "60",
"reqd": 1
},
{
"fieldname":"range3",
"label": __("Ageing Range 3"),
"fieldtype": "Int",
"default": "90",
"reqd": 1
},
{
"fieldname":"finance_book",
"label": __("Finance Book"),
@@ -23,10 +57,19 @@ frappe.query_reports["Accounts Receivable"] = {
"options": "Customer",
on_change: () => {
var customer = frappe.query_report.get_filter_value('customer');
frappe.db.get_value('Customer', customer, ["tax_id", "customer_name"], function(value) {
frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
frappe.query_report.set_filter_value('customer_name', value["customer_name"]);
});
if (customer) {
frappe.db.get_value('Customer', customer, ["tax_id", "customer_name", "credit_limit", "payment_terms"], function(value) {
frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
frappe.query_report.set_filter_value('customer_name', value["customer_name"]);
frappe.query_report.set_filter_value('credit_limit', value["credit_limit"]);
frappe.query_report.set_filter_value('payment_terms', value["payment_terms"]);
});
} else {
frappe.query_report.set_filter_value('tax_id', "");
frappe.query_report.set_filter_value('customer_name', "");
frappe.query_report.set_filter_value('credit_limit', "");
frappe.query_report.set_filter_value('payment_terms', "");
}
}
},
{
@@ -59,43 +102,6 @@ frappe.query_reports["Accounts Receivable"] = {
"fieldtype": "Link",
"options": "Sales Person"
},
{
"fieldtype": "Break",
},
{
"fieldname":"report_date",
"label": __("As on Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today()
},
{
"fieldname":"ageing_based_on",
"label": __("Ageing Based On"),
"fieldtype": "Select",
"options": 'Posting Date\nDue Date',
"default": "Posting Date"
},
{
"fieldname":"range1",
"label": __("Ageing Range 1"),
"fieldtype": "Int",
"default": "30",
"reqd": 1
},
{
"fieldname":"range2",
"label": __("Ageing Range 2"),
"fieldtype": "Int",
"default": "60",
"reqd": 1
},
{
"fieldname":"range3",
"label": __("Ageing Range 3"),
"fieldtype": "Int",
"default": "90",
"reqd": 1
},
{
"fieldname":"show_pdc_in_print",
"label": __("Show PDC in Print"),
@@ -112,6 +118,18 @@ frappe.query_reports["Accounts Receivable"] = {
"label": __("Customer Name"),
"fieldtype": "Data",
"hidden": 1
},
{
"fieldname":"payment_terms",
"label": __("Payment Tems"),
"fieldtype": "Data",
"hidden": 1
},
{
"fieldname":"credit_limit",
"label": __("Credit Limit"),
"fieldtype": "Currency",
"hidden": 1
}
],

View File

@@ -89,33 +89,58 @@ class ReceivablePayableReport(object):
"width": 120
})
columns.append({
columns += [
{
"fieldname": "currency",
"label": _("Currency"),
"fieldtype": "Link",
"options": "Currency",
"width": 100
})
columns += [
_("PDC/LC Date") + ":Date:110",
_("PDC/LC Ref") + ":Data:110",
_("PDC/LC Amount") + ":Currency/currency:130",
_("Remaining Balance") + ":Currency/currency:130"
]
},
{
"fieldname": "pdc/lc_date",
"label": _("PDC/LC Date"),
"fieldtype": "Date",
"width": 110
},
{
"fieldname": "pdc/lc_ref",
"label": _("PDC/LC Ref"),
"fieldtype": "Data",
"width": 110
},
{
"fieldname": "pdc/lc_amount",
"label": _("PDC/LC Amount"),
"fieldtype": "Currency",
"options": "Currency",
"width": 130
},
{
"fieldname": "remaining_balance",
"label": _("Remaining Balance"),
"fieldtype": "Currency",
"options": "Currency",
"width": 130
}]
if args.get('party_type') == 'Customer':
columns.append({
"label": _("Customer LPO"),
"fieldtype": "Data",
"fieldname": "po_no",
"width": 100,
})
columns += [_("Delivery Note") + ":Data:100"]
if args.get("party_type") == "Customer":
columns += [
{
"label": _("Customer LPO"),
"fieldtype": "Data",
"fieldname": "po_no",
"width": 100,
},
_("Delivery Note") + ":Data:100",
_("Territory") + ":Link/Territory:80",
_("Customer Group") + ":Link/Customer Group:120"
_("Customer Group") + ":Link/Customer Group:120",
{
"label": _("Sales Person"),
"fieldtype": "Data",
"fieldname": "sales_person",
"width": 120,
}
]
if args.get("party_type") == "Supplier":
columns += [_("Supplier Group") + ":Link/Supplier Group:80"]
@@ -140,7 +165,6 @@ class ReceivablePayableReport(object):
data = []
pdc_details = get_pdc_details(args.get("party_type"), self.filters.report_date)
gl_entries_data = self.get_entries_till(self.filters.report_date, args.get("party_type"))
if gl_entries_data:
@@ -219,7 +243,8 @@ class ReceivablePayableReport(object):
# customer territory / supplier group
if args.get("party_type") == "Customer":
row += [self.get_territory(gle.party), self.get_customer_group(gle.party)]
row += [self.get_territory(gle.party), self.get_customer_group(gle.party),
voucher_details.get(gle.voucher_no, {}).get("sales_person")]
if args.get("party_type") == "Supplier":
row += [self.get_supplier_group(gle.party)]
@@ -376,9 +401,14 @@ class ReceivablePayableReport(object):
values.append(self.filters.get("sales_partner"))
if self.filters.get("sales_person"):
conditions.append("""party in (select parent
from `tabSales Team` where sales_person=%s and parenttype = 'Customer')""")
values.append(self.filters.get("sales_person"))
lft, rgt = frappe.db.get_value("Sales Person",
self.filters.get("sales_person"), ["lft", "rgt"])
conditions.append("""exists(select name from `tabSales Team` steam where
steam.sales_person in (select name from `tabSales Person` where lft >= {0} and rgt <= {1})
and ((steam.parent = voucher_no and steam.parenttype = voucher_type)
or (steam.parent = against_voucher and steam.parenttype = against_voucher_type)
or (steam.parent = party and steam.parenttype = 'Customer')))""".format(lft, rgt))
if party_type_field=="supplier":
if self.filters.get("supplier_group"):
@@ -464,7 +494,6 @@ def get_pdc_details(party_type, report_date):
and pent.party_type = %s
group by pent.party, pref.reference_name""", (report_date, party_type), as_dict=1):
pdc_details.setdefault((pdc.invoice_no, pdc.party), pdc)
if scrub(party_type):
amount_field = ("jea.debit_in_account_currency"
if party_type == 'Supplier' else "jea.credit_in_account_currency")
@@ -532,8 +561,12 @@ def get_voucher_details(party_type, voucher_nos, dn_details):
voucher_details = frappe._dict()
if party_type == "Customer":
for si in frappe.db.sql("""select name, due_date, po_no
from `tabSales Invoice` where docstatus=1 and name in (%s)
for si in frappe.db.sql("""
select inv.name, inv.due_date, inv.po_no, GROUP_CONCAT(steam.sales_person SEPARATOR ', ') as sales_person
from `tabSales Invoice` inv
left join `tabSales Team` steam on steam.parent = inv.name and steam.parenttype = 'Sales Invoice'
where inv.docstatus=1 and inv.name in (%s)
group by inv.name
""" %(','.join(['%s'] *len(voucher_nos))), (tuple(voucher_nos)), as_dict=1):
si['delivery_note'] = dn_details.get(si.name)
voucher_details.setdefault(si.name, si)

View File

@@ -11,25 +11,11 @@ frappe.query_reports["Accounts Receivable Summary"] = {
"default": frappe.defaults.get_user_default("Company")
},
{
"fieldname":"customer",
"label": __("Customer"),
"fieldtype": "Link",
"options": "Customer"
},
{
"fieldname":"customer_group",
"label": __("Customer Group"),
"fieldtype": "Link",
"options": "Customer Group"
},
{
"fieldname":"payment_terms_template",
"label": __("Payment Terms Template"),
"fieldtype": "Link",
"options": "Payment Terms Template"
},
{
"fieldtype": "Break",
"fieldname":"ageing_based_on",
"label": __("Ageing Based On"),
"fieldtype": "Select",
"options": 'Posting Date\nDue Date',
"default": "Posting Date"
},
{
"fieldname":"report_date",
@@ -37,13 +23,6 @@ frappe.query_reports["Accounts Receivable Summary"] = {
"fieldtype": "Date",
"default": frappe.datetime.get_today()
},
{
"fieldname":"ageing_based_on",
"label": __("Ageing Based On"),
"fieldtype": "Select",
"options": 'Posting Date\nDue Date',
"default": "Posting Date"
},
{
"fieldname":"range1",
"label": __("Ageing Range 1"),
@@ -64,6 +43,48 @@ frappe.query_reports["Accounts Receivable Summary"] = {
"fieldtype": "Int",
"default": "90",
"reqd": 1
},
{
"fieldname":"finance_book",
"label": __("Finance Book"),
"fieldtype": "Link",
"options": "Finance Book"
},
{
"fieldname":"customer",
"label": __("Customer"),
"fieldtype": "Link",
"options": "Customer"
},
{
"fieldname":"customer_group",
"label": __("Customer Group"),
"fieldtype": "Link",
"options": "Customer Group"
},
{
"fieldname":"payment_terms_template",
"label": __("Payment Terms Template"),
"fieldtype": "Link",
"options": "Payment Terms Template"
},
{
"fieldname":"territory",
"label": __("Territory"),
"fieldtype": "Link",
"options": "Territory"
},
{
"fieldname":"sales_partner",
"label": __("Sales Partner"),
"fieldtype": "Link",
"options": "Sales Partner"
},
{
"fieldname":"sales_person",
"label": __("Sales Person"),
"fieldtype": "Link",
"options": "Sales Person"
}
],

View File

@@ -3,7 +3,7 @@
from __future__ import unicode_literals
import frappe
from frappe import _
from frappe import _, scrub
from frappe.utils import flt
from erpnext.accounts.report.accounts_receivable.accounts_receivable import ReceivablePayableReport
@@ -21,25 +21,99 @@ class AccountsReceivableSummary(ReceivablePayableReport):
if party_naming_by == "Naming Series":
columns += [ args.get("party_type") + " Name::140"]
credit_debit_label = _("Credit Note Amt") if args.get('party_type') == 'Customer' else _("Debit Note Amt")
credit_debit_label = "Credit Note Amt" if args.get('party_type') == 'Customer' else "Debit Note Amt"
columns += [{
"label": _("Total Invoiced Amt"),
"fieldname": "total_invoiced_amt",
"fieldtype": "Currency",
"options": "currency",
"width": 100
},
{
"label": _("Total Paid Amt"),
"fieldname": "total_paid_amt",
"fieldtype": "Currency",
"options": "currency",
"width": 100
}]
columns += [
_("Total Invoiced Amt") + ":Currency/currency:140",
_("Total Paid Amt") + ":Currency/currency:140",
credit_debit_label + ":Currency/currency:140",
_("Total Outstanding Amt") + ":Currency/currency:160",
"0-" + str(self.filters.range1) + ":Currency/currency:100",
str(self.filters.range1) + "-" + str(self.filters.range2) + ":Currency/currency:100",
str(self.filters.range2) + "-" + str(self.filters.range3) + ":Currency/currency:100",
str(self.filters.range3) + _("-Above") + ":Currency/currency:100"]
{
"label": _(credit_debit_label),
"fieldname": scrub(credit_debit_label),
"fieldtype": "Currency",
"options": "currency",
"width": 140
},
{
"label": _("Total Outstanding Amt"),
"fieldname": "total_outstanding_amt",
"fieldtype": "Currency",
"options": "currency",
"width": 160
},
{
"label": _("0-" + str(self.filters.range1)),
"fieldname": scrub("0-" + str(self.filters.range1)),
"fieldtype": "Currency",
"options": "currency",
"width": 160
},
{
"label": _(str(self.filters.range1) + "-" + str(self.filters.range2)),
"fieldname": scrub(str(self.filters.range1) + "-" + str(self.filters.range2)),
"fieldtype": "Currency",
"options": "currency",
"width": 160
},
{
"label": _(str(self.filters.range2) + "-" + str(self.filters.range3)),
"fieldname": scrub(str(self.filters.range2) + "-" + str(self.filters.range3)),
"fieldtype": "Currency",
"options": "currency",
"width": 160
},
{
"label": _(str(self.filters.range3) + _("-Above")),
"fieldname": scrub(str(self.filters.range3) + _("-Above")),
"fieldtype": "Currency",
"options": "currency",
"width": 160
}
]
if args.get("party_type") == "Customer":
columns += [
_("Territory") + ":Link/Territory:80",
_("Customer Group") + ":Link/Customer Group:120"
]
columns += [{
"label": _("Territory"),
"fieldname": "territory",
"fieldtype": "Link",
"options": "Territory",
"width": 80
},
{
"label": _("Customer Group"),
"fieldname": "customer_group",
"fieldtype": "Link",
"options": "Customer Group",
"width": 80
},
{
"label": _("Sales Person"),
"fieldtype": "Data",
"fieldname": "sales_person",
"width": 120,
}]
if args.get("party_type") == "Supplier":
columns += [_("Supplier Group") + ":Link/Supplier Group:80"]
columns += [{
"label": _("Supplier Group"),
"fieldname": "supplier_group",
"fieldtype": "Link",
"options": "Supplier Group",
"width": 80
}]
columns.append({
"fieldname": "currency",
"label": _("Currency"),
@@ -67,10 +141,10 @@ class AccountsReceivableSummary(ReceivablePayableReport):
]
if args.get("party_type") == "Customer":
row += [self.get_territory(party), self.get_customer_group(party)]
row += [self.get_territory(party), self.get_customer_group(party), ", ".join(set(party_dict.sales_person))]
if args.get("party_type") == "Supplier":
row += [self.get_supplier_group(party)]
row.append(party_dict.currency)
data.append(row)
@@ -88,15 +162,19 @@ class AccountsReceivableSummary(ReceivablePayableReport):
"range1": 0,
"range2": 0,
"range3": 0,
"range4": 0
"range4": 0,
"sales_person": []
})
)
for k in list(party_total[d.party]):
if k != "currency":
if k not in ["currency", "sales_person"]:
party_total[d.party][k] += flt(d.get(k, 0))
party_total[d.party].currency = d.currency
if d.sales_person:
party_total[d.party].sales_person.append(d.sales_person)
return party_total
def get_voucherwise_data(self, party_naming_by, args):
@@ -113,12 +191,13 @@ class AccountsReceivableSummary(ReceivablePayableReport):
cols += ["bill_no", "bill_date"]
cols += ["invoiced_amt", "paid_amt", "credit_amt",
"outstanding_amt", "age", "range1", "range2", "range3", "range4", "currency"]
"outstanding_amt", "age", "range1", "range2", "range3", "range4", "currency", "pdc/lc_date", "pdc/lc_ref",
"pdc/lc_amount", "remaining_balance"]
if args.get("party_type") == "Supplier":
cols += ["supplier_group", "remarks"]
if args.get("party_type") == "Customer":
cols += ["territory", "customer_group", "remarks"]
cols += ["po_no", "do_no", "territory", "customer_group", "sales_person", "remarks"]
return self.make_data_dict(cols, voucherwise_data)

View File

@@ -42,6 +42,13 @@ frappe.query_reports["Consolidated Financial Statement"] = {
"default": "Balance Sheet",
"reqd": 1
},
{
"fieldname": "presentation_currency",
"label": __("Currency"),
"fieldtype": "Select",
"options": erpnext.get_presentation_currency_list(),
"default": frappe.defaults.get_user_default("Currency")
},
{
"fieldname":"accumulated_in_group_company",
"label": __("Accumulated Values in Group Company"),

View File

@@ -5,6 +5,7 @@ from __future__ import unicode_literals
import frappe, erpnext
from frappe import _
from frappe.utils import flt, cint
from erpnext.accounts.report.utils import get_currency, convert_to_presentation_currency
from erpnext.accounts.report.financial_statements import get_fiscal_year_data, sort_accounts
from erpnext.accounts.report.balance_sheet.balance_sheet import (get_provisional_profit_loss,
check_opening_balance, get_chart_data)
@@ -48,7 +49,7 @@ def get_balance_sheet_data(fiscal_year, companies, columns, filters):
data.extend(liability or [])
data.extend(equity or [])
company_currency = frappe.db.get_value("Company", filters.company, "default_currency")
company_currency = get_company_currency(filters)
provisional_profit_loss, total_credit = get_provisional_profit_loss(asset, liability, equity,
companies, filters.get('company'), company_currency, True)
@@ -59,7 +60,7 @@ def get_balance_sheet_data(fiscal_year, companies, columns, filters):
"account_name": "'" + _("Unclosed Fiscal Years Profit / Loss (Credit)") + "'",
"account": "'" + _("Unclosed Fiscal Years Profit / Loss (Credit)") + "'",
"warn_if_negative": True,
"currency": frappe.get_cached_value('Company', filters.company, "default_currency")
"currency": company_currency
}
for company in companies:
unclosed[company] = opening_balance
@@ -92,7 +93,7 @@ def get_profit_loss_data(fiscal_year, companies, columns, filters):
return data, None, chart
def get_income_expense_data(companies, fiscal_year, filters):
company_currency = frappe.get_cached_value('Company', filters.company, "default_currency")
company_currency = get_company_currency(filters)
income = get_data(companies, "Income", "Credit", fiscal_year, filters, True)
expense = get_data(companies, "Expense", "Debit", fiscal_year, filters, True)
@@ -107,7 +108,7 @@ def get_cash_flow_data(fiscal_year, companies, filters):
income, expense, net_profit_loss = get_income_expense_data(companies, fiscal_year, filters)
data = []
company_currency = frappe.get_cached_value('Company', filters.company, "default_currency")
company_currency = get_company_currency(filters)
for cash_flow_account in cash_flow_accounts:
section_data = []
@@ -185,6 +186,7 @@ def get_columns(companies):
"fieldname": company,
"label": company,
"fieldtype": "Currency",
"options": "currency",
"width": 150
})
@@ -216,7 +218,8 @@ def get_data(companies, root_type, balance_must_be, fiscal_year, filters=None, i
return out
def get_company_currency(filters=None):
return frappe.get_cached_value('Company', filters.get('company'), "default_currency")
return (filters.get('presentation_currency')
or frappe.get_cached_value('Company', filters.company, "default_currency"))
def calculate_values(accounts_by_name, gl_entries_by_account, companies, fiscal_year, filters):
for entries in gl_entries_by_account.values():
@@ -328,28 +331,42 @@ def set_gl_entries_by_account(from_date, to_date, root_lft, root_rgt, filters, g
filters.get('company'), ["lft", "rgt"])
additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters)
gl_entries = frappe.db.sql("""select gl.posting_date, gl.account, gl.debit, gl.credit, gl.is_opening, gl.company,
gl.fiscal_year, gl.debit_in_account_currency, gl.credit_in_account_currency, gl.account_currency,
acc.account_name, acc.account_number
from `tabGL Entry` gl, `tabAccount` acc where acc.name = gl.account and gl.company in
(select name from `tabCompany` where lft >= %(company_lft)s and rgt <= %(company_rgt)s)
{additional_conditions} and gl.posting_date <= %(to_date)s and acc.lft >= %(lft)s and acc.rgt <= %(rgt)s
order by gl.account, gl.posting_date""".format(additional_conditions=additional_conditions),
{
"from_date": from_date,
"to_date": to_date,
"lft": root_lft,
"rgt": root_rgt,
companies = frappe.db.sql(""" select name, default_currency from `tabCompany`
where lft >= %(company_lft)s and rgt <= %(company_rgt)s""", {
"company_lft": company_lft,
"company_rgt": company_rgt,
},
as_dict=True)
}, as_dict=1)
for entry in gl_entries:
key = entry.account_number or entry.account_name
validate_entries(key, entry, accounts_by_name)
gl_entries_by_account.setdefault(key, []).append(entry)
currency_info = frappe._dict({
'report_date': to_date,
'presentation_currency': filters.get('presentation_currency')
})
for d in companies:
gl_entries = frappe.db.sql("""select gl.posting_date, gl.account, gl.debit, gl.credit, gl.is_opening, gl.company,
gl.fiscal_year, gl.debit_in_account_currency, gl.credit_in_account_currency, gl.account_currency,
acc.account_name, acc.account_number
from `tabGL Entry` gl, `tabAccount` acc where acc.name = gl.account and gl.company = %(company)s
{additional_conditions} and gl.posting_date <= %(to_date)s and acc.lft >= %(lft)s and acc.rgt <= %(rgt)s
order by gl.account, gl.posting_date""".format(additional_conditions=additional_conditions),
{
"from_date": from_date,
"to_date": to_date,
"lft": root_lft,
"rgt": root_rgt,
"company": d.name
},
as_dict=True)
if filters and filters.get('presentation_currency') != d.default_currency:
currency_info['company'] = d.name
currency_info['company_currency'] = d.default_currency
convert_to_presentation_currency(gl_entries, currency_info)
for entry in gl_entries:
key = entry.account_number or entry.account_name
validate_entries(key, entry, accounts_by_name)
gl_entries_by_account.setdefault(key, []).append(entry)
return gl_entries_by_account

View File

@@ -1,7 +1,9 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import re
from past.builtins import cmp
@@ -379,8 +381,8 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
if filters:
if filters.get("project"):
if not isinstance(filters.get("project"), list):
projects = str(filters.get("project")).strip()
filters.project = [d.strip() for d in projects.split(',') if d]
projects = frappe.safe_encode(filters.get("project"))
filters.project = [d.strip() for d in projects.strip().split(',') if d]
additional_conditions.append("project in %(project)s")
if filters.get("cost_center"):
@@ -400,7 +402,7 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
def get_cost_centers_with_children(cost_centers):
if not isinstance(cost_centers, list):
cost_centers = [d.strip() for d in str(cost_centers).strip().split(',') if d]
cost_centers = [d.strip() for d in cost_centers.strip().split(',') if d]
all_cost_centers = []
for d in cost_centers:

View File

@@ -196,8 +196,9 @@ frappe.query_reports["General Ledger"] = {
"fieldname":"group_by",
"label": __("Group by"),
"fieldtype": "Select",
"options": ["", "Group by Voucher", "Group by Account", "Group by Party"],
"default": "Group by Voucher"
"options": ["", __("Group by Voucher"), __("Group by Voucher (Consolidated)"),
__("Group by Account"), __("Group by Party")],
"default": __("Group by Voucher (Consolidated)")
},
{
"fieldname":"tax_id",

View File

@@ -48,11 +48,12 @@ def validate_filters(filters, account_details):
if filters.get("account") and not account_details.get(filters.account):
frappe.throw(_("Account {0} does not exists").format(filters.account))
if (filters.get("account") and filters.get("group_by") == 'Group by Account'
if (filters.get("account") and filters.get("group_by") == _('Group by Account')
and account_details[filters.account].is_group == 0):
frappe.throw(_("Can not filter based on Account, if grouped by Account"))
if (filters.get("voucher_no") and filters.get("group_by") == 'Group by Voucher'):
if (filters.get("voucher_no")
and filters.get("group_by") in [_('Group by Voucher'), _('Group by Voucher (Consolidated)')]):
frappe.throw(_("Can not filter based on Voucher No, if grouped by Voucher"))
if filters.from_date > filters.to_date:
@@ -114,30 +115,37 @@ def get_result(filters, account_details):
return result
def get_gl_entries(filters):
currency_map = get_currency(filters)
select_fields = """, debit_in_account_currency,
credit_in_account_currency""" \
select_fields = """, debit, credit, debit_in_account_currency,
credit_in_account_currency """
order_by_fields = "posting_date, account"
if filters.get("group_by") == "Group by Voucher":
order_by_fields = "posting_date, voucher_type, voucher_no"
group_by_statement = ''
order_by_statement = "order by posting_date, account"
if filters.get("group_by") == _("Group by Voucher"):
order_by_statement = "order by posting_date, voucher_type, voucher_no"
if filters.get("group_by") == _("Group by Voucher (Consolidated)"):
group_by_statement = "group by voucher_type, voucher_no, account, cost_center"
select_fields = """, sum(debit) as debit, sum(credit) as credit,
sum(debit_in_account_currency) as debit_in_account_currency,
sum(credit_in_account_currency) as credit_in_account_currency"""
gl_entries = frappe.db.sql(
"""
select
posting_date, account, party_type, party,
debit, credit,
voucher_type, voucher_no, cost_center, project,
against_voucher_type, against_voucher, account_currency,
remarks, against, is_opening {select_fields}
from `tabGL Entry`
where company=%(company)s {conditions}
order by {order_by_fields}
where company=%(company)s {conditions} {group_by_statement}
{order_by_statement}
""".format(
select_fields=select_fields, conditions=get_conditions(filters),
order_by_fields=order_by_fields
group_by_statement=group_by_statement,
order_by_statement=order_by_statement
),
filters, as_dict=1)
@@ -204,13 +212,13 @@ def get_data_with_opening_closing(filters, account_details, gl_entries):
# Opening for filtered account
data.append(totals.opening)
if filters.get("group_by"):
if filters.get("group_by") != _('Group by Voucher (Consolidated)'):
for acc, acc_dict in iteritems(gle_map):
# acc
if acc_dict.entries:
# opening
data.append({})
if filters.get("group_by") != "Group by Voucher":
if filters.get("group_by") != _("Group by Voucher"):
data.append(acc_dict.totals.opening)
data += acc_dict.entries
@@ -219,10 +227,9 @@ def get_data_with_opening_closing(filters, account_details, gl_entries):
data.append(acc_dict.totals.total)
# closing
if filters.get("group_by") != "Group by Voucher":
if filters.get("group_by") != _("Group by Voucher"):
data.append(acc_dict.totals.closing)
data.append({})
else:
data += entries
@@ -234,7 +241,6 @@ def get_data_with_opening_closing(filters, account_details, gl_entries):
return data
def get_totals_dict():
def _get_debit_credit_dict(label):
return _dict(
@@ -251,12 +257,12 @@ def get_totals_dict():
)
def group_by_field(group_by):
if group_by == 'Group by Party':
if group_by == _('Group by Party'):
return 'party'
elif group_by == 'Group by Voucher':
return 'voucher_no'
else:
elif group_by in [_('Group by Voucher (Consolidated)'), _('Group by Account')]:
return 'account'
else:
return 'voucher_no'
def initialize_gle_map(gl_entries, filters):
gle_map = frappe._dict()
@@ -291,7 +297,7 @@ def get_accountwise_gle(filters, gl_entries, gle_map):
elif gle.posting_date <= to_date:
update_value_in_dict(gle_map[gle.get(group_by)].totals, 'total', gle)
update_value_in_dict(totals, 'total', gle)
if filters.get("group_by"):
if filters.get("group_by") != _('Group by Voucher (Consolidated)'):
gle_map[gle.get(group_by)].entries.append(gle)
else:
entries.append(gle)
@@ -301,7 +307,6 @@ def get_accountwise_gle(filters, gl_entries, gle_map):
return totals, entries
def get_result_as_list(data, filters):
balance, balance_in_account_currency = 0, 0
inv_details = get_supplier_invoice_details()

View File

@@ -236,7 +236,7 @@ class GrossProfitGenerator(object):
previous_stock_value = len(my_sle) > i+1 and \
flt(my_sle[i+1].stock_value) or 0.0
if previous_stock_value:
return previous_stock_value - flt(sle.stock_value)
return (previous_stock_value - flt(sle.stock_value)) * flt(row.qty) / abs(flt(sle.qty))
else:
return flt(row.qty) * self.get_average_buying_rate(row, item_code)
else:

View File

@@ -55,7 +55,7 @@ def _execute(filters=None, additional_table_columns=None, additional_query_colum
]
row += [(d.base_net_rate * d.qty)/d.stock_qty, d.base_net_amount] \
if d.stock_uom != d.uom else [d.base_net_rate, d.base_net_amount]
if d.stock_uom != d.uom and d.stock_qty != 0 else [d.base_net_rate, d.base_net_amount]
total_tax = 0
for tax in tax_columns:

View File

@@ -231,6 +231,13 @@ def get_columns():
"options": "Account",
"width": 300
},
{
"fieldname": "currency",
"label": _("Currency"),
"fieldtype": "Link",
"options": "Currency",
"hidden": 1
},
{
"fieldname": "opening_debit",
"label": _("Opening (Dr)"),
@@ -272,13 +279,6 @@ def get_columns():
"fieldtype": "Currency",
"options": "currency",
"width": 120
},
{
"fieldname": "currency",
"label": _("Currency"),
"fieldtype": "Link",
"options": "Currency",
"hidden": 1
}
]

View File

@@ -21,6 +21,8 @@ def get_data(filters, show_party_name):
party_name_field = "{0}_name".format(frappe.scrub(filters.get('party_type')))
if filters.get('party_type') == 'Student':
party_name_field = 'first_name'
elif filters.get('party_type') == 'Shareholder':
party_name_field = 'title'
party_filters = {"name": filters.get("party")} if filters.get("party") else {}
parties = frappe.get_all(filters.get("party_type"), fields = ["name", party_name_field],

View File

@@ -0,0 +1,30 @@
{
"add_total_row": 1,
"creation": "2018-11-22 16:53:19.167935",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"idx": 0,
"is_standard": "Yes",
"modified": "2018-11-22 17:40:11.317567",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Trial Balance (Simple)",
"owner": "Administrator",
"prepared_report": 0,
"query": "select fiscal_year as \"Fiscal Year:Data:80\",\n\tcompany as \"Company:Data:220\",\n\tposting_date as \"Posting Date:Date:100\",\n\taccount as \"Account:Data:380\",\n\tsum(debit) as \"Debit:Currency:140\",\n\tsum(credit) as \"Credit:Currency:140\"\nfrom `tabGL Entry`\ngroup by fiscal_year, company, posting_date, account\norder by fiscal_year, company, posting_date, account",
"ref_doctype": "GL Entry",
"report_name": "Trial Balance (Simple)",
"report_type": "Query Report",
"roles": [
{
"role": "Accounts User"
},
{
"role": "Accounts Manager"
},
{
"role": "Auditor"
}
]
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -15,6 +16,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
"translatable": 0,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -102,6 +108,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -115,7 +122,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-12-25 22:26:28.797375",
"modified": "2018-11-04 03:27:36.678832",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Agriculture Analysis Criteria",
@@ -124,7 +131,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -144,7 +150,6 @@
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -166,10 +171,12 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "",
"track_changes": 1,
"track_seen": 0
}
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -191,7 +192,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-08-21 16:15:48.528845",
"modified": "2018-11-04 03:28:08.679157",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Agriculture Task",
@@ -201,6 +202,7 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -15,6 +16,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
"translatable": 0,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -70,10 +74,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -100,10 +106,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -129,10 +137,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -159,10 +169,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -190,10 +202,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -221,10 +235,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -252,10 +268,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -281,10 +299,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -311,10 +331,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -342,10 +364,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -371,10 +395,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -401,10 +427,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -432,10 +460,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -461,10 +491,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -492,10 +524,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -521,10 +555,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -551,10 +587,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -580,10 +618,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -611,10 +651,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -640,10 +682,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -671,10 +715,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -701,10 +747,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -730,10 +778,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -761,10 +811,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -790,10 +842,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -820,10 +874,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -851,10 +907,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -881,10 +939,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -912,10 +972,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -942,10 +1004,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -973,6 +1037,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -986,7 +1051,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-12-06 11:00:06.333894",
"modified": "2018-11-04 03:27:10.651075",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Crop",
@@ -995,7 +1060,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -1015,7 +1079,6 @@
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -1037,9 +1100,11 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -844,7 +845,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-06-20 04:41:36.148829",
"modified": "2018-11-04 03:31:47.602312",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Crop Cycle",
@@ -893,9 +894,11 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -121,7 +122,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-06-06 02:24:52.131482",
"modified": "2018-11-04 03:27:47.463994",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Detected Disease",
@@ -131,9 +132,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -15,6 +16,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
"translatable": 0,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -100,10 +106,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,10 +139,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -161,10 +171,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -191,10 +203,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -221,6 +235,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -234,7 +249,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-12-07 16:24:22.923154",
"modified": "2018-11-04 03:27:25.076490",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Disease",
@@ -243,7 +258,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -263,7 +277,6 @@
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -285,9 +298,11 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -15,6 +16,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
"translatable": 0,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -72,10 +76,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,10 +107,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,10 +139,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -160,10 +170,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -190,10 +202,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -220,6 +234,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -233,7 +248,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-12-05 19:13:42.471667",
"modified": "2018-11-04 03:26:29.211792",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Fertilizer",
@@ -242,7 +257,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -262,7 +276,6 @@
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -284,9 +297,11 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -56,7 +57,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-06-20 04:35:51.675244",
"modified": "2018-11-04 03:27:58.120962",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Linked Location",
@@ -66,9 +67,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,6 +43,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -54,7 +57,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-04 13:25:30.437597",
"modified": "2018-11-04 03:25:15.359130",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Linked Plant Analysis",
@@ -64,9 +67,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,6 +43,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -54,7 +57,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-04 13:26:18.682109",
"modified": "2018-11-04 03:25:27.670079",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Linked Soil Analysis",
@@ -64,9 +67,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,6 +43,7 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -54,7 +57,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-04 13:26:07.773314",
"modified": "2018-11-04 03:26:17.877616",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Linked Soil Texture",
@@ -64,9 +67,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -312,7 +313,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 16:15:40.027967",
"modified": "2018-11-04 03:28:48.087828",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Plant Analysis",
@@ -361,6 +362,7 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,10 +107,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,6 +139,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -144,7 +153,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-05 19:37:02.289320",
"modified": "2018-11-04 03:25:43.714882",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Plant Analysis Criteria",
@@ -154,9 +163,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -533,7 +534,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 16:15:56.754373",
"modified": "2018-11-04 03:28:58.403760",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Soil Analysis",
@@ -582,6 +583,7 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,10 +107,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,6 +139,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -144,7 +153,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-05 23:35:34.569482",
"modified": "2018-11-04 03:25:54.359008",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Soil Analysis Criteria",
@@ -154,9 +163,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -473,7 +474,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 16:15:41.823722",
"modified": "2018-11-04 03:29:18.221173",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Soil Texture",
@@ -522,6 +523,7 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,10 +107,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,6 +139,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -144,7 +153,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-05 23:45:17.419610",
"modified": "2018-11-04 03:26:46.178377",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Soil Texture Criteria",
@@ -154,9 +163,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -534,7 +535,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-21 16:15:52.416815",
"modified": "2018-11-04 03:29:08.325644",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Water Analysis",
@@ -583,6 +584,7 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,10 +107,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,6 +139,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -144,7 +153,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-05 23:36:45.836858",
"modified": "2018-11-04 03:26:07.026834",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Water Analysis Criteria",
@@ -154,9 +163,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,9 +1,10 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "field:date",
"autoname": "format:WEA-{date}-{location}",
"beta": 0,
"creation": "2017-10-17 19:01:05.095598",
"custom": 0,
@@ -15,12 +16,13 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "source",
"fieldtype": "Data",
"fieldname": "location",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
@@ -28,9 +30,10 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Source",
"label": "Location",
"length": 0,
"no_copy": 0,
"options": "Location",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -41,10 +44,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -70,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -100,10 +107,44 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "source",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Source",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -129,10 +170,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -159,10 +202,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -189,6 +234,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -202,7 +248,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-12-06 11:04:36.977755",
"modified": "2018-11-04 03:31:36.839743",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Weather",
@@ -211,7 +257,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -231,7 +276,6 @@
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
@@ -253,9 +297,11 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,10 +107,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,6 +139,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -144,7 +153,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-06 00:26:48.887975",
"modified": "2018-11-04 03:26:58.794373",
"modified_by": "Administrator",
"module": "Agriculture",
"name": "Weather Parameter",
@@ -154,9 +163,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Agriculture",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -85,8 +85,17 @@ class Asset(AccountsController):
elif not self.finance_books:
frappe.throw(_("Enter depreciation details"))
if self.available_for_use_date and getdate(self.available_for_use_date) < getdate(nowdate()):
frappe.throw(_("Available-for-use Date is entered as past date"))
if self.is_existing_asset:
return
date = nowdate()
docname = self.purchase_receipt or self.purchase_invoice
if docname:
doctype = 'Purchase Receipt' if self.purchase_receipt else 'Purchase Invoice'
date = frappe.db.get_value(doctype, docname, 'posting_date')
if self.available_for_use_date and getdate(self.available_for_use_date) < getdate(date):
frappe.throw(_("Available-for-use Date should be after purchase date"))
def make_depreciation_schedule(self):
if self.depreciation_method != 'Manual':

View File

@@ -13,7 +13,11 @@ frappe.ui.form.on('Asset Value Adjustment', {
}
});
},
onload: function(frm) {
if(frm.is_new() && frm.doc.asset) {
frm.trigger("set_current_asset_value");
}
},
asset: function(frm) {
frm.trigger("set_current_asset_value");
},

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
@@ -180,39 +181,6 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "No",
"fieldname": "is_subcontracted",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Supply Raw Materials",
"length": 0,
"no_copy": 0,
"options": "No\nYes",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -246,40 +214,6 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:doc.is_subcontracted==\"Yes\"",
"fieldname": "supplier_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplier Warehouse",
"length": 0,
"no_copy": 0,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -1353,6 +1287,168 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "sec_warehouse",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "set_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Set Target Warehouse",
"length": 0,
"no_copy": 0,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "col_break_warehouse",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "No",
"fieldname": "is_subcontracted",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Supply Raw Materials",
"length": 0,
"no_copy": 0,
"options": "No\nYes",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:doc.is_subcontracted==\"Yes\"",
"fieldname": "supplier_warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplier Warehouse",
"length": 0,
"no_copy": 0,
"options": "Warehouse",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -1386,6 +1482,38 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "scan_barcode",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Scan Barcode",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 1,
"allow_in_quick_entry": 0,
@@ -1420,6 +1548,74 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"collapsible_depends_on": "supplied_items",
"columns": 0,
"fieldname": "raw_material_details",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Raw Materials Supplied",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "",
"fieldname": "supplied_items",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplied Items",
"length": 0,
"no_copy": 0,
"oldfieldname": "po_raw_material_details",
"oldfieldtype": "Table",
"options": "Purchase Order Item Supplied",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -3428,107 +3624,6 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"collapsible_depends_on": "supplied_items",
"columns": 0,
"fieldname": "raw_material_details",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Raw Materials Supplied",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:doc.is_subcontracted",
"fieldname": "supplied_items_section",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplied Items",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "",
"fieldname": "supplied_items",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Supplied Items",
"length": 0,
"no_copy": 0,
"oldfieldname": "po_raw_material_details",
"oldfieldtype": "Table",
"options": "Purchase Order Item Supplied",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -3736,8 +3831,8 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-08-29 12:16:12.886021",
"modified_by": "nabinhait@gmail.com",
"modified": "2018-11-12 19:59:49.211145",
"modified_by": "Administrator",
"module": "Buying",
"name": "Purchase Order",
"owner": "Administrator",

View File

@@ -1 +0,0 @@
Trends of purchases across Items, Item Groups, Suppliers.

View File

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

View File

@@ -1,231 +0,0 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
frappe.pages['purchase-analytics'].on_page_load = function(wrapper) {
frappe.ui.make_app_page({
parent: wrapper,
title: __('Purchase Analytics'),
single_column: true
});
new erpnext.PurchaseAnalytics(wrapper);
frappe.breadcrumbs.add("Buying");
}
erpnext.PurchaseAnalytics = frappe.views.TreeGridReport.extend({
init: function(wrapper) {
this._super({
title: __("Purchase Analytics"),
parent: $(wrapper).find('.layout-main'),
page: wrapper.page,
doctypes: ["Item", "Item Group", "Supplier", "Supplier Group", "Company", "Fiscal Year",
"Purchase Invoice", "Purchase Invoice Item",
"Purchase Order", "Purchase Order Item[Purchase Analytics]",
"Purchase Receipt", "Purchase Receipt Item[Purchase Analytics]"],
tree_grid: { show: true }
});
this.tree_grids = {
"Supplier Group": {
label: __("Supplier Group / Supplier"),
show: true,
item_key: "supplier",
parent_field: "parent_supplier_group",
formatter: function(item) {
return item.supplier_name ? item.supplier_name + " (" + item.name + ")" : item.name;
}
},
"Supplier": {
label: __("Supplier"),
show: false,
item_key: "supplier",
formatter: function(item) {
return item.supplier_name ? item.supplier_name + " (" + item.name + ")" : item.name;
}
},
"Item Group": {
label: "Item",
show: true,
parent_field: "parent_item_group",
item_key: "item_code",
formatter: function(item) {
return item.name;
}
},
"Item": {
label: "Item",
show: false,
item_key: "item_code",
formatter: function(item) {
return item.name;
}
},
}
},
setup_columns: function() {
this.tree_grid = this.tree_grids[this.tree_type];
var std_columns = [
{id: "name", name: this.tree_grid.label, field: "name", width: 300},
{id: "total", name: "Total", field: "total", plot: false,
formatter: this.currency_formatter}
];
this.make_date_range_columns();
this.columns = std_columns.concat(this.columns);
},
filters: [
{fieldtype:"Select", label: __("Tree Type"), fieldname: "tree_type",
options:["Supplier Group", "Supplier", "Item Group", "Item"],
filter: function(val, item, opts, me) {
return me.apply_zero_filter(val, item, opts, me);
}},
{fieldtype:"Select", label: __("Based On"), fieldname: "based_on",
options:["Purchase Invoice", "Purchase Order", "Purchase Receipt"]},
{fieldtype:"Select", label: __("Value or Qty"), fieldname: "value_or_qty",
options:["Value", "Quantity"]},
{fieldtype:"Select", label: __("Company"), link:"Company", fieldname: "company",
default_value: __("Select Company...")},
{fieldtype:"Date", label: __("From Date"), fieldname: "from_date"},
{fieldtype:"Date", label: __("To Date"), fieldname: "to_date"},
{fieldtype:"Select", label: __("Range"), fieldname: "range",
options:[{label: __("Daily"), value: "Daily"}, {label: __("Weekly"), value: "Weekly"},
{label: __("Monthly"), value: "Monthly"}, {label: __("Quarterly"), value: "Quarterly"},
{label: __("Yearly"), value: "Yearly"}]}
],
setup_filters: function() {
var me = this;
this._super();
this.trigger_refresh_on_change(["value_or_qty", "tree_type", "based_on", "company"]);
this.show_zero_check();
},
init_filter_values: function() {
this._super();
this.filter_inputs.range.val('Monthly');
},
prepare_data: function() {
var me = this;
if (!this.tl) {
// add 'Not Set' Supplier & Item
// (Supplier / Item are not mandatory!!)
frappe.report_dump.data["Supplier"].push({
name: __("Not Set"),
parent_supplier_group: __("All Supplier Groups"),
id: "Not Set",
});
frappe.report_dump.data["Item"].push({
name: __("Not Set"),
parent_item_group: "All Item Groups",
id: "Not Set",
});
}
if (!this.tl || !this.tl[this.based_on]) {
this.make_transaction_list(this.based_on, this.based_on + " Item");
}
if(!this.data || me.item_type != me.tree_type) {
var items;
if(me.tree_type=='Supplier') {
items = frappe.report_dump.data["Supplier"];
} else if(me.tree_type=='Supplier Group') {
items = this.prepare_tree("Supplier", "Supplier Group");
} else if(me.tree_type=="Item Group") {
items = this.prepare_tree("Item", "Item Group");
} else if(me.tree_type=="Item") {
items = frappe.report_dump.data["Item"];
}
me.item_type = me.tree_type
me.parent_map = {};
me.item_by_name = {};
me.data = [];
$.each(items, function(i, v) {
var d = copy_dict(v);
me.data.push(d);
me.item_by_name[d.name] = d;
if(d[me.tree_grid.parent_field]) {
me.parent_map[d.name] = d[me.tree_grid.parent_field];
}
me.reset_item_values(d);
});
this.set_indent();
} else {
// otherwise, only reset values
$.each(this.data, function(i, d) {
me.reset_item_values(d);
});
}
this.prepare_balances();
if(me.tree_grid.show) {
this.set_totals(false);
this.update_groups();
} else {
this.set_totals(true);
}
},
prepare_balances: function() {
var me = this;
var from_date = frappe.datetime.str_to_obj(this.from_date);
var to_date = frappe.datetime.str_to_obj(this.to_date);
var is_val = this.value_or_qty == 'Value';
$.each(this.tl[this.based_on], function(i, tl) {
if (me.is_default('company') ? true : tl.company === me.company) {
var posting_date = frappe.datetime.str_to_obj(tl.posting_date);
if (posting_date >= from_date && posting_date <= to_date) {
var item = me.item_by_name[tl[me.tree_grid.item_key]] ||
me.item_by_name['Not Set'];
item[me.column_map[tl.posting_date].field] += (is_val ? tl.base_net_amount : tl.qty);
}
}
});
},
update_groups: function() {
var me = this;
$.each(this.data, function(i, item) {
var parent = me.parent_map[item.name];
while(parent) {
var parent_group = me.item_by_name[parent];
$.each(me.columns, function(c, col) {
if (col.formatter == me.currency_formatter) {
parent_group[col.field] =
flt(parent_group[col.field])
+ flt(item[col.field]);
}
});
parent = me.parent_map[parent];
}
});
},
set_totals: function(sort) {
var me = this;
var checked = false;
$.each(this.data, function(i, d) {
d.total = 0.0;
$.each(me.columns, function(i, col) {
if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total")
d.total += d[col.field];
if(d.checked) checked = true;
})
});
if(sort)this.data = this.data.sort(function(a, b) { return b.total - a.total; });
if(!this.checked) {
this.data[0].checked = true;
}
}
});

View File

@@ -1,23 +0,0 @@
{
"creation": "2012-09-21 20:15:16.000000",
"docstatus": 0,
"doctype": "Page",
"icon": "fa fa-bar-chart",
"idx": 1,
"modified": "2013-07-11 14:43:52.000000",
"modified_by": "Administrator",
"module": "Buying",
"name": "purchase-analytics",
"owner": "Administrator",
"page_name": "purchase-analytics",
"roles": [
{
"role": "Analytics"
},
{
"role": "Purchase Manager"
}
],
"standard": "Yes",
"title": "Purchase Analytics"
}

View File

@@ -0,0 +1,125 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
/* eslint-disable */
frappe.query_reports["Purchase Analytics"] = {
"filters": [
{
fieldname: "tree_type",
label: __("Tree Type"),
fieldtype: "Select",
options: ["Supplier Group","Supplier","Item Group","Item"],
default: "Supplier",
reqd: 1
},
{
fieldname: "doc_type",
label: __("based_on"),
fieldtype: "Select",
options: ["Purchase Order","Purchase Receipt","Purchase Invoice"],
default: "Purchase Invoice",
reqd: 1
},
{
fieldname: "value_quantity",
label: __("Value Or Qty"),
fieldtype: "Select",
options: [
{ "value": "Value", "label": __("Value") },
{ "value": "Quantity", "label": __("Quantity") },
],
default: "Value",
reqd: 1
},
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.defaults.get_user_default("year_start_date"),
reqd: 1
},
{
fieldname:"to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.defaults.get_user_default("year_end_date"),
reqd: 1
},
{
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
reqd: 1
},
{
fieldname: "range",
label: __("Range"),
fieldtype: "Select",
options: [
{ "value": "Weekly", "label": __("Weekly") },
{ "value": "Monthly", "label": __("Monthly") },
{ "value": "Quarterly", "label": __("Quarterly") },
{ "value": "Yearly", "label": __("Yearly") }
],
default: "Monthly",
reqd: 1
}
],
after_datatable_render: function(datatable_obj) {
$(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click();
},
get_datatable_options(options) {
return Object.assign(options, {
checkboxColumn: true,
events: {
onCheckRow: function(data) {
row_name = data[2].content;
row_values = data.slice(5).map(function (column) {
return column.content;
})
entry = {
'name':row_name,
'values':row_values
}
let raw_data = frappe.query_report.chart.data;
let new_datasets = raw_data.datasets;
var found = false;
for(var i=0; i < new_datasets.length;i++){
if(new_datasets[i].name == row_name){
found = true;
new_datasets.splice(i,1);
break;
}
}
if(!found){
new_datasets.push(entry);
}
let new_data = {
labels: raw_data.labels,
datasets: new_datasets
}
setTimeout(() => {
frappe.query_report.chart.update(new_data)
},500)
setTimeout(() => {
frappe.query_report.chart.draw(true);
}, 1000)
frappe.query_report.raw_chart_data = new_data;
},
}
});
}
}

View File

@@ -0,0 +1,26 @@
{
"add_total_row": 0,
"creation": "2018-10-05 16:08:24.156448",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"idx": 0,
"is_standard": "Yes",
"modified": "2018-10-05 16:08:33.272201",
"modified_by": "Administrator",
"module": "Buying",
"name": "Purchase Analytics",
"owner": "Administrator",
"prepared_report": 0,
"ref_doctype": "Purchase Order",
"report_name": "Purchase Analytics",
"report_type": "Script Report",
"roles": [
{
"role": "Purchase Manager"
},
{
"role": "Purchase User"
}
]
}

View File

@@ -0,0 +1,8 @@
# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
from erpnext.selling.report.sales_analytics.sales_analytics import Analytics
def execute(filters=None):
return Analytics(filters).run()

View File

@@ -1,8 +1,10 @@
from __future__ import unicode_literals
from frappe import _
import frappe
def get_data():
return [
config = [
{
"label": _("Billing"),
"items": [
@@ -25,48 +27,7 @@ def get_data():
"type": "doctype",
"name": "Payment Entry",
"description": _("Bank/Cash transactions against party or for internal transfer")
},
{
"type": "page",
"name": "pos",
"label": _("POS"),
"description": _("Point of Sale")
},
{
"type": "doctype",
"name": "Cashier Closing",
"description": _("Cashier Closing")
},
{
"type": "doctype",
"name": "Auto Repeat",
"label": _("Auto Repeat"),
"description": _("To make recurring documents")
},
{
"type": "doctype",
"name": "Loyalty Program",
"label": _("Loyalty Program"),
"description": _("To make Customer based incentive schemes.")
},
{
"type": "doctype",
"name": "Loyalty Point Entry",
"label": _("Loyalty Point Entry"),
"description": _("To view logs of Loyalty Points assigned to a Customer.")
},
{
"type": "report",
"name": "Accounts Receivable",
"doctype": "Sales Invoice",
"is_query_report": True
},
{
"type": "report",
"name": "Accounts Payable",
"doctype": "Purchase Invoice",
"is_query_report": True
},
}
]
},
@@ -93,7 +54,7 @@ def get_data():
},
{
"type": "report",
"name":"General Ledger",
"name": "General Ledger",
"doctype": "GL Entry",
"is_query_report": True,
},
@@ -121,6 +82,18 @@ def get_data():
{
"label": _("Accounting Statements"),
"items": [
{
"type": "report",
"name": "Accounts Receivable",
"doctype": "Sales Invoice",
"is_query_report": True
},
{
"type": "report",
"name": "Accounts Payable",
"doctype": "Purchase Invoice",
"is_query_report": True
},
{
"type": "report",
"name": "Trial Balance",
@@ -224,49 +197,6 @@ def get_data():
},
]
},
{
"label": _("Goods and Services Tax (GST India)"),
"items": [
{
"type": "doctype",
"name": "GST Settings",
},
{
"type": "doctype",
"name": "GST HSN Code",
},
{
"type": "report",
"name": "GSTR-1",
"is_query_report": True
},
{
"type": "report",
"name": "GSTR-2",
"is_query_report": True
},
{
"type": "report",
"name": "GST Sales Register",
"is_query_report": True
},
{
"type": "report",
"name": "GST Purchase Register",
"is_query_report": True
},
{
"type": "report",
"name": "GST Itemised Sales Register",
"is_query_report": True
},
{
"type": "report",
"name": "GST Itemised Purchase Register",
"is_query_report": True
},
]
},
{
"label": _("Budget and Cost Center"),
"items": [
@@ -290,7 +220,7 @@ def get_data():
"doctype": "Cost Center"
},
{
"type":"doctype",
"type": "doctype",
"name": "Monthly Distribution",
"description": _("Seasonality for setting budgets, targets etc.")
},
@@ -347,29 +277,24 @@ def get_data():
},
{
"type": "doctype",
"name": "POS Settings",
"description": _("Setup mode of POS (Online / Offline)")
},
{
"type": "doctype",
"name": "POS Profile",
"label": _("Point-of-Sale Profile"),
"description": _("Setup default values for POS Invoices")
},
{
"type": "doctype",
"name":"Terms and Conditions",
"name": "Terms and Conditions",
"label": _("Terms and Conditions Template"),
"description": _("Template of terms or contract.")
},
{
"type": "doctype",
"name":"Mode of Payment",
"name": "Mode of Payment",
"description": _("e.g. Bank, Cash, Credit Card")
},
{
"type": "doctype",
"name":"C-Form",
"name": "Auto Repeat",
"label": _("Auto Repeat"),
"description": _("To make recurring documents")
},
{
"type": "doctype",
"name": "C-Form",
"description": _("C-Form records"),
"country": "India"
}
@@ -506,12 +431,12 @@ def get_data():
"items": [
{
"type": "doctype",
"name":"Shareholder",
"name": "Shareholder",
"description": _("List of available Shareholders with folio numbers")
},
{
"type": "doctype",
"name":"Share Transfer",
"name": "Share Transfer",
"description": _("List of all share transactions"),
},
{
@@ -528,28 +453,6 @@ def get_data():
}
]
},
{
"label": _("Subscription Management"),
"icon": "fa fa-microchip ",
"items": [
{
"type": "doctype",
"name":"Subscriber",
},
{
"type": "doctype",
"name":"Subscription Plan",
},
{
"type": "doctype",
"name":"Subscription"
},
{
"type": "doctype",
"name": "Subscription Settings"
}
]
},
{
"label": _("Help"),
"icon": "fa fa-facetime-video",
@@ -572,3 +475,121 @@ def get_data():
]
}
]
gst = {
"label": _("Goods and Services Tax (GST India)"),
"items": [
{
"type": "doctype",
"name": "GST Settings",
},
{
"type": "doctype",
"name": "GST HSN Code",
},
{
"type": "report",
"name": "GSTR-1",
"is_query_report": True
},
{
"type": "report",
"name": "GSTR-2",
"is_query_report": True
},
{
"type": "report",
"name": "GST Sales Register",
"is_query_report": True
},
{
"type": "report",
"name": "GST Purchase Register",
"is_query_report": True
},
{
"type": "report",
"name": "GST Itemised Sales Register",
"is_query_report": True
},
{
"type": "report",
"name": "GST Itemised Purchase Register",
"is_query_report": True
},
]
}
retail = {
"label": _("Retail Operations"),
"items": [
{
"type": "page",
"name": "pos",
"label": _("POS"),
"description": _("Point of Sale")
},
{
"type": "doctype",
"name": "Cashier Closing",
"description": _("Cashier Closing")
},
{
"type": "doctype",
"name": "POS Settings",
"description": _("Setup mode of POS (Online / Offline)")
},
{
"type": "doctype",
"name": "POS Profile",
"label": _("Point-of-Sale Profile"),
"description": _("Setup default values for POS Invoices")
},
{
"type": "doctype",
"name": "Loyalty Program",
"label": _("Loyalty Program"),
"description": _("To make Customer based incentive schemes.")
},
{
"type": "doctype",
"name": "Loyalty Point Entry",
"label": _("Loyalty Point Entry"),
"description": _("To view logs of Loyalty Points assigned to a Customer.")
}
]
}
subscriptions = {
"label": _("Subscription Management"),
"icon": "fa fa-microchip ",
"items": [
{
"type": "doctype",
"name": "Subscriber",
},
{
"type": "doctype",
"name": "Subscription Plan",
},
{
"type": "doctype",
"name": "Subscription"
},
{
"type": "doctype",
"name": "Subscription Settings"
}
]
}
countries = frappe.get_all("Company", fields="country")
countries = [country["country"] for country in countries]
if "India" in countries:
config.insert(7, gst)
domains = frappe.get_active_domains()
if "Retail" in domains:
config.insert(2, retail)
else:
config.insert(7, retail)
if "Services" in domains:
config.insert(2, subscriptions)
else:
config.insert(7, subscriptions)
return config

View File

@@ -122,10 +122,10 @@ def get_data():
"icon": "fa fa-table",
"items": [
{
"type": "page",
"name": "purchase-analytics",
"label": _("Purchase Analytics"),
"icon": "fa fa-bar-chart",
"type": "report",
"is_query_report": True,
"name": "Purchase Analytics",
"doctype": "Purchase Order"
},
{
"type": "report",

View File

@@ -1,3 +1,3 @@
from __future__ import unicode_literals
source_link = "https://github.com/frappe/erpnext"
source_link = "https://github.com/erpnext/foundation"

View File

@@ -112,11 +112,12 @@ def get_data():
"is_query_report": True,
"name": "Completed Work Orders",
"doctype": "Work Order"
},{
"type": "page",
"name": "production-analytics",
"label": _("Production Analytics"),
"icon": "fa fa-bar-chart",
},
{
"type": "report",
"is_query_report": True,
"name": "Production Analytics",
"doctype": "Work Order"
},
{
"type": "report",

View File

@@ -185,10 +185,10 @@ def get_data():
"icon": "fa fa-table",
"items": [
{
"type": "page",
"name": "sales-analytics",
"label": _("Sales Analytics"),
"icon": "fa fa-bar-chart",
"type": "report",
"is_query_report": True,
"name": "Sales Analytics",
"doctype": "Sales Order"
},
{
"type": "page",

View File

@@ -64,7 +64,7 @@ def get_data():
{
"type": "help",
"label": _("Users and Permissions"),
"youtube_id": "fnBoRhBrwR4"
"youtube_id": "8Slw1hsTmUI"
},
{
"type": "help",

View File

@@ -218,10 +218,10 @@ def get_data():
"doctype": "Item Price",
},
{
"type": "page",
"name": "stock-analytics",
"label": _("Stock Analytics"),
"icon": "fa fa-bar-chart"
"type": "report",
"is_query_report": True,
"name": "Stock Analytics",
"doctype": "Stock Entry"
},
{
"type": "report",

View File

@@ -57,6 +57,8 @@ class AccountsController(TransactionBase):
_('{0} is blocked so this transaction cannot proceed'.format(supplier_name)), raise_exception=1)
def validate(self):
self.validate_qty_is_not_zero()
if self.get("_action") and self._action != "update_after_submit":
self.set_missing_values(for_validate=True)
@@ -117,6 +119,13 @@ class AccountsController(TransactionBase):
if self.get("group_same_items"):
self.group_similar_items()
df = self.meta.get_field("discount_amount")
if self.get("discount_amount") and hasattr(self, "taxes") and not len(self.taxes):
df.set("print_hide", 0)
self.discount_amount = -self.discount_amount
else:
df.set("print_hide", 1)
def validate_paid_amount(self):
if hasattr(self, "is_pos") or hasattr(self, "is_paid"):
is_paid = self.get("is_pos") or self.get("is_paid")
@@ -172,7 +181,7 @@ class AccountsController(TransactionBase):
validate_due_date(self.posting_date, self.due_date,
"Customer", self.customer, self.company, self.payment_terms_template)
elif self.doctype == "Purchase Invoice":
validate_due_date(self.posting_date, self.due_date,
validate_due_date(self.bill_date or self.posting_date, self.due_date,
"Supplier", self.supplier, self.company, self.bill_date, self.payment_terms_template)
def set_price_list_currency(self, buying_or_selling):
@@ -352,6 +361,11 @@ class AccountsController(TransactionBase):
return gl_dict
def validate_qty_is_not_zero(self):
for item in self.items:
if not item.qty:
frappe.throw("Item quantity can not be zero")
def validate_account_currency(self, account, account_currency=None):
valid_currency = [self.company_currency]
if self.get("currency") and self.currency != self.company_currency:
@@ -398,7 +412,8 @@ class AccountsController(TransactionBase):
if d.against_order:
allocated_amount = flt(d.amount)
else:
allocated_amount = min(self.grand_total - advance_allocated, d.amount)
amount = self.rounded_total or self.grand_total
allocated_amount = min(amount - advance_allocated, d.amount)
advance_allocated += flt(allocated_amount)
self.append("advances", {

View File

@@ -12,6 +12,7 @@ from erpnext.buying.utils import validate_for_items, update_last_purchase_rate
from erpnext.stock.stock_ledger import get_valuation_rate
from erpnext.stock.doctype.stock_entry.stock_entry import get_used_alternative_items
from erpnext.stock.doctype.serial_no.serial_no import get_auto_serial_nos, auto_make_serial_nos, get_serial_nos
from frappe.contacts.doctype.address.address import get_address_display
from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget
from erpnext.controllers.stock_controller import StockController
@@ -42,6 +43,7 @@ class BuyingController(StockController):
self.set_qty_as_per_stock_uom()
self.validate_stock_or_nonstock_items()
self.validate_warehouse()
self.set_supplier_address()
if self.doctype=="Purchase Invoice":
self.validate_purchase_receipt_if_update_stock()
@@ -113,6 +115,16 @@ class BuyingController(StockController):
if not d.cost_center and lc_voucher_data and lc_voucher_data[0][1]:
d.db_set('cost_center', lc_voucher_data[0][1])
def set_supplier_address(self):
address_dict = {
'supplier_address': 'address_display',
'shipping_address': 'shipping_address_display'
}
for address_field, address_display_field in address_dict.items():
if self.get(address_field):
self.set(address_display_field, get_address_display(self.get(address_field)))
def set_total_in_words(self):
from frappe.utils import money_in_words
if self.meta.get_field("base_in_words"):

View File

@@ -9,6 +9,7 @@ from erpnext.stock.get_item_details import get_bin_details
from erpnext.stock.utils import get_incoming_rate
from erpnext.stock.get_item_details import get_conversion_factor
from erpnext.stock.doctype.item.item import get_item_defaults, set_item_default
from frappe.contacts.doctype.address.address import get_address_display
from erpnext.controllers.stock_controller import StockController
@@ -16,7 +17,7 @@ class SellingController(StockController):
def __setup__(self):
if hasattr(self, "taxes"):
self.flags.print_taxes_with_zero_amount = cint(frappe.db.get_single_value("Print Settings",
"print_taxes_with_zero_amount"))
"print_taxes_with_zero_amount"))
self.flags.show_inclusive_tax_in_print = self.is_inclusive_tax()
self.print_templates = {
@@ -41,7 +42,9 @@ class SellingController(StockController):
self.validate_selling_price()
self.set_qty_as_per_stock_uom()
self.set_po_nos()
self.set_gross_profit()
set_default_income_account_for_item(self)
self.set_customer_address()
def set_missing_values(self, for_validate=False):
@@ -345,7 +348,25 @@ class SellingController(StockController):
sales_orders = list(set([d.get(ref_fieldname) for d in self.items if d.get(ref_fieldname)]))
if sales_orders:
po_nos = frappe.get_all('Sales Order', 'po_no', filters = {'name': ('in', sales_orders)})
self.po_no = ', '.join(list(set([d.po_no for d in po_nos if d.po_no])))
if po_nos and po_nos[0].get('po_no'):
self.po_no = ', '.join(list(set([d.po_no for d in po_nos if d.po_no])))
def set_gross_profit(self):
if self.doctype == "Sales Order":
for item in self.items:
item.gross_profit = flt(((item.base_rate - item.valuation_rate) * item.stock_qty), self.precision("amount", item))
def set_customer_address(self):
address_dict = {
'customer_address': 'address_display',
'shipping_address_name': 'shipping_address',
'company_address': 'company_address_display'
}
for address_field, address_display_field in address_dict.items():
if self.get(address_field):
self.set(address_display_field, get_address_display(self.get(address_field)))
def validate_items(self):
# validate items to see if they have is_sales_item enabled

View File

@@ -66,11 +66,13 @@ class calculate_taxes_and_totals(object):
if item.doctype in ['Quotation Item', 'Sales Order Item', 'Delivery Note Item', 'Sales Invoice Item']:
item.rate_with_margin, item.base_rate_with_margin = self.calculate_margin(item)
item.rate = flt(item.rate_with_margin * (1.0 - (item.discount_percentage / 100.0)), item.precision("rate"))\
if item.rate_with_margin > 0 else item.rate
if flt(item.rate_with_margin) > 0:
item.rate = flt(item.rate_with_margin * (1.0 - (item.discount_percentage / 100.0)), item.precision("rate"))
item.discount_amount = item.rate_with_margin - item.rate
elif flt(item.price_list_rate) > 0:
item.discount_amount = item.price_list_rate - item.rate
item.net_rate = item.rate
item.discount_amount = item.price_list_rate - item.rate
item.amount = flt(item.rate * item.qty, item.precision("amount"))
item.net_amount = item.amount
@@ -646,4 +648,4 @@ def get_rounded_tax_amount(itemised_tax, precision):
# Rounding based on tax_amount precision
for taxes in itemised_tax.values():
for tax_account in taxes:
taxes[tax_account]["tax_amount"] = flt(taxes[tax_account]["tax_amount"], precision)
taxes[tax_account]["tax_amount"] = flt(taxes[tax_account]["tax_amount"], precision)

View File

@@ -38,6 +38,12 @@ frappe.ui.form.on("Assessment Result", {
frappe.ui.form.on("Assessment Result Detail", {
score: function(frm, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.maximum_score || !frm.doc.grading_scale) {
d.score = "";
frappe.throw(__("Please fill in all the details to generate Assessment Result."));
}
if (d.score > d.maximum_score) {
frappe.throw(__("Score cannot be greater than Maximum Score"));
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -72,10 +76,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -102,6 +108,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -115,7 +122,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-11-10 19:09:02.326827",
"modified": "2018-11-04 03:37:57.763134",
"modified_by": "Administrator",
"module": "Education",
"name": "Fee Schedule Program",
@@ -125,9 +132,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,6 +75,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -84,7 +89,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-11-10 19:09:19.498184",
"modified": "2018-11-04 03:38:06.535706",
"modified_by": "Administrator",
"module": "Education",
"name": "Fee Schedule Student Group",
@@ -94,9 +99,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
@@ -991,39 +992,6 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "0",
"fieldname": "paid_amount",
"fieldtype": "Currency",
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Paid Amount",
"length": 0,
"no_copy": 1,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@@ -1360,7 +1328,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2018-08-21 14:44:48.968839",
"modified": "2018-11-26 20:42:14.467284",
"modified_by": "Administrator",
"module": "Education",
"name": "Fees",

View File

@@ -112,7 +112,10 @@ def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20, order
user = frappe.session.user
student = frappe.db.sql("select name from `tabStudent` where student_email_id= %s", user)
if student:
return frappe. db.sql('''select name, program, due_date, paid_amount, outstanding_amount, grand_total from `tabFees`
return frappe. db.sql('''
select name, program, due_date, grand_total - outstanding_amount as paid_amount,
outstanding_amount, grand_total, currency
from `tabFees`
where student= %s and docstatus=1
order by due_date asc limit {0} , {1}'''
.format(limit_start, limit_page_length), student, as_dict = True)

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -72,10 +76,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -103,10 +109,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -132,10 +140,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -163,10 +173,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -194,10 +206,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -225,10 +239,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -254,10 +270,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -284,6 +302,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -297,7 +316,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-12-27 10:05:22.307860",
"modified": "2018-11-04 03:38:30.902942",
"modified_by": "Administrator",
"module": "Education",
"name": "Instructor Log",
@@ -307,9 +326,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -15,6 +16,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -42,10 +44,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -72,10 +76,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -102,10 +108,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,10 +139,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -161,10 +171,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -191,6 +203,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -204,7 +217,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-11-10 18:57:21.174604",
"modified": "2018-11-04 03:37:17.408427",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Admission Program",
@@ -214,9 +227,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,11 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -73,11 +76,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -105,11 +109,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -135,11 +140,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -166,16 +172,17 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "course.course_name",
"fetch_from": "course.course_name",
"fieldname": "course_code",
"fieldtype": "Read Only",
"hidden": 0,
@@ -199,11 +206,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -230,7 +238,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
}
],
@@ -244,7 +252,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-05-16 22:42:54.254306",
"modified": "2018-11-04 03:38:52.525155",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Group Creation Tool Course",
@@ -254,9 +262,11 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,11 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,16 +74,17 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_from": "instructor.instructor_name",
"fetch_from": "instructor.instructor_name",
"fieldname": "instructor_name",
"fieldtype": "Read Only",
"hidden": 0,
@@ -104,7 +108,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"translatable": 0,
"unique": 0
}
],
@@ -118,7 +122,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-05-16 22:43:13.173633",
"modified": "2018-11-04 03:39:02.413082",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Group Instructor",
@@ -128,9 +132,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -13,6 +14,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -40,10 +42,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -70,10 +74,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -99,10 +105,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -129,10 +137,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -160,6 +170,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -173,7 +184,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-11-10 19:11:39.735521",
"modified": "2018-11-04 03:38:22.896203",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Group Student",
@@ -183,9 +194,11 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -13,6 +14,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -40,10 +42,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -70,10 +74,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,6 +107,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -114,7 +121,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-11-10 19:10:57.680471",
"modified": "2018-11-04 03:38:14.211238",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Guardian",
@@ -124,9 +131,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -15,6 +16,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,7 +43,8 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
"translatable": 0,
"unique": 1
}
],
"has_web_view": 0,
@@ -54,7 +57,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2017-11-10 19:05:37.035846",
"modified": "2018-11-04 03:37:34.712397",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Language",
@@ -63,7 +66,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
@@ -85,10 +87,12 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -14,6 +15,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -41,10 +43,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -102,10 +108,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -133,10 +141,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -163,10 +173,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -193,10 +205,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -224,10 +238,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -253,10 +269,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -284,10 +302,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -315,10 +335,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -346,10 +368,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -378,10 +402,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -408,10 +434,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -438,10 +466,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -469,10 +499,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -500,10 +532,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -530,6 +564,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -543,7 +578,7 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
"modified": "2018-03-20 17:57:53.936119",
"modified": "2018-11-04 03:38:42.970869",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Report Generation Tool",
@@ -552,7 +587,6 @@
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 0,
@@ -574,9 +608,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -13,6 +14,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -40,10 +42,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -103,10 +109,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -132,10 +140,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -164,10 +174,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -195,10 +207,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -225,10 +239,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -256,6 +272,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -269,7 +286,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-11-10 19:05:24.999063",
"modified": "2018-11-04 03:37:25.881487",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Sibling",
@@ -279,9 +296,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -13,6 +14,7 @@
"fields": [
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -40,10 +42,12 @@
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,10 +75,12 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -101,6 +107,7 @@
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
@@ -114,7 +121,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2017-11-10 19:05:46.408887",
"modified": "2018-11-04 03:37:46.485218",
"modified_by": "Administrator",
"module": "Education",
"name": "Student Siblings",
@@ -124,9 +131,11 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Education",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@@ -73,6 +73,7 @@ def get_attendance_list(from_date, to_date, student_group, students_list):
return att_map
def get_students_with_leave_application(from_date, to_date, students_list):
if not students_list: return
leave_applications = frappe.db.sql("""
select student, from_date, to_date
from `tabStudent Leave Application`

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -410,7 +411,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-07-26 17:05:29.402908",
"modified": "2018-11-04 03:33:16.833884",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Clinical Procedure Item",
@@ -420,6 +421,7 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Healthcare",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
@@ -185,7 +186,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-08-06 16:46:54.699133",
"modified": "2018-11-04 03:33:26.958713",
"modified_by": "Administrator",
"module": "Healthcare",
"name": "Inpatient Occupancy",
@@ -195,6 +196,7 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"restrict_to_domain": "Healthcare",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",

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