timesheet source code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

276 satır
8.0KB

  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_hh_mm(val.start);
  36. val.hl_finish = get_hh_mm(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_hh_mm(date){
  61. var s = new Date(date);
  62. var hh = s.getHours();
  63. var mm = s.getMinutes();
  64. if (hh<10)
  65. hh = "0" + hh;
  66. if (mm<10)
  67. mm = "0" + mm;
  68. return hh +":"+ mm ;
  69. }
  70. function get_checked(idx, rating)
  71. {
  72. if ( idx == rating)
  73. return "checked";
  74. else
  75. return "";
  76. }
  77. function load_client_jobs(response)
  78. {
  79. set_user_name_at_summary(response.client_name);
  80. var template = $('#bts_feedback_card').html();
  81. var html = Mustache.render(template, response);
  82. $("#workspace").after(html);
  83. }
  84. function set_user_name_at_summary(name){
  85. var title = '';
  86. if ( typeof name != 'undefined' && name != "")
  87. title = name + "'s Schedule";
  88. else
  89. title = "Service Schedule";
  90. $('.bts_client_name span').html(title);
  91. }
  92. function display_error()
  93. {
  94. 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.");
  95. }
  96. function get_weekday_name(dateString)
  97. {
  98. var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'];
  99. var d = new Date(dateString);
  100. var dayName = days[d.getDay()];
  101. return dayName;
  102. }
  103. function format_date(date){
  104. var dd = date.getDate();
  105. var mm = date.getMonth() + 1; //January is 0!
  106. var hh = date.getHours();
  107. var ii = date.getMinutes();
  108. var ss = date.getSeconds();
  109. var yyyy = date.getFullYear();
  110. if (dd < 10) {
  111. dd = '0' + dd;
  112. }
  113. if (mm < 10) {
  114. mm = '0' + mm;
  115. }
  116. if (hh< 10){
  117. hh = '0' + hh;
  118. }
  119. if (ii < 10){
  120. ii = '0' + ii;
  121. }
  122. if (ss <10 ){
  123. ss = '0' + ss;
  124. }
  125. return yyyy + '-' + mm + '-' +dd + " " +hh +":" + ii + ":" + ss;
  126. }
  127. function format_date_only(date){
  128. var dd = date.getDate();
  129. var mm = date.getMonth() + 1; //January is 0!
  130. var yyyy = date.getFullYear();
  131. if (dd < 10) {
  132. dd = '0' + dd;
  133. }
  134. if (mm < 10) {
  135. mm = '0' + mm;
  136. }
  137. return yyyy + '-' + mm + '-' +dd;
  138. }
  139. function get_this_week_start(){
  140. var curr = new Date; // get current date
  141. // First day is the day of the month - the day of the week
  142. var first = curr.getDate() - curr.getDay() + 1; //+1 we want Mon as first
  143. var last = first + 6; // last day is the first day + 6
  144. var firstday = new Date(curr.setDate(first)); //Mon
  145. firstday.setHours(0,0,0);
  146. return format_date(firstday);
  147. }
  148. function get_this_week_end(){
  149. var curr = new Date; // get current date
  150. // First day is the day of the month - the day of the week
  151. var first = curr.getDate() - curr.getDay() + 1; //+1 we want Mon as first
  152. var last = first + 6; // last day is the first day + 6
  153. var lastday = new Date(curr.setDate(last)); //Sat
  154. lastday.setHours(23,59,59);
  155. return format_date(lastday);
  156. }
  157. function get_start_date()
  158. {
  159. var b=feedback_card;
  160. if (b.bts_job_start != '')
  161. return b.bts_job_start + " 00:00:00";
  162. else
  163. return get_this_week_start();
  164. }
  165. function get_finish_date()
  166. {
  167. var b=feedback_card;
  168. if (b.bts_job_finish != '')
  169. return b.bts_job_finish +" 23:59:59";
  170. else
  171. return get_this_week_end();
  172. }
  173. function info_message_box(title, message)
  174. {
  175. message_box('.job_ok_box', title, message);
  176. }
  177. function err_message_box(title, message)
  178. {
  179. message_box('.job_error_box', title, message);
  180. }
  181. function message_box(selector, title,message)
  182. {
  183. set_modal_title(selector, title);
  184. set_modal_message(selector, message);
  185. $(selector + '_trigger').trigger('click');
  186. }
  187. function set_modal_title(selector, title)
  188. {
  189. var el = selector + ' .ult_modal-title ';
  190. $(el).html(title);
  191. }
  192. function set_modal_message(selector, msg)
  193. {
  194. var el = selector + ' .ult_modal-body ';
  195. $(el).html(msg);
  196. }
  197. function do_update_ack(id, rating)
  198. {
  199. $.post(bts().ajax_url, { // POST request
  200. _ajax_nonce: bts().nonce, // nonce
  201. action: "client_ack_job", // action
  202. job_id: id,
  203. rating: rating,
  204. }, function(response, status, xhr){
  205. if (response.status == "success"){
  206. display_job_ack(id, response.rating);
  207. }else{
  208. console.warn("%o", response);
  209. clear_job_ack(id);
  210. }
  211. });
  212. }
  213. function clear_job_ack(id)
  214. {
  215. display_job_ack(id, 0); //clear it
  216. }
  217. function display_job_ack(id, rating)
  218. {
  219. for (var i=1; i<=5; i++){
  220. var selector = 'star' + i + '_' + id;
  221. $(selector).prop('checked',(rating == i));
  222. }
  223. if (rating >=1 && rating <=5){
  224. $('#container_' + id).addClass('rated');
  225. }else{
  226. $('#container_' + id).removeClass('rated');
  227. }
  228. }
  229. $(document).on('click', '.card input[type="radio"]', function(){
  230. var job_id = $(this).closest('div.rate').attr('data-job-id');
  231. var rating = $(this).attr('value');
  232. do_update_ack(job_id, rating);
  233. });
  234. get_my_jobs();
  235. /*_____________________________________________*/
  236. });
  237. })(jQuery);