| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560 |
- <?php
- /**
- * The edit view file of testreport module of ZenTaoPMS.
- * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(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 Yuting Wang <wangyuting@easycorp.ltd>
- * @package testreport
- * @link https://www.zentao.net
- */
- namespace zin;
- jsVar('reportID', $report->id);
- $caseCharts = array();
- foreach($charts as $chartType => $chartOption)
- {
- $chartData = $datas[$chartType];
- $chartOption = array();
- $tableTR = array();
- $colorList = array('#5470C6', '#91CC75', '#FAC858', '#EE6666', '#73C0DE', '#3BA272', '#FC8452', '#9A60B4', '#EA7CCC');
- foreach($chartData as $key => $data)
- {
- $color = current($colorList);
- $chartOption[] = array('name' => $data->name, 'value' => $data->value);
- $tableTR[] = h::tr
- (
- h::td(label(set::className('label-dot mr-2'), set::style(array('background-color' => $color, '--tw-ring-color' => $color))), $data->name),
- h::td($data->value),
- h::td(($data->percent * 100) . '%')
- );
- if(!next($colorList)) reset($colorList);
- }
- $caseCharts[] = div
- (
- set::className('mt-6'),
- div
- (
- set::className('flex border'),
- cell
- (
- set::width('50%'),
- set::className('border-r'),
- div(set::className('center text-base font-bold py-2'), $lang->testtask->report->charts[$chartType]),
- echarts
- (
- set::color($colorList),
- set::width('100%'),
- set::height('300px'),
- set::series
- (
- array
- (
- array
- (
- 'data' => $chartOption,
- 'type' => 'pie'
- )
- )
- ),
- set::tooltip(array('show' => true, 'formatter' => "{b} : {d}%"))
- )
- ),
- cell
- (
- set::width('50%'),
- h::table
- (
- set::className('table'),
- h::tr
- (
- h::th($lang->report->item),
- h::th(set::width('100px'), $lang->report->value),
- h::th(set::width('120px'), $lang->report->percent)
- ),
- $tableTR
- )
- )
- )
- );
- }
- $tableTR = array();
- $colorList = array('#D5D9DF', '#D50000', '#FF9800', '#2098EE', '#009688');
- $chartOption = array();
- foreach($lang->bug->priList as $key => $value)
- {
- $color = current($colorList);
- $label = $key == 0 ? $lang->null : $value;
- $generated = !empty($bugInfo['bugStageGroups'][$key]['generated']) ? $bugInfo['bugStageGroups'][$key]['generated'] : 0;
- $legacy = !empty($bugInfo['bugStageGroups'][$key]['legacy']) ? $bugInfo['bugStageGroups'][$key]['legacy'] : 0;
- $resolved = !empty($bugInfo['bugStageGroups'][$key]['resolved']) ? $bugInfo['bugStageGroups'][$key]['resolved'] : 0;
- $chartOption[] = array('name' => $label, 'type' => 'bar', 'data' => array($generated, $legacy, $resolved));
- $tableTR[] = h::tr
- (
- h::td(label(set::className('label-dot mr-2'), set::style(array('background-color' => $color, '--tw-ring-color' => $color))), $label),
- h::td($generated),
- h::td($legacy),
- h::td($resolved)
- );
- if(!next($colorList)) reset($colorList);
- }
- $bugStageChart = div
- (
- set::className('mt-6'),
- div
- (
- set::className('flex border'),
- cell
- (
- set::width('50%'),
- set::className('border-r'),
- div(set::className('center text-base font-bold py-2'), $lang->testreport->bugStageGroups),
- echarts
- (
- set::color($colorList),
- set::width('100%'),
- set::height('300px'),
- set::xAxis
- (
- array
- (
- 'type' => 'category',
- 'data' => array($lang->testreport->bugStageList['generated'], $lang->testreport->bugStageList['legacy'], $lang->testreport->bugStageList['resolved'])
- )
- ),
- set::yAxis(array('type' => 'value')),
- set::series($chartOption),
- set::tooltip(array('trigger' => 'axis', 'axisPointer' => array('type' => 'shadow')))
- )
- ),
- cell
- (
- set::width('50%'),
- h::table
- (
- set::className('table'),
- h::tr
- (
- h::th($lang->bug->pri),
- h::th($lang->testreport->bugStageList['generated']),
- h::th($lang->testreport->bugStageList['legacy']),
- h::th($lang->testreport->bugStageList['resolved'])
- ),
- $tableTR
- )
- )
- )
- );
- $tableTR = array();
- $chartOption = array();
- $xAxisData = array();
- $beginTime = isset($report->begin) ? strtotime($report->begin) : strtotime($begin);
- $endTime = isset($report->end) ? strtotime($report->end) : strtotime($end);
- foreach(array('generated', 'legacy', 'resolved') as $field)
- {
- $chartOption[$field] = array('name' => $lang->testreport->bugStageList[$field], 'type' => 'line', 'data' => array());
- }
- for($time = $beginTime; $time <= $endTime; $time += 86400)
- {
- $date = date('m-d', $time);
- $generated = !empty($bugInfo['bugHandleGroups']['generated'][$date]) ? $bugInfo['bugHandleGroups']['generated'][$date] : 0;
- $legacy = !empty($bugInfo['bugHandleGroups']['legacy'][$date]) ? $bugInfo['bugHandleGroups']['legacy'][$date] : 0;
- $resolved = !empty($bugInfo['bugHandleGroups']['resolved'][$date]) ? $bugInfo['bugHandleGroups']['resolved'][$date] : 0;
- $chartOption['generated']['data'][] = $generated;
- $chartOption['legacy']['data'][] = $legacy;
- $chartOption['resolved']['data'][] = $resolved;
- $xAxisData[] = $date;
- $tableTR[] = h::tr
- (
- h::td(setClass('text-center'), $date),
- h::td($generated),
- h::td($legacy),
- h::td($resolved)
- );
- }
- $chartOption = array_values($chartOption);
- $bugHandleChart = div
- (
- set::className('mt-6'),
- div
- (
- set::className('flex border'),
- cell
- (
- set::width('50%'),
- set::className('border-r'),
- div(set::className('center text-base font-bold py-2'), $lang->testreport->bugHandleGroups),
- echarts
- (
- set::color(array('#FF9800', '#2098EE', '#009688')),
- set::width('100%'),
- set::height('300px'),
- set::xAxis
- (
- array
- (
- 'type' => 'category',
- 'data' => $xAxisData
- )
- ),
- set::yAxis(array('type' => 'value')),
- set::series($chartOption),
- set::tooltip(array('trigger' => 'axis', 'axisPointer' => array('type' => 'shadow')))
- )
- ),
- cell
- (
- set::width('50%'),
- h::table
- (
- set::className('table'),
- h::tr
- (
- h::th($lang->testreport->date),
- h::th(label(set::className('label-dot mr-2'), set::style(array('background-color' => '#FF9800', '--tw-ring-color' => '#FF9800'))), $lang->testreport->bugStageList['generated']),
- h::th(label(set::className('label-dot mr-2'), set::style(array('background-color' => '#2098EE', '--tw-ring-color' => '#2098EE'))), $lang->testreport->bugStageList['legacy']),
- h::th(label(set::className('label-dot mr-2'), set::style(array('background-color' => '#009688', '--tw-ring-color' => '#009688'))), $lang->testreport->bugStageList['resolved'])
- ),
- $tableTR
- )
- )
- )
- );
- $bugCharts = array();
- foreach($bugInfo as $infoKey => $infoValue)
- {
- if($infoKey == 'bugStageGroups' || $infoKey == 'bugHandleGroups') continue;
- $list = $infoValue;
- if($infoKey == 'bugSeverityGroups') $list = $lang->bug->severityList;
- if($infoKey == 'bugStatusGroups') $list = $lang->bug->statusList;
- if($infoKey == 'bugResolutionGroups') $list = $lang->bug->resolutionList;
- $chartOption = array();
- $tableTR = array();
- $colorList = array('#5470C6', '#91CC75', '#FAC858', '#EE6666', '#73C0DE', '#3BA272', '#FC8452', '#9A60B4', '#EA7CCC');
- $sum = 0;
- foreach($infoValue as $value) $sum += $value->value;
- foreach($list as $listKey => $listValue)
- {
- $color = current($colorList);
- $name = $listValue;
- $value = 0;
- if(isset($infoValue[$listKey]))
- {
- $name = $infoValue[$listKey]->name;
- $value = $infoValue[$listKey]->value;
- }
- if(empty($name) && empty($value)) continue;
- $chartOption[] = array('name' => $name, 'value' => $value);
- $tableTR[] = h::tr
- (
- h::td(label(set::className('label-dot mr-2'), set::style(array('background-color' => $color, '--tw-ring-color' => $color))), $name),
- h::td($value),
- h::td(($sum ? round(($value / $sum * 100), 2) : '0') . '%')
- );
- if(!next($colorList)) reset($colorList);
- }
- $bugCharts[] = div
- (
- set::className('mt-6'),
- div
- (
- set::className('flex border'),
- cell
- (
- set::width('50%'),
- set::className('border-r'),
- div(set::className('center text-base font-bold py-2'), $lang->testreport->{$infoKey}),
- echarts
- (
- set::color($colorList),
- set::width('100%'),
- set::height('300px'),
- set::series
- (
- array
- (
- array
- (
- 'data' => $chartOption,
- 'type' => 'pie'
- )
- )
- ),
- set::tooltip(array('show' => true, 'formatter' => "{b} : {d}%"))
- )
- ),
- cell
- (
- set::width('50%'),
- h::table
- (
- set::className('table'),
- h::tr
- (
- h::th($lang->report->item),
- h::th(set::width('100px'), $lang->report->value),
- h::th(set::width('120px'), $lang->report->percent)
- ),
- $tableTR
- )
- )
- )
- );
- }
- panel
- (
- formPanel
- (
- set::title($lang->testreport->edit),
- formRow
- (
- formGroup
- (
- set::width('1/2'),
- set::label($lang->testreport->startEnd),
- set::required(strpos(",{$this->config->testreport->edit->requiredFields},", ",begin,") !== false || strpos(",{$this->config->testreport->edit->requiredFields},", ",end,") !== false),
- inputGroup
- (
- datePicker
- (
- set::name('begin'),
- set::value($begin),
- setData(array('on' => 'change', 'call' => 'refreshPage'))
- ),
- $lang->testtask->to,
- datePicker
- (
- set::name('end'),
- set::value($end),
- setData(array('on' => 'change', 'call' => 'refreshPage'))
- )
- ),
- input
- (
- set::className('hidden'),
- set::name('product'),
- set::value($productIdList)
- ),
- input
- (
- set::className('hidden'),
- set::name('execution'),
- set::value($execution->id)
- ),
- input
- (
- set::className('hidden'),
- set::name('tasks'),
- set::value($report->tasks)
- ),
- input
- (
- set::className('hidden'),
- set::name('bugs'),
- set::value(implode(',', array_keys($bugs)))
- ),
- input
- (
- set::className('hidden'),
- set::name('builds'),
- set::value(implode(',', array_keys($builds)))
- ),
- input
- (
- set::className('hidden'),
- set::name('cases'),
- set::value(implode(',', array_keys($caseList)))
- ),
- input
- (
- set::className('hidden'),
- set::name('stories'),
- set::value(implode(',', array_keys($stories)))
- )
- ),
- formGroup
- (
- set::width('1/2'),
- set::label($lang->testreport->owner),
- set::control('picker'),
- set::name('owner'),
- set::items($users),
- set::value($report->owner)
- )
- ),
- formRow
- (
- formGroup
- (
- set::label($lang->testreport->members),
- set::required(strpos(",{$this->config->testreport->edit->requiredFields},", ",members,") !== false),
- picker
- (
- set::multiple(true),
- set::name('members[]'),
- set::items($users),
- set::value($report->members)
- )
- )
- ),
- ($maxRunDate && $maxRunDate > $end) ? formGroup
- (
- setClass('items-center runDate-tips'),
- set::label(''),
- div(
- setClass('text-warning'),
- span(sprintf($lang->testreport->runDateTips, $maxRunDate) . ' '),
- span(
- setClass('underline cursor-pointer'),
- on::click('ignoreRunDate'),
- $lang->testreport->ignore
- )
- )
- ) : null,
- formRow
- (
- formGroup
- (
- set::label($lang->testreport->title),
- set::name('title'),
- set::value($report->title)
- )
- ),
- !empty($execution->desc) ? formRow
- (
- formGroup
- (
- set::className('items-center'),
- set::label($lang->testreport->goal),
- span
- (
- icon
- (
- 'help',
- setClass('text-light mr-0.5'),
- setData(array('toggle' => 'tooltip', 'title' => $lang->testreport->goalTip))
- ),
- strip_tags($execution->desc)
- )
- )
- ) : null,
- formRow
- (
- formGroup
- (
- set::className('items-center'),
- set::label($lang->testreport->profile),
- div
- (
- div(html($storySummary)),
- div(html(sprintf($lang->testreport->buildSummary, empty($builds) ? 1 : count($builds)) . $caseSummary)),
- div(html(sprintf($lang->testreport->bugSummary, $bugSummary['foundBugs'], count($legacyBugs), $bugSummary['activatedBugs'], $bugSummary['countBugByTask'], $bugSummary['bugConfirmedRate'] . '%', $bugSummary['bugCreateByCaseRate'] . '%')))
- )
- )
- ),
- formRow
- (
- formGroup
- (
- set::label($lang->testreport->report),
- set::required(strpos(",{$this->config->testreport->edit->requiredFields},", ",report,") !== false),
- editor
- (
- set::name('report'),
- html($report->report)
- )
- )
- ),
- formRow
- (
- formGroup
- (
- set::label($lang->files),
- fileSelector($report->files ? set::defaultFiles(array_values($report->files)) : null)
- )
- )
- ),
- formPanel
- (
- set::title($lang->testreport->legendStoryAndBug),
- set::actions(array()),
- dtable
- (
- set::cols($config->testreport->story->dtable->fieldList),
- set::data(array_values($stories)),
- set::emptyTip($lang->story->noStory),
- set::userMap($users)
- ),
- div(set::className('my-6')),
- dtable
- (
- set::cols($config->testreport->bug->dtable->fieldList),
- set::data(array_values($bugs)),
- set::emptyTip($lang->bug->notice->noBug),
- set::userMap($users)
- )
- ),
- formPanel
- (
- set::className('mt-6'),
- set::title($lang->testreport->legendBuild),
- set::actions(array()),
- dtable
- (
- set::cols($config->testreport->build->dtable->fieldList),
- set::data(array_values($builds)),
- set::userMap($users)
- )
- ),
- formPanel
- (
- set::className('mt-6'),
- set::title($lang->testreport->legendCase),
- set::actions(array()),
- dtable
- (
- set::cols($config->testreport->testcase->dtable->fieldList),
- set::data(array_values($caseList)),
- set::userMap($users)
- )
- ),
- formPanel
- (
- set::className('mt-6'),
- set::title($lang->testreport->legendLegacyBugs),
- set::actions(array()),
- dtable
- (
- set::cols($config->testreport->bug->dtable->fieldList),
- set::data(array_values($legacyBugs)),
- set::userMap($users)
- )
- ),
- formPanel
- (
- setID('tabReport'),
- set::className('mt-6'),
- set::title($lang->testreport->legendReport),
- set::actions(array()),
- $caseCharts,
- $bugStageChart,
- $bugHandleChart,
- $bugCharts
- )
- );
- render();
|