PageRenderTime 44ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/app/views/admin/employees/index.html.erb

https://github.com/PlasticLizard/IPM2
Ruby HTML | 220 lines | 189 code | 31 blank | 0 comment | 13 complexity | 8c2e35805daf653efcdc82d09dff58f6 MD5 | raw file
  1. <%content_for :head do%>
  2. <%javascript "jquery.typewatch"-%>
  3. <script type="text/javascript" src="/javascripts/jsTree/jquery.jstree.js"></script>
  4. <%javascript "jquery.maestro.jstreehelper"%>
  5. <%end%>
  6. <%content_for :title do%>
  7. Employee Directory
  8. <%end%>
  9. <%content_for :sidebar do%>
  10. <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
  11. <div class="portlet-header ui-widget-header">
  12. <a href="#" id="clear_name_query" style="display:none">
  13. <%=image_tag "delete.png"%>
  14. </a>
  15. Name
  16. <span class="ui-icon ui-icon-circle-arrow-s"></span>
  17. </div>
  18. <div class="portlet-content">
  19. <div class="search-bar">
  20. <label for="name_query">Name:</label>
  21. <input id="name_query" type="text" name="q" style="border:1px solid #CCC;" class="ui-corner-all"/>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
  26. <div class="portlet-header ui-widget-header">
  27. <a href="#" id="clear_dep_query" style="display:none">
  28. <%=image_tag "delete.png"%>
  29. </a>
  30. Departments & Roles
  31. <span class="ui-icon ui-icon-circle-arrow-s"></span></div>
  32. <div class="portlet-content">
  33. <%=render :partial=>"/admin/departments/tree"%>
  34. </div>
  35. </div>
  36. <div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">
  37. <div class="portlet-header ui-widget-header">
  38. <a href="#" id="clear_org_query" style="display:none">
  39. <%=image_tag "delete.png"%>
  40. </a>
  41. Organizational Model
  42. <span class="ui-icon ui-icon-circle-arrow-s"></span></div>
  43. <div class="portlet-content">
  44. <%=org_tree_html%>
  45. </div>
  46. </div>
  47. <%end%>
  48. <div class="content-box" style="float:left;">
  49. <div class="content-box-wrapper" style="padding:2px;margin:2px;">
  50. <h3 class="ui-box-header ui-corner-top">Employees:</h3>
  51. <div id="employees">
  52. <%=render :partial=>"employee_list"%>
  53. </div>
  54. </div>
  55. </div>
  56. <div class="clear"></div>
  57. <div>
  58. <a href="employees/new" id="add_employee">Add Employee</a>
  59. </div>
  60. <br>
  61. <script language="javascript">
  62. function filterEmployees(url){
  63. var name_query = $("#name_query").val();
  64. url = url || "/admin/employees";
  65. var filter = {}
  66. if (name_query && name_query != "")
  67. {
  68. filter.q = name_query;
  69. $("#clear_name_query").fadeIn();
  70. }
  71. else
  72. {
  73. $("#clear_name_query").fadeOut();
  74. }
  75. var dep_roles = getDepartmentAndRoleSelections();
  76. var org_units = getOrganizationalUnitSelections();
  77. var has_dep_query = false;
  78. if (dep_roles[0].length > 0){
  79. filter["departments[]"] = dep_roles[0];
  80. has_dep_query = true;
  81. }
  82. if (dep_roles[1].length > 0){
  83. filter["roles[]"] = dep_roles[1];
  84. has_dep_query = true;
  85. }
  86. has_dep_query ? $("#clear_dep_query").fadeIn() : $("#clear_dep_query").fadeOut();
  87. if (org_units.length > 0){
  88. filter["organizational_units[]"] = org_units;
  89. $("#clear_org_query").fadeIn();
  90. }
  91. else{
  92. $("#clear_org_query").fadeOut();
  93. }
  94. $.get(url,filter,function(response){
  95. var $e = $("#employees");
  96. $e.slideUp(100);
  97. $("#employees").html(response);
  98. $e.slideDown(100);
  99. });
  100. }
  101. function getDepartmentAndRoleSelections(){
  102. var tree = $.jstree._reference("#role_tree");
  103. var selections = tree.get_selected();
  104. var departments = [];
  105. var roles = [];
  106. $.each(selections,function(index,selected){
  107. var $sel = $(selected);
  108. var rel = $sel.attr("rel");
  109. if (rel == "department") departments.push(selected.id);
  110. if (rel == "organizational-role"){
  111. roles.push(selected.id);
  112. departments.push($sel.attr('data-department-id'));
  113. }
  114. });
  115. return [departments,roles];
  116. }
  117. function getOrganizationalUnitSelections(){
  118. var tree = $.jstree._reference("#org_tree");
  119. var selections = tree.get_selected();
  120. var org_units = [];
  121. $.each(selections,function(index,selected){
  122. org_units.push(selected.id);
  123. if (selected.children.length > 0){
  124. collectChildUnits(selected.children,org_units);
  125. }
  126. });
  127. return org_units;
  128. }
  129. function collectChildUnits(org_units, selected){
  130. $.each(org_units,function(index,unit){
  131. selected.push(unit.id);
  132. if (unit.children.length > 0){
  133. collectChildUnits(unit.children,selected);
  134. }
  135. });
  136. }
  137. $(function(){
  138. $(".digg_pagination a").live('click',function(e){
  139. e.preventDefault();
  140. var url = $(this).attr("href");
  141. filterEmployees(url);
  142. });
  143. $("#clear_name_query").click(function(){
  144. $("#name_query").val("");
  145. filterEmployees();
  146. });
  147. $("#clear_dep_query").click(function(){
  148. $.jstree._reference("#role_tree").deselect_all();
  149. filterEmployees();
  150. });
  151. $("#clear_org_query").click(function(){
  152. $.jstree._reference("#org_tree").deselect_all();
  153. filterEmployees();
  154. });
  155. $("#name_query").typeWatch({
  156. wait:750,
  157. captureLength:-1,
  158. callback:function(){filterEmployees();},
  159. highlight:false
  160. });
  161. $(".delete_employee").click(function(){
  162. var id = this.id.split("_").pop();
  163. $.ajax({
  164. type: 'post',
  165. data: {_method:'delete',employee:{id:id}},
  166. dataType:null,
  167. complete: function(request){
  168. $("#emp_row_" + id).remove();
  169. //var row = $(this).parent('tr');
  170. //$(row).remove();
  171. },
  172. url: 'employees/' + id
  173. });
  174. });
  175. $("#add_employee").button();
  176. $("#role_tree").jstree({
  177. core : {animation:50},
  178. plugins : [ "themes", "html_data", "ui"]
  179. })
  180. .bind("select_node.jstree",function(event,data){filterEmployees();})
  181. .bind("deselect_node.jstree",function(event,data){filterEmployees();});
  182. $("#org_tree").jstree({
  183. core : {animation:50},
  184. plugins : [ "themes", "html_data", "ui" ]
  185. })
  186. .bind("select_node.jstree",function(event,data){filterEmployees();})
  187. .bind("deselect_node.jstree",function(event,data){filterEmployees()});
  188. });
  189. </script>