recordworkhour.html.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. /**
  3. * The batchCreate 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. jsVar('confirmRecord', $lang->task->confirmRecord);
  12. jsVar('foldEffort', $lang->task->foldEffort);
  13. jsVar('unfoldEffort', $lang->task->unfoldEffort);
  14. if(isInModal()) set::id("modal-record-hours-task-{$task->id}");
  15. $isEn = $app->getClientLang() == 'en';
  16. modalHeader
  17. (
  18. set::title($lang->task->addEffort),
  19. set::entityID($task->id),
  20. to::suffix
  21. (
  22. span
  23. (
  24. setClass('flex gap-x-2 mx-3 nowrap'),
  25. $lang->task->estimate,
  26. span
  27. (
  28. setClass('label secondary-pale'),
  29. helper::formatHours($task->estimate) . $lang->task->suffixHour
  30. )
  31. ),
  32. span
  33. (
  34. setClass('flex gap-x-2 pr-4 nowrap'),
  35. $lang->task->consumed,
  36. span
  37. (
  38. setClass('label warning-pale'),
  39. span
  40. (
  41. setID('totalConsumed'),
  42. helper::formatHours($task->consumed)
  43. ),
  44. $lang->task->suffixHour
  45. )
  46. )
  47. )
  48. );
  49. if($efforts)
  50. {
  51. /* 多人串行任务工时分两部分. */
  52. if(!empty($task->team) and $task->mode == 'linear')
  53. {
  54. include './linearefforts.html.php';
  55. }
  56. else
  57. {
  58. $i = 1;
  59. $effortRows = '';
  60. foreach($efforts as $effort)
  61. {
  62. $effort->consumed = helper::formatHours($effort->consumed);
  63. $effort->left = helper::formatHours($effort->left);
  64. $canOperateEffort = $this->task->canOperateEffort($task, $effort);
  65. $operateTips = $canOperateEffort ? '' : $lang->task->effortOperateTips;
  66. $hidden = ($taskEffortFold and $i > 3) ? 'hidden' : '';
  67. $effortRows .= "<tr class='{$hidden}'>";
  68. $effortRows .= "<td>{$effort->id}</td>";
  69. $effortRows .= "<td>{$effort->date}</td>";
  70. $effortRows .= "<td>" . zget($users, $effort->account) . "</td>";
  71. $effortRows .= "<td>{$effort->work}</td>";
  72. $effortRows .= "<td>{$effort->consumed} {$lang->task->suffixHour}</td>";
  73. $effortRows .= "<td>{$effort->left} {$lang->task->suffixHour}</td>";
  74. $effortRows .= "<td>";
  75. if(common::hasPriv($app->rawModule, 'editEffort')) $effortRows .= "<a class='btn ghost toolbar-item square size-sm text-primary edit-effort' data-on='click' " . ($canOperateEffort ? "data-call='loadModal($.createLink(\"$app->rawModule\", \"editEffort\", \"id={$effort->id}\"))' " : '') . (!$canOperateEffort ? 'disabled ' : '') . ($operateTips ? "title='" . sprintf($operateTips, $lang->task->update) . "' " : '') . "><i class='icon icon-edit'></i></a>";
  76. if(common::hasPriv($app->rawModule, 'deleteWorkhour')) $effortRows .= "<a class='btn ghost toolbar-item square size-sm ajax-submit text-primary' data-confirm='{$lang->task->confirmDeleteEffort}' href='" . createLink($app->rawModule, 'deleteWorkhour', "id={$effort->id}") ."' ". (!$canOperateEffort ? 'disabled ' : '') . ($operateTips ? "title='" . sprintf($operateTips, $lang->delete) . "' " : '') . "'><i class='icon icon-trash'/></a></td>";
  77. $effortRows .= "</tr>";
  78. $i ++;
  79. }
  80. div
  81. (
  82. setClass('table-title'),
  83. $lang->task->committed
  84. );
  85. h::table
  86. (
  87. setClass('table condensed bordered taskEffort'),
  88. h::tr
  89. (
  90. h::th
  91. (
  92. width('32px'),
  93. $lang->idAB
  94. ),
  95. h::th
  96. (
  97. width('100px'),
  98. $lang->task->date
  99. ),
  100. h::th
  101. (
  102. width('100px'),
  103. $lang->task->recordedBy
  104. ),
  105. h::th($lang->task->work),
  106. h::th
  107. (
  108. width('60px'),
  109. $lang->task->consumedHours . ($isEn ? $lang->task->labelSuffixHour : '')
  110. ),
  111. h::th
  112. (
  113. width('60px'),
  114. $lang->task->leftAB . ($isEn ? $lang->task->labelSuffixHour : '')
  115. ),
  116. h::th
  117. (
  118. width('80px'),
  119. $lang->actions
  120. )
  121. ),
  122. html($effortRows)
  123. );
  124. if(count($efforts) > 3)
  125. {
  126. $iconClass = $taskEffortFold ? 'angle-down' : 'angle-top';
  127. $iconText = $taskEffortFold ? $lang->task->unfoldEffort : $lang->task->foldEffort;
  128. div
  129. (
  130. setID('toggleFoldIcon'),
  131. on::click('toggleFold'),
  132. setClass('text-primary'),
  133. span(setClass($iconClass . ' mr-1 icon-toggle'), icon('back-circle')),
  134. span(setClass('text'), $iconText)
  135. );
  136. }
  137. }
  138. }
  139. if(!$this->task->canOperateEffort($task))
  140. {
  141. if($task->status != 'closed')
  142. {
  143. $notice = '';
  144. if(!isset($task->members[$app->user->account]))
  145. {
  146. $notice = html(sprintf($lang->task->deniedNotice, '<strong>' . $lang->task->teamMember . '</strong>', $lang->task->logEfforts));
  147. }
  148. elseif($task->assignedTo != $app->user->account and $task->mode == 'linear')
  149. {
  150. $notice = html(sprintf($lang->task->deniedNotice, '<strong>' . zget($users, $task->assignedTo) . '</strong>', $lang->task->logEfforts));
  151. }
  152. div
  153. (
  154. setClass('alert with-icon'),
  155. icon('exclamation-sign text-gray text-4xl'),
  156. div
  157. (
  158. setClass('content'),
  159. $notice
  160. )
  161. );
  162. }
  163. }
  164. else
  165. {
  166. formBatchPanel
  167. (
  168. set::title($lang->task->addEffort),
  169. set::shadow(!isAjaxRequest('modal')),
  170. set::actions(array('submit')),
  171. set::actionsClass('btn-actions'),
  172. set::maxRows(3),
  173. formBatchItem
  174. (
  175. set::name('id'),
  176. set::label($lang->idAB),
  177. set::control('index'),
  178. set::width('32px')
  179. ),
  180. formBatchItem
  181. (
  182. set::required(true),
  183. set::name('date'),
  184. set::label($lang->task->date),
  185. set::width('130px'),
  186. set::control(array('control' => 'date', 'id' => '$GID')),
  187. set::value(helper::today())
  188. ),
  189. formBatchItem
  190. (
  191. set::name('work'),
  192. set::label($lang->task->work),
  193. set::width('auto'),
  194. set::control('textarea'),
  195. set::required($config->edition != 'open')
  196. ),
  197. formBatchItem
  198. (
  199. set::required(true),
  200. set::name('consumed'),
  201. set::label($lang->task->consumedHours . ($isEn ? $lang->task->labelSuffixHour : '')),
  202. set::width('80px'),
  203. set::control
  204. (
  205. array(
  206. 'type' => 'inputControl',
  207. 'suffix' => $lang->task->suffixHour,
  208. 'suffixWidth' => 20
  209. )
  210. )
  211. ),
  212. formBatchItem
  213. (
  214. set::required(true),
  215. set::name('left'),
  216. set::label($lang->task->leftAB . ($isEn ? $lang->task->labelSuffixHour : '')),
  217. set::width('80px'),
  218. set::control
  219. (
  220. array(
  221. 'type' => 'inputControl',
  222. 'suffix' => $lang->task->suffixHour,
  223. 'suffixWidth' => 20
  224. )
  225. )
  226. )
  227. );
  228. }
  229. render();