From 24f49e674232be7454f39cc71bc7bb15161ee94b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 30 Aug 2011 19:30:28 +0530 Subject: [PATCH 01/17] scheduler fix --- cgi-bin/webnotes/utils/scheduler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cgi-bin/webnotes/utils/scheduler.py b/cgi-bin/webnotes/utils/scheduler.py index 96db7bb5d8..7caa1fd6ee 100644 --- a/cgi-bin/webnotes/utils/scheduler.py +++ b/cgi-bin/webnotes/utils/scheduler.py @@ -89,7 +89,7 @@ class Scheduler: import webnotes, webnotes.defs, webnotes.db try: - webnotes.conn = webnotes.db.Database(user=db_name, password=webnotes.defs.db_password) + webnotes.conn = webnotes.db.Database(user=db_name, password=webnotes.get_db_password(db_name)) webnotes.session = {'user':'Administrator'} module = '.'.join(event.split('.')[:-1]) From d551d7db241265d2e8af033e5675b52eefe552a9 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 7 Sep 2011 14:49:13 +0530 Subject: [PATCH 02/17] added default_print_format and reduced default grid cell to 100px --- js/form.compressed.js | 5 +++-- js/widgets/form/form.js | 5 +++++ js/widgets/form/grid.js | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/js/form.compressed.js b/js/form.compressed.js index a29f580874..e1b4f9cf28 100644 --- a/js/form.compressed.js +++ b/js/form.compressed.js @@ -62,7 +62,8 @@ this.setup_footer();if(!(this.meta.istable||user=='Guest'))this.frm_head=new _f. this.layout.wrapper.style.backgroundColor='#'+this.meta.colour.split(':')[1];this.setup_fields_std();} _f.Frm.prototype.setup_print=function(){var fl=getchildren('DocFormat',this.meta.name,'formats','DocType');var l=[];this.default_format='Standard';if(fl.length){this.default_format=fl[0].format;for(var i=0;i'+label+'';col.label=label;if(reqd) col.childNodes[0].style.color="#D22";col.style.width=width;col.options=options;col.perm=perm;this.col_idx_by_name[fieldname]=idx;} _f.Grid.prototype.reset_table_width=function(){var w=0;for(var i=0,len=this.head_row.cells.length;i Date: Wed, 7 Sep 2011 15:14:10 +0530 Subject: [PATCH 03/17] default_print_format added in doctype --- cgi-bin/core/doctype/doctype/doctype.txt | 178 +++++++++++++++-------- 1 file changed, 116 insertions(+), 62 deletions(-) diff --git a/cgi-bin/core/doctype/doctype/doctype.txt b/cgi-bin/core/doctype/doctype/doctype.txt index 452dc26203..a64cf9cdb9 100644 --- a/cgi-bin/core/doctype/doctype/doctype.txt +++ b/cgi-bin/core/doctype/doctype/doctype.txt @@ -5,14 +5,14 @@ { 'creation': '2009-05-12 11:19:11', 'docstatus': 0, - 'modified': '2011-05-16 10:19:14', + 'modified': '2011-09-07 14:51:07', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1307624201', + '_last_update': '1311674341', 'allow_copy': 0, 'allow_email': 0, 'allow_print': 0, @@ -21,7 +21,6 @@ 'doctype': 'DocType', 'hide_heading': 0, 'hide_toolbar': 0, - 'idx': 0, 'issingle': 0, 'istable': 0, 'module': 'Core', @@ -32,7 +31,7 @@ 'section_style': 'Simple', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 8 + 'version': 10 }, # These values are common for all DocField @@ -52,7 +51,8 @@ 'parent': 'DocType', 'parentfield': 'permissions', 'parenttype': 'DocType', - 'read': 1 + 'read': 1, + 'role': 'Administrator' }, # DocType, DocType @@ -61,22 +61,13 @@ 'name': 'DocType' }, - # DocPerm - { - 'doctype': 'DocPerm', - 'permlevel': 0, - 'role': 'System Manager' - }, - # DocPerm { 'cancel': 0, 'create': 1, 'doctype': 'DocPerm', 'execute': 0, - 'idx': 1, 'permlevel': 0, - 'role': 'Administrator', 'submit': 0, 'write': 1 }, @@ -84,9 +75,7 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 2, - 'permlevel': 1, - 'role': 'Administrator' + 'permlevel': 1 }, # DocField @@ -94,7 +83,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 1, 'label': 'Options', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -105,7 +93,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 2, 'label': 'Settings', 'oldfieldtype': 'Column Break', 'width': '50%' @@ -116,7 +103,6 @@ 'doctype': 'DocField', 'fieldname': 'module', 'fieldtype': 'Link', - 'idx': 3, 'label': 'Module', 'oldfieldname': 'module', 'oldfieldtype': 'Link', @@ -129,7 +115,6 @@ 'doctype': 'DocField', 'fieldname': 'version', 'fieldtype': 'Int', - 'idx': 4, 'label': 'Version', 'oldfieldname': 'version', 'oldfieldtype': 'Int' @@ -141,7 +126,6 @@ 'fieldname': 'name', 'fieldtype': 'Data', 'hidden': 1, - 'idx': 5, 'label': 'Name', 'oldfieldname': 'name', 'oldfieldtype': 'Data', @@ -155,7 +139,6 @@ 'fieldname': 'autoname', 'fieldtype': 'Data', 'hidden': 0, - 'idx': 6, 'label': 'Auto Name', 'oldfieldname': 'autoname', 'oldfieldtype': 'Data', @@ -169,7 +152,6 @@ 'fieldname': 'owner', 'fieldtype': 'Link', 'hidden': 1, - 'idx': 7, 'label': 'Owner', 'oldfieldname': 'owner', 'oldfieldtype': 'Link', @@ -182,7 +164,6 @@ 'doctype': 'DocField', 'fieldname': 'name_case', 'fieldtype': 'Select', - 'idx': 8, 'label': 'Name Case', 'oldfieldname': 'name_case', 'oldfieldtype': 'Select', @@ -195,7 +176,6 @@ 'fieldname': 'search_fields', 'fieldtype': 'Data', 'hidden': 0, - 'idx': 9, 'label': 'Search Fields', 'oldfieldname': 'search_fields', 'oldfieldtype': 'Data', @@ -210,7 +190,6 @@ 'doctype': 'DocField', 'fieldname': 'subject', 'fieldtype': 'Data', - 'idx': 10, 'label': 'Subject' }, @@ -221,7 +200,6 @@ 'doctype': 'DocField', 'fieldname': 'tag_fields', 'fieldtype': 'Data', - 'idx': 11, 'label': 'tag_fields' }, @@ -231,7 +209,6 @@ 'fieldname': 'istable', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 12, 'label': 'Is Table', 'oldfieldname': 'istable', 'oldfieldtype': 'Check', @@ -245,7 +222,6 @@ 'fieldname': 'read_only', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 13, 'label': 'Not In Search', 'oldfieldname': 'read_only', 'oldfieldtype': 'Check', @@ -258,7 +234,6 @@ 'doctype': 'DocField', 'fieldname': 'in_create', 'fieldtype': 'Check', - 'idx': 14, 'label': 'Not In Create', 'oldfieldname': 'in_create', 'oldfieldtype': 'Check' @@ -270,7 +245,6 @@ 'fieldname': 'issingle', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 15, 'label': 'Is Single', 'oldfieldname': 'issingle', 'oldfieldtype': 'Check', @@ -284,7 +258,6 @@ 'doctype': 'DocField', 'fieldname': 'read_only_onload', 'fieldtype': 'Check', - 'idx': 16, 'label': 'Show Print First', 'oldfieldname': 'read_only_onload', 'oldfieldtype': 'Check' @@ -295,7 +268,6 @@ 'doctype': 'DocField', 'fieldname': 'show_in_menu', 'fieldtype': 'Check', - 'idx': 17, 'label': 'Show In Pages', 'oldfieldname': 'show_in_menu', 'oldfieldtype': 'Check' @@ -306,7 +278,6 @@ 'doctype': 'DocField', 'fieldname': 'document_type', 'fieldtype': 'Select', - 'idx': 18, 'label': 'Document Type', 'oldfieldname': 'document_type', 'oldfieldtype': 'Select', @@ -318,7 +289,6 @@ 'doctype': 'DocField', 'fieldtype': 'Column Break', 'hidden': 0, - 'idx': 19, 'label': 'Display', 'oldfieldtype': 'Column Break', 'reqd': 0, @@ -331,7 +301,6 @@ 'doctype': 'DocField', 'fieldname': 'is_transaction_doc', 'fieldtype': 'Check', - 'idx': 20, 'label': 'Is Transaction Doc', 'oldfieldname': 'is_transaction_doc', 'oldfieldtype': 'Check' @@ -342,7 +311,6 @@ 'doctype': 'DocField', 'fieldname': 'use_template', 'fieldtype': 'Check', - 'idx': 21, 'label': 'Use Template', 'oldfieldname': 'use_template', 'oldfieldtype': 'Check' @@ -354,7 +322,6 @@ 'fieldname': 'print_outline', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 22, 'label': 'Print Outline', 'oldfieldname': 'print_outline', 'oldfieldtype': 'Select', @@ -369,7 +336,6 @@ 'fieldname': 'allow_print', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 23, 'label': 'Hide Print', 'oldfieldname': 'allow_print', 'oldfieldtype': 'Check', @@ -383,7 +349,6 @@ 'fieldname': 'allow_email', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 24, 'label': 'Hide Email', 'oldfieldname': 'allow_email', 'oldfieldtype': 'Check', @@ -396,7 +361,6 @@ 'doctype': 'DocField', 'fieldname': 'in_dialog', 'fieldtype': 'Check', - 'idx': 25, 'label': 'In Dialog', 'oldfieldname': 'in_dialog', 'oldfieldtype': 'Check' @@ -408,7 +372,6 @@ 'fieldname': 'allow_copy', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 26, 'label': 'Hide Copy', 'oldfieldname': 'allow_copy', 'oldfieldtype': 'Check', @@ -422,7 +385,6 @@ 'fieldname': 'hide_toolbar', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 27, 'label': 'Hide Toolbar', 'oldfieldname': 'hide_toolbar', 'oldfieldtype': 'Check', @@ -436,7 +398,6 @@ 'fieldname': 'hide_heading', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 28, 'label': 'Hide Heading', 'oldfieldname': 'hide_heading', 'oldfieldtype': 'Check', @@ -449,7 +410,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_attach', 'fieldtype': 'Check', - 'idx': 29, 'label': 'Allow Attach', 'oldfieldname': 'allow_attach', 'oldfieldtype': 'Check', @@ -462,7 +422,6 @@ 'fieldname': 'max_attachments', 'fieldtype': 'Int', 'hidden': 1, - 'idx': 30, 'label': 'Max Attachments', 'oldfieldname': 'max_attachments', 'oldfieldtype': 'Int' @@ -473,7 +432,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_rename', 'fieldtype': 'Check', - 'idx': 31, 'label': 'Allow Rename', 'oldfieldname': 'allow_rename', 'oldfieldtype': 'Check' @@ -484,7 +442,6 @@ 'doctype': 'DocField', 'fieldname': 'section_style', 'fieldtype': 'Select', - 'idx': 32, 'label': 'Section Style', 'oldfieldname': 'section_style', 'oldfieldtype': 'Select', @@ -497,7 +454,6 @@ 'fieldname': 'colour', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 33, 'label': 'Colour', 'oldfieldname': 'colour', 'oldfieldtype': 'Select', @@ -512,7 +468,6 @@ 'fieldname': 'smallicon', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 34, 'label': 'Small Icon', 'oldfieldname': 'smallicon', 'oldfieldtype': 'Select', @@ -521,11 +476,18 @@ 'search_index': 0 }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'default_print_format', + 'fieldtype': 'Data', + 'label': 'Default Print Format' + }, + # DocField { 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 35, 'label': 'Permissions', 'oldfieldtype': 'Section Break' }, @@ -534,7 +496,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 36, 'label': 'Roles and Permissions', 'oldfieldtype': 'Column Break', 'width': '70%' @@ -547,7 +508,6 @@ 'fieldname': 'permissions', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 37, 'label': 'Permissions', 'oldfieldname': 'permissions', 'oldfieldtype': 'Table', @@ -561,7 +521,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_trash', 'fieldtype': 'Check', - 'idx': 38, 'label': 'Allow Trash', 'oldfieldname': 'allow_trash', 'oldfieldtype': 'Check' @@ -571,7 +530,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 39, 'label': 'Print Formats', 'oldfieldtype': 'Column Break', 'width': '30%' @@ -583,7 +541,6 @@ 'fieldname': 'formats', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 40, 'label': 'Formats', 'oldfieldname': 'formats', 'oldfieldtype': 'Table', @@ -597,7 +554,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 41, 'label': 'Fields', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -609,7 +565,6 @@ 'doctype': 'DocField', 'fieldtype': 'Column Break', 'hidden': 0, - 'idx': 42, 'label': 'Document Fields', 'oldfieldtype': 'Column Break', 'reqd': 0, @@ -622,7 +577,6 @@ 'fieldname': 'fields', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 43, 'label': 'Fields', 'oldfieldname': 'fields', 'oldfieldtype': 'Table', @@ -636,7 +590,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 44, 'label': 'Description', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -649,12 +602,113 @@ 'fieldname': 'description', 'fieldtype': 'Text', 'hidden': 0, - 'idx': 45, 'label': 'Description', 'oldfieldname': 'description', 'oldfieldtype': 'Text', 'reqd': 0, 'search_index': 0, 'width': '300px' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'change_log', + 'fieldtype': 'Text', + 'label': 'Change Log', + 'oldfieldname': 'change_log', + 'oldfieldtype': 'Text' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldtype': 'Section Break', + 'label': 'Template', + 'oldfieldtype': 'Section Break' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'dt_template', + 'fieldtype': 'Code', + 'label': 'DocType Template', + 'oldfieldname': 'dt_template', + 'oldfieldtype': 'Code' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'client_script_core', + 'fieldtype': 'Code', + 'label': 'Client Script Core', + 'oldfieldname': 'client_script_core', + 'oldfieldtype': 'Code' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'client_script', + 'fieldtype': 'Code', + 'hidden': 0, + 'label': 'Client Side Javascript', + 'oldfieldname': 'client_script', + 'oldfieldtype': 'Code', + 'reqd': 0, + 'search_index': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'server_code_core', + 'fieldtype': 'Code', + 'label': 'Server Code Core', + 'oldfieldname': 'server_code_core', + 'oldfieldtype': 'Code' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'server_code', + 'fieldtype': 'Code', + 'label': 'Server Code', + 'oldfieldname': 'server_code', + 'oldfieldtype': 'Code' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'server_code_compiled', + 'fieldtype': 'Code', + 'hidden': 1, + 'label': 'Server Code Compiled', + 'oldfieldname': 'server_code_compiled', + 'oldfieldtype': 'Code' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'server_code_error', + 'fieldtype': 'Read Only', + 'label': 'Server Code Error', + 'oldfieldname': 'server_code_error', + 'oldfieldtype': 'Read Only' + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'client_string', + 'fieldtype': 'Code', + 'label': 'Clientside String', + 'oldfieldname': 'client_string', + 'oldfieldtype': 'Code' } ] \ No newline at end of file From af286b05738065a1cf68b82913b808af627a59e8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 7 Sep 2011 15:29:00 +0530 Subject: [PATCH 04/17] code fields deleted --- cgi-bin/core/doctype/doctype/doctype.txt | 106 +---------------------- 1 file changed, 2 insertions(+), 104 deletions(-) diff --git a/cgi-bin/core/doctype/doctype/doctype.txt b/cgi-bin/core/doctype/doctype/doctype.txt index a64cf9cdb9..f368fcd9fb 100644 --- a/cgi-bin/core/doctype/doctype/doctype.txt +++ b/cgi-bin/core/doctype/doctype/doctype.txt @@ -5,7 +5,7 @@ { 'creation': '2009-05-12 11:19:11', 'docstatus': 0, - 'modified': '2011-09-07 14:51:07', + 'modified': '2011-09-07 15:28:18', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -31,7 +31,7 @@ 'section_style': 'Simple', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 10 + 'version': 11 }, # These values are common for all DocField @@ -608,107 +608,5 @@ 'reqd': 0, 'search_index': 0, 'width': '300px' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'change_log', - 'fieldtype': 'Text', - 'label': 'Change Log', - 'oldfieldname': 'change_log', - 'oldfieldtype': 'Text' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldtype': 'Section Break', - 'label': 'Template', - 'oldfieldtype': 'Section Break' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'dt_template', - 'fieldtype': 'Code', - 'label': 'DocType Template', - 'oldfieldname': 'dt_template', - 'oldfieldtype': 'Code' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'client_script_core', - 'fieldtype': 'Code', - 'label': 'Client Script Core', - 'oldfieldname': 'client_script_core', - 'oldfieldtype': 'Code' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'client_script', - 'fieldtype': 'Code', - 'hidden': 0, - 'label': 'Client Side Javascript', - 'oldfieldname': 'client_script', - 'oldfieldtype': 'Code', - 'reqd': 0, - 'search_index': 0 - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'server_code_core', - 'fieldtype': 'Code', - 'label': 'Server Code Core', - 'oldfieldname': 'server_code_core', - 'oldfieldtype': 'Code' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'server_code', - 'fieldtype': 'Code', - 'label': 'Server Code', - 'oldfieldname': 'server_code', - 'oldfieldtype': 'Code' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'server_code_compiled', - 'fieldtype': 'Code', - 'hidden': 1, - 'label': 'Server Code Compiled', - 'oldfieldname': 'server_code_compiled', - 'oldfieldtype': 'Code' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'server_code_error', - 'fieldtype': 'Read Only', - 'label': 'Server Code Error', - 'oldfieldname': 'server_code_error', - 'oldfieldtype': 'Read Only' - }, - - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'client_string', - 'fieldtype': 'Code', - 'label': 'Clientside String', - 'oldfieldname': 'client_string', - 'oldfieldtype': 'Code' } ] \ No newline at end of file From 98acabbb966ee93f2939ea84fa579d7c1f2c0fe1 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 7 Sep 2011 15:53:55 +0530 Subject: [PATCH 05/17] doctype with field --- cgi-bin/core/doctype/doctype/doctype.txt | 76 +++++------------------- 1 file changed, 14 insertions(+), 62 deletions(-) diff --git a/cgi-bin/core/doctype/doctype/doctype.txt b/cgi-bin/core/doctype/doctype/doctype.txt index 452dc26203..f368fcd9fb 100644 --- a/cgi-bin/core/doctype/doctype/doctype.txt +++ b/cgi-bin/core/doctype/doctype/doctype.txt @@ -5,14 +5,14 @@ { 'creation': '2009-05-12 11:19:11', 'docstatus': 0, - 'modified': '2011-05-16 10:19:14', + 'modified': '2011-09-07 15:28:18', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1307624201', + '_last_update': '1311674341', 'allow_copy': 0, 'allow_email': 0, 'allow_print': 0, @@ -21,7 +21,6 @@ 'doctype': 'DocType', 'hide_heading': 0, 'hide_toolbar': 0, - 'idx': 0, 'issingle': 0, 'istable': 0, 'module': 'Core', @@ -32,7 +31,7 @@ 'section_style': 'Simple', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 8 + 'version': 11 }, # These values are common for all DocField @@ -52,7 +51,8 @@ 'parent': 'DocType', 'parentfield': 'permissions', 'parenttype': 'DocType', - 'read': 1 + 'read': 1, + 'role': 'Administrator' }, # DocType, DocType @@ -61,22 +61,13 @@ 'name': 'DocType' }, - # DocPerm - { - 'doctype': 'DocPerm', - 'permlevel': 0, - 'role': 'System Manager' - }, - # DocPerm { 'cancel': 0, 'create': 1, 'doctype': 'DocPerm', 'execute': 0, - 'idx': 1, 'permlevel': 0, - 'role': 'Administrator', 'submit': 0, 'write': 1 }, @@ -84,9 +75,7 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 2, - 'permlevel': 1, - 'role': 'Administrator' + 'permlevel': 1 }, # DocField @@ -94,7 +83,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 1, 'label': 'Options', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -105,7 +93,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 2, 'label': 'Settings', 'oldfieldtype': 'Column Break', 'width': '50%' @@ -116,7 +103,6 @@ 'doctype': 'DocField', 'fieldname': 'module', 'fieldtype': 'Link', - 'idx': 3, 'label': 'Module', 'oldfieldname': 'module', 'oldfieldtype': 'Link', @@ -129,7 +115,6 @@ 'doctype': 'DocField', 'fieldname': 'version', 'fieldtype': 'Int', - 'idx': 4, 'label': 'Version', 'oldfieldname': 'version', 'oldfieldtype': 'Int' @@ -141,7 +126,6 @@ 'fieldname': 'name', 'fieldtype': 'Data', 'hidden': 1, - 'idx': 5, 'label': 'Name', 'oldfieldname': 'name', 'oldfieldtype': 'Data', @@ -155,7 +139,6 @@ 'fieldname': 'autoname', 'fieldtype': 'Data', 'hidden': 0, - 'idx': 6, 'label': 'Auto Name', 'oldfieldname': 'autoname', 'oldfieldtype': 'Data', @@ -169,7 +152,6 @@ 'fieldname': 'owner', 'fieldtype': 'Link', 'hidden': 1, - 'idx': 7, 'label': 'Owner', 'oldfieldname': 'owner', 'oldfieldtype': 'Link', @@ -182,7 +164,6 @@ 'doctype': 'DocField', 'fieldname': 'name_case', 'fieldtype': 'Select', - 'idx': 8, 'label': 'Name Case', 'oldfieldname': 'name_case', 'oldfieldtype': 'Select', @@ -195,7 +176,6 @@ 'fieldname': 'search_fields', 'fieldtype': 'Data', 'hidden': 0, - 'idx': 9, 'label': 'Search Fields', 'oldfieldname': 'search_fields', 'oldfieldtype': 'Data', @@ -210,7 +190,6 @@ 'doctype': 'DocField', 'fieldname': 'subject', 'fieldtype': 'Data', - 'idx': 10, 'label': 'Subject' }, @@ -221,7 +200,6 @@ 'doctype': 'DocField', 'fieldname': 'tag_fields', 'fieldtype': 'Data', - 'idx': 11, 'label': 'tag_fields' }, @@ -231,7 +209,6 @@ 'fieldname': 'istable', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 12, 'label': 'Is Table', 'oldfieldname': 'istable', 'oldfieldtype': 'Check', @@ -245,7 +222,6 @@ 'fieldname': 'read_only', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 13, 'label': 'Not In Search', 'oldfieldname': 'read_only', 'oldfieldtype': 'Check', @@ -258,7 +234,6 @@ 'doctype': 'DocField', 'fieldname': 'in_create', 'fieldtype': 'Check', - 'idx': 14, 'label': 'Not In Create', 'oldfieldname': 'in_create', 'oldfieldtype': 'Check' @@ -270,7 +245,6 @@ 'fieldname': 'issingle', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 15, 'label': 'Is Single', 'oldfieldname': 'issingle', 'oldfieldtype': 'Check', @@ -284,7 +258,6 @@ 'doctype': 'DocField', 'fieldname': 'read_only_onload', 'fieldtype': 'Check', - 'idx': 16, 'label': 'Show Print First', 'oldfieldname': 'read_only_onload', 'oldfieldtype': 'Check' @@ -295,7 +268,6 @@ 'doctype': 'DocField', 'fieldname': 'show_in_menu', 'fieldtype': 'Check', - 'idx': 17, 'label': 'Show In Pages', 'oldfieldname': 'show_in_menu', 'oldfieldtype': 'Check' @@ -306,7 +278,6 @@ 'doctype': 'DocField', 'fieldname': 'document_type', 'fieldtype': 'Select', - 'idx': 18, 'label': 'Document Type', 'oldfieldname': 'document_type', 'oldfieldtype': 'Select', @@ -318,7 +289,6 @@ 'doctype': 'DocField', 'fieldtype': 'Column Break', 'hidden': 0, - 'idx': 19, 'label': 'Display', 'oldfieldtype': 'Column Break', 'reqd': 0, @@ -331,7 +301,6 @@ 'doctype': 'DocField', 'fieldname': 'is_transaction_doc', 'fieldtype': 'Check', - 'idx': 20, 'label': 'Is Transaction Doc', 'oldfieldname': 'is_transaction_doc', 'oldfieldtype': 'Check' @@ -342,7 +311,6 @@ 'doctype': 'DocField', 'fieldname': 'use_template', 'fieldtype': 'Check', - 'idx': 21, 'label': 'Use Template', 'oldfieldname': 'use_template', 'oldfieldtype': 'Check' @@ -354,7 +322,6 @@ 'fieldname': 'print_outline', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 22, 'label': 'Print Outline', 'oldfieldname': 'print_outline', 'oldfieldtype': 'Select', @@ -369,7 +336,6 @@ 'fieldname': 'allow_print', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 23, 'label': 'Hide Print', 'oldfieldname': 'allow_print', 'oldfieldtype': 'Check', @@ -383,7 +349,6 @@ 'fieldname': 'allow_email', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 24, 'label': 'Hide Email', 'oldfieldname': 'allow_email', 'oldfieldtype': 'Check', @@ -396,7 +361,6 @@ 'doctype': 'DocField', 'fieldname': 'in_dialog', 'fieldtype': 'Check', - 'idx': 25, 'label': 'In Dialog', 'oldfieldname': 'in_dialog', 'oldfieldtype': 'Check' @@ -408,7 +372,6 @@ 'fieldname': 'allow_copy', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 26, 'label': 'Hide Copy', 'oldfieldname': 'allow_copy', 'oldfieldtype': 'Check', @@ -422,7 +385,6 @@ 'fieldname': 'hide_toolbar', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 27, 'label': 'Hide Toolbar', 'oldfieldname': 'hide_toolbar', 'oldfieldtype': 'Check', @@ -436,7 +398,6 @@ 'fieldname': 'hide_heading', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 28, 'label': 'Hide Heading', 'oldfieldname': 'hide_heading', 'oldfieldtype': 'Check', @@ -449,7 +410,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_attach', 'fieldtype': 'Check', - 'idx': 29, 'label': 'Allow Attach', 'oldfieldname': 'allow_attach', 'oldfieldtype': 'Check', @@ -462,7 +422,6 @@ 'fieldname': 'max_attachments', 'fieldtype': 'Int', 'hidden': 1, - 'idx': 30, 'label': 'Max Attachments', 'oldfieldname': 'max_attachments', 'oldfieldtype': 'Int' @@ -473,7 +432,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_rename', 'fieldtype': 'Check', - 'idx': 31, 'label': 'Allow Rename', 'oldfieldname': 'allow_rename', 'oldfieldtype': 'Check' @@ -484,7 +442,6 @@ 'doctype': 'DocField', 'fieldname': 'section_style', 'fieldtype': 'Select', - 'idx': 32, 'label': 'Section Style', 'oldfieldname': 'section_style', 'oldfieldtype': 'Select', @@ -497,7 +454,6 @@ 'fieldname': 'colour', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 33, 'label': 'Colour', 'oldfieldname': 'colour', 'oldfieldtype': 'Select', @@ -512,7 +468,6 @@ 'fieldname': 'smallicon', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 34, 'label': 'Small Icon', 'oldfieldname': 'smallicon', 'oldfieldtype': 'Select', @@ -521,11 +476,18 @@ 'search_index': 0 }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'default_print_format', + 'fieldtype': 'Data', + 'label': 'Default Print Format' + }, + # DocField { 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 35, 'label': 'Permissions', 'oldfieldtype': 'Section Break' }, @@ -534,7 +496,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 36, 'label': 'Roles and Permissions', 'oldfieldtype': 'Column Break', 'width': '70%' @@ -547,7 +508,6 @@ 'fieldname': 'permissions', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 37, 'label': 'Permissions', 'oldfieldname': 'permissions', 'oldfieldtype': 'Table', @@ -561,7 +521,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_trash', 'fieldtype': 'Check', - 'idx': 38, 'label': 'Allow Trash', 'oldfieldname': 'allow_trash', 'oldfieldtype': 'Check' @@ -571,7 +530,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 39, 'label': 'Print Formats', 'oldfieldtype': 'Column Break', 'width': '30%' @@ -583,7 +541,6 @@ 'fieldname': 'formats', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 40, 'label': 'Formats', 'oldfieldname': 'formats', 'oldfieldtype': 'Table', @@ -597,7 +554,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 41, 'label': 'Fields', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -609,7 +565,6 @@ 'doctype': 'DocField', 'fieldtype': 'Column Break', 'hidden': 0, - 'idx': 42, 'label': 'Document Fields', 'oldfieldtype': 'Column Break', 'reqd': 0, @@ -622,7 +577,6 @@ 'fieldname': 'fields', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 43, 'label': 'Fields', 'oldfieldname': 'fields', 'oldfieldtype': 'Table', @@ -636,7 +590,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 44, 'label': 'Description', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -649,7 +602,6 @@ 'fieldname': 'description', 'fieldtype': 'Text', 'hidden': 0, - 'idx': 45, 'label': 'Description', 'oldfieldname': 'description', 'oldfieldtype': 'Text', From 2903937bd871b01d4a6d20ea42e802ad13ae3784 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 7 Sep 2011 15:54:16 +0530 Subject: [PATCH 06/17] doctype with field --- cgi-bin/core/doctype/doctype/doctype.txt | 76 +++++------------------- 1 file changed, 14 insertions(+), 62 deletions(-) diff --git a/cgi-bin/core/doctype/doctype/doctype.txt b/cgi-bin/core/doctype/doctype/doctype.txt index 452dc26203..f368fcd9fb 100644 --- a/cgi-bin/core/doctype/doctype/doctype.txt +++ b/cgi-bin/core/doctype/doctype/doctype.txt @@ -5,14 +5,14 @@ { 'creation': '2009-05-12 11:19:11', 'docstatus': 0, - 'modified': '2011-05-16 10:19:14', + 'modified': '2011-09-07 15:28:18', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1307624201', + '_last_update': '1311674341', 'allow_copy': 0, 'allow_email': 0, 'allow_print': 0, @@ -21,7 +21,6 @@ 'doctype': 'DocType', 'hide_heading': 0, 'hide_toolbar': 0, - 'idx': 0, 'issingle': 0, 'istable': 0, 'module': 'Core', @@ -32,7 +31,7 @@ 'section_style': 'Simple', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 8 + 'version': 11 }, # These values are common for all DocField @@ -52,7 +51,8 @@ 'parent': 'DocType', 'parentfield': 'permissions', 'parenttype': 'DocType', - 'read': 1 + 'read': 1, + 'role': 'Administrator' }, # DocType, DocType @@ -61,22 +61,13 @@ 'name': 'DocType' }, - # DocPerm - { - 'doctype': 'DocPerm', - 'permlevel': 0, - 'role': 'System Manager' - }, - # DocPerm { 'cancel': 0, 'create': 1, 'doctype': 'DocPerm', 'execute': 0, - 'idx': 1, 'permlevel': 0, - 'role': 'Administrator', 'submit': 0, 'write': 1 }, @@ -84,9 +75,7 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 2, - 'permlevel': 1, - 'role': 'Administrator' + 'permlevel': 1 }, # DocField @@ -94,7 +83,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 1, 'label': 'Options', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -105,7 +93,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 2, 'label': 'Settings', 'oldfieldtype': 'Column Break', 'width': '50%' @@ -116,7 +103,6 @@ 'doctype': 'DocField', 'fieldname': 'module', 'fieldtype': 'Link', - 'idx': 3, 'label': 'Module', 'oldfieldname': 'module', 'oldfieldtype': 'Link', @@ -129,7 +115,6 @@ 'doctype': 'DocField', 'fieldname': 'version', 'fieldtype': 'Int', - 'idx': 4, 'label': 'Version', 'oldfieldname': 'version', 'oldfieldtype': 'Int' @@ -141,7 +126,6 @@ 'fieldname': 'name', 'fieldtype': 'Data', 'hidden': 1, - 'idx': 5, 'label': 'Name', 'oldfieldname': 'name', 'oldfieldtype': 'Data', @@ -155,7 +139,6 @@ 'fieldname': 'autoname', 'fieldtype': 'Data', 'hidden': 0, - 'idx': 6, 'label': 'Auto Name', 'oldfieldname': 'autoname', 'oldfieldtype': 'Data', @@ -169,7 +152,6 @@ 'fieldname': 'owner', 'fieldtype': 'Link', 'hidden': 1, - 'idx': 7, 'label': 'Owner', 'oldfieldname': 'owner', 'oldfieldtype': 'Link', @@ -182,7 +164,6 @@ 'doctype': 'DocField', 'fieldname': 'name_case', 'fieldtype': 'Select', - 'idx': 8, 'label': 'Name Case', 'oldfieldname': 'name_case', 'oldfieldtype': 'Select', @@ -195,7 +176,6 @@ 'fieldname': 'search_fields', 'fieldtype': 'Data', 'hidden': 0, - 'idx': 9, 'label': 'Search Fields', 'oldfieldname': 'search_fields', 'oldfieldtype': 'Data', @@ -210,7 +190,6 @@ 'doctype': 'DocField', 'fieldname': 'subject', 'fieldtype': 'Data', - 'idx': 10, 'label': 'Subject' }, @@ -221,7 +200,6 @@ 'doctype': 'DocField', 'fieldname': 'tag_fields', 'fieldtype': 'Data', - 'idx': 11, 'label': 'tag_fields' }, @@ -231,7 +209,6 @@ 'fieldname': 'istable', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 12, 'label': 'Is Table', 'oldfieldname': 'istable', 'oldfieldtype': 'Check', @@ -245,7 +222,6 @@ 'fieldname': 'read_only', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 13, 'label': 'Not In Search', 'oldfieldname': 'read_only', 'oldfieldtype': 'Check', @@ -258,7 +234,6 @@ 'doctype': 'DocField', 'fieldname': 'in_create', 'fieldtype': 'Check', - 'idx': 14, 'label': 'Not In Create', 'oldfieldname': 'in_create', 'oldfieldtype': 'Check' @@ -270,7 +245,6 @@ 'fieldname': 'issingle', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 15, 'label': 'Is Single', 'oldfieldname': 'issingle', 'oldfieldtype': 'Check', @@ -284,7 +258,6 @@ 'doctype': 'DocField', 'fieldname': 'read_only_onload', 'fieldtype': 'Check', - 'idx': 16, 'label': 'Show Print First', 'oldfieldname': 'read_only_onload', 'oldfieldtype': 'Check' @@ -295,7 +268,6 @@ 'doctype': 'DocField', 'fieldname': 'show_in_menu', 'fieldtype': 'Check', - 'idx': 17, 'label': 'Show In Pages', 'oldfieldname': 'show_in_menu', 'oldfieldtype': 'Check' @@ -306,7 +278,6 @@ 'doctype': 'DocField', 'fieldname': 'document_type', 'fieldtype': 'Select', - 'idx': 18, 'label': 'Document Type', 'oldfieldname': 'document_type', 'oldfieldtype': 'Select', @@ -318,7 +289,6 @@ 'doctype': 'DocField', 'fieldtype': 'Column Break', 'hidden': 0, - 'idx': 19, 'label': 'Display', 'oldfieldtype': 'Column Break', 'reqd': 0, @@ -331,7 +301,6 @@ 'doctype': 'DocField', 'fieldname': 'is_transaction_doc', 'fieldtype': 'Check', - 'idx': 20, 'label': 'Is Transaction Doc', 'oldfieldname': 'is_transaction_doc', 'oldfieldtype': 'Check' @@ -342,7 +311,6 @@ 'doctype': 'DocField', 'fieldname': 'use_template', 'fieldtype': 'Check', - 'idx': 21, 'label': 'Use Template', 'oldfieldname': 'use_template', 'oldfieldtype': 'Check' @@ -354,7 +322,6 @@ 'fieldname': 'print_outline', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 22, 'label': 'Print Outline', 'oldfieldname': 'print_outline', 'oldfieldtype': 'Select', @@ -369,7 +336,6 @@ 'fieldname': 'allow_print', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 23, 'label': 'Hide Print', 'oldfieldname': 'allow_print', 'oldfieldtype': 'Check', @@ -383,7 +349,6 @@ 'fieldname': 'allow_email', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 24, 'label': 'Hide Email', 'oldfieldname': 'allow_email', 'oldfieldtype': 'Check', @@ -396,7 +361,6 @@ 'doctype': 'DocField', 'fieldname': 'in_dialog', 'fieldtype': 'Check', - 'idx': 25, 'label': 'In Dialog', 'oldfieldname': 'in_dialog', 'oldfieldtype': 'Check' @@ -408,7 +372,6 @@ 'fieldname': 'allow_copy', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 26, 'label': 'Hide Copy', 'oldfieldname': 'allow_copy', 'oldfieldtype': 'Check', @@ -422,7 +385,6 @@ 'fieldname': 'hide_toolbar', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 27, 'label': 'Hide Toolbar', 'oldfieldname': 'hide_toolbar', 'oldfieldtype': 'Check', @@ -436,7 +398,6 @@ 'fieldname': 'hide_heading', 'fieldtype': 'Check', 'hidden': 0, - 'idx': 28, 'label': 'Hide Heading', 'oldfieldname': 'hide_heading', 'oldfieldtype': 'Check', @@ -449,7 +410,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_attach', 'fieldtype': 'Check', - 'idx': 29, 'label': 'Allow Attach', 'oldfieldname': 'allow_attach', 'oldfieldtype': 'Check', @@ -462,7 +422,6 @@ 'fieldname': 'max_attachments', 'fieldtype': 'Int', 'hidden': 1, - 'idx': 30, 'label': 'Max Attachments', 'oldfieldname': 'max_attachments', 'oldfieldtype': 'Int' @@ -473,7 +432,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_rename', 'fieldtype': 'Check', - 'idx': 31, 'label': 'Allow Rename', 'oldfieldname': 'allow_rename', 'oldfieldtype': 'Check' @@ -484,7 +442,6 @@ 'doctype': 'DocField', 'fieldname': 'section_style', 'fieldtype': 'Select', - 'idx': 32, 'label': 'Section Style', 'oldfieldname': 'section_style', 'oldfieldtype': 'Select', @@ -497,7 +454,6 @@ 'fieldname': 'colour', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 33, 'label': 'Colour', 'oldfieldname': 'colour', 'oldfieldtype': 'Select', @@ -512,7 +468,6 @@ 'fieldname': 'smallicon', 'fieldtype': 'Select', 'hidden': 0, - 'idx': 34, 'label': 'Small Icon', 'oldfieldname': 'smallicon', 'oldfieldtype': 'Select', @@ -521,11 +476,18 @@ 'search_index': 0 }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'default_print_format', + 'fieldtype': 'Data', + 'label': 'Default Print Format' + }, + # DocField { 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 35, 'label': 'Permissions', 'oldfieldtype': 'Section Break' }, @@ -534,7 +496,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 36, 'label': 'Roles and Permissions', 'oldfieldtype': 'Column Break', 'width': '70%' @@ -547,7 +508,6 @@ 'fieldname': 'permissions', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 37, 'label': 'Permissions', 'oldfieldname': 'permissions', 'oldfieldtype': 'Table', @@ -561,7 +521,6 @@ 'doctype': 'DocField', 'fieldname': 'allow_trash', 'fieldtype': 'Check', - 'idx': 38, 'label': 'Allow Trash', 'oldfieldname': 'allow_trash', 'oldfieldtype': 'Check' @@ -571,7 +530,6 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 39, 'label': 'Print Formats', 'oldfieldtype': 'Column Break', 'width': '30%' @@ -583,7 +541,6 @@ 'fieldname': 'formats', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 40, 'label': 'Formats', 'oldfieldname': 'formats', 'oldfieldtype': 'Table', @@ -597,7 +554,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 41, 'label': 'Fields', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -609,7 +565,6 @@ 'doctype': 'DocField', 'fieldtype': 'Column Break', 'hidden': 0, - 'idx': 42, 'label': 'Document Fields', 'oldfieldtype': 'Column Break', 'reqd': 0, @@ -622,7 +577,6 @@ 'fieldname': 'fields', 'fieldtype': 'Table', 'hidden': 0, - 'idx': 43, 'label': 'Fields', 'oldfieldname': 'fields', 'oldfieldtype': 'Table', @@ -636,7 +590,6 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 44, 'label': 'Description', 'oldfieldtype': 'Section Break', 'reqd': 0, @@ -649,7 +602,6 @@ 'fieldname': 'description', 'fieldtype': 'Text', 'hidden': 0, - 'idx': 45, 'label': 'Description', 'oldfieldname': 'description', 'oldfieldtype': 'Text', From fc87f5c56a705d88c16400b278398dcf7437ad90 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 7 Sep 2011 17:17:25 +0530 Subject: [PATCH 07/17] added missing icons --- images/icons/icons.png | Bin 0 -> 53108 bytes images/icons/wntoolbar-icons.png | Bin 0 -> 2762 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/icons/icons.png create mode 100644 images/icons/wntoolbar-icons.png diff --git a/images/icons/icons.png b/images/icons/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..fac6f173f03f8a29fa952fe8b22720ec7a488e44 GIT binary patch literal 53108 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 P;73M6QM^jjDCqwIF6Tl8 literal 0 HcmV?d00001 diff --git a/images/icons/wntoolbar-icons.png b/images/icons/wntoolbar-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..1e17e115934fb4b70e886d07464ab65cf349899b GIT binary patch literal 2762 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 C{XbIx literal 0 HcmV?d00001 From d592c3ff67edf0fe23e0dc29632af08661ce0296 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 7 Sep 2011 17:18:47 +0530 Subject: [PATCH 08/17] added missing icons --- images/icons/icons.png | Bin 0 -> 53108 bytes images/icons/wntoolbar-icons.png | Bin 0 -> 2762 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/icons/icons.png create mode 100644 images/icons/wntoolbar-icons.png diff --git a/images/icons/icons.png b/images/icons/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..fac6f173f03f8a29fa952fe8b22720ec7a488e44 GIT binary patch literal 53108 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 P;73M6QM^jjDCqwIF6Tl8 literal 0 HcmV?d00001 diff --git a/images/icons/wntoolbar-icons.png b/images/icons/wntoolbar-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..1e17e115934fb4b70e886d07464ab65cf349899b GIT binary patch literal 2762 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 C{XbIx literal 0 HcmV?d00001 From 2cda6827a4982721e0cbd40b2a62f6d320c644fc Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 9 Sep 2011 15:52:33 +0530 Subject: [PATCH 09/17] no patches on accounts db --- cgi-bin/webnotes/modules/patch.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cgi-bin/webnotes/modules/patch.py b/cgi-bin/webnotes/modules/patch.py index 5ecd84446c..6ff55fd528 100644 --- a/cgi-bin/webnotes/modules/patch.py +++ b/cgi-bin/webnotes/modules/patch.py @@ -5,6 +5,10 @@ def run(log_exception=1): from patches import patch from webnotes.utils import cint + if webnotes.conn.cur_db_name=='accounts': + # no patches on accounts + return + next_patch = cint(webnotes.conn.get_global('next_patch')) if next_patch <= patch.last_patch: From f4de3d354972b47d85e719c07e422d859ee32de2 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 9 Sep 2011 20:12:49 +0530 Subject: [PATCH 10/17] These changes allow an email to contain unicode text in the body --- cgi-bin/webnotes/profile.py | 4 ++-- cgi-bin/webnotes/utils/email_lib/__init__.py | 17 ++++++++--------- cgi-bin/webnotes/utils/email_lib/html2text.py | 3 ++- cgi-bin/webnotes/utils/email_lib/send.py | 6 +++++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/cgi-bin/webnotes/profile.py b/cgi-bin/webnotes/profile.py index b74fa08e5c..fc57cbabbb 100644 --- a/cgi-bin/webnotes/profile.py +++ b/cgi-bin/webnotes/profile.py @@ -162,12 +162,12 @@ class Profile: # update tab Profile webnotes.conn.sql("UPDATE tabProfile SET password=password(%s) WHERE name=%s", (pwd, profile[0][0])) - + self.send_email("Password Reset", "

Dear %s%s,

your password has been changed to %s

[Automatically Generated]

" % (profile[0][2], (profile[0][3] and (' ' + profile[0][3]) or ''), pwd), profile[0][1]) def send_email(self, subj, mess, email): import webnotes.utils.email_lib - + webnotes.utils.email_lib.sendmail(email, msg=mess, subject=subj) # update recent documents diff --git a/cgi-bin/webnotes/utils/email_lib/__init__.py b/cgi-bin/webnotes/utils/email_lib/__init__.py index abda347923..7d0572d46b 100644 --- a/cgi-bin/webnotes/utils/email_lib/__init__.py +++ b/cgi-bin/webnotes/utils/email_lib/__init__.py @@ -29,19 +29,18 @@ def sendmail(recipients, sender='', msg='', subject='[No Subject]', parts=[], cc email = EMail(sender, recipients, subject, reply_to=reply_to) email.cc = cc - - if msg: - if template: - msg = make_html_body(msg, template) + + if msg: + if template: + msg = make_html_body(msg, template).encode('utf-8') else: # if not html, then lets put some whitespace if (not '
' in msg) or (not '

' in msg): - msg = msg.replace('\n','
') - + msg = msg.replace('\n','
') footer = get_footer() - msg = msg + (footer or '') - email.set_text(html2text(msg)) - email.set_html(msg) + msg = msg + (footer or '') + email.set_text(html2text(msg)) + email.set_html(msg) for p in parts: email.set_message(p[1]) for a in attach: diff --git a/cgi-bin/webnotes/utils/email_lib/html2text.py b/cgi-bin/webnotes/utils/email_lib/html2text.py index 66258d2477..d81c970546 100644 --- a/cgi-bin/webnotes/utils/email_lib/html2text.py +++ b/cgi-bin/webnotes/utils/email_lib/html2text.py @@ -447,7 +447,8 @@ def html2text_file(html, out=wrapwrite, baseurl=''): return h.close() def html2text(html, baseurl=''): - return optwrap(html2text_file(html, None, baseurl)) + txt = html2text_file(html.decode('utf-8'), None, baseurl) + return optwrap(txt.encode('utf-8')) if __name__ == "__main__": baseurl = '' diff --git a/cgi-bin/webnotes/utils/email_lib/send.py b/cgi-bin/webnotes/utils/email_lib/send.py index 2eff8ed9bc..52e4572459 100644 --- a/cgi-bin/webnotes/utils/email_lib/send.py +++ b/cgi-bin/webnotes/utils/email_lib/send.py @@ -16,6 +16,9 @@ class EMail: """ def __init__(self, sender='', recipients=[], subject='', from_defs=0, alternative=0, reply_to=None): from email.mime.multipart import MIMEMultipart + from email import Charset + Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8') + if type(recipients)==str: recipients = recipients.replace(';', ',') recipients = recipients.split(',') @@ -36,7 +39,8 @@ class EMail: Attach message in the text portion of multipart/alternative """ from email.mime.text import MIMEText - part = MIMEText(message, 'plain') + msg = unicode(message, 'utf-8') + part = MIMEText(msg.encode('utf-8'), 'plain', 'UTF-8') self.msg_multipart.attach(part) def set_html(self, message): From 7c7736124388175c4d1c2cf067982b1b7ca93997 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 9 Sep 2011 20:32:27 +0530 Subject: [PATCH 11/17] email in utf-8 --- cgi-bin/webnotes/profile.py | 4 ++-- cgi-bin/webnotes/utils/email_lib/__init__.py | 17 ++++++++--------- cgi-bin/webnotes/utils/email_lib/html2text.py | 3 ++- cgi-bin/webnotes/utils/email_lib/send.py | 6 +++++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/cgi-bin/webnotes/profile.py b/cgi-bin/webnotes/profile.py index b74fa08e5c..fc57cbabbb 100644 --- a/cgi-bin/webnotes/profile.py +++ b/cgi-bin/webnotes/profile.py @@ -162,12 +162,12 @@ class Profile: # update tab Profile webnotes.conn.sql("UPDATE tabProfile SET password=password(%s) WHERE name=%s", (pwd, profile[0][0])) - + self.send_email("Password Reset", "

Dear %s%s,

your password has been changed to %s

[Automatically Generated]

" % (profile[0][2], (profile[0][3] and (' ' + profile[0][3]) or ''), pwd), profile[0][1]) def send_email(self, subj, mess, email): import webnotes.utils.email_lib - + webnotes.utils.email_lib.sendmail(email, msg=mess, subject=subj) # update recent documents diff --git a/cgi-bin/webnotes/utils/email_lib/__init__.py b/cgi-bin/webnotes/utils/email_lib/__init__.py index abda347923..7d0572d46b 100644 --- a/cgi-bin/webnotes/utils/email_lib/__init__.py +++ b/cgi-bin/webnotes/utils/email_lib/__init__.py @@ -29,19 +29,18 @@ def sendmail(recipients, sender='', msg='', subject='[No Subject]', parts=[], cc email = EMail(sender, recipients, subject, reply_to=reply_to) email.cc = cc - - if msg: - if template: - msg = make_html_body(msg, template) + + if msg: + if template: + msg = make_html_body(msg, template).encode('utf-8') else: # if not html, then lets put some whitespace if (not '
' in msg) or (not '

' in msg): - msg = msg.replace('\n','
') - + msg = msg.replace('\n','
') footer = get_footer() - msg = msg + (footer or '') - email.set_text(html2text(msg)) - email.set_html(msg) + msg = msg + (footer or '') + email.set_text(html2text(msg)) + email.set_html(msg) for p in parts: email.set_message(p[1]) for a in attach: diff --git a/cgi-bin/webnotes/utils/email_lib/html2text.py b/cgi-bin/webnotes/utils/email_lib/html2text.py index 66258d2477..d81c970546 100644 --- a/cgi-bin/webnotes/utils/email_lib/html2text.py +++ b/cgi-bin/webnotes/utils/email_lib/html2text.py @@ -447,7 +447,8 @@ def html2text_file(html, out=wrapwrite, baseurl=''): return h.close() def html2text(html, baseurl=''): - return optwrap(html2text_file(html, None, baseurl)) + txt = html2text_file(html.decode('utf-8'), None, baseurl) + return optwrap(txt.encode('utf-8')) if __name__ == "__main__": baseurl = '' diff --git a/cgi-bin/webnotes/utils/email_lib/send.py b/cgi-bin/webnotes/utils/email_lib/send.py index 2eff8ed9bc..52e4572459 100644 --- a/cgi-bin/webnotes/utils/email_lib/send.py +++ b/cgi-bin/webnotes/utils/email_lib/send.py @@ -16,6 +16,9 @@ class EMail: """ def __init__(self, sender='', recipients=[], subject='', from_defs=0, alternative=0, reply_to=None): from email.mime.multipart import MIMEMultipart + from email import Charset + Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8') + if type(recipients)==str: recipients = recipients.replace(';', ',') recipients = recipients.split(',') @@ -36,7 +39,8 @@ class EMail: Attach message in the text portion of multipart/alternative """ from email.mime.text import MIMEText - part = MIMEText(message, 'plain') + msg = unicode(message, 'utf-8') + part = MIMEText(msg.encode('utf-8'), 'plain', 'UTF-8') self.msg_multipart.attach(part) def set_html(self, message): From dfcd05e1663b0a176c3f86dd0d1418e1b55ff542 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 9 Sep 2011 20:33:04 +0530 Subject: [PATCH 12/17] email in utf-8 --- cgi-bin/webnotes/profile.py | 4 ++-- cgi-bin/webnotes/utils/email_lib/__init__.py | 17 ++++++++--------- cgi-bin/webnotes/utils/email_lib/html2text.py | 3 ++- cgi-bin/webnotes/utils/email_lib/send.py | 6 +++++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/cgi-bin/webnotes/profile.py b/cgi-bin/webnotes/profile.py index b74fa08e5c..fc57cbabbb 100644 --- a/cgi-bin/webnotes/profile.py +++ b/cgi-bin/webnotes/profile.py @@ -162,12 +162,12 @@ class Profile: # update tab Profile webnotes.conn.sql("UPDATE tabProfile SET password=password(%s) WHERE name=%s", (pwd, profile[0][0])) - + self.send_email("Password Reset", "

Dear %s%s,

your password has been changed to %s

[Automatically Generated]

" % (profile[0][2], (profile[0][3] and (' ' + profile[0][3]) or ''), pwd), profile[0][1]) def send_email(self, subj, mess, email): import webnotes.utils.email_lib - + webnotes.utils.email_lib.sendmail(email, msg=mess, subject=subj) # update recent documents diff --git a/cgi-bin/webnotes/utils/email_lib/__init__.py b/cgi-bin/webnotes/utils/email_lib/__init__.py index abda347923..7d0572d46b 100644 --- a/cgi-bin/webnotes/utils/email_lib/__init__.py +++ b/cgi-bin/webnotes/utils/email_lib/__init__.py @@ -29,19 +29,18 @@ def sendmail(recipients, sender='', msg='', subject='[No Subject]', parts=[], cc email = EMail(sender, recipients, subject, reply_to=reply_to) email.cc = cc - - if msg: - if template: - msg = make_html_body(msg, template) + + if msg: + if template: + msg = make_html_body(msg, template).encode('utf-8') else: # if not html, then lets put some whitespace if (not '
' in msg) or (not '

' in msg): - msg = msg.replace('\n','
') - + msg = msg.replace('\n','
') footer = get_footer() - msg = msg + (footer or '') - email.set_text(html2text(msg)) - email.set_html(msg) + msg = msg + (footer or '') + email.set_text(html2text(msg)) + email.set_html(msg) for p in parts: email.set_message(p[1]) for a in attach: diff --git a/cgi-bin/webnotes/utils/email_lib/html2text.py b/cgi-bin/webnotes/utils/email_lib/html2text.py index 66258d2477..d81c970546 100644 --- a/cgi-bin/webnotes/utils/email_lib/html2text.py +++ b/cgi-bin/webnotes/utils/email_lib/html2text.py @@ -447,7 +447,8 @@ def html2text_file(html, out=wrapwrite, baseurl=''): return h.close() def html2text(html, baseurl=''): - return optwrap(html2text_file(html, None, baseurl)) + txt = html2text_file(html.decode('utf-8'), None, baseurl) + return optwrap(txt.encode('utf-8')) if __name__ == "__main__": baseurl = '' diff --git a/cgi-bin/webnotes/utils/email_lib/send.py b/cgi-bin/webnotes/utils/email_lib/send.py index 2eff8ed9bc..52e4572459 100644 --- a/cgi-bin/webnotes/utils/email_lib/send.py +++ b/cgi-bin/webnotes/utils/email_lib/send.py @@ -16,6 +16,9 @@ class EMail: """ def __init__(self, sender='', recipients=[], subject='', from_defs=0, alternative=0, reply_to=None): from email.mime.multipart import MIMEMultipart + from email import Charset + Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8') + if type(recipients)==str: recipients = recipients.replace(';', ',') recipients = recipients.split(',') @@ -36,7 +39,8 @@ class EMail: Attach message in the text portion of multipart/alternative """ from email.mime.text import MIMEText - part = MIMEText(message, 'plain') + msg = unicode(message, 'utf-8') + part = MIMEText(msg.encode('utf-8'), 'plain', 'UTF-8') self.msg_multipart.attach(part) def set_html(self, message): From 5eb4762ddb7428fe506089943e1a32705c1e6791 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 13 Sep 2011 13:28:02 +0530 Subject: [PATCH 13/17] doctype mapper functions re-written --- .../doctype/doctype_mapper/doctype_mapper.py | 204 +++++++++--------- 1 file changed, 104 insertions(+), 100 deletions(-) diff --git a/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py b/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py index 05b136de11..1aad7cadc2 100644 --- a/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py +++ b/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py @@ -21,41 +21,17 @@ class DocType: def __init__(self, doc, doclist=[]): self.doc = doc self.doclist = doclist - self.prefix = is_testing and 'test' or 'tab' self.ref_doc = '' + # Autoname - #--------- + #--------------------------------------------------------------------------- def autoname(self): self.doc.name = make_autoname(self.doc.from_doctype + '-' + self.doc.to_doctype) - - def map_fields_with_same_name(self, from_doctype, to_doctype, from_doc, to_doc, fld_list): - """ - Returns field list with same name in from and to doctype - """ - exception_flds = [f[0] for f in fld_list if f[2] == 'No'] - exception_flds += default_fields - exception_flds += ['amended_from', 'amendment_date', 'file_list', 'naming_series', 'status'] - - map_fld_list = [ - [d[0], d[0], 'Yes'] for d in sql(""" - select t1.fieldname - from `tabDocField` t1, `tabDocField` t2 - where t1.parent = %s and t2.parent = %s - and t1.fieldname = t2.fieldname - and t1.docstatus != 2 and t2.docstatus != 2 - and ifnull(t1.fieldname, '') != '' - """,(from_doctype, to_doctype)) if d[0] not in exception_flds - ] - - self.set_value(map_fld_list, from_doc, to_doc) - # Maps the fields in 'To DocType' - #-------------------------------- + #--------------------------------------------------------------------------- def dt_map(self, from_doctype, to_doctype, from_docname, to_doc, doclist, from_to_list = '[]'): - - # definition of arguments ''' String : contains the name of DocType initiating the function String : contains the name of DocType created by the function @@ -64,6 +40,10 @@ class DocType: String : contains doclist of 'to_doctype' String : contains list of tables which will be mapped ''' + + if not from_docname: + msgprint(from_doctype + " not selected for mapping", raise_exception=1) + # Validate reference doc docstatus self.ref_doc = from_docname self.check_ref_docstatus() @@ -71,75 +51,94 @@ class DocType: if not doclist: doclist.append(to_doc) - tbl_list = sql("select from_table, to_table, from_field, to_field, match_id, validation_logic from `tabTable Mapper Detail` where parent ='%s' order by match_id" % (from_doctype + "-" + to_doctype)) - - for t in tbl_list: - from_table_name = t[0] - to_table_name = t[1] - from_table_fname = t[2] - to_table_fname = t[3] - match_id = t[4] - validation_logic = t[5] - - - from_to = [from_table_name, to_table_name] - - if from_to in eval(from_to_list): - fld_list = sql("select from_field, to_field, map from `tabField Mapper Detail` where parent = '%s' and match_id = %s" % (from_doctype + "-" + to_doctype, match_id)) - if not from_docname: - msgprint(from_doctype + " not selected for mapping") - raise Exception - - # Parent to parent mapping - if from_table_name == self.doc.from_doctype and to_table_name == self.doc.to_doctype: - - # Check validation - nm = sql("select name from `tab%s` where name = '%s' and %s" % (from_doctype, from_docname, validation_logic)) - nm = nm and nm[0][0] or '' - - # If validation failed raise exception - if not nm: - msgprint("Validation failed in doctype mapper. Please contact Administrator.") - raise Exception - - from_doc = Document(from_doctype, nm) + tbl_list = sql("select from_table, to_table, from_field, to_field, match_id, validation_logic from `tabTable Mapper Detail` where parent ='%s' order by match_id" % self.doc.name, as_dict=1) - # Map fields with same name + for t in tbl_list: + if [t['from_table'], t['to_table']] in eval(from_to_list): + self.map_fields(t, from_doctype, from_docname, to_doc, doclist) + + # Doclist is required when called from server side for refreshing table + return doclist - self.map_fields_with_same_name(from_doctype, to_doctype, from_doc, to_doc, fld_list) - # Maps field in parent - - if fld_list: - self.set_value(fld_list, from_doc, to_doc) + #--------------------------------------------------------------------------- + def map_fields(self, t, from_dt, from_dn, to_doc, doclist): + """ + Creates from, to obj and maps flds as per mapper and with same name + """ + flds = self.get_mapper_fields(t) + flds += self.get_fields_with_same_name(t, flds) - # Parent to child OR child to child mapping + if flds: + from_docnames = self.get_docnames(t, from_dt, from_dn) + + for dn in from_docnames: + # Creates object for 'From DocType', it can be parent or child + from_doc_obj = Document(t['from_table'], dn[0]) + + # Add a row in target table in 'To DocType' and returns obj + if t['to_table'] != self.doc.to_doctype: + to_doc_obj = addchild(to_doc, t['to_field'], t['to_table'], 1, doclist) else: - dnlist = () - if from_table_name == self.doc.from_doctype: - dnlist = ((from_docname,),) - else: - dnlist = sql("select name from `tab%s` where parent='%s' and parenttype = '%s' and %s order by idx" % (from_table_name, from_docname, self.doc.from_doctype, validation_logic)) - - for dn in dnlist: - # Add a row in target table in 'To DocType' and returns obj - ch = addchild(to_doc, t[3], t[1], 1, doclist) - # Creates object for 'From DocType', it can be parent or child - d = Document(t[0], dn[0]) - # Map fields with same name - self.map_fields_with_same_name(from_table_name, t[1], d, ch, fld_list) - # Map values - if fld_list: - self.set_value(fld_list, d, ch) + to_doc_obj = to_doc + self.set_value(flds, from_doc_obj, to_doc_obj) + + #--------------------------------------------------------------------------- + def get_docnames(self, t, from_dt, from_dn): + """ + Returns docnames of source document (parent/child) + """ + docnames = () + if t['from_table'] == self.doc.from_doctype: + docnames = sql("select name from `tab%s` where name = '%s' and %s" % (from_dt, from_dn, t['validation_logic'])) + if not docnames: + msgprint("Validation failed in doctype mapper. Please contact Administrator.", raise_exception=1) + else: + docnames = sql("select name from `tab%s` where parent='%s' and parenttype = '%s' and %s order by idx" % (t['from_table'], from_dn, self.doc.from_doctype, t['validation_logic'])) + + return docnames + + + #--------------------------------------------------------------------------- + def get_mapper_fields(self, t): + return [[f[0], f[1], f[2]] for f in sql(""" + select from_field, to_field, map + from `tabField Mapper Detail` + where parent = '%s' and match_id = %s + """ % (self.doc.name, t['match_id']))] - # Required when called from server side for refreshing table - return doclist + #--------------------------------------------------------------------------- + def get_fields_with_same_name(self, t, flds): + """ + Returns field list with same name in from and to doctype + """ - # Assigns value to "To Doctype" - #------------------------------ + exception_flds = default_fields + exception_flds += [f[1] for f in flds] + exception_flds += ['amended_from', 'amendment_date', 'file_list', 'naming_series', 'status'] + + similar_flds = [ + [d[0], d[0], 'Yes'] for d in sql(""" + select t1.fieldname + from `tabDocField` t1, `tabDocField` t2 + where t1.parent = %s and t2.parent = %s + and t1.fieldname = t2.fieldname + and t1.docstatus != 2 and t2.docstatus != 2 + and ifnull(t1.no_copy, 0) = 0 + and ifnull(t1.fieldname, '') != '' + and t1.fieldtype not in ('Table', 'Section Break', 'Column Break', 'HTML') + """,(t['from_table'], t['to_table'])) if d[0] not in exception_flds + ] + + return similar_flds + + #--------------------------------------------------------------------------- def set_value(self, fld_list, obj, to_doc): + """ + Assigns value to fields in "To Doctype" + """ for f in fld_list: if f[2] == 'Yes': if f[0].startswith('eval:'): @@ -152,9 +151,12 @@ class DocType: else: to_doc.fields[f[1]] = obj.fields.get(f[0]) - # Validate - #--------- + + #--------------------------------------------------------------------------- def validate(self): + """ + Validate mapper while saving + """ for d in getlist(self.doclist, 'field_mapper_details'): # Automatically assigns default value if not entered if not d.match_id: @@ -169,10 +171,13 @@ class DocType: # Check wrong field name self.check_fields_in_dt() - - # Check if any wrong fieldname entered - #-------------------------------------- + + + #--------------------------------------------------------------------------- def check_fields_in_dt(self): + """ + Check if any wrong fieldname entered in mapper + """ for d in getlist(self.doclist, 'field_mapper_details'): table_name = sql("select from_table, to_table from `tabTable Mapper Detail` where parent ='%s' and match_id = '%s'" % (self.doc.name, d.match_id)) @@ -186,6 +191,7 @@ class DocType: if not exists2 and d.to_field not in default_fields: msgprint('"' + cstr(d.to_field) + '" does not exists in DocType "' + cstr(table_name[0][1]) + '"') + # Check consistency of value with reference document #--------------------------------------------------- def validate_reference_value(self, obj, to_docname): @@ -235,7 +241,6 @@ class DocType: if cl[2] == '=' and (ft[1] == 'Currency' or ft[1] == 'Float'): consistent = sql("select name, %s from `tab%s` where name = '%s' and '%s' - %s <= 0.5" % (cl[0], t.from_table, child_obj.fields[t.reference_key], flt(cur_val), cl[0])) else: - #consistent = sql("select name, %s from `tab%s` where name = '%s' and '%s' %s %s" % (cl[0], t.from_table, child_obj.fields[t.reference_key], cur_val, cl[2], cl[0])) consistent = sql("select name, %s from `tab%s` where name = '%s' and '%s' %s ifnull(%s, '')" % (cl[0], t.from_table, child_obj.fields[t.reference_key], ft[1] in ('Currency', 'Float', 'Int') and flt(cur_val) or cstr(cur_val), cl[2], cl[0])) if not self.ref_doc: @@ -253,22 +258,21 @@ class DocType: from_fld_label = sql("select label from tabDocField where parent = '%s' and fieldname = '%s'" % (from_table, from_field)) op_in_words = {'=':'equal to ', '>=':'greater than equal to ', '>':'greater than ', '<=':'less than equal to ', '<':'less than '} - msgprint(to_fld_label[0][0] + " should be " + op_in_words[operator] + from_fld_label[0][0] + " of " + self.doc.from_doctype + ": " + self.ref_doc) - raise Exception, "Validation Error." + msgprint(to_fld_label[0][0] + " should be " + op_in_words[operator] + from_fld_label[0][0] + " of " + self.doc.from_doctype + ": " + self.ref_doc, raise_exception=1) def check_ref_docstatus(self): if self.ref_doc: det = sql("select name, docstatus from `tab%s` where name = '%s'" % (self.doc.from_doctype, self.ref_doc)) if not det: - msgprint(self.doc.from_doctype + ": " + self.ref_doc + " does not exists in the system") - raise Exception, "Validation Error." + msgprint(self.doc.from_doctype + ": " + self.ref_doc + " does not exists in the system", raise_exception=1) elif self.doc.ref_doc_submitted and det[0][1] != 1: - msgprint(self.doc.from_doctype + ": " + self.ref_doc + " is not Submitted Document.") - raise Exception, "Validation Error." + msgprint(self.doc.from_doctype + ": " + self.ref_doc + " is not Submitted Document.", raise_exception=1) def on_update(self): + """ + If developer_mode = 1, mapper will be written to files + """ import webnotes.defs if hasattr(webnotes.defs, 'developer_mode') and webnotes.defs.developer_mode: from webnotes.modules.export_module import export_to_files - export_to_files(record_list=[[self.doc.doctype, self.doc.name]]) - + export_to_files(record_list=[[self.doc.doctype, self.doc.name]]) From 20926bb00a20a67b74fd818fb090e47d3051058d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 13 Sep 2011 13:32:57 +0530 Subject: [PATCH 14/17] Removed hard-coded exception flds and written patch to make no_copy for those --- cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py b/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py index 1aad7cadc2..2280f87cb5 100644 --- a/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py +++ b/cgi-bin/core/doctype/doctype_mapper/doctype_mapper.py @@ -117,7 +117,6 @@ class DocType: exception_flds = default_fields exception_flds += [f[1] for f in flds] - exception_flds += ['amended_from', 'amendment_date', 'file_list', 'naming_series', 'status'] similar_flds = [ [d[0], d[0], 'Yes'] for d in sql(""" From af2af54cd2944b9c03c88f12d757cd45e30d0551 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 13 Sep 2011 15:45:03 +0530 Subject: [PATCH 15/17] show validation message --- cgi-bin/webnotes/model/import_docs.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cgi-bin/webnotes/model/import_docs.py b/cgi-bin/webnotes/model/import_docs.py index 524462c35b..8ea1502d82 100644 --- a/cgi-bin/webnotes/model/import_docs.py +++ b/cgi-bin/webnotes/model/import_docs.py @@ -291,6 +291,7 @@ class CSVImport: cur_doc = Document(fielddata = fd) cur_doc.doctype, cur_doc.parenttype, cur_doc.parentfield = self.dt_list[0], len(self.dt_list) > 1 and self.dt_list[1] or '', len(self.dt_list) > 1 and self.dt_list[2] or '' obj = '' + webnotes.message_log = [] # save the document try: if webnotes.conn.in_transaction: @@ -321,7 +322,8 @@ class CSVImport: except Exception: sql("ROLLBACK") - self.msg.append('

Validation: %s
' % str(webnotes.message_log[-1:])) + self.msg.append('
Validation Error: %s
' % str((webnotes.message_log and webnotes.message_log[0]) or webnotes.utils.getTraceback())) + self.msg.append('
Did not import
' # do import # -------------------------------------------------------------------- From a8d028506180de7ce36f5aac18e1e7caffd82c69 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 13 Sep 2011 15:50:58 +0530 Subject: [PATCH 16/17] import fix --- cgi-bin/webnotes/model/import_docs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cgi-bin/webnotes/model/import_docs.py b/cgi-bin/webnotes/model/import_docs.py index 8ea1502d82..4dcdb9c060 100644 --- a/cgi-bin/webnotes/model/import_docs.py +++ b/cgi-bin/webnotes/model/import_docs.py @@ -323,7 +323,7 @@ class CSVImport: except Exception: sql("ROLLBACK") self.msg.append('
Validation Error: %s
' % str((webnotes.message_log and webnotes.message_log[0]) or webnotes.utils.getTraceback())) - self.msg.append('
Did not import
' + self.msg.append('
Did not import
') # do import # -------------------------------------------------------------------- From b394713c04d08464a10ab3d99bd778b5de0ec60e Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 14 Sep 2011 14:29:11 +0530 Subject: [PATCH 17/17] fix to nsm, added test cases and reloads after setting lft, rgt --- cgi-bin/webnotes/utils/nestedset.py | 177 +++++++++++++++++++++++++--- 1 file changed, 158 insertions(+), 19 deletions(-) diff --git a/cgi-bin/webnotes/utils/nestedset.py b/cgi-bin/webnotes/utils/nestedset.py index 97cf156074..a80bec14ba 100644 --- a/cgi-bin/webnotes/utils/nestedset.py +++ b/cgi-bin/webnotes/utils/nestedset.py @@ -8,29 +8,149 @@ # ------------------------------------------ -import webnotes +import webnotes, unittest + +class TestNSM(unittest.TestCase): + + def setUp(self): + from webnotes.model.doc import Document + self.root = Document(fielddata={'doctype':'nsmtest', 'name':'T001', 'parent':None}) + self.first_child = Document(fielddata={'doctype':'nsmtest', 'name':'C001', 'parent_node':'T001'}) + self.first_sibling = Document(fielddata={'doctype':'nsmtest', 'name':'C002', 'parent_node':'T001'}) + self.grand_child = Document(fielddata={'doctype':'nsmtest', 'name':'GC001', 'parent_node':'C001'}) + + webnotes.conn.sql(""" + create table `tabnsmtest` ( + name varchar(120) not null primary key, + creation datetime, + modified datetime, + modified_by varchar(40), + owner varchar(40), + docstatus int(1) default '0', + parent varchar(120), + parentfield varchar(120), + parenttype varchar(120), + idx int(8), + parent_node varchar(180), + old_parent varchar(180), + lft int, + rgt int) ENGINE=InnoDB""") + + def test_root(self): + self.root.save(1) + update_nsm(self.root) + self.assertTrue(self.root.lft==1) + self.assertTrue(self.root.rgt==2) + + def test_first_child(self): + self.root.save(1) + update_nsm(self.root) + + self.first_child.save(1) + update_nsm(self.first_child) + + self.root._loadfromdb() + + self.assertTrue(self.root.lft==1) + self.assertTrue(self.first_child.lft==2) + self.assertTrue(self.first_child.rgt==3) + self.assertTrue(self.root.rgt==4) + + def test_sibling(self): + self.test_first_child() + + self.first_sibling.save(1) + update_nsm(self.first_sibling) + + self.root._loadfromdb() + self.first_child._loadfromdb() + + self.assertTrue(self.root.lft==1) + self.assertTrue(self.first_child.lft==2) + self.assertTrue(self.first_child.rgt==3) + self.assertTrue(self.first_sibling.lft==4) + self.assertTrue(self.first_sibling.rgt==5) + self.assertTrue(self.root.rgt==6) + + def test_remove_sibling(self): + self.test_sibling() + self.first_sibling.parent_node = '' + update_nsm(self.first_sibling) + + self.root._loadfromdb() + self.first_child._loadfromdb() + + self.assertTrue(self.root.lft==1) + self.assertTrue(self.first_child.lft==2) + self.assertTrue(self.first_child.rgt==3) + self.assertTrue(self.root.rgt==4) + self.assertTrue(self.first_sibling.lft==5) + self.assertTrue(self.first_sibling.rgt==6) + + def test_change_parent(self): + self.test_sibling() + + # add grand child + self.grand_child.save(1) + update_nsm(self.grand_child) + + # check lft rgt + self.assertTrue(self.grand_child.lft==3) + self.assertTrue(self.grand_child.rgt==4) + + # change parent + self.grand_child.parent_node = 'C002' + self.grand_child.save() + + # update + update_nsm(self.grand_child) + + # check lft rgt + self.assertTrue(self.grand_child.lft==5) + self.assertTrue(self.grand_child.rgt==6) + + + def tearDown(self): + webnotes.conn.sql("drop table tabnsmtest") + + # called in the on_update method def update_nsm(doc_obj): # get fields, data from the DocType - d = doc_obj.doc + pf, opf = 'parent_node', 'old_parent' - if hasattr(doc_obj,'nsm_parent_field'): - pf = doc_obj.nsm_parent_field - if hasattr(doc_obj,'nsm_oldparent_field'): - opf = doc_obj.nsm_oldparent_field - p, op = d.fields[pf], d.fields.get(opf, '') + + if str(doc_obj.__class__)=='webnotes.model.doc.Document': + # passed as a Document object + d = doc_obj + else: + # passed as a DocType object + d = doc_obj.doc + if hasattr(doc_obj,'nsm_parent_field'): + pf = doc_obj.nsm_parent_field + if hasattr(doc_obj,'nsm_oldparent_field'): + opf = doc_obj.nsm_oldparent_field + + p, op = d.fields.get(pf, ''), d.fields.get(opf, '') # has parent changed (?) or parent is None (root) - if not doc_obj.doc.lft and not doc_obj.doc.rgt: - update_add_node(doc_obj.doc.doctype, doc_obj.doc.name, p or '', pf) + if not d.lft and not d.rgt: + update_add_node(d.doctype, d.name, p or '', pf) elif op != p: - update_remove_node(doc_obj.doc.doctype, doc_obj.doc.name) - update_add_node(doc_obj.doc.doctype, doc_obj.doc.name, p or '', pf) + update_remove_node(d.doctype, d.name) + update_add_node(d.doctype, d.name, p or '', pf) + # set old parent webnotes.conn.set(d, opf, p or '') + + # reload + d._loadfromdb() def rebuild_tree(doctype, parent_field): + """ + call rebuild_node for all root nodes + """ # get all roots right = 1 result = webnotes.conn.sql("SELECT name FROM `tab%s` WHERE `%s`='' or `%s` IS NULL" % (doctype, parent_field, parent_field)) @@ -38,6 +158,12 @@ def rebuild_tree(doctype, parent_field): right = rebuild_node(doctype, r[0], right, parent_field) def rebuild_node(doctype, parent, left, parent_field): + """ + reset lft, rgt and recursive call for all children + """ + from webnotes.utils import now + n = now() + # the right value of this node is the left value + 1 right = left+1 @@ -48,37 +174,50 @@ def rebuild_node(doctype, parent, left, parent_field): # we've got the left value, and now that we've processed # the children of this node we also know the right value - webnotes.conn.sql('UPDATE `tab%s` SET lft=%s, rgt=%s WHERE name="%s"' % (doctype,left,right,parent)) + webnotes.conn.sql("UPDATE `tab%s` SET lft=%s, rgt=%s, modified='%s' WHERE name='%s'" % (doctype,left,right,n,parent)) #return the right value of this node + 1 return right+1 def update_add_node(doctype, name, parent, parent_field): + """ + insert a new node + """ + from webnotes.utils import now + n = now() + # get the last sibling of the parent if parent: right = webnotes.conn.sql("select rgt from `tab%s` where name='%s'" % (doctype, parent))[0][0] else: # root right = webnotes.conn.sql("select ifnull(max(rgt),0)+1 from `tab%s` where ifnull(`%s`,'') =''" % (doctype, parent_field))[0][0] right = right or 1 - + # update all on the right - webnotes.conn.sql("update `tab%s` set rgt = rgt+2 where rgt >= %s" %(doctype,right)) - webnotes.conn.sql("update `tab%s` set lft = lft+2 where lft >= %s" %(doctype,right)) + webnotes.conn.sql("update `tab%s` set rgt = rgt+2, modified='%s' where rgt >= %s" %(doctype,n,right)) + webnotes.conn.sql("update `tab%s` set lft = lft+2, modified='%s' where lft >= %s" %(doctype,n,right)) # update index of new node if webnotes.conn.sql("select * from `tab%s` where lft=%s or rgt=%s"% (doctype, right, right+1)): webnotes.msgprint("Nested set error. Please send mail to support") raise Exception - webnotes.conn.sql("update `tab%s` set lft=%s, rgt=%s where name='%s'" % (doctype,right,right+1,name)) + webnotes.conn.sql("update `tab%s` set lft=%s, rgt=%s, modified='%s' where name='%s'" % (doctype,right,right+1,n,name)) return right def update_remove_node(doctype, name): + """ + remove a node + """ + from webnotes.utils import now + n = now() + left = webnotes.conn.sql("select lft from `tab%s` where name='%s'" % (doctype,name)) if left[0][0]: # reset this node - webnotes.conn.sql("update `tab%s` set lft=0, rgt=0 where name='%s'" % (doctype,name)) + webnotes.conn.sql("update `tab%s` set lft=0, rgt=0, modified='%s' where name='%s'" % (doctype,n,name)) # update all on the right - webnotes.conn.sql("update `tab%s` set rgt = rgt-2 where rgt > %s" %(doctype,left[0][0])) - webnotes.conn.sql("update `tab%s` set lft = lft-2 where lft > %s" %(doctype,left[0][0])) + webnotes.conn.sql("update `tab%s` set rgt = rgt-2, modified='%s' where rgt > %s" %(doctype,n,left[0][0])) + webnotes.conn.sql("update `tab%s` set lft = lft-2, modified='%s' where lft > %s" %(doctype,n,left[0][0])) +