diff --git a/css/all-app.css b/css/all-app.css index c2a67306cf..f30d1cfaca 100644 --- a/css/all-app.css +++ b/css/all-app.css @@ -1589,10 +1589,12 @@ div.list-row table { div.list-row table td { overflow: hidden; - padding-right: 3px; + /*padding-right: 3px;*/ + padding: 0px 3px; vertical-align: middle; height: 24px; max-height: 24px; + word-wrap: break-word; } div.paging-button { diff --git a/css/all-web.css b/css/all-web.css index d818b7f81f..ad1304ba1f 100644 --- a/css/all-web.css +++ b/css/all-web.css @@ -1674,10 +1674,12 @@ div.list-row table { div.list-row table td { overflow: hidden; - padding-right: 3px; + /*padding-right: 3px;*/ + padding: 0px 3px; vertical-align: middle; height: 24px; max-height: 24px; + word-wrap: break-word; } div.paging-button { diff --git a/erpnext/accounts/doctype/payable_voucher/listview.js b/erpnext/accounts/doctype/payable_voucher/listview.js new file mode 100644 index 0000000000..6dc8f99b93 --- /dev/null +++ b/erpnext/accounts/doctype/payable_voucher/listview.js @@ -0,0 +1,39 @@ +// render +wn.doclistviews['Payable Voucher'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d); + this.fields = this.fields.concat([ + '`tabPayable Voucher`.supplier_name', + '`tabPayable Voucher`.currency', + 'IFNULL(`tabPayable Voucher`.grand_total_import, 0) as grand_total_import', + 'IFNULL(`tabPayable Voucher`.grand_total, 0) as grand_total', + 'IFNULL(`tabPayable Voucher`.outstanding_amount, 0) as outstanding_amount', + ]); + this.stats = this.stats.concat(['company']); + }, + + prepare_data: function(data) { + this._super(data); + data.paid = flt( + ((data.grand_total - data.outstanding_amount) / data.grand_total) * 100, + 2); + }, + + columns: [ + {width: '5%', content: 'avatar'}, + {width: '3%', content: 'docstatus'}, + {width: '15%', content: 'name'}, + {width: '37%', content: 'tags+supplier_name', css: {color: '#aaa'}}, + { + width: '18%', + content: function(parent, data) { + $(parent).html(data.currency + ' ' + fmt_money(data.grand_total_import)) + }, + css: {'text-align':'right'} + }, + {width: '10%', content: 'paid', type:'bar-graph', label:'Paid'}, + {width: '12%', content:'modified', css: { + 'text-align': 'right', 'color':'#777' + }}, + ] +}); diff --git a/erpnext/accounts/doctype/receivable_voucher/listview.js b/erpnext/accounts/doctype/receivable_voucher/listview.js index d30431ff32..ebedd516b6 100644 --- a/erpnext/accounts/doctype/receivable_voucher/listview.js +++ b/erpnext/accounts/doctype/receivable_voucher/listview.js @@ -3,12 +3,14 @@ wn.doclistviews['Receivable Voucher'] = wn.views.ListView.extend({ init: function(d) { this._super(d) this.fields = this.fields.concat([ - "`tabReceivable Voucher`.customer", + "`tabReceivable Voucher`.customer_name", "ifnull(`tabReceivable Voucher`.outstanding_amount,0) as outstanding_amount", "ifnull(`tabReceivable Voucher`.grand_total,0) as grand_total", "`tabReceivable Voucher`.currency", "ifnull(`tabReceivable Voucher`.grand_total_export,0) as grand_total_export" ]); + + this.stats = this.stats.concat(['company']); }, prepare_data: function(data) { this._super(data); @@ -18,7 +20,7 @@ wn.doclistviews['Receivable Voucher'] = wn.views.ListView.extend({ {width: '5%', content:'avatar'}, {width: '3%', content:'docstatus'}, {width: '15%', content:'name'}, - {width: '37%', content:'tags+customer', css: {color:'#aaa'}}, + {width: '37%', content:'tags+customer_name', css: {color:'#aaa'}}, { width: '18%', content: function(parent, data) { diff --git a/erpnext/buying/doctype/indent/listview.js b/erpnext/buying/doctype/indent/listview.js new file mode 100644 index 0000000000..df78ea9bb7 --- /dev/null +++ b/erpnext/buying/doctype/indent/listview.js @@ -0,0 +1,33 @@ +// render +wn.doclistviews['Indent'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d) + this.fields = this.fields.concat([ + "`tabIndent`.status", + "IFNULL(`tabIndent`.per_ordered, 0) as per_ordered", + "`tabIndent`.remark", + ]); + this.stats = this.stats.concat(['status', 'company']); + }, + + prepare_data: function(data) { + this._super(data); + if(['Stopped', 'Cancelled'].indexOf(data.status)!=-1) { + data.label_type = 'important'; + } else if(data.status == 'Submitted') { + data.label_type = 'success'; + } + + data.status_html = repl('%(status)s', data); + }, + + columns: [ + {width: '5%', content:'avatar'}, + {width: '3%', content:'docstatus'}, + {width: '17%', content:'name'}, + {width: '53%', content:'status_html+tags+remark', css: {'color': '#aaa'}}, + {width: '10%', content: 'per_ordered', type:'bar-graph', label:'Ordered'}, + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + ] +}); + diff --git a/erpnext/buying/doctype/purchase_order/listview.js b/erpnext/buying/doctype/purchase_order/listview.js new file mode 100644 index 0000000000..528fe60c9d --- /dev/null +++ b/erpnext/buying/doctype/purchase_order/listview.js @@ -0,0 +1,33 @@ +// render +wn.doclistviews['Purchase Order'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d) + this.fields = this.fields.concat([ + "`tabPurchase Order`.supplier_name", + "ifnull(`tabPurchase Order`.per_received,0) as per_received", + "ifnull(`tabPurchase Order`.per_billed,0) as per_billed", + "`tabPurchase Order`.currency", + "ifnull(`tabPurchase Order`.grand_total_import,0) as grand_total_import" + ]); + this.stats = this.stats.concat(['status', 'company']); + }, + + columns: [ + {width: '5%', content:'avatar'}, + {width: '3%', content:'docstatus'}, + {width: '15%', content:'name'}, + {width: '35%', content:'tags+supplier_name', css: {color:'#aaa'}}, + { + width: '18%', + content: function(parent, data) { + $(parent).html(data.currency + ' ' + fmt_money(data.grand_total_import)) + }, + css: {'text-align':'right'} + }, + {width: '8%', content: 'per_received', type:'bar-graph', label:'Delivered'}, + {width: '8%', content: 'per_billed', type:'bar-graph', label:'Billed'}, + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + ] + +}); + diff --git a/erpnext/buying/doctype/supplier/listview.js b/erpnext/buying/doctype/supplier/listview.js new file mode 100644 index 0000000000..86e22d6f63 --- /dev/null +++ b/erpnext/buying/doctype/supplier/listview.js @@ -0,0 +1,23 @@ +// render +wn.doclistviews['Supplier'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d) + this.fields = this.fields.concat([ + "`tabSupplier`.supplier_type", + ]); + this.stats = this.stats.concat([]); + }, + + prepare_data: function(data) { + this._super(data); + }, + + columns: [ + {width: '5%', content:'avatar'}, + {width: '50%', content:'name'}, + {width: '10%', content:'tags'}, + {width: '23%', content:'supplier_type', css: {'color': '#aaa'}}, + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + ] +}); + diff --git a/erpnext/selling/doctype/customer/listview.js b/erpnext/selling/doctype/customer/listview.js new file mode 100644 index 0000000000..3ac705aa49 --- /dev/null +++ b/erpnext/selling/doctype/customer/listview.js @@ -0,0 +1,18 @@ +// render +wn.doclistviews['Customer'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d) + this.fields = this.fields.concat([ + "`tabCustomer`.customer_name", + "`tabCustomer`.territory", + ]); + }, + + columns: [ + {width: '5%', content:'avatar'}, + {width: '53%', content:'name'}, + {width: '10%', content:'tags'}, + {width: '20%', content:'territory', css: {'color': '#aaa'}}, + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + ] +}); diff --git a/erpnext/selling/doctype/enquiry/listview.js b/erpnext/selling/doctype/enquiry/listview.js new file mode 100644 index 0000000000..1bd1b96e94 --- /dev/null +++ b/erpnext/selling/doctype/enquiry/listview.js @@ -0,0 +1,37 @@ +wn.doclistviews['Enquiry'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d) + this.fields = this.fields.concat([ + 'tabEnquiry.enquiry_from', + 'tabEnquiry.lead_name', + 'tabEnquiry.customer_name', + 'tabEnquiry.status', + ]); + this.stats = this.stats.concat(['status', 'source', 'enquiry_from', 'company']); + }, + + prepare_data: function(data) { + this._super(data); + if(['Order Confirmed', 'Quotation Sent'] + .indexOf(data.status)!=-1) { + data.label_type = 'success'; + } else if(data.status == 'Draft') { + data.label_type = 'info'; + } else if(data.status == 'Submit') { + data.label_type = 'important'; + } + data.status_html = repl('%(status)s', data); + if(data.enquiry_from == 'Lead') { + data.enquiry_name = repl('[%(enquiry_from)s] %(lead_name)s', data); + } else { + data.enquiry_name = repl('[%(enquiry_from)s] %(customer_name)s', data); + } + }, + + columns: [ + {width: '15%', content:'name'}, + {width: '18%', content:'status_html'}, + {width: '55%', content:'tags+enquiry_name', css: {color:'#aaa'}}, + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + ] +}) diff --git a/erpnext/selling/doctype/lead/listview.js b/erpnext/selling/doctype/lead/listview.js index b5ed6b8c80..4751c64e23 100644 --- a/erpnext/selling/doctype/lead/listview.js +++ b/erpnext/selling/doctype/lead/listview.js @@ -7,7 +7,7 @@ wn.doclistviews['Lead'] = wn.views.ListView.extend({ 'tabLead.source', 'tabLead.rating' ]); - this.stats = this.stats.concat(['status', 'source', 'rating']); + this.stats = this.stats.concat(['status', 'source', 'rating', 'company']); }, prepare_data: function(data) { diff --git a/erpnext/selling/doctype/quotation/listview.js b/erpnext/selling/doctype/quotation/listview.js new file mode 100644 index 0000000000..1489df3479 --- /dev/null +++ b/erpnext/selling/doctype/quotation/listview.js @@ -0,0 +1,40 @@ +// render +wn.doclistviews['Quotation'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d) + this.fields = this.fields.concat([ + "`tabQuotation`.quotation_to", + "`tabQuotation`.lead_name", + "`tabQuotation`.customer_name", + "`tabQuotation`.currency", + "ifnull(`tabQuotation`.grand_total_export,0) as grand_total_export" + ]); + this.stats = this.stats.concat(['status', 'quotation_to', 'company']); + }, + + prepare_data: function(data) { + this._super(data); + if(data.quotation_to == 'Lead') { + data.quotation_name = repl('[%(quotation_to)s] %(lead_name)s', data); + } else { + data.quotation_name = repl('[%(quotation_to)s] %(customer_name)s', data); + } + }, + + columns: [ + {width: '5%', content:'avatar'}, + {width: '3%', content:'docstatus'}, + {width: '15%', content:'name'}, + {width: '47%', content:'tags+quotation_name', css: {color:'#aaa'}}, + { + width: '18%', + content: function(parent, data) { + $(parent).html(data.currency + ' ' + fmt_money(data.grand_total_export)) + }, + css: {'text-align':'right'} + }, + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + ] + +}); + diff --git a/erpnext/selling/doctype/sales_order/listview.js b/erpnext/selling/doctype/sales_order/listview.js index c0b3895d8a..3b764d191a 100644 --- a/erpnext/selling/doctype/sales_order/listview.js +++ b/erpnext/selling/doctype/sales_order/listview.js @@ -9,14 +9,14 @@ wn.doclistviews['Sales Order'] = wn.views.ListView.extend({ "`tabSales Order`.currency", "ifnull(`tabSales Order`.grand_total_export,0) as grand_total_export" ]); - this.stats = this.stats.concat(['status']); + this.stats = this.stats.concat(['status', 'company']); }, columns: [ {width: '5%', content:'avatar'}, {width: '3%', content:'docstatus'}, {width: '15%', content:'name'}, - {width: '37%', content:'tags+customer_name', css: {color:'#aaa'}}, + {width: '35%', content:'tags+customer_name', css: {color:'#aaa'}}, { width: '18%', content: function(parent, data) { @@ -26,7 +26,7 @@ wn.doclistviews['Sales Order'] = wn.views.ListView.extend({ }, {width: '8%', content: 'per_delivered', type:'bar-graph', label:'Delivered'}, {width: '8%', content: 'per_billed', type:'bar-graph', label:'Billed'}, - {width: '10%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} ] }); diff --git a/erpnext/stock/doctype/item/listview.js b/erpnext/stock/doctype/item/listview.js new file mode 100644 index 0000000000..7f0dbc8ae9 --- /dev/null +++ b/erpnext/stock/doctype/item/listview.js @@ -0,0 +1,23 @@ +// render +wn.doclistviews['Item'] = wn.views.ListView.extend({ + init: function(d) { + this._super(d) + this.fields = this.fields.concat([ + "`tabItem`.item_name", + "`tabItem`.description", + ]); + this.stats = this.stats.concat(['default_warehouse', 'brand']); + }, + + prepare_data: function(data) { + this._super(data); + data.description = repl("%(item_name)s | %(description)s", data); + }, + + columns: [ + {width: '5%', content:'avatar'}, + {width: '20%', content:'name'}, + {width: '63%', content:'tags+description', css: {'color': '#aaa'}}, + {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} + ] +}); diff --git a/erpnext/support/doctype/support_ticket/listview.js b/erpnext/support/doctype/support_ticket/listview.js index 87c122491d..67ba9ea457 100644 --- a/erpnext/support/doctype/support_ticket/listview.js +++ b/erpnext/support/doctype/support_ticket/listview.js @@ -1,5 +1,7 @@ // render wn.doclistviews['Support Ticket'] = wn.views.ListView.extend({ + me: this, + init: function(d) { this._super(d) this.fields = this.fields.concat([ @@ -26,8 +28,13 @@ wn.doclistviews['Support Ticket'] = wn.views.ListView.extend({ data.status = 'Waiting' } data.status_html = repl('%(status)s', data); + var a = $(data.status_html).click(function() { + me.set_filter('status', $(this).text()); + }); - data.description = data.description + ' | ' + data.subject; + // replace double quote with blank string + data.description = cstr(data.subject).replace(/"/gi, '') + + " | " + cstr(data.description).replace(/"/gi, ''); // description if(data.description && data.description.length > 50) { diff --git a/js/all-app.js b/js/all-app.js index fe634e38bb..b9043aad79 100644 --- a/js/all-app.js +++ b/js/all-app.js @@ -387,7 +387,7 @@ this.listview.parent=this;},init_list:function(){this.make({method:'webnotes.wid Delete',function(){me.delete_items();},'.btn-filter')}},delete_items:function(){var me=this;var dl=$.map(me.$page.find('.list-delete:checked'),function(e){return $(e).data('name');});if(!dl.length) return;if(!confirm('This is PERMANENT action and you cannot undo. Continue?')){return;} me.set_working(true);wn.call({method:'webnotes.widgets.doclistview.delete_items',args:{items:dl,doctype:me.doctype},callback:function(){me.set_working(false);me.refresh();}})},init_stats:function(){var me=this -wn.call({method:'webnotes.widgets.doclistview.get_stats',args:{stats:me.listview.stats,doctype:me.doctype},callback:function(r){$.each(r.message,function(field,stat){me.render_stat(field,stat);});}});},render_stat:function(field,stat){var me=this;if(!stat||!stat.length){if(field=='_user_tags'){this.$page.find('.layout-side-section').append('