Compare commits

...

1827 Commits

Author SHA1 Message Date
mbauskar
ece7881ab1 Merge branch 'hotfix' 2017-07-14 17:47:07 +05:30
mbauskar
30e987a835 bumped to version 8.4.3 2017-07-14 18:17:07 +06:00
Makarand Bauskar
087da2e571 Fixed patch (#9862) (#9871) 2017-07-14 17:44:26 +05:30
Makarand Bauskar
ad7eb9d03c [minor] check mode_of_payment in Payment entry (#9869)
* [minor] don't trigger the expense type trigger if value is not set

* [minor] check if account is selected or not in Payment Entry

* [minor] check mode_of_payment in Payment entry
2017-07-14 17:31:36 +05:30
mbauskar
394c4d718d Merge branch 'develop' 2017-07-13 16:16:21 +05:30
mbauskar
ae20748dec bumped to version 8.4.2 2017-07-13 16:46:20 +06:00
Rushabh Mehta
3df2c9421a [fix] setup wont be called if declared inside setup 2017-07-13 16:11:54 +05:30
mbauskar
777b16ffda Merge branch 'develop' 2017-07-13 15:14:29 +05:30
mbauskar
efaf9f59db bumped to version 8.4.1 2017-07-13 15:44:29 +06:00
Nabin Hait
239c9387d1 Merge pull request #9838 from saurabh6790/patch_fix
[patch][fix] update gst_state only if company country is india
2017-07-13 14:49:58 +05:30
Saurabh
e74e4b18c7 [patch][fix] update gst_state only if company country is india 2017-07-13 14:38:43 +05:30
mbauskar
012f5b0a50 Merge branch 'develop' 2017-07-13 14:05:51 +05:30
mbauskar
05d62127d0 bumped to version 8.4.0 2017-07-13 14:35:51 +06:00
Nabin Hait
7549a83b9b Merge pull request #9801 from manassolanki/refractor-report
changes in the assessment report
2017-07-13 13:46:19 +05:30
rohitwaghchaure
c3153655eb Fixed patch create_warehouse_nestedset (#9833) 2017-07-13 12:17:12 +05:30
Makarand Bauskar
96488b0f34 [patch] removed create company address patch (#9832) 2017-07-13 12:16:28 +05:30
Nabin Hait
1a60931435 Added SAC codes and 2/4 digit HSN codes, regional setup can be called multiple times (#9820) 2017-07-13 12:16:04 +05:30
Makarand Bauskar
8f507a984e [minor] check if the company is selected or not before triggering get_bank_cash_account (#9830)
* [minor] check if the company is selected or not before triggering get_bank_cash_account

* [minor] check if production order is available

* [minor] fixed codacy errors
2017-07-13 11:44:29 +05:30
Nabin Hait
57d3cecd68 Merge pull request #9811 from rohitwaghchaure/pricing_rule_issue_for_discount
[Fix] Manual discount is not applying in the transaction if discount amount is zero in the pricing rule
2017-07-13 11:14:53 +05:30
Nabin Hait
de609a2fb6 Merge pull request #9815 from nabinhait/develop
Set company address while making invoice from SO, don't show taxes in print if amount is zero, fixed state code
2017-07-13 11:05:55 +05:30
Nabin Hait
7312186c76 Set corrected states list in GST State field's options 2017-07-13 10:41:15 +05:30
Nabin Hait
0a32b7a6eb Set company address while making invoice from SO, don't show taxes in print if amount is zero, fixed state code 2017-07-12 19:21:05 +05:30
rohitwaghchaure
c1a1e62c0d [Fix] Data not showing in the heatmap of the customer (#9819) 2017-07-12 18:57:23 +05:30
Rohit Waghchaure
b12f2109b5 [Fix] Manual discount is not applying on the pricing rule if discount amount is zero in the pricing rule 2017-07-12 18:02:02 +05:30
Manas Solanki
a13c6a1bef codacy cleanup 2017-07-12 17:49:59 +05:30
Manas Solanki
79ed58fd36 chnages in the assessment report 2017-07-12 17:49:59 +05:30
rohitwaghchaure
860144feb7 [Fix] User not able to search an Item if description is null in the item (#9793) 2017-07-12 15:01:56 +05:30
Makarand Bauskar
1efb05233c [minor] don't trigger source_warehouse if item_code is not set in Production Order (#9806) 2017-07-12 14:53:14 +05:30
Makarand Bauskar
ef8d6dc8f8 [minor] ingore mandatory while auto closing issues and opportunity (#9783) 2017-07-12 14:52:32 +05:30
Nabin Hait
79c2191aa3 [fix] Don't add newline at the end, onchange of serial_no and filter warehouse based on company and is_group (#9809) 2017-07-12 14:10:43 +05:30
Nabin Hait
f012a9db70 Merge pull request #9812 from adityaduggal/wrong_state_codes
Changed state codes and added state
2017-07-12 14:03:39 +05:30
Aditya Duggal
4e1a3c1d58 Changed state codes and added state
-Andaman 35 added
-UP changed to 09 from 35
-Uttrakhand changed to 05 from 36
2017-07-12 13:40:11 +05:30
Nabin Hait
fb8e59234b Merge pull request #9652 from bcornwellmott/sq_lead_time
Added lead time field to supplier quotation
2017-07-11 23:39:27 +05:30
Umair Sayed
31af0849db Update navigation.md (#9798) 2017-07-11 21:07:03 +05:30
Frappe PR Bot
bfdb726072 [translation] translation updates (#9788) 2017-07-11 15:20:11 +05:30
mbauskar
a8406e1544 Merge branch 'develop' 2017-07-11 13:02:15 +05:30
mbauskar
b2aa867b70 bumped to version 8.3.6 2017-07-11 13:32:14 +06:00
Makarand Bauskar
30f2bcbccc [hotfix] allow only 5 character in company_abbr field in setup wizard (#9779) 2017-07-11 12:36:57 +05:30
Prateeksha Singh
7d885432eb [wiz] add user slide, enforce first entry, static labels (#9744) 2017-07-11 12:36:34 +05:30
Nabin Hait
3b5f774144 Merge pull request #9410 from manassolanki/patch-company
Patch for the PR 8754, fixes #9011
2017-07-11 11:35:29 +05:30
Nabin Hait
3a200bbc44 Update create_address_doc_from_address_field_in_company.py 2017-07-11 11:34:27 +05:30
Nabin Hait
2bedca04ae Merge pull request #9750 from rohitwaghchaure/taxable_amount_issue
[Fix] Taxable amount in tax breakup showing wrong value for duplicate items in the invoice
2017-07-11 11:16:56 +05:30
Manas Solanki
1a0536bff4 changes as per review 2017-07-11 11:16:16 +05:30
Manas Solanki
cdba021802 patch for removing the address field from company and creating address doc, fixes #9011 2017-07-11 11:16:16 +05:30
Shivam Mishra
3fe5ecc611 Added Lead fixture, Added test for Lead, Opportunity (#9607)
* Added fixtures for Address and Contact

* Fixed formatting errors

* Added Test for terms, Added Tax and Terms fixture

* Add tests for tax

* Added Test for Print Format
2017-07-11 10:33:07 +05:30
Rohit Waghchaure
296fbfeaac [Fix] Taxable amount in tax breakup showing wrong value for duplicate items in the invoice 2017-07-10 23:06:49 +05:30
Rushabh Mehta
4a7b4efbec [tests] update travis.yml to run ui-tests (#9748)
* [tests] update travis.yml to run ui-tests

* [tests] update travis.yml to run ui-tests

* [test] fix item_group.py

* [test] fix item_group.py

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] daily work summary fails?

* [check] no scheduled jobs for tests

* [check] daily work summary fails?

* [check] daily work summary fails?
2017-07-10 23:00:01 +05:30
Ben Cornwell-Mott
b1f0fd4ac3 Lead time matches Item master 2017-07-10 09:09:29 -07:00
Nabin Hait
f7d2a59c18 Merge pull request #9538 from sagarvora/fix-bom-issue
[minor] fix bom price resetting on validation
2017-07-10 20:41:16 +05:30
Nabin Hait
0ac8542eaa Merge pull request #9772 from tundebabzy/issue-9595
Wrong Exchange Rate when making payment against Journal Entry (#9595)
2017-07-10 19:12:48 +05:30
Nabin Hait
c8b6d3badb Merge pull request #9713 from manassolanki/stud-dashb
changes in the student dashboard
2017-07-10 19:10:57 +05:30
Nabin Hait
cdf4320b3b Merge pull request #9673 from rohitwaghchaure/serial_no_sales_return_issue
Remove sales invoice from serial number while making sales return entery using delivery note
2017-07-10 19:04:30 +05:30
Nabin Hait
5b2d3222f3 Merge pull request #9710 from rohitwaghchaure/sales_invoice_dn_link_revert
Revert sales invoice dn link issue
2017-07-10 18:47:38 +05:30
Manas Solanki
5d202ca31a change in the student type 2017-07-10 18:40:53 +05:30
Nabin Hait
7088db9e1f Merge pull request #9773 from mbauskar/docs
[docs] corrected the filename from sms_setting2 -> sms_settings2
2017-07-10 18:17:28 +05:30
Nabin Hait
ec344ffa96 Merge pull request #9761 from mbauskar/depends-on
[minor] fixed depends on for stock entry expense_account and purchase receipt item's cost_center field
2017-07-10 18:16:15 +05:30
mbauskar
a52e726b6b [docs] corrected the filename from sms_setting2 -> sms_settings2 2017-07-10 18:11:32 +05:30
Nabin Hait
cf82c3828e Merge pull request #9769 from manassolanki/payment-entry
frappe call if posting date is defined
2017-07-10 17:57:26 +05:30
Nabin Hait
6fcfbaa1f9 Merge pull request #9766 from nabinhait/migration_fixes
minor fixes while upgrading an old instance
2017-07-10 17:45:25 +05:30
Nabin Hait
a6c733d06c Merge pull request #9753 from rohitwaghchaure/budget_cost_center_issue
[Fix] Budget against the field in the validation message
2017-07-10 17:45:02 +05:30
tunde
46ef26df71 treat use case where Journal entry is contained in outstanding_invoices in get_outstanding_reference_documents function 2017-07-10 13:05:29 +01:00
Manas Solanki
99d571a786 frappe call if posting date is defined 2017-07-10 17:33:27 +05:30
Rohit Waghchaure
e3ae600277 [Fix] Budget against the field in the validation message 2017-07-10 17:06:54 +05:30
Nabin Hait
dd7a723214 minor fixes while upgrading an old instance 2017-07-10 16:41:59 +05:30
mbauskar
ccaf36a00f [minor] fixed depends on for stock entry expense_account and purchase receipt item's cost_center field 2017-07-10 16:24:24 +05:30
Manas Solanki
101a021f7b added student type in program enrollment and changes in the student dashboard 2017-07-10 16:21:44 +05:30
Nabin Hait
68ed0488a3 Merge pull request #9757 from mbauskar/breadcrumb-fixes
[hotfix] check if the item group exist or not
2017-07-10 15:32:52 +05:30
mbauskar
75a233b472 [hotfix] check if the item group exist or not 2017-07-10 14:36:42 +05:30
Nabin Hait
5a174d61bc Merge pull request #9754 from creamdory/develop
Added Quotation as Standard Sidebar Menu
2017-07-10 14:13:35 +05:30
creamdory
7a2815299e Added Quotation as Standard Sidebar Menu 2017-07-10 16:09:03 +08:00
Manas Solanki
195d2b577f add few details in the student log (#9670) 2017-07-10 12:29:46 +05:30
Britlog
8c85562ceb Breadcrumbs management (#9544) 2017-07-10 12:14:05 +05:30
Manas Solanki
77aa4762b8 don't request another ajax call if one is pending (#9620) 2017-07-10 12:12:16 +05:30
Nabin Hait
35ecab6a52 Merge branch 'develop' 2017-07-08 13:55:41 +05:30
Nabin Hait
097da8cc89 bumped to version 8.3.5 2017-07-08 14:25:41 +06:00
Nabin Hait
1d52a4df22 Merge pull request #9732 from adityaduggal/gstin_NA
First 2 digit validation would disregard NA values
2017-07-08 13:52:35 +05:30
Nabin Hait
cd61a20fb4 Update utils.py 2017-07-08 13:52:13 +05:30
Nabin Hait
8f7eb358b8 Merge pull request #9730 from nabinhait/prod_fix
Finish prod order when skipped material transfer
2017-07-08 13:50:52 +05:30
Aditya Duggal
0e285265b1 First 2 digit validation would disregard NA values 2017-07-08 13:35:01 +05:30
Nabin Hait
b866fcf14f Finish prod order when skipped material transfer 2017-07-08 12:57:13 +05:30
Manas Solanki
3d190a15ab changes in the student dashboard 2017-07-07 17:29:29 +05:30
mbauskar
ab59e4769b Merge branch 'develop' 2017-07-07 17:12:37 +05:30
mbauskar
7b5ca3e494 bumped to version 8.3.4 2017-07-07 17:42:36 +06:00
Rohit Waghchaure
8f2c8f6e9d Revert sales invoice dn link issue 2017-07-07 17:07:59 +05:30
Nabin Hait
76c5924cbe Merge pull request #9699 from manassolanki/productn
frappe call only when there is item in production order
2017-07-07 15:48:37 +05:30
Nabin Hait
6eb55042d8 Merge pull request #9704 from rohitwaghchaure/serial_no_not_found_issue
Fixed the issue Serial No serial no not found
2017-07-07 15:47:25 +05:30
Rohit Waghchaure
9589527784 Fixed the issue Serial No serial no not found 2017-07-07 15:34:28 +05:30
Nabin Hait
dba3f0048b Merge pull request #9702 from mbauskar/installation-note
[hotfix] fixed the customer address set filter on Installation Note
2017-07-07 15:28:23 +05:30
mbauskar
3f6a5b2539 [hotfix] fixed the customer address set filter on Installation Note 2017-07-07 15:24:01 +05:30
Manas Solanki
cf7f72e586 frappe call only when there is item 2017-07-07 15:09:57 +05:30
mbauskar
74d07c695b Merge branch 'develop' 2017-07-07 14:06:45 +05:30
mbauskar
5cf3868d03 bumped to version 8.3.3 2017-07-07 14:36:45 +06:00
Nabin Hait
1b36336fc3 Added new option in invoice_copy, made state_number read_only (#9695)
* Added new option in invoice_copy, made state_number read_only

* removed the trailing whitespace
2017-07-07 14:05:33 +05:30
mbauskar
3f3ac5652f resolved merge conflicts 2017-07-07 13:42:54 +05:30
mbauskar
7b8d366e3a bumped to version 8.3.2 2017-07-07 14:11:45 +06:00
rohitwaghchaure
a29442d6bf [Fix] Setup wizard translation (#9693) 2017-07-07 13:40:13 +05:30
rohitwaghchaure
bbe16c80ff [Fix] Setup wizard translation issue (#9692) 2017-07-07 13:27:15 +05:30
Nabin Hait
4e21f11864 Merge pull request #9690 from rmehta/additional-discount-fix
[fix] reset flag after promise
2017-07-07 13:26:14 +05:30
Rushabh Mehta
19d52dc503 [fix] remove extra flag 2017-07-07 13:23:23 +05:30
Nabin Hait
701f7cccbf Merge pull request #9688 from nabinhait/pos_fixes
Fixed itemised tax calc to fix pos loading
2017-07-07 13:18:14 +05:30
Nabin Hait
8b486b0f28 Fixed state code of WB and allowed invoice_copy to edit after submit 2017-07-07 13:14:25 +05:30
Rushabh Mehta
6705ab3eaf [fix] discount setting multiple times 2017-07-07 13:14:08 +05:30
Rushabh Mehta
233a19a373 [fix] reset flag after promise 2017-07-07 13:06:29 +05:30
Nabin Hait
fbb5945ff3 Fixed itemised tax calc to fix pos loading 2017-07-07 12:58:22 +05:30
Nabin Hait
7773ee8960 Sales invoice dashboard, multiple letter head in report and email alert docs 2017-07-07 12:49:05 +05:30
Nabin Hait
8ad168ac67 Fixed merge conflict 2017-07-06 23:18:00 +05:30
Nabin Hait
3e9520b276 bumped to version 8.2.5 2017-07-06 23:46:40 +06:00
Nabin Hait
29b74b90c8 bumped to version 8.3.1 2017-07-06 23:45:28 +06:00
Nabin Hait
ad6cf4fa88 Merge branch 'develop' 2017-07-06 23:15:28 +05:30
Nabin Hait
e927b81292 Update production_order.js 2017-07-06 23:11:54 +05:30
Makarand Bauskar
88a37c17a6 [hotfix] commit after every 200 production orders (#9674) 2017-07-06 19:13:09 +05:30
Rohit Waghchaure
934e69fe0b Remove sales invoice from serial number while making sales return entery using delivery note 2017-07-06 18:19:18 +05:30
Nabin Hait
5fe7f6c3fd Invoice copy is in the center in gst print format 2017-07-06 17:51:05 +05:30
Nabin Hait
d59819d9bb Date format issue fixed in setup wizard 2017-07-06 16:12:59 +05:30
mbauskar
afdd7a626c Merge branch 'develop' 2017-07-06 16:12:02 +05:30
mbauskar
7699b5e92a bumped to version 8.3.0 2017-07-06 16:42:02 +06:00
Nabin Hait
b5d765d19a Merge pull request #9669 from rohitwaghchaure/sales_invoice_serial_no_revert
Revert sales invoice serial no issues
2017-07-06 16:07:46 +05:30
Rohit Waghchaure
6d03790b44 Revert sales invoice serial no issues 2017-07-06 15:58:50 +05:30
Nabin Hait
3638250f5d Merge pull request #9641 from manassolanki/att-report
show inactive students in the monthly attendance report
2017-07-06 15:53:16 +05:30
Nabin Hait
7bf192e46a Merge pull request #9526 from manassolanki/validate-criteria
validate the duplicate assessment criteria
2017-07-06 15:47:10 +05:30
Nabin Hait
fa351f4bdf Merge pull request #9433 from tundebabzy/issue-9424
Errors due to a single quote in Supplier's name #9424
2017-07-06 15:22:16 +05:30
rohitwaghchaure
bedb486c55 [Fix] Multi letter head showing in the print (#9644) 2017-07-06 14:50:38 +05:30
Nabin Hait
f3f0dfef2a Invoice copy, state code in gst print format, hsn code in other sales/purchase docs (#9658)
* Invoice copy, state code in gst print format, hsn code in other sales/purchase docs

* Formatted Net Amount in item-tax-breakup

* GST print format fixes

* removed trailing whitespace

* removed trailing whitespace
2017-07-06 14:49:34 +05:30
rohitwaghchaure
5d5a81f375 Fixed patch create_warehouse_nestedset (#9656) 2017-07-06 13:03:11 +05:30
Nabin Hait
02c8607d04 Production Order Documentation for Required Items table (#9647) 2017-07-06 11:28:07 +05:30
Makarand Bauskar
ddd4845420 [hotfix] setup wizard, complete_setup fixes (#9654)
* [hotfix] setup wizard, complete_setup fixes

* Update utils.py

* Update utils.py
2017-07-06 11:09:34 +05:30
Ben Cornwell-Mott
19d9381197 Added lead time field to supplier quotation 2017-07-05 13:17:13 -07:00
Rushabh Mehta
63b06420e1 [fix] setup wizard dates (#9646) 2017-07-05 17:56:04 +05:30
Makarand Bauskar
bf66d7e041 [minor] setup wizard dates to yyyy-mm-dd format (#9642) 2017-07-05 17:26:34 +05:30
Manas Solanki
fc85768685 show inactive students in the monthly attendance reoprt 2017-07-05 16:35:47 +05:30
Nabin Hait
37c784eb3a Updated modified in bom doctypes 2017-07-05 16:09:23 +05:30
Makarand Bauskar
a54eb7d022 [minor] added change log for v8.3.0 (#9629) 2017-07-05 15:36:38 +05:30
Makarand Bauskar
48af4289d3 Revert "[enhance] Provision to set the currency in the pricing rule for the price" (#9636) 2017-07-05 15:17:02 +05:30
Rushabh Mehta
03c30a7f92 [minor] throw name error if group matches with name, for setup wizard to nicely catch the exception 2017-07-05 15:12:07 +05:30
Nabin Hait
949a920022 Production Order Enhancements (#9432)
* Production Order Enhancements
  - Show required items child table
  - Source warehouse for each raw materials, in Pro Order Item and BOM Item table
  - Group warehouse allowed for source and wip warehouse
  - Patch to populate required items, to fix status and reserved qty for stopped pro order
  - Cleaned up existing codes
  - Test cases

* Set available qty in source and wip warehouse

* minor fix in bom query naming

* Minor Fixes

* Reload BOM doctypes in patch
2017-07-05 13:55:41 +05:30
Nabin Hait
852cb64e4f GST tax invoice print format and more (#9616)
* GST Tax Invoice print format and more. Fixes #9545 #9566 #9608

* Reload gst print format only for Indian users

* Fixes as Codacy
2017-07-05 12:58:19 +05:30
mbauskar
b66fb9a4c0 Merge branch 'master' into develop 2017-07-05 11:25:15 +05:30
mbauskar
9fbdf14e61 Merge branch 'hotfix' 2017-07-05 11:25:14 +05:30
mbauskar
4b7a30b527 bumped to version 8.2.4 2017-07-05 11:55:14 +06:00
Doridel Cahanap
5ad4a6e161 Total Stock Summary (#9465)
* Total Stock Summary

* indentation fixes and removed the for loop

* minor fixes in total stock summery report
2017-07-05 10:49:09 +05:30
rohitwaghchaure
10a4a13e5e Remove gst reports for non indian accounts (#9553)
* remove gst reports for non indian accounts

* [Fix] GSN code auto name
2017-07-04 16:45:29 +05:30
Frappe PR Bot
3ceab64bfa [translation] translation updates (#9611) 2017-07-04 16:08:14 +05:30
tundebabzy
6015f0f2ec Inspection required before delivery isn't working for item variants (#9362)
* makes `copy_attributes_to_variant` to not ignore "Table"

* fixes test cases - `test_auto_material_request` and `test_auto_material_request_for_variant`

* adds test case - tables in templates should be copied to variants

* [ci] use deprecated trusty build for now
2017-07-04 15:43:02 +05:30
rohitwaghchaure
e5ca48a76a [fix] Don't update the sales invoice number into the serial no if update stock is disabled in the invoice (#9593) 2017-07-04 10:54:23 +05:30
rohitwaghchaure
3e4bcfe2d8 [Fix] Opening Entry, Unknown column 'warehouse' in 'where clause' (#9585)
* [Fix] Opening Entry, Unknown column 'warehouse' in 'where clause'

* escaped company name in get_opening_accounts
2017-07-04 10:49:37 +05:30
Prateeksha Singh
5e4c8ecd62 Setup wizard refactor (#9441)
* cleaned up slides, yet to decide on master data

* remove item_count

* [fix] refresh slides on domain bug

* UI test

* set header image here in ERPNext

* [minor] lint checks

* [wiz] change autofilled fiscal year format

* [minor] fixed date format to dd-mm-yyyy if fiscal year is not available for country
2017-07-03 18:23:57 +05:30
Makarand Bauskar
11df066ed0 Merge pull request #9586 from Arundhatii/28June
Added help page for Global Search and updated old images #9241
2017-07-03 16:24:39 +05:30
Makarand Bauskar
87f2848aeb resolved conflicts 2017-07-03 16:24:01 +05:30
Makarand Bauskar
12450fa473 Merge pull request #9558 from mbauskar/domainify-school
[domainify] Domainification for the Education Domain
2017-07-03 16:17:21 +05:30
Frappe
67bbcf6932 Resolved conflicts in index.md 2017-07-03 16:00:07 +05:30
Frappe
79918c66c2 Deleted old Images and added Global Search Help page 2017-07-03 15:58:14 +05:30
Makarand Bauskar
960208bae0 Merge pull request #9426 from tundebabzy/issue-9096
Gross Profit Does not display Reversal of sales invoice #9096
2017-07-03 15:23:21 +05:30
Makarand Bauskar
1bad1fcc00 Merge pull request #9452 from faztp12/develop
Customer Query include Search fields
2017-07-03 15:20:23 +05:30
Rushabh Mehta
43ef4e9047 Added first UI tests (#9532)
* [wip]

* [tests] wip

* [ui-tests] first-cut

* [minor] remove old tests
2017-07-03 11:53:07 +05:30
Makarand Bauskar
65f6f2a05e Merge pull request #9568 from frappe/add-code-of-conduct-1
Create CODE_OF_CONDUCT.md
2017-07-03 10:48:16 +05:30
Rushabh Mehta
558fcc140f Create CODE_OF_CONDUCT.md 2017-07-01 21:35:10 +05:30
mbauskar
ea92682cfd Merge branch 'hotfix' 2017-07-01 14:16:46 +05:30
mbauskar
a06a600d0a Merge branch 'master' into develop 2017-07-01 14:16:46 +05:30
mbauskar
af9d3a4db6 bumped to version 8.2.3 2017-07-01 14:46:46 +06:00
Makarand Bauskar
f39a9f1c5b Merge pull request #9562 from mbauskar/gst-hsn-code
[minor] fix autoname for GST HSN Code (#9536)
2017-07-01 14:15:18 +05:30
Sagar Vora
067991ee30 [minor] fix autoname for GST HSN Code (#9536) 2017-07-01 14:14:14 +05:30
Makarand Bauskar
1589ada04d Merge pull request #9473 from rohitwaghchaure/pricing_rule_currency
[enhance] Provision to set the currency in the pricing rule for the price
2017-06-30 18:58:30 +05:30
mbauskar
ee368221cf [domainify] Domainification for schools doctype 2017-06-30 17:58:57 +05:30
rohitwaghchaure
6691856d08 Merge pull request #9554 from mbauskar/sales-register
[minor] fixed AttributeError: 'dict' object has no attribute 'company' in sales register
2017-06-30 16:48:10 +05:30
Charles-Henri Decultot
53de2f1b57 Translation correction in P&L report (#9436) 2017-06-30 16:45:11 +05:30
mbauskar
22aaf0cbd0 [minor] fixed AttributeError: 'dict' object has no attribute 'company' in sales register 2017-06-30 16:43:25 +05:30
Sagar Vora
8ebc0df65f [minor] fix autoname for GST HSN Code (#9536) 2017-06-30 16:42:26 +05:30
Makarand Bauskar
4095915bff Merge pull request #9489 from rohitwaghchaure/billed_amt_issue_in_pr
[fix] Billed Amt does not get updated in Purchase Receipt, if Invoice exists and item has been returned once before
2017-06-30 16:02:31 +05:30
Makarand Bauskar
abe8e2ecce Merge pull request #9533 from rohitwaghchaure/total_amount_issue
[minor] Total amount not showing value in bank reconcillation
2017-06-30 14:50:23 +05:30
Makarand Bauskar
b053674781 Merge pull request #9534 from manassolanki/report
Course wise assessment result tool
2017-06-30 14:47:46 +05:30
Manas Solanki
bb68f8ca01 cleanup for the assessment report and added chart 2017-06-30 12:22:51 +05:30
mbauskar
943637e06c Merge branch 'hotfix' 2017-06-30 12:00:23 +05:30
mbauskar
0407cb0d92 bumped to version 8.2.2 2017-06-30 12:30:22 +06:00
Makarand Bauskar
d192a420d1 Merge pull request #9549 from rohitwaghchaure/patch_fix_gst
[Fix] Options must be a valid DocType for field Customs Tariff Number
2017-06-30 11:59:47 +05:30
Rohit Waghchaure
3856d14ae6 [Fix] Options must be a valid DocType for field Customs Tariff Number 2017-06-30 11:57:41 +05:30
Manas Solanki
85480b3af7 Added report in config/schools.py 2017-06-30 11:36:57 +05:30
Manas Solanki
c4125b32ee Course wise assessment reports 2017-06-30 11:36:57 +05:30
Sagar Vora
7640858510 [minor] fix bom price resetting on validation 2017-06-29 22:20:07 +05:30
mbauskar
4e08dfc72f Merge branch 'develop' 2017-06-29 21:58:08 +05:30
mbauskar
53e34f5c1c bumped to version 8.2.1 2017-06-29 22:28:08 +06:00
Makarand Bauskar
c6e1c3c048 Merge pull request #9537 from mbauskar/patch
[minor] fixed the report value for  deprecated report patch
2017-06-29 21:57:09 +05:30
mbauskar
0c2de6e07a [minor] fixed the report value for deprecated report patch 2017-06-29 21:47:14 +05:30
Rohit Waghchaure
b801357ecf [minor] Total amount not showing value in bank reconcillation 2017-06-29 18:40:01 +05:30
mbauskar
1508267fd6 Merge branch 'develop' 2017-06-29 15:07:26 +05:30
mbauskar
8f1f93603d bumped to version 8.2.0 2017-06-29 15:37:26 +06:00
Aditya Duggal
f1bd39c937 Allow NA values in GSTIN number (#9503)
-Reason for allowing NA value is that if a user wants to make GSTIN number mandatory then they can do the same easily
2017-06-29 14:25:19 +05:30
Manas Solanki
800c69eec3 validate the duplicate assessment criteria 2017-06-29 13:00:22 +05:30
mbauskar
ec252c806f resolved merge conflicts 2017-06-29 12:11:07 +05:30
mbauskar
2a903a0608 Merge branch 'hotfix' 2017-06-29 12:09:40 +05:30
mbauskar
71b4e48ea5 bumped to version 8.1.7 2017-06-29 12:39:39 +06:00
Makarand Bauskar
ae2d92ee76 Merge pull request #9523 from saurabh6790/setup_wiz_fix
[fix] translate domain
2017-06-29 12:07:19 +05:30
Saurabh
21cf1fd851 [fix] translate domain 2017-06-29 12:04:45 +05:30
Makarand Bauskar
02c281cc2f Merge pull request #9522 from rmehta/update-gstin-2
[fix] update-gstin
2017-06-29 12:01:20 +05:30
Makarand Bauskar
a938d3956a [minor] get doc using party_name instead of party 2017-06-29 11:58:50 +05:30
Rushabh Mehta
02b0ed4199 [fix] update-gstin 2017-06-29 11:56:14 +05:30
Vishal Dhayagude
76f93d05b7 display image in supplier's list view (#9500)
* [fix]display supplier image in desk

* Supplier image displayed in desk

* Show image in supplier desk page

* [minor] removed whitespaces
2017-06-29 11:23:13 +05:30
Makarand Bauskar
24ab20fe11 Merge pull request #9467 from rohitwaghchaure/support_hours_report
[enhance] Report for analysis of support hours count
2017-06-29 11:19:41 +05:30
Makarand Bauskar
1eb31db71f Merge pull request #9466 from manassolanki/validation
changes in student settings for validating the students in the student groups
2017-06-29 10:48:59 +05:30
Makarand Bauskar
ef95b4d6e3 Merge pull request #9468 from manassolanki/issue-11
in program enrollment filter out students which are already enrolled
2017-06-29 10:48:12 +05:30
Makarand Bauskar
514c0417dd Merge pull request #9483 from manassolanki/fix-student-fetch
fetch queries for the students in the student group
2017-06-29 10:47:05 +05:30
Makarand Bauskar
67f6ac848c Merge pull request #9497 from ashwinisave35/email_template_redesign
Adding ERPNext logo for email templates.
2017-06-29 10:46:44 +05:30
Makarand Bauskar
5d95ebec4e Merge pull request #9508 from rohitwaghchaure/contacts_module_error
[Fix] Module error during patch execution
2017-06-29 10:46:17 +05:30
Makarand Bauskar
bb7317d398 Merge pull request #9512 from mbauskar/patch-fix
[fixes] delete auto email report of deprecated reports and other minor fixes
2017-06-29 10:45:50 +05:30
Makarand Bauskar
550268eaf3 Merge pull request #9518 from sagarvora/gh-9516
[minor] fix supplier GSTIN portal not getting displayed
2017-06-29 10:43:53 +05:30
Makarand Bauskar
7f9af46da5 [minor] removed whitespace 2017-06-29 09:38:46 +05:30
Makarand Bauskar
e38eb83358 [minor] removed print statement 2017-06-29 09:35:11 +05:30
Makarand Bauskar
af00c9f70b [minor] removed whitespaces from get_students method 2017-06-29 09:25:19 +05:30
Makarand Bauskar
5c7545da0c [minor] passed index for string format 2017-06-29 09:07:59 +05:30
mbauskar
d6e8bb5452 [fixes] delete auto email report of deprecated reports and other minor fixes 2017-06-29 08:39:01 +05:30
Sagar Vora
435032f5bc [minor] fix typo 2017-06-28 23:59:47 +05:30
Sagar Vora
1ef50c89db [minor] use party_name instead of party and save GSTIN in uppercase 2017-06-28 23:52:22 +05:30
Rohit Waghchaure
2e4b4454b3 [Fix] Module error during patch execution 2017-06-28 17:31:59 +05:30
rohitwaghchaure
4b33b7e1c1 Merge pull request #9418 from nick9822/nick9822-patch-3
Removed "Asset" filter on payment account
2017-06-28 16:38:21 +05:30
rohitwaghchaure
69279229cc Merge pull request #8987 from bcornwellmott/bom_convert_uom
Added BOM UOM selection for items
2017-06-28 16:28:31 +05:30
Rohit Waghchaure
5b7028c7bb stock qty not changed if item change 2017-06-28 15:58:51 +05:30
mbauskar
0018db344c Merge branch 'develop' 2017-06-28 13:32:29 +05:30
mbauskar
e9a4f4e70d bumped to version 8.1.6 2017-06-28 14:02:29 +06:00
Saurabh
be03de3ad6 Merge pull request #9502 from mbauskar/patch-fix
[fix] delete/update desktop icon for deprecated report
2017-06-28 13:28:33 +05:30
Makarand Bauskar
d235325a95 Merge pull request #9501 from saurabh6790/gst_patch_fix
[fix] delete custom field tax_id if exists in transaction Sales Order, Sales Invoice and Delivery Note
2017-06-28 13:28:02 +05:30
mbauskar
6daa6e422e [fix] delete/update desktop icon for deprecated report 2017-06-28 13:26:50 +05:30
Saurabh
07913c3ff2 [fix] delete custom field tax_id if exists in trasaction Sales Order, Sales Invoice and Delivery Note 2017-06-28 13:16:50 +05:30
Makarand Bauskar
71ba7ea717 Merge pull request #9498 from mbauskar/develop
[minor] fixed broken image url in gst documentation
2017-06-28 12:30:56 +05:30
mbauskar
3b0e6cecd6 [minor] fixed broken image url in gst documentation 2017-06-28 12:29:19 +05:30
Ashwini Save
544de60d36 Adding ERPNext logo for email tempates. 2017-06-28 11:44:09 +05:30
Manas Solanki
d652221071 fetch queries for the students in the student group 2017-06-28 11:26:41 +05:30
mbauskar
4d5d3b7685 Merge branch 'develop' 2017-06-28 11:01:40 +05:30
mbauskar
3bf9071598 bumped to version 8.1.5 2017-06-28 11:31:40 +06:00
Saurabh
46af07cc09 Merge pull request #9494 from mbauskar/patch-fixes
[fix] handle email exception if email account is not configured
2017-06-28 11:00:00 +05:30
mbauskar
27692670b1 [fix] handle email exception if email account is not configured 2017-06-28 10:56:50 +05:30
Makarand Bauskar
3708df61bf Merge pull request #9493 from saurabh6790/gst_patch_fix
[fix] reload gst settings doctype in patch
2017-06-28 10:52:49 +05:30
Saurabh
3f2dd04b10 [fix] reload gst settings doctype in patch 2017-06-28 10:50:38 +05:30
mbauskar
fd598d8f3a Merge branch 'develop' 2017-06-28 10:40:07 +05:30
mbauskar
4e0999dda7 bumped to version 8.1.4 2017-06-28 11:10:07 +06:00
Makarand Bauskar
eef3f62ff7 Merge pull request #9488 from rmehta/gst-reminder
[regional] ability to send gst reminders to all parties
2017-06-27 19:33:05 +05:30
Makarand Bauskar
104eb8c6ad [minor] render GSTIN value as "" instead of None 2017-06-27 18:59:35 +05:30
Manas Solanki
3959c7c3c1 filter out students which are already enrolled in program enrollment 2017-06-27 18:22:05 +05:30
Makarand Bauskar
b43f4073db fixed TypeError: throw() got an unexpected keyword argument 'exception' 2017-06-27 18:15:52 +05:30
Rushabh Mehta
01659271be [minor] dont make fixtures again by patch 2017-06-27 18:05:54 +05:30
Rushabh Mehta
c616a4a527 [tests] codacy 2017-06-27 17:50:15 +05:30
Rohit Waghchaure
eb7eb43dfc [fix] Billed Amt does not get updated in Purchase Receipt, if Invoice exists and item has been returned once before 2017-06-27 17:34:44 +05:30
Rushabh Mehta
00ae424cac [regional] ability to send gst reminders to all parties 2017-06-27 17:31:41 +05:30
Makarand Bauskar
7b6e09b9a7 Merge pull request #9487 from rohitwaghchaure/currency_label_issue
[fix] Currency label not displaying in the total advance field
2017-06-27 16:16:22 +05:30
Makarand Bauskar
90a3e60de7 Merge pull request #9372 from pratu16x7/serial-batch-entry
Serial no/batch entry dialog
2017-06-27 16:12:30 +05:30
Rohit Waghchaure
f3e91e2b2b [minor] Currency label not displaying in the total advance field 2017-06-27 15:51:35 +05:30
pratu16x7
846f5d4bd8 [fix] cloning rows 2017-06-27 14:03:56 +05:30
Makarand Bauskar
51520f9de6 Merge pull request #9479 from frappe-pr-bot/translations-2017-06-27
[translation] translation update
2017-06-27 13:58:04 +05:30
Makarand Bauskar
9d457d3e34 Merge pull request #9485 from saurabh6790/gst_update_email
send email to system managers about gst update
2017-06-27 13:42:52 +05:30
frappe-pr-bot
8ddd946dea [translation] translation updates 2017-06-27 10:10:50 +02:00
Saurabh
c20abf6b2a send email to system managers about gst setup 2017-06-27 13:21:57 +05:30
Makarand Bauskar
68a48c9cfc Merge pull request #9484 from mbauskar/develop
revert customer-orders-invoices-and-shipping-status.md documentation
2017-06-27 12:51:32 +05:30
mbauskar
8c3f99f12e revert customer-orders-invoices-and-shipping-status.md documentation 2017-06-27 12:49:10 +05:30
Rushabh Mehta
9b09ff29d2 [fix] address creation for india/setup.py 2017-06-27 12:17:39 +05:30
Rushabh Mehta
f4e908bd91 [minor] general_ledger.js 2017-06-27 11:56:30 +05:30
Makarand Bauskar
5d8803b23e Merge pull request #9435 from rmehta/gst
GST (India) Setup and Invoices #8711
2017-06-27 11:44:33 +05:30
pratu16x7
f970ca4d35 Update docs 2017-06-27 10:12:58 +05:30
pratu16x7
29cebbb0cd use set_value() for setting rows 2017-06-27 09:48:28 +05:30
Rohit Waghchaure
0b078fb4cb [enhance] Provision to set the currency in the pricing rule for the price 2017-06-27 00:06:40 +05:30
pratu16x7
89d001caf3 [lint] fixes 2017-06-26 17:45:49 +05:30
tunde
6837e69187 Merge branch 'develop' into issue-9424 2017-06-26 13:05:27 +01:00
tunde
5824ae98d9 calls local to build frappe.form_dict in order to pass failing test 2017-06-26 12:42:11 +01:00
Rohit Waghchaure
67526f244e [enhance] Report for analysis of support hours count 2017-06-26 17:04:52 +05:30
tunde
67cbeb1bb0 Merge branch 'develop' into issue-9096 2017-06-26 12:11:07 +01:00
tunde
8859eb23a3 set form_dict correctly 2017-06-26 12:01:41 +01:00
pratu16x7
ae450fc23b async call to require, more validation 2017-06-26 15:31:46 +05:30
nick9822
82e816054e Added report_type to payment account filter 2017-06-26 15:29:44 +05:30
tunde
ea7768d3f3 fixes form_dict failure in travis test 2017-06-26 10:17:53 +01:00
Manas Solanki
cb650f836e validation of student in student attendance 2017-06-26 14:11:12 +05:30
Saurabh
f4fc30a72d Merge branch 'develop' 2017-06-26 13:55:59 +05:30
Saurabh
095701e86b bumped to version 8.1.3 2017-06-26 14:25:59 +06:00
Saurabh
dccceb44f9 Merge pull request #9463 from saurabh6790/v8_1_patch_fixes
[fix] patch fixes
2017-06-26 13:52:23 +05:30
pratu16x7
5f389c999a [fix] values update in items in invoices 2017-06-26 13:38:24 +05:30
Saurabh
29fa0a9a17 [fix] patch fixes 2017-06-26 13:28:45 +05:30
tunde
c1d22adb9f Merge branch 'develop' into issue-9424 2017-06-26 08:52:55 +01:00
tunde
bce13cd0e3 fixes failing test 2017-06-26 08:43:25 +01:00
Saurabh
81bb2c9f3c Merge branch 'develop' 2017-06-26 11:01:38 +05:30
Saurabh
3bf5a38c6f bumped to version 8.1.2 2017-06-26 11:31:37 +06:00
Makarand Bauskar
c93de0e803 [minor] removed global roles from company doctype field's depends on propery (#9450) 2017-06-24 10:39:30 +05:30
Rushabh Mehta
d03203966a [minor] fix old patch 2017-06-24 10:37:19 +05:30
Console Admin
8623166dca Customer Query include Searchfields
frappe/erpnext#8821
2017-06-23 20:32:52 +03:00
pratu16x7
577e4c4e28 Add in transaction.js, cleanups 2017-06-23 19:25:01 +05:30
Makarand Bauskar
ebaea08225 Merge pull request #9437 from Arundhatii/20Jun
Added help pages and deleted old images links to #9241
2017-06-23 18:54:45 +05:30
Makarand Bauskar
1a78a3244b removed conflicts 2017-06-23 18:37:08 +05:30
rohitwaghchaure
8f51a5e527 In POS on click of delete button, remove the selected item from the cart (#9428) 2017-06-23 18:17:04 +05:30
Makarand Bauskar
1d962dd3f7 removed conflicts 2017-06-23 18:11:58 +05:30
Makarand Bauskar
bbf81aa3a4 image title translation 2017-06-23 18:11:00 +05:30
Makarand Bauskar
862302f02d image title translation 2017-06-23 18:10:06 +05:30
Makarand Bauskar
408336e7ad image title translation 2017-06-23 18:08:45 +05:30
Makarand Bauskar
ab49c3100d corrected image title 2017-06-23 18:04:56 +05:30
Makarand Bauskar
ec27a30069 Merge pull request #9442 from creamdory/develop
BOM Stock Report to allow Multi Level Warehouse Setup
2017-06-23 17:59:56 +05:30
Makarand Bauskar
5e994ddf65 removed white spaces 2017-06-23 17:58:50 +05:30
Makarand Bauskar
4eced4acec Merge pull request #9445 from rohitwaghchaure/column_width_issue_bank_reco
[minor] Fix grid column of the Bank Reconciliation
2017-06-23 17:24:50 +05:30
Makarand Bauskar
6df26422f6 Merge pull request #9446 from rohitwaghchaure/delivery_required_issue_for_pos
Don't validate delivery note and sales order required for the POS invoice
2017-06-23 17:24:21 +05:30
Frappe
a951e56f9c Modified help pages 2017-06-23 16:49:35 +05:30
Frappe
1f8e5fbcb1 Edited help page 2017-06-23 16:48:46 +05:30
Frappe
ca6fed359b Added help pages for Subcontracting and deleted old images 2017-06-23 16:48:17 +05:30
creamdory
9961fb82d6 Bom Stock Report Change Requests 2017-06-23 15:57:52 +08:00
Rohit Waghchaure
8326028d33 Don't validate delivery note and sales order required for the POS invoice 2017-06-23 12:56:12 +05:30
Rohit Waghchaure
666d004b40 [minor] Fix grid column of the Bank Reconciliation 2017-06-23 12:10:21 +05:30
Frappe
9a8f33f855 Replaced screenshot in help pages, links to #9241 2017-06-23 11:30:26 +05:30
Frappe
8181a7463e added help page for Kanban Board, links to #9241 2017-06-23 11:30:26 +05:30
Frappe
ac08fbd438 added test documentation 2017-06-23 11:30:26 +05:30
Rushabh Mehta
210b6f8f7e [docs] 2017-06-22 22:32:08 +05:30
Rushabh Mehta
25366a22ad [minor] cleanup 2017-06-22 22:32:08 +05:30
Rushabh Mehta
919a74ad88 [gst] adde reports + docs 2017-06-22 22:32:08 +05:30
Rushabh Mehta
b3c8f44b3e [wip] GST for India. Pending reports 2017-06-22 22:31:32 +05:30
tunde
94500fd17b adds test case 2017-06-22 17:34:54 +01:00
tunde
dcd54209fc parameterises sql string 2017-06-22 14:03:19 +01:00
pratu16x7
759f669214 Add in delivery note 2017-06-22 18:14:29 +05:30
pratu16x7
70eca9462b make erpnext.SerialNoBatchSelector 2017-06-22 18:14:29 +05:30
pratu16x7
60d9446656 onchange in df 2017-06-22 18:14:29 +05:30
pratu16x7
934105bf34 fix modified by, blur serial field 2017-06-22 18:14:28 +05:30
pratu16x7
26b8f5c3ce [minor] 2017-06-22 18:14:16 +05:30
pratu16x7
36693e27be [fix] tests 2017-06-22 18:14:16 +05:30
pratu16x7
a5d5403bf3 specific change bubbling for grid fields 2017-06-22 18:13:56 +05:30
pratu16x7
0e35651e94 Add get_stock_qty test 2017-06-22 18:13:56 +05:30
pratu16x7
837ffbddbc [minor] 2017-06-22 18:13:55 +05:30
pratu16x7
ff25573558 cleanup 2017-06-22 18:13:55 +05:30
pratu16x7
82a199d6d7 [fix] availably qty reupdate 2017-06-22 18:13:55 +05:30
pratu16x7
d15a507567 add serial_no_check 2017-06-22 18:13:55 +05:30
pratu16x7
01e79f033e add warehouse selection and mapping 2017-06-22 18:13:55 +05:30
pratu16x7
9a6e675b41 wip 2017-06-22 18:13:55 +05:30
pratu16x7
7331f169fc [fix] warehouse required bug 2017-06-22 18:13:54 +05:30
pratu16x7
d09f35fa98 fire modal on item_code, events, validation 2017-06-22 18:13:54 +05:30
pratu16x7
52d703a232 [fix] test 2017-06-22 18:13:54 +05:30
pratu16x7
e4e00d2215 batch item distribution by oldest, serial no check 2017-06-22 18:13:54 +05:30
pratu16x7
60944e3397 get oldest batch in modal, insert batch items 2017-06-22 18:13:30 +05:30
pratu16x7
0b642cd414 set available qty 2017-06-22 18:13:30 +05:30
pratu16x7
b4de1c771b WIP 2017-06-22 18:13:30 +05:30
Rushabh Mehta
aedaac63ea [wip] batch, serial number selector 2017-06-22 18:13:30 +05:30
Saurabh
2cb598f644 Merge pull request #9430 from sagarvora/fix-travis
[ci] use deprecated trusty build for now
2017-06-22 17:28:10 +05:30
mbauskar
bbe9bccc1a Merge branch 'develop' 2017-06-22 17:00:25 +05:30
mbauskar
04c8bf0b21 bumped to version 8.1.1 2017-06-22 17:30:25 +06:00
Makarand Bauskar
0a9176a647 Merge pull request #9429 from mbauskar/delete-deprecated-reports
[minor] deleted deprecated reprots and changed the lead.json modified time
2017-06-22 16:58:50 +05:30
mbauskar
66e2a510b9 [minor] deleted deprecated reprots and changed the lead.json modified time 2017-06-22 16:57:46 +05:30
Sagar Vora
f070c548de [ci] use deprecated trusty build for now 2017-06-22 16:43:28 +05:30
tunde
96e629a635 adds credits notes to report since double entry for P or L affects sales 2017-06-22 10:04:33 +01:00
mbauskar
78aac9edb6 Merge branch 'develop' 2017-06-22 13:10:59 +05:30
mbauskar
ea77b63b4a bumped to version 8.1.0 2017-06-22 13:40:58 +06:00
Makarand Bauskar
79d36c7c43 Merge pull request #9423 from mbauskar/patch-fix
[minor] save the system settings document
2017-06-22 12:49:35 +05:30
mbauskar
4b299ba009 [minor] save the system settings document 2017-06-22 12:46:31 +05:30
Makarand Bauskar
e995371b08 Merge pull request #9355 from rohitwaghchaure/company_wise_manufacturing_settings
[Enhance] Company wise perpetual inventory settings
2017-06-22 12:35:41 +05:30
Rohit Waghchaure
2d9b3cd270 Fixed test cases 2017-06-22 12:23:15 +05:30
Ben Cornwell-Mott
ac3ad0810a Merge branch 'bom_convert_uom' of https://github.com/bcornwellmott/erpnext into bom_convert_uom 2017-06-21 10:17:39 -07:00
Ben Cornwell-Mott
1e96b7bbe5 Added conversion_factor update in patch 2017-06-21 10:16:50 -07:00
Makarand Bauskar
0ea5d941e6 Merge branch 'develop' into bom_convert_uom 2017-06-21 21:35:38 +05:30
nick9822
881491cd2b Removed "Asset" filter on payment account 2017-06-21 19:51:08 +05:30
Makarand Bauskar
1b6746e3bc Merge pull request #9388 from saurabh6790/dropbox_doc_fix
[update] dropbox documentation to show how to set redirect url to create access token
2017-06-21 19:10:45 +05:30
Makarand Bauskar
cdfccffc0d Merge pull request #9341 from manassolanki/training-event
send email on update and on update after submit
2017-06-21 19:09:21 +05:30
Makarand Bauskar
7a2a2dad35 Merge pull request #9381 from almeidapaulopt/so_proj
link sales order to new project
2017-06-21 18:48:30 +05:30
Makarand Bauskar
a3f7823304 Merge pull request #9412 from umairsy/21jun
Updated help pages and removed old images, links to #9262
2017-06-21 18:34:45 +05:30
Umair Sayyed
5057098a19 Updated help pages and removed old images, links to #9262 2017-06-21 17:54:39 +05:30
Makarand Bauskar
ce7087f08a Merge pull request #9408 from mbauskar/develop
merged hotfix branch to develop
2017-06-21 16:41:33 +05:30
Makarand Bauskar
b37eb10421 Merge pull request #9382 from nick9822/nick9822-patch-1
Resetting batch and serial nos checks
2017-06-21 16:34:32 +05:30
mbauskar
196f3b1fb8 resolved merge conflicts 2017-06-21 14:38:06 +05:30
mbauskar
654ccb84f4 Merge branch 'hotfix' 2017-06-21 13:17:12 +05:30
mbauskar
9b4690995e bumped to version 8.0.51 2017-06-21 13:47:12 +06:00
Makarand Bauskar
2c67b01335 Merge pull request #9404 from mbauskar/hotfix
make quotation against lead company name (#9188)
2017-06-21 12:57:08 +05:30
Manas Solanki
29ba4143f9 make quotation against lead company name (#9188) 2017-06-21 12:55:27 +05:30
Makarand Bauskar
9b5d1fc458 Merge pull request #9401 from sagarvora/so-calendar
[fix] get status in calendar view and show green background
2017-06-21 12:41:27 +05:30
Makarand Bauskar
a9a03ab723 Merge pull request #9403 from manassolanki/issue-10
Trigger assessment plan every time page loads, fixes #9402
2017-06-21 12:37:40 +05:30
Manas Solanki
7f64f623f0 Trigger assessment plan every time page loads 2017-06-21 12:08:23 +05:30
Sagar Vora
6371b53b7e [fix] get status in calendar view and show green background 2017-06-21 11:58:29 +05:30
Makarand Bauskar
c7cfa16f8c Merge pull request #9391 from saurabh6790/fix_make_variant_item_code
[minor][fix] pass template item name to make_variant_item_code
2017-06-21 11:58:07 +05:30
Saurabh
8d269beb45 [minor][fix] pass template item name to make_variant_item_code 2017-06-20 20:14:14 +05:30
Makarand Bauskar
cd5dd890aa Merge pull request #9384 from nick9822/nick9822-patch-2
Bug while fetching stock balance of new item.
2017-06-20 19:52:28 +05:30
Makarand Bauskar
eb08cce825 Merge pull request #9386 from umairsy/20Jun
Replaced old images with new, links to #9262
2017-06-20 19:40:46 +05:30
Saurabh
88b642637b update dropbox documentation to show how to set redirect url to create access token 2017-06-20 19:01:16 +05:30
Umair Sayyed
357cd6df90 added new images, links #9262 2017-06-20 18:19:50 +05:30
Umair Sayyed
3292e59dcd Replaced old images with new, links to #9262 2017-06-20 18:17:40 +05:30
nick9822
cc699a94fd Bug while fetching new item balance. 2017-06-20 17:13:29 +05:30
nick9822
43a48fd2bc Resetting batch and serial nos checks 2017-06-20 17:02:55 +05:30
Paulo Almeida
2d5e65ddcf link sales order to new project 2017-06-20 12:08:22 +01:00
Makarand Bauskar
d2301fc43d Merge pull request #9375 from frappe-pr-bot/translations-2017-06-20
[translation] translation update
2017-06-20 15:53:41 +05:30
frappe-pr-bot
db4bb720b8 [translation] translation updates 2017-06-20 11:22:36 +02:00
Makarand Bauskar
8fac4314aa Merge pull request #9373 from sagarvora/gh-9289
Check for align_labels_left before adding text-right class
2017-06-20 14:31:22 +05:30
Sagar Vora
89d60ca35e Check for align_labels_left before adding text-right class 2017-06-20 14:16:06 +05:30
Rushabh Mehta
17e6bb83eb [fix] typo, item group route to have parent only for non root 2017-06-20 14:07:33 +05:30
Makarand Bauskar
958b06b129 Merge pull request #9369 from sagarvora/gh-4559
[minor] calculate balance in company currency instead of account currency
2017-06-20 13:26:10 +05:30
Ayush Shukla
a111f78566 Leaderboard of customers, items, suppliers and sales partner (#9354)
* First commit leaderboard working

* Styling and added href

* Changed timeline string

* Changes in item

* Cleanup

* Fix

* made changes to currency column

* Code cleanup for codacy

* Sorting bug fixed and formatting done

* Changed type to isinstance
2017-06-20 13:04:45 +05:30
Vishal Dhayagude
310d4dc9e0 UOM column in Batch Wise Balance History Report (#9359)
* Training Events/Results link to employee dashbord

* [minor]Improve validation message for Buying / Selling Setting

* [minor]Added UOM cloumn in Batch Wise Balance History Report

* modified validation message for buying / selling setting
2017-06-20 13:02:35 +05:30
Britlog
faf75c4ddd Fix and improve shopping cart (#9348)
* Fix and improve shopping cart

* Update shopping_cart.js

* Update shopping_cart.js
2017-06-20 12:51:32 +05:30
Rushabh Mehta
c422874418 Update company.py 2017-06-20 12:19:36 +05:30
Rushabh Mehta
777526e3a8 Update __init__.py 2017-06-20 12:14:32 +05:30
Makarand Bauskar
22773a29f7 Merge pull request #9356 from tundebabzy/issue_6510
adds information about "Is Paid" and "Update Stock"
2017-06-20 12:04:16 +05:30
Sagar Vora
5b08d7acb3 [minor] calculate balance in company currency instead of account currency 2017-06-20 11:50:23 +05:30
Rohit Waghchaure
e9ff1914fc Added is_perpetual_inventory_enabled method 2017-06-20 11:26:37 +05:30
Rohit Waghchaure
65ccb42f95 fixed document 2017-06-20 10:21:34 +05:30
Rohit Waghchaure
6945d0dd8a fixed test cases 2017-06-20 10:21:33 +05:30
Rohit Waghchaure
a5f40941ae [Enhance] Companywise perpetual inventory setting 2017-06-20 10:21:33 +05:30
Rushabh Mehta
80ef298519 [fix] [tests] test_delivery_note 2017-06-20 10:07:28 +05:30
Rushabh Mehta
36311020de [minor] ux fixes 2017-06-20 09:31:06 +05:30
tunde
4961072b51 adds the corrected breadcrumbs trail 2017-06-19 13:51:27 +01:00
Makarand Bauskar
9a5c39d329 Merge pull request #9353 from mbauskar/develop
[minor] Allow on Submit for Sales Order Customer PO and Customer PO Date
2017-06-19 18:16:22 +05:30
tunde
46db749d62 adds information about "Is Paid" and "Update Stock" 2017-06-19 09:18:57 +01:00
mbauskar
de5a11e8fb [minor] Allow on Submit for Sales Order Customer PO and Customer PO Date 2017-06-19 13:07:51 +05:30
Sagar Vora
086b6a33ea Fixed BOM value not updating on changing item (#9350) 2017-06-19 12:25:14 +05:30
Sagar Vora
67fe1010c7 [minor] set_posting_time=1 only when imported data contains posting date. (#9349) 2017-06-19 12:12:22 +05:30
Rushabh Mehta
b7b49f6da7 [fixes] fix message and type conversion; 2017-06-19 09:59:09 +05:30
Charles-Henri Decultot
2305eda82e Addition of new fields for POS Profile in Sales Invoice and POS Profile User link modification (#9339) 2017-06-19 09:25:54 +05:30
Umair Sayed
ac2e32a511 replaced some old images with new, #9262 (#9335) 2017-06-19 09:23:04 +05:30
Ben Cornwell-Mott
2c77165fc6 Fixed small code issues (codecy) 2017-06-16 13:47:40 -07:00
Manas Solanki
9936100a6a send email on update and on update after submit fixes #8898 2017-06-16 22:18:20 +05:30
bcornwellmott
6561b8ade9 Merge branch 'develop' into bom_convert_uom 2017-06-16 08:29:00 -07:00
Makarand Bauskar
24173b9a12 Merge pull request #9337 from mbauskar/develop
[minor] use reload_doc instead of reload_doctype
2017-06-16 19:16:05 +05:30
mbauskar
3c1a53c325 [minor] use reload_doc instead of reload_doctype 2017-06-16 18:31:42 +05:30
Rushabh Mehta
73167eae60 [demo] make it faster, do not send user email 2017-06-16 16:55:32 +05:30
tundebabzy
9a3462031d [UX] Error in purchase transaction - Ignore instead of Prompt #7766 (#9329)
* sets tax category to "Total" if all items are non-stock items

* makes notification message translatable and removes multi-line string

* Update buying_controller.py
2017-06-16 15:30:14 +05:30
almeidapaulopt
31692a2595 Create a project from a Sales Order (#9111)
* init commit

* don't get tasks if project name is none

* cleanup

* Update sales_order.js
2017-06-16 15:29:41 +05:30
Makarand Bauskar
e159ce9a27 Merge pull request #9330 from mbauskar/develop
[minor] reload Domain doctype before executing patch
2017-06-16 14:36:22 +05:30
mbauskar
2ea55c7143 [minor] reload Domain doctype before executing patch 2017-06-16 14:33:59 +05:30
Makarand Bauskar
3d6697949c [minor] fixed the child table field name (#9328)
* [minor] exclude Other domain from Domains

* [minor] fixed the child table field name
2017-06-16 14:12:28 +05:30
Sagar Vora
b1c794a4f9 [hot] fix global name args is not defined (#9326) 2017-06-16 13:50:35 +05:30
Faris Ansari
1ee615c9ad Add .eslintrc for codacy (#9321) 2017-06-16 13:12:47 +05:30
rohitwaghchaure
fb45913b3b [fix] Patch for move account head from account to warehouse (#9325) 2017-06-16 13:12:37 +05:30
Makarand Bauskar
dd986f659e Merge branch 'pratu16x7-domainify' into domainify (#9324)
* bootstrap domains and set active_domain on setup

* [minor] Patch for domain docs

* [minor]

* Update create_domain_docs.py
2017-06-16 13:02:45 +05:30
Nabin Hait
84bc5601eb Total sales cost in Project should be updated based on base_grand_total (#9302)
* Total sales cost in Project should be updated based on base_grand_total

* Patch to update sales cost in Project in base currency
2017-06-16 12:13:51 +05:30
Vishal Dhayagude
2510d1c86a Training Events/Results link added to Employee (#9313) 2017-06-16 11:58:08 +05:30
Umair Sayed
5dadb0e19a created help page for email inbox, fixes #9262 (#9315) 2017-06-16 11:57:44 +05:30
Britlog
224eb90199 Fix get_parents context (#9296) 2017-06-16 11:51:06 +05:30
Sagar Vora
5f407907a2 fix logic of quantity validation (#9311) 2017-06-16 11:43:36 +05:30
Manas Solanki
b07535bb64 bug in training result module (#9314) 2017-06-16 11:20:42 +05:30
Rushabh Mehta
c8a0de5e59 Revert "sets tax category to "Total" if all items are non-stock items (#9295)" (#9320)
This reverts commit 476c4fec1d.
2017-06-16 11:18:23 +05:30
tundebabzy
476c4fec1d sets tax category to "Total" if all items are non-stock items (#9295) 2017-06-16 11:17:40 +05:30
Ben Cornwell-Mott
840c757b12 Merge branch 'bom_convert_uom' of https://github.com/bcornwellmott/erpnext into bom_convert_uom 2017-06-15 08:53:29 -07:00
Ben Cornwell-Mott
7055446508 Reload explosion and scrap items docs 2017-06-15 08:52:55 -07:00
Rushabh Mehta
e0434ad40e Merge branch 'develop' into bom_convert_uom 2017-06-15 17:32:27 +05:30
mbauskar
5da3ac63bf [minor] fixed merge conflicts 2017-06-15 16:09:42 +05:30
mbauskar
ac13627222 Merge branch 'hotfix' 2017-06-15 16:05:49 +05:30
mbauskar
489550ed59 bumped to version 8.0.50 2017-06-15 16:35:49 +06:00
Makarand Bauskar
950ad36352 Merge pull request #9306 from nabinhait/in_words_col_len
Change column length of in_words
2017-06-15 16:03:09 +05:30
Makarand Bauskar
a4af7cb7d3 removed extra quote from query 2017-06-15 16:02:44 +05:30
Nabin Hait
5aee7d1b70 Change column length of in_words 2017-06-15 15:35:08 +05:30
mbauskar
f9e2bf1ab4 fixed merge conflicts 2017-06-15 13:42:47 +05:30
mbauskar
8dbee03467 Merge branch 'hotfix' 2017-06-15 13:29:40 +05:30
mbauskar
39f4130a0a bumped to version 8.0.49 2017-06-15 13:59:40 +06:00
Nabin Hait
6e9a146f2b Merge pull request #9193 from tundebabzy/issue_9180
Payment Entry - Latest Exchange Rate not fetched
2017-06-15 12:34:27 +05:30
Makarand Bauskar
428e5b7172 Merge pull request #9299 from rohitwaghchaure/refernce_name_issue
[fix] Payment Entry - draft sales invoices should not be selectable
2017-06-15 12:32:00 +05:30
Nabin Hait
2153399c39 Create journal_entry.py 2017-06-15 12:30:58 +05:30
Rohit Waghchaure
5ea8c97b7c [fix] Payment Entry - draft sales invoices should not be selectable 2017-06-15 12:16:15 +05:30
Nabin Hait
6d7b0ce794 Warehouse Account Linking (#9292)
* [enhance] Added account in the warehouse

* documentation

* patch to move account head from account to warehouse

* fixed test cases

* Fixes in warehouse-account linking

* minor fix in test case
2017-06-15 11:09:27 +05:30
rohitwaghchaure
03ba66d0d8 [Fix] In sales invoice, delivery note link not showing in the dashboard if delivery note has made from sales invoice (#9290) 2017-06-14 19:41:11 +05:30
Umair Sayed
0b8e19b5d8 Added new help pages as per OKR - DO NOT MERGE (#9291)
* added help pages on Assessment, delete and restore documents and Document versioning, fixed #9262

* some fixes in help docs
2017-06-14 19:40:08 +05:30
tunde
3514332cd8 changes journal_entry.get_exchange_rate to return exchange rate at date not average exchange rate 2017-06-14 13:14:40 +01:00
Manas Solanki
67c4f1713b Minor changes in the UX and courses automatically fetched upon saving (#9264) 2017-06-14 17:34:36 +05:30
Manas Solanki
95ca531def make quotation against lead company name (#9188) 2017-06-14 16:13:23 +05:30
tundebabzy
f5604c101c Once primary key is generated, do not allow changing Series #8911 (#9265)
* changes set_only_once field for tabDocField to 1

* changes all affected doctypes `set_only_once` option to 1

* add patch name to text file

* adds test cases

* Revert "add patch name to text file"

This reverts commit fc7cb6b455.

* Revert "changes set_only_once field for tabDocField to 1"

This reverts commit 2b1f7f31a0.
2017-06-14 16:10:09 +05:30
Sagar Vora
847444724b remove bracket (#9284) 2017-06-14 15:51:47 +05:30
Sagar Vora
d19c2e2e93 [minor] Check if item is stock item before validating Warehouse while Purchase Return (#9282)
* Check if item is stock item before validating Warehouse

* changed logic to decide warehouse_mandatory
2017-06-14 15:39:41 +05:30
KanchanChauhan
c849f647f7 Show Stock Level only if any value(actual, reserved, reserved for production or projected) exists (#9168) 2017-06-14 15:37:47 +05:30
Manas Solanki
40be3f4048 fix in the item for the function make_variant_item_code (#9280) 2017-06-14 15:06:07 +05:30
Manas Solanki
737482423b change in the absent student report (#9185) 2017-06-14 15:05:48 +05:30
tundebabzy
5c9dd42547 fixes #9098: don't skip calculation if income or expense is [] (#9267) 2017-06-14 14:57:34 +05:30
rohitwaghchaure
4c0f9dac94 Total amount not showing for credit note column in the print (#9278) 2017-06-14 12:54:48 +05:30
Makarand Bauskar
0da5f23db6 [minor] fixed Cannot read property 'default_letter_head' of undefined (#9268) 2017-06-14 12:52:13 +05:30
Sagar Vora
99a2db80ab move bom based rate calculation to end (#9271) 2017-06-14 12:38:27 +05:30
rohitwaghchaure
1b2b4a626f [Fix] Accounts receivable report showing wrong currency for total amount against the customer (#9276) 2017-06-14 12:32:52 +05:30
bcornwellmott
d53dd7f4c9 Merge branch 'develop' into bom_convert_uom 2017-06-13 08:40:24 -07:00
Sagar Vora
489ab6d70d [minor] remove hardcoded flt precision and use system default (#9250)
* possible fix

* use system default precision for flt
2017-06-13 18:58:47 +05:30
tundebabzy
26a39610ca fixes #8941: Better error message for duplicate items (#8968)
* fixes #8941: Better error message for duplicate items

* gathers all non unique items instead of first encountered non unique item

* renders errored items with `br` instead of `li`
2017-06-13 17:40:56 +05:30
Ashwini Save
eed0cee186 Solve issue for while changing status of sales order page not reloading (#9204)
* Solve issue for while changing status of sales order page not reloading

* Close Sales order issue : code review Changes.
2017-06-13 17:14:06 +05:30
Makarand Bauskar
da15486624 Merge pull request #9260 from mbauskar/address-and-contacts
[hot] fixed ImportError: Module import failed for Company (erpnext.setup.doctype.company.company)
2017-06-13 17:08:56 +05:30
Makarand Bauskar
a7a7c835cc Merge pull request #9196 from msiddiq0/patch-2
Fix incorrect youtube link on Video Tutorials
2017-06-13 17:05:50 +05:30
Makarand Bauskar
f339f6d69f Merge pull request #9195 from msiddiq0/patch-1
Fixed wrong YouTube video link
2017-06-13 17:05:36 +05:30
Makarand Bauskar
65f5cf3fc1 Merge pull request #9197 from msiddiq0/patch-3
Fix incorrect YouTube link on Video Tutorials
2017-06-13 17:05:19 +05:30
mbauskar
96ce5821b8 [hot] fixed ImportError: Module import failed for Company (erpnext.setup.doctype.company.company) 2017-06-13 17:03:13 +05:30
Makarand Bauskar
0c5d732cd8 Merge pull request #9208 from mbauskar/docs
removed {next} from documentation and removed the globals from custom scripts
2017-06-13 16:32:26 +05:30
Makarand Bauskar
70ef313b0d Merge pull request #9245 from frappe-pr-bot/translations-2017-06-13
[translation] translation update
2017-06-13 16:23:22 +05:30
KanchanChauhan
1dc26b127b Salutation and Gender in Lead and Customer (#9199) 2017-06-13 15:26:35 +05:30
Saurabh
b7ef28d23d Merge branch 'hotfix' 2017-06-13 15:20:13 +05:30
Saurabh
797f2030f8 Merge branch 'master' into develop 2017-06-13 15:20:13 +05:30
Saurabh
0b35a3a67a bumped to version 8.0.48 2017-06-13 15:50:13 +06:00
frappe-pr-bot
f7fe66cc48 [translation] translation updates 2017-06-13 11:17:57 +02:00
Makarand Bauskar
8ce53c94d1 Merge pull request #9189 from mbauskar/mysql-lockout
[hotfix] fixes for mysql Lock wait timeout exceeded
2017-06-13 14:41:42 +05:30
mbauskar
6f71648719 [minor] removed the else condition in update_qty 2017-06-13 14:36:30 +05:30
mbauskar
f819c93329 [minor] replaced db_save by db_update and added patch to remove the indexes on tabBin 2017-06-13 13:22:34 +05:30
_JG_
aafe0c517f Update purchase_order_dashboard.py (#9149)
There are no links to projects
2017-06-13 13:00:47 +05:30
Makarand Bauskar
757e1bf846 Merge pull request #9213 from manassolanki/school-report
fix for student monthly attendance report
2017-06-13 12:30:37 +05:30
Ashwini Save
7f14f28099 Account Receivable - Credit Note column added to print format. (#9230)
* Account Receivable - Credit Note column added to print Format.

* Review changes for translation: Account Receivable add credit note column

* Review changes for translation: Account Receivable add credit note column

* Review changes for translation: Account Receivable add credit note column
2017-06-13 11:18:39 +05:30
Makarand Bauskar
88a0d22c10 Merge pull request #9214 from saurabh6790/stock_ledger_entry_indexing
[fix] add index on voucher type and voucher no in stock ledger entry
2017-06-12 17:26:24 +05:30
Nabin Hait
d0ac0bdc18 Merge branch 'master' into develop 2017-06-12 13:50:12 +05:30
Nabin Hait
d59df5dd5d Merge branch 'hotfix' 2017-06-12 13:50:11 +05:30
Nabin Hait
d3e1afa2f5 bumped to version 8.0.47 2017-06-12 14:20:11 +06:00
Makarand Bauskar
13239339a6 Merge pull request #9224 from rohitwaghchaure/pos_due_date_issue
[fix] Due Date cannot be before Posting Date during POS records syncing
2017-06-12 13:23:11 +05:30
Rohit Waghchaure
782d477be0 [fix] Due Date cannot be before Posting Date 2017-06-12 12:35:40 +05:30
Rushabh Mehta
4f8f9c1d9a [enhance] create demo with function bench --site sitename make-demo` (#9212) 2017-06-12 09:18:06 +05:30
rohitwaghchaure
f9fe5787a2 Merge pull request #9218 from rohitwaghchaure/pos_mobile_search
[minor] added mobile no to search customer in POS
2017-06-11 17:07:05 +05:30
Rohit Waghchaure
c8490626f9 [minor] added mobile no to search customer in POS 2017-06-10 12:21:37 +05:30
tunde
5127da952e changes expected payment_account in test case according to the fact that exchange rate should return latest saved rate 2017-06-09 17:11:41 +01:00
bcornwellmott
fed9816213 Removed trailing whitespace 2017-06-09 07:37:27 -07:00
bcornwellmott
a35839aa47 Removing unused pprint 2017-06-09 07:36:15 -07:00
Saurabh
0c21d85f0d [fix] add index on voucher type and voucher no in stock ledger entry 2017-06-09 19:05:30 +05:30
tunde
7bf4b121f3 Merge branch 'hotfix' into issue_9180 2017-06-09 13:58:22 +01:00
Manas Solanki
4458eb356b fix for student monthly attendance report 2017-06-09 18:20:21 +05:30
mbauskar
828804fab0 [minor] removed the {next} from the last articles 2017-06-09 17:30:36 +05:30
mbauskar
11f0ee3cac [docs] removed the globals from documentation 2017-06-09 17:23:06 +05:30
Faris Ansari
0626716f48 Merge pull request #9182 from pratu16x7/stock-entry-detail-global-fix
[fix] sys_defaults global in stock entry detail
2017-06-09 16:27:07 +05:30
rohitwaghchaure
97fd21a01d [Fix] Accounts receivable summary report not loading data because credit note column was missing (#9191)
* [Fix] Accounts receivable summary report not loading data because credit note column was missing

* Create accounts_receivable_summary.py
2017-06-09 14:05:10 +05:30
Makarand Bauskar
665311b38a [hotfix] replaced __ call with _ in project_timesheets.html (#9198) 2017-06-09 14:03:20 +05:30
tunde
0a5db528b1 makes sure latest test fixtures for currency exchange is retrieved before running test 2017-06-09 08:14:10 +01:00
msiddiq0
a05c168808 Fix incorrect YouTube link on Video Tutorials
The original YouTube video is private and not viewable by anyone. I linked the publicly viewable YouTube video for "Report Builder" now.
2017-06-08 21:02:45 -04:00
msiddiq0
a095d6e04b Fixing youtube link
Wrong youtube video linked here: "Managing Advance Payments". Linked to correct video now: "Bulk Update"
2017-06-08 20:51:50 -04:00
msiddiq0
03183332b4 Fixed wrong YouTube video link
The original link here led to video on "Bulk Update" not "Budgeting". I went and found the Budgeting video and linked it here now.
2017-06-08 20:10:18 -04:00
tunde
9b827e5b95 makes set_exchange_rate retrieve the latest exchange rate not average for "pay" and "internal transfer" payment entries 2017-06-08 20:54:01 +01:00
tunde
6148fe0909 adds test case to confirm that latest exchange rate is automatically selected 2017-06-08 20:50:11 +01:00
tunde
88f1d316d8 adds new tests that verify that get_exchange_rate returns the latest exchange rate 2017-06-08 19:44:26 +01:00
tunde
3eb5cb14d1 calls erpnext.setup.utils.get_exchange_rate instead of get_average_exchange_rate 2017-06-08 14:23:49 +01:00
mbauskar
1042941348 [hotfix] fixes for mysql Lock wait timeout exceeded 2017-06-08 18:45:50 +05:30
pratu16x7
adb418d453 [fix] sys_defaults global in stock entry detail 2017-06-08 10:42:03 +05:30
Nabin Hait
89f7dd3c98 Merge branch 'hotfix' 2017-06-08 10:34:45 +05:30
Nabin Hait
2c808c578d Merge branch 'master' into develop 2017-06-08 10:34:45 +05:30
Nabin Hait
72f7a1a748 bumped to version 8.0.46 2017-06-08 11:04:44 +06:00
bcornwellmott
5491275b66 Merge branch 'develop' into bom_convert_uom 2017-06-07 08:42:54 -07:00
Javier Wong
b414f73931 [enhancement] Allow on Submit for Sales Order Customer PO and Customer PO Date (#9137) 2017-06-07 20:11:45 +05:30
ahmadRagheb
9017f3768b Fix labels to accept translation in selling doctype (#9135)
"label": _("Customer Addresses And Contacts"),
"label": _("Sales Partner Addresses And Contacts"),
now they can accept to be translated
2017-06-07 20:08:39 +05:30
Nabil Kadimi
41f6f4c200 Fix type (entrys) (#9131) 2017-06-07 20:08:11 +05:30
rohitwaghchaure
1607125815 [minor] POS customer creation was disabled in offline mode (#9169) 2017-06-07 20:06:58 +05:30
Umair Sayed
0dd5a20ca6 Help links added help_links.js (#9170)
* help links in help_links.js

* fixed in help_links.js
2017-06-07 20:05:35 +05:30
rohitwaghchaure
6b95210c19 [Fix] User not able to view projects from the portal (#9173) 2017-06-07 20:03:37 +05:30
Makarand Bauskar
59a1540898 [minor] removed the deprecated inList method from eval (#9177) 2017-06-07 20:02:09 +05:30
tundebabzy
98f8da1294 hides payments field when is_pos is checked (#9174) 2017-06-07 20:01:51 +05:30
tundebabzy
f3be8e0da6 removes check for condition - status == "Submitted" (#9176) 2017-06-07 19:59:33 +05:30
Nabin Hait
a128b21baa Fixed merge conflict 2017-06-07 12:17:17 +05:30
Nabin Hait
d428ec1a9e Merge branch 'hotfix' 2017-06-07 12:12:11 +05:30
Nabin Hait
d0e530c63d bumped to version 8.0.45 2017-06-07 12:42:11 +06:00
Nabil Kadimi
347a79db5a Fix typo (#9133) 2017-06-07 12:06:05 +05:30
Frappe PR Bot
7c9010018d [translation] translation updates (#9156) 2017-06-07 12:05:29 +05:30
tundebabzy
f981eee221 fixes issue #9013: Salary calculation Error. (#9044)
* fixes issue #9013:
Salary calculation Error.

* adds test case for scenario as in #9013
2017-06-07 12:05:00 +05:30
rohitwaghchaure
d2be55b2e0 [Fix] Orders not creating from the POS for new customer if customer name is based on naming series (#8933)
* [Fix] Orders not creating from the POS for new customer if customer name is based on naming series

* [fix] Disabled price field in POS, if Allow User to Edit Rate field is disabled in POS profile

* added customer name in the search bar of the customer

* search customer by phone number and email id in the POS
2017-06-07 12:04:01 +05:30
tundebabzy
99b734bfd7 Fix #4587: Status does not display "Pending" in report filter (#9104)
* adds Material Request to `status_map`

* updates eval condition for Partially Ordered in Material Request map

* changes material_request doctype to include "pending", "ordered", "partially ordered", "issued", "transferred" as options

* adds more options to `validate_status`

* adds `set_status` just before saving

* adds `check_for_closed_status` in `before_cancel`

* adds patch to convert status to material request specific status

* adds stricter status update conditions

* changes `update_status` to me `set_status`

* adds checker such that draft status can only change to pending

* renames `check_draft_status` to `status_can_change`

* adds Cancelled to Material Request map

* makes `status_can_change` block any attempt to change a cancelled document

* adds more test cases

* updates what `set_status` checks for before adding comment

* adds patch to rename the present material request status
2017-06-07 12:02:07 +05:30
Manas Solanki
ba7ed4626c fetch query for assessment group (#9120) 2017-06-07 11:57:11 +05:30
Nabin Hait
17378e8a29 Added a new column for Credit/Debit Note in AR/AP report (#9123) 2017-06-07 11:56:53 +05:30
Manas Solanki
b76b4f40a0 Added mode of transport in program enrollment (#9124) 2017-06-07 11:56:26 +05:30
Prateeksha Singh
3a18dea8a4 [fix][multiselect] don't show completed PRECs for a PINV (#9125) 2017-06-07 11:55:25 +05:30
Makarand Bauskar
db8363e9eb [minor] check serial no filedtype before updating (#9126)
* Update serial_no.py

Takes care of Different FieldTypes

* [minor] check serial no filedtype before updating
2017-06-07 11:54:26 +05:30
Manas Solanki
214e6906e5 Addition of field 'group based on' in the student attendance tool (#9152) 2017-06-07 11:53:41 +05:30
Manas Solanki
39adfb52f3 Naming in the assessment plan (#9153) 2017-06-07 11:52:36 +05:30
rohitwaghchaure
ce6e621c18 [fix] Not able to cancel the invoice if it's linked with the timesheet (#9157) 2017-06-07 11:52:04 +05:30
Manas Solanki
2a0d650735 fix in the report (#9167) 2017-06-07 11:29:27 +05:30
Faris Ansari
5f27c94100 Merge pull request #9078 from netchampfaris/remove-globals
Lint and fix JS files
2017-06-06 11:35:42 +05:30
Ben Cornwell-Mott
70fe968f02 Fixed some errors 2017-06-04 20:19:59 -07:00
Ben Cornwell-Mott
a3aa6a4449 Changed Explosion Item as well 2017-06-02 16:54:03 -07:00
Makarand Bauskar
c196d740e5 [minor] added filter for batch no field in purchase transaction (#9038)
* [minor] added filter for batch no field in purchase transaction

* [minor] filter the batch based on item_code instead of get_batch_no method

* [minor] filter based on item_code for Purchase Invoice with update stock
2017-06-02 17:28:40 +05:30
Nabin Hait
5b8b4dcce1 Merge branch 'master' into develop 2017-06-02 14:05:54 +05:30
Nabin Hait
5f98dddd0c Merge branch 'hotfix' 2017-06-02 14:05:53 +05:30
Nabin Hait
52e443cfc8 bumped to version 8.0.44 2017-06-02 14:35:53 +06:00
Nabin Hait
ae07f22d8b Fixed syntax error 2017-06-02 13:57:16 +05:30
Nabin Hait
02d282f347 Merge branch 'master' into develop 2017-06-01 19:09:37 +05:30
Nabin Hait
a171d5e6ed Merge branch 'hotfix' 2017-06-01 19:09:36 +05:30
Nabin Hait
1091a25491 bumped to version 8.0.43 2017-06-01 19:39:36 +06:00
Britlog
495a408db0 Fix contact form if email is both customer and lead (#9075) 2017-06-01 19:08:04 +05:30
Charles-Henri Decultot
5ade661a9a Weekly digest subject translation (#9003) 2017-06-01 19:06:32 +05:30
ahmadRagheb
c4d2bab5b3 Arabic language shows Errors onSubmit in maintenance_schedule (#9082)
* Arabic language shows Errors onSubmit  in maintenance_schedule

when trying to submit using arabic language error show up , 
i replace this way of formating arguments 
				description = frappe._("Reference: %s, Item Code: %s and Customer: %s") % \
					(self.name, d.item_code, self.customer)
to new one  :description = frappe._("Reference: %s, Item Code: %s and Customer: %s").format(self.name, d.item_code, self.customer)

and it solve the problem on my local

* Arabic language shows Errors onSubmit in maintenance_schedule

* Arabic language shows Errors onSubmit in maintenance_schedule
2017-06-01 19:06:00 +05:30
Frappe PR Bot
59ee45a1a5 [translation] translation updates (#9081) 2017-06-01 19:05:28 +05:30
Ashwini Save
2020dd37e8 Fixed issue : Payment Entry allocating amount more than invoice amount. (#9084)
* Fixed issue : Payment Entry allocating amount more than invoice amount.

* Added condition to solve issue when allocated amount is null

* Code review Changes for payment entry
2017-06-01 19:00:34 +05:30
Faris Ansari
9f6d024260 Set website route field as No Copy field (#9106)
* Set website route field as No Copy field

* minor
2017-06-01 18:58:07 +05:30
rohitwaghchaure
7f2513f7a1 [Fix] Employees working on a holiday report's date filter not working (#9108) 2017-06-01 18:57:34 +05:30
Makarand Bauskar
0b8f920e22 [minor] install node v7 (#9109) 2017-06-01 18:56:39 +05:30
Manas Solanki
f60bd60012 Fix the demo for the schools (#8879)
* Fix the demo for the schools

* Fix for the demo

https://github.com/frappe/erpnext/issues/6347
2017-06-01 18:30:35 +05:30
Nabin Hait
e4b3a67e74 Rate validation in return entry 2017-06-01 16:47:45 +05:30
Manas Solanki
f02c82aeca Fixes in the patch (#9027)
* fix in the patch

* new patch for student groups

* changes in the merge student batch patch
2017-06-01 13:08:27 +05:30
tundebabzy
cf92be88b7 [minor] fixes typo (#9093) 2017-05-31 13:21:12 +05:30
Nabin Hait
fa16b849a0 Merge branch 'master' into develop 2017-05-30 22:52:39 +05:30
Nabin Hait
38fae6a240 Merge branch 'hotfix' 2017-05-30 22:52:38 +05:30
Nabin Hait
f2c374f524 bumped to version 8.0.42 2017-05-30 23:22:38 +06:00
Saurabh
9a342c6401 Merge pull request #9090 from mbauskar/hotfix
[minor] fixed a unexpected token error for opportunity
2017-05-30 22:42:31 +05:30
mbauskar
26044f436a [minor] fixed a unexpected token error for opportunity 2017-05-30 22:28:08 +05:30
Nabin Hait
c9fa07b16d Merge branch 'master' into develop 2017-05-30 15:59:04 +05:30
Nabin Hait
f6c396f176 Merge branch 'hotfix' 2017-05-30 15:59:04 +05:30
Nabin Hait
93b5367485 bumped to version 8.0.41 2017-05-30 16:29:04 +06:00
Manas Solanki
5995010007 Correction in the validation message (#9079) 2017-05-30 15:56:48 +05:30
bcornwellmott
0d38a6b495 Fix grammar error in HR Training Results (#9076)
* Fix Typo in message

Issue #9074

* Added  condition for notifying user of grade.
2017-05-30 15:56:02 +05:30
Manas Solanki
a85b68ee77 link for timesheet, fix https://github.com/frappe/erpnext/issues/9042 (#9071) 2017-05-30 15:55:00 +05:30
Manas Solanki
ca31425bb4 field for the naming series should have no copy attribute (#9067) 2017-05-30 15:36:50 +05:30
Manas Solanki
253c53cf53 updating serial no status from scheduler #9061 (#9066) 2017-05-30 15:35:58 +05:30
Nabin Hait
ac3b2aa913 Set change amount automatically only if it is a cash transaction (#9065) 2017-05-30 15:35:01 +05:30
Nabin Hait
5d7e8d9e83 Minor fix in timesheet (#9063) 2017-05-30 15:34:35 +05:30
Nabin Hait
6a5cf672c1 Fixed opportunity status (#9062) 2017-05-30 15:34:20 +05:30
Manas Solanki
5f7b88d9c3 set student roll no in backend if not given (#9039) 2017-05-30 15:33:50 +05:30
Faris Ansari
ab74ca7fff Lint and fix JS files 2017-05-30 12:54:42 +05:30
Faris Ansari
dae7721384 Merge pull request #8975 from almeidapaulopt/milestones
Milestones in Project Gantt
2017-05-29 10:58:35 +05:30
Nabin Hait
465d8352aa Merge branch 'hotfix' 2017-05-26 21:35:42 +05:30
Nabin Hait
6a541a6f7a Merge branch 'master' into develop 2017-05-26 21:35:42 +05:30
Nabin Hait
38ada81487 bumped to version 8.0.40 2017-05-26 22:05:41 +06:00
Prateeksha Singh
e38c70c8bc [fix] uppercase filter frappe/erpnext#8996 (#9026) 2017-05-26 21:34:18 +05:30
Francisco Roldán
44c1a610a1 Financial Statements Button translateabled (#9032) 2017-05-26 21:32:51 +05:30
Makarand Bauskar
157c334737 [minor] added get_terms methods to erpnext.utils so that it can be used in non transactional documents (#9037) 2017-05-26 21:32:33 +05:30
Nabin Hait
4b12896941 Party Dashboard: Consider any random company if default company not set (#9046) 2017-05-26 21:25:36 +05:30
Sagar Vora
7b0c682635 [fix] add round off difference to last row in landed cost voucher (#8989)
* [fix] add round off difference to last row in landed cost voucher

* Add test case for odd numbers

* Add assertEquals to verify applicable charges

* Use make_purchase_receipt, move round off logic

* Allow rounding difference

* Specify cost center to pass test
2017-05-26 14:58:54 +05:30
Ashwini Save
d702cbfbfa Update code to fix issue #erpnext WN-SUP25349 : ValueError: max() arg is an empty sequence. (#9025) 2017-05-25 15:48:08 +05:30
Nabin Hait
45d337a016 Merge branch 'master' into develop 2017-05-25 14:19:51 +05:30
Nabin Hait
d45a036b5e Merge branch 'hotfix' 2017-05-25 14:19:50 +05:30
Nabin Hait
d7d9cd2938 bumped to version 8.0.39 2017-05-25 14:49:50 +06:00
Nabin Hait
7e7dc0f254 Update party.py 2017-05-25 14:18:20 +05:30
Ayush Shukla
e9cf1aba77 added float and rebase with hotfix (#9019) 2017-05-25 14:14:55 +05:30
Manas Solanki
c2bf50042f validate email id only if provided (#9020) 2017-05-25 14:14:42 +05:30
bcornwellmott
8fa1e03367 Merge branch 'develop' into bom_convert_uom 2017-05-24 12:35:12 -07:00
Ben Cornwell-Mott
0f0b121669 Added BOM UOM selection for items
Added patch for BOM Item UOM

Fixed scrap qty issue

Added Scrap Qty update to patch

Reverted test record for production order
2017-05-24 11:12:51 -07:00
Nabin Hait
c795386230 Fixed merge conflict 2017-05-24 18:39:16 +05:30
Nabin Hait
ca89b6f59c Merge branch 'hotfix' 2017-05-24 18:38:33 +05:30
Nabin Hait
12ec71781d bumped to version 8.0.38 2017-05-24 19:08:33 +06:00
Makarand Bauskar
2f17e70793 [minor] removed the {next} for last page (#9002) 2017-05-24 18:35:35 +05:30
Manas Solanki
659a225f24 allow multiple items in purchase receipt (#8997) 2017-05-24 17:49:52 +05:30
Ishan Loya
9bf4563b7a Change modified time 2017-05-24 17:47:42 +05:30
Ishan Loya
a70b41fbb8 Remove Role 'All' from BOM 2017-05-24 17:47:42 +05:30
CH
d0ebd7f7c2 POS translatable fields correction 2017-05-24 17:45:46 +05:30
Nabin Hait
adfe84b04f Revert "Website Specification Labls should not be capitalised by default (#8798)"
This reverts commit 331566d612.
2017-05-24 17:33:07 +05:30
Nabin Hait
7916590528 Revert "Update lead.py (#8789)"
This reverts commit 9283377f87.
2017-05-24 17:33:07 +05:30
Nabin Hait
fdce7a0dc3 Revert "link the different doctype in the school module (#8844)"
This reverts commit c320537e4c.
2017-05-24 17:33:07 +05:30
Nabin Hait
b3d4326dcc Revert "Prompt for mandatory batch number in POS (#8928)"
This reverts commit ce9ac7885e.
2017-05-24 17:33:07 +05:30
Nabin Hait
54fcf85317 Revert "Documentation for Allow Login using Mobile Number (#8918)"
This reverts commit 818ad397c8.
2017-05-24 17:33:07 +05:30
Nabin Hait
689da20e7b Revert "View Attachments in portal (#8830)"
This reverts commit 7e661437b1.
2017-05-24 17:33:07 +05:30
Nabin Hait
eb92d907bc Revert "Added flt to convert string to float"
This reverts commit bf4915b285.
2017-05-24 17:33:07 +05:30
Nabin Hait
0cd792ebb2 Revert "Update taxes_and_totals.py"
This reverts commit e4afab7fb0.
2017-05-24 17:33:07 +05:30
Rushabh Mehta
e4afab7fb0 Update taxes_and_totals.py 2017-05-24 17:29:23 +05:30
Ayush AS
bf4915b285 Added flt to convert string to float 2017-05-24 17:29:23 +05:30
Charles-Henri Decultot
7e661437b1 View Attachments in portal (#8830)
* View Attachments in portal

* HTML beautify correction

* Move option to shopping cart settings

* new field in shopping cart settings for public attachments display in portal
2017-05-24 17:29:23 +05:30
Gaurav Naik
818ad397c8 Documentation for Allow Login using Mobile Number (#8918) 2017-05-24 17:29:23 +05:30
Charles-Henri Decultot
ce9ac7885e Prompt for mandatory batch number in POS (#8928)
* Prompt for mandatory batch number in POS

* Whitespaces correction
2017-05-24 17:29:23 +05:30
Manas Solanki
c320537e4c link the different doctype in the school module (#8844) 2017-05-24 17:29:23 +05:30
Abdulla P I
9283377f87 Update lead.py (#8789)
* Update lead.py

Import datetime to compare next contact date with now()

* Update lead.py

* Update lead.py

As per the suggestion from Nabin,instead of Datetime,getdate and nowdate from frappe.utils imported
2017-05-24 17:29:23 +05:30
KanchanChauhan
331566d612 Website Specification Labls should not be capitalised by default (#8798) 2017-05-24 17:29:23 +05:30
nick9822
ca150cee8c Minor change: Alert to msgprint (#8966)
* Minor change: Alert to msgprint

* msgprint to frappe.msgprint
2017-05-24 17:22:26 +05:30
mbauskar
ff70f38eac [minor] patch to delete the schools deprecated doctypes 2017-05-24 17:13:16 +05:30
mbauskar
d1552f97e4 [minor] moved a comment in item.js 2017-05-24 17:13:16 +05:30
mbauskar
baa4afd67b [minor] removed the Grade Interval and Grading Structure doctype 2017-05-24 17:13:16 +05:30
Nabin Hait
2f0c34385b Check if doctype exists before renaming 2017-05-24 17:12:07 +05:30
Nabin Hait
258f7da778 Paid amount + Write Off Amount can not be greater than Grand Total in return POS 2017-05-24 17:12:07 +05:30
Nabin Hait
799a9cabe7 Can't change valuation method in stock settings, if there are transactions against some items which does not have it's own valuation method 2017-05-24 17:11:48 +05:30
Nabin Hait
24f0b13b22 Total unpaid amount in party is based on GLE 2017-05-24 16:46:56 +05:30
Nabin Hait
2d79a641c2 Annual billing amount in party dashboard based on grand total 2017-05-24 16:46:56 +05:30
Charles-Henri Decultot
032374e76e Correction of the digest template (#8992) 2017-05-24 16:29:42 +05:30
Nabin Hait
7a9bd41a72 Improved currency exchange rate message 2017-05-24 16:18:36 +05:30
Nabin Hait
cf1e0508af Merge branch 'hotfix' 2017-05-24 09:07:26 +05:30
Nabin Hait
8fac45a885 Merge branch 'master' into develop 2017-05-24 09:07:26 +05:30
Nabin Hait
88906cfc63 bumped to version 8.0.37 2017-05-24 09:37:26 +06:00
Nabin Hait
e72c98dafb On change of item rate, set margin amount on price list rate, instead of margin percentage (#8988) 2017-05-24 09:01:44 +05:30
Makarand Bauskar
3b9c2a4438 Added a reference of Sales Invoice in Serial No (#8855)
* [enhance] added Sales Invoice reference in Serial Number

* [patch] added test cases for Sales Invoice and added patch to copy sales invoice

* [minor] minor fixes in validate_serial_against_delivery_note

* [minor] fixes in sales invoice serial number validation
2017-05-23 18:45:34 +05:30
Nabin Hait
dce8dfc4fe Merge branch 'master' into develop 2017-05-23 17:48:43 +05:30
Nabin Hait
f8b412ba98 Merge branch 'hotfix' 2017-05-23 17:48:42 +05:30
Nabin Hait
c8a25b6dac bumped to version 8.0.36 2017-05-23 18:18:42 +06:00
Makarand Bauskar
724cc35421 [minor] added columns to pos print_template (#8978) 2017-05-23 17:43:42 +05:30
Nabin Hait
c9f5d84742 Merge branch 'master' into develop 2017-05-23 17:16:19 +05:30
Nabin Hait
67ae3a7f22 Merge branch 'hotfix' 2017-05-23 17:16:19 +05:30
Nabin Hait
8854f8bd50 bumped to version 8.0.35 2017-05-23 17:46:19 +06:00
Manas Solanki
fe05645051 fix issue when image not saved after attaching (#8957) 2017-05-23 17:13:26 +05:30
Faris Ansari
29d64cae34 POS print format fix (#8973) 2017-05-23 17:12:51 +05:30
Paulo Almeida
97ff6fea47 add milestone field 2017-05-23 11:55:37 +01:00
Nabin Hait
889e456dab Merge branch 'master' into develop 2017-05-23 12:04:06 +05:30
Nabin Hait
84e50fe371 Merge branch 'hotfix' 2017-05-23 12:04:06 +05:30
Nabin Hait
2ef20a968c bumped to version 8.0.34 2017-05-23 12:34:05 +06:00
Nabin Hait
fdc7d7f3de Check for active quotations before declaring it as lost (#8969) 2017-05-23 12:02:34 +05:30
Manas Solanki
a68fff470c minor fix in student group (#8959) 2017-05-23 11:39:53 +05:30
Manas Solanki
552f7ab678 fix in the patch for merging the student batch and student group (#8961) 2017-05-23 11:38:57 +05:30
Faris Ansari
2424aa73d7 Fix translated string in jinja (#8956) 2017-05-22 13:09:36 +05:30
Rushabh Mehta
2b06633919 Merge branch 'master' into develop 2017-05-19 19:24:43 +05:30
Rushabh Mehta
50835cbaa0 Merge branch 'hotfix' 2017-05-19 19:24:42 +05:30
Rushabh Mehta
f3a318921f bumped to version 8.0.33 2017-05-19 19:54:42 +06:00
rohitwaghchaure
529f5ce503 [fix] Not able to change the status as Lost in opportunity (#8938) 2017-05-19 18:56:54 +05:30
rohitwaghchaure
177a26849d [fix] Trial balance not working (#8937) 2017-05-19 18:56:25 +05:30
Rushabh Mehta
612b31b626 Merge branch 'master' into develop 2017-05-19 18:33:55 +05:30
Rushabh Mehta
d144a4c621 Merge branch 'hotfix' 2017-05-19 18:33:55 +05:30
Rushabh Mehta
d2484ece24 bumped to version 8.0.32 2017-05-19 19:03:54 +06:00
Rushabh Mehta
04ea4910f0 [rename] zh-tw -> zh-TW 2017-05-19 18:27:53 +05:30
Rushabh Mehta
03fb6ff003 [rename] zh-tw -> zh-TW 2017-05-19 18:26:49 +05:30
Charles-Henri Decultot
2de1cd3529 View Attachments in portal (#8830)
* View Attachments in portal

* HTML beautify correction

* Move option to shopping cart settings

* new field in shopping cart settings for public attachments display in portal
2017-05-19 16:04:10 +05:30
Gaurav Naik
7f02714c26 Documentation for Allow Login using Mobile Number (#8918) 2017-05-19 16:03:05 +05:30
Charles-Henri Decultot
8bec0239b9 Prompt for mandatory batch number in POS (#8928)
* Prompt for mandatory batch number in POS

* Whitespaces correction
2017-05-19 16:02:30 +05:30
Manas Solanki
56549fd3d9 link the different doctype in the school module (#8844) 2017-05-19 15:16:50 +05:30
Abdulla P I
6cbc9b03f9 Update lead.py (#8789)
* Update lead.py

Import datetime to compare next contact date with now()

* Update lead.py

* Update lead.py

As per the suggestion from Nabin,instead of Datetime,getdate and nowdate from frappe.utils imported
2017-05-19 15:15:36 +05:30
KanchanChauhan
32cbbe5cc2 Website Specification Labls should not be capitalised by default (#8798) 2017-05-19 15:14:31 +05:30
Rushabh Mehta
65a27395fe [minor] remove student batch name from activation.py 2017-05-19 14:53:32 +05:30
Nabin Hait
91dcd8d952 Merge branch 'hotfix' 2017-05-19 14:12:28 +05:30
Nabin Hait
4d2d996782 bumped to version 8.0.31 2017-05-19 14:42:28 +06:00
Nabin Hait
47afc55939 Merge branch 'master' of github.com:frappe/erpnext into hotfix 2017-05-19 14:10:53 +05:30
Nabin Hait
8c72fa2e4f Merge branch 'develop' 2017-05-19 14:09:00 +05:30
Nabin Hait
0096240a65 bumped to version 8.0.30 2017-05-19 14:38:59 +06:00
Makarand Bauskar
864f134610 [minor] removed the da-DK.csv translations (#8930) 2017-05-19 14:04:52 +05:30
rohitwaghchaure
81fcbbefe5 Merge pull request #8929 from rohitwaghchaure/pos_transalate_issue
[fix] _ is not defined while accessing the POS
2017-05-19 13:23:27 +05:30
Rohit Waghchaure
8a1c58c3c3 [fix] _ is not defined while accessing the POS 2017-05-19 13:01:32 +05:30
Ayush Shukla
ae696d005a Changed report_hide=0 for reference_name (#8902) 2017-05-19 12:38:08 +05:30
Prateeksha Singh
89cec18467 set variant name based on template name (frappe/erpnext#6367) (#8920) 2017-05-19 12:35:36 +05:30
Rushabh Mehta
4bcc2316a9 Don't update variant when template is updated (#8922)
* [fix] allow editing of variant properties, reverting earlier fix

* [minor] dont automatically update variants when the template is saved
2017-05-19 12:33:00 +05:30
Nabin Hait
012c9a0916 Set default account in mode-of-payment Cash, only if default cash account exists (#8909) 2017-05-19 12:30:58 +05:30
Frappe PR Bot
c080479f1f [translation] translation updates (#8927) 2017-05-19 12:30:04 +05:30
tundebabzy
a109141624 Issue 8842 (#8869)
* adds test that confirms #8842

* fixes #8842 and adds tests

* fixes new test case

* adds test for `encode_company_abbr`

* adds six as a requirement

* fixes six.moves.range import

* fixes duplicate company used in test

* fresh commit of test

* fixes failing test - company not saving

* fixes failing test

* Revert "adds six as a requirement"

This reverts commit 80454d98dc.

* replaces whitespace indentation with tabs
2017-05-19 11:42:45 +05:30
Prateeksha Singh
064530d11f [minor] remove order_type as setter in multiselect (#8906) 2017-05-19 11:09:12 +05:30
Rushabh Mehta
6799e27390 [fix] chart of accounts root sorting, #8784, #8897 (#8904) 2017-05-18 16:21:21 +05:30
Rushabh Mehta
c6d75eb942 [fix] allow editing of variant properties, reverting earlier fix (#8905) 2017-05-18 16:21:01 +05:30
Nabin Hait
83f8344e62 Merge branch 'master' of github.com:frappe/erpnext into hotfix 2017-05-18 14:06:37 +05:30
Nabin Hait
ee59ecd396 Merge branch 'hotfix' of github.com:frappe/erpnext into hotfix 2017-05-18 14:06:06 +05:30
gmplab
7607cc9dfa try to fix #997 ,when cart is disabled, it will not show error and it will dedirect to 'contact' page (#8636) 2017-05-18 12:41:19 +05:30
Frappe PR Bot
32e453b8eb [translation] translation updates (#8867) 2017-05-18 12:35:26 +05:30
Nabin Hait
b32cf35fe5 Merge branch 'develop' 2017-05-18 12:01:54 +05:30
Nabin Hait
9422f69fdf bumped to version 8.0.29 2017-05-18 12:31:53 +06:00
Nabin Hait
61ac683847 Fixed chart of accounts for Indonesia (#8900) 2017-05-18 11:58:38 +05:30
Nabin Hait
8fac2ad183 Don't set batch nos automatically on saving, if already set and validate qty with batch (#8887) 2017-05-18 11:54:24 +05:30
Omar Jaber
52e1ba7714 update throw message in maintenance_schedule.py (#8896)
updating Throw message
2017-05-18 11:53:26 +05:30
Nabin Hait
08ea710c8f Minor fix in creating chart of accounts based on existing (#8890) 2017-05-17 19:43:12 +05:30
Nabin Hait
4b544347a9 Hide 'Edit Posting Time' from printing (#8888) 2017-05-17 19:42:38 +05:30
Francisco Roldán
85bfc05efa Fix missing translations (#8871)
* Fix missing translations

* Fix
2017-05-17 19:42:04 +05:30
Nabin Hait
e4f80a6eaa Open lost opportunity again if quotation made against it (#8854) 2017-05-17 19:41:39 +05:30
Rushabh Mehta
f69ffeb0b4 [fix] if rate is greater than price_list_rate, set margin instead of discount. Fixes frappe/erpnext#6468 (#8856) 2017-05-17 19:40:40 +05:30
Faris Ansari
f7a9023fda Show empty state when no students are found in student attendance tool (#8862)
- fixes #8839
2017-05-17 19:37:31 +05:30
Julian Robbins
3d6567411d Spelling improvmement (#8866) 2017-05-17 19:36:15 +05:30
Felipe Orellana
0952df29dc Update product.py (#8877)
Hi!

If template_item_code is None on line 71-72 the query will return ALL "Item Price" records irrespective of item_code, potentially causing the wrong price list rate to be used.

Noticed this behavior when fetching product price for a group of items without "variant_of" data.
2017-05-17 19:20:01 +05:30
Ayush Shukla
76d965f340 [minor]-Changed receivable to payable (#8880) 2017-05-17 19:18:47 +05:30
Ayush Shukla
c55b805b66 [minor] process_payroll_create salary fixed, fixes frappe/erpnext#8853 (#8881)
* [minor] process_payroll_create salary fixed

* [minor] indentation fix
2017-05-17 19:18:26 +05:30
tundebabzy
cf7df5d106 fixes #8883 (#8885) 2017-05-17 19:17:04 +05:30
Sagar Vora
3b04b030eb Fix cost center not getting pulled in DN and SINV (#8878)
* Fixes for getting selling cost center instead of company's default cost center.

* fix error in update_item
2017-05-17 19:16:27 +05:30
Nabin Hait
67ddcf9d32 Merge branch 'develop' 2017-05-17 13:54:04 +05:30
Nabin Hait
def2e4678c bumped to version 8.0.28 2017-05-17 14:24:04 +06:00
Nabin Hait
1e2d7b3519 Filters for multiselect dialog for DN/PR in Sales/Purchase Invoice (#8882) 2017-05-17 13:52:21 +05:30
Nabin Hait
3bd15fb19e Merge branch 'develop' 2017-05-16 13:39:42 +05:30
Nabin Hait
a282c13d84 bumped to version 8.0.27 2017-05-16 14:09:41 +06:00
rohitwaghchaure
a689432a6e [fix] Can't update naming series if format has year,month (#8836) 2017-05-16 12:47:34 +05:30
rohitwaghchaure
3da400b532 [fix] Due Date cannot be before Posting Date during amendement of an invoice (#8841) 2017-05-16 12:43:18 +05:30
Nabin Hait
8a27cf3785 Fix status of invoices with negative outstanding, if no return entry (#8829)
* Move allowance field in Item to the first section to apply it for both stock and non-stock items

* Fix status of invoices with negative outstanding, if no return entry

* get_value included in safe_eval
2017-05-16 12:43:00 +05:30
rohitwaghchaure
73456ac81a [fix] Payments on the invoice is showing even if IS POS option is disabled (#8802) 2017-05-16 11:29:57 +05:30
Saurabh
aa1be1ce92 [documentaion] stripe documentation (#8780) 2017-05-16 09:30:07 +05:30
rohitwaghchaure
654f186f95 [fix] Apply pricing rule on the item based on quantity as per stock uom (#8792) 2017-05-16 08:54:29 +05:30
rohitwaghchaure
09483d3c0f [fix] Numeric keypad not displaying after creation of new customer (#8797) 2017-05-16 08:51:24 +05:30
Makarand Bauskar
5886aafbae [minor] removed cur_frm and added frappe.ui.form.on (#8803) 2017-05-16 08:35:39 +05:30
Charles-Henri Decultot
156eef1907 Description correction (#8811) 2017-05-16 08:34:33 +05:30
Faris Ansari
74e2e4672c Fix for duplicated project dependencies (#8817)
- skip when task is not found
2017-05-16 08:32:45 +05:30
Saurabh
f4ee682400 [fix] pass company filter as string in get_value (#8823) 2017-05-16 08:30:27 +05:30
Makarand Bauskar
475d140b5c [minor] made items table mandatory for quotation (#8825) 2017-05-16 08:26:21 +05:30
Ishan Loya
bdb2f95957 Show duplicate button in BOM unless in draft stage (#8826) 2017-05-16 08:25:07 +05:30
Makarand Bauskar
3e2c9d00f1 [minor] Corrected field label & placed Expense Claim button in Next Step (#8828) 2017-05-16 08:22:45 +05:30
rohitwaghchaure
d678809939 [fix] Party balance field showing wrong currency symbol (#8832) 2017-05-16 08:06:45 +05:30
Manas Solanki
59472e5449 Changes in the student group creation tool (#8833) 2017-05-16 08:05:14 +05:30
Manas Solanki
c5f79d2ec4 Fix for the student batch-wise attendance report (#8834) 2017-05-16 08:00:24 +05:30
Makarand Bauskar
b0df661e81 [minor] set set_posting_time to 1 while data import (#8835) 2017-05-16 07:59:58 +05:30
Rushabh Mehta
939db36ad4 [fix] copy item variant values on save and make non no_copy fields as not editable. fixes frappe/erpnext#4253 (#8837) 2017-05-16 07:42:44 +05:30
Faris Ansari
4fcd8a6db3 Fix sales funnel legend position (Fixes #5073) (#8838) 2017-05-16 07:40:26 +05:30
Faris Ansari
769b6bada8 [POS] Add Pay menu item in mobile view (#8801) (#8845) 2017-05-16 07:31:10 +05:30
Faris Ansari
125996e21c Increase item cart height in mobile view (Fixes #8827) (#8846) 2017-05-16 07:29:15 +05:30
Nabin Hait
7bf810300e Fixed #8822, active students patch 2017-05-15 11:42:37 +05:30
Prateeksha Singh
edeb4dc7e0 Multiselect dialog for getting items (#8583)
* Concatenate docnames and send to mapper

* Multiselect with checkboxes

* set setters as separate filters

* Map filter fields to target_doc

* Get items from quotation (in SO) working

* [major] Set dialog setters for all forms

* Add date field

* Specify non-default date_fields

* [minor] add test_mapper.py

* [minor] remove cur_frm

* [minor][fix] test

* [minor] fix test with make_test_records
2017-05-15 11:32:06 +05:30
Julian Robbins
62e3e75555 Addition of Imap to description of usable mail accounts (#8806) 2017-05-13 09:55:23 +05:30
Saurabh
154385db1b Merge branch 'develop' 2017-05-13 07:42:03 +05:30
Saurabh
82e303882e bumped to version 8.0.26 2017-05-13 08:12:03 +06:00
Saurabh
b679533f81 Merge pull request #8815 from saurabh6790/activation_status_fix
[fix] rename Student Batch to Student Batch Name in activation check
2017-05-13 07:08:02 +05:30
Saurabh
45540569ff [fix] rename Student Batch to Student Batch Name in activation check 2017-05-13 06:30:41 +05:30
Makarand Bauskar
d4e15ca359 [minor] create student batch if does not exists (#8781)
* [minor] create student batch if does not exists

* [fix] minor fixes in if condition
2017-05-12 11:23:58 +05:30
Makarand Bauskar
e8270fe21c [fix] minor fix in get_context for item variants (#8791) 2017-05-12 11:23:23 +05:30
Saurabh
62c7deee00 [fix] don't allow string values in limits to avoid sql injection (#8779) 2017-05-11 18:03:12 +05:30
Nabin Hait
fcefc601e0 Merge branch 'develop' 2017-05-11 17:06:56 +05:30
Nabin Hait
b579fd7ada bumped to version 8.0.25 2017-05-11 17:36:56 +06:00
Nabin Hait
4f5ad50ecf Item Rate in Sales Return must be less than or equal to reference doc (#8775)
* Item Rate in Sales Return must be less than or equal to reference doc

* Fix as rate field is not there in Packed Item
2017-05-11 16:44:19 +05:30
Nabin Hait
5ad6126832 On saving of Accounts Settings, only save enabled warehouses (#8772) 2017-05-11 13:34:04 +05:30
Nabin Hait
62d27ab7d3 Reload doctype bewfore renaming margin fields (#8771) 2017-05-11 13:26:55 +05:30
KanchanChauhan
f74010d379 Calculations based on working and payment days should be made if salary structure exists (#8770) 2017-05-11 11:42:35 +05:30
Makarand Bauskar
0e4c5c9efb [minor] renamed a Total Margin field to Rate With Margin (#8720)
* [minor] renamed a Total Margin field to Rate With Margin

* [minor] minor fixes in field lable
2017-05-11 11:40:02 +05:30
Faris Ansari
734d7795f8 Show party name in General Ledger print report (#8760) 2017-05-11 11:38:30 +05:30
Makarand Bauskar
464f108586 [minor] added currency in Totals for Trial Balance report (#8757)
* [minor] added currency in Totals for Trial Balance report

* [minor] used erpnext.get_default_currency to fetch the company currency
2017-05-10 19:40:36 +05:30
KanchanChauhan
323e46ba5a Added parent filter to the Salary Structure Employee since it was getting base and variable value from first found Salary Structure Employee (#8756) 2017-05-10 17:46:32 +05:30
Makarand Bauskar
62414565b1 [minor] added the address_html field in company doctype (#8754) 2017-05-10 14:52:03 +05:30
Manas Solanki
426b8a14fd Merge the student group and student batch (#8663)
* deleted student batch creation tool

* Patch for deleting the doctype and config

* Changes in the student attendance

* Patch for renaming the student batch as student group

* Changes in the student attendance

* Change in the student attendance reports

- Absent student report
- Student Batch-wise attendance
- Student monthly attendance sheet

* Changes in the patch

* Changes in the course schedule

* Changes in the course scheduling tool

* Change in the assessment plan

* Changes in the assessment result tool

* Cleanup

* Changes in the api.py

* create student group from student batch

* delete student batch

* add patch

* remove student batch from config/schools.py

* Delete the depricated doctype with patch

* Changes in patch

* Changes as per PR
2017-05-09 15:32:52 +05:30
Nabin Hait
0d0d3bacd7 Merge branch 'develop' 2017-05-09 15:13:32 +05:30
Nabin Hait
70e1778712 bumped to version 8.0.24 2017-05-09 15:43:32 +06:00
Nabin Hait
4e6ff8ccd8 Ignore permission for Bin in warehouse query (#8742) 2017-05-09 15:09:10 +05:30
Rushabh Mehta
95233a62d7 [minor] item route item_name + random string 2017-05-09 07:48:41 +05:30
Nabin Hait
226ea7db88 Filter issue on timesheet calendar view (#8730) 2017-05-08 17:34:07 +05:30
Saurabh
9df45bbc42 [fix] Reference Document is required to create Payment Request (#8729)
* [fix] Referene Document is required to create Payment Request

* Update payment_request.py
2017-05-08 17:24:23 +05:30
Rushabh Mehta
a6bc583daf [minor] item route is item name + code 2017-05-08 11:35:40 +05:30
Nabin Hait
3f7fff04f4 Merge branch 'develop' 2017-05-06 13:40:52 +05:30
Nabin Hait
b5a9822fff bumped to version 8.0.23 2017-05-06 14:10:52 +06:00
Nabin Hait
17179ee83a minor syntax fix 2017-05-06 13:23:12 +05:30
Ishan Loya
120ee275cc Fix typo (#8719) 2017-05-06 12:48:22 +05:30
Makarand Bauskar
486045e1d1 [minor] check if date of joining is available before creating Salary Slip (#8700) 2017-05-06 12:47:42 +05:30
Nabin Hait
3257aeeb55 Price list rate fix multiple uom and validation with prev doc (#8718) 2017-05-06 12:47:14 +05:30
Nabin Hait
7228e1af6e Customer/Supplier Name in sales/purchase analytics (#8717) 2017-05-06 12:45:37 +05:30
Nabin Hait
6e7407962f Get exchange rate only if date and currency is present (#8712)
* Get exchange rate only if date and currency is present

* Update transaction.js
2017-05-06 12:45:16 +05:30
Rushabh Mehta
b7e740ff45 [minor] ignore permissions for bin on warehouse_query (#8713) 2017-05-06 12:44:03 +05:30
Dominik Ottenbreit
51cd2df763 Fix Romanian Translation (#8706) 2017-05-05 17:30:45 +05:30
Pawan Mehta
cac94b9bd5 [fix] #8373 (#8707) 2017-05-05 17:29:57 +05:30
Manas Solanki
65c8466622 check for mandatory field before frappe.call (#8705) 2017-05-05 17:28:09 +05:30
Nabin Hait
42343bbc2c Selling price validation against last purchase rate / valuation rate (#8702) 2017-05-05 17:23:17 +05:30
KanchanChauhan
ed56b8afd8 Website route for item based on name not item name (#8682) 2017-05-05 11:56:55 +05:30
Makarand Bauskar
6b3bc8a8e1 [hotfix] fixed the recursion error while saving the User (#8696) 2017-05-05 11:53:00 +05:30
Makarand Bauskar
c4ec937835 [hotfix] fixed object has no attribute 'delivered_by_supplier' (#8699) 2017-05-05 11:52:17 +05:30
Nabin Hait
d2a966eef3 Update general_ledger.py 2017-05-05 10:41:16 +05:30
rohitwaghchaure
6324987c15 [fix] Company's abbreviation change will not update the warehouse (#8685) 2017-05-04 16:12:29 +05:30
Nabin Hait
c9bfb64cd9 Merge branch 'develop' 2017-05-04 12:20:31 +05:30
Nabin Hait
8470b39d4c bumped to version 8.0.22 2017-05-04 12:50:31 +06:00
Nabin Hait
932423ecba Balance Sheet always shows accumulated values from previous fiscal year (#8668) 2017-05-04 12:12:29 +05:30
Faris Ansari
1c09a991f3 Change beta_version to 8.x-beta (#8673)
* Change beta_version to 8.x-beta

* change to 8.x.x-beta
2017-05-04 12:12:14 +05:30
Nabin Hait
fcc0246b38 Get mobile nos for customer contact (#8674) 2017-05-04 12:11:48 +05:30
Nabin Hait
3ce41d6b1f Fixed related to auto fetching batch nos and date valiation in salary structure (#8666)
* Fixed related to auto fetching batch nos and date valiation in salary structure

* Update get_item_details.py
2017-05-03 18:22:24 +05:30
Javier Wong
470535ae9b Removed set_default_roles
set_default_roles was removed in 7fff0908a4

It is not required anymore. It currently breaks the patch.
2017-05-03 16:44:14 +05:30
rohitwaghchaure
a1923574c6 Merge pull request #8657 from rohitwaghchaure/pos_email_id_issue
[fix] Contact not creating if only email id has entered in the POS
2017-05-03 12:56:13 +05:30
Nabin Hait
ef027e9030 Correct args to the fmt_money function 2017-05-03 11:51:47 +05:30
Aditya Duggal
bd8c7d683b Website related fields now consider show_variant_in_website field as well
-Resolves issue #8635
2017-05-03 10:14:09 +05:30
Rohit Waghchaure
fd37516165 [fix] Contact not creating if only email id has entered in the POS 2017-05-02 18:27:09 +05:30
Nabin Hait
504eba7fb2 Test case fixed for Employee Loan Application 2017-05-02 18:19:48 +05:30
Nabin Hait
e15721df48 Caluculate total interest and payable amount in Loan Application if fixed amount per period 2017-05-02 18:19:48 +05:30
mbauskar
c482aeda1a [fixes] added missing get_linked_material_requests method to buying utils 2017-05-02 14:05:54 +05:30
rohitwaghchaure
8811cc6b5b Merge pull request #8651 from rohitwaghchaure/pos_default_customer_issue
[fix] Default pos profile's customer not working for the POS
2017-05-02 13:18:40 +05:30
Rohit Waghchaure
61165127fc [fix] Default pos profile's customer not working for the POS 2017-05-02 13:04:08 +05:30
Nabin Hait
d71a1c5e67 Merge branch 'develop' 2017-05-02 09:58:48 +05:30
Nabin Hait
fb73621db2 bumped to version 8.0.21 2017-05-02 10:28:48 +06:00
Rohit Waghchaure
3df7eef6cc [fix] Unable to create an asset due to rounding issue 2017-05-02 09:49:02 +05:30
akshay
b674d27285 Test Cleanup 2017-05-02 09:48:51 +05:30
akshay
949fbc559e Serial No Rename 2017-05-02 09:48:51 +05:30
Nabin Hait
1117125841 Update domainify.py 2017-05-01 11:40:13 +05:30
mbauskar
e94c6e7b8e [minor] disabled the instructor role if the company domain is not Education 2017-05-01 11:40:13 +05:30
Rushabh Mehta
c75becc42c [minor] README.md and CONTRIBUTING.md 2017-04-28 16:09:57 +05:30
Rushabh Mehta
ed5543adda [minor] README.md and CONTRIBUTING.md 2017-04-28 16:07:36 +05:30
Nabin Hait
a1c23a584d Merge branch 'develop' 2017-04-28 15:34:59 +05:30
Nabin Hait
589927b37d bumped to version 8.0.20 2017-04-28 16:04:58 +06:00
Nabin Hait
2afb9b96cd pricing rule fix 2017-04-28 15:20:49 +05:30
Nabin Hait
8c9fb76854 Remove pricing rules if 'Ignore Pricing Rule' manually triggered 2017-04-28 15:20:49 +05:30
Manas Solanki
0da9bc6309 Fix for program enrollment 2017-04-28 14:37:25 +05:30
Manas Solanki
5a8a5b7d06 Fixes in Student Group 2017-04-28 14:37:25 +05:30
Manas Solanki
71373a176d Configurable validation setting for the student group 2017-04-28 14:37:25 +05:30
mbauskar
1b6270ef40 [hotfix] error while sending the auto email report of Ordered Items To Be Delivered 2017-04-28 14:35:18 +05:30
Rohit Waghchaure
ac28ffb41e [fix] frappe.db.exists('Series', series) is not working because tabSeries table did not have column modified 2017-04-28 14:34:11 +05:30
Rohit Waghchaure
0e6ac8b9b4 Enabled option User Cannot Search for the gl entry doctype 2017-04-28 10:03:18 +05:30
Rohit Waghchaure
07ef5f42c4 [enhance] Show notification for draft state records if doctype is submittable 2017-04-28 09:59:29 +05:30
Nabin Hait
7b04f092a6 Fixed test cases 2017-04-28 09:58:41 +05:30
Nabin Hait
c98f37f91c Patch for reverting manufacturers table from item 2017-04-28 09:58:41 +05:30
Nabin Hait
b6a8920489 Fixed conflict 2017-04-28 09:58:41 +05:30
Nabin Hait
f26dcbc1a6 Merge branch 'develop' 2017-04-26 14:45:37 +05:30
Nabin Hait
ecd46588ec bumped to version 8.0.19 2017-04-26 15:15:37 +06:00
Nabin Hait
96c247c834 Pick batch autmatically only if batch found 2017-04-26 14:37:33 +05:30
Nabin Hait
db8f41ba55 Added Payment documents as Quick Links in SO/PO 2017-04-26 14:34:41 +05:30
Nabin Hait
f7d81c7a7f Merge branch 'develop' 2017-04-25 20:44:54 +05:30
Nabin Hait
5b73a4864a bumped to version 8.0.18 2017-04-25 21:14:54 +06:00
Nabin Hait
85622f9ccb Update update_status_as_paid_for_completed_expense_claim.py 2017-04-25 20:43:29 +05:30
pawan
c27d9f712b Add Report Links 2017-04-25 20:12:55 +05:30
Umair Sayyed
175646572a updated help pages 2017-04-25 16:27:50 +05:30
Nabin Hait
7cfacb315b Merge branch 'RicardoJohann-accumulated_header_std' into develop 2017-04-25 16:26:53 +05:30
Nabin Hait
d5d8db7a3f Cleanup on financial statement PR 2017-04-25 16:26:33 +05:30
Nabin Hait
39bcb3de4b Merge branch 'accumulated_header_std' of https://github.com/RicardoJohann/erpnext into RicardoJohann-accumulated_header_std 2017-04-25 16:13:54 +05:30
Ishan Loya
09fe8e0522 Add bank guarantee to Accounts module display screen 2017-04-25 16:08:22 +05:30
Ishan Loya
17737e4ab1 Change permissions, change account fieldname and add notes section 2017-04-25 16:08:22 +05:30
Ishan Loya
2fca72ae8e Change owner 2017-04-25 16:08:22 +05:30
Ishan Loya
0dbe8547e7 Add screenshot to documentation, change naming series to BG-#####, make Bank Guarantee number unique 2017-04-25 16:08:22 +05:30
Ishan Loya
e1ed5ba726 Remove commented out code 2017-04-25 16:08:22 +05:30
Ishan Loya
0fc57a7df2 Change doctype owner 2017-04-25 16:08:22 +05:30
Ishan Loya
c7a72684fd Add bank guarantee doctype with documentation 2017-04-25 16:08:22 +05:30
Nabin Hait
e0c34bfd77 Merge branch 'PawanMeh-fixes_8466' into develop 2017-04-25 16:05:28 +05:30
Nabin Hait
020dedd00e Cleaned up and commonified the campaign efficiency and lead owner efficiency report 2017-04-25 16:05:01 +05:30
Nabin Hait
28dad095fa Merge branch 'fixes_8466' of https://github.com/PawanMeh/erpnext into PawanMeh-fixes_8466 2017-04-25 15:00:45 +05:30
Nabin Hait
e7125c0ea2 Merge branch 'develop' 2017-04-25 14:30:50 +05:30
Nabin Hait
8590d5b05d bumped to version 8.0.17 2017-04-25 15:00:50 +06:00
sburanaw
66951e528f Fix an import typo in get_item_details.py 2017-04-25 14:09:51 +05:30
Nabin Hait
9b20e07431 [fix] currency field precision 2017-04-25 14:09:29 +05:30
Manas Solanki
d7afa69c6f fix 2017-04-25 14:08:43 +05:30
Manas Solanki
c61dc9c7ea Change in the assessment tool 2017-04-25 14:08:43 +05:30
mbauskar
9cf6d630e9 [minor] fixes for expense claim status 2017-04-25 13:15:50 +05:30
Faris Ansari
5687e2da9d [ui-fix] POS item list 2017-04-24 19:22:05 +05:30
Nabin Hait
e3c122d8c4 AR report: filter based on customer group and credit days based on field. Fixed #8214 2017-04-24 19:06:07 +05:30
Nabin Hait
4cc5e61f60 Update course_schedule.py 2017-04-24 19:00:49 +05:30
Manas Solanki
6293263095 test case fixed 2017-04-24 19:00:49 +05:30
Manas Solanki
810e483757 Changes in the student group 2017-04-24 19:00:49 +05:30
Nabin Hait
398f144833 Merge branch 'develop' 2017-04-24 18:59:01 +05:30
Nabin Hait
e2741e85fd bumped to version 8.0.16 2017-04-24 19:29:01 +06:00
Rohit Waghchaure
dd70fbfdae [fix] Letter head not showing in the report 2017-04-24 18:57:51 +05:30
Manas Solanki
6eaf281b2b Export and import program enrollments 2017-04-24 18:44:12 +05:30
pawan
134487ab2a Changes after review 2017-04-24 13:48:40 +05:30
pawan
7bd7df3742 Changes after review 2017-04-24 13:19:22 +05:30
Ishan Loya
56c1b2a625 Make proposed corrections 2017-04-24 10:44:36 +05:30
Ishan Loya
b12e15dcc4 Change modified by 2017-04-24 10:44:36 +05:30
Ishan Loya
e5fdd47fd8 Hide 'Qty Transferred for Manufacturing' field if skip material transfer 2017-04-24 10:44:36 +05:30
Ishan Loya
04c69fb46d Minor fix 2017-04-24 10:44:36 +05:30
Ishan Loya
f04ef8dfe0 Update documentation for Production Order skipping material transfer entry option 2017-04-24 10:44:36 +05:30
Ishan Loya
7544904857 Add option to skip material transfer for production orders 2017-04-24 10:44:36 +05:30
Rushabh Mehta
c44910370b [fix] is_sample_item 2017-04-24 10:28:38 +05:30
Rushabh Mehta
551406ab11 [enhance] automatic batch selection in Delivery Note and Stock Entry 2017-04-24 10:28:38 +05:30
Rushabh Mehta
e385b5b97b [enhance] automatic batch creation, move and split 2017-04-24 10:28:38 +05:30
mbauskar
bb2670d57a [fixes] minor fixes in bank reconciliation form and report 2017-04-24 10:23:50 +05:30
mbauskar
0b293133be [minor] fixes for unsupported operand type(s) for +=: 'int' and 'NoneType' 2017-04-21 21:40:30 +05:30
ibi
83c1c3a171 fleet_management: replace references to fleet_management by hr in vehicle_log doctype 2017-04-21 17:57:07 +05:30
mbauskar
c3d642e5d1 [minor] allow bulk edit for doctype 2017-04-21 17:50:40 +05:30
Manas Solanki
8230ce095f [Fix] fixed routing to the assessment result 2017-04-21 17:49:52 +05:30
Nabin Hait
e713a7d840 Merge branch 'develop' 2017-04-21 11:49:09 +05:30
Nabin Hait
557847a5ba bumped to version 8.0.15 2017-04-21 12:19:09 +06:00
mbauskar
9bac58cdc6 [fixes] fixes in setup wizard for education domain 2017-04-21 11:38:28 +05:30
Nabin Hait
5650bf9ba5 Merge branch 'develop' 2017-04-20 08:51:44 +05:30
Nabin Hait
9afb53203f bumped to version 8.0.14 2017-04-20 09:21:44 +06:00
Nabin Hait
825e053e66 Fixed project_copied_from patch 2017-04-20 08:50:37 +05:30
Nabin Hait
3e519770de Merge pull request #8505 from nabinhait/develop
Fixed allow_zero_valuation_rate patch
2017-04-20 08:46:30 +05:30
Nabin Hait
e42fb32f6f Fixed allow_zero_valuation_rate patch 2017-04-20 08:45:18 +05:30
Nabin Hait
00bec1c272 Merge pull request #8504 from nabinhait/allow_on_submit_fix
Fixes allowed on submit
2017-04-19 21:11:13 +05:30
Nabin Hait
68ae9f3f88 Merge branch 'develop' into allow_on_submit_fix 2017-04-19 21:10:23 +05:30
mbauskar
8f3cc81302 [minor] minor fixes in pricing_rule and set_missing_value 2017-04-19 21:05:37 +05:30
mbauskar
9e9d242a24 [minor] fixes in test cases and added the test case for multiple uom in selling 2017-04-19 21:05:37 +05:30
mbauskar
287fe81329 [minor] calculate price list rate based on items uom 2017-04-19 21:05:37 +05:30
Nabin Hait
24053478a1 Merge pull request #8486 from nabinhait/develop
Asset Depreciation Enhancements
2017-04-19 21:01:34 +05:30
Nabin Hait
f382373cf4 Merge branch 'develop' into develop 2017-04-19 21:01:19 +05:30
CH
61f4a8e757 Make the address type translatable in the Address_HTML field 2017-04-19 20:58:53 +05:30
Nabin Hait
eef55185fc Update purchase_receipt_item.json 2017-04-19 20:58:09 +05:30
Nabin Hait
8691e0777b Update purchase_invoice_item.json 2017-04-19 20:58:09 +05:30
Nabin Hait
2de3bf7a0f Fixed indexes on sales and purchase transactions 2017-04-19 20:58:09 +05:30
Julian Robbins
2e6f12b850 Update purchase-details.md 2017-04-19 20:55:04 +05:30
mbauskar
ba41242f1f [fixes] fixed the pricing rule issue https://github.com/frappe/erpnext/issues/8493 2017-04-19 20:54:23 +05:30
Kanchan Chauhan
0633df5872 Item variant searchable in website products 2017-04-19 20:51:43 +05:30
Rohit Waghchaure
f4f774d1df [fix] offline_pos_name is not defined during print from the POS 2017-04-19 20:50:35 +05:30
Faris Ansari
695327a513 Duplicate dependencies when project is duplicated
- fix frappe/erpnext#8274
2017-04-19 20:48:49 +05:30
Rohit Waghchaure
019501e4a0 [fix] Balance Sheet, linking account to general ledger is not working 2017-04-19 20:46:30 +05:30
Nabin Hait
2704162f5a Fixes allowd on submit 2017-04-19 16:25:39 +05:30
Nabin Hait
117be7ddd5 Added a settings in Accounts Settings to disable booking depreciation entry automatically 2017-04-18 14:03:06 +05:30
Nabin Hait
f59920500c Merge branch 'develop' of github.com:nabinhait/erpnext into develop 2017-04-18 13:13:38 +05:30
Nabin Hait
8a01980757 Unlink Journal Entry reference from Asset 2017-04-18 13:11:10 +05:30
mbauskar
5123a8519b [minor] check if joining date is available before validating attandance date 2017-04-18 11:08:57 +05:30
Rohit Waghchaure
d7de3c606b [fix] Pricing rule for pos 2017-04-17 17:32:36 +05:30
Rohit Waghchaure
dc981dc546 [fix] Auto serial no fecthed on the invoice even if stock update is disabled issue 2017-04-17 17:31:32 +05:30
Nabin Hait
ed019123e2 Merge branch 'develop' 2017-04-17 15:36:59 +05:30
Nabin Hait
4d1cf53466 bumped to version 8.0.13 2017-04-17 16:06:58 +06:00
Nabin Hait
e2431fd5e9 minor fix 2017-04-17 15:35:36 +05:30
Nabin Hait
d12a4f5e8c Merge branch 'develop' 2017-04-17 15:12:18 +05:30
Nabin Hait
ad65be8250 bumped to version 8.0.12 2017-04-17 15:42:17 +06:00
Manas Solanki
ae30026005 Calender view fix for course schedule 2017-04-17 14:55:54 +05:30
Manas Solanki
54c4240d9c Changes in the program enrollment 2017-04-17 14:55:54 +05:30
Manas Solanki
79683d0871 Added school setting 2017-04-17 14:55:54 +05:30
Manas Solanki
a6d1876958 Changes in course and program 2017-04-17 14:55:54 +05:30
Manas Solanki
346928f2bc changes in program enrollment and tool 2017-04-17 14:55:54 +05:30
Nabin Hait
310d238d17 Merge pull request #8460 from rohitwaghchaure/client_followup_report
Client followup report
2017-04-17 14:13:38 +05:30
Nabin Hait
5e25731188 Update crm_reports.md 2017-04-17 14:13:20 +05:30
Nabin Hait
83ca262e38 Merge pull request #8453 from StrellaGroup/develop
[fix] Stock Entry - Change "Is Sample Item" to "Allow Zero Valuation Rate"
2017-04-17 14:00:12 +05:30
mbauskar
8a2e6f427b [minor] if address is not found then set the address_field to '' instead of None 2017-04-17 13:58:52 +05:30
Faris Ansari
8371c1c4cd Text overflow fix for product text in portal 2017-04-17 13:57:19 +05:30
Julian Robbins
361e7f6ddc Remove typos and use better English 2017-04-17 13:56:53 +05:30
rohitwaghchaure
798fd3484f Merge pull request #8469 from mbauskar/pos-fixes
[minor] POS & RFQ format_number fixes
2017-04-17 13:04:24 +05:30
mbauskar
22cedeb006 [minor] POS & RFQ format_number fixes 2017-04-17 12:24:24 +05:30
pawan
83c8ed0827 ”[fix] 2017-04-17 01:02:56 +05:30
Rushabh Mehta
e3c117e32c [fix] validate preferred email if set in employee.py 2017-04-15 16:59:39 +05:30
Nabin Hait
68a8b0c2a9 Merge branch 'develop' 2017-04-14 17:32:37 +05:30
Nabin Hait
307543f968 bumped to version 8.0.11 2017-04-14 18:02:37 +06:00
Rohit Waghchaure
6681b0d2aa Documentation 2017-04-14 17:14:03 +05:30
Javier Wong
54d9c9eaf4 Merge branch 'develop' into develop 2017-04-14 18:33:44 +08:00
Javier Wong
9b11d9b45d [fix] Stock Entry - Change "Is Sample Item" to "Allow Zero Valuation Rate" 2017-04-14 18:24:04 +08:00
mbauskar
cca55ddc33 [minor][hot] fixes for KeyError: from_date for stock balance report 2017-04-14 14:54:11 +05:30
Rohit Waghchaure
1c68509426 [enhance] Report for prospects engaged but not converted 2017-04-14 12:28:59 +05:30
mbauskar
1e05077b1f [minor] sales register report fixes 2017-04-14 09:59:49 +05:30
joezsweet
b81244342f Create en-GB.csv
- added for compatibility with frappe languages
2017-04-13 19:09:06 +05:30
CH
8e92250798 Correction of issue #8354 2017-04-13 18:59:51 +05:30
CH
d20ec25c92 Removal of double brackets to setup the chart of accounts in the setup wizard 2017-04-13 18:59:06 +05:30
Nabin Hait
25bcb14c1d Merge pull request #8440 from mbauskar/cart-fixes
[minor] fides for add to card button issue
2017-04-13 18:49:22 +05:30
Nabin Hait
f6149f1507 Merge pull request #8429 from ckosiegbu/payroll_updates
Statistical Components for Salary Structure
2017-04-13 18:48:47 +05:30
Nabin Hait
2f3585f949 Update salary_slip.js 2017-04-13 18:47:25 +05:30
mbauskar
ed8ad9cfee [minor] fides for add to card button issue 2017-04-13 18:45:09 +05:30
Nabin Hait
3a2727c9eb Merge pull request #8430 from mbauskar/stock-entry-supplier-address
[minor] fetch supplier address, address_display on supplier trigger
2017-04-13 18:45:09 +05:30
Nabin Hait
16d92e7270 Update update_supplier_address_in_stock_entry.py 2017-04-13 18:44:33 +05:30
Nabin Hait
8c7eb444ef Merge pull request #8439 from mbauskar/subsciption-fixes
[minor] validate email address before get update button click
2017-04-13 18:41:49 +05:30
mbauskar
9a0efc7710 [minor] validate email address before get update button click 2017-04-13 18:18:18 +05:30
mbauskar
3ddfce4f17 [patch] move supplier_address to address_display and set supplier_address in SE 2017-04-13 16:46:41 +05:30
ckosiegbu
a236f4e586 Space to Tabs on salary_slip.py 2017-04-13 10:28:10 +01:00
Nabin Hait
0b62c6ebd4 Merge pull request #8432 from mbauskar/bom-tree-fixes
[minor] fixes in bom tree view template
2017-04-13 14:36:45 +05:30
mbauskar
40ca4c3bbb [minor] fixes in bom tree view template 2017-04-13 14:29:19 +05:30
Nabin Hait
c454dc7af5 Merge pull request #8420 from netchampfaris/pos
[POS] Show stock quantity of items
2017-04-13 13:26:58 +05:30
Rushabh Mehta
994cef5ee3 [minor] fix imports in old patches 2017-04-13 13:14:05 +05:30
Faris Ansari
185762aeeb update label 2017-04-13 12:36:08 +05:30
mbauskar
1b32d913a2 [minor] fetch supplier address, address_display on supplier trigger 2017-04-13 11:55:20 +05:30
ckosiegbu
64f29f819a Introduce the ability to specify in a Salary Structure that a component is statistical. This allows components to be used in calculations without being added/deducted from earnings deductions. 2017-04-13 00:00:37 +01:00
Nabin Hait
2efe05c1ce Merge pull request #8263 from frappe/revert-8126-issue8094
Revert "Add link field Package Code (fixes #8094)"
2017-04-12 19:50:43 +05:30
Nabin Hait
17c675547d Merge branch 'develop' 2017-04-12 19:00:52 +05:30
Nabin Hait
a220e96867 bumped to version 8.0.10 2017-04-12 19:30:52 +06:00
mbauskar
e471b02172 [minor] if packed item warehouse not found then set the parent item warehouse to packed items 2017-04-12 18:51:01 +05:30
Faris Ansari
19f90e984e [POS] Show stock quantity of items
- frappe/erpnext#8247
2017-04-12 16:06:31 +05:30
Faris Ansari
b5608f9b14 [fix] Default Print Format for Sales Invoice (#8419)
- frappe/erpnext#8416
2017-04-12 15:31:01 +05:30
rohitwaghchaure
5adce495aa Merge pull request #8417 from rohitwaghchaure/due_date_issue
[fix] POS, Due Date cannot be before Posting Date
2017-04-12 14:43:21 +05:30
Rushabh Mehta
66272a168d [minor] README.md + encode query parameter in search 2017-04-12 14:32:07 +05:30
Rohit Waghchaure
2192c244c0 [fix] POS, Due Date cannot be before Posting Date 2017-04-12 13:19:05 +05:30
Makarand Bauskar
141c244ece [minor] added order by args to get_*_list methods (#8413) 2017-04-12 13:02:28 +05:30
Nabin Hait
a57b020620 Merge branch 'develop' 2017-04-11 19:14:12 +05:30
Nabin Hait
d1fda1ff2b bumped to version 8.0.9 2017-04-11 19:44:12 +06:00
mbauskar
b9d0e7622a [translation] translation updates for - erpnext on 2017-04-04 2017-04-11 18:57:48 +05:30
mbauskar
2f9703c20e [minor] set company_currency as account_currency in general ledger if party type is employee 2017-04-11 18:56:41 +05:30
Khairil Zhafri
46b6d4ea47 Update student.json
Less binary gender option for Student
2017-04-11 18:55:31 +05:30
Khairil Zhafri
417145bec5 Update employee.json
Less binary gender options for Employee
2017-04-11 18:55:20 +05:30
Rohit Waghchaure
1ff1368280 [fix] Vehicle expense report not working 2017-04-11 18:54:32 +05:30
joezsweet
768a888bf2 [fix] validate supplier invoice
- modified to check for the selected supplier only
2017-04-11 18:52:46 +05:30
Julian Robbins
8037a0e3d5 Update assignment.md
A typo and improvement tom English
2017-04-11 18:51:34 +05:30
mbauskar
0b665ac791 [minor] don't throw error for buying transactions if price list is not selected 2017-04-11 18:51:12 +05:30
Rohit Waghchaure
87ad6d074a [enhance] Stock qty added in purchase invoice 2017-04-11 18:29:52 +05:30
Kanchan Chauhan
95108ac80b [Minor] Party validation for Employee 2017-04-11 18:29:27 +05:30
Dominik Ottenbreit
9b9777be3f Fix mistranslation "Lieferantennauftrag" -> "Bestellung"
There is the strange term of "Lieferantenauftrag" that has been used for
"Purchase Order" which translates to "Supplier Order". This is not
standard at all and should be fixed to "Bestellung".

A Google search for "Bestellung" returns 97 million results, a search
for "Lieferantenauftrag" returns 972 results so it should be clear what
is standard.
2017-04-11 18:28:35 +05:30
Nabin Hait
075b299673 bom traversing: argument mutable issue 2017-04-11 18:27:34 +05:30
mbauskar
e0271a8331 [minor] ReferenceError:doc fixes for delivery note 2017-04-11 17:54:22 +05:30
Nabin Hait
3fc3305251 bom traversing: argument mutable issue 2017-04-11 16:00:48 +05:30
mbauskar
236f7aac7f [minor] track changes for transaction documents 2017-04-10 14:48:54 +05:30
Manas Solanki
29ee263093 Fix in student attendacne tool 2017-04-10 14:33:35 +05:30
Makarand Bauskar
4782e8b751 [minor] added safe_eval for status_updater and added getdate and nowdate (#8365) 2017-04-07 17:16:16 +05:30
Rushabh Mehta
b58979fd3e [added] frappe.safe_eval 2017-04-06 18:58:39 +05:30
Rushabh Mehta
9365641777 [added] frappe.safe_eval 2017-04-06 18:24:34 +05:30
Nabin Hait
5e9d72d57b Merge branch 'develop' 2017-04-06 16:32:04 +05:30
Nabin Hait
0d230afd22 bumped to version 8.0.8 2017-04-06 17:02:03 +06:00
Makis Etzoglou
a906b3f11c add delivery date to print format Fix #8111 2017-04-06 15:47:52 +05:30
Kanchan Chauhan
aa6f00c403 Added default 'All' option to filters to differentiate all and empty filter 2017-04-06 15:22:18 +05:30
Nabin Hait
d681c88d79 validate returned qty only if there is reference qty 2017-04-06 15:20:45 +05:30
Javier Wong
fc11fce990 [enhancement] Changed Issue Description and Resolution to Text Editor (#8346) 2017-04-06 14:56:44 +05:30
Rohit Waghchaure
faf51d91b6 [fix] stock qty issue in purchase trends report 2017-04-05 14:53:26 +05:30
Rushabh Mehta
08a42e00ae [fix] salary slip eval, remove access to globals, #8313 2017-04-05 14:52:22 +05:30
Nabin Hait
549a2827e5 Merge pull request #8300 from rohitwaghchaure/customer_edit_issue_v8
[fix] Customer edit issue in offline POS
2017-04-05 14:51:44 +05:30
Rushabh Mehta
9264313f0e [fix] ordering for Edit Posting Time check 2017-04-05 12:49:01 +05:30
Nabin Hait
8013d1813a Merge pull request #8320 from manassolanki/newsl
Route to newsletter listview
2017-04-05 12:33:14 +05:30
Rushabh Mehta
ffc807cd57 [minor] check below posting date in delivery note 2017-04-05 12:27:41 +05:30
Manas Solanki
ba6559c2e9 Route to newsletter listview 2017-04-05 11:52:23 +05:30
Nabin Hait
7eea52d4e9 Merge branch 'develop' 2017-04-04 11:46:47 +05:30
Nabin Hait
93a990f006 bumped to version 8.0.7 2017-04-04 12:16:47 +06:00
Rohit Waghchaure
2861955632 [fix] Customer edit issue in offline POS 2017-04-04 09:59:29 +05:30
Nabin Hait
099163b16d Merge pull request #8296 from netchampfaris/customer-list-fix
Add `image` field to fetch in Customer List
2017-04-04 09:39:22 +05:30
Faris Ansari
0d114b4c31 Add image field to fetch in Customer List 2017-04-03 21:21:50 +05:30
Nabin Hait
fcf34dc570 Merge pull request #8295 from saurabh6790/demo_fix
[fix] demo script for setup data
2017-04-03 17:56:47 +05:30
Nabin Hait
6f038bc1f3 Validate total advance against grand total considering write off amount 2017-04-03 17:56:05 +05:30
Nabin Hait
9300013acc Validate total advance against grand total considering write off amount 2017-04-03 17:35:58 +05:30
Nabin Hait
8d8cba7faa Validate total advance against grand total considering write off amount 2017-04-03 17:26:32 +05:30
Nabin Hait
2d132e32aa Function name changed in company 2017-04-03 17:26:32 +05:30
Saurabh
2e47654f43 [fix] demo script for setup data 2017-04-03 17:25:55 +05:30
Nabin Hait
9bfa0ab7eb Merge branch 'develop' 2017-04-03 13:18:14 +05:30
Nabin Hait
17ddd8f389 bumped to version 8.0.6 2017-04-03 13:48:13 +06:00
Nabin Hait
c469f2c954 Get POS profile fix 2017-04-03 13:01:11 +05:30
Nabin Hait
731efe3a95 Minor fix in gross profit report 2017-04-03 12:11:36 +05:30
Nabin Hait
2c892c7e7f Indentation fixed in gross profit report 2017-04-03 12:05:35 +05:30
Nabin Hait
e6b5843a1f Merge branch 'develop' 2017-04-01 19:02:55 +05:30
Nabin Hait
31334328ed bumped to version 8.0.5 2017-04-01 19:32:55 +06:00
Rushabh Mehta
0d6db6c42c [fix] add user default role 2017-03-31 23:02:19 +05:30
Nabin Hait
ed0422a8d9 Merge branch 'develop' 2017-03-31 18:19:57 +05:30
Nabin Hait
d991c8666c bumped to version 8.0.4 2017-03-31 18:49:57 +06:00
Nabin Hait
85d1c07519 Merge pull request #8269 from rohitwaghchaure/v8_documentation
[Documentation] Added for custom roles for page and report, fixed some broken images
2017-03-31 18:04:44 +05:30
Nabin Hait
04ab7dfd2f Update role-permisison-for-page-and-report.md 2017-03-31 18:04:15 +05:30
Faris Ansari
eae30e5642 [fix] Show project title in kanban view (#8268)
- frappe/erpnext#8232
2017-03-31 17:46:12 +05:30
Nabin Hait
065302298f Merge pull request #8261 from rohitwaghchaure/pull_project_from_bom_to_po
[enhance] Get project from bom on production order
2017-03-31 17:40:43 +05:30
Nabin Hait
9f84a99158 Merge pull request #8258 from rohitwaghchaure/gross_profit_issue_v_8
[fix] get_valuation_rate takes 4 arguments 3 given in gross profit report
2017-03-31 17:39:58 +05:30
Nabin Hait
b15d999147 Merge branch 'develop' into gross_profit_issue_v_8 2017-03-31 17:39:45 +05:30
Rushabh Mehta
4b0381c820 [fix] tests 2017-03-31 17:36:48 +05:30
Rushabh Mehta
f0b4562a95 [refactor] move purchase_common.js -> public/js/controllers/buying.js 2017-03-31 17:36:48 +05:30
Rushabh Mehta
cc8b2b2fdb [fix] [refactor] demo for v8 and remove purchase common 2017-03-31 17:36:48 +05:30
Rohit Waghchaure
67a3e65f08 [Documentation] Added for custom roles for page and report, fixed some broken images 2017-03-31 17:22:58 +05:30
Rushabh Mehta
dc89916aa9 [fix] salary component fix for abbr 2017-03-31 17:20:57 +05:30
Rushabh Mehta
9d9cb8b7b1 Revert "Add link field Package Code (fixes #8094)" 2017-03-31 14:35:23 +05:30
Rohit Waghchaure
e7c0188732 [enhance] Get project from bom on production order 2017-03-31 13:40:06 +05:30
Rohit Waghchaure
34b1dba9aa [fix] get_valuation_rate takes 4 arguments 3 given in gross profit report 2017-03-31 12:44:10 +05:30
Nabin Hait
c040015bb5 Used db_update in patch to bypass validate and on_update method 2017-03-31 11:58:19 +05:30
Rushabh Mehta
b66edd19ca [minor] refactor transaction.js 2017-03-31 10:50:58 +05:30
Ricardo Johann
033e2fa8b6 changed accumulated header 2017-03-31 02:18:54 -03:00
Nabin Hait
b596deb57d Merge branch 'hotfix' 2017-03-30 23:50:27 +05:30
Nabin Hait
79fddcfac1 bumped to version 8.0.3 2017-03-31 00:20:27 +06:00
Revant Nandgaonkar
3d5bdeb90d [Fix] patch v7_2.contact_address_links 2017-03-30 23:14:58 +05:30
Revant Nandgaonkar
d07c041125 [Fix] Addresses linked back to Lead 2017-03-30 23:14:58 +05:30
Nabin Hait
e64b75153a Merge branch 'hotfix' 2017-03-30 19:52:42 +05:30
Nabin Hait
b207a0542a bumped to version 8.0.2 2017-03-30 20:22:42 +06:00
Nabin Hait
620bde7144 Updated modified date to reload sales uom 2017-03-30 19:50:45 +05:30
Nabin Hait
a8b2cdf65a Merge branch 'hotfix' 2017-03-30 19:35:51 +05:30
Nabin Hait
896fd1aca7 bumped to version 8.0.1 2017-03-30 20:05:51 +06:00
Nabin Hait
e503f68ec7 Merge pull request #8229 from rohitwaghchaure/pos_highlight_issue
[fix] POS cart item's highlighted issue
2017-03-30 19:26:33 +05:30
Rohit Waghchaure
a86bb69adf [fix] POS cart item's highlighted issue 2017-03-30 19:16:38 +05:30
Nabin Hait
80b3cf22eb Merge branch 'develop' 2017-03-30 18:28:22 +05:30
Nabin Hait
3b5b081ac4 bumped to version 8.0.0 2017-03-30 18:58:20 +06:00
Nabin Hait
d00218ece3 Merge pull request #8227 from manassolanki/contact_report
Addition of few more fields in student contact report
2017-03-30 17:43:33 +05:30
Nabin Hait
93c15383b8 [translations] 2017-03-30 16:57:19 +05:30
Nabin Hait
3c2be33adf Merge pull request #8226 from mbauskar/item-varient-fix
[minor] make varient fixes in item.js
2017-03-30 16:05:34 +05:30
Manas Solanki
4be52d8a20 Addition of few more fields in student contact report 2017-03-30 16:04:26 +05:30
Nabin Hait
6bd791742f Change log for version 8 2017-03-30 16:00:43 +05:30
mbauskar
90d82be966 [minor] make varient fixes in item.js 2017-03-30 15:36:46 +05:30
Nabin Hait
eb6fa5b70c Update attendance.py 2017-03-30 14:11:47 +05:30
Nabin Hait
1f6bd0ad37 Fixed merge conflict 2017-03-30 13:15:22 +05:30
Nabin Hait
c4894a5287 Merge branch 'hotfix' 2017-03-30 13:14:34 +05:30
Nabin Hait
a9bef56a94 bumped to version 7.2.32 2017-03-30 13:44:34 +06:00
Nabin Hait
f90a3295c4 Merge pull request #8213 from KanchanChauhan/update-disbursment-date
Disbursement Date fetched from JV - Employee Loan
2017-03-30 13:06:40 +05:30
Nabin Hait
a24f8dbb8f Merge branch 'develop' into update-disbursment-date 2017-03-30 13:06:28 +05:30
Kanchan Chauhan
37d8f643cc Read permissions to Employee on Employee Loan and Loan Type 2017-03-30 13:05:49 +05:30
Kanchan Chauhan
400c6f5aef Disbursement Date fetched from JV - Employee Loan 2017-03-30 13:04:05 +05:30
mbauskar
07e6bdd4f2 [minor] check employee date of joining before marking the employee attendance 2017-03-30 12:52:29 +05:30
Kanchan Chauhan
b87c174898 Employee Loan Dashboard 2017-03-30 12:51:46 +05:30
CH
99752e58ec VAT rates update for France 2017-03-30 12:45:08 +05:30
Kanchan Chauhan
5ac740b3cb [Fix] From Date and To Date not to be auto calculated for Timesheet Salary 2017-03-30 12:44:28 +05:30
Manas Solanki
3528d08178 [Fix] Fix in program enrollment tool and report 2017-03-30 12:21:49 +05:30
Nabin Hait
f912317fae Stock Balance: Show records based on all child item groups if filters set based on group node 2017-03-29 18:08:10 +05:30
Nabin Hait
e2fef16d78 Made join_table query optional based on item group filter 2017-03-29 17:51:05 +05:30
Javier Wong
41bf1ba7b3 [enhancement] Stock Balance Report - Added Item Group Filter 2017-03-29 17:51:05 +05:30
Ricardo Johann
3d1434afe7 Export total labels 2017-03-29 17:44:17 +05:30
addymuliady
0dd00eb418 Update accounts-settings.md 2017-03-29 17:40:01 +05:30
Nabin Hait
64e9c4abf4 Changed label of hide_tax_id field 2017-03-29 17:39:08 +05:30
Makis Etzoglou
82e6bc45e4 tax_id add to Sales Order, Delivery Note, and Sales Invoice 2017-03-29 17:39:08 +05:30
Saurabh
a5ddeb44e7 [fix] remove integraton service reference from documentation 2017-03-29 17:32:04 +05:30
Kanchan Chauhan
35b12e2ea6 Company in Leave Control Panel 2017-03-29 17:30:56 +05:30
mbauskar
de98ff6bb9 [minor] hide the stock details section if update_stock is unchecked 2017-03-29 17:29:58 +05:30
rohitwaghchaure
afa93c624b [fix] Reserved qty is not calculating properly in BIN for multi sales UOM (#8203) 2017-03-29 17:29:20 +05:30
Manas Solanki
8519b4bfe4 Changes in Program Enrollment and Report for Student Contact Details (#8176)
* Added the student house name in the program enrollment

* added report for the student contact details

* Enabled tag in Student master and fix in student enrollment tool

* [Fix] School House and Report
2017-03-29 16:07:31 +05:30
Nabin Hait
79731360ed Merge pull request #8126 from kickapoo/issue8094
Add link field Package Code (fixes #8094)
2017-03-28 20:48:39 +05:30
Nabin Hait
fede6d8fbe Updated modified date for production order 2017-03-28 20:42:42 +05:30
Stavros Anastasiadis
b9bbb3c3db Add link field Package Code (fixes #8093) 2017-03-28 16:09:52 +03:00
Nabin Hait
11812db5e8 Merge pull request #8183 from neilLasrado/minor-fix
Fixed issue with misleading error message on Stock Entry creation of Serialized Items
2017-03-28 18:08:42 +05:30
Neil Trini Lasrado
193c8919b9 Fixed issue with misleading error message on Stock Entry creation of Serialized Items 2017-03-28 17:43:23 +05:30
Nabin Hait
d1f6cc88f2 Required items table in Production order 2017-03-28 17:08:40 +05:30
Nabin Hait
dac525433c Merge pull request #8178 from nabinhait/develop
Patch order changed for multiple uoms in sales cycle
2017-03-28 16:55:57 +05:30
rohitwaghchaure
e313c09fd7 Merge pull request #8182 from frappe/netchampfaris-patch-1
Update POS screenshot
2017-03-28 16:35:16 +05:30
Faris Ansari
49a3d6d8f6 Update POS screenshot 2017-03-28 16:17:30 +05:30
Nabin Hait
580682d6a2 Merge pull request #8136 from dottenbr/customs_tariff_number
Add Customs Tariff Number
2017-03-28 13:51:52 +05:30
Nabin Hait
6c3eb36c35 Merge branch 'develop' into customs_tariff_number 2017-03-28 13:51:44 +05:30
Nabin Hait
da749f716b Merge pull request #8172 from rohitwaghchaure/credit_note_serial_no_issue
[fix] During making credit note from sales invoice, system fetching new serial no instead of old serial no from the sales invoice
2017-03-28 13:49:32 +05:30
Nabin Hait
2cf5ca28f6 Merge pull request #8173 from nabinhait/hotfix
In gross profit report, if incoming rate not found from last sle, consider average valuation rate
2017-03-28 13:49:09 +05:30
Nabin Hait
95db9f9e09 Merge pull request #8175 from rohitwaghchaure/production_planning_issue
[fix] sales order with status closed fetching on production planning tool
2017-03-28 13:48:42 +05:30
Nabin Hait
621dcc3c84 Patch order changed for multiple uoms in sales cycle 2017-03-28 13:45:56 +05:30
Nabin Hait
010d9cd796 Merge branch 'dottenbr-manufacturer_childtable' into develop 2017-03-28 13:39:43 +05:30
Nabin Hait
77b2fef41e Fixed test cases 2017-03-28 13:39:26 +05:30
Nabin Hait
d20f8585ae Merge branch 'manufacturer_childtable' of https://github.com/dottenbr/erpnext into dottenbr-manufacturer_childtable 2017-03-28 13:31:28 +05:30
Rohit Waghchaure
d7908f8e3a [fix] sales order with status closed fetching on production planning tool 2017-03-28 12:30:23 +05:30
Nabin Hait
77c970549b In gross profit report, if incoming rate not found from last sle, consider average valuation rate 2017-03-28 12:20:31 +05:30
Rohit Waghchaure
5ecbaa408b [fix] During making credit note from sales invoice, system fetching new serial no instead of old serial no from the sales invoice 2017-03-28 12:09:07 +05:30
Nabin Hait
46e108b34e Merge pull request #8166 from nabinhait/pro_order_multi_level_bom_operations
Fetch operations from all sub-assembly BOMs in Pro Order if multi-level BOM is checked
2017-03-27 21:36:28 +05:30
Rushabh Mehta
fe5c95e360 Update CONTRIBUTING.md 2017-03-27 20:41:51 +05:30
Nabin Hait
0329c0ffab Test case fixed for production order 2017-03-27 19:11:45 +05:30
Nabin Hait
5b60ef2dce Fetch operations from all sub-assembly BOMs in Pro Order if multi-level BOM is checked 2017-03-27 16:29:51 +05:30
Nabin Hait
8bf58367b8 Fixed merge conflict 2017-03-27 12:30:01 +05:30
Nabin Hait
3e43f275a0 Merge branch 'hotfix' 2017-03-27 12:27:38 +05:30
Nabin Hait
70c3f79d12 bumped to version 7.2.31 2017-03-27 12:57:38 +06:00
Nabin Hait
9c8159be8f Merge pull request #8129 from rohitwaghchaure/pos_v8_enhance_and_issue
[fix] customer edit, numeric keypad visibility, on selection of item highlight the background issue in the pos
2017-03-27 12:25:18 +05:30
Nabin Hait
68fb20b811 Merge pull request #8131 from rohitwaghchaure/purchase_analytics_issue
[fix] Purchase analytics report not loading
2017-03-27 12:24:46 +05:30
Nabin Hait
a4f838b6b4 Merge pull request #8135 from dottenbr/de_translation_fix
Fix German Translation
2017-03-27 12:24:20 +05:30
Dominik Ottenbreit
fc9ed4da24 Add Customs Tariff Number 2017-03-24 15:53:03 +01:00
Dominik Ottenbreit
ea617da277 fix translations that have to do with term 'close' which was not well translated 2017-03-24 15:24:55 +01:00
Dominik Ottenbreit
6eb202ef3a fix patch after test, fix variant based on manufacturer, add json for item_manufacturer 2017-03-24 14:49:52 +01:00
Dominik Ottenbreit
3938c61996 migrate from manufacturer to manufacturer childtable 2017-03-24 14:24:34 +01:00
Rohit Waghchaure
f74b02140c [fix] Purchase analytics report not loading 2017-03-24 17:37:02 +05:30
Rohit Waghchaure
b719dc53fc [fix] customer edit and numeric keypad visibility issue in the pos 2017-03-24 17:03:50 +05:30
Nabin Hait
00b04ed61e Merge pull request #8076 from KanchanChauhan/qty-in-shopping-cart
Show qty in Shopping Cart
2017-03-24 13:14:03 +05:30
Nabin Hait
bf2a7efca4 Account name changed in standard chart of accounts 2017-03-24 13:01:35 +05:30
Nabin Hait
214ea8f2c8 Merge pull request #8119 from robulik/develop
[minor] fixes of translatable strings in web pages
2017-03-24 12:59:02 +05:30
Kanchan Chauhan
a844040781 Show qty in Shopping Cart 2017-03-23 18:22:02 +05:30
Robert Kirschner
b8f5148a44 [minor] fix: translatable title, h1, button on product_search page. Address row in web view has translatable address type 2017-03-23 13:43:26 +01:00
Nabin Hait
9ba1be60b7 Merge pull request #8039 from netchampfaris/pos-ui-fix
[pos] ui fix for small screens frappe/erpnext#8029
2017-03-23 17:14:39 +05:30
Nabin Hait
2aafdd622b Merge pull request #8047 from KanchanChauhan/warehouse-for-dropship
[Fix] Warehouse not required for Dropship
2017-03-23 17:06:18 +05:30
Nabin Hait
b6b97f25d0 Merge pull request #8048 from KanchanChauhan/bom-based-on-project
Project filter in BOM selection in Production Order
2017-03-23 17:04:53 +05:30
Nabin Hait
4a8a62a202 Merge pull request #8053 from umairsy/video-pages
updated erpnext-learn pages
2017-03-23 17:02:34 +05:30
Nabin Hait
d25e314ccb Merge pull request #8054 from rohitwaghchaure/purchase_return_issue_invoice
[fix] Quantity is not copying in the Received Qty during making of debit note from the purchase invoice
2017-03-23 17:01:58 +05:30
Nabin Hait
f44f04e33a Merge pull request #8063 from khrlzhfr/patch-1
Update standard_chart_of_accounts.py
2017-03-23 17:01:34 +05:30
Nabin Hait
b40efe34e3 Merge pull request #8067 from KanchanChauhan/issue-webview-fixed
[Fix] Issue web view fixed
2017-03-23 17:00:47 +05:30
Nabin Hait
691a34c924 Merge branch 'develop' into issue-webview-fixed 2017-03-23 17:00:30 +05:30
Robert Kirschner
db068ac6c4 Merge branch 'develop' of https://github.com/frappe/erpnext into develop 2017-03-23 12:29:43 +01:00
Nabin Hait
c7dc838306 Merge pull request #8068 from rohitwaghchaure/asset_depreciation_issue
[fix] Precision issue during making of depreciation schedule
2017-03-23 16:59:12 +05:30
Nabin Hait
5168286ea0 Merge pull request #8072 from lb-/patch-1
Update the-champion.md - grammar
2017-03-23 16:58:19 +05:30
Nabin Hait
8373b8e50d Merge pull request #8075 from netchampfaris/asset-image-fix
[fix] asset image in image view
2017-03-23 16:58:05 +05:30
Nabin Hait
33f2b659e4 Merge pull request #8079 from robulik/develop
[fix] selecting new address in cart webpage unchecks previously checked
2017-03-23 16:52:39 +05:30
Nabin Hait
8de911b5b4 Merge pull request #8086 from KanchanChauhan/read-perm-to-guest
[Minor] Guest should have read permissions on Job Openings
2017-03-23 16:50:45 +05:30
Robert Kirschner
d162eb367c [minor] fix translation strings in cart web view 2017-03-23 12:18:24 +01:00
Robert Kirschner
0af93a782d Merge branch 'develop' of https://github.com/frappe/erpnext into develop 2017-03-23 12:10:46 +01:00
Nabin Hait
46bccb55c5 Merge pull request #8080 from rmehta/item-variants-by-mfg
[feature] ability to have variants based on manufacturer
2017-03-23 16:29:41 +05:30
Nabin Hait
422ef584fa Merge pull request #8090 from KanchanChauhan/date-span-in-salary-slip
[Minor] From date, To date based on Payroll Frequency
2017-03-23 16:16:51 +05:30
Nabin Hait
b132428184 Merge pull request #8091 from mbauskar/cart-address-fixes
[minor] fixed shipping and billing address issue in cart
2017-03-23 16:16:11 +05:30
Nabin Hait
a90ff97782 Merge pull request #8096 from frappe/netchampfaris-documentation
Update Workflows
2017-03-23 16:15:40 +05:30
Nabin Hait
1775a3db38 Merge pull request #8115 from rohitwaghchaure/setup_wizard_unpickle_issue
[fix] UnpickleError, removed _ method from the argument of the function
2017-03-23 16:14:52 +05:30
Rohit Waghchaure
57f35a25a1 [fix] UnpickleError, removed _ method from the argument of the function 2017-03-23 14:55:52 +05:30
Faris Ansari
3011006ff2 Merge pull request #8097 from frappe/netchampfaris-documentation-1
Add new screenshots for Workflows documentation
2017-03-22 17:50:17 +05:30
Faris Ansari
1e7f739c84 Add new screenshots for Workflows documentation 2017-03-22 17:48:51 +05:30
Faris Ansari
7fbc1c2161 Update Workflows
Add new images
2017-03-22 17:45:52 +05:30
mbauskar
67e3e32dd6 [minor] fixed shipping and billing address issue in cart 2017-03-22 16:14:43 +05:30
Kanchan Chauhan
076e9d6af8 [Minor] From date, To date based on Payroll Frequency 2017-03-22 16:07:03 +05:30
Robert Kirschner
c6b52a321e update on cart.js pull request feedback 2017-03-22 08:10:30 +01:00
Kanchan Chauhan
730ad5a507 [Minor] Guest should have read permissions on Job Openings 2017-03-22 12:37:38 +05:30
Rushabh Mehta
43583d6497 Update item.js 2017-03-21 17:49:53 +01:00
Rushabh Mehta
a07c43fd68 [feature] ability to have variants based on manufacturer 2017-03-21 17:48:34 +01:00
Robert Kirschner
0a33d4ffc5 [fix] selecting new address in cart web page unchecks previously checked address 2017-03-21 14:52:59 +01:00
Rohit Waghchaure
6ee91ec9c6 on selection of row highlight the background in the cart 2017-03-21 15:55:09 +05:30
Faris Ansari
e1acb766ac [fix] asset image in image view 2017-03-21 14:18:30 +05:30
LB (Ben Johnston)
71f4fbf467 Update the-champion.md - grammar 2017-03-21 12:50:17 +07:00
Rohit Waghchaure
b69d311268 [fix] precision issue during making of depreciation schedule 2017-03-20 16:30:34 +05:30
Kanchan Chauhan
6514e051be [Fix] Issue web view fixed 2017-03-20 15:31:54 +05:30
Khairil Zhafri
4d6d456a0d Update standard_chart_of_accounts.py
Minor spelling edits
2017-03-20 00:15:34 +08:00
Rohit Waghchaure
414c0ab3bb [fix] Quantity is not copying in the Received Qty during making of debit note 2017-03-17 17:19:17 +05:30
Umair Sayyed
024896d806 updated erpnext-learn pages 2017-03-17 12:55:01 +05:30
rohitwaghchaure
2b9c95a940 Merge pull request #8043 from rohitwaghchaure/pos_issue_v8
[fix] POS, amount not updating on change of price, on zero of discount rate has not reset, pricing rule not working for brand
2017-03-16 17:56:20 +05:30
Kanchan Chauhan
7cf1a1d84b Project filter in BOM selection in Production Order 2017-03-16 17:09:37 +05:30
Kanchan Chauhan
6f7457a1b0 [Fix] Warehouse not required for Dropship 2017-03-16 16:03:41 +05:30
Rohit Waghchaure
75177c0e35 [fix] POS, amount not updating on change of price, on zero of discount rate has not reset, pricing rule not working for brand 2017-03-16 15:47:25 +05:30
Faris Ansari
d79f239001 [pos] ui fix for small screens frappe/erpnext#8029 2017-03-16 12:18:35 +05:30
Nabin Hait
c26ae0036d Merge pull request #8033 from manassolanki/student_applicant
[Fix] Enrolling the student
2017-03-15 19:40:46 +05:30
Nabin Hait
f494626ce4 Merge pull request #8034 from mbauskar/hotfix
[minor] make item code mandatory if update_stock is selected
2017-03-15 19:40:20 +05:30
mbauskar
27efc91db0 [minor] make item code mandatory if update_stock is selected 2017-03-15 18:57:18 +05:30
Manas Solanki
ad2dc2c747 [Fix] Enrolling the student 2017-03-15 18:22:57 +05:30
Rushabh Mehta
f340e19ea7 [minor] field re-arrangements in sales invoice, purchase invoice, stock reco 2017-03-15 15:12:43 +05:30
Nabin Hait
56f650f342 Merge branch 'master' into develop 2017-03-15 11:28:07 +05:30
Nabin Hait
c1a5b348b5 Merge branch 'hotfix' 2017-03-15 11:28:06 +05:30
Nabin Hait
1157ee365b bumped to version 7.2.30 2017-03-15 11:58:06 +06:00
Nabin Hait
ee7b4f2882 Merge pull request #8016 from rmehta/posting-date-option
[feature] posting date, time is always current unless explicitly set
2017-03-15 11:22:04 +05:30
Nabin Hait
505ed25f10 Merge pull request #8017 from nabinhait/develop
Field order changed for 'Qty as per Stock UOM'
2017-03-14 22:39:36 +05:30
Nabin Hait
1ba71a0b3a Merge pull request #8018 from mbauskar/develop
[minor] custom script to create issue, lead, opportunity from email
2017-03-14 22:39:26 +05:30
Nabin Hait
79bce2a71d Merge pull request #8019 from rohitwaghchaure/pos_serial_no_issue
[fix] User sales one serial number multiple time from the POS
2017-03-14 22:38:28 +05:30
Rushabh Mehta
4f3da42b75 [fixes] for tests 2017-03-14 21:29:55 +05:30
Rushabh Mehta
131866a11a [fixes] for tests 2017-03-14 21:06:15 +05:30
Rushabh Mehta
82c258948d [fixes] for recurring and tests 2017-03-14 19:13:39 +05:30
Rohit Waghchaure
e259a9b068 [fix] User sales one serial number multiple time from the POS 2017-03-14 19:05:21 +05:30
mbauskar
f54b1047b8 [minor] custom script to create issue, lead, opportunity from email 2017-03-14 17:57:47 +05:30
Nabin Hait
3d731df7e3 Field order changed for 'Qty as per Stock UOM' 2017-03-14 17:24:57 +05:30
Nabin Hait
f86d73fdc8 Merge pull request #8015 from rohitwaghchaure/gross_profit_issue
[fix] Gross profit report permission issue
2017-03-14 17:24:18 +05:30
Rushabh Mehta
f6dee248ee Update company.json 2017-03-14 17:10:01 +05:30
Rushabh Mehta
6d4a52562b [fix] posting date, time is always current unless explicitly set 2017-03-14 17:06:51 +05:30
Rushabh Mehta
6b53792aea [fix] posting date, time is always current unless explicitly set 2017-03-14 17:06:51 +05:30
Rohit Waghchaure
faedf8274c [fix] gross profit permission issue 2017-03-14 14:56:24 +05:30
Nabin Hait
6a053a989e Merge pull request #8014 from rohitwaghchaure/contact_issue_for_website_generator
[fix] Removed customer, supplier and added link_name from website_list_for_contact file
2017-03-14 14:46:48 +05:30
Saurabh
0d47d51407 [fix] modified payment request to cope with new payment structure (#7957)
* [fix] modified payment request to cope with new payment structure

* [fix] moved payment gateway doctype from accounts to core
2017-03-14 14:46:05 +05:30
Nabin Hait
468726320c Merge pull request #8013 from manassolanki/shishuv
[Fix] Student attendance tool- Handling double-click on button
2017-03-14 14:28:58 +05:30
Rohit Waghchaure
11fa7a9311 [fix] Removed customer, supplier and added link_name from website_list_for_contact file 2017-03-14 13:26:10 +05:30
Manas Solanki
2922660b34 [Fix] Student attendance tool- Handling double-click on button 2017-03-14 12:50:58 +05:30
rohitwaghchaure
27e86201fc Merge pull request #8007 from rohitwaghchaure/pos_profile_issue
[fix] Value assignment issue for country field in pos profile
2017-03-14 00:22:23 +05:30
Rohit Waghchaure
cc034a8983 [fix] Value assignment issue for country in the pos profile 2017-03-13 22:44:48 +05:30
rohitwaghchaure
0216f6e6eb Merge pull request #7995 from saurabh6790/restrict_negative_qty_in_pr
[fix] validate negative quantity while creating purchase receipt
2017-03-13 18:24:24 +05:30
Nabin Hait
26ed675240 Merge pull request #7996 from netchampfaris/ui-fixes
[ui] show assignees in gantt popup frappe/erpnext#6916
2017-03-13 17:22:56 +05:30
Saurabh
4f4d0a8369 [fix] validate negative quantity while creating purchase receipt 2017-03-13 15:37:47 +05:30
Faris Ansari
df65d21225 [ui] show assignees in gantt popup frappe/erpnext#6916 2017-03-13 14:52:56 +05:30
Nabin Hait
86cb0cc010 Merge pull request #7991 from mbauskar/develop
[minor] display campaign field only if source is Campaign
2017-03-13 11:19:59 +05:30
mbauskar
7f42e90832 [minor] display campaign field only if source is Campaign 2017-03-12 21:57:52 +05:30
Nabin Hait
0afbee9441 Merge pull request #7988 from nabinhait/develop
Multiple version 8 fixes
2017-03-12 17:41:17 +05:30
Nabin Hait
1ed8bc4c36 Gross Profit report: Consider Sales team table only if grouped by sales person 2017-03-12 17:10:41 +05:30
Nabin Hait
b2a8482cc5 In Student Sibling table, the current student id should not appear as sibling. 2017-03-12 16:55:05 +05:30
Nabin Hait
fb4b8d926f Company based on exising company fix 2017-03-12 16:55:05 +05:30
Nabin Hait
ae205f878a Set default taxes and charges while creating quotation from opportunity 2017-03-12 16:55:05 +05:30
Nabin Hait
d0d22ff203 copy letter head from invoice to payment entry 2017-03-12 16:55:05 +05:30
Nabin Hait
6923397ef6 Show net total in salary slip log in Process Payroll. Fixed #7986 2017-03-12 16:55:05 +05:30
Nabin Hait
c5204f56e2 Merge pull request #7909 from KanchanChauhan/employee-loan-jv
JV on submitting Employee Loan
2017-03-12 16:50:48 +05:30
Nabin Hait
132193309c Merge pull request #7952 from KanchanChauhan/multiple-salary-fixes
Multiple Salary Fixes
2017-03-12 16:48:11 +05:30
Nabin Hait
d402829d17 Merge pull request #7980 from rohitwaghchaure/target_bounty_redesign
[Enhancement] POS Redesign and new features
2017-03-12 16:47:26 +05:30
Nabin Hait
fd9b2467d6 Merge pull request #7966 from rohitwaghchaure/item_variant_issue_for_nuermic
[Fix] Item variants broken when using naming series for items and vriants of numeric value
2017-03-12 16:34:40 +05:30
Nabin Hait
3e22a11a16 Merge pull request #7985 from mbauskar/develop
[minor] ignore lead addresses delete query if address against lead no…
2017-03-12 15:16:01 +05:30
mbauskar
124cf14429 [minor] ignore lead addresses delete query if address against lead not found 2017-03-11 16:02:20 +05:30
Rohit Waghchaure
0169341917 [Fix] Item variants broken when using naming series for items and vriants of numeric value 2017-03-10 19:40:08 +05:30
Rohit Waghchaure
87fa59a710 [Fix] Customer delete, customer edit functionality, added country field in the pos profile 2017-03-10 19:37:02 +05:30
Faris Ansari
1fe1518398 [pos] ui cleanup 2017-03-10 17:00:43 +05:30
Rohit Waghchaure
6068aecc2e minor fix 2017-03-10 17:00:43 +05:30
Faris Ansari
07c9f35779 ui cleanup 2017-03-10 17:00:42 +05:30
Faris Ansari
45510109b6 [pos] cleanup 2017-03-10 17:00:42 +05:30
Rohit Waghchaure
017f5005e0 fixed pos numeric keypad functionality 2017-03-10 17:00:42 +05:30
Faris Ansari
339d9c954a minor changes 2017-03-10 17:00:42 +05:30
Rohit Waghchaure
1312fe31a9 Provision to edit customer and address details 2017-03-10 17:00:42 +05:30
Faris Ansari
adcb3c62fa wip 2017-03-10 17:00:42 +05:30
Rohit Waghchaure
3b5a412a9c offline email for POS 2017-03-10 17:00:41 +05:30
Rohit Waghchaure
56a7974b58 added event on numeric keypad 2017-03-10 17:00:41 +05:30
Rohit Waghchaure
86ab6a93b4 [Enhancement] POS, numeric keypad 2017-03-10 17:00:41 +05:30
Faris Ansari
1f261a8695 UI changes 2017-03-10 17:00:41 +05:30
Rohit Waghchaure
b5097ec161 offline email for POS 2017-03-10 17:00:41 +05:30
Rohit Waghchaure
f0c7ba4b1f added event on numeric keypad 2017-03-10 17:00:40 +05:30
Rohit Waghchaure
e30f83a8af [Enhancement] POS, numeric keypad 2017-03-10 17:00:40 +05:30
Nabin Hait
e7e82fe477 Merge pull request #7970 from rmehta/sample-tasks
Descriptions on sample tasks
2017-03-10 14:58:52 +05:30
Rushabh Mehta
83aa5ee3df [messages] cleanup 2017-03-10 12:47:29 +05:30
Rushabh Mehta
db206f2d10 [minor] develop_version 2017-03-10 09:39:31 +05:30
Rushabh Mehta
868bb26e24 [sample] add help for sample tasks and make them into notifications 2017-03-09 18:11:11 +05:30
Kanchan Chauhan
37a57813fa Multiple Salary Fixes 2017-03-09 13:00:35 +05:30
Rushabh Mehta
aea1c2a1e3 [minor] allow sales order delivery date before order date 2017-03-09 12:46:51 +05:30
Kanchan Chauhan
ffd1f112e6 JV on submitting Employee Loan 2017-03-09 12:21:37 +05:30
Nabin Hait
733855a4c3 Merge pull request #7956 from manassolanki/sibling
[Fixes] School
2017-03-09 11:04:38 +05:30
Nabin Hait
d22bb682a5 Merge pull request #7960 from rohitwaghchaure/material_request_issue_for_po
[Fix] Material Request to Production Order not working
2017-03-09 10:57:26 +05:30
Nabin Hait
f73a44aa8d Update material_request.py 2017-03-09 10:57:00 +05:30
Nabin Hait
1fde71b3c0 Merge pull request #7959 from KanchanChauhan/expense-claim-fix
[Minor] Label change in Expense Claim
2017-03-09 10:53:13 +05:30
Rohit Waghchaure
02fb5880fe [Fix] Material Request to Production Order not working 2017-03-08 18:38:12 +05:30
Kanchan Chauhan
a64f53801b [Minor] Label change in Expense Claim 2017-03-08 16:59:49 +05:30
Manas Solanki
631fab012f [Fix] Student attendance tool 2017-03-08 14:44:52 +05:30
Manas Solanki
d41836b386 [Fix] Student Sibling 2017-03-08 14:44:52 +05:30
Nabin Hait
52daaca885 Fixed merge conflict 2017-03-08 14:30:38 +05:30
Nabin Hait
89d494fbf5 Merge branch 'hotfix' 2017-03-08 14:30:12 +05:30
Nabin Hait
27c4fdc2df bumped to version 7.2.29 2017-03-08 15:00:12 +06:00
Nabin Hait
804c4fc4a7 Merge pull request #7951 from rohitwaghchaure/purchase_return_issue
[Fix] Purchase return issue
2017-03-08 14:28:55 +05:30
Nabin Hait
842d4fcf53 Merge pull request #7954 from mbauskar/hotfix
removed the test_clear_blank_rows test case from JE
2017-03-08 14:19:04 +05:30
mbauskar
02198ec8b0 removed the test_clear_blank_rows test case from JE 2017-03-08 12:34:36 +05:30
Rushabh Mehta
b9cdb05934 [minor] renamed portal hook 2017-03-08 12:34:03 +05:30
Nabin Hait
33fb6ae323 Fixed merge conflict 2017-03-08 11:18:15 +05:30
Nabin Hait
40f5d1845f Merge branch 'hotfix' 2017-03-08 11:16:00 +05:30
Nabin Hait
f967206523 bumped to version 7.2.28 2017-03-08 11:46:00 +06:00
Rohit Waghchaure
d05a8737f9 [Fix] Purchase return issue 2017-03-08 10:30:23 +05:30
Nabin Hait
1af471a16f Merge pull request #7938 from netchampfaris/task-list
[gantt] show task project in popup
2017-03-07 19:41:52 +05:30
Nabin Hait
f822b875ba Merge pull request #7941 from nabinhait/v8_fixes
Set new name in warehouse_name on rename of warehosue
2017-03-07 17:16:44 +05:30
Nabin Hait
229764b7bf Merge pull request #7939 from hereabdulla/patch-2
Only enabled user to be fetched
2017-03-07 17:16:31 +05:30
Nabin Hait
961bdc3743 Set new name in warehouse_name on rename of warehosue 2017-03-07 15:02:34 +05:30
Abdulla P I
cbe035b08a Only enabled user to be fetched 2017-03-07 13:34:08 +05:30
Nabin Hait
44bc6ab242 Merge pull request #7937 from mbauskar/hotfix
[minor] allowed the credit and debit amount to be 0 in JE
2017-03-07 12:56:02 +05:30
Faris Ansari
0e4b924f59 [gantt] show task project in popup 2017-03-07 12:01:39 +05:30
mbauskar
c03f275e7a [minor] allowed the credit and debit amount to be 0 in JE 2017-03-07 11:59:55 +05:30
Nabin Hait
f5a9c8ecf2 Merge pull request #7936 from rohitwaghchaure/financial_statement_issue
Minor fix
2017-03-07 00:27:53 +05:30
Rohit Waghchaure
9f4317e9b8 minor fix 2017-03-06 23:42:45 +05:30
Nabin Hait
1a735f2f5a Merge pull request #7933 from rohitwaghchaure/minor_fix_patch
minor fix in patch
2017-03-06 20:32:47 +05:30
Rohit Waghchaure
0bb434af3f minor fix in patch 2017-03-06 18:52:34 +05:30
Nabin Hait
b3ffd6b282 Merge pull request #7828 from rohitwaghchaure/update_user_roles_to_roles
Changed userrole to has role, commonify role editor of the user
2017-03-06 18:44:53 +05:30
Nabin Hait
439a39bbbb Merge pull request #7922 from nabinhait/uom-conversion-in-selling
Uom conversion in selling
2017-03-06 17:28:41 +05:30
Nabin Hait
fe876c0805 Test case fixed for multiple uom in selling 2017-03-06 16:41:13 +05:30
Nabin Hait
e68f32cf19 UOM Conversion in selling 2017-03-06 16:41:13 +05:30
Kanchan Chauhan
5a980ac87a UOM Conversion in Selling 2017-03-06 16:41:12 +05:30
Nabin Hait
0697d62603 Merge pull request #7931 from KanchanChauhan/job-applicant-fix
[Fix] Candidate can apply to multiple jobs
2017-03-06 16:38:00 +05:30
Rohit Waghchaure
611a70a12a changes in the report roles 2017-03-06 16:36:46 +05:30
Kanchan Chauhan
8411be7720 [Fix] Candidate can apply to multiple jobs 2017-03-06 14:40:43 +05:30
Nabin Hait
8981ecf170 Merge pull request #7926 from svigneux/patch-2
Update batch.md
2017-03-06 14:37:39 +05:30
Rohit Waghchaure
e7485150a1 added roles in the report 2017-03-06 14:26:09 +05:30
Rohit Waghchaure
312498060f changed doctype name userrole to has role 2017-03-06 14:24:39 +05:30
Rohit Waghchaure
d59f8b32cd changed user_roles to roles 2017-03-06 14:24:39 +05:30
S. Vigneux
ff2d5d8ad9 Update batch.md
The practice=> The practice
2017-03-05 12:44:03 -05:00
Nabin Hait
a07c3193cf Merge pull request #7889 from rohitwaghchaure/sales_return_issue_for_pos
[Fix] Sales Return Invoice (Is POS) doesn't show correct payment data
2017-03-04 18:32:40 +05:30
Nabin Hait
feb45727e5 Merge pull request #7912 from mbauskar/develop
[minor] fixes contact field set query for opportunity
2017-03-04 18:31:09 +05:30
Nabin Hait
9e6e718ee1 Merge pull request #7913 from rohitwaghchaure/minor_fix
Removed fiscal year and month from the print of monthly salary register
2017-03-04 18:30:44 +05:30
Rohit Waghchaure
a31ffbc745 [Fix] Sales Return Invoice (Is POS) doesn't show correct payment data 2017-03-03 16:28:49 +05:30
Rohit Waghchaure
f8aa6ed46b removed fiscal year and month from the print 2017-03-02 17:51:15 +05:30
mbauskar
91c6ffde86 [minor] fixes contact field set query for opportunity 2017-03-02 17:29:16 +05:30
Nabin Hait
78a650062c Update company.json 2017-03-02 14:48:49 +05:30
Nabin Hait
57a47a83a0 Merge pull request #7887 from rohitwaghchaure/capacity_planning
[Fix] Pull operation on production order, when making from sales order
2017-03-02 14:17:09 +05:30
Nabin Hait
a0fb3e5128 Merge pull request #7888 from KanchanChauhan/payroll-fix
[Fix] JV entry for Employee Loan only if Loan exists
2017-03-02 14:15:59 +05:30
Nabin Hait
42bc399f2a Merge pull request #7890 from KanchanChauhan/hr-page
[Minor] Employee Loan Management moved up in  HR Page
2017-03-02 14:14:04 +05:30
Nabin Hait
bc10ea897d Merge pull request #7893 from pratu16x7/crm-docs
CRM docs update
2017-03-02 14:13:19 +05:30
Nabin Hait
17cf220cbc Merge pull request #7908 from KanchanChauhan/removed-paid-status
[Minor] Removed Paid status from Salary Slip
2017-03-02 14:12:34 +05:30
Kanchan Chauhan
cfb0adff98 [Minor] Removed Paid status from Salary Slip 2017-03-02 12:59:35 +05:30
Nabin Hait
834d616c60 Merge branch 'master' into develop 2017-03-02 12:38:15 +05:30
Nabin Hait
c99f85d84c Merge branch 'hotfix' 2017-03-02 12:38:14 +05:30
Nabin Hait
1cc7024cb4 bumped to version 7.2.27 2017-03-02 13:08:14 +06:00
Rushabh Mehta
7067ff026a [minor] add progress in desktop help message 2017-03-02 11:14:09 +05:30
Rushabh Mehta
e7900b24a0 [minor] add progress in desktop help message 2017-03-02 11:13:18 +05:30
Saurabh
e95b6e75ac Merge pull request #7905 from saurabh6790/demo_data_setup_fix
[fix] add from date field to salary structure in setup demo data
2017-03-02 08:53:27 +05:30
Saurabh
b3134d34fa [fix] add from date field to salary structure in setup demo data 2017-03-02 08:43:08 +05:30
Nabin Hait
258c8199fb Merge pull request #7842 from superlack/develop
Add Sales Orders to Project costing and billing section
2017-03-01 17:20:23 +05:30
pratu16x7
4e71337f3d fix lead, customer, opportunity pages 2017-03-01 04:02:50 +05:30
Nabin Hait
18b7364a81 Merge branch 'master' into develop 2017-02-28 18:56:26 +05:30
Nabin Hait
093eba2336 Merge branch 'hotfix' 2017-02-28 18:56:25 +05:30
Nabin Hait
db2aefa3a6 bumped to version 7.2.26 2017-02-28 19:26:25 +06:00
Rushabh Mehta
f8b19e07cf [minor] activation messages only for non activated users 2017-02-28 18:54:07 +05:30
Kanchan Chauhan
639eebdae5 [Minor] Employee Loan Management moved up in HR Page 2017-02-28 18:01:07 +05:30
Kanchan Chauhan
e6254b96c4 [Fix] JV entry for Loan only if Loan exists 2017-02-28 17:42:09 +05:30
Rohit Waghchaure
2c2ce8c557 [Fix] Pull operation on production order, when making from sales order 2017-02-28 17:12:18 +05:30
Nabin Hait
8312f1cd64 Merge pull request #7671 from bcornwellmott/link_mrs
Created button to link buying items to material requests
2017-02-28 15:56:06 +05:30
Nabin Hait
6bbf141d57 Merge branch 'develop' into link_mrs 2017-02-28 15:55:35 +05:30
Nabin Hait
38c7ad2c69 Update supplier_quotation.json 2017-02-28 15:53:10 +05:30
Nabin Hait
491d2ad140 Update request_for_quotation.json 2017-02-28 15:52:43 +05:30
Nabin Hait
365ed5dea9 Update purchase_order.json 2017-02-28 15:51:00 +05:30
Nabin Hait
fd37395995 Merge pull request #7878 from netchampfaris/lead-fix
fix date compare in contact_date
2017-02-28 15:37:42 +05:30
Faris Ansari
0ded707397 fix date compare in contact_date 2017-02-27 21:51:46 +05:30
superlack
62d7ba0afd Update project.py 2017-02-27 07:00:30 -08:00
Nabin Hait
cda28ceeec [translations] 2017-02-27 17:46:47 +05:30
Nabin Hait
409062b8a4 Merge pull request #7869 from KanchanChauhan/dependent-tasks
Dependent task dates gets updated with parent dates
2017-02-27 17:34:09 +05:30
Nabin Hait
631ecad985 Merge pull request #7875 from KanchanChauhan/employee-loan-fixes
[Fix] Multiple fixes in Employee Loan
2017-02-27 17:28:20 +05:30
Nabin Hait
3ddc26060a Merge pull request #7876 from KanchanChauhan/salary-slip-fix
[Fix] Update totals on salary component deletion
2017-02-27 17:26:39 +05:30
Kanchan Chauhan
c02745c826 [Fix] Update totals on salary component deletion 2017-02-27 17:21:41 +05:30
Kanchan Chauhan
a13adc0e6b [Fix] Multiple fixes in Employee Loan 2017-02-27 16:56:00 +05:30
Nabin Hait
b9741b6ed5 Merge branch 'master' into develop 2017-02-27 15:41:44 +05:30
Nabin Hait
d39b012981 Merge branch 'hotfix' 2017-02-27 15:41:43 +05:30
Nabin Hait
b99a38d6ae bumped to version 7.2.25 2017-02-27 16:11:43 +06:00
Nabin Hait
a2afc4e11c Update activation.py 2017-02-27 15:39:29 +05:30
Kanchan Chauhan
e76685d925 Dependent task dates gets updated with parent dates 2017-02-27 14:55:03 +05:30
Nabin Hait
c642f76a4d Fixed merge conflict 2017-02-27 14:40:53 +05:30
Nabin Hait
e0d661f433 Merge branch 'hotfix' 2017-02-27 14:31:10 +05:30
Nabin Hait
79c5ee0a65 bumped to version 7.2.24 2017-02-27 15:01:10 +06:00
Nabin Hait
afd0d086a7 Merge pull request #7872 from rohitwaghchaure/delivery_note_serail_no_issue
[Fix] Serial nos not pulling on the delivery note, for spanish language add serial no button is not working
2017-02-27 14:11:30 +05:30
Nabin Hait
704b6a3e1f Merge pull request #7756 from mlisb0n/master
[Translation] Revised and updated all translations to meet european portuguese business/accounting terminology
2017-02-27 14:10:51 +05:30
Rohit Waghchaure
2087e574aa [Fix] Serial nos not pulling on the delivery note, for language spanish add serial no button was not working 2017-02-27 13:43:04 +05:30
Nabin Hait
c238016aff Merge pull request #7871 from KanchanChauhan/add-serial-no
[Fix] Add Serial No fix for other langauges
2017-02-27 13:14:57 +05:30
Kanchan Chauhan
6981870a40 [Fix] Add Serial No fix for other langauges 2017-02-27 12:54:13 +05:30
Nabin Hait
7e15afbf45 Merge pull request #7868 from RobertSchouten/patch-34
[fix] typo on get product bundle
2017-02-27 12:27:03 +05:30
robert schouten
4766562ff0 fix typo on get product bundle 2017-02-27 13:30:18 +08:00
Ben Cornwell-Mott
08c1e86b1c Moved link button. Creates new row for unlinked quantities 2017-02-25 23:16:54 -08:00
Nabin Hait
72c7e73ce0 Merge pull request #7852 from rohitwaghchaure/production_order_issue
[Fix] Production order operations scheduling issue
2017-02-25 11:03:43 +05:30
Nabin Hait
7553e72014 Merge pull request #7860 from nabinhait/develop
Leave application overlap validation for half day and test cases
2017-02-25 11:02:53 +05:30
superlack
c95ebdb4e4 Update sales_order.py 2017-02-24 12:35:10 -08:00
superlack
f800892ec3 Update project.py 2017-02-24 12:33:59 -08:00
Rohit Waghchaure
94c30d81b1 [Fix] Production order operations scheduling issue 2017-02-24 19:21:40 +05:30
Nabin Hait
697150f339 Leave application overlap validation for half day and test cases 2017-02-24 18:53:34 +05:30
Nabin Hait
a8d02bfd4a Merge pull request #7850 from manassolanki/shishuvan
Patch for making All Assessment Group parent in assessment group tree
2017-02-24 17:01:05 +05:30
Manas Solanki
d77fac113f Make All Assessment Group parent in assessment group tree 2017-02-24 15:30:22 +05:30
Nabin Hait
da73e1b806 Merge pull request #7851 from rohitwaghchaure/account_paid_to_payment_entry
[Fix] Payment entry account Paid To Show receivable accounts for supplier
2017-02-24 15:18:50 +05:30
Kanchan Chauhan
26b79f108a Leave Application Enchancement 2017-02-24 15:13:06 +05:30
Rohit Waghchaure
b983f26b98 [Fix] Payment entry account Paid To Show receivable accounts for supplier 2017-02-24 15:07:54 +05:30
Nabin Hait
8ad26c7d26 Merge pull request #7848 from manassolanki/neilLasrado-ass-redesign
Neil lasrado assessment redesign
2017-02-24 14:14:22 +05:30
Neil Trini Lasrado
c15b5db030 Added 'All Assessment Group' to fixtures 2017-02-24 13:16:46 +05:30
Neil Trini Lasrado
e4903b77b6 Added New Doctype - Assessment Code 2017-02-24 13:16:46 +05:30
Neil Trini Lasrado
15944b9ecf Added Academic Term to Assessment Group 2017-02-24 13:16:46 +05:30
Nabin Hait
2bcacec5c6 Merge pull request #7576 from RobertSchouten/compact_dev
[fix] compact print format not longer ignores format builder
2017-02-24 13:09:18 +05:30
Nabin Hait
ff5bd680c2 Merge pull request #7840 from rmehta/new-buttons
[enhance] connect new buttons on dashboard to custom make buttons and fix text for payment request
2017-02-24 12:57:13 +05:30
Nabin Hait
d9afd7e4aa Merge pull request #7822 from rmehta/desktop-messages
[enhance] desktop messages
2017-02-24 12:55:34 +05:30
Nabin Hait
d3d2daab4b Merge pull request #7838 from manassolanki/shishuvan
[Fix] Student Doctype
2017-02-24 12:53:21 +05:30
Nabin Hait
9f0d64b679 Merge pull request #7841 from mbauskar/hotfix
[minor] fixed assessment module icon
2017-02-24 12:50:16 +05:30
Manas Solanki
230df2c9d3 Link the sibling child table with the student doctype 2017-02-24 12:09:55 +05:30
Manas Solanki
53259fb91f Change in student master should reflect in every linked doctype and child doctype 2017-02-24 11:25:04 +05:30
superlack
868ef7738f Update project.json 2017-02-23 17:46:07 -08:00
superlack
23e5d40374 Update sales_order.py 2017-02-23 17:43:50 -08:00
superlack
c4587d2945 Update project.py 2017-02-23 17:39:05 -08:00
mbauskar
cea7d32b31 [minor] fixed assessment module icon 2017-02-23 20:28:47 +05:30
Rushabh Mehta
509543752c [enhance] connect new buttons on dashboard to custom make buttons and fix text for payment request 2017-02-23 17:03:46 +05:30
Nabin Hait
5278da8901 Merge pull request #7830 from mbauskar/develop
[minor] eval conditions for recurring sections and lead fields
2017-02-23 16:54:20 +05:30
Nabin Hait
8ec1b565f5 Merge pull request #7823 from KanchanChauhan/payroll-currency
[Minor] Company default currency in Salary Slip and Structure
2017-02-23 16:52:23 +05:30
Nabin Hait
89f7767b51 Merge pull request #7818 from KanchanChauhan/product-bundle-fix
[Fix] Disappearing Dropdown fixed
2017-02-23 16:49:49 +05:30
Nabin Hait
4c27ec5618 Merge pull request #7839 from KanchanChauhan/holiday-cal-fix
[Fix] Holiday Calendar Fix
2017-02-23 16:36:35 +05:30
Kanchan Chauhan
52a5cb9ae3 [Fix] Holiday Calendar Fix 2017-02-23 16:15:12 +05:30
Nabin Hait
60db08fd7f Merge pull request #7817 from KanchanChauhan/loan-management-fix
[Minor] Field label rename
2017-02-23 16:09:11 +05:30
Kanchan Chauhan
951e31667b [Minor] Company default currency in Salary Slip and Structure 2017-02-23 11:16:53 +05:30
Nabin Hait
97b3be6f9d Update salary_structure_employee.json 2017-02-23 11:10:05 +05:30
KanchanChauhan
90b42c4fa2 Merge pull request #7826 from KanchanChauhan/landed-cost-voucher-test
[Minor] Landed Cost Voucher test case fixed
2017-02-23 09:58:40 +05:30
Kanchan Chauhan
1d45a4312e [Minor] Landed Cost Voucher test case fixed 2017-02-23 08:44:02 +05:30
mbauskar
ddb9f0bf78 [minor] lead hide/unhide campain_name, customer field depending on source 2017-02-22 18:54:47 +05:30
mbauskar
d6e409ea92 [minor] hide recurring section if document is in __local state 2017-02-22 18:22:14 +05:30
Kanchan Chauhan
fe61c314b7 [Minor] Landed Cost Voucher test case fixed 2017-02-22 17:25:26 +05:30
nick9822
089c5caea5 Sales analytics error after upgrade
Hi Team,

We were getting errors in sales analytics report after the upgrade. 
https://discuss.erpnext.com/t/sales-analytics-report-hangs-on-erpnext-v7/17951/6

With the efforts of @Tropicalrambler into the report we made it work by putting checkpoint for item.
Please see whether its good or there is better solution for it.

Thanks,
Nick
2017-02-22 17:09:29 +05:30
Manas Solanki
7a61f12572 Fixes for attendance reports 2017-02-22 16:19:57 +05:30
Rushabh Mehta
05ce7ec7bb [enhance] desktop messages 2017-02-22 16:15:43 +05:30
Kanchan Chauhan
b249a6e6f7 [Fix] Disappearing Dropdown fixed 2017-02-22 15:39:07 +05:30
Nabin Hait
5079c9ef47 Fixed merge conflict 2017-02-22 15:31:31 +05:30
Nabin Hait
10ec553859 Merge branch 'hotfix' 2017-02-22 15:05:27 +05:30
Nabin Hait
633698affc bumped to version 7.2.23 2017-02-22 15:35:27 +06:00
Nabin Hait
1965949c67 Merge pull request #7816 from mbauskar/hotfix
[minor] minor fixes for journal entry get_exchange_rate trigger
2017-02-22 15:03:32 +05:30
Kanchan Chauhan
6af7140763 [Minor] Field label rename 2017-02-22 14:58:34 +05:30
mbauskar
a8fa10d2a9 [minor] minor fixes for journal entry get_exchange_rate trigger 2017-02-22 14:51:09 +05:30
Nabin Hait
79dd816359 Merge branch 'manassolanki-shishu' into develop 2017-02-22 13:06:01 +05:30
Nabin Hait
08847bd06a minor fix 2017-02-22 13:05:46 +05:30
Nabin Hait
1e3a0b4632 Merge branch 'shishu' of https://github.com/manassolanki/erpnext into manassolanki-shishu 2017-02-22 12:12:58 +05:30
Nabin Hait
753c8dedde Update api.py 2017-02-22 11:53:13 +05:30
Nabin Hait
2d8047837c Merge pull request #7802 from KanchanChauhan/multiple-items-purchase
[Fix] Throw error if item is added multiple time
2017-02-22 11:43:17 +05:30
Nabin Hait
1bdb6a57f2 Merge pull request #7809 from rohitwaghchaure/financial_statement_company_issue
[Fix] Company fiscal year issue in financial statement
2017-02-22 11:41:16 +05:30
Kanchan Chauhan
f2803ac427 [Fix] Throw error if item is added multiple time 2017-02-22 10:40:38 +05:30
Manas Solanki
47aba953e2 Added student language doctype 2017-02-21 18:49:00 +05:30
Manas Solanki
f869a679ae Fixed Student Attendence 2017-02-21 18:49:00 +05:30
Nabin Hait
8c9bc8edbb Merge pull request #7807 from nabinhait/hotfix
Company, Currency, Conversion Rate fields are mandatory in BOM
2017-02-21 16:06:20 +05:30
Nabin Hait
293158db6e Merge pull request #7808 from KanchanChauhan/attendance-rename-field
[Patch] Attendance Date field renamed
2017-02-21 16:01:50 +05:30
Nabin Hait
0142fdc0d7 Update rename_att_date_attendance.py 2017-02-21 16:01:21 +05:30
Rohit Waghchaure
49523d7f80 [Fix] Company fiscal year issue in financial statement 2017-02-21 14:20:26 +05:30
Kanchan Chauhan
42f55cf4b1 [Patch] Attendance Date rename field 2017-02-21 13:44:01 +05:30
Nabin Hait
6e1a2b16a5 Company, Currency, Conversion Rate fields are mandatory in BOM 2017-02-21 13:11:02 +05:30
Nabin Hait
d5442b5544 Merge pull request #7791 from nabinhait/pro_order_stock_qty
Build Qty considering quantity for which bom is created
2017-02-21 09:58:13 +05:30
Nabin Hait
7056ce54d7 Update salary_structure.py 2017-02-20 23:28:47 +05:30
Nabin Hait
16a4b58676 Merge branch 'pratu16x7-bom-view' into develop 2017-02-20 19:38:36 +05:30
Nabin Hait
391eca18c7 Fixed merge conflict 2017-02-20 19:38:22 +05:30
Nabin Hait
6fd8cca135 Merge pull request #7587 from noussh/develop
updated missing navigation links in Docs - Accounts
2017-02-20 19:33:55 +05:30
Nabin Hait
6cbe02400a Merge pull request #7672 from KanchanChauhan/remove-joining-datep-validation
From date, to date moved from Salary Structure to Salary Structure Employee
2017-02-20 19:31:49 +05:30
Nabin Hait
6a85752ead Merge branch 'hotfix' into remove-joining-datep-validation 2017-02-20 19:31:38 +05:30
Nabin Hait
e17519accb Update salary_structure.py 2017-02-20 19:30:44 +05:30
Nabin Hait
de7d7ba7d9 Merge pull request #7768 from mbauskar/develop
[minor] auto close opportunity after 7 days
2017-02-20 19:23:22 +05:30
Nabin Hait
0d66579e83 Merge branch 'develop' into develop 2017-02-20 19:22:03 +05:30
Nabin Hait
aa968cd12e Merge pull request #7751 from nick9822/patch-3
Next Depreciation Date is entered as past date
2017-02-20 19:11:31 +05:30
Nabin Hait
af6e41b637 Merge pull request #7467 from suyashphadtare/develop
[minor] Show Actual Item quantity in warehouse set query
2017-02-20 19:10:43 +05:30
Nabin Hait
cd837ecbac Merge branch 'develop' into develop 2017-02-20 19:09:20 +05:30
Nabin Hait
5422329b84 Merge branch 'KanchanChauhan-accrual-payroll-system' into develop 2017-02-20 19:01:27 +05:30
Nabin Hait
8bb69ff8bf Fixed merge conflict 2017-02-20 19:01:04 +05:30
Nabin Hait
e49d901907 Update process_payroll.py 2017-02-20 18:36:12 +05:30
Nabin Hait
afd8df8a20 Build Qty considering quantity for which bom is created 2017-02-20 18:06:50 +05:30
Nabin Hait
78ef086b00 Merge branch 'bcornwellmott-prod_ana' into develop 2017-02-20 17:42:07 +05:30
Nabin Hait
6ffd77660b Changed module for Production Analytics 2017-02-20 17:41:44 +05:30
Nabin Hait
3cdb65f782 Merge branch 'prod_ana' of https://github.com/bcornwellmott/erpnext into bcornwellmott-prod_ana 2017-02-20 17:25:01 +05:30
Nabin Hait
b44ae54813 Merge pull request #7785 from nabinhait/in_global_search
Added fields in global search
2017-02-20 15:05:01 +05:30
Nabin Hait
589f4656ad Merge branch 'develop' into in_global_search 2017-02-20 15:04:52 +05:30
Nabin Hait
9f4cb0c097 Fixed merge conflict 2017-02-20 15:00:04 +05:30
Nabin Hait
f8cff128b3 Merge branch 'hotfix' 2017-02-20 14:52:01 +05:30
Nabin Hait
66b373033a bumped to version 7.2.22 2017-02-20 15:22:01 +06:00
Nabin Hait
e6a5d5dc64 Merge pull request #7784 from mbauskar/minor-fixes
[minor] minor fixes for contact us page
2017-02-20 14:43:24 +05:30
Nabin Hait
da098222d7 Merge pull request #7780 from rohitwaghchaure/minor_fix_payment_entry
[Fix] Removed employee party type from the payment entry
2017-02-20 14:43:14 +05:30
Nabin Hait
fd3ec066ce Added fields in global search 2017-02-20 13:38:31 +05:30
Makarand Bauskar
98f9427ba1 [minor] minor fixes for contact us page 2017-02-20 12:41:48 +05:30
bcornwellmott
97ab1d2eb3 Merge pull request #7691 from bcornwellmott/stock_reports
Stock reports
2017-02-19 14:36:35 -08:00
bcornwellmott
568dac3aad Fixed Link Option for Warehouse 2017-02-19 14:04:20 -08:00
Rohit Waghchaure
f73d459c80 [Fix] Removed employee party type from the payment entry 2017-02-19 17:46:05 +05:30
Nabin Hait
02d987ed13 Minor fix for common tree view 2017-02-17 15:50:53 +05:30
Nabin Hait
83ba5c1319 Merge pull request #7770 from rohitwaghchaure/minor_issue_develop
[Fix] Payment entry fields issue, added total billed hours in timesheet
2017-02-17 15:20:06 +05:30
Nabin Hait
64e222697c Merge pull request #7769 from nabinhait/setup_fy_dates
Set fiscal year start and end date based on country
2017-02-17 15:18:28 +05:30
Nabin Hait
e285258374 Merge pull request #7762 from mbauskar/hotfix
[minor] timestamp fixes for heatmap
2017-02-17 15:18:01 +05:30
Nabin Hait
a6eb1434b3 Merge pull request #7771 from rmehta/item-name
[minor] item name not mandatory and item price with quick edit
2017-02-17 15:17:24 +05:30
Rushabh Mehta
0c5375d0fa [minor] item name not mandatory and item price with quick edit 2017-02-17 14:57:31 +05:30
mbauskar
90818080b1 [minor] Configured Auto Close days for Opportunity and Issue 2017-02-17 14:56:00 +05:30
mbauskar
e1e25a0c9d [minor] auto close opportunity after 7 days 2017-02-17 14:54:50 +05:30
Rohit Waghchaure
a020e4eba4 Payment entry fields issue, added total billed hours in timesheet 2017-02-17 14:51:57 +05:30
Nabin Hait
6af7dd4e1b Set fiscal year start and end date based on country 2017-02-17 14:47:33 +05:30
Nabin Hait
801fa80b39 Merge pull request #7764 from rohitwaghchaure/clean_supplied_items
[Fix] Cleanup supplied items if supply raw material is set as No
2017-02-17 12:36:05 +05:30
Nabin Hait
9e5b3dad29 Minor fix in assesment 2017-02-17 11:03:44 +05:30
Rohit Waghchaure
4b9d2f2733 [Fix] Cleanup supplied items if supply raw material is set as No 2017-02-16 18:53:23 +05:30
Kanchan Chauhan
1b204c8e4e Accrual Payroll System 2017-02-16 16:30:51 +05:30
nick9822
23e174c270 Validation for purchase_date
Separate validation for purchase date.
2017-02-16 16:26:38 +05:30
mbauskar
e7b87ad071 [minor] timestamp fixes for heatmap 2017-02-16 16:05:46 +05:30
Nabin Hait
de45b0eddc Merge branch 'master' into develop 2017-02-16 15:59:59 +05:30
Nabin Hait
1b59b624c3 Merge branch 'hotfix' 2017-02-16 15:59:58 +05:30
Nabin Hait
a7d6b68bc0 bumped to version 7.2.21 2017-02-16 16:29:58 +06:00
Nabin Hait
c70a4d2037 Merge pull request #7760 from rmehta/add-activation-1
[add] site activation level
2017-02-16 15:51:04 +05:30
Nabin Hait
d13d198dc8 Merge pull request #7747 from KanchanChauhan/item-name-asset
[Minor] Item Name in Asset
2017-02-16 15:15:23 +05:30
Rushabh Mehta
6dd461fec4 [add] site activation level 2017-02-16 14:53:21 +05:30
Nabin Hait
92c52f4623 Merge pull request #7732 from neilLasrado/student-left
Added ability to send newsletter to Student batch Guardians and Student Group Guardians
2017-02-16 14:40:14 +05:30
Nabin Hait
ea1cb68fe7 Merge branch 'master' into develop 2017-02-16 14:37:50 +05:30
Nabin Hait
d5d0b36973 Merge branch 'hotfix' 2017-02-16 14:37:49 +05:30
Nabin Hait
7677b56f7c bumped to version 7.2.20 2017-02-16 15:07:48 +06:00
Nabin Hait
b280398626 Merge pull request #7739 from rohitwaghchaure/payment_entry_currency_symbol_issue
[Fix] Payment Entry currency symbol issue
2017-02-16 14:21:24 +05:30
Nabin Hait
99c6c79834 Update payment_entry.js 2017-02-16 14:21:04 +05:30
Nabin Hait
507e6fa46e Merge pull request #7749 from KanchanChauhan/leave-application-cleanup
Rejected leave application can be submitted
2017-02-16 14:19:11 +05:30
Neil Trini Lasrado
fa2023d3da Added ability to send newsletter to Student batch Guardians and Student Group Guardians 2017-02-16 13:33:09 +05:30
Nabin Hait
3437a9a123 minor fix 2017-02-16 12:14:30 +05:30
pratu16x7
86415f394d [minor] duration bar 2017-02-16 09:27:53 +05:30
mlisb0n
835a615af8 Add files via upload 2017-02-15 15:45:52 +01:00
Kanchan Chauhan
11f159193e Rejected leave application can be submitted 2017-02-15 19:09:21 +05:30
Nabin Hait
2f7697d1bd Merge pull request #7746 from pratu16x7/minor-search-presets
Preset doctypes fields to Search
2017-02-15 18:46:03 +05:30
Nabin Hait
d9068497cb Merge pull request #7736 from KanchanChauhan/serial-no-status-report
[Fix] Serial No Status
2017-02-15 17:56:50 +05:30
Nabin Hait
b8624efe3a Merge pull request #7750 from KanchanChauhan/territory-filter-opportunity
[Minor] Is group filter removed from Territory in Opportunity
2017-02-15 17:41:31 +05:30
Nabin Hait
afef62c887 Merge pull request #7737 from KanchanChauhan/project-percentage
[Fix] Project % Completed set to 0 if no tasks
2017-02-15 17:28:53 +05:30
Nabin Hait
e827104a52 Merge pull request #7738 from KanchanChauhan/appraisal-fix
[Fix] Empty row in Goals of Appraisal fixed
2017-02-15 17:26:40 +05:30
Nabin Hait
6a2e138021 Merge pull request #7731 from nabinhait/hotfix
Check existing SO, PO and MR for enabling / disabling 'Is Stock Item' checkbox
2017-02-15 17:25:56 +05:30
nick9822
e5cb3e34fe nowdate changed to purchase_date
next depreciation date should be compared with purchase_date instead of nowdate.
2017-02-15 15:32:50 +05:30
Kanchan Chauhan
7118b5a2bd [Minor] Is group filter removed from Territory in Opportunity 2017-02-15 14:46:08 +05:30
Kanchan Chauhan
2307f57f19 [Minor] Item Name in Asset 2017-02-15 11:52:29 +05:30
Rohit Waghchaure
ff41c82c2b [Fix] Payment Entry currency symbol issue 2017-02-15 11:44:15 +05:30
pratu16x7
349ed568ed Add task and item 2017-02-15 09:23:26 +05:30
pratu16x7
ca56ad0bfc [minor] fix test 2017-02-14 18:49:26 +05:30
pratu16x7
462e89e452 [minor] margin fix 2017-02-14 17:18:10 +05:30
pratu16x7
0e94b4bec4 Mobile view fixes 2017-02-14 17:18:09 +05:30
pratu16x7
60fe77cc90 Website data from existing child tables, layout, images 2017-02-14 17:18:09 +05:30
pratu16x7
dee36e10ae Add operations and items to website 2017-02-14 17:18:09 +05:30
pratu16x7
aad8257e20 Add template 2017-02-14 17:18:09 +05:30
Kanchan Chauhan
ecdcac1fdf [Fix] Empty row in Goals of Appraisal fixed 2017-02-14 15:32:06 +05:30
KanchanChauhan
993358d5d7 Update install.md 2017-02-14 15:12:07 +05:30
Kanchan Chauhan
bab6c9c006 [Fix] Project perecentage set 0 if no tasks 2017-02-14 14:30:00 +05:30
Kanchan Chauhan
79cd59303a [Fix] Serial No Status 2017-02-14 12:49:36 +05:30
Nabin Hait
d8812020aa Merge pull request #7735 from mbauskar/develop
[minor] fetched tickets to closed using sql instead of get_all
2017-02-14 11:35:37 +05:30
mbauskar
2ecfd9be5d [minor] fetched tickets to closed using sql instead of get_all 2017-02-14 08:41:09 +05:30
Nabin Hait
7877b0ec1b Merge pull request #7730 from KanchanChauhan/minor-enhancement
[Minor] List of Contacts
2017-02-13 16:09:43 +05:30
Nabin Hait
99dfa3060a Check existing SO, PO and MR for disabling 'Is Stock Item' checkbox 2017-02-13 16:06:02 +05:30
Kanchan Chauhan
779c581a92 [Minor] List of Contacts 2017-02-13 16:01:52 +05:30
Nabin Hait
89b6c47b2e Merge pull request #7712 from rohitwaghchaure/minor_fix_item_valuation_method
[Fix] Valuation method changing issue in the item
2017-02-13 15:42:22 +05:30
Nabin Hait
ec07d18222 Merge pull request #7716 from KanchanChauhan/apply-now-job
[Fix] Apply Now button redirect fixed for Job Opening
2017-02-13 15:42:02 +05:30
Neil Trini Lasrado
a388352171 Merge pull request #7719 from neilLasrado/student-left
Removed Nationality in Student Applicant as a link field to Country
2017-02-12 01:31:02 +05:30
Neil Trini Lasrado
1ab8554d15 Removed Nationality in Student Applicant as a link feild to Country 2017-02-12 01:29:24 +05:30
Neil Trini Lasrado
b2fdc131e8 Merge pull request #7718 from neilLasrado/student-left
Added Exit Section to Student master
2017-02-12 01:19:39 +05:30
Neil Trini Lasrado
c1bf70dc75 Added Exit Section to Student master 2017-02-12 01:17:52 +05:30
suyashphadtare
34ab136b46 [fix] Remove un-necessary Whitespace 2017-02-10 19:14:43 +05:30
suyashphadtare
750a067688 [minor][fix] Show all warehouses with item actual qty in warehouse set query 2017-02-10 19:14:43 +05:30
suyashphadtare
049a88cc40 [minor] Show item quantity in warehouse set query 2017-02-10 19:14:43 +05:30
Kanchan Chauhan
1cd5e583ba [Fix] Apply Now button redirect fixed for Job Opening 2017-02-10 17:58:41 +05:30
KanchanChauhan
cc2c7649a8 [Minor] Stock Entry Fix (#7715) 2017-02-10 17:47:49 +05:30
Nabin Hait
bdd470a6d1 Update item.py 2017-02-10 17:12:48 +05:30
Rohit Waghchaure
2f09dc0e62 [Fix] Valuation method changing issue in the item 2017-02-10 15:29:45 +05:30
Nabin Hait
29dfb9479b Merge pull request #7710 from joolsr/patch-1
Update customer.md
2017-02-10 13:23:06 +05:30
Ben Cornwell-Mott
67a13972fb Added warehouse to BOM Stock Report, fixed bugs with buildable qty 2017-02-09 23:21:52 -08:00
Nabin Hait
5a69f24dfe Merge pull request #7705 from rmehta/stock-entry-fix
[minor] added make material request from Stock Entry and removed cur_frm
2017-02-10 12:51:09 +05:30
Nabin Hait
b41b10976f Merge pull request #7644 from mbauskar/develop
[docs] Feedback triggers
2017-02-10 12:13:31 +05:30
mbauskar
edaa43d9b8 [docs] manual feedback request and minor fixes 2017-02-10 11:28:45 +05:30
bcornwellmott
630882787a Added buildable qty
The field indicates how many can be built.
2017-02-09 20:41:12 -08:00
bcornwellmott
fc41bb6afd Fixed code issues
Also changed qty to Quantity left to build
2017-02-09 20:37:11 -08:00
joolsr
f9fdbe2853 Update customer.md 2017-02-09 23:10:39 +00:00
Rushabh Mehta
cf99dc0e77 [fix] for setup wizard tests and demo; 2017-02-09 18:06:11 +05:30
Rushabh Mehta
e6aa3b435a [minor] added make material request from Stock Entry and removed cur_frm 2017-02-09 17:47:22 +05:30
Nabin Hait
eee23eaf5c Merge pull request #7702 from mbauskar/hotfix
[minor] payment entry company trigger
2017-02-09 13:48:09 +05:30
mbauskar
d487bf77e1 [minor] payment entry company trigger 2017-02-09 12:57:25 +05:30
Nabin Hait
2b5fa7647a Merge pull request #7662 from nick9822/patch-2
Sales analytics error after upgrade
2017-02-09 11:45:30 +05:30
Nabin Hait
e27a0d25bc Merge pull request #7654 from rohitwaghchaure/lead_tax_issue
[Fix] Set default tax on quotation when it's making from the lead
2017-02-09 11:43:22 +05:30
Nabin Hait
fafa3748f1 Merge pull request #7696 from khatrijitendra/patch-1
[Fix] "type" and "rate" fields
2017-02-08 16:26:08 +05:30
khatrijitendra
d262eb1a1c issue in type and rate
1. there is not such field, "type" it is "margin_type"
2. there is not such field,  "rate" it is "margin_rate_or_amount"
2017-02-08 14:59:59 +05:30
Nabin Hait
6ff0caa87a Fixed merge conflict 2017-02-08 11:33:33 +05:30
Nabin Hait
efd5eadfea Merge branch 'hotfix' 2017-02-08 11:32:47 +05:30
Nabin Hait
57e97c06e6 bumped to version 7.2.19 2017-02-08 12:02:47 +06:00
Nabin Hait
6f93cd5bd0 Merge pull request #7692 from rohitwaghchaure/minor_fixes_v_7_2
Minor fixes
2017-02-08 11:21:54 +05:30
Nabin Hait
533d22e88b Merge pull request #7606 from rohitwaghchaure/data_import_tool_for_cost_center
[Fix] Allow data import tool for cost center
2017-02-08 11:21:25 +05:30
Rohit Waghchaure
b3489548a9 minor fix 2017-02-08 11:20:04 +05:30
Nabin Hait
ccd2e00331 Merge pull request #7676 from nabinhait/missing_val_rate
Get standard/historical valuation rate where missing, if item is not a sample item
2017-02-08 11:05:06 +05:30
Ben Cornwell-Mott
05dca985e6 Fixed stock query and corrected with suggestions from rohit 2017-02-07 09:15:33 -08:00
mbauskar
1df0b9bfed [minor] minor fixes in feedback index.md 2017-02-07 15:20:08 +05:30
mbauskar
298acd3d1a [docs] Feedback triggers 2017-02-07 15:20:08 +05:30
Nabin Hait
70fd8546ce Merge pull request #7677 from KanchanChauhan/serial-no-in-return
[Fix] Serial No if is_return
2017-02-07 13:28:30 +05:30
Nabin Hait
555279b6e6 Merge pull request #7680 from bcornwellmott/patch-7
Duplicate "title" field
2017-02-07 13:27:46 +05:30
Nabin Hait
ddcb514b65 Merge pull request #7685 from KanchanChauhan/employee-details-in-salary-preview
[Fix] Employee Details in Salary Slip preview
2017-02-07 13:27:24 +05:30
Nabin Hait
401ac7a5e5 Merge pull request #7686 from mbauskar/fixes
[minor] auto close issue using ORM (document save method)
2017-02-07 13:26:14 +05:30
Nabin Hait
0a6aaf4257 Get standard/historical valuation rate where missing: some minor fixes 2017-02-07 12:50:22 +05:30
mbauskar
9c0bf73d25 [minor] auto close issue using ORM (document save method) 2017-02-07 12:50:05 +05:30
Kanchan Chauhan
842ad55235 [Fix] Employee Details in Salary Slip preview 2017-02-07 12:07:55 +05:30
Kanchan Chauhan
4f3b0aa249 [Fix]Serial No if is_return 2017-02-07 11:28:34 +05:30
Ben Cornwell-Mott
02c02bc572 Fixed counting to correctly reflect all status at each month 2017-02-06 20:58:25 -08:00
Nabin Hait
ea8fab52c6 Get standard/historical valuation rate where missing, if item is not a sample item 2017-02-07 01:24:32 +05:30
bcornwellmott
92b6ceec41 Duplicate "title" field
The title field was duplicated - removed first one.
2017-02-06 10:51:02 -08:00
Neil Trini Lasrado
2160638f36 Merge pull request #7679 from neilLasrado/stud-group
Added validation to check if Student in a student group exists in the…
2017-02-07 00:17:24 +05:30
Neil Trini Lasrado
c28598ae8b Merge pull request #7678 from neilLasrado/stud-att
Added validations to Student Attendance
2017-02-07 00:17:14 +05:30
Neil Trini Lasrado
3ade874f9e Added validations to Student Attendance 2017-02-06 20:07:02 +05:30
Neil Trini Lasrado
05dec9a880 Added validation to check if Studnet in a student group exists in the student batch specified 2017-02-06 20:05:16 +05:30
Nabin Hait
8200485baa Merge pull request #7675 from mbauskar/hotfix
[minor] index out of range fixes for JE
2017-02-06 19:23:33 +05:30
mbauskar
c874a82559 [minor] index out of range fixes for JE 2017-02-06 15:41:34 +05:30
Kanchan Chauhan
5f5457085e Joining date validation removed from Salary Structure 2017-02-06 14:50:39 +05:30
Rushabh Mehta
50862039dc [minor] fixes to schools 2017-02-06 14:28:52 +05:30
Rohit Waghchaure
ade06f940c [Fix] Set default tax on quotation when it's making from the lead 2017-02-06 12:14:09 +05:30
Nabin Hait
259489572d Merge pull request #7657 from rmehta/po-from-so
[enhance] production order from sales order
2017-02-06 11:41:56 +05:30
Nabin Hait
101aaed643 Merge pull request #7614 from KanchanChauhan/account-filters-payroll
[Fix] Account filter in Process Payroll and Salary Component
2017-02-06 11:36:48 +05:30
Nabin Hait
20d2d7548a Update salary_component.js 2017-02-06 11:36:38 +05:30
Ben Cornwell-Mott
28945438f2 Created button to link buying items to material requests 2017-02-05 18:55:57 -08:00
Ben Cornwell-Mott
36d04fda37 Fixed filter dates and date comparisons 2017-02-05 14:00:46 -08:00
Ben Cornwell-Mott
b4a2c2f047 Got proper cumulative data working 2017-02-05 13:39:39 -08:00
Ben Cornwell-Mott
943124275d Production Analytics 2017-02-04 14:25:53 -08:00
rohitwaghchaure
ac65e956e8 Merge pull request #7659 from saurabh6790/demo_user_perm_fix
[minor][fix] demo user perm fix
2017-02-03 16:51:33 +05:30
Rushabh Mehta
e92a740b53 [minor] school patch fix 2017-02-03 16:05:53 +05:30
nick9822
acb5e9a11b Sales analytics error after upgrade
Hi Team,

We were getting errors in sales analytics report after the upgrade. 
https://discuss.erpnext.com/t/sales-analytics-report-hangs-on-erpnext-v7/17951/6

With the efforts of @Tropicalrambler into the report we made it work by putting checkpoint for item.
Please see whether its good or there is better solution for it.

Thanks,
Nick
2017-02-03 12:31:54 +05:30
Saurabh
9ca3f2847a a[minor][fix] demo user perm fix 2017-02-02 19:22:36 +05:30
Rushabh Mehta
6ede4a3809 [enhance] production order from sales order 2017-02-02 17:42:01 +05:30
KanchanChauhan
ed94aa4798 Merge pull request #7624 from neilLasrado/eval-group
Code Refractor.
2017-02-02 17:39:08 +05:30
Neil Trini Lasrado
f37d329cf5 Merge branch 'develop' into eval-group 2017-02-02 17:30:10 +05:30
rohitwaghchaure
3f10c7f4fc Merge pull request #7609 from rmehta/remove-party-status
Remove Party Status
2017-02-02 16:10:26 +05:30
KanchanChauhan
6575a0a7e2 [Minor]ROI fix in Employee Loan (#7643) 2017-02-02 16:01:43 +05:30
Rushabh Mehta
a3d0bea375 Merge branch 'develop' into remove-party-status 2017-02-02 15:42:04 +05:30
Kanchan Chauhan
3e2ecc3423 [Fix] Account filter in Process Payroll and Salary Component 2017-02-02 14:41:48 +05:30
Nabin Hait
6b9902627d Merge pull request #7638 from rohitwaghchaure/gross_profit_report_issue
[Fix] Buying rate in gross profit report
2017-02-02 13:41:32 +05:30
Nabin Hait
c62362f064 Merge pull request #7649 from KanchanChauhan/salary-struct-fix
[Fix] Employee name fixes in Salary Structure
2017-02-02 13:30:05 +05:30
Kanchan Chauhan
a0314f19ca [Fix] Employee name fixes in Salary Structure 2017-02-02 12:56:56 +05:30
Neil Trini Lasrado
4aabe61197 Patch for renaming evaluation criteria 2017-02-01 19:32:28 +05:30
Saurabh
10eb123b49 Merge pull request #7645 from rohitwaghchaure/pos_minor_fix
Minor fix
2017-02-01 19:26:47 +05:30
Rohit Waghchaure
69060a8177 Minor fix 2017-02-01 19:14:53 +05:30
Neil Trini Lasrado
749516c22d Renamed Evaluation Criteria to Assessment Criteria 2017-02-01 18:47:36 +05:30
Rushabh Mehta
3714626dd0 [minor] enhance BOM view 2017-02-01 18:35:53 +05:30
KanchanChauhan
98595dff0b Merge pull request #7642 from frappe/revert-7641-employee-loan-fix
Revert "[Fix] Rate of Interest Fix"
2017-02-01 18:17:18 +05:30
KanchanChauhan
b499fe91fa Revert "[Fix] Rate of Interest Fix" 2017-02-01 18:16:35 +05:30
rohitwaghchaure
c13dbd408f [Enhancement] POS Redesign (#7639)
* item group, discount

* POS Redesign

* offline customer

* removed offline records from modal view
2017-02-01 18:07:22 +05:30
KanchanChauhan
929c3890a4 Merge pull request #7641 from KanchanChauhan/employee-loan-fix
[Fix] Rate of Interest Fix
2017-02-01 18:06:32 +05:30
KanchanChauhan
0e995adc44 Salary Structure Employee custom field can be used in Formula and Condition (#7615) 2017-02-01 18:05:57 +05:30
Kanchan Chauhan
f01c1c2a9d [Fix] Rate of Interest Fix 2017-02-01 18:05:26 +05:30
KanchanChauhan
3dc96cf71e Merge pull request #7640 from KanchanChauhan/remove-date-validation-salary-structure
[Minor] From Date validation removed from Salary Structure
2017-02-01 17:42:18 +05:30
Kanchan Chauhan
e67e2e6fee [Minor] From Date validation removed from Salary Structure 2017-02-01 17:41:36 +05:30
Rohit Waghchaure
38f808cfae [Fix] Buying rate in gross profit report 2017-02-01 13:34:06 +05:30
rohitwaghchaure
ea092a7b24 [Enhancement] Booking of an employee's expense claim (#7267)
* [Enhancement] Auto book of an employee's expense claim

* test cases

* documentation

* fixes and changes

* removed payable from employee and added into the company

* Added party in account, patch to update party type for customer and supplier accounts

* added party type in erpnext, fix patch

* fixed travis
2017-02-01 12:02:08 +05:30
Rushabh Mehta
587dd90182 [minor] removed customer status 2017-02-01 12:01:24 +05:30
Rushabh Mehta
99ce531beb [minor] css for team updates 2017-02-01 11:46:47 +05:30
Neil Trini Lasrado
d408553b93 Merge pull request #7623 from neilLasrado/guardian
Added Student table in Guardian (Only rendered for display purpose)
2017-01-31 18:18:50 +05:30
Neil Trini Lasrado
ebfb7ff027 Merge pull request #7625 from neilLasrado/student-batch
Added Mark Assessment Result Button in assessment plan
2017-01-31 18:18:32 +05:30
Neil Trini Lasrado
879a2d84dc Added Evaluation Criteria Group 2017-01-31 17:03:37 +05:30
Neil Trini Lasrado
477c88450f UI fixes for Guardian Doctype 2017-01-31 16:49:39 +05:30
Neil Trini Lasrado
9071bcbfa8 Added Student table in Guardian (Only rendered for display purpose) 2017-01-31 16:36:29 +05:30
Rushabh Mehta
7ec4b717ed [feature] added team updates page 2017-01-31 11:42:58 +05:30
Rohit Waghchaure
d9a265fab1 Merge branch 'develop' of github.com:frappe/erpnext into develop 2017-01-31 11:34:07 +05:30
Neil Trini Lasrado
1947aca2a8 Added Mark Assessment Result Button in assessment plan 2017-01-30 18:34:25 +05:30
Neil Trini Lasrado
ba96ce7dd5 Merge pull request #7616 from neilLasrado/assessment-validations
Patch fix for Update Assessment Module Patch
2017-01-30 17:50:37 +05:30
Neil Trini Lasrado
fd1767d2ea Patch fix for Update Assessment Module Patch 2017-01-30 17:50:05 +05:30
Rushabh Mehta
4500f7b4d6 [cleanup] remove unused LMS (#7612) 2017-01-30 17:04:38 +05:30
Neil Trini Lasrado
455824235a Merge pull request #7613 from neilLasrado/assessment-validations
Patch fix for Update Assessment Module Patch
2017-01-30 16:41:46 +05:30
Neil Trini Lasrado
ab1ee1e6fc Patch fix for Update Assessment Module Patch 2017-01-30 16:40:14 +05:30
Neil Trini Lasrado
dbd95936ea Merge pull request #7610 from neilLasrado/assessment-validations
Validations for Assessment Plan
2017-01-30 15:51:08 +05:30
Neil Trini Lasrado
80ca65c166 Added validation to ensure that the Sum of Scores of evaluation Criteras is equal to the max assessment score. 2017-01-30 15:28:41 +05:30
KanchanChauhan
fbaa6197f9 Employee Loan Management (#7126)
* [WIP] Employee Loan Management

* EMI calculation

* Fixing PR
2017-01-30 15:15:58 +05:30
Rushabh Mehta
364f48aad2 [minor] fix patch 2017-01-30 13:23:09 +05:30
Rushabh Mehta
87037bdd56 [minor] remove party status as it leads to duplicate notifications fixes #7346, also fix for #7568 2017-01-30 13:22:51 +05:30
Makarand Bauskar
d893efd0a9 [minor] replace object values in translations (#7602) 2017-01-30 12:35:34 +05:30
rohitwaghchaure
3b40098738 Merge pull request #7571 from RicardoJohann/projectfilter
added project filter to gl and carry project filter from P&L
2017-01-30 12:24:36 +05:30
Rohit Waghchaure
b327429db7 [Fix] Allow data import tool for cost center 2017-01-30 11:34:29 +05:30
rohitwaghchaure
0bdffa8130 Merge pull request #7533 from mbauskar/minor-fixes
[WIP] Address and Contact Fixes
2017-01-30 11:13:10 +05:30
mbauskar
16ce3623bc [fixes] set lead to Null on delete company transaction & other minor fixes 2017-01-30 10:45:28 +05:30
mbauskar
51b1d6de48 [minor] moved the address_and_contact utils to frappe 2017-01-30 10:45:28 +05:30
mbauskar
7fa039f15c [fixes] delete company transaction and other minor fixes 2017-01-30 10:45:28 +05:30
mbauskar
83f4780f74 [Fixes] Address and Contact fixes 2017-01-30 10:45:28 +05:30
mbauskar
8271b4c564 [minor] fixes in address filters 2017-01-30 10:45:28 +05:30
mbauskar
cbc49e2989 [WIP] Address and Contact Fixes 2017-01-30 10:45:28 +05:30
rohitwaghchaure
531b49f6c7 Merge pull request #7590 from KanchanChauhan/rename-task
[Minor]Task rename now possible
2017-01-30 09:29:10 +05:30
KanchanChauhan
2dfb90a922 Merge pull request #7565 from KanchanChauhan/leave-balance-report-fix
[Fix] Permissions to view Leave Balance Report
2017-01-29 21:07:02 +05:30
Rohit Waghchaure
92c9ad8c72 Merge branch 'master' into develop 2017-01-28 14:14:33 +05:30
KanchanChauhan
ecc44e506b Merge pull request #7597 from neilLasrado/guarding-name
Fixes to update student guardian name patch
2017-01-27 17:45:57 +05:30
Neil Trini Lasrado
6d0da98a78 Fixes to update student guardian name patch 2017-01-27 17:44:28 +05:30
KanchanChauhan
4db5dd3cc2 Merge pull request #7591 from neilLasrado/guarding-name
Added Guardian Name to Student Master
2017-01-27 17:31:22 +05:30
Neil Trini Lasrado
7ff5682193 Merge branch 'develop' into guarding-name 2017-01-27 16:54:50 +05:30
Neil Trini Lasrado
f36ff488c0 Added Guardian Name to Student Master 2017-01-27 16:53:55 +05:30
Rushabh Mehta
e239d4dfe9 Merge branch 'master' into develop 2017-01-27 16:18:26 +05:30
Rushabh Mehta
b5eaf324b3 Merge branch 'master' into develop 2017-01-27 16:03:30 +05:30
Rushabh Mehta
710dc5392f [merge] 2017-01-27 15:48:31 +05:30
KanchanChauhan
173fe24ef4 Merge pull request #7594 from neilLasrado/student-batch
Added 'Active' checkbox in list view for Student Batch and Student Group
2017-01-27 14:56:58 +05:30
Neil Trini Lasrado
7326217ab5 Added 'Active' checkbox in list view for Student Batch and Student Group 2017-01-27 14:50:48 +05:30
KanchanChauhan
6c85ad9726 Merge pull request #7593 from neilLasrado/student-batch
Fix- Student batch strength in Batch Wise attendance report
2017-01-27 14:18:40 +05:30
Neil Trini Lasrado
8c3fb43d8a Fix- Student batch strength in Batch Wise attendance report 2017-01-27 14:13:25 +05:30
Kanchan Chauhan
3dd85a0e9e Task rename now possible 2017-01-27 12:34:06 +05:30
Kanchan Chauhan
e877ecfb7b [Fix] Permissions to view Leave Balance Report 2017-01-27 11:53:56 +05:30
noussh
425d7adcdd Update recurring-orders-and-invoices.md 2017-01-26 15:38:57 +04:00
noussh
0350db6a4e added next link 2017-01-26 15:35:01 +04:00
noussh
1e86546e2c added the link 2017-01-26 12:53:45 +04:00
noussh
6396c90956 Update multi-currency-accounting.md 2017-01-26 12:52:29 +04:00
noussh
47fbc7efa5 adde the next page link 2017-01-26 12:50:34 +04:00
noussh
8b62626cec Wrong path updated 2017-01-25 19:44:32 +04:00
Nabin Hait
57e4ab70be Merge pull request #7580 from KanchanChauhan/calendar-manual-screenshots
New screenshots for Calendar user manual
2017-01-25 17:35:01 +05:30
Kanchan Chauhan
ce116417e1 New screenshots for Calendar user manual 2017-01-25 15:38:35 +05:30
robert schouten
67eff49516 [fix] compact print format not longer ignores format builder 2017-01-25 08:20:43 +08:00
Ricardo Johann
34354237fd added project filter to gl and carry project filter from P&L 2017-01-24 06:46:07 -03:00
vrms
1f1f56225c Update warehouse.md (#7544)
added some detail about link between Warehouse & Warehouse account & machanics of sub-warehousese (Warehouse >Room >Row > Shelf >box
2017-01-24 11:29:27 +05:30
KanchanChauhan
4333ce0fd8 Merge pull request #7569 from neilLasrado/assessment
Fix for update assessment modules patch
2017-01-24 10:52:50 +05:30
rohitwaghchaure
8452e60204 Merge pull request #7566 from KanchanChauhan/naming-series-fix
[Fix] Naming series issue fix
2017-01-24 10:31:33 +05:30
Neil Trini Lasrado
15c5ae0918 Fix for update assessment modules patch 2017-01-24 10:28:49 +05:30
Kanchan Chauhan
679cc23abb [Fix] Naming series issue fix 2017-01-23 17:20:55 +05:30
rohitwaghchaure
ab65f6d8b1 Merge pull request #7547 from mnatalia/develop
Added translations to the web page and item dashboard.
2017-01-23 15:57:33 +05:30
KanchanChauhan
d825409226 Merge pull request #7564 from neilLasrado/patch-fix
Fix for update assessment modules patch
2017-01-23 15:46:57 +05:30
Neil Trini Lasrado
d471ad2c45 Fix for update assessment modules patch 2017-01-23 14:59:19 +05:30
Rushabh Mehta
397e508fc0 [fix] sales_partner.js, fixes #7553 2017-01-21 16:58:57 +05:30
Nabin Hait
2a660fb695 Merge pull request #7551 from neilLasrado/assessment
Added ability to disable a student in student group/student batch
2017-01-20 20:10:38 +05:30
Nabin Hait
1f9d1bb877 Merge branch 'develop' into assessment 2017-01-20 20:09:44 +05:30
Neil Trini Lasrado
16d40cf0a3 Added ability to disable a student in student group/studnet batch 2017-01-20 19:33:09 +05:30
Nabin Hait
349d520ae2 Fixed merge conflict 2017-01-20 15:44:35 +05:30
mnatalia
e09407571c Added translations to the web page and item dashboard. 2017-01-20 12:00:25 +02:00
Nabin Hait
188f9da160 Merge pull request #7530 from KanchanChauhan/website-default-warehouse
[Minor] Set website warehouse as default warehouse
2017-01-20 12:11:42 +05:30
Kanchan Chauhan
03dc695c77 [Minor] Set website warehouse as default warehouse 2017-01-19 14:57:05 +05:30
Rushabh Mehta
c81621d3ce [minor] add progress bar in patch 2017-01-19 14:32:36 +05:30
Rushabh Mehta
00d3cd6d64 [fix] contact address link patch 2017-01-19 14:27:02 +05:30
Rushabh Mehta
818af75575 [patch] add patch for contact_address_update 2017-01-19 13:08:46 +05:30
Rushabh Mehta
d69fd1b8c0 [fix] update_salary_slip.py 2017-01-19 12:51:37 +05:30
Rushabh Mehta
683d98fd54 [fix] update_salary_slip.py 2017-01-19 12:48:03 +05:30
Rushabh Mehta
35e4d8b152 [fix] update_salary_slip.py 2017-01-19 12:47:27 +05:30
Rushabh Mehta
60908f4a08 [fix] update_salary_slip.py 2017-01-19 12:46:11 +05:30
Rushabh Mehta
26fdb113a8 [fix] update_salary_slip.py 2017-01-19 12:44:54 +05:30
Nabin Hait
eb80fdef82 Merge pull request #7520 from RobertSchouten/heatmap_limit_dev
[fix] accounts heatmaps now covering 366 days not 20
2017-01-19 09:15:20 +05:30
Nabin Hait
6b3670848e Merge pull request #7477 from rmehta/custom-perms
[minor] fix for custom perms
2017-01-18 17:03:58 +05:30
Rushabh Mehta
a0c41b70c4 [fix] tax rule test 2017-01-18 14:14:20 +05:30
robert schouten
c0888637cc [fix] accounts heatmaps now covering 366 days not 20 2017-01-18 15:25:58 +08:00
Rushabh Mehta
8f55d6bf3a [fix] test_shopping_cart.py 2017-01-17 22:15:17 +05:30
Rushabh Mehta
d14a6c058a [fix] stop recursion while adding role 2017-01-17 18:46:37 +05:30
Rushabh Mehta
982be9f11b [tests] fixed for shopping cart 2017-01-17 17:57:38 +05:30
Rushabh Mehta
7385b73449 [fix] test 2017-01-17 17:57:38 +05:30
Nabin Hait
dd839055e3 Fixed merge conflict 2017-01-17 15:52:56 +05:30
Nabin Hait
f8676b2058 Create Material Requests considering projected qty of items 2017-01-17 14:11:43 +05:30
Ben Cornwell-Mott
5597f6a830 Fixes counting of in stock parent assemblies and formatting of csv 2017-01-17 14:11:43 +05:30
Nabin Hait
1c91dc4589 Merge pull request #7475 from RobertSchouten/profitability_order
[fix] profiability analasyis orderby name
2017-01-17 12:39:24 +05:30
Nabin Hait
9e294ee454 Merge branch 'rfq_supplier_pull' into develop 2017-01-17 12:26:09 +05:30
Nabin Hait
2ad62c2892 In RFQ, get items from material requests based on possible supplier 2017-01-17 12:25:33 +05:30
Rushabh Mehta
592104ef68 [fix] tests 2017-01-17 12:06:53 +05:30
Nabin Hait
7c7b3c0ab4 Merge pull request #7465 from KanchanChauhan/attendance-enhancement
[Enhancement] Attendance Module
2017-01-17 11:47:02 +05:30
Nabin Hait
2dab8809e7 Merge pull request #7509 from kickapoo/develop
Add Full Name as option in HR Setting Employee creation option
2017-01-17 11:26:25 +05:30
Nabin Hait
bf01958b85 Merge pull request #7510 from dalwadani/develop
fix string translation
2017-01-17 11:12:15 +05:30
Nabin Hait
2f2b6df781 Merge pull request #7411 from KanchanChauhan/fleet-moved-to-hr
Fleet management moved to HR
2017-01-17 11:06:00 +05:30
Nabin Hait
b064cf39c2 Merge branch 'develop' into fleet-moved-to-hr 2017-01-17 11:05:39 +05:30
Nabin Hait
03f82240fa Merge pull request #7222 from neilLasrado/assessment
Redesign Assessment Module
2017-01-17 11:04:02 +05:30
Dhaifallah Alwadani
9375d1dfeb fix string translation 2017-01-16 04:05:40 -08:00
Stavros Anastasiadis
241e478dc0 Add Full Name as option in HR Setting Employee creation option 2017-01-16 14:02:28 +02:00
Rushabh Mehta
ffd80a6061 [fix] warehouse test cases 2017-01-16 17:23:20 +05:30
Rushabh Mehta
6695830f3f [fix] warehouse test cases 2017-01-16 16:57:53 +05:30
Kanchan Chauhan
f80c2b9606 Fleet management moved to HR 2017-01-16 14:38:24 +05:30
Rushabh Mehta
8d39fd9790 [fix] address queries + tests 2017-01-16 13:06:15 +05:30
Nabin Hait
120461efef Merge branch 'master' into develop 2017-01-16 13:04:54 +05:30
KanchanChauhan
b89be1e193 [Minor] Demo fixes (#7499) 2017-01-16 12:57:14 +05:30
Neil Trini Lasrado
38bd62d82d Merge branch 'develop' into assessment 2017-01-16 12:23:51 +05:30
Rushabh Mehta
4ad121e1a4 [minor] fixes for Contact 2017-01-16 12:19:21 +05:30
ci2014
820abd3ba4 Fix missing comma (#7495)
Fixed missing comma after method set_contact_link
2017-01-16 11:57:34 +05:30
Rushabh Mehta
95439db53f [fixes] address and contact 2017-01-14 00:25:22 +05:30
Rushabh Mehta
c0bfb0ba56 [fix] contact and address for demo 2017-01-13 23:05:56 +05:30
Rushabh Mehta
b92087cb2d [cleanup] move contact, address to frappe 💥 2017-01-13 18:54:47 +05:30
Nabin Hait
448acf6f46 Merge branch 'master' into develop 2017-01-13 17:30:46 +05:30
Nabin Hait
26ac85be5b Merge branch 'master' into develop 2017-01-13 17:10:52 +05:30
robert schouten
7a3d418aa5 Email inbox based off of frappe email inbox pr (#7308)
* email inbox

* inbox fixes

* separate email-inbox to pass tests

* separate email-inbox to pass tests

* fix import

* add more info to contact and address
2017-01-13 14:51:09 +05:30
Rushabh Mehta
af077dc616 [minor] fix for custom perms 2017-01-13 14:47:37 +05:30
Nabin Hait
b251cd4ccb Fixed merge conflict 2017-01-13 14:34:54 +05:30
robert schouten
1a92d54dcb [fix] profiability analasyis orderby cost center name 2017-01-13 14:52:11 +08:00
Nabin Hait
ba2a76cfb7 Merge pull request #7453 from KanchanChauhan/salary-register-report
Changes to Salary Register
2017-01-13 11:51:48 +05:30
Nabin Hait
007c87ea63 Merge pull request #7440 from nabinhait/gle_repost_optimization
Optimization to reduce GLE reposting time for future stock transactions
2017-01-13 11:33:42 +05:30
Nabin Hait
4440ac037f Merge pull request #7470 from frappe/forellana-digithinkit-patch-1
[FIX] Contact form breaks on existing lead
2017-01-13 11:29:10 +05:30
robert schouten
d56627f2b7 [fix] profiability analasyis orderby project name 2017-01-13 11:53:43 +08:00
Felipe Orellana
ac81440a81 [FIX] Contact form breaks on existing lead
When an email address from the contacts form is from a existing lead utils.py tries to set new_lead(an undefined var) as the lead reference if a lead is found.
2017-01-12 12:08:20 -05:00
Kanchan Chauhan
7933eb685c [Enhancement] Attendance Module 2017-01-12 17:24:53 +05:30
bcornwellmott
5dfffe7586 Merge pull request #7449 from RicardoJohann/rename_ss
allowed rename salary structure
2017-01-11 09:15:03 -08:00
Kanchan Chauhan
2f3ae914a6 Changes to Salary Register 2017-01-11 19:45:01 +05:30
Ben Cornwell-Mott
1cd7e54822 Adds button to find MRs linked to Supplier 2017-01-11 03:05:49 -08:00
RicardoJohann
7182de7684 allowed rename salary structure 2017-01-11 06:28:59 -02:00
Ben Cornwell-Mott
3d491f90cc Created 2 reports for stock details 2017-01-10 14:14:18 -08:00
Neil Trini Lasrado
2a9e0f6fd8 Added assessment result tool 2017-01-10 17:32:02 +05:30
Nabin Hait
9e08ccdf39 Merge pull request #7425 from KanchanChauhan/sync-projecttask-task
Sync Project Task and Task
2017-01-10 17:26:51 +05:30
Kanchan Chauhan
4a15fa4c86 Sync Project Task and Task 2017-01-10 16:01:38 +05:30
Rushabh Mehta
d40e661ebd [style] better demo start page 2017-01-10 14:46:54 +05:30
Nabin Hait
51d45d8bce Fixed merge conflict 2017-01-10 12:32:01 +05:30
Nabin Hait
b083591164 Merge pull request #7418 from frappe/revert-7409-daterangecontrol
Revert "proposed usage of daterange picker"
2017-01-10 12:20:14 +05:30
Nabin Hait
01baceb74e Revert "proposed usage of daterange picker" 2017-01-10 12:19:48 +05:30
Neil Trini Lasrado
5a30467ae5 Added test case 2017-01-09 18:26:03 +05:30
Neil Trini Lasrado
a56224c03a Rename Assessment to Assessment Plan 2017-01-09 18:26:03 +05:30
Neil Trini Lasrado
233ecfdd9c Renamed min_score to threshold in Grading Scale 2017-01-09 18:26:03 +05:30
Neil Trini Lasrado
577cfd559f Removed LMS code in Course master 2017-01-09 18:26:03 +05:30
Neil Trini Lasrado
5c87455918 Patch for assessment module redesign 2017-01-09 18:26:03 +05:30
Neil Trini Lasrado
06ed74dc7c Redesign Assessment Module 2017-01-09 18:26:02 +05:30
Nabin Hait
6e9d2a3c1f fixed conflict 2017-01-09 17:21:34 +05:30
Nabin Hait
23b836dcdb Merge pull request #7386 from arvindstutzen/patch-1
Update step-8-customer-names.md
2017-01-09 15:55:38 +05:30
Nabin Hait
297ae85c31 Merge pull request #7409 from RobertSchouten/daterangecontrol
proposed usage of daterange picker
2017-01-09 15:55:17 +05:30
nick9822
6f48d4be1c whitelisted erpnext.stock.utils.get_stock_balance (#7402)
whitelisted erpnext.stock.utils.get_stock_balance with respect to
https://github.com/frappe/erpnext/issues/7364
2017-01-09 12:12:36 +05:30
robert schouten
81130e848e proposed usage of daterange picker 2017-01-09 08:38:27 +08:00
Rushabh Mehta
8b133ac087 [minor] [tests] fix, tests will fail on the 5th of a month! 2017-01-06 17:21:04 +05:30
Nabin Hait
7b4bdffea2 Merge pull request #7385 from bhupennewalkar1337/quot
Fix#6590  Now you can make quotation from supplier quotation
2017-01-05 14:58:52 +05:30
Nabin Hait
59a67c3586 Update supplier_quotation.py 2017-01-05 14:58:30 +05:30
Arvind Subramanian
efc9372f46 Update step-8-customer-names.md 2017-01-05 08:34:58 +05:30
bhupen
107099aac9 you can make quotation from supplier quotation 2017-01-04 17:04:12 +05:30
Nabin Hait
d08c248642 Merge pull request #7354 from Scheercuzy/enlarge-item-image-website
Hyperlink on item image on website
2017-01-04 15:58:44 +05:30
britlog
35cefb1275 fix success_list if http status == 200 + utf-8 support + optional success message 2017-01-04 15:53:26 +05:30
Nabin Hait
8281b36a26 Merge pull request #7380 from KanchanChauhan/emailid-to-emailaddress
Email ID renamed to Email Address
2017-01-04 15:46:48 +05:30
Nabin Hait
f45851c245 Merge pull request #7379 from KanchanChauhan/accounts-reports
[Enhancement] Summary link on Accounts Payable and Accounts Receivable
2017-01-04 15:45:39 +05:30
Nabin Hait
96562e3eb7 Merge pull request #7362 from rmehta/minor-fixes
[minor] dont get warehouse in opening entry #7353
2017-01-04 15:42:23 +05:30
Nabin Hait
3051a3dd97 Fixed test case for margin 2017-01-04 15:11:58 +05:30
Kanchan Chauhan
b7cc393eb8 Email ID renamed to Email Address 2017-01-03 16:45:38 +05:30
Kanchan Chauhan
f4832cf2b9 [Enhancement] Summary link on Accounts Payable and Accounts Receivable 2017-01-03 16:29:41 +05:30
Scheercuzy
7c161cfff2 Merge remote-tracking branch 'frappe/develop' into enlarge-item-image-website 2017-01-03 16:03:43 +06:30
Nabin Hait
ab42fc006f Merge branch 'master' into develop 2017-01-02 17:26:55 +05:30
KanchanChauhan
4601fdd98d Better Salary Slip logs in Process Payroll (#7322) 2016-12-30 16:26:55 +05:30
Nabin Hait
9784d27317 Optimization to reduce GLE reposting time for future stock transactions 2016-12-30 16:21:35 +05:30
Nabin Hait
ce5f942678 Merge branch 'master' into develop 2016-12-30 15:54:32 +05:30
Rushabh Mehta
985cb8226d [minor] dont get warehouse in opening entry #7353 2016-12-30 15:06:54 +05:30
Nabin Hait
e97d40806f Merge branch 'master' into develop 2016-12-30 14:56:20 +05:30
Rushabh Mehta
a8326de4d0 [fix] on_update in item.py 2016-12-30 06:17:45 +05:30
Rushabh Mehta
2097ccfaea [fix] item_group.py #7358 2016-12-30 06:09:41 +05:30
Scheercuzy
f483582957 Hyperlink Item Image
added hyperlink on item image
2016-12-29 18:56:44 +06:30
Nabin Hait
f327a58b7f Merge branch 'master' into develop 2016-12-29 11:04:05 +05:30
Nabin Hait
2469f247df Merge pull request #7341 from StrellaGroup/develop
Fixed spelling errors on Production Planning Tool and manual.
2016-12-28 17:12:01 +05:30
Nabin Hait
392806c0d4 Merge pull request #7342 from neilLasrado/develop
Added Guardian to school module
2016-12-28 16:26:16 +05:30
Neil Trini Lasrado
986927ca98 Added Guardian to school module 2016-12-28 16:15:35 +05:30
Muhammad Huzaifah Bin Ismail
465da8ce09 Fixed spelling errors on Production Planning Tool and manual. 2016-12-28 18:15:45 +08:00
Nabin Hait
340c9d327a Merge pull request #7339 from neilLasrado/develop
[Fix] Student Monthly Attendance Sheet
2016-12-28 13:42:18 +05:30
Neil Trini Lasrado
0152516ba4 [Fix] Student Monthly Attendance Sheet 2016-12-28 13:01:14 +05:30
Rushabh Mehta
5cb1b6bf3f [minor] translation fix 2016-12-27 16:30:20 +05:30
Nabin Hait
3bcf9b5e70 Fixed merge conflict 2016-12-27 14:30:17 +05:30
Rushabh Mehta
512b85e040 [minor] replace autocomplete with awesomplete 2016-12-27 12:14:37 +05:30
Rushabh Mehta
e60c2c7b7a [minor] dashboard cleanups 2016-12-27 12:14:37 +05:30
Nabin Hait
9007815ddc Merge pull request #7326 from neilLasrado/develop
Improved Student Dashboard
2016-12-26 18:33:19 +05:30
Neil Trini Lasrado
22239ac610 Improved Student Dashboard 2016-12-26 17:14:16 +05:30
Nabin Hait
88817b40df Merge pull request #7284 from mntechnique/develop
Report : Batch Item Expiry Status
2016-12-26 16:10:46 +05:30
Nabin Hait
4573029a5e Merge pull request #7292 from frappe/bcornwellmott-patch-1
Add hours to calendar labels
2016-12-26 16:09:11 +05:30
Nabin Hait
0631d516ce Merge pull request #7290 from netchampfaris/pos-item-area-scroll
pos item area scrollable
2016-12-26 16:07:38 +05:30
Nabin Hait
488ad54bbc Merge pull request #7280 from neilLasrado/leave
Added mark as present to student leave application
2016-12-26 16:06:44 +05:30
Nabin Hait
0d49cdf024 Merge pull request #7324 from nabinhait/lcv_testcase
[test] Fixed test cases for LCV
2016-12-26 15:52:40 +05:30
Neil Trini Lasrado
df4b9ab630 Optimised code for Student Monthly Attendance Report 2016-12-26 15:40:01 +05:30
Nabin Hait
7b2177a544 [test] Fixed test cases for LCV 2016-12-26 15:31:05 +05:30
Neil Trini Lasrado
94f42ea145 Added from date and to date to student leave application 2016-12-26 12:09:27 +05:30
Neil Trini Lasrado
9a7cb6ce92 Added mark as present to student leave application 2016-12-26 12:09:27 +05:30
Nabin Hait
61a190dd69 Merge branch 'master' into develop 2016-12-24 11:01:26 +05:30
Nabin Hait
ba95fc4fa0 Fixed version conflict 2016-12-23 17:44:05 +05:30
Nabin Hait
c2d66bdfb2 Merge branch 'master' into develop 2016-12-23 16:45:09 +05:30
Nabin Hait
aa2d949f61 Merge pull request #7295 from bhupennewalkar1337/lcv
Fix#3717  entering amount in lcv is enabled
2016-12-23 15:49:07 +05:30
Nabin Hait
1e1e28b0ae Update landed_cost_voucher.js 2016-12-23 15:48:57 +05:30
Nabin Hait
06c6628481 Merge pull request #7279 from KanchanChauhan/automate-user-creation
Create User button in Employee if no User ID selected
2016-12-23 15:31:55 +05:30
Nabin Hait
0177c02c0f Merge pull request #7286 from rohitwaghchaure/pos_letter_head_issue
minor fix
2016-12-23 15:19:32 +05:30
bhupen
a83de5eac1 applicabe charges field is now editable 2016-12-22 16:24:14 +05:30
bhupen
914ae77a22 Limit instead of Allowance in stock settings 2016-12-22 16:24:14 +05:30
bhupen
5bb85e7a95 partially orderd status will be shown in material request 2016-12-22 16:24:14 +05:30
bcornwellmott
e549984a42 Grabs title from SQL
Gets a concatenated title label for the Calendar event that includes the number of hours
2016-12-21 12:36:45 -08:00
bcornwellmott
3385bd4921 Add hours to label in calendar view
Adds a label for the number of hours to each calendar event
2016-12-21 12:33:32 -08:00
Faris Ansari
0822e41f96 pos item area scrollable 2016-12-21 18:17:00 +05:30
Revant Nandgaonkar
1c00b1fb21 Merge branch 'develop' of https://github.com/frappe/erpnext into develop 2016-12-21 18:01:35 +05:30
Rushabh Mehta
0632ee3da9 Merge branch 'v7.2.0-beta' into develop 2016-12-21 17:31:09 +05:30
Rushabh Mehta
c6bd7ade2f [fix] inclusive tax + total bug and cleanup in stock entry get_uom, fixes #7253 2016-12-21 17:30:29 +05:30
Kanchan Chauhan
58ed0c6efa Create User button in Employee if no User ID selected 2016-12-21 16:18:59 +05:30
Revant Nandgaonkar
00e65cb70b Report - Batch Item Expiry Status
Changed column name `Expiry Status` to `Expiry (In Days)`
Changed column type from Data to Int
2016-12-21 14:21:53 +05:30
Rohit Waghchaure
d567e57f82 minor fix 2016-12-21 13:18:36 +05:30
Revant Nandgaonkar
c30ae28422 Merge branch 'develop' of https://github.com/frappe/erpnext into develop 2016-12-21 12:52:23 +05:30
Revant Nandgaonkar
0766d3e67e Report : Batch Item Expiry Status
Select From Date and To Date
Lists Items about to expire or already expired
Expiry Status column shows number of days in which item/batch will expire
2016-12-21 12:32:12 +05:30
Nabin Hait
e7939fd87b Merge branch 'master' into develop 2016-12-21 12:18:38 +05:30
Nabin Hait
2b8aafb08d Merge pull request #7276 from neilLasrado/develop
Allow Data Import for Student Guardian
2016-12-21 11:17:13 +05:30
rohitwaghchaure
34e820d02d [Enhancement] Added letter head for the report (#7250) 2016-12-20 16:54:24 +05:30
Rushabh Mehta
17d05b4fd7 Merge branch 'v7.2.0-beta' into develop 2016-12-20 12:59:29 +05:30
Rushabh Mehta
89af62a680 Merge branch 'v7.2.0-beta' into develop 2016-12-20 12:21:03 +05:30
Neil Trini Lasrado
8979e1c7a5 Allow Data Import for Student Guardian 2016-12-20 11:53:52 +05:30
Nabin Hait
f573d43b90 fixed version conflict 2016-12-20 11:40:15 +05:30
Rushabh Mehta
f944fb9e46 Merge branch 'v7.2.0-beta' into develop 2016-12-19 17:06:56 +05:30
Rushabh Mehta
688f2284af [minor] [patch] 2016-12-19 13:15:52 +05:30
Rushabh Mehta
a320b1a494 Merge branch 'v7.2.0-beta' into develop 2016-12-19 12:32:44 +05:30
Rushabh Mehta
e80208e6e5 Merge branch 'v7.2.0-beta' into develop 2016-12-19 12:02:14 +05:30
Rushabh Mehta
6fc6670a25 Delete zh-tw.csv (#7260) 2016-12-19 11:57:59 +05:30
Nabin Hait
c9b6a07732 [fix] Remove recurring id on amendment only if it is same as amended_from 2016-11-16 18:43:44 +05:30
1706 changed files with 223681 additions and 113691 deletions

137
.eslintrc Normal file
View File

@@ -0,0 +1,137 @@
{
"env": {
"browser": true,
"node": true,
"es6": true
},
"extends": "eslint:recommended",
"rules": {
"indent": [
"error",
"tab",
{ "SwitchCase": 1 }
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"off"
],
"semi": [
"warn",
"always"
],
"camelcase": [
"off"
],
"no-unused-vars": [
"warn"
],
"no-redeclare": [
"warn"
],
"no-console": [
"warn"
],
"no-extra-boolean-cast": [
"off"
],
"no-control-regex": [
"off"
],
"spaced-comment": [
"warn"
],
"no-trailing-spaces": [
"warn"
]
},
"root": true,
"globals": {
"frappe": true,
"erpnext": true,
"schools": true,
"$": true,
"jQuery": true,
"moment": true,
"hljs": true,
"Awesomplete": true,
"CalHeatMap": true,
"Sortable": true,
"Showdown": true,
"Taggle": true,
"Gantt": true,
"Slick": true,
"PhotoSwipe": true,
"PhotoSwipeUI_Default": true,
"fluxify": true,
"io": true,
"c3": true,
"__": true,
"_p": true,
"_f": true,
"repl": true,
"Class": true,
"locals": true,
"cint": true,
"cstr": true,
"cur_frm": true,
"cur_dialog": true,
"cur_page": true,
"cur_list": true,
"cur_tree": true,
"msg_dialog": true,
"is_null": true,
"in_list": true,
"has_common": true,
"has_words": true,
"validate_email": true,
"get_number_format": true,
"format_number": true,
"format_currency": true,
"round_based_on_smallest_currency_fraction": true,
"roundNumber": true,
"comment_when": true,
"replace_newlines": true,
"open_url_post": true,
"toTitle": true,
"lstrip": true,
"strip": true,
"strip_html": true,
"replace_all": true,
"flt": true,
"precision": true,
"md5": true,
"CREATE": true,
"AMEND": true,
"CANCEL": true,
"copy_dict": true,
"get_number_format_info": true,
"print_table": true,
"Layout": true,
"web_form_settings": true,
"$c": true,
"$a": true,
"$i": true,
"$bg": true,
"$y": true,
"$c_obj": true,
"$c_obj_csv": true,
"refresh_many": true,
"refresh_field": true,
"toggle_field": true,
"get_field_obj": true,
"get_query_params": true,
"unhide_field": true,
"hide_field": true,
"set_field_options": true,
"getCookie": true,
"getCookies": true,
"get_url_arg": true,
"get_server_fields": true,
"set_multiple": true,
"QUnit": true
}
}

View File

@@ -1,61 +1,36 @@
##General Overview
### Introduction (first timers)
We have three branches where all the work happens:
Thank you for your interest in raising an Issue with ERPNext. An Issue could mean a bug report or a request for a missing feature. By raising a bug report, you are contributing to the development of ERPNext and this is the first step of participating in the community. Bug reports are very helpful for developers as they quickly fix the issue before other users start facing it.
* **master** - This is the stable branch based on which we do releases. This branch is for production.
* **develop** - This is an unstable branch for development purposes, it has bleeding edge features and fixes, but it's not recommended for production. Bug fixes and new features go here.
* **hotfix** - This is a branch dedicated to hotfixes on the master branch. Urgent bug fixes go here.
Feature requests are also a great way to take the product forward. New ideas can come in any user scenario and the issue list also acts a roadmap of future features.
When you are raising an Issue, you should keep a few things in mind. Remember that the developer does not have access to your machine so you must give all the information you can while raising an Issue. If you are suggesting a feature, you should be very clear about what you want.
Once we deem the develop branch to be stable, we merge it into the master and do a major release. The hotfix branch is solely for making urgent bug fixes on the current master branch, which we then merge into master.
The Issue list is not the right place to ask a question or start a general discussion. If you want to do that , then the right place is the forum [https://discuss.erpnext.com](https://discuss.erpnext.com).
We almost never push directly to master.
### Reply and Closing Policy
If your issue is not clear or does not meet the guidelines, then it will be closed. If it is closed, please supply the information asked and re-open it.
***
### General Issue Guidelines
1. **Search existing Issues:** Before raising a Issue, search if it has been raised before. Maybe add a 👍 or give additional help by creating a mockup if it is not already created.
1. **Report each issue separately:** Don't club multiple, unreleated issues in one note.
1. **Brief:** Please don't include long explanations. Use screenshots and bullet points instead of descriptive paragraphs.
##Workflow
### Bug Report Guidelines
Contributing to ERPNext is not very different from the usual Pull Request workflow on GitHub.
1. **Steps to Reproduce:** The bug report must have a list of steps needed to reproduce a bug. If we cannot reproduce it, then we cannot solve it.
1. **Version Number:** Please add the version number in your report. Often a bug is fixed in the latest version
1. **Clear Title:** Add a clear subject to your bug report like "Unable to submit Purchase Order without Basic Rate" instead of just "Cannot Submit"
1. **Screenshots:** Screenshots are a great way of communicating the issues. Try adding annotations or using LiceCAP to take a screencast in `gif`.
###Prerequisites :
### Feature Request Guidelines
* You need to know [Git and Github basics](https://try.github.io/levels/1/challenges/1)
* You need to have a Fork of the [ERPNext repo](https://github.com/frappe/erpnext) in your personal Github account
* You need to add a [remote](#glossary) for your Forked repository. `git remote add origin [your-erpnext-repo-url]`
1. **Clarity:** Clearly specify how do you want the feature to behave. Don't just say "I would like multiple PDF formats", say that "Ability to add multiple print formats for customers with different languages".
1. **Solution:** Try and identify how the feature should look like.
1. **Mockups:** Mockups are a great way to explain your requirement.
### What if my Issue is closed
###The Process:
1. Make sure you're in the right branch. **develop** for adding features / fixing issues and **hotfix** for urgent bug fixes
2. Make your changes
3. Create and checkout a new branch for the changes you've made. `git checkout -b [branch-name]`
4. Add and commit your changes `git commit -am "[commit-message]"
5. If you have been working on sometime for a long time, you should [rebase](#glossary) your branch with our develop branch. `git pull upstream develop --rebase` where `upstream` is the remote name of our repo
6. Now, push your changes to your fork. `git push origin [branch-name]`
If you rebased your commits, you will have to [force push](http://vignette2.wikia.nocookie.net/starwars/images/e/ea/Yodapush.png/revision/latest?cb=20130205190454) `git push origin [branch-name] --force`
7. You should now be able to see your pushed branch on Github, now create a pull request against the branch that you want to merge to.
8. Wait for us to review it
###Common Problems:
* During rebase you might face _merge conflicts_. A merge conflict occurs when you have made changes to the same file that someone else has, in the commits you're pulling. You need to resolve these conflicts by picking which code you want to keep, yours or theirs. You can use `git mergetool` for help.
* Sometimes you don't have a local branch to which you want to make changes to. In that case you first run `git fetch` followed by `git checkout --track -b upstream/[branch-name]`
###Good practices:
* You should rebase your branch with the branch you plan to make a Pull Request to as often as you can.
* Your commit messages should be precise and explain exactly what the commit does. Same goes for the Pull Request title.
* When making a PR make sure that all your code is committed properly by checking the diffs.
* If you're working on different things at the same time, make sure you make separate branches for each.
* Don't create new DocTypes unless absolutely necessary. If you find that there is a another DocType with a similar functionality, then please try and extend that functionality.
* DRY. Don't Repeat Yourself. Before writing up a similar function /feature make sure it doesn't exist in the codebase already.
* Tabs, not spaces.
###Glossary
* remote - A remote is a connection to a Github repo. You should have two remotes, one that points to your repo and one to ours.
* rebase - When you rebase a branch, you pull commits from your remote branch and move your commits on top of it. This allows you to update your branch with the latest changes without losing your changes.
Don't worry, take the feedback, supply the correct information and re-open it!

View File

@@ -1,48 +1,56 @@
language: python
dist: trusty
addons:
apt:
sources:
- google-chrome
packages:
- google-chrome-stable
python:
- "2.7"
services:
- mysql
before_install:
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
install:
- sudo rm /etc/apt/sources.list.d/docker.list
- sudo apt-get purge -y mysql-common mysql-server mysql-client
# - wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh
# - sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch develop
- nvm install v7.10.0
- wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py
- sudo python install.py --develop --user travis --without-bench-setup
- sudo pip install -e ~/bench
# - sudo pip install --upgrade pip
- rm $TRAVIS_BUILD_DIR/.git/shallow
- bash $TRAVIS_BUILD_DIR/travis/bench_init.sh
- cp -r $TRAVIS_BUILD_DIR/test_sites/test_site ~/frappe-bench/sites/
script:
before_script:
- wget http://chromedriver.storage.googleapis.com/2.27/chromedriver_linux64.zip
- unzip chromedriver_linux64.zip
- sudo apt-get install libnss3
- sudo apt-get --only-upgrade install google-chrome-stable
- sudo cp chromedriver /usr/local/bin/.
- sudo chmod +x /usr/local/bin/chromedriver
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- sleep 3
- mysql -u root -ptravis -e 'create database test_frappe'
- echo "USE mysql;\nCREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe';\nFLUSH PRIVILEGES;\n" | mysql -u root -ptravis
- echo "USE mysql;\nGRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost';\n" | mysql -u root -ptravis
- cd ~/frappe-bench
- bench get-app erpnext $TRAVIS_BUILD_DIR
- bench use test_site
- bench reinstall --yes
- bench build
- bench scheduler disable
- bench start &
- sleep 10
- bench --verbose run-tests --driver Firefox
before_script:
- mysql -u root -ptravis -e 'create database test_frappe'
- echo "USE mysql;\nCREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe';\nFLUSH PRIVILEGES;\n" | mysql -u root -ptravis
- echo "USE mysql;\nGRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost';\n" | mysql -u root -ptravis
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/92b3bea86d8c5397beef
on_success: always
on_failure: always
on_start: never
script:
- set -e
- bench --verbose run-tests
- sleep 5
- bench --verbose run-tests --ui-tests

46
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,46 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@frappe.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

View File

@@ -38,6 +38,15 @@ The ERPNext code is licensed as GNU General Public License (v3) and the Document
---
## Contributing
1. [Issue Guidelines](https://github.com/frappe/erpnext/wiki/Issue-Guidelines)
1. [Pull Request Requirements](https://github.com/frappe/erpnext/wiki/Contribution-Guidelines)
1. [Translations](https://translate.erpnext.com)
1. [Chart of Accounts](https://charts.erpnext.com)
---
## Logo and Trademark
The brand name ERPNext and the logo are trademarks of Frappe Technologies Pvt. Ltd.

View File

@@ -2,7 +2,7 @@
from __future__ import unicode_literals
import frappe
__version__ = '7.2.18'
__version__ = '8.4.3'
def get_default_company(user=None):
'''Get default company for user'''
@@ -19,8 +19,49 @@ def get_default_company(user=None):
return default_company
def get_default_currency():
'''Returns the currency of the default company'''
company = get_default_company()
if company:
return frappe.db.get_value('Company', company, 'default_currency')
def get_company_currency(company):
'''Returns the default company currency'''
if not frappe.flags.company_currency:
frappe.flags.company_currency = {}
if not company in frappe.flags.company_currency:
frappe.flags.company_currency[company] = frappe.db.get_value('Company', company, 'default_currency')
return frappe.flags.company_currency[company]
def set_perpetual_inventory(enable=1, company=None):
if not company:
company = "_Test Company" if frappe.flags.in_test else get_default_company()
company = frappe.get_doc("Company", company)
company.enable_perpetual_inventory = enable
company.save()
def encode_company_abbr(name, company):
'''Returns name encoded with company abbreviation'''
company_abbr = frappe.db.get_value("Company", company, "abbr")
parts = name.rsplit(" - ", 1)
if parts[-1].lower() != company_abbr.lower():
parts.append(company_abbr)
return " - ".join(parts)
def is_perpetual_inventory_enabled(company):
if not company:
company = "_Test Company" if frappe.flags.in_test else get_default_company()
if not hasattr(frappe.local, 'enable_perpetual_inventory'):
frappe.local.enable_perpetual_inventory = {}
if not company in frappe.local.enable_perpetual_inventory:
frappe.local.enable_perpetual_inventory[company] = frappe.db.get_value("Company",
company, "enable_perpetual_inventory") or 0
return frappe.local.enable_perpetual_inventory[company]

View File

@@ -2,26 +2,26 @@
// License: GNU General Public License v3. See license.txt
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
if(doc.__islocal) {
msgprint(__("Please create new account from Chart of Accounts."));
cur_frm.cscript.refresh = function (doc, cdt, cdn) {
if (doc.__islocal) {
frappe.msgprint(__("Please create new account from Chart of Accounts."));
throw "cannot create";
}
cur_frm.toggle_display('account_name', doc.__islocal);
// hide fields if group
cur_frm.toggle_display(['account_type', 'tax_rate'], cint(doc.is_group)==0)
cur_frm.toggle_display(['account_type', 'tax_rate'], cint(doc.is_group) == 0)
// disable fields
cur_frm.toggle_enable(['account_name', 'is_group', 'company'], false);
if(cint(doc.is_group)==0) {
if (cint(doc.is_group) == 0) {
cur_frm.toggle_display('freeze_account', doc.__onload && doc.__onload.can_freeze_account);
}
// read-only for root accounts
if(!doc.parent_account) {
if (!doc.parent_account) {
cur_frm.set_read_only();
cur_frm.set_intro(__("This is a root account and cannot be edited."));
} else {
@@ -38,53 +38,53 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.add_fetch('parent_account', 'report_type', 'report_type');
cur_frm.add_fetch('parent_account', 'root_type', 'root_type');
cur_frm.cscript.account_type = function(doc, cdt, cdn) {
if(doc.is_group==0) {
cur_frm.cscript.account_type = function (doc, cdt, cdn) {
if (doc.is_group == 0) {
cur_frm.toggle_display(['tax_rate'], doc.account_type == 'Tax');
cur_frm.toggle_display('warehouse', doc.account_type=='Stock');
cur_frm.toggle_display('warehouse', doc.account_type == 'Stock');
}
}
cur_frm.cscript.add_toolbar_buttons = function(doc) {
cur_frm.cscript.add_toolbar_buttons = function (doc) {
cur_frm.add_custom_button(__('Chart of Accounts'),
function() { frappe.set_route("Tree", "Account"); });
function () { frappe.set_route("Tree", "Account"); });
if (doc.is_group == 1) {
cur_frm.add_custom_button(__('Group to Non-Group'),
function() { cur_frm.cscript.convert_to_ledger(); }, 'fa fa-retweet', 'btn-default');
function () { cur_frm.cscript.convert_to_ledger(); }, 'fa fa-retweet', 'btn-default');
} else if (cint(doc.is_group) == 0) {
cur_frm.add_custom_button(__('Ledger'), function() {
cur_frm.add_custom_button(__('Ledger'), function () {
frappe.route_options = {
"account": doc.name,
"from_date": sys_defaults.year_start_date,
"to_date": sys_defaults.year_end_date,
"from_date": frappe.sys_defaults.year_start_date,
"to_date": frappe.sys_defaults.year_end_date,
"company": doc.company
};
frappe.set_route("query-report", "General Ledger");
});
cur_frm.add_custom_button(__('Non-Group to Group'),
function() { cur_frm.cscript.convert_to_group(); }, 'fa fa-retweet', 'btn-default')
function () { cur_frm.cscript.convert_to_group(); }, 'fa fa-retweet', 'btn-default')
}
}
cur_frm.cscript.convert_to_ledger = function(doc, cdt, cdn) {
return $c_obj(cur_frm.doc,'convert_group_to_ledger','',function(r,rt) {
if(r.message == 1) {
cur_frm.refresh();
}
});
cur_frm.cscript.convert_to_ledger = function (doc, cdt, cdn) {
return $c_obj(cur_frm.doc, 'convert_group_to_ledger', '', function (r, rt) {
if (r.message == 1) {
cur_frm.refresh();
}
});
}
cur_frm.cscript.convert_to_group = function(doc, cdt, cdn) {
return $c_obj(cur_frm.doc,'convert_ledger_to_group','',function(r,rt) {
if(r.message == 1) {
cur_frm.refresh();
}
});
cur_frm.cscript.convert_to_group = function (doc, cdt, cdn) {
return $c_obj(cur_frm.doc, 'convert_ledger_to_group', '', function (r, rt) {
if (r.message == 1) {
cur_frm.refresh();
}
});
}
cur_frm.fields_dict['parent_account'].get_query = function(doc) {
cur_frm.fields_dict['parent_account'].get_query = function (doc) {
return {
filters: {
"is_group": 1,

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 1,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 1,
"beta": 0,
@@ -22,6 +23,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -50,6 +52,7 @@
"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,
@@ -76,7 +79,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Account Name",
@@ -107,6 +111,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Group",
@@ -134,7 +139,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Company",
@@ -165,6 +171,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Root Type",
@@ -193,6 +200,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Report Type",
@@ -222,6 +230,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Currency",
@@ -251,6 +260,7 @@
"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,
@@ -278,6 +288,7 @@
"ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Parent Account",
@@ -308,7 +319,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Account Type",
@@ -340,6 +352,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Rate",
@@ -370,6 +383,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Frozen",
@@ -389,34 +403,6 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "warehouse",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Warehouse",
"length": 0,
"no_copy": 0,
"options": "Warehouse",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@@ -428,6 +414,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Balance must be",
@@ -456,6 +443,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Lft",
@@ -483,6 +471,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Rgt",
@@ -510,6 +499,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Old Parent",
@@ -527,18 +517,18 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "fa fa-money",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-12-15 14:43:50.121671",
"modified": "2017-04-21 17:22:41.150984",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Account",
@@ -554,7 +544,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -575,7 +564,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -596,7 +584,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -617,7 +604,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -638,7 +624,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -654,6 +639,8 @@
"read_only": 0,
"read_only_onload": 0,
"search_fields": "",
"show_name_in_global_search": 1,
"sort_order": "ASC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -3,11 +3,12 @@
from __future__ import unicode_literals
import frappe
from frappe.utils import cstr, cint
from frappe.utils import cint, fmt_money
from frappe import throw, _
from frappe.model.document import Document
class RootNotEditable(frappe.ValidationError): pass
class BalanceMismatchError(frappe.ValidationError): pass
class Account(Document):
nsm_parent_field = 'parent_account'
@@ -34,7 +35,6 @@ class Account(Document):
self.validate_group_or_ledger()
self.set_root_and_report_type()
self.validate_mandatory()
self.validate_warehouse_account()
self.validate_frozen_accounts_modifier()
self.validate_balance_must_be_debit_or_credit()
self.validate_account_currency()
@@ -161,31 +161,6 @@ class Account(Document):
if not self.report_type:
throw(_("Report Type is mandatory"))
def validate_warehouse_account(self):
if not cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
return
if self.account_type == "Stock" and not cint(self.is_group):
if not self.warehouse:
throw(_("Warehouse is mandatory"))
old_warehouse = cstr(frappe.db.get_value("Account", self.name, "warehouse"))
if old_warehouse != cstr(self.warehouse):
if old_warehouse and frappe.db.exists("Warehouse", old_warehouse):
self.validate_warehouse(old_warehouse)
if self.warehouse:
self.validate_warehouse(self.warehouse)
elif self.warehouse:
self.warehouse = None
def validate_warehouse(self, warehouse):
lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"])
if lft and rgt:
if frappe.db.sql_list("""select sle.name from `tabStock Ledger Entry` sle where exists (select wh.name from
tabWarehouse wh where lft >= %s and rgt <= %s and sle.warehouse = wh.name)""", (lft, rgt)):
throw(_("Stock entries exist against Warehouse {0}, hence you cannot re-assign or modify it").format(warehouse))
def update_nsm_model(self):
"""update lft, rgt indices for nested set model"""

View File

@@ -37,16 +37,6 @@ frappe.treeview_settings["Account"] = {
},
{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate'),
depends_on: 'eval:doc.is_group==0&&doc.account_type=="Tax"'},
{fieldtype:'Link', fieldname:'warehouse', label:__('Warehouse'), options:"Warehouse",
depends_on: 'eval:(!doc.is_group&&doc.account_type=="Stock")',
get_query: function() {
return {
filters:{
"company": frappe.treeview_settings.filters["company"]
}
}
}
},
{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
description: __("Optional. Sets company's default currency, if not specified.")}
],
@@ -72,8 +62,8 @@ frappe.treeview_settings["Account"] = {
click: function(node, btn) {
frappe.route_options = {
"account": node.label,
"from_date": sys_defaults.year_start_date,
"to_date": sys_defaults.year_end_date,
"from_date": frappe.sys_defaults.year_start_date,
"to_date": frappe.sys_defaults.year_end_date,
"company": frappe.defaults.get_default('company') ? frappe.defaults.get_default('company'): ""
};
frappe.set_route("query-report", "General Ledger");

View File

@@ -125,14 +125,14 @@ def get_account_tree_from_existing_company(existing_company):
account_tree = {}
# fill in tree starting with root accounts (those with no parent)
build_account_tree(account_tree, None, all_accounts)
if all_accounts:
build_account_tree(account_tree, None, all_accounts)
return account_tree
def build_account_tree(tree, parent, all_accounts):
# find children
parent_account = parent.name if parent else None
children = [acc for acc in all_accounts if acc.parent_account == parent_account]
parent_account = parent.name if parent else ""
children = [acc for acc in all_accounts if cstr(acc.parent_account) == parent_account]
# if no children, but a group account
if not children and parent.is_group:

View File

@@ -88,10 +88,6 @@
"Items Delivered to Customs on temprary Base": {}
},
"Stock in Hand": {
"All Warehouses": {
"account_type": "Stock",
"is_group": 1
},
"account_type": "Stock"
}
},
@@ -341,9 +337,7 @@
"Post Dated Cheques Paid": {
"account_type": "Payable"
},
"Staff Payable": {
"account_type": "Payable"
},
"Staff Payable": {},
"Suppliers Price Protection": {
"account_type": "Payable"
},

View File

@@ -65,8 +65,9 @@
"account_type": "Fixed Asset"
},
"Stock": {
"account_type": "Stock",
"is_group": 1
"Stock in Hand": {
"account_type": "Stock"
}
},
"root_type": "Asset"
},

View File

@@ -22,20 +22,10 @@
},
"1120.000 Bank ": {
"1121.000 Bank Rupiah": {
"1121.0010 Bank 1": {
"account_type": "Bank"
},
"1121.0020 Bank 2": {
"account_type": "Bank"
}
"is_group": 1
},
"1122.000 Bank Other Currency": {
"1122.0010 Bank 1": {
"account_type": "Bank"
},
"1122.0020 Bank 2": {
"account_type": "Bank"
}
"is_group": 1
},
"account_type": "Bank"
},

View File

@@ -26,8 +26,9 @@
"Earnest Money": {}
},
"Stock Assets": {
"account_type": "Stock",
"is_group": 1
"Stock in Hand": {
"account_type": "Stock"
}
},
"Tax Assets": {
"is_group": 1
@@ -136,7 +137,8 @@
"Accounts Payable": {
"Creditors": {
"account_type": "Payable"
}
},
"Payroll Payable": {}
},
"Stock Liabilities": {
"Stock Received But Not Billed": {

View File

@@ -40,11 +40,9 @@
"Rental Deposits": {}
},
"Stock Assets": {
"All Warehouses": {
"account_type": "Stock",
"is_group": 1
},
"account_type": "Stock"
"Stock in Hand": {
"account_type": "Stock"
}
},
"Tax Assets": {
"GST-Input": {}
@@ -265,7 +263,8 @@
"Accounts Payable": {
"Creditors": {
"account_type": "Payable"
}
},
"Payroll Payable": {}
},
"Duties and Taxes": {
"Deferred Tax Liabilities-Current": {},

View File

@@ -40,8 +40,9 @@
"Rental Deposits": {}
},
"Stock Assets": {
"account_type": "Stock",
"is_group": 1
"Stock in Hand": {
"account_type": "Stock"
}
},
"Tax Assets": {
"GST-Input": {}
@@ -142,7 +143,8 @@
"Accounts Payable": {
"Creditors":{
"account_type": "Payable"
}
},
"Payroll Payable": {}
},
"Duties and Taxes": {
"account_type": "Tax",

View File

@@ -30,8 +30,10 @@ def get():
_("Earnest Money"): {}
},
_("Stock Assets"): {
_("Stock In Hand"): {
"account_type": "Stock"
},
"account_type": "Stock",
"is_group": 1
},
_("Tax Assets"): {
"is_group": 1
@@ -107,7 +109,7 @@ def get():
_("Office Maintenance Expenses"): {},
_("Office Rent"): {},
_("Postal Expenses"): {},
_("Print and Stationary"): {},
_("Print and Stationery"): {},
_("Round Off"): {
"account_type": "Round Off"
},
@@ -137,7 +139,8 @@ def get():
_("Accounts Payable"): {
_("Creditors"): {
"account_type": "Payable"
}
},
_("Payroll Payable"): {},
},
_("Stock Liabilities"): {
_("Stock Received But Not Billed"): {

View File

@@ -3,6 +3,8 @@
from __future__ import unicode_literals
import frappe
from erpnext.stock import get_warehouse_account, get_company_default_inventory_account
def _make_test_records(verbose):
from frappe.test_runner import make_test_objects
@@ -63,3 +65,24 @@ def _make_test_records(verbose):
} for account_name, parent_account, is_group, account_type, currency in accounts])
return test_objects
def get_inventory_account(company, warehouse=None):
account = None
if warehouse:
account = get_warehouse_account(warehouse, company)
else:
account = get_company_default_inventory_account(company)
return account
def create_account(**kwargs):
account = frappe.get_doc(dict(
doctype = "Account",
account_name = kwargs.get('account_name'),
account_type = kwargs.get('account_type'),
parent_account = kwargs.get('parent_account'),
company = kwargs.get('company')
))
account.save()
return account.name

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
@@ -13,6 +14,7 @@
"engine": "InnoDB",
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -21,11 +23,13 @@
"description": "If enabled, the system will post accounting entries for inventory automatically.",
"fieldname": "auto_accounting_for_stock",
"fieldtype": "Check",
"hidden": 0,
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Make Accounting Entry For Every Stock Movement",
"length": 0,
"no_copy": 0,
@@ -33,6 +37,7 @@
"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,
@@ -40,6 +45,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -51,7 +57,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Accounts Frozen Upto",
"length": 0,
"no_copy": 0,
@@ -59,6 +67,7 @@
"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,
@@ -66,6 +75,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -77,7 +87,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Role Allowed to Set Frozen Accounts & Edit Frozen Entries",
"length": 0,
"no_copy": 0,
@@ -86,6 +98,7 @@
"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,
@@ -93,6 +106,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -103,7 +117,9 @@
"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,
@@ -111,6 +127,7 @@
"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,
@@ -118,6 +135,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -129,7 +147,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Credit Controller",
"length": 0,
"no_copy": 0,
@@ -138,6 +158,7 @@
"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,
@@ -145,6 +166,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -155,7 +177,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Check Supplier Invoice Number Uniqueness",
"length": 0,
"no_copy": 0,
@@ -164,6 +188,7 @@
"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,
@@ -171,6 +196,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -181,7 +207,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Make Payment via Journal Entry",
"length": 0,
"no_copy": 0,
@@ -190,6 +218,7 @@
"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,
@@ -197,6 +226,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -208,7 +238,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Unlink Payment on Cancellation of Invoice",
"length": 0,
"no_copy": 0,
@@ -217,6 +249,38 @@
"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,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "1",
"fieldname": "book_asset_depreciation_entry_automatically",
"fieldtype": "Check",
"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": "Book Asset Depreciation Entry Automatically",
"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,
@@ -224,18 +288,18 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "fa fa-cog",
"icon": "icon-cog",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 1,
"istable": 0,
"max_attachments": 0,
"modified": "2016-10-20 16:12:38.595075",
"modified": "2017-06-16 17:39:50.614522",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",
@@ -251,7 +315,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -266,6 +329,8 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_order": "ASC",
"track_changes": 1,
"track_seen": 0
}

View File

@@ -11,21 +11,4 @@ from frappe.model.document import Document
class AccountsSettings(Document):
def on_update(self):
frappe.db.set_default("auto_accounting_for_stock", self.auto_accounting_for_stock)
if cint(self.auto_accounting_for_stock):
# set default perpetual account in company
for company in frappe.db.sql("select name from tabCompany"):
company = frappe.get_doc("Company", company[0])
company.flags.ignore_permissions = True
company.save()
# Create account head for warehouses
warehouse_list = frappe.db.sql("select name, company from tabWarehouse", as_dict=1)
warehouse_with_no_company = [d.name for d in warehouse_list if not d.company]
if warehouse_with_no_company:
frappe.throw(_("Company is missing in warehouses {0}").format(comma_and(warehouse_with_no_company)))
for wh in warehouse_list:
wh_doc = frappe.get_doc("Warehouse", wh.name)
wh_doc.flags.ignore_permissions = True
wh_doc.save()
pass

View File

@@ -14,7 +14,7 @@ frappe.ui.form.on('Asset', {
}
};
});
frm.set_query("warehouse", function() {
return {
"filters": {
@@ -24,12 +24,12 @@ frappe.ui.form.on('Asset', {
};
});
},
refresh: function(frm) {
frappe.ui.form.trigger("Asset", "is_existing_asset");
frm.toggle_display("next_depreciation_date", frm.doc.docstatus < 1);
frm.events.make_schedules_editable(frm);
if (frm.doc.docstatus==1) {
if (frm.doc.status=='Submitted' && !frm.doc.is_existing_asset && !frm.doc.purchase_invoice) {
frm.add_custom_button("Make Purchase Invoice", function() {
@@ -40,60 +40,60 @@ frappe.ui.form.on('Asset', {
frm.add_custom_button("Transfer Asset", function() {
erpnext.asset.transfer_asset(frm);
});
frm.add_custom_button("Scrap Asset", function() {
erpnext.asset.scrap_asset(frm);
});
frm.add_custom_button("Sale Asset", function() {
frm.add_custom_button("Sell Asset", function() {
erpnext.asset.make_sales_invoice(frm);
});
} else if (frm.doc.status=='Scrapped') {
frm.add_custom_button("Restore Asset", function() {
erpnext.asset.restore_asset(frm);
});
}
frm.trigger("show_graph");
}
},
show_graph: function(frm) {
show_graph: function(frm) {
var x_intervals = ["x", frm.doc.purchase_date];
var asset_values = ["Asset Value", frm.doc.gross_purchase_amount];
var last_depreciation_date = frm.doc.purchase_date;
if(frm.doc.opening_accumulated_depreciation) {
last_depreciation_date = frappe.datetime.add_months(frm.doc.next_depreciation_date,
last_depreciation_date = frappe.datetime.add_months(frm.doc.next_depreciation_date,
-1*frm.doc.frequency_of_depreciation);
x_intervals.push(last_depreciation_date);
asset_values.push(flt(frm.doc.gross_purchase_amount) -
asset_values.push(flt(frm.doc.gross_purchase_amount) -
flt(frm.doc.opening_accumulated_depreciation));
}
$.each(frm.doc.schedules || [], function(i, v) {
x_intervals.push(v.schedule_date);
asset_value = flt(frm.doc.gross_purchase_amount) - flt(v.accumulated_depreciation_amount);
if(v.journal_entry) {
var asset_value = flt(frm.doc.gross_purchase_amount) - flt(v.accumulated_depreciation_amount);
if(v.journal_entry) {
last_depreciation_date = v.schedule_date;
asset_values.push(asset_value)
} else {
if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
asset_values.push(null)
asset_values.push(null)
} else {
asset_values.push(asset_value)
}
}
})
if(in_list(["Scrapped", "Sold"], frm.doc.status)) {
x_intervals.push(frm.doc.disposal_date);
asset_values.push(0);
last_depreciation_date = frm.doc.disposal_date;
}
frm.dashboard.setup_chart({
data: {
x: 'x',
@@ -117,9 +117,9 @@ frappe.ui.form.on('Asset', {
padding: {bottom: 10}
}
}
});
});
},
item_code: function(frm) {
if(frm.doc.item_code) {
frappe.call({
@@ -137,27 +137,27 @@ frappe.ui.form.on('Asset', {
})
}
},
is_existing_asset: function(frm) {
frm.toggle_enable("supplier", frm.doc.is_existing_asset);
frm.toggle_reqd("next_depreciation_date", !frm.doc.is_existing_asset);
},
opening_accumulated_depreciation: function(frm) {
erpnext.asset.set_accululated_depreciation(frm);
},
depreciation_method: function(frm) {
frm.events.make_schedules_editable(frm);
},
make_schedules_editable: function(frm) {
var is_editable = frm.doc.depreciation_method==="Manual" ? true : false;
frm.toggle_enable("schedules", is_editable);
frm.fields_dict["schedules"].grid.toggle_enable("schedule_date", is_editable);
frm.fields_dict["schedules"].grid.toggle_enable("depreciation_amount", is_editable);
}
});
frappe.ui.form.on('Depreciation Schedule', {
@@ -177,7 +177,7 @@ frappe.ui.form.on('Depreciation Schedule', {
})
}
},
depreciation_amount: function(frm, cdt, cdn) {
erpnext.asset.set_accululated_depreciation(frm);
}
@@ -186,11 +186,11 @@ frappe.ui.form.on('Depreciation Schedule', {
erpnext.asset.set_accululated_depreciation = function(frm) {
if(frm.doc.depreciation_method != "Manual") return;
accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
var accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
$.each(frm.doc.schedules || [], function(i, row) {
accumulated_depreciation += flt(row.depreciation_amount);
frappe.model.set_value(row.doctype, row.name,
frappe.model.set_value(row.doctype, row.name,
"accumulated_depreciation_amount", accumulated_depreciation);
})
}
@@ -260,9 +260,9 @@ erpnext.asset.transfer_asset = function(frm) {
title: __("Transfer Asset"),
fields: [
{
"label": __("Target Warehouse"),
"label": __("Target Warehouse"),
"fieldname": "target_warehouse",
"fieldtype": "Link",
"fieldtype": "Link",
"options": "Warehouse",
"get_query": function () {
return {
@@ -271,13 +271,13 @@ erpnext.asset.transfer_asset = function(frm) {
["Warehouse", "is_group", "=", 0]
]
}
},
"reqd": 1
},
"reqd": 1
},
{
"label": __("Date"),
"label": __("Date"),
"fieldname": "transfer_date",
"fieldtype": "Datetime",
"fieldtype": "Datetime",
"reqd": 1,
"default": frappe.datetime.now_datetime()
}
@@ -285,7 +285,7 @@ erpnext.asset.transfer_asset = function(frm) {
});
dialog.set_primary_action(__("Transfer"), function() {
args = dialog.get_values();
var args = dialog.get_values();
if(!args) return;
dialog.hide();
return frappe.call({

View File

@@ -22,6 +22,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Asset Name",
@@ -50,6 +51,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Item Code",
@@ -68,6 +70,36 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "item_name",
"fieldtype": "Read Only",
"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": "Item Name",
"length": 0,
"no_copy": 0,
"options": "item_code.item_name",
"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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@@ -79,6 +111,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Asset Category",
@@ -109,6 +142,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Status",
@@ -138,6 +172,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Image",
@@ -166,6 +201,7 @@
"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,
@@ -193,6 +229,7 @@
"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",
@@ -222,6 +259,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Warehouse",
@@ -251,6 +289,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Existing Asset",
@@ -279,6 +318,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Purchase Date",
@@ -307,6 +347,7 @@
"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",
@@ -336,6 +377,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Purchase Invoice",
@@ -365,6 +407,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Disposal Date",
@@ -393,6 +436,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Journal Entry for Scrap",
@@ -422,6 +466,7 @@
"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,
@@ -449,6 +494,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Gross Purchase Amount",
@@ -479,6 +525,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Expected Value After Useful Life",
@@ -509,6 +556,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Opening Accumulated Depreciation",
@@ -538,6 +586,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Value After Depreciation",
@@ -567,6 +616,7 @@
"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,
@@ -596,6 +646,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Depreciation Method",
@@ -625,6 +676,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Number of Depreciations",
@@ -654,6 +706,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Number of Depreciations Booked",
@@ -682,6 +735,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Frequency of Depreciation (Months)",
@@ -711,6 +765,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Next Depreciation Date",
@@ -739,6 +794,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Depreciation Schedule",
@@ -767,6 +823,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Depreciation Schedules",
@@ -796,6 +853,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amended From",
@@ -825,7 +883,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-11-18 15:59:19.774500",
"modified": "2017-02-17 16:26:19.111939",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Asset",
@@ -842,7 +900,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -857,7 +914,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 1,
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -19,7 +19,8 @@ class Asset(Document):
self.validate_asset_values()
self.make_depreciation_schedule()
self.set_accumulated_depreciation()
self.validate_expected_value_after_useful_life()
if self.get("schedules"):
self.validate_expected_value_after_useful_life()
# Validate depreciation related accounts
get_depreciation_accounts(self)
@@ -32,7 +33,7 @@ class Asset(Document):
self.set_status()
def validate_item(self):
item = frappe.db.get_value("Item", self.item_code,
item = frappe.db.get_value("Item", self.item_code,
["is_fixed_asset", "is_stock_item", "disabled"], as_dict=1)
if not item:
frappe.throw(_("Item {0} does not exist").format(self.item_code))
@@ -42,7 +43,7 @@ class Asset(Document):
frappe.throw(_("Item {0} must be a Fixed Asset Item").format(self.item_code))
elif item.is_stock_item:
frappe.throw(_("Item {0} must be a non-stock item").format(self.item_code))
def set_missing_values(self):
if self.item_code:
item_details = get_item_details(self.item_code)
@@ -50,7 +51,7 @@ class Asset(Document):
if not self.get(field):
self.set(field, value)
self.value_after_depreciation = (flt(self.gross_purchase_amount) -
self.value_after_depreciation = (flt(self.gross_purchase_amount) -
flt(self.opening_accumulated_depreciation))
def validate_asset_values(self):
@@ -59,7 +60,7 @@ class Asset(Document):
if not flt(self.gross_purchase_amount):
frappe.throw(_("Gross Purchase Amount is mandatory"), frappe.MandatoryError)
if not self.is_existing_asset:
self.opening_accumulated_depreciation = 0
self.number_of_depreciations_booked = 0
@@ -70,30 +71,33 @@ class Asset(Document):
if flt(self.opening_accumulated_depreciation) > depreciable_amount:
frappe.throw(_("Opening Accumulated Depreciation must be less than equal to {0}")
.format(depreciable_amount))
if self.opening_accumulated_depreciation:
if not self.number_of_depreciations_booked:
frappe.throw(_("Please set Number of Depreciations Booked"))
else:
self.number_of_depreciations_booked = 0
if cint(self.number_of_depreciations_booked) > cint(self.total_number_of_depreciations):
frappe.throw(_("Number of Depreciations Booked cannot be greater than Total Number of Depreciations"))
if self.next_depreciation_date and getdate(self.next_depreciation_date) < getdate(nowdate()):
frappe.msgprint(_("Next Depreciation Date is entered as past date"))
if (flt(self.value_after_depreciation) > flt(self.expected_value_after_useful_life)
frappe.msgprint(_("Next Depreciation Date is entered as past date"), title=_('Warning'), indicator='red')
if self.next_depreciation_date and getdate(self.next_depreciation_date) < getdate(self.purchase_date):
frappe.throw(_("Next Depreciation Date cannot be before Purchase Date"))
if (flt(self.value_after_depreciation) > flt(self.expected_value_after_useful_life)
and not self.next_depreciation_date):
frappe.throw(_("Please set Next Depreciation Date"))
def make_depreciation_schedule(self):
if self.depreciation_method != 'Manual':
self.schedules = []
if not self.get("schedules") and self.next_depreciation_date:
value_after_depreciation = flt(self.value_after_depreciation)
number_of_pending_depreciations = cint(self.total_number_of_depreciations) - \
cint(self.number_of_depreciations_booked)
if number_of_pending_depreciations:
@@ -108,17 +112,26 @@ class Asset(Document):
"schedule_date": schedule_date,
"depreciation_amount": depreciation_amount
})
def set_accumulated_depreciation(self):
accumulated_depreciation = flt(self.opening_accumulated_depreciation)
for d in self.get("schedules"):
accumulated_depreciation += flt(d.depreciation_amount)
d.accumulated_depreciation_amount = accumulated_depreciation
value_after_depreciation = flt(self.value_after_depreciation)
for i, d in enumerate(self.get("schedules")):
depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount"))
value_after_depreciation -= flt(depreciation_amount)
if i==len(self.get("schedules"))-1 and self.depreciation_method == "Straight Line":
depreciation_amount += flt(value_after_depreciation - flt(self.expected_value_after_useful_life),
d.precision("depreciation_amount"))
d.depreciation_amount = depreciation_amount
accumulated_depreciation += d.depreciation_amount
d.accumulated_depreciation_amount = flt(accumulated_depreciation, d.precision("accumulated_depreciation_amount"))
def get_depreciation_amount(self, depreciable_value):
if self.depreciation_method in ("Straight Line", "Manual"):
depreciation_amount = (flt(self.value_after_depreciation) -
flt(self.expected_value_after_useful_life)) / (cint(self.total_number_of_depreciations) -
flt(self.expected_value_after_useful_life)) / (cint(self.total_number_of_depreciations) -
cint(self.number_of_depreciations_booked))
else:
factor = 200.0 / self.total_number_of_depreciations
@@ -129,14 +142,14 @@ class Asset(Document):
depreciation_amount = flt(depreciable_value) - flt(self.expected_value_after_useful_life)
return depreciation_amount
def validate_expected_value_after_useful_life(self):
accumulated_depreciation_after_full_schedule = \
max([d.accumulated_depreciation_amount for d in self.get("schedules")])
asset_value_after_full_schedule = (flt(self.gross_purchase_amount) -
asset_value_after_full_schedule = (flt(self.gross_purchase_amount) -
flt(accumulated_depreciation_after_full_schedule))
if self.expected_value_after_useful_life < asset_value_after_full_schedule:
frappe.throw(_("Expected value after useful life must be greater than or equal to {0}")
.format(asset_value_after_full_schedule))
@@ -153,8 +166,8 @@ class Asset(Document):
if d.journal_entry:
frappe.get_doc("Journal Entry", d.journal_entry).cancel()
d.db_set("journal_entry", None)
self.db_set("value_after_depreciation",
self.db_set("value_after_depreciation",
(flt(self.gross_purchase_amount) - flt(self.opening_accumulated_depreciation)))
def set_status(self, status=None):
@@ -185,6 +198,7 @@ def make_purchase_invoice(asset, item_code, gross_purchase_amount, company, post
pi = frappe.new_doc("Purchase Invoice")
pi.company = company
pi.currency = frappe.db.get_value("Company", company, "default_currency")
pi.set_posting_time = 1
pi.posting_date = posting_date
pi.append("items", {
"item_code": item_code,
@@ -197,7 +211,7 @@ def make_purchase_invoice(asset, item_code, gross_purchase_amount, company, post
})
pi.set_missing_values()
return pi
@frappe.whitelist()
def make_sales_invoice(asset, item_code, company):
si = frappe.new_doc("Sales Invoice")
@@ -214,7 +228,7 @@ def make_sales_invoice(asset, item_code, company):
})
si.set_missing_values()
return si
@frappe.whitelist()
def transfer_asset(args):
import json
@@ -223,23 +237,23 @@ def transfer_asset(args):
movement_entry.update(args)
movement_entry.insert()
movement_entry.submit()
frappe.db.commit()
frappe.msgprint(_("Asset Movement record {0} created").format("<a href='#Form/Asset Movement/{0}'>{0}</a>".format(movement_entry.name)))
@frappe.whitelist()
def get_item_details(item_code):
asset_category = frappe.db.get_value("Item", item_code, "asset_category")
if not asset_category:
frappe.throw(_("Please enter Asset Category in Item {0}").format(item_code))
ret = frappe.db.get_value("Asset Category", asset_category,
ret = frappe.db.get_value("Asset Category", asset_category,
["depreciation_method", "total_number_of_depreciations", "frequency_of_depreciation"], as_dict=1)
ret.update({
"asset_category": asset_category
})
return ret
return ret

View File

@@ -0,0 +1,3 @@
frappe.listview_settings['Asset'] = {
add_fields: ['image']
}

View File

@@ -8,6 +8,10 @@ from frappe import _
from frappe.utils import flt, today, getdate
def post_depreciation_entries(date=None):
# Return if automatic booking of asset depreciation is disabled
if not frappe.db.get_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically"):
return
if not date:
date = today()
for asset in get_depreciable_assets(date):

View File

@@ -5,7 +5,7 @@ from __future__ import unicode_literals
import frappe
import unittest
from frappe.utils import cstr, nowdate, getdate
from frappe.utils import cstr, nowdate, getdate, flt
from erpnext.accounts.doctype.asset.depreciation import post_depreciation_entries, scrap_asset, restore_asset
from erpnext.accounts.doctype.asset.asset import make_sales_invoice, make_purchase_invoice
@@ -166,6 +166,23 @@ class TestAsset(unittest.TestCase):
self.assertEqual(gle, expected_gle)
self.assertEqual(asset.get("value_after_depreciation"), 70000)
def test_depreciation_entry_cancellation(self):
asset = frappe.get_doc("Asset", "Macbook Pro 1")
asset.submit()
post_depreciation_entries(date="2021-01-01")
asset.load_from_db()
# cancel depreciation entry
depr_entry = asset.get("schedules")[0].journal_entry
self.assertTrue(depr_entry)
frappe.get_doc("Journal Entry", depr_entry).cancel()
asset.load_from_db()
depr_entry = asset.get("schedules")[0].journal_entry
self.assertFalse(depr_entry)
def test_scrap_asset(self):
asset = frappe.get_doc("Asset", "Macbook Pro 1")
@@ -226,6 +243,23 @@ class TestAsset(unittest.TestCase):
self.assertEqual(frappe.db.get_value("Asset", "Macbook Pro 1", "status"), "Partially Depreciated")
def test_asset_expected_value_after_useful_life(self):
asset = frappe.get_doc("Asset", "Macbook Pro 1")
asset.depreciation_method = "Straight Line"
asset.is_existing_asset = 1
asset.total_number_of_depreciations = 400
asset.gross_purchase_amount = 16866177.00
asset.expected_value_after_useful_life = 500000
asset.save()
accumulated_depreciation_after_full_schedule = \
max([d.accumulated_depreciation_amount for d in asset.get("schedules")])
asset_value_after_full_schedule = (flt(asset.gross_purchase_amount) -
flt(accumulated_depreciation_after_full_schedule))
self.assertTrue(asset.expected_value_after_useful_life >= asset_value_after_full_schedule)
def tearDown(self):
asset = frappe.get_doc("Asset", "Macbook Pro 1")
@@ -297,4 +331,7 @@ def set_depreciation_settings_in_company():
company.depreciation_expense_account = "_Test Depreciations - _TC"
company.disposal_account = "_Test Gain/Loss on Asset Disposal - _TC"
company.depreciation_cost_center = "_Test Cost Center - _TC"
company.save()
company.save()
# Enable booking asset depreciation entry automatically
frappe.db.set_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically", 1)

View File

@@ -23,6 +23,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Asset Category Name",
@@ -52,6 +53,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Depreciation Method",
@@ -81,6 +83,7 @@
"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,
@@ -108,6 +111,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Number of Depreciations",
@@ -136,6 +140,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Frequency of Depreciation (Months)",
@@ -164,6 +169,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Accounts",
@@ -192,6 +198,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Accounts",
@@ -221,7 +228,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-11-07 05:49:42.600981",
"modified": "2017-02-17 16:09:52.955332",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Asset Category",
@@ -238,7 +245,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -259,7 +265,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -274,7 +279,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -4,7 +4,7 @@
frappe.ui.form.on('Asset Movement', {
onload: function(frm) {
frm.add_fetch("asset", "warehouse", "source_warehouse");
frm.set_query("target_warehouse", function() {
return {
filters: [

View File

@@ -22,6 +22,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Asset",
@@ -51,6 +52,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Transaction Date",
@@ -79,6 +81,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Company",
@@ -108,6 +111,7 @@
"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,
@@ -135,6 +139,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Source Warehouse",
@@ -164,6 +169,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Target Warehouse",
@@ -193,6 +199,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amended From",
@@ -221,7 +228,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-11-07 05:49:47.558549",
"modified": "2017-02-17 16:09:32.069344",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Asset Movement",
@@ -238,7 +245,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -259,7 +265,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -280,7 +285,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -295,7 +299,9 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -0,0 +1,30 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Bank Guarantee', {
refresh: function(frm) {
cur_frm.set_query("account", function() {
return {
"filters": {
"account_type": "Bank",
"is_group": 0
}
};
});
cur_frm.set_query("project", function() {
return {
"filters": {
"customer": cur_frm.doc.customer
}
};
});
},
start_date: function(frm) {
var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
cur_frm.set_value("end_date", end_date);
},
validity: function(frm) {
var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
cur_frm.set_value("end_date", end_date);
}
});

View File

@@ -1,34 +1,37 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "",
"autoname": "BG-.#####",
"beta": 0,
"creation": "2016-07-21 15:49:53.776461",
"creation": "2016-12-17 10:43:35.731631",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"document_type": "Document",
"editable_grid": 1,
"engine": "InnoDB",
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "student_batch_name",
"fieldname": "customer",
"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": "Student Batch Name",
"label": "Customer",
"length": 0,
"no_copy": 0,
"options": "Student Batch Name",
"options": "Customer",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -42,51 +45,24 @@
"unique": 0
},
{
"allow_on_submit": 0,
"allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "academic_year",
"fieldname": "project",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Academic Year",
"length": 0,
"no_copy": 0,
"options": "Academic Year",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "1",
"fieldname": "enabled",
"fieldtype": "Check",
"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": "Active",
"label": "Project",
"length": 0,
"no_copy": 0,
"options": "Project",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -100,16 +76,79 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_2",
"fieldname": "account",
"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": "Bank Account",
"length": 0,
"no_copy": 0,
"options": "Account",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Amount",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "column_break_6",
"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,
@@ -127,22 +166,23 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "program",
"fieldtype": "Link",
"fieldname": "start_date",
"fieldtype": "Date",
"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": "Program",
"in_standard_filter": 0,
"label": "Start Date",
"length": 0,
"no_copy": 0,
"options": "Program",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -156,141 +196,179 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "academic_term",
"description": "",
"fieldname": "validity",
"fieldtype": "Int",
"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": "Validity in Days",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "end_date",
"fieldtype": "Date",
"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": "End Date",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "bank_guarantee_number",
"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": "Bank Guarantee Number",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 1
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
"columns": 0,
"fieldname": "section_break_10",
"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": "More Information",
"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,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "more_information",
"fieldtype": "Text Editor",
"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": "Notes",
"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,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "amended_from",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Academic Term",
"length": 0,
"no_copy": 0,
"options": "Academic Term",
"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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Students",
"label": "Amended From",
"length": 0,
"no_copy": 0,
"no_copy": 1,
"options": "Bank Guarantee",
"permlevel": 0,
"precision": "",
"print_hide": 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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "students",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Students",
"length": 0,
"no_copy": 0,
"options": "Student Batch Student",
"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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "section_break_8",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Instructors",
"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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "instructors",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Instructors",
"length": 0,
"no_copy": 0,
"options": "Student Batch Instructor",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
@@ -299,20 +377,20 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"is_submittable": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-12-01 13:18:12.024001",
"modified": "2017-04-25 13:31:49.627831",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student Batch",
"module": "Accounts",
"name": "Bank Guarantee",
"name_case": "",
"owner": "Administrator",
"permissions": [
@@ -321,49 +399,50 @@
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"delete": 0,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Academics User",
"role": "Accounts User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"submit": 1,
"write": 1
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"email": 0,
"export": 0,
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"print": 1,
"read": 1,
"report": 0,
"role": "Instructor",
"report": 1,
"role": "Accounts Manager",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
"share": 1,
"submit": 1,
"write": 1
}
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"search_fields": "customer",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "",
"title_field": "customer",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -6,5 +6,5 @@ from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
class StudentBatchStudent(Document):
class BankGuarantee(Document):
pass

View File

@@ -6,7 +6,7 @@ from __future__ import unicode_literals
import frappe
import unittest
# test_records = frappe.get_test_records('Payment Gateway')
# test_records = frappe.get_test_records('Bank Guarantee')
class TestPaymentGateway(unittest.TestCase):
class TestBankGuarantee(unittest.TestCase):
pass

View File

@@ -3,13 +3,13 @@
frappe.ui.form.on("Bank Reconciliation", {
setup: function(frm) {
frm.get_docfield("payment_entries").allow_bulk_edit = 1;
frm.add_fetch("bank_account", "account_currency", "account_currency");
},
onload: function(frm) {
var default_bank_account = locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"];
let default_bank_account = frappe.defaults.get_user_default("Company")?
locals[":Company"][frappe.defaults.get_user_default("Company")]["default_bank_account"]: "";
frm.set_value("bank_account", default_bank_account);
frm.set_query("bank_account", function() {

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 1,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
@@ -7,11 +8,15 @@
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Document",
"editable_grid": 0,
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"description": "Select account head of the bank where cheque was deposited.",
"fieldname": "bank_account",
"fieldtype": "Link",
@@ -19,7 +24,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Bank Account",
"length": 0,
"no_copy": 0,
@@ -28,6 +35,7 @@
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -35,16 +43,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "account_currency",
"fieldtype": "Link",
"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": "Account Currency",
"length": 0,
"no_copy": 0,
@@ -53,6 +65,7 @@
"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,
@@ -60,16 +73,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "from_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "From Date",
"length": 0,
"no_copy": 0,
@@ -77,6 +94,7 @@
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -84,16 +102,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "to_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "To Date",
"length": 0,
"no_copy": 0,
@@ -101,6 +123,7 @@
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -108,16 +131,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "include_reconciled_entries",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Include Reconciled Entries",
"length": 0,
"no_copy": 0,
@@ -125,6 +152,7 @@
"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,
@@ -132,16 +160,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "get_payment_entries",
"fieldtype": "Button",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Get Payment Entries",
"length": 0,
"no_copy": 0,
@@ -150,6 +182,7 @@
"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,
@@ -157,16 +190,20 @@
"unique": 0
},
{
"allow_bulk_edit": 1,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "payment_entries",
"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": "Payment Entries",
"length": 0,
"no_copy": 0,
@@ -175,6 +212,7 @@
"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,
@@ -182,16 +220,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "update_clearance_date",
"fieldtype": "Button",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Update Clearance Date",
"length": 0,
"no_copy": 0,
@@ -200,6 +242,7 @@
"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,
@@ -207,16 +250,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "total_amount",
"fieldtype": "Currency",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Amount",
"length": 0,
"no_copy": 0,
@@ -225,6 +272,7 @@
"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,
@@ -232,19 +280,19 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 1,
"hide_toolbar": 1,
"icon": "fa fa-check",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 1,
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-06-28 13:11:09.396353",
"modified": "2017-04-21 16:58:26.902732",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Reconciliation",
@@ -274,7 +322,8 @@
"quick_entry": 1,
"read_only": 1,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_order": "ASC",
"track_seen": 0,
"version": 0
"track_changes": 0,
"track_seen": 0
}

View File

@@ -62,18 +62,21 @@ class BankReconciliation(Document):
for d in entries:
row = self.append('payment_entries', {})
d.amount = fmt_money(d.debit if d.debit else d.credit, 2, d.account_currency) + " " + (_("Dr") if d.debit else _("Cr"))
amount = d.debit if d.debit else d.credit
d.amount = fmt_money(amount, 2, d.account_currency) + " " + (_("Dr") if d.debit else _("Cr"))
d.pop("credit")
d.pop("debit")
d.pop("account_currency")
row.update(d)
self.total_amount += flt(d.amount)
self.total_amount += flt(amount)
def update_clearance_date(self):
clearance_date_updated = False
for d in self.get('payment_entries'):
if d.clearance_date:
if not d.payment_document:
frappe.throw(_("Row #{0}: Payment document is required to complete the trasaction"))
if d.cheque_date and getdate(d.clearance_date) < getdate(d.cheque_date):
frappe.throw(_("Row #{0}: Clearance date {1} cannot be before Cheque Date {2}")
.format(d.idx, d.clearance_date, d.cheque_date))

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
@@ -10,6 +11,7 @@
"editable_grid": 1,
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -20,7 +22,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Payment Document",
"length": 0,
"no_copy": 0,
@@ -30,6 +34,7 @@
"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,
@@ -37,17 +42,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 1,
"columns": 2,
"fieldname": "payment_entry",
"fieldtype": "Dynamic Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Payment Entry",
"length": 0,
"no_copy": 0,
@@ -58,6 +66,7 @@
"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,
@@ -66,6 +75,7 @@
"width": "50"
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -76,7 +86,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Against Account",
"length": 0,
"no_copy": 0,
@@ -86,6 +98,7 @@
"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,
@@ -94,6 +107,7 @@
"width": "15"
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -104,7 +118,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Amount",
"length": 0,
"no_copy": 0,
@@ -115,6 +131,7 @@
"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,
@@ -122,6 +139,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -132,7 +150,9 @@
"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,
@@ -140,6 +160,7 @@
"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,
@@ -148,6 +169,7 @@
"width": "50%"
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -158,7 +180,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Posting Date",
"length": 0,
"no_copy": 0,
@@ -168,6 +192,7 @@
"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,
@@ -175,17 +200,20 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 1,
"columns": 2,
"fieldname": "cheque_number",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Cheque Number",
"length": 0,
"no_copy": 0,
@@ -195,6 +223,7 @@
"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,
@@ -202,6 +231,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -212,7 +242,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Cheque Date",
"length": 0,
"no_copy": 0,
@@ -222,6 +254,7 @@
"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,
@@ -229,6 +262,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -239,7 +273,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Clearance Date",
"length": 0,
"no_copy": 0,
@@ -249,6 +285,7 @@
"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,
@@ -256,18 +293,18 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-11-17 11:39:00.308624",
"modified": "2017-06-23 12:07:50.883515",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Bank Reconciliation Detail",
@@ -276,6 +313,8 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_order": "ASC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -22,6 +22,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Budget Against",
@@ -51,6 +52,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Company",
@@ -81,6 +83,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Cost Center",
@@ -111,6 +114,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Project",
@@ -140,6 +144,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Fiscal Year",
@@ -169,6 +174,7 @@
"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,
@@ -197,6 +203,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Action if Annual Budget Exceeded",
@@ -228,6 +235,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Action if Accumulated Monthly Budget Exceeded",
@@ -258,6 +266,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Monthly Distribution",
@@ -287,6 +296,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amended From",
@@ -315,6 +325,7 @@
"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,
@@ -342,6 +353,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Budget Accounts",
@@ -371,7 +383,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-12-15 14:45:31.079107",
"modified": "2017-02-17 16:25:32.342055",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Budget",
@@ -388,7 +400,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -403,7 +414,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -83,7 +83,7 @@ def validate_expense_against_budget(args):
budget_records = frappe.db.sql("""
select
b.{budget_against_field}, ba.budget_amount, b.monthly_distribution,
b.{budget_against_field} as budget_against, ba.budget_amount, b.monthly_distribution,
b.action_if_annual_budget_exceeded,
b.action_if_accumulated_monthly_budget_exceeded
from
@@ -111,15 +111,15 @@ def validate_budget_records(args, budget_records):
args["month_end_date"] = get_last_day(args.posting_date)
compare_expense_with_budget(args, budget_amount,
_("Accumulated Monthly"), monthly_action)
_("Accumulated Monthly"), monthly_action, budget.budget_against)
if yearly_action in ("Stop", "Warn") and monthly_action != "Stop" \
and yearly_action != monthly_action:
compare_expense_with_budget(args, flt(budget.budget_amount),
_("Annual"), yearly_action)
_("Annual"), yearly_action, budget.budget_against)
def compare_expense_with_budget(args, budget_amount, action_for, action):
def compare_expense_with_budget(args, budget_amount, action_for, action, budget_against):
actual_expense = get_actual_expense(args)
if actual_expense > budget_amount:
diff = actual_expense - budget_amount
@@ -127,7 +127,7 @@ def compare_expense_with_budget(args, budget_amount, action_for, action):
msg = _("{0} Budget for Account {1} against {2} {3} is {4}. It will exceed by {5}").format(
_(action_for), frappe.bold(args.account), args.budget_against_field,
frappe.bold(args.budget_against),
frappe.bold(budget_against),
frappe.bold(fmt_money(budget_amount, currency=currency)),
frappe.bold(fmt_money(diff, currency=currency)))

View File

@@ -140,6 +140,33 @@ class TestBudget(unittest.TestCase):
budget.load_from_db()
budget.cancel()
def test_monthly_budget_against_parent_group_cost_center(self):
cost_center = "_Test Cost Center 3 - _TC"
if not frappe.db.exists("Cost Center", cost_center):
frappe.get_doc({
'doctype': 'Cost Center',
'cost_center_name': '_Test Cost Center 3',
'parent_cost_center': "_Test Company - _TC",
'company': '_Test Company',
'is_group': 0
}).insert(ignore_permissions=True)
budget = make_budget("Cost Center", cost_center)
frappe.db.set_value("Budget", budget.name, "action_if_accumulated_monthly_budget_exceeded", "Stop")
jv = make_journal_entry("_Test Account Cost for Goods Sold - _TC",
"_Test Bank - _TC", 40000, cost_center)
self.assertRaises(BudgetError, jv.submit)
budget.load_from_db()
budget.cancel()
jv.cancel()
frappe.delete_doc('Journal Entry', jv.name)
frappe.delete_doc('Cost Center', cost_center)
def set_total_expense_zero(posting_date, budget_against_field=None, budget_against_CC=None):
if budget_against_field == "Project":
budget_against = "_Test Project"
@@ -167,7 +194,8 @@ def make_budget(budget_against=None, cost_center=None):
if budget_against == "Project":
budget_list = frappe.get_all("Budget", fields=["name"], filters = {"name": ("like", "_Test Project/_Test Fiscal Year 2013%")})
else:
budget_list = frappe.get_all("Budget", fields=["name"], filters = {"name": ("like", "_Test Cost Center - _TC/_Test Fiscal Year 2013%")})
cost_center_name = "{0}%".format(cost_center or "_Test Cost Center - _TC/_Test Fiscal Year 2013")
budget_list = frappe.get_all("Budget", fields=["name"], filters = {"name": ("like", cost_center_name)})
for d in budget_list:
frappe.db.sql("delete from `tabBudget` where name = %(name)s", d)
frappe.db.sql("delete from `tabBudget Account` where parent = %(name)s", d)

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "naming_series:",
@@ -11,6 +12,7 @@
"editable_grid": 0,
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -21,6 +23,7 @@
"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,
@@ -39,6 +42,7 @@
"width": "50%"
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -49,6 +53,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Series",
@@ -63,10 +68,11 @@
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"set_only_once": 1,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -77,6 +83,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "C-Form No",
@@ -94,6 +101,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -104,6 +112,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Received Date",
@@ -121,6 +130,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -131,6 +141,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Customer",
@@ -149,6 +160,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -159,6 +171,7 @@
"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,
@@ -177,6 +190,7 @@
"width": "50%"
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -187,6 +201,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Company",
@@ -205,6 +220,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -215,6 +231,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Quarter",
@@ -233,6 +250,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -243,6 +261,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Amount",
@@ -261,6 +280,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -271,6 +291,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "State",
@@ -288,6 +309,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -298,6 +320,7 @@
"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,
@@ -314,6 +337,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -324,6 +348,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Invoices",
@@ -342,6 +367,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -352,6 +378,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Invoiced Amount",
@@ -370,6 +397,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -380,6 +408,7 @@
"ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amended From",
@@ -398,18 +427,18 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "fa fa-file-text",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 3,
"modified": "2016-11-07 05:51:03.273512",
"modified": "2017-06-13 14:28:56.667292",
"modified_by": "Administrator",
"module": "Accounts",
"name": "C-Form",
@@ -425,7 +454,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -446,7 +474,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -467,7 +494,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 1,
"print": 0,
"read": 1,
@@ -482,7 +508,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_order": "DESC",
"timeline_field": "customer",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -43,7 +43,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.cscript.parent_cost_center = function(doc, cdt, cdn) {
if(!doc.company){
msgprint(__('Please enter company name first'));
frappe.msgprint(__('Please enter company name first'));
}
}

View File

@@ -23,6 +23,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -50,6 +51,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Cost Center Name",
@@ -79,6 +81,7 @@
"ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Parent Cost Center",
@@ -109,6 +112,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Company",
@@ -139,6 +143,7 @@
"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,
@@ -167,6 +172,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Group",
@@ -194,7 +200,8 @@
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "lft",
@@ -223,7 +230,8 @@
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "rgt",
@@ -253,6 +261,7 @@
"ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "old_parent",
@@ -278,14 +287,14 @@
"icon": "fa fa-money",
"idx": 1,
"image_view": 0,
"in_create": 1,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-11-07 05:20:40.282432",
"modified": "2017-02-17 16:22:27.129572",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cost Center",
@@ -301,7 +310,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -322,7 +330,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -343,7 +350,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -364,7 +370,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -385,7 +390,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -401,6 +405,8 @@
"read_only": 0,
"read_only_onload": 0,
"search_fields": "parent_cost_center, is_group",
"show_name_in_global_search": 1,
"sort_order": "ASC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -13,7 +13,7 @@ $.extend(cur_frm.cscript, {
this.frm.toggle_enable('year_start_date', doc.__islocal)
this.frm.toggle_enable('year_end_date', doc.__islocal)
if (!doc.__islocal && (doc.name != sys_defaults.fiscal_year)) {
if (!doc.__islocal && (doc.name != frappe.sys_defaults.fiscal_year)) {
this.frm.add_custom_button(__("Default"),
this.frm.cscript.set_as_default, "fa fa-star");
this.frm.set_intro(__("To set this Fiscal Year as Default, click on 'Set as Default'"));
@@ -30,7 +30,7 @@ $.extend(cur_frm.cscript, {
year_start_date: function(doc, dt, dn) {
var me = this;
year_end_date =
var year_end_date =
frappe.datetime.add_days(frappe.datetime.add_months(this.frm.doc.year_start_date, 12), -1);
this.frm.set_value("year_end_date", year_end_date);
},

View File

@@ -3,24 +3,30 @@
"allow_import": 1,
"allow_rename": 0,
"autoname": "field:year",
"beta": 0,
"creation": "2013-01-22 16:50:25",
"custom": 0,
"description": "**Fiscal Year** represents a Financial Year. All accounting entries and other major transactions are tracked against **Fiscal Year**.",
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"description": "For e.g. 2012, 2012-13",
"fieldname": "year",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Year Name",
"length": 0,
"no_copy": 0,
@@ -28,7 +34,9 @@
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -39,19 +47,25 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "disabled",
"fieldtype": "Check",
"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": "Disabled",
"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,
@@ -62,12 +76,16 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "year_start_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Year Start Date",
"length": 0,
"no_copy": 1,
@@ -75,7 +93,9 @@
"oldfieldtype": "Date",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -86,18 +106,24 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "year_end_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Year End Date",
"length": 0,
"no_copy": 1,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -108,12 +134,16 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "companies",
"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": "Companies",
"length": 0,
"no_copy": 0,
@@ -121,7 +151,9 @@
"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,
@@ -133,13 +165,14 @@
"hide_toolbar": 0,
"icon": "fa fa-calendar",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-11-16 06:29:47.289982",
"modified": "2017-02-17 16:22:08.431278",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Fiscal Year",
@@ -266,8 +299,12 @@
"write": 0
}
],
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 1,
"sort_field": "name",
"sort_order": "DESC"
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -43,11 +43,13 @@ class FiscalYear(Document):
def on_update(self):
check_duplicate_fiscal_year(self)
frappe.cache().delete_value("fiscal_years")
def on_trash(self):
global_defaults = frappe.get_doc("Global Defaults")
if global_defaults.current_fiscal_year == self.name:
frappe.throw(_("You cannot delete Fiscal Year {0}. Fiscal Year {0} is set as default in Global Settings").format(self.name))
frappe.cache().delete_value("fiscal_years")
def validate_overlap(self):
existing_fiscal_years = frappe.db.sql("""select name from `tabFiscal Year`

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "GL.#######",
@@ -12,6 +13,7 @@
"editable_grid": 0,
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -22,6 +24,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Posting Date",
@@ -41,6 +44,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -51,6 +55,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Transaction Date",
@@ -70,6 +75,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -80,6 +86,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Account",
@@ -100,6 +107,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -110,6 +118,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Party Type",
@@ -128,6 +137,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -138,6 +148,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Party",
@@ -156,6 +167,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -166,6 +178,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Cost Center",
@@ -186,6 +199,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -196,6 +210,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Debit Amount",
@@ -217,6 +232,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -227,6 +243,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Credit Amount",
@@ -248,6 +265,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -258,6 +276,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Account Currency",
@@ -277,6 +296,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -287,6 +307,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Debit Amount in Account Currency",
@@ -306,6 +327,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -316,6 +338,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Credit Amount in Account Currency",
@@ -335,6 +358,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -345,6 +369,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Against",
@@ -364,6 +389,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -374,6 +400,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Against Voucher Type",
@@ -394,6 +421,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -404,6 +432,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Against Voucher",
@@ -424,6 +453,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -434,6 +464,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Voucher Type",
@@ -454,6 +485,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -464,6 +496,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Voucher No",
@@ -484,6 +517,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -494,6 +528,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Project",
@@ -513,6 +548,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -523,6 +559,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Remarks",
@@ -542,6 +579,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -552,6 +590,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Opening",
@@ -572,6 +611,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -582,6 +622,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Advance",
@@ -602,6 +643,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -612,6 +654,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Fiscal Year",
@@ -632,6 +675,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -642,6 +686,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Company",
@@ -662,18 +707,18 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "fa fa-list",
"idx": 1,
"image_view": 0,
"in_create": 1,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-12-15 14:44:41.098790",
"modified": "2017-04-27 13:18:06.617940",
"modified_by": "Administrator",
"module": "Accounts",
"name": "GL Entry",
@@ -689,7 +734,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -710,7 +754,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -731,7 +774,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -744,10 +786,12 @@
}
],
"quick_entry": 1,
"read_only": 0,
"read_only": 1,
"read_only_onload": 0,
"search_fields": "voucher_no,account,posting_date,against_voucher",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -2,13 +2,12 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
import frappe, erpnext
from frappe import _
from frappe.utils import flt, fmt_money, getdate, formatdate
from frappe.model.document import Document
from erpnext.accounts.party import validate_party_gle_currency, validate_party_frozen_disabled
from erpnext.accounts.utils import get_account_currency
from erpnext.setup.doctype.company.company import get_company_currency
from erpnext.accounts.utils import get_fiscal_year
from erpnext.exceptions import InvalidAccountCurrency
@@ -18,22 +17,27 @@ class GLEntry(Document):
def validate(self):
self.flags.ignore_submit_comment = True
self.check_mandatory()
self.pl_must_have_cost_center()
self.check_pl_account()
self.validate_cost_center()
self.validate_party()
self.validate_currency()
self.validate_and_set_fiscal_year()
def on_update_with_args(self, adv_adj, update_outstanding = 'Yes'):
self.validate_account_details(adv_adj)
if not self.flags.from_repost:
self.pl_must_have_cost_center()
self.check_pl_account()
self.validate_cost_center()
self.validate_party()
self.validate_currency()
def on_update_with_args(self, adv_adj, update_outstanding = 'Yes', from_repost=False):
if not from_repost:
self.validate_account_details(adv_adj)
check_freezing_date(self.posting_date, adv_adj)
validate_frozen_account(self.account, adv_adj)
check_freezing_date(self.posting_date, adv_adj)
validate_balance_type(self.account, adv_adj)
# Update outstanding amt on against voucher
if self.against_voucher_type in ['Journal Entry', 'Sales Invoice', 'Purchase Invoice'] \
and self.against_voucher and update_outstanding == 'Yes':
and self.against_voucher and update_outstanding == 'Yes' and not from_repost:
update_outstanding_amt(self.account, self.party_type, self.party, self.against_voucher_type,
self.against_voucher)
@@ -51,7 +55,7 @@ class GLEntry(Document):
elif account_type == "Payable":
frappe.throw(_("{0} {1}: Supplier is required against Payable account {2}")
.format(self.voucher_type, self.voucher_no, self.account))
# Zero value transaction is not allowed
if not (flt(self.debit) or flt(self.credit)):
frappe.throw(_("{0} {1}: Either debit or credit amount is required for {2}")
@@ -111,7 +115,7 @@ class GLEntry(Document):
validate_party_frozen_disabled(self.party_type, self.party)
def validate_currency(self):
company_currency = get_company_currency(self.company)
company_currency = erpnext.get_company_currency(self.company)
account_currency = get_account_currency(self.account)
if not self.account_currency:
@@ -119,7 +123,7 @@ class GLEntry(Document):
if account_currency != self.account_currency:
frappe.throw(_("{0} {1}: Accounting Entry for {2} can only be made in currency: {3}")
.format(self.voucher_type, self.voucher_no, self.account,
.format(self.voucher_type, self.voucher_no, self.account,
(account_currency or company_currency)), InvalidAccountCurrency)
if self.party_type and self.party:

View File

@@ -38,7 +38,7 @@ frappe.ui.form.on("Journal Entry", {
},
posting_date: function(frm) {
if(!frm.doc.multi_currency) return;
if(!frm.doc.multi_currency || !frm.doc.posting_date) return;
$.each(frm.doc.accounts || [], function(i, row) {
erpnext.journal_entry.set_exchange_rate(frm, row.doctype, row.name);
@@ -62,11 +62,10 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
if(this.frm.doc.__islocal && this.frm.doc.company) {
frappe.model.set_default_values(this.frm.doc);
$.each(this.frm.doc.accounts || [], function(i, jvd) {
frappe.model.set_default_values(jvd);
}
);
frappe.model.set_default_values(jvd);
});
if(!this.frm.doc.amended_from) this.frm.doc.posting_date = this.frm.posting_date || get_today();
if(!this.frm.doc.amended_from) this.frm.doc.posting_date = this.frm.posting_date || frappe.datetime.get_today();
}
},
@@ -86,9 +85,9 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
};
});
me.frm.set_query("party_type", "accounts", function(doc, cdt, cdn) {
return {
filters: {"name": ["in", ["Customer", "Supplier"]]}
me.frm.set_query("party_type", "accounts", function() {
return{
query: "erpnext.setup.doctype.party_type.party_type.get_party_type"
}
});
@@ -124,7 +123,7 @@ erpnext.accounts.JournalEntry = frappe.ui.form.Controller.extend({
// account filter
frappe.model.validate_missing(jvd, "account");
party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
var party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
out.filters.push([jvd.reference_type, party_account_field, "=", jvd.account]);
} else {
// party_type and party mandatory
@@ -243,7 +242,7 @@ cur_frm.cscript.update_totals = function(doc) {
cur_frm.cscript.get_balance = function(doc,dt,dn) {
cur_frm.cscript.update_totals(doc);
return $c_obj(cur_frm.doc, 'get_balance', '', function(r, rt){
cur_frm.refresh();
cur_frm.refresh();
});
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "naming_series:",
@@ -12,6 +13,7 @@
"editable_grid": 0,
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -22,6 +24,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -40,6 +43,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -51,6 +55,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Title",
@@ -69,6 +74,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -79,7 +85,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Entry Type",
@@ -100,6 +107,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -110,6 +118,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Series",
@@ -126,10 +135,11 @@
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"set_only_once": 1,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -140,6 +150,7 @@
"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,
@@ -158,6 +169,7 @@
"width": "50%"
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -167,7 +179,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Posting Date",
@@ -187,6 +200,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -196,7 +210,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Company",
@@ -217,6 +232,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -227,6 +243,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -246,6 +263,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -256,6 +274,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Accounting Entries",
@@ -276,6 +295,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -286,6 +306,7 @@
"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,
@@ -302,6 +323,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -312,7 +334,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Reference Number",
@@ -332,6 +355,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -342,6 +366,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference Date",
@@ -361,6 +386,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -370,7 +396,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "User Remark",
@@ -390,6 +417,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -400,6 +428,7 @@
"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,
@@ -416,6 +445,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -425,7 +455,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Debit",
@@ -446,6 +477,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -455,7 +487,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Credit",
@@ -476,6 +509,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -487,6 +521,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Difference (Dr - Cr)",
@@ -507,6 +542,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -518,6 +554,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Make Difference Entry",
@@ -536,6 +573,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -546,6 +584,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Multi Currency",
@@ -564,6 +603,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -574,6 +614,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Amount Currency",
@@ -593,6 +634,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 1,
"collapsible": 0,
@@ -603,6 +645,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Total Amount",
@@ -621,6 +664,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -631,6 +675,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Total Amount in Words",
@@ -648,6 +693,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@@ -658,6 +704,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference",
@@ -676,6 +723,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -685,7 +733,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Clearance Date",
@@ -705,6 +754,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -716,6 +766,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Remark",
@@ -735,6 +786,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -745,6 +797,7 @@
"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,
@@ -761,6 +814,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -771,6 +825,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Bill No",
@@ -790,6 +845,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -800,6 +856,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Bill Date",
@@ -819,6 +876,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -829,6 +887,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Due Date",
@@ -848,6 +907,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@@ -859,6 +919,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Write Off",
@@ -877,6 +938,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -889,6 +951,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Write Off Based On",
@@ -907,6 +970,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -918,6 +982,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Get Outstanding Invoices",
@@ -936,6 +1001,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -946,6 +1012,7 @@
"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,
@@ -963,6 +1030,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -974,6 +1042,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Write Off Amount",
@@ -992,6 +1061,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@@ -1002,6 +1072,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Printing Settings",
@@ -1020,6 +1091,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -1030,6 +1102,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Pay To / Recd From",
@@ -1047,6 +1120,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1057,6 +1131,7 @@
"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,
@@ -1074,6 +1149,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -1084,6 +1160,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Letter Head",
@@ -1102,6 +1179,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -1112,6 +1190,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Print Heading",
@@ -1132,6 +1211,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@@ -1142,6 +1222,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "More Information",
@@ -1161,6 +1242,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1171,6 +1253,7 @@
"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,
@@ -1189,6 +1272,7 @@
"width": "50%"
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1200,7 +1284,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Opening",
@@ -1221,17 +1306,19 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:inList([\"Credit Note\", \"Debit Note\"], doc.voucher_type)",
"depends_on": "eval:in_list([\"Credit Note\", \"Debit Note\"], doc.voucher_type)",
"fieldname": "stock_entry",
"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": "Stock Entry",
@@ -1251,6 +1338,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1261,6 +1349,7 @@
"ignore_user_permissions": 1,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amended From",
@@ -1281,19 +1370,19 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "fa fa-file-text",
"idx": 176,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-11-07 05:53:46.738161",
"modified": "2017-06-13 14:29:09.794076",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry",
@@ -1309,7 +1398,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -1330,7 +1418,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -1351,7 +1438,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -1367,8 +1453,10 @@
"read_only": 0,
"read_only_onload": 1,
"search_fields": "voucher_type,posting_date, due_date, cheque_no",
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "title",
"track_changes": 1,
"track_seen": 0
}

View File

@@ -2,13 +2,14 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe, json
import frappe, erpnext, json
from frappe.utils import cstr, flt, fmt_money, formatdate
from frappe import msgprint, _, scrub
from erpnext.controllers.accounts_controller import AccountsController
from erpnext.accounts.utils import get_balance_on, get_account_currency
from erpnext.setup.utils import get_company_currency
from erpnext.accounts.party import get_party_account
from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount
from erpnext.hr.doctype.employee_loan.employee_loan import update_disbursement_status
class JournalEntry(AccountsController):
def __init__(self, arg1, arg2=None):
@@ -37,19 +38,15 @@ class JournalEntry(AccountsController):
self.validate_credit_debit_note()
self.validate_empty_accounts_table()
self.set_account_and_party_balance()
self.clear_zero_debit_credit_row()
if not self.title:
self.title = self.get_title()
def clear_zero_debit_credit_row(self):
self.accounts = [account for account in self.accounts
if not (account.debit_in_account_currency==0.0 and account.credit_in_account_currency==0.0)]
def on_submit(self):
self.check_credit_limit()
self.make_gl_entries()
self.update_advance_paid()
self.update_expense_claim()
self.update_employee_loan()
def get_title(self):
return self.pay_to_recd_from or self.accounts[0].account
@@ -73,7 +70,9 @@ class JournalEntry(AccountsController):
self.make_gl_entries(1)
self.update_advance_paid()
self.update_expense_claim()
self.update_employee_loan()
self.unlink_advance_entry_reference()
self.unlink_asset_reference()
def unlink_advance_entry_reference(self):
for d in self.get("accounts"):
@@ -83,6 +82,18 @@ class JournalEntry(AccountsController):
d.reference_type = ''
d.reference_name = ''
d.db_update()
def unlink_asset_reference(self):
for d in self.get("accounts"):
if d.reference_type=="Asset" and d.reference_name:
asset = frappe.get_doc("Asset", d.reference_name)
for s in asset.get("schedules"):
if s.journal_entry == self.name:
s.db_set("journal_entry", None)
asset.value_after_depreciation += s.depreciation_amount
asset.db_set("value_after_depreciation", asset.value_after_depreciation)
asset.set_status()
def validate_party(self):
for d in self.get("accounts"):
@@ -326,11 +337,11 @@ class JournalEntry(AccountsController):
if d.account_currency == self.company_currency:
d.exchange_rate = 1
elif not d.exchange_rate or d.exchange_rate == 1 or \
(d.reference_type in ("Sales Invoice", "Purchase Invoice")
(d.reference_type in ("Sales Invoice", "Purchase Invoice")
and d.reference_name and self.posting_date):
# Modified to include the posting date for which to retreive the exchange rate
d.exchange_rate = get_exchange_rate(self.posting_date, d.account, d.account_currency,
d.exchange_rate = get_exchange_rate(self.posting_date, d.account, d.account_currency,
self.company, d.reference_type, d.reference_name, d.debit, d.credit, d.exchange_rate)
if not d.exchange_rate:
@@ -375,7 +386,7 @@ class JournalEntry(AccountsController):
bank_amount = party_amount = total_amount = 0.0
currency = bank_account_currency = party_account_currency = pay_to_recd_from= None
for d in self.get('accounts'):
if d.party_type and d.party:
if d.party_type in ['Customer', 'Supplier'] and d.party:
if not pay_to_recd_from:
pay_to_recd_from = frappe.db.get_value(d.party_type, d.party,
"customer_name" if d.party_type=="Customer" else "supplier_name")
@@ -436,7 +447,7 @@ class JournalEntry(AccountsController):
if not self.get('accounts'):
msgprint(_("'Entries' cannot be empty"), raise_exception=True)
else:
flag, self.total_debit, self.total_credit = 0, 0, 0
self.total_debit, self.total_credit = 0, 0
diff = flt(self.difference, self.precision("difference"))
# If any row without amount, set the diff on that row
@@ -503,11 +514,15 @@ class JournalEntry(AccountsController):
def update_expense_claim(self):
for d in self.accounts:
if d.reference_type=="Expense Claim":
amt = frappe.db.sql("""select sum(debit) as amt from `tabJournal Entry Account`
where reference_type = "Expense Claim" and
reference_name = %s and docstatus = 1""", d.reference_name ,as_dict=1)[0].amt
frappe.db.set_value("Expense Claim", d.reference_name , "total_amount_reimbursed", amt)
if d.reference_type=="Expense Claim" and d.reference_name:
doc = frappe.get_doc("Expense Claim", d.reference_name)
update_reimbursed_amount(doc)
def update_employee_loan(self):
for d in self.accounts:
if d.reference_type=="Employee Loan" and flt(d.debit) > 0:
doc = frappe.get_doc("Employee Loan", d.reference_name)
update_disbursement_status(doc)
def validate_expense_claim(self):
for d in self.accounts:
@@ -566,7 +581,7 @@ def get_default_bank_cash_account(company, account_type=None, mode_of_payment=No
if account:
account_details = frappe.db.get_value("Account", account,
["account_currency", "account_type"], as_dict=1)
return frappe._dict({
"account": account,
"balance": get_balance_on(account),
@@ -651,9 +666,9 @@ def get_payment_entry(ref_doc, args):
cost_center = frappe.db.get_value("Company", ref_doc.company, "cost_center")
exchange_rate = 1
if args.get("party_account"):
# Modified to include the posting date for which the exchange rate is required.
# Modified to include the posting date for which the exchange rate is required.
# Assumed to be the posting date in the reference document
exchange_rate = get_exchange_rate(ref_doc.get("posting_date") or ref_doc.get("transaction_date"),
exchange_rate = get_exchange_rate(ref_doc.get("posting_date") or ref_doc.get("transaction_date"),
args.get("party_account"), args.get("party_account_currency"),
ref_doc.company, ref_doc.doctype, ref_doc.name)
@@ -687,10 +702,10 @@ def get_payment_entry(ref_doc, args):
bank_account = get_default_bank_cash_account(ref_doc.company, "Bank", account=args.get("bank_account"))
if bank_account:
bank_row.update(bank_account)
# Modified to include the posting date for which the exchange rate is required.
# Modified to include the posting date for which the exchange rate is required.
# Assumed to be the posting date of the reference date
bank_row.exchange_rate = get_exchange_rate(ref_doc.get("posting_date")
or ref_doc.get("transaction_date"), bank_account["account"],
bank_row.exchange_rate = get_exchange_rate(ref_doc.get("posting_date")
or ref_doc.get("transaction_date"), bank_account["account"],
bank_account["account_currency"], ref_doc.company)
bank_row.cost_center = cost_center
@@ -715,8 +730,13 @@ def get_payment_entry(ref_doc, args):
@frappe.whitelist()
def get_opening_accounts(company):
"""get all balance sheet accounts for opening entry"""
accounts = frappe.db.sql_list("""select name from tabAccount
where is_group=0 and report_type='Balance Sheet' and company=%s""", company)
accounts = frappe.db.sql_list("""select
name from tabAccount
where
is_group=0 and report_type='Balance Sheet' and company=%s and
name not in(select distinct account from tabWarehouse where
account is not null and account != '')
order by name asc""", frappe.db.escape(company))
return [{"account": a, "balance": get_balance_on(a)} for a in accounts]
@@ -737,7 +757,7 @@ def get_outstanding(args):
if isinstance(args, basestring):
args = json.loads(args)
company_currency = get_company_currency(args.get("company"))
company_currency = erpnext.get_company_currency(args.get("company"))
if args.get("doctype") == "Journal Entry":
condition = " and party=%(party)s" if args.get("party") else ""
@@ -796,7 +816,7 @@ def get_account_balance_and_party_type(account, date, company, debit=None, credi
if not frappe.has_permission("Account"):
frappe.msgprint(_("No Permission"), raise_exception=1)
company_currency = get_company_currency(company)
company_currency = erpnext.get_company_currency(company)
account_details = frappe.db.get_value("Account", account, ["account_type", "account_currency"], as_dict=1)
if not account_details:
@@ -814,8 +834,8 @@ def get_account_balance_and_party_type(account, date, company, debit=None, credi
"party_type": party_type,
"account_type": account_details.account_type,
"account_currency": account_details.account_currency or company_currency,
# The date used to retreive the exchange rate here is the date passed in
# The date used to retreive the exchange rate here is the date passed in
# as an argument to this function. It is assumed to be the date on which the balance is sought
"exchange_rate": get_exchange_rate(date, account, account_details.account_currency,
company, debit=debit, credit=credit, exchange_rate=exchange_rate)
@@ -829,7 +849,7 @@ def get_account_balance_and_party_type(account, date, company, debit=None, credi
# Added posting_date as one of the parameters of get_exchange_rate
@frappe.whitelist()
def get_exchange_rate(posting_date, account, account_currency=None, company=None,
def get_exchange_rate(posting_date, account=None, account_currency=None, company=None,
reference_type=None, reference_name=None, debit=None, credit=None, exchange_rate=None):
from erpnext.setup.utils import get_exchange_rate
account_details = frappe.db.get_value("Account", account,
@@ -844,20 +864,15 @@ def get_exchange_rate(posting_date, account, account_currency=None, company=None
if not account_currency:
account_currency = account_details.account_currency
company_currency = get_company_currency(company)
company_currency = erpnext.get_company_currency(company)
if account_currency != company_currency:
if reference_type in ("Sales Invoice", "Purchase Invoice") and reference_name:
exchange_rate = frappe.db.get_value(reference_type, reference_name, "conversion_rate")
elif account_details and account_details.account_type == "Bank" and \
((account_details.root_type == "Asset" and flt(credit) > 0) or
(account_details.root_type == "Liability" and debit)):
exchange_rate = get_average_exchange_rate(account)
# The date used to retreive the exchange rate here is the date passed
# The date used to retreive the exchange rate here is the date passed
# in as an argument to this function.
if not exchange_rate and account_currency and posting_date:
elif (not exchange_rate or exchange_rate==1) and account_currency and posting_date:
exchange_rate = get_exchange_rate(account_currency, company_currency, posting_date)
else:
exchange_rate = 1

View File

@@ -4,6 +4,7 @@
from __future__ import unicode_literals
import unittest, frappe
from frappe.utils import flt
from erpnext.accounts.doctype.account.test_account import get_inventory_account
from erpnext.exceptions import InvalidAccountCurrency
@@ -83,7 +84,8 @@ class TestJournalEntry(unittest.TestCase):
jv = frappe.copy_doc(test_records[0])
jv.get("accounts")[0].update({
"account": "_Test Warehouse - _TC",
"account": get_inventory_account('_Test Company'),
"company": "_Test Company",
"party_type": None,
"party": None
})
@@ -171,20 +173,6 @@ class TestJournalEntry(unittest.TestCase):
})
jv.submit()
def test_clear_blank_rows(self):
je = make_journal_entry("_Test Bank - _TC", "_Test Account Stock Expenses - _TC", 100, save=False)
je.append("accounts", {
"account": "_Test Cash - _TC",
"debit_in_account_currency": 0,
"credit_in_account_currency": 0,
"exchange_rate": 1
})
self.assertEqual(len(je.get("accounts")), 3)
je.save()
self.assertEqual(len(je.get("accounts")), 2)
def make_journal_entry(account1, account2, amount, cost_center=None, posting_date=None, exchange_rate=1, save=True, submit=False, project=None):
if not cost_center:

View File

@@ -8,7 +8,9 @@
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Document",
"editable_grid": 1,
"engine": "InnoDB",
"fields": [
{
"allow_on_submit": 0,
@@ -20,8 +22,10 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Account",
"length": 0,
"no_copy": 0,
@@ -33,6 +37,7 @@
"print_hide_if_no_value": 0,
"print_width": "250px",
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 1,
@@ -51,7 +56,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Account Type",
"length": 0,
"no_copy": 0,
@@ -60,6 +67,7 @@
"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,
@@ -77,7 +85,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Account Balance",
"length": 0,
"no_copy": 1,
@@ -88,6 +98,7 @@
"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,
@@ -106,8 +117,10 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Cost Center",
"length": 0,
"no_copy": 0,
@@ -119,6 +132,7 @@
"print_hide_if_no_value": 0,
"print_width": "180px",
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -137,13 +151,16 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -161,7 +178,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Party Type",
"length": 0,
"no_copy": 0,
@@ -170,6 +189,7 @@
"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,
@@ -187,7 +207,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Party",
"length": 0,
"no_copy": 0,
@@ -196,6 +218,7 @@
"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,
@@ -213,7 +236,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Party Balance",
"length": 0,
"no_copy": 0,
@@ -223,6 +248,7 @@
"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,
@@ -242,7 +268,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Currency",
"length": 0,
"no_copy": 0,
@@ -251,6 +279,7 @@
"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,
@@ -268,7 +297,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Account Currency",
"length": 0,
"no_copy": 1,
@@ -278,6 +309,7 @@
"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,
@@ -295,7 +327,9 @@
"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,
@@ -303,6 +337,7 @@
"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,
@@ -320,7 +355,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Exchange Rate",
"length": 0,
"no_copy": 0,
@@ -329,6 +366,7 @@
"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,
@@ -346,7 +384,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amount",
"length": 0,
"no_copy": 0,
@@ -354,6 +394,7 @@
"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,
@@ -371,7 +412,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Debit",
"length": 0,
"no_copy": 0,
@@ -381,6 +424,7 @@
"print_hide": 0,
"print_hide_if_no_value": 1,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -398,7 +442,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Debit in Company Currency",
"length": 0,
"no_copy": 1,
@@ -410,6 +456,7 @@
"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,
@@ -427,13 +474,16 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -451,7 +501,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Credit",
"length": 0,
"no_copy": 0,
@@ -461,6 +513,7 @@
"print_hide": 0,
"print_hide_if_no_value": 1,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -478,7 +531,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Credit in Company Currency",
"length": 0,
"no_copy": 1,
@@ -490,6 +545,7 @@
"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,
@@ -507,7 +563,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference",
"length": 0,
"no_copy": 0,
@@ -515,6 +573,7 @@
"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,
@@ -532,16 +591,19 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference Type",
"length": 0,
"no_copy": 0,
"options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset",
"options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim\nAsset\nEmployee Loan",
"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,
@@ -559,7 +621,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Reference Name",
"length": 0,
"no_copy": 0,
@@ -569,6 +633,7 @@
"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,
@@ -586,7 +651,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Project",
"length": 0,
"no_copy": 0,
@@ -596,6 +663,7 @@
"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,
@@ -613,13 +681,16 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"length": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -637,7 +708,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Advance",
"length": 0,
"no_copy": 1,
@@ -648,6 +721,7 @@
"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,
@@ -665,7 +739,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Against Account",
"length": 0,
"no_copy": 1,
@@ -675,6 +751,7 @@
"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,
@@ -692,7 +769,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-08-26 01:54:32.267927",
"modified": "2017-03-02 05:02:10.102039",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry Account",
@@ -701,6 +778,8 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
}

View File

@@ -23,6 +23,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Mode of Payment",
@@ -52,6 +53,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Type",
@@ -81,6 +83,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Accounts",
@@ -111,7 +114,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-11-07 05:54:39.560399",
"modified": "2017-02-17 16:31:34.207683",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Mode of Payment",
@@ -127,7 +130,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -148,7 +150,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -163,6 +164,8 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 1,
"sort_order": "ASC",
"track_changes": 0,
"track_seen": 0
}

View File

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

View File

@@ -2,13 +2,13 @@
// License: GNU General Public License v3. See license.txt
cur_frm.cscript.onload = function(doc,cdt,cdn){
if(doc.__islocal){
var callback1 = function(r,rt){
refresh_field('percentages');
}
if(doc.__islocal){
var callback1 = function(r,rt){
refresh_field('percentages');
}
return $c('runserverobj',args={'method':'get_months', 'docs':doc}, callback1);
}
return $c('runserverobj', {'method':'get_months', 'docs':doc}, callback1);
}
}
cur_frm.cscript.refresh = function(doc,cdt,cdn){

View File

@@ -11,9 +11,8 @@ frappe.ui.form.on('Payment Entry', {
},
setup: function(frm) {
var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable";
frm.set_query("paid_from", function() {
var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable";
var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type) ?
["Bank", "Cash"] : party_account_type;
@@ -26,9 +25,18 @@ frappe.ui.form.on('Payment Entry', {
}
});
frm.set_query("party_type", function() {
return{
"filters": {
"name": ["in",["Customer","Supplier"]],
}
}
});
frm.set_query("paid_to", function() {
var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable";
var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ?
["Bank", "Cash"] : party_account_type;
["Bank", "Cash"] : party_account_type;
return {
filters: {
@@ -70,6 +78,20 @@ frappe.ui.form.on('Payment Entry', {
filters: { "name": ["in", doctypes] }
};
});
frm.set_query("reference_name", "references", function(doc, cdt, cdn) {
child = locals[cdt][cdn];
filters = {"docstatus": 1, "company": doc.company};
party_type_doctypes = ['Sales Invoice', 'Sales Order', 'Purchase Invoice', 'Purchase Order'];
if (in_list(party_type_doctypes, child.reference_doctype)) {
filters[doc.party_type.toLowerCase()] = doc.party;
}
return {
filters: filters
};
});
},
refresh: function(frm) {
@@ -79,8 +101,13 @@ frappe.ui.form.on('Payment Entry', {
frm.events.show_general_ledger(frm);
},
company: function(frm) {
frm.events.hide_unhide_fields(frm);
frm.events.set_dynamic_labels(frm);
},
hide_unhide_fields: function(frm) {
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
frm.toggle_display("source_exchange_rate",
(frm.doc.paid_amount && frm.doc.paid_from_account_currency != company_currency));
@@ -118,7 +145,7 @@ frappe.ui.form.on('Payment Entry', {
},
set_dynamic_labels: function(frm) {
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
frm.set_currency_labels(["base_paid_amount", "base_received_amount", "base_total_allocated_amount",
"difference_amount"], company_currency);
@@ -131,6 +158,11 @@ frappe.ui.form.on('Payment Entry', {
frm.set_currency_labels(["total_allocated_amount", "unallocated_amount"], party_account_currency);
var currency_field = (frm.doc.payment_type=="Receive") ? "paid_from_account_currency" : "paid_to_account_currency"
frm.set_df_property("total_allocated_amount", "options", currency_field);
frm.set_df_property("unallocated_amount", "options", currency_field);
frm.set_df_property("party_balance", "options", currency_field);
frm.set_currency_labels(["total_amount", "outstanding_amount", "allocated_amount"],
party_account_currency, "references");
@@ -164,8 +196,8 @@ frappe.ui.form.on('Payment Entry', {
if(frm.doc.payment_type == "Internal Transfer") {
$.each(["party", "party_balance", "paid_from", "paid_to",
"references", "total_allocated_amount"], function(i, field) {
frm.set_value(field, null);
})
frm.set_value(field, null);
});
} else {
if(!frm.doc.party)
frm.set_value("party_type", frm.doc.payment_type=="Receive" ? "Customer" : "Supplier");
@@ -182,9 +214,10 @@ frappe.ui.form.on('Payment Entry', {
$.each(["party", "party_balance", "paid_from", "paid_to",
"paid_from_account_currency", "paid_from_account_balance",
"paid_to_account_currency", "paid_to_account_balance",
"references", "total_allocated_amount"], function(i, field) {
"references", "total_allocated_amount"],
function(i, field) {
frm.set_value(field, null);
})
})
}
},
@@ -258,37 +291,39 @@ frappe.ui.form.on('Payment Entry', {
set_account_currency_and_balance: function(frm, account, currency_field,
balance_field, callback_function) {
frappe.call({
method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_account_details",
args: {
"account": account,
"date": frm.doc.posting_date
},
callback: function(r, rt) {
if(r.message) {
frm.set_value(currency_field, r.message['account_currency']);
frm.set_value(balance_field, r.message['account_balance']);
if (frm.doc.posting_date && account) {
frappe.call({
method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_account_details",
args: {
"account": account,
"date": frm.doc.posting_date
},
callback: function(r, rt) {
if(r.message) {
frm.set_value(currency_field, r.message['account_currency']);
frm.set_value(balance_field, r.message['account_balance']);
if(frm.doc.payment_type=="Receive" && currency_field=="paid_to_account_currency") {
frm.toggle_reqd(["reference_no", "reference_date"],
(r.message['account_type'] == "Bank" ? 1 : 0));
if(!frm.doc.received_amount && frm.doc.paid_amount)
frm.events.paid_amount(frm);
} else if(frm.doc.payment_type=="Pay" && currency_field=="paid_from_account_currency") {
frm.toggle_reqd(["reference_no", "reference_date"],
(r.message['account_type'] == "Bank" ? 1 : 0));
if(frm.doc.payment_type=="Receive" && currency_field=="paid_to_account_currency") {
frm.toggle_reqd(["reference_no", "reference_date"],
(r.message['account_type'] == "Bank" ? 1 : 0));
if(!frm.doc.received_amount && frm.doc.paid_amount)
frm.events.paid_amount(frm);
} else if(frm.doc.payment_type=="Pay" && currency_field=="paid_from_account_currency") {
frm.toggle_reqd(["reference_no", "reference_date"],
(r.message['account_type'] == "Bank" ? 1 : 0));
if(!frm.doc.paid_amount && frm.doc.received_amount)
frm.events.received_amount(frm);
if(!frm.doc.paid_amount && frm.doc.received_amount)
frm.events.received_amount(frm);
}
if(callback_function) callback_function(frm);
frm.events.hide_unhide_fields(frm);
frm.events.set_dynamic_labels(frm);
}
if(callback_function) callback_function(frm);
frm.events.hide_unhide_fields(frm);
frm.events.set_dynamic_labels(frm);
}
}
});
});
}
},
paid_from_account_currency: function(frm) {
@@ -299,10 +334,12 @@ frappe.ui.form.on('Payment Entry', {
frm.set_value("source_exchange_rate", 1);
} else if (frm.doc.paid_from){
if (in_list(["Internal Transfer", "Pay"], frm.doc.payment_type)) {
var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
frappe.call({
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_average_exchange_rate",
method: "erpnext.setup.utils.get_exchange_rate",
args: {
account: frm.doc.paid_from
from_currency: frm.doc.paid_from_account_currency,
to_currency: company_currency
},
callback: function(r, rt) {
frm.set_value("source_exchange_rate", r.message);
@@ -469,13 +506,17 @@ frappe.ui.form.on('Payment Entry', {
}
});
if((frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier")) {
if(total_positive_outstanding > total_negative_outstanding)
frm.set_value("paid_amount",
total_positive_outstanding - total_negative_outstanding);
} else if (total_negative_outstanding &&
(total_positive_outstanding < total_negative_outstanding)) {
if(
(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier")
) {
if(total_positive_outstanding > total_negative_outstanding)
frm.set_value("paid_amount",
total_positive_outstanding - total_negative_outstanding);
} else if (
total_negative_outstanding &&
total_positive_outstanding < total_negative_outstanding
) {
frm.set_value("received_amount",
total_negative_outstanding - total_positive_outstanding);
}
@@ -543,9 +584,11 @@ frappe.ui.form.on('Payment Entry', {
row.allocated_amount = 0 //If allocate payment amount checkbox is unchecked, set zero to allocate amount
if(frm.doc.allocate_payment_amount){
if(row.outstanding_amount > 0 && allocated_positive_outstanding > 0) {
if(row.outstanding_amount >= allocated_positive_outstanding)
row.allocated_amount = allocated_positive_outstanding;
else row.allocated_amount = row.outstanding_amount;
if(row.outstanding_amount >= allocated_positive_outstanding) {
row.allocated_amount = allocated_positive_outstanding;
} else {
row.allocated_amount = row.outstanding_amount;
}
allocated_positive_outstanding -= flt(row.allocated_amount);
} else if (row.outstanding_amount < 0 && allocated_negative_outstanding) {
@@ -563,7 +606,8 @@ frappe.ui.form.on('Payment Entry', {
},
set_total_allocated_amount: function(frm) {
var total_allocated_amount = base_total_allocated_amount = 0.0;
var total_allocated_amount = 0.0;
var base_total_allocated_amount = 0.0;
$.each(frm.doc.references || [], function(i, row) {
if (row.allocated_amount) {
total_allocated_amount += flt(row.allocated_amount);
@@ -635,19 +679,21 @@ frappe.ui.form.on('Payment Entry', {
return;
}
if(frm.doc.party_type=="Customer"
&& !in_list(["Sales Order", "Sales Invoice", "Journal Entry"], row.reference_doctype)) {
frappe.model.set_value(row.doctype, row.name, "reference_doctype", null);
frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice or Journal Entry", [row.idx]));
return false;
}
if(frm.doc.party_type=="Customer" &&
!in_list(["Sales Order", "Sales Invoice", "Journal Entry"], row.reference_doctype)
) {
frappe.model.set_value(row.doctype, row.name, "reference_doctype", null);
frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice or Journal Entry", [row.idx]));
return false;
}
if(frm.doc.party_type=="Supplier" && !in_list(["Purchase Order",
"Purchase Invoice", "Journal Entry"], row.reference_doctype)) {
frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
return false;
}
if(frm.doc.party_type=="Supplier" &&
!in_list(["Purchase Order", "Purchase Invoice", "Journal Entry"], row.reference_doctype)
) {
frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
return false;
}
}
if (row) {
@@ -741,4 +787,4 @@ frappe.ui.form.on('Payment Entry Deduction', {
deductions_remove: function(frm) {
frm.events.set_difference_amount(frm);
}
})
})

File diff suppressed because it is too large Load Diff

View File

@@ -48,6 +48,8 @@ class PaymentEntry(AccountsController):
self.validate_transaction_reference()
self.set_title()
self.set_remarks()
self.validate_duplicate_entry()
self.validate_allocated_amount()
def on_submit(self):
self.setup_party_account_field()
@@ -61,7 +63,22 @@ class PaymentEntry(AccountsController):
self.make_gl_entries(cancel=1)
self.update_advance_paid()
self.delink_advance_entry_references()
def validate_duplicate_entry(self):
reference_names = []
for d in self.get("references"):
if (d.reference_doctype, d.reference_name) in reference_names:
frappe.throw(_("Row #{0}: Duplicate entry in References {1} {2}").format(d.idx, d.reference_doctype, d.reference_name))
reference_names.append((d.reference_doctype, d.reference_name))
def validate_allocated_amount(self):
for d in self.get("references"):
if (flt(d.allocated_amount))> 0:
if flt(d.allocated_amount) > flt(d.outstanding_amount):
frappe.throw(_("Row #{0}: Allocated Amount cannot be greater than outstanding amount.").format(d.idx))
def delink_advance_entry_references(self):
for reference in self.references:
if reference.reference_doctype in ("Sales Invoice", "Purchase Invoice"):
@@ -149,8 +166,6 @@ class PaymentEntry(AccountsController):
if self.paid_from and not self.source_exchange_rate:
if self.paid_from_account_currency == self.company_currency:
self.source_exchange_rate = 1
elif self.payment_type in ("Pay", "Internal Transfer"):
self.source_exchange_rate = get_average_exchange_rate(self.paid_from)
else:
self.source_exchange_rate = get_exchange_rate(self.paid_from_account_currency,
self.company_currency, self.posting_date)
@@ -477,9 +492,13 @@ def get_outstanding_reference_documents(args):
for d in outstanding_invoices:
d["exchange_rate"] = 1
if party_account_currency != company_currency \
and d.voucher_type in ("Sales Invoice", "Purchase Invoice"):
if party_account_currency != company_currency:
if d.voucher_type in ("Sales Invoice", "Purchase Invoice"):
d["exchange_rate"] = frappe.db.get_value(d.voucher_type, d.voucher_no, "conversion_rate")
elif d.voucher_type == "Journal Entry":
d["exchange_rate"] = get_exchange_rate(
party_account_currency, company_currency, d.posting_date
)
# Get all SO / PO which are not fully billed or aginst which full advance not paid
orders_to_be_billed = get_orders_to_be_billed(args.get("posting_date"),args.get("party_type"), args.get("party"),
@@ -684,6 +703,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=
pe.paid_amount = paid_amount
pe.received_amount = received_amount
pe.allocate_payment_amount = 1
pe.letter_head = doc.get("letter_head")
pe.append("references", {
"reference_doctype": dt,

View File

@@ -112,6 +112,34 @@ class TestPaymentEntry(unittest.TestCase):
outstanding_amount = flt(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"))
self.assertEqual(outstanding_amount, 80)
def test_payment_entry_retrieves_last_exchange_rate(self):
from erpnext.setup.doctype.currency_exchange.test_currency_exchange import test_records, save_new_records
test_records = test_records
save_new_records(test_records)
pe = frappe.new_doc("Payment Entry")
pe.payment_type = "Pay"
pe.company = "_Test Company"
pe.posting_date = "2016-01-10"
pe.paid_from = "_Test Bank USD - _TC"
pe.paid_to = "_Test Bank - _TC"
pe.paid_amount = 100
pe.reference_no = "3"
pe.reference_date = "2016-01-10"
pe.party_type = "Supplier"
pe.party = "_Test Supplier USD"
pe.setup_party_account_field()
pe.set_missing_values()
pe.set_exchange_rate()
pe.set_amounts()
self.assertEqual(
pe.source_exchange_rate, 65.1,
"{0} is not equal to {1}".format(pe.source_exchange_rate, 65.1)
)
def test_internal_transfer_usd_to_inr(self):
pe = frappe.new_doc("Payment Entry")

View File

@@ -9,6 +9,7 @@
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"fields": [
{
"allow_on_submit": 0,
@@ -21,7 +22,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Type",
"length": 0,
"no_copy": 0,
@@ -49,7 +52,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Name",
"length": 0,
"no_copy": 0,
@@ -77,7 +82,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Due Date",
"length": 0,
"no_copy": 0,
@@ -104,7 +111,9 @@
"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,
@@ -130,7 +139,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Total Amount",
"length": 0,
"no_copy": 0,
@@ -157,7 +168,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Outstanding",
"length": 0,
"no_copy": 0,
@@ -184,7 +197,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Allocated",
"length": 0,
"no_copy": 0,
@@ -211,7 +226,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Exchange Rate",
"length": 0,
"no_copy": 0,
@@ -238,7 +255,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-11-14 12:28:51.822341",
"modified": "2017-02-17 16:47:17.156256",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Entry Reference",
@@ -248,7 +265,9 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
}

View File

@@ -6,17 +6,15 @@ frappe.provide("erpnext.accounts");
erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.extend({
onload: function() {
var me = this
this.frm.set_query('party_type', function() {
return {
filters: {
"name": ["in", ["Customer", "Supplier"]]
}
};
this.frm.set_query("party_type", function() {
return{
query: "erpnext.setup.doctype.party_type.party_type.get_party_type"
}
});
this.frm.set_query('receivable_payable_account', function() {
if(!me.frm.doc.company || !me.frm.doc.party_type) {
msgprint(__("Please select Company and Party Type first"));
frappe.msgprint(__("Please select Company and Party Type first"));
} else {
return{
filters: {
@@ -31,7 +29,7 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
this.frm.set_query('bank_cash_account', function() {
if(!me.frm.doc.company) {
msgprint(__("Please select Company first"));
frappe.msgprint(__("Please select Company first"));
} else {
return{
filters:[
@@ -98,10 +96,11 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
},
set_invoice_options: function() {
var me = this;
var invoices = [];
$.each(me.frm.doc.invoices || [], function(i, row) {
if (row.invoice_number && !inList(invoices, row.invoice_number))
if (row.invoice_number && !in_list(invoices, row.invoice_number))
invoices.push(row.invoice_type + " | " + row.invoice_number);
});
@@ -110,7 +109,7 @@ erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.ext
me.frm.doc.name).options = "\n" + invoices.join("\n");
$.each(me.frm.doc.payments || [], function(i, p) {
if(!inList(invoices, cstr(p.invoice_number))) p.invoice_number = null;
if(!in_list(invoices, cstr(p.invoice_number))) p.invoice_number = null;
});
}

View File

@@ -22,6 +22,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference Type",
"length": 0,
"no_copy": 0,
@@ -30,6 +31,7 @@
"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,
@@ -48,7 +50,8 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Reference_name",
"in_standard_filter": 0,
"label": "Reference Name",
"length": 0,
"no_copy": 0,
"options": "reference_type",
@@ -57,6 +60,7 @@
"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,
@@ -75,6 +79,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Posting Date",
"length": 0,
"no_copy": 0,
@@ -82,6 +87,7 @@
"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,
@@ -100,6 +106,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Advance",
"length": 0,
"no_copy": 0,
@@ -107,6 +114,7 @@
"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,
@@ -125,6 +133,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference Row",
"length": 0,
"no_copy": 0,
@@ -132,6 +141,7 @@
"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,
@@ -150,6 +160,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
"length": 0,
"no_copy": 0,
@@ -157,6 +168,7 @@
"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,
@@ -175,6 +187,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Invoice Number",
"length": 0,
"no_copy": 0,
@@ -183,6 +196,7 @@
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -201,6 +215,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Amount",
"length": 0,
"no_copy": 0,
@@ -208,6 +223,7 @@
"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,
@@ -226,6 +242,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Allocated amount",
"length": 0,
"no_copy": 0,
@@ -234,6 +251,7 @@
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -252,6 +270,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
"length": 0,
"no_copy": 0,
@@ -259,6 +278,7 @@
"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,
@@ -277,6 +297,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Remark",
"length": 0,
"no_copy": 0,
@@ -284,6 +305,7 @@
"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,
@@ -302,7 +324,7 @@
"istable": 1,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-08-26 02:08:35.879133",
"modified": "2017-01-30 01:04:22.557237",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Reconciliation Payment",
@@ -314,5 +336,6 @@
"read_only_onload": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "naming_series:",
@@ -13,6 +14,7 @@
"engine": "InnoDB",
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -23,6 +25,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Series",
@@ -38,10 +41,11 @@
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"set_only_once": 1,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -52,6 +56,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Recipient Message And Payment Details",
@@ -70,6 +75,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -81,6 +87,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Print Format",
@@ -100,6 +107,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -110,6 +118,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "To",
@@ -128,6 +137,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -138,6 +148,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Subject",
@@ -156,6 +167,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -166,6 +178,7 @@
"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,
@@ -183,6 +196,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -193,6 +207,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Payment Gateway Account",
@@ -212,6 +227,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -222,6 +238,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Transaction Currency",
@@ -241,6 +258,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -252,6 +270,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amount",
@@ -271,6 +290,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -282,6 +302,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Status",
@@ -301,6 +322,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -312,6 +334,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Make Sales Invoice",
@@ -330,6 +353,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -340,6 +364,7 @@
"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,
@@ -357,16 +382,18 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "message",
"fieldtype": "Small Text",
"fieldtype": "Text",
"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": "Message",
@@ -385,6 +412,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -395,12 +423,13 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Message Examples",
"length": 0,
"no_copy": 0,
"options": "<pre><h5>Message Example</h5>\n\n&lt;p&gt; Thank You for being a part of {{ doc.company }}! We hope you are enjoying the service.&lt;/p&gt;\n\n&lt;p&gt; Please find enclosed the E Bill statement. The outstanding amount is {{ doc.grand_total }}.&lt;/p&gt;\n\n&lt;p&gt; We don't want you to be spending time running around in order to pay for your Bill.<br>After all, life is beautiful and the time you have in hand should be spent to enjoy it!<br>So here are our little ways to help you get more time for life! &lt;/p&gt;\n\n&lt;a href=\"{{ payment_url }}\"&gt; click here to pay &lt;/a&gt;\n\n</pre>\n",
"options": "<pre><h5>Message Example</h5>\n\n&lt;p&gt;Dear {{ doc.contact_person }},&lt;/p&gt;\n\n&lt;p&gt;Requesting payment for {{ doc.doctype }}, {{ doc.name }} for {{ doc.grand_total }}.&lt;/p&gt;\n\n&lt;a href=\"{{ payment_url }}\"&gt; click here to pay &lt;/a&gt;\n\n</pre>\n",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -414,6 +443,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -424,6 +454,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Mute Email",
@@ -442,6 +473,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -452,6 +484,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "payment_url",
@@ -470,6 +503,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 1,
@@ -481,6 +515,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Payment Gateway Details",
@@ -499,6 +534,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -509,6 +545,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Payment Gateway",
@@ -528,6 +565,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -538,6 +576,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Payment Account",
@@ -557,6 +596,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -567,6 +607,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference Details",
@@ -585,6 +626,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -595,6 +637,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Reference Doctype",
@@ -614,6 +657,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -624,6 +668,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Reference Name",
@@ -636,13 +681,14 @@
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -653,6 +699,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amended From",
@@ -671,17 +718,17 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 1,
"in_dialog": 0,
"is_submittable": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-12-15 14:46:19.662816",
"modified": "2017-06-13 14:29:20.388372",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Request",
@@ -698,7 +745,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -719,7 +765,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -734,7 +779,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -10,13 +10,18 @@ from frappe.utils import flt, nowdate, get_url
from erpnext.accounts.party import get_party_account
from erpnext.accounts.utils import get_account_currency
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry, get_company_defaults
from frappe.integration_broker.doctype.integration_service.integration_service import get_integration_controller
from frappe.integrations.utils import get_payment_gateway_controller
class PaymentRequest(Document):
def validate(self):
self.validate_reference_document()
self.validate_payment_request()
self.validate_currency()
def validate_reference_document(self):
if not self.reference_doctype or not self.reference_name:
frappe.throw(_("To create a Payment Request reference document is required"))
def validate_payment_request(self):
if frappe.db.get_value("Payment Request", {"reference_name": self.reference_name,
"name": ("!=", self.name), "status": ("not in", ["Initiated", "Paid"]), "docstatus": 1}, "name"):
@@ -26,7 +31,7 @@ class PaymentRequest(Document):
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
if self.payment_account and ref_doc.currency != frappe.db.get_value("Account", self.payment_account, "account_currency"):
frappe.throw(_("Transaction currency must be same as Payment Gateway currency"))
def on_submit(self):
send_mail = True
self.make_communication_entry()
@@ -54,22 +59,22 @@ class PaymentRequest(Document):
def set_payment_request_url(self):
if self.payment_account:
self.payment_url = self.get_payment_url()
if self.payment_url:
self.db_set('payment_url', self.payment_url)
if self.payment_url or not self.payment_gateway_account:
self.db_set('status', 'Initiated')
def get_payment_url(self):
data = frappe.db.get_value(self.reference_doctype, self.reference_name,
["company", "customer_name"], as_dict=1)
controller = get_integration_controller(self.payment_gateway)
controller = get_payment_gateway_controller(self.payment_gateway)
controller.validate_transaction_currency(self.currency)
return controller.get_payment_url(**{
"amount": self.grand_total,
"amount": flt(self.grand_total, self.precision("grand_total")),
"title": data.company,
"description": self.subject,
"reference_doctype": "Payment Request",
@@ -83,7 +88,7 @@ class PaymentRequest(Document):
def set_as_paid(self):
if frappe.session.user == "Guest":
frappe.set_user("Administrator")
payment_entry = self.create_payment_entry()
self.make_invoice()
@@ -157,7 +162,7 @@ class PaymentRequest(Document):
def set_as_cancelled(self):
self.db_set("status", "Cancelled")
def check_if_payment_entry_exists(self):
if self.status == "Paid":
payment_entry = frappe.db.sql_list("""select parent from `tabPayment Entry Reference`
@@ -179,11 +184,11 @@ class PaymentRequest(Document):
def get_payment_success_url(self):
return self.payment_success_url
def on_payment_authorized(self, status=None):
if not status:
return
shopping_cart_settings = frappe.get_doc("Shopping Cart Settings")
if status in ["Authorized", "Completed"]:
@@ -203,9 +208,9 @@ class PaymentRequest(Document):
}).get(success_url, "me")
else:
redirect_to = get_url("/orders/{0}".format(self.reference_name))
return redirect_to
@frappe.whitelist(allow_guest=True)
def make_payment_request(**args):
"""Make payment request"""
@@ -234,7 +239,7 @@ def make_payment_request(**args):
"grand_total": grand_total,
"email_to": args.recipient_id or "",
"subject": "Payment Request for %s"%args.dn,
"message": gateway_account.get("message") or get_dummy_message(args.use_dummy_message),
"message": gateway_account.get("message") or get_dummy_message(ref_doc),
"reference_doctype": args.dt,
"reference_name": args.dn
})
@@ -319,19 +324,24 @@ def make_status_as_paid(doc, method):
payment_request_name = frappe.db.get_value("Payment Request",
{"reference_doctype": ref.reference_doctype, "reference_name": ref.reference_name,
"docstatus": 1})
if payment_request_name:
doc = frappe.get_doc("Payment Request", payment_request_name)
if doc.status != "Paid":
doc.db_set('status', 'Paid')
frappe.db.commit()
def get_dummy_message(use_dummy_message=True):
return """
<p> Hope you are enjoying a service. Please consider bank details for payment </p>
<p> Bank Details <p><br>
<p> Bank Name : National Bank </p>
<p> Account Number : 123456789000872 </p>
<p> IFSC code : NB000001 </p>
<p> Account Name : Wind Power LLC </p>
"""
def get_dummy_message(doc):
return frappe.render_template("""{% if doc.contact_person -%}
<p>Dear {{ doc.contact_person }},</p>
{%- else %}<p>Hello,</p>{% endif %}
<p>{{ _("Requesting payment against {0} {1} for amount {2}").format(doc.doctype,
doc.name, doc.get_formatted("grand_total")) }}</p>
<a href="{{ payment_url }}">{{ _("Make Payment") }}</a>
<p>{{ _("If you have any questions, please get back to us.") }}</p>
<p>{{ _("Thank you for your business!") }}</p>
""", dict(doc=doc, payment_url = '{{ payment_url }}'))

View File

@@ -87,8 +87,8 @@ class TestPaymentRequest(unittest.TestCase):
expected_gle = dict((d[0], d) for d in [
["_Test Receivable USD - _TC", 0, 5000, si_usd.name],
[pr.payment_account, 6000.0, 0, None],
["_Test Exchange Gain/Loss - _TC", 0, 1000, None]
[pr.payment_account, 6290.0, 0, None],
["_Test Exchange Gain/Loss - _TC", 0, 1290, None]
])
gl_entries = frappe.db.sql("""select account, debit, credit, against_voucher

View File

@@ -3,7 +3,7 @@
frappe.ui.form.on('Period Closing Voucher', {
onload: function(frm) {
if (!frm.doc.transaction_date) frm.doc.transaction_date = dateutil.obj_to_str(new Date());
if (!frm.doc.transaction_date) frm.doc.transaction_date = frappe.datetime.obj_to_str(new Date());
},
setup: function(frm) {

View File

@@ -35,9 +35,9 @@ class PeriodClosingVoucher(AccountsController):
def validate_posting_date(self):
from erpnext.accounts.utils import get_fiscal_year, validate_fiscal_year
validate_fiscal_year(self.posting_date, self.fiscal_year, label=_("Posting Date"), doc=self)
validate_fiscal_year(self.posting_date, self.fiscal_year, self.company, label=_("Posting Date"), doc=self)
self.year_start_date = get_fiscal_year(self.posting_date, self.fiscal_year)[1]
self.year_start_date = get_fiscal_year(self.posting_date, self.fiscal_year, company=self.company)[1]
pce = frappe.db.sql("""select name from `tabPeriod Closing Voucher`
where posting_date > %s and fiscal_year = %s and docstatus = 1""",

View File

@@ -11,7 +11,7 @@ from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journ
class TestPeriodClosingVoucher(unittest.TestCase):
def test_closing_entry(self):
year_start_date = get_fiscal_year(today())[1]
year_start_date = get_fiscal_year(today(), company="_Test Company")[1]
make_journal_entry("_Test Bank - _TC", "Sales - _TC", 400,
"_Test Cost Center - _TC", posting_date=now(), submit=True)
@@ -70,7 +70,7 @@ class TestPeriodClosingVoucher(unittest.TestCase):
"doctype": "Period Closing Voucher",
"closing_account_head": "_Test Account Reserves and Surplus - _TC",
"company": "_Test Company",
"fiscal_year": get_fiscal_year(today())[0],
"fiscal_year": get_fiscal_year(today(), company="_Test Company")[0],
"posting_date": today(),
"remarks": "test"
})

View File

@@ -26,6 +26,23 @@ frappe.ui.form.on("POS Profile", "onload", function(frm) {
});
});
frappe.ui.form.on('POS Profile', {
refresh: function(frm) {
if(frm.doc.company) {
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));
}
})
// Income Account
// --------------------------------
cur_frm.fields_dict['income_account'].get_query = function(doc,cdt,cdn) {
@@ -35,8 +52,8 @@ cur_frm.fields_dict['income_account'].get_query = function(doc,cdt,cdn) {
'company': doc.company,
'account_type': "Income Account"
}
}
}
};
};
// Cost Center
@@ -47,8 +64,8 @@ cur_frm.fields_dict['cost_center'].get_query = function(doc,cdt,cdn) {
'company': doc.company,
'is_group': 0
}
}
}
};
};
// Expense Account
@@ -60,8 +77,8 @@ cur_frm.fields_dict["expense_account"].get_query = function(doc) {
"company": doc.company,
"is_group": 0
}
}
}
};
};
// ------------------ Get Print Heading ------------------------------------
cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
@@ -69,13 +86,13 @@ cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn)
filters:[
['Print Heading', 'docstatus', '!=', 2]
]
}
}
};
};
cur_frm.fields_dict.user.get_query = function(doc,cdt,cdn) {
return{ query:"frappe.core.doctype.user.user.user_query"}
}
return{ query:"frappe.core.doctype.user.user.user_query"};
};
cur_frm.fields_dict.write_off_account.get_query = function(doc) {
return{
@@ -84,16 +101,16 @@ cur_frm.fields_dict.write_off_account.get_query = function(doc) {
'is_group': 0,
'company': doc.company
}
}
}
};
};
// Write off cost center
//-----------------------
// -----------------------
cur_frm.fields_dict.write_off_cost_center.get_query = function(doc) {
return{
filters:{
'is_group': 0,
'company': doc.company
}
}
}
};
};

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "hash",
@@ -11,6 +12,7 @@
"editable_grid": 0,
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -21,7 +23,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Applicable for User",
"length": 0,
"no_copy": 0,
@@ -36,10 +40,11 @@
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"set_only_once": 1,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -50,7 +55,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Series",
"length": 0,
"no_copy": 1,
@@ -65,10 +72,11 @@
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"set_only_once": 1,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -81,7 +89,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Update Stock",
"length": 0,
"no_copy": 0,
@@ -97,6 +107,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -108,7 +119,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Warehouse",
"length": 0,
"no_copy": 0,
@@ -127,6 +140,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -137,7 +151,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Campaign",
"length": 0,
"no_copy": 0,
@@ -155,6 +171,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -165,7 +182,9 @@
"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,
@@ -181,6 +200,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -191,7 +211,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Customer",
"length": 0,
"no_copy": 0,
@@ -210,6 +232,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -220,7 +243,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Company",
"length": 0,
"no_copy": 0,
@@ -239,6 +264,38 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "country",
"fieldtype": "Read Only",
"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": "Country",
"length": 0,
"no_copy": 0,
"options": "company.country",
"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,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -249,7 +306,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Currency",
"length": 0,
"no_copy": 0,
@@ -268,6 +327,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -278,7 +338,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Ignore Pricing Rule",
"length": 0,
"no_copy": 0,
@@ -295,6 +357,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -305,7 +368,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Allow Delete",
"length": 0,
"no_copy": 0,
@@ -322,6 +387,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -332,7 +398,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Allow user to edit Rate",
"length": 0,
"no_copy": 0,
@@ -349,6 +417,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -359,7 +428,9 @@
"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,
@@ -375,6 +446,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -385,7 +457,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Sales Invoice Payment",
"length": 0,
"no_copy": 0,
@@ -403,6 +477,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -413,7 +488,9 @@
"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,
@@ -429,6 +506,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -439,7 +517,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Item Groups",
"length": 0,
"no_copy": 0,
@@ -457,6 +537,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -467,7 +548,9 @@
"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,
@@ -483,6 +566,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -493,7 +577,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Customer Groups",
"length": 0,
"no_copy": 0,
@@ -511,6 +597,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -521,7 +608,9 @@
"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,
@@ -537,6 +626,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -548,7 +638,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Print Format",
"length": 0,
"no_copy": 0,
@@ -566,6 +658,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -576,7 +669,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Letter Head",
"length": 0,
"no_copy": 0,
@@ -595,6 +690,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -605,7 +701,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Print Heading",
"length": 0,
"no_copy": 0,
@@ -624,6 +722,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -634,7 +733,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Terms and Conditions",
"length": 0,
"no_copy": 0,
@@ -653,6 +754,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -663,7 +765,9 @@
"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,
"oldfieldtype": "Column Break",
@@ -679,6 +783,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -690,7 +795,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Territory",
"length": 0,
"no_copy": 0,
@@ -709,6 +816,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -719,7 +827,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Price List",
"length": 0,
"no_copy": 0,
@@ -738,6 +848,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -748,7 +859,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Apply Discount",
"length": 0,
"no_copy": 0,
@@ -765,6 +878,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -777,7 +891,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Apply Discount On",
"length": 0,
"no_copy": 0,
@@ -795,6 +911,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -805,7 +922,9 @@
"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,
@@ -821,6 +940,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -832,7 +952,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Write Off Account",
"length": 0,
"no_copy": 0,
@@ -850,6 +972,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -860,7 +983,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Write Off Cost Center",
"length": 0,
"no_copy": 0,
@@ -878,6 +1003,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -888,7 +1014,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Account for Change Amount",
"length": 0,
"no_copy": 0,
@@ -906,6 +1034,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -916,7 +1045,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Taxes and Charges",
"length": 0,
"no_copy": 0,
@@ -935,6 +1066,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -945,7 +1077,9 @@
"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,
@@ -961,6 +1095,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -971,7 +1106,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Income Account",
"length": 0,
"no_copy": 0,
@@ -990,18 +1127,21 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"depends_on": "eval:cint(sys_defaults.auto_accounting_for_stock)",
"depends_on": "",
"fieldname": "expense_account",
"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": "Expense Account",
"length": 0,
"no_copy": 0,
@@ -1018,6 +1158,7 @@
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -1028,7 +1169,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Cost Center",
"length": 0,
"no_copy": 0,
@@ -1047,19 +1190,19 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "icon-cog",
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-12-28 15:14:59.411457",
"modified_by": "rohit@erpnext.com",
"modified": "2017-06-16 17:04:33.165676",
"modified_by": "Administrator",
"module": "Accounts",
"name": "POS Profile",
"owner": "Administrator",
@@ -1074,7 +1217,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -1095,7 +1237,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -1110,8 +1251,10 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "user",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -2,63 +2,65 @@
// License: GNU General Public License v3. See license.txt
frappe.ui.form.on("Pricing Rule", "refresh", function(frm) {
var help_content = ['<table class="table table-bordered" style="background-color: #f9f9f9;">',
'<tr><td>',
'<h4><i class="fa fa-hand-right"></i> ',
__('Notes'),
':</h4>',
'<ul>',
'<li>',
__("Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria."),
'</li>',
'<li>',
__("If selected Pricing Rule is made for 'Price', it will overwrite Price List. Pricing Rule price is the final price, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field."),
'</li>',
'<li>',
__('Discount Percentage can be applied either against a Price List or for all Price List.'),
'</li>',
'<li>',
__('To not apply Pricing Rule in a particular transaction, all applicable Pricing Rules should be disabled.'),
'</li>',
'</ul>',
'</td></tr>',
'<tr><td>',
'<h4><i class="fa fa-question-sign"></i> ',
__('How Pricing Rule is applied?'),
'</h4>',
'<ol>',
'<li>',
__("Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand."),
'</li>',
'<li>',
__("Then Pricing Rules are filtered out based on Customer, Customer Group, Territory, Supplier, Supplier Type, Campaign, Sales Partner etc."),
'</li>',
'<li>',
__('Pricing Rules are further filtered based on quantity.'),
'</li>',
'<li>',
__('If two or more Pricing Rules are found based on the above conditions, Priority is applied. Priority is a number between 0 to 20 while default value is zero (blank). Higher number means it will take precedence if there are multiple Pricing Rules with same conditions.'),
'</li>',
'<li>',
__('Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:'),
'<ul>',
'<li>',
__('Item Code > Item Group > Brand'),
'</li>',
'<li>',
__('Customer > Customer Group > Territory'),
'</li>',
'<li>',
__('Supplier > Supplier Type'),
'</li>',
'</ul>',
'</li>',
'<li>',
__('If multiple Pricing Rules continue to prevail, users are asked to set Priority manually to resolve conflict.'),
'</li>',
'</ol>',
'</td></tr>',
'</table>'].join("\n");
var help_content =
`<table class="table table-bordered" style="background-color: #f9f9f9;">
<tr><td>
<h4>
<i class="fa fa-hand-right"></i>
${__('Notes')}
</h4>
<ul>
<li>
${__("Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.")}
</li>
<li>
${__("If selected Pricing Rule is made for 'Price', it will overwrite Price List. Pricing Rule price is the final price, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field.")}
</li>
<li>
${__('Discount Percentage can be applied either against a Price List or for all Price List.')}
</li>
<li>
${__('To not apply Pricing Rule in a particular transaction, all applicable Pricing Rules should be disabled.')}
</li>
</ul>
</td></tr>
<tr><td>
<h4><i class="fa fa-question-sign"></i>
${__('How Pricing Rule is applied?')}
</h4>
<ol>
<li>
${__("Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand.")}
</li>
<li>
${__("Then Pricing Rules are filtered out based on Customer, Customer Group, Territory, Supplier, Supplier Type, Campaign, Sales Partner etc.")}
</li>
<li>
${__('Pricing Rules are further filtered based on quantity.')}
</li>
<li>
${__('If two or more Pricing Rules are found based on the above conditions, Priority is applied. Priority is a number between 0 to 20 while default value is zero (blank). Higher number means it will take precedence if there are multiple Pricing Rules with same conditions.')}
</li>
<li>
${__('Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:')}
<ul>
<li>
${__('Item Code > Item Group > Brand')}
</li>
<li>
${__('Customer > Customer Group > Territory')}
</li>
<li>
${__('Supplier > Supplier Type')}
</li>
</ul>
</li>
<li>
${__('If multiple Pricing Rules continue to prevail, users are asked to set Priority manually to resolve conflict.')}
</li>
</ol>
</td></tr>
</table>`;
set_field_options("pricing_rule_help", help_content);
@@ -91,8 +93,8 @@ cur_frm.cscript.buying = function() {
}
//Dynamically change the description based on type of margin
cur_frm.cscript.type = function(doc){
cur_frm.set_df_property('rate', 'description', doc.type=='Percentage'?'In Percentage %':'In Amount')
cur_frm.cscript.margin_type = function(doc){
cur_frm.set_df_property('margin_rate_or_amount', 'description', doc.margin_type=='Percentage'?'In Percentage %':'In Amount')
}
frappe.ui.form.on('Pricing Rule', 'price_or_discount', function(frm){
@@ -112,4 +114,4 @@ frappe.ui.form.on('Pricing Rule', {
}
}
}
})
})

View File

@@ -22,6 +22,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -49,6 +50,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Title",
@@ -78,6 +80,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Apply On",
@@ -107,6 +110,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Item Code",
@@ -136,6 +140,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Brand",
@@ -165,6 +170,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Item Group",
@@ -193,6 +199,7 @@
"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,
@@ -221,6 +228,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Priority",
@@ -249,6 +257,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Disable",
@@ -276,6 +285,7 @@
"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,
@@ -303,6 +313,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Selling",
@@ -330,6 +341,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Buying",
@@ -357,6 +369,7 @@
"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,
@@ -385,6 +398,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Applicable For",
@@ -414,6 +428,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Customer",
@@ -443,6 +458,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Customer Group",
@@ -472,6 +488,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Territory",
@@ -501,6 +518,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Sales Partner",
@@ -530,6 +548,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Campaign",
@@ -559,6 +578,7 @@
"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",
@@ -588,6 +608,7 @@
"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 Type",
@@ -616,6 +637,7 @@
"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,
@@ -643,6 +665,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Min Qty",
@@ -670,6 +693,7 @@
"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,
@@ -697,6 +721,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Max Qty",
@@ -724,6 +749,7 @@
"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,
@@ -752,6 +778,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Valid From",
@@ -779,6 +806,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Valid Upto",
@@ -806,6 +834,7 @@
"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,
@@ -832,6 +861,7 @@
"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",
@@ -861,6 +891,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Margin",
@@ -890,6 +921,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Margin Type",
@@ -919,6 +951,7 @@
"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,
@@ -948,6 +981,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Margin Rate or Amount",
@@ -976,6 +1010,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -1004,6 +1039,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Price or Discount",
@@ -1032,6 +1068,7 @@
"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,
@@ -1059,6 +1096,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Price",
@@ -1087,6 +1125,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Discount on Price List Rate (%)",
@@ -1115,6 +1154,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "For Price List",
@@ -1143,6 +1183,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -1171,6 +1212,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Pricing Rule Help",
@@ -1199,7 +1241,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-11-07 05:19:31.478456",
"modified": "2017-02-17 16:21:28.446208",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Pricing Rule",
@@ -1215,7 +1257,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -1236,7 +1277,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -1257,7 +1297,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -1278,7 +1317,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -1299,7 +1337,6 @@
"export": 1,
"if_owner": 0,
"import": 1,
"is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -1314,8 +1351,10 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "",
"track_changes": 0,
"track_seen": 0
}

View File

@@ -23,6 +23,8 @@ class PricingRule(Document):
self.validate_price_or_discount()
self.validate_max_discount()
if not self.margin_type: self.margin_rate_or_amount = 0.0
def validate_mandatory(self):
for field in ["apply_on", "applicable_for"]:
tocheck = frappe.scrub(self.get(field) or "")
@@ -117,18 +119,19 @@ def apply_pricing_rule(args):
args_copy = copy.deepcopy(args)
args_copy.update(item)
out.append(get_pricing_rule_for_item(args_copy))
if set_serial_nos_based_on_fifo:
if set_serial_nos_based_on_fifo and not args.get('is_return'):
out.append(get_serial_no_for_item(args_copy))
return out
def get_serial_no_for_item(args):
from erpnext.stock.get_item_details import get_serial_no
item_details = frappe._dict({
"doctype": args.doctype,
"name": args.name,
"serial_no": args.serial_no
})
if args.get("parenttype") in ("Sales Invoice", "Delivery Note"):
if args.get("parenttype") in ("Sales Invoice", "Delivery Note") and args.stock_qty > 0:
item_details.serial_no = get_serial_no(args)
return item_details
@@ -143,7 +146,7 @@ def get_pricing_rule_for_item(args):
if args.ignore_pricing_rule or not args.item_code:
if frappe.db.exists(args.doctype, args.name) and args.get("pricing_rule"):
item_details = remove_pricing_rule(args, item_details)
item_details = remove_pricing_rule_for_item(args.get("pricing_rule"), item_details)
return item_details
if not (args.item_group and args.brand):
@@ -177,19 +180,20 @@ def get_pricing_rule_for_item(args):
item_details.margin_rate_or_amount = pricing_rule.margin_rate_or_amount
if pricing_rule.price_or_discount == "Price":
item_details.update({
"price_list_rate": pricing_rule.price/flt(args.conversion_rate) \
"price_list_rate": (pricing_rule.price/flt(args.conversion_rate)) * args.conversion_factor or 1.0 \
if args.conversion_rate else 0.0,
"discount_percentage": 0.0
})
else:
item_details.discount_percentage = pricing_rule.discount_percentage
item_details.discount_percentage = pricing_rule.discount_percentage or args.discount_percentage
elif args.get('pricing_rule'):
item_details = remove_pricing_rule(args, item_details)
item_details = remove_pricing_rule_for_item(args.get("pricing_rule"), item_details)
return item_details
def remove_pricing_rule(args, item_details):
pricing_rule = frappe.db.get_value('Pricing Rule', args.get('pricing_rule'), ['price_or_discount', 'margin_type'], as_dict=1)
def remove_pricing_rule_for_item(pricing_rule, item_details):
pricing_rule = frappe.db.get_value('Pricing Rule', pricing_rule,
['price_or_discount', 'margin_type'], as_dict=1)
if pricing_rule and pricing_rule.price_or_discount == 'Discount Percentage':
item_details.discount_percentage = 0.0
@@ -197,8 +201,22 @@ def remove_pricing_rule(args, item_details):
item_details.margin_rate_or_amount = 0.0
item_details.margin_type = None
if item_details.pricing_rule:
item_details.pricing_rule = None
return item_details
@frappe.whitelist()
def remove_pricing_rules(item_list):
if isinstance(item_list, basestring):
item_list = json.loads(item_list)
out = []
for item in item_list:
item = frappe._dict(item)
out.append(remove_pricing_rule_for_item(item.get("pricing_rule"), item))
return out
def get_pricing_rules(args):
def _get_tree_conditions(parenttype, allow_blank=True):
field = frappe.scrub(parenttype)
@@ -267,9 +285,10 @@ def get_pricing_rules(args):
def filter_pricing_rules(args, pricing_rules):
# filter for qty
stock_qty = args.get('qty') * args.get('conversion_factor', 1)
if pricing_rules:
pricing_rules = filter(lambda x: (flt(args.get("qty"))>=flt(x.min_qty)
and (flt(args.get("qty"))<=x.max_qty if x.max_qty else True)), pricing_rules)
pricing_rules = filter(lambda x: (flt(stock_qty)>=flt(x.min_qty)
and (flt(stock_qty)<=x.max_qty if x.max_qty else True)), pricing_rules)
# add variant_of property in pricing rule
for p in pricing_rules:

View File

@@ -5,6 +5,10 @@
from __future__ import unicode_literals
import unittest
import frappe
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.stock.get_item_details import get_item_details
from frappe import MandatoryError
class TestPricingRule(unittest.TestCase):
def test_pricing_rule_for_discount(self):
@@ -203,3 +207,93 @@ class TestPricingRule(unittest.TestCase):
details = get_item_details(args)
self.assertEquals(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",
"apply_on": "Item Code",
"item_code": "_Test Item",
"selling": 1,
"price_or_discount": "Discount Percentage",
"price": 0,
"min_qty": 5,
"max_qty": 7,
"discount_percentage": 17.5,
"company": "_Test Company"
}
frappe.get_doc(test_record.copy()).insert()
if not frappe.db.get_value('UOM Conversion Detail',
{'parent': '_Test Item', 'uom': 'box'}):
item = frappe.get_doc('Item', '_Test Item')
item.append('uoms', {
'uom': 'Box',
'conversion_factor': 5
})
item.save(ignore_permissions=True)
# With pricing rule
so = make_sales_order(item_code="_Test Item", qty=1, uom="Box", do_not_submit=True)
so.items[0].price_list_rate = 100
so.submit()
so = frappe.get_doc('Sales Order', so.name)
self.assertEquals(so.items[0].discount_percentage, 17.5)
self.assertEquals(so.items[0].rate, 82.5)
# Without pricing rule
so = make_sales_order(item_code="_Test Item", qty=2, uom="Box", do_not_submit=True)
so.items[0].price_list_rate = 100
so.submit()
so = frappe.get_doc('Sales Order', so.name)
self.assertEquals(so.items[0].discount_percentage, 0)
self.assertEquals(so.items[0].rate, 100)
def test_pricing_rule_with_margin_and_discount(self):
make_pricing_rule(selling=1, margin_type="Percentage", margin_rate_or_amount=10)
si = create_sales_invoice(do_not_save=True)
si.items[0].price_list_rate = 1000
si.insert(ignore_permissions=True)
item = si.items[0]
self.assertEquals(item.rate, 1100)
self.assertEquals(item.margin_rate_or_amount, 10)
# With discount
item.discount_percentage = 10
si.save()
item = si.items[0]
self.assertEquals(item.rate, 990)
self.assertEquals(item.discount_percentage, 10)
frappe.db.sql("delete from `tabPricing Rule`")
def make_pricing_rule(**args):
args = frappe._dict(args)
doc = frappe.get_doc({
"doctype": "Pricing Rule",
"title": args.title or "_Test Pricing Rule",
"company": args.company or "_Test Company",
"apply_on": args.apply_on or "Item Code",
"item_code": args.item_code or "_Test Item",
"applicable_for": args.applicable_for,
"selling": args.selling or 0,
"buying": args.buying or 0,
"min_qty": args.min_qty or 0.0,
"max_qty": args.max_qty or 0.0,
"price_or_discount": args.price_or_discount or "Discount Percentage",
"discount_percentage": args.discount_percentage or 0.0,
"price": args.price or 0.0,
"margin_type": args.margin_type,
"margin_rate_or_amount": args.margin_rate_or_amount or 0.0
}).insert(ignore_permissions=True)
apply_on = doc.apply_on.replace(' ', '_').lower()
if args.get(apply_on) and apply_on != "item_code":
doc.db_set(apply_on, args.get(apply_on))
applicable_for = doc.applicable_for.replace(' ', '_').lower()
if args.get(applicable_for):
doc.db_set(applicable_for, args.get(applicable_for))

View File

@@ -2,13 +2,16 @@
// License: GNU General Public License v3. See license.txt
frappe.provide("erpnext.accounts");
{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %};
{% include 'erpnext/public/js/controllers/buying.js' %};
erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
setup: function(doc) {
this.setup_posting_date_time_check();
this._super(doc);
},
onload: function() {
this._super();
if(!this.frm.doc.__islocal) {
// show credit_to in print format
if(!this.frm.doc.supplier && this.frm.doc.credit_to) {
@@ -32,7 +35,7 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
if(doc.update_stock==1 && doc.docstatus==1) {
this.show_stock_ledger();
}
if(!doc.is_return && doc.docstatus==1) {
if(doc.outstanding_amount != 0) {
this.frm.add_custom_button(__('Payment'), this.make_payment_entry, __("Make"));
@@ -40,35 +43,44 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
}
if(doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
cur_frm.add_custom_button(doc.update_stock ? __('Purchase Return') : __('Debit Note'),
cur_frm.add_custom_button(__('Return / Debit Note'),
this.make_debit_note, __("Make"));
}
}
if(doc.docstatus===0) {
cur_frm.add_custom_button(__('Purchase Order'), function() {
var me = this;
this.frm.add_custom_button(__('Purchase Order'), function() {
erpnext.utils.map_current_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
source_doctype: "Purchase Order",
target: me.frm,
setters: {
supplier: me.frm.doc.supplier || undefined,
},
get_query_filters: {
supplier: cur_frm.doc.supplier || undefined,
docstatus: 1,
status: ["!=", "Closed"],
per_billed: ["<", 99.99],
company: cur_frm.doc.company
company: me.frm.doc.company
}
})
}, __("Get items from"));
cur_frm.add_custom_button(__('Purchase Receipt'), function() {
this.frm.add_custom_button(__('Purchase Receipt'), function() {
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
source_doctype: "Purchase Receipt",
target: me.frm,
date_field: "posting_date",
setters: {
supplier: me.frm.doc.supplier || undefined,
},
get_query_filters: {
supplier: cur_frm.doc.supplier || undefined,
docstatus: 1,
status: ["!=", "Closed"],
company: cur_frm.doc.company
status: ["not in", ["Closed", "Completed"]],
company: me.frm.doc.company,
is_return: 0
}
})
}, __("Get items from"));
@@ -89,8 +101,8 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
account: this.frm.doc.credit_to,
price_list: this.frm.doc.buying_price_list,
}, function() {
me.apply_pricing_rule();
})
me.apply_pricing_rule();
})
},
credit_to: function() {
@@ -117,8 +129,8 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
hide_fields(this.frm.doc);
if(cint(this.frm.doc.is_paid)) {
if(!this.frm.doc.company) {
cur_frm.set_value("is_paid", 0)
msgprint(__("Please specify Company to proceed"));
this.frm.set_value("is_paid", 0)
frappe.msgprint(__("Please specify Company to proceed"));
}
}
this.calculate_outstanding_amount();
@@ -183,19 +195,19 @@ cur_frm.script_manager.make(erpnext.accounts.PurchaseInvoice);
// Hide Fields
// ------------
function hide_fields(doc) {
parent_fields = ['due_date', 'is_opening', 'advances_section', 'from_date', 'to_date'];
var parent_fields = ['due_date', 'is_opening', 'advances_section', 'from_date', 'to_date'];
if(cint(doc.is_paid) == 1) {
hide_field(parent_fields);
} else {
for (i in parent_fields) {
for (var i in parent_fields) {
var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
if(!docfield.hidden) unhide_field(parent_fields[i]);
}
}
item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty'];
var item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty'];
cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
(cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
@@ -205,31 +217,20 @@ function hide_fields(doc) {
cur_frm.cscript.update_stock = function(doc, dt, dn) {
hide_fields(doc, dt, dn);
this.frm.fields_dict.items.grid.toggle_reqd("item_code", doc.update_stock? true: false)
}
cur_frm.fields_dict.cash_bank_account.get_query = function(doc) {
return {
filters: [
["Account", "account_type", "in", ["Cash", "Bank"]],
["Account", "root_type", "=", "Asset"],
["Account", "is_group", "=",0],
["Account", "company", "=", doc.company]
["Account", "company", "=", doc.company],
["Account", "report_type", "=", "Balance Sheet"]
]
}
}
cur_frm.fields_dict['supplier_address'].get_query = function(doc, cdt, cdn) {
return{
filters:{'supplier': doc.supplier}
}
}
cur_frm.fields_dict['contact_person'].get_query = function(doc, cdt, cdn) {
return{
filters:{'supplier': doc.supplier}
}
}
cur_frm.fields_dict['items'].grid.get_field("item_code").get_query = function(doc, cdt, cdn) {
return {
query: "erpnext.controllers.queries.item_query",
@@ -336,6 +337,12 @@ cur_frm.cscript.select_print_heading = function(doc,cdt,cdn){
}
frappe.ui.form.on("Purchase Invoice", {
setup: function(frm) {
frm.custom_make_buttons = {
'Purchase Invoice': 'Debit Note',
'Payment Entry': 'Payment'
}
},
onload: function(frm) {
$.each(["warehouse", "rejected_warehouse"], function(i, field) {
frm.set_query(field, "items", function() {

View File

@@ -2,19 +2,19 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
import frappe, erpnext
from frappe.utils import cint, formatdate, flt, getdate
from frappe import _, throw
from erpnext.setup.utils import get_company_currency
import frappe.defaults
from erpnext.controllers.buying_controller import BuyingController
from erpnext.accounts.party import get_party_account, get_due_date
from erpnext.accounts.utils import get_account_currency, get_fiscal_year
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import update_billed_amount_based_on_po
from erpnext.controllers.stock_controller import get_warehouse_account
from erpnext.stock import get_warehouse_account_map
from erpnext.accounts.general_ledger import make_gl_entries, merge_similar_entries, delete_gl_entries
from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
from erpnext.buying.utils import check_for_closed_status
form_grid_templates = {
"items": "templates/form_grid/item_grid.html"
@@ -40,6 +40,7 @@ class PurchaseInvoice(BuyingController):
if not self.is_opening:
self.is_opening = 'No'
self.validate_posting_time()
super(PurchaseInvoice, self).validate()
if not self.is_return:
@@ -58,6 +59,7 @@ class PurchaseInvoice(BuyingController):
self.check_for_closed_status()
self.validate_with_previous_doc()
self.validate_uom_is_integer("uom", "qty")
self.validate_uom_is_integer("stock_uom", "stock_qty")
self.set_expense_account(for_validate=True)
self.set_against_expense_account()
self.validate_write_off_account()
@@ -92,7 +94,7 @@ class PurchaseInvoice(BuyingController):
super(PurchaseInvoice, self).set_missing_values(for_validate)
def check_conversion_rate(self):
default_currency = get_company_currency(self.company)
default_currency = erpnext.get_company_currency(self.company)
if not default_currency:
throw(_('Please enter default currency in Company Master'))
if (self.currency == default_currency and flt(self.conversion_rate) != 1.00) or not self.conversion_rate or (self.currency != default_currency and flt(self.conversion_rate) == 1.00):
@@ -112,12 +114,11 @@ class PurchaseInvoice(BuyingController):
def check_for_closed_status(self):
check_list = []
pc_obj = frappe.get_doc('Purchase Common')
for d in self.get('items'):
if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt:
check_list.append(d.purchase_order)
pc_obj.check_for_closed_status('Purchase Order', d.purchase_order)
check_for_closed_status('Purchase Order', d.purchase_order)
def validate_with_previous_doc(self):
super(PurchaseInvoice, self).validate_with_previous_doc({
@@ -156,16 +157,23 @@ class PurchaseInvoice(BuyingController):
super(PurchaseInvoice, self).validate_warehouse()
def validate_item_code(self):
for d in self.get('items'):
if not d.item_code:
frappe.msgprint(_("Item Code required at Row No {0}").format(d.idx), raise_exception=True)
def set_expense_account(self, for_validate=False):
auto_accounting_for_stock = cint(frappe.defaults.get_global_default("auto_accounting_for_stock"))
auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
if auto_accounting_for_stock:
stock_not_billed_account = self.get_company_default("stock_received_but_not_billed")
stock_items = self.get_stock_items()
if self.update_stock:
self.validate_item_code()
self.validate_warehouse()
warehouse_account = get_warehouse_account()
warehouse_account = get_warehouse_account_map()
for item in self.get("items"):
# in case of auto inventory accounting,
@@ -178,7 +186,7 @@ class PurchaseInvoice(BuyingController):
not frappe.db.get_value("Purchase Order Item", item.po_detail, "delivered_by_supplier")):
if self.update_stock:
item.expense_account = warehouse_account[item.warehouse]["name"]
item.expense_account = warehouse_account[item.warehouse]["account"]
else:
item.expense_account = stock_not_billed_account
@@ -197,14 +205,14 @@ class PurchaseInvoice(BuyingController):
if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes':
for d in self.get('items'):
if not d.purchase_order:
throw(_("Purchse Order number required for Item {0}").format(d.item_code))
throw(_("As per the Buying Settings if Purchase Order Required == 'YES', then for creating Purchase Invoice, user need to create Purchase Order first for item {0}").format(d.item_code))
def pr_required(self):
stock_items = self.get_stock_items()
if frappe.db.get_value("Buying Settings", None, "pr_required") == 'Yes':
for d in self.get('items'):
if not d.purchase_receipt and d.item_code in stock_items:
throw(_("Purchase Receipt number required for Item {0}").format(d.item_code))
throw(_("As per the Buying Settings if Purchase Reciept Required == 'YES', then for creating Purchase Invoice, user need to create Purchase Receipt first for item {0}").format(d.item_code))
def validate_write_off_account(self):
if self.write_off_amount and not self.write_off_account:
@@ -302,12 +310,12 @@ class PurchaseInvoice(BuyingController):
asset.flags.ignore_validate_update_after_submit = True
asset.save()
def make_gl_entries(self, repost_future_gle=True):
def make_gl_entries(self, gl_entries=None, repost_future_gle=True, from_repost=False):
if not self.grand_total:
return
gl_entries = self.get_gl_entries()
if not gl_entries:
gl_entries = self.get_gl_entries()
if gl_entries:
update_outstanding = "No" if (cint(self.is_paid) or self.write_off_account) else "Yes"
@@ -327,9 +335,7 @@ class PurchaseInvoice(BuyingController):
delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name)
def get_gl_entries(self, warehouse_account=None):
self.auto_accounting_for_stock = \
cint(frappe.defaults.get_global_default("auto_accounting_for_stock"))
self.auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
self.stock_received_but_not_billed = self.get_company_default("stock_received_but_not_billed")
self.expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
self.negative_expense_to_be_booked = 0.0
@@ -344,7 +350,7 @@ class PurchaseInvoice(BuyingController):
self.make_payment_gl_entries(gl_entries)
self.make_write_off_gl_entry(gl_entries)
return gl_entries
def make_supplier_gl_entry(self, gl_entries):
@@ -370,7 +376,7 @@ class PurchaseInvoice(BuyingController):
# item gl entries
stock_items = self.get_stock_items()
expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
warehouse_account = get_warehouse_account()
warehouse_account = get_warehouse_account_map()
for item in self.get("items"):
if flt(item.base_net_amount):
@@ -621,10 +627,12 @@ class PurchaseInvoice(BuyingController):
pi = frappe.db.sql('''select name from `tabPurchase Invoice`
where
bill_no = %(bill_no)s
and supplier = %(supplier)s
and name != %(name)s
and docstatus < 2
and posting_date between %(year_start_date)s and %(year_end_date)s''', {
"bill_no": self.bill_no,
"supplier": self.supplier,
"name": self.name,
"year_start_date": fiscal_year.year_start_date,
"year_end_date": fiscal_year.year_end_date

View File

@@ -4,7 +4,7 @@
from __future__ import unicode_literals
import unittest
import frappe
import frappe, erpnext
import frappe.model
from frappe.utils import cint, flt, today, nowdate
import frappe.defaults
@@ -12,6 +12,7 @@ from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_per
test_records as pr_test_records
from erpnext.exceptions import InvalidCurrency
from erpnext.stock.doctype.stock_entry.test_stock_entry import get_qty_after_transaction
from erpnext.accounts.doctype.account.test_account import get_inventory_account
test_dependencies = ["Item", "Cost Center"]
test_ignore = ["Serial No"]
@@ -19,15 +20,15 @@ test_ignore = ["Serial No"]
class TestPurchaseInvoice(unittest.TestCase):
def setUp(self):
unlink_payment_on_cancel_of_invoice()
frappe.db.set_value("Buying Settings", None, "allow_multiple_items", 1)
def tearDown(self):
unlink_payment_on_cancel_of_invoice(0)
def test_gl_entries_without_auto_accounting_for_stock(self):
set_perpetual_inventory(0)
self.assertTrue(not cint(frappe.defaults.get_global_default("auto_accounting_for_stock")))
def test_gl_entries_without_perpetual_inventory(self):
wrapper = frappe.copy_doc(test_records[0])
set_perpetual_inventory(0, wrapper.company)
self.assertTrue(not cint(erpnext.is_perpetual_inventory_enabled(wrapper.company)))
wrapper.insert()
wrapper.submit()
wrapper.load_from_db()
@@ -49,17 +50,16 @@ class TestPurchaseInvoice(unittest.TestCase):
for d in gl_entries:
self.assertEqual([d.debit, d.credit], expected_gl_entries.get(d.account))
def test_gl_entries_with_auto_accounting_for_stock(self):
set_perpetual_inventory(1)
self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
def test_gl_entries_with_perpetual_inventory(self):
pi = frappe.copy_doc(test_records[1])
set_perpetual_inventory(1, pi.company)
self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pi.company)), 1)
pi.insert()
pi.submit()
self.check_gle_for_pi(pi.name)
set_perpetual_inventory(0)
set_perpetual_inventory(0, pi.company)
def test_payment_entry_unlink_against_purchase_invoice(self):
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
@@ -82,11 +82,10 @@ class TestPurchaseInvoice(unittest.TestCase):
self.assertRaises(frappe.LinkExistsError, pi_doc.cancel)
def test_gl_entries_with_auto_accounting_for_stock_against_pr(self):
set_perpetual_inventory(1)
self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
def test_gl_entries_with_perpetual_inventory_against_pr(self):
pr = frappe.copy_doc(pr_test_records[0])
set_perpetual_inventory(1, pr.company)
self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1)
pr.submit()
pi = frappe.copy_doc(test_records[1])
@@ -97,7 +96,7 @@ class TestPurchaseInvoice(unittest.TestCase):
self.check_gle_for_pi(pi.name)
set_perpetual_inventory(0)
set_perpetual_inventory(0, pr.company)
def check_gle_for_pi(self, pi):
gl_entries = frappe.db.sql("""select account, debit, credit
@@ -117,11 +116,23 @@ class TestPurchaseInvoice(unittest.TestCase):
self.assertEquals(expected_values[gle.account][1], gle.debit)
self.assertEquals(expected_values[gle.account][2], gle.credit)
def test_gl_entries_with_aia_for_non_stock_items(self):
set_perpetual_inventory()
self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
def test_purchase_invoice_change_naming_series(self):
pi = frappe.copy_doc(test_records[1])
pi.insert()
pi.naming_series = 'TEST-'
self.assertRaises(frappe.CannotChangeConstantError, pi.save)
pi = frappe.copy_doc(test_records[0])
pi.insert()
pi.naming_series = 'TEST-'
self.assertRaises(frappe.CannotChangeConstantError, pi.save)
def test_gl_entries_with_aia_for_non_stock_items(self):
pi = frappe.copy_doc(test_records[1])
set_perpetual_inventory(1, pi.company)
self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pi.company)), 1)
pi.get("items")[0].item_code = "_Test Non Stock Item"
pi.get("items")[0].expense_account = "_Test Account Cost for Goods Sold - _TC"
pi.get("taxes").pop(0)
@@ -144,7 +155,7 @@ class TestPurchaseInvoice(unittest.TestCase):
self.assertEquals(expected_values[i][0], gle.account)
self.assertEquals(expected_values[i][1], gle.debit)
self.assertEquals(expected_values[i][2], gle.credit)
set_perpetual_inventory(0)
set_perpetual_inventory(0, pi.company)
def test_purchase_invoice_calculation(self):
pi = frappe.copy_doc(test_records[0])
@@ -356,10 +367,11 @@ class TestPurchaseInvoice(unittest.TestCase):
order by account asc""", pi.name, as_dict=1)
self.assertTrue(gl_entries)
stock_in_hand_account = get_inventory_account(pi.company, pi.get("items")[0].warehouse)
expected_gl_entries = dict((d[0], d) for d in [
[pi.credit_to, 0.0, 250.0],
[pi.items[0].warehouse, 250.0, 0.0]
[stock_in_hand_account, 250.0, 0.0]
])
for i, gle in enumerate(gl_entries):
@@ -376,12 +388,13 @@ class TestPurchaseInvoice(unittest.TestCase):
sum(credit) as credit, debit_in_account_currency, credit_in_account_currency
from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
group by account, voucher_no order by account asc;""", pi.name, as_dict=1)
stock_in_hand_account = get_inventory_account(pi.company, pi.get("items")[0].warehouse)
self.assertTrue(gl_entries)
expected_gl_entries = dict((d[0], d) for d in [
[pi.credit_to, 250.0, 250.0],
[pi.items[0].warehouse, 250.0, 0.0],
[stock_in_hand_account, 250.0, 0.0],
["Cash - _TC", 0.0, 250.0]
])

View File

@@ -1,5 +1,6 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "hash",
@@ -21,7 +22,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Item",
@@ -52,6 +54,7 @@
"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,
@@ -78,6 +81,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Item Name",
@@ -107,6 +111,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Description",
@@ -135,6 +140,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Description",
@@ -166,6 +172,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Image",
@@ -194,6 +201,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Image View",
@@ -223,6 +231,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Quantity and Rate",
@@ -250,6 +259,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Received Qty",
@@ -278,6 +288,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Qty",
@@ -307,6 +318,7 @@
"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 Qty",
@@ -324,6 +336,36 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "stock_uom",
"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": "Stock UOM",
"length": 0,
"no_copy": 0,
"options": "UOM",
"permlevel": 0,
"precision": "",
"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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@@ -335,6 +377,7 @@
"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,
@@ -361,6 +404,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "UOM",
@@ -389,6 +433,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Conversion Factor",
@@ -405,6 +450,35 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "stock_qty",
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Stock Qty",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@@ -416,6 +490,7 @@
"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,
@@ -442,6 +517,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Price List Rate",
@@ -471,6 +547,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Discount on Price List Rate (%)",
@@ -498,6 +575,7 @@
"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,
@@ -524,6 +602,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Price List Rate (Company Currency)",
@@ -552,6 +631,7 @@
"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,
@@ -578,6 +658,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Rate ",
@@ -608,6 +689,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Amount",
@@ -638,6 +720,7 @@
"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,
@@ -664,6 +747,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Rate (Company Currency)",
@@ -694,6 +778,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Amount (Company Currency)",
@@ -724,6 +809,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Pricing Rule",
@@ -752,6 +838,7 @@
"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,
@@ -779,6 +866,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Net Rate",
@@ -808,6 +896,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Net Amount",
@@ -837,6 +926,7 @@
"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,
@@ -864,6 +954,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Net Rate (Company Currency)",
@@ -893,6 +984,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Net Amount (Company Currency)",
@@ -922,6 +1014,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Warehouse",
@@ -951,6 +1044,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Accepted Warehouse",
@@ -980,6 +1074,7 @@
"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",
@@ -1010,6 +1105,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Quality Inspection",
@@ -1039,6 +1135,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Batch No",
@@ -1068,6 +1165,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "",
@@ -1096,6 +1194,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Serial No",
@@ -1124,6 +1223,7 @@
"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 Serial No",
@@ -1152,6 +1252,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Accounting",
@@ -1179,6 +1280,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Expense Head",
@@ -1211,6 +1313,7 @@
"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,
@@ -1236,7 +1339,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Project",
@@ -1267,6 +1371,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Cost Center",
@@ -1299,6 +1404,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Reference",
@@ -1315,6 +1421,35 @@
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "allow_zero_valuation_rate",
"fieldtype": "Check",
"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": "Allow Zero Valuation Rate",
"length": 0,
"no_copy": 1,
"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,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
@@ -1326,6 +1461,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Brand",
@@ -1355,7 +1491,8 @@
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Item Group",
@@ -1371,7 +1508,7 @@
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
@@ -1387,6 +1524,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Item Tax Rate",
@@ -1416,6 +1554,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Item Tax Amount",
@@ -1445,7 +1584,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Purchase Order",
@@ -1476,6 +1616,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "BOM",
@@ -1505,6 +1646,7 @@
"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,
@@ -1531,6 +1673,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Is Fixed Asset",
@@ -1560,6 +1703,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Asset",
@@ -1588,7 +1732,8 @@
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Purchase Order Item",
@@ -1617,7 +1762,8 @@
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Purchase Receipt",
@@ -1648,6 +1794,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Page Break",
@@ -1674,7 +1821,8 @@
"hidden": 1,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 1,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "PR Detail",
@@ -1704,6 +1852,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Valuation Rate",
@@ -1732,6 +1881,7 @@
"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 Cost",
@@ -1760,6 +1910,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Landed Cost Voucher Amount",
@@ -1778,17 +1929,17 @@
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 1,
"image_view": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-11-16 16:04:52.465169",
"modified": "2017-04-19 11:54:16.112134",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice Item",
@@ -1797,7 +1948,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}
}

View File

@@ -9,11 +9,11 @@ frappe.ui.form.on("Purchase Taxes and Charges", "add_deduct_tax", function(doc,
var d = locals[cdt][cdn];
if(!d.category && d.add_deduct_tax) {
msgprint(__("Please select Category first"));
frappe.msgprint(__("Please select Category first"));
d.add_deduct_tax = '';
}
else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
d.add_deduct_tax = '';
}
refresh_field('add_deduct_tax', d.name, 'taxes');
@@ -23,7 +23,7 @@ frappe.ui.form.on("Purchase Taxes and Charges", "category", function(doc, cdt, c
var d = locals[cdt][cdn];
if (d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
msgprint(__("Cannot deduct when category is for 'Valuation' or 'Vaulation and Total'"));
frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Vaulation and Total'"));
d.add_deduct_tax = '';
}
refresh_field('add_deduct_tax', d.name, 'taxes');

View File

@@ -5,6 +5,7 @@ from __future__ import unicode_literals
import frappe, json
from frappe.utils import nowdate
from erpnext.setup.utils import get_exchange_rate
from frappe.core.doctype.communication.email import make
from erpnext.stock.get_item_details import get_pos_profile
from erpnext.accounts.party import get_party_account_currency
from erpnext.controllers.accounts_controller import get_taxes_and_charges
@@ -25,12 +26,16 @@ def get_pos_data():
update_multi_mode_option(doc, pos_profile)
default_print_format = pos_profile.get('print_format') or "Point of Sale"
print_template = frappe.db.get_value('Print Format', default_print_format, 'html')
customers = get_customers_list(pos_profile)
return {
'doc': doc,
'default_customer': pos_profile.get('customer'),
'items': get_items_list(pos_profile),
'customers': get_customers_list(pos_profile),
'item_groups': get_item_groups(pos_profile),
'customers': customers,
'address': get_customers_address(customers),
'contacts': get_contacts(customers),
'serial_no_data': get_serial_no_data(pos_profile, doc.company),
'batch_no_data': get_batch_no_data(),
'tax_data': get_item_tax_data(),
@@ -59,6 +64,8 @@ def get_company_data(company):
def update_pos_profile_data(doc, pos_profile, company_data):
doc.campaign = pos_profile.get('campaign')
if pos_profile and not pos_profile.get('country'):
pos_profile.country = company_data.country
doc.write_off_account = pos_profile.get('write_off_account') or \
company_data.write_off_account
@@ -126,37 +133,84 @@ def get_items_list(pos_profile):
if pos_profile.get('item_groups'):
# Get items based on the item groups defined in the POS profile
for d in pos_profile.get('item_groups'):
item_groups.extend(get_child_nodes('Item Group', d.item_group))
item_groups.extend([d.name for d in get_child_nodes('Item Group', d.item_group)])
cond = "item_group in (%s)"%(', '.join(['%s']*len(item_groups)))
return frappe.db.sql("""
select
name, item_code, item_name, description, item_group, expense_account, has_batch_no,
has_serial_no, expense_account, selling_cost_center, stock_uom, image,
default_warehouse, is_stock_item, barcode
default_warehouse, is_stock_item, barcode, brand
from
tabItem
where
disabled = 0 and has_variants = 0 and is_sales_item = 1 and {cond}
""".format(cond=cond), tuple(item_groups), as_dict=1)
def get_customers_list(pos_profile):
def get_item_groups(pos_profile):
item_group_dict = {}
if pos_profile.get('item_groups'):
item_groups = []
for d in pos_profile.get('item_groups'):
item_groups.extend(get_child_nodes('Item Group', d.item_group))
else:
item_groups = frappe.db.sql("""Select name,
lft, rgt from `tabItem Group` order by lft""", as_dict=1)
for data in item_groups:
item_group_dict[data.name] = [data.lft, data.rgt]
return item_group_dict
def get_customers_list(pos_profile={}):
cond = "1=1"
customer_groups = []
if pos_profile.get('customer_groups'):
# Get customers based on the customer groups defined in the POS profile
for d in pos_profile.get('customer_groups'):
customer_groups.extend(get_child_nodes('Customer Group', d.customer_group))
customer_groups.extend([d.name for d in get_child_nodes('Customer Group', d.customer_group)])
cond = "customer_group in (%s)"%(', '.join(['%s']*len(customer_groups)))
return frappe.db.sql(""" select name, customer_name, customer_group,
territory from tabCustomer where disabled = 0
territory, customer_pos_id from tabCustomer where disabled = 0
and {cond}""".format(cond=cond), tuple(customer_groups), as_dict=1) or {}
def get_customers_address(customers):
customer_address = {}
if isinstance(customers, basestring):
customers = [frappe._dict({'name': customers})]
for data in customers:
address = frappe.db.sql(""" select name, address_line1, address_line2, city, state,
email_id, phone, fax, pincode from `tabAddress` where is_primary_address =1 and name in
(select parent from `tabDynamic Link` where link_doctype = 'Customer' and link_name = %s
and parenttype = 'Address')""", data.name, as_dict=1)
address_data = {}
if address: address_data = address[0]
address_data.update({'full_name': data.customer_name, 'customer_pos_id': data.customer_pos_id})
customer_address[data.name] = address_data
return customer_address
def get_contacts(customers):
customer_contact = {}
if isinstance(customers, basestring):
customers = [frappe._dict({'name': customers})]
for data in customers:
contact = frappe.db.sql(""" select email_id, phone, mobile_no from `tabContact`
where is_primary_contact =1 and name in
(select parent from `tabDynamic Link` where link_doctype = 'Customer' and link_name = %s
and parenttype = 'Contact')""", data.name, as_dict=1)
if contact:
customer_contact[data.name] = contact[0]
return customer_contact
def get_child_nodes(group_type, root):
lft, rgt = frappe.db.get_value(group_type, root, ["lft", "rgt"])
return frappe.db.sql_list(""" Select name from `tab{tab}` where
lft >= {lft} and rgt <= {rgt}""".format(tab=group_type, lft=lft, rgt=rgt))
return frappe.db.sql(""" Select name, lft, rgt from `tab{tab}` where
lft >= {lft} and rgt <= {rgt} order by lft""".format(tab=group_type, lft=lft, rgt=rgt), as_dict=1)
def get_serial_no_data(pos_profile, company):
# get itemwise serial no data
@@ -247,12 +301,18 @@ def get_pricing_rule_data(doc):
return pricing_rules
@frappe.whitelist()
def make_invoice(doc_list):
def make_invoice(doc_list={}, email_queue_list={}, customers_list={}):
if isinstance(doc_list, basestring):
doc_list = json.loads(doc_list)
name_list = []
if isinstance(email_queue_list, basestring):
email_queue_list = json.loads(email_queue_list)
if isinstance(customers_list, basestring):
customers_list = json.loads(customers_list)
customers_list = make_customer_and_address(customers_list)
name_list = []
for docs in doc_list:
for name, doc in docs.items():
if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
@@ -260,27 +320,134 @@ def make_invoice(doc_list):
si_doc = frappe.new_doc('Sales Invoice')
si_doc.offline_pos_name = name
si_doc.update(doc)
submit_invoice(si_doc, name)
si_doc.set_posting_time = 1
si_doc.customer = get_customer_id(doc)
si_doc.due_date = doc.get('posting_date')
submit_invoice(si_doc, name, doc)
name_list.append(name)
else:
name_list.append(name)
return name_list
email_queue = make_email_queue(email_queue_list)
customers = get_customers_list()
return {
'invoice': name_list,
'email_queue': email_queue,
'customers': customers_list,
'synced_customers_list': customers,
'synced_address': get_customers_address(customers),
'synced_contacts': get_contacts(customers)
}
def validate_records(doc):
validate_customer(doc)
validate_item(doc)
def validate_customer(doc):
if not frappe.db.exists('Customer', doc.get('customer')):
customer_doc = frappe.new_doc('Customer')
customer_doc.customer_name = doc.get('customer')
customer_doc.customer_type = 'Company'
customer_doc.customer_group = doc.get('customer_group')
customer_doc.territory = doc.get('territory')
customer_doc.save(ignore_permissions = True)
frappe.db.commit()
doc['customer'] = customer_doc.name
def get_customer_id(doc, customer=None):
cust_id = None
if doc.get('customer_pos_id'):
cust_id = frappe.db.get_value('Customer',
{'customer_pos_id': doc.get('customer_pos_id')}, 'name')
if not cust_id:
customer = customer or doc.get('customer')
if frappe.db.exists('Customer', customer):
cust_id = customer
else:
cust_id = add_customer(doc)
return cust_id
def make_customer_and_address(customers):
customers_list = []
for customer, data in customers.items():
data = json.loads(data)
cust_id = get_customer_id(data, customer)
if not cust_id:
cust_id = add_customer(data)
else:
frappe.db.set_value("Customer", cust_id, "customer_name", data.get('full_name'))
make_contact(data, cust_id)
make_address(data, cust_id)
customers_list.append(customer)
frappe.db.commit()
return customers_list
def add_customer(data):
customer_doc = frappe.new_doc('Customer')
customer_doc.customer_name = data.get('full_name') or data.get('customer')
customer_doc.customer_pos_id = data.get('customer_pos_id')
customer_doc.customer_type = 'Company'
customer_doc.customer_group = frappe.db.get_single_value('Selling Settings', 'customer_group')
customer_doc.territory = frappe.db.get_single_value('Selling Settings', 'territory')
customer_doc.flags.ignore_mandatory = True
customer_doc.save(ignore_permissions = True)
frappe.db.commit()
return customer_doc.name
def make_contact(args,customer):
if args.get('email_id') or args.get('phone'):
name = frappe.db.get_value('Dynamic Link',
{'link_doctype': 'Customer', 'link_name': customer, 'parenttype': 'Contact'}, 'parent')
args = {
'first_name': args.get('full_name'),
'email_id': args.get('email_id'),
'phone': args.get('phone')
}
doc = frappe.new_doc('Contact')
if name:
doc = frappe.get_doc('Contact', name)
doc.update(args)
doc.is_primary_contact = 1
if not name:
doc.append('links',{
'link_doctype': 'Customer',
'link_name': customer
})
doc.save(ignore_permissions=True)
def make_address(args, customer):
if not args.get('address_line1'): return
name = args.get('name')
if not name:
data = get_customers_address(customer)
name = data[customer].get('name') if data else None
if name:
address = frappe.get_doc('Address', name)
else:
address = frappe.new_doc('Address')
address.country = frappe.db.get_value('Company', args.get('company'), 'country')
address.append('links',{
'link_doctype': 'Customer',
'link_name': customer
})
address.is_primary_address = 1
address.is_shipping_address = 1
address.update(args)
address.save(ignore_permissions = True)
def make_email_queue(email_queue):
name_list = []
for key, data in email_queue.items():
name = frappe.db.get_value('Sales Invoice', {'offline_pos_name': key}, 'name')
data = json.loads(data)
sender = frappe.session.user
print_format = "POS Invoice"
attachments = [frappe.attach_print('Sales Invoice', name, print_format= print_format)]
make(subject = data.get('subject'), content = data.get('content'), recipients = data.get('recipients'),
sender=sender,attachments = attachments, send_email=True,
doctype='Sales Invoice', name=name)
name_list.append(key)
return name_list
def validate_item(doc):
for item in doc.get('items'):
@@ -296,7 +463,8 @@ def validate_item(doc):
item_doc.save(ignore_permissions=True)
frappe.db.commit()
def submit_invoice(si_doc, name):
def submit_invoice(si_doc, name, doc):
try:
si_doc.insert()
si_doc.submit()
@@ -310,4 +478,5 @@ def save_invoice(e, si_doc, name):
if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
si_doc.docstatus = 0
si_doc.flags.ignore_mandatory = True
si_doc.due_date = si_doc.posting_date
si_doc.insert()

View File

@@ -6,8 +6,14 @@ cur_frm.pformat.print_heading = 'Invoice';
{% include 'erpnext/selling/sales_common.js' %};
cur_frm.add_fetch('customer', 'tax_id', 'tax_id');
frappe.provide("erpnext.accounts");
erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.extend({
setup: function(doc) {
this.setup_posting_date_time_check();
this._super(doc);
},
onload: function() {
var me = this;
this._super();
@@ -51,7 +57,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
})
if(doc.outstanding_amount >= 0 || Math.abs(flt(doc.outstanding_amount)) < flt(doc.grand_total)) {
cur_frm.add_custom_button(doc.update_stock ? __('Sales Return') : __('Credit Note'),
cur_frm.add_custom_button(__('Return / Credit Note'),
this.make_sales_return, __("Make"));
cur_frm.page.set_inner_btn_group_as_primary(__("Make"));
}
@@ -65,17 +71,19 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
});
if(!from_delivery_note && !is_delivered_by_supplier) {
cur_frm.add_custom_button(__('Delivery'), cur_frm.cscript['Make Delivery Note'],
__("Make"));
cur_frm.add_custom_button(__('Delivery'),
cur_frm.cscript['Make Delivery Note'], __("Make"));
}
}
if(doc.outstanding_amount!=0 && !cint(doc.is_return)) {
cur_frm.add_custom_button(__('Payment'), this.make_payment_entry, __("Make"));
cur_frm.add_custom_button(__('Payment'),
this.make_payment_entry, __("Make"));
}
if(doc.outstanding_amount>0 && !cint(doc.is_return)) {
cur_frm.add_custom_button(__('Payment Request'), this.make_payment_request, __("Make"));
cur_frm.add_custom_button(__('Payment Request'),
this.make_payment_request, __("Make"));
}
@@ -106,33 +114,44 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
},
sales_order_btn: function() {
this.$sales_order_btn = cur_frm.add_custom_button(__('Sales Order'),
var me = this;
this.$sales_order_btn = this.frm.add_custom_button(__('Sales Order'),
function() {
erpnext.utils.map_current_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.make_sales_invoice",
source_doctype: "Sales Order",
target: me.frm,
setters: {
customer: me.frm.doc.customer || undefined,
},
get_query_filters: {
docstatus: 1,
status: ["!=", "Closed"],
per_billed: ["<", 99.99],
customer: cur_frm.doc.customer || undefined,
company: cur_frm.doc.company
company: me.frm.doc.company
}
})
}, __("Get items from"));
},
delivery_note_btn: function() {
this.$delivery_note_btn = cur_frm.add_custom_button(__('Delivery Note'),
var me = this;
this.$delivery_note_btn = this.frm.add_custom_button(__('Delivery Note'),
function() {
erpnext.utils.map_current_doc({
method: "erpnext.stock.doctype.delivery_note.delivery_note.make_sales_invoice",
source_doctype: "Delivery Note",
target: me.frm,
date_field: "posting_date",
setters: {
customer: me.frm.doc.customer || undefined
},
get_query: function() {
var filters = {
company: cur_frm.doc.company
docstatus: 1,
company: me.frm.doc.company
};
if(cur_frm.doc.customer) filters["customer"] = cur_frm.doc.customer;
if(me.frm.doc.customer) filters["customer"] = me.frm.doc.customer;
return {
query: "erpnext.controllers.queries.get_delivery_notes_to_be_billed",
filters: filters
@@ -158,8 +177,8 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
account: this.frm.doc.debit_to,
price_list: this.frm.doc.selling_price_list,
}, function() {
me.apply_pricing_rule();
})
me.apply_pricing_rule();
})
},
debit_to: function() {
@@ -250,7 +269,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
if(this.frm.doc.is_pos) {
if(!this.frm.doc.company) {
this.frm.set_value("is_pos", 0);
msgprint(__("Please specify Company to proceed"));
frappe.msgprint(__("Please specify Company to proceed"));
} else {
var me = this;
return this.frm.call({
@@ -282,9 +301,27 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte
this.calculate_write_off_amount()
}else {
this.frm.set_value("change_amount", 0.0)
this.frm.set_value("base_change_amount", 0.0)
}
this.frm.refresh_fields();
},
company_address: function() {
var me = this;
if(this.frm.doc.company_address) {
frappe.call({
method: "frappe.contacts.doctype.address.address.get_address_display",
args: {"address_dict": this.frm.doc.company_address },
callback: function(r) {
if(r.message) {
me.frm.set_value("company_address_display", r.message)
}
}
})
} else {
this.frm.set_value("company_address_display", "");
}
}
});
@@ -294,22 +331,25 @@ $.extend(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_
// Hide Fields
// ------------
cur_frm.cscript.hide_fields = function(doc) {
parent_fields = ['project', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances',
var parent_fields = ['project', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances',
'advances', 'sales_partner', 'commission_rate', 'total_commission', 'advances', 'from_date', 'to_date'];
if(cint(doc.is_pos) == 1) {
hide_field(parent_fields);
} else {
for (i in parent_fields) {
for (var i in parent_fields) {
var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
if(!docfield.hidden) unhide_field(parent_fields[i]);
}
}
item_fields_stock = ['serial_no', 'batch_no', 'actual_qty', 'expense_account', 'warehouse', 'expense_account', 'warehouse']
var item_fields_stock = ['batch_no', 'actual_batch_qty', 'actual_qty', 'expense_account',
'warehouse', 'expense_account', 'quality_inspection']
cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
(cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
// India related fields
if (frappe.boot.sysdefaults.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']);
else hide_field(['c_form_applicable', 'c_form_no']);
@@ -321,6 +361,7 @@ cur_frm.cscript.hide_fields = function(doc) {
cur_frm.cscript.update_stock = function(doc, dt, dn) {
cur_frm.cscript.hide_fields(doc, dt, dn);
this.frm.fields_dict.items.grid.toggle_reqd("item_code", doc.update_stock? true: false)
}
cur_frm.cscript['Make Delivery Note'] = function() {
@@ -380,19 +421,6 @@ cur_frm.set_query("income_account", "items", function(doc) {
}
});
// expense account
if (sys_defaults.auto_accounting_for_stock) {
cur_frm.fields_dict['items'].grid.get_field('expense_account').get_query = function(doc) {
return {
filters: {
'report_type': 'Profit and Loss',
'company': doc.company,
"is_group": 0
}
}
}
}
// Cost Center in Details Table
// -----------------------------
@@ -423,11 +451,12 @@ cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
})
if(cur_frm.doc.is_pos) {
cur_frm.msgbox = frappe.msgprint(format('<a class="btn btn-primary" \
onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">{0}</a>\
<a class="btn btn-default" href="javascript:frappe.new_doc(cur_frm.doctype);">{1}</a>', [
__('Print'), __('New')
]));
cur_frm.msgbox = frappe.msgprint(
`<a class="btn btn-primary" onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">
${__('Print')}</a>
<a class="btn btn-default" href="javascript:frappe.new_doc(cur_frm.doctype);">
${__('New')}</a>`
);
} else if(cint(frappe.boot.notification_settings.sales_invoice)) {
cur_frm.email_doc(frappe.boot.notification_settings.sales_invoice_message);
@@ -469,12 +498,45 @@ cur_frm.set_query("asset", "items", function(doc, cdt, cdn) {
frappe.ui.form.on('Sales Invoice', {
setup: function(frm){
frm.custom_make_buttons = {
'Delivery Note': 'Delivery',
'Sales Invoice': 'Sales Return',
'Payment Request': 'Payment Request',
'Payment Entry': 'Payment'
},
frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function(doc, cdt, cdn){
return{
query: "erpnext.projects.doctype.timesheet.timesheet.get_timesheet",
filters: {'project': doc.project}
}
}
// expense account
frm.fields_dict['items'].grid.get_field('expense_account').get_query = function(doc) {
if (erpnext.is_perpetual_inventory_enabled(doc.company)) {
return {
filters: {
'report_type': 'Profit and Loss',
'company': doc.company,
"is_group": 0
}
}
}
}
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
}
};
});
},
project: function(frm){

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
import frappe, erpnext
import frappe.defaults
from frappe.utils import cint, flt
from frappe import _, msgprint, throw
@@ -17,6 +17,7 @@ from erpnext.stock.doctype.delivery_note.delivery_note import update_billed_amou
from erpnext.projects.doctype.timesheet.timesheet import get_projectwise_timesheet_data
from erpnext.accounts.doctype.asset.depreciation \
import get_disposal_account_and_cost_center, get_gl_entries_on_asset_disposal
from erpnext.stock.doctype.batch.batch import set_batch_nos
form_grid_templates = {
"items": "templates/form_grid/item_grid.html"
@@ -52,11 +53,15 @@ class SalesInvoice(SellingController):
def validate(self):
super(SalesInvoice, self).validate()
self.validate_posting_time()
self.so_dn_required()
self.validate_auto_set_posting_time()
if not self.is_pos:
self.so_dn_required()
self.validate_proj_cust()
self.validate_with_previous_doc()
self.validate_uom_is_integer("stock_uom", "qty")
self.validate_uom_is_integer("stock_uom", "stock_qty")
self.validate_uom_is_integer("uom", "qty")
self.check_close_sales_order("sales_order")
self.validate_debit_to_acc()
self.clear_unallocated_advances("Sales Invoice Advance", "advances")
@@ -78,16 +83,22 @@ class SalesInvoice(SellingController):
if not self.is_opening:
self.is_opening = 'No'
if self._action != 'submit' and self.update_stock and not self.is_return:
set_batch_nos(self, 'warehouse', True)
self.set_against_income_account()
self.validate_c_form()
self.validate_time_sheets_are_submitted()
self.validate_multiple_billing("Delivery Note", "dn_detail", "amount", "items")
if not self.is_return:
self.validate_serial_numbers()
self.update_packing_list()
self.set_billing_hours_and_amount()
self.update_timesheet_billing_for_project()
self.set_status()
def before_save(self):
set_account_for_mode_of_payment(self)
@@ -121,6 +132,8 @@ class SalesInvoice(SellingController):
self.update_billing_status_for_zero_amount_refdoc("Sales Order")
self.check_credit_limit()
self.update_serial_no()
if not cint(self.is_pos) == 1 and not self.is_return:
self.update_against_document_in_jv()
@@ -150,6 +163,7 @@ class SalesInvoice(SellingController):
if not self.is_return:
self.update_billing_status_for_zero_amount_refdoc("Sales Order")
self.update_serial_no(in_cancel=True)
self.validate_c_form_on_cancel()
@@ -238,7 +252,6 @@ class SalesInvoice(SellingController):
(not self.project and not data.sales_invoice) or \
(not sales_invoice and data.sales_invoice == self.name):
data.sales_invoice = sales_invoice
if self.project: return
def on_update(self):
self.set_paid_amount()
@@ -330,7 +343,7 @@ class SalesInvoice(SellingController):
frappe.throw(_("Debit To account must be a Receivable account"))
self.party_account_currency = account.account_currency
def clear_unallocated_mode_of_payments(self):
self.set("payments", self.get("payments", {"amount": ["not in", [0, None, ""]]}))
@@ -341,13 +354,23 @@ class SalesInvoice(SellingController):
super(SalesInvoice, self).validate_with_previous_doc({
"Sales Order": {
"ref_dn_field": "sales_order",
"compare_fields": [["customer", "="], ["company", "="], ["project", "="],
["currency", "="]],
"compare_fields": [["customer", "="], ["company", "="], ["project", "="], ["currency", "="]]
},
"Sales Order Item": {
"ref_dn_field": "so_detail",
"compare_fields": [["item_code", "="], ["uom", "="], ["conversion_factor", "="]],
"is_child_table": True,
"allow_duplicate_prev_row_id": True
},
"Delivery Note": {
"ref_dn_field": "delivery_note",
"compare_fields": [["customer", "="], ["company", "="], ["project", "="],
["currency", "="]],
"compare_fields": [["customer", "="], ["company", "="], ["project", "="], ["currency", "="]]
},
"Delivery Note Item": {
"ref_dn_field": "dn_detail",
"compare_fields": [["item_code", "="], ["uom", "="], ["conversion_factor", "="]],
"is_child_table": True,
"allow_duplicate_prev_row_id": True
},
})
@@ -368,6 +391,12 @@ class SalesInvoice(SellingController):
def add_remarks(self):
if not self.remarks: self.remarks = 'No Remarks'
def validate_auto_set_posting_time(self):
# Don't auto set the posting date and time if invoice is amended
if self.is_new() and self.amended_from:
self.set_posting_time = 1
self.validate_posting_time()
def so_dn_required(self):
"""check in manage account if sales order / delivery note required or not."""
@@ -390,10 +419,10 @@ class SalesInvoice(SellingController):
throw(_("Customer {0} does not belong to project {1}").format(self.customer,self.project))
def validate_pos(self):
if flt(self.paid_amount) + flt(self.write_off_amount) \
- flt(self.grand_total) > 1/(10**(self.precision("grand_total") + 1)) and self.is_return:
frappe.throw(_("""Paid amount + Write Off Amount can not be greater than Grand Total"""))
if self.is_return:
if flt(self.paid_amount) + flt(self.write_off_amount) - flt(self.grand_total) < \
1/(10**(self.precision("grand_total") + 1)):
frappe.throw(_("Paid amount + Write Off Amount can not be greater than Grand Total"))
def validate_item_code(self):
for d in self.get('items'):
@@ -462,13 +491,14 @@ class SalesInvoice(SellingController):
self.set('packed_items', [])
def set_billing_hours_and_amount(self):
for timesheet in self.timesheets:
ts_doc = frappe.get_doc('Timesheet', timesheet.time_sheet)
if not timesheet.billing_hours and ts_doc.total_billable_hours:
timesheet.billing_hours = ts_doc.total_billable_hours
if not self.project:
for timesheet in self.timesheets:
ts_doc = frappe.get_doc('Timesheet', timesheet.time_sheet)
if not timesheet.billing_hours and ts_doc.total_billable_hours:
timesheet.billing_hours = ts_doc.total_billable_hours
if not timesheet.billing_amount and ts_doc.total_billable_amount:
timesheet.billing_amount = ts_doc.total_billable_amount
if not timesheet.billing_amount and ts_doc.total_billable_amount:
timesheet.billing_amount = ts_doc.total_billable_amount
def update_timesheet_billing_for_project(self):
if not self.timesheets and self.project:
@@ -532,10 +562,14 @@ class SalesInvoice(SellingController):
if d.delivery_note and frappe.db.get_value("Delivery Note", d.delivery_note, "docstatus") != 1:
throw(_("Delivery Note {0} is not submitted").format(d.delivery_note))
def make_gl_entries(self, repost_future_gle=True):
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
gl_entries = self.get_gl_entries()
if not gl_entries:
gl_entries = self.get_gl_entries()
if gl_entries:
from erpnext.accounts.general_ledger import make_gl_entries
@@ -552,11 +586,11 @@ class SalesInvoice(SellingController):
self.doctype, self.return_against if cint(self.is_return) else self.name)
if repost_future_gle and cint(self.update_stock) \
and cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
and cint(auto_accounting_for_stock):
items, warehouses = self.get_items_and_warehouses()
update_gl_entries_after(self.posting_date, self.posting_time, warehouses, items)
elif self.docstatus == 2 and cint(self.update_stock) \
and cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
and cint(auto_accounting_for_stock):
from erpnext.accounts.general_ledger import delete_gl_entries
delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name)
@@ -644,8 +678,8 @@ class SalesInvoice(SellingController):
)
# expense account gl entries
if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")) \
and cint(self.update_stock):
if cint(self.update_stock) and \
erpnext.is_perpetual_inventory_enabled(self.company):
gl_entries += super(SalesInvoice, self).get_gl_entries()
def make_pos_gl_entries(self, gl_entries):
@@ -679,7 +713,7 @@ class SalesInvoice(SellingController):
else payment_mode.amount
}, payment_mode_account_currency)
)
def make_gle_for_change_amount(self, gl_entries):
if cint(self.is_pos) and self.change_amount:
if self.account_for_change_amount:
@@ -696,7 +730,7 @@ class SalesInvoice(SellingController):
"against_voucher_type": self.doctype
}, self.party_account_currency)
)
gl_entries.append(
self.get_gl_dict({
"account": self.account_for_change_amount,
@@ -706,7 +740,7 @@ class SalesInvoice(SellingController):
)
else:
frappe.throw(_("Select change amount account"), title="Mandatory Field")
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:
@@ -758,6 +792,61 @@ class SalesInvoice(SellingController):
self.due_date = None
def update_serial_no(self, in_cancel=False):
""" update Sales Invoice refrence in Serial No """
invoice = None if (in_cancel or self.is_return) else self.name
if in_cancel and self.is_return:
invoice = self.return_against
for item in self.items:
if not item.serial_no:
continue
for serial_no in item.serial_no.split("\n"):
if serial_no and frappe.db.exists('Serial No', serial_no):
sno = frappe.get_doc('Serial No', serial_no)
sno.sales_invoice = invoice
sno.db_update()
def validate_serial_numbers(self):
"""
validate serial number agains Delivery Note and Sales Invoice
"""
self.validate_serial_against_delivery_note()
self.validate_serial_against_sales_invoice()
def validate_serial_against_delivery_note(self):
"""
validate if the serial numbers in Sales Invoice Items are same as in
Delivery Note Item
"""
for item in self.items:
if not item.delivery_note or not item.dn_detail:
continue
serial_nos = frappe.db.get_value("Delivery Note Item", item.dn_detail, "serial_no") or ""
dn_serial_nos = set(serial_nos.split("\n"))
serial_nos = item.serial_no or ""
si_serial_nos = set(serial_nos.split("\n"))
if si_serial_nos - dn_serial_nos:
frappe.throw(_("Serial Numbers in row {0} does not match with Delivery Note".format(item.idx)))
def validate_serial_against_sales_invoice(self):
""" check if serial number is already used in other sales invoice """
for item in self.items:
if not item.serial_no:
continue
for serial_no in item.serial_no.split("\n"):
sales_invoice = frappe.db.get_value("Serial No", serial_no, "sales_invoice")
if sales_invoice and self.name != sales_invoice:
frappe.throw(_("Serial Number: {0} is already referenced in Sales Invoice: {1}".format(
serial_no, sales_invoice
)))
def get_list_context(context=None):
from erpnext.controllers.website_list_for_contact import get_list_context
list_context = get_list_context(context)
@@ -788,11 +877,11 @@ def make_delivery_note(source_name, target_doc=None):
target.run_method("calculate_taxes_and_totals")
def update_item(source_doc, target_doc, source_parent):
target_doc.base_amount = (flt(source_doc.qty) - flt(source_doc.delivered_qty)) * \
flt(source_doc.base_rate)
target_doc.amount = (flt(source_doc.qty) - flt(source_doc.delivered_qty)) * \
flt(source_doc.rate)
target_doc.qty = flt(source_doc.qty) - flt(source_doc.delivered_qty)
target_doc.stock_qty = target_doc.qty * flt(source_doc.conversion_factor)
target_doc.base_amount = target_doc.qty * flt(source_doc.base_rate)
target_doc.amount = target_doc.qty * flt(source_doc.rate)
doclist = get_mapped_doc("Sales Invoice", source_name, {
"Sales Invoice": {
@@ -808,7 +897,8 @@ def make_delivery_note(source_name, target_doc=None):
"parent": "against_sales_invoice",
"serial_no": "serial_no",
"sales_order": "against_sales_order",
"so_detail": "so_detail"
"so_detail": "so_detail",
"cost_center": "cost_center"
},
"postprocess": update_item,
"condition": lambda doc: doc.delivered_by_supplier!=1
@@ -837,4 +927,4 @@ def make_sales_return(source_name, target_doc=None):
def set_account_for_mode_of_payment(self):
for data in self.payments:
if not data.account:
data.account = get_bank_cash_account(data.mode_of_payment, self.company).get("account")
data.account = get_bank_cash_account(data.mode_of_payment, self.company).get("account")

View File

@@ -11,8 +11,7 @@ def get_data():
'Sales Invoice': 'return_against'
},
'internal_links': {
'Sales Order': ['items', 'sales_order'],
'Delivery Note': ['items', 'delivery_note'],
'Sales Order': ['items', 'sales_order']
},
'transactions': [
{

View File

@@ -20,7 +20,10 @@
"item_name": "138-CMS Shoe",
"parentfield": "items",
"qty": 1.0,
"rate": 500.0
"rate": 500.0,
"uom": "_Test UOM",
"conversion_factor": 1,
"stock_uom": "_Test UOM"
}
],
"base_grand_total": 561.8,
@@ -89,7 +92,10 @@
"item_name": "_Test Item",
"parentfield": "items",
"price_list_rate": 500.0,
"qty": 1.0
"qty": 1.0,
"uom": "_Test UOM",
"conversion_factor": 1,
"stock_uom": "_Test UOM"
}
],
"base_grand_total": 630.0,
@@ -141,7 +147,9 @@
"price_list_rate": 50,
"qty": 10,
"rate": 50,
"stock_uom": "_Test UOM"
"uom": "_Test UOM 1",
"conversion_factor": 1,
"stock_uom": "_Test UOM 1"
},
{
"cost_center": "_Test Cost Center - _TC",
@@ -153,6 +161,8 @@
"parentfield": "items",
"price_list_rate": 150,
"qty": 5,
"uom": "_Test UOM",
"conversion_factor": 1,
"rate": 150,
"stock_uom": "_Test UOM"
}
@@ -263,7 +273,10 @@
"parentfield": "items",
"price_list_rate": 62.5,
"qty": 10,
"stock_uom": "_Test UOM"
"uom": "_Test UOM 1",
"conversion_factor": 1,
"stock_uom": "_Test UOM 1"
},
{
"cost_center": "_Test Cost Center - _TC",
@@ -275,6 +288,8 @@
"parentfield": "items",
"price_list_rate": 190.66,
"qty": 5,
"uom": "_Test UOM",
"conversion_factor": 1,
"stock_uom": "_Test UOM"
}
],

View File

@@ -4,7 +4,7 @@ from __future__ import unicode_literals
import frappe
import unittest, copy
from frappe.utils import nowdate, add_days, flt, nowdate
from frappe.utils import nowdate, add_days, flt
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry, get_qty_after_transaction
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import unlink_payment_on_cancel_of_invoice
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
@@ -12,6 +12,7 @@ from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_per
from erpnext.exceptions import InvalidAccountCurrency, InvalidCurrency
from erpnext.stock.doctype.serial_no.serial_no import SerialNoWarehouseError
from frappe.model.naming import make_autoname
from erpnext.accounts.doctype.account.test_account import get_inventory_account
class TestSalesInvoice(unittest.TestCase):
def make(self):
@@ -42,6 +43,19 @@ class TestSalesInvoice(unittest.TestCase):
time.sleep(1)
self.assertRaises(frappe.TimestampMismatchError, w2.save)
def test_sales_invoice_change_naming_series(self):
si = frappe.copy_doc(test_records[2])
si.insert()
si.naming_series = 'TEST-'
self.assertRaises(frappe.CannotChangeConstantError, si.save)
si = frappe.copy_doc(test_records[1])
si.insert()
si.naming_series = 'TEST-'
self.assertRaises(frappe.CannotChangeConstantError, si.save)
def test_sales_invoice_calculation_base_currency(self):
si = frappe.copy_doc(test_records[2])
si.insert()
@@ -162,11 +176,50 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEquals(si.base_grand_total, 1628)
self.assertEquals(si.grand_total, 32.56)
def test_sales_invoice_with_discount_and_inclusive_tax(self):
si = create_sales_invoice(qty=100, rate=50, do_not_save=True)
si.append("taxes", {
"charge_type": "On Net Total",
"account_head": "_Test Account Service Tax - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Service Tax",
"rate": 14,
'included_in_print_rate': 1
})
si.insert()
# with inclusive tax
self.assertEquals(si.net_total, 4385.96)
self.assertEquals(si.grand_total, 5000)
si.reload()
# additional discount
si.discount_amount = 100
si.apply_discount_on = 'Net Total'
si.save()
# with inclusive tax and additional discount
self.assertEquals(si.net_total, 4285.96)
self.assertEquals(si.grand_total, 4885.99)
si.reload()
# additional discount on grand total
si.discount_amount = 100
si.apply_discount_on = 'Grand Total'
si.save()
# with inclusive tax and additional discount
self.assertEquals(si.net_total, 4298.24)
self.assertEquals(si.grand_total, 4900.00)
def test_sales_invoice_discount_amount(self):
si = frappe.copy_doc(test_records[3])
si.discount_amount = 104.95
si.append("taxes", {
"doctype": "Sales Taxes and Charges",
"charge_type": "On Previous Row Amount",
"account_head": "_Test Account Service Tax - _TC",
"cost_center": "_Test Cost Center - _TC",
@@ -435,8 +488,8 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEquals(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 561.8)
def test_sales_invoice_gl_entry_without_perpetual_inventory(self):
set_perpetual_inventory(0)
si = frappe.copy_doc(test_records[1])
set_perpetual_inventory(0, si.company)
si.insert()
si.submit()
@@ -519,7 +572,7 @@ class TestSalesInvoice(unittest.TestCase):
{'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 330}]
invoice_data = [{'09052016142': pos}]
si = make_invoice(invoice_data)
si = make_invoice(invoice_data).get('invoice')
self.assertEquals(si[0], '09052016142')
sales_invoice = frappe.get_all('Sales Invoice', fields =["*"], filters = {'offline_pos_name': '09052016142', 'docstatus': 1})
@@ -543,7 +596,7 @@ class TestSalesInvoice(unittest.TestCase):
order by account asc, debit asc""", si.name, as_dict=1)
self.assertTrue(gl_entries)
stock_in_hand = frappe.db.get_value("Account", {"warehouse": "_Test Warehouse - _TC"})
stock_in_hand = get_inventory_account('_Test Company')
expected_gl_entries = sorted([
[si.debit_to, 630.0, 0.0],
@@ -564,6 +617,7 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEquals(expected_gl_entries[i][2], gle.credit)
si.cancel()
frappe.delete_doc('Sales Invoice', si.name)
gle = frappe.db.sql("""select * from `tabGL Entry`
where voucher_type='Sales Invoice' and voucher_no=%s""", si.name)
@@ -698,6 +752,12 @@ class TestSalesInvoice(unittest.TestCase):
self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"))
self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0],
"delivery_document_no"), si.name)
self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "sales_invoice"),
si.name)
# check if the serial number is already linked with any other Sales Invoice
_si = frappe.copy_doc(si.as_dict())
self.assertRaises(frappe.ValidationError, _si.insert)
return si
@@ -711,6 +771,7 @@ class TestSalesInvoice(unittest.TestCase):
self.assertEquals(frappe.db.get_value("Serial No", serial_nos[0], "warehouse"), "_Test Warehouse - _TC")
self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0],
"delivery_document_no"))
self.assertFalse(frappe.db.get_value("Serial No", serial_nos[0], "sales_invoice"))
def test_serialize_status(self):
serial_no = frappe.get_doc({
@@ -729,6 +790,27 @@ class TestSalesInvoice(unittest.TestCase):
self.assertRaises(SerialNoWarehouseError, si.submit)
def test_serial_numbers_against_delivery_note(self):
"""
check if the sales invoice item serial numbers and the delivery note items
serial numbers are same
"""
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
se = make_serialized_item()
serial_nos = get_serial_nos(se.get("items")[0].serial_no)
dn = create_delivery_note(item=se.get("items")[0].item_code, serial_no=serial_nos[0])
dn.submit()
si = make_sales_invoice(dn.name)
si.save()
self.assertEquals(si.get("items")[0].serial_no, dn.get("items")[0].serial_no)
def test_invoice_due_date_against_customers_credit_days(self):
# set customer's credit days
frappe.db.set_value("Customer", "_Test Customer", "credit_days_based_on", "Fixed Days")
@@ -770,11 +852,11 @@ class TestSalesInvoice(unittest.TestCase):
["incoming_rate", "stock_value_difference"])
self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
stock_in_hand_account = get_inventory_account('_Test Company', si1.items[0].warehouse)
# Check gl entry
gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice",
"voucher_no": si1.name, "account": "_Test Warehouse - _TC"}, "debit")
"voucher_no": si1.name, "account": stock_in_hand_account}, "debit")
self.assertEquals(gle_warehouse_amount, stock_value_difference)
@@ -917,51 +999,13 @@ class TestSalesInvoice(unittest.TestCase):
def test_create_so_with_margin(self):
si = create_sales_invoice(item_code="_Test Item", qty=1, do_not_submit=True)
price_list_rate = si.items[0].price_list_rate
price_list_rate = 100
si.items[0].price_list_rate = price_list_rate
si.items[0].margin_type = 'Percentage'
si.items[0].margin_rate_or_amount = 25
si.insert()
self.assertEqual(si.get("items")[0].rate, flt((price_list_rate*25)/100 + price_list_rate))
self.assertNotEquals(si.get("items")[0].rate, flt((price_list_rate*25)/100 + price_list_rate))
si.items[0].margin_rate_or_amount = 25
si.submit()
self.assertNotEquals(si.get("items")[0].rate, flt((price_list_rate*25)/100 + price_list_rate))
def test_party_status(self):
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
from frappe.utils import random_string
customer_name = 'test customer for status'
if frappe.db.exists('Customer', customer_name):
customer = frappe.get_doc('Customer', customer_name)
customer.db_set('status', 'Active')
else:
customer = frappe.get_doc({
'doctype': 'Customer',
'customer_name': customer_name,
'customer_group': 'Commercial',
'customer_type': 'Individual',
'territory': 'Rest of the World'
}).insert()
self.assertEquals(frappe.db.get_value('Customer', customer.name, 'status'), 'Active')
invoice = create_sales_invoice(customer="test customer for status",
debit_to="_Test Receivable - _TC",
currency="USD", conversion_rate=50)
self.assertEquals(frappe.db.get_value('Customer', customer.name, 'status'), 'Open')
pe = get_payment_entry(invoice.doctype, invoice.name)
pe.reference_no = random_string(10)
pe.reference_date = invoice.posting_date
pe.insert()
pe.submit()
self.assertEquals(frappe.db.get_value('Customer', customer.name, 'status'), 'Active')
def test_outstanding_amount_after_advance_jv_cancelation(self):
from erpnext.accounts.doctype.journal_entry.test_journal_entry \
import test_records as jv_test_records
@@ -986,15 +1030,15 @@ class TestSalesInvoice(unittest.TestCase):
#check outstanding after advance allocation
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total - si.total_advance, si.precision("outstanding_amount")))
#added to avoid Document has been modified exception
jv = frappe.get_doc("Journal Entry", jv.name)
jv.cancel()
si.load_from_db()
#check outstanding after advance cancellation
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total + si.total_advance, si.precision("outstanding_amount")))
def test_outstanding_amount_after_advance_payment_entry_cancelation(self):
pe = frappe.get_doc({
"doctype": "Payment Entry",
@@ -1015,7 +1059,7 @@ class TestSalesInvoice(unittest.TestCase):
})
pe.insert()
pe.submit()
si = frappe.copy_doc(test_records[0])
si.is_pos = 0
si.append("advances", {
@@ -1028,23 +1072,70 @@ class TestSalesInvoice(unittest.TestCase):
})
si.insert()
si.submit()
si.load_from_db()
#check outstanding after advance allocation
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total - si.total_advance, si.precision("outstanding_amount")))
#added to avoid Document has been modified exception
pe = frappe.get_doc("Payment Entry", pe.name)
pe.cancel()
si.load_from_db()
#check outstanding after advance cancellation
self.assertEqual(flt(si.outstanding_amount), flt(si.grand_total + si.total_advance, si.precision("outstanding_amount")))
def test_multiple_uom_in_selling(self):
si = frappe.copy_doc(test_records[1])
si.items[0].uom = "_Test UOM 1"
si.items[0].conversion_factor = None
si.items[0].price_list_rate = None
si.save()
expected_values = {
"keys": ["price_list_rate", "stock_uom", "uom", "conversion_factor", "rate", "amount",
"base_price_list_rate", "base_rate", "base_amount"],
"_Test Item": [1000, "_Test UOM", "_Test UOM 1", 10.0, 1000, 1000, 1000, 1000, 1000]
}
# check if the conversion_factor and price_list_rate is calculated according to uom
for d in si.get("items"):
for i, k in enumerate(expected_values["keys"]):
self.assertEquals(d.get(k), expected_values[d.item_code][i])
def test_item_wise_tax_breakup(self):
si = create_sales_invoice(qty=100, rate=50, do_not_save=True)
si.append("items", {
"item_code": "_Test Item",
"warehouse": "_Test Warehouse - _TC",
"qty": 100,
"rate": 50,
"income_account": "Sales - _TC",
"expense_account": "Cost of Goods Sold - _TC",
"cost_center": "_Test Cost Center - _TC"
})
si.append("taxes", {
"charge_type": "On Net Total",
"account_head": "_Test Account Service Tax - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Service Tax",
"rate": 10
})
si.insert()
tax_breakup_html = '''\n<div class="tax-break-up" style="overflow-x: auto;">\n\t<table class="table table-bordered table-hover">\n\t\t<thead><tr><th class="text-left" style="min-width: 120px;">Item Name</th><th class="text-right" style="min-width: 80px;">Taxable Amount</th><th class="text-right" style="min-width: 80px;">_Test Account Service Tax - _TC</th></tr></thead>\n\t\t<tbody><tr><td>_Test Item</td><td class="text-right">\u20b9 10,000.00</td><td class="text-right">(10.0%) \u20b9 1,000.00</td></tr></tbody>\n\t</table>\n</div>'''
self.assertEqual(si.other_charges_calculation, tax_breakup_html)
def create_sales_invoice(**args):
si = frappe.new_doc("Sales Invoice")
args = frappe._dict(args)
if args.posting_date:
si.set_posting_time = 1
si.posting_date = args.posting_date or nowdate()
si.company = args.company or "_Test Company"

View File

@@ -9,6 +9,7 @@
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"fields": [
{
"allow_on_submit": 0,
@@ -21,7 +22,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 1,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Time Sheet",
"length": 0,
"no_copy": 0,
@@ -31,6 +34,7 @@
"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,
@@ -48,7 +52,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Billing Hours",
"length": 0,
"no_copy": 0,
@@ -57,6 +63,7 @@
"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,
@@ -74,7 +81,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Billing Amount",
"length": 0,
"no_copy": 0,
@@ -83,6 +92,7 @@
"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,
@@ -100,7 +110,9 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Timesheet Detail",
"length": 0,
"no_copy": 1,
@@ -109,6 +121,7 @@
"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,
@@ -126,7 +139,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2016-09-09 14:01:04.095775",
"modified": "2017-02-17 16:47:04.413420",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice Timesheet",
@@ -136,7 +149,9 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
}

View File

@@ -4,11 +4,10 @@
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
import frappe, erpnext
from frappe import _, msgprint, throw
from frappe.utils import flt, fmt_money
from frappe.model.document import Document
from erpnext.setup.utils import get_company_currency
class OverlappingConditionError(frappe.ValidationError): pass
class FromGreaterThanToError(frappe.ValidationError): pass
@@ -77,7 +76,7 @@ class ShippingRule(Document):
overlaps.append([d1, d2])
if overlaps:
company_currency = get_company_currency(self.company)
company_currency = erpnext.get_company_currency(self.company)
msgprint(_("Overlapping conditions found between:"))
messages = []
for d1, d2 in overlaps:

View File

@@ -23,6 +23,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Tax Type",
@@ -52,6 +53,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Use for Shopping Cart",
@@ -80,6 +82,7 @@
"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,
@@ -108,6 +111,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Sales Tax Template",
@@ -138,6 +142,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Purchase Tax Template",
@@ -167,6 +172,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Filters",
@@ -196,6 +202,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Customer",
@@ -226,6 +233,7 @@
"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",
@@ -255,6 +263,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Billing City",
@@ -283,6 +292,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Billing County",
@@ -311,6 +321,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Billing State",
@@ -339,6 +350,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Billing Country",
@@ -368,6 +380,7 @@
"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,
@@ -396,6 +409,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Customer Group",
@@ -426,6 +440,7 @@
"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 Type",
@@ -455,6 +470,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Shipping City",
@@ -483,6 +499,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Shipping County",
@@ -511,6 +528,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Shipping State",
@@ -539,6 +557,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Shipping Country",
@@ -568,6 +587,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Validity",
@@ -596,6 +616,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "From Date",
@@ -624,6 +645,7 @@
"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,
@@ -651,6 +673,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "To Date",
@@ -679,6 +702,7 @@
"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,
@@ -707,6 +731,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Priority",
@@ -735,6 +760,7 @@
"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,
@@ -762,6 +788,7 @@
"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",
@@ -791,7 +818,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-12-13 15:56:28.704122",
"modified": "2017-02-17 16:22:42.501765",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Tax Rule",
@@ -808,7 +835,6 @@
"export": 1,
"if_owner": 0,
"import": 0,
"is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -823,7 +849,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 1,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
}
}

View File

@@ -7,6 +7,7 @@ import frappe
from frappe import _
from frappe.model.document import Document
from frappe.utils import cstr, cint
from frappe.contacts.doctype.address.address import get_default_address
class IncorrectCustomerGroup(frappe.ValidationError): pass
class IncorrectSupplierType(frappe.ValidationError): pass
@@ -96,27 +97,31 @@ class TaxRule(Document):
@frappe.whitelist()
def get_party_details(party, party_type, args=None):
out = {}
billing_address, shipping_address = None, None
if args:
billing_filters= {"name": args.get("billing_address")}
shipping_filters= {"name": args.get("shipping_address")}
if args.get('billing_address'):
billing_address = frappe.get_doc('Address', args.get('billing_address'))
if args.get('shipping_address'):
shipping_address = frappe.get_doc('Address', args.get('shipping_address'))
else:
billing_filters= {party_type: party, "is_primary_address": 1}
shipping_filters= {party_type:party, "is_shipping_address": 1}
billing_address= frappe.get_all("Address", fields=["city", "county", "state", "country"], filters= billing_filters)
shipping_address= frappe.get_all("Address", fields=["city", "county", "state", "country"], filters= shipping_filters)
billing_address_name = get_default_address(party_type, party)
shipping_address_name = get_default_address(party_type, party, 'is_shipping_address')
if billing_address_name:
billing_address = frappe.get_doc('Address', billing_address_name)
if shipping_address_name:
shipping_address = frappe.get_doc('Address', shipping_address_name)
if billing_address:
out["billing_city"]= billing_address[0].city
out["billing_county"]= billing_address[0].county
out["billing_state"]= billing_address[0].state
out["billing_country"]= billing_address[0].country
out["billing_city"]= billing_address.city
out["billing_county"]= billing_address.county
out["billing_state"]= billing_address.state
out["billing_country"]= billing_address.country
if shipping_address:
out["shipping_city"]= shipping_address[0].city
out["shipping_county"]= shipping_address[0].county
out["shipping_state"]= shipping_address[0].state
out["shipping_country"]= shipping_address[0].country
out["shipping_city"]= shipping_address.city
out["shipping_county"]= shipping_address.county
out["shipping_state"]= shipping_address.state
out["shipping_country"]= shipping_address.country
return out

View File

@@ -2,7 +2,7 @@
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
import frappe, erpnext
from frappe.utils import flt, cstr, cint
from frappe import _
from frappe.model.meta import get_field_precision
@@ -11,12 +11,12 @@ from erpnext.accounts.doctype.budget.budget import validate_expense_against_budg
class StockAccountInvalidTransaction(frappe.ValidationError): pass
def make_gl_entries(gl_map, cancel=False, adv_adj=False, merge_entries=True, update_outstanding='Yes'):
def make_gl_entries(gl_map, cancel=False, adv_adj=False, merge_entries=True, update_outstanding='Yes', from_repost=False):
if gl_map:
if not cancel:
gl_map = process_gl_map(gl_map, merge_entries)
if gl_map and len(gl_map) > 1:
save_entries(gl_map, adv_adj, update_outstanding)
save_entries(gl_map, adv_adj, update_outstanding, from_repost)
else:
frappe.throw(_("Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction."))
else:
@@ -78,28 +78,33 @@ def check_if_in_list(gle, gl_map):
and cstr(e.get('project')) == cstr(gle.get('project')):
return e
def save_entries(gl_map, adv_adj, update_outstanding):
validate_account_for_auto_accounting_for_stock(gl_map)
def save_entries(gl_map, adv_adj, update_outstanding, from_repost=False):
if not from_repost:
validate_account_for_perpetual_inventory(gl_map)
round_off_debit_credit(gl_map)
for entry in gl_map:
make_entry(entry, adv_adj, update_outstanding)
make_entry(entry, adv_adj, update_outstanding, from_repost)
# check against budget
validate_expense_against_budget(entry)
if not from_repost:
validate_expense_against_budget(entry)
def make_entry(args, adv_adj, update_outstanding):
def make_entry(args, adv_adj, update_outstanding, from_repost=False):
args.update({"doctype": "GL Entry"})
gle = frappe.get_doc(args)
gle.flags.ignore_permissions = 1
gle.flags.from_repost = from_repost
gle.insert()
gle.run_method("on_update_with_args", adv_adj, update_outstanding)
gle.run_method("on_update_with_args", adv_adj, update_outstanding, from_repost)
gle.submit()
def validate_account_for_auto_accounting_for_stock(gl_map):
if cint(frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock")) \
def validate_account_for_perpetual_inventory(gl_map):
if cint(erpnext.is_perpetual_inventory_enabled(gl_map[0].company)) \
and gl_map[0].voucher_type=="Journal Entry":
aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount
where account_type = 'Stock' and (warehouse != '' and warehouse is not null) and is_group=0""")]
where account_type = 'Stock' and is_group=0""")]
for entry in gl_map:
if entry.account in aii_accounts:
@@ -118,10 +123,10 @@ def round_off_debit_credit(gl_map):
debit_credit_diff = flt(debit_credit_diff, precision)
if gl_map[0]["voucher_type"] == "Journal Entry":
if gl_map[0]["voucher_type"] in ("Journal Entry", "Payment Entry"):
allowance = 5.0 / (10**precision)
else:
allowance = 1
allowance = .5
if abs(debit_credit_diff) >= allowance:
frappe.throw(_("Debit and Credit not equal for {0} #{1}. Difference is {2}.")

File diff suppressed because it is too large Load Diff

View File

@@ -7,10 +7,15 @@ import frappe
import datetime
from frappe import _, msgprint, scrub
from frappe.defaults import get_user_permissions
from frappe.utils import add_days, getdate, formatdate, get_first_day, date_diff, add_years
from erpnext.utilities.doctype.address.address import get_address_display
from erpnext.utilities.doctype.contact.contact import get_contact_details
from erpnext.exceptions import PartyFrozen, InvalidCurrency, PartyDisabled, InvalidAccountCurrency
from frappe.model.utils import get_fetch_values
from frappe.utils import (add_days, getdate, formatdate, get_first_day, date_diff,
add_years, get_timestamp, nowdate, flt)
from frappe.contacts.doctype.address.address import (get_address_display,
get_default_address, get_company_address)
from frappe.contacts.doctype.contact.contact import get_contact_details, get_default_contact
from erpnext.exceptions import PartyFrozen, PartyDisabled, InvalidAccountCurrency
from erpnext.accounts.utils import get_fiscal_year
from erpnext import get_default_currency
class DuplicatePartyAccountError(frappe.ValidationError): pass
@@ -39,7 +44,7 @@ def _get_party_details(party=None, account=None, party_type="Customer", company=
party = frappe.get_doc(party_type, party)
set_address_details(out, party, party_type)
set_address_details(out, party, party_type, doctype, company)
set_contact_details(out, party, party_type)
set_other_values(out, party, party_type)
set_price_list(out, party, party_type, price_list)
@@ -57,24 +62,28 @@ def _get_party_details(party=None, account=None, party_type="Customer", company=
return out
def set_address_details(out, party, party_type):
def set_address_details(out, party, party_type, doctype=None, company=None):
billing_address_field = "customer_address" if party_type == "Lead" \
else party_type.lower() + "_address"
out[billing_address_field] = frappe.db.get_value("Address",
{party_type.lower(): party.name, "is_primary_address":1}, "name")
out[billing_address_field] = get_default_address(party_type, party.name)
out.update(get_fetch_values(doctype, billing_address_field, out[billing_address_field]))
# address display
out.address_display = get_address_display(out[billing_address_field])
# shipping address
if party_type in ["Customer", "Lead"]:
out.shipping_address_name = frappe.db.get_value("Address",
{party_type.lower(): party.name, "is_shipping_address":1}, "name")
out.shipping_address_name = get_default_address(party_type, party.name, 'is_shipping_address')
out.shipping_address = get_address_display(out["shipping_address_name"])
out.update(get_fetch_values(doctype, 'shipping_address_name', out.shipping_address_name))
if doctype and doctype in ['Sales Invoice']:
out.update(get_company_address(company))
if out.company_address:
out.update(get_fetch_values(doctype, 'company_address', out.company_address))
def set_contact_details(out, party, party_type):
out.contact_person = frappe.db.get_value("Contact",
{party_type.lower(): party.name, "is_primary_contact":1}, "name")
out.contact_person = get_default_contact(party_type, party.name)
if not out.contact_person:
out.update({
@@ -154,13 +163,6 @@ def set_account_and_due_date(party, account, party_type, company, posting_date,
}
return out
def get_company_currency():
company_currency = frappe._dict()
for d in frappe.get_all("Company", fields=["name", "default_currency"]):
company_currency.setdefault(d.name, d.default_currency)
return company_currency
@frappe.whitelist()
def get_party_account(party_type, party, company):
"""Returns the account for the given `party`.
@@ -174,17 +176,17 @@ def get_party_account(party_type, party, company):
account = frappe.db.get_value("Party Account",
{"parenttype": party_type, "parent": party, "company": company}, "account")
if not account:
if not account and party_type in ['Customer', 'Supplier']:
party_group_doctype = "Customer Group" if party_type=="Customer" else "Supplier Type"
group = frappe.db.get_value(party_type, party, scrub(party_group_doctype))
account = frappe.db.get_value("Party Account",
{"parenttype": party_group_doctype, "parent": group, "company": company}, "account")
if not account:
if not account and party_type in ['Customer', 'Supplier']:
default_account_name = "default_receivable_account" \
if party_type=="Customer" else "default_payable_account"
account = frappe.db.get_value("Company", company, default_account_name)
existing_gle_currency = get_party_gle_currency(party_type, party, company)
if existing_gle_currency:
if account:
@@ -211,7 +213,7 @@ def get_party_gle_currency(party_type, party, company):
return frappe.local_cache("party_gle_currency", (party_type, party, company), generator,
regenerate_if_none=True)
def get_party_gle_account(party_type, party, company):
def generator():
existing_gle_account = frappe.db.sql("""select account from `tabGL Entry`
@@ -252,7 +254,7 @@ def validate_party_accounts(doc):
if existing_gle_currency and party_account_currency != existing_gle_currency:
frappe.throw(_("Accounting entries have already been made in currency {0} for company {1}. Please select a receivable or payable account with currency {0}.").format(existing_gle_currency, account.company))
if doc.default_currency and party_account_currency and company_default_currency:
if doc.get("default_currency") and party_account_currency and company_default_currency:
if doc.default_currency != party_account_currency and doc.default_currency != company_default_currency:
frappe.throw(_("Billing currency must be equal to either default comapany's currency or party account currency"))
@@ -340,19 +342,68 @@ def set_taxes(party, party_type, posting_date, company, customer_group=None, sup
def validate_party_frozen_disabled(party_type, party_name):
if party_type and party_name:
party = frappe.db.get_value(party_type, party_name, ["is_frozen", "disabled"], as_dict=True)
if party.disabled:
frappe.throw(_("{0} {1} is disabled").format(party_type, party_name), PartyDisabled)
elif party.is_frozen:
frozen_accounts_modifier = frappe.db.get_value( 'Accounts Settings', None,'frozen_accounts_modifier')
if not frozen_accounts_modifier in frappe.get_roles():
frappe.throw(_("{0} {1} is frozen").format(party_type, party_name), PartyFrozen)
if party_type in ("Customer", "Supplier"):
party = frappe.db.get_value(party_type, party_name, ["is_frozen", "disabled"], as_dict=True)
if party.disabled:
frappe.throw(_("{0} {1} is disabled").format(party_type, party_name), PartyDisabled)
elif party.get("is_frozen"):
frozen_accounts_modifier = frappe.db.get_value( 'Accounts Settings', None,'frozen_accounts_modifier')
if not frozen_accounts_modifier in frappe.get_roles():
frappe.throw(_("{0} {1} is frozen").format(party_type, party_name), PartyFrozen)
elif party_type == "Employee":
if frappe.db.get_value("Employee", party_name, "status") == "Left":
frappe.msgprint(_("{0} {1} is not active").format(party_type, party_name), alert=True)
def get_timeline_data(doctype, name):
'''returns timeline data for the past one year'''
from frappe.desk.form.load import get_communication_data
out = {}
data = get_communication_data(doctype, name,
fields = 'unix_timestamp(date(creation)), count(name)',
fields = 'date(creation), count(name)',
after = add_years(None, -1).strftime('%Y-%m-%d'),
group_by='group by date(creation)', as_dict=False)
return dict(data)
timeline_items = dict(data)
for date, count in timeline_items.iteritems():
timestamp = get_timestamp(date)
out.update({ timestamp: count })
return out
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.db.get_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))
total_unpaid = frappe.db.sql("""
select sum(debit_in_account_currency) - sum(credit_in_account_currency)
from `tabGL Entry`
where party_type = %s and party=%s""", (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"]
return info

View File

@@ -1,81 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
from frappe.utils import evaluate_filters
from frappe.desk.notifications import get_filters_for
# NOTE: if you change this also update triggers in erpnext/hooks.py
status_depends_on = {
'Customer': ('Opportunity', 'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice', 'Project', 'Issue'),
'Supplier': ('Supplier Quotation', 'Purchase Order', 'Purchase Receipt', 'Purchase Invoice')
}
default_status = {
'Customer': 'Active',
'Supplier': None
}
def notify_status(doc, method=None):
'''Notify status to customer, supplier'''
party_type = None
for key, doctypes in status_depends_on.iteritems():
if doc.doctype in doctypes:
party_type = key
break
if not party_type:
return
name = doc.get(party_type.lower())
if not name:
return
party = frappe.get_doc(party_type, name)
filters = get_filters_for(doc.doctype)
party.flags.ignore_mandatory = True
status = None
if filters:
if evaluate_filters(doc, filters):
# filters match, passed document is open
status = 'Open'
if status=='Open':
if party.status != 'Open':
# party not open, make it open
party.status = 'Open'
party.save(ignore_permissions=True)
else:
if party.status == 'Open':
# may be open elsewhere, check
# default status
update_status(party)
party.update_modified()
party.notify_update()
def get_party_status(doc):
'''return party status based on open documents'''
status = default_status[doc.doctype]
for doctype in status_depends_on[doc.doctype]:
filters = get_filters_for(doctype)
filters[doc.doctype.lower()] = doc.name
if filters:
open_count = frappe.get_all(doctype, fields='name', filters=filters, limit_page_length=1)
if len(open_count) > 0:
status = 'Open'
break
return status
def update_status(doc):
'''Set status as open if there is any open notification'''
status = get_party_status(doc)
if doc.status != status:
doc.db_set('status', status)

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