timesheet source code
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

283 lignes
8.2KB

  1. (function ($) {
  2. $(function () {
  3. /*_____________________________________________*/
  4. var template = $('#bts_feedback_card').html();
  5. for (var i=0;i<1;i++){
  6. var data = {id: i};
  7. var h = Mustache.render(template, data);
  8. $("#workspace").after(h);
  9. }
  10. $('input').click(function(){
  11. var d = $(this).closest('div.rate').attr('data-job-id');
  12. alert('job id =' + d + ' ' + $(this).attr('value'));
  13. });
  14. function get_my_jobs(){
  15. $.post(bts().ajax_url, { // POST request
  16. _ajax_nonce: bts().nonce, // nonce
  17. action: "list_job_by_client", // action
  18. start: get_start_date(),
  19. finish: get_finish_date(),
  20. }, function(response, status, xhr){
  21. if (response.status == "success"){
  22. pre_process(response);
  23. load_client_jobs(response);
  24. }else{
  25. display_error(response);
  26. }
  27. });
  28. }
  29. //add extra info to response.jobs
  30. function pre_process(response)
  31. {
  32. var newjobs = [];
  33. $.each(response.jobs, function(idx, val){
  34. val.hl_start_date = get_hl_start_date(val.start);
  35. val.hl_start = get_hl_start(val.start);
  36. val.hl_finish = get_hl_finish(val.finish);
  37. val.checked_1 = get_checked(1, val.rating);
  38. val.checked_2 = get_checked(2, val.rating);
  39. val.checked_3 = get_checked(3, val.rating);
  40. val.checked_4 = get_checked(4, val.rating);
  41. val.checked_5 = get_checked(5, val.rating);
  42. if (val.rating >=1 && val.rating<=5){
  43. val.rated= 'rated';
  44. }
  45. val.start_day = get_weekday_name(val.start);
  46. val.finish_day = get_weekday_name(val.finish);
  47. newjobs.push(val);
  48. });
  49. response.jobs = newjobs;
  50. }
  51. function get_hl_start_date(start)
  52. {
  53. var s = new Date(start);
  54. dd = s.getDate();
  55. if (dd< 10)
  56. dd = "0" + dd;
  57. m = s.getMonth() + 1;
  58. return dd +"/" + m;
  59. }
  60. function get_hl_start(start)
  61. {
  62. return get_hh_mm(start);
  63. }
  64. function get_hl_finish(finish)
  65. {
  66. return get_hh_mm(finish);
  67. }
  68. function get_hh_mm(date){
  69. var s = new Date(date);
  70. var hh = s.getHours();
  71. var mm = s.getMinutes();
  72. if (hh<10)
  73. hh = "0" + hh;
  74. if (mm<10)
  75. mm = "0" + mm;
  76. return hh +":"+ mm ;
  77. }
  78. function get_checked(idx, rating)
  79. {
  80. if ( idx == rating)
  81. return "checked";
  82. else
  83. return "";
  84. }
  85. function load_client_jobs(response)
  86. {
  87. set_user_name_at_summary(response.client_name);
  88. var template = $('#bts_feedback_card').html();
  89. var html = Mustache.render(template, response);
  90. $("#workspace").after(html);
  91. }
  92. function set_user_name_at_summary(name){
  93. var title = '';
  94. if ( typeof name != 'undefined' && name != "")
  95. title = name + "'s Schedule";
  96. else
  97. title = "Service Schedule";
  98. $('.bts_client_name span').html(title);
  99. }
  100. function display_error()
  101. {
  102. err_message_box("Network Error", "Your Jobs for this week cannot be loaded, please try again later. For urgent job arrangement please contact <strong>Helen</strong> directly.");
  103. }
  104. function get_weekday_name(dateString)
  105. {
  106. var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'];
  107. var d = new Date(dateString);
  108. var dayName = days[d.getDay()];
  109. return dayName;
  110. }
  111. function format_date(date){
  112. var dd = date.getDate();
  113. var mm = date.getMonth() + 1; //January is 0!
  114. var hh = date.getHours();
  115. var ii = date.getMinutes();
  116. var ss = date.getSeconds();
  117. var yyyy = date.getFullYear();
  118. if (dd < 10) {
  119. dd = '0' + dd;
  120. }
  121. if (mm < 10) {
  122. mm = '0' + mm;
  123. }
  124. if (hh< 10){
  125. hh = '0' + hh;
  126. }
  127. if (ii < 10){
  128. ii = '0' + ii;
  129. }
  130. if (ss <10 ){
  131. ss = '0' + ss;
  132. }
  133. return yyyy + '-' + mm + '-' +dd + " " +hh +":" + ii + ":" + ss;
  134. }
  135. function format_date_only(date){
  136. var dd = date.getDate();
  137. var mm = date.getMonth() + 1; //January is 0!
  138. var yyyy = date.getFullYear();
  139. if (dd < 10) {
  140. dd = '0' + dd;
  141. }
  142. if (mm < 10) {
  143. mm = '0' + mm;
  144. }
  145. return yyyy + '-' + mm + '-' +dd;
  146. }
  147. function get_this_week_start(){
  148. var curr = new Date; // get current date
  149. // First day is the day of the month - the day of the week
  150. var first = curr.getDate() - curr.getDay() + 1; //+1 we want Mon as first
  151. var last = first + 6; // last day is the first day + 6
  152. var firstday = new Date(curr.setDate(first)); //Mon
  153. firstday.setHours(0,0,0);
  154. return format_date(firstday);
  155. }
  156. function get_this_week_end(){
  157. var curr = new Date; // get current date
  158. // First day is the day of the month - the day of the week
  159. var first = curr.getDate() - curr.getDay() + 1; //+1 we want Mon as first
  160. var last = first + 6; // last day is the first day + 6
  161. var lastday = new Date(curr.setDate(last)); //Sat
  162. lastday.setHours(23,59,59);
  163. return format_date(lastday);
  164. }
  165. function get_start_date()
  166. {
  167. var b=feedback_card;
  168. if (b.bts_job_start != '')
  169. return b.bts_job_start + " 00:00:00";
  170. else
  171. return get_this_week_start();
  172. }
  173. function get_finish_date()
  174. {
  175. var b=feedback_card;
  176. if (b.bts_job_finish != '')
  177. return b.bts_job_finish +" 23:59:59";
  178. else
  179. return get_this_week_end();
  180. }
  181. function info_message_box(title, message)
  182. {
  183. message_box('.job_ok_box', title, message);
  184. }
  185. function err_message_box(title, message)
  186. {
  187. message_box('.job_error_box', title, message);
  188. }
  189. function message_box(selector, title,message)
  190. {
  191. set_modal_title(selector, title);
  192. set_modal_message(selector, message);
  193. $(selector + '_trigger').trigger('click');
  194. }
  195. function set_modal_title(selector, title)
  196. {
  197. var el = selector + ' .ult_modal-title ';
  198. $(el).html(title);
  199. }
  200. function set_modal_message(selector, msg)
  201. {
  202. var el = selector + ' .ult_modal-body ';
  203. $(el).html(msg);
  204. }
  205. function do_update_ack(id, rating)
  206. {
  207. $.post(bts().ajax_url, { // POST request
  208. _ajax_nonce: bts().nonce, // nonce
  209. action: "client_ack_job", // action
  210. job_id: id,
  211. rating: rating,
  212. }, function(response, status, xhr){
  213. if (response.status == "success"){
  214. display_job_ack(id, response.rating);
  215. }else{
  216. console.warn("%o", response);
  217. clear_job_ack(id);
  218. }
  219. });
  220. }
  221. function clear_job_ack(id)
  222. {
  223. display_job_ack(id, 0); //clear it
  224. }
  225. function display_job_ack(id, rating)
  226. {
  227. for (var i=1; i<=5; i++){
  228. var selector = 'star' + i + '_' + id;
  229. $(selector).prop('checked',(rating == i));
  230. }
  231. if (rating >=1 && rating <=5){
  232. $('#container_' + id).addClass('rated');
  233. }else{
  234. $('#container_' + id).removeClass('rated');
  235. }
  236. }
  237. $(document).on('click', '.card input[type="radio"]', function(){
  238. var job_id = $(this).closest('div.rate').attr('data-job-id');
  239. var rating = $(this).attr('value');
  240. do_update_ack(job_id, rating);
  241. });
  242. get_my_jobs();
  243. /*_____________________________________________*/
  244. });
  245. })(jQuery);