Merge branch 'latest' of github.com:webnotes/erpnext into latest

Conflicts:
	version.num
This commit is contained in:
Anand Doshi 2012-02-07 10:59:29 +05:30
commit 67d2c8396c
27 changed files with 634 additions and 369 deletions

View File

@ -1,7 +0,0 @@
index_path = '/'
include_paths = [
'erpnext',
'lib/py',
'lib/py/legacy'
]

View File

@ -125,7 +125,7 @@ pscript.make_ac_tree = function() {
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 @@ pscript.make_ac_tree = function() {
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);

View File

@ -34,23 +34,33 @@ feed_dict = {
'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)

View File

@ -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',
@ -39,11 +39,19 @@
'name': 'Feed'
},
# 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'
}
]

View File

@ -456,7 +456,7 @@ FeedList.prototype.make_list = function() {
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 @@ FeedItem = function(cell, det, feedlist) {
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.add_day_sep = function(det) {
// -------------------------------------------------
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 @@ FeedItem.prototype.render_references = function(div, det) {
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) {

View File

@ -858,7 +858,7 @@ RoleObj.prototype.make_label = function(tbl, ridx, cidx, role){
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(){

View File

@ -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""")

View File

@ -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')

View File

@ -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)

View File

@ -5,28 +5,56 @@ 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')
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', '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', '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', 'products_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', 'contact')
reload_doc('website', 'page', 'about')
reload_doc('website', 'page', 'blog')
reload_doc('website', 'page', 'unsubscribe')
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
@ -37,13 +65,3 @@ def add_website_manager():
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()

View File

@ -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)

View File

@ -140,7 +140,7 @@ SalesBrowser.prototype.make_tree = function() {
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 @@ SalesBrowser.prototype.first_level_node = function(){
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 = '';

View File

@ -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
}
]
]

View File

@ -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 @@ def on_login_post_session(login_manager):
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 @@ def boot_session(bootinfo):
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 boot_session(bootinfo):
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)

View File

@ -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'
}
]

View File

@ -14,11 +14,11 @@ class DocType:
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))

View File

@ -1,3 +1,5 @@
import webnotes
class DocType:
def __init__(self, d, dl):
self.doc, self.doclist = d, dl
@ -24,4 +26,14 @@ class DocType:
website.utils.add_guest_access_to_page(p.name)
self.doc.page_name = p.name
del self.doc.fields['long_description_html']
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()

View File

@ -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

View File

@ -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'
}
]

View File

@ -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'
}
]

View File

@ -37,10 +37,13 @@ class DocType:
"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"""

View File

@ -37,7 +37,7 @@ erpnext.topbar.TopBar = Class.extend({
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 @@ erpnext.Footer = Class.extend({
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 = Class.extend({
}
});
erpnext.footer = new erpnext.Footer();
erpnext.footer = new erpnext.Footer();

View File

@ -25,7 +25,8 @@ def markdown(doc, fields):
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 @@ def add_guest_access_to_page(page):
d = Document('Page Role')
d.parent = page
d.role = 'Guest'
d.save()
d.save()

View File

@ -19,7 +19,13 @@ def init():
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 @@ def respond():
if __name__=="__main__":
init()
respond()
respond()

View File

@ -1 +1 @@
353
359

134
wnf.py Executable file
View File

@ -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()