roles.html 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. {% extends base %}
  2. {% block head_extra %}
  3. <style>
  4. #tbl_roles {
  5. display: none;
  6. }
  7. </style>
  8. {% endblock head_extra %}
  9. {% block content %}
  10. {% import "macros/action_icons_static.html" as icons %}
  11. <span class="title" role="main"><h2>{% block title %}Roles{% endblock %}</h2></span>
  12. <div class="content-container content">
  13. <article>
  14. <h3>Departments</h3>
  15. <div><a href="#" id="a_add_department">Add department</a></div>
  16. {% if departments %}
  17. <div class="table-container">
  18. <table id="tbl_departments" class="data-table">
  19. <thead>
  20. <tr>
  21. <th>Department</th><th style="font-size: smaller;">(actions)</th>
  22. </tr>
  23. </thead>
  24. <tbody>
  25. {% for department in departments %}
  26. <tr>
  27. <td>{{ department.v_department_name }}</td><td><a href="#{{ department.id }}" class="a_edit_department">{{ icons.edit_svg(bl_quotes=False, s_label="edit department") }}</a>&nbsp;<a href= "#{{ department.id }}" class="a_remove_department">{{ icons.delete_svg(bl_quotes=False, s_label="remove department") }}</a></td>
  28. </tr>
  29. {% endfor %}{# end of looping through qualification_types #}
  30. </tbody>
  31. </table><!-- end of tbl_departments -->
  32. </div><!-- end of div.table-container -->
  33. {% endif %}{# end of checking if departments populated #}
  34. </article>
  35. {% if departments %}
  36. <article>
  37. <h3>Roles</h3>
  38. <div id="div_roles">
  39. <div><a href="#" id="a_add_role">Add Role</a></div>
  40. <div><select id="sel_department_filter">
  41. <option value="0"{% if department_filter==0 %} selected {% endif %}>--all--</option>
  42. {% for department in departments %}
  43. <option value="{{ department.id }}"{% if department_filter==department.id %} selected {% endif %}>{{ department.v_department_name }}</option>
  44. {% endfor %}{# end of looping through departments #}
  45. </select><input type="button" id="btn_department_filter" value="Apply filter">
  46. </div>
  47. <div class="table-container">
  48. <table id="tbl_roles" class="data-table">
  49. <thead>
  50. <tr>
  51. <th>Department</th><th>Role</th><th>Description</th><th style="font-size: smaller;">(actions)</th>
  52. </tr>
  53. </thead>
  54. <tbody></tbody>
  55. </table><!-- end of tbl_roles -->
  56. </div><!-- end of div.table-container -->
  57. </div><!-- end of div_roles -->
  58. </article>
  59. {% endif %}{# end of checking if departments populated #}
  60. </div><!-- end of div.content -->
  61. {% from "macros/dialog.html" import dlg_prep with context %}
  62. {{ dlg_prep(["dlg_department", "dlg_role"]) }}
  63. {# dlg divs below #}
  64. <div id="dlg_department" aria-labeledby="spn_department">
  65. <span id="spn_department">Department</span><br>
  66. <form action="{{ url_for("main.roles") }}" method="post" id="frm_department">
  67. {{ department_form.csrf_token }}
  68. {{ department_form.hid_department_id }}
  69. {{ department_form.txt_department_name.label}}{{ department_form.txt_department_name }}<br>
  70. <input type="submit" name="btn_save_department" value="Save">
  71. </form>
  72. </div><!-- end of dlg_department -->
  73. <div id="dlg_role" aria-labeledby="spn_role">
  74. <span id="spn_role">Role details</span><br>
  75. <form action="{{ url_for("main.roles") }}" method="post" id="frm_role">
  76. {{ form.csrf_token }}
  77. {{ form.hid_role_id }}
  78. <ul>
  79. <li>{{ form.sel_department.label }}{{ form.sel_department }}</li>
  80. <li>{{ form.txt_role_name.label }}{{ form.txt_role_name }}</li>
  81. <li>{{ form.txt_description.label }}<br>
  82. {{ form.txt_description }}</li>
  83. </ul>
  84. <input type="submit" name="btn_save_role" value="Save">
  85. </form>
  86. </div><!-- end of dlg_role -->
  87. <script type="text/javascript">
  88. $(document).ready( function() {
  89. try {
  90. var s_dlg_department = $("#dlg_department").html();
  91. var s_dlg_role = $("#dlg_role").html();
  92. $("#a_add_department").click( function(event) {
  93. event.preventDefault();
  94. $("#dlg_department").html(s_dlg_department);
  95. $("#dlg_department").redraw();
  96. $("#dlg_department").dialog("open");
  97. });// end of a_add_department click event
  98. $(".a_edit_department").click( function(event) {
  99. event.preventDefault();
  100. var s_id = String($(this).attr("href")).replace("#", "");
  101. var s_department = $($($($(this).parent()).parent()).children("td")[0]).text();
  102. $("#dlg_department").html(s_dlg_department);
  103. $("#dlg_department").redraw();
  104. $("#hid_department_id").val(s_id);
  105. $("#txt_department_name").val(s_department);
  106. $("#dlg_department").redraw();
  107. $("#dlg_department").dialog("open");
  108. });// end of .a_edit_department click event
  109. $(".a_remove_department").click( function(event) {
  110. event.preventDefault();
  111. var s_id = String($(this).attr("href")).replace("#", "");
  112. var bl_confirm = confirm("Are you sure - this will also remove all positions|roles under this department?");
  113. if (bl_confirm) {
  114. $("#hid_remove_department_id").val(s_id);
  115. document.getElementById("frm_remove_department").submit();
  116. }// end of checking confirmation
  117. });// end of .a_remove_department click event
  118. var bl_initial = true;
  119. function filter_roles(i_department_id) {
  120. try {
  121. i_department_id = Number(i_department_id);
  122. if (isNaN(i_department_id)!=true) {
  123. s_department_id = String(i_department_id);
  124. var s_url = "{{ url_for("main.roles_list", i_department_id=99999) }}".replace("99999", s_department_id);
  125. $.get(s_url, function(o_data) {
  126. if (typeof(o_data)=="object") {
  127. var s_html = "";
  128. $("#tbl_roles tbody").empty();
  129. if (o_data.length>0) {
  130. $.each(o_data, function(ix, r) {
  131. // v_department_name, v_role_name, v_description, id
  132. s_html = s_html + "<tr><td>" + r.v_department_name + "</td><td>" + r.v_role_name + "</td><td>" + r.v_description + "</td>";
  133. s_html = s_html + "<td><a href=\"#" + r.id + "\" class=\"a_edit_role\">{{ icons.edit_svg(bl_quotes=False, s_label="edit role") }}</a>&nbsp;<a href=\"#" + r.id + "\" class=\"a_remove_role\">{{ icons.delete_svg(bl_quotes=False, s_label="remove role") }}</a></td></tr>";
  134. });// end of .each loop through roles
  135. $("#tbl_roles tbody").append(s_html);
  136. $("#tbl_roles").show();
  137. if (bl_initial!=true) { do_alert("Roles matching this type loaded"); } else { bl_initial = false; }
  138. } else {
  139. $("#tbl_roles").hide();
  140. var s_extra = (i_department_id==0) ? "" : " matching this department";
  141. if (bl_initial!=true) { do_alert("No roles" + s_extra); } else { bl_initial = false; }
  142. }// end of length check against o_data
  143. }// end of typeof check
  144. });// end of .get
  145. }// end of making sure valid numeric value passed
  146. } catch(e) {
  147. var s_err = String(e.name) + "\nmessage:" + String(e.message);
  148. s_err = (typeof(e.lineNumber)!="undefined") ? s_err + "\nline:" + String(e.lineNumber) : s_err;
  149. alert("Error! " + s_err);
  150. }//end of catch
  151. }// end of filter_roles function
  152. var s_department_filter = "0";
  153. {% if department_filter>0 %}
  154. s_department_filter = String("{{ department_filter }}");
  155. {% endif %}
  156. var bl_wait = true;
  157. $($("#sel_department_filter").children("option[value='" + s_department_filter + "']")[0]).prop("selected", true);
  158. filter_roles(Number(s_department_filter));
  159. $("#btn_department_filter").click( function(event) {
  160. try {
  161. if (bl_wait!=true||true) {
  162. var i_department_id = $("#sel_department_filter").val();
  163. filter_roles(i_department_id);
  164. }// end of checking if should wait
  165. bl_wait = false;
  166. } catch(e) {
  167. var s_err = String(e.name) + "\nmessage:" + String(e.message);
  168. s_err = (typeof(e.lineNumber)!="undefined") ? s_err + "\nline:" + String(e.lineNumber) : s_err;
  169. alert("Error! " + s_err);
  170. }//end of catch
  171. });// end of btn_department_filter click|sel_department_filter change event
  172. $("#a_add_role").click( function(event) {
  173. event.preventDefault();
  174. $("#dlg_role").html(s_dlg_role);
  175. $("#dlg_role").redraw();
  176. $("#dlg_role").dialog("open");
  177. });// end of a_add_role click event
  178. $("#tbl_roles").on("click", ".a_edit_role", function(event) {
  179. event.preventDefault();
  180. var s_id = String($(this).attr("href")).replace("#", "");
  181. $("#dlg_role").html(s_dlg_role);
  182. $("#dlg_role").redraw();
  183. var s_url = "{{ url_for("main.role_details", i_role_id=99999) }}".replace("99999", s_id);
  184. $.get(s_url, function(o_data) {
  185. if (typeof(o_data)=="object") {
  186. $("#hid_role_id").val(s_id);
  187. $("#sel_role_department").val(o_data.i_department_id);
  188. $("#txt_role_name").val(o_data.v_role_name);
  189. $("#txt_description").val(o_data.v_description);
  190. $("#dlg_role").redraw();
  191. $("#dlg_role").dialog("open");
  192. }// end of typeof check
  193. });// end of .get
  194. });// end of .a_edit_role inside tbl_roles click event
  195. $("#tbl_roles").on("click", ".a_remove_role", function(event) {
  196. event.preventDefault();
  197. var s_id = String($(this).attr("href")).replace("#", "");
  198. var bl_confirm = confirm("Are you sure?");
  199. if (bl_confirm) {
  200. $("#hid_remove_role_id").val(s_id);
  201. document.getElementById("frm_remove_role").submit();
  202. }// end of checking confirmation
  203. });// end of .a_remove_role inside tbl_roles click event
  204. } catch(e) {
  205. var s_err = String(e.name) + "\nmessage:" + String(e.message);
  206. s_err = (typeof(e.lineNumber)!="undefined") ? s_err + "\nline:" + String(e.lineNumber) : s_err;
  207. alert("Error! " + s_err);
  208. }//end of catch
  209. });// end of secondary document ready
  210. </script>
  211. <form action="{{ url_for("main.roles") }}" method="post" id="frm_remove_department">
  212. {{ remove_department_form.csrf_token }}
  213. {{ remove_department_form.hid_remove_department_id }}
  214. </form>
  215. <form action="{{ url_for("main.roles") }}" method="post" id="frm_remove_role">
  216. {{ remove_form.csrf_token }}
  217. {{ remove_form.hid_remove_role_id }}
  218. </form>
  219. {% endblock %}