Sfoglia il codice sorgente

doclist2

version-14
Rushabh Mehta 13 anni fa
parent
commit
c18d20447c
22 ha cambiato i file con 395 aggiunte e 197 eliminazioni
  1. +1
    -0
      conf/index.html
  2. +29
    -0
      css/ui/filter.css
  3. +4
    -0
      js/core.min.js
  4. +0
    -3
      js/legacy/user.js
  5. +15
    -1
      js/legacy/utils/dom.js
  6. +1
    -1
      js/legacy/utils/handler.js
  7. +6
    -2
      js/legacy/webpage/history.js
  8. +5
    -0
      js/legacy/webpage/loaders.js
  9. +1
    -1
      js/legacy/webpage/page_header.js
  10. +1
    -1
      js/legacy/webpage/uploader.js
  11. +1
    -1
      js/legacy/widgets/dialog.js
  12. +1
    -1
      js/legacy/widgets/export_query.js
  13. +5
    -4
      js/legacy/widgets/form/fields.js
  14. +2
    -2
      js/legacy/widgets/form/form_fields.js
  15. +4
    -4
      js/legacy/widgets/form/form_header.js
  16. +0
    -153
      js/legacy/widgets/list_selector.js
  17. +4
    -15
      js/wn/model.js
  18. +267
    -6
      js/wn/pages/doclistview.js
  19. +1
    -1
      js/wn/ui/dialog.js
  20. +5
    -0
      js/wn/ui/listing.js
  21. +1
    -1
      py/core/doctype/doclayer/doclayer.js
  22. +41
    -0
      py/webnotes/widgets/doclistview.py

+ 1
- 0
conf/index.html Vedi File

@@ -26,6 +26,7 @@
} }
</script> </script>
{% endif %} {% endif %}
<script src="lib/js/wn/pages/doclistview.js"></script>
</head> </head>
<body> <body>
{{ body_html }} {{ body_html }}


+ 29
- 0
css/ui/filter.css Vedi File

@@ -0,0 +1,29 @@
div.show_filters {
display: none;
}

div.filter_list {
padding: 13px;
}

div.show_filters.well {
margin-top: 11px;
margin-bottom: 0px;
}

div.filter_list .run_btn {
text-align: right;
}

div.filter_list .add_filter {
margin: 3px 0px;
}

div.list_filter {
margin: 7px 0px;
}

div.list_filter input, div.list_filter select {
width: 130px;
margin-right: 7px;
}

+ 4
- 0
js/core.min.js Vedi File

@@ -44,6 +44,10 @@ c.className=className;}
if(cs)wn.dom.css(c,cs);if(innerHTML)c.innerHTML=innerHTML;if(onclick)c.onclick=onclick;return c;} if(cs)wn.dom.css(c,cs);if(innerHTML)c.innerHTML=innerHTML;if(onclick)c.onclick=onclick;return c;}
wn.dom.css=function(ele,s){if(ele&&s){for(var i in s)ele.style[i]=s[i];};return ele;} wn.dom.css=function(ele,s){if(ele&&s){for(var i in s)ele.style[i]=s[i];};return ele;}
wn.get_cookie=function(c){var t=""+document.cookie;var ind=t.indexOf(c);if(ind==-1||c=="")return"";var ind1=t.indexOf(';',ind);if(ind1==-1)ind1=t.length;return unescape(t.substring(ind+c.length+1,ind1));} wn.get_cookie=function(c){var t=""+document.cookie;var ind=t.indexOf(c);if(ind==-1||c=="")return"";var ind1=t.indexOf(';',ind);if(ind1==-1)ind1=t.length;return unescape(t.substring(ind+c.length+1,ind1));}
/*
* lib/js/wn/model.js
*/
wn.provide('wn.model');wn.model.no_value_type=['Section Break','Column Break','HTML','Table','Button','Image'];
/* /*
* lib/js/wn/page.js * lib/js/wn/page.js
*/ */


+ 0
- 3
js/legacy/user.js Vedi File

@@ -1,3 +0,0 @@
// home

//login_file = 'index.html'

+ 15
- 1
js/legacy/utils/dom.js Vedi File

@@ -95,7 +95,7 @@ function $ln(parent, label, onclick, style) {


function $btn(parent, label, onclick, style, css_class, is_ajax) { function $btn(parent, label, onclick, style, css_class, is_ajax) {
wn.require('lib/js/wn/ui/button.js'); wn.require('lib/js/wn/ui/button.js');
if(css_class==='green') css_class='btn-primary';
if(css_class==='green') css_class='btn-info';
return new wn.ui.Button( return new wn.ui.Button(
{parent:parent, label:label, onclick:onclick, style:style, is_ajax: is_ajax, css_class: css_class} {parent:parent, label:label, onclick:onclick, style:style, is_ajax: is_ajax, css_class: css_class}
).btn; ).btn;
@@ -171,6 +171,20 @@ $bs = function(ele, r) { $(ele).css('-moz-box-shadow',r).css('-webkit-box-shadow
// Select // Select
// ==================================== // ====================================


function SelectWidget(parent, options, width, editable, bg_color) {
var me = this;
// native select
this.inp = $a(parent, 'select');
if(options) add_sel_options(this.inp, options);
if(width) $y(this.inp, {width:width});
this.set_width = function(w) { $y(this.inp, {width:w}) };
this.set_options = function(o) { add_sel_options(this.inp, o); }
this.inp.onchange = function() {
if(me.onchange)me.onchange(this);
}
return;
}

function empty_select(s) { function empty_select(s) {
if(s.custom_select) { s.empty(); return; } if(s.custom_select) { s.empty(); return; }
if(s.inp)s = s.inp; if(s.inp)s = s.inp;


+ 1
- 1
js/legacy/utils/handler.js Vedi File

@@ -87,7 +87,7 @@ function $c_obj_csv(doclist, method, arg) {
args.docs = compress_doclist(doclist); args.docs = compress_doclist(doclist);


// open // open
open_url_post(outUrl, args);
open_url_post(webnotes.request.url, args);
} }


// call a url as POST // call a url as POST


+ 6
- 2
js/legacy/webpage/history.js Vedi File

@@ -144,7 +144,7 @@ nav_obj.get_page = function(loc) {
if(loc.substr(0,1)=='#') { loc = loc.substr(1); } if(loc.substr(0,1)=='#') { loc = loc.substr(1); }
if(loc.substr(0,1)=='!') { loc = loc.substr(1); } if(loc.substr(0,1)=='!') { loc = loc.substr(1); }


if(!in_list(['Page/', 'Form/', 'Repor', 'DocBr', 'List/'], loc.substr(0,5))) {
if(!in_list(['Page/', 'Form/', 'Repor', 'DocBr', 'List/', 'List2'], loc.substr(0,5))) {
loc = 'Page/' + loc; loc = 'Page/' + loc;
} }
return loc.split('/'); return loc.split('/');
@@ -191,7 +191,11 @@ function historyChange(newLocation) {
} else if(t[0]=='DocBrowser' || t[0]=='List') { } else if(t[0]=='DocBrowser' || t[0]=='List') {
_history_current = newLocation; _history_current = newLocation;
loaddocbrowser(t[1]); loaddocbrowser(t[1]);
}
} else if(t[0]=='List2') {
_history_current = newLocation;
loaddocbrowser2(t[1]);
}
}; };


$(window).bind('hashchange', function() { $(window).bind('hashchange', function() {


+ 5
- 0
js/legacy/webpage/loaders.js Vedi File

@@ -301,3 +301,8 @@ function loaddocbrowser(dt, label, fields) {
doc_browser_page.show(dt, label, fields); doc_browser_page.show(dt, label, fields);
nav_obj.open_notify('List',dt,''); nav_obj.open_notify('List',dt,'');
} }

function loaddocbrowser2(dt, label, fields) {
wn.pages.doclistview.show(dt);
return;
}

+ 1
- 1
js/legacy/webpage/page_header.js Vedi File

@@ -73,7 +73,7 @@ PageHeader.prototype.add_button = function(label, fn, bold, icon, green) {
var tb = this.toolbar_area; var tb = this.toolbar_area;
if(this.buttons[label]) return; if(this.buttons[label]) return;
var btn = $btn(tb,label,fn,{marginRight:'4px'}, (green ? 'btn-primary' : ''));
var btn = $btn(tb,label,fn,{marginRight:'4px'}, (green ? 'btn-info' : ''));
if(bold) $y(btn,{fontWeight:'bold'}); if(bold) $y(btn,{fontWeight:'bold'});


this.buttons[label]=btn; this.buttons[label]=btn;


+ 1
- 1
js/legacy/webpage/uploader.js Vedi File

@@ -38,7 +38,7 @@ Uploader = function(parent, args, callback) {


// upload form // upload form
var div = $a(parent,'div'); var div = $a(parent,'div');
div.innerHTML = '<form method="POST" enctype="multipart/form-data" action="'+outUrl+'" target="'+id+'"></form>';
div.innerHTML = '<form method="POST" enctype="multipart/form-data" action="'+webnotes.request.url+'" target="'+id+'"></form>';
var ul_form = div.childNodes[0]; var ul_form = div.childNodes[0];
var f_list = []; var f_list = [];


+ 1
- 1
js/legacy/widgets/dialog.js Vedi File

@@ -134,7 +134,7 @@ Dialog.prototype.make_row = function(d) {
if(btn._onclick) btn._onclick(me) }, null, null, 1); if(btn._onclick) btn._onclick(me) }, null, null, 1);
b.dialog = me; b.dialog = me;
if(!this.first_button) { if(!this.first_button) {
$(b).addClass('btn-primary');
$(b).addClass('btn-info');
this.first_button = true; this.first_button = true;
} }
if(d[2]) { if(d[2]) {


+ 1
- 1
js/legacy/widgets/export_query.js Vedi File

@@ -58,5 +58,5 @@ function export_csv(q, report_name, sc_id, is_simple, filter_values, colnames) {
if(colnames) if(colnames)
args.colnames = colnames.join(','); args.colnames = colnames.join(',');
args.report_name = report_name ? report_name : ''; args.report_name = report_name ? report_name : '';
open_url_post(outUrl, args);
open_url_post(webnotes.request.url, args);
} }

+ 5
- 4
js/legacy/widgets/form/fields.js Vedi File

@@ -43,9 +43,9 @@ Field.prototype.make_body = function() {
// parent element // parent element
if(this.parent) if(this.parent)
this.wrapper = $a(this.parent, 'div');
this.wrapper = $a(this.parent, (this.with_label ? 'div' : 'span'));
else else
this.wrapper = document.createElement('div');
this.wrapper = document.createElement((this.with_label ? 'div' : 'span'));


this.label_area = $a(this.wrapper, 'div', '', {margin:'8px 0px 2px 0px'}); this.label_area = $a(this.wrapper, 'div', '', {margin:'8px 0px 2px 0px'});


@@ -75,8 +75,8 @@ Field.prototype.make_body = function() {


// make the input areas // make the input areas
if(!this.input_area) { if(!this.input_area) {
this.input_area = $a(this.wrapper, 'div');
this.disp_area = $a(this.wrapper, 'div');
this.input_area = $a(this.wrapper, (this.with_label ? 'div' : 'span'));
this.disp_area = $a(this.wrapper, (this.with_label ? 'div' : 'span'));
} }


// apply style // apply style
@@ -95,6 +95,7 @@ Field.prototype.make_body = function() {
if(this.onmake)this.onmake(); if(this.onmake)this.onmake();
} }



Field.prototype.set_max_width = function() { Field.prototype.set_max_width = function() {
var no_max = ['Code', 'Text Editor', 'Text', 'Table', 'HTML'] var no_max = ['Code', 'Text Editor', 'Text', 'Table', 'HTML']
if(this.wrapper && this.layout_cell && this.layout_cell.parentNode.cells if(this.wrapper && this.layout_cell && this.layout_cell.parentNode.cells


+ 2
- 2
js/legacy/widgets/form/form_fields.js Vedi File

@@ -228,7 +228,7 @@ _f.ImageField.prototype.get_image_src = function(doc) {
var img_extn_list = ['gif', 'jpg', 'bmp', 'jpeg', 'jp2', 'cgm', 'ief', 'jpm', 'jpx', 'png', 'tiff', 'jpe', 'tif']; var img_extn_list = ['gif', 'jpg', 'bmp', 'jpeg', 'jp2', 'cgm', 'ief', 'jpm', 'jpx', 'png', 'tiff', 'jpe', 'tif'];


if(in_list(img_extn_list, extn)) { if(in_list(img_extn_list, extn)) {
var src = outUrl + "?cmd=downloadfile&file_id="+file[1];
var src = webnotes.request.url + "?cmd=downloadfile&file_id="+file[1];
} }
} else { } else {
var src = ""; var src = "";
@@ -248,7 +248,7 @@ _f.ImageField.prototype.onrefresh = function() {
var doc = locals[this.frm.doctype][this.frm.docname]; var doc = locals[this.frm.doctype][this.frm.docname];
if(!this.df.options) var src = this.get_image_src(doc); if(!this.df.options) var src = this.get_image_src(doc);
else var src = outUrl + '?cmd=get_file&fname='+this.df.options+"&__account="+account_id + (__sid150 ? ("&sid150="+__sid150) : '');
else var src = webnotes.request.url + '?cmd=get_file&fname='+this.df.options+"&__account="+account_id + (__sid150 ? ("&sid150="+__sid150) : '');


if(src) { if(src) {


+ 4
- 4
js/legacy/widgets/form/form_header.js Vedi File

@@ -198,11 +198,11 @@ _f.FrmHeader.prototype.set_save_submit_color = function(doc) {
if(cint(doc.docstatus)==0 && submit_btn && save_btn) { if(cint(doc.docstatus)==0 && submit_btn && save_btn) {
if(cint(doc.__unsaved)) { if(cint(doc.__unsaved)) {
$(save_btn).addClass('btn-primary');
$(submit_btn).removeClass('btn-primary');
$(save_btn).addClass('btn-info');
$(submit_btn).removeClass('btn-info');
} else { } else {
$(submit_btn).addClass('btn-primary');
$(save_btn).removeClass('btn-primary');
$(submit_btn).addClass('btn-info');
$(save_btn).removeClass('btn-info');
} }
} }
} }


+ 0
- 153
js/legacy/widgets/list_selector.js Vedi File

@@ -1,153 +0,0 @@
// 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.
//

ListSelector = function(title, intro, list, onupdate, selectable) {
var me = this; this.list = list; this.selectable = selectable;
this.dialog = new Dialog(400,600,title);
this.items = [];
// intro
if(intro) {
intro_area = $a(this.dialog.body, 'div', 'help_box', {margin:'16px', marginBottom:'0px', width:'312px'});
intro_area.innerHTML = intro;
}
// body
this.body = $a(this.dialog.body, 'div', '', {margin:'16px', position: 'relative'});
// items
this.render();
// ---------------------------------------
// update button
var btn = $btn(this.dialog.body, 'Update', function() { me.update() }, {margin:'0px 0px 16px 16px'}, 'green', 1);
this.update = function() {
if(me.selected_item) $bg(me.selected_item, '#FFF');
var ret = [];
for(var i=0; i<me.items.length; i++) {
// [label, idx, selected, det]
ret.push([me.items[i].label, me.items[i].idx, (me.items[i].check ? (me.items[i].check.checked ? 1 : 0) : 0), me.items[i].det]);
}
me.dialog.hide();
// call the user with (done!)
onupdate(ret);
}
this.dialog.show();
}

// ---------------------------------------

ListSelector.prototype.render = function(to_hide) {
this.body.innerHTML = ''; this.items = [];
// sort
this.list.sort(function(a,b) { return a[1] > b[1]; });
// items
for(i=0; i<this.list.length; i++) {
// make checkbox for if selectable
this.list[i][1]=i;
this.items.push(new ListSelectorItem(this, this.list[i], i));
if(i==to_hide) $dh(this.items[i].body);
}
}

// ---------------------------------------

ListSelector.prototype.insert_at = function(item, new_idx) {
for(var i=0;i<this.list.length; i++) {
if(this.list[i][1] >= new_idx) this.list[i][1]++;
}
for(var i=0;i<this.list.length; i++) {
if(this.list[i][1] >= item.idx) this.list[i][1]--;
}
this.list[item.idx][1] = new_idx;

var n = new_idx - ((new_idx > item.idx) ? 1 : 0);
this.render(n);
this.items[n].body.onmousedown();
$(this.items[n].body).slideDown();
}

// =====================================

ListSelectorItem = function(ls, det, idx) {
this.det = det; this.ls = ls; this.idx = idx;
this.body = $a(ls.body, 'div', '', {padding: '8px', margin:'4px 0px',
border:'1px solid #AAA', position: 'relative', width:'320px', height:'14px', cursor:'move'});

if(ls.selectable) {
// with checkbox
this.make_with_checkbox();
} else {
// no checkbox (only label)
this.body.innerHTML = det[0];
}
this.set_drag();
}

// ---------------------------------------

ListSelectorItem.prototype.make_with_checkbox = function() {
this.body.tab = make_table(this.body, 1, 2, null, ['28px',null], {verticalAlign:'top'});
this.check = $a_input($td(this.body.tab, 0, 0), 'checkbox');
if(this.det[2]) this.check.checked = 1;
$td(this.body.tab, 0, 1).innerHTML = this.det[0];
}

// ---------------------------------------

ListSelectorItem.prototype.set_drag = function() {
var me = this;
this.body.item = this;
// color on mousedown
this.body.onmousedown = function() {
$bg(this, '#FFC');
if(me.ls.selected_item && me.ls.selected_item != this) $bg(me.ls.selected_item, '#FFF');
me.ls.selected_item = this;
}

// setup draggable
$(this.body).draggable({
opacity: 0.6,
helper: 'clone',
containment: 'parent',
scroll: false,
cursor: 'move',
drag:function(event, ui){
me.ls.drag_item = this.item;
}
});
$(this.body).droppable({
drop: function(event, ui) {
me.ls.insert_at(me.ls.drag_item, me.idx + (me.ls.drag_item.idx < me.idx ? 1 : 0));
}
});
}

js/legacy/widgets/select.js → js/wn/model.js Vedi File

@@ -18,20 +18,9 @@
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF // 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 // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//


/* Only using native widget now - no longer want to support IE6 */
wn.provide('wn.model');


function SelectWidget(parent, options, width, editable, bg_color) {
var me = this;
// native select
this.inp = $a(parent, 'select');
if(options) add_sel_options(this.inp, options);
if(width) $y(this.inp, {width:width});
this.set_width = function(w) { $y(this.inp, {width:w}) };
this.set_options = function(o) { add_sel_options(this.inp, o); }
this.inp.onchange = function() {
if(me.onchange)me.onchange(this);
}
return;
}
wn.model.no_value_type = ['Section Break', 'Column Break', 'HTML', 'Table',
'Button', 'Image'];

+ 267
- 6
js/wn/pages/doclistview.js Vedi File

@@ -42,14 +42,275 @@ wn.pages.DocListView = Class.extend({
this.label : (this.label + ' List') this.label : (this.label + ' List')
this.make(); this.make();
this.load_doctype();
}, },
make: function() { make: function() {
$(this.wrapper).html('<div class="layout_wrapper">\
<div class="header"></div>\
<div class="filters">[filters]</div>\
<div class="body">[body]</div>\
$(this.wrapper).html('<div class="layout-wrapper layout-wrapper-background">\
<div class="layout-main-section">\
<a class="close" onclick="window.history.back();">&times;</a>\
<h1>List</h1>\
<hr>\
<div id="list-filters"></div>\
<button class="btn btn-small btn-info run-btn" style="margin-top: 11px">\
<i class="icon-refresh icon-white"></i> Refresh</button>\
<div id="list-body"></div>\
</div>\
<div class="layout-side-section">\
</div>\
</div>'); </div>');
// filter button
$(this.wrapper).find('.run-btn').click(function() {
me.list.run();
});
},
load_doctype: function() {
var me = this;
wn.call({
method: 'webnotes.widgets.form.load.getdoctype',
args: {doctype:this.doctype},
callback: function() {
me.make_filters();
me.make_list();
}
});
},
make_filters: function() {
this.filter_list = new wn.ui.FilterList(this, $('#list-filters').get(0), this.doctype);
},
make_list: function() {
var me = this;
this.list = new wn.widgets.Listing({
parent: $('#list-body').get(0),
method: 'webnotes.widgets.doclistview.get',
args: {
doctype: this.doctype,
subject: locals.DocType[this.doctype].subject,
},
get_args: function() {
return {filters: JSON.stringify(me.filter_list.get_filters())}
},
render_row: function(row, data) {
row.innerHTML = data;
},
hide_refresh: true
});
this.list.run();
}
});

wn.require('lib/css/ui/filter.css');

wn.ui.FilterList = Class.extend({
init: function(list_obj, parent, doctype) {
this.filters = [];
this.list_obj = list_obj;
this.doctype = doctype;
this.make(parent);
this.set_events();
},
make: function(parent) {
$(parent).html('<div>\
<span class="link_type set_filters">Filter this list</span>\
</div>\
<div class="show_filters well">\
<div class="filter_area"></div>\
<div>\
<button class="btn btn-small add-filter-btn">\
<i class="icon-plus"></i> Add Filter</button>\
</div>\
</div>');
this.$w = $(parent);
},
set_events: function() {
var me = this;
// show filters
this.$w.find('.set_filters').bind('click', function() {
me.$w.find('.show_filters').slideToggle();
if(!me.filters.length)
me.add_filter();
});

// show filters
this.$w.find('.add-filter-btn').bind('click', function() {
me.add_filter();
});
},
add_filter: function(fieldname, condition, value) {
this.filters.push(new wn.ui.Filter(this, this.doctype, fieldname, condition, value));
},
get_filters: function() {
// get filter values as dict
var values = [];
$.each(this.filters, function(i, f) {
if(f.filter_field)
values.push(f.get_value());
})
return values;
}
});

wn.ui.Filter = Class.extend({
init: function(flist, doctype, fieldname, condition, value) {
flist.$w.find('.filter_area').append('<div class="list_filter">\
<select class="fieldname_select"></select>\
<select class="condition">\
<option value="=">Equals</option>\
<option value="like">Like</option>\
<option value=">=">Greater or equals</option>\
<option value=">=">Less or equals</option>\
<option value=">">Greater than</option>\
<option value="<">Less than</option>\
<option value="!=">Not equals</option>\
</select>\
<span class="filter_field"></span>\
<a class="close">&times;</a>\
</div>');
this.fields_by_name = {};
this.flist = flist;
this.$w = this.flist.$w.find('.list_filter:last-child');
this.doctype = doctype;
this.fieldname = fieldname;
this.condition = condition;
this.value = value;
this.set_events();
},
set_events: function() {
var me = this;
new PageHeader($(this.wrapper).find('.header').get(0), this.label)
// render fields
this.render_field_select();
this.$w.find('.fieldname_select').bind('change', function() {
me.set_field(this.value);
});

this.$w.find('a.close').bind('click', function() {
me.$w.css('display','none');
var value = me.filter_field.get_value();
me.filter_field = null;
if(!me.flist.get_filters().length) {
me.flist.$w.find('.set_filters').toggle(true);
me.flist.$w.find('.show_filters').toggle(false);
me.list_obj.list.run();
}
if(value) {
me.list_obj.list.run();
}
return false;
});
// set the field
if(me.fieldname) {
// presents given (could be via tags!)
me.set_field(me.fieldname);
if(me.condition) me.$w.find('.condition').val(me.condition)
if(me.value) me.filter_field.set_input(me.value)
} else {
me.set_field('name');
}

},
render_field_select: function() {
var me = this;
var $fs = me.$w.find('.fieldname_select');
me.table_fields = [];
var std_filters = [
{fieldname:'name', fieldtype:'Data', label:'ID', parent:me.doctype},
{fieldname:'modified', fieldtype:'Date', label:'Last Modified', parent:me.doctype},
{fieldname:'owner', fieldtype:'Data', label:'Created By', parent:me.doctype},
{fieldname:'_user_tags', fieldtype:'Data', label:'Tags', parent:me.doctype}
];
// main table
$.each(std_filters.concat(fields_list[me.doctype]), function(i, df) {
me.add_field_option(df, $fs);
});
// child tables
$.each(me.table_fields, function(i,table_df) {
if(table_df.options) {
$.each(fields_list[table_df.options], function(i, df) {
me.add_field_option(df, $fs);
});
}
})
},
add_field_option: function(df, $fs) {
var me = this;
if(df.parent==me.doctype) {
var label = df.label;
var table = get_label_doctype(me.doctype);
if(df.fieldtype=='Table') me.table_fields.push(df);
} else {
var label = df.label + ' (' + df.parent + ')';
var table = df.parent;
}
if(wn.model.no_value_type.indexOf(df.fieldtype)==-1 &&
!me.fields_by_name[df.fieldname]) {
$fs.append($('<option>', {
value: df.fieldname,
table: table
}).text(label));
me.fields_by_name[df.fieldname] = df;
}
},
set_field: function(fieldname) {
var me = this;
// set in fieldname (again)
me.$w.find('.fieldname_select').val(fieldname);

wn.require('lib/js/legacy/widgets/form/fields.js');
var field_area = me.$w.find('.filter_field').get(0);
field_area.innerHTML = '';

var df = me.fields_by_name[fieldname];
df.original_type = df.fieldtype;
df.description = '';
if(df.fieldtype=='Check') {
df.fieldtype='Select';
df.options='No\nYes';
} else if(['Text','Text Editor','Code','Link'].indexOf(df.fieldtype)!=-1) {
df.fieldtype = 'Data';
}

f = make_field(me.fields_by_name[fieldname], null, field_area, null, 0, 1);
f.df.single_select = 1;
f.not_in_form = 1;
f.with_label = 0;
f.refresh();
me.filter_field = f;
// set as "like" for data fields
if(df.fieldtype=='Data') {
me.$w.find('.condition').val('like');
} else {
me.$w.find('.condition').val('=');
}
},
get_value: function() {
var me = this;
var val = me.filter_field.get_value();
var cond = me.$w.find('.condition').val();
if(me.filter_field.df.original_type == 'Check') {
val = (val=='Yes' ? 1 :0);
}
if(cond=='like') {
val = val + '%';
}
return [me.$w.find('.fieldname_select option:selected').attr('table'),
me.filter_field.df.fieldname, me.$w.find('.condition').val(), val];
} }
})

});

+ 1
- 1
js/wn/ui/dialog.js Vedi File

@@ -37,7 +37,7 @@ wn.widgets.FieldGroup = function() {
// first button primary ? // first button primary ?
if(df.fieldtype=='Button' && !this.first_button) { if(df.fieldtype=='Button' && !this.first_button) {
$(f.input).addClass('btn-primary');
$(f.input).addClass('btn-info');
this.first_button = true; this.first_button = true;
} }
} }


+ 5
- 0
js/wn/ui/listing.js Vedi File

@@ -28,6 +28,7 @@
// parent // parent
// method (method to call on server) // method (method to call on server)
// args (additional args to method) // args (additional args to method)
// get_args (method to return args as dict)
// query or get_query (will be deprecated) // query or get_query (will be deprecated)
// query_max // query_max
// no_result_message ("No result") // no_result_message ("No result")
@@ -202,6 +203,10 @@ wn.widgets.Listing = function(opts) {
if(this.opts.args) if(this.opts.args)
$.extend(args, this.opts.args) $.extend(args, this.opts.args)
if(this.opts.get_args) {
$.extend(args, this.opts.get_args());
}
// show loading // show loading
if(this.loading_img) $di(this.loading_img); if(this.loading_img) $di(this.loading_img);


+ 1
- 1
py/core/doctype/doclayer/doclayer.js Vedi File

@@ -53,7 +53,7 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
}); });
} }
},1); },1);
$(cur_frm.frm_head.page_head.buttons.Update).addClass('btn-primary');
$(cur_frm.frm_head.page_head.buttons.Update).addClass('btn-info');
cur_frm.add_custom_button('Refresh Form', function() { cur_frm.add_custom_button('Refresh Form', function() {
cur_frm.cscript.doc_type(doc, dt, dn); cur_frm.cscript.doc_type(doc, dt, dn);


+ 41
- 0
py/webnotes/widgets/doclistview.py Vedi File

@@ -0,0 +1,41 @@
# 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.
#

"""build query for doclistview and return results"""

import webnotes, json

@webnotes.whitelist()
def get(arg=None):
"""
build query
gets doctype, subject, filters
limit_start, limit_page_length
"""
data = webnotes.form_dict
filters = json.loads(data['filters'])
query = """select %(fields)s from %(tables)s where %(conditions)s
limit %(limit_start)s, %(limit_page_length)s"""

Caricamento…
Annulla
Salva