capture_record.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. {% extends base %}
  2. {% block content %}
  3. {% import "macros/action_icons_static.html" as icons with context %}
  4. <span class="title"><h2>{% block title %}Add/edit record{% endblock %}</h2></span>
  5. <div class="content-container content">
  6. {% if record_id>0 %}<div><a href="{{ url_for("main.uploads", i_record=record_id) }}">Record Uploads</a></div>{% endif %}
  7. <form action="{{ url_for("main.capture_record", i_record=record_id) }}" method="post" id="frm_capture">
  8. {{ form.csrf_token }}
  9. {{ form.hid_record_id }}
  10. <h3>Basic Details</h3>
  11. <div class="table-container">
  12. <table class="data-table">
  13. <tr>
  14. <th><label>Position | Role</label></th><td><label for="sel_department_id">Department</label>&nbsp;<select id="sel_department_id" name="sel_department_id">
  15. {% for department in departments %}
  16. <option value="{{ department.id }}"{% if department_id==department.id %} selected{% endif %}>{{ department.v_department_name }}</option>
  17. {% endfor %}
  18. </select><br>
  19. <label for = "sel_role_id">Role</label>&nbsp;<select id="sel_role_id" name="sel_role_id">
  20. {% for role in roles %}
  21. <option value="{{ role.id }}"{% if role_id==role.id %} selected{% endif %}>{{ role.v_role_name }}</option>
  22. {% endfor %}
  23. </select>
  24. </td>
  25. </tr>
  26. <tr>
  27. <th>{{ form.txt_name_1.label }}</th>
  28. <td>{{ form.txt_name_1 }}</td>
  29. </tr>
  30. <tr>
  31. <th>{{ form.txt_name_2.label }}</th>
  32. <td>{{ form.txt_name_2 }}</td>
  33. </tr>
  34. <tr>
  35. <th>{{ form.txt_name_3.label }}</th>
  36. <td>{{ form.txt_name_3 }}</td>
  37. </tr>
  38. <tr>
  39. <th>{{ form.txt_surname.label }}</th>
  40. <td>{{ form.txt_surname }}</td>
  41. </tr>
  42. <tr>
  43. <th>{{ form.txt_id_number.label }}</th>
  44. <td>{{ form.txt_id_number }}</td>
  45. </tr>
  46. <tr>
  47. <th>{{ form.sel_gender.label }}</th>
  48. <td>{{ form.sel_gender }}</td>
  49. </tr>
  50. <tr>
  51. <th>{{ form.txt_years_experience.label }}</th>
  52. <td>{{ form.txt_years_experience }}</td>
  53. </tr>
  54. <tr>
  55. <th>{{ form.sel_sap_k_level.label }}</th>
  56. <td>{{ form.sel_sap_k_level }}</td>
  57. </tr>
  58. <tr>
  59. <th>{{ form.txt_contact_number.label }}</th>
  60. <td>{{ form.txt_contact_number }}</td>
  61. </tr>
  62. <tr>
  63. <th>{{ form.txt_email.label }}</th>
  64. <td>{{ form.txt_email }}</td>
  65. </tr>
  66. <tr>
  67. <th>Languages</th>
  68. <td id="td_languages">
  69. <button type="button" id="btn_add_language" value="Add language">
  70. {{ icons.add_svg(s_label="add language") }}
  71. Add language
  72. </button><br>
  73. <ol id="ol_languages">
  74. {% if languages %}
  75. {% for lang in languages %}
  76. <li><input type="hidden" name="hid_langs" value="{{ lang.v_language_abbreviation }}"><input type="hidden" name="hid_lang_levels" value="{{ lang.si_level }}">{{ lang.v_language_abbreviation }} - {{ lang.v_language_name }} ({% if lang.si_level==0 %}basic{% elif lang.si_level==1 %}intermediate{% else %}proficient{% endif %})&nbsp;<a href="#" class="a_move_up" aria-label="move up">&uarr;</a>-<a href="#" class="a_move_down" aria-label="move down">&darr;</a>-<a href="#" class="a_remove_language">{{ icons.delete_svg(bl_quotes=False, s_label="remove language") }}</a></li>
  77. {% endfor %}
  78. {% endif %}
  79. </ol>
  80. </td>
  81. </tr>
  82. </table>
  83. </div><!-- div.table-container -->
  84. <input type="submit" name="btn_save" value="Save">
  85. </form>
  86. {% if record_id>0 %}
  87. <h3>Qualifications</h3>
  88. <div><button type="button" id="btn_add_qualification" value="Add qualification">
  89. {{ icons.add_svg(s_label="add qualification") }}
  90. Add qualification
  91. </button></div>
  92. {% if record_qualifications %}
  93. <ul>
  94. {% for qualification in record_qualifications %}
  95. <li>{{ qualification.v_qualification_name }}&nbsp;<a href="#{{ qualification.id }}" class="a_remove_qualification">{{ icons.delete_svg(bl_quotes=False, s_label="remove qualification") }}</a></li>
  96. {% endfor %}
  97. </ul>
  98. {% endif %}{# end of checking for existing qualification records #}
  99. <h3>Tender Applications</h3>
  100. <div>
  101. <form action="{{ url_for("main.capture_record", i_record=record_id) }}" method="post" id="frm_tender">
  102. {{ tender_form.csrf_token }}
  103. {{ tender_form.sel_tender.label }}&nbsp;{{ tender_form.sel_tender }}<br>
  104. <input type="submit" name="btn_allocate" value="Allocate">
  105. </form>
  106. </div>
  107. {% if prior_tenders %}
  108. <ul>
  109. {% for tender in prior_tenders %}
  110. <li><span style="font-weight: bold;">Reference Number:</span>&nbsp;{{ tender.v_reference_number }}&nbsp;{{ tender.dt_when }}&nbsp;<a href="#{{ tender.id }}" class="a_remove_tender">{{ icons.delete_svg(s_label="Remove tender allocation") }}</a><br><blockquote>{{ tender.v_description }}</blockquote></li>
  111. {% endfor %}{# end of looping through prior_tenders #}
  112. </ul>
  113. {% endif %}
  114. {% endif %}{# end of checking if existing record to then render qualifications and possibly prior tender associations #}
  115. </div><!-- end of div.content -->
  116. {% from "macros/dialog.html" import dlg_prep with context %}
  117. {{ dlg_prep(["dlg_language", "dlg_qualification"]) }}
  118. {# dlg divs below #}
  119. <div id="dlg_language" aria-labeledby="spn_language">
  120. <span id="spn_language">Select language</span><br>
  121. <form action="#" method="post" id="frm_language">
  122. <label for="sel_language">Language</label>&nbsp;<select name="sel_language" id="sel_language">
  123. {% set ns = namespace(selected=" selected") %}
  124. {% for lang in all_languages %}
  125. <option value="{{ lang.v_language_abbreviation }}"{{ ns.selected }}>{{ lang.v_language_name }}</option>
  126. {% set ns.selected = "" %}
  127. {% endfor %}
  128. </select><br>
  129. <label for="sel_level">Level</label><select id="sel_level" name="sel_level">
  130. <option value="0" selected>basic</option>
  131. <option value="1">intermediate</option>
  132. <option value="2">proficient</option>
  133. </select><br>
  134. </form>
  135. <input type="button" id="btn_add_language" value="Add">
  136. </div><!-- end of dlg_language -->
  137. <div id="dlg_qualification" aria-labeledby="spn_qualification">
  138. <span id="spn_qualification">Qualification</span><br>
  139. <form action="{{ url_for("main.capture_record", i_record=record_id) }}" method="post" id="frm_qualification">
  140. {{ qualification_form.csrf_token }}
  141. {{ qualification_form.hid_record_qualification_id }}
  142. {% set ns = namespace(selected=" selected") %}
  143. <label for="sel_qualification_type">Type</label>&nbsp;<select name="sel_qualification_type" id="sel_qualification_type">
  144. {% for qualification_type in qualification_types %}
  145. <option value="{{ qualification_type.id }}"{{ ns.selected }}>{{ qualification_type.v_qualification_type }}</option>
  146. {% set ns.selected = "" %}
  147. {% endfor %}
  148. </select><br>
  149. {{ qualification_form.sel_qualification.label }}&nbsp;{{ qualification_form.sel_qualification }}<br>
  150. {{ qualification_form.d_acquired.label }}&nbsp;{{ qualification_form.d_acquired }}<br>
  151. <input type="submit" name="btn_save_qualification" value="Save">
  152. </form>
  153. </div><!-- end of dlg_qualification -->
  154. <script type="text/javascript">
  155. $(document).ready( function() {
  156. try {
  157. var s_dlg_client = $("#dlg_client").html();
  158. var s_dlg_qualification = $("#dlg_qualification").html();
  159. $("#frm_language").submit( function(event) {
  160. event.preventDefault();
  161. });// end of frm_language submit event
  162. $("#btn_add_language").click( function(event) {
  163. event.preventDefault();
  164. $("#dlg_language").dialog("open");
  165. });// end of btn_add_language click event
  166. $("#dlg_language").on("click", "#btn_add_language", function(event) {
  167. event.preventDefault();
  168. try {
  169. let s_abbreviation = $("#sel_language").val(), s_language = $($("#sel_language").children("option:selected")[0]).text(), s_level = $("#sel_level").val(), s_level_show = $($("#sel_level").children("option:selected")[0]).text();
  170. var s_html = "<li><input type=\"hidden\" name=\"hid_langs\" value=\"" + s_abbreviation + "\"><input type=\"hidden\" name=\"hid_lang_levels\" value=\"" + s_level + "\">" + s_language + " (" + s_level_show + ")&nbsp;<a href=\"#\" class=\"a_move_up\" aria-label=\"move up\">&uarr;</a>-<a href=\"#\" class=\"a_move_down\" aria-label=\"move down\">&darr;</a>-<a href=\"#\" class=\"a_remove_language\">{{ icons.delete_svg(bl_quotes=False, s_label="remove language") }}</a></li>";
  171. $("#ol_languages").append(s_html);
  172. $("#dlg_language").dialog("close");
  173. $("#dlg_language").redraw();
  174. do_alert("language added");
  175. } catch(e) {
  176. var s_err = String(e.name) + "\nmessage:" + String(e.message);
  177. s_err = (typeof(e.lineNumber)!="undefined") ? s_err + "\nline:" + String(e.lineNumber) : s_err;
  178. alert("Error! " + s_err);
  179. }//end of catch
  180. });// end of btn_add_language click event
  181. $("#td_languages").on("click", ".a_remove_language", function(event) {
  182. event.preventDefault();
  183. $($(this).parent()).remove();
  184. do_alert("language removed");
  185. });// end of .a_remove_language click event
  186. $("#td_languages").on("click", ".a_move_up,.a_move_down", function(event) {
  187. event.preventDefault();
  188. var s_which = String($(this).attr("class")).split("_")[2];
  189. var i_count = $("#ol_languages").children("li").length;
  190. var i_index = $($(this).parent()).index();
  191. var i_position = i_index + 1;
  192. var o_li = $(this).parent();
  193. if (s_which=="up"&&i_position>1) {
  194. o_li = $(o_li).detach();
  195. $($("#ol_languages").children("li")[i_index-1]).before(o_li);
  196. } else if (s_which=="down"&&i_position<i_count) {
  197. o_li = $(o_li).detach();
  198. $($("#ol_languages").children("li")[i_index]).after(o_li);
  199. }
  200. $("#ol_languages").redraw();
  201. });// end of .a_move_up or .a_move_down click event
  202. $("#dlg_qualification").on("change", "#sel_qualification_type", function(event) {
  203. var s_type_id = $(this).val();
  204. var i_type_id = Number(s_type_id);
  205. if (isNaN(i_type_id)!=true) {
  206. s_type_id = String(i_type_id);
  207. $("#sel_qualification").empty();
  208. var s_url = "{{ url_for("main.qualifications_list", i_type_id=99999) }}".replace("99999", s_type_id);
  209. $.get(s_url, function(o_data) {
  210. if (typeof(o_data)=="object") {
  211. if (o_data.length>0) {
  212. var s_html = "";
  213. var s_selected = " selected";
  214. $.each(o_data, function(ix, q) {
  215. // id, v_qualification_type, v_qualification_name, v_description
  216. s_html = s_html + "<option value=\"" + String(q.id) + "\"" + s_selected + ">" + q.v_qualification_name + "</option>";
  217. s_selected = "";
  218. });// end of .each loop through qualifications
  219. $("#dlg_qualification #sel_qualification").append(s_html);
  220. }// end of length check against o_data
  221. }// end of typeof check
  222. });// end of .get
  223. }// end of making sure valid numeric value passed
  224. });// end of sel_qualification_type change event
  225. $("#btn_add_qualification").click( function(event) {
  226. event.preventDefault();
  227. $("#dlg_qualification").html(s_dlg_qualification);
  228. $("#dlg_qualification").redraw();
  229. $("#dlg_qualification").dialog("open");
  230. });// end of btn_add_qualification click event
  231. function select_department_role(i_department_id, i_role_id) {
  232. try {
  233. i_department_id = (isNaN(i_department_id)) ? 0 : Number(i_department_id);
  234. i_role_id = (isNaN(i_role_id)) ? 0 : Number(i_role_id);
  235. s_department_id = String(i_department_id); s_role_id = String(i_role_id);
  236. if ($("#sel_department_id").children("option[value='" + s_department_id + "']").length>0) {
  237. $("#sel_department_id").val(s_department_id);
  238. if ($("#sel_department_id").prop("selectedIndex")>=0) {
  239. var s_url = "{{ url_for("main.roles_list", i_department_id=99999) }}".replace("99999", s_department_id);
  240. $.get(s_url, function(o_data) {
  241. if (typeof(o_data)=="object") {
  242. $("#sel_role_id").empty();
  243. var s_html = "";
  244. $.each(o_data, function(ix, rol) {
  245. s_html = s_html + "<option value=\"" + String(rol.id) + "\"";
  246. if (i_role_id==rol.id) { s_html = s_html + " selected"; }
  247. s_html = s_html + ">" + String(rol.v_role_name) + "</option>";
  248. });// end of .get to populate role options
  249. $("#sel_role_id").append(s_html);
  250. $("#sel_role_id").redraw();
  251. }// end of typeof check against o_data
  252. });// end of .get for pulling roles listing
  253. }// end of checking selectedIndex
  254. }//end of maing sure department can be selected
  255. } catch(e) {
  256. var s_err = String(e.name) + "\nmessage:" + String(e.message);
  257. s_err = (typeof(e.lineNumber)!="undefined") ? s_err + "\nline:" + String(e.lineNumber) : s_err;
  258. alert("Error! " + s_err);
  259. }//end of catch
  260. }// end of select_department_role function
  261. $("#sel_department_id").change( function(event) {
  262. try {
  263. var s_department_id = String($("#sel_department_id").val());
  264. select_department_role(Number(s_department_id), 0);
  265. } catch(e) {
  266. var s_err = String(e.name) + "\nmessage:" + String(e.message);
  267. s_err = (typeof(e.lineNumber)!="undefined") ? s_err + "\nline:" + String(e.lineNumber) : s_err;
  268. alert("Error! " + s_err);
  269. }//end of catch
  270. });// end of sel_department_id change event
  271. $(".a_remove_qualification").click( function(event) {
  272. event.preventDefault();
  273. var s_id = String($(this).attr("href")).replace("#", "");
  274. var bl_confirm = confirm("Are you sure - will not clear uploads?");
  275. if (bl_confirm) {
  276. $("#hid_remove_qualification_id").val(s_id);
  277. document.getElementById("frm_remove_qualification").submit();
  278. }// end of confirmation check
  279. });// end of .a_remove_qualification click event
  280. $(".a_remove_tender").click( function(event) {
  281. event.preventDefault();
  282. var s_id = String($(this).attr("href")).replace("#", "");
  283. var bl_confirm = confirm("Are you sure you wish to remove tender allocation from this C.V.?");
  284. if (bl_confirm) {
  285. $("#hid_tender_cv_id").val(s_id);
  286. document.getElementById("frm_remove_tender").submit();
  287. }// end of confirmation check
  288. });// end of .a_remove_tender click event
  289. } catch(e) {
  290. var s_err = String(e.name) + "\nmessage:" + String(e.message);
  291. s_err = (typeof(e.lineNumber)!="undefined") ? s_err + "\nline:" + String(e.lineNumber) : s_err;
  292. alert("Error! " + s_err);
  293. }//end of catch
  294. });// end of additional document ready
  295. </script>
  296. <form action="{{ url_for("main.capture_record", i_record=record_id) }}" method="post" id="frm_remove_qualification">
  297. {{ remove_qualification_form.csrf_token }}
  298. {{remove_qualification_form.hid_remove_qualification_id }}
  299. </form>
  300. <form action="{{ url_for("main.capture_record", i_record=record_id) }}" method="post" id="frm_remove_tender">
  301. {{ remove_tender_form.csrf_token }}
  302. {{ remove_tender_form.hid_tender_cv_id }}
  303. </form>
  304. {% endblock %}