report.html.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. /**
  3. * The report view file of review module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2024 禅道软件(青岛)有限公司(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 Mengyi Liu
  7. * @package review
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $n = 0;
  12. foreach($approvalIDList as &$approvalItem)
  13. {
  14. $n++;
  15. $approvalItem = sprintf($lang->review->selectApprovalText, $n);
  16. }
  17. div
  18. (
  19. setClass('detail-header row gap-2 items-center flex-none justify-between'),
  20. div
  21. (
  22. setClass('row gap-2 items-center flex-none'),
  23. !$app->session->notHead ? backBtn($lang->goback, setClass('mr-2 size-md primary-outline'), set::icon('back')) : null,
  24. entityTitle(setClass('min-w-0'), set::id($review->id), set::object($review), set::title($review->title), set::titleClass('text-lg text-clip font-bold'), set::type('review'), set::joinerClass('text-lg')),
  25. icon('angle-right'),
  26. span(setClass('text-lg text-clip font-bold'), $lang->review->report->common),
  27. !$app->session->notHead ? picker(on::change()->call('changeReview', jsRaw('event')), setClass('w-44'), set::name('approval'), set::items($approvalIDList), set::required(true), set::value($approvalID ? $approvalID : '')) : null
  28. ),
  29. !$app->session->notHead && common::hasPriv('review', 'exportReport') ? btn
  30. (
  31. set::text($lang->export),
  32. set::icon('export'),
  33. set::className('ghost'),
  34. setData(array('toggle' => 'modal', 'size' => 'sm')),
  35. set::url(helper::createLink('review', 'exportReport', "reviewID={$reviewID}&approvalID={$approvalID}"))
  36. ) : null
  37. );
  38. pageJS(<<<JAVASCRIPT
  39. changeReview = function(event)
  40. {
  41. loadPage($.createLink('review', 'report', 'reviewID=' + $reviewID + '&approvalID=' + $(event.target).val()));
  42. };
  43. JAVASCRIPT
  44. );
  45. $objectScale = (float)$objectScale;
  46. $consumed = 0;
  47. $accountConsumed = array();
  48. unset($efforts['typeList']);
  49. foreach($efforts as $effort)
  50. {
  51. $accountConsumed[$effort->account][] = $effort->consumed;
  52. $consumed += empty($effort->consumed) ? 0 : $effort->consumed;
  53. }
  54. panel
  55. (
  56. setClass('mt-2'),
  57. h::table
  58. (
  59. setClass('table bordered table-fixed'),
  60. h::thead(h::tr(h::th(setClass('text-center text-lg'), set::colspan('8'), $lang->review->explain))),
  61. h::tbody
  62. (
  63. h::tr(h::th(setClass('text-left'), set::colspan('2'), $lang->review->object), h::td(set::colspan('2'), $review->objectName), h::th(setClass('text-left'), set::colspan('2'), $lang->review->reviewerCount), h::td(set::colspan('2'), count($reviewers))),
  64. h::tr(h::th(setClass('text-left'), set::colspan('2'), $lang->review->reviewedDate), h::td(set::colspan('2'), isset($approvalNode[0]->reviewedDate) && !helper::isZeroDate($approvalNode[0]->reviewedDate) ? $approvalNode[0]->reviewedDate : ''), h::th(setClass('text-left'), set::colspan('2'), $lang->review->reviewedHours), h::td(set::colspan('2'), $consumed)),
  65. h::tr(h::th
  66. (
  67. setClass('text-left'),
  68. set::colspan('2'),
  69. $lang->review->issueCount,
  70. icon('help', setClass('ml-0.5'), toggle::tooltip(array('title' => $lang->review->issueCountTip, 'placement' => 'bottom', 'type' => 'white', 'className' => 'text-dark border border-light leading-5')))
  71. ), h::td(set::colspan('2'), count($issues)), h::th
  72. (
  73. setClass('text-left'),
  74. set::colspan('2'),
  75. $lang->review->issueFoundRate,
  76. icon('help', setClass('ml-0.5'), toggle::tooltip(array('title' => $lang->review->issueFoundRateTip, 'placement' => 'bottom', 'type' => 'white', 'className' => 'text-dark border border-light leading-5')))
  77. ), h::td(set::colspan('2'), $consumed == 0 ? 0 : round(count($issues) / $consumed, 2)))
  78. )
  79. )
  80. );
  81. $issueTrs = array();
  82. foreach($issues as $issue)
  83. {
  84. $issueTrs[] = h::tr
  85. (
  86. h::td($issue->id),
  87. h::td(set::colspan('2'), $issue->title),
  88. h::td(set::colspan('2'), zget($users, $issue->createdBy)),
  89. h::td(setClass('text-ellipsis'), set::colspan('5'), set::title(strip_tags($issue->opinion)), html($issue->opinion))
  90. );
  91. }
  92. $issueTable = !empty($issues) ? h::table
  93. (
  94. setClass('table bordered table-fixed'),
  95. h::thead
  96. (
  97. h::tr
  98. (
  99. h::th($lang->idAB),
  100. h::th(set::colspan('2'), $lang->review->issues),
  101. h::th(set::colspan('2'), $lang->review->reviewer),
  102. h::th(set::colspan('5'), $lang->comment)
  103. )
  104. ),
  105. h::tbody
  106. (
  107. $issueTrs
  108. )
  109. ) : null;
  110. $approvalTrs = array();
  111. foreach($approvalNode as $reviewItem)
  112. {
  113. $approvalTrs[] = h::tr
  114. (
  115. h::td(!helper::isZeroDate($reviewItem->reviewedDate) ? $reviewItem->reviewedDate : ''),
  116. h::td(set::colspan('2'), zget($users, $reviewItem->reviewedBy)),
  117. h::td(zget($lang->review->resultList, $reviewItem->result)),
  118. h::td(!empty($accountConsumed[$reviewItem->reviewedBy]) && $reviewItem->result != 'ignore' ? array_shift($accountConsumed[$reviewItem->reviewedBy]) : 0),
  119. h::td(set::colspan('5'), setClass('finalOpinion'), set::title(strip_tags($reviewItem->opinion)), html($reviewItem->opinion))
  120. );
  121. }
  122. $approvalTable = !empty($approvalNode) ? h::table
  123. (
  124. setClass('table bordered table-fixed'),
  125. h::thead
  126. (
  127. h::tr
  128. (
  129. h::th(setClass('w-32'), $lang->review->reviewedDate),
  130. h::th(setClass('w-16'), set::colspan('2'), $lang->review->reviewer),
  131. h::th(setClass('w-32'), $lang->review->reviewResult),
  132. h::th(setClass('w-24'), $lang->reviewresult->consumed),
  133. h::th(setClass('w-64'), set::colspan('5'), $lang->review->finalOpinion)
  134. )
  135. ),
  136. h::tbody
  137. (
  138. $approvalTrs
  139. )
  140. ) : null;
  141. $reviewResult = isset($approval->result) ? $approval->result : ($review->result == 'pass' ? 'pass' : 'fail');
  142. $reportReviwers = '';
  143. foreach($reviewers as $account) $reportReviwers .= zget($users, $account) . ' ';
  144. panel
  145. (
  146. setClass('mt-2.5'),
  147. $issueTable,
  148. $approvalTable,
  149. h::table
  150. (
  151. setClass('table bordered table-fixed'),
  152. h::thead
  153. (
  154. h::tr
  155. (
  156. h::th(setClass('text-center'), set::colspan('8'), $lang->review->resultExplain),
  157. h::th(setClass('text-center'), set::colspan('2'), $lang->review->conclusion)
  158. )
  159. ),
  160. h::tbody(h::tr
  161. (
  162. h::td(set::colspan('8'), $lang->review->resultExplainList['pass']),
  163. h::td(setClass('text-center status-' . $reviewResult), set::colspan('2'), set::rowspan('2'), zget($lang->review->resultList, $reviewResult))
  164. ), h::tr(h::td(set::colspan('8'), $lang->review->resultExplainList['fail'])))
  165. ),
  166. h::table
  167. (
  168. setClass('table border border-t-0 table-fixed'),
  169. h::tr
  170. (
  171. h::th(setClass('text-right w-1/4'), set::colspan('2'), $lang->review->reportCreatedBy),
  172. h::th(setClass('text-left w-1/4'), set::colspan('2'), zget($users, $review->createdBy)),
  173. h::th(setClass('text-right w-1/4'), set::colspan('2'), $lang->review->reportApprovedBy),
  174. h::th(setClass('text-left w-1/4'), set::colspan('2'), $reportReviwers)
  175. )
  176. )
  177. );
  178. $this->session->notHead ? render('fragment') : render();