timesheet source code
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

281 line
8.1KB

  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. var first = curr.getDate() - curr.getDay() + 1; //+1 we want Mon as first
  142. var last = first + 6; // last day is the first day + 6
  143. // First day is the day of the month - the day of the week
  144. if(curr.getDay()==0)//sunday
  145. {
  146. last = curr.getDate();
  147. first = last - 6;
  148. }
  149. var firstday = new Date(curr.setDate(first)); //Mon
  150. firstday.setHours(0,0,0);
  151. return format_date(firstday);
  152. }
  153. function get_this_week_end(){
  154. var curr = new Date; // get current date
  155. // First day is the day of the month - the day of the week
  156. var first = curr.getDate() - curr.getDay() + 1; //+1 we want Mon as first
  157. var last = first + 6; // last day is the first day + 6
  158. var lastday = new Date(curr.setDate(last)); //Sat
  159. lastday.setHours(23,59,59);
  160. return format_date(lastday);
  161. }
  162. function get_start_date()
  163. {
  164. var b=feedback_card;
  165. if (b.bts_job_start != '')
  166. return b.bts_job_start + " 00:00:00";
  167. else
  168. return get_this_week_start();
  169. }
  170. function get_finish_date()
  171. {
  172. var b=feedback_card;
  173. if (b.bts_job_finish != '')
  174. return b.bts_job_finish +" 23:59:59";
  175. else
  176. return get_this_week_end();
  177. }
  178. function info_message_box(title, message)
  179. {
  180. message_box('.job_ok_box', title, message);
  181. }
  182. function err_message_box(title, message)
  183. {
  184. message_box('.job_error_box', title, message);
  185. }
  186. function message_box(selector, title,message)
  187. {
  188. set_modal_title(selector, title);
  189. set_modal_message(selector, message);
  190. $(selector + '_trigger').trigger('click');
  191. }
  192. function set_modal_title(selector, title)
  193. {
  194. var el = selector + ' .ult_modal-title ';
  195. $(el).html(title);
  196. }
  197. function set_modal_message(selector, msg)
  198. {
  199. var el = selector + ' .ult_modal-body ';
  200. $(el).html(msg);
  201. }
  202. function do_update_ack(id, rating)
  203. {
  204. $.post(bts().ajax_url, { // POST request
  205. _ajax_nonce: bts().nonce, // nonce
  206. action: "client_ack_job", // action
  207. job_id: id,
  208. rating: rating,
  209. }, function(response, status, xhr){
  210. if (response.status == "success"){
  211. display_job_ack(id, response.rating);
  212. }else{
  213. console.warn("%o", response);
  214. clear_job_ack(id);
  215. }
  216. });
  217. }
  218. function clear_job_ack(id)
  219. {
  220. display_job_ack(id, 0); //clear it
  221. }
  222. function display_job_ack(id, rating)
  223. {
  224. for (var i=1; i<=5; i++){
  225. var selector = 'star' + i + '_' + id;
  226. $(selector).prop('checked',(rating == i));
  227. }
  228. if (rating >=1 && rating <=5){
  229. $('#container_' + id).addClass('rated');
  230. }else{
  231. $('#container_' + id).removeClass('rated');
  232. }
  233. }
  234. $(document).on('click', '.card input[type="radio"]', function(){
  235. var job_id = $(this).closest('div.rate').attr('data-job-id');
  236. var rating = $(this).attr('value');
  237. do_update_ack(job_id, rating);
  238. });
  239. get_my_jobs();
  240. /*_____________________________________________*/
  241. });
  242. })(jQuery);