Merge branch 'latest' of github.com:webnotes/erpnext into latest
Conflicts:
version.num
diff --git a/config/conf.py b/config/conf.py
deleted file mode 100644
index 1cf35e2..0000000
--- a/config/conf.py
+++ /dev/null
@@ -1,7 +0,0 @@
-index_path = '/'
-
-include_paths = [
- 'erpnext',
- 'lib/py',
- 'lib/py/legacy'
-]
\ No newline at end of file
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js
index e5fca9f..13416e6 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.js
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.js
@@ -125,7 +125,7 @@
var imgsrc=null;
var has_children = true;
if(cl[i].group_or_ledger=='Ledger') {
- var imgsrc = 'lib/images/icons/page.gif';
+ var imgsrc = 'lib/images/icons/page.png';
has_children = false;
}
var t = tree.addNode(n, cl[i].account_name, imgsrc,tree.std_onclick, has_children ? tree.std_onexp : null);
@@ -138,7 +138,7 @@
var imgsrc=null;
var has_children = true;
if(cl[i].group_or_ledger=='Ledger') {
- var imgsrc = 'lib/images/icons/page.gif';
+ var imgsrc = 'lib/images/icons/page.png';
has_children = false;
}
var t = tree.addNode(n, cl[i].cost_center_name, imgsrc,tree.std_onclick, has_children ? tree.std_onexp : null);
diff --git a/erpnext/home/__init__.py b/erpnext/home/__init__.py
index 7059cec..5ebf7c0 100644
--- a/erpnext/home/__init__.py
+++ b/erpnext/home/__init__.py
@@ -34,23 +34,33 @@
'Support Ticket': ['[%(status)s] %(subject)s', '#000080']
}
-def make_feed(doc, subject, color):
+def make_feed(feedtype, doctype, name, owner, subject, color):
"makes a new Feed record"
#msgprint(subject)
from webnotes.model.doc import Document
- webnotes.conn.sql("delete from tabFeed where doc_type=%s and doc_name=%s", (doc.doctype, doc.name))
+
+ if feedtype in ('Login', 'Comment'):
+ # delete old login, comment feed
+ webnotes.conn.sql("""delete from tabFeed where
+ datediff(curdate(), creation) > 7 and doc_type in ('Comment', 'Login')""")
+ else:
+ # one feed per item
+ webnotes.conn.sql("""delete from tabFeed
+ where doc_type=%s and doc_name=%s
+ and ifnull(feed_type,'') != 'Comment'""", (doctype, name))
+
f = Document('Feed')
- f.doc_type = doc.doctype
- f.doc_name = doc.name
+ f.owner = owner
+ f.feed_type = feedtype
+ f.doc_type = doctype
+ f.doc_name = name
f.subject = subject
f.color = color
- f.save(1)
+ f.save()
def update_feed(doc, method=None):
"adds a new feed"
if method=='on_update':
subject, color = feed_dict.get(doc.doctype, [None, None])
- if subject:
- subject = subject % doc.fields
-
- make_feed(doc, subject, color)
+ if subject:
+ make_feed('', doc.doctype, doc.name, doc.owner, subject % doc.fields, color)
diff --git a/erpnext/home/doctype/feed/feed.txt b/erpnext/home/doctype/feed/feed.txt
index 5aa4f91..f239f7c 100644
--- a/erpnext/home/doctype/feed/feed.txt
+++ b/erpnext/home/doctype/feed/feed.txt
@@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
- 'creation': '2011-04-08 10:50:41',
+ 'creation': '2011-04-06 18:11:38',
'docstatus': 0,
- 'modified': '2011-04-05 09:16:57',
+ 'modified': '2012-02-03 11:28:16',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
@@ -14,18 +14,18 @@
{
'autoname': '_FEED.#####',
'colour': 'White:FFF',
+ 'default_print_format': 'Standard',
'doctype': 'DocType',
'module': 'Home',
'name': '__common__',
'section_style': 'Simple',
'show_in_menu': 0,
- 'version': 1
+ 'version': 2
},
# These values are common for all DocField
{
'doctype': 'DocField',
- 'fieldtype': 'Data',
'name': '__common__',
'parent': 'Feed',
'parentfield': 'fields',
@@ -42,8 +42,16 @@
# DocField
{
'doctype': 'DocField',
+ 'fieldname': 'feed_type',
+ 'fieldtype': 'Select',
+ 'label': 'Feed Type'
+ },
+
+ # DocField
+ {
+ 'doctype': 'DocField',
'fieldname': 'doc_type',
- 'idx': 1,
+ 'fieldtype': 'Data',
'label': 'Doc Type'
},
@@ -51,7 +59,7 @@
{
'doctype': 'DocField',
'fieldname': 'doc_name',
- 'idx': 2,
+ 'fieldtype': 'Data',
'label': 'Doc Name'
},
@@ -59,7 +67,7 @@
{
'doctype': 'DocField',
'fieldname': 'subject',
- 'idx': 3,
+ 'fieldtype': 'Data',
'label': 'Subject'
},
@@ -67,7 +75,7 @@
{
'doctype': 'DocField',
'fieldname': 'color',
- 'idx': 4,
+ 'fieldtype': 'Data',
'label': 'Color'
}
]
\ No newline at end of file
diff --git a/erpnext/home/page/event_updates/event_updates.js b/erpnext/home/page/event_updates/event_updates.js
index 784577a..90aef9e 100644
--- a/erpnext/home/page/event_updates/event_updates.js
+++ b/erpnext/home/page/event_updates/event_updates.js
@@ -456,7 +456,7 @@
this.list = new wn.widgets.Listing({
parent: this.list_area,
query: repl('select \
- distinct t1.name, t1.doc_type, t1.doc_name, t1.subject, t1.modified_by, \
+ distinct t1.name, t1.feed_type, t1.doc_type, t1.doc_name, t1.subject, t1.modified_by, \
concat(ifnull(t2.first_name,""), " ", ifnull(t2.last_name,"")) as full_name, \
t1.modified, t1.color \
from tabFeed t1, tabProfile t2, tabUserRole t3, tabDocPerm t4 \
@@ -495,13 +495,11 @@
this.tab = make_table(this.wrapper, 1, 2, '100%', [(100/7)+'%', (600/7)+'%']);
$y(this.tab,{tableLayout:'fixed'})
- // image
$y($td(this.tab,0,0),{textAlign:'right',paddingRight:'4px'});
// text
this.text_area = $a($td(this.tab,0,1), 'div');
- this.render_references(this.text_area, det);
-
+ this.render_references(this.text_area, det);
this.render_tag(det);
// add day separator
@@ -537,13 +535,21 @@
// -------------------------------------------------
FeedItem.prototype.render_tag = function(det) {
+ // type is the name
tag = $a($td(this.tab,0,0), 'div', '',
- {color:'#FFF', padding:'3px', textAlign:'right', fontSize:'11px', whiteSpace:'nowrap', overflow:'hidden', cursor:'pointer'});
+ {color:'#FFF', padding:'3px', textAlign:'right', fontSize:'11px',
+ whiteSpace:'nowrap', overflow:'hidden', cursor:'pointer'});
$br(tag,'3px');
$y(tag, {backgroundColor:(det.color || '#273')});
- tag.innerHTML = get_doctype_label(det.doc_type);
- tag.dt = det.doc_type;
- tag.onclick = function() { loaddocbrowser(this.dt); }
+
+ // tag label
+ tag.innerHTML = det.feed_type || get_doctype_label(det.doc_type);
+
+ // not comment / label
+ if(!det.feed_type) {
+ tag.dt = det.doc_type;
+ tag.onclick = function() { loaddocbrowser(this.dt); }
+ }
}
FeedItem.prototype.render_references = function(div, det) {
@@ -552,10 +558,15 @@
var dt = det.doc_type; var dn = det.doc_name
// link
- var allow = in_list(profile.can_read, dt);
- var span = $a($td(div.tab,0,0), 'span', (allow ? 'link_type': ''), null, det.doc_name);
- span.dt = dt; span.dn = dn;
- if(allow) span.onclick = function() { loaddoc(this.dt, this.dn); }
+ if(det.feed_type=='Login') {
+ // nothing - no link
+ } else {
+ var allow = in_list(profile.can_read, dt);
+ var span = $a($td(div.tab,0,0), 'span', (allow ? 'link_type': ''), null,
+ det.doc_name);
+ span.dt = dt; span.dn = dn;
+ if(allow) span.onclick = function() { loaddoc(this.dt, this.dn); }
+ }
// subject
if(det.subject) {
diff --git a/erpnext/home/page/my_company/my_company.js b/erpnext/home/page/my_company/my_company.js
index e85623f..298b313 100644
--- a/erpnext/home/page/my_company/my_company.js
+++ b/erpnext/home/page/my_company/my_company.js
@@ -858,7 +858,7 @@
var t = make_table($td(tbl, ridx, cidx),1,2,null,['16px', null],{marginRight:'5px'});
var ic = $a($td(t,0,0), 'img','',{cursor:'pointer', marginRight:'5px'});
- ic.src= 'lib/images/icons/help.gif';
+ ic.src= 'lib/images/icons/help.png';
ic.role = role;
ic.onclick = function(){
diff --git a/erpnext/patches/jan_mar_2012/latest/__init__.py b/erpnext/patches/jan_mar_2012/latest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/latest/__init__.py
diff --git a/erpnext/patches/jan_mar_2012/latest/cleanups.py b/erpnext/patches/jan_mar_2012/latest/cleanups.py
new file mode 100644
index 0000000..9a78a70
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/latest/cleanups.py
@@ -0,0 +1,35 @@
+import webnotes
+
+def execute():
+ from webnotes.model import delete_doc
+ from webnotes.modules import reload_doc
+ delete_doc("DocType", "SSO Control")
+ delete_doc("DocType", "WN ERP Client Control")
+ delete_doc("DocType", "Production Tips Common")
+ delete_doc("DocType", "DocTrigger")
+ delete_doc("Page", "Setup Wizard")
+
+ # cleanup control panel
+ delete_doc("DocType", "Control Panel")
+ reload_doc("core", "doctype", "control_panel")
+
+ # cleanup page
+ delete_doc("DocType", "Page")
+ reload_doc("core", "doctype", "page")
+
+ webnotes.conn.sql("""delete from tabSingles
+ where field like 'startup_%' and doctype='Control Panel'""")
+ webnotes.conn.sql("""delete from __SessionCache""")
+
+ webnotes.conn.commit()
+
+ # DDLs
+ # -------------------
+
+ webnotes.conn.sql("drop table if exists tabDocTrigger")
+
+ try: webnotes.conn.sql("""alter table `tabFile Data` drop column blob_content""")
+ except: pass
+
+ webnotes.conn.sql("""alter table __PatchLog engine=InnoDB""")
+
diff --git a/erpnext/patches/jan_mar_2012/latest/feed.py b/erpnext/patches/jan_mar_2012/latest/feed.py
new file mode 100644
index 0000000..c913c49
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/latest/feed.py
@@ -0,0 +1,6 @@
+import webnotes
+from webnotes.model.doc import Document
+from webnotes.modules import reload_doc
+
+def execute():
+ reload_doc('home', 'doctype', 'feed')
\ No newline at end of file
diff --git a/erpnext/patches/jan_mar_2012/latest/login.py b/erpnext/patches/jan_mar_2012/latest/login.py
new file mode 100644
index 0000000..97cd323
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/latest/login.py
@@ -0,0 +1,19 @@
+import webnotes
+from webnotes.model.doc import Document
+from webnotes.modules import reload_doc
+
+def execute():
+ add_default_home_page()
+ reload_doc('setup','doctype','manage_account')
+
+
+def add_default_home_page():
+ if not webnotes.conn.sql("""select name from `tabDefault Home Page`
+ where role='Guest' and home_page='Login Page'"""):
+ d = Document('Default Home Page')
+ d.parent = 'Control Panel'
+ d.parenttype = 'Control Panel'
+ d.parentfield = 'default_home_pages'
+ d.role = 'Guest'
+ d.home_page = 'Login Page'
+ d.save(1)
diff --git a/erpnext/patches/jan_mar_2012/latest/website.py b/erpnext/patches/jan_mar_2012/latest/website.py
new file mode 100644
index 0000000..9c930e2
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/latest/website.py
@@ -0,0 +1,67 @@
+# website patch
+
+import webnotes
+from webnotes.model.doc import Document
+
+def execute():
+ add_website_manager()
+ from webnotes.modules import reload_doc
+ from webnotes.model import delete_doc
+
+ reload_doc('setup', 'doctype', 'item_group')
+ delete_doc('Website', 'Module Def', 'Website')
+ reload_doc('website', 'Module Def', 'Website')
+ reload_doc('website', 'Role', 'Website Manager')
+
+ webnotes.conn.sql("""delete from `tabModule Def Role` where parent='Website'""")
+ d = Document('Module Def Role')
+ d.parent = 'Website'
+ d.role = 'Website Manager'
+ d.save()
+
+ reload_doc('website', 'doctype', 'about_us_settings')
+ reload_doc('website', 'doctype', 'about_us_team')
+ reload_doc('website', 'doctype', 'blog')
+ reload_doc('website', 'doctype', 'blog_subscriber')
+ reload_doc('website', 'doctype', 'contact_us_settings')
+ reload_doc('website', 'doctype', 'product')
+ reload_doc('website', 'doctype', 'product_group')
+ reload_doc('website', 'doctype', 'products_settings')
+ reload_doc('website', 'doctype', 'related_page')
+ reload_doc('website', 'doctype', 'style_settings')
+ reload_doc('website', 'doctype', 'top_bar_item')
+ reload_doc('website', 'doctype', 'web_page')
+ reload_doc('website', 'doctype', 'website_settings')
+
+ reload_doc('website', 'page', 'about')
+ reload_doc('website', 'page', 'blog')
+ reload_doc('website', 'page', 'contact')
+ reload_doc('website', 'page', 'products')
+ reload_doc('website', 'page', 'unsubscribe')
+
+ create_home_page()
+
+def create_home_page():
+ """create a dummy home page"""
+ from webnotes.model.code import get_obj
+ if not webnotes.conn.sql("""select name from `tabWeb Page` where name='home'"""):
+ d = Document('Web Page')
+ d.title = 'Home'
+ d.head_section = "<h1>Your Headline</h1>"
+ d.main_section = "<p>Some introduction about your company</p>"
+ d.side_section = "<p>Links to other pages</p>"
+ d.save()
+ obj = get_obj(doc = d)
+ obj.validate()
+ obj.doc.save()
+
+def add_website_manager():
+ """add website manager to system manager"""
+ for i in webnotes.conn.sql("""select distinct parent from tabUserRole
+ where role='System Manager'"""):
+ if not webnotes.conn.sql("""select parent from tabUserRole
+ where role='Website Manager' and parent=%s""", i[0]):
+ d = Document('UserRole')
+ d.parent = i[0]
+ d.role = 'Website Manager'
+ d.save(1)
diff --git a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py b/erpnext/patches/jan_mar_2012/subdomain_login_patch.py
deleted file mode 100644
index fcf72dc..0000000
--- a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import webnotes
-from webnotes.model.doc import Document
-from webnotes.modules import reload_doc
-
-def execute():
- add_default_home_page()
- reload_doc('setup','doctype','manage_account')
- webnotes.conn.commit()
- webnotes.conn.sql("drop table if exists tabDocTrigger")
- cleanup()
-
-def cleanup():
- webnotes.conn.begin()
- from webnotes.model import delete_doc
- delete_doc("DocType", "SSO Control")
- delete_doc("DocType", "WN ERP Client Control")
- delete_doc("DocType", "Production Tips Common")
- delete_doc("DocType", "DocTrigger")
-
- # cleanup control panel
- delete_doc("DocType", "Control Panel")
- reload_doc("core", "doctype", "control_panel")
-
- # cleanup page
- delete_doc("DocType", "Page")
- reload_doc("core", "doctype", "page")
-
- webnotes.conn.sql("""delete from tabSingles
- where field like 'startup_%' and doctype='Control Panel'""")
-
-def add_default_home_page():
- if not webnotes.conn.sql("""select name from `tabDefault Home Page`
- where role='Guest' and home_page='Login Page'"""):
- d = Document('Default Home Page')
- d.parent = 'Control Panel'
- d.parenttype = 'Control Panel'
- d.parentfield = 'default_home_pages'
- d.role = 'Guest'
- d.home_page = 'Login Page'
- d.save(1)
diff --git a/erpnext/patches/jan_mar_2012/website.py b/erpnext/patches/jan_mar_2012/website.py
deleted file mode 100644
index 2d25e1f..0000000
--- a/erpnext/patches/jan_mar_2012/website.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# website patch
-
-import webnotes
-from webnotes.model.doc import Document
-
-def execute():
- add_website_manager()
- cleanup_file_data()
- update_patch_log()
- from webnotes.modules import reload_doc
- reload_doc('website', 'Role', 'Website Manager')
- reload_doc('website', 'Module Def', 'Website')
- reload_doc('website', 'doctype', 'website_settings')
- reload_doc('website', 'doctype', 'style_settings')
- reload_doc('website', 'doctype', 'top_bar_item')
- reload_doc('website', 'doctype', 'contact_us_settings')
- reload_doc('website', 'doctype', 'about_us_settings')
- reload_doc('website', 'doctype', 'products_settings')
- reload_doc('website', 'doctype', 'blog')
- reload_doc('website', 'doctype', 'blog_subscriber')
- reload_doc('website', 'doctype', 'product')
- reload_doc('website', 'doctype', 'web_page')
-
- reload_doc('website', 'page', 'contact')
- reload_doc('website', 'page', 'about')
- reload_doc('website', 'page', 'blog')
- reload_doc('website', 'page', 'unsubscribe')
- reload_doc('website', 'page', 'products')
-
-def add_website_manager():
- """add website manager to system manager"""
- for i in webnotes.conn.sql("""select distinct parent from tabUserRole
- where role='System Manager'"""):
- if not webnotes.conn.sql("""select parent from tabUserRole
- where role='Website Manager' and parent=%s""", i[0]):
- d = Document('UserRole')
- d.parent = i[0]
- d.role = 'Website Manager'
- d.save(1)
-
-def cleanup_file_data():
- webnotes.conn.commit()
- webnotes.conn.sql("""alter table `tabFile Data` drop column blob_content""")
- webnotes.conn.begin()
-
-def update_patch_log():
- webnotes.conn.commit()
- webnotes.conn.sql("""alter table __PatchLog engine=InnoDB""")
- webnotes.conn.begin()
diff --git a/erpnext/selling/page/sales_browser/sales_browser.js b/erpnext/selling/page/sales_browser/sales_browser.js
index d2ba627..c7e400e 100644
--- a/erpnext/selling/page/sales_browser/sales_browser.js
+++ b/erpnext/selling/page/sales_browser/sales_browser.js
@@ -140,7 +140,7 @@
var has_children = true;
if(cl[i].is_group=='No') {
- var imgsrc = 'lib/images/icons/page.gif';
+ var imgsrc = 'lib/images/icons/page.png';
has_children = false;
}
var t = me.tree.addNode(n, cl[i].name, imgsrc,me.tree.std_onclick, has_children ? me.tree.std_onexp : null);
@@ -220,7 +220,7 @@
var has_children = true;
if(cl[i].is_group=='No') {
- var imgsrc = 'lib/images/icons/page.gif';
+ var imgsrc = 'lib/images/icons/page.png';
has_children = false;
}
me.tree_area.innerHTML = '';
diff --git a/erpnext/setup/doctype/item_group/item_group.txt b/erpnext/setup/doctype/item_group/item_group.txt
index 2e0731c..7c3e928 100644
--- a/erpnext/setup/doctype/item_group/item_group.txt
+++ b/erpnext/setup/doctype/item_group/item_group.txt
@@ -5,54 +5,54 @@
{
'creation': '2010-08-08 17:09:06',
'docstatus': 0,
- 'modified': '2012-01-30 12:14:30',
- 'modified_by': 'Administrator',
- 'owner': 'Administrator'
+ 'modified': '2012-02-06 17:38:00',
+ 'modified_by': u'Administrator',
+ 'owner': u'Administrator'
},
# These values are common for all DocType
{
- '_last_update': '1322549700',
+ '_last_update': u'1322549700',
'allow_trash': 1,
- 'autoname': 'field:item_group_name',
- 'colour': 'White:FFF',
- 'default_print_format': 'Standard',
+ 'autoname': u'field:item_group_name',
+ 'colour': u'White:FFF',
+ 'default_print_format': u'Standard',
'doctype': 'DocType',
- 'document_type': 'Master',
+ 'document_type': u'Master',
'in_create': 1,
'issingle': 0,
- 'module': 'Setup',
+ 'module': u'Setup',
'name': '__common__',
- 'search_fields': 'parent_item_group',
- 'section_style': 'Simple',
- 'server_code_error': ' ',
+ 'search_fields': u'parent_item_group',
+ 'section_style': u'Simple',
+ 'server_code_error': u' ',
'show_in_menu': 0,
- 'version': 57
+ 'version': 58
},
# These values are common for all DocField
{
- 'doctype': 'DocField',
+ 'doctype': u'DocField',
'name': '__common__',
- 'parent': 'Item Group',
- 'parentfield': 'fields',
- 'parenttype': 'DocType'
+ 'parent': u'Item Group',
+ 'parentfield': u'fields',
+ 'parenttype': u'DocType'
},
# These values are common for all DocPerm
{
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'name': '__common__',
- 'parent': 'Item Group',
- 'parentfield': 'permissions',
- 'parenttype': 'DocType',
+ 'parent': u'Item Group',
+ 'parentfield': u'permissions',
+ 'parenttype': u'DocType',
'read': 1
},
# DocType, Item Group
{
'doctype': 'DocType',
- 'name': 'Item Group'
+ 'name': u'Item Group'
},
# DocPerm
@@ -60,9 +60,9 @@
'amend': 0,
'cancel': 0,
'create': 0,
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 1,
- 'role': 'Material Manager',
+ 'role': u'Material Manager',
'submit': 0,
'write': 0
},
@@ -72,9 +72,9 @@
'amend': 0,
'cancel': 0,
'create': 0,
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 0,
- 'role': 'Material Manager',
+ 'role': u'Material Manager',
'submit': 0,
'write': 0
},
@@ -84,9 +84,9 @@
'amend': 0,
'cancel': 0,
'create': 0,
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 1,
- 'role': 'Material User',
+ 'role': u'Material User',
'submit': 0,
'write': 0
},
@@ -96,9 +96,9 @@
'amend': 0,
'cancel': 0,
'create': 0,
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 0,
- 'role': 'Material User',
+ 'role': u'Material User',
'submit': 0,
'write': 0
},
@@ -107,9 +107,9 @@
{
'cancel': 1,
'create': 1,
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 0,
- 'role': 'System Manager',
+ 'role': u'System Manager',
'write': 1
},
@@ -117,87 +117,98 @@
{
'cancel': 1,
'create': 1,
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 0,
- 'role': 'Material Master Manager',
+ 'role': u'Material Master Manager',
'write': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'item_group_name',
- 'fieldtype': 'Data',
- 'label': 'Item Group Name',
- 'oldfieldname': 'item_group_name',
- 'oldfieldtype': 'Data',
+ 'doctype': u'DocField',
+ 'fieldname': u'item_group_name',
+ 'fieldtype': u'Data',
+ 'label': u'Item Group Name',
+ 'oldfieldname': u'item_group_name',
+ 'oldfieldtype': u'Data',
'permlevel': 0,
'reqd': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'description',
- 'fieldtype': 'Text',
- 'label': 'Description',
- 'oldfieldname': 'description',
- 'oldfieldtype': 'Text',
+ 'doctype': u'DocField',
+ 'fieldname': u'description',
+ 'fieldtype': u'Text',
+ 'label': u'Description',
+ 'oldfieldname': u'description',
+ 'oldfieldtype': u'Text',
'permlevel': 0,
- 'width': '300px'
+ 'width': u'300px'
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'parent_item_group',
- 'fieldtype': 'Link',
- 'label': 'Parent Item Group',
- 'oldfieldname': 'parent_item_group',
- 'oldfieldtype': 'Link',
- 'options': 'Item Group',
+ 'colour': u'White:FFF',
+ 'description': u'Check this if you want to show in website',
+ 'doctype': u'DocField',
+ 'fieldname': u'show_in_website',
+ 'fieldtype': u'Check',
+ 'label': u'Show in Website',
+ 'permlevel': 0
+ },
+
+ # DocField
+ {
+ 'doctype': u'DocField',
+ 'fieldname': u'parent_item_group',
+ 'fieldtype': u'Link',
+ 'label': u'Parent Item Group',
+ 'oldfieldname': u'parent_item_group',
+ 'oldfieldtype': u'Link',
+ 'options': u'Item Group',
'permlevel': 0,
'reqd': 1,
- 'trigger': 'Client'
+ 'trigger': u'Client'
},
# DocField
{
- 'colour': 'White:FFF',
- 'description': 'Only leaf nodes are allowed in transaction',
- 'doctype': 'DocField',
- 'fieldname': 'is_group',
- 'fieldtype': 'Select',
- 'label': 'Has Child Node',
- 'oldfieldname': 'is_group',
- 'oldfieldtype': 'Select',
- 'options': '\nYes\nNo',
+ 'colour': u'White:FFF',
+ 'description': u'Only leaf nodes are allowed in transaction',
+ 'doctype': u'DocField',
+ 'fieldname': u'is_group',
+ 'fieldtype': u'Select',
+ 'label': u'Has Child Node',
+ 'oldfieldname': u'is_group',
+ 'oldfieldtype': u'Select',
+ 'options': u'\nYes\nNo',
'permlevel': 0,
'reqd': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'trash_reason',
- 'fieldtype': 'Small Text',
- 'label': 'Trash Reason',
- 'oldfieldname': 'trash_reason',
- 'oldfieldtype': 'Small Text',
+ 'doctype': u'DocField',
+ 'fieldname': u'trash_reason',
+ 'fieldtype': u'Small Text',
+ 'label': u'Trash Reason',
+ 'oldfieldname': u'trash_reason',
+ 'oldfieldtype': u'Small Text',
'permlevel': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'lft',
- 'fieldtype': 'Int',
+ 'doctype': u'DocField',
+ 'fieldname': u'lft',
+ 'fieldtype': u'Int',
'hidden': 1,
'in_filter': 1,
- 'label': 'lft',
+ 'label': u'lft',
'no_copy': 1,
- 'oldfieldname': 'lft',
- 'oldfieldtype': 'Int',
+ 'oldfieldname': u'lft',
+ 'oldfieldtype': u'Int',
'permlevel': 0,
'print_hide': 1,
'report_hide': 0,
@@ -206,15 +217,15 @@
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'rgt',
- 'fieldtype': 'Int',
+ 'doctype': u'DocField',
+ 'fieldname': u'rgt',
+ 'fieldtype': u'Int',
'hidden': 1,
'in_filter': 1,
- 'label': 'rgt',
+ 'label': u'rgt',
'no_copy': 1,
- 'oldfieldname': 'rgt',
- 'oldfieldtype': 'Int',
+ 'oldfieldname': u'rgt',
+ 'oldfieldtype': u'Int',
'permlevel': 0,
'print_hide': 1,
'report_hide': 0,
@@ -223,17 +234,17 @@
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'old_parent',
- 'fieldtype': 'Link',
+ 'doctype': u'DocField',
+ 'fieldname': u'old_parent',
+ 'fieldtype': u'Link',
'hidden': 1,
- 'label': 'old_parent',
+ 'label': u'old_parent',
'no_copy': 1,
- 'oldfieldname': 'old_parent',
- 'oldfieldtype': 'Data',
- 'options': 'Item Group',
+ 'oldfieldname': u'old_parent',
+ 'oldfieldtype': u'Data',
+ 'options': u'Item Group',
'permlevel': 0,
'print_hide': 1,
'report_hide': 1
}
-]
\ No newline at end of file
+]
diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index d9fb451..3c6281f 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -1,18 +1,18 @@
import webnotes
import webnotes.defs
from webnotes.utils import cint
+import home
def on_login(login_manager):
"""
called from login manager, before login
"""
- try:
- if login_manager.user not in ('Guest', None, ''):
+ if login_manager.user not in ('Guest', None, ''):
+ try:
import server_tools.gateway_utils
server_tools.gateway_utils.check_login(login_manager.user)
- except ImportError:
- pass
-
+ except ImportError:
+ pass
def on_login_post_session(login_manager):
"""
@@ -29,9 +29,21 @@
sid!=%s""", \
(webnotes.session['user'], webnotes.session['sid']), as_list=1)
+ if webnotes.session['user'] not in ('Guest'):
+ # create feed
+ from webnotes.utils import nowtime
+ home.make_feed('Login', 'Profile', login_manager.user, login_manager.user,
+ '%s logged in at %s' % (login_manager.user_fullname, nowtime()),
+ login_manager.user=='Administrator' and '#8CA2B3' or '#1B750D')
+
+def comment_added(doc):
+ """add comment to feed"""
+ import json
+ home.make_feed('Comment', doc.comment_doctype, doc.comment_docname, doc.comment_by,
+ '<i>"' + doc.comment + '"</i>', '#6B24B3')
+
def doclist_all(doc, method):
"""doclist trigger called from webnotes.model.doclist on any event"""
- import home
home.update_feed(doc, method)
def boot_session(bootinfo):
@@ -41,7 +53,7 @@
if webnotes.session['user']=='Guest':
bootinfo['website_settings'] = webnotes.model.doc.getsingle('Website Settings')
- bootinfo['website_menus'] = webnotes.conn.sql("""select label, std_page, custom_page,
+ bootinfo['website_menus'] = webnotes.conn.sql("""select label, url, custom_page,
parent_label, parentfield
from `tabTop Bar Item` where parent='Website Settings' order by idx asc""", as_dict=1)
bootinfo['custom_css'] = webnotes.conn.get_value('Style Settings', None, 'custom_css') or ''
@@ -51,5 +63,6 @@
def get_letter_heads():
"""load letter heads with startup"""
import webnotes
- ret = webnotes.conn.sql("select name, content from `tabLetter Head` where ifnull(disabled,0)=0")
+ ret = webnotes.conn.sql("""select name, content from `tabLetter Head`
+ where ifnull(disabled,0)=0""")
return dict(ret)
diff --git a/erpnext/website/Role/Website Manager/Website Manager.txt b/erpnext/website/Role/Website Manager/Website Manager.txt
new file mode 100644
index 0000000..ad1ad9a
--- /dev/null
+++ b/erpnext/website/Role/Website Manager/Website Manager.txt
@@ -0,0 +1,26 @@
+# Role, Website Manager
+[
+
+ # These values are common in all dictionaries
+ {
+ 'creation': '2012-01-24 10:18:47',
+ 'docstatus': 0,
+ 'modified': '2012-02-06 15:22:27',
+ 'modified_by': u'Administrator',
+ 'owner': u'Administrator'
+ },
+
+ # These values are common for all Role
+ {
+ 'doctype': 'Role',
+ 'module': u'Website',
+ 'name': '__common__',
+ 'role_name': u'Website Manager'
+ },
+
+ # Role, Website Manager
+ {
+ 'doctype': 'Role',
+ 'name': u'Website Manager'
+ }
+]
\ No newline at end of file
diff --git a/erpnext/website/doctype/about_us_settings/about_us_settings.py b/erpnext/website/doctype/about_us_settings/about_us_settings.py
index 8a31ff0..770f1d2 100644
--- a/erpnext/website/doctype/about_us_settings/about_us_settings.py
+++ b/erpnext/website/doctype/about_us_settings/about_us_settings.py
@@ -14,11 +14,11 @@
path = os.path.join(os.path.dirname(__file__), 'template.html')
self.doc.about_team = webnotes.conn.sql("""select * from `tabAbout Us Team`
- where parent='About Us Settings'""", as_dict=1)
+ where parent='About Us Settings' order by idx""", as_dict=1)
import markdown2
for t in self.doc.about_team:
- t['bio'] = markdown2.markdown(t['bio'])
+ t['bio'] = markdown2.markdown(t.get('bio') or '')
webnotes.conn.set_value('Page', 'about', 'title', self.doc.headline)
webnotes.conn.set_value('Page', 'about', 'content', make_template(self.doc, path))
diff --git a/erpnext/website/doctype/product/product.py b/erpnext/website/doctype/product/product.py
index 935d762..5880d34 100644
--- a/erpnext/website/doctype/product/product.py
+++ b/erpnext/website/doctype/product/product.py
@@ -1,3 +1,5 @@
+import webnotes
+
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
@@ -24,4 +26,14 @@
website.utils.add_guest_access_to_page(p.name)
self.doc.page_name = p.name
- del self.doc.fields['long_description_html']
\ No newline at end of file
+ del self.doc.fields['long_description_html']
+ self.make_item_group_active()
+
+
+ def make_item_group_active(self):
+ """show item group in website"""
+ if self.doc.published:
+ from webnotes.model.doc import Document
+ ig = Document('Item Group', webnotes.conn.get_value('Item', self.doc.item, 'item_group'))
+ ig.show_in_website = 1
+ ig.save()
diff --git a/erpnext/website/doctype/product/product.txt b/erpnext/website/doctype/product/product.txt
index fac4cfb..6258691 100644
--- a/erpnext/website/doctype/product/product.txt
+++ b/erpnext/website/doctype/product/product.txt
@@ -5,245 +5,245 @@
{
'creation': '2012-01-30 16:21:29',
'docstatus': 0,
- 'modified': '2012-01-31 13:46:23',
- 'modified_by': 'Administrator',
- 'owner': 'Administrator'
+ 'modified': '2012-02-06 16:15:29',
+ 'modified_by': u'Administrator',
+ 'owner': u'Administrator'
},
# These values are common for all DocType
{
- '_last_update': '1327995660',
+ '_last_update': u'1327997783',
'allow_attach': 1,
- 'autoname': 'field:item',
- 'colour': 'White:FFF',
- 'description': 'A Product is shown on the website and is linked to an item.',
+ 'autoname': u'field:item',
+ 'colour': u'White:FFF',
+ 'description': u'A Product is shown on the website and is linked to an item.',
'doctype': 'DocType',
'max_attachments': 5,
- 'module': 'Website',
+ 'module': u'Website',
'name': '__common__',
- 'section_style': 'Simple',
+ 'section_style': u'Simple',
'show_in_menu': 0,
- 'version': 10
+ 'version': 11
},
# These values are common for all DocField
{
- 'doctype': 'DocField',
+ 'doctype': u'DocField',
'name': '__common__',
- 'parent': 'Product',
- 'parentfield': 'fields',
- 'parenttype': 'DocType'
+ 'parent': u'Product',
+ 'parentfield': u'fields',
+ 'parenttype': u'DocType'
},
# These values are common for all DocPerm
{
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'name': '__common__',
- 'parent': 'Product',
- 'parentfield': 'permissions',
- 'parenttype': 'DocType',
+ 'parent': u'Product',
+ 'parentfield': u'permissions',
+ 'parenttype': u'DocType',
'read': 1,
- 'role': 'Website Manager'
+ 'role': u'Website Manager'
},
# DocType, Product
{
'doctype': 'DocType',
- 'name': 'Product'
+ 'name': u'Product'
},
# DocPerm
{
'create': 1,
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 0,
'write': 1
},
# DocPerm
{
- 'doctype': 'DocPerm',
+ 'doctype': u'DocPerm',
'permlevel': 1
},
# DocField
{
- 'colour': 'White:FFF',
- 'doctype': 'DocField',
- 'fieldname': 'item',
- 'fieldtype': 'Link',
- 'label': 'Item',
- 'options': 'Item',
+ 'colour': u'White:FFF',
+ 'doctype': u'DocField',
+ 'fieldname': u'item',
+ 'fieldtype': u'Link',
+ 'label': u'Item',
+ 'options': u'Item',
'permlevel': 0,
'reqd': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'title',
- 'fieldtype': 'Link',
- 'label': 'Title',
+ 'doctype': u'DocField',
+ 'fieldname': u'title',
+ 'fieldtype': u'Data',
+ 'label': u'Title',
'permlevel': 0
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'published',
- 'fieldtype': 'Check',
- 'label': 'Published',
+ 'doctype': u'DocField',
+ 'fieldname': u'published',
+ 'fieldtype': u'Check',
+ 'label': u'Published',
'permlevel': 0
},
# DocField
{
- 'colour': 'White:FFF',
- 'description': 'Select Price List for the web. Leave blank to hide price.',
- 'doctype': 'DocField',
- 'fieldname': 'price_list',
- 'fieldtype': 'Link',
- 'label': 'Price List',
- 'options': 'Price List',
+ 'colour': u'White:FFF',
+ 'description': u'Select Price List for the web. Leave blank to hide price.',
+ 'doctype': u'DocField',
+ 'fieldname': u'price_list',
+ 'fieldtype': u'Link',
+ 'label': u'Price List',
+ 'options': u'Price List',
'permlevel': 0
},
# DocField
{
- 'colour': 'White:FFF',
- 'description': 'Select shipping warehouse to show "In Stock" or "Out of Stock". To hide, leave blank',
- 'doctype': 'DocField',
- 'fieldname': 'warehouse',
- 'fieldtype': 'Link',
- 'label': 'Warehouse',
- 'options': 'Warehouse',
+ 'colour': u'White:FFF',
+ 'description': u'Select shipping warehouse to show "In Stock" or "Out of Stock". To hide, leave blank',
+ 'doctype': u'DocField',
+ 'fieldname': u'warehouse',
+ 'fieldtype': u'Link',
+ 'label': u'Warehouse',
+ 'options': u'Warehouse',
'permlevel': 0
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldtype': 'Column Break',
+ 'doctype': u'DocField',
+ 'fieldtype': u'Column Break',
'permlevel': 0
},
# DocField
{
- 'colour': 'White:FFF',
- 'description': 'Image for listing (Width: 100px) (Attach First)',
- 'doctype': 'DocField',
- 'fieldname': 'thumbnail_image',
- 'fieldtype': 'Select',
- 'label': 'Thumbnail Image',
- 'options': 'attach_files:',
+ 'colour': u'White:FFF',
+ 'description': u'Image for listing (Width: 100px) (Attach First)',
+ 'doctype': u'DocField',
+ 'fieldname': u'thumbnail_image',
+ 'fieldtype': u'Select',
+ 'label': u'Thumbnail Image',
+ 'options': u'attach_files:',
'permlevel': 0
},
# DocField
{
- 'colour': 'White:FFF',
- 'description': 'Image for listing (Width: 300px) (Attach First)',
- 'doctype': 'DocField',
- 'fieldname': 'full_image',
- 'fieldtype': 'Select',
- 'label': 'Full Image',
- 'options': 'attach_files:',
+ 'colour': u'White:FFF',
+ 'description': u'Image for listing (Width: 300px) (Attach First)',
+ 'doctype': u'DocField',
+ 'fieldname': u'full_image',
+ 'fieldtype': u'Select',
+ 'label': u'Full Image',
+ 'options': u'attach_files:',
'permlevel': 0
},
# DocField
{
- 'colour': 'White:FFF',
- 'doctype': 'DocField',
- 'fieldname': 'short_description',
- 'fieldtype': 'Text',
- 'label': 'Short Description',
+ 'colour': u'White:FFF',
+ 'doctype': u'DocField',
+ 'fieldname': u'short_description',
+ 'fieldtype': u'Text',
+ 'label': u'Short Description',
'permlevel': 0,
'reqd': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldtype': 'Section Break',
+ 'doctype': u'DocField',
+ 'fieldtype': u'Section Break',
'permlevel': 0
},
# DocField
{
- 'colour': 'White:FFF',
- 'description': 'Full description (formatted as markdown)',
- 'doctype': 'DocField',
- 'fieldname': 'long_description',
- 'fieldtype': 'Code',
- 'label': 'Long Description',
+ 'colour': u'White:FFF',
+ 'description': u'Full description (formatted as markdown)',
+ 'doctype': u'DocField',
+ 'fieldname': u'long_description',
+ 'fieldtype': u'Code',
+ 'label': u'Long Description',
'permlevel': 0,
'reqd': 0
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldtype': 'Section Break',
+ 'doctype': u'DocField',
+ 'fieldtype': u'Section Break',
'permlevel': 0
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'page_name',
- 'fieldtype': 'Data',
- 'label': 'Page Name',
+ 'doctype': u'DocField',
+ 'fieldname': u'page_name',
+ 'fieldtype': u'Data',
+ 'label': u'Page Name',
'permlevel': 1
},
# DocField
{
- 'colour': 'White:FFF',
- 'doctype': 'DocField',
- 'fieldname': 'price',
- 'fieldtype': 'Currency',
+ 'colour': u'White:FFF',
+ 'doctype': u'DocField',
+ 'fieldname': u'price',
+ 'fieldtype': u'Currency',
'hidden': 0,
- 'label': 'Price',
+ 'label': u'Price',
'permlevel': 1
},
# DocField
{
- 'colour': 'White:FFF',
- 'doctype': 'DocField',
- 'fieldname': 'sales',
- 'fieldtype': 'Currency',
- 'label': 'Sales',
+ 'colour': u'White:FFF',
+ 'doctype': u'DocField',
+ 'fieldname': u'sales',
+ 'fieldtype': u'Currency',
+ 'label': u'Sales',
'permlevel': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'stock',
- 'fieldtype': 'Currency',
- 'label': 'Stock',
+ 'doctype': u'DocField',
+ 'fieldname': u'stock',
+ 'fieldtype': u'Currency',
+ 'label': u'Stock',
'permlevel': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'currency',
- 'fieldtype': 'Link',
- 'label': 'Currency',
- 'options': 'Currency',
+ 'doctype': u'DocField',
+ 'fieldname': u'currency',
+ 'fieldtype': u'Link',
+ 'label': u'Currency',
+ 'options': u'Currency',
'permlevel': 1
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'file_list',
- 'fieldtype': 'Text',
+ 'doctype': u'DocField',
+ 'fieldname': u'file_list',
+ 'fieldtype': u'Text',
'hidden': 1,
- 'label': 'File List',
+ 'label': u'File List',
'no_copy': 1,
'permlevel': 0,
'print_hide': 1
diff --git a/erpnext/website/doctype/related_page/related_page.txt b/erpnext/website/doctype/related_page/related_page.txt
index 3cb674f..67a30b7 100644
--- a/erpnext/website/doctype/related_page/related_page.txt
+++ b/erpnext/website/doctype/related_page/related_page.txt
@@ -5,45 +5,45 @@
{
'creation': '2012-02-01 16:16:47',
'docstatus': 0,
- 'modified': '2012-02-01 16:16:48',
- 'modified_by': 'Administrator',
- 'owner': 'Administrator'
+ 'modified': '2012-02-06 12:24:29',
+ 'modified_by': u'Administrator',
+ 'owner': u'Administrator'
},
# These values are common for all DocType
{
- 'colour': 'White:FFF',
+ 'colour': u'White:FFF',
'doctype': 'DocType',
'istable': 1,
- 'module': 'Website',
+ 'module': u'Website',
'name': '__common__',
- 'section_style': 'Simple',
+ 'section_style': u'Simple',
'show_in_menu': 0,
- 'version': 1
+ 'version': 3
},
# These values are common for all DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'page',
- 'fieldtype': 'Link',
- 'label': 'Page',
+ 'doctype': u'DocField',
+ 'fieldname': u'page',
+ 'fieldtype': u'Link',
+ 'label': u'Page',
'name': '__common__',
- 'options': 'Page',
- 'parent': 'Related Page',
- 'parentfield': 'fields',
- 'parenttype': 'DocType',
+ 'options': u'Page',
+ 'parent': u'Related Page',
+ 'parentfield': u'fields',
+ 'parenttype': u'DocType',
'permlevel': 0
},
# DocType, Related Page
{
'doctype': 'DocType',
- 'name': 'Related Page'
+ 'name': u'Related Page'
},
# DocField
{
- 'doctype': 'DocField'
+ 'doctype': u'DocField'
}
]
\ No newline at end of file
diff --git a/erpnext/website/doctype/top_bar_item/top_bar_item.txt b/erpnext/website/doctype/top_bar_item/top_bar_item.txt
index 410352c..3ff23b3 100644
--- a/erpnext/website/doctype/top_bar_item/top_bar_item.txt
+++ b/erpnext/website/doctype/top_bar_item/top_bar_item.txt
@@ -5,70 +5,69 @@
{
'creation': '2012-01-24 10:24:19',
'docstatus': 0,
- 'modified': '2012-01-30 14:14:48',
- 'modified_by': 'Administrator',
- 'owner': 'Administrator'
+ 'modified': '2012-02-07 10:35:19',
+ 'modified_by': u'Administrator',
+ 'owner': u'Administrator'
},
# These values are common for all DocType
{
- 'colour': 'White:FFF',
+ 'colour': u'White:FFF',
'doctype': 'DocType',
'istable': 1,
- 'module': 'Website',
+ 'module': u'Website',
'name': '__common__',
- 'section_style': 'Simple',
+ 'section_style': u'Simple',
'show_in_menu': 0,
- 'version': 2
+ 'version': 4
},
# These values are common for all DocField
{
- 'doctype': 'DocField',
+ 'doctype': u'DocField',
'name': '__common__',
- 'parent': 'Top Bar Item',
- 'parentfield': 'fields',
- 'parenttype': 'DocType',
+ 'parent': u'Top Bar Item',
+ 'parentfield': u'fields',
+ 'parenttype': u'DocType',
'permlevel': 0
},
# DocType, Top Bar Item
{
'doctype': 'DocType',
- 'name': 'Top Bar Item'
+ 'name': u'Top Bar Item'
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'label',
- 'fieldtype': 'Data',
- 'label': 'Label'
+ 'doctype': u'DocField',
+ 'fieldname': u'label',
+ 'fieldtype': u'Data',
+ 'label': u'Label'
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'std_page',
- 'fieldtype': 'Select',
- 'label': 'Std Page',
- 'options': 'Home\nAbout\nContact\nProducts\nBlog\nCustom'
+ 'doctype': u'DocField',
+ 'fieldname': u'custom_page',
+ 'fieldtype': u'Link',
+ 'label': u'Page',
+ 'options': u'Page'
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'custom_page',
- 'fieldtype': 'Link',
- 'label': 'Custom Page',
- 'options': 'Web Page'
+ 'doctype': u'DocField',
+ 'fieldname': u'url',
+ 'fieldtype': u'Data',
+ 'label': u'URL'
},
# DocField
{
- 'doctype': 'DocField',
- 'fieldname': 'parent_label',
- 'fieldtype': 'Select',
- 'label': 'Parent Label'
+ 'doctype': u'DocField',
+ 'fieldname': u'parent_label',
+ 'fieldtype': u'Select',
+ 'label': u'Parent Label'
}
]
\ No newline at end of file
diff --git a/erpnext/website/doctype/web_page/web_page.py b/erpnext/website/doctype/web_page/web_page.py
index 14a082b..8f7c38f 100644
--- a/erpnext/website/doctype/web_page/web_page.py
+++ b/erpnext/website/doctype/web_page/web_page.py
@@ -37,10 +37,13 @@
"title": webnotes.conn.get_value("Page", self.doc.next_page, "title")}
self.doc.see_also = ''
- for l in webnotes.conn.sql("""select distinct t1.page, t2.title from
- `tabRelated Page` t1, tabPage t2 where
- t1.page = t2.name order by t2.title""", as_dict=1):
- self.doc.see_also += """<p><a href="#!%(page)s">%(title)s</a></p>""" % l
+ for d in self.doclist:
+ if d.doctype=='Related Page':
+ tmp = {"page":d.page, "title":webnotes.conn.get_value('Page', d.page, 'title')}
+ self.doc.see_also += """<li><a href="#!%(page)s">%(title)s</a></li>""" % tmp
+
+ if self.doc.see_also:
+ self.doc.see_also = '<ul>%s</ul>' % self.doc.see_also
def cleanup_temp(self):
"""cleanup temp fields"""
diff --git a/erpnext/website/js/topbar.js b/erpnext/website/js/topbar.js
index 8a7870c..cffc825 100644
--- a/erpnext/website/js/topbar.js
+++ b/erpnext/website/js/topbar.js
@@ -37,7 +37,7 @@
for(var i=0;i<items.length;i++) {
var item = items[i];
if(!item.parent_label && item.parentfield=='top_bar_items') {
- item.route = item.std_page ? item.std_page.toLowerCase() : item.custom_page;
+ item.route = item.url || item.custom_page;
$('header .nav:first').append(repl('<li><a href="#!%(route)s" \
data-label="%(label)s">%(label)s</a></li>', item))
}
@@ -64,7 +64,7 @@
for(var i=0;i<items.length;i++) {
var item = items[i];
if(!item.parent_label && item.parentfield=='footer_items') {
- item.route = item.std_page ? item.std_page.toLowerCase() : item.custom_page;
+ item.route = item.url || item.custom_page;
$('.web-footer-menu ul').append(repl('<li><a href="#!%(route)s" \
data-label="%(label)s">%(label)s</a></li>', item))
}
@@ -72,4 +72,4 @@
}
});
-erpnext.footer = new erpnext.Footer();
\ No newline at end of file
+erpnext.footer = new erpnext.Footer();
diff --git a/erpnext/website/utils.py b/erpnext/website/utils.py
index 330f7a3..66be4d2 100644
--- a/erpnext/website/utils.py
+++ b/erpnext/website/utils.py
@@ -25,7 +25,8 @@
def page_name(title):
"""make page name from title, and check that there is no duplicate"""
import re
- name = re.sub('[~!@#$%^&*()<>,."\']', '', title.lower())
+ name = title.lower()
+ name = re.sub('[~!@#$%^&*()<>,."\']', '', name)
return '-'.join(name.split()[:4])
def add_page(title):
@@ -50,4 +51,4 @@
d = Document('Page Role')
d.parent = page
d.role = 'Guest'
- d.save()
\ No newline at end of file
+ d.save()
diff --git a/index.cgi b/index.cgi
index a119dae..bc1de92 100755
--- a/index.cgi
+++ b/index.cgi
@@ -19,7 +19,13 @@
webnotes.form_dict[key] = webnotes.form.getvalue(key)
# init request
- webnotes.http_request = webnotes.auth.HTTPRequest()
+ try:
+ webnotes.http_request = webnotes.auth.HTTPRequest()
+ except Exception, e:
+ if webnotes.response['message']=='Authentication Failed':
+ pass
+ else:
+ raise e
def respond():
import webnotes
@@ -34,4 +40,4 @@
if __name__=="__main__":
init()
- respond()
\ No newline at end of file
+ respond()
diff --git a/version.num b/version.num
index 6fa50e7..cf7ff50 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-353
+359
diff --git a/wnf.py b/wnf.py
new file mode 100755
index 0000000..355474f
--- /dev/null
+++ b/wnf.py
@@ -0,0 +1,134 @@
+#!/usr/bin/env python
+
+import os, sys
+
+def replace_code(start, txt1, txt2, extn):
+ """replace all txt1 by txt2 in files with extension (extn)"""
+ import os, re
+ for wt in os.walk(start, followlinks=1):
+ for fn in wt[2]:
+ if fn.split('.')[-1]==extn:
+ fpath = os.path.join(wt[0], fn)
+ with open(fpath, 'r') as f:
+ content = f.read()
+
+ if re.search(txt1, content):
+ a = raw_input('Change in %s [y/n]?' % fpath)
+ if a=='y':
+ with open(fpath, 'w') as f:
+ f.write(re.sub(txt1, txt2, content))
+
+ print 'updated in %s' % fpath
+
+def setup_options():
+ from optparse import OptionParser
+ parser = OptionParser()
+ parser.add_option("-b", "--build", default=False, action="store_true",
+ help="minify + concat js files")
+ parser.add_option("-c", "--clear", default=False, action="store_true",
+ help="increment version")
+ parser.add_option("--replace", nargs=3, default=False,
+ metavar = "search replace_by extension",
+ help="file search-replace")
+ parser.add_option("--status", default=False, action="store_true",
+ help="git status")
+ parser.add_option("--pull", nargs=2, default=False,
+ metavar = "remote branch",
+ help="git pull (both repos)")
+ parser.add_option("--push", nargs=3, default=False,
+ metavar = "remote branch comment",
+ help="git commit + push (both repos) [remote] [branch] [comment]")
+ parser.add_option("-l", "--latest",
+ action="store_true", dest="run_latest", default=False,
+ help="Apply the latest patches")
+ parser.add_option("-p", "--patch", nargs=1, dest="patch_list", metavar='patch_module',
+ action="append",
+ help="Apply patch")
+ parser.add_option("-f", "--force",
+ action="store_true", dest="force", default=False,
+ help="Force Apply all patches specified using option -p or --patch")
+ parser.add_option("-d", "--db",
+ dest="db_name",
+ help="Apply the patches on given db")
+ parser.add_option('--reload_doc', nargs=3, metavar = "module doctype docname",
+ help="reload doc")
+
+ return parser.parse_args()
+
+def run():
+ sys.path.append('lib')
+ sys.path.append('lib/py')
+ import webnotes
+ import webnotes.defs
+ sys.path.append(webnotes.defs.modules_path)
+
+ (options, args) = setup_options()
+
+
+ from webnotes.db import Database
+ import webnotes.modules.patch_handler
+
+ # connect
+ if options.db_name is not None:
+ webnotes.connect(options.db_name)
+
+ # build
+ if options.build:
+ import build.project
+ build.project.build()
+
+ elif options.clear:
+ from build.project import increment_version
+ print "Version:" + str(increment_version())
+
+ # code replace
+ elif options.replace:
+ replace_code('.', options.replace[0], options.replace[1], options.replace[2])
+
+ # git
+ elif options.status:
+ os.system('git status')
+ os.chdir('lib')
+ os.system('git status')
+
+ elif options.pull:
+ os.system('git pull %s %s' % (options.pull[0], options.pull[1]))
+ os.chdir('lib')
+ os.system('git pull %s %s' % (options.pull[0], options.pull[1]))
+
+ elif options.push:
+ os.system('git commit -a -m "%s"' % options.push[2])
+ os.system('git push %s %s' % (options.push[0], options.push[1]))
+ os.chdir('lib')
+ os.system('git commit -a -m "%s"' % options.push[2])
+ os.system('git push %s %s' % (options.push[0], options.push[1]))
+
+ # patch
+ elif options.patch_list:
+ # clear log
+ webnotes.modules.patch_handler.log_list = []
+
+ # run individual patches
+ for patch in options.patch_list:
+ webnotes.modules.patch_handler.run_single(\
+ patchmodule = patch, force = options.force)
+
+ print '\n'.join(webnotes.modules.patch_handler.log_list)
+
+ # reload
+ elif options.reload_doc:
+ webnotes.modules.patch_handler.reload_doc(\
+ {"module":options.reload_doc[0], "dt":options.reload_doc[1], "dn":options.reload_doc[2]})
+ print '\n'.join(webnotes.modules.patch_handler.log_list)
+
+ # run all pending
+ elif options.run_latest:
+ webnotes.modules.patch_handler.run_all()
+ print '\n'.join(webnotes.modules.patch_handler.log_list)
+
+ # print messages
+ if webnotes.message_log:
+ print '\n'.join(webnotes.message_log)
+
+if __name__=='__main__':
+ run()