| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- /**
- * The index view file of weekly module of ZenTaoPMS.
- * @copyright Copyright 2009-2025 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
- * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
- * @author Yidong Wang <wangyidong@chandao.com>
- * @package weekly
- * @link https://www.zentao.net
- */
- namespace zin;
- $exportBtn = null;
- if(hasPriv('weekly', 'exportreport'))
- {
- $exportBtn = div
- (
- btn
- (
- setID('exportWeeklyBtn'),
- setClass('pull-right mb-2 secondary'),
- setData('toggle', 'modal'),
- setData('selectedweekbegin', $date),
- set::url($this->createLink('weekly', 'exportweeklyreport', "module=weekly&projectID={$project->id}")),
- $lang->export
- )
- );
- }
- detailHeader
- (
- set::backBtn(),
- set::suffix($exportBtn)
- );
- /* Build overview. */
- h::table
- (
- setClass('table bordered bg-white'),
- h::tr
- (
- h::th(setClass('w-1/4'), $lang->weekly->term),
- h::td(setClass('w-1/4'), $monday . ' ~ ' . $lastDay),
- h::th(setClass('w-1/4'), $lang->weekly->master),
- h::td(setClass('w-1/4'), zget($users, $project->PM, ''))
- ),
- h::tr
- (
- h::th($lang->weekly->project),
- h::td(setClass('projectName'), set::title($project->name), $project->name),
- h::th($lang->weekly->staff),
- h::td($staff)
- )
- );
- /* Build summary. */
- $projectCost = zget($this->config->custom, 'cost', 1);
- div(setClass('page-title'), h::h4(setClass('m-2.5 text-center'), $lang->weekly->summary));
- h::table(setClass('table bordered bg-white text-center'), h::tr
- (
- h::td
- (
- $lang->weekly->progress,
- span(setClass('pl-1'), setData(array('toggle' => 'dropdown', 'trigger' => 'hover')), icon('help')),
- h::menu(setClass("dropdown-menu custom p-1 h-44 overflow-auto text-left"), setID('helpDropdown'), setStyle(array('font-weight' => 'normal', 'font-size' => '12px', 'line-height' => '1.5')), html($lang->weekly->reportHelpNotice))
- ),
- h::td(),
- h::td($lang->weekly->analysisResult),
- h::td()
- ), h::tr
- (
- h::td($lang->weekly->pv),
- h::td($pv),
- h::td(set::rowspan(4), $lang->weekly->progress),
- h::td(set::rowspan(4), html($this->weekly->getTips('progress', $sv) . '<br/>' . $this->weekly->getTips('cost', $cv)))
- ), h::tr(h::td($lang->weekly->ev), h::td($ev)), h::tr(h::td($lang->weekly->ac), h::td($ac)), h::tr(h::td($lang->weekly->sv), h::td($sv ? $sv . '%' : '')), h::tr
- (
- h::td($lang->weekly->cv),
- h::td($cv ? $cv . '%' : ''),
- h::td($lang->weekly->cost),
- h::td(setClass('projectCost'), empty($projectCost) ? 0 : $ac * $projectCost)
- ));
- /* Build table. */
- $buildTable = function($title, $cols, $data, $total = array(), $tableClass = '')
- {
- $thead = h::thead
- (
- h::tr(array_map(function($col) { return h::th(setClass(zget($col, 'class', '')), $col['name']); }, $cols))
- );
- $trList = array();
- foreach($data as $row)
- {
- $trList[] = '<tr>' . implode(array_map(function($col) { return '<td class="' . zget($col, 'class', '') . '">' . $col['value'] . '</td>'; }, $row)) . '</tr>';
- }
- if($total) $trList[] = '<tr><td colspan="' . count($cols) . '" class="' . zget($total, 'class', '') . '">' . $total['content'] . '</td></tr>';
- $tbody = h::tbody(html(implode($trList)));
- return div
- (
- div(setClass('page-title'), h::h4(setClass('m-2.5 text-center'), $title)),
- h::table(setClass("table bg-white {$tableClass}"), $thead, $tbody)
- );
- };
- /* Build finished table. */
- $cols = array();
- $cols[] = array('name' => $lang->idAB, 'class' => 'w-24');
- $cols[] = array('name' => $lang->task->name, 'class' => 'text-left');
- $cols[] = array('name' => $lang->task->estStarted, 'class' => 'text-left w-32');
- $cols[] = array('name' => $lang->task->deadline, 'class' => 'text-left w-32');
- $cols[] = array('name' => $lang->task->realStarted, 'class' => 'text-left w-32');
- $cols[] = array('name' => $lang->task->finishedBy, 'class' => 'text-left w-32');
- $data = array();
- foreach($finished as $task)
- {
- $data[] = array
- (
- array('class' => 'text-center', 'value' => sprintf('%03d', $task->id)),
- array('class' => 'text-left', 'value' => html::a($this->createLink('task', 'view', "id={$task->id}"), $task->name, '', "title='{$task->name}'")),
- array('class' => 'text-left', 'value' => $task->estStarted),
- array('class' => 'text-left', 'value' => $task->deadline),
- array('class' => 'text-left', 'value' => !helper::isZeroDate($task->realStarted) ? substr($task->realStarted, 0, 11) : ''),
- array('class' => 'text-left', 'value' => zget($users, $task->finishedBy, ''))
- );
- }
- $buildTable($lang->weekly->finished, $cols, $data, array('content' => sprintf($lang->weekly->totalCount, count($finished)), 'class' => 'text-right font-bold'));
- /* Build postponed table. */
- $cols = array();
- $cols[] = array('name' => $lang->idAB, 'class' => 'w-24');
- $cols[] = array('name' => $lang->task->name, 'class' => 'text-left');
- $cols[] = array('name' => $lang->task->assignedTo, 'class' => 'text-left w-24');
- $cols[] = array('name' => $lang->task->estStarted, 'class' => 'text-left w-32');
- $cols[] = array('name' => $lang->task->deadline, 'class' => 'text-left w-32');
- $cols[] = array('name' => $lang->task->realStarted, 'class' => 'text-left w-32');
- $cols[] = array('name' => $lang->task->progress, 'class' => 'text-left w-24');
- $data = array();
- foreach($postponed as $task)
- {
- $data[] = array
- (
- array('class' => 'text-center', 'value' => sprintf('%03d', $task->id)),
- array('class' => 'text-left', 'value' => html::a($this->createLink('task', 'view', "id={$task->id}"), $task->name, '', "title='{$task->name}'")),
- array('class' => 'text-left', 'value' => zget($users, $task->assignedTo)),
- array('class' => 'text-left', 'value' => $task->estStarted),
- array('class' => 'text-left', 'value' => $task->deadline),
- array('class' => 'text-left', 'value' => !helper::isZeroDate($task->realStarted) ? substr($task->realStarted, 0, 11) : ''),
- array('class' => 'text-left', 'value' => $task->progress . '%')
- );
- }
- $buildTable($lang->weekly->postponed, $cols, $data, array('content' => sprintf($lang->weekly->totalCount, count($postponed)), 'class' => 'text-right font-bold'));
- /* Build next week data table. */
- $cols = array();
- $cols[] = array('name' => $lang->idAB, 'class' => 'w-24');
- $cols[] = array('name' => $lang->task->name, 'class' => 'text-left');
- $cols[] = array('name' => $lang->task->assignedTo, 'class' => 'text-left w-24');
- $cols[] = array('name' => $lang->task->estStarted, 'class' => 'text-left w-32');
- $cols[] = array('name' => $lang->task->deadline, 'class' => 'text-left w-32');
- $data = array();
- foreach($nextWeek as $task)
- {
- $data[] = array
- (
- array('class' => 'text-center', 'value' => sprintf('%03d', $task->id)),
- array('class' => 'text-left', 'value' => html::a($this->createLink('task', 'view', "id={$task->id}"), $task->name, '', "title='{$task->name}'")),
- array('class' => 'text-left', 'value' => zget($users, $task->assignedTo)),
- array('class' => 'text-left', 'value' => $task->estStarted),
- array('class' => 'text-left', 'value' => $task->deadline)
- );
- }
- $buildTable($lang->weekly->nextWeek, $cols, $data, array('content' => sprintf($lang->weekly->totalCount, count($nextWeek)), 'class' => 'text-right font-bold'));
- /* Build workload by type table. */
- $cols = array();
- $cols[] = array('name' => $lang->task->type);
- foreach(array_filter($lang->task->typeList) as $type) $cols[] = array('name' => $type);
- $cols[] = array('name' => $lang->weekly->total);
- $data = array();
- $total = 0;
- $data[0][] = array('value' => $lang->weekly->workload);
- foreach(array_keys(array_filter($lang->task->typeList)) as $type)
- {
- $worktimes = zget($workload, $type, 0);
- $total += $worktimes;
- $data[0][] = array('value' => $worktimes);
- }
- $data[0][] = array('value' => $total);
- $buildTable($lang->weekly->workloadByType, $cols, $data, array(), 'mb-5 text-center');
|