From 00a0e78cab74c97808519f830f068047c390614e Mon Sep 17 00:00:00 2001 From: sunguangming Date: Thu, 13 Jul 2023 16:49:23 +0800 Subject: [PATCH] * Add my efforts table and all efforts table. --- module/task/ui/linearefforts.html.php | 199 +++++++++++++++++++++++++ module/task/ui/recordworkhour.html.php | 93 ++++++++++-- 2 files changed, 280 insertions(+), 12 deletions(-) create mode 100644 module/task/ui/linearefforts.html.php diff --git a/module/task/ui/linearefforts.html.php b/module/task/ui/linearefforts.html.php new file mode 100644 index 0000000000..a7ba4cbd13 --- /dev/null +++ b/module/task/ui/linearefforts.html.php @@ -0,0 +1,199 @@ + + * @package task + * @link https://www.zentao.net + */ +namespace zin; + +$this->app->loadLang('execution'); +$teamOrders = array(); +foreach($task->team as $team) $teamOrders[$team->order] = $team->account; + +$index = 0; +$efforts = array_values($efforts); +$recorders = array(); +$allOrders = array(); +$allEfforts = array(); +$myOrders = array(); +$myCountList = array(); +$myLastID = array(); +$myEfforts = array(); +$myLastOrder = 0; +foreach($efforts as $key => $effort) +{ + $prevEffort = $key > 0 ? $efforts[$key - 1] : null; + $order = (!$prevEffort or $prevEffort->order == $effort->order) ? $index : ++$index; + $account = $effort->account; + + $allEfforts[$order][] = $effort; + $recorders[$order][$account] = $account; + + $allOrders[$order] = $effort->order + 1; + if($app->user->account == $account) + { + if($allOrders[$myLastOrder] != $effort->order + 1) $myLastOrder = $order; + $myCountList[$myLastOrder] = isset($myCountList[$myLastOrder]) ? ++$myCountList[$myLastOrder] : 1; + $myLastID[$myLastOrder] = isset($myLastID[$myLastOrder]) ? ($myLastID[$myLastOrder] < $effort->id ? $effort->id : $myLastID[$myLastOrder]) : $effort->id; + $myEfforts[$myLastOrder][] = $effort; + + if(!isset($myOrders[$effort->order])) $myOrders[$effort->order] = 0; + $myOrders[$effort->order] += 1; + } +} +ksort($myOrders); + +$myEffortTable = array(); +foreach($myCountList as $order => $count) +{ + foreach($myEfforts[$order] as $effort) + { + $myEffortTable[] = h::tr + ( + h::td + ( + set::rowspan($count), + $allOrders[$order] + ), + h::td($effort->date), + h::td(zget($users, $effort->account)), + h::td($effort->work), + h::td($effort->consumed . ' H'), + h::td($effort->left . ' H'), + h::td + ( + common::hasPriv('task', 'editEffort') ? a + ( + setClass('btn ghost toolbar-item square size-sm'), + set::href(createLink('task', 'editEffort', "id={$effort->id}")), + icon('edit') + ) : null, + common::hasPriv('task', 'deleteWorkhour') ? a + ( + setClass('btn ghost toolbar-item square size-sm ajax-submit'), + set('data-confirm', $lang->task->confirmDeleteEstimate), + set::href(createLink('task', 'deleteWorkhour', "id={$effort->id}")), + icon('trash') + ) : null, + ), + ); + } +} + +$allEffortTable = array(); +foreach($recorders as $order => $accounts) +{ + $count = count($allEfforts[$order]); + foreach($allEfforts[$order] as $effort) + { + $allEffortTable[] = h::tr + ( + h::td + ( + set::rowspan($count), + $allOrders[$order] + ), + h::td($effort->date), + h::td(zget($users, $effort->account)), + h::td($effort->work), + h::td($effort->consumed . ' H'), + h::td($effort->left . ' H'), + ); + } +} + +div +( + set::id('linearefforts'), + tabs + ( + tabPane + ( + set::key('myEffort'), + set::active(true), + set::title($lang->task->myEffort), + h::table + ( + setClass('table condensed bordered'), + h::tr + ( + h::th + ( + width('60px'), + $lang->task->teamOrder + ), + h::th + ( + width('100px'), + $lang->task->date + ), + h::th + ( + width('100px'), + $lang->task->recordedBy + ), + h::th($lang->task->work), + h::th + ( + width('60px'), + $lang->task->consumedAB + ), + h::th + ( + width('60px'), + $lang->task->leftAB + ), + h::th + ( + width('80px'), + $lang->actions + ), + ), + $myEffortTable + ) + ), + tabPane + ( + set::key('allEffort'), + set::title($lang->task->allEffort), + h::table + ( + setClass('table condensed bordered'), + h::tr + ( + h::th + ( + width('60px'), + $lang->task->teamOrder + ), + h::th + ( + width('100px'), + $lang->task->date + ), + h::th + ( + width('100px'), + $lang->task->recordedBy + ), + h::th($lang->task->work), + h::th + ( + width('60px'), + $lang->task->consumedAB + ), + h::th + ( + width('60px'), + $lang->task->leftAB + ), + ), + $allEffortTable + ) + ), + ) +); diff --git a/module/task/ui/recordworkhour.html.php b/module/task/ui/recordworkhour.html.php index 627876c8b3..04d5cb99f0 100644 --- a/module/task/ui/recordworkhour.html.php +++ b/module/task/ui/recordworkhour.html.php @@ -50,20 +50,89 @@ to::header ) ); - if($efforts) { - div - ( - setClass('table-title'), - $lang->task->committed - ); - $tableData = initTableData($efforts, $config->task->effortTable->fieldList, $this->task); - dtable - ( - set::cols(array_values($config->task->effortTable->fieldList)), - set::data($tableData), - ); + /* 多人串行任务工时分两部分. */ + if(!empty($task->team) and $task->mode == 'linear') + { + include './linearefforts.html.php'; + } + else + { + $effortRows = array(); + foreach($efforts as $effort) + { + $effortRows[] = h::tr + ( + h::td($effort->id), + h::td($effort->date), + h::td(zget($users, $effort->account)), + h::td($effort->work), + h::td($effort->consumed . ' H'), + h::td($effort->left . ' H'), + h::td + ( + common::hasPriv('task', 'editEffort') ? a + ( + setClass('btn ghost toolbar-item square size-sm'), + set::href(createLink('task', 'editEffort', "id={$effort->id}")), + icon('edit') + ) : null, + common::hasPriv('task', 'deleteWorkhour') ? a + ( + setClass('btn ghost toolbar-item square size-sm ajax-submit'), + set('data-confirm', $lang->task->confirmDeleteEstimate), + set::href(createLink('task', 'deleteWorkhour', "id={$effort->id}")), + icon('trash') + ) : null, + ), + ); + } + div + ( + setClass('table-title'), + $lang->task->committed + ); + h::table + ( + setClass('table condensed bordered'), + h::tr + ( + h::th + ( + width('32px'), + $lang->idAB + ), + h::th + ( + width('100px'), + $lang->task->date + ), + h::th + ( + width('100px'), + $lang->task->recordedBy + ), + h::th($lang->task->work), + h::th + ( + width('60px'), + $lang->task->consumedAB + ), + h::th + ( + width('60px'), + $lang->task->leftAB + ), + h::th + ( + width('80px'), + $lang->actions + ), + ), + $effortRows + ); + } } if(!$this->task->canOperateEffort($task))