linearefforts.html.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. /**
  3. * The linear efforts view file of task module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author Sun Guangming<sunguangming@easycorp.ltd>
  7. * @package task
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $this->app->loadLang('execution');
  12. $isEn = $app->getClientLang() == 'en';
  13. $teamOrders = array();
  14. foreach($task->team as $team) $teamOrders[$team->order] = $team->account;
  15. $index = 0;
  16. $efforts = array_values($efforts);
  17. $recorders = array();
  18. $allOrders = array();
  19. $allEfforts = array();
  20. $myOrders = array();
  21. $myCountList = array();
  22. $myLastID = array();
  23. $myEfforts = array();
  24. $myLastOrder = 0;
  25. foreach($efforts as $key => $effort)
  26. {
  27. $effort->consumed = helper::formatHours($effort->consumed);
  28. $effort->left = helper::formatHours($effort->left);
  29. $prevEffort = $key > 0 ? $efforts[$key - 1] : null;
  30. $order = (!$prevEffort or $prevEffort->order == $effort->order) ? $index : ++$index;
  31. $account = $effort->account;
  32. $allEfforts[$order][] = $effort;
  33. $recorders[$order][$account] = $account;
  34. $allOrders[$order] = $effort->order + 1;
  35. if($app->user->account == $account)
  36. {
  37. if($allOrders[$myLastOrder] != $effort->order + 1) $myLastOrder = $order;
  38. $myCountList[$myLastOrder] = isset($myCountList[$myLastOrder]) ? ++$myCountList[$myLastOrder] : 1;
  39. $myLastID[$myLastOrder] = isset($myLastID[$myLastOrder]) ? ($myLastID[$myLastOrder] < $effort->id ? $effort->id : $myLastID[$myLastOrder]) : $effort->id;
  40. $myEfforts[$myLastOrder][] = $effort;
  41. if(!isset($myOrders[$effort->order])) $myOrders[$effort->order] = 0;
  42. $myOrders[$effort->order] += 1;
  43. }
  44. }
  45. ksort($myOrders);
  46. $myEffortTable = array();
  47. foreach($myCountList as $order => $count)
  48. {
  49. $tdDom = h::td
  50. (
  51. set::rowspan($count),
  52. $allOrders[$order]
  53. );
  54. $i = 1;
  55. foreach($myEfforts[$order] as $index => $effort)
  56. {
  57. $hidden = ($taskEffortFold and $i > 3) ? 'hidden' : '';
  58. $myEffortTable[] = h::tr
  59. (
  60. setClass($hidden),
  61. $tdDom,
  62. h::td($effort->date),
  63. h::td(zget($users, $effort->account)),
  64. h::td(html($effort->work)),
  65. h::td($effort->consumed . ' h'),
  66. h::td($effort->left . ' h'),
  67. h::td
  68. (
  69. common::hasPriv('task', 'editEffort') ? a
  70. (
  71. setClass('btn ghost toolbar-item square size-sm text-primary edit-effort'),
  72. on::click("loadModal('" . createLink('task', 'editEffort', "id={$effort->id}") . "')"),
  73. icon('edit')
  74. ) : null,
  75. common::hasPriv('task', 'deleteWorkhour') ? a
  76. (
  77. setClass('btn ghost toolbar-item square size-sm ajax-submit text-primary'),
  78. setData(array('confirm' => $lang->task->confirmDeleteEffort)),
  79. set::href(createLink('task', 'deleteWorkhour', "id={$effort->id}")),
  80. icon('trash')
  81. ) : null
  82. )
  83. );
  84. $tdDom = null;
  85. $i ++;
  86. }
  87. }
  88. $iconClass = $taskEffortFold ? 'angle-down' : 'angle-top';
  89. $iconText = $taskEffortFold ? $lang->task->unfoldEffort : $lang->task->foldEffort;
  90. $allEffortTable = array();
  91. foreach($recorders as $order => $accounts)
  92. {
  93. $count = count($allEfforts[$order]);
  94. $tdDom = h::td
  95. (
  96. set::rowspan($count),
  97. $allOrders[$order]
  98. );
  99. foreach($allEfforts[$order] as $effort)
  100. {
  101. $allEffortTable[] = h::tr
  102. (
  103. $tdDom,
  104. h::td($effort->date),
  105. h::td(zget($users, $effort->account)),
  106. h::td(html($effort->work)),
  107. h::td($effort->consumed . ' h'),
  108. h::td($effort->left . ' h')
  109. );
  110. $tdDom = null;
  111. }
  112. }
  113. div
  114. (
  115. setID('linearefforts'),
  116. tabs
  117. (
  118. tabPane
  119. (
  120. set::key('myEffort'),
  121. set::active(true),
  122. set::title($lang->task->myEffort),
  123. h::table
  124. (
  125. setClass('table condensed bordered taskEffort'),
  126. h::tr
  127. (
  128. h::th
  129. (
  130. width('60px'),
  131. $lang->task->teamOrder
  132. ),
  133. h::th
  134. (
  135. width('100px'),
  136. $lang->task->date
  137. ),
  138. h::th
  139. (
  140. width('100px'),
  141. $lang->task->recordedBy
  142. ),
  143. h::th($lang->task->work),
  144. h::th
  145. (
  146. width('60px'),
  147. $lang->task->consumedAB . ($isEn ? $lang->task->labelSuffixHour : '')
  148. ),
  149. h::th
  150. (
  151. width('60px'),
  152. $lang->task->leftAB . ($isEn ? $lang->task->labelSuffixHour : '')
  153. ),
  154. h::th
  155. (
  156. width('80px'),
  157. $lang->actions
  158. )
  159. ),
  160. $myEffortTable
  161. ),
  162. count($myEffortTable) > 3 ? div
  163. (
  164. setID('toggleFoldIcon'),
  165. on::click('toggleFold'),
  166. setClass('text-primary'),
  167. span(setClass($iconClass . ' mr-1 icon-toggle'), icon('back-circle')),
  168. span(setClass('text'), $iconText)
  169. ) : null
  170. ),
  171. tabPane
  172. (
  173. set::key('allEffort'),
  174. set::title($lang->task->allEffort),
  175. h::table
  176. (
  177. setClass('table condensed bordered'),
  178. h::tr
  179. (
  180. h::th
  181. (
  182. width('60px'),
  183. $lang->task->teamOrder
  184. ),
  185. h::th
  186. (
  187. width('100px'),
  188. $lang->task->date
  189. ),
  190. h::th
  191. (
  192. width('100px'),
  193. $lang->task->recordedBy
  194. ),
  195. h::th($lang->task->work),
  196. h::th
  197. (
  198. width('60px'),
  199. $lang->task->consumedAB
  200. ),
  201. h::th
  202. (
  203. width('60px'),
  204. $lang->task->leftAB
  205. )
  206. ),
  207. $allEffortTable
  208. )
  209. )
  210. )
  211. );