Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

158 rader
4.4 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. // assign to is lined to todo
  4. // refresh - load todos
  5. // create - new todo
  6. // delete to do
  7. wn.provide("wn.ui.form");
  8. wn.ui.form.AssignTo = Class.extend({
  9. init: function(opts) {
  10. $.extend(this, opts);
  11. var me = this;
  12. this.wrapper = $('<div>\
  13. <div class="alert-list" style="margin-bottom: 7px;"></div>\
  14. </div>').appendTo(this.parent);
  15. this.$list = this.wrapper.find(".alert-list");
  16. this.parent.find(".btn").click(function() {
  17. me.add();
  18. });
  19. this.refresh();
  20. },
  21. refresh: function() {
  22. if(this.frm.doc.__islocal) {
  23. this.parent.toggle(false);
  24. return;
  25. }
  26. this.parent.toggle(true);
  27. this.render(this.frm.get_docinfo().assignments);
  28. },
  29. render: function(d) {
  30. var me = this;
  31. this.frm.get_docinfo().assignments = d;
  32. this.$list.empty();
  33. if(this.dialog) {
  34. this.dialog.hide();
  35. }
  36. if(d && d.length) {
  37. for(var i=0; i<d.length; i++) {
  38. var info = wn.user_info(d[i]);
  39. info.owner = d[i];
  40. info.avatar = wn.avatar(d[i]);
  41. $(repl('<div class="alert alert-success" style="margin-bottom: 7px;">\
  42. %(avatar)s %(fullname)s \
  43. <a class="close" href="#" style="top: 1px;"\
  44. data-owner="%(owner)s">&times;</a></div>', info))
  45. .appendTo(this.$list);
  46. this.$list.find(".avatar").css("margin-top", "-7px")
  47. this.$list.find('.avatar img').centerImage();
  48. }
  49. // set remove
  50. this.$list.find('a.close').click(function() {
  51. wn.call({
  52. method:'webnotes.widgets.form.assign_to.remove',
  53. args: {
  54. doctype: me.frm.doctype,
  55. name: me.frm.docname,
  56. assign_to: $(this).attr('data-owner')
  57. },
  58. callback:function(r,rt) {
  59. me.render(r.message);
  60. me.frm.toolbar.show_infobar();
  61. me.frm.comments.refresh();
  62. }
  63. });
  64. return false;
  65. });
  66. } else {
  67. $('<p class="text-muted">' + wn._("No one") + '</p>').appendTo(this.$list);
  68. }
  69. },
  70. add: function() {
  71. var me = this;
  72. if(!me.dialog) {
  73. me.dialog = new wn.ui.Dialog({
  74. title: wn._('Add to To Do'),
  75. width: 350,
  76. fields: [
  77. {fieldtype:'Link', fieldname:'assign_to', options:'Profile',
  78. label:wn._("Assign To"),
  79. description:wn._("Add to To Do List of"), reqd:true},
  80. {fieldtype:'Data', fieldname:'description', label:wn._("Comment")},
  81. {fieldtype:'Date', fieldname:'date', label: wn._("Complete By")},
  82. {fieldtype:'Select', fieldname:'priority', label: wn._("Priority"),
  83. options:'Low\nMedium\nHigh', 'default':'Medium'},
  84. {fieldtype:'Check', fieldname:'notify',
  85. label:wn._("Notify By Email"), "default":1},
  86. {fieldtype:'Check', fieldname:'restrict',
  87. label:wn._("Add This To User's Restrictions")
  88. + ' <a class="assign-user-properties"><i class="icon-share"></i></a>'},
  89. {fieldtype:'Button', label:wn._("Add"), fieldname:'add_btn'}
  90. ]
  91. });
  92. me.dialog.fields_dict.restrict.$wrapper
  93. .find(".assign-user-properties")
  94. .on("click", function() {
  95. wn.route_options = {
  96. property: me.frm.doctype,
  97. user: me.dialog.get_value("assign_to")
  98. };
  99. wn.set_route("user-properties");
  100. });
  101. me.dialog.fields_dict.add_btn.input.onclick = function() {
  102. var assign_to = me.dialog.fields_dict.assign_to.get_value();
  103. var args = me.dialog.get_values();
  104. if(assign_to) {
  105. return wn.call({
  106. method:'webnotes.widgets.form.assign_to.add',
  107. args: $.extend(args, {
  108. doctype: me.frm.doctype,
  109. name: me.frm.docname,
  110. assign_to: assign_to
  111. }),
  112. callback: function(r,rt) {
  113. if(!r.exc) {
  114. me.render(r.message);
  115. me.frm.toolbar.show_infobar();
  116. me.frm.comments.refresh();
  117. }
  118. },
  119. btn: this
  120. });
  121. }
  122. }
  123. me.dialog.fields_dict.assign_to.get_query = "webnotes.core.doctype.profile.profile.profile_query";
  124. }
  125. me.dialog.clear();
  126. (function toggle_restrict() {
  127. var can_restrict = wn.model.can_restrict(me.frm.doctype, me.frm);
  128. me.dialog.fields_dict.restrict.$wrapper.toggle(can_restrict);
  129. me.dialog.get_input("restrict").prop("checked", can_restrict);
  130. })();
  131. if(me.frm.meta.title_field) {
  132. me.dialog.set_value("description", me.frm.doc[me.frm.meta.title_field])
  133. }
  134. me.dialog.show();
  135. if(!wn.perm.get_perm(me.frm.doctype)[0].restricted) {
  136. me.dialog.fields_dict.restrict.set_input(0);
  137. me.dialog.fields_dict.restrict.$wrapper.toggle(false);
  138. }
  139. }
  140. });