// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors // MIT License. See license.txt wn.provide("wn.views.moduleview"); wn.provide("wn.module_page"); wn.views.moduleview.make = function(wrapper, module) { wrapper.module_view = new wn.views.moduleview.ModuleView(wrapper, module); wrapper.refresh = function() { // remake on refresh if((new Date() - wrapper.module_view.created_on) > (180 * 1000)) { wrapper.module_view = new wn.views.moduleview.ModuleView(wrapper, module); } } } wn.views.show_open_count_list = function(element) { var doctype = $(element).attr("data-doctype"); var condition = wn.boot.notification_info.conditions[doctype]; if(condition) { wn.route_options = condition; var route = wn.get_route() if(route[0]==="List" && route[1]===doctype) { wn.pages["List/" + doctype].doclistview.refresh(); } else { wn.set_route("List", doctype); } } } wn.views.moduleview.ModuleView = Class.extend({ init: function(wrapper, module) { this.doctypes = []; this.top_item_total = {}; this.top_item_open = {}; $(wrapper).empty(); wn.ui.make_app_page({ parent: wrapper, single_column: true, title: wn._(wn.modules[module] && wn.modules[module].label || module) }); wrapper.appframe.add_module_icon(module); wrapper.appframe.set_title_left(' Home', function() { wn.set_route(""); }); this.wrapper = wrapper; this.module = module; this.make_body(); this.render_static(); this.render_dynamic(); this.created_on = new Date(); var me = this; $(document).on("notification-update", function() { me.update_open_count(); }); }, make_body: function() { var wrapper = this.wrapper; // make columns $(wrapper).find(".layout-main").html("
\
\
\
\
") $(wrapper).on("click", ".badge-important", function() { wn.views.show_open_count_list(this); }); $(wrapper).on("click", ".badge-count", function() { var doctype = $(this).attr("data-doctype-count"); wn.set_route("List", doctype); }); }, add_section: function(section) { section._title = wn._(section.title); if(section.top) { var module_top = $(this.wrapper).find(".module-top"); var list_group = $('
') .appendTo(module_top); $('
') .insertAfter(module_top); } else { var list_group = $('"').appendTo(section.right ? $(this.wrapper).find(".side-section") : $(this.wrapper).find(".main-section")); } section.list_group = list_group; }, add_item: function(item, section) { if(!item.description) item.description = ""; if(item.count==null) item.count = ""; if(!item.icon) item.icon = ""; if(section.top) { var $parent = $(repl('
\
')) .appendTo(section.list_group) .find(".alert-badge"); this.top_item_total[item.doctype] = 0; } else { var $parent = $('
  • ').appendTo(section.list_group); } $(repl('%(icon)s%(link)s" + ((item.description && !section.top) ? " %(description)s" : "") + ((section.right || !item.doctype) ? '' : ''), item)) .appendTo($parent); if(!section.top) { $('').appendTo($parent); } }, set_top_item_count: function(doctype, count, open_count) { return; var me = this; if(this.top_item_total[doctype]!=null) { if(count!=null) this.top_item_total[doctype] = count; if(open_count!=null) this.top_item_open[doctype] = open_count; var maxtop = Math.max.apply(this, values(this.top_item_total)); $.each(this.top_item_total, function(doctype, item_count) { $(me.wrapper).find(".module-item-progress[data-doctype='"+ doctype +"']") .find(".module-item-progress-total") .css("width", cint(flt(item_count)/maxtop*100) + "%") }) $.each(this.top_item_open, function(doctype, item_count) { $(me.wrapper).find(".module-item-progress[data-doctype='"+ doctype +"']") .find(".module-item-progress-open") .css("width", cint(flt(item_count)/me.top_item_total[doctype]*100) + "%") }) } }, render_static: function() { // render sections var me = this; $.each(wn.module_page[this.module], function(i, section) { me.add_section(section); $.each(section.items, function(i, item) { if(item.doctype) { me.doctypes.push(item.doctype); item.icon = ' '; } if(item.doctype && !item.route) { item.route = "List/" + encodeURIComponent(item.doctype); } if(item.page && !item.route) { item.route = item.page; } if(item.page) { item.icon = ' '; } // link item.link = repl("%(label)s", item); // doctype permissions if(item.doctype && !wn.model.can_read(item.doctype)) { //item.link = item.label; return; } // page permissions if(item.page && !in_list(wn.boot.allowed_pages, item.page)) { //item.link = item.label; return; } if((item.country && wn.boot.control_panel.country==item.country) || !item.country) me.add_item(item, section) }); if(section.list_group.find("li").length==1) { section.list_group.toggle(false); } }); }, render_dynamic: function() { // render reports var me = this; return wn.call({ method: "webnotes.widgets.moduleview.get_data", args: { module: me.module, doctypes: me.doctypes }, callback: function(r) { if(r.message) { // reports if(r.message.reports.length) { var section = { title: wn._("Custom Reports"), right: true, icon: "icon-list", } me.add_section(section); $.each(r.message.reports, function(i, item) { if(wn.model.can_read(item.doctype)) { item.icon = ' '; if(item.is_query_report) { item.link = repl("%(name)s", item); } else { item.link = repl("\ %(name)s", item); } me.add_item(item, section); } }) } // counts if(r.message.item_count) { $.each(r.message.item_count, function(doctype, count) { $(me.wrapper).find("[data-doctype-count='"+doctype+"']") .html(count) .addClass("badge badge-count pull-right") .css({cursor:"pointer"}); me.set_top_item_count(doctype, count) }) } // open-counts me.update_open_count(); } } }); }, update_open_count: function() { var me = this; $(me.wrapper).find(".badge-important").remove(); if(wn.boot.notification_info.open_count_doctype) { $.each(wn.boot.notification_info.open_count_doctype, function(doctype, count) { if(count && in_list(me.doctypes, doctype)) { me.set_top_item_count(doctype, null, count); $('') .css({ "cursor": "pointer", "margin-right": "0px" }) .addClass("badge badge-important pull-right") .html(count) .attr("data-doctype", doctype) .insertAfter($(me.wrapper) .find("[data-doctype-count='"+doctype+"']")); } }) } } });