From 47d59f17728c2dfa2c8d6509b9a5659fd2006977 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 4 Jul 2023 16:45:21 +0800 Subject: [PATCH] * Refactor project statistic block of waterfall project. --- module/block/css/projectstatisticblock.ui.css | 9 +- module/block/lang/de.php | 7 + module/block/lang/en.php | 7 + module/block/lang/fr.php | 7 + module/block/lang/zh-cn.php | 7 + .../block/ui/projectstatisticblock.html.php | 279 +++++++++++++++++- 6 files changed, 312 insertions(+), 4 deletions(-) diff --git a/module/block/css/projectstatisticblock.ui.css b/module/block/css/projectstatisticblock.ui.css index 4a39393052..e4293e9185 100644 --- a/module/block/css/projectstatisticblock.ui.css +++ b/module/block/css/projectstatisticblock.ui.css @@ -5,6 +5,11 @@ .projectstatistic-block .project-statistic-table table {width: 100%; border-collapse: separate; border-spacing: 0 1rem; padding-right: 1rem;} .projectstatistic-block .project-statistic-table table tr:first-child {background: url(static/svg/arrow-step1-grey.svg) center no-repeat; background-size: cover;} -.projectstatistic-block .project-statistic-table table th {padding-right: 0px; width: 50%; margin-top: 1rem;} -.projectstatistic-block .project-statistic-table table td {padding-left: 0px; width: 50%; margin-top: 1rem;} +.projectstatistic-block .project-statistic-table table th {padding-right: 0px; margin-top: 1rem;} +.projectstatistic-block .project-statistic-table table td {padding-left: 0px; margin-top: 1rem;} .projectstatistic-block .tab-pane .nav-tabs>.nav-item>a:after {border-bottom: none;} +.projectstatistic-block .scrum table th, .projectstatistic-block .scrum table td {width: 50%} +.projectstatistic-block .progress-circle text {font-size: 35px;} +.projectstatistic-block .progress-circle .progress-text {position: relative;} +.projectstatistic-block.block-long .progress-circle .progress-text {top: -65px;} +.projectstatistic-block.block-sm .progress-circle .progress-text {top: -60px;} diff --git a/module/block/lang/de.php b/module/block/lang/de.php index 3bc940bef2..6b69556e53 100644 --- a/module/block/lang/de.php +++ b/module/block/lang/de.php @@ -557,6 +557,13 @@ $lang->block->projectstatistic->existIssues = 'Existing Issues:'; $lang->block->projectstatistic->lastestExecution = 'Lastest Execution'; $lang->block->projectstatistic->projectClosed = "{$lang->projectCommon} has been closed."; $lang->block->projectstatistic->longTimeProject = "Long Time {$lang->projectCommon}"; +$lang->block->projectstatistic->totalProgress = 'Total Progress'; +$lang->block->projectstatistic->totalProgressTip = 'Total Progress = Consumed Man Hours/(Consumed Man Hours + Left Man Hours)'; +$lang->block->projectstatistic->sv = 'Schedule Variance(SV)'; +$lang->block->projectstatistic->pv = 'Planned Value(PV)'; +$lang->block->projectstatistic->ev = 'Earned Value(EV)'; +$lang->block->projectstatistic->cv = 'Cost Variance(CV)'; +$lang->block->projectstatistic->ac = 'Actual Cost(AC)'; $lang->block->productoverview = new stdclass(); $lang->block->productoverview->totalProductCount = 'Total Product Count'; diff --git a/module/block/lang/en.php b/module/block/lang/en.php index a98cc3ffa8..3e0ab11a2a 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -557,6 +557,13 @@ $lang->block->projectstatistic->existIssues = 'Existing Issues:'; $lang->block->projectstatistic->lastestExecution = 'Lastest Execution'; $lang->block->projectstatistic->projectClosed = "{$lang->projectCommon} has been closed."; $lang->block->projectstatistic->longTimeProject = "Long Time {$lang->projectCommon}"; +$lang->block->projectstatistic->totalProgress = 'Total Progress'; +$lang->block->projectstatistic->totalProgressTip = 'Total Progress = Consumed Man Hours/(Consumed Man Hours + Left Man Hours)'; +$lang->block->projectstatistic->sv = 'Schedule Variance(SV)'; +$lang->block->projectstatistic->pv = 'Planned Value(PV)'; +$lang->block->projectstatistic->ev = 'Earned Value(EV)'; +$lang->block->projectstatistic->cv = 'Cost Variance(CV)'; +$lang->block->projectstatistic->ac = 'Actual Cost(AC)'; $lang->block->productoverview = new stdclass(); $lang->block->productoverview->totalProductCount = 'Total Product Count'; diff --git a/module/block/lang/fr.php b/module/block/lang/fr.php index 11566ce179..5ebb3412ac 100644 --- a/module/block/lang/fr.php +++ b/module/block/lang/fr.php @@ -557,6 +557,13 @@ $lang->block->projectstatistic->existIssues = 'Existing Issues:'; $lang->block->projectstatistic->lastestExecution = 'Lastest Execution'; $lang->block->projectstatistic->projectClosed = "{$lang->projectCommon} has been closed."; $lang->block->projectstatistic->longTimeProject = "Long Time {$lang->projectCommon}"; +$lang->block->projectstatistic->totalProgress = 'Total Progress'; +$lang->block->projectstatistic->totalProgressTip = 'Total Progress = Consumed Man Hours/(Consumed Man Hours + Left Man Hours)'; +$lang->block->projectstatistic->sv = 'Schedule Variance(SV)'; +$lang->block->projectstatistic->pv = 'Planned Value(PV)'; +$lang->block->projectstatistic->ev = 'Earned Value(EV)'; +$lang->block->projectstatistic->cv = 'Cost Variance(CV)'; +$lang->block->projectstatistic->ac = 'Actual Cost(AC)'; $lang->block->productoverview = new stdclass(); $lang->block->productoverview->totalProductCount = 'Total Product Count'; diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index ec4c188514..a621d18d52 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -559,6 +559,13 @@ $lang->block->projectstatistic->existIssues = '存在问题:'; $lang->block->projectstatistic->lastestExecution = '最新执行'; $lang->block->projectstatistic->projectClosed = "{$lang->projectCommon}已关闭"; $lang->block->projectstatistic->longTimeProject = "长期{$lang->projectCommon}"; +$lang->block->projectstatistic->totalProgress = '总进度'; +$lang->block->projectstatistic->totalProgressTip = '总进度=已消耗工时/(已消耗工时+剩余工时)'; +$lang->block->projectstatistic->sv = '进度偏差率(SV)'; +$lang->block->projectstatistic->pv = '计划完成(PV)'; +$lang->block->projectstatistic->ev = '实际完成(EV)'; +$lang->block->projectstatistic->cv = '成本偏差率(CV)'; +$lang->block->projectstatistic->ac = '实际花费(AC)'; $lang->block->productoverview = new stdclass(); $lang->block->productoverview->totalProductCount = '产品总数'; diff --git a/module/block/ui/projectstatisticblock.html.php b/module/block/ui/projectstatisticblock.html.php index 964b8c6b2f..004dd498d9 100644 --- a/module/block/ui/projectstatisticblock.html.php +++ b/module/block/ui/projectstatisticblock.html.php @@ -113,7 +113,7 @@ foreach($projects as $project) } $cells[] = cell ( - setClass('flex-1 pt-4 project-statistic-table' . (($module != 'cost' && $longBlock) || ($module != 'task' && $module != 'cost' && !$longBlock) ? ' border-l pl-4 ' : '') . (!$longBlock && $module != 'cost' && $module != 'story'? ' border-t' : '')), + setClass('flex-1 pt-4 project-statistic-table scrum' . (($module != 'cost' && $longBlock) || ($module != 'task' && $module != 'cost' && !$longBlock) ? ' border-l pl-4 ' : '') . (!$longBlock && $module != 'cost' && $module != 'story'? ' border-t' : '')), set::width($longBlock ? '25%' : '50%'), div ( @@ -124,10 +124,285 @@ foreach($projects as $project) $lang->block->projectstatistic->{$module} ), ), - tableData($cellItems), + tableData + ( + set::width('100%'), + $cellItems + ), ); } } + else + { + $cells[] = cell + ( + setClass('flex flex-wrap items-center progress-circle pt-6'), + set::width($longBlock ? '36%' : '100%'), + div + ( + setClass('flex justify-center w-full'), + zui::progressCircle + ( + set('percent', $project->progress), + set('size', 150), + set('circleWidth', 10), + set('text', "{$project->progress}%"), + set('textY', 70), + set('textStyle', 'font-size: 35px;'), + ), + ), + div + ( + setClass('flex justify-center w-full'), + span + ( + setClass('text-gray text-md progress-text'), + $lang->block->projectstatistic->totalProgress, + icon + ( + setClass('pl-1'), + set('data-toggle', 'tooltip'), + set('href', 'totalProgressTooltip'), + 'help' + ), + ), + div + ( + setClass('tooltip z-50 shadow bg-white text-gray leading-6'), + set::id('totalProgressTooltip'), + $lang->block->projectstatistic->totalProgressTip + ), + ) + ); + $cells[] = cell + ( + setClass('flex-1 pt-4 project-statistic-table px-4' . ($longBlock ? ' border-l' : '')), + set::width($longBlock ? '32%' : '50%'), + div + ( + setClass('px-2'), + span + ( + setClass('font-bold'), + $lang->project->progress + ), + ), + h::table + ( + setClass('table-data'), + h::tbody + ( + h::tr + ( + h::th + ( + setClass('py-1.5 pr-2 font-normal nowrap items-center text-right'), + $lang->block->projectstatistic->sv, + icon + ( + setClass('pl-1.5'), + set('data-toggle', 'tooltip'), + set('href', 'svTooltip'), + 'help' + ), + ':', + div + ( + setClass('tooltip z-50 shadow bg-white text-gray leading-6'), + set::id('svTooltip'), + 'svTooltip' + ), + ), + h::td + ( + setClass('py-1.5 pl-2'), + span + ( + setClass('font-bold text-black mr-1'), + zget($project, 'sv', 0) . $lang->percent, + ), + ), + ), + h::tr + ( + h::th + ( + setClass('py-1.5 pr-2 font-normal nowrap items-center text-right'), + $lang->block->projectstatistic->pv, + icon + ( + setClass('pl-1.5'), + set('data-toggle', 'tooltip'), + set('href', 'pvTooltip'), + 'help' + ), + ':', + div + ( + setClass('tooltip z-50 shadow bg-white text-gray leading-6'), + set::id('pvTooltip'), + 'pvTooltip' + ), + ), + h::td + ( + setClass('py-1.5 pl-2'), + span + ( + setClass('font-bold text-black mr-1'), + zget($project, 'pv', 0) . $lang->percent, + ), + ), + ), + h::tr + ( + h::th + ( + setClass('py-1.5 pr-2 font-normal nowrap items-center text-right'), + $lang->block->projectstatistic->ev, + icon + ( + setClass('pl-1.5'), + set('data-toggle', 'tooltip'), + set('href', 'evTooltip'), + 'help' + ), + ':', + div + ( + setClass('tooltip z-50 shadow bg-white text-gray leading-6'), + set::id('evTooltip'), + 'evTooltip' + ), + ), + h::td + ( + setClass('py-1.5 pl-2'), + span + ( + setClass('font-bold text-black mr-1'), + zget($project, 'ev', 0) . $lang->percent, + ), + ), + ), + ), + ), + ); + $cells[] = cell + ( + setClass('flex-1 pt-4 project-statistic-table px-4 border-l'), + set::width($longBlock ? '32%' : '50%'), + div + ( + setClass('px-2'), + span + ( + setClass('font-bold'), + $lang->project->progress + ), + ), + h::table + ( + setClass('table-data'), + h::tbody + ( + h::tr + ( + h::th + ( + setClass('py-1.5 pr-2 font-normal nowrap items-center text-right'), + $lang->block->projectstatistic->cv, + icon + ( + setClass('pl-1.5'), + set('data-toggle', 'tooltip'), + set('href', 'cvTooltip'), + 'help' + ), + ':', + div + ( + setClass('tooltip z-50 shadow bg-white text-gray leading-6'), + set::id('cvTooltip'), + 'cvTooltip' + ), + ), + h::td + ( + setClass('py-1.5 pl-2'), + span + ( + setClass('font-bold text-black mr-1'), + zget($project, 'cv', 0) . $lang->percent, + ), + ), + ), + h::tr + ( + h::th + ( + setClass('py-1.5 pr-2 font-normal nowrap items-center text-right'), + $lang->block->projectstatistic->ev, + icon + ( + setClass('pl-1.5'), + set('data-toggle', 'tooltip'), + set('href', 'evTooltip'), + 'help' + ), + ':', + div + ( + setClass('tooltip z-50 shadow bg-white text-gray leading-6'), + set::id('evTooltip'), + 'evTooltip' + ), + ), + h::td + ( + setClass('py-1.5 pl-2'), + span + ( + setClass('font-bold text-black mr-1'), + zget($project, 'ev', 0) . $lang->percent, + ), + ), + ), + h::tr + ( + h::th + ( + setClass('py-1.5 pr-2 font-normal nowrap items-center text-right'), + $lang->block->projectstatistic->ac, + icon + ( + setClass('pl-1.5'), + set('data-toggle', 'tooltip'), + set('href', 'acTooltip'), + 'help' + ), + ':', + div + ( + setClass('tooltip z-50 shadow bg-white text-gray leading-6'), + set::id('acTooltip'), + 'acTooltip' + ), + ), + h::td + ( + setClass('py-1.5 pl-2'), + span + ( + setClass('font-bold text-black mr-1'), + zget($project, 'ac', 0) . $lang->percent, + ), + ), + ), + ), + ), + ); + } $projectInfo = div (