workhour.html.php 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace zin;
  3. $buildWorkhour = function() use($workhours, $lang)
  4. {
  5. $count = $workhours['count'];
  6. unset($workhours['count']);
  7. $thead = h::thead
  8. (
  9. h::tr
  10. (
  11. h::th(set::rowspan(2), $lang->milestone->workHours),
  12. h::th(setClass('text-center'), set::colspan(count($workhours)), $lang->milestone->allStage),
  13. h::th(setClass('text-center'), set::rowspan(2), $lang->milestone->colSummary),
  14. h::th(setClass('text-center'), set::rowspan(2), $lang->milestone->colPercent)
  15. ),
  16. h::tr
  17. (
  18. array_map(function($stage){ return h::th(set::title($stage['name']), $stage['name']); }, $workhours)
  19. )
  20. );
  21. $tbody = h::tbody(h::tr
  22. (
  23. h::th($lang->milestone->devHours),
  24. array_map(function($stage){ return h::td($stage['dev']); }, $workhours),
  25. h::td(setClass('text-center'), $count['dev']),
  26. h::td(setClass('text-center'), $count['total'] == '0' ? '0%' : round($count['dev'] / $count['total'], 2) * 100 . '%')
  27. ), h::tr
  28. (
  29. h::th($lang->milestone->toHours, icon('help', setClass('ml-1'), set::title($lang->milestone->toHoursTip))),
  30. array_map(function($stage){ return h::td($stage['to']); }, $workhours),
  31. h::td(setClass('text-center'), $count['to']),
  32. h::td(setClass('text-center'), $count['total'] == '0' ? '0%' : round($count['to'] / $count['total'], 2) * 100 . '%')
  33. ), h::tr
  34. (
  35. h::th($lang->milestone->reviewHours, icon('help', setClass('ml-1'), set::title($lang->milestone->reviewHoursTip))),
  36. array_map(function($stage){ return h::td($stage['review']); }, $workhours),
  37. h::td(setClass('text-center'), $count['review']),
  38. h::td(setClass('text-center'), $count['total'] == '0' ? '0%' : round($count['review'] / $count['total'], 2) * 100 . '%')
  39. ), h::tr
  40. (
  41. h::th($lang->milestone->qaHours),
  42. array_map(function($stage){ return h::td($stage['qa']); }, $workhours),
  43. h::td(setClass('text-center'), $count['qa']),
  44. h::td(setClass('text-center'), $count['total'] == '0' ? '0%' : round($count['qa'] / $count['total'], 2) * 100 . '%')
  45. ), h::tr
  46. (
  47. h::th($lang->milestone->rowSummary),
  48. array_map(function($stage){ return h::td($stage['count']); }, $workhours),
  49. h::td(setClass('text-center'), $count['total']),
  50. h::td(setClass('text-center'), $count['total'] == '0' ? '0%' : '100%')
  51. ), h::tr
  52. (
  53. h::th($lang->milestone->rowPercent),
  54. array_map(function($stage) use($count){ return h::td($count['total'] == '0' ? '0%' : round($stage['count'] / $count['total'] * 100, 2) . '%'); }, $workhours),
  55. h::td(setClass('text-center'), '100%'),
  56. h::td(setClass('text-center'), '100%')
  57. ), h::tr
  58. (
  59. h::th($lang->milestone->qatoDev),
  60. array_map(function($stage){ return h::td($stage['qaToDev']); }, $workhours),
  61. h::td(),
  62. h::td()
  63. ));
  64. $chartOptions = array();
  65. $chartOptions['title'] = array('text' => $lang->milestone->chart->workhour, 'textStyle' => array('fontSize' => 14));
  66. $chartOptions['grid'] = array('left' => '3%', 'bottom' => '10%');
  67. $chartOptions['xAxis'] = array('type' => 'category', 'data' => array_column($workhours, 'name'));
  68. $chartOptions['yAxis']['type'] = 'value';
  69. $chartOptions['yAxis']['name'] = "({$lang->execution->workHour})";
  70. $chartOptions['yAxis']['axisLine'] = array('show' => true);
  71. $chartOptions['tooltip']['trigger'] = 'axis';
  72. $chartOptions['series'][] = array('type' => 'bar', 'data' => array_values(array_map(function($stage) use($count){ return $count['total'] == '0' ? 0 : round($stage['count'] / $count['total'] * 100, 2); }, $workhours)));
  73. return div
  74. (
  75. h::table(setClass('table bordered bg-white mb-4'), $thead, $tbody),
  76. div(setClass('bg-white mb-4'), echarts(set($chartOptions), set::width('100%'), set::height(300)))
  77. );
  78. };