Compare commits

..

1014 Commits

Author SHA1 Message Date
Pratik Vyas
444d496c8b Release v4.0.1 2014-05-20 16:32:21 +05:30
Pratik Vyas
98c09e2a91 Release v4.0.1 2014-05-20 16:17:22 +05:30
Nabin Hait
f5ac91da06 Merge pull request #1671 from nabinhait/v4-hotfix
V4 hotfix
2014-05-20 15:25:20 +05:30
Nabin Hait
f7361fc982 Merge branch 'develop' of github.com:frappe/erpnext into v4-hotfix 2014-05-20 15:08:13 +05:30
Nabin Hait
c49b7f8c63 minor fix 2014-05-20 15:07:18 +05:30
Anand Doshi
1a7c3897b1 Merge pull request #1667 from nabinhait/v4-hotfix
Server side onload functionality in multiple docs && support ticket status
2014-05-20 10:46:37 +05:30
Nabin Hait
956d7868b5 removed print statement 2014-05-20 10:36:14 +05:30
Nabin Hait
85786f3071 Support ticket / lead status based on communication. Fixes #1645 2014-05-19 19:31:40 +05:30
Nabin Hait
2e0620e370 Server side onload functionality in multiple docs 2014-05-19 18:15:58 +05:30
Pratik Vyas
f87c72646c Merge pull request #1660 from anandpdoshi/hotfix
Fixed multilingual UOM issue
2014-05-17 00:12:14 +05:30
Anand Doshi
6664af9557 Fixed multilingual UOM issue 2014-05-17 00:07:45 +05:30
Nabin Hait
097227d5ea Merge pull request #1659 from nabinhait/v4-hotfix
translation and fraction issue fixes
2014-05-16 20:11:26 +05:30
Nabin Hait
e60853930b traslation issue fixed in setup wizard and desktop 2014-05-16 19:56:43 +05:30
Nabin Hait
091b48168e Journal voucher debit != credit #fraction issue 2014-05-16 19:56:43 +05:30
Nabin Hait
ad68d64d93 Leave approver select options in leave application and employee 2014-05-16 19:56:43 +05:30
Pratik Vyas
fa7444ec94 fix shipping rule test cases (copy name with copy_doc) 2014-05-16 15:19:51 +05:30
Pratik Vyas
3d8f8f68d8 Merge pull request #1652 from anandpdoshi/hotfix
Do not create Feed when frappe.flags.in_patch
2014-05-16 12:38:24 +05:30
Nabin Hait
a220e5d850 Update global_defaults_to_system_settings.py 2014-05-15 18:36:38 +05:30
Nabin Hait
ac3ba70ed9 Update global_defaults_to_system_settings.py 2014-05-15 18:25:57 +05:30
Nabin Hait
52b5c134fc Update global_defaults_to_system_settings.py 2014-05-15 18:25:10 +05:30
Nabin Hait
5c50e213ac Update global_defaults_to_system_settings.py 2014-05-15 18:18:32 +05:30
Pratik Vyas
740dd447b4 Merge pull request #1654 from nabinhait/v4-hotfix
fixes and patches
2014-05-15 18:11:39 +05:30
Nabin Hait
9419575126 Merged language patch with global_defaults_to_system_settings patch 2014-05-15 17:17:58 +05:30
Nabin Hait
d0a915c47a Global Defaults to system settings. Fixes #1653 2014-05-15 16:42:23 +05:30
Nabin Hait
b5a8cab8df Valuation Rate column in Stock Ledger report. Fixed #1633 2014-05-15 11:50:46 +05:30
Nabin Hait
bc7659ab90 Employee leave balance report fixes #1647 2014-05-15 11:37:12 +05:30
Anand Doshi
38d5424b21 Do not create Feed when frappe.flags.in_patch 2014-05-14 19:33:21 +05:30
Anand Doshi
3c4dba3e51 Merge pull request #1650 from nabinhait/v4-hotfix
Clear default for price_list_currency
2014-05-14 19:15:49 +05:30
Nabin Hait
ea7e3d6405 Clear default for price_list_currency 2014-05-14 18:52:06 +05:30
Anand Doshi
f70c7320d5 Merge pull request #1649 from anandpdoshi/hotfix
Pass frm to open_mapped_doc
2014-05-14 18:00:30 +05:30
Anand Doshi
54b7962eb9 Pass frm to open_mapped_doc 2014-05-14 17:38:45 +05:30
Nabin Hait
7b1698dbae Merge pull request #1646 from anandpdoshi/hotfix
Setup Wizard width, Stock Reconcilation
2014-05-14 16:57:30 +05:30
Anand Doshi
39cc1df560 Fixes #1635, Stock Reconcilation 2014-05-14 15:10:00 +05:30
Anand Doshi
5ce287d611 Setup Wizard width fix for chrome 2014-05-14 13:31:11 +05:30
Anand Doshi
51ba6f816b Fixed Setup Wizard 2014-05-13 21:02:47 +05:30
Nabin Hait
a8e7191b14 Merge pull request #1640 from anandpdoshi/print_format_lowercase
Changed Print Format files to lowercase
2014-05-13 18:21:22 +05:30
Anand Doshi
4c83e407a9 Changed Print Format files to lowercase 2014-05-13 17:58:30 +05:30
Pratik Vyas
b1f212d653 Merge pull request #1638 from anandpdoshi/hotfix
Improved Item maker in Setup Wizard. Fixes #1501 and #1601
2014-05-13 17:38:30 +05:30
Anand Doshi
0e2cf69345 Merge pull request #1636 from nabinhait/v4-hotfix
reports, print formats modified and minor fix
2014-05-13 17:31:14 +05:30
Anand Doshi
8fe0208fb6 Improved Item maker in Setup Wizard. Fixes #1501 and #1601 2014-05-13 16:52:26 +05:30
Nabin Hait
03f3a8a2ef Get taxes and charges records from matser. Fixes #1634 2014-05-13 16:38:31 +05:30
Nabin Hait
aade34b0c9 Reports and print formats modified for renamed fields 2014-05-13 16:12:37 +05:30
Nabin Hait
10f97d2e9e Merge pull request #1631 from nabinhait/v4-hotfix
daily time log summary report fixes
2014-05-13 11:41:12 +05:30
Nabin Hait
54f0d24d80 Merge branch 'develop' of github.com:frappe/erpnext into v4-hotfix 2014-05-13 11:33:09 +05:30
Nabin Hait
b76061530e Daily time log fixes #1614 2014-05-13 11:32:39 +05:30
Anand Doshi
d711209dde Fixed patches.txt 2014-05-12 19:42:38 +05:30
Nabin Hait
3b5f107a11 Merge pull request #1630 from nabinhait/v4-hotfix
fixes
2014-05-12 17:50:03 +05:30
Nabin Hait
b3bead2f06 Merge branch 'develop' of github.com:frappe/erpnext into v4-hotfix 2014-05-12 17:46:02 +05:30
Nabin Hait
827480fd2b import, export and report permission in account and pricing rule 2014-05-12 17:45:37 +05:30
Nabin Hait
0c54e2d0d0 4_0 patch dir renamed to v4_0 2014-05-12 17:44:55 +05:30
Rushabh Mehta
2fdb51f85e fixes frappe/erpnext#1627 2014-05-12 17:32:36 +05:30
Rushabh Mehta
37f54f9a35 added description to letter head in setup wizard 2014-05-12 16:45:49 +05:30
Pratik Vyas
b2ce9c5487 Merge pull request #1625 from anandpdoshi/hotfix
Added hook: setup_wizard_exception
2014-05-12 12:53:38 +05:30
Anand Doshi
02edae8fac Added hook: setup_wizard_exception 2014-05-12 12:37:32 +05:30
Nabin Hait
fb7fb73ba3 Merge pull request #1621 from nabinhait/v4-hotfix
BOM validation message fixed
2014-05-11 18:30:41 +05:30
Nabin Hait
bbfe2517ea BOM validation message fixed 2014-05-11 18:27:07 +05:30
Nabin Hait
0baf1479a3 Merge pull request #1618 from nabinhait/v4-hotfix
Test case fixes for serial no
2014-05-11 13:11:02 +05:30
Nabin Hait
2f50b85f99 Test case fixes for serial no 2014-05-11 13:03:53 +05:30
Nabin Hait
8ae4bcac58 Merge pull request #1617 from nabinhait/v4-hotfix
test case fixes
2014-05-11 12:13:16 +05:30
Nabin Hait
0ff6e3a6bb Merge branch 'develop' of github.com:frappe/erpnext into v4-hotfix 2014-05-11 12:11:50 +05:30
Nabin Hait
75e50ee082 Fixes for subcontracting 2014-05-11 12:11:15 +05:30
Nabin Hait
6d5c248402 Test case fixes for serial no 2014-05-11 12:10:57 +05:30
Nabin Hait
5365108ef9 Test case fixes for pos setting 2014-05-11 12:10:17 +05:30
Nabin Hait
7e373010d7 Test case fixes in time log batch 2014-05-11 12:08:39 +05:30
Rushabh Mehta
409c8e9732 removed confirmation date validations (wtf) 2014-05-11 10:01:16 +05:30
Rushabh Mehta
75e11a7270 Merge pull request #1616 from pdvyas/migrate-3to4
3 to 4 migration fixes
2014-05-10 22:19:07 +05:30
Pratik Vyas
6e686224eb fix patches 2014-05-10 22:17:04 +05:30
Pratik Vyas
95f558e7bc fix update user properties patch 2014-05-10 22:16:39 +05:30
Rushabh Mehta
2667a50334 clear cache before running setup wizard 2014-05-09 19:20:31 +05:30
Rushabh Mehta
9591b8ec93 Merge pull request #1613 from anandpdoshi/deprecate-link-selects
Deprecate Select fields with options as link:
2014-05-09 14:09:51 +05:30
Anand Doshi
78e9c6ef70 Deprecate Select fields with options as link: 2014-05-09 13:36:13 +05:30
Nabin Hait
a5ac0149af Merge pull request #1612 from pdvyas/migrate-3to4
3 to 4 migration
2014-05-09 12:07:11 +05:30
Pratik Vyas
34e36a233c Patch changes for 3 to 4 migration 2014-05-09 12:01:25 +05:30
Nabin Hait
d64a952b5d Stock reco: item and warehouse validation and translation fixes 2014-05-09 11:50:24 +05:30
Nabin Hait
7dada72085 Merge pull request #1610 from nabinhait/v4-hotfix
minor fix
2014-05-09 10:54:53 +05:30
Nabin Hait
966edff222 minor fix 2014-05-09 10:54:12 +05:30
Nabin Hait
b52c6e866f Merge pull request #1609 from nabinhait/v4-hotfix
V4 hotfix
2014-05-08 19:10:55 +05:30
Nabin Hait
344f4436f1 Create / update raw materials supplied table for sub-contracting 2014-05-08 19:08:20 +05:30
Nabin Hait
5d070753fd Item managed batch-wise, can not be reconciled through stock reconciliation 2014-05-08 19:08:06 +05:30
Nabin Hait
844dd36ff9 PP tool: get items from SO based on item filter 2014-05-08 19:07:34 +05:30
Nabin Hait
3c5bc544ea Serial no and batch no field added in purchase receipt item supplied table 2014-05-08 19:07:02 +05:30
Nabin Hait
227db769a0 Item valuation rate on material transfer based on fifo 2014-05-08 19:06:01 +05:30
Anand Doshi
713e453126 Merge pull request #1607 from anandpdoshi/hotfix
Fixed clear cache for item page
2014-05-08 17:46:30 +05:30
Anand Doshi
0c85169539 Fixed clear cache for item page 2014-05-08 17:46:00 +05:30
Anand Doshi
3415cdb208 Merge pull request #1604 from anandpdoshi/bugfix-v4
Newsletter status display. Fixes #1593
2014-05-08 12:09:29 +05:30
Anand Doshi
08ef467fc6 Fixed moduleview language issue 2014-05-08 11:43:18 +05:30
Nabin Hait
5da2f21aed Merge pull request #1603 from nabinhait/v4-hotfix
fixes
2014-05-07 19:22:02 +05:30
Nabin Hait
e37b8e6682 fixed conflict 2014-05-07 19:20:56 +05:30
Nabin Hait
23649c6852 fixe in query.py 2014-05-07 19:18:15 +05:30
Anand Doshi
7e1b75a705 Newsletter status display. Fixes #1593 2014-05-07 18:44:02 +05:30
Nabin Hait
17425a24c6 Merge pull request #1602 from anandpdoshi/better-default-permissions
Better default permissions, ignore_restrictions for defaults, removed fi...
2014-05-07 17:51:08 +05:30
Anand Doshi
f410bd9bf9 Better default permissions, ignore_restrictions for defaults, removed field trash_reason
Additions:
	Account --> Material User: Read
	Cost Center --> Sales User, Purchase User: Read
	Mode of Payment --> Accounts User: Read
	Supplier --> Material User, Accounts User: Read
	Employee --> Employee: Restricted Read
	Leave Type --> Employee: Read
	Production Order --> Material User: Read
	Sales Order --> Material User: Read
	Print Heading --> All: Read
	Terms and Conditions --> Purchase User, Material User: Read
	Territory --> Material User, Maintenance User: Read
	Item --> Sales User, Purchase User, Maintenance User, Accounts User: Read
	Price List --> Manufacturing User: Read
	Purchase Receipt --> Accounts User: Read
	Warehouse --> Manufacturing User: Read
2014-05-07 17:20:42 +05:30
Nabin Hait
706eb7f2c7 fixed conflict 2014-05-07 15:13:52 +05:30
Nabin Hait
90f2d8d9fc minor fix 2014-05-07 14:55:09 +05:30
Anand Doshi
dc644c37e6 Merge pull request #1597 from anandpdoshi/naming-series-by-fiscal-year
Naming series by fiscal year
2014-05-07 11:06:36 +05:30
Anand Doshi
4b438eee6d Revert "Autocreate naming series options based on Fiscal Year"
This reverts commit 8a6febbaa5.
2014-05-07 10:58:39 +05:30
Anand Doshi
8a6febbaa5 Autocreate naming series options based on Fiscal Year 2014-05-06 19:44:22 +05:30
Anand Doshi
8c2dbab878 Changed default naming series options
C-Form: C-FORM-.#####
	Purchase Invoice: PINV-.#####
	Sales Invoice: SINV-.#####
	Purchase Order: PO-.#####
	Quality Inspection: QI-.#####
	Supplier: SUPP-.#####
	Supplier Quotation: SQTN-.#####
	Attendance: ATT-.#####
	Production Order: PRO-.#####
	Installation Note: IN-.#####
	Lead: LEAD-.#####
	Opportunity: OPTY-.#####
	Quotation: QTN-.#####
	Sales Order: SO-.#####
	Delivery Note: DN-.#####
	Item: ITEM-.#####
	Material Request: MREQ-.#####
	Packing Slip: PS-.#####
	Purchase Receipt: PREC-.#####
	Stock Entry: STE-.#####
	Customer Issue: CI-.#####
	Support Ticket: SUP-.#####
	Customer: CUST-.#####
	Journal Voucher: JV-.#####
2014-05-06 19:43:11 +05:30
Nabin Hait
cc6b20b614 Merge pull request #1596 from nabinhait/v4-hotfix
V4 fixes and updates
2014-05-06 19:17:13 +05:30
Nabin Hait
3fcec56f7b Bulk rename tool fixes #1594 2014-05-06 19:13:46 +05:30
Nabin Hait
a521343063 Merge branch 'develop' of github.com:frappe/erpnext into v4-hotfix 2014-05-06 18:53:02 +05:30
Nabin Hait
ce4a87ce83 Maintenance schedule: get no of visits and period validation. Fixes #1591 2014-05-06 18:52:36 +05:30
Anand Doshi
7fc9b63dc7 Merge pull request #1590 from anandpdoshi/remove-india-specific-fields
Remove India specific fields
2014-05-06 16:48:18 +05:30
Nabin Hait
50e962b279 Special characters allowed in company name. Fixes #1259 2014-05-06 16:46:32 +05:30
Anand Doshi
4b7a6b13ec Additions to remove India specific fields 2014-05-06 16:41:31 +05:30
Nabin Hait
3190f99ebe Option for selecting already reconciled entries in bank reconciliation #1310 2014-05-06 16:39:24 +05:30
Anand Doshi
37909b292f Remove India specific fields 2014-05-06 16:15:56 +05:30
Nabin Hait
8b22fab2f7 Merge pull request #1589 from nabinhait/v4-hotfix
V4 hotfix
2014-05-06 14:20:19 +05:30
Nabin Hait
5c82014ba9 Merge branch 'develop' of github.com:frappe/erpnext into v4-hotfix 2014-05-06 14:01:30 +05:30
Nabin Hait
c82e967e97 Cannada translation 2014-05-06 14:01:04 +05:30
Nabin Hait
b63384b3d4 Merge pull request #1588 from nabinhait/v4-hotfix
Allow Rename option added in multiple docs. Fixes #1521
2014-05-06 12:34:50 +05:30
Nabin Hait
02d37bbb5a Allow Rename option added in multiple docs. Fixes #1521 2014-05-06 12:18:50 +05:30
Anand Doshi
728be8c4d4 Merge pull request #1587 from anandpdoshi/bugfix-v4
Enable frequently used currencies. Fixes #1561
2014-05-06 12:18:37 +05:30
Nabin Hait
07a31d2975 Merge pull request #1586 from nabinhait/v4-hotfix
V4 hotfix
2014-05-06 12:03:06 +05:30
Anand Doshi
de560aa094 Enable frequently used currencies. Fixes #1561 2014-05-06 12:02:23 +05:30
Nabin Hait
b1285f9fce Time Log Batch creation from time log list 2014-05-06 11:58:00 +05:30
Nabin Hait
cea4cd4e5f Pull stock entry difference account from company 2014-05-06 11:57:33 +05:30
Pratik Vyas
4d911db902 Release 4.0.0 2014-05-05 19:14:45 +05:30
Nabin Hait
b99a3517c3 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-05 18:42:07 +05:30
Nabin Hait
98c2a052e5 Fixes in pricing rule testcases #565 2014-05-05 18:41:41 +05:30
Nabin Hait
ac1bc212ea Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-05 18:27:31 +05:30
Anand Doshi
91b451b8ce Updated validate v3 patch 2014-05-05 18:25:37 +05:30
Anand Doshi
648062d071 Fixes in test cases 2014-05-05 16:46:38 +05:30
Rushabh Mehta
45a3226645 minor 2014-05-05 15:16:11 +05:30
Nabin Hait
f2db87a766 Pricing Rule: If rule for price applied, discount rule against price list should not be applied #565 2014-05-05 15:04:55 +05:30
Nabin Hait
53dab55703 Pricing Rule: if multiple rules, ask to resolve conflict #565 2014-05-05 14:49:40 +05:30
Nabin Hait
0c7e28ec9f Pricing Rule improvements #565 2014-05-05 11:13:36 +05:30
Nabin Hait
ed8a845e83 POS Make Payment dialog box fix #1441 2014-05-05 11:01:32 +05:30
Nabin Hait
d5886f36af Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-05 10:28:20 +05:30
Nabin Hait
f57f0a661a Stock Entry: pulling items from BOM fixed #1579 2014-05-05 10:27:53 +05:30
Anand Doshi
69e0cb5d6f Fixed POS and Sales Invoice paid amount display, when invoice not submitted. Fixes #1573 2014-05-04 19:37:45 +05:30
Anand Doshi
2af558598c Fixed travis 2014-05-04 16:13:33 +05:30
Nabin Hait
6dad4e9e89 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-04 16:02:44 +05:30
Nabin Hait
a096b2004f Financial analytics graph fix #1542 2014-05-04 16:02:26 +05:30
Anand Doshi
4ab5382d3f Item Group delete permission, Serial No status and item code should be non-editable. Fixes #1564 2014-05-04 11:50:10 +05:30
Rushabh Mehta
24a3ec57e3 update to tests 2014-05-03 16:22:46 +05:30
Anand Doshi
75042fd502 Show Activity entries based on permissions. Completely fixes #1481 2014-05-02 19:44:28 +05:30
Anand Doshi
2b0e4266cf Go to home page on clicking left arrow in note list 2014-05-02 19:43:11 +05:30
Anand Doshi
ef5407479a Show Chart of Accounts in Accounts > Documents. Fixes #1559 2014-05-02 19:42:27 +05:30
Anand Doshi
56f29cbb27 Fixed contact page response. Fixes #1557 2014-05-02 18:17:39 +05:30
Nabin Hait
232954d4b9 Fixed updating cost on BOM after submission #1563 2014-05-02 17:51:24 +05:30
Nabin Hait
053a87edf6 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-02 17:37:38 +05:30
Nabin Hait
296d626e53 Back flush issue fixed in sub contracting #1567 2014-05-02 17:36:13 +05:30
Nabin Hait
bc83b9c1ac minor fix 2014-05-02 17:03:18 +05:30
Anand Doshi
b71a18cd1e Leave Allocation Tool and Employee. Fixes #1555 2014-05-02 16:23:51 +05:30
Nabin Hait
2cebf9b499 minor fix #1565 2014-05-02 16:12:07 +05:30
Nabin Hait
ef30932807 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-02 15:45:52 +05:30
Nabin Hait
6b03914731 asynchronus issue in get_party_details 2014-05-02 15:45:10 +05:30
Anand Doshi
f29bcaf436 Added new fixtures (Fixes #1540). Removed Employee Grade from HR. 2014-05-02 13:55:07 +05:30
Rushabh Mehta
4ceb20e07f hooks.txt -> hooks.py 2014-05-02 12:15:11 +05:30
Nabin Hait
1e6c32e95f Address and contact creation from opportunity #1570 2014-05-02 11:42:24 +05:30
Nabin Hait
92c4fc4e19 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-02 10:27:17 +05:30
Nabin Hait
d341254786 Purchase receipt to purchase invoice item 2014-05-01 17:42:21 +05:30
Anand Doshi
51e6d2228d Salary Slip - read permission for Employee. Fixes #1553 2014-05-01 16:28:13 +05:30
Nabin Hait
292a254bc1 payment to invoice matching tool disabled temporarily 2014-05-01 15:46:37 +05:30
Nabin Hait
5b98340d15 payment to invoice matching 2014-05-01 15:43:22 +05:30
Nabin Hait
e5bd955f4d Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-05-01 09:56:14 +05:30
Anand Doshi
d9f0f27cd4 Fixes in test cases 2014-04-30 22:16:25 +05:30
Nabin Hait
dcfad4f645 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-04-30 20:32:07 +05:30
Nabin Hait
613919325d Fixes in link field queries 2014-04-30 20:30:33 +05:30
Rushabh Mehta
a15164750d started client side testing using selenium and other related and unrelated fixes 2014-04-30 19:39:13 +05:30
Nabin Hait
b85a9108eb Payment to invoice matching tool 2014-04-30 19:32:16 +05:30
Nabin Hait
498ecfc192 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-04-30 19:31:22 +05:30
Nabin Hait
576f025c84 Payment to invoice matching tool 2014-04-30 19:30:50 +05:30
Anand Doshi
a47bf2ab66 Removed check for duplicate in sales bom, set default income account in Company 2014-04-30 18:54:05 +05:30
Anand Doshi
f62da519d6 Sales BOM Parent Item search - Fixes #1544 2014-04-30 16:50:39 +05:30
Anand Doshi
04f8990c11 Fixed can freeze account check for account doc in client side 2014-04-30 15:02:17 +05:30
Rushabh Mehta
33003c6168 fix for feature setup in install.py 2014-04-30 11:16:02 +05:30
Rushabh Mehta
104c9f465d updated translations 2014-04-29 18:36:27 +05:30
Rushabh Mehta
d21f55b5d2 fix in naming and feature setup on install: 2014-04-29 16:25:07 +05:30
Nabin Hait
b54307d58e minor fixes for pos trigger 2014-04-29 13:40:54 +05:30
Nabin Hait
b1777ecfd8 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-04-29 11:31:37 +05:30
Nabin Hait
17910aa0d6 Removed income and expense related info temporarily from email digest 2014-04-29 11:31:11 +05:30
Anand Doshi
cd17bdffcd Fixes in account query, fiscal year and cost center 2014-04-28 20:34:48 +05:30
Nabin Hait
6777efa7fa Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-04-28 17:09:13 +05:30
Nabin Hait
985918d42b Minor fixes in company and account 2014-04-28 17:08:28 +05:30
Anand Doshi
69aa8ffac4 Fixed as_dict of employee.py 2014-04-28 16:51:34 +05:30
Nabin Hait
2594e41462 Removed Stock Ledger doctype 2014-04-28 16:23:45 +05:30
Nabin Hait
48962e1148 Minor fix in sales funnel report 2014-04-28 15:43:32 +05:30
Anand Doshi
65f83cbae7 BugFix: Sales Order with Order Type as Shopping Cart 2014-04-28 15:33:34 +05:30
Anand Doshi
3b3d55cda2 Usability: Set For Warehouse and Work-in-Progress Warehouse as mandatory, when the user clicks Submit 2014-04-28 15:33:34 +05:30
Anand Doshi
4c90bae16d BugFix: Item search in Production Planning Tool 2014-04-28 15:33:34 +05:30
Anand Doshi
6916baa299 BugFix: Item search in Stock UOM Replace Utility 2014-04-28 15:33:34 +05:30
Nabin Hait
ac87c1d618 Merge pull request #1537 from n3storm/develop
Update mode_of_payment.py
2014-04-28 15:32:31 +05:30
Néstor Díaz Valencia
21412ddf65 Update mode_of_payment.py
Renamed solves issue #1536
2014-04-28 11:54:31 +02:00
Rushabh Mehta
41d126586e fix get_server_fields in stock_entry.js 2014-04-27 12:30:20 +05:30
Anand Doshi
8e5b2af0fb Set conversion_factor in stock entry test case 2014-04-25 19:35:06 +05:30
Anand Doshi
fc79efb97c Fixes #1532. Only show an error message for missing Quality Inspection but let the user submit Purchase Receipt. 2014-04-25 18:44:28 +05:30
Anand Doshi
1872312cc6 Deprecated client side mapper: frappe.model.map. Fixes #1530 2014-04-25 18:38:08 +05:30
Anand Doshi
e3f6b6d899 Fixed Opportunity Lost UX 2014-04-25 18:36:06 +05:30
Anand Doshi
69a2c25ca5 Fixed set_query 2014-04-25 18:35:45 +05:30
Anand Doshi
bbffaf78fb BugFix: use transfer_qty instead of actual_qty in check_duplicate_entry_for_production_order - ported webnotes/erpnext@942ff2583b 2014-04-25 18:31:09 +05:30
Anand Doshi
8bde7f9b3a Conditionally toggle Naming Series. Fixes #1526 2014-04-24 18:11:49 +05:30
Anand Doshi
7f2d08b03f Fixed Naming Series page loading fails #1524 2014-04-24 13:51:35 +05:30
Anand Doshi
8c62c40a3d Fixed Make Sales Order from Quotation #1522 2014-04-24 12:40:19 +05:30
Anand Doshi
78eeacb53c Fixes in Lead, Opportunity, Quotation, Setup Wizard 2014-04-23 19:15:15 +05:30
Anand Doshi
f50a65294f Fixed NameError handling 2014-04-23 13:41:28 +05:30
Anand Doshi
b054eb7a4f Call calculate_taxes_and_totals after mapping 2014-04-22 20:35:22 +05:30
Anand Doshi
4bb87373dc Fixed default website creation
Default website generation was creating company page twice,
which led to duplicate website route validation
2014-04-22 19:50:08 +05:30
Anand Doshi
68d0b7c7ff get_item_details fixed for Material Request 2014-04-22 19:30:53 +05:30
Anand Doshi
3e41fd1fd3 List route for tree browser based doctypes; Fixes to add child in tree browsers 2014-04-22 18:55:21 +05:30
Rushabh Mehta
4ef1835bee website updates 2014-04-22 16:52:35 +05:30
Anand Doshi
2944f49974 Setup Wizard: on country select, change date format, save logo in Website Settings > Brand HTML 2014-04-22 16:25:58 +05:30
Anand Doshi
07339fc69e Fixes in Setup Wizard and Attachments 2014-04-22 15:30:24 +05:30
Rushabh Mehta
3f51705ba4 website cleanups 2014-04-21 22:10:43 +05:30
Anand Doshi
0549b1c5c9 Duplicate supplier delivery number validation in Purchase Receipt should happen per financial year 2014-04-21 15:59:47 +05:30
Anand Doshi
21ae930b4c Removed controller.py 2014-04-21 15:12:50 +05:30
Anand Doshi
424c033395 Removed controller.py 2014-04-21 15:06:56 +05:30
Rushabh Mehta
40b2b03bcb demo fixes 2014-04-21 13:43:35 +05:30
Rushabh Mehta
f63513ed38 minor fixes to website 2014-04-21 13:43:35 +05:30
Anand Doshi
9365b616b8 Added an exist check for accounts.utils.get_balance_on 2014-04-21 12:42:21 +05:30
Anand Doshi
cbbf451974 Fixes throw 2014-04-21 11:33:49 +05:30
Rushabh Mehta
0900beecb2 added languages.txt 2014-04-18 16:24:28 +05:30
Anand Doshi
5d591ebe83 Item, Item Group and Partner Web Page generators moved from Shopping Cart to ERPNext 2014-04-18 16:20:07 +05:30
Rushabh Mehta
603e6e21b5 test fixes 2014-04-18 16:17:29 +05:30
Rushabh Mehta
370a024e46 cleaned up sample website and separated fixtures by country 2014-04-18 16:00:41 +05:30
Rushabh Mehta
169c1fd93b fixed translation for setup-wizard and removed purchase validation for Material Request #925 2014-04-18 10:40:17 +05:30
Anand Doshi
ac32bad25a Fixes in Taxes, Quotation and Address Territory 2014-04-18 01:32:02 +05:30
Pratik Vyas
33e1db8c40 Add language to setup wizard (travis) 2014-04-17 19:04:34 +05:30
Rushabh Mehta
52e618d0b2 updates to Setup Wizard, set language as first input 2014-04-17 18:50:33 +05:30
Anand Doshi
dbfcd328fb Fixes update_after_submit validation errors 2014-04-17 12:35:04 +05:30
Anand Doshi
0d345c9152 Fixes Item Price duplicate entry validation 2014-04-17 11:40:22 +05:30
Anand Doshi
de1a97d506 Fixes get_voucher_detail for Stock Reconcilation 2014-04-17 11:37:46 +05:30
Anand Doshi
094610d7ce Fixes in Production, Stock Entry and Stock Controller 2014-04-16 20:23:24 +05:30
Rushabh Mehta
eea802298e refactor get_voucher_details in stock_controller 2014-04-16 19:38:40 +05:30
Rushabh Mehta
052fe82688 production order: test fixed and added in test_stock_entry.py 2014-04-16 19:20:11 +05:30
Rushabh Mehta
166bc2a0e0 translations: updated German 2014-04-16 18:37:57 +05:30
Rushabh Mehta
c38fc713c6 updated translations 2014-04-16 17:46:30 +05:30
Rushabh Mehta
8c51318d82 added naming series for campaign #1413 2014-04-16 17:41:52 +05:30
Rushabh Mehta
e8b0402a10 added naming series for campaign #1413 2014-04-16 17:41:52 +05:30
Rushabh Mehta
c635875765 added naming series for campaign #1413 2014-04-16 17:41:51 +05:30
Anand Doshi
652bc0784a Ported v3 fixes to v4
Commit range: webnotes/erpnext@e4b72df2f4bd7272c42e90f6faec3c27aa763b82..webnotes/erpnext@85441b0180f84246259d5a0ab4e3bcbf29355efe
2014-04-16 15:26:42 +05:30
Nabin Hait
13429a3b34 Space allowed in naming series
Conflicts:
	setup/doctype/naming_series/naming_series.py
2014-04-16 15:24:04 +05:30
Nabin Hait
a0c239db8d perpetual inventory fix related to sub-contracting
Cherry-picked and modified by @anandpdoshi

Conflicts:
	accounts/doctype/purchase_invoice/purchase_invoice.py
	controllers/buying_controller.py
	controllers/stock_controller.py
2014-04-16 15:23:10 +05:30
Nabin Hait
450d9d72d7 Minor fix in monthly attendance report
Cherry-picked and modified by @anandpdoshi

Conflicts:
	hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
2014-04-16 15:23:09 +05:30
Nabin Hait
6298536e46 set stock balance as per serial no count
Cherry Picked and Modified by @anandpdoshi

Conflicts:
	stock/doctype/stock_ledger/stock_ledger.py
	utilities/repost_stock.py
2014-04-16 15:23:08 +05:30
Anand Doshi
88a869f34d No Copy for Paid and Write Off Amount in Sales Invoice
Ported webnotes/erpnext@f739bffedd
2014-04-16 15:23:08 +05:30
Rushabh Mehta
1d8f1a9a46 #1481 2014-04-16 09:32:51 +05:30
Rushabh Mehta
82d8a637ac #1252 2014-04-16 09:20:00 +05:30
Rushabh Mehta
d85dc868ca more message fixes for translation 2014-04-15 22:54:34 +05:30
Rushabh Mehta
ff93802d58 more message fixes 2014-04-15 18:40:31 +05:30
Anand Doshi
a6e2ca9d3b Fixes #1491 2014-04-15 17:12:15 +05:30
Rushabh Mehta
8a40c136ce more message fixing 2014-04-15 16:31:20 +05:30
Anand Doshi
c5e057f676 Fixed exploded BOM construction 2014-04-15 16:14:15 +05:30
Rushabh Mehta
2c45899a02 fixed strings for translation 2014-04-15 14:41:56 +05:30
Anand Doshi
5d4ffa6cf8 Fixed splash.svg 2014-04-15 13:09:09 +05:30
Pratik Vyas
f37d6fe32b Merge pull request #1514 from frappe/js-translate-refactor
JS translation refactor
2014-04-15 11:44:16 +05:30
Pratik Vyas
e1eeb22f1e remove linebreaks for translation strings (js) 2014-04-15 10:50:36 +05:30
Pratik Vyas
13c92e3ad5 fix accounts browser and cost center strings (js) 2014-04-15 10:08:53 +05:30
Pratik Vyas
ec9c448ccf fix taxes and charges strings and labels 2014-04-15 09:49:40 +05:30
Rushabh Mehta
549977bf4f typo fix in journal_voucher.py 2014-04-14 22:40:17 +05:30
Rushabh Mehta
354b32177d fix for leave application test 2014-04-14 22:23:41 +05:30
Rushabh Mehta
9f0d625300 update translation strings #1403 2014-04-14 19:20:45 +05:30
Pratik Vyas
b0f279a34e js translations refactor 2014-04-14 17:14:23 +05:30
Pratik Vyas
b52618c142 frappe._ to __ 2014-04-14 16:25:30 +05:30
Pratik Vyas
7da01d6007 fix manifest 2014-04-13 03:12:12 +05:30
Anand Doshi
bd67e87921 Fixes saving of Sales Order and fetching Prices frappe/frappe#478 2014-04-11 16:51:27 +05:30
Anand Doshi
13ae548ff6 Fixes for model-cleanup frappe/frappe#478 2014-04-10 18:43:07 +05:30
Pratik Vyas
f7daab7393 pass only valid columns to get_item_details 2014-04-10 17:53:30 +05:30
Anand Doshi
233fbb08b2 Minor fix 2014-04-10 12:53:16 +05:30
Anand Doshi
61649c1d43 Verbose in travis 2014-04-10 12:40:29 +05:30
Anand Doshi
ddd2b8a398 Merge pull request #1504 from frappe/model-cleanup
Model cleanup
2014-04-10 11:39:16 +05:30
Anand Doshi
8c45d4ce3c Fixed travis frappe/frappe#478 2014-04-10 11:38:11 +05:30
Anand Doshi
20771621e7 Verbose app install in travis 2014-04-09 20:03:27 +05:30
Anand Doshi
9fd50bcfb6 Fixed rest of the test cases frappe/frapp#478 2014-04-09 19:20:01 +05:30
Anand Doshi
d29465029d Fixed Test Cases frappe/frappe#478 2014-04-08 20:15:22 +05:30
Anand Doshi
cd71e1d8ab Test Cases - Journal Voucher, Purchase Invoice, Period Closing Voucher frappe/frappe#478 2014-04-08 13:53:35 +05:30
Anand Doshi
2ce39cf770 Fixed Stock Entry Test Cases frappe/frappe#478 2014-04-07 18:51:58 +05:30
Nabin Hait
103cc58cb6 material request testcase #478 2014-04-07 16:40:43 +05:30
Nabin Hait
4155e58a61 Merge branch 'model-cleanup' of github.com:frappe/erpnext into model-cleanup 2014-04-07 16:00:49 +05:30
Nabin Hait
088dec6c09 testcase fixes #478 2014-04-07 16:00:28 +05:30
Rushabh Mehta
322d39f3a6 Merge branch 'model-cleanup' of github.com:frappe/erpnext into model-cleanup 2014-04-07 15:09:25 +05:30
Rushabh Mehta
49f49ea603 started party frappe/erpnext#1503 2014-04-07 15:09:09 +05:30
Nabin Hait
dc82d4f0cd frappe/frappe#478 fixes 2014-04-07 12:02:57 +05:30
Nabin Hait
9f66c306ea Merge branch 'model-cleanup' of github.com:frappe/erpnext into model-cleanup 2014-04-07 12:01:59 +05:30
Anand Doshi
bedc62f090 Fixed Feed 2014-04-04 16:26:45 +05:30
Nabin Hait
e7885e3ee0 frappe/frappe#478 replaced doclist in testcases 2014-04-04 13:26:50 +05:30
Rushabh Mehta
a504f0638b frappe/frappe#478, fixed list passed in 2014-04-04 12:16:26 +05:30
Rushabh Mehta
558a9aabfb removed control panel 2014-04-04 12:00:36 +05:30
Nabin Hait
312ba99e71 frappe/frappe#478 fixes 2014-04-04 11:06:10 +05:30
Rushabh Mehta
c10213d861 Merge branch 'model-cleanup' of github.com:frappe/erpnext into model-cleanup 2014-04-03 17:43:28 +05:30
Rushabh Mehta
0cf531c8a6 frappe/frappe#478 fixes 2014-04-03 17:43:06 +05:30
Nabin Hait
c272f2020b Merge branch 'model-cleanup' of github.com:frappe/erpnext into model-cleanup 2014-04-03 17:39:50 +05:30
Nabin Hait
365ae27acf frappe/frappe#478 fixes 2014-04-03 17:38:54 +05:30
Rushabh Mehta
7db7112d3f frappe/frappe#478 fix and added print heading 2014-04-03 15:04:18 +05:30
Rushabh Mehta
99f914b782 frappe/frappe#478, fixes 2014-04-03 14:47:03 +05:30
Rushabh Mehta
2fbb00fd8d frappe/frappe#478, more changes, removed bean 2014-04-03 14:38:22 +05:30
Rushabh Mehta
f14b809ab5 frappe/frappe#478, more changes, removed bean 2014-04-03 14:30:42 +05:30
Rushabh Mehta
d36cb5c812 frappe/frappe#478 removed more instances of doclist 2014-04-03 12:38:42 +05:30
Rushabh Mehta
cfb6ccfe51 frappe/frappe#478 removed self.doclist 2014-04-03 11:46:52 +05:30
Rushabh Mehta
f191f854cd frappe/frappe#478 erpnext install works 2014-04-02 18:09:34 +05:30
Anand Doshi
943e614810 frappe/frappe#478 2014-04-02 16:37:35 +05:30
Anand Doshi
63dfe3d3b3 Merge branch 'model-cleanup' of github.com:frappe/erpnext into model-cleanup 2014-04-02 15:03:51 +05:30
Anand Doshi
5b552b51f1 frappe/frappe#478 2014-04-02 15:03:35 +05:30
Rushabh Mehta
732825cb23 frappe/frappe#478 fixed todo and renamed hooks 2014-04-02 12:08:03 +05:30
Anand Doshi
dd32d6eb1f frappe/frappe#478 2014-04-01 12:22:14 +05:30
Rushabh Mehta
f2227d033c frappe/frappe#478, removed instances of .fields 2014-03-31 23:37:40 +05:30
Rushabh Mehta
231f6a5b58 frappe/frappe#478 added test_records.json 2014-03-31 23:05:12 +05:30
Rushabh Mehta
0a0f2495a2 frappe/frappe#478, frappe tests pass, .txt renamed to .json 2014-03-31 17:27:06 +05:30
Nabin Hait
0e13cd5ac9 frappe/frappe#478 2014-03-28 17:01:32 +05:30
Nabin Hait
0d8d30e1cc frappe/frappe#478 2014-03-28 16:57:21 +05:30
Rushabh Mehta
b385ecf65e frappe/frappe#478 2014-03-28 16:54:45 +05:30
Anand Doshi
43405203b2 frappe/frappe#478 2014-03-28 16:43:50 +05:30
Anand Doshi
81ba0b29da frappe/frappe#478 2014-03-28 15:23:26 +05:30
Anand Doshi
f78d1aee28 Replaced doc, doc.fields frappe/frappe#478 2014-03-28 13:55:00 +05:30
Anand Doshi
67d6a4e3aa Merge remote-tracking branch 'frappe/develop' into model-cleanup
Conflicts:
	erpnext/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py
	erpnext/accounts/doctype/sales_invoice/sales_invoice.py
	erpnext/controllers/stock_controller.py
2014-03-28 13:41:59 +05:30
Anand Doshi
40534f076b Changed creation, modified format frappe/frappe#478 2014-03-28 12:46:53 +05:30
Rushabh Mehta
daae743608 frappe/frappe#478 2014-03-27 17:54:18 +05:30
Rushabh Mehta
e88bc8b12a frappe/frappe#478 2014-03-27 17:51:41 +05:30
Nabin Hait
4090c78c3f coa: payment to invoice matching tool fixes 2014-03-27 17:19:32 +05:30
Nabin Hait
becf75d791 Perpetual inventory cleanup 2014-03-27 17:18:29 +05:30
Rushabh Mehta
d2b34dc30c frappe/frappe#478 2014-03-27 16:12:56 +05:30
Rushabh Mehta
66d52b55c0 #478 2014-03-27 14:17:33 +05:30
Rushabh Mehta
aa355af2cf refactored client side Model and Meta - frappe/frappe#478 2014-03-26 18:24:30 +05:30
Nabin Hait
5c6b34a84c minor fix 2014-03-26 10:30:25 +05:30
Nabin Hait
3a70ba3ba1 Merge github.com:frappe/erpnext into develop 2014-03-26 10:23:53 +05:30
Nabin Hait
d6e4ab3fd4 maintenance schedule: validate amc dates and update in serial no 2014-03-26 10:23:27 +05:30
Nabin Hait
1d630ccaa5 Update serial no maintenance status based on warranty/amc expiry date 2014-03-26 10:23:14 +05:30
Anand Doshi
754cbd4036 Fixed Permissions and Time Log 2014-03-25 20:09:12 +05:30
Nabin Hait
6fa0f25e7c Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-03-25 19:36:16 +05:30
Nabin Hait
0c9d42258c Minor fix related to pos paid amount 2014-03-25 19:35:41 +05:30
Anand Doshi
79196a9ef7 Fixed install 2014-03-25 19:32:08 +05:30
Anand Doshi
059b83a2ce Fixed MariaDB install steps in travis 2014-03-25 18:40:46 +05:30
Anand Doshi
3be9e26934 Fixed MariaDB install steps in travis 2014-03-25 18:39:56 +05:30
Nabin Hait
2c517e0a62 Fixes related to countrywise coa 2014-03-25 18:28:49 +05:30
Nabin Hait
ec9fb67d84 fixed conflict 2014-03-25 16:53:50 +05:30
Anand Doshi
7fbdba02ab Fixed Countrywise Chart of Accounts patch 2014-03-25 13:50:52 +05:30
Nabin Hait
221a8fff1c minor fix in patch 2014-03-23 17:35:24 +05:30
Nabin Hait
96c0afe0f1 minor fix in patch 2014-03-23 17:25:02 +05:30
Nabin Hait
06a595090d coa: minor fix 2014-03-21 18:30:46 +05:30
Nabin Hait
425bfc5c8d minor fix in serial no 2014-03-21 18:15:26 +05:30
Nabin Hait
c07537b1e9 unidecode added to the erpnext requirements 2014-03-21 12:25:49 +05:30
Nabin Hait
155c96b410 patch to delete mis control and financial statements and set bank/cash account 2014-03-21 12:15:13 +05:30
Nabin Hait
19dadb4a82 unidecode added to the erpnext requirements 2014-03-21 11:46:51 +05:30
Nabin Hait
f7f95ea37a Merge pull request #1482 from nabinhait/countrywise_coa
Countrywise coa
2014-03-21 11:38:35 +05:30
Nabin Hait
0c21e2afef Is_pl_account and debit_or_credit field removed and added report_type field in account 2014-03-21 11:35:59 +05:30
Nabin Hait
b5e6d7e171 Account balance in debit and credit columns in trial balance and financial analytics report 2014-03-21 11:26:09 +05:30
Nabin Hait
47a3c10334 Patch to update old accounts property 2014-03-21 11:26:08 +05:30
Nabin Hait
e67202484d Imported charts with proper report types 2014-03-21 11:26:08 +05:30
Nabin Hait
e0f98d7202 account properties file added 2014-03-21 11:26:08 +05:30
Nabin Hait
102842ba79 Leave allocation fix 2014-03-21 11:26:08 +05:30
Nabin Hait
73083dc960 Fix related to user_default 2014-03-21 11:26:08 +05:30
Nabin Hait
27bb7892b3 Fixes in pos settings 2014-03-21 11:26:07 +05:30
Nabin Hait
482ffac83f Set paid amount to zero if not pos 2014-03-21 11:26:07 +05:30
Nabin Hait
439dceebd8 minor fix in landed cost wizard 2014-03-21 11:25:17 +05:30
Nabin Hait
e848914da1 consider all entries against bank account in bank reconciliation statement, even if no reference no 2014-03-21 11:25:17 +05:30
Nabin Hait
d8dcdfbf4f Warehouse disable option 2014-03-21 11:25:17 +05:30
Nabin Hait
eb1192771f set root type from parent or child 2014-03-21 11:25:17 +05:30
Nabin Hait
e71cf6d6a1 More country charts imported from openerp 2014-03-21 11:25:17 +05:30
Nabin Hait
037bf6b382 More country charts imported from openerp 2014-03-21 11:25:17 +05:30
Nabin Hait
24e136e3f3 Patch: set root_type for old existing accounts 2014-03-21 11:25:16 +05:30
Nabin Hait
3dfe854108 Rename duplicate account 2014-03-21 11:25:16 +05:30
Nabin Hait
fc37fd8b6e Set Paid amount and write off amount for pos 2014-03-21 11:25:16 +05:30
Nabin Hait
55a03dbf69 major fixes in importing charts from openerp 2014-03-21 11:22:42 +05:30
Nabin Hait
b93ebaebe4 Added new account types and patch for existing 2014-03-21 11:22:41 +05:30
Nabin Hait
a18bf07920 updated charts json with proper account and root types 2014-03-21 11:22:41 +05:30
Nabin Hait
d7d9d25d71 Country and chart fields added in company master 2014-03-21 11:22:40 +05:30
Nabin Hait
813a93d78d import chart records into database frm json 2014-03-21 11:22:40 +05:30
Nabin Hait
a69c30edec country code added 2014-03-21 11:22:39 +05:30
Nabin Hait
d89f3403ac charts of account doctype added and imported charts json from openerp 2014-03-21 11:22:39 +05:30
Nabin Hait
b77773ca07 fixes in financial statements 2014-03-21 11:22:38 +05:30
Nabin Hait
2b57ecbd6c fixes for debit_or_credit in account tree grid report 2014-03-21 11:22:38 +05:30
Nabin Hait
53822ae9d0 Account balance must be of type debit/credit 2014-03-21 11:22:38 +05:30
Nabin Hait
49a6f0754e Removed debit_or_credit field 2014-03-21 11:22:38 +05:30
Nabin Hait
133490a0c5 Removed max roots validation 2014-03-21 11:22:37 +05:30
Nabin Hait
4d713ac5ba sql injection fixes 2014-03-21 11:22:37 +05:30
Anand Doshi
eb7fea673b Fixed set_single_defaults during install 2014-03-19 17:10:01 +05:30
Anand Doshi
4b2692182a Fixes after change in fields handling in Document 2014-03-19 16:58:42 +05:30
Anand Doshi
76f330ca66 Fixed Fiscal Year input issue in Setup Wizard 2014-03-19 15:45:05 +05:30
Anand Doshi
2134d24b36 Removed cloud subscription logic 2014-03-14 15:24:57 +05:30
Pratik Vyas
9d1e8640ef Update README.md 2014-03-13 20:45:27 +05:30
Anand Doshi
49e0a687b3 Minor Fixes 2014-03-13 20:44:28 +05:30
Nabin Hait
54106807e4 Set paid amount to zero if not pos 2014-03-13 17:26:41 +05:30
Nabin Hait
a8dbb0dd41 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-03-13 17:23:24 +05:30
Pratik Vyas
65e8676f8b Profile -> User 2014-03-13 03:09:15 +05:30
Pratik Vyas
5c81f9c44e check docstatus before updating employee 2014-03-13 02:35:23 +05:30
Rushabh Mehta
7c932003ed rename Profile to User frappe/frappe#470 2014-03-11 16:15:59 +05:30
Anand Doshi
c379c78fec Fixed Dropbox, Scheduler, 3to4 migration 2014-03-11 15:17:13 +05:30
Anand Doshi
09a9f4c0c9 Added module to Report doctype 2014-03-07 17:20:22 +05:30
Anand Doshi
ec621194fc Verbose is default in cli.py 2014-03-07 14:01:56 +05:30
Rushabh Mehta
c12ccdb6ea bugfix erpnext/frappe#1446 2014-03-06 15:45:45 +05:30
Rushabh Mehta
d8de921c40 fixed erpnext/frappe#1441 and other pos related cleanups 2014-03-06 15:40:22 +05:30
Rushabh Mehta
73f0bf36c1 fixed #1454 2014-03-06 14:45:02 +05:30
Rushabh Mehta
2e7ad8980c fix for queries 2014-03-06 12:28:47 +05:30
Rushabh Mehta
4541875c81 removed searchfield condition from get_match_cond frappe/erpnext#1457 2014-03-06 11:19:46 +05:30
Rushabh Mehta
0fabc6a841 minor fix 2014-03-06 11:19:46 +05:30
Rushabh Mehta
2a45e1cfd0 Merge pull request #1437 from ddimmich/patch-1
Update README.md
2014-03-06 10:46:03 +05:30
Anand Doshi
2d5727b17b Ignore mandatory during email pulling 2014-03-05 19:24:07 +05:30
Anand Doshi
b2c2fca8a5 Added Pricing Rule to Accounts, Buying, Selling home 2014-03-05 18:25:10 +05:30
Nabin Hait
9472247b6e Update stock_entry.js 2014-03-05 17:45:58 +05:30
Anand Doshi
ebdac5db5c Fix in Pricing Rule Patch 2014-03-05 17:31:37 +05:30
Anand Doshi
7ea8528d50 Fixed Pricing Rule Cleanup Fieldname 2014-03-05 17:27:00 +05:30
Anand Doshi
74d0e40bdc Moved Notification Count hooks to frappe, employee user id patch, Item ignore restriction fields 2014-03-05 15:24:29 +05:30
Nabin Hait
2d57b0aa52 Merge branch 'develop' of github.com:frappe/erpnext into develop 2014-03-05 10:51:04 +05:30
Anand Doshi
0c4ef64b32 Fixed booboo: Moved website moduleview to framework 2014-03-04 11:15:08 +05:30
Anand Doshi
e30511d315 Email Settings split into Outgoing Email Settings and Support Email Settings 2014-03-03 20:32:20 +05:30
Anand Doshi
64f2ccd9e1 Global Settings in Setup, Sales Master Manager can restrict for Customer 2014-03-03 19:28:30 +05:30
Anand Doshi
6b12b07b33 Fixes to Module Views 2014-03-03 16:05:00 +05:30
Anand Doshi
f5794f1c07 Module Home Pages using Module View 2014-03-03 15:06:34 +05:30
Nabin Hait
8e4640f464 minor fix in report 2014-03-03 12:06:50 +05:30
Nabin Hait
f976143063 pricing rule patch fix 2014-02-28 19:02:27 +05:30
Nabin Hait
177b86a15b fix in pricing rule 2014-02-28 15:47:22 +05:30
Nabin Hait
e7e615cf18 pricing rule: fixes in testcase 2014-02-28 15:21:49 +05:30
Nabin Hait
13b93ebed8 pricing rule: fixes in testcase 2014-02-28 15:04:05 +05:30
Nabin Hait
3319170805 pricing rule: condition for tree-type docs 2014-02-28 13:04:19 +05:30
Nabin Hait
ed5f423e65 pricing rule: condition for tree-type docs 2014-02-28 13:04:19 +05:30
Nabin Hait
311079a311 Patch: copy customer discount to pricing rule 2014-02-28 13:04:19 +05:30
Nabin Hait
08222150f2 Pricing Rule fixes and reference field in all item table 2014-02-28 13:02:00 +05:30
Nabin Hait
7e8e8ba714 pricing rule 2014-02-28 13:02:00 +05:30
Nabin Hait
c65a0c7197 Allowed stock entry import 2014-02-28 13:02:00 +05:30
Nabin Hait
bc34f3edae shortage qty column added in stock projected qty report 2014-02-28 13:02:00 +05:30
Nabin Hait
615d342056 Pricing Rule: first commit 2014-02-28 13:02:00 +05:30
Anand Doshi
8462a7691b Fixed login 2014-02-28 11:53:59 +05:30
Rushabh Mehta
063141d152 added patch for address 2014-02-28 11:37:36 +05:30
Anand Doshi
fb21ce3893 3to4 fixes 2014-02-27 13:18:20 +05:30
Damian Dimmich
1ee5675750 Update README.md
remove old doc line
2014-02-26 10:29:42 +01:00
Anand Doshi
e9baaa68e7 Changed frappe.conn to frappe.db 2014-02-26 12:35:33 +05:30
Anand Doshi
901f4434fd Fixed Purchase Invoice test cases 2014-02-25 17:25:28 +05:30
Anand Doshi
0936ae6dca Fixed company web page creation 2014-02-25 16:21:50 +05:30
Anand Doshi
4362443b6e Propagate ignore_permissions during mapping from quotation to sales order 2014-02-25 15:42:32 +05:30
Anand Doshi
201dbbd977 Quotation Item Table can be empty 2014-02-25 15:42:32 +05:30
Rushabh Mehta
a6628eee56 rename sitemap to route 2014-02-25 11:08:37 +05:30
Nabin Hait
a1c96de9fc party related cleanup 2014-02-21 14:45:10 +05:30
Rushabh Mehta
6fbda08583 fixed sitemap patch 2014-02-20 19:03:03 +05:30
Nabin Hait
cda83bba59 Row no fix in stock reconciliation 2014-02-20 15:01:51 +05:30
Nabin Hait
2f8d4451f5 calculate outstanding amount in server side, only if docstatus is 0 2014-02-20 14:59:37 +05:30
Nabin Hait
0f2310690e fix in fetch item details and supplier non-mandatory to fetch 2014-02-20 11:27:47 +05:30
Pratik Vyas
33f36c3462 Add CI badge to readme 2014-02-20 00:17:43 +05:30
Pratik Vyas
a08855a0de add site arg to travis build script, booboo 2014-02-20 00:06:35 +05:30
Pratik Vyas
3197767650 run setup wizard before running tests on travis 2014-02-19 23:22:02 +05:30
Pratik Vyas
28da7523be set single defaults after install 2014-02-19 20:53:45 +05:30
Nabin Hait
ce64afaa51 default value in single doctypes 2014-02-19 19:12:01 +05:30
Nabin Hait
f5bb9ae1b1 default value in single doctypes 2014-02-19 19:02:40 +05:30
Nabin Hait
22831563ff default value in selling settings 2014-02-19 18:35:54 +05:30
Nabin Hait
32f168617c default value in global defaults 2014-02-19 18:11:42 +05:30
Nabin Hait
74bbd24b1d Merge github.com:frappe/erpnext into develop 2014-02-19 17:43:51 +05:30
Nabin Hait
9d1f077922 get lead details in quotation 2014-02-19 17:43:24 +05:30
Rushabh Mehta
e0e3f92019 fixed sales / accounts tree 2014-02-19 12:43:16 +05:30
Nabin Hait
05b28eb161 minor fixes 2014-02-19 11:04:32 +05:30
Nabin Hait
36a4db69b8 price list on_trash function 2014-02-18 15:14:46 +05:30
Pratik Vyas
da0a23e635 remove print in patch, booboo 2014-02-17 14:56:00 +05:30
Pratik Vyas
31affc0e67 bump modified dates for purchase receipt and purchase invoice 2014-02-17 11:36:10 +05:30
Pratik Vyas
d4f9af3498 Delete install_erpnext.py 2014-02-15 15:29:29 +05:30
Pratik Vyas
ad9b4faa47 Update README.md 2014-02-15 15:23:25 +05:30
Pratik Vyas
0240dc53ae 4.change version to 4.0.0-beta 2014-02-14 16:10:55 +05:30
Pratik Vyas
ed20b68a3a Update .travis.yml 2014-02-14 16:10:03 +05:30
Rushabh Mehta
86903e5f5b fixed travis 2014-02-14 15:54:43 +05:30
Rushabh Mehta
793ba6bd37 -webnotes +frappe 💥 2014-02-14 15:47:51 +05:30
Nabin Hait
8ae051cb39 fixed conflict 2014-02-14 13:42:41 +05:30
Nabin Hait
adeff27f28 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0.0-wip 2014-02-14 13:41:00 +05:30
Nabin Hait
9ea461638e minor fix 2014-02-14 13:40:41 +05:30
Rushabh Mehta
989b60ae52 removed setup from desktop: 2014-02-14 13:16:39 +05:30
Pratik Vyas
fc274e29ec Merge branch 'develop' 2014-02-14 10:36:23 +05:30
Pratik Vyas
d45f7d60c3 bumped to version 3.8.6 2014-02-14 11:06:23 +06:00
Nabin Hait
c1611abebf Merge pull request #1418 from nabinhait/hotfix
minor fixes in account receivable/payable
2014-02-13 18:44:15 +05:30
Nabin Hait
e0f6b3edbe minor fixes in account receivable/payable 2014-02-13 18:43:18 +05:30
Nabin Hait
a038831c45 validate item of item_price record 2014-02-13 15:54:51 +05:30
Nabin Hait
36028bfb56 minor 2014-02-12 19:09:28 +05:30
Nabin Hait
a87121c6da Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0.0-wip 2014-02-12 17:09:08 +05:30
Nabin Hait
e219d61ed4 patch included in patches txt 2014-02-12 17:08:35 +05:30
Nabin Hait
66b2717c54 Merge pull request #1414 from akhileshdarjee/4.0-hotfix
Customer and Supplier dashboard set to company currency
2014-02-12 16:55:17 +05:30
Nabin Hait
eba1bdbcca minor fixes 2014-02-12 16:04:17 +05:30
Nabin Hait
139dc7b9b2 minor fixes 2014-02-12 14:54:16 +05:30
Nabin Hait
0aa71a5c41 minor fixes 2014-02-12 14:54:15 +05:30
Nabin Hait
5aecc538dd Letter Head field added in purchase receipt and invoice 2014-02-12 14:54:15 +05:30
Nabin Hait
5f59726903 Rename fields: replaced in html and txt files 2014-02-12 14:54:15 +05:30
Nabin Hait
1eb560130a Rename fields: amount related fields 2014-02-12 14:54:14 +05:30
Nabin Hait
7979f7ed21 Field Rename: rate field mass replacement 2014-02-12 14:54:14 +05:30
Nabin Hait
a7f757a3f4 Rename fields: initial commit 2014-02-12 14:54:13 +05:30
Nabin Hait
777397489e Fields renamed in schema 2014-02-12 14:54:13 +05:30
Nabin Hait
436f526102 commonify get_item_details and rename fields to sync selling and purchase 2014-02-12 14:54:12 +05:30
Nabin Hait
c28c86dfd8 Validate duplicate serial nos entry 2014-02-12 14:54:11 +05:30
Nabin Hait
9beffb646d Validate duplicate serial nos entry 2014-02-12 14:54:11 +05:30
Nabin Hait
f0d29be1d5 Removed on_trash function from support ticket 2014-02-12 14:54:11 +05:30
Akhilesh Darjee
f2b7cd65a9 customer and supplier dashboard set to company currency 2014-02-12 11:29:08 +05:30
Anand Doshi
2735733d1f Minor fix in setup import 2014-02-11 20:28:11 +05:30
Anand Doshi
93fdc670fe Fixes in Test Cases 2014-02-11 14:40:21 +05:30
Nabin Hait
40c5174aa0 Merge pull request #1410 from nabinhait/hotfix
Hotfix
2014-02-11 12:03:11 +05:30
Nabin Hait
0799b28e46 Letter Head field added in purchase receipt and invoice 2014-02-11 12:02:46 +05:30
Pratik Vyas
89a3ee7f57 Merge branch 'develop' 2014-02-10 20:57:25 +05:30
Pratik Vyas
347bf93b4f bumped to version 3.8.5 2014-02-10 21:27:25 +06:00
Anand Doshi
d7cc47e3ac Do not validate Material Request against Sales Order, Moved Setup page to Framework 2014-02-10 17:39:12 +05:30
Anand Doshi
1d7e933590 Fix in Get Job Applications 2014-02-07 20:26:56 +05:30
Anand Doshi
080b64a98f Fixes in Sales Partner and Support Mails 2014-02-07 19:14:21 +05:30
Rushabh Mehta
c4ec534b06 added config.setup 2014-02-07 19:04:19 +05:30
Rushabh Mehta
22ababbec1 configs 2014-02-07 18:16:11 +05:30
Pratik Vyas
17cb5b7799 Merge branch 'develop' 2014-02-07 16:03:09 +05:30
Pratik Vyas
e0c9dd3d23 bumped to version 3.8.4 2014-02-07 16:33:09 +06:00
Nabin Hait
41891ec95c Merge pull request #1405 from nabinhait/hotfix
Serial No duplicate entry fix
2014-02-07 15:54:57 +05:30
Nabin Hait
dfc0072929 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-02-07 15:45:39 +05:30
Nabin Hait
e1e5d675ac Validate duplicate serial nos entry 2014-02-07 15:33:34 +05:30
Nabin Hait
c4e92c6416 Validate duplicate serial nos entry 2014-02-07 15:22:50 +05:30
Anand Doshi
7c34f1c472 Test Item Group 2014-02-07 14:52:14 +05:30
Nabin Hait
2c832addca Merge pull request #1404 from nabinhait/hotfix
Hotfix
2014-02-07 11:51:54 +05:30
Nabin Hait
c095cfa224 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-02-07 11:49:45 +05:30
Nabin Hait
fbb10d37d3 Removed on_trash function from support ticket 2014-02-07 11:49:26 +05:30
Anand Doshi
7bb9c3f125 Nested Set Test using Test Item group 2014-02-06 17:51:18 +05:30
Nabin Hait
a03f654446 Merge pull request #1382 from akhileshdarjee/4.0-hotfix
Newsletter can also be sent to employees
2014-02-06 16:02:39 +05:30
Nabin Hait
574c7e7c63 item related cleanup 2014-02-06 15:51:01 +05:30
Pratik Vyas
9294fc8e7e Merge branch 'develop' 2014-02-06 15:27:11 +05:30
Pratik Vyas
07d4c373f3 bumped to version 3.8.3 2014-02-06 15:57:11 +06:00
Pratik Vyas
79499e3615 fix syntax error in material request, merge booboo 2014-02-06 15:25:17 +05:30
Pratik Vyas
cc9bc95b25 fix language typo in build script 2014-02-06 14:59:05 +05:30
Pratik Vyas
ae763d7afa Merge pull request #1394 from pdvyas/testing-develop3
fix travis build script typo
2014-02-06 14:54:13 +05:30
Pratik Vyas
70e2a50f0f fix travis build script typo 2014-02-06 14:07:58 +05:30
Pratik Vyas
c22ff12951 Merge pull request #1390 from pdvyas/testing4
fix webnotes url in travis build script
2014-02-06 13:37:41 +05:30
Pratik Vyas
1b8c158fdc Merge pull request #1393 from pdvyas/testing-develop2
add travis build script
2014-02-06 13:37:21 +05:30
Pratik Vyas
4078ef8ef5 add travis build script 2014-02-06 13:36:26 +05:30
Akhilesh Darjee
462740f72b sales funnel fix 2014-02-06 13:14:15 +05:30
Pratik Vyas
c055ea6465 fix webnotes url in travis build script 2014-02-06 12:54:52 +05:30
Anand Doshi
3decf4dbc5 Fixes related website hierarchy 2014-02-06 12:50:35 +05:30
Rushabh Mehta
4b41e420c0 cleaned up splash: 2014-02-06 11:02:53 +05:30
Rushabh Mehta
2c545ef1ad bugfix to feed 2014-02-06 10:38:45 +05:30
Pratik Vyas
c6b59ef082 Merge branch 'develop' 2014-02-05 18:49:29 +05:30
Pratik Vyas
dbbba659a8 bumped to version 3.8.2 2014-02-05 19:19:29 +06:00
Nabin Hait
3c3719fa9c Merge pull request #1388 from nabinhait/hotfix
Hotfix
2014-02-05 18:46:54 +05:30
Nabin Hait
a7af1d619e Fix in accounts receivable report 2014-02-05 18:15:12 +05:30
Rushabh Mehta
307fac8b78 hooks fixes 2014-02-05 17:04:49 +05:30
Nabin Hait
18eb8c5f68 fixed unicode and null issue in sms center 2014-02-05 15:06:09 +05:30
Akhilesh Darjee
602fdc0000 patch reloading employee form 2014-02-03 19:32:59 +05:30
Akhilesh Darjee
f1c3537924 webnotes/erpnext#869 newsletter to send to employees 2014-02-03 19:28:36 +05:30
Akhilesh Darjee
81578d2e77 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0-hotfix 2014-02-03 17:48:46 +05:30
Akhilesh Darjee
8f674fe0fb minor changes 2014-02-03 17:47:50 +05:30
Akhilesh Darjee
abb3af7b30 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0-hotfix 2014-02-03 16:44:14 +05:30
Rushabh Mehta
cc008cc109 commonified get_party_details 2014-02-03 16:14:56 +05:30
Rushabh Mehta
347889b233 merge 2014-02-03 14:49:53 +05:30
Rushabh Mehta
8ed0268b9d fix to SalesInvoice format 2014-02-03 14:40:01 +05:30
Rushabh Mehta
fa799f7d81 Merge branch '4.0.0-cleanup' of github.com:webnotes/erpnext into 4.0.0-cleanup 2014-02-03 14:38:52 +05:30
Nabin Hait
23c28704d2 Field arrangement in child table 2014-02-03 14:36:59 +05:30
Akhilesh Darjee
dd905fcaba Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0-hotfix 2014-02-03 13:56:10 +05:30
Akhilesh Darjee
53593c9c47 Newsletter allow delete 2014-02-03 13:40:27 +05:30
Rushabh Mehta
8612778136 style fix 2014-02-03 10:45:21 +05:30
Rushabh Mehta
9adcf85a14 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0.0-wip 2014-02-03 10:44:34 +05:30
Akhilesh Darjee
d6d2193f91 newsletter reload 2014-01-31 19:59:25 +05:30
Nabin Hait
bec11fa86e Newsletter permissions 2014-01-31 17:33:23 +05:30
Nabin Hait
dfae0ea570 minor fix in patch 2014-01-31 17:25:09 +05:30
Nabin Hait
d7fb6dce89 Stock reconciliation: cost center filters 2014-01-31 17:05:09 +05:30
Nabin Hait
759f9ee973 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0.0-wip 2014-01-31 16:28:31 +05:30
Nabin Hait
646d06ee9f Merge branch 'develop' of github.com:webnotes/erpnext into 4.0.0-wip
Conflicts:
	config.json
2014-01-31 16:28:05 +05:30
Nabin Hait
7f80485070 Merge pull request #1374 from akhileshdarjee/sms-center
SMS center character count
2014-01-31 02:57:35 -08:00
Nabin Hait
45f0c25a6d Merge pull request #1365 from akhileshdarjee/4.0-hotfix
Stay Updated button in website fixed
2014-01-31 02:44:35 -08:00
Nabin Hait
c3211ab394 Merge pull request #1368 from akhileshdarjee/default-tax
Default tax for customer and supplier
2014-01-31 02:40:51 -08:00
Akhilesh Darjee
dc45153430 webnotes/erpnext#1221 dont allow duplicate user id in employee 2014-01-31 12:23:13 +05:30
Akhilesh Darjee
4e3b601990 webnotes/erpnext#1188 sms center character count 2014-01-30 19:13:25 +05:30
Nabin Hait
b5be7bab9b Stock Return: fetch customer and supplier details 2014-01-30 18:47:12 +05:30
Nabin Hait
8dc2c6a16c Default accounts in company should not be copied 2014-01-30 17:00:09 +05:30
Pratik Vyas
fe977289eb Merge branch 'develop' 2014-01-30 16:00:29 +05:30
Pratik Vyas
45b5b6d11f bumped to version 3.8.1 2014-01-30 16:30:29 +06:00
Nabin Hait
ec43e4dd33 Merged with develop 2014-01-30 15:22:10 +05:30
Nabin Hait
c58b330673 Merge pull request #1372 from nabinhait/hotfix
Hotfix
2014-01-30 01:49:29 -08:00
Nabin Hait
5d976ca3ac recurring invoice test fix 2014-01-30 15:12:39 +05:30
Rushabh Mehta
fcb6b01e4e cleaned up email 2014-01-30 15:09:05 +05:30
Nabin Hait
f2f17959ab Serial no fix 2014-01-30 14:54:25 +05:30
Akhilesh Darjee
e0a1039756 merge conflict fixed 2014-01-30 14:44:35 +05:30
Pratik Vyas
6448076143 Merge branch 'develop' 2014-01-30 13:59:43 +05:30
Pratik Vyas
3f657bcf51 bumped to version 3.8.0 2014-01-30 14:29:43 +06:00
Akhilesh Darjee
4cdb79941b map charge to taxes and charges in transactions 2014-01-30 13:56:57 +05:30
Nabin Hait
0ff32e73ba Merged with 4.0.0-wip 2014-01-30 12:41:52 +05:30
Nabin Hait
fe8db590a1 Fixed conflict while merging with develop 2014-01-30 12:32:47 +05:30
Nabin Hait
53f7ba26f6 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-30 12:12:50 +05:30
Nabin Hait
937103f840 Update accounts_receivable.py 2014-01-30 12:12:26 +05:30
Nabin Hait
1969f9e1ac Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-30 12:11:04 +05:30
Nabin Hait
60fcce66f7 Minor fix in accounts receivable report 2014-01-30 12:08:44 +05:30
Nabin Hait
47fcc0310d Merge pull request #1371 from nabinhait/hotfix
Minor fix in opening purchase invoice and AR report
2014-01-29 22:13:29 -08:00
Nabin Hait
7e676f3aae Merge pull request #1370 from akhileshdarjee/hotfix
Shipping address in quotation fixed for customer validation
2014-01-29 21:50:49 -08:00
Akhilesh Darjee
30aac9bbcf removed contact person for lead filter 2014-01-30 11:02:06 +05:30
Nabin Hait
c2a5858143 Minor fix in accounts receivable report 2014-01-30 10:50:55 +05:30
Nabin Hait
879b3a0cbc Set expense account for perpetual inventory only non-opening invoices 2014-01-30 10:50:55 +05:30
Akhilesh Darjee
ef0a0e8209 stashed footer page 2014-01-29 20:18:43 +05:30
Akhilesh Darjee
f7f20f624a shipping address in quotation fixed for customer validation 2014-01-29 20:13:43 +05:30
Nabin Hait
b87e9f2651 Fixes in fetching party details 2014-01-29 19:51:36 +05:30
Akhilesh Darjee
b665d86292 patch to reload all sales and purchase doctypes and print formats 2014-01-29 17:40:34 +05:30
Akhilesh Darjee
4f7215662d webnotes/erpnext#1090 set default tax type in customer and supplier 2014-01-29 16:31:38 +05:30
Akhilesh Darjee
db22657d93 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into default-tax 2014-01-29 16:00:33 +05:30
Rushabh Mehta
24da761a17 more updates to party 2014-01-29 15:26:04 +05:30
Nabin Hait
115dcc09d4 Merge pull request #1361 from trhura/develop
Pull request for issue #856
2014-01-29 00:30:07 -08:00
Thura Hlaing
990d7c4862 added StockFreezeError, and uncomment stock_auth_role check 2014-01-29 14:53:21 +06:30
Thura Hlaing
166024a23c Merge branch 'develop' of https://github.com/webnotes/erpnext into develop 2014-01-29 13:29:27 +06:30
Thura Hlaing
3c4bb0c7c9 initial tests for freeze stock functionality 2014-01-29 13:28:11 +06:30
Thura Hlaing
258191ab40 fix bug by coercing stock_frozen_upto_days value to int 2014-01-29 11:37:30 +06:30
Thura Hlaing
d66396abe3 fixed typo add_date -> add_days 2014-01-29 09:49:30 +06:30
Akhilesh Darjee
2ced3b07d4 changed fieldname from charge to taxes 2014-01-28 19:16:05 +05:30
Rushabh Mehta
49dd7bee87 added get_supplier_details and commonified invoice functions 2014-01-28 17:43:10 +05:30
Rushabh Mehta
3b432dce88 added listviews 2014-01-28 16:10:15 +05:30
Nabin Hait
21d324c597 Merged with 4.0-wip 2014-01-28 15:52:25 +05:30
Akhilesh Darjee
a7ab20ec78 webnotes/erpnext#912 Stay Updated button in website fixed 2014-01-28 15:50:28 +05:30
Akhilesh Darjee
7c1976950d webnotes/erpnext#912 stay updated button fixed in website 2014-01-28 13:03:47 +05:30
Nabin Hait
158200b209 Merge pull request #1363 from akhileshdarjee/hotfix
Allow renaming of Sales/Purchase Taxes and Charges Master
2014-01-27 23:13:03 -08:00
Akhilesh Darjee
a570cd66f7 webnotes/erpnext#1362 allow renaming of sales and purchase taxes and charges master 2014-01-28 12:31:12 +05:30
Thura Hlaing
d7f3d63a8e Merge branch 'develop' of https://github.com/webnotes/erpnext into develop 2014-01-28 09:10:20 +06:30
Thura Hlaing
2e67426936 label/message update in error reporting 2014-01-28 09:09:50 +06:30
Thura Hlaing
16f88ba3cd import add_date, removed timedelta import 2014-01-27 20:22:08 +06:30
Thura Hlaing
e31a41854b tabify modifications, minor coding style/message updates 2014-01-27 20:14:53 +06:30
Pratik Vyas
7349c191ab Merge branch 'develop' 2014-01-27 17:49:50 +05:30
Pratik Vyas
dc540dda4d bumped to version 3.7.1 2014-01-27 18:19:50 +06:00
Nabin Hait
4b97811941 Merge pull request #1359 from akhileshdarjee/4.0-hotfix
POS Invoice print format showing inclusive taxes and discount amount
2014-01-27 04:09:36 -08:00
Nabin Hait
5c494f79f3 Merge pull request #1360 from nabinhait/hotfix
Planned qty patch: auto commit on many writes
2014-01-27 04:07:43 -08:00
Nabin Hait
191935bbf5 Planned qty patch: auto commit on many writes 2014-01-27 17:37:06 +05:30
Akhilesh Darjee
ffa4769b51 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0-hotfix 2014-01-27 17:32:32 +05:30
Akhilesh Darjee
db4304914c POS Invoice print format showing inclusive taxes and discount amount 2014-01-27 17:27:39 +05:30
Nabin Hait
db7901ec49 Merge pull request #1261 from akhileshdarjee/maintenance2
Fixed Maintenance Schedule
2014-01-27 03:57:15 -08:00
Pratik Vyas
8c78a1abb7 Merge branch 'develop' 2014-01-27 17:19:45 +05:30
Pratik Vyas
8821541f33 bumped to version 3.7.0 2014-01-27 17:49:45 +06:00
Nabin Hait
5cec7ec84a Merge pull request #1355 from akhileshdarjee/hotfix
Allow rename for price list
2014-01-27 02:40:08 -08:00
Thura Hlaing
9d5566634c changed stock_frozen_upto to stock_frozen_upto_days, and added validation for it in stock ledger 2014-01-27 16:54:38 +06:30
Akhilesh Darjee
86894f3bbf merge conflict fixed 2014-01-27 15:42:02 +05:30
Nabin Hait
9536f112b5 Merge pull request #1358 from nabinhait/hotfix
Serial no and planned qty
2014-01-27 01:33:56 -08:00
Nabin Hait
44a40b860e Fixed planned qty bug and patch to recalculate planned qty 2014-01-27 15:02:30 +05:30
Nabin Hait
b3d26c08f6 Fixed planned qty bug and patch to recalculate planned qty 2014-01-27 14:58:55 +05:30
Thura Hlaing
98d4622ed8 Merge branch 'develop' of github.com:trhura/erpnext 2014-01-27 14:10:52 +06:30
Thura Hlaing
24b26db327 initial prototype implementation for issue #856 2014-01-27 14:08:55 +06:30
Nabin Hait
fa9fabaa49 Serial no status fix: patch to set status not available where no sle exists 2014-01-27 12:46:18 +05:30
Akhilesh Darjee
49e8e783e3 webnotes/erpnext#1353 allow rename for price list 2014-01-27 11:12:24 +05:30
Rushabh Mehta
1230e3a28b don't hide customer / supplier links, webnotes/erpenxt#796 2014-01-27 11:02:27 +05:30
Anand Doshi
c4ee74857d BugFix: Production Planning Tool - get_raw_materials 2014-01-24 21:53:11 +05:30
Anand Doshi
3f8f4ff6cd BugFix: Production Planning Tool - get_raw_materials 2014-01-24 21:47:01 +05:30
Anand Doshi
cb39e0878e Merge remote-tracking branch 'webnotes/develop' into 4.0.0-wip
Conflicts:
	config.json
	erpnext/accounts/utils.py
	erpnext/patches/patch_list.py
	erpnext/stock/doctype/price_list/price_list.txt
	erpnext/stock/doctype/warehouse/warehouse.py
	portal/templates/sale.html
	portal/utils.py
	selling/doctype/sales_order/templates/pages/order.py
	selling/utils/cart.py
	selling/utils/product.py
	utilities/demo/demo_docs/Fiscal_Year.csv
	utilities/demo/make_demo.py
2014-01-24 21:44:36 +05:30
Akhilesh Darjee
a4e0a1c061 minor changes 2014-01-24 19:57:52 +05:30
Anand Doshi
fc13b87fd5 Fixes in Make Demo 2014-01-24 18:54:50 +05:30
Anand Doshi
d9ba544e09 Fix in Item Test Case 2014-01-24 15:59:05 +05:30
Rushabh Mehta
2fa914b410 Merge pull request #1347 from akhileshdarjee/4.0-hotfix
method name fixing
2014-01-24 02:07:22 -08:00
Rushabh Mehta
e288e5238a added title_fields for Task, Newsletter 2014-01-24 15:33:42 +05:30
Akhilesh Darjee
7cbf5b4e67 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0-hotfix 2014-01-24 11:12:50 +05:30
Akhilesh Darjee
44edfb7231 method name fixing 2014-01-24 11:10:46 +05:30
Rushabh Mehta
1cd96a136f updates for restriction 2014-01-24 11:10:24 +05:30
Nabin Hait
af21479665 Merge pull request #1342 from akhileshdarjee/hotfix
Item List refresh when price list changed in POS
2014-01-23 05:14:16 -08:00
Nabin Hait
93eab5521c Minor fix in path 2014-01-23 17:58:03 +05:30
Nabin Hait
4ba95d0b7a Fix in testcases 2014-01-23 16:45:22 +05:30
Nabin Hait
5ae6a61c4d Fixes related to appifing shopping cart 2014-01-23 15:33:30 +05:30
Nabin Hait
eec59ae7c4 Merge pull request #1345 from nabinhait/hotfix
Order preview through customer login
2014-01-23 01:48:28 -08:00
Nabin Hait
efa9a7ed5b Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-23 13:25:39 +05:30
Nabin Hait
557abdebe0 order preview through customer login 2014-01-23 13:25:26 +05:30
Akhilesh Darjee
8589b1db22 Use model set_value for updating values from POS 2014-01-22 19:25:51 +05:30
Akhilesh Darjee
82a21beba0 Item List refresh when price list changed in POS 2014-01-22 16:55:32 +05:30
Pratik Vyas
256c4da0a5 Merge branch 'develop' 2014-01-22 16:03:07 +05:30
Pratik Vyas
7395dc9969 bumped to version 3.6.6 2014-01-22 16:33:07 +06:00
Nabin Hait
6a23cfa5cd Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0.0-wip 2014-01-22 15:57:32 +05:30
Nabin Hait
d39bc09e62 Merge pull request #1341 from nabinhait/hotfix
Small fix
2014-01-22 02:21:17 -08:00
Nabin Hait
c7676797e1 Dont display old fraction outstanding in AR report 2014-01-22 15:36:44 +05:30
Rushabh Mehta
7460dcf406 updated Bootstrap 2014-01-22 12:44:46 +05:30
Nabin Hait
423932fab2 Fixes in general ledger opening 2014-01-22 11:53:44 +05:30
Nabin Hait
efda5b0d36 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-21 20:58:10 +05:30
Nabin Hait
13a9e27320 Fixes in warehouse merge function 2014-01-21 20:57:39 +05:30
Pratik Vyas
b0433d96a3 Merge branch 'develop' 2014-01-21 12:09:31 +05:30
Pratik Vyas
f3aba2e536 bumped to version 3.6.5 2014-01-21 12:39:31 +06:00
Nabin Hait
1594f102fd Merge pull request #1340 from nabinhait/hotfix
General ledger
2014-01-20 22:29:33 -08:00
Nabin Hait
b2f2df4c64 General ledger: opening balance issue fixed 2014-01-21 11:58:17 +05:30
Nabin Hait
9f6c48d82e Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-21 10:44:16 +05:30
Pratik Vyas
f0307dc75e Merge branch 'develop' 2014-01-20 19:21:25 +05:30
Pratik Vyas
872e4d1f3d bumped to version 3.6.4 2014-01-20 19:51:25 +06:00
Nabin Hait
b164e606f9 Merge pull request #1337 from nabinhait/hotfix
Hotfix
2014-01-20 05:00:43 -08:00
Nabin Hait
806343395a Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-20 18:29:48 +05:30
Nabin Hait
afe93d633c Increased remarks width in general ledger 2014-01-20 18:28:48 +05:30
Nabin Hait
cd20717c3d Merge pull request #1336 from akhileshdarjee/disable-price-list
Enabled feature for Price List
2014-01-20 04:47:10 -08:00
Rushabh Mehta
f96bcf943b added explicit delete perimssions 2014-01-20 17:52:13 +05:30
Nabin Hait
9e056ec1ce Auto closing of tickets through schedulers 2014-01-20 17:46:37 +05:30
Rushabh Mehta
cef681942f merge fix 2014-01-20 17:41:13 +05:30
Nabin Hait
5c6d13a0df Fixed conflict while merging with develop branch 2014-01-20 17:18:16 +05:30
Nabin Hait
719f2803b3 Fixed conflict while merging with develop branch 2014-01-20 17:01:28 +05:30
Nabin Hait
dc15b4fa8a Fixed conflict while merging with develop brnach 2014-01-20 16:48:49 +05:30
Akhilesh Darjee
529709e08b patch for enabling all price list 2014-01-20 16:39:03 +05:30
Akhilesh Darjee
e82eee512b Enabled feature in Price List 2014-01-20 16:09:45 +05:30
Nabin Hait
ee0c623760 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-20 10:57:12 +05:30
Nabin Hait
dbb4955483 Merge pull request #1332 from akhileshdarjee/hotfix
decimal places fix in item prices report
2014-01-17 20:18:30 -08:00
Akhilesh Darjee
ed87335513 decimal places fix in item prices report 2014-01-17 18:57:21 +05:30
Akhilesh Darjee
8a4111fe0e decimal places fixed in item prices report 2014-01-17 18:50:44 +05:30
Pratik Vyas
4bfa8d560b Merge branch 'develop' 2014-01-17 16:56:31 +05:30
Pratik Vyas
96db41d996 bumped to version 3.6.3 2014-01-17 17:26:31 +06:00
Nabin Hait
9a74330d6f Merge pull request #1330 from pdvyas/fix-mysql-installer
remove mysql-python pinning to 1.2.4
2014-01-17 02:37:25 -08:00
Nabin Hait
1951baca57 Merge pull request #1319 from pdvyas/about-version
update about erpnext with version number
2014-01-17 02:36:11 -08:00
Pratik Vyas
da08124df2 remove mysql-python pinning to 1.2.4 2014-01-17 15:27:19 +05:30
Nabin Hait
2aecc5a717 Merge pull request #1329 from nabinhait/hotfix
Patch for updating billing status for old zero value order
2014-01-17 01:41:40 -08:00
Nabin Hait
a37ffe162b Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-17 12:05:06 +05:30
Nabin Hait
bc99c9d6e0 Priority to user's deafult price list over customer's default price list 2014-01-17 12:04:24 +05:30
Nabin Hait
f32314dd0b Do not set income/expense account automatically in company master 2014-01-17 11:53:25 +05:30
Nabin Hait
7e73f35916 Merge pull request #1327 from akhileshdarjee/hotfix
Allow renaming of campaign
2014-01-16 21:48:10 -08:00
Akhilesh Darjee
e1e63a91d6 Allow renaming of campaign 2014-01-17 11:12:20 +05:30
Nabin Hait
9a05aad8ea Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-17 10:31:43 +05:30
Nabin Hait
f6b77479d7 Patch: Update billing status for zero value order 2014-01-16 18:18:49 +05:30
Pratik Vyas
3c279163fc Merge branch 'develop' 2014-01-16 16:29:22 +05:30
Pratik Vyas
6933617538 bumped to version 3.6.2 2014-01-16 16:59:22 +06:00
Nabin Hait
2648661757 Merge pull request #1326 from nabinhait/hotfix
Calculate taxes and charges total in server side
2014-01-16 01:28:33 -08:00
Nabin Hait
e31a97f355 Calculate taxes and charges total in server side 2014-01-16 14:24:32 +05:30
Nabin Hait
6bdb73c392 Merge pull request #1324 from nabinhait/hotfix
Minor Fix
2014-01-15 22:44:25 -08:00
Nabin Hait
deda7e2c75 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-16 12:08:36 +05:30
Nabin Hait
5cdb8cea13 Reset filters in Item Price report on each route 2014-01-16 12:08:12 +05:30
Nabin Hait
90a8c9e636 Merge pull request #1323 from nabinhait/hotfix
Billing status for zero value SO/PO
2014-01-15 05:20:51 -08:00
Nabin Hait
c0c951b6a9 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-15 17:36:34 +05:30
Nabin Hait
39eb7faeb9 Update billing percentage and status from SI/PI in SO/PO, when net total is zero 2014-01-15 17:36:18 +05:30
Nabin Hait
4829ad3eb8 Merge pull request #1321 from akhileshdarjee/hotfix
Hide fields fix
2014-01-15 03:17:23 -08:00
Akhilesh Darjee
a682d45846 webnotes/erpnext # 1320 - hide fields fix 2014-01-15 16:39:01 +05:30
Pratik Vyas
76dd468f0e update about erpnext with version number 2014-01-15 14:23:38 +05:30
Nabin Hait
a6df26839d Higher priority to user's default price list over customer's default price list 2014-01-15 12:21:14 +05:30
Akhilesh Darjee
2a79b00700 minor fix 2014-01-15 11:54:05 +05:30
Akhilesh Darjee
6a749e3a8e removed while loop 2014-01-15 11:43:47 +05:30
Nabin Hait
c5d4fc38aa Fixes in monthly salary register 2014-01-15 10:54:07 +05:30
Pratik Vyas
02f7e83bd1 Merge branch 'develop' 2014-01-14 18:49:14 +05:30
Pratik Vyas
f55d9414cd bumped to version 3.6.1 2014-01-14 19:19:14 +06:00
Nabin Hait
5644ed37a4 Merge pull request #1316 from nabinhait/hotfix
rounding and divisional loss
2014-01-14 05:05:33 -08:00
Nabin Hait
ee6200576a Highest priority to user properties while fetching warehouse from item 2014-01-14 18:34:10 +05:30
Nabin Hait
eeb8ba18cd Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-14 17:44:47 +05:30
Nabin Hait
3a19370892 Rounding issue and divisional loss adjustment 2014-01-14 17:44:34 +05:30
Nabin Hait
6dc1ba6f7f Merge pull request #1314 from nabinhait/hotfix
comment fix
2014-01-14 02:29:39 -08:00
Nabin Hait
d91af2853e Allowed import for customer issue 2014-01-14 15:56:52 +05:30
Nabin Hait
d23ae108ae Fixes in Comment, if comment by not mentioned, consider owner 2014-01-14 15:52:09 +05:30
Anand Doshi
b9b6a6cea5 Moved webnotes scheduler event hooks 2014-01-13 21:22:23 +05:30
Pratik Vyas
72f8ae2d5a Merge branch 'develop' 2014-01-13 18:37:07 +05:30
Pratik Vyas
1e347910d5 bumped to version 3.6.0 2014-01-13 19:07:07 +06:00
Nabin Hait
25cfb700bb Merge pull request #1311 from akhileshdarjee/hotfix
Increase and decrease quantity buttons in POS
2014-01-13 04:33:50 -08:00
Nabin Hait
8d2d4e82fd Merge pull request #1302 from nabinhait/hotfix
Hotfix
2014-01-13 04:33:18 -08:00
Nabin Hait
c43d58ac79 Delete Property Setters for Custom Fields, and set them inside Custom Field 2014-01-13 17:55:24 +05:30
Akhilesh Darjee
0b3c10601c Increase and decrease quantity buttons in POS 2014-01-13 13:34:34 +05:30
Nabin Hait
14bf711d04 Fixes in frozen accounts validation 2014-01-13 13:28:07 +05:30
Nabin Hait
35a9d585b4 Bank Reconciliation Statement: Show balance in debit or credit column based on account type 2014-01-13 12:24:27 +05:30
Nabin Hait
38e56eeb45 Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-13 12:23:29 +05:30
Nabin Hait
3dd1043d5e Merge pull request #1301 from akhileshdarjee/hotfix
pos view showing inclusive taxes
2014-01-10 03:09:12 -08:00
Nabin Hait
55387aa931 Fixed conflict 2014-01-10 16:31:48 +05:30
Nabin Hait
03463ef73b Move related property setters to custom field property 2014-01-10 16:28:41 +05:30
Akhilesh Darjee
371663169c pos view showing inclusive taxes 2014-01-10 15:05:44 +05:30
Nabin Hait
f3ded044e0 Monthly Salary Register: Month is now optional 2014-01-09 17:38:50 +05:30
Nabin Hait
68b0d54b4b Set default accounts in company related to perpetual inventory, only it is enabled 2014-01-09 17:25:55 +05:30
Nabin Hait
95e45574cb Merge pull request #1239 from akhileshdarjee/flat-discount
Flat Discount on Sales Cycle
2014-01-09 03:43:35 -08:00
Pratik Vyas
e4a71935eb Merge branch 'develop' 2014-01-09 15:56:53 +05:30
Pratik Vyas
3e846d19d4 bumped to version 3.5.1 2014-01-09 16:26:53 +06:00
Nabin Hait
5411ece766 Merge pull request #1299 from nabinhait/hotfix
Accounts Receivable fix for partial payment in pos
2014-01-09 02:25:12 -08:00
Nabin Hait
aeb68b2899 Accounts Receivable fix for partial payment in pos 2014-01-09 15:54:18 +05:30
Pratik Vyas
0064dc6f4a Merge branch 'develop' 2014-01-09 15:52:09 +05:30
Pratik Vyas
11bf06ad76 bumped to version 3.5.0 2014-01-09 16:22:09 +06:00
Nabin Hait
5c6a2acff7 Merge pull request #1298 from nabinhait/hotfix
Accounts Receivable fix for partial payment in pos
2014-01-09 02:20:06 -08:00
Nabin Hait
cdbd4218a8 Accounts Receivable fix for partial payment in pos 2014-01-09 15:49:26 +05:30
Nabin Hait
701cddfb15 Merge pull request #1297 from nabinhait/hotfix
Hotfix
2014-01-08 23:18:54 -08:00
Nabin Hait
4bbf91bea1 Added match condition in general ledger report 2014-01-09 12:44:44 +05:30
Nabin Hait
e481e81e67 Merge pull request #1296 from akhileshdarjee/hotfix
POS print format fixed
2014-01-08 22:23:56 -08:00
Anand Doshi
102b417b52 Fix: Typo on patch 2014-01-09 11:39:10 +05:30
Akhilesh Darjee
efc2a45835 merge conflict fixed 2014-01-08 19:42:17 +05:30
Akhilesh Darjee
5c119a7e95 Merge branch 'master' of github.com:webnotes/erpnext into hotfix 2014-01-08 19:36:26 +05:30
Akhilesh Darjee
f7a102ffe3 POS print format fixed 2014-01-08 19:35:01 +05:30
Nabin Hait
d659343541 Payment Reconciliation: Fix for outstanding voucher query 2014-01-08 17:29:23 +05:30
Nabin Hait
dbf5e54eab Merge pull request #1290 from akhileshdarjee/price-list
Price List and Item Price : Valid for Buying and Selling as separate check box
2014-01-07 21:49:52 -08:00
Pratik Vyas
5eb139a531 Merge branch 'develop' 2014-01-07 21:45:04 +05:30
Pratik Vyas
9e2358c544 bumped to version 3.4.9 2014-01-07 22:15:04 +06:00
Akhilesh Darjee
8d0ef21911 pos invoice print format changes 2014-01-07 19:45:33 +05:30
Pratik Vyas
9a8f37c579 Merge pull request #1289 from pdvyas/hotfix-installer
fix installer python packages issue
2014-01-07 06:14:08 -08:00
Akhilesh Darjee
029f698c65 patch for item price and price list 2014-01-07 19:43:35 +05:30
Akhilesh Darjee
806017c92a Price List and Item Price : Validfor Buying and Selling as separate check box 2014-01-07 18:37:38 +05:30
Pratik Vyas
69951e5d1c fix installer python packages issue 2014-01-07 18:24:40 +05:30
Nabin Hait
10fd91c78e Close tickets automatically through scheduler 2014-01-07 16:18:41 +05:30
Pratik Vyas
63d71d7f2f Merge branch 'develop' 2014-01-07 13:47:44 +05:30
Pratik Vyas
777bff6e8d bumped to version 3.4.8 2014-01-07 14:17:44 +06:00
Nabin Hait
1e42a3d028 Merge pull request #1287 from nabinhait/hotfix
Fixes in overbilling validation against DN/PR
2014-01-06 23:12:45 -08:00
Nabin Hait
da282d405f Fixes in overbilling validation against DN/PR 2014-01-07 12:41:09 +05:30
Nabin Hait
8f1bb82ab9 Merge pull request #1286 from nabinhait/hotfix
Removed unwanted debug
2014-01-06 22:40:54 -08:00
Anand Doshi
f2b46635b5 Merge pull request #1285 from pdvyas/hotfix-installer
fix branching, pip version and mysql-python version pinning in install_erpnext
2014-01-06 22:35:49 -08:00
Pratik Vyas
a11e14424c fix branching, pip version and mysql-python version pinning in install_erpnext 2014-01-07 12:03:09 +05:30
Nabin Hait
01441ef37f Removed unwanted debug 2014-01-07 11:59:36 +05:30
Nabin Hait
f6cf5e0f43 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0.0-cleanup 2014-01-06 17:36:04 +05:30
Nabin Hait
cb665285db Merge pull request #1280 from nabinhait/hotfix
Fixes in item-wise sales/purchase register
2014-01-06 03:03:02 -08:00
Nabin Hait
6b66c387ad Fixes in item-wise sales/purchase register 2014-01-06 16:28:17 +05:30
Nabin Hait
5e702de710 Merge pull request #1279 from akhileshdarjee/hotfix
accounts payable fixed
2014-01-05 23:01:51 -08:00
Akhilesh Darjee
7e79f300a1 accounts payable fixed 2014-01-06 12:23:29 +05:30
Pratik Vyas
955902ccad Merge branch 'develop' 2014-01-06 12:18:58 +05:30
Pratik Vyas
b882fa14f4 bumped to version 3.4.7 2014-01-06 12:48:58 +06:00
Nabin Hait
d12d7142c6 Merge pull request #1278 from nabinhait/hotfix
Fixes in overbilling validation
2014-01-05 22:35:10 -08:00
Nabin Hait
42db5d76a9 Fixes in overbilling validation 2014-01-06 11:20:37 +05:30
Akhilesh Darjee
5dd92fd5d6 reload doc in maintenance schedule 2014-01-03 19:14:01 +05:30
Pratik Vyas
bd4030bf85 Merge branch 'develop' 2014-01-03 18:40:11 +05:30
Pratik Vyas
a83337a2dd bumped to version 3.4.6 2014-01-03 19:10:11 +06:00
Nabin Hait
e51e5238ec Merge pull request #1267 from nabinhait/hotfix
Hotfix
2014-01-03 04:59:34 -08:00
Nabin Hait
5d5fe5d9d5 Cost center field added in Purchase Receipt Item table 2014-01-03 18:28:53 +05:30
Akhilesh Darjee
e27717261d merge conflict fixed 2014-01-03 18:18:31 +05:30
Akhilesh Darjee
57738a0ff3 flat discount replaced to discount amount 2014-01-03 18:15:07 +05:30
Nabin Hait
b476c989a4 Fixes test cases for date and year mismatch 2014-01-03 17:43:52 +05:30
Nabin Hait
7f0406f281 Chekc over billing validation considering tolerance 2014-01-03 17:43:19 +05:30
Nabin Hait
33f6b9d6e8 Unlinked message listing all linked entries while cancelling an accounting trandsaction 2014-01-03 15:12:16 +05:30
Pratik Vyas
c196037cb0 Merge branch 'develop' 2014-01-03 13:27:06 +05:30
Pratik Vyas
866103bf66 bumped to version 3.4.5 2014-01-03 13:57:06 +06:00
Nabin Hait
528eb4e4ff Merge pull request #1264 from akhileshdarjee/hotfix
fixed accounts receivable for customer name
2014-01-02 23:53:30 -08:00
Nabin Hait
481454298d Merge pull request #1265 from nabinhait/hotfix
Fixes in general ledger report
2014-01-02 23:53:15 -08:00
Akhilesh Darjee
8a0b7cece1 accounts receivable fixed 2014-01-03 13:21:38 +05:30
Akhilesh Darjee
b4eba77f7b fixed accounts receivable 2014-01-03 12:58:04 +05:30
Akhilesh Darjee
b0a9581e59 fixed accounts receivable for customer name 2014-01-03 12:44:00 +05:30
Nabin Hait
6472bdace2 Fixes in general ledger report 2014-01-03 12:30:24 +05:30
Nabin Hait
c95b9f9221 Merge pull request #1263 from nabinhait/hotfix
Hotfix
2014-01-02 22:44:24 -08:00
Nabin Hait
a4db83a934 Fixes in valuation rate calculation in purchase receipt 2014-01-03 12:13:18 +05:30
Nabin Hait
28acaeb345 Fixes in valuation rate calculation in purchase receipt 2014-01-03 11:16:16 +05:30
Akhilesh Darjee
5c96b75a68 fixed maintenance schedule 2014-01-02 17:54:12 +05:30
Akhilesh Darjee
064d2ba16a fixed sr no in maintenance schedule 2014-01-02 17:47:32 +05:30
Pratik Vyas
5fbb757c2c Merge branch 'develop' 2014-01-02 17:12:01 +05:30
Pratik Vyas
df07c964f7 bumped to version 3.4.4 2014-01-02 17:42:01 +06:00
Nabin Hait
0e2a088ac4 Merge pull request #1260 from nabinhait/hotfix
Hotfix
2014-01-02 03:02:56 -08:00
Nabin Hait
ffc2f8885b Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2014-01-02 16:30:38 +05:30
Nabin Hait
a1ffacaf0b Valuation related charges should only go to stock items 2014-01-02 16:30:16 +05:30
Rushabh Mehta
b09d9dabc5 started cleanup of address / contact calls - partly fixed for customer, to fix shipping_address, get_pos_values, for all supplier transactions 2014-01-02 11:47:23 +05:30
Nabin Hait
06720dfb90 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into 4.0.0-wip 2014-01-01 10:47:18 +05:30
Nabin Hait
a2e0a9b05f Fliend rearrangemet in tables 2014-01-01 10:45:42 +05:30
Rushabh Mehta
3f7e2729bb removed demo hooks 2014-01-01 10:45:26 +05:30
Nabin Hait
6260b58a0a Merge pull request #1253 from nabinhait/4.0.0-wip
4.0.0 wip
2013-12-31 21:13:45 -08:00
Anand Doshi
2511aa2b14 Merge pull request #1254 from anandpdoshi/4.0.0-shopping-cart-wip
Moved Portal and Shopping Cart to Shopping Cart app, and some minor fixe...
2013-12-31 04:14:15 -08:00
Anand Doshi
9a4a13cb73 Moved Portal and Shopping Cart to Shopping Cart app, and some minor fixes 2013-12-31 17:38:21 +05:30
Nabin Hait
139aa71666 Fixed conflict while merging with master 2013-12-31 16:09:22 +05:30
Nabin Hait
d3f04d754a General ledger path fixed 2013-12-31 16:04:48 +05:30
Nabin Hait
432b86344e Validate account with reference voucher if against voucher mentioned 2013-12-31 15:07:58 +05:30
Pratik Vyas
8c52258e6d Merge branch 'develop' 2013-12-31 14:12:36 +05:30
Pratik Vyas
ffe8af3f2f bumped to version 3.4.3 2013-12-31 14:42:36 +06:00
Nabin Hait
fe5728718f Merge pull request #1251 from nabinhait/hotfix
Hotfix
2013-12-30 21:02:20 -08:00
Nabin Hait
424b4a4b36 Supplier bill info in accounts payable report 2013-12-31 10:24:28 +05:30
Nabin Hait
2a3d7e660f Fixes in general ledger report 2013-12-30 20:28:23 +05:30
Pratik Vyas
a0a43ca4e4 Merge branch 'develop' 2013-12-30 19:34:38 +05:30
Pratik Vyas
9cd9836e18 bumped to version 3.4.2 2013-12-30 20:04:38 +06:00
Pratik Vyas
39a3f50732 Merge branch 'develop' 2013-12-30 18:58:03 +05:30
Pratik Vyas
ba7221c332 bumped to version 3.4.1 2013-12-30 19:28:03 +06:00
Pratik Vyas
6a45588a2c Merge branch 'develop' 2013-12-30 17:48:01 +05:30
Pratik Vyas
ab9d755e4d bumped to version 3.4.0 2013-12-30 18:18:01 +06:00
Nabin Hait
1cf8bd8767 Merge pull request #1246 from nabinhait/hotfix
General Ledger and more
2013-12-30 03:44:41 -08:00
Akhilesh Darjee
829eda47a8 Merge branch '4.0.0-wip' of github.com:webnotes/erpnext into flat-discount 2013-12-30 12:31:07 +05:30
Anand Doshi
0663ec4a9c Merge fixes: removed patches, removed Warehouse User 2013-12-27 18:00:28 +05:30
Rushabh Mehta
61bf425935 deleted moves 2013-12-27 17:58:39 +05:30
Akhilesh Darjee
d203aea7c2 [flat discount] flat discount implemented on sales cycle 2013-12-27 17:49:57 +05:30
Nabin Hait
a4f99428d7 Fixes in time log batch 2013-12-27 17:36:17 +05:30
Nabin Hait
e761fe89e2 Stock Entry catch exceptions for testcase 2013-12-27 17:35:39 +05:30
Nabin Hait
d51f805b78 Rewritten General Ledger report with grouping functions 2013-12-27 17:33:55 +05:30
Rushabh Mehta
c4a0ed63ef Moved demo to separate app, moved patches folder 2013-12-27 17:30:24 +05:30
Akhilesh Darjee
31ccf9a80b [flat discount] fixed test cases for stock entry 2013-12-27 14:21:39 +05:30
Rushabh Mehta
4ac68952e8 Moved patches and fixed method routing in pages 2013-12-27 13:43:40 +05:30
Anand Doshi
e7fc25d6a8 Fixes after permissions merge 2013-12-27 10:49:28 +05:30
Rushabh Mehta
0527a393aa Merge pull request #1236 from anandpdoshi/permissions
Permissions
2013-12-26 21:07:54 -08:00
Akhilesh Darjee
2b1d8854d5 [flat discount] added flat discount in pos 2013-12-26 20:31:42 +05:30
Anand Doshi
8e332ffd16 Merge remote-tracking branch 'webnotes/4.0.0-wip' into permissions
Conflicts:
	erpnext/accounts/page/accounts_browser/accounts_browser.css
	erpnext/controllers/buying_controller.py
	erpnext/manufacturing/doctype/production_order/production_order.py
	erpnext/patches/patch_list.py
	erpnext/selling/doctype/customer/customer.txt
	erpnext/selling/doctype/sales_order/sales_order.py
	erpnext/selling/doctype/sales_order/test_sales_order.py
	erpnext/setup/doctype/features_setup/features_setup.txt
	erpnext/stock/doctype/stock_entry/test_stock_entry.py
	erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
	startup/query_handlers.py
2013-12-26 19:12:51 +05:30
Akhilesh Darjee
3ab9f24a12 Merge branch 'master' of github.com:webnotes/erpnext into flat_discount 2013-12-26 18:15:14 +05:30
Akhilesh Darjee
13fa595282 [flat discount] pos print format fixed 2013-12-26 18:14:44 +05:30
Akhilesh Darjee
aebb844da9 [flat discount] added flat discount in print format and all selling doctypes 2013-12-26 18:05:41 +05:30
Rushabh Mehta
7334bea3c2 fixed languages, moved framework strings to framework 2013-12-26 14:44:08 +05:30
Rushabh Mehta
caa4380d49 Merge with 3.3.8 2013-12-26 11:07:58 +05:30
Rushabh Mehta
54047780fc Merge with 3.3.8 2013-12-26 11:07:46 +05:30
Akhilesh Darjee
c53dbc7cdf [flat discount] implemented flat discount on client side 2013-12-25 19:46:20 +05:30
Rushabh Mehta
4b6b377134 Removed config.json 2013-12-25 17:38:12 +05:30
Rushabh Mehta
df200f305b Redesigned templates. Now all templates must be inside templates/pages templates/generators 2013-12-25 15:19:22 +05:30
Nabin Hait
9a064e9ced Merge pull request #1233 from nabinhait/hotfix
Removed country field from Search Fields
2013-12-25 01:01:17 -08:00
Nabin Hait
9dc1b00d87 Removed country field from Search Fields 2013-12-25 12:28:54 +05:30
Akhilesh Darjee
63aa5fd673 [flat discount] implemented flat discount on server side 2013-12-24 20:30:03 +05:30
Rushabh Mehta
3c68488873 Fixes to setup wizard 2013-12-24 18:51:49 +05:30
Rushabh Mehta
30fb30cffb Merge pull request #1 from pdvyas/testing
add travis ci
2013-12-24 05:21:21 -08:00
Pratik Vyas
9373ba96d5 Merge branch 'develop' 2013-12-24 13:12:21 +05:30
Pratik Vyas
a402079cd4 bumped to version 3.3.8 2013-12-24 13:42:21 +06:00
Nabin Hait
2ca388b0a5 Merge pull request #1232 from nabinhait/hotfix
Hotfix
2013-12-23 23:29:00 -08:00
Pratik Vyas
f437e867fd add travis ci 2013-12-24 12:17:59 +05:30
Nabin Hait
6ebcc5c006 Change parent account of warehouse from inside the warehouse 2013-12-24 12:14:12 +05:30
Nabin Hait
6a2edee914 Fixes in general ledger report 2013-12-24 11:58:05 +05:30
Nabin Hait
de69ad0a48 Merge pull request #1230 from akhileshdarjee/hotfix
[fix] [minor] update item_name and description in item price
2013-12-23 22:09:13 -08:00
Akhilesh Darjee
25a4bd02f4 [fix] [minor] update item_name and description in item price 2013-12-24 11:32:57 +05:30
Nabin Hait
a3d058938e Company mandatory validation while enabling perpetual inventory 2013-12-24 11:03:04 +05:30
Nabin Hait
4cae8a0d54 Fixes in stock ledger report 2013-12-24 10:47:34 +05:30
Nabin Hait
454b6f9f8a Merge pull request #1229 from nabinhait/hotfix
Fixes in sales return validation
2013-12-23 07:05:08 -08:00
Nabin Hait
9f1b59dfc6 Fixes in sales return validation 2013-12-23 20:34:09 +05:30
Anand Doshi
2926651e1c Restrict Employee and Leave Approver to relevant Employee and Leave Application records 2013-12-23 20:01:20 +05:30
Anand Doshi
9b67f4344b Patch to migrate allow_print and allow_email to print and email rights of DocPerm 2013-12-23 20:01:20 +05:30
Anand Doshi
68852f25b5 Added rights for print and email in DocPerm 2013-12-23 20:01:20 +05:30
Anand Doshi
8a436500f0 [refactor] Client-side permission handling 2013-12-23 20:01:19 +05:30
Anand Doshi
2298d59b8b [patch] new permission system 2013-12-23 20:01:19 +05:30
Anand Doshi
620145c59a [minor] patches for restriction 2013-12-23 20:01:19 +05:30
Anand Doshi
bcf2422848 [minor] user properties and leave application 2013-12-23 20:01:19 +05:30
Anand Doshi
83638b5f05 [minor] move warehouse user to restrictions 2013-12-23 20:01:18 +05:30
Rushabh Mehta
57518fc5f1 [cleanup] [minor] default+cache related 2013-12-23 20:01:18 +05:30
Rushabh Mehta
fea93d0f65 [cleanup] [minor] added webnotes.model.delete_doc (module) 2013-12-23 20:01:18 +05:30
Rushabh Mehta
b1ea6b1f66 [permissions] Added Test Cases 2013-12-23 20:01:18 +05:30
Rushabh Mehta
497d363fc1 [permission model] Redesign
Conflicts:

	patches/patch_list.py
2013-12-23 20:01:18 +05:30
Pratik Vyas
74f64b67db Merge branch 'develop' 2013-12-23 17:31:22 +05:30
Pratik Vyas
2117afba07 bumped to version 3.3.7 2013-12-23 18:01:22 +06:00
Nabin Hait
e409d0d70b Merge pull request #1227 from akhileshdarjee/hotfix
[fix] [minor] update item price on change of item details
2013-12-23 03:42:08 -08:00
Nabin Hait
50125b35d2 Merge pull request #1228 from nabinhait/hotfix
Hotfix
2013-12-23 03:41:13 -08:00
Nabin Hait
c38527ef5f Show general/stock ledger button links to new query reports 2013-12-23 17:07:57 +05:30
Nabin Hait
facde47c6c Stock ledger report filter by item and brand 2013-12-23 17:06:46 +05:30
Nabin Hait
20dc79ac99 General ledger filter by account group 2013-12-23 17:06:10 +05:30
Akhilesh Darjee
61da43f793 [fix] [minor] update modified date and time to item price when updating item and price list 2013-12-23 16:24:33 +05:30
Akhilesh Darjee
af30c3fdfd [fix] [minor] update item price on change of item details 2013-12-23 16:13:42 +05:30
Rushabh Mehta
b63d550a70 Added Applications page and fixed issues in translations and hooks 2013-12-23 16:09:00 +05:30
Akhilesh Darjee
b09dc46e68 [flat discount] first commit 2013-12-23 15:49:08 +05:30
Pratik Vyas
68888a21ec Merge branch 'develop' 2013-12-23 14:41:05 +05:30
Pratik Vyas
7d7661c9ed bumped to version 3.3.6 2013-12-23 15:11:05 +06:00
Nabin Hait
fbda00eef0 Merge pull request #1225 from nabinhait/hotfix
Fixes in Stock ageing report
2013-12-22 22:53:13 -08:00
Nabin Hait
a0212d8014 Fixes in Stock ageing report 2013-12-23 12:21:14 +05:30
Nabin Hait
c8d2604afc Merge pull request #1224 from nabinhait/hotfix
Incoming rate for stock ledger entry should not be rounded
2013-12-22 22:50:41 -08:00
Nabin Hait
861453279d Incoming rate for stock ledger entry should not be rounded 2013-12-23 12:14:45 +05:30
Pratik Vyas
be96600c1c Merge branch 'develop' 2013-12-20 15:15:45 +05:30
Pratik Vyas
8709c51e84 bumped to version 3.3.5 2013-12-20 15:45:45 +06:00
Pratik Vyas
6fc0262cb6 Merge pull request #1220 from nabinhait/hotfix
Fixes in stock projected qty report
2013-12-20 01:36:27 -08:00
Nabin Hait
4b5ced03ec Fixes in merge functions 2013-12-20 12:26:48 +05:30
Nabin Hait
a888e29b0a Fixes in stock projected qty report 2013-12-20 12:18:37 +05:30
Pratik Vyas
ae2e8996b0 Merge branch 'develop' 2013-12-19 19:18:57 +05:30
Pratik Vyas
1c2bbd77a0 bumped to version 3.3.4 2013-12-19 19:48:56 +06:00
Nabin Hait
2ffba327ac Merge pull request #1218 from nabinhait/hotfix
Opening and closing balance in general ledger report
2013-12-19 05:48:07 -08:00
Pratik Vyas
4764f3ea1d Merge pull request #1217 from pdvyas/patch-reload-packed_item
reload packed item in patch, for migration from slow branch
2013-12-19 05:46:52 -08:00
Pratik Vyas
104deeebb5 reload packed item in patch, for migration from slow branch 2013-12-19 19:16:00 +05:30
Nabin Hait
2a9e4e9a32 Opening and closing balance in general ledger report 2013-12-19 19:11:53 +05:30
Rushabh Mehta
2b08985e16 Translations redesigned webnotes/wnframework#351 2013-12-19 18:27:48 +05:30
Pratik Vyas
a38a7b8e76 Merge pull request #1214 from anandpdoshi/hotfix-scheduler-errors
Send Email Digest, only if there is atleast one update for selected cate...
2013-12-19 01:12:17 -08:00
Anand Doshi
88eedb7397 Send Email Digest, only if there is atleast one update for selected categories 2013-12-19 14:07:39 +05:30
Pratik Vyas
605cc93c90 Merge branch 'develop' 2013-12-19 11:42:38 +05:30
Pratik Vyas
1644fce273 bumped to version 3.3.3 2013-12-19 12:12:38 +06:00
Pratik Vyas
8cc2bf7fcf Merge pull request #1213 from pdvyas/email-digest-error
fix company email digest patch
2013-12-18 22:12:03 -08:00
Pratik Vyas
fe6409debf fix company email digest patch 2013-12-19 11:41:10 +05:30
Nabin Hait
edc58619d1 Merge pull request #1211 from nabinhait/hotfix
fixes in item validation
2013-12-18 21:28:25 -08:00
Nabin Hait
85800fa929 fixes in item validation 2013-12-19 10:57:43 +05:30
Nabin Hait
60ec0128a2 Merge pull request #1205 from akhileshdarjee/master
[fix] [issue] webnotes/erpnext#1191 - set expected delivery date in production order
2013-12-18 20:03:36 -08:00
Nabin Hait
90e0700e24 Merge pull request #1208 from nabinhait/hotfix
fixes in stock projected qty report
2013-12-18 05:46:03 -08:00
Nabin Hait
48156e3d8b fixes in stock projected qty report 2013-12-18 18:51:20 +05:30
Nabin Hait
8b353e5e15 Merge pull request #1207 from nabinhait/hotfix
Removed sales_order_no from no_copy in material request item
2013-12-18 01:24:02 -08:00
Nabin Hait
fcbd4d7638 Removed sales_order_no from no_copy in material request item 2013-12-18 14:53:36 +05:30
Pratik Vyas
9409efe02a Merge branch 'develop' 2013-12-18 14:40:36 +05:30
Pratik Vyas
b645a217fd bumped to version 3.3.2 2013-12-18 15:10:36 +06:00
Pratik Vyas
ef295d2977 Merge pull request #1203 from anandpdoshi/hotfix-scheduler-errors
[fix] scheduler error email digest
2013-12-18 01:10:12 -08:00
Akhilesh Darjee
2d0e31b479 [fix] [minor] merge conflict fixed 2013-12-18 13:32:37 +05:30
Akhilesh Darjee
2678ed181a [fix] [issue] webnotes/erpnext#1191 - set expected delivery date in production order 2013-12-18 13:28:40 +05:30
Anand Doshi
1fce0b1f79 [fix] scheduler error email digest 2013-12-18 13:22:18 +05:30
Pratik Vyas
649660d9f0 Merge branch 'develop' 2013-12-18 12:19:28 +05:30
Pratik Vyas
797e0713ea bumped to version 3.3.1 2013-12-18 12:49:28 +06:00
Nabin Hait
6a0ffabbd0 Merge pull request #1201 from nabinhait/hotfix
Hotfix
2013-12-17 21:48:18 -08:00
Nabin Hait
56f58cfa68 Merge pull request #1202 from anandpdoshi/hotfix-backup-manager
[fix] backup manager
2013-12-17 21:48:03 -08:00
Anand Doshi
677ef0c3cf [fix] backup manager 2013-12-18 10:56:43 +05:30
Nabin Hait
64367a905a Merge branch 'develop' of github.com:webnotes/erpnext into hotfix 2013-12-18 10:42:04 +05:30
Nabin Hait
c565de2c12 Removed schedule_date from no_copy in purchase receipt item 2013-12-18 10:41:29 +05:30
Nabin Hait
908f2dc0fd Merge pull request #1200 from anandpdoshi/hotfix-scheduler-errors
[patch] Email Digest
2013-12-17 20:13:56 -08:00
Anand Doshi
0b1a8e13fd [patch] Email Digest 2013-12-18 07:53:49 +05:30
Pratik Vyas
a1ae0270e3 Merge branch 'develop' 2013-12-17 18:03:05 +05:30
Pratik Vyas
4d806c5fcb bumped to version 3.3.0 2013-12-17 18:33:05 +06:00
Anand Doshi
cf6e13d2fe Merge pull request #1148 from nabinhait/reports
Reports
2013-12-17 04:26:36 -08:00
Nabin Hait
ceb940ec17 [reports] [minor] patch to delete old report files 2013-12-17 17:53:05 +05:30
Nabin Hait
a4080eb840 [fix] [minor] item validation 2013-12-17 17:45:50 +05:30
Nabin Hait
90f33c3249 Merge pull request #1196 from nabinhait/hotfix
[fix] [minor] precision in gl entry based on currency format
2013-12-17 03:20:02 -08:00
Nabin Hait
592d27e7f1 [reports] general ledger: grid report to script report 2013-12-17 16:20:11 +05:30
Nabin Hait
8b7da55617 Merge branch 'develop' of github.com:webnotes/erpnext into reports 2013-12-17 16:10:06 +05:30
Nabin Hait
57e89ff6f1 [reports] general ledger: grid report to script report 2013-12-17 16:09:21 +05:30
Nabin Hait
8a98fc7e79 Merge pull request #1194 from akhileshdarjee/master
[feature] create material request sales order wise from production planning tool
2013-12-17 01:39:19 -08:00
Akhilesh Darjee
d94bab0e1d [fix] [minor] sql query related changes in purchase common 2013-12-17 15:05:37 +05:30
Nabin Hait
9d6e10c910 [fix] [minor] precision in gl entry based on currency format 2013-12-17 14:45:55 +05:30
Akhilesh Darjee
9ee20e8f5a [fix] [minor] material request sales order wise through production planning tool 2013-12-17 13:07:00 +05:30
Pratik Vyas
3ddd0d89df Merge pull request #1181 from anandpdoshi/hotfix-allow-roles
[minor] [fix] allow roles
2013-12-16 22:19:34 -08:00
Pratik Vyas
60ec93811e Merge pull request #1190 from anandpdoshi/hotfix-scheduler-errors
[minor] [scheduler] send scheduler errors as email digest
2013-12-16 22:18:43 -08:00
Akhilesh Darjee
dbb69dacff Merge branch 'master' of github.com:webnotes/erpnext 2013-12-16 19:33:20 +05:30
Akhilesh Darjee
9ff9dafd00 [feature] create material request sales order wise from production planning tool 2013-12-16 19:32:22 +05:30
Rushabh Mehta
91e9822f65 fixed test cases webnotes/wnframework#351 2013-12-16 18:43:42 +05:30
Nabin Hait
ea4f66791e Merge branch 'develop' of github.com:webnotes/erpnext into reports 2013-12-16 15:18:34 +05:30
Anand Doshi
b0636edaf7 [minor] [scheduler] send scheduler errors as email digest 2013-12-16 13:56:03 +05:30
Rushabh Mehta
c652a6254f Rewrote hooks for scheduler, notifications, boot, session, login, webpage webnotes/wnframework#351 2013-12-16 12:48:38 +05:30
Nabin Hait
c55b55d959 Merge pull request #1186 from nabinhait/hotfix
[fix] [minor] email digest: consider only submitted documents to get new...
2013-12-14 22:55:17 -08:00
Nabin Hait
585e936263 [fix] [minor] email digest: consider only submitted documents to get new sum of amount 2013-12-15 12:17:40 +05:30
Pratik Vyas
42c7c5b547 Merge branch 'develop' 2013-12-14 17:59:58 +05:30
Pratik Vyas
ba31ecc611 bumped to version 3.2.3 2013-12-14 18:29:58 +06:00
Nabin Hait
2d46d3cd04 Merge pull request #1184 from nabinhait/hotfix
[fix] [minor] match condition fixes for customer and supplier
2013-12-14 04:06:46 -08:00
Nabin Hait
1d361cf26c [minor] merge conflict 2013-12-14 17:36:22 +05:30
Nabin Hait
45a35ced33 [fix] [minor] match condition fixes for customer and supplier 2013-12-14 17:29:42 +05:30
Nabin Hait
fe5dcd49ae Merge pull request #1183 from nabinhait/hotfix
[fix] [minor] update naming series
2013-12-14 03:50:02 -08:00
Nabin Hait
70cd146bb5 [fix] [minor] update naming series 2013-12-14 17:16:21 +05:30
Pratik Vyas
99e641e4c7 Merge branch 'develop' 2013-12-14 00:45:37 +05:30
Pratik Vyas
dea59996d8 bumped to version 3.2.2 2013-12-14 01:15:37 +06:00
Rushabh Mehta
30430796c7 notifications via hooks webnotes/wnframework#351 2013-12-13 15:33:40 +05:30
Rushabh Mehta
6de403f2be added manifest, hooks and fixed requires webnotes/wnframework#351 2013-12-13 14:10:14 +05:30
Anand Doshi
64c512dd61 [minor] [fix] allow roles 2013-12-13 12:34:52 +05:30
Nabin Hait
5534b59d07 Merge pull request #1180 from nabinhait/hotfix
[fix] [minor] fixes in packed item
2013-12-12 22:11:22 -08:00
Nabin Hait
1251a93fc5 [fix] [minor] fixes in packed item 2013-12-13 11:40:16 +05:30
Pratik Vyas
52e5b84584 Merge branch 'develop' 2013-12-12 19:15:30 +05:30
Pratik Vyas
f943dc5dc1 bumped to version 3.2.1 2013-12-12 19:45:30 +06:00
Rushabh Mehta
1f84799f2d install, web serving, session booting webnotes/wnframework#351 2013-12-12 19:12:19 +05:30
Nabin Hait
e0bc9a713e Merge pull request #1179 from nabinhait/hotfix
[cleanup] [minor] carry forwarded leaves field read only and depends on ...
2013-12-12 04:16:52 -08:00
Nabin Hait
f6e06311be [cleanup] [minor] carry forwarded leaves field read only and depends on carry forward checkbox 2013-12-12 17:45:29 +05:30
Nabin Hait
050be0248a Merge pull request #1178 from nabinhait/hotfix
[fix] [minor] series skipping issue in salary manager
2013-12-12 03:43:59 -08:00
Nabin Hait
c10c0c5066 [fix] [minor] series skipping issue in salary manager 2013-12-12 17:13:22 +05:30
Nabin Hait
bdb83b1b5a Merge pull request #1177 from nabinhait/hotfix1
[fix] [minor] payment to invoice patching tool
2013-12-12 01:33:42 -08:00
Nabin Hait
c3f2fb7355 [fix] [minor] payment to invoice patching tool 2013-12-12 15:01:12 +05:30
Rushabh Mehta
d2dd83c3a3 fixed template loader webnotes/wnframework#351 2013-12-12 13:57:58 +05:30
Pratik Vyas
a6db546457 Merge branch 'develop' 2013-12-12 13:09:21 +05:30
Pratik Vyas
6ad8973538 bumped to version 3.2.0 2013-12-12 13:39:21 +06:00
Nabin Hait
2e66a842bb Merge pull request #1170 from akhileshdarjee/master
[fix] [minor] rename fix for customer and supplier
2013-12-11 23:29:18 -08:00
Nabin Hait
ca02db5006 Merge pull request #1175 from nabinhait/hotfix
[fix] [minor] Negative outstanding validation for JV against JV
2013-12-11 23:22:28 -08:00
Nabin Hait
13fc64d732 [fix] [minor] Negative outstanding validation for JV against JV 2013-12-12 12:50:42 +05:30
Akhilesh Darjee
7d4c2d62bf [fix] [minor] allowed renaming for address and contact 2013-12-12 12:32:43 +05:30
Nabin Hait
ffa938a3fb Merge pull request #1174 from nabinhait/hotfix
[fix] [minor] convert serial no to upper case for comparing
2013-12-11 22:28:50 -08:00
Nabin Hait
9d835a039a [fix] [minor] convert serial no to upper case for comparing 2013-12-12 11:56:56 +05:30
Pratik Vyas
1b23208779 [minor] get bundle working, almost 2013-12-12 10:44:38 +05:30
Akhilesh Darjee
229b246d6d [fix] [minor] production planning tool clear sales order table 2013-12-11 18:49:11 +05:30
Rushabh Mehta
39bb8e2ed4 step 0: install 2013-12-11 15:32:14 +05:30
Rushabh Mehta
e460aa277b added setup.py 2013-12-11 11:32:21 +05:30
Akhilesh Darjee
42a8fc2ee3 [fix] [minor] stashed sales_invoice.txt 2013-12-11 11:15:03 +05:30
Rushabh Mehta
b234a3545a moved config.json inside erpnext 2013-12-11 10:55:55 +05:30
Rushabh Mehta
afea58b7a1 moved modules inside erpnext folder 2013-12-11 10:43:52 +05:30
Akhilesh Darjee
f0dad52aaa [fix] [minor] merge conflict fix 2013-12-10 18:11:31 +05:30
Akhilesh Darjee
aebb9f422b [fix] [minor] merge conflict fixes 2013-12-10 18:01:18 +05:30
Akhilesh Darjee
4e677a3f52 [fix] [minor] stashed bom.txt 2013-12-10 15:23:07 +05:30
Akhilesh Darjee
abefa3fd40 [fix] [minor] supplier & customer rename fix 2013-12-10 14:22:52 +05:30
Akhilesh Darjee
5d3da6c095 [fix] [minor] rename fix for customer and supplier 2013-12-10 11:18:08 +05:30
Pratik Vyas
ba82163d53 Merge develop for release 2013-12-09 17:16:05 +05:30
Pratik Vyas
e4bb2ba158 bumped to version 3.1.2 2013-12-09 17:41:11 +06:00
Anand Doshi
c9df05126a Merge pull request #1167 from akhileshdarjee/master
[fix] [minor] customer name visibility fixed in sales invoice
2013-12-09 03:03:39 -08:00
Akhilesh Darjee
5ce1b8b8f9 [fix] [minor] customer name visibility fixed in sales invoice 2013-12-09 16:29:04 +05:30
Akhilesh Darjee
7b1d9409f1 [fix] [minor] remove email patch 2013-12-09 15:57:26 +05:30
Akhilesh Darjee
a652347bd1 [fix] [minor] customer_name not visible in sales invoice 2013-12-09 15:52:47 +05:30
Anand Doshi
dc68b2e7ab Merge pull request #1154 from anandpdoshi/hotfix
[minor] added simplified and traditional chinese in languages list
2013-12-09 00:43:25 -08:00
Anand Doshi
46b18475a3 Merge pull request #1157 from pdvyas/slow-migration-patch-fix
[minor] make slow branch migratable to master
2013-12-08 22:39:29 -08:00
Akhilesh Darjee
d9255abd46 [fix] [minor] set send_print_in_body_and_attachment in email settings 2013-12-06 18:49:48 +05:30
Nabin Hait
4a8930fc67 [report]general ledger report migrated to script report 2013-12-06 18:07:23 +05:30
Nabin Hait
c313ca99ff [report]general ledger report migrated to script report 2013-12-06 16:36:23 +05:30
Nabin Hait
86da17d5d9 [minor] removed mandatory validation in server side 2013-12-06 13:23:31 +05:30
Nabin Hait
ce2dfadfbd Merge branch 'develop' of github.com:webnotes/erpnext into reports 2013-12-06 12:10:37 +05:30
Pratik Vyas
d701e83961 [minor] make slow branch migratable to master 2013-12-05 18:05:07 +05:30
Akhilesh Darjee
afc44cf54e [fix] [minor] email settings - set send print in body and attachment 2013-12-05 17:42:53 +05:30
Anand Doshi
e587c689a3 [minor] added simplified and traditional chinese in languages list 2013-12-05 13:04:24 +05:30
Nabin Hait
01d2811ccd [report] migrated stock level report to script report and renamed to Stock Projected Qty 2013-12-04 19:16:50 +05:30
Nabin Hait
690c75fa0d [report] migrated stock level report to script report and renamed to Stock Projected Qty 2013-12-04 19:16:32 +05:30
Nabin Hait
462401c4df [minor] fixed conflict 2013-12-04 17:26:22 +05:30
Nabin Hait
1b5de63163 Merge branch 'hotfix' into reports 2013-12-04 17:23:45 +05:30
Nabin Hait
9b0a6d426c [patch] [minor] deleted old stock ledger and stock ageing page 2013-12-04 17:18:05 +05:30
Nabin Hait
bc6df5c71b [patch] [minor] deleted old stock ledger and stock ageing page 2013-12-04 16:42:23 +05:30
Nabin Hait
47e40242bd [minor] removed old stock ageing grid report 2013-12-02 23:13:36 +05:30
Nabin Hait
7eb90d3d5c Stock Ageing report migated to Script report 2013-12-02 20:12:18 +05:30
2735 changed files with 259092 additions and 303903 deletions

2
.gitignore vendored
View File

@@ -5,3 +5,5 @@ conf.py
locale
latest_updates.json
.wnf-lang-status
*.egg-info
dist/

31
.travis.yml Normal file
View File

@@ -0,0 +1,31 @@
language: python
python:
- "2.7"
services:
- mysql
install:
- sudo service mysql stop
- sudo apt-get install python-software-properties
- sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
- sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/5.5/ubuntu precise main'
- sudo apt-get update
- sudo apt-get purge -y mysql-common
- sudo apt-get install mariadb-server mariadb-common libmariadbclient-dev
- CFLAGS=-O0 pip install git+https://github.com/frappe/frappe.git@develop &&
- pip install --editable .
script:
- cd ./test_sites/
- frappe --use test_site
- frappe --reinstall
- frappe --install_app erpnext --verbose
- frappe -b
- frappe --serve_test &
- frappe --verbose --run_tests --app erpnext
before_script:
- mysql -e 'create database test_frappe'
- echo "USE mysql;\nCREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe';\nFLUSH PRIVILEGES;\n" | mysql -u root

19
MANIFEST.in Normal file
View File

@@ -0,0 +1,19 @@
include MANIFEST.in
include requirements.txt
include *.json
include *.md
include *.py
include *.txt
include .travis.yml
recursive-include erpnext *.txt
recursive-include erpnext *.css
recursive-include erpnext *.csv
recursive-include erpnext *.html
recursive-include erpnext *.ico
recursive-include erpnext *.js
recursive-include erpnext *.json
recursive-include erpnext *.md
recursive-include erpnext *.png
recursive-include erpnext *.py
recursive-include erpnext *.svg
recursive-exclude * *.pyc

View File

@@ -1,10 +1,10 @@
# ERPNext - Open Source ERP for small, medium sized businesses
# ERPNext - Open Source ERP for small, medium sized businesses [![Build Status](https://travis-ci.org/frappe/erpnext.png)](https://travis-ci.org/frappe/erpnext)
[https://erpnext.com](https://erpnext.com)
Includes Accounting, Inventory, CRM, Sales, Purchase, Projects, HRMS. Built on Python / MySQL.
ERPNext is built on [wnframework](https://github.com/webnotes/wnframework)
ERPNext is built on [frappe](https://github.com/frappe/frappe)
- [User Guide](http://erpnext.org/user-guide.html)
- [Getting Help](http://erpnext.org/getting-help.html)
@@ -13,28 +13,21 @@ ERPNext is built on [wnframework](https://github.com/webnotes/wnframework)
---
### Development install
Use the bench, https://github.com/frappe/frappe-bench.
### Admin Login
1. go to "/login"
1. Administrator user name: "Administrator"
1. Administrator passowrd "admin"
### Download and Install
##### Virtual Image:
- [ERPNext Download](http://erpnext.com/erpnext-download)
##### On Linux:
1. Switch to root user using `sudo su`
1. create a folder where you want to install erpnext
1. go to the new folder
1. `wget https://raw.github.com/webnotes/erpnext/master/install_erpnext.py`
1. `python install_erpnext.py`
[See installation notes](https://github.com/webnotes/erpnext/wiki/How-to-Install-ERPNext)
##### Patch and update
To patch and update from the latest git repository the erpnext folder and run.
You will have to set your origin in git remote
$ lib/wnf.py --update origin master
- [ERPNext Download](http://erpnext.com/download)
---
@@ -42,7 +35,7 @@ You will have to set your origin in git remote
GNU/General Public License (see LICENSE.txt)
The ERPNext code is licensed as GNU General Public License (v3) and the Documentation is licensed as Creative Commons (CC-BY-SA-3.0) and the copyright is owned by Web Notes Technologies Pvt Ltd (Web Notes) and Contributors.
The ERPNext code is licensed as GNU General Public License (v3) and the Documentation is licensed as Creative Commons (CC-BY-SA-3.0) and the copyright is owned by Web Notes Technologies Pvt Ltd (Web Notes) and Contributors.
---
@@ -67,7 +60,7 @@ We will grant permission to use the ERPNext name and logo for projects that meet
- The primary purpose of your project is to promote the spread and improvement of the ERPNext software.
- Your project is non-commercial in nature (it can make money to cover its costs or contribute to non-profit entities, but it cannot be run as a for-profit project or business).
Your project neither promotes nor is associated with entities that currently fail to comply with the GPL license under which ERPNext is distributed.
- If your project meets these criteria, you will be permitted to use the ERPNext name and logo to promote your project in any way you see fit with one exception: Please do not use ERPNext as part of a domain name.
- If your project meets these criteria, you will be permitted to use the ERPNext name and logo to promote your project in any way you see fit with one exception: Please do not use ERPNext as part of a domain name.
Use of the ERPNext name and logo is additionally allowed in the following situations:

View File

@@ -1,21 +0,0 @@
[
{
"owner": "Administrator",
"docstatus": 0,
"creation": "2012-04-11 13:16:56",
"modified_by": "Administrator",
"modified": "2012-04-13 12:24:20"
},
{
"doc_type": "Journal Voucher",
"name": "__common__",
"module": "Accounts",
"doctype": "Print Format",
"html": "<!-- p.big {line-height: 200%} .noborder td { border: 0px solid #fff; } -->\n<div style=\"position: relative;\">\n<h3><script>doc.company</script><br /> <br /> \n<hr />\nPAYMENT ADVICE</h3>\n<table class=\"noborder\" style=\"width: 100%;\">\n<tbody>\n<tr>\n<td style=\"vertical-align: top;\" width=\"50%\">To :<br />\n<script type=\"text/javascript\">// <![CDATA[\ndoc.pay_to_recd_from\n// ]]></script>\n</td>\n<td width=\"50%\">\n<table class=\"noborder\" width=\"100%\">\n<tbody>\n<tr>\n<td width=\"30%\">Voucher No :</td>\n<td width=\"70%\">\n<script type=\"text/javascript\">// <![CDATA[\ndoc.name\n// ]]></script>\n</td>\n</tr>\n<tr>\n<td width=\"30%\">Voucher Date :</td>\n<td width=\"70%\">\n<script type=\"text/javascript\">// <![CDATA[\ndate.str_to_user(doc.voucher_date)\n// ]]></script>\n</td>\n</tr>\n<tr>\n<td width=\"30%\">Cheque No :</td>\n<td width=\"70%\">\n<script type=\"text/javascript\">// <![CDATA[\ndate.str_to_user(doc.cheque_no)\n// ]]></script>\n</td>\n</tr>\n<tr>\n<td width=\"30%\">Cheque Date :</td>\n<td width=\"70%\">\n<script type=\"text/javascript\">// <![CDATA[\ndate.str_to_user(doc.cheque_date)\n// ]]></script>\n</td>\n</tr>\n</tbody>\n</table>\n</td>\n</tr>\n</tbody>\n</table>\n<br /> <strong>We are pleased to enclose our cheque in full/part Settlement of your under noted bills</strong> <br /> \n<hr />\n<table class=\"noborder\" width=\"100%\">\n<tbody>\n<tr>\n<td width=\"70%\">&nbsp;</td>\n<td width=\"15%\">Total :</td>\n<td class=\"pos_left\" width=\"15%\">\n<script type=\"text/javascript\">// <![CDATA[\ndoc.total_amount\n// ]]></script>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">Narration :\n<script type=\"text/javascript\">// <![CDATA[\nreplace_newlines(doc.remark)\n// ]]></script>\n<br /><br /><br /></td>\n</tr>\n</tbody>\n</table>\n<div style=\"position: absolute; top: 14cm; left: 0cm;\">Prepared By</div>\n<div style=\"position: absolute; top: 14cm; left: 5.5cm;\">Authorised Signatory</div>\n<div style=\"position: absolute; top: 14cm; left: 11cm;\">Received Payment as Above</div>\n<div style=\"position: absolute; top: 16.4cm; left: 5.9cm;\"><strong>_____________</strong></div>\n<div style=\"position: absolute; top: 16.7cm; left: 6cm;\"><strong>A/c Payee</strong></div>\n<div style=\"position: absolute; top: 16.7cm; left: 5.9cm;\"><strong>_____________</strong></div>\n<div style=\"position: absolute; top: 16.9cm; left: 12cm;\">\n<script type=\"text/javascript\">// <![CDATA[\ndate.str_to_user(doc.cheque_date)\n// ]]></script>\n</div>\n<div style=\"position: absolute; top: 17.9cm; left: 1cm;\">\n<script type=\"text/javascript\">// <![CDATA[\ndoc.pay_to_recd_from\n// ]]></script>\n</div>\n<div style=\"position: absolute; top: 18.6cm; left: 1cm; width: 7cm;\">\n<script type=\"text/javascript\">// <![CDATA[\ndoc.total_amount_in_words\n// ]]></script>\n</div>\n<div style=\"position: absolute; top: 19.7cm; left: 12cm;\">\n<script type=\"text/javascript\">// <![CDATA[\ndoc.total_amount\n// ]]></script>\n</div>\n</div>",
"standard": "Yes"
},
{
"name": "Cheque Printing Format",
"doctype": "Print Format"
}
]

View File

@@ -1,22 +0,0 @@
[
{
"creation": "2011-12-21 11:08:55",
"docstatus": 0,
"modified": "2013-09-13 17:17:47",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doc_type": "Sales Invoice",
"doctype": "Print Format",
"html": "<html>\n<head>\n<!--Item Table, Totals and Other Charges-->\n<script>\nfunction get_print_format() {\n var oc = getchildren('Sales Invoice Item', doc.name, 'entries');\n\tvar rows = '<table width=\"100%\" cellpadding=\"0\" class=\"cart\">\\\n <tr>\\\n <td colspan=\"3\"><hr></td>\\\n </tr>\\\n <tr>\\\n <td width=\"60%\" align=\"left\">ITEM NAME.</td>\\\n <td width=\"10%\" align=\"right\">QTY</td>\\\n <td width=\"30%\" align=\"right\">AMOUNT</td>\\\n </tr>\\\n <tr>\\\n <td colspan=\"3\"><hr></td>\\\n </tr>';\n\tfor (var x=0; x<oc.length; x++) {\n console.log(oc[x].item_code!=oc[x].item_name);\n\t\trows += '<tr>\\\n <td align=\"left\">' + oc[x].item_code + \n (oc[x].item_code!=oc[x].item_name ? ('<br>' + oc[x].item_name) : '') + '</td>\\\n <td align=\"right\" style=\"vertical-align:top;\">' + oc[x].qty + '</td>\\\n <td align=\"right\" valign=\"top\">' + format_currency(oc[x].export_amount, doc.currency) + '</td>\\\n </tr>';\n\t}\n rows += '<tr>\\\n <td colspan=\"3\"><hr></td>\\\n </tr>\\\n <tr>\\\n <td colspan=\"2\" align=\"right\">Net Total</td>\\\n <td align=\"right\">' + format_currency(doc.net_total_export, doc.currency) + '</td>\\\n </tr>';\n if (doc.other_charges_total_export != 0) {\n var taxes = wn.model.get_children(\"Sales Taxes and Charges\", doc.name, \"other_charges\", \"Sales Invoice\");\n\t\t$.each(taxes, function(i, d) {\n\t\t\trows += '<tr>\\\n \t\t\t\t<td colspan=\"2\" align=\"right\">' + d.description + '</td>\\\n \t\t\t\t<td style=\"text-align: right;\">' + format_currency(d.tax_amount / doc.conversion_rate, doc.currency) + '</td>\\\n \t\t\t<tr>';\n\t\t});\n }\n rows += '<tr>\\\n <td colspan=\"2\" align=\"right\" style=\"vertical-align:middle;\">Grand Total</td>\\\n <td align=\"right\"><hr width=\"90%\" align=\"right\">' + format_currency(doc.grand_total_export, doc.currency) + '<br>\\\n <hr width=\"90%\" align=\"right\"></td>\\\n </tr>\\\n <tr>\\\n <td align=\"center\" colspan=\"3\">Thank You. Please visit again.</td>\\\n </tr>\\\n </table>';\n\treturn rows;\n}\n</script>\n<style>\n table, tr, td, div, p {\n font-family: Monospace;\n line-height: 200%;\n }\n h1, h2, h3, h4, h5, h6 {\n text-align: center;\n }\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 4in;\n\t\t}\n\t}\n</style>\n</head>\n\n<body>\n<table width=\"100%\" cellpadding=\"4\">\n <tr>\n <td align=\"left\">RECEIPT NO: <script>doc.name</script></td>\n <td align=\"right\">DATE: <script>date.str_to_user(doc.posting_date)</script></td>\n </tr>\n <tr>\n <td>M/s <script>doc.customer</script></td>\n </tr>\n</table>\n<!--Item Table & Totals-->\n<div><script>get_print_format();</script></div>\n</body>\n</html>\n",
"module": "Accounts",
"name": "__common__",
"print_format_type": "Client",
"standard": "Yes"
},
{
"doctype": "Print Format",
"name": "POS Invoice"
}
]

View File

@@ -1,21 +0,0 @@
[
{
"creation": "2012-05-01 12:46:31",
"docstatus": 0,
"modified": "2013-01-21 18:40:20",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doc_type": "Journal Voucher",
"doctype": "Print Format",
"html": "<h3 align=\"center\"><script>doc.select_print_heading || \"Payment Receipt Note\"</script></h3>\n\n<table class='simpletable'>\n<tr>\n<td><b> Receipt No.: </b></td>\n<td><script>doc.name</script></td>\n</tr>\n<tr>\n<td><b> Date : </b></td>\n<td><script>date.str_to_user(doc.voucher_date)</script></td>\n</tr> \n<tr>\n<td><b> Remark: </b></td>\n<td><script> doc.remark </script></td>\n</tr>\n<tr>\n<td><b> Received From: </b></td>\n<td><b><script> doc.pay_to_recd_from </script></b></td>\n</tr>\n</table>\n<br>\n\n<div><b><script>doc.total_amount</script></b> </td></div><br>\n<div style=\"text-align:left\"><b><script>doc.total_amount_in_words</script></b></div><br>\n<br>\n<table class=\"noborder\">\n<tr>\n<td style = \"text-align = right;\"><h3>For <script>doc.company</script>,</h3><br><div>(Authorised Signatory)</div></td>\n</tr>\n</table>",
"module": "Accounts",
"name": "__common__",
"standard": "Yes"
},
{
"doctype": "Print Format",
"name": "Payment Receipt Voucher"
}
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,135 +0,0 @@
{%- if doc.letter_head -%}
{{ webnotes.conn.get_value("Letter Head", doc.letter_head, "content") }}
{%- endif -%}
<!-- Page Layout Settings -->
<div class='common page-header'>
<table class='header-table' cellspacing=0>
<thead>
<tr><td colspan="2"><h1>{{ doc.select_print_heading or 'Invoice' }}</h1></td></tr>
<tr><td colspan="2"><h3>{{ doc.name }}</h3></td></tr>
</thead>
<tbody>
<tr>
<td width=60%><table width=100% cellspacing=0><tbody>
<tr>
<td width=39%><b>Name</b></td>
<td>{{ doc.customer_name }}</td>
</tr>
<tr>
<td><b>Address</b></td>
<td>{{ doc.address_display.replace("\n", "<br>") }}</td>
</tr>
<tr>
<td><b>Contact</b></td>
<td>{{ doc.contact_display }}</td>
</tr>
</tbody></table></td>
<td><table width=100% cellspacing=0><tbody>
<tr>
<td width=40%><b>Invoice Date</b></td>
<td>{{ utils.formatdate(doc.posting_date) }}</td>
<tr>
{%- if doc.convert_into_recurring_invoice and doc.recurring_id -%}
<tr>
<td width=40%><b>Invoice Period</b></td>
<td>{{ (utils.formatdate(doc.invoice_period_from_date)) +
' to ' + utils.formatdate(doc.invoice_period_to_date) }}</td>
<tr>
{%- endif -%}
<tr>
<td><b>Due Date</b></td>
<td>{{ utils.formatdate(doc.due_date) }}</td>
<tr>
</tbody></table></td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
</div>
<div class='common page-body'>
<!--
Page Body will contain
+ table 2
- Sales Invoice Data
-->
<table class="table table-bordered">
<tbody>
<tr>
<th>Sr</th>
<th>Item Name</th>
<th>Description</th>
<th>Qty</th>
<th>UoM</th>
<th>Basic Rate</th>
<th>Amount</th>
</tr>
{%- for row in doclist.get({"doctype":"Sales Invoice Item"}) %}
<tr>
<td style="width: 3%;">{{ row.idx }}</td>
<td style="width: 20%;">{{ row.item_name }}</td>
<td style="width: 37%;">{{ row.description }}</td>
<td style="width: 5%; text-align: right;">{{ row.qty }}</td>
<td style="width: 5%;">{{ row.stock_uom }}</td>
<td style="width: 15%; text-align: right;">{{ utils.fmt_money(row.export_rate, currency=doc.currency) }}</td>
<td style="width: 15%; text-align: right;">{{ utils.fmt_money(row.export_amount, currency=doc.currency) }}</td>
</tr>
{% endfor -%}
</tbody>
</table>
</div>
<div class='common page-footer'>
<!--
Page Footer will contain
+ table 3
- Terms and Conditions
- Total Rounded Amount Calculation
- Total Rounded Amount in Words
-->
<table class='footer-table' width=100% cellspacing=0>
<thead>
</thead>
<tbody>
<tr>
<td width=60% style='padding-right: 10px;'>
<b>Terms, Conditions &amp; Other Information:</b><br />
{{ doc.terms }}
</td>
<td>
<table cellspacing=0 width=100%>
<tbody>
<tr>
<td>Net Total</td>
<td width=40% style="text-align: right;">{{
utils.fmt_money(doc.net_total_export, currency=doc.currency)
}}</td>
</tr>
{%- for charge in doclist.get({"doctype":"Sales Taxes and Charges"}) -%}
{%- if not charge.included_in_print_rate -%}
<tr>
<td>{{ charge.description }}</td>
<td style="text-align: right;">{{ utils.fmt_money(charge.tax_amount / doc.conversion_rate, currency=doc.currency) }}</td>
</tr>
{%- endif -%}
{%- endfor -%}
<tr>
<td>Grand Total</td>
<td style="text-align: right;">{{ utils.fmt_money(doc.grand_total_export, currency=doc.currency) }}</td>
</tr>
<tr style='font-weight: bold'>
<td>Rounded Total</td>
<td style="text-align: right;">{{ utils.fmt_money(doc.rounded_total_export, currency=doc.currency) }}</td>
</tr>
</tbody>
</table>
<br /><b>In Words</b><br />
<i>{{ doc.in_words_export }}</i>
</td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
</div>

View File

@@ -1,20 +0,0 @@
[
{
"creation": "2013-03-21 15:24:28",
"docstatus": 0,
"modified": "2013-03-21 15:26:21",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doc_type": "Sales Invoice",
"doctype": "Print Format",
"module": "Accounts",
"name": "__common__",
"standard": "Yes"
},
{
"doctype": "Print Format",
"name": "SalesInvoice"
}
]

View File

@@ -1,145 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
// Onload
// -----------------------------------------
cur_frm.cscript.onload = function(doc, cdt, cdn) {
}
// Refresh
// -----------------------------------------
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
if(doc.__islocal) {
msgprint(wn._("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', 'master_type', 'master_name',
'credit_days', 'credit_limit', 'tax_rate'], doc.group_or_ledger=='Ledger')
// disable fields
cur_frm.toggle_enable(['account_name', 'debit_or_credit', 'group_or_ledger',
'is_pl_account', 'company'], false);
if(doc.group_or_ledger=='Ledger') {
wn.model.with_doc("Accounts Settings", "Accounts Settings", function (name) {
var accounts_settings = wn.model.get_doc("Accounts Settings", name);
var display = accounts_settings["frozen_accounts_modifier"]
&& in_list(user_roles, accounts_settings["frozen_accounts_modifier"]);
cur_frm.toggle_display('freeze_account', display);
});
}
// read-only for root accounts
if(!doc.parent_account) {
cur_frm.perm = [[1,0,0], [1,0,0]];
cur_frm.set_intro(wn._("This is a root account and cannot be edited."));
} else {
// credit days and type if customer or supplier
cur_frm.set_intro(null);
cur_frm.toggle_display(['credit_days', 'credit_limit'], in_list(['Customer', 'Supplier'],
doc.master_type));
cur_frm.cscript.master_type(doc, cdt, cdn);
cur_frm.cscript.account_type(doc, cdt, cdn);
// show / hide convert buttons
cur_frm.cscript.add_toolbar_buttons(doc);
}
}
cur_frm.cscript.master_type = function(doc, cdt, cdn) {
cur_frm.toggle_display(['credit_days', 'credit_limit'], in_list(['Customer', 'Supplier'],
doc.master_type));
cur_frm.toggle_display('master_name', doc.account_type=='Warehouse' ||
in_list(['Customer', 'Supplier'], doc.master_type));
}
// Fetch parent details
// -----------------------------------------
cur_frm.add_fetch('parent_account', 'debit_or_credit', 'debit_or_credit');
cur_frm.add_fetch('parent_account', 'is_pl_account', 'is_pl_account');
// Hide tax rate based on account type
// -----------------------------------------
cur_frm.cscript.account_type = function(doc, cdt, cdn) {
if(doc.group_or_ledger=='Ledger') {
cur_frm.toggle_display(['tax_rate'], doc.account_type == 'Tax');
cur_frm.toggle_display('master_type', cstr(doc.account_type)=='');
cur_frm.toggle_display('master_name', doc.account_type=='Warehouse' ||
in_list(['Customer', 'Supplier'], doc.master_type));
}
}
// Hide/unhide group or ledger
// -----------------------------------------
cur_frm.cscript.add_toolbar_buttons = function(doc) {
cur_frm.appframe.add_button(wn._('Chart of Accounts'),
function() { wn.set_route("Accounts Browser", "Account"); }, 'icon-sitemap')
if (cstr(doc.group_or_ledger) == 'Group') {
cur_frm.add_custom_button(wn._('Convert to Ledger'),
function() { cur_frm.cscript.convert_to_ledger(); }, 'icon-retweet')
} else if (cstr(doc.group_or_ledger) == 'Ledger') {
cur_frm.add_custom_button(wn._('Convert to Group'),
function() { cur_frm.cscript.convert_to_group(); }, 'icon-retweet')
cur_frm.appframe.add_button(wn._('View Ledger'), function() {
wn.route_options = {
"account": doc.name,
"from_date": sys_defaults.year_start_date,
"to_date": sys_defaults.year_end_date
};
wn.set_route("general-ledger");
}, "icon-table");
}
}
// Convert group to ledger
// -----------------------------------------
cur_frm.cscript.convert_to_ledger = function(doc, cdt, cdn) {
return $c_obj(cur_frm.get_doclist(),'convert_group_to_ledger','',function(r,rt) {
if(r.message == 1) {
cur_frm.refresh();
}
});
}
// Convert ledger to group
// -----------------------------------------
cur_frm.cscript.convert_to_group = function(doc, cdt, cdn) {
return $c_obj(cur_frm.get_doclist(),'convert_ledger_to_group','',function(r,rt) {
if(r.message == 1) {
cur_frm.refresh();
}
});
}
cur_frm.fields_dict['master_name'].get_query = function(doc) {
if (doc.master_type || doc.account_type=="Warehouse") {
var dt = doc.master_type || "Warehouse";
return {
doctype: dt,
query: "accounts.doctype.account.account.get_master_name",
filters: {
"master_type": dt,
"company": doc.company
}
}
}
}
cur_frm.fields_dict['parent_account'].get_query = function(doc) {
return {
filters: {
"group_or_ledger": "Group",
"company": doc.company
}
}
}

View File

@@ -1,245 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt, fmt_money, cstr, cint
from webnotes import msgprint, _
get_value = webnotes.conn.get_value
class DocType:
def __init__(self,d,dl):
self.doc, self.doclist = d,dl
self.nsm_parent_field = 'parent_account'
def autoname(self):
self.doc.name = self.doc.account_name.strip() + ' - ' + \
webnotes.conn.get_value("Company", self.doc.company, "abbr")
def get_address(self):
return {
'address': webnotes.conn.get_value(self.doc.master_type,
self.doc.master_name, "address")
}
def validate(self):
self.validate_master_name()
self.validate_parent()
self.validate_duplicate_account()
self.validate_root_details()
self.validate_mandatory()
self.validate_warehouse_account()
self.validate_frozen_accounts_modifier()
if not self.doc.parent_account:
self.doc.parent_account = ''
def validate_master_name(self):
"""Remind to add master name"""
if self.doc.master_type in ('Customer', 'Supplier') or self.doc.account_type == "Warehouse":
if not self.doc.master_name:
msgprint(_("Please enter Master Name once the account is created."))
elif not webnotes.conn.exists(self.doc.master_type or self.doc.account_type,
self.doc.master_name):
webnotes.throw(_("Invalid Master Name"))
def validate_parent(self):
"""Fetch Parent Details and validation for account not to be created under ledger"""
if self.doc.parent_account:
par = webnotes.conn.sql("""select name, group_or_ledger, is_pl_account, debit_or_credit
from tabAccount where name =%s""", self.doc.parent_account)
if not par:
msgprint("Parent account does not exists", raise_exception=1)
elif par[0][0] == self.doc.name:
msgprint("You can not assign itself as parent account", raise_exception=1)
elif par[0][1] != 'Group':
msgprint("Parent account can not be a ledger", raise_exception=1)
elif self.doc.debit_or_credit and par[0][3] != self.doc.debit_or_credit:
msgprint("You can not move a %s account under %s account" %
(self.doc.debit_or_credit, par[0][3]), raise_exception=1)
if not self.doc.is_pl_account:
self.doc.is_pl_account = par[0][2]
if not self.doc.debit_or_credit:
self.doc.debit_or_credit = par[0][3]
def validate_max_root_accounts(self):
"""Raise exception if there are more than 4 root accounts"""
if webnotes.conn.sql("""select count(*) from tabAccount where
company=%s and ifnull(parent_account,'')='' and docstatus != 2""",
self.doc.company)[0][0] > 4:
webnotes.msgprint("One company cannot have more than 4 root Accounts",
raise_exception=1)
def validate_duplicate_account(self):
if self.doc.fields.get('__islocal') or not self.doc.name:
company_abbr = webnotes.conn.get_value("Company", self.doc.company, "abbr")
if webnotes.conn.sql("""select name from tabAccount where name=%s""",
(self.doc.account_name + " - " + company_abbr)):
msgprint("Account Name: %s already exists, please rename"
% self.doc.account_name, raise_exception=1)
def validate_root_details(self):
#does not exists parent
if webnotes.conn.exists("Account", self.doc.name):
if not webnotes.conn.get_value("Account", self.doc.name, "parent_account"):
webnotes.msgprint("Root cannot be edited.", raise_exception=1)
def validate_frozen_accounts_modifier(self):
old_value = webnotes.conn.get_value("Account", self.doc.name, "freeze_account")
if old_value and old_value != self.doc.freeze_account:
frozen_accounts_modifier = webnotes.conn.get_value( 'Accounts Settings', None,
'frozen_accounts_modifier')
if not frozen_accounts_modifier or \
frozen_accounts_modifier not in webnotes.user.get_roles():
webnotes.throw(_("You are not authorized to set Frozen value"))
def convert_group_to_ledger(self):
if self.check_if_child_exists():
msgprint("Account: %s has existing child. You can not convert this account to ledger" %
(self.doc.name), raise_exception=1)
elif self.check_gle_exists():
msgprint("Account with existing transaction can not be converted to ledger.",
raise_exception=1)
else:
self.doc.group_or_ledger = 'Ledger'
self.doc.save()
return 1
def convert_ledger_to_group(self):
if self.check_gle_exists():
msgprint("Account with existing transaction can not be converted to group.",
raise_exception=1)
elif self.doc.master_type or self.doc.account_type:
msgprint("Cannot covert to Group because Master Type or Account Type is selected.",
raise_exception=1)
else:
self.doc.group_or_ledger = 'Group'
self.doc.save()
return 1
# Check if any previous balance exists
def check_gle_exists(self):
return webnotes.conn.get_value("GL Entry", {"account": self.doc.name})
def check_if_child_exists(self):
return webnotes.conn.sql("""select name from `tabAccount` where parent_account = %s
and docstatus != 2""", self.doc.name)
def validate_mandatory(self):
if not self.doc.debit_or_credit:
msgprint("Debit or Credit field is mandatory", raise_exception=1)
if not self.doc.is_pl_account:
msgprint("Is PL Account field is mandatory", raise_exception=1)
def validate_warehouse_account(self):
if not cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")):
return
if self.doc.account_type == "Warehouse":
old_warehouse = cstr(webnotes.conn.get_value("Account", self.doc.name, "master_name"))
if old_warehouse != cstr(self.doc.master_name):
if old_warehouse:
self.validate_warehouse(old_warehouse)
if self.doc.master_name:
self.validate_warehouse(self.doc.master_name)
else:
webnotes.throw(_("Master Name is mandatory if account type is Warehouse"))
def validate_warehouse(self, warehouse):
if webnotes.conn.get_value("Stock Ledger Entry", {"warehouse": warehouse}):
webnotes.throw(_("Stock transactions exist against warehouse ") + warehouse +
_(" .You can not assign / modify / remove Master Name"))
def update_nsm_model(self):
"""update lft, rgt indices for nested set model"""
import webnotes
import webnotes.utils.nestedset
webnotes.utils.nestedset.update_nsm(self)
def on_update(self):
self.validate_max_root_accounts()
self.update_nsm_model()
def get_authorized_user(self):
# Check logged-in user is authorized
if webnotes.conn.get_value('Accounts Settings', None, 'credit_controller') \
in webnotes.user.get_roles():
return 1
def check_credit_limit(self, total_outstanding):
# Get credit limit
credit_limit_from = 'Customer'
cr_limit = webnotes.conn.sql("""select t1.credit_limit from tabCustomer t1, `tabAccount` t2
where t2.name=%s and t1.name = t2.master_name""", self.doc.name)
credit_limit = cr_limit and flt(cr_limit[0][0]) or 0
if not credit_limit:
credit_limit = webnotes.conn.get_value('Company', self.doc.company, 'credit_limit')
credit_limit_from = 'Company'
# If outstanding greater than credit limit and not authorized person raise exception
if credit_limit > 0 and flt(total_outstanding) > credit_limit \
and not self.get_authorized_user():
msgprint("""Total Outstanding amount (%s) for <b>%s</b> can not be \
greater than credit limit (%s). To change your credit limit settings, \
please update in the <b>%s</b> master""" % (fmt_money(total_outstanding),
self.doc.name, fmt_money(credit_limit), credit_limit_from), raise_exception=1)
def validate_trash(self):
"""checks gl entries and if child exists"""
if not self.doc.parent_account:
msgprint("Root account can not be deleted", raise_exception=1)
if self.check_gle_exists():
msgprint("""Account with existing transaction (Sales Invoice / Purchase Invoice / \
Journal Voucher) can not be deleted""", raise_exception=1)
if self.check_if_child_exists():
msgprint("Child account exists for this account. You can not delete this account.",
raise_exception=1)
def on_trash(self):
self.validate_trash()
self.update_nsm_model()
def before_rename(self, old, new, merge=False):
# Add company abbr if not provided
from setup.doctype.company.company import get_name_with_abbr
new_account = get_name_with_abbr(new, self.doc.company)
# Validate properties before merging
if merge:
val = list(webnotes.conn.get_value("Account", new_account,
["group_or_ledger", "debit_or_credit", "is_pl_account"]))
if val != [self.doc.group_or_ledger, self.doc.debit_or_credit, self.doc.is_pl_account]:
webnotes.throw(_("""Merging is only possible if following \
properties are same in both records.
Group or Ledger, Debit or Credit, Is PL Account"""))
return new_account
def after_rename(self, old, new, merge=False):
if not merge:
webnotes.conn.set_value("Account", new, "account_name",
" - ".join(new.split(" - ")[:-1]))
else:
from webnotes.utils.nestedset import rebuild_tree
rebuild_tree("Account", "parent_account")
def get_master_name(doctype, txt, searchfield, start, page_len, filters):
conditions = (" and company='%s'"% filters["company"]) if doctype == "Warehouse" else ""
return webnotes.conn.sql("""select name from `tab%s` where %s like %s %s
order by name limit %s, %s""" %
(filters["master_type"], searchfield, "%s", conditions, "%s", "%s"),
("%%%s%%" % txt, start, page_len), as_list=1)
def get_parent_account(doctype, txt, searchfield, start, page_len, filters):
return webnotes.conn.sql("""select name from tabAccount
where group_or_ledger = 'Group' and docstatus != 2 and company = %s
and %s like %s order by name limit %s, %s""" %
("%s", searchfield, "%s", "%s", "%s"),
(filters["company"], "%%%s%%" % txt, start, page_len), as_list=1)

View File

@@ -1,320 +0,0 @@
[
{
"creation": "2013-01-30 12:49:46",
"docstatus": 0,
"modified": "2013-09-24 11:22:18",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"allow_copy": 1,
"allow_rename": 1,
"description": "Heads (or groups) against which Accounting Entries are made and balances are maintained.",
"doctype": "DocType",
"document_type": "Master",
"icon": "icon-money",
"in_create": 1,
"module": "Accounts",
"name": "__common__",
"search_fields": "debit_or_credit, group_or_ledger"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Account",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"amend": 0,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Account",
"parentfield": "permissions",
"parenttype": "DocType",
"read": 1,
"report": 1,
"submit": 0
},
{
"doctype": "DocType",
"name": "Account"
},
{
"doctype": "DocField",
"fieldname": "properties",
"fieldtype": "Section Break",
"label": "Account Details",
"oldfieldtype": "Section Break"
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "account_name",
"fieldtype": "Data",
"in_filter": 1,
"label": "Account Name",
"no_copy": 1,
"oldfieldname": "account_name",
"oldfieldtype": "Data",
"read_only": 1,
"reqd": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "level",
"fieldtype": "Int",
"hidden": 1,
"label": "Level",
"oldfieldname": "level",
"oldfieldtype": "Int",
"print_hide": 1,
"read_only": 1
},
{
"default": "Ledger",
"doctype": "DocField",
"fieldname": "group_or_ledger",
"fieldtype": "Select",
"in_filter": 1,
"label": "Group or Ledger",
"oldfieldname": "group_or_ledger",
"oldfieldtype": "Select",
"options": "\nLedger\nGroup",
"read_only": 1,
"reqd": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "debit_or_credit",
"fieldtype": "Data",
"in_filter": 1,
"label": "Debit or Credit",
"oldfieldname": "debit_or_credit",
"oldfieldtype": "Data",
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "is_pl_account",
"fieldtype": "Select",
"in_filter": 1,
"label": "Is PL Account",
"oldfieldname": "is_pl_account",
"oldfieldtype": "Select",
"options": "Yes\nNo",
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"in_filter": 1,
"label": "Company",
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"read_only": 1,
"reqd": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "column_break1",
"fieldtype": "Column Break",
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "parent_account",
"fieldtype": "Link",
"label": "Parent Account",
"oldfieldname": "parent_account",
"oldfieldtype": "Link",
"options": "Account",
"search_index": 1
},
{
"description": "Setting Account Type helps in selecting this Account in transactions.",
"doctype": "DocField",
"fieldname": "account_type",
"fieldtype": "Select",
"in_filter": 1,
"label": "Account Type",
"oldfieldname": "account_type",
"oldfieldtype": "Select",
"options": "\nFixed Asset Account\nBank or Cash\nExpense Account\nTax\nIncome Account\nChargeable\nWarehouse",
"permlevel": 0,
"search_index": 0
},
{
"description": "Rate at which this tax is applied",
"doctype": "DocField",
"fieldname": "tax_rate",
"fieldtype": "Float",
"hidden": 0,
"label": "Rate",
"oldfieldname": "tax_rate",
"oldfieldtype": "Currency",
"reqd": 0
},
{
"description": "If the account is frozen, entries are allowed to restricted users.",
"doctype": "DocField",
"fieldname": "freeze_account",
"fieldtype": "Select",
"label": "Frozen",
"oldfieldname": "freeze_account",
"oldfieldtype": "Select",
"options": "No\nYes"
},
{
"doctype": "DocField",
"fieldname": "credit_days",
"fieldtype": "Int",
"hidden": 1,
"label": "Credit Days",
"oldfieldname": "credit_days",
"oldfieldtype": "Int",
"print_hide": 1
},
{
"doctype": "DocField",
"fieldname": "credit_limit",
"fieldtype": "Currency",
"hidden": 1,
"label": "Credit Limit",
"oldfieldname": "credit_limit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1
},
{
"description": "If this Account represents a Customer, Supplier or Employee, set it here.",
"doctype": "DocField",
"fieldname": "master_type",
"fieldtype": "Select",
"label": "Master Type",
"oldfieldname": "master_type",
"oldfieldtype": "Select",
"options": "\nSupplier\nCustomer\nEmployee"
},
{
"doctype": "DocField",
"fieldname": "master_name",
"fieldtype": "Link",
"label": "Master Name",
"oldfieldname": "master_name",
"oldfieldtype": "Link",
"options": "[Select]"
},
{
"default": "1",
"depends_on": "eval:doc.group_or_ledger==\"Ledger\"",
"doctype": "DocField",
"fieldname": "allow_negative_balance",
"fieldtype": "Check",
"label": "Allow Negative Balance"
},
{
"doctype": "DocField",
"fieldname": "lft",
"fieldtype": "Int",
"hidden": 1,
"label": "Lft",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "rgt",
"fieldtype": "Int",
"hidden": 1,
"label": "Rgt",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "old_parent",
"fieldtype": "Data",
"hidden": 1,
"label": "Old Parent",
"print_hide": 1,
"read_only": 1
},
{
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"role": "Accounts User",
"write": 1
},
{
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"permlevel": 0,
"role": "Auditor",
"write": 0
},
{
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"permlevel": 0,
"role": "Sales User",
"write": 0
},
{
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"permlevel": 0,
"role": "Purchase User",
"write": 0
},
{
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"permlevel": 2,
"role": "Auditor",
"write": 0
},
{
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"role": "Accounts Manager",
"write": 1
},
{
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"permlevel": 2,
"role": "Accounts Manager",
"write": 1
},
{
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"permlevel": 2,
"role": "Accounts User",
"write": 0
}
]

View File

@@ -1,46 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
def make_test_records(verbose):
from webnotes.test_runner import make_test_objects
accounts = [
# [account_name, parent_account, group_or_ledger]
["_Test Account Bank Account", "Bank Accounts", "Ledger"],
["_Test Account Stock Expenses", "Direct Expenses", "Group"],
["_Test Account Shipping Charges", "_Test Account Stock Expenses", "Ledger"],
["_Test Account Customs Duty", "_Test Account Stock Expenses", "Ledger"],
["_Test Account Tax Assets", "Current Assets", "Group"],
["_Test Account VAT", "_Test Account Tax Assets", "Ledger"],
["_Test Account Service Tax", "_Test Account Tax Assets", "Ledger"],
["_Test Account Reserves and Surplus", "Current Liabilities", "Ledger"],
["_Test Account Cost for Goods Sold", "Expenses", "Ledger"],
["_Test Account Excise Duty", "_Test Account Tax Assets", "Ledger"],
["_Test Account Education Cess", "_Test Account Tax Assets", "Ledger"],
["_Test Account S&H Education Cess", "_Test Account Tax Assets", "Ledger"],
["_Test Account CST", "Direct Expenses", "Ledger"],
["_Test Account Discount", "Direct Expenses", "Ledger"],
# related to Account Inventory Integration
["_Test Account Stock In Hand", "Current Assets", "Ledger"],
["_Test Account Fixed Assets", "Current Assets", "Ledger"],
]
for company, abbr in [["_Test Company", "_TC"], ["_Test Company 1", "_TC1"]]:
test_objects = make_test_objects("Account", [[{
"doctype": "Account",
"account_name": account_name,
"parent_account": parent_account + " - " + abbr,
"company": company,
"group_or_ledger": group_or_ledger
}] for account_name, parent_account, group_or_ledger in accounts])
return test_objects

View File

@@ -1,21 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
# For license information, please see license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import cint, cstr
from webnotes import msgprint, _
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
def on_update(self):
webnotes.conn.set_default("auto_accounting_for_stock", self.doc.auto_accounting_for_stock)
if self.doc.auto_accounting_for_stock:
for wh in webnotes.conn.sql("select name from `tabWarehouse`"):
wh_bean = webnotes.bean("Warehouse", wh[0])
wh_bean.save()

View File

@@ -1,83 +0,0 @@
[
{
"creation": "2013-06-24 15:49:57",
"docstatus": 0,
"modified": "2013-09-24 11:52:58",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"description": "Settings for Accounts",
"doctype": "DocType",
"icon": "icon-cog",
"issingle": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Accounts Settings",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"create": 1,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Accounts Settings",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"role": "Accounts Manager",
"write": 1
},
{
"doctype": "DocType",
"name": "Accounts Settings"
},
{
"default": "1",
"description": "If enabled, the system will post accounting entries for inventory automatically.",
"doctype": "DocField",
"fieldname": "auto_accounting_for_stock",
"fieldtype": "Check",
"label": "Make Accounting Entry For Every Stock Movement"
},
{
"description": "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.",
"doctype": "DocField",
"fieldname": "acc_frozen_upto",
"fieldtype": "Date",
"label": "Accounts Frozen Upto"
},
{
"description": "Users with this role are allowed to create / modify accounting entry before frozen date",
"doctype": "DocField",
"fieldname": "bde_auth_role",
"fieldtype": "Link",
"label": "Allowed Role to Edit Entries Before Frozen Date",
"options": "Role"
},
{
"description": "Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts",
"doctype": "DocField",
"fieldname": "frozen_accounts_modifier",
"fieldtype": "Link",
"label": "Frozen Accounts Modifier",
"options": "Role"
},
{
"description": "Role that is allowed to submit transactions that exceed credit limits set.",
"doctype": "DocField",
"fieldname": "credit_controller",
"fieldtype": "Link",
"label": "Credit Controller",
"options": "Role"
},
{
"doctype": "DocPerm"
}
]

View File

@@ -1,9 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
cur_frm.add_fetch("bank_account", "company", "company");
cur_frm.cscript.onload = function(doc, cdt, cdn){
cur_frm.set_intro('<i class="icon-question" /> ' +
wn._("Update clearance date of Journal Entries marked as 'Bank Vouchers'"))
}

View File

@@ -1,57 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import cstr, flt, getdate, now, nowdate
from webnotes.model import db_exists
from webnotes.model.doc import addchild
from webnotes.model.bean import getlist, copy_doclist
from webnotes import msgprint
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
def get_details(self):
if not (self.doc.bank_account and self.doc.from_date and self.doc.to_date):
msgprint("Bank Account, From Date and To Date are Mandatory")
return
dl = webnotes.conn.sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date))
self.doclist = self.doc.clear_table(self.doclist, 'entries')
self.doc.total_amount = 0.0
for d in dl:
nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', self.doclist)
nl.posting_date = cstr(d[5])
nl.voucher_id = cstr(d[0])
nl.cheque_number = cstr(d[1])
nl.cheque_date = cstr(d[2])
nl.debit = flt(d[3])
nl.credit = flt(d[4])
nl.against_account = cstr(d[6])
self.doc.total_amount += flt(flt(d[4]) - flt(d[3]))
def update_details(self):
vouchers = []
for d in getlist(self.doclist, 'entries'):
if d.clearance_date:
if d.cheque_date and getdate(d.clearance_date) < getdate(d.cheque_date):
msgprint("Clearance Date can not be before Cheque Date (Row #%s)" %
d.idx, raise_exception=1)
webnotes.conn.sql("""update `tabJournal Voucher`
set clearance_date = %s, modified = %s where name=%s""",
(d.clearance_date, nowdate(), d.voucher_id))
vouchers.append(d.voucher_id)
if vouchers:
msgprint("Clearance Date updated in %s" % ", ".join(vouchers))
else:
msgprint("Clearance Date not mentioned")

View File

@@ -1,115 +0,0 @@
[
{
"creation": "2013-01-10 16:34:05",
"docstatus": 0,
"modified": "2013-07-05 14:26:22",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"allow_copy": 1,
"allow_email": 1,
"allow_print": 1,
"doctype": "DocType",
"hide_heading": 1,
"hide_toolbar": 1,
"icon": "icon-check",
"issingle": 1,
"module": "Accounts",
"name": "__common__",
"read_only": 1
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Bank Reconciliation",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Bank Reconciliation",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 0,
"role": "Accounts User",
"submit": 0,
"write": 1
},
{
"doctype": "DocType",
"name": "Bank Reconciliation"
},
{
"description": "Select account head of the bank where cheque was deposited.",
"doctype": "DocField",
"fieldname": "bank_account",
"fieldtype": "Link",
"label": "Bank Account",
"options": "Account",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"hidden": 1,
"label": "Company",
"options": "Company",
"print_hide": 1,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "from_date",
"fieldtype": "Date",
"label": "From Date",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "to_date",
"fieldtype": "Date",
"label": "To Date",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "get_non_reconciled_entries",
"fieldtype": "Button",
"label": "Get Non Reconciled Entries",
"options": "get_details"
},
{
"doctype": "DocField",
"fieldname": "entries",
"fieldtype": "Table",
"label": "Entries",
"options": "Bank Reconciliation Detail"
},
{
"doctype": "DocField",
"fieldname": "update_clearance_date",
"fieldtype": "Button",
"label": "Update Clearance Date",
"options": "update_details"
},
{
"doctype": "DocField",
"fieldname": "total_amount",
"fieldtype": "Currency",
"label": "Total Amount",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocPerm"
}
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,108 +0,0 @@
[
{
"creation": "2013-02-22 01:27:37",
"docstatus": 0,
"modified": "2013-11-03 14:11:31",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"no_copy": 0,
"parent": "Bank Reconciliation Detail",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
"search_index": 0
},
{
"doctype": "DocType",
"name": "Bank Reconciliation Detail"
},
{
"doctype": "DocField",
"fieldname": "voucher_id",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Voucher ID",
"oldfieldname": "voucher_id",
"oldfieldtype": "Link",
"options": "Journal Voucher"
},
{
"doctype": "DocField",
"fieldname": "against_account",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Against Account",
"oldfieldname": "against_account",
"oldfieldtype": "Data",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "posting_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "Posting Date",
"oldfieldname": "posting_date",
"oldfieldtype": "Date",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "clearance_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "Clearance Date",
"oldfieldname": "clearance_date",
"oldfieldtype": "Date"
},
{
"doctype": "DocField",
"fieldname": "cheque_number",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Cheque Number",
"oldfieldname": "cheque_number",
"oldfieldtype": "Data",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "cheque_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "Cheque Date",
"oldfieldname": "cheque_date",
"oldfieldtype": "Date",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "debit",
"fieldtype": "Currency",
"label": "Debit",
"oldfieldname": "debit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "credit",
"fieldtype": "Currency",
"label": "Credit",
"oldfieldname": "credit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1
}
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,61 +0,0 @@
[
{
"creation": "2013-03-07 11:55:04",
"docstatus": 0,
"modified": "2013-08-22 17:27:59",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "CBD/.######",
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"in_list_view": 1,
"name": "__common__",
"parent": "Budget Detail",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
"reqd": 1
},
{
"doctype": "DocType",
"name": "Budget Detail"
},
{
"doctype": "DocField",
"fieldname": "account",
"fieldtype": "Link",
"in_filter": 1,
"label": "Account",
"oldfieldname": "account",
"oldfieldtype": "Link",
"options": "Account",
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "budget_allocated",
"fieldtype": "Currency",
"label": "Budget Allocated",
"oldfieldname": "budget_allocated",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency"
},
{
"doctype": "DocField",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"in_filter": 1,
"label": "Fiscal Year",
"oldfieldname": "fiscal_year",
"oldfieldtype": "Select",
"options": "link:Fiscal Year",
"search_index": 1
}
]

View File

@@ -1,17 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// 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('budget_distribution_details');
}
return $c('runserverobj',args={'method' : 'get_months', 'docs' :
wn.model.compress(make_doclist(doc.doctype, doc.name))},callback1);
}
}
cur_frm.cscript.refresh = function(doc,cdt,cdn){
cur_frm.toggle_display('distribution_id', doc.__islocal);
}

View File

@@ -1,32 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt
from webnotes.model.doc import addchild
from webnotes.model.bean import getlist
from webnotes import msgprint, _
class DocType:
def __init__(self,doc,doclist=[]):
self.doc,self.doclist = doc,doclist
def get_months(self):
month_list = ['January','February','March','April','May','June','July','August','September',
'October','November','December']
idx =1
for m in month_list:
mnth = addchild(self.doc, 'budget_distribution_details',
'Budget Distribution Detail', self.doclist)
mnth.month = m or ''
mnth.idx = idx
idx += 1
def validate(self):
total = sum([flt(d.percentage_allocation, 2) for d in self.doclist.get(
{"parentfield": "budget_distribution_details"})])
if total != 100.0:
msgprint(_("Percentage Allocation should be equal to ") + "100%", raise_exception=1)

View File

@@ -1,92 +0,0 @@
[
{
"creation": "2013-01-10 16:34:05",
"docstatus": 0,
"modified": "2013-07-22 15:30:37",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "field:distribution_id",
"description": "**Budget Distribution** helps you distribute your budget across months if you have seasonality in your business.\n\nTo distribute a budget using this distribution, set this **Budget Distribution** in the **Cost Center**",
"doctype": "DocType",
"icon": "icon-bar-chart",
"module": "Accounts",
"name": "__common__",
"name_case": "Title Case"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Budget Distribution",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocPerm",
"name": "__common__",
"parent": "Budget Distribution",
"parentfield": "permissions",
"parenttype": "DocType",
"read": 1,
"report": 1,
"role": "Accounts Manager",
"submit": 0
},
{
"doctype": "DocType",
"name": "Budget Distribution"
},
{
"description": "Name of the Budget Distribution",
"doctype": "DocField",
"fieldname": "distribution_id",
"fieldtype": "Data",
"label": "Distribution Name",
"oldfieldname": "distribution_id",
"oldfieldtype": "Data",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"in_filter": 1,
"label": "Fiscal Year",
"oldfieldname": "fiscal_year",
"oldfieldtype": "Select",
"options": "link:Fiscal Year",
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "budget_distribution_details",
"fieldtype": "Table",
"label": "Budget Distribution Details",
"oldfieldname": "budget_distribution_details",
"oldfieldtype": "Table",
"options": "Budget Distribution Detail"
},
{
"doctype": "DocField",
"fieldname": "trash_reason",
"fieldtype": "Small Text",
"label": "Trash Reason",
"oldfieldname": "trash_reason",
"oldfieldtype": "Small Text",
"read_only": 1
},
{
"amend": 0,
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"write": 1
},
{
"doctype": "DocPerm",
"permlevel": 2
}
]

View File

@@ -1,70 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
test_records = [
[{
"doctype": "Budget Distribution",
"distribution_id": "_Test Distribution",
"fiscal_year": "_Test Fiscal Year 2013",
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "January",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "February",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "March",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "April",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "May",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "June",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "July",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "August",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "September",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "October",
"percentage_allocation": "8"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "November",
"percentage_allocation": "10"
}, {
"doctype": "Budget Distribution Detail",
"parentfield": "budget_distribution_details",
"month": "December",
"percentage_allocation": "10"
}]
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,47 +0,0 @@
[
{
"creation": "2013-02-22 01:27:38",
"docstatus": 0,
"modified": "2013-07-10 14:54:06",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "BDD/.#####",
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"in_list_view": 1,
"name": "__common__",
"parent": "Budget Distribution Detail",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Budget Distribution Detail"
},
{
"doctype": "DocField",
"fieldname": "month",
"fieldtype": "Data",
"label": "Month",
"oldfieldname": "month",
"oldfieldtype": "Data",
"read_only": 1,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "percentage_allocation",
"fieldtype": "Float",
"label": "Percentage Allocation",
"oldfieldname": "percentage_allocation",
"oldfieldtype": "Currency"
}
]

View File

@@ -1,86 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt, getdate
from webnotes.model.bean import getlist
class DocType:
def __init__(self,d,dl):
self.doc, self.doclist = d,dl
def validate(self):
"""Validate invoice that c-form is applicable
and no other c-form is received for that"""
for d in getlist(self.doclist, 'invoice_details'):
if d.invoice_no:
inv = webnotes.conn.sql("""select c_form_applicable, c_form_no from
`tabSales Invoice` where name = %s and docstatus = 1""", d.invoice_no)
if not inv:
webnotes.msgprint("""Invoice: %s is not exists in the system or
is not submitted, please check.""" % d.invoice_no, raise_exception=1)
elif inv[0][0] != 'Yes':
webnotes.msgprint("C-form is not applicable for Invoice: %s" %
d.invoice_no, raise_exception=1)
elif inv[0][1] and inv[0][1] != self.doc.name:
webnotes.msgprint("""Invoice %s is tagged in another C-form: %s.
If you want to change C-form no for this invoice,
please remove invoice no from the previous c-form and then try again""" %
(d.invoice_no, inv[0][1]), raise_exception=1)
def on_update(self):
""" Update C-Form No on invoices"""
self.set_total_invoiced_amount()
def on_submit(self):
self.set_cform_in_sales_invoices()
def before_cancel(self):
# remove cform reference
webnotes.conn.sql("""update `tabSales Invoice` set c_form_no=null
where c_form_no=%s""", self.doc.name)
def set_cform_in_sales_invoices(self):
inv = [d.invoice_no for d in getlist(self.doclist, 'invoice_details')]
if inv:
webnotes.conn.sql("""update `tabSales Invoice` set c_form_no=%s, modified=%s
where name in (%s)""" % ('%s', '%s', ', '.join(['%s'] * len(inv))),
tuple([self.doc.name, self.doc.modified] + inv))
webnotes.conn.sql("""update `tabSales Invoice` set c_form_no = null, modified = %s
where name not in (%s) and ifnull(c_form_no, '') = %s""" %
('%s', ', '.join(['%s']*len(inv)), '%s'),
tuple([self.doc.modified] + inv + [self.doc.name]))
else:
webnotes.msgprint("Please enter atleast 1 invoice in the table", raise_exception=1)
def set_total_invoiced_amount(self):
total = sum([flt(d.grand_total) for d in getlist(self.doclist, 'invoice_details')])
webnotes.conn.set(self.doc, 'total_invoiced_amount', total)
def get_invoice_details(self, invoice_no):
""" Pull details from invoices for referrence """
inv = webnotes.conn.sql("""select posting_date, territory, net_total, grand_total
from `tabSales Invoice` where name = %s""", invoice_no)
return {
'invoice_date' : inv and getdate(inv[0][0]).strftime('%Y-%m-%d') or '',
'territory' : inv and inv[0][1] or '',
'net_total' : inv and flt(inv[0][2]) or '',
'grand_total' : inv and flt(inv[0][3]) or ''
}
def get_invoice_nos(doctype, txt, searchfield, start, page_len, filters):
from utilities import build_filter_conditions
conditions, filter_values = build_filter_conditions(filters)
return webnotes.conn.sql("""select name from `tabSales Invoice` where docstatus = 1
and c_form_applicable = 'Yes' and ifnull(c_form_no, '') = '' %s
and %s like %s order by name limit %s, %s""" %
(conditions, searchfield, "%s", "%s", "%s"),
tuple(filter_values + ["%%%s%%" % txt, start, page_len]))

View File

@@ -1,188 +0,0 @@
[
{
"creation": "2013-03-07 11:55:06",
"docstatus": 0,
"modified": "2013-11-02 14:05:25",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"allow_attach": 1,
"autoname": "naming_series:",
"doctype": "DocType",
"icon": "icon-file-text",
"is_submittable": 1,
"max_attachments": 3,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "C-Form",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocPerm",
"name": "__common__",
"parent": "C-Form",
"parentfield": "permissions",
"parenttype": "DocType",
"read": 1,
"report": 1,
"submit": 0
},
{
"doctype": "DocType",
"name": "C-Form"
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
"print_width": "50%",
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Series",
"options": "\nC-FORM/",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "c_form_no",
"fieldtype": "Data",
"label": "C-Form No",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "received_date",
"fieldtype": "Date",
"label": "Received Date",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "customer",
"fieldtype": "Link",
"label": "Customer",
"options": "Customer",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "column_break1",
"fieldtype": "Column Break",
"print_width": "50%",
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Select",
"label": "Company",
"options": "link:Company",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"label": "Fiscal Year",
"options": "link:Fiscal Year",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "quarter",
"fieldtype": "Select",
"label": "Quarter",
"options": "\nI\nII\nIII\nIV",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "total_amount",
"fieldtype": "Currency",
"label": "Total Amount",
"options": "Company:company:default_currency",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "state",
"fieldtype": "Data",
"label": "State",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "section_break0",
"fieldtype": "Section Break",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "invoice_details",
"fieldtype": "Table",
"label": "Invoice Details",
"options": "C-Form Invoice Detail",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "total_invoiced_amount",
"fieldtype": "Currency",
"label": "Total Invoiced Amount",
"options": "Company:company:default_currency",
"print_hide": 0,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "amended_from",
"fieldtype": "Link",
"label": "Amended From",
"no_copy": 1,
"options": "C-Form",
"print_hide": 1,
"read_only": 1
},
{
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"role": "Accounts User",
"write": 1
},
{
"create": 1,
"doctype": "DocPerm",
"permlevel": 0,
"role": "Accounts Manager",
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"permlevel": 1,
"role": "All"
}
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,77 +0,0 @@
[
{
"creation": "2013-02-22 01:27:38",
"docstatus": 0,
"modified": "2013-11-02 16:58:31",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"in_list_view": 1,
"name": "__common__",
"parent": "C-Form Invoice Detail",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "C-Form Invoice Detail"
},
{
"doctype": "DocField",
"fieldname": "invoice_no",
"fieldtype": "Link",
"label": "Invoice No",
"options": "Sales Invoice",
"print_width": "160px",
"width": "160px"
},
{
"doctype": "DocField",
"fieldname": "invoice_date",
"fieldtype": "Date",
"label": "Invoice Date",
"print_width": "120px",
"read_only": 1,
"width": "120px"
},
{
"description": "<a href=\"#Sales Browser/Territory\">Add / Edit</a>",
"doctype": "DocField",
"fieldname": "territory",
"fieldtype": "Link",
"label": "Territory",
"options": "Territory",
"print_width": "120px",
"read_only": 1,
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "net_total",
"fieldtype": "Currency",
"label": "Net Total",
"options": "Company:company:default_currency",
"print_width": "120px",
"read_only": 1,
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "grand_total",
"fieldtype": "Currency",
"label": "Grand Total",
"options": "Company:company:default_currency",
"print_width": "120px",
"read_only": 1,
"width": "120px"
}
]

View File

@@ -1,87 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
wn.provide("erpnext.accounts");
erpnext.accounts.CostCenterController = wn.ui.form.Controller.extend({
onload: function() {
this.setup_queries();
},
setup_queries: function() {
var me = this;
if(this.frm.fields_dict["budget_details"].grid.get_field("account")) {
this.frm.set_query("account", "budget_details", function() {
return {
filters:[
['Account', 'company', '=', me.frm.doc.company],
['Account', 'is_pl_account', '=', 'Yes'],
['Account', 'debit_or_credit', '=', 'Debit'],
['Account', 'group_or_ledger', '!=', 'Group'],
]
}
});
}
this.frm.set_query("parent_cost_center", function() {
return {
filters:[
['Cost Center', 'group_or_ledger', '=', 'Group'],
['Cost Center', 'company', '=', me.frm.doc.company],
]
}
});
}
});
$.extend(cur_frm.cscript, new erpnext.accounts.CostCenterController({frm: cur_frm}));
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
var intro_txt = '';
cur_frm.toggle_display('cost_center_name', doc.__islocal);
cur_frm.toggle_enable(['group_or_ledger', 'company'], doc.__islocal);
if(!doc.__islocal && doc.group_or_ledger=='Group') {
intro_txt += '<p><b>'+wn._('Note:')+'</b>'+ wn._('This Cost Center is a')+ '<i>'+wn._('Group')+'</i>, '+
wn._('Accounting Entries are not allowed against groups.')+'</p>';
}
cur_frm.cscript.hide_unhide_group_ledger(doc);
cur_frm.toggle_display('sb1', doc.group_or_ledger=='Ledger')
cur_frm.set_intro(intro_txt);
cur_frm.appframe.add_button(wn._('Chart of Cost Centers'),
function() { wn.set_route("Accounts Browser", "Cost Center"); }, 'icon-sitemap')
}
cur_frm.cscript.parent_cost_center = function(doc,cdt,cdn){
if(!doc.company){
alert(wn._('Please enter company name first'));
}
}
cur_frm.cscript.hide_unhide_group_ledger = function(doc) {
if (cstr(doc.group_or_ledger) == 'Group') {
cur_frm.add_custom_button(wn._('Convert to Ledger'),
function() { cur_frm.cscript.convert_to_ledger(); }, 'icon-retweet')
} else if (cstr(doc.group_or_ledger) == 'Ledger') {
cur_frm.add_custom_button(wn._('Convert to Group'),
function() { cur_frm.cscript.convert_to_group(); }, 'icon-retweet')
}
}
cur_frm.cscript.convert_to_ledger = function(doc, cdt, cdn) {
return $c_obj(cur_frm.get_doclist(),'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.get_doclist(),'convert_ledger_to_group','',function(r,rt) {
if(r.message == 1) {
cur_frm.refresh();
}
});
}

View File

@@ -1,92 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.model.bean import getlist
from webnotes import msgprint, _
from webnotes.utils.nestedset import DocTypeNestedSet
class DocType(DocTypeNestedSet):
def __init__(self,d,dl):
self.doc, self.doclist = d,dl
self.nsm_parent_field = 'parent_cost_center'
def autoname(self):
company_abbr = webnotes.conn.sql("select abbr from tabCompany where name=%s",
self.doc.company)[0][0]
self.doc.name = self.doc.cost_center_name.strip() + ' - ' + company_abbr
def validate_mandatory(self):
if not self.doc.group_or_ledger:
msgprint("Please select Group or Ledger value", raise_exception=1)
if self.doc.cost_center_name != self.doc.company and not self.doc.parent_cost_center:
msgprint("Please enter parent cost center", raise_exception=1)
elif self.doc.cost_center_name == self.doc.company and self.doc.parent_cost_center:
msgprint(_("Root cannot have a parent cost center"), raise_exception=1)
def convert_group_to_ledger(self):
if self.check_if_child_exists():
msgprint("Cost Center: %s has existing child. You can not convert this cost center to ledger" % (self.doc.name), raise_exception=1)
elif self.check_gle_exists():
msgprint("Cost Center with existing transaction can not be converted to ledger.", raise_exception=1)
else:
self.doc.group_or_ledger = 'Ledger'
self.doc.save()
return 1
def convert_ledger_to_group(self):
if self.check_gle_exists():
msgprint("Cost Center with existing transaction can not be converted to group.", raise_exception=1)
else:
self.doc.group_or_ledger = 'Group'
self.doc.save()
return 1
def check_gle_exists(self):
return webnotes.conn.get_value("GL Entry", {"cost_center": self.doc.name})
def check_if_child_exists(self):
return webnotes.conn.sql("select name from `tabCost Center` where \
parent_cost_center = %s and docstatus != 2", self.doc.name)
def validate_budget_details(self):
check_acc_list = []
for d in getlist(self.doclist, 'budget_details'):
if self.doc.group_or_ledger=="Group":
msgprint("Budget cannot be set for Group Cost Centers", raise_exception=1)
if [d.account, d.fiscal_year] in check_acc_list:
msgprint("Account " + d.account + "has been entered more than once for fiscal year " + d.fiscal_year, raise_exception=1)
else:
check_acc_list.append([d.account, d.fiscal_year])
def validate(self):
"""
Cost Center name must be unique
"""
if (self.doc.fields.get("__islocal") or not self.doc.name) and webnotes.conn.sql("select name from `tabCost Center` where cost_center_name = %s and company=%s", (self.doc.cost_center_name, self.doc.company)):
msgprint("Cost Center Name already exists, please rename", raise_exception=1)
self.validate_mandatory()
self.validate_budget_details()
def before_rename(self, olddn, newdn, merge=False):
# Add company abbr if not provided
from setup.doctype.company.company import get_name_with_abbr
new_cost_center = get_name_with_abbr(newdn, self.doc.company)
# Validate properties before merging
super(DocType, self).before_rename(olddn, new_cost_center, merge, "group_or_ledger")
return new_cost_center
def after_rename(self, olddn, newdn, merge=False):
if not merge:
webnotes.conn.set_value("Cost Center", newdn, "cost_center_name",
" - ".join(newdn.split(" - ")[:-1]))
else:
super(DocType, self).after_rename(olddn, newdn, merge)

View File

@@ -1,196 +0,0 @@
[
{
"creation": "2013-01-23 19:57:17",
"docstatus": 0,
"modified": "2013-07-22 15:23:10",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"allow_copy": 1,
"allow_rename": 1,
"autoname": "field:cost_center_name",
"description": "Track separate Income and Expense for product verticals or divisions.",
"doctype": "DocType",
"document_type": "Master",
"icon": "icon-money",
"in_create": 1,
"module": "Accounts",
"name": "__common__",
"search_fields": "name,parent_cost_center"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Cost Center",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"amend": 0,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Cost Center",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1,
"submit": 0
},
{
"doctype": "DocType",
"name": "Cost Center"
},
{
"doctype": "DocField",
"fieldname": "sb0",
"fieldtype": "Section Break",
"label": "Cost Center Details"
},
{
"doctype": "DocField",
"fieldname": "trash_reason",
"fieldtype": "Small Text",
"label": "Trash Reason",
"oldfieldname": "trash_reason",
"oldfieldtype": "Small Text",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "cost_center_name",
"fieldtype": "Data",
"in_filter": 0,
"label": "Cost Center Name",
"no_copy": 1,
"oldfieldname": "cost_center_name",
"oldfieldtype": "Data",
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "parent_cost_center",
"fieldtype": "Link",
"label": "Parent Cost Center",
"oldfieldname": "parent_cost_center",
"oldfieldtype": "Link",
"options": "Cost Center",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
"oldfieldname": "company_name",
"oldfieldtype": "Link",
"options": "Company",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "cb0",
"fieldtype": "Column Break",
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "group_or_ledger",
"fieldtype": "Select",
"hidden": 0,
"label": "Group or Ledger",
"no_copy": 1,
"oldfieldname": "group_or_ledger",
"oldfieldtype": "Select",
"options": "\nGroup\nLedger",
"print_hide": 1,
"report_hide": 1,
"reqd": 1
},
{
"description": "Define Budget for this Cost Center. To set budget action, see <a href=\"#!List/Company\">Company Master</a>",
"doctype": "DocField",
"fieldname": "sb1",
"fieldtype": "Section Break",
"label": "Budget"
},
{
"description": "Select Budget Distribution, if you want to track based on seasonality.",
"doctype": "DocField",
"fieldname": "distribution_id",
"fieldtype": "Link",
"label": "Distribution Id",
"oldfieldname": "distribution_id",
"oldfieldtype": "Link",
"options": "Budget Distribution"
},
{
"description": "Add rows to set annual budgets on Accounts.",
"doctype": "DocField",
"fieldname": "budget_details",
"fieldtype": "Table",
"label": "Budget Details",
"oldfieldname": "budget_details",
"oldfieldtype": "Table",
"options": "Budget Detail"
},
{
"doctype": "DocField",
"fieldname": "lft",
"fieldtype": "Int",
"hidden": 1,
"in_filter": 1,
"label": "lft",
"no_copy": 1,
"oldfieldname": "lft",
"oldfieldtype": "Int",
"print_hide": 1,
"report_hide": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "rgt",
"fieldtype": "Int",
"hidden": 1,
"in_filter": 1,
"label": "rgt",
"no_copy": 1,
"oldfieldname": "rgt",
"oldfieldtype": "Int",
"print_hide": 1,
"report_hide": 1,
"reqd": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "old_parent",
"fieldtype": "Link",
"hidden": 1,
"label": "old_parent",
"no_copy": 1,
"oldfieldname": "old_parent",
"oldfieldtype": "Data",
"options": "Cost Center",
"print_hide": 1,
"report_hide": 1
},
{
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"role": "Accounts Manager",
"write": 1
},
{
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Accounts User",
"write": 0
}
]

View File

@@ -1,19 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
test_records = [
[{
"doctype": "Cost Center",
"cost_center_name": "_Test Cost Center",
"parent_cost_center": "_Test Company - _TC",
"company": "_Test Company",
"group_or_ledger": "Ledger",
"distribution_id": "_Test Distribution",
}, {
"doctype": "Budget Detail",
"parentfield": "budget_details",
"account": "_Test Account Cost for Goods Sold - _TC",
"budget_allocated": 100000,
"fiscal_year": "_Test Fiscal Year 2013"
}],
]

View File

@@ -1,28 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
$.extend(cur_frm.cscript, {
refresh: function (doc, dt, dn) {
var me = this;
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)) {
this.frm.add_custom_button(wn._("Set as Default"), this.frm.cscript.set_as_default);
this.frm.set_intro(wn._("To set this Fiscal Year as Default, click on 'Set as Default'"));
} else this.frm.set_intro("");
},
set_as_default: function() {
return wn.call({
doc: cur_frm.doc,
method: "set_as_default"
});
},
year_start_date: function(doc, dt, dn) {
var me = this;
year_end_date =
wn.datetime.add_days(wn.datetime.add_months(this.frm.doc.year_start_date, 12), -1);
this.frm.set_value("year_end_date", year_end_date);
},
});

View File

@@ -1,47 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes import msgprint, _
from webnotes.utils import getdate
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
def set_as_default(self):
webnotes.conn.set_value("Global Defaults", None, "current_fiscal_year", self.doc.name)
webnotes.get_obj("Global Defaults").on_update()
# clear cache
webnotes.clear_cache()
msgprint(self.doc.name + _(""" is now the default Fiscal Year. \
Please refresh your browser for the change to take effect."""))
def validate(self):
year_start_end_dates = webnotes.conn.sql("""select year_start_date, year_end_date
from `tabFiscal Year` where name=%s""", (self.doc.name))
if year_start_end_dates:
if getdate(self.doc.year_start_date) != year_start_end_dates[0][0] or getdate(self.doc.year_end_date) != year_start_end_dates[0][1]:
webnotes.throw(_("Cannot change Year Start Date and Year End Date \
once the Fiscal Year is saved."))
def on_update(self):
# validate year start date and year end date
if getdate(self.doc.year_start_date) > getdate(self.doc.year_end_date):
webnotes.throw(_("Year Start Date should not be greater than Year End Date"))
if (getdate(self.doc.year_end_date) - getdate(self.doc.year_start_date)).days > 366:
webnotes.throw(_("Year Start Date and Year End Date are not within Fiscal Year."))
year_start_end_dates = webnotes.conn.sql("""select name, year_start_date, year_end_date
from `tabFiscal Year` where name!=%s""", (self.doc.name))
for fiscal_year, ysd, yed in year_start_end_dates:
if (getdate(self.doc.year_start_date) == ysd and getdate(self.doc.year_end_date) == yed) \
and (not webnotes.flags.in_test):
webnotes.throw(_("Year Start Date and Year End Date are already \
set in Fiscal Year: ") + fiscal_year)

View File

@@ -1,93 +0,0 @@
[
{
"creation": "2013-01-22 16:50:25",
"docstatus": 0,
"modified": "2013-11-25 11:40:02",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "field:year",
"description": "**Fiscal Year** represents a Financial Year. All accounting entries and other major transactions are tracked against **Fiscal Year**.",
"doctype": "DocType",
"document_type": "Master",
"icon": "icon-calendar",
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Fiscal Year",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocPerm",
"name": "__common__",
"parent": "Fiscal Year",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1
},
{
"doctype": "DocType",
"name": "Fiscal Year"
},
{
"description": "For e.g. 2012, 2012-13",
"doctype": "DocField",
"fieldname": "year",
"fieldtype": "Data",
"label": "Year Name",
"oldfieldname": "year",
"oldfieldtype": "Data",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "year_start_date",
"fieldtype": "Date",
"label": "Year Start Date",
"no_copy": 1,
"oldfieldname": "year_start_date",
"oldfieldtype": "Date",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "year_end_date",
"fieldtype": "Date",
"label": "Year End Date",
"no_copy": 1,
"reqd": 1
},
{
"default": "No",
"description": "Entries are not allowed against this Fiscal Year if the year is closed.",
"doctype": "DocField",
"fieldname": "is_fiscal_year_closed",
"fieldtype": "Select",
"label": "Year Closed",
"no_copy": 1,
"oldfieldname": "is_fiscal_year_closed",
"oldfieldtype": "Select",
"options": "\nNo\nYes",
"reqd": 0
},
{
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"report": 1,
"role": "System Manager",
"submit": 0,
"write": 1
},
{
"doctype": "DocPerm",
"role": "All"
}
]

View File

@@ -1,37 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
test_records = [
[{
"doctype": "Fiscal Year",
"year": "_Test Fiscal Year 2012",
"year_start_date": "2012-01-01",
"year_end_date": "2012-12-31"
}],
[{
"doctype": "Fiscal Year",
"year": "_Test Fiscal Year 2013",
"year_start_date": "2013-01-01",
"year_end_date": "2013-12-31"
}],
[{
"doctype": "Fiscal Year",
"year": "_Test Fiscal Year 2014",
"year_start_date": "2014-01-01",
"year_end_date": "2014-12-31"
}],
[{
"doctype": "Fiscal Year",
"year": "_Test Fiscal Year 2015",
"year_start_date": "2015-01-01",
"year_end_date": "2015-12-31"
}],
[{
"doctype": "Fiscal Year",
"year": "_Test Fiscal Year 2016",
"year_start_date": "2016-01-01",
"year_end_date": "2016-12-31"
}],
]

View File

@@ -1,161 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt, fmt_money, getdate
from webnotes.model.code import get_obj
from webnotes import msgprint, _
class DocType:
def __init__(self,d,dl):
self.doc, self.doclist = d, dl
def validate(self):
self.check_mandatory()
self.pl_must_have_cost_center()
self.validate_posting_date()
self.check_pl_account()
self.validate_cost_center()
def on_update_with_args(self, adv_adj, update_outstanding = 'Yes'):
self.validate_account_details(adv_adj)
validate_frozen_account(self.doc.account, adv_adj)
check_freezing_date(self.doc.posting_date, adv_adj)
check_negative_balance(self.doc.account, adv_adj)
# Update outstanding amt on against voucher
if self.doc.against_voucher and self.doc.against_voucher_type != "POS" \
and update_outstanding == 'Yes':
update_outstanding_amt(self.doc.account, self.doc.against_voucher_type,
self.doc.against_voucher)
def check_mandatory(self):
mandatory = ['account','remarks','voucher_type','voucher_no','fiscal_year','company']
for k in mandatory:
if not self.doc.fields.get(k):
webnotes.throw(k + _(" is mandatory for GL Entry"))
# Zero value transaction is not allowed
if not (flt(self.doc.debit) or flt(self.doc.credit)):
webnotes.throw(_("GL Entry: Debit or Credit amount is mandatory for ") +
self.doc.account)
def pl_must_have_cost_center(self):
if webnotes.conn.get_value("Account", self.doc.account, "is_pl_account") == "Yes":
if not self.doc.cost_center and self.doc.voucher_type != 'Period Closing Voucher':
webnotes.throw(_("Cost Center must be specified for PL Account: ") +
self.doc.account)
elif self.doc.cost_center:
self.doc.cost_center = None
def validate_posting_date(self):
from accounts.utils import validate_fiscal_year
validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year, "Posting Date")
def check_pl_account(self):
if self.doc.is_opening=='Yes' and \
webnotes.conn.get_value("Account", self.doc.account, "is_pl_account") == "Yes":
webnotes.throw(_("For opening balance entry account can not be a PL account"))
def validate_account_details(self, adv_adj):
"""Account must be ledger, active and not freezed"""
ret = webnotes.conn.sql("""select group_or_ledger, docstatus, company
from tabAccount where name=%s""", self.doc.account, as_dict=1)[0]
if ret.group_or_ledger=='Group':
webnotes.throw(_("Account") + ": " + self.doc.account + _(" is not a ledger"))
if ret.docstatus==2:
webnotes.throw(_("Account") + ": " + self.doc.account + _(" is not active"))
if ret.company != self.doc.company:
webnotes.throw(_("Account") + ": " + self.doc.account +
_(" does not belong to the company") + ": " + self.doc.company)
def validate_cost_center(self):
if not hasattr(self, "cost_center_company"):
self.cost_center_company = {}
def _get_cost_center_company():
if not self.cost_center_company.get(self.doc.cost_center):
self.cost_center_company[self.doc.cost_center] = webnotes.conn.get_value(
"Cost Center", self.doc.cost_center, "company")
return self.cost_center_company[self.doc.cost_center]
if self.doc.cost_center and _get_cost_center_company() != self.doc.company:
webnotes.throw(_("Cost Center") + ": " + self.doc.cost_center +
_(" does not belong to the company") + ": " + self.doc.company)
def check_negative_balance(account, adv_adj=False):
if not adv_adj and account:
account_details = webnotes.conn.get_value("Account", account,
["allow_negative_balance", "debit_or_credit"], as_dict=True)
if not account_details["allow_negative_balance"]:
balance = webnotes.conn.sql("""select sum(debit) - sum(credit) from `tabGL Entry`
where account = %s""", account)
balance = account_details["debit_or_credit"] == "Debit" and \
flt(balance[0][0]) or -1*flt(balance[0][0])
if flt(balance) < 0:
webnotes.throw(_("Negative balance is not allowed for account ") + account)
def check_freezing_date(posting_date, adv_adj=False):
"""
Nobody can do GL Entries where posting date is before freezing date
except authorized person
"""
if not adv_adj:
acc_frozen_upto = webnotes.conn.get_value('Accounts Settings', None, 'acc_frozen_upto')
if acc_frozen_upto:
bde_auth_role = webnotes.conn.get_value( 'Accounts Settings', None,'bde_auth_role')
if getdate(posting_date) <= getdate(acc_frozen_upto) \
and not bde_auth_role in webnotes.user.get_roles():
webnotes.throw(_("You are not authorized to do/modify back dated entries before ")
+ getdate(acc_frozen_upto).strftime('%d-%m-%Y'))
def update_outstanding_amt(account, against_voucher_type, against_voucher, on_cancel=False):
# get final outstanding amt
bal = flt(webnotes.conn.sql("""select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
from `tabGL Entry`
where against_voucher_type=%s and against_voucher=%s and account = %s""",
(against_voucher_type, against_voucher, account))[0][0] or 0.0)
if against_voucher_type == 'Purchase Invoice':
bal = -bal
elif against_voucher_type == "Journal Voucher":
against_voucher_amount = flt(webnotes.conn.sql("""
select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
from `tabGL Entry` where voucher_type = 'Journal Voucher' and voucher_no = %s
and account = %s""", (against_voucher, account))[0][0])
bal = against_voucher_amount + bal
if against_voucher_amount < 0:
bal = -bal
# Validation : Outstanding can not be negative
if bal < 0 and not on_cancel:
webnotes.throw(_("Outstanding for Voucher ") + against_voucher + _(" will become ") +
fmt_money(bal) + _(". Outstanding cannot be less than zero. \
Please match exact outstanding."))
# Update outstanding amt on against voucher
if against_voucher_type in ["Sales Invoice", "Purchase Invoice"]:
webnotes.conn.sql("update `tab%s` set outstanding_amount=%s where name='%s'" %
(against_voucher_type, bal, against_voucher))
def validate_frozen_account(account, adv_adj):
frozen_account = webnotes.conn.get_value("Account", account, "freeze_account")
if frozen_account == 'Yes' and not adv_adj:
frozen_accounts_modifier = webnotes.conn.get_value( 'Accounts Settings', None,
'frozen_accounts_modifier')
if not frozen_accounts_modifier:
webnotes.throw(account + _(" is a frozen account. \
Either make the account active or assign role in Accounts Settings \
who can create / modify entries against this account"))
elif frozen_accounts_modifier not in webnotes.user.get_roles():
webnotes.throw(account + _(" is a frozen account. ") +
_("To create / edit transactions against this account, you need role") + ": " +
frozen_accounts_modifier)

View File

@@ -1,232 +0,0 @@
[
{
"creation": "2013-01-10 16:34:06",
"docstatus": 0,
"modified": "2013-11-03 14:14:09",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "GL.#######",
"doctype": "DocType",
"icon": "icon-list",
"in_create": 1,
"module": "Accounts",
"name": "__common__",
"search_fields": "voucher_no,account,posting_date,against_voucher"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "GL Entry",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"create": 0,
"doctype": "DocPerm",
"name": "__common__",
"parent": "GL Entry",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1,
"submit": 0,
"write": 0
},
{
"doctype": "DocType",
"name": "GL Entry"
},
{
"doctype": "DocField",
"fieldname": "posting_date",
"fieldtype": "Date",
"in_filter": 1,
"label": "Posting Date",
"oldfieldname": "posting_date",
"oldfieldtype": "Date",
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "transaction_date",
"fieldtype": "Date",
"label": "Transaction Date",
"oldfieldname": "transaction_date",
"oldfieldtype": "Date"
},
{
"doctype": "DocField",
"fieldname": "aging_date",
"fieldtype": "Date",
"in_filter": 1,
"label": "Aging Date",
"oldfieldname": "aging_date",
"oldfieldtype": "Date",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "account",
"fieldtype": "Link",
"in_filter": 1,
"label": "Account",
"oldfieldname": "account",
"oldfieldtype": "Link",
"options": "Account",
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "cost_center",
"fieldtype": "Link",
"in_filter": 1,
"label": "Cost Center",
"oldfieldname": "cost_center",
"oldfieldtype": "Link",
"options": "Cost Center",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "debit",
"fieldtype": "Currency",
"label": "Debit Amt",
"oldfieldname": "debit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency"
},
{
"doctype": "DocField",
"fieldname": "credit",
"fieldtype": "Currency",
"label": "Credit Amt",
"oldfieldname": "credit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency"
},
{
"doctype": "DocField",
"fieldname": "against",
"fieldtype": "Text",
"in_filter": 1,
"label": "Against",
"oldfieldname": "against",
"oldfieldtype": "Text"
},
{
"doctype": "DocField",
"fieldname": "against_voucher",
"fieldtype": "Data",
"in_filter": 1,
"label": "Against Voucher",
"oldfieldname": "against_voucher",
"oldfieldtype": "Data",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "against_voucher_type",
"fieldtype": "Data",
"in_filter": 0,
"label": "Against Voucher Type",
"oldfieldname": "against_voucher_type",
"oldfieldtype": "Data",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "voucher_type",
"fieldtype": "Select",
"in_filter": 1,
"label": "Voucher Type",
"oldfieldname": "voucher_type",
"oldfieldtype": "Select",
"options": "Journal Voucher\nSales Invoice\nPurchase Invoice",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "voucher_no",
"fieldtype": "Data",
"in_filter": 1,
"label": "Voucher No",
"oldfieldname": "voucher_no",
"oldfieldtype": "Data",
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "remarks",
"fieldtype": "Text",
"in_filter": 1,
"label": "Remarks",
"no_copy": 1,
"oldfieldname": "remarks",
"oldfieldtype": "Text",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "is_opening",
"fieldtype": "Select",
"in_filter": 1,
"label": "Is Opening",
"oldfieldname": "is_opening",
"oldfieldtype": "Select",
"options": "No\nYes",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "is_advance",
"fieldtype": "Select",
"in_filter": 0,
"label": "Is Advance",
"oldfieldname": "is_advance",
"oldfieldtype": "Select",
"options": "No\nYes",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"in_filter": 1,
"label": "Fiscal Year",
"oldfieldname": "fiscal_year",
"oldfieldtype": "Select",
"options": "link:Fiscal Year",
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"in_filter": 1,
"label": "Company",
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"search_index": 0
},
{
"amend": 0,
"cancel": 0,
"doctype": "DocPerm",
"role": "Accounts User"
},
{
"amend": 0,
"cancel": 0,
"doctype": "DocPerm",
"role": "Accounts Manager"
},
{
"doctype": "DocPerm",
"role": "System Manager"
}
]

View File

@@ -1,239 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
wn.provide("erpnext.accounts");
erpnext.accounts.JournalVoucher = wn.ui.form.Controller.extend({
onload: function() {
this.load_defaults();
this.setup_queries();
},
load_defaults: function() {
if(this.frm.doc.__islocal && this.frm.doc.company) {
wn.model.set_default_values(this.frm.doc);
$.each(wn.model.get_doclist(this.frm.doc.doctype,
this.frm.doc.name, {parentfield: "entries"}), function(i, jvd) {
wn.model.set_default_values(jvd);
}
);
if(!this.frm.doc.amended_from) this.frm.doc.posting_date = get_today();
}
},
setup_queries: function() {
var me = this;
$.each(["account", "cost_center"], function(i, fieldname) {
me.frm.set_query(fieldname, "entries", function() {
wn.model.validate_missing(me.frm.doc, "company");
return {
filters: {
company: me.frm.doc.company,
group_or_ledger: "Ledger"
}
};
});
});
$.each([["against_voucher", "Purchase Invoice", "credit_to"],
["against_invoice", "Sales Invoice", "debit_to"]], function(i, opts) {
me.frm.set_query(opts[0], "entries", function(doc, cdt, cdn) {
var jvd = wn.model.get_doc(cdt, cdn);
wn.model.validate_missing(jvd, "account");
return {
filters: [
[opts[1], opts[2], "=", jvd.account],
[opts[1], "docstatus", "=", 1],
[opts[1], "outstanding_amount", ">", 0]
]
};
});
});
this.frm.set_query("against_jv", "entries", function(doc, cdt, cdn) {
var jvd = wn.model.get_doc(cdt, cdn);
wn.model.validate_missing(jvd, "account");
return {
query: "accounts.doctype.journal_voucher.journal_voucher.get_against_jv",
filters: { account: jvd.account }
};
});
},
against_voucher: function(doc, cdt, cdn) {
var d = wn.model.get_doc(cdt, cdn);
if (d.against_voucher && !flt(d.debit)) {
this.get_outstanding({
'doctype': 'Purchase Invoice',
'docname': d.against_voucher
}, d)
}
},
against_invoice: function(doc, cdt, cdn) {
var d = wn.model.get_doc(cdt, cdn);
if (d.against_invoice && !flt(d.credit)) {
this.get_outstanding({
'doctype': 'Sales Invoice',
'docname': d.against_invoice
}, d)
}
},
against_jv: function(doc, cdt, cdn) {
var d = wn.model.get_doc(cdt, cdn);
if (d.against_jv && !flt(d.credit) && !flt(d.debit)) {
this.get_outstanding({
'doctype': 'Journal Voucher',
'docname': d.against_jv,
'account': d.account
}, d)
}
},
get_outstanding: function(args, child) {
var me = this;
return this.frm.call({
child: child,
method: "get_outstanding",
args: { args: args},
callback: function(r) {
cur_frm.cscript.update_totals(me.frm.doc);
}
});
}
});
cur_frm.script_manager.make(erpnext.accounts.JournalVoucher);
cur_frm.cscript.refresh = function(doc) {
cur_frm.cscript.is_opening(doc)
erpnext.hide_naming_series();
cur_frm.cscript.voucher_type(doc);
if(doc.docstatus==1) {
cur_frm.appframe.add_button(wn._('View Ledger'), function() {
wn.route_options = {
"voucher_no": doc.name,
"from_date": doc.posting_date,
"to_date": doc.posting_date,
};
wn.set_route("general-ledger");
}, "icon-table");
}
}
cur_frm.cscript.company = function(doc, cdt, cdn) {
cur_frm.refresh_fields();
}
cur_frm.cscript.is_opening = function(doc, cdt, cdn) {
hide_field('aging_date');
if (doc.is_opening == 'Yes') unhide_field('aging_date');
}
cur_frm.cscript.update_totals = function(doc) {
var td=0.0; var tc =0.0;
var el = getchildren('Journal Voucher Detail', doc.name, 'entries');
for(var i in el) {
td += flt(el[i].debit, 2);
tc += flt(el[i].credit, 2);
}
var doc = locals[doc.doctype][doc.name];
doc.total_debit = td;
doc.total_credit = tc;
doc.difference = flt((td - tc), 2);
refresh_many(['total_debit','total_credit','difference']);
}
cur_frm.cscript.debit = function(doc,dt,dn) { cur_frm.cscript.update_totals(doc); }
cur_frm.cscript.credit = function(doc,dt,dn) { cur_frm.cscript.update_totals(doc); }
cur_frm.cscript.get_balance = function(doc,dt,dn) {
cur_frm.cscript.update_totals(doc);
return $c_obj(make_doclist(dt,dn), 'get_balance', '', function(r, rt){
cur_frm.refresh();
});
}
// Get balance
// -----------
cur_frm.cscript.account = function(doc,dt,dn) {
var d = locals[dt][dn];
if(d.account) {
return wn.call({
method: "accounts.utils.get_balance_on",
args: {account: d.account, date: doc.posting_date},
callback: function(r) {
d.balance = r.message;
refresh_field('balance', d.name, 'entries');
}
});
}
}
cur_frm.cscript.validate = function(doc,cdt,cdn) {
cur_frm.cscript.update_totals(doc);
}
cur_frm.cscript.select_print_heading = function(doc,cdt,cdn){
if(doc.select_print_heading){
// print heading
cur_frm.pformat.print_heading = doc.select_print_heading;
}
else
cur_frm.pformat.print_heading = wn._("Journal Voucher");
}
cur_frm.cscript.voucher_type = function(doc, cdt, cdn) {
cur_frm.set_df_property("cheque_no", "reqd", doc.voucher_type=="Bank Voucher");
cur_frm.set_df_property("cheque_date", "reqd", doc.voucher_type=="Bank Voucher");
if(wn.model.get("Journal Voucher Detail", {"parent":doc.name}).length!==0 // too late
|| !doc.company) // too early
return;
var update_jv_details = function(doc, r) {
$.each(r.message, function(i, d) {
var jvdetail = wn.model.add_child(doc, "Journal Voucher Detail", "entries");
jvdetail.account = d.account;
jvdetail.balance = d.balance;
});
refresh_field("entries");
}
if(in_list(["Bank Voucher", "Cash Voucher"], doc.voucher_type)) {
return wn.call({
type: "GET",
method: "accounts.doctype.journal_voucher.journal_voucher.get_default_bank_cash_account",
args: {
"voucher_type": doc.voucher_type,
"company": doc.company
},
callback: function(r) {
if(r.message) {
update_jv_details(doc, r);
}
}
})
} else if(doc.voucher_type=="Opening Entry") {
return wn.call({
type:"GET",
method: "accounts.doctype.journal_voucher.journal_voucher.get_opening_accounts",
args: {
"company": doc.company
},
callback: function(r) {
wn.model.clear_table("Journal Voucher Detail", "Journal Voucher",
doc.name, "entries");
if(r.message) {
update_jv_details(doc, r);
}
cur_frm.set_value("is_opening", "Yes")
}
})
}
}

View File

@@ -1,463 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import cint, cstr, flt, fmt_money, formatdate, getdate
from webnotes.model.doc import addchild
from webnotes.model.bean import getlist
from webnotes import msgprint, _
from setup.utils import get_company_currency
from controllers.accounts_controller import AccountsController
class DocType(AccountsController):
def __init__(self,d,dl):
self.doc, self.doclist = d,dl
self.master_type = {}
self.credit_days_for = {}
self.credit_days_global = -1
self.is_approving_authority = -1
def validate(self):
if not self.doc.is_opening:
self.doc.is_opening='No'
self.doc.clearance_date = None
super(DocType, self).validate_date_with_fiscal_year()
self.validate_debit_credit()
self.validate_cheque_info()
self.validate_entries_for_advance()
self.validate_against_jv()
self.set_against_account()
self.create_remarks()
self.set_aging_date()
self.set_print_format_fields()
def on_submit(self):
if self.doc.voucher_type in ['Bank Voucher', 'Contra Voucher', 'Journal Entry']:
self.check_credit_days()
self.check_account_against_entries()
self.make_gl_entries()
self.check_credit_limit()
def on_cancel(self):
from accounts.utils import remove_against_link_from_jv
remove_against_link_from_jv(self.doc.doctype, self.doc.name, "against_jv")
self.make_gl_entries(1)
def on_trash(self):
pass
#if self.doc.amended_from:
# webnotes.delete_doc("Journal Voucher", self.doc.amended_from)
def validate_debit_credit(self):
for d in getlist(self.doclist, 'entries'):
if d.debit and d.credit:
msgprint("You cannot credit and debit same account at the same time.",
raise_exception=1)
def validate_cheque_info(self):
if self.doc.voucher_type in ['Bank Voucher']:
if not self.doc.cheque_no or not self.doc.cheque_date:
msgprint("Reference No & Reference Date is required for %s" %
self.doc.voucher_type, raise_exception=1)
if self.doc.cheque_date and not self.doc.cheque_no:
msgprint("Reference No is mandatory if you entered Reference Date", raise_exception=1)
def validate_entries_for_advance(self):
for d in getlist(self.doclist,'entries'):
if not d.is_advance and not d.against_voucher and \
not d.against_invoice and not d.against_jv:
master_type = webnotes.conn.get_value("Account", d.account, "master_type")
if (master_type == 'Customer' and flt(d.credit) > 0) or \
(master_type == 'Supplier' and flt(d.debit) > 0):
msgprint("Message: Please check Is Advance as 'Yes' against \
Account %s if this is an advance entry." % d.account)
def validate_against_jv(self):
for d in getlist(self.doclist, 'entries'):
if d.against_jv:
if d.against_jv == self.doc.name:
msgprint("You can not enter current voucher in 'Against JV' column",
raise_exception=1)
elif not webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where account = '%s' and docstatus = 1 and parent = '%s'""" %
(d.account, d.against_jv)):
msgprint("Against JV: %s is not valid." % d.against_jv, raise_exception=1)
def set_against_account(self):
# Debit = Credit
debit, credit = 0.0, 0.0
debit_list, credit_list = [], []
for d in getlist(self.doclist, 'entries'):
debit += flt(d.debit, 2)
credit += flt(d.credit, 2)
if flt(d.debit)>0 and (d.account not in debit_list): debit_list.append(d.account)
if flt(d.credit)>0 and (d.account not in credit_list): credit_list.append(d.account)
self.doc.total_debit = debit
self.doc.total_credit = credit
if abs(self.doc.total_debit-self.doc.total_credit) > 0.001:
msgprint("Debit must be equal to Credit. The difference is %s" %
(self.doc.total_debit-self.doc.total_credit), raise_exception=1)
# update against account
for d in getlist(self.doclist, 'entries'):
if flt(d.debit) > 0: d.against_account = ', '.join(credit_list)
if flt(d.credit) > 0: d.against_account = ', '.join(debit_list)
def create_remarks(self):
r = []
if self.doc.cheque_no :
if self.doc.cheque_date:
r.append('Via Reference #%s dated %s' %
(self.doc.cheque_no, formatdate(self.doc.cheque_date)))
else :
msgprint("Please enter Reference date", raise_exception=1)
for d in getlist(self.doclist, 'entries'):
if d.against_invoice and d.credit:
currency = webnotes.conn.get_value("Sales Invoice", d.against_invoice, "currency")
r.append('%s %s against Invoice: %s' %
(cstr(currency), fmt_money(flt(d.credit)), d.against_invoice))
if d.against_voucher and d.debit:
bill_no = webnotes.conn.sql("""select bill_no, bill_date, currency
from `tabPurchase Invoice` where name=%s""", d.against_voucher)
if bill_no and bill_no[0][0] and bill_no[0][0].lower().strip() \
not in ['na', 'not applicable', 'none']:
r.append('%s %s against Bill %s dated %s' %
(cstr(bill_no[0][2]), fmt_money(flt(d.debit)), bill_no[0][0],
bill_no[0][1] and formatdate(bill_no[0][1].strftime('%Y-%m-%d')) or ''))
if self.doc.user_remark:
r.append("User Remark : %s"%self.doc.user_remark)
if r:
self.doc.remark = ("\n").join(r)
else:
webnotes.msgprint("User Remarks is mandatory", raise_exception=1)
def set_aging_date(self):
if self.doc.is_opening != 'Yes':
self.doc.aging_date = self.doc.posting_date
else:
# check account type whether supplier or customer
exists = False
for d in getlist(self.doclist, 'entries'):
account_type = webnotes.conn.get_value("Account", d.account, "account_type")
if account_type in ["Supplier", "Customer"]:
exists = True
break
# If customer/supplier account, aging date is mandatory
if exists and not self.doc.aging_date:
msgprint("Aging Date is mandatory for opening entry", raise_exception=1)
else:
self.doc.aging_date = self.doc.posting_date
def set_print_format_fields(self):
for d in getlist(self.doclist, 'entries'):
account_type, master_type = webnotes.conn.get_value("Account", d.account,
["account_type", "master_type"])
if master_type in ['Supplier', 'Customer']:
if not self.doc.pay_to_recd_from:
self.doc.pay_to_recd_from = webnotes.conn.get_value(master_type,
' - '.join(d.account.split(' - ')[:-1]),
master_type == 'Customer' and 'customer_name' or 'supplier_name')
if account_type == 'Bank or Cash':
company_currency = get_company_currency(self.doc.company)
amt = flt(d.debit) and d.debit or d.credit
self.doc.total_amount = company_currency + ' ' + cstr(amt)
from webnotes.utils import money_in_words
self.doc.total_amount_in_words = money_in_words(amt, company_currency)
def check_credit_days(self):
date_diff = 0
if self.doc.cheque_date:
date_diff = (getdate(self.doc.cheque_date)-getdate(self.doc.posting_date)).days
if date_diff <= 0: return
# Get List of Customer Account
acc_list = filter(lambda d: webnotes.conn.get_value("Account", d.account,
"master_type")=='Customer', getlist(self.doclist,'entries'))
for d in acc_list:
credit_days = self.get_credit_days_for(d.account)
# Check credit days
if credit_days > 0 and not self.get_authorized_user() and cint(date_diff) > credit_days:
msgprint("Credit Not Allowed: Cannot allow a check that is dated \
more than %s days after the posting date" % credit_days, raise_exception=1)
def get_credit_days_for(self, ac):
if not self.credit_days_for.has_key(ac):
self.credit_days_for[ac] = cint(webnotes.conn.get_value("Account", ac, "credit_days"))
if not self.credit_days_for[ac]:
if self.credit_days_global==-1:
self.credit_days_global = cint(webnotes.conn.get_value("Company",
self.doc.company, "credit_days"))
return self.credit_days_global
else:
return self.credit_days_for[ac]
def get_authorized_user(self):
if self.is_approving_authority==-1:
self.is_approving_authority = 0
# Fetch credit controller role
approving_authority = webnotes.conn.get_value("Global Defaults", None,
"credit_controller")
# Check logged-in user is authorized
if approving_authority in webnotes.user.get_roles():
self.is_approving_authority = 1
return self.is_approving_authority
def check_account_against_entries(self):
for d in self.doclist.get({"parentfield": "entries"}):
if d.against_invoice and webnotes.conn.get_value("Sales Invoice",
d.against_invoice, "debit_to") != d.account:
webnotes.throw(_("Credited account (Customer) is not matching with Sales Invoice"))
if d.against_voucher and webnotes.conn.get_value("Purchase Invoice",
d.against_voucher, "credit_to") != d.account:
webnotes.throw(_("Debited account (Supplier) is not matching with \
Purchase Invoice"))
def make_gl_entries(self, cancel=0, adv_adj=0):
from accounts.general_ledger import make_gl_entries
gl_map = []
for d in self.doclist.get({"parentfield": "entries"}):
if d.debit or d.credit:
gl_map.append(
self.get_gl_dict({
"account": d.account,
"against": d.against_account,
"debit": d.debit,
"credit": d.credit,
"against_voucher_type": ((d.against_voucher and "Purchase Invoice")
or (d.against_invoice and "Sales Invoice")
or (d.against_jv and "Journal Voucher")),
"against_voucher": d.against_voucher or d.against_invoice or d.against_jv,
"remarks": self.doc.remark,
"cost_center": d.cost_center
})
)
if gl_map:
make_gl_entries(gl_map, cancel=cancel, adv_adj=adv_adj)
def check_credit_limit(self):
for d in self.doclist.get({"parentfield": "entries"}):
master_type, master_name = webnotes.conn.get_value("Account", d.account,
["master_type", "master_name"])
if master_type == "Customer" and master_name:
super(DocType, self).check_credit_limit(d.account)
def get_balance(self):
if not getlist(self.doclist,'entries'):
msgprint("Please enter atleast 1 entry in 'GL Entries' table")
else:
flag, self.doc.total_debit, self.doc.total_credit = 0, 0, 0
diff = flt(self.doc.difference, 2)
# If any row without amount, set the diff on that row
for d in getlist(self.doclist,'entries'):
if not d.credit and not d.debit and diff != 0:
if diff>0:
d.credit = diff
elif diff<0:
d.debit = diff
flag = 1
# Set the diff in a new row
if flag == 0 and diff != 0:
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
if diff>0:
jd.credit = abs(diff)
elif diff<0:
jd.debit = abs(diff)
# Set the total debit, total credit and difference
for d in getlist(self.doclist,'entries'):
self.doc.total_debit += flt(d.debit, 2)
self.doc.total_credit += flt(d.credit, 2)
self.doc.difference = flt(self.doc.total_debit, 2) - flt(self.doc.total_credit, 2)
def get_outstanding_invoices(self):
self.doclist = self.doc.clear_table(self.doclist, 'entries')
total = 0
for d in self.get_values():
total += flt(d[2])
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
jd.account = cstr(d[1])
if self.doc.write_off_based_on == 'Accounts Receivable':
jd.credit = flt(d[2])
jd.against_invoice = cstr(d[0])
elif self.doc.write_off_based_on == 'Accounts Payable':
jd.debit = flt(d[2])
jd.against_voucher = cstr(d[0])
jd.save(1)
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
if self.doc.write_off_based_on == 'Accounts Receivable':
jd.debit = total
elif self.doc.write_off_based_on == 'Accounts Payable':
jd.credit = total
jd.save(1)
def get_values(self):
cond = (flt(self.doc.write_off_amount) > 0) and \
' and outstanding_amount <= '+ self.doc.write_off_amount or ''
if self.doc.write_off_based_on == 'Accounts Receivable':
return webnotes.conn.sql("""select name, debit_to, outstanding_amount
from `tabSales Invoice` where docstatus = 1 and company = %s
and outstanding_amount > 0 %s""" % ('%s', cond), self.doc.company)
elif self.doc.write_off_based_on == 'Accounts Payable':
return webnotes.conn.sql("""select name, credit_to, outstanding_amount
from `tabPurchase Invoice` where docstatus = 1 and company = %s
and outstanding_amount > 0 %s""" % ('%s', cond), self.doc.company)
@webnotes.whitelist()
def get_default_bank_cash_account(company, voucher_type):
from accounts.utils import get_balance_on
account = webnotes.conn.get_value("Company", company,
voucher_type=="Bank Voucher" and "default_bank_account" or "default_cash_account")
if account:
return {
"account": account,
"balance": get_balance_on(account)
}
@webnotes.whitelist()
def get_payment_entry_from_sales_invoice(sales_invoice):
from accounts.utils import get_balance_on
si = webnotes.bean("Sales Invoice", sales_invoice)
jv = get_payment_entry(si.doc)
jv.doc.remark = 'Payment received against Sales Invoice %(name)s. %(remarks)s' % si.doc.fields
# credit customer
jv.doclist[1].account = si.doc.debit_to
jv.doclist[1].balance = get_balance_on(si.doc.debit_to)
jv.doclist[1].credit = si.doc.outstanding_amount
jv.doclist[1].against_invoice = si.doc.name
# debit bank
jv.doclist[2].debit = si.doc.outstanding_amount
return [d.fields for d in jv.doclist]
@webnotes.whitelist()
def get_payment_entry_from_purchase_invoice(purchase_invoice):
from accounts.utils import get_balance_on
pi = webnotes.bean("Purchase Invoice", purchase_invoice)
jv = get_payment_entry(pi.doc)
jv.doc.remark = 'Payment against Purchase Invoice %(name)s. %(remarks)s' % pi.doc.fields
# credit supplier
jv.doclist[1].account = pi.doc.credit_to
jv.doclist[1].balance = get_balance_on(pi.doc.credit_to)
jv.doclist[1].debit = pi.doc.outstanding_amount
jv.doclist[1].against_voucher = pi.doc.name
# credit bank
jv.doclist[2].credit = pi.doc.outstanding_amount
return [d.fields for d in jv.doclist]
def get_payment_entry(doc):
bank_account = get_default_bank_cash_account(doc.company, "Bank Voucher")
jv = webnotes.new_bean('Journal Voucher')
jv.doc.voucher_type = 'Bank Voucher'
jv.doc.company = doc.company
jv.doc.fiscal_year = doc.fiscal_year
jv.doclist.append({
"doctype": "Journal Voucher Detail",
"parentfield": "entries"
})
jv.doclist.append({
"doctype": "Journal Voucher Detail",
"parentfield": "entries"
})
if bank_account:
jv.doclist[2].account = bank_account["account"]
jv.doclist[2].balance = bank_account["balance"]
return jv
@webnotes.whitelist()
def get_opening_accounts(company):
"""get all balance sheet accounts for opening entry"""
from accounts.utils import get_balance_on
accounts = webnotes.conn.sql_list("""select name from tabAccount
where group_or_ledger='Ledger' and is_pl_account='No' and company=%s""", company)
return [{"account": a, "balance": get_balance_on(a)} for a in accounts]
def get_against_purchase_invoice(doctype, txt, searchfield, start, page_len, filters):
return webnotes.conn.sql("""select name, credit_to, outstanding_amount, bill_no, bill_date
from `tabPurchase Invoice` where credit_to = %s and docstatus = 1
and outstanding_amount > 0 and %s like %s order by name desc limit %s, %s""" %
("%s", searchfield, "%s", "%s", "%s"),
(filters["account"], "%%%s%%" % txt, start, page_len))
def get_against_sales_invoice(doctype, txt, searchfield, start, page_len, filters):
return webnotes.conn.sql("""select name, debit_to, outstanding_amount
from `tabSales Invoice` where debit_to = %s and docstatus = 1
and outstanding_amount > 0 and `%s` like %s order by name desc limit %s, %s""" %
("%s", searchfield, "%s", "%s", "%s"),
(filters["account"], "%%%s%%" % txt, start, page_len))
def get_against_jv(doctype, txt, searchfield, start, page_len, filters):
return webnotes.conn.sql("""select jv.name, jv.posting_date, jv.user_remark
from `tabJournal Voucher` jv, `tabJournal Voucher Detail` jv_detail
where jv_detail.parent = jv.name and jv_detail.account = %s and jv.docstatus = 1
and jv.%s like %s order by jv.name desc limit %s, %s""" %
("%s", searchfield, "%s", "%s", "%s"),
(filters["account"], "%%%s%%" % txt, start, page_len))
@webnotes.whitelist()
def get_outstanding(args):
args = eval(args)
if args.get("doctype") == "Journal Voucher" and args.get("account"):
against_jv_amount = webnotes.conn.sql("""
select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))
from `tabJournal Voucher Detail` where parent=%s and account=%s
and ifnull(against_invoice, '')='' and ifnull(against_voucher, '')=''
and ifnull(against_jv, '')=''""", (args['docname'], args['account']))
against_jv_amount = flt(against_jv_amount[0][0]) if against_jv_amount else 0
if against_jv_amount > 0:
return {"credit": against_jv_amount}
else:
return {"debit": -1* against_jv_amount}
elif args.get("doctype") == "Sales Invoice":
return {
"credit": flt(webnotes.conn.get_value("Sales Invoice", args["docname"],
"outstanding_amount"))
}
elif args.get("doctype") == "Purchase Invoice":
return {
"debit": flt(webnotes.conn.get_value("Purchase Invoice", args["docname"],
"outstanding_amount"))
}

View File

@@ -1,497 +0,0 @@
[
{
"creation": "2013-03-25 10:53:52",
"docstatus": 0,
"modified": "2013-11-03 14:11:33",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"allow_import": 1,
"autoname": "naming_series:",
"doctype": "DocType",
"icon": "icon-file-text",
"is_submittable": 1,
"module": "Accounts",
"name": "__common__",
"read_only_onload": 1,
"search_fields": "voucher_type,posting_date, due_date, cheque_no"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Journal Voucher",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocPerm",
"name": "__common__",
"parent": "Journal Voucher",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1
},
{
"doctype": "DocType",
"name": "Journal Voucher"
},
{
"doctype": "DocField",
"fieldname": "voucher_type_and_date",
"fieldtype": "Section Break",
"label": "Voucher Type and Date",
"options": "icon-flag"
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Series",
"no_copy": 1,
"oldfieldname": "naming_series",
"oldfieldtype": "Select",
"options": "JV",
"print_hide": 1,
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "voucher_type",
"fieldtype": "Select",
"in_filter": 1,
"in_list_view": 1,
"label": "Voucher Type",
"oldfieldname": "voucher_type",
"oldfieldtype": "Select",
"options": "\nJournal Entry\nBank Voucher\nCash Voucher\nCredit Card Voucher\nDebit Note\nCredit Note\nContra Voucher\nExcise Voucher\nWrite Off Voucher\nOpening Entry",
"print_hide": 0,
"read_only": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "column_break1",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "posting_date",
"fieldtype": "Date",
"in_filter": 1,
"in_list_view": 1,
"label": "Posting Date",
"no_copy": 1,
"oldfieldname": "posting_date",
"oldfieldtype": "Date",
"read_only": 0,
"reqd": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "2_add_edit_gl_entries",
"fieldtype": "Section Break",
"label": "Journal Entries",
"oldfieldtype": "Section Break",
"options": "icon-table",
"read_only": 0
},
{
"allow_on_submit": 1,
"doctype": "DocField",
"fieldname": "entries",
"fieldtype": "Table",
"label": "Entries",
"oldfieldname": "entries",
"oldfieldtype": "Table",
"options": "Journal Voucher Detail",
"print_hide": 0,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "section_break99",
"fieldtype": "Section Break",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "total_debit",
"fieldtype": "Currency",
"in_filter": 1,
"in_list_view": 1,
"label": "Total Debit",
"no_copy": 1,
"oldfieldname": "total_debit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "total_credit",
"fieldtype": "Currency",
"in_filter": 1,
"label": "Total Credit",
"no_copy": 1,
"oldfieldname": "total_credit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "column_break99",
"fieldtype": "Column Break",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "difference",
"fieldtype": "Currency",
"label": "Difference",
"no_copy": 1,
"oldfieldname": "difference",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "get_balance",
"fieldtype": "Button",
"label": "Make Difference Entry",
"oldfieldtype": "Button",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "reference",
"fieldtype": "Section Break",
"label": "Reference",
"options": "icon-pushpin",
"read_only": 0
},
{
"description": "eg. Cheque Number",
"doctype": "DocField",
"fieldname": "cheque_no",
"fieldtype": "Data",
"in_filter": 1,
"in_list_view": 1,
"label": "Reference Number",
"no_copy": 1,
"oldfieldname": "cheque_no",
"oldfieldtype": "Data",
"read_only": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "cheque_date",
"fieldtype": "Date",
"label": "Reference Date",
"no_copy": 1,
"oldfieldname": "cheque_date",
"oldfieldtype": "Date",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "clearance_date",
"fieldtype": "Date",
"in_filter": 1,
"label": "Clearance Date",
"no_copy": 1,
"oldfieldname": "clearance_date",
"oldfieldtype": "Date",
"print_hide": 0,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "column_break98",
"fieldtype": "Column Break",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "user_remark",
"fieldtype": "Small Text",
"in_filter": 1,
"label": "User Remark",
"no_copy": 1,
"oldfieldname": "user_remark",
"oldfieldtype": "Small Text",
"read_only": 0
},
{
"description": "User Remark will be added to Auto Remark",
"doctype": "DocField",
"fieldname": "remark",
"fieldtype": "Small Text",
"in_list_view": 0,
"label": "Remark",
"no_copy": 1,
"oldfieldname": "remark",
"oldfieldtype": "Small Text",
"read_only": 1,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "bill_no",
"fieldtype": "Data",
"in_list_view": 0,
"label": "Bill No",
"oldfieldname": "bill_no",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "bill_date",
"fieldtype": "Date",
"label": "Bill Date",
"oldfieldname": "bill_date",
"oldfieldtype": "Date",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "due_date",
"fieldtype": "Date",
"label": "Due Date",
"oldfieldname": "due_date",
"oldfieldtype": "Date",
"print_hide": 0,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "addtional_info",
"fieldtype": "Section Break",
"label": "More Info",
"oldfieldtype": "Section Break",
"options": "icon-file-text",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "column_break2",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"read_only": 0,
"width": "50%"
},
{
"default": "No",
"description": "Considered as Opening Balance",
"doctype": "DocField",
"fieldname": "is_opening",
"fieldtype": "Select",
"in_filter": 1,
"label": "Is Opening",
"oldfieldname": "is_opening",
"oldfieldtype": "Select",
"options": "No\nYes",
"print_hide": 1,
"read_only": 0,
"search_index": 1
},
{
"description": "Actual Posting Date",
"doctype": "DocField",
"fieldname": "aging_date",
"fieldtype": "Date",
"label": "Aging Date",
"no_copy": 0,
"oldfieldname": "aging_date",
"oldfieldtype": "Date",
"print_hide": 1,
"read_only": 0
},
{
"default": "Accounts Receivable",
"depends_on": "eval:doc.voucher_type == 'Write Off Voucher'",
"doctype": "DocField",
"fieldname": "write_off_based_on",
"fieldtype": "Select",
"label": "Write Off Based On",
"options": "Accounts Receivable\nAccounts Payable",
"print_hide": 1,
"read_only": 0,
"report_hide": 1
},
{
"depends_on": "eval:doc.voucher_type == 'Write Off Voucher'",
"doctype": "DocField",
"fieldname": "write_off_amount",
"fieldtype": "Currency",
"label": "Write Off Amount <=",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 0,
"report_hide": 1
},
{
"depends_on": "eval:doc.voucher_type == 'Write Off Voucher'",
"doctype": "DocField",
"fieldname": "get_outstanding_invoices",
"fieldtype": "Button",
"label": "Get Outstanding Invoices",
"options": "get_outstanding_invoices",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "letter_head",
"fieldtype": "Link",
"label": "Letter Head",
"options": "Letter Head"
},
{
"doctype": "DocField",
"fieldname": "column_break3",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "pay_to_recd_from",
"fieldtype": "Data",
"hidden": 0,
"label": "Pay To / Recd From",
"no_copy": 1,
"print_hide": 0,
"read_only": 0,
"report_hide": 1
},
{
"doctype": "DocField",
"fieldname": "total_amount",
"fieldtype": "Data",
"hidden": 1,
"in_list_view": 0,
"label": "Total Amount",
"no_copy": 1,
"print_hide": 1,
"read_only": 1,
"report_hide": 1
},
{
"doctype": "DocField",
"fieldname": "total_amount_in_words",
"fieldtype": "Data",
"hidden": 1,
"label": "Total Amount in Words",
"no_copy": 1,
"print_hide": 1,
"read_only": 1,
"report_hide": 1
},
{
"doctype": "DocField",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"in_filter": 1,
"label": "Fiscal Year",
"oldfieldname": "fiscal_year",
"oldfieldtype": "Select",
"options": "link:Fiscal Year",
"print_hide": 1,
"read_only": 0,
"reqd": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"in_filter": 1,
"label": "Company",
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"print_hide": 1,
"read_only": 0,
"reqd": 1,
"search_index": 1
},
{
"allow_on_submit": 1,
"doctype": "DocField",
"fieldname": "select_print_heading",
"fieldtype": "Link",
"label": "Print Heading",
"no_copy": 1,
"oldfieldname": "select_print_heading",
"oldfieldtype": "Link",
"options": "Print Heading",
"print_hide": 1,
"read_only": 0,
"report_hide": 1
},
{
"doctype": "DocField",
"fieldname": "amended_from",
"fieldtype": "Link",
"label": "Amended From",
"no_copy": 1,
"oldfieldname": "amended_from",
"oldfieldtype": "Link",
"options": "Journal Voucher",
"print_hide": 1,
"read_only": 1
},
{
"amend": 1,
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"role": "Accounts User",
"submit": 1,
"write": 1
},
{
"amend": 1,
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"role": "Accounts Manager",
"submit": 1,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Auditor",
"submit": 0,
"write": 0
}
]

View File

@@ -1,208 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import unittest
import webnotes
class TestJournalVoucher(unittest.TestCase):
def test_journal_voucher_with_against_jv(self):
self.clear_account_balance()
jv_invoice = webnotes.bean(copy=test_records[2])
jv_invoice.insert()
jv_invoice.submit()
self.assertTrue(not webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where against_jv=%s""", jv_invoice.doc.name))
jv_payment = webnotes.bean(copy=test_records[0])
jv_payment.doclist[1].against_jv = jv_invoice.doc.name
jv_payment.insert()
jv_payment.submit()
self.assertTrue(webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where against_jv=%s""", jv_invoice.doc.name))
self.assertTrue(webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where against_jv=%s and credit=400""", jv_invoice.doc.name))
# cancel jv_invoice
jv_invoice.cancel()
self.assertTrue(not webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where against_jv=%s""", jv_invoice.doc.name))
def test_jv_against_stock_account(self):
from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
set_perpetual_inventory()
jv = webnotes.bean(copy=test_records[0])
jv.doclist[1].account = "_Test Warehouse - _TC"
jv.insert()
from accounts.general_ledger import StockAccountInvalidTransaction
self.assertRaises(StockAccountInvalidTransaction, jv.submit)
set_perpetual_inventory(0)
def test_monthly_budget_crossed_ignore(self):
webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
self.clear_account_balance()
jv = webnotes.bean(copy=test_records[0])
jv.doclist[2].account = "_Test Account Cost for Goods Sold - _TC"
jv.doclist[2].cost_center = "_Test Cost Center - _TC"
jv.doclist[2].debit = 20000.0
jv.doclist[1].credit = 20000.0
jv.insert()
jv.submit()
self.assertTrue(webnotes.conn.get_value("GL Entry",
{"voucher_type": "Journal Voucher", "voucher_no": jv.doc.name}))
def test_monthly_budget_crossed_stop(self):
from accounts.utils import BudgetError
webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
self.clear_account_balance()
jv = webnotes.bean(copy=test_records[0])
jv.doclist[2].account = "_Test Account Cost for Goods Sold - _TC"
jv.doclist[2].cost_center = "_Test Cost Center - _TC"
jv.doclist[2].debit = 20000.0
jv.doclist[1].credit = 20000.0
jv.insert()
self.assertRaises(BudgetError, jv.submit)
webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
def test_yearly_budget_crossed_stop(self):
from accounts.utils import BudgetError
self.clear_account_balance()
self.test_monthly_budget_crossed_ignore()
webnotes.conn.set_value("Company", "_Test Company", "yearly_bgt_flag", "Stop")
jv = webnotes.bean(copy=test_records[0])
jv.doc.posting_date = "2013-08-12"
jv.doclist[2].account = "_Test Account Cost for Goods Sold - _TC"
jv.doclist[2].cost_center = "_Test Cost Center - _TC"
jv.doclist[2].debit = 150000.0
jv.doclist[1].credit = 150000.0
jv.insert()
self.assertRaises(BudgetError, jv.submit)
webnotes.conn.set_value("Company", "_Test Company", "yearly_bgt_flag", "Ignore")
def test_monthly_budget_on_cancellation(self):
from accounts.utils import BudgetError
webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Stop")
self.clear_account_balance()
jv = webnotes.bean(copy=test_records[0])
jv.doclist[1].account = "_Test Account Cost for Goods Sold - _TC"
jv.doclist[1].cost_center = "_Test Cost Center - _TC"
jv.doclist[1].credit = 30000.0
jv.doclist[2].debit = 30000.0
jv.submit()
self.assertTrue(webnotes.conn.get_value("GL Entry",
{"voucher_type": "Journal Voucher", "voucher_no": jv.doc.name}))
jv1 = webnotes.bean(copy=test_records[0])
jv1.doclist[2].account = "_Test Account Cost for Goods Sold - _TC"
jv1.doclist[2].cost_center = "_Test Cost Center - _TC"
jv1.doclist[2].debit = 40000.0
jv1.doclist[1].credit = 40000.0
jv1.submit()
self.assertTrue(webnotes.conn.get_value("GL Entry",
{"voucher_type": "Journal Voucher", "voucher_no": jv1.doc.name}))
self.assertRaises(BudgetError, jv.cancel)
webnotes.conn.set_value("Company", "_Test Company", "monthly_bgt_flag", "Ignore")
def clear_account_balance(self):
webnotes.conn.sql("""delete from `tabGL Entry`""")
test_records = [
[{
"company": "_Test Company",
"doctype": "Journal Voucher",
"fiscal_year": "_Test Fiscal Year 2013",
"naming_series": "_T-Journal Voucher-",
"posting_date": "2013-02-14",
"user_remark": "test",
"voucher_type": "Bank Voucher",
"cheque_no": "33",
"cheque_date": "2013-02-14"
},
{
"account": "_Test Customer - _TC",
"doctype": "Journal Voucher Detail",
"credit": 400.0,
"debit": 0.0,
"parentfield": "entries"
},
{
"account": "_Test Account Bank Account - _TC",
"doctype": "Journal Voucher Detail",
"debit": 400.0,
"credit": 0.0,
"parentfield": "entries"
}],
[{
"company": "_Test Company",
"doctype": "Journal Voucher",
"fiscal_year": "_Test Fiscal Year 2013",
"naming_series": "_T-Journal Voucher-",
"posting_date": "2013-02-14",
"user_remark": "test",
"voucher_type": "Bank Voucher",
"cheque_no": "33",
"cheque_date": "2013-02-14"
},
{
"account": "_Test Supplier - _TC",
"doctype": "Journal Voucher Detail",
"credit": 0.0,
"debit": 400.0,
"parentfield": "entries"
},
{
"account": "_Test Account Bank Account - _TC",
"doctype": "Journal Voucher Detail",
"debit": 0.0,
"credit": 400.0,
"parentfield": "entries"
}],
[{
"company": "_Test Company",
"doctype": "Journal Voucher",
"fiscal_year": "_Test Fiscal Year 2013",
"naming_series": "_T-Journal Voucher-",
"posting_date": "2013-02-14",
"user_remark": "test",
"voucher_type": "Bank Voucher",
"cheque_no": "33",
"cheque_date": "2013-02-14"
},
{
"account": "_Test Customer - _TC",
"doctype": "Journal Voucher Detail",
"credit": 0.0,
"debit": 400.0,
"parentfield": "entries"
},
{
"account": "Sales - _TC",
"doctype": "Journal Voucher Detail",
"credit": 400.0,
"debit": 0.0,
"parentfield": "entries",
"cost_center": "_Test Cost Center - _TC"
}],
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,159 +0,0 @@
[
{
"creation": "2013-02-22 01:27:39",
"docstatus": 0,
"modified": "2013-08-02 18:15:56",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "JVD.######",
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Journal Voucher Detail",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Journal Voucher Detail"
},
{
"doctype": "DocField",
"fieldname": "account",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"label": "Account",
"oldfieldname": "account",
"oldfieldtype": "Link",
"options": "Account",
"print_width": "250px",
"reqd": 1,
"search_index": 1,
"width": "250px"
},
{
"default": ":Company",
"description": "If Income or Expense",
"doctype": "DocField",
"fieldname": "cost_center",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"label": "Cost Center",
"oldfieldname": "cost_center",
"oldfieldtype": "Link",
"options": "Cost Center",
"print_width": "180px",
"search_index": 0,
"width": "180px"
},
{
"doctype": "DocField",
"fieldname": "debit",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Debit",
"oldfieldname": "debit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency"
},
{
"doctype": "DocField",
"fieldname": "credit",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Credit",
"oldfieldname": "credit",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency"
},
{
"doctype": "DocField",
"fieldname": "balance",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Account Balance",
"no_copy": 1,
"oldfieldname": "balance",
"oldfieldtype": "Data",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "reference",
"fieldtype": "Section Break",
"label": "Reference"
},
{
"doctype": "DocField",
"fieldname": "against_voucher",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"label": "Against Purchase Invoice",
"no_copy": 1,
"oldfieldname": "against_voucher",
"oldfieldtype": "Link",
"options": "Purchase Invoice",
"print_hide": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "against_invoice",
"fieldtype": "Link",
"in_filter": 1,
"label": "Against Sales Invoice",
"no_copy": 1,
"oldfieldname": "against_invoice",
"oldfieldtype": "Link",
"options": "Sales Invoice",
"print_hide": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "against_jv",
"fieldtype": "Link",
"in_filter": 1,
"label": "Against Journal Voucher",
"no_copy": 1,
"oldfieldname": "against_jv",
"oldfieldtype": "Link",
"options": "Journal Voucher",
"print_hide": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "is_advance",
"fieldtype": "Select",
"label": "Is Advance",
"no_copy": 1,
"oldfieldname": "is_advance",
"oldfieldtype": "Select",
"options": "No\nYes",
"print_hide": 1
},
{
"doctype": "DocField",
"fieldname": "against_account",
"fieldtype": "Text",
"hidden": 1,
"label": "Against Account",
"no_copy": 1,
"oldfieldname": "against_account",
"oldfieldtype": "Text",
"print_hide": 1
}
]

View File

@@ -1 +0,0 @@
Backend scripts for Financial Statements (to be deprecated)

View File

@@ -1,166 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt, get_first_day, get_last_day, has_common
import webnotes.defaults
from accounts.utils import get_balance_on
class DocType:
def __init__(self, doc, doclist):
self.doc = doc
self.doclist = doclist
self.account_list = []
self.ac_details = {} # key: account id, values: debit_or_credit, lft, rgt
self.period_list = []
self.period_start_date = {}
self.period_end_date = {}
self.fs_list = []
self.root_bal = []
self.flag = 0
# Get defaults on load of MIS, MIS - Comparison Report and Financial statements
def get_comp(self):
ret = {}
type = []
ret['period'] = ['Annual','Half Yearly','Quarterly','Monthly']
from accounts.page.accounts_browser.accounts_browser import get_companies
ret['company'] = get_companies()
#--- to get fiscal year and start_date of that fiscal year -----
res = webnotes.conn.sql("select name, year_start_date from `tabFiscal Year`")
ret['fiscal_year'] = [r[0] for r in res]
ret['start_dates'] = {}
for r in res:
ret['start_dates'][r[0]] = str(r[1])
#--- from month and to month (for MIS - Comparison Report) -------
month_list = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
fiscal_start_month = webnotes.conn.sql("select MONTH(year_start_date) from `tabFiscal Year` where name = %s",(webnotes.defaults.get_global_default("fiscal_year")))
fiscal_start_month = fiscal_start_month and fiscal_start_month[0][0] or 1
mon = ['']
for i in range(fiscal_start_month,13): mon.append(month_list[i-1])
for i in range(0,fiscal_start_month-1): mon.append(month_list[i])
ret['month'] = mon
# get MIS Type on basis of roles of session user
self.roles = webnotes.user.get_roles()
if has_common(self.roles, ['Sales Manager']):
type.append('Sales')
if has_common(self.roles, ['Purchase Manager']):
type.append('Purchase')
ret['type'] = type
return ret
def get_statement(self, arg):
self.return_data = []
# define periods
arg = eval(arg)
pl = ''
self.define_periods(arg['year'], arg['period'])
self.return_data.append([4,'']+self.period_list)
if arg['statement'] == 'Balance Sheet': pl = 'No'
if arg['statement'] == 'Profit & Loss': pl = 'Yes'
self.get_children('',0,pl,arg['company'], arg['year'])
return self.return_data
def get_children(self, parent_account, level, pl, company, fy):
cl = webnotes.conn.sql("select distinct account_name, name, debit_or_credit, lft, rgt from `tabAccount` where ifnull(parent_account, '') = %s and ifnull(is_pl_account, 'No')=%s and company=%s and docstatus != 2 order by name asc", (parent_account, pl, company))
level0_diff = [0 for p in self.period_list]
if pl=='Yes' and level==0: # switch for income & expenses
cl = [c for c in cl]
cl.reverse()
if cl:
for c in cl:
self.ac_details[c[1]] = [c[2], c[3], c[4]]
bal_list = self.get_period_balance(c[1], pl)
if level==0: # top level - put balances as totals
self.return_data.append([level, c[0]] + ['' for b in bal_list])
totals = bal_list
for i in range(len(totals)): # make totals
if c[2]=='Credit':
level0_diff[i] += flt(totals[i])
else:
level0_diff[i] -= flt(totals[i])
else:
self.return_data.append([level, c[0]]+bal_list)
if level < 2:
self.get_children(c[1], level+1, pl, company, fy)
# make totals - for top level
if level==0:
# add rows for profit / loss in B/S
if pl=='No':
if c[2]=='Credit':
self.return_data.append([1, 'Total Liabilities'] + totals)
level0_diff = [-i for i in level0_diff] # convert to debit
self.return_data.append([5, 'Profit/Loss (Provisional)'] + level0_diff)
for i in range(len(totals)): # make totals
level0_diff[i] = flt(totals[i]) + level0_diff[i]
else:
self.return_data.append([4, 'Total '+c[0]] + totals)
# add rows for profit / loss in P/L
else:
if c[2]=='Debit':
self.return_data.append([1, 'Total Expenses'] + totals)
self.return_data.append([5, 'Profit/Loss (Provisional)'] + level0_diff)
for i in range(len(totals)): # make totals
level0_diff[i] = flt(totals[i]) + level0_diff[i]
else:
self.return_data.append([4, 'Total '+c[0]] + totals)
def define_periods(self, year, period):
ysd = webnotes.conn.sql("select year_start_date from `tabFiscal Year` where name=%s", year)
ysd = ysd and ysd[0][0] or ''
self.ysd = ysd
# year
if period == 'Annual':
pn = 'FY'+year
self.period_list.append(pn)
self.period_start_date[pn] = ysd
self.period_end_date[pn] = get_last_day(get_first_day(ysd,0,11))
# quarter
if period == 'Quarterly':
for i in range(4):
pn = 'Q'+str(i+1)
self.period_list.append(pn)
self.period_start_date[pn] = get_first_day(ysd,0,i*3)
self.period_end_date[pn] = get_last_day(get_first_day(ysd,0,((i+1)*3)-1))
# month
if period == 'Monthly':
mlist = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
for i in range(12):
fd = get_first_day(ysd,0,i)
pn = mlist[fd.month-1]
self.period_list.append(pn)
self.period_start_date[pn] = fd
self.period_end_date[pn] = get_last_day(fd)
def get_period_balance(self, acc, pl):
ret, i = [], 0
for p in self.period_list:
period_end_date = self.period_end_date[p].strftime('%Y-%m-%d')
bal = get_balance_on(acc, period_end_date)
if pl=='Yes':
bal = bal - sum(ret)
ret.append(bal)
return ret

View File

@@ -1,19 +0,0 @@
[
{
"creation": "2012-03-27 14:35:49",
"docstatus": 0,
"modified": "2013-07-10 14:54:11",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"issingle": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocType",
"name": "MIS Control"
}
]

View File

@@ -1,12 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
cur_frm.set_query("default_account", function(doc) {
return{
filters: {
'account_type': "Bank or Cash",
"group_or_ledger": "Ledger",
'company': doc.company
}
}
});

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,72 +0,0 @@
[
{
"creation": "2012-12-04 17:49:20",
"docstatus": 0,
"modified": "2013-07-05 14:46:28",
"modified_by": "Administrator",
"owner": "harshada@webnotestech.com"
},
{
"allow_rename": 1,
"autoname": "field:mode_of_payment",
"doctype": "DocType",
"document_type": "Master",
"icon": "icon-credit-card",
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Mode of Payment",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0,
"read_only": 0
},
{
"create": 1,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Mode of Payment",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1,
"role": "Accounts Manager",
"submit": 0,
"write": 1
},
{
"doctype": "DocType",
"name": "Mode of Payment"
},
{
"doctype": "DocField",
"fieldname": "mode_of_payment",
"fieldtype": "Data",
"label": "Mode of Payment",
"oldfieldname": "mode_of_payment",
"oldfieldtype": "Data",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
"options": "Company"
},
{
"description": "Default Bank / Cash account will be automatically updated in POS Invoice when this mode is selected.",
"doctype": "DocField",
"fieldname": "default_account",
"fieldtype": "Link",
"label": "Default Account",
"options": "Account"
},
{
"doctype": "DocPerm"
}
]

View File

@@ -1,50 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
// Booking Entry Id
// --------------------
cur_frm.add_fetch("account", "company", "company")
cur_frm.cscript.onload_post_render = function(doc) {
$(cur_frm.get_field("reconcile").input).addClass("btn-info");
}
cur_frm.cscript.refresh = function(doc) {
cur_frm.set_intro("");
if(!doc.voucher_no) {
cur_frm.set_intro(wn._("Select the Invoice against which you want to allocate payments."));
} else {
cur_frm.set_intro(wn._("Set allocated amount against each Payment Entry and click 'Allocate'."));
}
}
cur_frm.fields_dict.voucher_no.get_query = function(doc) {
// TO-do: check for pos, it should not come
if (!doc.account) msgprint(wn._("Please select Account first"));
else {
return {
doctype: doc.voucher_type,
query: "accounts.doctype.payment_to_invoice_matching_tool.payment_to_invoice_matching_tool.gl_entry_details",
filters: {
"dt": doc.voucher_type,
"acc": doc.account,
"account_type": doc.account_type
}
}
}
}
cur_frm.cscript.voucher_no =function(doc, cdt, cdn) {
return get_server_fields('get_voucher_details', '', '', doc, cdt, cdn, 1)
}
cur_frm.cscript.account = function(doc, cdt, cdn) {
return wn.call({
doc: this.frm.doc,
method: "set_account_type",
callback: function(r) {
if(!r.exc) refresh_field("account_type");
}
});
}

View File

@@ -1,158 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt
from webnotes.model.doc import addchild
from webnotes.model.bean import getlist
from webnotes import msgprint
class DocType:
def __init__(self, doc, doclist):
self.doc = doc
self.doclist = doclist
def set_account_type(self):
self.doc.account_type = self.doc.account and \
webnotes.conn.get_value("Account", self.doc.account, "debit_or_credit").lower() or ""
def get_voucher_details(self):
total_amount = webnotes.conn.sql("""select sum(%s) from `tabGL Entry`
where voucher_type = %s and voucher_no = %s
and account = %s""" %
(self.doc.account_type, '%s', '%s', '%s'),
(self.doc.voucher_type, self.doc.voucher_no, self.doc.account))
total_amount = total_amount and flt(total_amount[0][0]) or 0
reconciled_payment = webnotes.conn.sql("""
select sum(ifnull(%s, 0)) - sum(ifnull(%s, 0)) from `tabGL Entry` where
against_voucher = %s and voucher_no != %s
and account = %s""" %
((self.doc.account_type == 'debit' and 'credit' or 'debit'), self.doc.account_type,
'%s', '%s', '%s'), (self.doc.voucher_no, self.doc.voucher_no, self.doc.account))
reconciled_payment = reconciled_payment and flt(reconciled_payment[0][0]) or 0
ret = {
'total_amount': total_amount,
'pending_amt_to_reconcile': total_amount - reconciled_payment
}
return ret
def get_payment_entries(self):
"""
Get payment entries for the account and period
Payment entry will be decided based on account type (Dr/Cr)
"""
self.doclist = self.doc.clear_table(self.doclist, 'ir_payment_details')
gle = self.get_gl_entries()
self.create_payment_table(gle)
def get_gl_entries(self):
self.validate_mandatory()
dc = self.doc.account_type == 'debit' and 'credit' or 'debit'
cond = self.doc.from_date and " and t1.posting_date >= '" + self.doc.from_date + "'" or ""
cond += self.doc.to_date and " and t1.posting_date <= '" + self.doc.to_date + "'"or ""
cond += self.doc.amt_greater_than and \
' and t2.' + dc+' >= ' + self.doc.amt_greater_than or ''
cond += self.doc.amt_less_than and \
' and t2.' + dc+' <= ' + self.doc.amt_less_than or ''
gle = webnotes.conn.sql("""
select t1.name as voucher_no, t1.posting_date, t1.total_debit as total_amt,
sum(ifnull(t2.credit, 0)) - sum(ifnull(t2.debit, 0)) as amt_due, t1.remark,
t2.against_account, t2.name as voucher_detail_no
from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2
where t1.name = t2.parent and t1.docstatus = 1 and t2.account = %s
and ifnull(t2.against_voucher, '')='' and ifnull(t2.against_invoice, '')=''
and ifnull(t2.against_jv, '')='' and t2.%s > 0 %s group by t1.name, t2.name """ %
('%s', dc, cond), self.doc.account, as_dict=1)
return gle
def create_payment_table(self, gle):
for d in gle:
ch = addchild(self.doc, 'ir_payment_details',
'Payment to Invoice Matching Tool Detail', self.doclist)
ch.voucher_no = d.get('voucher_no')
ch.posting_date = d.get('posting_date')
ch.amt_due = self.doc.account_type == 'debit' and flt(d.get('amt_due')) \
or -1*flt(d.get('amt_due'))
ch.total_amt = flt(d.get('total_amt'))
ch.against_account = d.get('against_account')
ch.remarks = d.get('remark')
ch.voucher_detail_no = d.get('voucher_detail_no')
def validate_mandatory(self):
if not self.doc.account:
msgprint("Please select Account first", raise_exception=1)
def reconcile(self):
"""
Links booking and payment voucher
1. cancel payment voucher
2. split into multiple rows if partially adjusted, assign against voucher
3. submit payment voucher
"""
if not self.doc.voucher_no or not webnotes.conn.sql("""select name from `tab%s`
where name = %s""" % (self.doc.voucher_type, '%s'), self.doc.voucher_no):
msgprint("Please select valid Voucher No to proceed", raise_exception=1)
lst = []
for d in getlist(self.doclist, 'ir_payment_details'):
if flt(d.amt_to_be_reconciled) > 0:
args = {
'voucher_no' : d.voucher_no,
'voucher_detail_no' : d.voucher_detail_no,
'against_voucher_type' : self.doc.voucher_type,
'against_voucher' : self.doc.voucher_no,
'account' : self.doc.account,
'is_advance' : 'No',
'dr_or_cr' : self.doc.account_type=='debit' and 'credit' or 'debit',
'unadjusted_amt' : flt(d.amt_due),
'allocated_amt' : flt(d.amt_to_be_reconciled)
}
lst.append(args)
if lst:
from accounts.utils import reconcile_against_document
reconcile_against_document(lst)
msgprint("Successfully allocated.")
else:
msgprint("No amount allocated.", raise_exception=1)
def gl_entry_details(doctype, txt, searchfield, start, page_len, filters):
from controllers.queries import get_match_cond
return webnotes.conn.sql("""select gle.voucher_no, gle.posting_date,
gle.%(account_type)s from `tabGL Entry` gle
where gle.account = '%(acc)s'
and gle.voucher_type = '%(dt)s'
and gle.voucher_no like '%(txt)s'
and (ifnull(gle.against_voucher, '') = ''
or ifnull(gle.against_voucher, '') = gle.voucher_no )
and ifnull(gle.%(account_type)s, 0) > 0
and (select ifnull(abs(sum(ifnull(debit, 0)) - sum(ifnull(credit, 0))), 0)
from `tabGL Entry`
where against_voucher_type = '%(dt)s'
and against_voucher = gle.voucher_no
and voucher_no != gle.voucher_no)
!= abs(ifnull(gle.debit, 0) - ifnull(gle.credit, 0)
)
%(mcond)s
ORDER BY gle.posting_date desc, gle.voucher_no desc
limit %(start)s, %(page_len)s""" % {
"dt":filters["dt"],
"acc":filters["acc"],
"account_type": filters['account_type'],
'mcond':get_match_cond(doctype, searchfield),
'txt': "%%%s%%" % txt,
"start": start,
"page_len": page_len
})

View File

@@ -1,196 +0,0 @@
[
{
"creation": "2013-01-30 12:49:46",
"docstatus": 0,
"modified": "2013-07-22 15:31:00",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"document_type": "Other",
"hide_toolbar": 1,
"icon": "icon-magic",
"issingle": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Payment to Invoice Matching Tool",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"create": 1,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Payment to Invoice Matching Tool",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 0,
"submit": 0,
"write": 1
},
{
"doctype": "DocType",
"name": "Payment to Invoice Matching Tool"
},
{
"doctype": "DocField",
"fieldname": "account",
"fieldtype": "Link",
"label": "Account",
"options": "Account",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "account_type",
"fieldtype": "Data",
"hidden": 1,
"label": "Account Type",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"hidden": 1,
"label": "Company",
"options": "Company",
"print_hide": 1
},
{
"doctype": "DocField",
"fieldname": "voucher_type",
"fieldtype": "Select",
"label": "Voucher Type",
"options": "Sales Invoice\nPurchase Invoice\nJournal Voucher",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "voucher_no",
"fieldtype": "Link",
"label": "Voucher No",
"options": "[Select]",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "pull_payment_entries",
"fieldtype": "Button",
"label": "Pull Payment Entries",
"options": "get_payment_entries"
},
{
"doctype": "DocField",
"fieldname": "column_break1",
"fieldtype": "Column Break",
"print_width": "50%",
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "total_amount",
"fieldtype": "Currency",
"label": "Total Amount",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "pending_amt_to_reconcile",
"fieldtype": "Currency",
"label": "Outstanding Amount",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "payment_entries",
"fieldtype": "Section Break",
"label": "Payment Entries"
},
{
"description": "Update allocated amount in the above table and then click \"Allocate\" button",
"doctype": "DocField",
"fieldname": "ir_payment_details",
"fieldtype": "Table",
"label": "Payment Entries",
"options": "Payment to Invoice Matching Tool Detail"
},
{
"doctype": "DocField",
"fieldname": "reconcile",
"fieldtype": "Button",
"label": "Allocate",
"options": "reconcile"
},
{
"doctype": "DocField",
"fieldname": "section_break0",
"fieldtype": "Section Break",
"options": "Simple"
},
{
"doctype": "DocField",
"fieldname": "column_break2",
"fieldtype": "Column Break",
"label": "Filter By Date",
"print_width": "50%",
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "from_date",
"fieldtype": "Date",
"label": "From Date"
},
{
"doctype": "DocField",
"fieldname": "to_date",
"fieldtype": "Date",
"label": "To Date"
},
{
"doctype": "DocField",
"fieldname": "help_html",
"fieldtype": "HTML",
"label": "Help HTML",
"options": "Click \"Pull Payment Entries\" to refresh the table with filters."
},
{
"doctype": "DocField",
"fieldname": "column_break3",
"fieldtype": "Column Break",
"label": "Filter By Amount",
"print_width": "50%",
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "amt_greater_than",
"fieldtype": "Data",
"label": "Amount >="
},
{
"doctype": "DocField",
"fieldname": "amt_less_than",
"fieldtype": "Data",
"label": "Amount <="
},
{
"doctype": "DocPerm",
"role": "Accounts Manager"
},
{
"doctype": "DocPerm",
"role": "Accounts User"
}
]

View File

@@ -1,8 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import unittest
import webnotes
test_records = []

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,101 +0,0 @@
[
{
"creation": "2013-02-22 01:27:39",
"docstatus": 0,
"modified": "2013-07-10 14:54:11",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Payment to Invoice Matching Tool Detail",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Payment to Invoice Matching Tool Detail"
},
{
"doctype": "DocField",
"fieldname": "voucher_no",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Voucher No",
"options": "Journal Voucher",
"print_width": "140px",
"read_only": 1,
"reqd": 0,
"width": "140px"
},
{
"doctype": "DocField",
"fieldname": "amt_due",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Unmatched Amount",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "amt_to_be_reconciled",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Allocated Amount",
"options": "Company:company:default_currency",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "posting_date",
"fieldtype": "Date",
"in_list_view": 1,
"label": "Posting Date",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "total_amt",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Total Amount",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "against_account",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Against Account",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "remarks",
"fieldtype": "Small Text",
"label": "Remarks",
"print_width": "200px",
"read_only": 1,
"width": "200px"
},
{
"doctype": "DocField",
"fieldname": "voucher_detail_no",
"fieldtype": "Data",
"hidden": 1,
"label": "Voucher Detail No",
"print_hide": 1,
"read_only": 1,
"reqd": 0
}
]

View File

@@ -1,103 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import cstr, flt, getdate
from webnotes import msgprint, _
from controllers.accounts_controller import AccountsController
class DocType(AccountsController):
def __init__(self,d,dl):
self.doc, self.doclist = d, dl
self.year_start_date = ''
def validate(self):
self.validate_account_head()
self.validate_posting_date()
self.validate_pl_balances()
def on_submit(self):
self.make_gl_entries()
def on_cancel(self):
webnotes.conn.sql("""delete from `tabGL Entry`
where voucher_type = 'Period Closing Voucher' and voucher_no=%s""", self.doc.name)
def validate_account_head(self):
debit_or_credit, is_pl_account = webnotes.conn.get_value("Account",
self.doc.closing_account_head, ["debit_or_credit", "is_pl_account"])
if debit_or_credit != 'Credit' or is_pl_account != 'No':
webnotes.throw(_("Account") + ": " + self.doc.closing_account_head +
_("must be a Liability account"))
def validate_posting_date(self):
from accounts.utils import get_fiscal_year
self.year_start_date = get_fiscal_year(self.doc.posting_date, self.doc.fiscal_year)[1]
pce = webnotes.conn.sql("""select name from `tabPeriod Closing Voucher`
where posting_date > %s and fiscal_year = %s and docstatus = 1""",
(self.doc.posting_date, self.doc.fiscal_year))
if pce and pce[0][0]:
webnotes.throw(_("Another Period Closing Entry") + ": " + cstr(pce[0][0]) +
_("has been made after posting date") + ": " + self.doc.posting_date)
def validate_pl_balances(self):
income_bal = webnotes.conn.sql("""
select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0))
from `tabGL Entry` t1, tabAccount t2
where t1.account = t2.name and t1.posting_date between %s and %s
and t2.debit_or_credit = 'Credit' and t2.is_pl_account = 'Yes'
and t2.docstatus < 2 and t2.company = %s""",
(self.year_start_date, self.doc.posting_date, self.doc.company))
expense_bal = webnotes.conn.sql("""
select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0))
from `tabGL Entry` t1, tabAccount t2
where t1.account = t2.name and t1.posting_date between %s and %s
and t2.debit_or_credit = 'Debit' and t2.is_pl_account = 'Yes'
and t2.docstatus < 2 and t2.company=%s""",
(self.year_start_date, self.doc.posting_date, self.doc.company))
income_bal = income_bal and income_bal[0][0] or 0
expense_bal = expense_bal and expense_bal[0][0] or 0
if not income_bal and not expense_bal:
webnotes.throw(_("Both Income and Expense balances are zero. \
No Need to make Period Closing Entry."))
def get_pl_balances(self):
"""Get balance for pl accounts"""
return webnotes.conn.sql("""
select t1.account, sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) as balance
from `tabGL Entry` t1, `tabAccount` t2
where t1.account = t2.name and ifnull(t2.is_pl_account, 'No') = 'Yes'
and t2.docstatus < 2 and t2.company = %s
and t1.posting_date between %s and %s
group by t1.account
""", (self.doc.company, self.year_start_date, self.doc.posting_date), as_dict=1)
def make_gl_entries(self):
gl_entries = []
net_pl_balance = 0
pl_accounts = self.get_pl_balances()
for acc in pl_accounts:
if flt(acc.balance):
gl_entries.append(self.get_gl_dict({
"account": acc.account,
"debit": abs(flt(acc.balance)) if flt(acc.balance) < 0 else 0,
"credit": abs(flt(acc.balance)) if flt(acc.balance) > 0 else 0,
}))
net_pl_balance += flt(acc.balance)
if net_pl_balance:
gl_entries.append(self.get_gl_dict({
"account": self.doc.closing_account_head,
"debit": abs(net_pl_balance) if net_pl_balance > 0 else 0,
"credit": abs(net_pl_balance) if net_pl_balance < 0 else 0
}))
from accounts.general_ledger import make_gl_entries
make_gl_entries(gl_entries)

View File

@@ -1,141 +0,0 @@
[
{
"creation": "2013-01-10 16:34:07",
"docstatus": 0,
"modified": "2013-08-12 17:13:23",
"modified_by": "Administrator",
"owner": "jai@webnotestech.com"
},
{
"autoname": "PCE/.###",
"doctype": "DocType",
"icon": "icon-file-text",
"is_submittable": 1,
"module": "Accounts",
"name": "__common__",
"search_fields": "posting_date, fiscal_year"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Period Closing Voucher",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"amend": 1,
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Period Closing Voucher",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1,
"submit": 1,
"write": 1
},
{
"doctype": "DocType",
"name": "Period Closing Voucher"
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "transaction_date",
"fieldtype": "Date",
"label": "Transaction Date",
"oldfieldname": "transaction_date",
"oldfieldtype": "Date"
},
{
"doctype": "DocField",
"fieldname": "posting_date",
"fieldtype": "Date",
"label": "Posting Date",
"oldfieldname": "posting_date",
"oldfieldtype": "Date",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"label": "Closing Fiscal Year",
"oldfieldname": "fiscal_year",
"oldfieldtype": "Select",
"options": "link:Fiscal Year",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "amended_from",
"fieldtype": "Data",
"label": "Amended From",
"no_copy": 1,
"oldfieldname": "amended_from",
"oldfieldtype": "Data",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Select",
"label": "Company",
"oldfieldname": "company",
"oldfieldtype": "Select",
"options": "link:Company",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "column_break1",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break"
},
{
"description": "The account head under Liability, in which Profit/Loss will be booked",
"doctype": "DocField",
"fieldname": "closing_account_head",
"fieldtype": "Link",
"label": "Closing Account Head",
"oldfieldname": "closing_account_head",
"oldfieldtype": "Link",
"options": "Account",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "coa_help",
"fieldtype": "HTML",
"label": "CoA Help",
"oldfieldtype": "HTML",
"options": "<a href=\"#!Accounts Browser/Account\">To manage Account Head, click here</a>"
},
{
"doctype": "DocField",
"fieldname": "remarks",
"fieldtype": "Small Text",
"label": "Remarks",
"oldfieldname": "remarks",
"oldfieldtype": "Small Text",
"reqd": 1
},
{
"doctype": "DocPerm",
"role": "System Manager"
},
{
"doctype": "DocPerm",
"role": "Accounts Manager"
}
]

View File

@@ -1,56 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import unittest
import webnotes
class TestPeriodClosingVoucher(unittest.TestCase):
def test_closing_entry(self):
# clear GL Entries
webnotes.conn.sql("""delete from `tabGL Entry`""")
from accounts.doctype.journal_voucher.test_journal_voucher import test_records as jv_records
jv = webnotes.bean(copy=jv_records[2])
jv.insert()
jv.submit()
jv1 = webnotes.bean(copy=jv_records[0])
jv1.doclist[2].account = "_Test Account Cost for Goods Sold - _TC"
jv1.doclist[2].debit = 600.0
jv1.doclist[1].credit = 600.0
jv1.insert()
jv1.submit()
pcv = webnotes.bean(copy=test_record)
pcv.insert()
pcv.submit()
gl_entries = webnotes.conn.sql("""select account, debit, credit
from `tabGL Entry` where voucher_type='Period Closing Voucher' and voucher_no=%s
order by account asc, debit asc""", pcv.doc.name, as_dict=1)
self.assertTrue(gl_entries)
expected_gl_entries = sorted([
["_Test Account Reserves and Surplus - _TC", 200.0, 0.0],
["_Test Account Cost for Goods Sold - _TC", 0.0, 600.0],
["Sales - _TC", 400.0, 0.0]
])
for i, gle in enumerate(gl_entries):
self.assertEquals(expected_gl_entries[i][0], gle.account)
self.assertEquals(expected_gl_entries[i][1], gle.debit)
self.assertEquals(expected_gl_entries[i][2], gle.credit)
test_dependencies = ["Customer", "Cost Center"]
test_record = [{
"doctype": "Period Closing Voucher",
"closing_account_head": "_Test Account Reserves and Surplus - _TC",
"company": "_Test Company",
"fiscal_year": "_Test Fiscal Year 2013",
"posting_date": "2013-03-31",
"remarks": "test"
}]

View File

@@ -1,78 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
cur_frm.cscript.onload = function(doc,cdt,cdn){
return $c_obj(make_doclist(cdt,cdn),'get_series','',function(r,rt){
if(r.message) set_field_options('naming_series', r.message);
});
cur_frm.set_query("selling_price_list", function() {
return { filters: { buying_or_selling: "Selling" } };
});
}
//cash bank account
//------------------------------------
cur_frm.fields_dict['cash_bank_account'].get_query = function(doc,cdt,cdn) {
return{
filters:{
'debit_or_credit': "Debit",
'is_pl_account': "No",
'group_or_ledger': "Ledger",
'company': doc.company
}
}
}
// Income Account
// --------------------------------
cur_frm.fields_dict['income_account'].get_query = function(doc,cdt,cdn) {
return{
filters:{
'debit_or_credit': "Credit",
'group_or_ledger': "Ledger",
'company': doc.company,
'account_type': "Income Account"
}
}
}
// Cost Center
// -----------------------------
cur_frm.fields_dict['cost_center'].get_query = function(doc,cdt,cdn) {
return{
filters:{
'company': doc.company,
'group_or_ledger': "Ledger"
}
}
}
// Expense Account
// -----------------------------
cur_frm.fields_dict["expense_account"].get_query = function(doc) {
return {
filters: {
"is_pl_account": "Yes",
"debit_or_credit": "Debit",
"company": doc.company,
"group_or_ledger": "Ledger"
}
}
}
// ------------------ Get Print Heading ------------------------------------
cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
return{
filters:[
['Print Heading', 'docstatus', '!=', 2]
]
}
}
cur_frm.fields_dict.user.get_query = function(doc,cdt,cdn) {
return{ query:"core.doctype.profile.profile.profile_query"}
}

View File

@@ -1,64 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes import msgprint, _
from webnotes.utils import cint
class DocType:
def __init__(self,doc,doclist):
self.doc, self.doclist = doc,doclist
def get_series(self):
import webnotes.model.doctype
docfield = webnotes.model.doctype.get('Sales Invoice')
series = [d.options for d in docfield
if d.doctype == 'DocField' and d.fieldname == 'naming_series']
return series and series[0] or ''
def validate(self):
self.check_for_duplicate()
self.validate_expense_account()
self.validate_all_link_fields()
def check_for_duplicate(self):
res = webnotes.conn.sql("""select name, user from `tabPOS Setting`
where ifnull(user, '') = %s and name != %s and company = %s""",
(self.doc.user, self.doc.name, self.doc.company))
if res:
if res[0][1]:
msgprint("POS Setting '%s' already created for user: '%s' and company: '%s'" %
(res[0][0], res[0][1], self.doc.company), raise_exception=1)
else:
msgprint("Global POS Setting already created - %s for this company: '%s'" %
(res[0][0], self.doc.company), raise_exception=1)
def validate_expense_account(self):
if cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")) \
and not self.doc.expense_account:
msgprint(_("Expense Account is mandatory"), raise_exception=1)
def validate_all_link_fields(self):
accounts = {"Account": [self.doc.cash_bank_account, self.doc.income_account,
self.doc.expense_account], "Cost Center": [self.doc.cost_center],
"Warehouse": [self.doc.warehouse]}
for link_dt, dn_list in accounts.items():
for link_dn in dn_list:
if link_dn and not webnotes.conn.exists({"doctype": link_dt,
"company": self.doc.company, "name": link_dn}):
webnotes.throw(link_dn +_(" does not belong to ") + self.doc.company)
def on_update(self):
webnotes.defaults.clear_default("is_pos")
pos_view_users = webnotes.conn.sql_list("""select user from `tabPOS Setting`""")
for user in pos_view_users:
if user:
webnotes.defaults.set_user_default("is_pos", 1, user)
else:
webnotes.defaults.set_global_default("is_pos", 1)
def on_trash(self):
self.on_update()

View File

@@ -1,242 +0,0 @@
[
{
"creation": "2013-05-24 12:15:51",
"docstatus": 0,
"modified": "2013-11-02 16:58:38",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "POS/.####",
"doctype": "DocType",
"icon": "icon-cog",
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "POS Setting",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocPerm",
"name": "__common__",
"parent": "POS Setting",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1,
"submit": 0
},
{
"doctype": "DocType",
"name": "POS Setting"
},
{
"doctype": "DocField",
"fieldname": "user",
"fieldtype": "Link",
"in_list_view": 1,
"label": "User",
"oldfieldname": "user",
"oldfieldtype": "Link",
"options": "Profile",
"read_only": 0
},
{
"description": "<a href=\"#Sales Browser/Territory\">Add / Edit</a>",
"doctype": "DocField",
"fieldname": "territory",
"fieldtype": "Link",
"label": "Territory",
"oldfieldname": "territory",
"oldfieldtype": "Link",
"options": "Territory",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Series",
"no_copy": 1,
"oldfieldname": "naming_series",
"oldfieldtype": "Select",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "currency",
"fieldtype": "Link",
"label": "Currency",
"oldfieldname": "currency",
"oldfieldtype": "Select",
"options": "Currency",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "selling_price_list",
"fieldtype": "Link",
"label": "Price List",
"oldfieldname": "price_list_name",
"oldfieldtype": "Select",
"options": "Price List",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Company",
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"read_only": 0
},
{
"default": "1",
"description": "Create Stock Ledger Entries when you submit a Sales Invoice",
"doctype": "DocField",
"fieldname": "update_stock",
"fieldtype": "Check",
"label": "Update Stock",
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "customer",
"fieldtype": "Link",
"label": "Customer",
"oldfieldname": "customer_account",
"oldfieldtype": "Link",
"options": "Customer",
"read_only": 0,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "cash_bank_account",
"fieldtype": "Link",
"label": "Cash/Bank Account",
"oldfieldname": "cash_bank_account",
"oldfieldtype": "Link",
"options": "Account",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "income_account",
"fieldtype": "Link",
"label": "Income Account",
"oldfieldname": "income_account",
"oldfieldtype": "Link",
"options": "Account",
"read_only": 0,
"reqd": 1
},
{
"depends_on": "eval:sys_defaults.auto_accounting_for_stock",
"doctype": "DocField",
"fieldname": "expense_account",
"fieldtype": "Link",
"hidden": 0,
"label": "Expense Account",
"options": "Account",
"print_hide": 1,
"read_only": 0,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "warehouse",
"fieldtype": "Link",
"label": "Warehouse",
"oldfieldname": "warehouse",
"oldfieldtype": "Link",
"options": "Warehouse",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "cost_center",
"fieldtype": "Link",
"label": "Cost Center",
"oldfieldname": "cost_center",
"oldfieldtype": "Link",
"options": "Cost Center",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "charge",
"fieldtype": "Link",
"label": "Charge",
"oldfieldname": "charge",
"oldfieldtype": "Link",
"options": "Sales Taxes and Charges Master",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "letter_head",
"fieldtype": "Select",
"label": "Letter Head",
"oldfieldname": "letter_head",
"oldfieldtype": "Select",
"options": "link:Letter Head",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "tc_name",
"fieldtype": "Link",
"label": "Terms and Conditions",
"oldfieldname": "tc_name",
"oldfieldtype": "Link",
"options": "Terms and Conditions",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "select_print_heading",
"fieldtype": "Select",
"in_filter": 0,
"label": "Print Heading",
"oldfieldname": "select_print_heading",
"oldfieldtype": "Select",
"options": "link:Print Heading",
"read_only": 0
},
{
"create": 1,
"doctype": "DocPerm",
"role": "Accounts Manager",
"write": 1
},
{
"doctype": "DocPerm",
"role": "Accounts User"
}
]

View File

@@ -1,19 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
test_records = [
[{
"doctype": "POS Setting",
"name": "_Test POS Setting",
"currency": "INR",
"selling_price_list": "_Test Price List",
"company": "_Test Company",
"warehouse": "_Test Warehouse - _TC",
"territory": "_Test Territory",
"cash_bank_account": "_Test Account Bank Account - _TC",
"income_account": "Sales - _TC",
"cost_center": "_Test Cost Center - _TC",
"expense_account": "_Test Account Cost for Goods Sold - _TC",
"naming_series": "_T-Sales Invoice-"
}]
]

View File

@@ -1,218 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
cur_frm.cscript.tname = "Purchase Invoice Item";
cur_frm.cscript.fname = "entries";
cur_frm.cscript.other_fname = "purchase_tax_details";
wn.provide("erpnext.accounts");
wn.require('app/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js');
wn.require('app/buying/doctype/purchase_common/purchase_common.js');
wn.require('app/accounts/doctype/sales_invoice/pos.js');
erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({
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) {
this.frm.set_df_property("credit_to", "print_hide", 0);
}
}
},
refresh: function(doc) {
this._super();
// Show / Hide button
if(doc.docstatus==1 && doc.outstanding_amount > 0)
this.frm.add_custom_button(wn._('Make Payment Entry'), this.make_bank_voucher);
if(doc.docstatus==1) {
cur_frm.appframe.add_button(wn._('View Ledger'), function() {
wn.route_options = {
"voucher_no": doc.name,
"from_date": doc.posting_date,
"to_date": doc.posting_date,
};
wn.set_route("general-ledger");
}, "icon-table");
}
if(doc.docstatus===0) {
cur_frm.add_custom_button(wn._('From Purchase Order'),
function() {
wn.model.map_current_doc({
method: "buying.doctype.purchase_order.purchase_order.make_purchase_invoice",
source_doctype: "Purchase Order",
get_query_filters: {
supplier: cur_frm.doc.supplier || undefined,
docstatus: 1,
status: ["!=", "Stopped"],
per_billed: ["<", 99.99],
company: cur_frm.doc.company
}
})
});
cur_frm.add_custom_button(wn._('From Purchase Receipt'),
function() {
wn.model.map_current_doc({
method: "stock.doctype.purchase_receipt.purchase_receipt.make_purchase_invoice",
source_doctype: "Purchase Receipt",
get_query_filters: {
supplier: cur_frm.doc.supplier || undefined,
docstatus: 1,
company: cur_frm.doc.company
}
})
});
}
this.is_opening(doc);
},
credit_to: function() {
this.supplier();
},
write_off_amount: function() {
this.calculate_outstanding_amount();
this.frm.refresh_fields();
},
allocated_amount: function() {
this.calculate_total_advance("Purchase Invoice", "advance_allocation_details");
this.frm.refresh_fields();
},
tc_name: function() {
this.get_terms();
},
entries_add: function(doc, cdt, cdn) {
var row = wn.model.get_doc(cdt, cdn);
this.frm.script_manager.copy_from_first_row("entries", row, ["expense_head", "cost_center"]);
}
});
cur_frm.script_manager.make(erpnext.accounts.PurchaseInvoice);
cur_frm.cscript.is_opening = function(doc, dt, dn) {
hide_field('aging_date');
if (doc.is_opening == 'Yes') unhide_field('aging_date');
}
cur_frm.cscript.make_bank_voucher = function() {
return wn.call({
method: "accounts.doctype.journal_voucher.journal_voucher.get_payment_entry_from_purchase_invoice",
args: {
"purchase_invoice": cur_frm.doc.name,
},
callback: function(r) {
var doclist = wn.model.sync(r.message);
wn.set_route("Form", doclist[0].doctype, doclist[0].name);
}
});
}
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['entries'].grid.get_field("item_code").get_query = function(doc, cdt, cdn) {
return {
query:"controllers.queries.item_query",
filters:{
'is_purchase_item': 'Yes'
}
}
}
cur_frm.fields_dict['credit_to'].get_query = function(doc) {
return{
filters:{
'debit_or_credit': 'Credit',
'is_pl_account': 'No',
'group_or_ledger': 'Ledger',
'company': doc.company
}
}
}
// Get Print Heading
cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
return{
filters:[
['Print Heading', 'docstatus', '!=', 2]
]
}
}
cur_frm.set_query("expense_head", "entries", function(doc) {
return{
query: "accounts.doctype.purchase_invoice.purchase_invoice.get_expense_account",
filters: {'company': doc.company}
}
});
cur_frm.cscript.expense_head = function(doc, cdt, cdn){
var d = locals[cdt][cdn];
if(d.idx == 1 && d.expense_head){
var cl = getchildren('Purchase Invoice Item', doc.name, 'entries', doc.doctype);
for(var i = 0; i < cl.length; i++){
if(!cl[i].expense_head) cl[i].expense_head = d.expense_head;
}
}
refresh_field('entries');
}
cur_frm.fields_dict["entries"].grid.get_field("cost_center").get_query = function(doc) {
return {
filters: {
'company': doc.company,
'group_or_ledger': 'Ledger'
}
}
}
cur_frm.cscript.cost_center = function(doc, cdt, cdn){
var d = locals[cdt][cdn];
if(d.idx == 1 && d.cost_center){
var cl = getchildren('Purchase Invoice Item', doc.name, 'entries', doc.doctype);
for(var i = 0; i < cl.length; i++){
if(!cl[i].cost_center) cl[i].cost_center = d.cost_center;
}
}
refresh_field('entries');
}
cur_frm.fields_dict['entries'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
return{
filters:[
['Project', 'status', 'not in', 'Completed, Cancelled']
]
}
}
cur_frm.cscript.select_print_heading = function(doc,cdt,cdn){
if(doc.select_print_heading){
// print heading
cur_frm.pformat.print_heading = doc.select_print_heading;
}
else
cur_frm.pformat.print_heading = wn._("Purchase Invoice");
}

View File

@@ -1,473 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.utils import add_days, cint, cstr, flt, formatdate
from webnotes.model.bean import getlist
from webnotes.model.code import get_obj
from webnotes import msgprint, _
from setup.utils import get_company_currency
import webnotes.defaults
from controllers.buying_controller import BuyingController
class DocType(BuyingController):
def __init__(self,d,dl):
self.doc, self.doclist = d, dl
self.tname = 'Purchase Invoice Item'
self.fname = 'entries'
self.status_updater = [{
'source_dt': 'Purchase Invoice Item',
'target_dt': 'Purchase Order Item',
'join_field': 'po_detail',
'target_field': 'billed_amt',
'target_parent_dt': 'Purchase Order',
'target_parent_field': 'per_billed',
'target_ref_field': 'import_amount',
'source_field': 'import_amount',
'percent_join_field': 'purchase_order',
}]
def validate(self):
super(DocType, self).validate()
self.po_required()
self.pr_required()
self.check_active_purchase_items()
self.check_conversion_rate()
self.validate_bill_no()
self.validate_credit_acc()
self.clear_unallocated_advances("Purchase Invoice Advance", "advance_allocation_details")
self.check_for_acc_head_of_supplier()
self.check_for_stopped_status()
self.validate_with_previous_doc()
self.validate_uom_is_integer("uom", "qty")
if not self.doc.is_opening:
self.doc.is_opening = 'No'
self.set_aging_date()
#set against account for credit to
self.set_against_expense_account()
self.validate_write_off_account()
self.update_raw_material_cost()
self.update_valuation_rate("entries")
self.validate_multiple_billing("Purchase Receipt", "pr_detail", "import_amount",
"purchase_receipt_details")
def get_credit_to(self):
ret = {}
if self.doc.supplier:
acc_head = webnotes.conn.sql("""select name, credit_days from `tabAccount`
where (name = %s or (master_name = %s and master_type = 'supplier'))
and docstatus != 2 and company = %s""",
(cstr(self.doc.supplier) + " - " + self.company_abbr,
self.doc.supplier, self.doc.company))
if acc_head and acc_head[0][0]:
ret['credit_to'] = acc_head[0][0]
if not self.doc.due_date:
ret['due_date'] = add_days(cstr(self.doc.posting_date),
acc_head and cint(acc_head[0][1]) or 0)
elif not acc_head:
msgprint("%s does not have an Account Head in %s. \
You must first create it from the Supplier Master" % \
(self.doc.supplier, self.doc.company))
return ret
def set_supplier_defaults(self):
self.doc.fields.update(self.get_credit_to())
super(DocType, self).set_supplier_defaults()
def get_advances(self):
super(DocType, self).get_advances(self.doc.credit_to,
"Purchase Invoice Advance", "advance_allocation_details", "debit")
def check_active_purchase_items(self):
for d in getlist(self.doclist, 'entries'):
if d.item_code: # extra condn coz item_code is not mandatory in PV
valid_item = webnotes.conn.sql("select docstatus,is_purchase_item from tabItem where name = %s",d.item_code)
if valid_item[0][0] == 2:
msgprint("Item : '%s' is Inactive, you can restore it from Trash" %(d.item_code))
raise Exception
if not valid_item[0][1] == 'Yes':
msgprint("Item : '%s' is not Purchase Item"%(d.item_code))
raise Exception
def check_conversion_rate(self):
default_currency = get_company_currency(self.doc.company)
if not default_currency:
msgprint('Message: Please enter default currency in Company Master')
raise Exception
if (self.doc.currency == default_currency and flt(self.doc.conversion_rate) != 1.00) or not self.doc.conversion_rate or (self.doc.currency != default_currency and flt(self.doc.conversion_rate) == 1.00):
msgprint("Message: Please Enter Appropriate Conversion Rate.")
raise Exception
def validate_bill_no(self):
if self.doc.bill_no and self.doc.bill_no.lower().strip() \
not in ['na', 'not applicable', 'none']:
b_no = webnotes.conn.sql("""select bill_no, name, ifnull(is_opening,'') from `tabPurchase Invoice`
where bill_no = %s and credit_to = %s and docstatus = 1 and name != %s""",
(self.doc.bill_no, self.doc.credit_to, self.doc.name))
if b_no and cstr(b_no[0][2]) == cstr(self.doc.is_opening):
msgprint("Please check you have already booked expense against Bill No. %s \
in Purchase Invoice %s" % (cstr(b_no[0][0]), cstr(b_no[0][1])),
raise_exception=1)
if not self.doc.remarks and self.doc.bill_date:
self.doc.remarks = (self.doc.remarks or '') + "\n" + ("Against Bill %s dated %s"
% (self.doc.bill_no, formatdate(self.doc.bill_date)))
if not self.doc.remarks:
self.doc.remarks = "No Remarks"
def validate_credit_acc(self):
acc = webnotes.conn.sql("select debit_or_credit, is_pl_account from tabAccount where name = %s",
self.doc.credit_to)
if not acc:
msgprint("Account: "+ self.doc.credit_to + "does not exist")
raise Exception
elif acc[0][0] and acc[0][0] != 'Credit':
msgprint("Account: "+ self.doc.credit_to + "is not a credit account")
raise Exception
elif acc[0][1] and acc[0][1] != 'No':
msgprint("Account: "+ self.doc.credit_to + "is a pl account")
raise Exception
# Validate Acc Head of Supplier and Credit To Account entered
# ------------------------------------------------------------
def check_for_acc_head_of_supplier(self):
if self.doc.supplier and self.doc.credit_to:
acc_head = webnotes.conn.sql("select master_name from `tabAccount` where name = %s", self.doc.credit_to)
if (acc_head and cstr(acc_head[0][0]) != cstr(self.doc.supplier)) or (not acc_head and (self.doc.credit_to != cstr(self.doc.supplier) + " - " + self.company_abbr)):
msgprint("Credit To: %s do not match with Supplier: %s for Company: %s.\n If both correctly entered, please select Master Type and Master Name in account master." %(self.doc.credit_to,self.doc.supplier,self.doc.company), raise_exception=1)
# Check for Stopped PO
# ---------------------
def check_for_stopped_status(self):
check_list = []
for d in getlist(self.doclist,'entries'):
if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt:
check_list.append(d.purhcase_order)
stopped = webnotes.conn.sql("select name from `tabPurchase Order` where status = 'Stopped' and name = '%s'" % d.purchase_order)
if stopped:
msgprint("One cannot do any transaction against 'Purchase Order' : %s, it's status is 'Stopped'" % (d.purhcase_order))
raise Exception
def validate_with_previous_doc(self):
super(DocType, self).validate_with_previous_doc(self.tname, {
"Purchase Order": {
"ref_dn_field": "purchase_order",
"compare_fields": [["supplier", "="], ["company", "="], ["currency", "="]],
},
"Purchase Order Item": {
"ref_dn_field": "po_detail",
"compare_fields": [["project_name", "="], ["item_code", "="], ["uom", "="]],
"is_child_table": True,
"allow_duplicate_prev_row_id": True
},
"Purchase Receipt": {
"ref_dn_field": "purchase_receipt",
"compare_fields": [["supplier", "="], ["company", "="], ["currency", "="]],
},
"Purchase Receipt Item": {
"ref_dn_field": "pr_detail",
"compare_fields": [["project_name", "="], ["item_code", "="], ["uom", "="]],
"is_child_table": True
}
})
if cint(webnotes.defaults.get_global_default('maintain_same_rate')):
super(DocType, self).validate_with_previous_doc(self.tname, {
"Purchase Order Item": {
"ref_dn_field": "po_detail",
"compare_fields": [["import_rate", "="]],
"is_child_table": True,
"allow_duplicate_prev_row_id": True
},
"Purchase Receipt Item": {
"ref_dn_field": "pr_detail",
"compare_fields": [["import_rate", "="]],
"is_child_table": True
}
})
def set_aging_date(self):
if self.doc.is_opening != 'Yes':
self.doc.aging_date = self.doc.posting_date
elif not self.doc.aging_date:
msgprint("Aging Date is mandatory for opening entry")
raise Exception
def set_against_expense_account(self):
auto_accounting_for_stock = cint(webnotes.defaults.get_global_default("auto_accounting_for_stock"))
if auto_accounting_for_stock:
stock_not_billed_account = self.get_company_default("stock_received_but_not_billed")
against_accounts = []
stock_items = self.get_stock_items()
for item in self.doclist.get({"parentfield": "entries"}):
if auto_accounting_for_stock and item.item_code in stock_items:
# in case of auto inventory accounting, against expense account is always
# Stock Received But Not Billed for a stock item
item.expense_head = stock_not_billed_account
item.cost_center = None
if stock_not_billed_account not in against_accounts:
against_accounts.append(stock_not_billed_account)
elif not item.expense_head:
msgprint(_("Expense account is mandatory for item") + ": " +
(item.item_code or item.item_name), raise_exception=1)
elif item.expense_head not in against_accounts:
# if no auto_accounting_for_stock or not a stock item
against_accounts.append(item.expense_head)
self.doc.against_expense_account = ",".join(against_accounts)
def po_required(self):
if webnotes.conn.get_value("Buying Settings", None, "po_required") == 'Yes':
for d in getlist(self.doclist,'entries'):
if not d.purchase_order:
msgprint("Purchse Order No. required against item %s"%d.item_code)
raise Exception
def pr_required(self):
if webnotes.conn.get_value("Buying Settings", None, "pr_required") == 'Yes':
for d in getlist(self.doclist,'entries'):
if not d.purchase_receipt:
msgprint("Purchase Receipt No. required against item %s"%d.item_code)
raise Exception
def validate_write_off_account(self):
if self.doc.write_off_amount and not self.doc.write_off_account:
msgprint("Please enter Write Off Account", raise_exception=1)
def check_prev_docstatus(self):
for d in getlist(self.doclist,'entries'):
if d.purchase_order:
submitted = webnotes.conn.sql("select name from `tabPurchase Order` where docstatus = 1 and name = '%s'" % d.purchase_order)
if not submitted:
webnotes.throw("Purchase Order : "+ cstr(d.purchase_order) +" is not submitted")
if d.purchase_receipt:
submitted = webnotes.conn.sql("select name from `tabPurchase Receipt` where docstatus = 1 and name = '%s'" % d.purchase_receipt)
if not submitted:
webnotes.throw("Purchase Receipt : "+ cstr(d.purchase_receipt) +" is not submitted")
def update_against_document_in_jv(self):
"""
Links invoice and advance voucher:
1. cancel advance voucher
2. split into multiple rows if partially adjusted, assign against voucher
3. submit advance voucher
"""
lst = []
for d in getlist(self.doclist, 'advance_allocation_details'):
if flt(d.allocated_amount) > 0:
args = {
'voucher_no' : d.journal_voucher,
'voucher_detail_no' : d.jv_detail_no,
'against_voucher_type' : 'Purchase Invoice',
'against_voucher' : self.doc.name,
'account' : self.doc.credit_to,
'is_advance' : 'Yes',
'dr_or_cr' : 'debit',
'unadjusted_amt' : flt(d.advance_amount),
'allocated_amt' : flt(d.allocated_amount)
}
lst.append(args)
if lst:
from accounts.utils import reconcile_against_document
reconcile_against_document(lst)
def on_submit(self):
self.check_prev_docstatus()
get_obj('Authorization Control').validate_approving_authority(self.doc.doctype,
self.doc.company, self.doc.grand_total)
# this sequence because outstanding may get -negative
self.make_gl_entries()
self.update_against_document_in_jv()
self.update_prevdoc_status()
def make_gl_entries(self):
auto_accounting_for_stock = \
cint(webnotes.defaults.get_global_default("auto_accounting_for_stock"))
gl_entries = []
# parent's gl entry
if self.doc.grand_total:
gl_entries.append(
self.get_gl_dict({
"account": self.doc.credit_to,
"against": self.doc.against_expense_account,
"credit": self.doc.total_amount_to_pay,
"remarks": self.doc.remarks,
"against_voucher": self.doc.name,
"against_voucher_type": self.doc.doctype,
})
)
# tax table gl entries
valuation_tax = {}
for tax in self.doclist.get({"parentfield": "purchase_tax_details"}):
if tax.category in ("Total", "Valuation and Total") and flt(tax.tax_amount):
gl_entries.append(
self.get_gl_dict({
"account": tax.account_head,
"against": self.doc.credit_to,
"debit": tax.add_deduct_tax == "Add" and tax.tax_amount or 0,
"credit": tax.add_deduct_tax == "Deduct" and tax.tax_amount or 0,
"remarks": self.doc.remarks,
"cost_center": tax.cost_center
})
)
# accumulate valuation tax
if tax.category in ("Valuation", "Valuation and Total") and flt(tax.tax_amount):
if auto_accounting_for_stock and not tax.cost_center:
webnotes.throw(_("Row %(row)s: Cost Center is mandatory \
if tax/charges category is Valuation or Valuation and Total" %
{"row": tax.idx}))
valuation_tax.setdefault(tax.cost_center, 0)
valuation_tax[tax.cost_center] += \
(tax.add_deduct_tax == "Add" and 1 or -1) * flt(tax.tax_amount)
# item gl entries
stock_item_and_auto_accounting_for_stock = False
stock_items = self.get_stock_items()
rounding_diff = 0.0
for item in self.doclist.get({"parentfield": "entries"}):
if auto_accounting_for_stock and item.item_code in stock_items:
if flt(item.valuation_rate):
# if auto inventory accounting enabled and stock item,
# then do stock related gl entries
# expense will be booked in sales invoice
stock_item_and_auto_accounting_for_stock = True
valuation_amt = flt(flt(item.valuation_rate) * flt(item.qty) * \
flt(item.conversion_factor), self.precision("valuation_rate", item))
rounding_diff += (flt(item.amount, self.precision("amount", item)) +
flt(item.item_tax_amount, self.precision("item_tax_amount", item)) +
flt(item.rm_supp_cost, self.precision("rm_supp_cost", item)) -
valuation_amt)
gl_entries.append(
self.get_gl_dict({
"account": item.expense_head,
"against": self.doc.credit_to,
"debit": valuation_amt,
"remarks": self.doc.remarks or "Accounting Entry for Stock"
})
)
elif flt(item.amount):
# if not a stock item or auto inventory accounting disabled, book the expense
gl_entries.append(
self.get_gl_dict({
"account": item.expense_head,
"against": self.doc.credit_to,
"debit": item.amount,
"remarks": self.doc.remarks,
"cost_center": item.cost_center
})
)
if stock_item_and_auto_accounting_for_stock and valuation_tax:
# credit valuation tax amount in "Expenses Included In Valuation"
# this will balance out valuation amount included in cost of goods sold
expenses_included_in_valuation = \
self.get_company_default("expenses_included_in_valuation")
if rounding_diff:
import operator
cost_center_with_max_value = max(valuation_tax.iteritems(),
key=operator.itemgetter(1))[0]
valuation_tax[cost_center_with_max_value] -= flt(rounding_diff)
for cost_center, amount in valuation_tax.items():
gl_entries.append(
self.get_gl_dict({
"account": expenses_included_in_valuation,
"cost_center": cost_center,
"against": self.doc.credit_to,
"credit": amount,
"remarks": self.doc.remarks or "Accounting Entry for Stock"
})
)
# writeoff account includes petty difference in the invoice amount
# and the amount that is paid
if self.doc.write_off_account and flt(self.doc.write_off_amount):
gl_entries.append(
self.get_gl_dict({
"account": self.doc.write_off_account,
"against": self.doc.credit_to,
"credit": flt(self.doc.write_off_amount),
"remarks": self.doc.remarks,
"cost_center": self.doc.write_off_cost_center
})
)
if gl_entries:
from accounts.general_ledger import make_gl_entries
make_gl_entries(gl_entries, cancel=(self.doc.docstatus == 2))
def on_cancel(self):
from accounts.utils import remove_against_link_from_jv
remove_against_link_from_jv(self.doc.doctype, self.doc.name, "against_voucher")
self.update_prevdoc_status()
self.make_cancel_gl_entries()
def on_update(self):
pass
def update_raw_material_cost(self):
if self.sub_contracted_items:
for d in self.doclist.get({"parentfield": "entries"}):
rm_cost = webnotes.conn.sql("""select raw_material_cost / quantity
from `tabBOM` where item = %s and is_default = 1 and docstatus = 1
and is_active = 1 """, (d.item_code,))
rm_cost = rm_cost and flt(rm_cost[0][0]) or 0
d.conversion_factor = d.conversion_factor or flt(webnotes.conn.get_value(
"UOM Conversion Detail", {"parent": d.item_code, "uom": d.uom},
"conversion_factor")) or 1
d.rm_supp_cost = rm_cost * flt(d.qty) * flt(d.conversion_factor)
@webnotes.whitelist()
def get_expense_account(doctype, txt, searchfield, start, page_len, filters):
from controllers.queries import get_match_cond
# expense account can be any Debit account,
# but can also be a Liability account with account_type='Expense Account' in special circumstances.
# Hence the first condition is an "OR"
return webnotes.conn.sql("""select tabAccount.name from `tabAccount`
where (tabAccount.debit_or_credit="Debit"
or tabAccount.account_type = "Expense Account")
and tabAccount.group_or_ledger="Ledger"
and tabAccount.docstatus!=2
and ifnull(tabAccount.master_type, "")=""
and ifnull(tabAccount.master_name, "")=""
and tabAccount.company = '%(company)s'
and tabAccount.%(key)s LIKE '%(txt)s'
%(mcond)s""" % {'company': filters['company'], 'key': searchfield,
'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield)})

View File

@@ -1,813 +0,0 @@
[
{
"creation": "2013-05-21 16:16:39",
"docstatus": 0,
"modified": "2013-11-22 17:15:27",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"allow_attach": 1,
"allow_import": 1,
"autoname": "naming_series:",
"doctype": "DocType",
"icon": "icon-file-text",
"is_submittable": 1,
"module": "Accounts",
"name": "__common__",
"read_only_onload": 1,
"search_fields": "posting_date, credit_to, fiscal_year, bill_no, grand_total, outstanding_amount"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Purchase Invoice",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocPerm",
"name": "__common__",
"parent": "Purchase Invoice",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1
},
{
"doctype": "DocType",
"name": "Purchase Invoice"
},
{
"doctype": "DocField",
"fieldname": "supplier_section",
"fieldtype": "Section Break",
"label": "Supplier",
"options": "icon-user"
},
{
"doctype": "DocField",
"fieldname": "column_break0",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "naming_series",
"fieldtype": "Select",
"label": "Series",
"no_copy": 1,
"oldfieldname": "naming_series",
"oldfieldtype": "Select",
"options": "BILL\nBILLJ",
"print_hide": 1,
"read_only": 0,
"report_hide": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "supplier",
"fieldtype": "Link",
"hidden": 0,
"label": "Supplier",
"oldfieldname": "supplier",
"oldfieldtype": "Link",
"options": "Supplier",
"print_hide": 1,
"read_only": 0
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "supplier_name",
"fieldtype": "Data",
"hidden": 0,
"in_list_view": 1,
"label": "Name",
"oldfieldname": "supplier_name",
"oldfieldtype": "Data",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "address_display",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Address",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "contact_display",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Contact",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "contact_mobile",
"fieldtype": "Text",
"hidden": 1,
"label": "Mobile No",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "contact_email",
"fieldtype": "Text",
"hidden": 1,
"label": "Contact Email",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "column_break1",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"read_only": 0,
"reqd": 0,
"width": "50%"
},
{
"default": "Today",
"doctype": "DocField",
"fieldname": "posting_date",
"fieldtype": "Date",
"in_filter": 1,
"label": "Posting Date",
"no_copy": 0,
"oldfieldname": "posting_date",
"oldfieldtype": "Date",
"print_hide": 1,
"read_only": 0,
"reqd": 1,
"search_index": 1
},
{
"description": "If not applicable please enter: NA",
"doctype": "DocField",
"fieldname": "bill_no",
"fieldtype": "Data",
"in_filter": 1,
"label": "Supplier Invoice No",
"oldfieldname": "bill_no",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 0,
"reqd": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "bill_date",
"fieldtype": "Date",
"in_filter": 1,
"label": "Supplier Invoice Date",
"oldfieldname": "bill_date",
"oldfieldtype": "Date",
"print_hide": 1,
"read_only": 0,
"reqd": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "amended_from",
"fieldtype": "Link",
"label": "Amended From",
"no_copy": 1,
"oldfieldname": "amended_from",
"oldfieldtype": "Link",
"options": "Purchase Invoice",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"in_filter": 1,
"label": "Company",
"oldfieldname": "company",
"oldfieldtype": "Link",
"options": "Company",
"print_hide": 1,
"read_only": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "currency_price_list",
"fieldtype": "Section Break",
"label": "Currency and Price List",
"options": "icon-tag",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "currency",
"fieldtype": "Link",
"label": "Currency",
"oldfieldname": "currency",
"oldfieldtype": "Select",
"options": "Currency",
"print_hide": 1,
"read_only": 0
},
{
"description": "The rate at which Bill Currency is converted into company's base currency",
"doctype": "DocField",
"fieldname": "conversion_rate",
"fieldtype": "Float",
"label": "Exchange Rate",
"oldfieldname": "conversion_rate",
"oldfieldtype": "Currency",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "column_break2",
"fieldtype": "Column Break",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "buying_price_list",
"fieldtype": "Link",
"label": "Price List",
"options": "Price List",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "price_list_currency",
"fieldtype": "Link",
"label": "Price List Currency",
"options": "Currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "plc_conversion_rate",
"fieldtype": "Float",
"label": "Price List Exchange Rate",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "items",
"fieldtype": "Section Break",
"label": "Items",
"oldfieldtype": "Section Break",
"options": "icon-shopping-cart",
"read_only": 0
},
{
"allow_on_submit": 1,
"doctype": "DocField",
"fieldname": "entries",
"fieldtype": "Table",
"label": "Entries",
"oldfieldname": "entries",
"oldfieldtype": "Table",
"options": "Purchase Invoice Item",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "section_break_26",
"fieldtype": "Section Break"
},
{
"doctype": "DocField",
"fieldname": "net_total_import",
"fieldtype": "Currency",
"label": "Net Total",
"oldfieldname": "net_total_import",
"oldfieldtype": "Currency",
"options": "currency",
"print_hide": 0,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "column_break_28",
"fieldtype": "Column Break"
},
{
"description": "Will be calculated automatically when you enter the details",
"doctype": "DocField",
"fieldname": "net_total",
"fieldtype": "Currency",
"label": "Net Total (Company Currency)",
"oldfieldname": "net_total",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"oldfieldtype": "Section Break",
"options": "icon-money",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "purchase_other_charges",
"fieldtype": "Link",
"label": "Tax Master",
"oldfieldname": "purchase_other_charges",
"oldfieldtype": "Link",
"options": "Purchase Taxes and Charges Master",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "purchase_tax_details",
"fieldtype": "Table",
"label": "Purchase Taxes and Charges",
"oldfieldname": "purchase_tax_details",
"oldfieldtype": "Table",
"options": "Purchase Taxes and Charges",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "tax_calculation",
"fieldtype": "HTML",
"label": "Tax Calculation",
"oldfieldtype": "HTML",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "totals",
"fieldtype": "Section Break",
"label": "Totals",
"oldfieldtype": "Section Break",
"options": "icon-money",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "other_charges_added_import",
"fieldtype": "Currency",
"label": "Taxes and Charges Added",
"oldfieldname": "other_charges_added_import",
"oldfieldtype": "Currency",
"options": "currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "other_charges_deducted_import",
"fieldtype": "Currency",
"label": "Taxes and Charges Deducted",
"oldfieldname": "other_charges_deducted_import",
"oldfieldtype": "Currency",
"options": "currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "grand_total_import",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Grand Total",
"oldfieldname": "grand_total_import",
"oldfieldtype": "Currency",
"options": "currency",
"print_hide": 0,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "in_words_import",
"fieldtype": "Data",
"label": "In Words",
"oldfieldname": "in_words_import",
"oldfieldtype": "Data",
"print_hide": 0,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "total_amount_to_pay",
"fieldtype": "Currency",
"hidden": 0,
"label": "Total Amount To Pay",
"no_copy": 1,
"oldfieldname": "total_amount_to_pay",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "total_advance",
"fieldtype": "Currency",
"label": "Total Advance",
"no_copy": 1,
"oldfieldname": "total_advance",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "outstanding_amount",
"fieldtype": "Currency",
"in_filter": 1,
"in_list_view": 1,
"label": "Outstanding Amount",
"no_copy": 1,
"oldfieldname": "outstanding_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "column_break8",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"print_hide": 1,
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "total_tax",
"fieldtype": "Currency",
"label": "Total Tax (Company Currency)",
"oldfieldname": "total_tax",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "other_charges_added",
"fieldtype": "Currency",
"label": "Taxes and Charges Added (Company Currency)",
"oldfieldname": "other_charges_added",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "other_charges_deducted",
"fieldtype": "Currency",
"label": "Taxes and Charges Deducted (Company Currency)",
"oldfieldname": "other_charges_deducted",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "grand_total",
"fieldtype": "Currency",
"label": "Grand Total (Company Currency)",
"oldfieldname": "grand_total",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"description": "In Words will be visible once you save the Purchase Invoice.",
"doctype": "DocField",
"fieldname": "in_words",
"fieldtype": "Data",
"label": "In Words (Company Currency)",
"oldfieldname": "in_words",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "write_off_amount",
"fieldtype": "Currency",
"label": "Write Off Amount",
"no_copy": 1,
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 0
},
{
"depends_on": "eval:flt(doc.write_off_amount)!=0",
"doctype": "DocField",
"fieldname": "write_off_account",
"fieldtype": "Link",
"label": "Write Off Account",
"no_copy": 1,
"options": "Account",
"print_hide": 1,
"read_only": 0
},
{
"depends_on": "eval:flt(doc.write_off_amount)!=0",
"doctype": "DocField",
"fieldname": "write_off_cost_center",
"fieldtype": "Link",
"label": "Write Off Cost Center",
"no_copy": 1,
"options": "Cost Center",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "against_expense_account",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Against Expense Account",
"no_copy": 1,
"oldfieldname": "against_expense_account",
"oldfieldtype": "Small Text",
"print_hide": 1,
"read_only": 0,
"report_hide": 0
},
{
"doctype": "DocField",
"fieldname": "advances",
"fieldtype": "Section Break",
"label": "Advances",
"oldfieldtype": "Section Break",
"options": "icon-money",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "get_advances_paid",
"fieldtype": "Button",
"label": "Get Advances Paid",
"oldfieldtype": "Button",
"options": "get_advances",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "advance_allocation_details",
"fieldtype": "Table",
"label": "Purchase Invoice Advances",
"no_copy": 1,
"oldfieldname": "advance_allocation_details",
"oldfieldtype": "Table",
"options": "Purchase Invoice Advance",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "terms_section_break",
"fieldtype": "Section Break",
"label": "Terms and Conditions",
"options": "icon-legal"
},
{
"doctype": "DocField",
"fieldname": "tc_name",
"fieldtype": "Link",
"label": "Terms",
"options": "Terms and Conditions",
"print_hide": 1
},
{
"doctype": "DocField",
"fieldname": "terms",
"fieldtype": "Text Editor",
"label": "Terms and Conditions1"
},
{
"depends_on": "supplier",
"doctype": "DocField",
"fieldname": "contact_section",
"fieldtype": "Section Break",
"label": "Contact Info",
"options": "icon-bullhorn",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "supplier_address",
"fieldtype": "Link",
"label": "Supplier Address",
"options": "Address",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "col_break23",
"fieldtype": "Column Break",
"read_only": 0,
"width": "50%"
},
{
"doctype": "DocField",
"fieldname": "contact_person",
"fieldtype": "Link",
"label": "Contact Person",
"options": "Contact",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "more_info",
"fieldtype": "Section Break",
"label": "More Info",
"oldfieldtype": "Section Break",
"options": "icon-file-text",
"print_hide": 1,
"read_only": 0
},
{
"description": "Supplier (Payable) Account",
"doctype": "DocField",
"fieldname": "credit_to",
"fieldtype": "Link",
"in_filter": 1,
"label": "Credit To",
"oldfieldname": "credit_to",
"oldfieldtype": "Link",
"options": "Account",
"print_hide": 1,
"read_only": 0,
"reqd": 1,
"search_index": 1
},
{
"default": "No",
"description": "Considered as Opening Balance",
"doctype": "DocField",
"fieldname": "is_opening",
"fieldtype": "Select",
"in_filter": 1,
"label": "Is Opening",
"oldfieldname": "is_opening",
"oldfieldtype": "Select",
"options": "No\nYes",
"print_hide": 1,
"read_only": 0,
"search_index": 1
},
{
"description": "Actual Invoice Date",
"doctype": "DocField",
"fieldname": "aging_date",
"fieldtype": "Date",
"label": "Aging Date",
"oldfieldname": "aging_date",
"oldfieldtype": "Date",
"print_hide": 1,
"read_only": 0,
"search_index": 0
},
{
"allow_on_submit": 1,
"doctype": "DocField",
"fieldname": "select_print_heading",
"fieldtype": "Link",
"label": "Print Heading",
"no_copy": 1,
"oldfieldname": "select_print_heading",
"oldfieldtype": "Link",
"options": "Print Heading",
"print_hide": 1,
"read_only": 0,
"report_hide": 1
},
{
"doctype": "DocField",
"fieldname": "due_date",
"fieldtype": "Date",
"in_filter": 1,
"label": "Due Date",
"no_copy": 0,
"oldfieldname": "due_date",
"oldfieldtype": "Date",
"print_hide": 0,
"read_only": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "mode_of_payment",
"fieldtype": "Select",
"label": "Mode of Payment",
"oldfieldname": "mode_of_payment",
"oldfieldtype": "Select",
"options": "link:Mode of Payment",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "column_break_63",
"fieldtype": "Column Break",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"in_filter": 1,
"label": "Fiscal Year",
"oldfieldname": "fiscal_year",
"oldfieldtype": "Select",
"options": "link:Fiscal Year",
"print_hide": 1,
"read_only": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "remarks",
"fieldtype": "Small Text",
"label": "Remarks",
"no_copy": 1,
"oldfieldname": "remarks",
"oldfieldtype": "Text",
"print_hide": 1,
"read_only": 0,
"reqd": 0
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Accounts User",
"submit": 0,
"write": 0
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Purchase User",
"submit": 0,
"write": 0
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"match": "supplier",
"role": "Supplier",
"submit": 0,
"write": 0
},
{
"amend": 1,
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"role": "Accounts Manager",
"submit": 1,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Auditor",
"submit": 0,
"write": 0
}
]

View File

@@ -1,415 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import unittest
import webnotes
import webnotes.model
import json
from webnotes.utils import cint
import webnotes.defaults
from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
test_dependencies = ["Item", "Cost Center"]
test_ignore = ["Serial No"]
class TestPurchaseInvoice(unittest.TestCase):
def test_gl_entries_without_auto_accounting_for_stock(self):
set_perpetual_inventory(0)
self.assertTrue(not cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")))
wrapper = webnotes.bean(copy=test_records[0])
wrapper.run_method("calculate_taxes_and_totals")
wrapper.insert()
wrapper.submit()
wrapper.load_from_db()
dl = wrapper.doclist
expected_gl_entries = {
"_Test Supplier - _TC": [0, 1512.30],
"_Test Account Cost for Goods Sold - _TC": [1250, 0],
"_Test Account Shipping Charges - _TC": [100, 0],
"_Test Account Excise Duty - _TC": [140, 0],
"_Test Account Education Cess - _TC": [2.8, 0],
"_Test Account S&H Education Cess - _TC": [1.4, 0],
"_Test Account CST - _TC": [29.88, 0],
"_Test Account VAT - _TC": [156.25, 0],
"_Test Account Discount - _TC": [0, 168.03],
}
gl_entries = webnotes.conn.sql("""select account, debit, credit from `tabGL Entry`
where voucher_type = 'Purchase Invoice' and voucher_no = %s""", dl[0].name, as_dict=1)
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(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 1)
pi = webnotes.bean(copy=test_records[1])
pi.run_method("calculate_taxes_and_totals")
pi.insert()
pi.submit()
gl_entries = webnotes.conn.sql("""select account, debit, credit
from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
order by account asc""", pi.doc.name, as_dict=1)
self.assertTrue(gl_entries)
expected_values = sorted([
["_Test Supplier - _TC", 0, 720],
["Stock Received But Not Billed - _TC", 750.0, 0],
["_Test Account Shipping Charges - _TC", 100.0, 0],
["_Test Account VAT - _TC", 120.0, 0],
["Expenses Included In Valuation - _TC", 0, 250.0],
])
for i, gle in enumerate(gl_entries):
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)
def test_gl_entries_with_aia_for_non_stock_items(self):
set_perpetual_inventory()
self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 1)
pi = webnotes.bean(copy=test_records[1])
pi.doclist[1].item_code = "_Test Non Stock Item"
pi.doclist[1].expense_head = "_Test Account Cost for Goods Sold - _TC"
pi.doclist.pop(2)
pi.doclist.pop(3)
pi.run_method("calculate_taxes_and_totals")
pi.insert()
pi.submit()
gl_entries = webnotes.conn.sql("""select account, debit, credit
from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
order by account asc""", pi.doc.name, as_dict=1)
self.assertTrue(gl_entries)
expected_values = sorted([
["_Test Supplier - _TC", 0, 620],
["_Test Account Cost for Goods Sold - _TC", 500.0, 0],
["_Test Account VAT - _TC", 120.0, 0],
])
for i, gle in enumerate(gl_entries):
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)
def test_purchase_invoice_calculation(self):
wrapper = webnotes.bean(copy=test_records[0])
wrapper.run_method("calculate_taxes_and_totals")
wrapper.insert()
wrapper.load_from_db()
expected_values = [
["_Test Item Home Desktop 100", 90, 59],
["_Test Item Home Desktop 200", 135, 177]
]
for i, item in enumerate(wrapper.doclist.get({"parentfield": "entries"})):
self.assertEqual(item.item_code, expected_values[i][0])
self.assertEqual(item.item_tax_amount, expected_values[i][1])
self.assertEqual(item.valuation_rate, expected_values[i][2])
self.assertEqual(wrapper.doclist[0].net_total, 1250)
# tax amounts
expected_values = [
["_Test Account Shipping Charges - _TC", 100, 1350],
["_Test Account Customs Duty - _TC", 125, 1350],
["_Test Account Excise Duty - _TC", 140, 1490],
["_Test Account Education Cess - _TC", 2.8, 1492.8],
["_Test Account S&H Education Cess - _TC", 1.4, 1494.2],
["_Test Account CST - _TC", 29.88, 1524.08],
["_Test Account VAT - _TC", 156.25, 1680.33],
["_Test Account Discount - _TC", 168.03, 1512.30],
]
for i, tax in enumerate(wrapper.doclist.get({"parentfield": "purchase_tax_details"})):
self.assertEqual(tax.account_head, expected_values[i][0])
self.assertEqual(tax.tax_amount, expected_values[i][1])
self.assertEqual(tax.total, expected_values[i][2])
def test_purchase_invoice_with_subcontracted_item(self):
wrapper = webnotes.bean(copy=test_records[0])
wrapper.doclist[1].item_code = "_Test FG Item"
wrapper.run_method("calculate_taxes_and_totals")
wrapper.insert()
wrapper.load_from_db()
expected_values = [
["_Test FG Item", 90, 7059],
["_Test Item Home Desktop 200", 135, 177]
]
for i, item in enumerate(wrapper.doclist.get({"parentfield": "entries"})):
self.assertEqual(item.item_code, expected_values[i][0])
self.assertEqual(item.item_tax_amount, expected_values[i][1])
self.assertEqual(item.valuation_rate, expected_values[i][2])
self.assertEqual(wrapper.doclist[0].net_total, 1250)
# tax amounts
expected_values = [
["_Test Account Shipping Charges - _TC", 100, 1350],
["_Test Account Customs Duty - _TC", 125, 1350],
["_Test Account Excise Duty - _TC", 140, 1490],
["_Test Account Education Cess - _TC", 2.8, 1492.8],
["_Test Account S&H Education Cess - _TC", 1.4, 1494.2],
["_Test Account CST - _TC", 29.88, 1524.08],
["_Test Account VAT - _TC", 156.25, 1680.33],
["_Test Account Discount - _TC", 168.03, 1512.30],
]
for i, tax in enumerate(wrapper.doclist.get({"parentfield": "purchase_tax_details"})):
self.assertEqual(tax.account_head, expected_values[i][0])
self.assertEqual(tax.tax_amount, expected_values[i][1])
self.assertEqual(tax.total, expected_values[i][2])
def test_purchase_invoice_with_advance(self):
from accounts.doctype.journal_voucher.test_journal_voucher \
import test_records as jv_test_records
jv = webnotes.bean(copy=jv_test_records[1])
jv.insert()
jv.submit()
pi = webnotes.bean(copy=test_records[0])
pi.doclist.append({
"doctype": "Purchase Invoice Advance",
"parentfield": "advance_allocation_details",
"journal_voucher": jv.doc.name,
"jv_detail_no": jv.doclist[1].name,
"advance_amount": 400,
"allocated_amount": 300,
"remarks": jv.doc.remark
})
pi.run_method("calculate_taxes_and_totals")
pi.insert()
pi.submit()
pi.load_from_db()
self.assertTrue(webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where against_voucher=%s""", pi.doc.name))
self.assertTrue(webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where against_voucher=%s and debit=300""", pi.doc.name))
self.assertEqual(pi.doc.outstanding_amount, 1212.30)
pi.cancel()
self.assertTrue(not webnotes.conn.sql("""select name from `tabJournal Voucher Detail`
where against_voucher=%s""", pi.doc.name))
test_records = [
[
# parent
{
"doctype": "Purchase Invoice",
"naming_series": "BILL",
"supplier_name": "_Test Supplier",
"credit_to": "_Test Supplier - _TC",
"bill_no": "NA",
"posting_date": "2013-02-03",
"fiscal_year": "_Test Fiscal Year 2013",
"company": "_Test Company",
"currency": "INR",
"conversion_rate": 1,
"grand_total_import": 0 # for feed
},
# items
{
"doctype": "Purchase Invoice Item",
"parentfield": "entries",
"item_code": "_Test Item Home Desktop 100",
"item_name": "_Test Item Home Desktop 100",
"qty": 10,
"import_rate": 50,
"import_amount": 500,
"rate": 50,
"amount": 500,
"uom": "_Test UOM",
"item_tax_rate": json.dumps({"_Test Account Excise Duty - _TC": 10}),
"expense_head": "_Test Account Cost for Goods Sold - _TC",
"cost_center": "_Test Cost Center - _TC",
"conversion_factor": 1.0,
},
{
"doctype": "Purchase Invoice Item",
"parentfield": "entries",
"item_code": "_Test Item Home Desktop 200",
"item_name": "_Test Item Home Desktop 200",
"qty": 5,
"import_rate": 150,
"import_amount": 750,
"rate": 150,
"amount": 750,
"uom": "_Test UOM",
"expense_head": "_Test Account Cost for Goods Sold - _TC",
"cost_center": "_Test Cost Center - _TC",
"conversion_factor": 1.0,
},
# taxes
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "Actual",
"account_head": "_Test Account Shipping Charges - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Shipping Charges",
"category": "Valuation and Total",
"add_deduct_tax": "Add",
"rate": 100
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "On Net Total",
"account_head": "_Test Account Customs Duty - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Customs Duty",
"category": "Valuation",
"add_deduct_tax": "Add",
"rate": 10
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "On Net Total",
"account_head": "_Test Account Excise Duty - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Excise Duty",
"category": "Total",
"add_deduct_tax": "Add",
"rate": 12
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "On Previous Row Amount",
"account_head": "_Test Account Education Cess - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Education Cess",
"category": "Total",
"add_deduct_tax": "Add",
"rate": 2,
"row_id": 3
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "On Previous Row Amount",
"account_head": "_Test Account S&H Education Cess - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "S&H Education Cess",
"category": "Total",
"add_deduct_tax": "Add",
"rate": 1,
"row_id": 3
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "On Previous Row Total",
"account_head": "_Test Account CST - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "CST",
"category": "Total",
"add_deduct_tax": "Add",
"rate": 2,
"row_id": 5
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "On Net Total",
"account_head": "_Test Account VAT - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "VAT",
"category": "Total",
"add_deduct_tax": "Add",
"rate": 12.5
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "On Previous Row Total",
"account_head": "_Test Account Discount - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Discount",
"category": "Total",
"add_deduct_tax": "Deduct",
"rate": 10,
"row_id": 7
},
],
[
# parent
{
"doctype": "Purchase Invoice",
"naming_series": "_T-Purchase Invoice-",
"supplier_name": "_Test Supplier",
"credit_to": "_Test Supplier - _TC",
"bill_no": "NA",
"posting_date": "2013-02-03",
"fiscal_year": "_Test Fiscal Year 2013",
"company": "_Test Company",
"currency": "INR",
"conversion_rate": 1.0,
"grand_total_import": 0 # for feed
},
# items
{
"doctype": "Purchase Invoice Item",
"parentfield": "entries",
"item_code": "_Test Item",
"item_name": "_Test Item",
"qty": 10.0,
"import_rate": 50.0,
"uom": "_Test UOM",
"expense_head": "_Test Account Cost for Goods Sold - _TC",
"cost_center": "_Test Cost Center - _TC",
"conversion_factor": 1.0,
},
# taxes
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "Actual",
"account_head": "_Test Account Shipping Charges - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Shipping Charges",
"category": "Valuation and Total",
"add_deduct_tax": "Add",
"rate": 100.0
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "Actual",
"account_head": "_Test Account VAT - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "VAT",
"category": "Total",
"add_deduct_tax": "Add",
"rate": 120.0
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"charge_type": "Actual",
"account_head": "_Test Account Customs Duty - _TC",
"cost_center": "_Test Cost Center - _TC",
"description": "Customs Duty",
"category": "Valuation",
"add_deduct_tax": "Add",
"rate": 150.0
},
]
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,92 +0,0 @@
[
{
"creation": "2013-03-08 15:36:46",
"docstatus": 0,
"modified": "2013-07-10 14:54:12",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"no_copy": 1,
"parent": "Purchase Invoice Advance",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Purchase Invoice Advance"
},
{
"doctype": "DocField",
"fieldname": "journal_voucher",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Journal Voucher",
"oldfieldname": "journal_voucher",
"oldfieldtype": "Link",
"options": "Journal Voucher",
"print_width": "180px",
"read_only": 1,
"width": "180px"
},
{
"doctype": "DocField",
"fieldname": "jv_detail_no",
"fieldtype": "Data",
"hidden": 1,
"in_list_view": 0,
"label": "Journal Voucher Detail No",
"oldfieldname": "jv_detail_no",
"oldfieldtype": "Date",
"print_hide": 1,
"print_width": "80px",
"read_only": 1,
"width": "80px"
},
{
"doctype": "DocField",
"fieldname": "advance_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Advance Amount",
"oldfieldname": "advance_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_width": "100px",
"read_only": 1,
"width": "100px"
},
{
"doctype": "DocField",
"fieldname": "allocated_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Allocated Amount",
"oldfieldname": "allocated_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_width": "100px",
"width": "100px"
},
{
"doctype": "DocField",
"fieldname": "remarks",
"fieldtype": "Small Text",
"in_list_view": 1,
"label": "Remarks",
"oldfieldname": "remarks",
"oldfieldtype": "Small Text",
"print_width": "150px",
"read_only": 1,
"width": "150px"
}
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,394 +0,0 @@
[
{
"creation": "2013-05-22 12:43:10",
"docstatus": 0,
"modified": "2013-11-02 19:41:17",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "EVD.######",
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Purchase Invoice Item",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Purchase Invoice Item"
},
{
"doctype": "DocField",
"fieldname": "item_code",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 0,
"label": "Item",
"oldfieldname": "item_code",
"oldfieldtype": "Link",
"options": "Item",
"print_hide": 1,
"read_only": 0,
"reqd": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "item_name",
"fieldtype": "Data",
"in_filter": 0,
"in_list_view": 1,
"label": "Item Name",
"oldfieldname": "item_name",
"oldfieldtype": "Data",
"read_only": 0,
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "description",
"fieldtype": "Text",
"in_list_view": 1,
"label": "Description",
"oldfieldname": "description",
"oldfieldtype": "Text",
"print_width": "300px",
"read_only": 0,
"width": "300px"
},
{
"doctype": "DocField",
"fieldname": "quantity_and_rate",
"fieldtype": "Section Break",
"in_list_view": 0,
"label": "Quantity and Rate"
},
{
"doctype": "DocField",
"fieldname": "qty",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Qty",
"oldfieldname": "qty",
"oldfieldtype": "Currency",
"print_hide": 0,
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "uom",
"fieldtype": "Link",
"in_list_view": 0,
"label": "UOM",
"options": "UOM",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "import_ref_rate",
"fieldtype": "Currency",
"in_list_view": 0,
"label": "Price List Rate",
"options": "currency",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "discount_rate",
"fieldtype": "Float",
"in_list_view": 0,
"label": "Discount %",
"print_hide": 0,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "import_rate",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Rate ",
"oldfieldname": "import_rate",
"oldfieldtype": "Currency",
"options": "currency",
"print_hide": 0,
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "import_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Amount",
"oldfieldname": "import_amount",
"oldfieldtype": "Currency",
"options": "currency",
"read_only": 1,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "purchase_ref_rate",
"fieldtype": "Currency",
"in_list_view": 0,
"label": "Price List Rate (Company Currency)",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "rate",
"fieldtype": "Currency",
"in_list_view": 0,
"label": "Rate (Company Currency)",
"oldfieldname": "rate",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "amount",
"fieldtype": "Currency",
"in_list_view": 0,
"label": "Amount (Company Currency)",
"oldfieldname": "amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "accounting",
"fieldtype": "Section Break",
"in_list_view": 0,
"label": "Accounting"
},
{
"doctype": "DocField",
"fieldname": "expense_head",
"fieldtype": "Link",
"in_list_view": 0,
"label": "Expense Head",
"oldfieldname": "expense_head",
"oldfieldtype": "Link",
"options": "Account",
"print_hide": 1,
"print_width": "120px",
"read_only": 0,
"reqd": 0,
"width": "120px"
},
{
"default": ":Company",
"doctype": "DocField",
"fieldname": "cost_center",
"fieldtype": "Link",
"in_list_view": 0,
"label": "Cost Center",
"oldfieldname": "cost_center",
"oldfieldtype": "Link",
"options": "Cost Center",
"print_hide": 1,
"print_width": "120px",
"read_only": 0,
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "reference",
"fieldtype": "Section Break",
"in_list_view": 0,
"label": "Reference"
},
{
"doctype": "DocField",
"fieldname": "project_name",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 0,
"label": "Project Name",
"options": "Project",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "brand",
"fieldtype": "Data",
"hidden": 1,
"in_list_view": 0,
"label": "Brand",
"oldfieldname": "brand",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 0
},
{
"description": "<a href=\"#Sales Browser/Item Group\">Add / Edit</a>",
"doctype": "DocField",
"fieldname": "item_group",
"fieldtype": "Link",
"hidden": 1,
"in_filter": 1,
"in_list_view": 0,
"label": "Item Group",
"oldfieldname": "item_group",
"oldfieldtype": "Link",
"options": "Item Group",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "purchase_order",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 0,
"label": "Purchase Order",
"no_copy": 1,
"oldfieldname": "purchase_order",
"oldfieldtype": "Link",
"options": "Purchase Order",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "po_detail",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"in_list_view": 0,
"label": "Purchase Order Item",
"no_copy": 1,
"oldfieldname": "po_detail",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "purchase_receipt",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 0,
"label": "Purchase Receipt",
"no_copy": 1,
"oldfieldname": "purchase_receipt",
"oldfieldtype": "Link",
"options": "Purchase Receipt",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "pr_detail",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"in_list_view": 0,
"label": "PR Detail",
"no_copy": 1,
"oldfieldname": "pr_detail",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"description": "Tax detail table fetched from item master as a string and stored in this field.\nUsed for Taxes and Charges",
"doctype": "DocField",
"fieldname": "item_tax_rate",
"fieldtype": "Small Text",
"hidden": 1,
"in_list_view": 0,
"label": "Item Tax Rate",
"oldfieldname": "item_tax_rate",
"oldfieldtype": "Small Text",
"print_hide": 1,
"read_only": 1,
"report_hide": 1
},
{
"doctype": "DocField",
"fieldname": "item_tax_amount",
"fieldtype": "Currency",
"hidden": 1,
"in_list_view": 0,
"label": "Item Tax Amount",
"no_copy": 1,
"options": "Company:company:default_currency",
"print_hide": 1,
"print_width": "150px",
"read_only": 1,
"search_index": 0,
"width": "150px"
},
{
"doctype": "DocField",
"fieldname": "valuation_rate",
"fieldtype": "Currency",
"hidden": 1,
"in_list_view": 0,
"label": "Valuation Rate",
"no_copy": 1,
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "conversion_factor",
"fieldtype": "Float",
"in_list_view": 0,
"label": "Conversion Factor",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "rm_supp_cost",
"fieldtype": "Currency",
"hidden": 1,
"in_list_view": 0,
"label": "Raw Materials Supplied Cost",
"no_copy": 1,
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"allow_on_submit": 1,
"doctype": "DocField",
"fieldname": "page_break",
"fieldtype": "Check",
"in_list_view": 0,
"label": "Page Break",
"no_copy": 1,
"print_hide": 1,
"read_only": 0,
"report_hide": 1
}
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,169 +0,0 @@
[
{
"creation": "2013-05-21 16:16:04",
"docstatus": 0,
"modified": "2013-07-10 14:54:18",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "PVTD.######",
"doctype": "DocType",
"hide_heading": 1,
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Purchase Taxes and Charges",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Purchase Taxes and Charges"
},
{
"default": "Valuation and Total",
"doctype": "DocField",
"fieldname": "category",
"fieldtype": "Select",
"in_list_view": 1,
"label": "Consider Tax or Charge for",
"oldfieldname": "category",
"oldfieldtype": "Select",
"options": "Valuation and Total\nValuation\nTotal",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "charge_type",
"fieldtype": "Select",
"in_list_view": 1,
"label": "Type",
"oldfieldname": "charge_type",
"oldfieldtype": "Select",
"options": "\nActual\nOn Net Total\nOn Previous Row Amount\nOn Previous Row Total",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "account_head",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Account Head",
"oldfieldname": "account_head",
"oldfieldtype": "Link",
"options": "Account",
"read_only": 0,
"reqd": 1
},
{
"default": ":Company",
"doctype": "DocField",
"fieldname": "cost_center",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Cost Center",
"oldfieldname": "cost_center",
"oldfieldtype": "Link",
"options": "Cost Center",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "description",
"fieldtype": "Small Text",
"in_list_view": 1,
"label": "Description",
"oldfieldname": "description",
"oldfieldtype": "Small Text",
"print_width": "300px",
"read_only": 0,
"reqd": 1,
"width": "300px"
},
{
"doctype": "DocField",
"fieldname": "rate",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Rate",
"oldfieldname": "rate",
"oldfieldtype": "Currency",
"read_only": 0,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "tax_amount",
"fieldtype": "Currency",
"label": "Amount",
"oldfieldname": "tax_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "total",
"fieldtype": "Currency",
"label": "Total",
"oldfieldname": "total",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "row_id",
"fieldtype": "Data",
"hidden": 0,
"label": "Enter Row",
"oldfieldname": "row_id",
"oldfieldtype": "Data",
"read_only": 0
},
{
"default": "Add",
"doctype": "DocField",
"fieldname": "add_deduct_tax",
"fieldtype": "Select",
"label": "Add or Deduct",
"oldfieldname": "add_deduct_tax",
"oldfieldtype": "Select",
"options": "Add\nDeduct",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "item_wise_tax_detail",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Item Wise Tax Detail ",
"oldfieldname": "item_wise_tax_detail",
"oldfieldtype": "Small Text",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "parenttype",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"label": "Parenttype",
"oldfieldname": "parenttype",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 0,
"search_index": 0
}
]

View File

@@ -1,182 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
//
//--------- ONLOAD -------------
wn.require("app/js/controllers/accounts.js");
cur_frm.cscript.onload = function(doc, cdt, cdn) {
}
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
}
// For customizing print
cur_frm.pformat.net_total_import = function(doc) {
return '';
}
cur_frm.pformat.grand_total_import = function(doc) {
return '';
}
cur_frm.pformat.in_words_import = function(doc) {
return '';
}
cur_frm.pformat.purchase_tax_details= function(doc){
//function to make row of table
var make_row = function(title,val,bold){
var bstart = '<b>'; var bend = '</b>';
return '<tr><td style="width:50%;">'+(bold?bstart:'')+title+(bold?bend:'')+'</td>'
+'<td style="width:25%;text-align:right;"></td>'
+'<td style="width:25%;text-align:right;">'+format_currency(val, doc.currency)+'</td>'
+'</tr>'
}
function convert_rate(val){
var new_val = flt(val)/flt(doc.conversion_rate);
return new_val;
}
function print_hide(fieldname) {
var doc_field = wn.meta.get_docfield(doc.doctype, fieldname, doc.name);
return doc_field.print_hide;
}
var cl = getchildren('Purchase Taxes and Charges',doc.name,'purchase_tax_details');
// outer table
var out='<div><table class="noborder" style="width:100%">\
<tr><td style="width: 60%"></td><td>';
// main table
out +='<table class="noborder" style="width:100%">';
if(!print_hide('net_total_import')) {
out += make_row('Net Total', doc.net_total_import, 1);
}
// add rows
if(cl.length){
for(var i=0;i<cl.length;i++){
out += make_row(cl[i].description,convert_rate(cl[i].tax_amount),0);
}
}
// grand total
if(!print_hide('grand_total_import')) {
out += make_row('Grand Total', doc.grand_total_import, 1);
}
if(doc.in_words_import && !print_hide('in_words_import')){
out +='</table></td></tr>';
out += '<tr><td colspan = "2">';
out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
out+= '<td style="width:50%;">'+doc.in_words_import+'</td></tr>';
}
out +='</table></td></tr></table></div>';
return out;
}
cur_frm.cscript.add_deduct_tax = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.category && d.add_deduct_tax){
alert(wn._("Please select Category first"));
d.add_deduct_tax = '';
}
else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
console.log([d.category, d.add_deduct_tax]);
msgprint(wn._("You cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
d.add_deduct_tax = '';
}
}
cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.category && d.charge_type){
alert(wn._("Please select Category first"));
d.charge_type = '';
}
else if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')){
alert(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
d.charge_type = '';
}
else if((d.category == 'Valuation' || d.category == 'Valuation and Total') && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')){
alert(wn._("You cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for valuation. You can select only 'Total' option for previous row amount or previous row total"))
d.charge_type = '';
}
validated = false;
refresh_field('charge_type',d.name,'purchase_tax_details');
cur_frm.cscript.row_id(doc, cdt, cdn);
cur_frm.cscript.rate(doc, cdt, cdn);
cur_frm.cscript.tax_amount(doc, cdt, cdn);
}
cur_frm.cscript.row_id = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.row_id){
alert(wn._("Please select Charge Type first"));
d.row_id = '';
}
else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
alert(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
d.row_id = '';
}
else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id){
if(d.row_id >= d.idx){
alert(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
d.row_id = '';
}
}
validated = false;
refresh_field('row_id',d.name,'purchase_tax_details');
}
cur_frm.set_query("account_head", "purchase_tax_details", function(doc) {
return {
query: "controllers.queries.tax_account_query",
filters: {
"account_type": ["Tax", "Chargeable", "Expense Account"],
"debit_or_credit": "Debit",
"company": doc.company
}
}
});
cur_frm.fields_dict['purchase_tax_details'].grid.get_field("cost_center").get_query = function(doc) {
return {
filters: {
'company': doc.company,
'group_or_ledger': "Ledger"
}
}
}
cur_frm.cscript.rate = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.rate) {
alert(wn._("Please select Charge Type first"));
d.rate = '';
}
validated = false;
refresh_field('rate',d.name,'purchase_tax_details');
}
cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.tax_amount){
alert(wn._("Please select Charge Type first"));
d.tax_amount = '';
}
else if(d.charge_type && d.tax_amount) {
alert(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
d.tax_amount = '';
}
validated = false;
refresh_field('tax_amount',d.name,'purchase_tax_details');
}

View File

@@ -1,17 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes.model import db_exists
from webnotes.model.bean import copy_doclist
from webnotes.model.code import get_obj
class DocType:
def __init__(self, doc, doclist=[]):
self.doc = doc
self.doclist = doclist

View File

@@ -1,91 +0,0 @@
[
{
"creation": "2013-01-10 16:34:08",
"docstatus": 0,
"modified": "2013-07-22 15:22:25",
"modified_by": "Administrator",
"owner": "wasim@webnotestech.com"
},
{
"autoname": "field:title",
"description": "Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like \"Shipping\", \"Insurance\", \"Handling\" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on \"Previous Row Total\" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.\n10. Add or Deduct: Whether you want to add or deduct the tax.",
"doctype": "DocType",
"document_type": "Master",
"icon": "icon-money",
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Purchase Taxes and Charges Master",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocPerm",
"name": "__common__",
"parent": "Purchase Taxes and Charges Master",
"parentfield": "permissions",
"parenttype": "DocType",
"permlevel": 0,
"read": 1,
"report": 1,
"submit": 0
},
{
"doctype": "DocType",
"name": "Purchase Taxes and Charges Master"
},
{
"doctype": "DocField",
"fieldname": "title",
"fieldtype": "Data",
"in_filter": 1,
"label": "Title",
"oldfieldname": "title",
"oldfieldtype": "Data",
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "is_default",
"fieldtype": "Check",
"label": "Default"
},
{
"doctype": "DocField",
"fieldname": "company",
"fieldtype": "Link",
"in_filter": 1,
"label": "Company",
"options": "Company",
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "purchase_tax_details",
"fieldtype": "Table",
"label": "Purchase Taxes and Charges",
"oldfieldname": "purchase_tax_details",
"oldfieldtype": "Table",
"options": "Purchase Taxes and Charges"
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"doctype": "DocPerm",
"role": "Purchase Manager",
"write": 0
},
{
"cancel": 1,
"create": 1,
"doctype": "DocPerm",
"role": "Purchase Master Manager",
"write": 1
}
]

View File

@@ -1,541 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
erpnext.POS = Class.extend({
init: function(wrapper, frm) {
this.wrapper = wrapper;
this.frm = frm;
this.wrapper.html('<div class="container">\
<div class="row" style="margin: -9px 0px 10px -30px; border-bottom: 1px solid #c7c7c7;">\
<div class="party-area col-sm-3 col-xs-6"></div>\
<div class="barcode-area col-sm-3 col-xs-6"></div>\
<div class="search-area col-sm-3 col-xs-6"></div>\
<div class="item-group-area col-sm-3 col-xs-6"></div>\
</div>\
<div class="row">\
<div class="col-sm-6">\
<div class="pos-bill">\
<div class="item-cart">\
<table class="table table-condensed table-hover" id="cart" style="table-layout: fixed;">\
<thead>\
<tr>\
<th style="width: 50%">Item</th>\
<th style="width: 25%; text-align: right;">Qty</th>\
<th style="width: 25%; text-align: right;">Rate</th>\
</tr>\
</thead>\
<tbody>\
</tbody>\
</table>\
</div>\
<br>\
<div class="totals-area" style="margin-left: 40%;">\
<table class="table table-condensed">\
<tr>\
<td><b>Net Total</b></td>\
<td style="text-align: right;" class="net-total"></td>\
</tr>\
</table>\
<div class="tax-table" style="display: none;">\
<table class="table table-condensed">\
<thead>\
<tr>\
<th style="width: 60%">Taxes</th>\
<th style="width: 40%; text-align: right;"></th>\
</tr>\
</thead>\
<tbody>\
</tbody>\
</table>\
</div>\
<div class="grand-total-area">\
<table class="table table-condensed">\
<tr>\
<td style="vertical-align: middle;"><b>Grand Total</b></td>\
<td style="text-align: right; font-size: 200%; \
font-size: bold;" class="grand-total"></td>\
</tr>\
</table>\
</div>\
</div>\
</div>\
<br><br>\
<button class="btn btn-success btn-lg make-payment">\
<i class="icon-money"></i> Make Payment</button>\
<button class="btn btn-default btn-lg delete-items pull-right" style="display: none;">\
<i class="icon-trash"></i> Del</button>\
<br><br>\
</div>\
<div class="col-sm-6">\
<div class="item-list-area">\
<div class="col-sm-12">\
<div class="row item-list"></div></div>\
</div>\
</div>\
</div></div>');
this.check_transaction_type();
this.make();
var me = this;
$(this.frm.wrapper).on("refresh-fields", function() {
me.refresh();
});
this.call_function("delete-items", function() {me.remove_selected_item();});
this.call_function("make-payment", function() {me.make_payment();});
},
check_transaction_type: function() {
var me = this;
// Check whether the transaction is "Sales" or "Purchase"
if (wn.meta.has_field(cur_frm.doc.doctype, "customer")) {
this.set_transaction_defaults("Customer", "export");
}
else if (wn.meta.has_field(cur_frm.doc.doctype, "supplier")) {
this.set_transaction_defaults("Supplier", "import");
}
},
set_transaction_defaults: function(party, export_or_import) {
var me = this;
this.party = party;
this.price_list = (party == "Customer" ?
this.frm.doc.selling_price_list : this.frm.doc.buying_price_list);
this.sales_or_purchase = (party == "Customer" ? "Sales" : "Purchase");
this.net_total = "net_total_" + export_or_import;
this.grand_total = "grand_total_" + export_or_import;
this.amount = export_or_import + "_amount";
this.rate = export_or_import + "_rate";
},
call_function: function(class_name, fn, event_name) {
this.wrapper.find("." + class_name).on(event_name || "click", fn);
},
make: function() {
this.make_party();
this.make_item_group();
this.make_search();
this.make_barcode();
this.make_item_list();
},
make_party: function() {
var me = this;
this.party_field = wn.ui.form.make_control({
df: {
"fieldtype": "Link",
"options": this.party,
"label": this.party,
"fieldname": "pos_party",
"placeholder": this.party
},
parent: this.wrapper.find(".party-area"),
only_input: true,
});
this.party_field.make_input();
this.party_field.$input.on("change", function() {
if(!me.party_field.autocomplete_open)
wn.model.set_value(me.frm.doctype, me.frm.docname,
me.party.toLowerCase(), this.value);
});
},
make_item_group: function() {
var me = this;
this.item_group = wn.ui.form.make_control({
df: {
"fieldtype": "Link",
"options": "Item Group",
"label": "Item Group",
"fieldname": "pos_item_group",
"placeholder": "Item Group"
},
parent: this.wrapper.find(".item-group-area"),
only_input: true,
});
this.item_group.make_input();
this.item_group.$input.on("change", function() {
if(!me.item_group.autocomplete_open)
me.make_item_list();
});
},
make_search: function() {
var me = this;
this.search = wn.ui.form.make_control({
df: {
"fieldtype": "Data",
"label": "Item",
"fieldname": "pos_item",
"placeholder": "Search Item"
},
parent: this.wrapper.find(".search-area"),
only_input: true,
});
this.search.make_input();
this.search.$input.on("keypress", function() {
if(!me.search.autocomplete_open)
if(me.item_timeout)
clearTimeout(me.item_timeout);
me.item_timeout = setTimeout(function() { me.make_item_list(); }, 1000);
});
},
make_barcode: function() {
var me = this;
this.barcode = wn.ui.form.make_control({
df: {
"fieldtype": "Data",
"label": "Barcode",
"fieldname": "pos_barcode",
"placeholder": "Barcode / Serial No"
},
parent: this.wrapper.find(".barcode-area"),
only_input: true,
});
this.barcode.make_input();
this.barcode.$input.on("keypress", function() {
if(me.barcode_timeout)
clearTimeout(me.barcode_timeout);
me.barcode_timeout = setTimeout(function() { me.add_item_thru_barcode(); }, 1000);
});
},
make_item_list: function() {
var me = this;
me.item_timeout = null;
wn.call({
method: 'accounts.doctype.sales_invoice.pos.get_items',
args: {
sales_or_purchase: this.sales_or_purchase,
price_list: this.price_list,
item_group: this.item_group.$input.val(),
item: this.search.$input.val()
},
callback: function(r) {
var $wrap = me.wrapper.find(".item-list");
me.wrapper.find(".item-list").empty();
if (r.message) {
$.each(r.message, function(index, obj) {
if (obj.image)
image = '<img src="' + obj.image + '" class="img-responsive" \
style="border:1px solid #eee; max-height: 140px;">';
else
image = '<div class="missing-image"><i class="icon-camera"></i></div>';
$(repl('<div class="col-xs-3 pos-item" data-item_code="%(item_code)s">\
<div style="height: 140px; overflow: hidden;">%(item_image)s</div>\
<div class="small">%(item_code)s</div>\
<div class="small">%(item_name)s</div>\
<div class="small">%(item_price)s</div>\
</div>',
{
item_code: obj.name,
item_price: format_currency(obj.ref_rate, obj.currency),
item_name: obj.name===obj.item_name ? "" : obj.item_name,
item_image: image
})).appendTo($wrap);
});
}
// if form is local then allow this function
$(me.wrapper).find("div.pos-item").on("click", function() {
if(me.frm.doc.docstatus==0) {
if(!me.frm.doc[me.party.toLowerCase()] && ((me.frm.doctype == "Quotation" &&
me.frm.doc.quotation_to == "Customer")
|| me.frm.doctype != "Quotation")) {
msgprint("Please select " + me.party + " first.");
return;
}
else
me.add_to_cart($(this).attr("data-item_code"));
}
});
}
});
},
add_to_cart: function(item_code, serial_no) {
var me = this;
var caught = false;
// get no_of_items
var no_of_items = me.wrapper.find("#cart tbody tr").length;
// check whether the item is already added
if (no_of_items != 0) {
$.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
this.frm.cscript.fname, this.frm.doctype), function(i, d) {
if (d.item_code == item_code) {
caught = true;
if (serial_no) {
d.serial_no += '\n' + serial_no;
me.frm.script_manager.trigger("serial_no", d.doctype, d.name);
}
else {
d.qty += 1;
me.frm.script_manager.trigger("qty", d.doctype, d.name);
}
}
});
}
// if item not found then add new item
if (!caught) {
this.add_new_item_to_grid(item_code, serial_no);
}
this.refresh();
this.refresh_search_box();
},
add_new_item_to_grid: function(item_code, serial_no) {
var me = this;
var child = wn.model.add_child(me.frm.doc, this.frm.doctype + " Item",
this.frm.cscript.fname);
child.item_code = item_code;
if (serial_no)
child.serial_no = serial_no;
this.frm.script_manager.trigger("item_code", child.doctype, child.name);
},
refresh_search_box: function() {
var me = this;
// Clear Item Box and remake item list
if (this.search.$input.val()) {
this.search.set_input("");
this.make_item_list();
}
},
update_qty: function(item_code, qty) {
var me = this;
$.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
this.frm.cscript.fname, this.frm.doctype), function(i, d) {
if (d.item_code == item_code) {
if (qty == 0) {
wn.model.clear_doc(d.doctype, d.name);
me.refresh_grid();
} else {
d.qty = qty;
me.frm.script_manager.trigger("qty", d.doctype, d.name);
}
}
});
me.refresh();
},
refresh: function() {
var me = this;
this.party_field.set_input(this.frm.doc[this.party.toLowerCase()]);
this.barcode.set_input("");
this.show_items_in_item_cart();
this.show_taxes();
this.set_totals();
// if form is local then only run all these functions
if (this.frm.doc.docstatus===0) {
this.call_when_local();
}
this.disable_text_box_and_button();
this.make_payment_button();
// If quotation to is not Customer then remove party
if (this.frm.doctype == "Quotation") {
this.party_field.$wrapper.remove();
if (this.frm.doc.quotation_to == "Customer")
this.make_party();
}
},
show_items_in_item_cart: function() {
var me = this;
var $items = this.wrapper.find("#cart tbody").empty();
$.each(wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
this.frm.cscript.fname, this.frm.doctype), function(i, d) {
$(repl('<tr id="%(item_code)s" data-selected="false">\
<td>%(item_code)s%(item_name)s</td>\
<td><input type="text" value="%(qty)s" \
class="form-control qty" style="text-align: right;"></td>\
<td style="text-align: right;"><b>%(amount)s</b><br>%(rate)s</td>\
</tr>',
{
item_code: d.item_code,
item_name: d.item_name===d.item_code ? "" : ("<br>" + d.item_name),
qty: d.qty,
rate: format_currency(d[me.rate], me.frm.doc.currency),
amount: format_currency(d[me.amount], me.frm.doc.currency)
}
)).appendTo($items);
});
},
show_taxes: function() {
var me = this;
var taxes = wn.model.get_children(this.sales_or_purchase + " Taxes and Charges",
this.frm.doc.name, this.frm.cscript.other_fname, this.frm.doctype);
$(this.wrapper).find(".tax-table")
.toggle((taxes && taxes.length &&
flt(me.frm.doc.other_charges_total_export ||
me.frm.doc.other_charges_added_import) != 0.0) ? true : false)
.find("tbody").empty();
$.each(taxes, function(i, d) {
$(repl('<tr>\
<td>%(description)s %(rate)s</td>\
<td style="text-align: right;">%(tax_amount)s</td>\
<tr>', {
description: d.description,
rate: ((d.charge_type == "Actual") ? '' : ("(" + d.rate + "%)")),
tax_amount: format_currency(flt(d.tax_amount)/flt(me.frm.doc.conversion_rate),
me.frm.doc.currency)
})).appendTo(".tax-table tbody");
});
},
set_totals: function() {
var me = this;
this.wrapper.find(".net-total").text(format_currency(this.frm.doc[this.net_total],
me.frm.doc.currency));
this.wrapper.find(".grand-total").text(format_currency(this.frm.doc[this.grand_total],
me.frm.doc.currency));
},
call_when_local: function() {
var me = this;
// append quantity to the respective item after change from input box
$(this.wrapper).find("input.qty").on("change", function() {
var item_code = $(this).closest("tr")[0].id;
me.update_qty(item_code, $(this).val());
});
// on td click toggle the highlighting of row
$(this.wrapper).find("#cart tbody tr td").on("click", function() {
var row = $(this).closest("tr");
if (row.attr("data-selected") == "false") {
row.attr("class", "warning");
row.attr("data-selected", "true");
}
else {
row.prop("class", null);
row.attr("data-selected", "false");
}
me.refresh_delete_btn();
});
me.refresh_delete_btn();
this.barcode.$input.focus();
},
disable_text_box_and_button: function() {
var me = this;
// if form is submitted & cancelled then disable all input box & buttons
if (this.frm.doc.docstatus>=1) {
$(this.wrapper).find('input, button').each(function () {
$(this).prop('disabled', true);
});
$(this.wrapper).find(".delete-items").hide();
$(this.wrapper).find(".make-payment").hide();
}
else {
$(this.wrapper).find('input, button').each(function () {
$(this).prop('disabled', false);
});
$(this.wrapper).find(".make-payment").show();
}
},
make_payment_button: function() {
var me = this;
// Show Make Payment button only in Sales Invoice
if (this.frm.doctype != "Sales Invoice")
$(this.wrapper).find(".make-payment").hide();
},
refresh_delete_btn: function() {
$(this.wrapper).find(".delete-items").toggle($(".item-cart .warning").length ? true : false);
},
add_item_thru_barcode: function() {
var me = this;
me.barcode_timeout = null;
wn.call({
method: 'accounts.doctype.sales_invoice.pos.get_item_code',
args: {barcode_serial_no: this.barcode.$input.val()},
callback: function(r) {
if (r.message) {
if (r.message[1] == "serial_no")
me.add_to_cart(r.message[0][0].item_code, r.message[0][0].name);
else
me.add_to_cart(r.message[0][0].name);
}
else
msgprint(wn._("Invalid Barcode"));
me.refresh();
}
});
},
remove_selected_item: function() {
var me = this;
var selected_items = [];
var no_of_items = $(this.wrapper).find("#cart tbody tr").length;
for(var x=0; x<=no_of_items - 1; x++) {
var row = $(this.wrapper).find("#cart tbody tr:eq(" + x + ")");
if(row.attr("data-selected") == "true") {
selected_items.push(row.attr("id"));
}
}
var child = wn.model.get_children(this.frm.doctype + " Item", this.frm.doc.name,
this.frm.cscript.fname, this.frm.doctype);
$.each(child, function(i, d) {
for (var i in selected_items) {
if (d.item_code == selected_items[i]) {
wn.model.clear_doc(d.doctype, d.name);
}
}
});
this.refresh_grid();
},
refresh_grid: function() {
this.frm.fields_dict[this.frm.cscript.fname].grid.refresh();
this.frm.script_manager.trigger("calculate_taxes_and_totals");
this.refresh();
},
make_payment: function() {
var me = this;
var no_of_items = $(this.wrapper).find("#cart tbody tr").length;
var mode_of_payment = [];
if (no_of_items == 0)
msgprint(wn._("Payment cannot be made for empty cart"));
else {
wn.call({
method: 'accounts.doctype.sales_invoice.pos.get_mode_of_payment',
callback: function(r) {
for (x=0; x<=r.message.length - 1; x++) {
mode_of_payment.push(r.message[x].name);
}
// show payment wizard
var dialog = new wn.ui.Dialog({
width: 400,
title: 'Payment',
fields: [
{fieldtype:'Data', fieldname:'total_amount', label:'Total Amount', read_only:1},
{fieldtype:'Select', fieldname:'mode_of_payment', label:'Mode of Payment',
options:mode_of_payment.join('\n'), reqd: 1},
{fieldtype:'Button', fieldname:'pay', label:'Pay'}
]
});
dialog.set_values({
"total_amount": $(".grand-total").text()
});
dialog.show();
dialog.get_input("total_amount").prop("disabled", true);
dialog.fields_dict.pay.input.onclick = function() {
me.frm.set_value("mode_of_payment", dialog.get_values().mode_of_payment);
me.frm.set_value("paid_amount", dialog.get_values().total_amount);
me.frm.cscript.mode_of_payment(me.frm.doc);
me.frm.save();
dialog.hide();
me.refresh();
};
}
});
}
},
});

View File

@@ -1,52 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
@webnotes.whitelist()
def get_items(price_list, sales_or_purchase, item=None, item_group=None):
condition = ""
args = {"price_list": price_list}
if sales_or_purchase == "Sales":
condition = "i.is_sales_item='Yes'"
else:
condition = "i.is_purchase_item='Yes'"
if item_group and item_group != "All Item Groups":
condition += " and i.item_group='%s'" % item_group
if item:
condition += " and CONCAT(i.name, i.item_name) like %(name)s"
args["name"] = "%%%s%%" % item
return webnotes.conn.sql("""select i.name, i.item_name, i.image,
item_det.ref_rate, item_det.currency
from `tabItem` i LEFT JOIN
(select item_code, ref_rate, currency from
`tabItem Price` where price_list=%s) item_det
ON
item_det.item_code=i.name
where
%s""" % ('%(price_list)s', condition), args, as_dict=1)
@webnotes.whitelist()
def get_item_code(barcode_serial_no):
input_via = "serial_no"
item_code = webnotes.conn.sql("""select name, item_code from `tabSerial No` where
name=%s""", (barcode_serial_no), as_dict=1)
if not item_code:
input_via = "barcode"
item_code = webnotes.conn.sql("""select name from `tabItem` where barcode=%s""",
(barcode_serial_no), as_dict=1)
if item_code:
return item_code, input_via
else:
webnotes.throw("Invalid Barcode / Serial No")
@webnotes.whitelist()
def get_mode_of_payment():
return webnotes.conn.sql("""select name from `tabMode of Payment`""", as_dict=1)

View File

@@ -1,425 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
cur_frm.cscript.tname = "Sales Invoice Item";
cur_frm.cscript.fname = "entries";
cur_frm.cscript.other_fname = "other_charges";
cur_frm.cscript.sales_team_fname = "sales_team";
// print heading
cur_frm.pformat.print_heading = 'Invoice';
wn.require('app/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js');
wn.require('app/utilities/doctype/sms_control/sms_control.js');
wn.require('app/selling/sales_common.js');
wn.require('app/accounts/doctype/sales_invoice/pos.js');
wn.provide("erpnext.accounts");
erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.extend({
onload: function() {
this._super();
if(!this.frm.doc.__islocal && !this.frm.doc.customer && this.frm.doc.debit_to) {
// show debit_to in print format
this.frm.set_df_property("debit_to", "print_hide", 0);
}
// toggle to pos view if is_pos is 1 in user_defaults
if ((cint(wn.defaults.get_user_defaults("is_pos"))===1 || cur_frm.doc.is_pos)) {
if(this.frm.doc.__islocal && !this.frm.doc.amended_from && !this.frm.doc.customer) {
this.frm.set_value("is_pos", 1);
this.is_pos(function() {
if (cint(wn.defaults.get_user_defaults("fs_pos_view"))===1)
cur_frm.cscript.toggle_pos(true);
});
}
}
// if document is POS then change default print format to "POS Invoice"
if(cur_frm.doc.is_pos && cur_frm.doc.docstatus===1) {
locals.DocType[cur_frm.doctype].default_print_format = "POS Invoice";
cur_frm.setup_print_layout();
}
},
refresh: function(doc, dt, dn) {
this._super();
cur_frm.cscript.is_opening(doc, dt, dn);
cur_frm.dashboard.reset();
if(doc.docstatus==1) {
cur_frm.appframe.add_button('View Ledger', function() {
wn.route_options = {
"voucher_no": doc.name,
"from_date": doc.posting_date,
"to_date": doc.posting_date,
};
wn.set_route("general-ledger");
}, "icon-table");
var percent_paid = cint(flt(doc.grand_total - doc.outstanding_amount) / flt(doc.grand_total) * 100);
cur_frm.dashboard.add_progress(percent_paid + "% Paid", percent_paid);
cur_frm.appframe.add_button(wn._('Send SMS'), cur_frm.cscript.send_sms, 'icon-mobile-phone');
if(cint(doc.update_stock)!=1) {
// show Make Delivery Note button only if Sales Invoice is not created from Delivery Note
var from_delivery_note = false;
from_delivery_note = cur_frm.get_doclist({parentfield: "entries"})
.some(function(item) {
return item.delivery_note ? true : false;
});
if(!from_delivery_note)
cur_frm.appframe.add_primary_action(wn._('Make Delivery'), cur_frm.cscript['Make Delivery Note'])
}
if(doc.outstanding_amount!=0)
cur_frm.appframe.add_primary_action(wn._('Make Payment Entry'), cur_frm.cscript.make_bank_voucher);
}
// Show buttons only when pos view is active
if (doc.docstatus===0 && !this.pos_active) {
cur_frm.cscript.sales_order_btn();
cur_frm.cscript.delivery_note_btn();
}
},
sales_order_btn: function() {
this.$sales_order_btn = cur_frm.appframe.add_primary_action(wn._('From Sales Order'),
function() {
wn.model.map_current_doc({
method: "selling.doctype.sales_order.sales_order.make_sales_invoice",
source_doctype: "Sales Order",
get_query_filters: {
docstatus: 1,
status: ["!=", "Stopped"],
per_billed: ["<", 99.99],
customer: cur_frm.doc.customer || undefined,
company: cur_frm.doc.company
}
})
});
},
delivery_note_btn: function() {
this.$delivery_note_btn = cur_frm.appframe.add_primary_action(wn._('From Delivery Note'),
function() {
wn.model.map_current_doc({
method: "stock.doctype.delivery_note.delivery_note.make_sales_invoice",
source_doctype: "Delivery Note",
get_query: function() {
var filters = {
company: cur_frm.doc.company
};
if(cur_frm.doc.customer) filters["customer"] = cur_frm.doc.customer;
return {
query: "controllers.queries.get_delivery_notes_to_be_billed",
filters: filters
};
}
});
});
},
tc_name: function() {
this.get_terms();
},
is_pos: function(callback_fn) {
cur_frm.cscript.hide_fields(this.frm.doc);
if(cint(this.frm.doc.is_pos)) {
if(!this.frm.doc.company) {
this.frm.set_value("is_pos", 0);
msgprint(wn._("Please specify Company to proceed"));
} else {
var me = this;
return this.frm.call({
doc: me.frm.doc,
method: "set_missing_values",
callback: function(r) {
if(!r.exc) {
me.frm.script_manager.trigger("update_stock");
me.set_default_values();
me.set_dynamic_labels();
me.calculate_taxes_and_totals();
if(callback_fn) callback_fn()
}
}
});
}
}
},
debit_to: function() {
this.customer();
},
allocated_amount: function() {
this.calculate_total_advance("Sales Invoice", "advance_adjustment_details");
this.frm.refresh_fields();
},
write_off_outstanding_amount_automatically: function() {
if(cint(this.frm.doc.write_off_outstanding_amount_automatically)) {
wn.model.round_floats_in(this.frm.doc, ["grand_total", "paid_amount"]);
// this will make outstanding amount 0
this.frm.set_value("write_off_amount",
flt(this.frm.doc.grand_total - this.frm.doc.paid_amount), precision("write_off_amount"));
}
this.frm.script_manager.trigger("write_off_amount");
},
write_off_amount: function() {
this.calculate_outstanding_amount();
this.frm.refresh_fields();
},
paid_amount: function() {
this.write_off_outstanding_amount_automatically();
},
entries_add: function(doc, cdt, cdn) {
var row = wn.model.get_doc(cdt, cdn);
this.frm.script_manager.copy_from_first_row("entries", row, ["income_account", "cost_center"]);
},
set_dynamic_labels: function() {
this._super();
this.hide_fields(this.frm.doc);
},
entries_on_form_rendered: function(doc, grid_row) {
erpnext.setup_serial_no(grid_row)
}
});
// for backward compatibility: combine new and previous states
$.extend(cur_frm.cscript, new erpnext.accounts.SalesInvoiceController({frm: cur_frm}));
// Hide Fields
// ------------
cur_frm.cscript.hide_fields = function(doc) {
par_flds = ['project_name', 'due_date', 'is_opening', 'source', 'total_advance', 'gross_profit',
'gross_profit_percent', 'get_advances_received',
'advance_adjustment_details', 'sales_partner', 'commission_rate',
'total_commission', 'advances'];
item_flds_normal = ['sales_order', 'delivery_note']
if(cint(doc.is_pos) == 1) {
hide_field(par_flds);
unhide_field('payments_section');
cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal, false);
} else {
hide_field('payments_section');
for (i in par_flds) {
var docfield = wn.meta.docfield_map[doc.doctype][par_flds[i]];
if(!docfield.hidden) unhide_field(par_flds[i]);
}
cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal, true);
}
item_flds_stock = ['serial_no', 'batch_no', 'actual_qty', 'expense_account', 'warehouse']
cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_stock,
(cint(doc.update_stock)==1 ? true : false));
// India related fields
var cp = wn.control_panel;
if (cp.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']);
else hide_field(['c_form_applicable', 'c_form_no']);
cur_frm.refresh_fields();
}
cur_frm.cscript.mode_of_payment = function(doc) {
return cur_frm.call({
method: "get_bank_cash_account",
args: { mode_of_payment: doc.mode_of_payment }
});
}
cur_frm.cscript.update_stock = function(doc, dt, dn) {
cur_frm.cscript.hide_fields(doc, dt, dn);
}
cur_frm.cscript.is_opening = function(doc, dt, dn) {
hide_field('aging_date');
if (doc.is_opening == 'Yes') unhide_field('aging_date');
}
//Make Delivery Note Button
//-----------------------------
cur_frm.cscript['Make Delivery Note'] = function() {
wn.model.open_mapped_doc({
method: "accounts.doctype.sales_invoice.sales_invoice.make_delivery_note",
source_name: cur_frm.doc.name
})
}
cur_frm.cscript.make_bank_voucher = function() {
return wn.call({
method: "accounts.doctype.journal_voucher.journal_voucher.get_payment_entry_from_sales_invoice",
args: {
"sales_invoice": cur_frm.doc.name
},
callback: function(r) {
var doclist = wn.model.sync(r.message);
wn.set_route("Form", doclist[0].doctype, doclist[0].name);
}
});
}
cur_frm.fields_dict.debit_to.get_query = function(doc) {
return{
filters: {
'debit_or_credit': 'Debit',
'is_pl_account': 'No',
'group_or_ledger': 'Ledger',
'company': doc.company
}
}
}
cur_frm.fields_dict.cash_bank_account.get_query = function(doc) {
return{
filters: {
'debit_or_credit': 'Debit',
'is_pl_account': 'No',
'group_or_ledger': 'Ledger',
'company': doc.company
}
}
}
cur_frm.fields_dict.write_off_account.get_query = function(doc) {
return{
filters:{
'debit_or_credit': 'Debit',
'is_pl_account': 'Yes',
'group_or_ledger': 'Ledger',
'company': doc.company
}
}
}
// Write off cost center
//-----------------------
cur_frm.fields_dict.write_off_cost_center.get_query = function(doc) {
return{
filters:{
'group_or_ledger': 'Ledger',
'company': doc.company
}
}
}
//project name
//--------------------------
cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) {
return{
query: "controllers.queries.get_project_name",
filters: {'customer': doc.customer}
}
}
// Income Account in Details Table
// --------------------------------
cur_frm.set_query("income_account", "entries", function(doc) {
return{
query: "accounts.doctype.sales_invoice.sales_invoice.get_income_account",
filters: {'company': doc.company}
}
});
// expense account
if (sys_defaults.auto_accounting_for_stock) {
cur_frm.fields_dict['entries'].grid.get_field('expense_account').get_query = function(doc) {
return {
filters: {
'is_pl_account': 'Yes',
'debit_or_credit': 'Debit',
'company': doc.company,
'group_or_ledger': 'Ledger'
}
}
}
}
// warehouse in detail table
//----------------------------
cur_frm.fields_dict['entries'].grid.get_field('warehouse').get_query = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
return{
filters:[
['Bin', 'item_code', '=', d.item_code],
['Bin', 'actual_qty', '>', 0]
]
}
}
// Cost Center in Details Table
// -----------------------------
cur_frm.fields_dict["entries"].grid.get_field("cost_center").get_query = function(doc) {
return {
filters: {
'company': doc.company,
'group_or_ledger': 'Ledger'
}
}
}
cur_frm.cscript.income_account = function(doc, cdt, cdn) {
cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "income_account");
}
cur_frm.cscript.expense_account = function(doc, cdt, cdn) {
cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "expense_account");
}
cur_frm.cscript.cost_center = function(doc, cdt, cdn) {
cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "cost_center");
}
cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
if(cint(wn.boot.notification_settings.sales_invoice)) {
cur_frm.email_doc(wn.boot.notification_settings.sales_invoice_message);
}
}
cur_frm.cscript.convert_into_recurring_invoice = function(doc, dt, dn) {
// set default values for recurring invoices
if(doc.convert_into_recurring_invoice) {
var owner_email = doc.owner=="Administrator"
? wn.user_info("Administrator").email
: doc.owner;
doc.notification_email_address = $.map([cstr(owner_email),
cstr(doc.contact_email)], function(v) { return v || null; }).join(", ");
doc.repeat_on_day_of_month = wn.datetime.str_to_obj(doc.posting_date).getDate();
}
refresh_many(["notification_email_address", "repeat_on_day_of_month"]);
}
cur_frm.cscript.invoice_period_from_date = function(doc, dt, dn) {
// set invoice_period_to_date
if(doc.invoice_period_from_date) {
var recurring_type_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6,
'Yearly': 12};
var months = recurring_type_map[doc.recurring_type];
if(months) {
var to_date = wn.datetime.add_months(doc.invoice_period_from_date,
months);
doc.invoice_period_to_date = wn.datetime.add_days(to_date, -1);
refresh_field('invoice_period_to_date');
}
}
}

View File

@@ -1,968 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
import webnotes.defaults
from webnotes.utils import add_days, cint, cstr, date_diff, flt, getdate, nowdate, \
get_first_day, get_last_day
from webnotes.utils.email_lib import sendmail
from webnotes.utils import comma_and, get_url
from webnotes.model.doc import make_autoname
from webnotes.model.bean import getlist
from webnotes.model.code import get_obj
from webnotes import _, msgprint
month_map = {'Monthly': 1, 'Quarterly': 3, 'Half-yearly': 6, 'Yearly': 12}
from controllers.selling_controller import SellingController
class DocType(SellingController):
def __init__(self,d,dl):
self.doc, self.doclist = d, dl
self.log = []
self.tname = 'Sales Invoice Item'
self.fname = 'entries'
self.status_updater = [{
'source_dt': 'Sales Invoice Item',
'target_field': 'billed_amt',
'target_ref_field': 'export_amount',
'target_dt': 'Sales Order Item',
'join_field': 'so_detail',
'target_parent_dt': 'Sales Order',
'target_parent_field': 'per_billed',
'source_field': 'export_amount',
'join_field': 'so_detail',
'percent_join_field': 'sales_order',
'status_field': 'billing_status',
'keyword': 'Billed'
}]
def validate(self):
super(DocType, self).validate()
self.validate_posting_time()
self.so_dn_required()
self.validate_proj_cust()
self.validate_with_previous_doc()
self.validate_uom_is_integer("stock_uom", "qty")
self.check_stop_sales_order("sales_order")
self.validate_customer_account()
self.validate_debit_acc()
self.validate_fixed_asset_account()
self.clear_unallocated_advances("Sales Invoice Advance", "advance_adjustment_details")
self.add_remarks()
if cint(self.doc.is_pos):
self.validate_pos()
self.validate_write_off_account()
if cint(self.doc.update_stock):
self.validate_item_code()
self.update_current_stock()
self.validate_delivery_note()
if not self.doc.is_opening:
self.doc.is_opening = 'No'
self.set_aging_date()
self.set_against_income_account()
self.validate_c_form()
self.validate_time_logs_are_submitted()
self.validate_recurring_invoice()
self.validate_multiple_billing("Delivery Note", "dn_detail", "export_amount",
"delivery_note_details")
def on_submit(self):
if cint(self.doc.update_stock) == 1:
self.update_stock_ledger()
else:
# Check for Approving Authority
if not self.doc.recurring_id:
get_obj('Authorization Control').validate_approving_authority(self.doc.doctype,
self.doc.company, self.doc.grand_total, self)
self.check_prev_docstatus()
self.update_status_updater_args()
self.update_prevdoc_status()
# this sequence because outstanding may get -ve
self.make_gl_entries()
self.check_credit_limit(self.doc.debit_to)
if not cint(self.doc.is_pos) == 1:
self.update_against_document_in_jv()
self.update_c_form()
self.update_time_log_batch(self.doc.name)
self.convert_to_recurring()
def before_cancel(self):
self.update_time_log_batch(None)
def on_cancel(self):
if cint(self.doc.update_stock) == 1:
self.update_stock_ledger()
self.check_stop_sales_order("sales_order")
from accounts.utils import remove_against_link_from_jv
remove_against_link_from_jv(self.doc.doctype, self.doc.name, "against_invoice")
self.update_status_updater_args()
self.update_prevdoc_status()
self.make_cancel_gl_entries()
def update_status_updater_args(self):
if cint(self.doc.update_stock):
self.status_updater.append({
'source_dt':'Sales Invoice Item',
'target_dt':'Sales Order Item',
'target_parent_dt':'Sales Order',
'target_parent_field':'per_delivered',
'target_field':'delivered_qty',
'target_ref_field':'qty',
'source_field':'qty',
'join_field':'so_detail',
'percent_join_field':'sales_order',
'status_field':'delivery_status',
'keyword':'Delivered',
'second_source_dt': 'Delivery Note Item',
'second_source_field': 'qty',
'second_join_field': 'prevdoc_detail_docname'
})
def on_update_after_submit(self):
self.validate_recurring_invoice()
self.convert_to_recurring()
def get_portal_page(self):
return "invoice" if self.doc.docstatus==1 else None
def set_missing_values(self, for_validate=False):
self.set_pos_fields(for_validate)
if not self.doc.debit_to:
self.doc.debit_to = self.get_customer_account()
if not self.doc.due_date:
self.doc.due_date = self.get_due_date()
super(DocType, self).set_missing_values(for_validate)
def set_customer_defaults(self):
# TODO cleanup these methods
if self.doc.customer:
self.doc.debit_to = self.get_customer_account()
elif self.doc.debit_to:
self.doc.customer = webnotes.conn.get_value('Account', self.doc.debit_to, 'master_name')
self.doc.due_date = self.get_due_date()
super(DocType, self).set_customer_defaults()
def update_time_log_batch(self, sales_invoice):
for d in self.doclist.get({"doctype":"Sales Invoice Item"}):
if d.time_log_batch:
tlb = webnotes.bean("Time Log Batch", d.time_log_batch)
tlb.doc.sales_invoice = sales_invoice
tlb.update_after_submit()
def validate_time_logs_are_submitted(self):
for d in self.doclist.get({"doctype":"Sales Invoice Item"}):
if d.time_log_batch:
status = webnotes.conn.get_value("Time Log Batch", d.time_log_batch, "status")
if status!="Submitted":
webnotes.msgprint(_("Time Log Batch status must be 'Submitted'") + ":" + d.time_log_batch,
raise_exception=True)
def set_pos_fields(self, for_validate=False):
"""Set retail related fields from pos settings"""
if cint(self.doc.is_pos) != 1:
return
from selling.utils import get_pos_settings, apply_pos_settings
pos = get_pos_settings(self.doc.company)
if pos:
if not for_validate and not self.doc.customer:
self.doc.customer = pos.customer
self.set_customer_defaults()
for fieldname in ('territory', 'naming_series', 'currency', 'charge', 'letter_head', 'tc_name',
'selling_price_list', 'company', 'select_print_heading', 'cash_bank_account'):
if (not for_validate) or (for_validate and not self.doc.fields.get(fieldname)):
self.doc.fields[fieldname] = pos.get(fieldname)
if not for_validate:
self.doc.update_stock = cint(pos.get("update_stock"))
# set pos values in items
for item in self.doclist.get({"parentfield": "entries"}):
if item.fields.get('item_code'):
for fieldname, val in apply_pos_settings(pos, item.fields).items():
if (not for_validate) or (for_validate and not item.fields.get(fieldname)):
item.fields[fieldname] = val
# fetch terms
if self.doc.tc_name and not self.doc.terms:
self.doc.terms = webnotes.conn.get_value("Terms and Conditions", self.doc.tc_name, "terms")
# fetch charges
if self.doc.charge and not len(self.doclist.get({"parentfield": "other_charges"})):
self.set_taxes("other_charges", "charge")
def get_customer_account(self):
"""Get Account Head to which amount needs to be Debited based on Customer"""
if not self.doc.company:
msgprint("Please select company first and re-select the customer after doing so",
raise_exception=1)
if self.doc.customer:
acc_head = webnotes.conn.sql("""select name from `tabAccount`
where (name = %s or (master_name = %s and master_type = 'customer'))
and docstatus != 2 and company = %s""",
(cstr(self.doc.customer) + " - " + self.get_company_abbr(),
self.doc.customer, self.doc.company))
if acc_head and acc_head[0][0]:
return acc_head[0][0]
else:
msgprint("%s does not have an Account Head in %s. \
You must first create it from the Customer Master" %
(self.doc.customer, self.doc.company))
def get_due_date(self):
"""Set Due Date = Posting Date + Credit Days"""
due_date = None
if self.doc.posting_date:
credit_days = 0
if self.doc.debit_to:
credit_days = webnotes.conn.get_value("Account", self.doc.debit_to, "credit_days")
if self.doc.customer and not credit_days:
credit_days = webnotes.conn.get_value("Customer", self.doc.customer, "credit_days")
if self.doc.company and not credit_days:
credit_days = webnotes.conn.get_value("Company", self.doc.company, "credit_days")
if credit_days:
due_date = add_days(self.doc.posting_date, credit_days)
else:
due_date = self.doc.posting_date
return due_date
def get_advances(self):
super(DocType, self).get_advances(self.doc.debit_to,
"Sales Invoice Advance", "advance_adjustment_details", "credit")
def get_company_abbr(self):
return webnotes.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0]
def update_against_document_in_jv(self):
"""
Links invoice and advance voucher:
1. cancel advance voucher
2. split into multiple rows if partially adjusted, assign against voucher
3. submit advance voucher
"""
lst = []
for d in getlist(self.doclist, 'advance_adjustment_details'):
if flt(d.allocated_amount) > 0:
args = {
'voucher_no' : d.journal_voucher,
'voucher_detail_no' : d.jv_detail_no,
'against_voucher_type' : 'Sales Invoice',
'against_voucher' : self.doc.name,
'account' : self.doc.debit_to,
'is_advance' : 'Yes',
'dr_or_cr' : 'credit',
'unadjusted_amt' : flt(d.advance_amount),
'allocated_amt' : flt(d.allocated_amount)
}
lst.append(args)
if lst:
from accounts.utils import reconcile_against_document
reconcile_against_document(lst)
def validate_customer_account(self):
"""Validates Debit To Account and Customer Matches"""
if self.doc.customer and self.doc.debit_to and not cint(self.doc.is_pos):
acc_head = webnotes.conn.sql("select master_name from `tabAccount` where name = %s and docstatus != 2", self.doc.debit_to)
if (acc_head and cstr(acc_head[0][0]) != cstr(self.doc.customer)) or \
(not acc_head and (self.doc.debit_to != cstr(self.doc.customer) + " - " + self.get_company_abbr())):
msgprint("Debit To: %s do not match with Customer: %s for Company: %s.\n If both correctly entered, please select Master Type \
and Master Name in account master." %(self.doc.debit_to, self.doc.customer,self.doc.company), raise_exception=1)
def validate_debit_acc(self):
acc = webnotes.conn.sql("select debit_or_credit, is_pl_account from tabAccount where name = '%s' and docstatus != 2" % self.doc.debit_to)
if not acc:
msgprint("Account: "+ self.doc.debit_to + " does not exist")
raise Exception
elif acc[0][0] and acc[0][0] != 'Debit':
msgprint("Account: "+ self.doc.debit_to + " is not a debit account")
raise Exception
elif acc[0][1] and acc[0][1] != 'No':
msgprint("Account: "+ self.doc.debit_to + " is a pl account")
raise Exception
def validate_fixed_asset_account(self):
"""Validate Fixed Asset Account and whether Income Account Entered Exists"""
for d in getlist(self.doclist,'entries'):
item = webnotes.conn.sql("select name,is_asset_item,is_sales_item from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life > now())"% d.item_code)
acc = webnotes.conn.sql("select account_type from `tabAccount` where name = '%s' and docstatus != 2" % d.income_account)
if not acc:
msgprint("Account: "+d.income_account+" does not exist in the system")
raise Exception
elif item and item[0][1] == 'Yes' and not acc[0][0] == 'Fixed Asset Account':
msgprint("Please select income head with account type 'Fixed Asset Account' as Item %s is an asset item" % d.item_code)
raise Exception
def validate_with_previous_doc(self):
super(DocType, self).validate_with_previous_doc(self.tname, {
"Sales Order": {
"ref_dn_field": "sales_order",
"compare_fields": [["customer", "="], ["company", "="], ["project_name", "="],
["currency", "="]],
},
"Delivery Note": {
"ref_dn_field": "delivery_note",
"compare_fields": [["customer", "="], ["company", "="], ["project_name", "="],
["currency", "="]],
},
})
if cint(webnotes.defaults.get_global_default('maintain_same_sales_rate')):
super(DocType, self).validate_with_previous_doc(self.tname, {
"Sales Order Item": {
"ref_dn_field": "so_detail",
"compare_fields": [["export_rate", "="]],
"is_child_table": True,
"allow_duplicate_prev_row_id": True
},
"Delivery Note Item": {
"ref_dn_field": "dn_detail",
"compare_fields": [["export_rate", "="]],
"is_child_table": True
}
})
def set_aging_date(self):
if self.doc.is_opening != 'Yes':
self.doc.aging_date = self.doc.posting_date
elif not self.doc.aging_date:
msgprint("Aging Date is mandatory for opening entry")
raise Exception
def set_against_income_account(self):
"""Set against account for debit to account"""
against_acc = []
for d in getlist(self.doclist, 'entries'):
if d.income_account not in against_acc:
against_acc.append(d.income_account)
self.doc.against_income_account = ','.join(against_acc)
def add_remarks(self):
if not self.doc.remarks: self.doc.remarks = 'No Remarks'
def so_dn_required(self):
"""check in manage account if sales order / delivery note required or not."""
dic = {'Sales Order':'so_required','Delivery Note':'dn_required'}
for i in dic:
if webnotes.conn.get_value('Selling Settings', None, dic[i]) == 'Yes':
for d in getlist(self.doclist,'entries'):
if webnotes.conn.get_value('Item', d.item_code, 'is_stock_item') == 'Yes' \
and not d.fields[i.lower().replace(' ','_')]:
msgprint("%s is mandatory for stock item which is not mentioed against item: %s"%(i,d.item_code), raise_exception=1)
def validate_proj_cust(self):
"""check for does customer belong to same project as entered.."""
if self.doc.project_name and self.doc.customer:
res = webnotes.conn.sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer))
if not res:
msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in that project."%(self.doc.customer,self.doc.project_name))
raise Exception
def validate_pos(self):
if not self.doc.cash_bank_account and flt(self.doc.paid_amount):
msgprint("Cash/Bank Account is mandatory for POS, for making payment entry")
raise Exception
if (flt(self.doc.paid_amount) + flt(self.doc.write_off_amount) - round(flt(self.doc.grand_total), 2))>0.001:
msgprint("(Paid amount + Write Off Amount) can not be greater than Grand Total")
raise Exception
def validate_item_code(self):
for d in getlist(self.doclist, 'entries'):
if not d.item_code:
msgprint("Please enter Item Code at line no : %s to update stock or remove check from Update Stock in Basic Info Tab." % (d.idx),
raise_exception=True)
def validate_delivery_note(self):
for d in self.doclist.get({"parentfield": "entries"}):
if d.delivery_note:
msgprint("""Stock update can not be made against Delivery Note""", raise_exception=1)
def validate_write_off_account(self):
if flt(self.doc.write_off_amount) and not self.doc.write_off_account:
msgprint("Please enter Write Off Account", raise_exception=1)
def validate_c_form(self):
""" Blank C-form no if C-form applicable marked as 'No'"""
if self.doc.amended_from and self.doc.c_form_applicable == 'No' and self.doc.c_form_no:
webnotes.conn.sql("""delete from `tabC-Form Invoice Detail` where invoice_no = %s
and parent = %s""", (self.doc.amended_from, self.doc.c_form_no))
webnotes.conn.set(self.doc, 'c_form_no', '')
def update_current_stock(self):
for d in getlist(self.doclist, 'entries'):
if d.item_code and d.warehouse:
bin = webnotes.conn.sql("select actual_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
for d in getlist(self.doclist, 'packing_details'):
bin = webnotes.conn.sql("select actual_qty, projected_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0
d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0
def get_warehouse(self):
w = webnotes.conn.sql("select warehouse from `tabPOS Setting` where ifnull(user,'') = '%s' and company = '%s'" % (webnotes.session['user'], self.doc.company))
w = w and w[0][0] or ''
if not w:
ps = webnotes.conn.sql("select name, warehouse from `tabPOS Setting` where ifnull(user,'') = '' and company = '%s'" % self.doc.company)
if not ps:
msgprint("To make POS entry, please create POS Setting from Accounts --> POS Setting page and refresh the system.", raise_exception=True)
elif not ps[0][1]:
msgprint("Please enter warehouse in POS Setting")
else:
w = ps[0][1]
return w
def on_update(self):
if cint(self.doc.update_stock) == 1:
# Set default warehouse from pos setting
if cint(self.doc.is_pos) == 1:
w = self.get_warehouse()
if w:
for d in getlist(self.doclist, 'entries'):
if not d.warehouse:
d.warehouse = cstr(w)
from stock.doctype.packed_item.packed_item import make_packing_list
make_packing_list(self, 'entries')
else:
self.doclist = self.doc.clear_table(self.doclist, 'packing_details')
if cint(self.doc.is_pos) == 1:
if flt(self.doc.paid_amount) == 0:
if self.doc.cash_bank_account:
webnotes.conn.set(self.doc, 'paid_amount',
(flt(self.doc.grand_total) - flt(self.doc.write_off_amount)))
else:
# show message that the amount is not paid
webnotes.conn.set(self.doc,'paid_amount',0)
webnotes.msgprint("Note: Payment Entry will not be created since 'Cash/Bank Account' was not specified.")
else:
webnotes.conn.set(self.doc,'paid_amount',0)
def check_prev_docstatus(self):
for d in getlist(self.doclist,'entries'):
if d.sales_order:
submitted = webnotes.conn.sql("select name from `tabSales Order` where docstatus = 1 and name = '%s'" % d.sales_order)
if not submitted:
msgprint("Sales Order : "+ cstr(d.sales_order) +" is not submitted")
raise Exception , "Validation Error."
if d.delivery_note:
submitted = webnotes.conn.sql("select name from `tabDelivery Note` where docstatus = 1 and name = '%s'" % d.delivery_note)
if not submitted:
msgprint("Delivery Note : "+ cstr(d.delivery_note) +" is not submitted")
raise Exception , "Validation Error."
def update_stock_ledger(self):
sl_entries = []
for d in self.get_item_list():
if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes" \
and d.warehouse:
sl_entries.append(self.get_sl_entries(d, {
"actual_qty": -1*flt(d.qty),
"stock_uom": webnotes.conn.get_value("Item", d.item_code, "stock_uom")
}))
self.make_sl_entries(sl_entries)
def make_gl_entries(self, update_gl_entries_after=True):
gl_entries = self.get_gl_entries()
if gl_entries:
from accounts.general_ledger import make_gl_entries
update_outstanding = cint(self.doc.is_pos) and self.doc.write_off_account \
and 'No' or 'Yes'
make_gl_entries(gl_entries, cancel=(self.doc.docstatus == 2),
update_outstanding=update_outstanding, merge_entries=False)
if update_gl_entries_after and cint(self.doc.update_stock) \
and cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")):
self.update_gl_entries_after()
def get_gl_entries(self, warehouse_account=None):
from accounts.general_ledger import merge_similar_entries
gl_entries = []
self.make_customer_gl_entry(gl_entries)
self.make_tax_gl_entries(gl_entries)
self.make_item_gl_entries(gl_entries)
# merge gl entries before adding pos entries
gl_entries = merge_similar_entries(gl_entries)
self.make_pos_gl_entries(gl_entries)
return gl_entries
def make_customer_gl_entry(self, gl_entries):
if self.doc.grand_total:
gl_entries.append(
self.get_gl_dict({
"account": self.doc.debit_to,
"against": self.doc.against_income_account,
"debit": self.doc.grand_total,
"remarks": self.doc.remarks,
"against_voucher": self.doc.name,
"against_voucher_type": self.doc.doctype,
})
)
def make_tax_gl_entries(self, gl_entries):
for tax in self.doclist.get({"parentfield": "other_charges"}):
if flt(tax.tax_amount):
gl_entries.append(
self.get_gl_dict({
"account": tax.account_head,
"against": self.doc.debit_to,
"credit": flt(tax.tax_amount),
"remarks": self.doc.remarks,
"cost_center": tax.cost_center
})
)
def make_item_gl_entries(self, gl_entries):
# income account gl entries
for item in self.doclist.get({"parentfield": "entries"}):
if flt(item.amount):
gl_entries.append(
self.get_gl_dict({
"account": item.income_account,
"against": self.doc.debit_to,
"credit": item.amount,
"remarks": self.doc.remarks,
"cost_center": item.cost_center
})
)
# expense account gl entries
if cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")) \
and cint(self.doc.update_stock):
gl_entries += super(DocType, self).get_gl_entries()
def make_pos_gl_entries(self, gl_entries):
if cint(self.doc.is_pos) and self.doc.cash_bank_account and self.doc.paid_amount:
# POS, make payment entries
gl_entries.append(
self.get_gl_dict({
"account": self.doc.debit_to,
"against": self.doc.cash_bank_account,
"credit": self.doc.paid_amount,
"remarks": self.doc.remarks,
"against_voucher": self.doc.name,
"against_voucher_type": self.doc.doctype,
})
)
gl_entries.append(
self.get_gl_dict({
"account": self.doc.cash_bank_account,
"against": self.doc.debit_to,
"debit": self.doc.paid_amount,
"remarks": self.doc.remarks,
})
)
# write off entries, applicable if only pos
if self.doc.write_off_account and self.doc.write_off_amount:
gl_entries.append(
self.get_gl_dict({
"account": self.doc.debit_to,
"against": self.doc.write_off_account,
"credit": self.doc.write_off_amount,
"remarks": self.doc.remarks,
"against_voucher": self.doc.name,
"against_voucher_type": self.doc.doctype,
})
)
gl_entries.append(
self.get_gl_dict({
"account": self.doc.write_off_account,
"against": self.doc.debit_to,
"debit": self.doc.write_off_amount,
"remarks": self.doc.remarks,
"cost_center": self.doc.write_off_cost_center
})
)
def update_c_form(self):
"""Update amended id in C-form"""
if self.doc.c_form_no and self.doc.amended_from:
webnotes.conn.sql("""update `tabC-Form Invoice Detail` set invoice_no = %s,
invoice_date = %s, territory = %s, net_total = %s,
grand_total = %s where invoice_no = %s and parent = %s""",
(self.doc.name, self.doc.amended_from, self.doc.c_form_no))
@property
def meta(self):
if not hasattr(self, "_meta"):
self._meta = webnotes.get_doctype(self.doc.doctype)
return self._meta
def validate_recurring_invoice(self):
if self.doc.convert_into_recurring_invoice:
self.validate_notification_email_id()
if not self.doc.recurring_type:
msgprint(_("Please select: ") + self.meta.get_label("recurring_type"),
raise_exception=1)
elif not (self.doc.invoice_period_from_date and \
self.doc.invoice_period_to_date):
msgprint(comma_and([self.meta.get_label("invoice_period_from_date"),
self.meta.get_label("invoice_period_to_date")])
+ _(": Mandatory for a Recurring Invoice."),
raise_exception=True)
def convert_to_recurring(self):
if self.doc.convert_into_recurring_invoice:
if not self.doc.recurring_id:
webnotes.conn.set(self.doc, "recurring_id",
make_autoname("RECINV/.#####"))
self.set_next_date()
elif self.doc.recurring_id:
webnotes.conn.sql("""update `tabSales Invoice`
set convert_into_recurring_invoice = 0
where recurring_id = %s""", (self.doc.recurring_id,))
def validate_notification_email_id(self):
if self.doc.notification_email_address:
email_list = filter(None, [cstr(email).strip() for email in
self.doc.notification_email_address.replace("\n", "").split(",")])
from webnotes.utils import validate_email_add
for email in email_list:
if not validate_email_add(email):
msgprint(self.meta.get_label("notification_email_address") \
+ " - " + _("Invalid Email Address") + ": \"%s\"" % email,
raise_exception=1)
else:
msgprint("Notification Email Addresses not specified for recurring invoice",
raise_exception=1)
def set_next_date(self):
""" Set next date on which auto invoice will be created"""
if not self.doc.repeat_on_day_of_month:
msgprint("""Please enter 'Repeat on Day of Month' field value.
The day of the month on which auto invoice
will be generated e.g. 05, 28 etc.""", raise_exception=1)
next_date = get_next_date(self.doc.posting_date,
month_map[self.doc.recurring_type], cint(self.doc.repeat_on_day_of_month))
webnotes.conn.set(self.doc, 'next_date', next_date)
def get_next_date(dt, mcount, day=None):
dt = getdate(dt)
from dateutil.relativedelta import relativedelta
dt += relativedelta(months=mcount, day=day)
return dt
def manage_recurring_invoices(next_date=None, commit=True):
"""
Create recurring invoices on specific date by copying the original one
and notify the concerned people
"""
next_date = next_date or nowdate()
recurring_invoices = webnotes.conn.sql("""select name, recurring_id
from `tabSales Invoice` where ifnull(convert_into_recurring_invoice, 0)=1
and docstatus=1 and next_date=%s
and next_date <= ifnull(end_date, '2199-12-31')""", next_date)
exception_list = []
for ref_invoice, recurring_id in recurring_invoices:
if not webnotes.conn.sql("""select name from `tabSales Invoice`
where posting_date=%s and recurring_id=%s and docstatus=1""",
(next_date, recurring_id)):
try:
ref_wrapper = webnotes.bean('Sales Invoice', ref_invoice)
new_invoice_wrapper = make_new_invoice(ref_wrapper, next_date)
send_notification(new_invoice_wrapper)
if commit:
webnotes.conn.commit()
except:
if commit:
webnotes.conn.rollback()
webnotes.conn.begin()
webnotes.conn.sql("update `tabSales Invoice` set \
convert_into_recurring_invoice = 0 where name = %s", ref_invoice)
notify_errors(ref_invoice, ref_wrapper.doc.owner)
webnotes.conn.commit()
exception_list.append(webnotes.getTraceback())
finally:
if commit:
webnotes.conn.begin()
if exception_list:
exception_message = "\n\n".join([cstr(d) for d in exception_list])
raise Exception, exception_message
def make_new_invoice(ref_wrapper, posting_date):
from webnotes.model.bean import clone
from accounts.utils import get_fiscal_year
new_invoice = clone(ref_wrapper)
mcount = month_map[ref_wrapper.doc.recurring_type]
invoice_period_from_date = get_next_date(ref_wrapper.doc.invoice_period_from_date, mcount)
# get last day of the month to maintain period if the from date is first day of its own month
# and to date is the last day of its own month
if (cstr(get_first_day(ref_wrapper.doc.invoice_period_from_date)) == \
cstr(ref_wrapper.doc.invoice_period_from_date)) and \
(cstr(get_last_day(ref_wrapper.doc.invoice_period_to_date)) == \
cstr(ref_wrapper.doc.invoice_period_to_date)):
invoice_period_to_date = get_last_day(get_next_date(ref_wrapper.doc.invoice_period_to_date,
mcount))
else:
invoice_period_to_date = get_next_date(ref_wrapper.doc.invoice_period_to_date, mcount)
new_invoice.doc.fields.update({
"posting_date": posting_date,
"aging_date": posting_date,
"due_date": add_days(posting_date, cint(date_diff(ref_wrapper.doc.due_date,
ref_wrapper.doc.posting_date))),
"invoice_period_from_date": invoice_period_from_date,
"invoice_period_to_date": invoice_period_to_date,
"fiscal_year": get_fiscal_year(posting_date)[0],
"owner": ref_wrapper.doc.owner,
})
new_invoice.submit()
return new_invoice
def send_notification(new_rv):
"""Notify concerned persons about recurring invoice generation"""
subject = "Invoice : " + new_rv.doc.name
com = new_rv.doc.company
hd = '''<div><h2>%s</h2></div>
<div><h3>Invoice: %s</h3></div>
<table cellspacing= "5" cellpadding="5" width = "100%%">
<tr>
<td width = "50%%"><b>Customer</b><br>%s<br>%s</td>
<td width = "50%%">Invoice Date : %s<br>Invoice Period : %s to %s <br>Due Date : %s</td>
</tr>
</table>
''' % (com, new_rv.doc.name, new_rv.doc.customer_name, new_rv.doc.address_display, getdate(new_rv.doc.posting_date).strftime("%d-%m-%Y"), \
getdate(new_rv.doc.invoice_period_from_date).strftime("%d-%m-%Y"), getdate(new_rv.doc.invoice_period_to_date).strftime("%d-%m-%Y"),\
getdate(new_rv.doc.due_date).strftime("%d-%m-%Y"))
tbl = '''<table border="1px solid #CCC" width="100%%" cellpadding="0px" cellspacing="0px">
<tr>
<td width = "15%%" bgcolor="#CCC" align="left"><b>Item</b></td>
<td width = "40%%" bgcolor="#CCC" align="left"><b>Description</b></td>
<td width = "15%%" bgcolor="#CCC" align="center"><b>Qty</b></td>
<td width = "15%%" bgcolor="#CCC" align="center"><b>Rate</b></td>
<td width = "15%%" bgcolor="#CCC" align="center"><b>Amount</b></td>
</tr>
'''
for d in getlist(new_rv.doclist, 'entries'):
tbl += '<tr><td>' + cstr(d.item_code) +'</td><td>' + cstr(d.description) + \
'</td><td>' + cstr(d.qty) +'</td><td>' + cstr(d.basic_rate) + \
'</td><td>' + cstr(d.amount) +'</td></tr>'
tbl += '</table>'
totals ='''<table cellspacing= "5" cellpadding="5" width = "100%%">
<tr>
<td width = "50%%"></td>
<td width = "50%%">
<table width = "100%%">
<tr>
<td width = "50%%">Net Total: </td><td>%s </td>
</tr><tr>
<td width = "50%%">Total Tax: </td><td>%s </td>
</tr><tr>
<td width = "50%%">Grand Total: </td><td>%s</td>
</tr><tr>
<td width = "50%%">In Words: </td><td>%s</td>
</tr>
</table>
</td>
</tr>
<tr><td>Terms and Conditions:</td></tr>
<tr><td>%s</td></tr>
</table>
''' % (new_rv.doc.net_total,
new_rv.doc.other_charges_total,new_rv.doc.grand_total,
new_rv.doc.in_words,new_rv.doc.terms)
msg = hd + tbl + totals
sendmail(new_rv.doc.notification_email_address, subject=subject, msg = msg)
def notify_errors(inv, owner):
import webnotes
exception_msg = """
Dear User,
An error occured while creating recurring invoice from %s (at %s).
May be there are some invalid email ids mentioned in the invoice.
To stop sending repetitive error notifications from the system, we have unchecked
"Convert into Recurring" field in the invoice %s.
Please correct the invoice and make the invoice recurring again.
<b>It is necessary to take this action today itself for the above mentioned recurring invoice \
to be generated. If delayed, you will have to manually change the "Repeat on Day of Month" field \
of this invoice for generating the recurring invoice.</b>
Regards,
Administrator
""" % (inv, get_url(), inv)
subj = "[Urgent] Error while creating recurring invoice from %s" % inv
from webnotes.profile import get_system_managers
recipients = get_system_managers()
owner_email = webnotes.conn.get_value("Profile", owner, "email")
if not owner_email in recipients:
recipients.append(owner_email)
assign_task_to_owner(inv, exception_msg, recipients)
sendmail(recipients, subject=subj, msg = exception_msg)
def assign_task_to_owner(inv, msg, users):
for d in users:
from webnotes.widgets.form import assign_to
args = {
'assign_to' : d,
'doctype' : 'Sales Invoice',
'name' : inv,
'description' : msg,
'priority' : 'Urgent'
}
assign_to.add(args)
@webnotes.whitelist()
def get_bank_cash_account(mode_of_payment):
val = webnotes.conn.get_value("Mode of Payment", mode_of_payment, "default_account")
if not val:
webnotes.msgprint("Default Bank / Cash Account not set in Mode of Payment: %s. Please add a Default Account in Mode of Payment master." % mode_of_payment)
return {
"cash_bank_account": val
}
@webnotes.whitelist()
def get_income_account(doctype, txt, searchfield, start, page_len, filters):
from controllers.queries import get_match_cond
# income account can be any Credit account,
# but can also be a Asset account with account_type='Income Account' in special circumstances.
# Hence the first condition is an "OR"
return webnotes.conn.sql("""select tabAccount.name from `tabAccount`
where (tabAccount.debit_or_credit="Credit"
or tabAccount.account_type = "Income Account")
and tabAccount.group_or_ledger="Ledger"
and tabAccount.docstatus!=2
and ifnull(tabAccount.master_type, "")=""
and ifnull(tabAccount.master_name, "")=""
and tabAccount.company = '%(company)s'
and tabAccount.%(key)s LIKE '%(txt)s'
%(mcond)s""" % {'company': filters['company'], 'key': searchfield,
'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield)})
@webnotes.whitelist()
def make_delivery_note(source_name, target_doclist=None):
from webnotes.model.mapper import get_mapped_doclist
def set_missing_values(source, target):
bean = webnotes.bean(target)
bean.run_method("onload_post_render")
def update_item(source_doc, target_doc, source_parent):
target_doc.amount = (flt(source_doc.qty) - flt(source_doc.delivered_qty)) * \
flt(source_doc.basic_rate)
target_doc.export_amount = (flt(source_doc.qty) - flt(source_doc.delivered_qty)) * \
flt(source_doc.export_rate)
target_doc.qty = flt(source_doc.qty) - flt(source_doc.delivered_qty)
doclist = get_mapped_doclist("Sales Invoice", source_name, {
"Sales Invoice": {
"doctype": "Delivery Note",
"validation": {
"docstatus": ["=", 1]
}
},
"Sales Invoice Item": {
"doctype": "Delivery Note Item",
"field_map": {
"name": "prevdoc_detail_docname",
"parent": "against_sales_invoice",
"serial_no": "serial_no"
},
"postprocess": update_item
},
"Sales Taxes and Charges": {
"doctype": "Sales Taxes and Charges",
"add_if_empty": True
},
"Sales Team": {
"doctype": "Sales Team",
"field_map": {
"incentives": "incentives"
},
"add_if_empty": True
}
}, target_doclist, set_missing_values)
return [d.fields for d in doclist]

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
// render
wn.listview_settings['Sales Invoice'] = {
add_fields: ["`tabSales Invoice`.grand_total", "`tabSales Invoice`.outstanding_amount"],
add_columns: [{"content":"Percent Paid", width:"10%", type:"bar-graph",
label: "Payment Received"}],
prepare_data: function(data) {
data["Percent Paid"] = flt(data.grand_total) ? (((flt(data.grand_total) -
flt(data.outstanding_amount)) / flt(data.grand_total)) * 100) : 0;
}
};

View File

@@ -1,19 +0,0 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
wn.model.map_info["Sales Invoice"] = {
"Time Log Batch": {
table_map: {
"Sales Invoice Item": "Time Log Batch",
},
field_map: {
"Sales Invoice Item": {
"basic_rate": "rate",
"time_log_batch": "name",
"qty": "total_hours",
"stock_uom": "=Hour",
"description": "=via Time Logs"
}
},
}
}

View File

@@ -1,5 +0,0 @@
{% extends "app/portal/templates/sale.html" %}
{% block status -%}
{% if doc.status %}{{ doc.status }}{% endif %}
{%- endblock %}

View File

@@ -1,30 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
from webnotes import _
from webnotes.utils import flt, fmt_money
no_cache = True
def get_context():
from portal.utils import get_transaction_context
context = get_transaction_context("Sales Invoice", webnotes.form_dict.name)
modify_status(context.get("doc"))
context.update({
"parent_link": "invoices",
"parent_title": "Invoices"
})
return context
def modify_status(doc):
doc.status = ""
if flt(doc.outstanding_amount):
doc.status = '<span class="label %s"><i class="icon-fixed-width %s"></i> %s</span>' % \
("label-warning", "icon-exclamation-sign",
_("To Pay") + " = " + fmt_money(doc.outstanding_amount, currency=doc.currency))
else:
doc.status = '<span class="label %s"><i class="icon-fixed-width %s"></i> %s</span>' % \
("label-success", "icon-ok", _("Paid"))

View File

@@ -1 +0,0 @@
{% extends "app/portal/templates/sales_transactions.html" %}

View File

@@ -1,28 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
no_cache = True
def get_context():
from portal.utils import get_currency_context
context = get_currency_context()
context.update({
"title": "Invoices",
"method": "accounts.doctype.sales_invoice.templates.pages.invoices.get_invoices",
"icon": "icon-file-text",
"empty_list_message": "No Invoices Found",
"page": "invoice"
})
return context
@webnotes.whitelist()
def get_invoices(start=0):
from portal.utils import get_transaction_list
from accounts.doctype.sales_invoice.templates.pages.invoice import modify_status
invoices = get_transaction_list("Sales Invoice", start, ["outstanding_amount"])
for d in invoices:
modify_status(d)
return invoices

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,92 +0,0 @@
[
{
"creation": "2013-02-22 01:27:41",
"docstatus": 0,
"modified": "2013-07-10 14:54:19",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"no_copy": 1,
"parent": "Sales Invoice Advance",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Sales Invoice Advance"
},
{
"doctype": "DocField",
"fieldname": "journal_voucher",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Journal Voucher",
"oldfieldname": "journal_voucher",
"oldfieldtype": "Link",
"options": "Journal Voucher",
"print_width": "250px",
"read_only": 1,
"width": "250px"
},
{
"doctype": "DocField",
"fieldname": "jv_detail_no",
"fieldtype": "Data",
"hidden": 1,
"in_list_view": 0,
"label": "Journal Voucher Detail No",
"oldfieldname": "jv_detail_no",
"oldfieldtype": "Data",
"print_hide": 1,
"print_width": "120px",
"read_only": 1,
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "advance_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Advance amount",
"oldfieldname": "advance_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_width": "120px",
"read_only": 1,
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "allocated_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Allocated amount",
"oldfieldname": "allocated_amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_width": "120px",
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "remarks",
"fieldtype": "Small Text",
"in_list_view": 1,
"label": "Remarks",
"oldfieldname": "remarks",
"oldfieldtype": "Small Text",
"print_width": "150px",
"read_only": 1,
"width": "150px"
}
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

View File

@@ -1,431 +0,0 @@
[
{
"creation": "2013-06-04 11:02:19",
"docstatus": 0,
"modified": "2013-11-02 19:41:24",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "INVD.######",
"doctype": "DocType",
"istable": 1,
"module": "Accounts",
"name": "__common__"
},
{
"doctype": "DocField",
"name": "__common__",
"parent": "Sales Invoice Item",
"parentfield": "fields",
"parenttype": "DocType",
"permlevel": 0
},
{
"doctype": "DocType",
"name": "Sales Invoice Item"
},
{
"doctype": "DocField",
"fieldname": "barcode",
"fieldtype": "Data",
"in_list_view": 0,
"label": "Barcode",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "item_code",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"label": "Item",
"oldfieldname": "item_code",
"oldfieldtype": "Link",
"options": "Item",
"print_hide": 0,
"read_only": 0,
"reqd": 0,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "customer_item_code",
"fieldtype": "Data",
"hidden": 1,
"in_list_view": 0,
"label": "Customer's Item Code",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "item_name",
"fieldtype": "Data",
"in_filter": 0,
"in_list_view": 0,
"label": "Item Name",
"oldfieldname": "item_name",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 0,
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "description",
"fieldtype": "Text",
"in_list_view": 1,
"label": "Description",
"oldfieldname": "description",
"oldfieldtype": "Text",
"print_width": "200px",
"read_only": 0,
"reqd": 1,
"width": "200px"
},
{
"doctype": "DocField",
"fieldname": "quantity_and_rate",
"fieldtype": "Section Break",
"in_list_view": 0,
"label": "Quantity and Rate"
},
{
"doctype": "DocField",
"fieldname": "qty",
"fieldtype": "Float",
"in_list_view": 1,
"label": "Quantity",
"oldfieldname": "qty",
"oldfieldtype": "Currency",
"read_only": 0,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "stock_uom",
"fieldtype": "Link",
"in_list_view": 0,
"label": "UOM",
"options": "UOM",
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "ref_rate",
"fieldtype": "Currency",
"in_list_view": 0,
"label": "Price List Rate",
"oldfieldname": "ref_rate",
"oldfieldtype": "Currency",
"options": "currency",
"print_hide": 1,
"read_only": 1,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "adj_rate",
"fieldtype": "Float",
"in_list_view": 0,
"label": "Discount (%)",
"oldfieldname": "adj_rate",
"oldfieldtype": "Float",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "export_rate",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Basic Rate",
"oldfieldname": "export_rate",
"oldfieldtype": "Currency",
"options": "currency",
"read_only": 0,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "export_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"label": "Amount",
"oldfieldname": "export_amount",
"oldfieldtype": "Currency",
"options": "currency",
"read_only": 1,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "base_ref_rate",
"fieldtype": "Currency",
"in_list_view": 0,
"label": "Price List Rate (Company Currency)",
"oldfieldname": "base_ref_rate",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "basic_rate",
"fieldtype": "Currency",
"in_filter": 0,
"in_list_view": 0,
"label": "Basic Rate (Company Currency)",
"oldfieldname": "basic_rate",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1,
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "amount",
"fieldtype": "Currency",
"in_list_view": 0,
"label": "Amount (Company Currency)",
"oldfieldname": "amount",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"print_hide": 1,
"read_only": 1,
"reqd": 1
},
{
"doctype": "DocField",
"fieldname": "accounting",
"fieldtype": "Section Break",
"in_list_view": 0,
"label": "Accounting"
},
{
"doctype": "DocField",
"fieldname": "income_account",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 0,
"label": "Income Account",
"oldfieldname": "income_account",
"oldfieldtype": "Link",
"options": "Account",
"print_hide": 1,
"print_width": "120px",
"read_only": 0,
"reqd": 1,
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "expense_account",
"fieldtype": "Link",
"hidden": 0,
"in_filter": 1,
"in_list_view": 0,
"label": "Expense Account",
"options": "Account",
"print_hide": 1,
"read_only": 0,
"width": "120px"
},
{
"default": ":Company",
"doctype": "DocField",
"fieldname": "cost_center",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 0,
"label": "Cost Center",
"oldfieldname": "cost_center",
"oldfieldtype": "Link",
"options": "Cost Center",
"print_hide": 1,
"print_width": "120px",
"read_only": 0,
"reqd": 0,
"width": "120px"
},
{
"doctype": "DocField",
"fieldname": "warehouse_and_reference",
"fieldtype": "Section Break",
"in_list_view": 0,
"label": "Warehouse and Reference"
},
{
"doctype": "DocField",
"fieldname": "warehouse",
"fieldtype": "Link",
"hidden": 0,
"in_list_view": 0,
"label": "Warehouse",
"oldfieldname": "warehouse",
"oldfieldtype": "Link",
"options": "Warehouse",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "serial_no",
"fieldtype": "Small Text",
"in_filter": 1,
"in_list_view": 1,
"label": "Serial No",
"oldfieldname": "serial_no",
"oldfieldtype": "Small Text",
"print_hide": 0,
"read_only": 0,
"reqd": 0
},
{
"doctype": "DocField",
"fieldname": "batch_no",
"fieldtype": "Link",
"label": "Batch No",
"options": "Batch",
"print_hide": 1,
"read_only": 0
},
{
"description": "<a href=\"#Sales Browser/Item Group\">Add / Edit</a>",
"doctype": "DocField",
"fieldname": "item_group",
"fieldtype": "Link",
"hidden": 1,
"in_filter": 1,
"label": "Item Group",
"oldfieldname": "item_group",
"oldfieldtype": "Link",
"options": "Item Group",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "brand",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"label": "Brand Name",
"oldfieldname": "brand",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "actual_qty",
"fieldtype": "Float",
"label": "Available Qty at Warehouse",
"oldfieldname": "actual_qty",
"oldfieldtype": "Currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "delivered_qty",
"fieldtype": "Float",
"label": "Delivered Qty",
"oldfieldname": "delivered_qty",
"oldfieldtype": "Currency",
"print_hide": 1,
"read_only": 1
},
{
"doctype": "DocField",
"fieldname": "sales_order",
"fieldtype": "Link",
"in_filter": 1,
"label": "Sales Order",
"no_copy": 1,
"oldfieldname": "sales_order",
"oldfieldtype": "Link",
"options": "Sales Order",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "so_detail",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"label": "Sales Order Item",
"no_copy": 1,
"oldfieldname": "so_detail",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "delivery_note",
"fieldtype": "Link",
"in_filter": 1,
"label": "Delivery Note",
"no_copy": 1,
"oldfieldname": "delivery_note",
"oldfieldtype": "Link",
"options": "Delivery Note",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "dn_detail",
"fieldtype": "Data",
"hidden": 1,
"in_filter": 1,
"label": "Delivery Note Item",
"no_copy": 1,
"oldfieldname": "dn_detail",
"oldfieldtype": "Data",
"print_hide": 1,
"read_only": 1,
"search_index": 1
},
{
"doctype": "DocField",
"fieldname": "time_log_batch",
"fieldtype": "Link",
"label": "Time Log Batch",
"options": "Time Log Batch",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "item_tax_rate",
"fieldtype": "Small Text",
"hidden": 1,
"label": "Item Tax Rate",
"oldfieldname": "item_tax_rate",
"oldfieldtype": "Small Text",
"print_hide": 1,
"read_only": 1
},
{
"allow_on_submit": 1,
"doctype": "DocField",
"fieldname": "page_break",
"fieldtype": "Check",
"label": "Page Break",
"no_copy": 1,
"print_hide": 1,
"read_only": 0,
"report_hide": 1
}
]

View File

@@ -1,9 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl

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