timesheet.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /* Copyright (C) 2014 delcroip <delcroip@gmail.com>
  2. * Laurent Destailleur 2015 <eldy@users.sourceforge.net>
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. /* Parse en input data for time entry into timesheet */
  18. function regexEvent(objet,evt,type)
  19. {
  20. console.log('regexEvent type='+type);
  21. switch(type)
  22. {
  23. case 'days':
  24. var regex= /^[0-9]{1}([.,]{1}[0-9]{1})?$/;
  25. if(regex.test(objet.value) )
  26. {
  27. var tmp=objet.value.replace(',','.');
  28. if(tmp<=1.5){
  29. var tmpint=parseInt(tmp);
  30. if(tmp-tmpint>=0.5){
  31. objet.value= tmpint+0.5;
  32. }else{
  33. objet.value= tmpint;
  34. }
  35. }else{
  36. objet.value= '1.5';
  37. }
  38. }else{
  39. objet.value= '0';
  40. }
  41. break;
  42. case 'hours':
  43. var regex= /^[0-9]{1,2}:[0-9]{2}$/;
  44. var regex2=/^[0-9]{1,2}$/;
  45. if(!regex.test(objet.value))
  46. {
  47. if(regex2.test(objet.value))
  48. objet.value=objet.value+':00';
  49. else
  50. objet.value='';
  51. }
  52. /* alert(jQuery("#"+id).val()); */
  53. break;
  54. case 'timeChar':
  55. //var regex= /^[0-9:]{1}$/;
  56. //alert(event.charCode);
  57. var charCode = (evt.which) ? evt.which : event.keyCode;
  58. if(((charCode >= 48) && (charCode <= 57)) || //num
  59. (charCode===46) || (charCode===8)||// comma & periode
  60. (charCode === 58) || (charCode==44) )// : & all charcode
  61. {
  62. // ((charCode>=96) && (charCode<=105)) || //numpad
  63. return true;
  64. }else
  65. {
  66. return false;
  67. }
  68. break;
  69. default:
  70. break;
  71. }
  72. }
  73. function pad(n) {
  74. return (n < 10) ? ("0" + n) : n;
  75. }
  76. /* function from http://www.timlabonne.com/2013/07/parsing-a-time-string-with-javascript/ */
  77. function parseTime(timeStr, dt)
  78. {
  79. if (!dt) {
  80. dt = new Date();
  81. }
  82. var time = timeStr.match(/(\d+)(?::(\d\d))?\s*(p?)/i);
  83. if (!time) {
  84. return -1;
  85. }
  86. var hours = parseInt(time[1], 10);
  87. if (hours == 12 && !time[3]) {
  88. hours = 0;
  89. }
  90. else {
  91. hours += (hours < 12 && time[3]) ? 12 : 0;
  92. }
  93. dt.setHours(hours);
  94. dt.setMinutes(parseInt(time[2], 10) || 0);
  95. dt.setSeconds(0, 0);
  96. return 0;
  97. }
  98. /* Update total. days = column nb staring from 0 */
  99. function updateTotal(days,mode)
  100. {
  101. console.log('updateTotal days='+days+' mode='+mode);
  102. if(mode=="hours")
  103. {
  104. var total = new Date(0);
  105. total.setHours(0);
  106. total.setMinutes(0);
  107. var nbline = document.getElementById('numberOfLines').value;
  108. for (var i=0;i<nbline;i++)
  109. {
  110. var id='timespent['+i+']['+days+']';
  111. var taskTime= new Date(0);
  112. var element=document.getElementById(id);
  113. if(element)
  114. {
  115. /* alert(element.value);*/
  116. if (element.value)
  117. {
  118. result=parseTime(element.value,taskTime);
  119. }
  120. else
  121. {
  122. result=parseTime(element.innerHTML,taskTime);
  123. }
  124. if (result >= 0)
  125. {
  126. total.setHours(total.getHours()+taskTime.getHours());
  127. total.setMinutes(total.getMinutes()+taskTime.getMinutes());
  128. }
  129. }
  130. var id='timeadded['+i+']['+days+']';
  131. var taskTime= new Date(0);
  132. var element=document.getElementById(id);
  133. if(element)
  134. {
  135. /* alert(element.value);*/
  136. if (element.value)
  137. {
  138. result=parseTime(element.value,taskTime);
  139. }
  140. else
  141. {
  142. result=parseTime(element.innerHTML,taskTime);
  143. }
  144. if (result >= 0)
  145. {
  146. total.setHours(total.getHours()+taskTime.getHours());
  147. total.setMinutes(total.getMinutes()+taskTime.getMinutes());
  148. }
  149. }
  150. }
  151. if (document.getElementById('totalDay['+days+']')) // May be null if no task records to output (nbline is also 0 in this case)
  152. {
  153. document.getElementById('totalDay['+days+']').innerHTML = pad(total.getHours())+':'+pad(total.getMinutes());
  154. //addText(,total.getHours()+':'+total.getMinutes());
  155. }
  156. }
  157. else
  158. {
  159. var total =0;
  160. var nbline = document.getElementById('numberOfLines').value;
  161. for (var i=0;i<nbline;i++)
  162. {
  163. var id='timespent['+i+']['+days+']';
  164. var taskTime= new Date(0);
  165. var element=document.getElementById(id);
  166. if(element)
  167. {
  168. if (element.value)
  169. {
  170. total+=parseInt(element.value);
  171. }
  172. else
  173. {
  174. total+=parseInt(element.innerHTML);
  175. }
  176. }
  177. var id='timeadded['+i+']['+days+']';
  178. var taskTime= new Date(0);
  179. var element=document.getElementById(id);
  180. if(element)
  181. {
  182. if (element.value)
  183. {
  184. total+=parseInt(element.value);
  185. }
  186. else
  187. {
  188. total+=parseInt(element.innerHTML);
  189. }
  190. }
  191. }
  192. if (document.getElementById('totalDay['+days+']')) // May be null if no task records to output (nbline is also 0 in this case)
  193. {
  194. document.getElementById('totalDay['+days+']').innerHTML = total;
  195. }
  196. }
  197. }