timesheet source code
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

160 lines
5.4KB

  1. <?php
  2. namespace Biukop;
  3. class UserJob{
  4. private $user;
  5. private $db;
  6. private $table_name;
  7. private $jobs;
  8. private $options;
  9. public function __construct($login){
  10. if ($login == null || $login == "")
  11. $this->user = wp_get_current_user();
  12. else{
  13. $this->user = get_user_by('login', $login);
  14. }
  15. global $wpdb;
  16. $this->db = $wpdb;
  17. $this->table_name = $wpdb->prefix . 'acare_ts';
  18. }
  19. public function list_jobs_by_staff($start, $finish){
  20. $response = array(
  21. 'status'=>'success',
  22. 'jobs' => [],
  23. 'staff_name'=>$this->user->display_name,
  24. 'job_count' => 0.
  25. );
  26. $sql = "SELECT * FROM $this->table_name WHERE start>='%s' and start <='%s' and staff='%s' order by start ASC";
  27. $query = $this->db->prepare ($sql, array($start, $finish, $this->user->user_login));
  28. $jobs = $this->db->get_results($query);
  29. $response['job_count'] = count($jobs);
  30. //$response['sql'] = $query;
  31. if ($this->db->last_error == ""){
  32. $response['status'] = 'success';
  33. foreach( $jobs as $s){
  34. $response['jobs'][] = array(
  35. 'id' => $s->id,
  36. 'tos' => $s->tos,
  37. 'start'=> $s->start,
  38. 'finish'=> $s->finish,
  39. 'rate'=> $s->rate,
  40. 'staff'=> $s->staff,
  41. 'client'=> $s->client,
  42. 'ack' => $s->ack,
  43. 'rating' =>$s->rating,
  44. //descriptions
  45. 'rate_str'=> $this->get_rate_str($s->rate),
  46. 'tos_str'=> $this->get_tos_str($s->tos),
  47. 'client_name' => $this->get_display_name($s->client),
  48. 'client_addr' => $this->get_client_addr($s->client),
  49. );
  50. }
  51. }else{
  52. $response['status'] = 'error';
  53. $response['err'] = $this->db->last_error;
  54. }
  55. return $response;
  56. }
  57. public function list_jobs_by_client($start, $finish){
  58. $response = array(
  59. 'status'=>'success',
  60. 'jobs' => [],
  61. 'client_name'=>$this->user->display_name,
  62. 'job_count' => 0.
  63. );
  64. $sql = "SELECT * FROM $this->table_name WHERE start>='%s' and start <='%s' and client='%s' order by start ASC";
  65. //$query = $this->db->prepare ($sql, array($start, $finish, $this->user->user_login));
  66. $query = $this->db->prepare ($sql, array($start, $finish, "593d3253-07d0-40a7-8b8e-1a5df05a56db"));
  67. $jobs = $this->db->get_results($query);
  68. $response['job_count'] = count($jobs);
  69. //$response['sql'] = $query;
  70. if ($this->db->last_error == ""){
  71. $response['status'] = 'success';
  72. foreach( $jobs as $s){
  73. $el = array(
  74. 'id' => $s->id,
  75. 'tos' => $s->tos,
  76. 'start'=> $s->start,
  77. 'finish'=> $s->finish,
  78. 'rate'=> $s->rate,
  79. 'staff'=> $s->staff,
  80. 'client'=> $s->client,
  81. 'ack' => $s->ack,
  82. 'rating' => (int) $s->rating,
  83. //descriptions
  84. 'rate_str'=> $this->get_rate_str($s->rate),
  85. 'tos_str'=> $this->get_tos_str($s->tos),
  86. 'staff_name' => $this->get_display_name($s->staff),
  87. //extra field for GUI
  88. 'hl_start_date' => $this->get_date_month($s->start),
  89. 'hl_start' => $this->get_hh_mm($s->start),
  90. 'hl_finish' => $this->get_hh_mm($s->finish),
  91. 'rated' => ($s->rating >=1 && $s->rating<=5)? 'rated': '',
  92. 'start_day' => $this->get_weekday_name($s->start),
  93. 'finish_day' => $this->get_weekday_name($s->finish),
  94. );
  95. $el['checked_' . $s->rating] = 'checked';
  96. $response['jobs'][]=$el;
  97. }
  98. }else{
  99. $response['status'] = 'error';
  100. $response['err'] = $this->db->last_error;
  101. }
  102. return $response;
  103. }
  104. private function get_date_month($strdate){
  105. $d = new \DateTime($strdate);
  106. return $d->format('d/n');
  107. }
  108. private function get_hh_mm($strdate){
  109. $d = new \DateTime($strdate);
  110. return $d->format('H:i');
  111. }
  112. private function get_weekday_name($strdate){
  113. $d = new \DateTime($strdate);
  114. return $d->format("D");
  115. }
  116. private function get_rate_str($earnings_rate_id)
  117. {
  118. if ($this->options == NULL){
  119. $this->options = get_option('bts_payitem_earnings_rate');
  120. }
  121. foreach($this->options as $o){
  122. if ($o['EarningsRateID'] == $earnings_rate_id)
  123. return $o['Name'];
  124. }
  125. return "";
  126. }
  127. private function get_tos_str($ndis_code)
  128. {
  129. if ($this->ndis == null){
  130. $this->ndis = new NdisPrice(2019);
  131. }
  132. return $this->ndis->get_tos_str($ndis_code);
  133. }
  134. private function get_client_addr($login)
  135. {
  136. $user = get_user_by('login', $login);
  137. return get_user_meta($user->ID, 'address', true);
  138. }
  139. private function get_display_name($login)
  140. {
  141. $user = get_user_by('login', $login);
  142. return $user->display_name;
  143. }
  144. }
  145. ?>