@@ -0,0 +1,143 @@ | |||
// Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com) | |||
// | |||
// MIT License (MIT) | |||
// | |||
// Permission is hereby granted, free of charge, to any person obtaining a | |||
// copy of this software and associated documentation files (the "Software"), | |||
// to deal in the Software without restriction, including without limitation | |||
// the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||
// and/or sell copies of the Software, and to permit persons to whom the | |||
// Software is furnished to do so, subject to the following conditions: | |||
// | |||
// The above copyright notice and this permission notice shall be included in | |||
// all copies or substantial portions of the Software. | |||
// | |||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A | |||
// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | |||
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF | |||
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE | |||
// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
// | |||
// assign to is lined to todo | |||
// refresh - load todos | |||
// create - new todo | |||
// delete to do | |||
wn.provide("wn.ui.form"); | |||
wn.ui.form.AssignTo = Class.extend({ | |||
init: function(opts) { | |||
$.extend(this, opts); | |||
var me = this; | |||
this.wrapper = $('<div>\ | |||
<button class="btn"><i class="icon-plus"></i></button>\ | |||
<div class="alert-list"></div>\ | |||
</div>').appendTo(this.parent); | |||
this.$list = this.wrapper.find(".alert-list"); | |||
this.wrapper.find(".btn").click(function() { | |||
me.add(); | |||
}); | |||
}, | |||
refresh: function() { | |||
if(this.frm.doc.__islocal) { | |||
this.parent.toggle(false); | |||
return; | |||
} | |||
this.parent.toggle(true); | |||
var me = this; | |||
wn.call({ | |||
method: 'webnotes.widgets.form.assign_to.get', | |||
args: { | |||
doctype: me.frm.doctype, | |||
name: me.frm.docname | |||
}, | |||
callback: function(r) { | |||
me.render(r.message) | |||
} | |||
}) | |||
}, | |||
render: function(d) { | |||
var me = this; | |||
this.$list.empty(); | |||
if(this.dialog) { | |||
this.dialog.hide(); | |||
} | |||
for(var i=0; i<d.length; i++) { | |||
$.extend(d[i], wn.user_info(d[i].owner)); | |||
d[i].avatar = wn.avatar(d[i].owner); | |||
$(repl('<div class="alert alert-success" style="height: 19px; margin-top: 3px">\ | |||
%(avatar)s %(fullname)s \ | |||
<a class="close" href="#" style="top: 1px;"\ | |||
data-owner="%(owner)s">×</a></div>', d[i])) | |||
.appendTo(this.$list); | |||
this.$list.find(".avatar").css("margin-top", "-7px") | |||
this.$list.find('.avatar img').centerImage(); | |||
} | |||
// set remove | |||
this.$list.find('a.close').click(function() { | |||
wn.call({ | |||
method:'webnotes.widgets.form.assign_to.remove', | |||
args: { | |||
doctype: me.frm.doctype, | |||
name: me.frm.docname, | |||
assign_to: $(this).attr('data-owner') | |||
}, | |||
callback:function(r,rt) {me.render(r.message);} | |||
}); | |||
return false; | |||
}); | |||
}, | |||
add: function() { | |||
var me = this; | |||
if(!me.dialog) { | |||
me.dialog = new wn.ui.Dialog({ | |||
title: 'Add to To Do', | |||
width: 350, | |||
fields: [ | |||
{fieldtype:'Link', fieldname:'assign_to', options:'Profile', | |||
label:wn._("Assign To"), | |||
description:wn._("Add to To Do List of"), reqd:true}, | |||
{fieldtype:'Data', fieldname:'description', label:wn._("Comment")}, | |||
{fieldtype:'Date', fieldname:'date', label: wn._("Complete By")}, | |||
{fieldtype:'Select', fieldname:'priority', label: wn._("Priority"), | |||
options:'Low\nMedium\nHigh', 'default':'Medium'}, | |||
{fieldtype:'Check', fieldname:'notify', label: wn._("Notify By Email")}, | |||
{fieldtype:'Button', label:wn._("Add"), fieldname:'add_btn'} | |||
] | |||
}); | |||
me.dialog.fields_dict.add_btn.input.onclick = function() { | |||
var assign_to = me.dialog.fields_dict.assign_to.get_value(); | |||
if(assign_to) { | |||
wn.call({ | |||
method:'webnotes.widgets.form.assign_to.add', | |||
args: { | |||
doctype: me.frm.doctype, | |||
name: me.frm.docname, | |||
assign_to: assign_to, | |||
description: me.dialog.fields_dict.description.get_value(), | |||
priority: me.dialog.fields_dict.priority.get_value(), | |||
date: me.dialog.fields_dict.date.get_value(), | |||
notify: me.dialog.fields_dict.notify.get_value() | |||
}, | |||
callback: function(r,rt) { | |||
me.render(r.message); | |||
} | |||
}); | |||
} | |||
} | |||
} | |||
me.dialog.clear(); | |||
me.dialog.show(); | |||
} | |||
}); | |||
@@ -22,7 +22,7 @@ wn.ui.form.LinkedWith = Class.extend({ | |||
}).sort(function(a, b) { return a.label > b.label ? 1 : -1 }); | |||
this.dialog = new wn.ui.Dialog({ | |||
width: 640, | |||
width: 700, | |||
title: wn._("Linked With"), | |||
fields: [ | |||
{ fieldtype: "HTML", label: "help", | |||
@@ -60,6 +60,7 @@ wn.ui.form.LinkedWith = Class.extend({ | |||
}, | |||
make_listing: function() { | |||
var me = this; | |||
this.listview = wn.views.get_listview(this.doctype, this); | |||
this.lst = new wn.ui.Listing({ | |||
hide_refresh: true, | |||
no_loading: true, | |||
@@ -69,34 +70,37 @@ wn.ui.form.LinkedWith = Class.extend({ | |||
parent: $(this.dialog.fields_dict.list.wrapper).empty().css("min-height", "300px") | |||
.get(0), | |||
method: 'webnotes.widgets.reportview.get', | |||
custom_new_doc: me.listview.make_new_doc || undefined, | |||
get_args: function() { | |||
return { | |||
doctype: me.doctype, | |||
fields: (!me.is_table | |||
? [ '`tab' + me.doctype + '`.name', | |||
'`tab' + me.doctype + '`.modified', | |||
'`tab' + me.doctype + '`.modified_by', | |||
'`tab' + me.doctype + '`.docstatus'] | |||
: [ '`tab' + me.doctype + '`.parent', | |||
'`tab' + me.doctype + '`.parenttype', | |||
'`tab' + me.doctype + '`.modified_by', | |||
'`tab' + me.doctype + '`.docstatus'] | |||
), | |||
filters: me.lst.filter_list.get_filters(), | |||
docstatus: ['0','1'] | |||
var args = { | |||
doctype: this.doctype, | |||
fields: this.listview.fields, | |||
filters: this.filter_list.get_filters(), | |||
docstatus: ['0','1'], | |||
order_by: this.listview.order_by || undefined, | |||
group_by: this.listview.group_by || undefined, | |||
} | |||
return args; | |||
// return { | |||
// doctype: me.doctype, | |||
// fields: (!me.is_table | |||
// ? [ '`tab' + me.doctype + '`.name', | |||
// '`tab' + me.doctype + '`.modified', | |||
// '`tab' + me.doctype + '`.modified_by', | |||
// '`tab' + me.doctype + '`.docstatus'] | |||
// : [ '`tab' + me.doctype + '`.parent', | |||
// '`tab' + me.doctype + '`.parenttype', | |||
// '`tab' + me.doctype + '`.modified_by', | |||
// '`tab' + me.doctype + '`.docstatus'] | |||
// ), | |||
// filters: me.lst.filter_list.get_filters(), | |||
// docstatus: ['0','1'] | |||
// } | |||
}, | |||
render_row: function(parent, data) { | |||
$(parent).html(repl('%(avatar)s \ | |||
<a href="#Form/%(doctype)s/%(name)s" onclick="cur_dialog.hide()">\ | |||
%(doctype)s: %(name)s</a>\ | |||
<span class="help">Last Updated: %(modified)s</span>', { | |||
avatar: wn.avatar(data.modified_by, null, | |||
"Last Modified By: " + wn.user_info(data.modified_by).fullname), | |||
doctype: me.is_table ? data.parenttype : me.doctype, | |||
modified: dateutil.comment_when(data.modified), | |||
name: me.is_table ? data.parent : data.name | |||
})).find('.avatar img').centerImage(); | |||
data.doctype = this.doctype; | |||
me.listview.render(parent, data, this); | |||
}, | |||
get_no_result_message: function() { | |||
return repl("<div class='alert'>%(doctype)s: " + wn._("Not linked") + "</div>", { | |||
@@ -108,5 +112,6 @@ wn.ui.form.LinkedWith = Class.extend({ | |||
me.lst.filter_list.show_filters(true); | |||
me.lst.filter_list.clear_filters(); | |||
me.lst.set_filter(me.linked_with[me.doctype], me.frm.doc.name); | |||
me.lst.listview = me.listview; | |||
} | |||
}); |
@@ -129,13 +129,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ | |||
} | |||
}, | |||
setup_listview: function() { | |||
if(this.meta.__listjs) { | |||
eval(this.meta.__listjs); | |||
this.listview = new wn.doclistviews[this.doctype](this); | |||
} else { | |||
this.listview = new wn.views.ListView(this); | |||
} | |||
this.listview.parent = this; | |||
this.listview = wn.views.get_listview(this.doctype, this); | |||
this.wrapper = this.$page.find('.wnlist-area'); | |||
this.page_length = 20; | |||
this.allow_delete = true; | |||
@@ -155,7 +149,6 @@ wn.views.DocListView = wn.ui.Listing.extend({ | |||
new_doctype: this.doctype, | |||
allow_delete: this.allow_delete, | |||
no_result_message: this.make_no_result(), | |||
columns: this.listview.fields, | |||
custom_new_doc: me.listview.make_new_doc || undefined, | |||
}); | |||
@@ -188,9 +181,6 @@ wn.views.DocListView = wn.ui.Listing.extend({ | |||
}); | |||
data.doctype = this.doctype; | |||
this.listview.render(row, data, this); | |||
}, | |||
get_query_fields: function() { | |||
return this.listview.fields; | |||
}, | |||
get_args: function() { | |||
var docstatus_list = this.can_submit ? $.map(this.$page.find('.show-docstatus :checked'), | |||
@@ -200,7 +190,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ | |||
var args = { | |||
doctype: this.doctype, | |||
fields: this.get_query_fields(), | |||
fields: this.listview.fields, | |||
filters: this.filter_list.get_filters(), | |||
docstatus: docstatus_list, | |||
order_by: this.listview.order_by || undefined, | |||
@@ -1,3 +1,14 @@ | |||
wn.views.get_listview = function(doctype, parent) { | |||
var meta = locals.DocType[doctype]; | |||
if(meta.__listjs) { | |||
eval(meta.__listjs); | |||
var listview = new wn.doclistviews[doctype](parent); | |||
} else { | |||
var listview = new wn.views.ListView(parent); | |||
} | |||
return listview; | |||
} | |||
wn.views.ListView = Class.extend({ | |||
init: function(doclistview) { | |||
this.doclistview = doclistview; | |||