You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

105 lines
3.2 KiB

  1. // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. frappe.ui.form.Dashboard = Class.extend({
  4. init: function(opts) {
  5. $.extend(this, opts);
  6. this.wrapper = $('<div class="form-dashboard"></div>')
  7. .prependTo(this.frm.layout.wrapper);
  8. this.body = $('<div class="row"></div>').appendTo(this.wrapper)
  9. .css("padding", "15px 30px");
  10. },
  11. reset: function() {
  12. this.wrapper.toggle(false);
  13. this.body.empty();
  14. this.headline = null;
  15. },
  16. set_headline: function(html) {
  17. if(!this.headline)
  18. this.headline =
  19. $('<h4 class="form-headline col-md-12"></h4>').prependTo(this.body);
  20. this.headline.html(html);
  21. this.wrapper.toggle(true);
  22. },
  23. set_headline_alert: function(text, alert_class, icon) {
  24. this.set_headline(repl('<div class="alert %(alert_class)s">%(icon)s%(text)s</div>', {
  25. "alert_class": alert_class || "",
  26. "icon": icon ? '<i class="'+icon+'" /> ' : "",
  27. "text": text
  28. }));
  29. },
  30. add_doctype_badge: function(doctype, fieldname) {
  31. if(frappe.model.can_read(doctype)) {
  32. this.add_badge(__(doctype), doctype, function() {
  33. frappe.route_options = {};
  34. frappe.route_options[fieldname] = cur_frm.doc.name;
  35. frappe.set_route("List", doctype);
  36. }).attr("data-doctype", doctype);
  37. }
  38. },
  39. add_badge: function(label, doctype, onclick) {
  40. var badge = $(repl('<div class="col-md-4">\
  41. <div class="alert-badge">\
  42. <a class="badge-link grey">%(label)s</a>\
  43. <span class="badge" style="margin-left: 10px;">-</span>\
  44. </div></div>', {label:label, icon: frappe.boot.doctype_icons[doctype]}))
  45. .appendTo(this.body)
  46. badge.find(".badge-link").click(onclick);
  47. this.wrapper.toggle(true);
  48. return badge.find(".alert-badge");
  49. },
  50. set_badge_count: function(data) {
  51. var me = this;
  52. $.each(data, function(doctype, count) {
  53. $(me.wrapper)
  54. .find(".alert-badge[data-doctype='"+doctype+"'] .badge")
  55. .html(cint(count));
  56. });
  57. },
  58. add_progress: function(title, percent) {
  59. var progress_chart = this.make_progress_chart(title);
  60. if(!$.isArray(percent)) {
  61. var width = cint(percent) < 1 ? 1 : percent;
  62. var progress_class = "";
  63. if(width < 10)
  64. progress_class = "progress-bar-danger";
  65. if(width > 99.9)
  66. progress_class = "progress-bar-success";
  67. percent = [{
  68. title: title,
  69. width: width,
  70. progress_class: progress_class
  71. }];
  72. }
  73. var progress = $('<div class="progress"></div>').appendTo(progress_chart);
  74. $.each(percent, function(i, opts) {
  75. $(repl('<div class="progress-bar %(progress_class)s" style="width: %(width)s%" \
  76. title="%(title)s"></div>', opts)).appendTo(progress);
  77. });
  78. this.wrapper.toggle(true);
  79. },
  80. make_progress_chart: function(title) {
  81. var progress_area = this.body.find(".progress-area");
  82. if(!progress_area.length) {
  83. progress_area = $('<div class="progress-area" style="margin-top: 10px">').appendTo(this.body);
  84. }
  85. var progress_chart = $('<div class="progress-chart" title="'+title+'"></div>')
  86. .appendTo(progress_area);
  87. var n_charts = progress_area.find(".progress-chart").length,
  88. cols = Math.floor(12 / n_charts);
  89. progress_area.find(".progress-chart")
  90. .removeClass().addClass("progress-chart col-md-" + cols);
  91. return progress_chart;
  92. }
  93. });