messages
diff --git a/erpnext/home/__init__.py b/erpnext/home/__init__.py
index 721896a..2cca85a 100644
--- a/erpnext/home/__init__.py
+++ b/erpnext/home/__init__.py
@@ -58,7 +58,7 @@
"makes a new Feed record"
#msgprint(subject)
from webnotes.model.doc import Document
- from webnotes.utils import get_full_name
+ from webnotes.utils import get_fullname
if feedtype in ('Login', 'Comment', 'Assignment'):
# delete old login, comment feed
@@ -77,7 +77,7 @@
f.doc_name = name
f.subject = subject
f.color = color
- f.full_name = get_full_name(owner)
+ f.full_name = get_fullname(owner)
f.save()
def update_feed(doc, method=None):
diff --git a/erpnext/home/page/event_updates/event_updates.js b/erpnext/home/page/event_updates/event_updates.js
index ece59d2..d86a1d8 100644
--- a/erpnext/home/page/event_updates/event_updates.js
+++ b/erpnext/home/page/event_updates/event_updates.js
@@ -29,7 +29,7 @@
// ==================================
pscript.home_make_body = function() {
- var wrapper = page_body.pages['Event Updates'];
+ var wrapper = wn.pages['Event Updates'];
// body
$(wrapper).addClass('layout-wrapper').addClass('layout-wrapper-background')
@@ -47,7 +47,7 @@
// ==================================
pscript.home_set_banner = function(wrapper) {
- var wrapper = page_body.pages['Event Updates'];
+ var wrapper = wn.pages['Event Updates'];
var cp = wn.control_panel;
// banner
@@ -61,7 +61,7 @@
// ==================================
pscript.home_make_widgets = function() {
- var wrapper = page_body.pages['Event Updates'];
+ var wrapper = wn.pages['Event Updates'];
var cell = wrapper.side_section;
// sidebar
@@ -595,7 +595,7 @@
}
pscript.home_make_status = function() {
- var wrapper = page_body.pages['Event Updates'];
+ var wrapper = wn.pages['Event Updates'];
// get values
$c_page('home', 'event_updates', 'get_status_details', user,
@@ -625,7 +625,7 @@
$.extend(this, {
make: function(status) {
me.status = status;
- me.wrapper = page_body.pages['Event Updates'].setup_wizard_area;
+ me.wrapper = wn.pages['Event Updates'].setup_wizard_area;
$ds(me.wrapper);
me.make_percent(status.percent);
me.make_suggestion(status.ret);
diff --git a/erpnext/home/page/my_company/my_company.js b/erpnext/home/page/my_company/my_company.js
index 4225f56..775c89e 100644
--- a/erpnext/home/page/my_company/my_company.js
+++ b/erpnext/home/page/my_company/my_company.js
@@ -15,7 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pscript['onload_My Company'] = function() {
- var wrapper = page_body.pages['My Company'];
+ var wrapper = wn.pages['My Company'];
// body
wrapper.className = 'layout_wrapper';
@@ -112,7 +112,7 @@
}
pscript.myc_refresh = function() {
- page_body.pages['My Company'].member_list.lst.run();
+ wn.pages['My Company'].member_list.lst.run();
}
pscript.myc_make_list= function(wrapper) {
@@ -121,7 +121,7 @@
pscript.get_fullname=function(uid) {
if(uid=='Administrator') return uid;
- return page_body.pages['My Company'].member_list.member_items[uid].fullname;
+ return wn.pages['My Company'].member_list.member_items[uid].fullname;
}
@@ -740,7 +740,7 @@
this.user = $a(this.comment, 'span', 'link_type', {fontWeight:'bold'}, pscript.get_fullname(det.owner));
this.user.onclick = function() {
- page_body.pages['My Company'].member_list.show_profile(me.det.owner);
+ wn.pages['My Company'].member_list.show_profile(me.det.owner);
}
var st = (!det.docstatus ? {fontWeight: 'bold'} : null);
diff --git a/erpnext/home/page/profile_settings/profile_settings.js b/erpnext/home/page/profile_settings/profile_settings.js
index f38afd9..9dac7f6 100644
--- a/erpnext/home/page/profile_settings/profile_settings.js
+++ b/erpnext/home/page/profile_settings/profile_settings.js
@@ -15,7 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pscript['onload_profile-settings'] = function() {
- var wrapper = page_body.pages['profile-settings'];
+ var wrapper = wn.pages['profile-settings'];
wrapper.className = 'layout_wrapper';
pscript.myprofile = new MyProfile(wrapper)
}
diff --git a/erpnext/knowledge_base/page/question_view/question_view.js b/erpnext/knowledge_base/page/question_view/question_view.js
index fd401a4..5783471 100644
--- a/erpnext/knowledge_base/page/question_view/question_view.js
+++ b/erpnext/knowledge_base/page/question_view/question_view.js
@@ -28,7 +28,7 @@
}
pscript.question_view = function(qid, qtext) {
- var w = page_body.pages['question-view'];
+ var w = wn.pages['question-view'];
new KBQuestionView(w, qid, qtext);
}
diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index 6420e80..8a8791c 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -84,6 +84,7 @@
else:
bootinfo['letter_heads'] = get_letter_heads()
+ bootinfo['user_fullnames'] = get_fullnames()
import webnotes.model.doctype
bootinfo['docs'] += webnotes.model.doctype.get('Event')
@@ -95,6 +96,17 @@
where ifnull(disabled,0)=0""")
return dict(ret)
+def get_fullnames():
+ """map of user fullnames"""
+ ret = dict(webnotes.conn.sql("""select name,
+ concat(ifnull(first_name, ''),
+ if(ifnull(first_name, '')!='', ' ', ''), ifnull(last_name, ''))
+ from tabProfile where ifnull(enabled, 0)=1"""))
+ for key in ret:
+ if not ret[key]:
+ ret[key] = key
+
+ return ret
def login_as(login_manager):
"""
diff --git a/erpnext/startup/startup.js b/erpnext/startup/startup.js
index bf69aa7..0f584b3 100644
--- a/erpnext/startup/startup.js
+++ b/erpnext/startup/startup.js
@@ -16,8 +16,6 @@
var current_module;
var is_system_manager = 0;
-var module_content_dict = {};
-var user_full_nm = {};
wn.provide('erpnext.startup');
diff --git a/erpnext/utilities/page/messages/messages.css b/erpnext/utilities/page/messages/messages.css
index e69de29..81260ab 100644
--- a/erpnext/utilities/page/messages/messages.css
+++ b/erpnext/utilities/page/messages/messages.css
@@ -0,0 +1,35 @@
+#message-post-text {
+ height: 3em;
+}
+
+#message-list {
+ margin: 0px 40px;
+}
+
+.message {
+ border-radius: 5px;
+ max-width: 60%;
+ min-width: 40%;
+ padding: 7px;
+ margin-bottom: 7px;
+}
+
+.message .help {
+ margin-bottom: 0px;
+ padding-bottom: 0px;
+ color: #888;
+ font-size: 11px;
+}
+
+.message-other {
+ background-color: #EBFF9C;
+ border: 1px solid #C3CF78;
+ float: right;
+ text-align: right;
+}
+
+.message-self {
+ background-color: #eee;
+ border: 1px solid #ccc;
+ float: left;
+}
\ No newline at end of file
diff --git a/erpnext/utilities/page/messages/messages.html b/erpnext/utilities/page/messages/messages.html
index e69de29..b645d3f 100644
--- a/erpnext/utilities/page/messages/messages.html
+++ b/erpnext/utilities/page/messages/messages.html
@@ -0,0 +1,28 @@
+<div class="layout-wrapper layout-wrapper-background">
+ <div class="layout-main-section">
+ <a class="close" onclick="window.history.back();">×</a>
+ <h1>Messages</h1>
+ <div class="well">
+ <textarea id="message-post-text"></textarea>
+ <button disabled="disabled" id="message-post" class="btn btn-small"><i class="icon-play"></i> Post</button>
+ </div>
+ <div id="message-list">
+ </div>
+ </div>
+ <div class="layout-side-section">
+ <div class="psidebar">
+ <div class="section">
+ <div class="section-head">
+ Messages By
+ </div>
+ <div class="section-body">
+ <div class="section-item">
+ <a href="#!messages"><b>All messages</b></a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div style="clear: both;">
+ </div>
+</div>
\ No newline at end of file
diff --git a/erpnext/utilities/page/messages/messages.js b/erpnext/utilities/page/messages/messages.js
index e69de29..b59a212 100644
--- a/erpnext/utilities/page/messages/messages.js
+++ b/erpnext/utilities/page/messages/messages.js
@@ -0,0 +1,118 @@
+wn.provide('erpnext.messages');
+
+wn.pages.messages.onload = function(wrapper) {
+ erpnext.messages.show_active_users();
+ erpnext.messages.make_list();
+
+ // post message
+ $('#message-post').click(function() {
+ var txt = $('#message-post-text').val();
+ if(txt) {
+ wn.call({
+ module:'utilities',
+ page:'messages',
+ method:'post',
+ args: {
+ txt: txt,
+ contact: erpnext.messages.contact
+ },
+ callback:function(r,rt) {
+ $('#message-post-text').val('')
+ erpnext.messages.list.run();
+ },
+ btn: this
+ });
+ }
+ });
+
+ // enable, disable button
+ $('#message-post-text').keyup(function() {
+ if($(this).val()) {
+ $('#message-post').attr('disabled', false);
+ } else {
+ $('#message-post').attr('disabled', true);
+ }
+ })
+}
+
+wn.pages.messages.onshow = function(wrapper) {
+ erpnext.messages.show();
+ setTimeout(erpnext.messages.refresh, 5000);
+}
+
+erpnext.messages = {
+ show: function() {
+ var contact = erpnext.messages.get_contact();
+
+ // can't send message to self
+ $(wn.pages.messages).find('.well').toggle(contact==user ? false : true);
+
+ $(wn.pages.messages).find('h1:first').html('Messages: '
+ + (user==contact ? 'From everyone' : wn.boot.user_fullnames[contact]))
+
+ erpnext.messages.contact = contact;
+ erpnext.messages.list.opts.args.contact = contact;
+ erpnext.messages.list.run();
+
+ },
+ // check for updates every 5 seconds if page is active
+ refresh: function() {
+ setTimeout(erpnext.messages.refresh, 10000);
+ if(page_body.cur_page_label != 'messages') return;
+ erpnext.messages.show();
+ },
+ get_contact: function() {
+ var route = location.hash;
+ if(route.indexOf('/')!=-1) {
+ var name = decodeURIComponent(route.split('/')[1]);
+ if(name.indexOf('__at__')!=-1) {
+ name = name.replace('__at__', '@');
+ }
+ return name;
+ }
+ return user;
+ },
+ make_list: function() {
+ erpnext.messages.list = new wn.widgets.Listing({
+ parent: $('#message-list').get(0),
+ method: 'utilities.page.messages.messages.get_list',
+ args: {
+ contact: null
+ },
+ render_row: function(wrapper, data) {
+ data.creation = dateutil.comment_when(data.creation);
+ data.comment_by_fullname = wn.boot.user_fullnames[data.owner];
+
+ if(data.owner==user) {
+ data.cls = 'message-self';
+ data.comment_by_fullname = 'You';
+ } else {
+ data.cls = 'message-other'
+ }
+
+ wrapper.innerHTML = repl('<div class="message %(cls)s"><b>%(comment)s</b>\
+ <div class="help">by %(comment_by_fullname)s, %(creation)s</div></div>\
+ <div style="clear: both;"></div>', data);
+ }
+ });
+ },
+ show_active_users: function() {
+ wn.call({
+ module:'utilities',
+ page:'messages',
+ method:'get_active_users',
+ callback: function(r,rt) {
+ var $body = $(wn.pages.messages).find('.section-body');
+ for(var i in r.message) {
+ var p = r.message[i];
+ p.fullname = wn.boot.user_fullnames[p.name];
+ p.name = p.name.replace('@', '__at__');
+ $body.append(repl('<div class="section-item">\
+ <a href="#!messages/%(name)s">%(fullname)s</a></div>', p))
+ }
+ }
+ });
+ }
+}
+
+
diff --git a/erpnext/utilities/page/messages/messages.py b/erpnext/utilities/page/messages/messages.py
index e69de29..0adeb8d 100644
--- a/erpnext/utilities/page/messages/messages.py
+++ b/erpnext/utilities/page/messages/messages.py
@@ -0,0 +1,43 @@
+import webnotes
+
+@webnotes.whitelist()
+def get_list(arg=None):
+ """get list of messages"""
+ webnotes.form_dict['limit_start'] = int(webnotes.form_dict['limit_start'])
+ webnotes.form_dict['limit_page_length'] = int(webnotes.form_dict['limit_page_length'])
+ webnotes.form_dict['user'] = webnotes.session['user']
+
+ if webnotes.form_dict['contact'] == webnotes.session['user']:
+ return webnotes.conn.sql("""select * from `tabComment Widget Record`
+ where (owner=%(contact)s or comment_docname=%(user)s)
+ and comment_doctype in ('My Company', 'Message')
+ order by creation desc
+ limit %(limit_start)s, %(limit_page_length)s""", webnotes.form_dict, as_dict=1)
+ else:
+ return webnotes.conn.sql("""select * from `tabComment Widget Record`
+ where (owner=%(contact)s and comment_docname=%(user)s)
+ or (owner=%(user)s and comment_docname=%(contact)s)
+ and comment_doctype in ('My Company', 'Message')
+ order by creation desc
+ limit %(limit_start)s, %(limit_page_length)s""", webnotes.form_dict, as_dict=1)
+
+
+@webnotes.whitelist()
+def get_active_users(arg=None):
+ return webnotes.conn.sql("""select name from tabProfile
+ where enabled=1 and
+ name not in ('Administrator', 'Guest')
+ order by first_name""", as_dict=1)
+
+@webnotes.whitelist()
+def post(arg=None):
+ """post message"""
+ import json
+ arg = json.loads(arg)
+ from webnotes.model.doc import Document
+ d = Document('Comment Widget Record')
+ d.comment = arg['txt']
+ d.comment_docname = arg['contact']
+ d.comment_doctype = 'Message'
+ d.save()
+
\ No newline at end of file
diff --git a/erpnext/utilities/page/todo/todo.js b/erpnext/utilities/page/todo/todo.js
index 2691912..77e4625 100644
--- a/erpnext/utilities/page/todo/todo.js
+++ b/erpnext/utilities/page/todo/todo.js
@@ -126,7 +126,7 @@
});
}
-pscript.onload_todo = function() {
+wn.pages.todo.onload = function() {
// load todos
erpnext.todo.refresh();
}
\ No newline at end of file
diff --git a/erpnext/website/doctype/blog/blog.py b/erpnext/website/doctype/blog/blog.py
index 6161c83..1f1b98b 100644
--- a/erpnext/website/doctype/blog/blog.py
+++ b/erpnext/website/doctype/blog/blog.py
@@ -39,10 +39,10 @@
from jinja2 import Template
import markdown2
import os
- from webnotes.utils import global_date_format, get_full_name
+ from webnotes.utils import global_date_format, get_fullname
self.doc.content_html = markdown2.markdown(self.doc.content or '')
- self.doc.full_name = get_full_name(self.doc.owner)
+ self.doc.full_name = get_fullname(self.doc.owner)
self.doc.updated = global_date_format(self.doc.modified)
with open(os.path.join(os.path.dirname(__file__), 'template.html'), 'r') as f: