* Remove unused code.
This commit is contained in:
@@ -301,7 +301,6 @@ $lang->product->kanban = $lang->productCommon . ' Kanban';
|
||||
$lang->project->report = 'Report';
|
||||
|
||||
$lang->report->weekly = 'Weekly';
|
||||
$lang->report->annual = 'Annual Summary';
|
||||
$lang->report->notice = new stdclass();
|
||||
$lang->report->notice->help = 'Hinweis: Berichte wurde auf Basis der Suche generiert. Bitte suchen Sie in der Liste bevor Sie einen Bericht generieren.';
|
||||
|
||||
|
||||
@@ -301,7 +301,6 @@ $lang->product->kanban = $lang->productCommon . ' Kanban';
|
||||
$lang->project->report = 'Report';
|
||||
|
||||
$lang->report->weekly = 'Weekly';
|
||||
$lang->report->annual = 'Annual Summary';
|
||||
$lang->report->notice = new stdclass();
|
||||
$lang->report->notice->help = 'Note: The report is generated on the results of browsing the list. Click, e.g. AssignedToMe, then click Create Report to generate a report based on AssignedToMe list.';
|
||||
|
||||
|
||||
@@ -301,7 +301,6 @@ $lang->product->kanban = $lang->productCommon . ' Kanban';
|
||||
$lang->project->report = 'Report';
|
||||
|
||||
$lang->report->weekly = 'Weekly';
|
||||
$lang->report->annual = 'Annual Summary';
|
||||
$lang->report->notice = new stdclass();
|
||||
$lang->report->notice->help = 'Note : Le rapport est généré à partir des résultats de la liste consultée. Par exemple, cliquez sur AssignedToMe, puis Générer Rapport pour obtenir un rapport basé sur la liste de ce qui vous est assigné.';
|
||||
|
||||
|
||||
@@ -301,7 +301,6 @@ $lang->product->kanban = $lang->productCommon . '看板';
|
||||
$lang->project->report = '报告';
|
||||
|
||||
$lang->report->weekly = '周报';
|
||||
$lang->report->annual = '年度总结';
|
||||
$lang->report->notice = new stdclass();
|
||||
$lang->report->notice->help = '注:统计报表的数据来源于列表页面的检索结果,生成统计报表前请先在列表页面进行检索。比如列表页面我们检索的是%tab%,那么报表就是基于之前检索的%tab%的结果集进行统计。';
|
||||
|
||||
|
||||
@@ -258,7 +258,6 @@ $lang->product->kanban = $lang->productCommon . '看板';
|
||||
$lang->project->report = '報告';
|
||||
|
||||
$lang->report->weekly = '周報';
|
||||
$lang->report->annual = '年度總結';
|
||||
$lang->report->notice = new stdclass();
|
||||
$lang->report->notice->help = '註:統計報表的數據來源於列表頁面的檢索結果,生成統計報表前請先在列表頁面進行檢索。比如列表頁面我們檢索的是%tab%,那麼報表就是基于之前檢索的%tab%的結果集進行統計。';
|
||||
|
||||
|
||||
@@ -7,13 +7,6 @@ $config->report->dailyreminder->task = true;
|
||||
$config->report->dailyreminder->todo = true;
|
||||
$config->report->dailyreminder->testTask = true;
|
||||
|
||||
global $lang;
|
||||
$config->report->pivotMenu = array();
|
||||
$config->report->pivotMenu['product'] = array('link' => "{$lang->product->common}|report|preview|dimension=&group=product");
|
||||
$config->report->pivotMenu['project'] = array('link' => "{$lang->project->common}|report|preview|dimension=&group=project");
|
||||
$config->report->pivotMenu['test'] = array('link' => "{$lang->qa->common}|report|preview|dimension=&group=test");
|
||||
$config->report->pivotMenu['staff'] = array('link' => "{$lang->system->common}|report|preview|dimension=&group=staff");
|
||||
|
||||
$config->report->annualData['minMonth'] = 2;
|
||||
$config->report->annualData['colors'] = array('#0075A9', '#22AC38', '#CAAC32', '#2B4D6D', '#0071a4', '#00a0e9', '#7ecef4');
|
||||
$config->report->annualData['itemMinWidth'] = array(1 => 3, 2 => 5, 3 => 7, 4 => 9, 5 => 11);
|
||||
|
||||
@@ -44,185 +44,7 @@ class report extends control
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->locate(inlink('preview'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Preview a report.
|
||||
*
|
||||
* @param int $dimension
|
||||
* @param string $group
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @param string $params
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function preview($dimension = 0, $group = '', $module = 'report', $method = '', $params = '')
|
||||
{
|
||||
$this->prepare4Preview($dimension, $group, $module, $method, $params);
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Project deviation report.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function projectDeviation($begin = 0, $end = 0)
|
||||
{
|
||||
$this->session->set('executionList', $this->app->getURI(true), 'execution');
|
||||
|
||||
$begin = date('Y-m-d', ($begin ? strtotime($begin) : time() - (date('j') - 1) * 24 * 3600));
|
||||
$end = date('Y-m-d', ($end ? strtotime($end) : time() + (date('t') - date('j')) * 24 * 3600));
|
||||
|
||||
$this->view->title = $this->lang->report->projectDeviation;
|
||||
$this->view->position[] = $this->lang->report->projectDeviation;
|
||||
|
||||
$this->view->executions = $this->report->getExecutions($begin, $end);
|
||||
$this->view->begin = $begin;
|
||||
$this->view->end = $end;
|
||||
$this->view->submenu = 'project';
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Product information report.
|
||||
*
|
||||
* @params string $conditions
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function productSummary($conditions = '')
|
||||
{
|
||||
$this->app->loadLang('story');
|
||||
$this->app->loadLang('product');
|
||||
$this->app->loadLang('productplan');
|
||||
$this->session->set('productList', $this->app->getURI(true), 'product');
|
||||
|
||||
$this->view->title = $this->lang->report->productSummary;
|
||||
$this->view->position[] = $this->lang->report->productSummary;
|
||||
$this->view->products = $this->report->getProducts($conditions);
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter|noclosed');
|
||||
$this->view->submenu = 'product';
|
||||
$this->view->conditions = $conditions;
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Bug create report.
|
||||
*
|
||||
* @param int $begin
|
||||
* @param int $end
|
||||
* @param int $product
|
||||
* @param int $execution
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function bugCreate($begin = 0, $end = 0, $product = 0, $execution = 0)
|
||||
{
|
||||
$this->app->loadLang('bug');
|
||||
$begin = $begin == 0 ? date('Y-m-d', strtotime('last month', strtotime(date('Y-m',time()) . '-01 00:00:01'))) : date('Y-m-d', strtotime($begin));
|
||||
$end = $end == 0 ? date('Y-m-d', strtotime('now')) : $end = date('Y-m-d', strtotime($end));
|
||||
|
||||
$this->view->title = $this->lang->report->bugCreate;
|
||||
$this->view->position[] = $this->lang->report->bugCreate;
|
||||
$this->view->begin = $begin;
|
||||
$this->view->end = $end;
|
||||
$this->view->bugs = $this->report->getBugs($begin, $end, $product, $execution);
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter|noclosed');
|
||||
$this->view->executions = array('' => '') + $this->report->getProjectExecutions();
|
||||
$this->view->products = array('' => '') + $this->loadModel('product')->getPairs('', 0, '', 'all');
|
||||
$this->view->execution = $execution;
|
||||
$this->view->product = $product;
|
||||
$this->view->submenu = 'test';
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Bug assign report.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function bugAssign()
|
||||
{
|
||||
$this->session->set('productList', $this->app->getURI(true), 'product');
|
||||
|
||||
$this->view->title = $this->lang->report->bugAssign;
|
||||
$this->view->position[] = $this->lang->report->bugAssign;
|
||||
$this->view->submenu = 'test';
|
||||
$this->view->assigns = $this->report->getBugAssign();
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter|noclosed');
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Workload report.
|
||||
*
|
||||
* @param string $begin
|
||||
* @param string $end
|
||||
* @param int $days
|
||||
* @param int $workday
|
||||
* @param int $dept
|
||||
* @param int $assign
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function workload($begin = '', $end = '', $days = 0, $workday = 0, $dept = 0, $assign = 'assign')
|
||||
{
|
||||
if($_POST)
|
||||
{
|
||||
$data = fixer::input('post')->get();
|
||||
$begin = $data->begin;
|
||||
$end = $data->end;
|
||||
$dept = $data->dept;
|
||||
$days = $data->days;
|
||||
$assign = $data->assign;
|
||||
$workday = $data->workday;
|
||||
}
|
||||
|
||||
$this->app->loadConfig('execution');
|
||||
$this->session->set('executionList', $this->app->getURI(true), 'execution');
|
||||
|
||||
$begin = $begin ? strtotime($begin) : time();
|
||||
$end = $end ? strtotime($end) : time() + (7 * 24 * 3600);
|
||||
$end += 24 * 3600;
|
||||
$beginWeekDay = date('w', $begin);
|
||||
$begin = date('Y-m-d', $begin);
|
||||
$end = date('Y-m-d', $end);
|
||||
|
||||
if(empty($workday))$workday = $this->config->execution->defaultWorkhours;
|
||||
$diffDays = helper::diffDate($end, $begin);
|
||||
if($days > $diffDays) $days = $diffDays;
|
||||
if(empty($days))
|
||||
{
|
||||
$weekDay = $beginWeekDay;
|
||||
$days = $diffDays;
|
||||
for($i = 0; $i < $diffDays; $i++,$weekDay++)
|
||||
{
|
||||
$weekDay = $weekDay % 7;
|
||||
if(($this->config->execution->weekend == 2 and $weekDay == 6) or $weekDay == 0) $days --;
|
||||
}
|
||||
}
|
||||
|
||||
$this->view->title = $this->lang->report->workload;
|
||||
$this->view->position[] = $this->lang->report->workload;
|
||||
|
||||
$this->view->workload = $this->report->getWorkload($dept, $assign);
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter|noclosed');
|
||||
$this->view->depts = $this->loadModel('dept')->getOptionMenu();
|
||||
$this->view->begin = $begin;
|
||||
$this->view->end = date('Y-m-d', strtotime($end) - 24 * 3600);
|
||||
$this->view->days = $days;
|
||||
$this->view->workday = $workday;
|
||||
$this->view->dept = $dept;
|
||||
$this->view->assign = $assign;
|
||||
$this->view->allHour = $days * $workday;
|
||||
$this->view->submenu = 'staff';
|
||||
$this->display();
|
||||
$this->locate(inlink('annualData'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
#begin {min-width: 85px;}
|
||||
#end {min-width: 85px;}
|
||||
#bug th {font-size: 12px;}
|
||||
#bug th:nth-child(7) {width: 87px;}
|
||||
#bug th:nth-child(10) {width: 100px;}
|
||||
@@ -1,38 +0,0 @@
|
||||
.choose-date span, .dp-choose-date {display: block; float: left; margin: 0 10px;}
|
||||
.dp-applied {float: left;}
|
||||
.choose-date span {line-height: 20px;}
|
||||
.date {width: 80px;}
|
||||
ul li {list-style: none;}
|
||||
|
||||
.side-col {padding-right: 20px; width: 15%;}
|
||||
#sidebar>.cell {width: 100%;}
|
||||
#productList p {margin: 2px 0;}
|
||||
.table-bordered, .outer.with-side .main, .outer.with-side > form > .table, .outer.with-side > .table {border: none;}
|
||||
|
||||
#report-list.list-group {margin-bottom: 0;}
|
||||
#report-list .list-group-item {padding: 8px 15px; border-left: none; border-right: none;}
|
||||
#report-list .list-group-item:first-child {border-top: 1px;}
|
||||
#report-list .list-group-item:last-child {border-bottom: 1px;}
|
||||
#report-list .list-group-item.active {background: none; color: #333;}
|
||||
.proversion a {color: #81511C;}
|
||||
|
||||
.main > .input-group {margin-bottom: 10px;}
|
||||
.main > .input-group > .datepicker-wrapper {display: table-cell;}
|
||||
.main > .input-group > .datepicker-wrapper > .form-control {padding: 5px 10px; height: 30px;}
|
||||
.main > .input-group > .datepicker-wrapper:before {top: 4px;}
|
||||
.main > .input-group > .datepicker-wrapper + .input-group-addon {border-left: none; border-right: none;}
|
||||
|
||||
td .deviation {padding-left: 20px; text-align: left;}
|
||||
.up {color: red; padding-right: 2px;}
|
||||
.down {color: green; padding-right: 2px;}
|
||||
.zero {color: #66CD00;}
|
||||
.u50 {color: #ED1C24;}
|
||||
.u30 {color: #F37021;}
|
||||
.u10 {color: #FAA61A;}
|
||||
.u0 {color: #FFCB05;}
|
||||
.d0 {color: #76B043;}
|
||||
.d20 {color: #33A52E;}
|
||||
|
||||
.checkboxes {margin-bottom: 10px;}
|
||||
.checkboxes .checkbox-primary {margin-bottom: 5px;}
|
||||
.fixed-header-copy thead tr th {color: #fff !important;}
|
||||
@@ -1,4 +0,0 @@
|
||||
.main-position {position: relative;}
|
||||
.toolbar-padding {padding-right: 100px;}
|
||||
.child-position {position: absolute; right: 0;}
|
||||
#reportGroups .active {background-color: #e9f2fb; color: #006af1;}
|
||||
@@ -1,5 +0,0 @@
|
||||
td.child {padding-left: 15px;}
|
||||
.c-name {width: 200px;}
|
||||
.c-count {width: 70px;}
|
||||
#conditions {display: flex;}
|
||||
#conditions .condition-options {margin-left: 16px;}
|
||||
@@ -1,2 +0,0 @@
|
||||
.c-hours, .c-deviation, .c-deviation-rate {width: 100px;}
|
||||
.c-id {width: 70px;}
|
||||
@@ -1 +0,0 @@
|
||||
.c-hours, .c-count, .c-workload {width: 100px;}
|
||||
@@ -1,22 +0,0 @@
|
||||
function changeParams(obj)
|
||||
{
|
||||
var begin = $('#conditions').find('#begin').val();
|
||||
var end = $('#conditions').find('#end').val();
|
||||
var product = $('#conditions').find('#product').val();
|
||||
var execution = $('#conditions').find('#execution').val();
|
||||
if(begin.indexOf('-') != -1)
|
||||
{
|
||||
var beginarray = begin.split("-");
|
||||
var begin = '';
|
||||
for(i=0 ; i < beginarray.length ; i++) begin = begin + beginarray[i];
|
||||
}
|
||||
if(end.indexOf('-') != -1)
|
||||
{
|
||||
var endarray = end.split("-");
|
||||
var end = '';
|
||||
for(i=0 ; i < endarray.length ; i++) end = end + endarray[i];
|
||||
}
|
||||
|
||||
link = createLink('report', 'bugcreate', 'begin=' + begin + '&end=' + end + '&product=' + product + '&execution=' + execution);
|
||||
location.href=link;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
$('#conditions input:checkbox').change(function()
|
||||
{
|
||||
var conditions = '';
|
||||
$('#conditions input:checkbox').each(function(i)
|
||||
{
|
||||
if($(this).prop('checked')) conditions += $(this).val() + ',';
|
||||
})
|
||||
conditions = conditions.substring(0, conditions.length - 1);
|
||||
location.href = createLink('report', 'productSummary', 'conditions=' + conditions);
|
||||
})
|
||||
@@ -1,34 +0,0 @@
|
||||
$(document).ready(function()
|
||||
{
|
||||
initChart();
|
||||
|
||||
$('.icon-exclamation-sign').hover(function(){
|
||||
$('#desc').removeClass('hidden');
|
||||
}, function(){
|
||||
$('#desc').addClass('hidden');
|
||||
});
|
||||
});
|
||||
|
||||
function changeDate(begin, end)
|
||||
{
|
||||
if(begin.indexOf('-') != -1)
|
||||
{
|
||||
var beginarray = begin.split("-");
|
||||
var begin = '';
|
||||
for(i=0 ; i < beginarray.length ; i++)
|
||||
{
|
||||
begin = begin + beginarray[i];
|
||||
}
|
||||
}
|
||||
if(end.indexOf('-') != -1)
|
||||
{
|
||||
var endarray = end.split("-");
|
||||
var end = '';
|
||||
for(i=0 ; i < endarray.length ; i++)
|
||||
{
|
||||
end = end + endarray[i];
|
||||
}
|
||||
}
|
||||
link = createLink('report', 'projectdeviation', 'begin=' + begin + '&end=' + end);
|
||||
location.href=link;
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
function changeParams(obj)
|
||||
{
|
||||
var begin = $('#conditions').find('#begin').val();
|
||||
var end = $('#conditions').find('#end').val();
|
||||
var workday = $('#conditions').find('#workday').val();
|
||||
var dept = $('#conditions').find('#dept').val();
|
||||
var assign = $('#conditions').find('#assign').val();
|
||||
var days = diffDate(begin, end);
|
||||
|
||||
$('#days').val(days);
|
||||
|
||||
if(begin.indexOf('-') != -1)
|
||||
{
|
||||
var beginarray = begin.split("-");
|
||||
var begin = '';
|
||||
for(i = 0; i < beginarray.length; i++) begin = begin + beginarray[i];
|
||||
}
|
||||
if(end.indexOf('-') != -1)
|
||||
{
|
||||
var endarray = end.split("-");
|
||||
var end = '';
|
||||
for(i = 0 ; i < endarray.length ; i++) end = end + endarray[i];
|
||||
}
|
||||
|
||||
var link = createLink('report', 'workload', 'begin=' + begin + '&end=' + end + '&days=' + days + '&workday=' + workday + '&dept=' + dept + '&assign=' + assign);
|
||||
location.href = link;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a date string to date object in js.
|
||||
*
|
||||
* @param string $date
|
||||
* @access public
|
||||
* @return date
|
||||
*/
|
||||
function convertStringToDate(dateString)
|
||||
{
|
||||
dateString = dateString.split('-');
|
||||
return new Date(dateString[0], dateString[1] - 1, dateString[2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the diff days of two date.
|
||||
*
|
||||
* @param string $date1
|
||||
* @param string $date1
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
function diffDate(date1, date2)
|
||||
{
|
||||
date1 = convertStringToDate(date1);
|
||||
date2 = convertStringToDate(date2);
|
||||
delta = (date2 - date1) / (1000 * 60 * 60 * 24) + 1;
|
||||
|
||||
weekEnds = 0;
|
||||
for(i = 0; i < delta; i++)
|
||||
{
|
||||
if((weekend == 2 && date1.getDay() == 6) || date1.getDay() == 0) weekEnds ++;
|
||||
date1 = date1.valueOf();
|
||||
date1 += 1000 * 60 * 60 * 24;
|
||||
date1 = new Date(date1);
|
||||
}
|
||||
return delta - weekEnds;
|
||||
}
|
||||
|
||||
$(function()
|
||||
{
|
||||
var options =
|
||||
{
|
||||
language: config.clientLang,
|
||||
weekStart: 1,
|
||||
todayBtn: 1,
|
||||
autoclose: 1,
|
||||
todayHighlight: 1,
|
||||
startView: 2,
|
||||
forceParse: 0,
|
||||
showMeridian: 1,
|
||||
minView: 2,
|
||||
format: 'yyyy-mm-dd',
|
||||
startDate: new Date()
|
||||
};
|
||||
$('input#begin,input#end').fixedDate().datetimepicker(options);
|
||||
});
|
||||
@@ -9,31 +9,27 @@
|
||||
* @version $Id: en.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = 'Home';
|
||||
$lang->report->list = 'Liste';
|
||||
$lang->report->preview = 'View Pivot Table';
|
||||
$lang->report->item = 'Eintrag';
|
||||
$lang->report->value = 'Wert';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Undefiniert';
|
||||
$lang->report->query = 'Abfrage';
|
||||
$lang->report->annual = 'Annual Summary';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->viewEveryoneAnnual = 'View everyone annual summary';
|
||||
$lang->report->index = 'Home';
|
||||
$lang->report->list = 'Liste';
|
||||
$lang->report->item = 'Eintrag';
|
||||
$lang->report->value = 'Wert';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Undefiniert';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
|
||||
$lang->report->assign['noassign'] = 'Nicht zugeordnet';
|
||||
$lang->report->assign['assign'] = 'Zugeordnet';
|
||||
@@ -53,18 +49,6 @@ $lang->report->end = 'End';
|
||||
$lang->report->dept = 'Abteilung';
|
||||
$lang->report->deviationChart = "{$lang->projectCommon} Deviation Chart";
|
||||
|
||||
$lang->reportList = new stdclass();
|
||||
$lang->reportList->product = new stdclass();
|
||||
$lang->reportList->project = new stdclass();
|
||||
$lang->reportList->test = new stdclass();
|
||||
$lang->reportList->staff = new stdclass();
|
||||
|
||||
$lang->reportList->product->lists[10] = $lang->productCommon . ' Zusammenfassung|report|productsummary';
|
||||
$lang->reportList->project->lists[10] = "{$lang->execution->common} Abweichnung|report|projectdeviation";
|
||||
$lang->reportList->test->lists[10] = 'Bugs gemeldet|report|bugcreate';
|
||||
$lang->reportList->test->lists[13] = 'Bugs zugeordnet|report|bugassign';
|
||||
$lang->reportList->staff->lists[10] = 'Team Arbeitslast|report|workload';
|
||||
|
||||
$lang->report->id = 'ID';
|
||||
$lang->report->execution = $lang->executionCommon;
|
||||
$lang->report->product = $lang->productCommon;
|
||||
@@ -110,12 +94,6 @@ $lang->report->mailTitle->task = " Aufgaben (%s),";
|
||||
$lang->report->mailTitle->todo = " Todo (%s),";
|
||||
$lang->report->mailTitle->testTask = " Test Aufgaben (%s),";
|
||||
|
||||
$lang->report->deviationDesc = 'According to the Closed Execution Deviation Rate = ((Total Cost - Total Estimate) / Total Estimate), the Deviation Rate is n/a when the Total Estimate is 0.';
|
||||
$lang->report->proVersion = '<a href="https://www.zentao.net/page/enterprise.html" target="_blank">Testen Sie ZenTao Pro für mehr Informationen!</a>';
|
||||
$lang->report->proVersionEn = '<a href="https://www.zentao.pm/" etarget="_blank">Testen Sie ZenTao Pro für mehr Informationen!</a>';
|
||||
$lang->report->workloadDesc = 'Workload = the total left hours of all tasks of the user / selected days * hours per day.
|
||||
For example: the begin and end date is January 1st to January 7th, and the total work days is 5 days, 8 hours per day. The Work load is all unfinished tasks assigned to this user to be finished in 5 days, 8 hours per day.';
|
||||
|
||||
$lang->report->annualData = new stdclass();
|
||||
$lang->report->annualData->title = "%s work summary in %s";
|
||||
$lang->report->annualData->exportByZentao = "Export By ZenTao";
|
||||
@@ -216,3 +194,20 @@ $lang->report->annualData->radarItems['execution'] = $lang->projectCommon;
|
||||
$lang->report->annualData->radarItems['devel'] = "Development";
|
||||
$lang->report->annualData->radarItems['qa'] = "QA";
|
||||
$lang->report->annualData->radarItems['other'] = "Other";
|
||||
|
||||
$lang->report->companyRadar = "公司能力雷达图";
|
||||
$lang->report->outputData = "产出数据";
|
||||
$lang->report->outputTotal = "产出总数";
|
||||
$lang->report->storyOutput = "需求产出";
|
||||
$lang->report->planOutput = "计划产出";
|
||||
$lang->report->releaseOutput = "发布产出";
|
||||
$lang->report->executionOutput = "执行产出";
|
||||
$lang->report->taskOutput = "任务产出";
|
||||
$lang->report->bugOutput = "Bug产出";
|
||||
$lang->report->caseOutput = "用例产出";
|
||||
$lang->report->bugProgress = "Bug进展";
|
||||
$lang->report->productProgress = "{$lang->productCommon}进展";
|
||||
$lang->report->executionProgress = "执行进展";
|
||||
$lang->report->projectProgress = "{$lang->projectCommon}进展";
|
||||
$lang->report->yearProjectOverview = "年度{$lang->projectCommon}总览";
|
||||
$lang->report->projectOverview = "截止目前{$lang->projectCommon}总览";
|
||||
|
||||
@@ -9,31 +9,27 @@
|
||||
* @version $Id: en.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = 'Report Home';
|
||||
$lang->report->list = 'Pivot Table';
|
||||
$lang->report->preview = 'View Pivot Table';
|
||||
$lang->report->item = 'Item';
|
||||
$lang->report->value = 'Value';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Undefined';
|
||||
$lang->report->query = 'Query';
|
||||
$lang->report->annual = 'Annual Summary';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->viewEveryoneAnnual = 'View everyone annual summary';
|
||||
$lang->report->index = 'Report Home';
|
||||
$lang->report->list = 'Pivot Table';
|
||||
$lang->report->item = 'Item';
|
||||
$lang->report->value = 'Value';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Undefined';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
|
||||
$lang->report->assign['noassign'] = 'Unassigned';
|
||||
$lang->report->assign['assign'] = 'Assigned';
|
||||
@@ -53,18 +49,6 @@ $lang->report->end = ' End';
|
||||
$lang->report->dept = 'Department';
|
||||
$lang->report->deviationChart = "{$lang->projectCommon} Deviation Chart";
|
||||
|
||||
$lang->reportList = new stdclass();
|
||||
$lang->reportList->product = new stdclass();
|
||||
$lang->reportList->project = new stdclass();
|
||||
$lang->reportList->test = new stdclass();
|
||||
$lang->reportList->staff = new stdclass();
|
||||
|
||||
$lang->reportList->product->lists[10] = $lang->productCommon . ' Summary|report|productsummary';
|
||||
$lang->reportList->project->lists[10] = "{$lang->execution->common} Deviation|report|projectdeviation";
|
||||
$lang->reportList->test->lists[10] = 'Bug Reported Summary|report|bugcreate';
|
||||
$lang->reportList->test->lists[13] = 'Bug Assigned Summary|report|bugassign';
|
||||
$lang->reportList->staff->lists[10] = 'Team Workload Summary|report|workload';
|
||||
|
||||
$lang->report->id = 'ID';
|
||||
$lang->report->execution = $lang->execution->common;
|
||||
$lang->report->product = $lang->productCommon;
|
||||
@@ -110,12 +94,6 @@ $lang->report->mailTitle->task = " Task (%s),";
|
||||
$lang->report->mailTitle->todo = " Todo (%s),";
|
||||
$lang->report->mailTitle->testTask = " Request (%s),";
|
||||
|
||||
$lang->report->deviationDesc = 'According to the Closed Execution Deviation Rate = ((Total Cost - Total Estimate) / Total Estimate), the Deviation Rate is n/a when the Total Estimate is 0.';
|
||||
$lang->report->proVersion = '<a href="https://www.zentao.net/page/enterprise.html" target="_blank">Try ZenTao Biz for more!</a>';
|
||||
$lang->report->proVersionEn = '<a href="https://www.zentao.pm/" target="_blank">Try ZenTao Biz for more!</a>';
|
||||
$lang->report->workloadDesc = 'Workload = the total left hours of all tasks of the user / selected days * hours per day.
|
||||
For example: the begin and end date is January 1st to January 7th, and the total work days is 5 days, 8 hours per day. The Work load is all unfinished tasks assigned to this user to be finished in 5 days, 8 hours per day.';
|
||||
|
||||
$lang->report->annualData = new stdclass();
|
||||
$lang->report->annualData->title = "%s work summary in %s";
|
||||
$lang->report->annualData->exportByZentao = "Export By ZenTao";
|
||||
@@ -216,3 +194,20 @@ $lang->report->annualData->radarItems['execution'] = $lang->projectCommon;
|
||||
$lang->report->annualData->radarItems['devel'] = "Development";
|
||||
$lang->report->annualData->radarItems['qa'] = "QA";
|
||||
$lang->report->annualData->radarItems['other'] = "Other";
|
||||
|
||||
$lang->report->companyRadar = "公司能力雷达图";
|
||||
$lang->report->outputData = "产出数据";
|
||||
$lang->report->outputTotal = "产出总数";
|
||||
$lang->report->storyOutput = "需求产出";
|
||||
$lang->report->planOutput = "计划产出";
|
||||
$lang->report->releaseOutput = "发布产出";
|
||||
$lang->report->executionOutput = "执行产出";
|
||||
$lang->report->taskOutput = "任务产出";
|
||||
$lang->report->bugOutput = "Bug产出";
|
||||
$lang->report->caseOutput = "用例产出";
|
||||
$lang->report->bugProgress = "Bug进展";
|
||||
$lang->report->productProgress = "{$lang->productCommon}进展";
|
||||
$lang->report->executionProgress = "执行进展";
|
||||
$lang->report->projectProgress = "{$lang->projectCommon}进展";
|
||||
$lang->report->yearProjectOverview = "年度{$lang->projectCommon}总览";
|
||||
$lang->report->projectOverview = "截止目前{$lang->projectCommon}总览";
|
||||
|
||||
@@ -9,31 +9,27 @@
|
||||
* @version $Id: en.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = 'Accueil Rapports';
|
||||
$lang->report->list = 'Rapports';
|
||||
$lang->report->preview = 'View Pivot Table';
|
||||
$lang->report->item = 'Item';
|
||||
$lang->report->value = 'Valeur';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'N/D';
|
||||
$lang->report->query = 'Requête';
|
||||
$lang->report->annual = 'Résumé Annuel';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->viewEveryoneAnnual = 'View everyone annual summary';
|
||||
$lang->report->index = 'Accueil Rapports';
|
||||
$lang->report->list = 'Rapports';
|
||||
$lang->report->item = 'Item';
|
||||
$lang->report->value = 'Valeur';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'N/D';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
|
||||
$lang->report->assign['noassign'] = 'Non affecté';
|
||||
$lang->report->assign['assign'] = 'Affecté';
|
||||
@@ -53,18 +49,6 @@ $lang->report->end = 'End';
|
||||
$lang->report->dept = 'Compartiment';
|
||||
$lang->report->deviationChart = "{$lang->projectCommon} Deviation Chart";
|
||||
|
||||
$lang->reportList = new stdclass();
|
||||
$lang->reportList->product = new stdclass();
|
||||
$lang->reportList->project = new stdclass();
|
||||
$lang->reportList->test = new stdclass();
|
||||
$lang->reportList->staff = new stdclass();
|
||||
|
||||
$lang->reportList->product->lists[10] = 'Résumé ' . $lang->productCommon . '|report|productsummary';
|
||||
$lang->reportList->project->lists[10] = "Dérv {$lang->execution->common}|report|projectdeviation";
|
||||
$lang->reportList->test->lists[10] = 'Résumé remontée Bugs|report|bugcreate';
|
||||
$lang->reportList->test->lists[13] = 'Résumé affectation Bugs|report|bugassign';
|
||||
$lang->reportList->staff->lists[10] = 'Résumé charge travail|report|workload';
|
||||
|
||||
$lang->report->id = 'ID';
|
||||
$lang->report->execution = $lang->executionCommon;
|
||||
$lang->report->product = $lang->productCommon;
|
||||
@@ -110,12 +94,6 @@ $lang->report->mailTitle->task = " Tâches (%s),";
|
||||
$lang->report->mailTitle->todo = " Agenda (%s),";
|
||||
$lang->report->mailTitle->testTask = " Recettes (%s),";
|
||||
|
||||
$lang->report->deviationDesc = 'According to the Closed Execution Deviation Rate = ((Total Cost - Total Estimate) / Total Estimate), the Deviation Rate is n/a when the Total Estimate is 0.';
|
||||
$lang->report->proVersion = '<a href="https://www.zentao.pm/page/vs.html" target="_blank">Essayez ZenTao Pro pour en savoir plus !</a>';
|
||||
$lang->report->proVersionEn = '<a href="https://www.zentao.pm/page/vs.html" target="_blank">Try ZenTao Pro for more!</a>';
|
||||
$lang->report->workloadDesc = 'Workload = the total left hours of all tasks of the user / selected days * hours per day.
|
||||
For example: the begin and end date is January 1st to January 7th, and the total work days is 5 days, 8 hours per day. The Work load is all unfinished tasks assigned to this user to be finished in 5 days, 8 hours per day.';
|
||||
|
||||
$lang->report->annualData = new stdclass();
|
||||
$lang->report->annualData->title = "%s work summary in %s";
|
||||
$lang->report->annualData->exportByZentao = "Export By ZenTao";
|
||||
@@ -216,3 +194,20 @@ $lang->report->annualData->radarItems['execution'] = $lang->projectCommon;
|
||||
$lang->report->annualData->radarItems['devel'] = "Development";
|
||||
$lang->report->annualData->radarItems['qa'] = "QA";
|
||||
$lang->report->annualData->radarItems['other'] = "Other";
|
||||
|
||||
$lang->report->companyRadar = "公司能力雷达图";
|
||||
$lang->report->outputData = "产出数据";
|
||||
$lang->report->outputTotal = "产出总数";
|
||||
$lang->report->storyOutput = "需求产出";
|
||||
$lang->report->planOutput = "计划产出";
|
||||
$lang->report->releaseOutput = "发布产出";
|
||||
$lang->report->executionOutput = "执行产出";
|
||||
$lang->report->taskOutput = "任务产出";
|
||||
$lang->report->bugOutput = "Bug产出";
|
||||
$lang->report->caseOutput = "用例产出";
|
||||
$lang->report->bugProgress = "Bug进展";
|
||||
$lang->report->productProgress = "{$lang->productCommon}进展";
|
||||
$lang->report->executionProgress = "执行进展";
|
||||
$lang->report->projectProgress = "{$lang->projectCommon}进展";
|
||||
$lang->report->yearProjectOverview = "年度{$lang->projectCommon}总览";
|
||||
$lang->report->projectOverview = "截止目前{$lang->projectCommon}总览";
|
||||
|
||||
@@ -9,29 +9,26 @@
|
||||
* @version $Id: vi.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = 'Trang báo cáo';
|
||||
$lang->report->list = 'Báo cáo';
|
||||
$lang->report->preview = 'View Pivot Table';
|
||||
$lang->report->item = 'Hạng mục';
|
||||
$lang->report->value = 'Giá trị';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Chưa định nghĩa';
|
||||
$lang->report->query = 'Truy vấn';
|
||||
$lang->report->annual = 'Tóm tắt theo năm';
|
||||
$lang->report->project = 'Project';
|
||||
$lang->report->index = 'Trang báo cáo';
|
||||
$lang->report->list = 'Báo cáo';
|
||||
$lang->report->item = 'Hạng mục';
|
||||
$lang->report->value = 'Giá trị';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Chưa định nghĩa';
|
||||
$lang->report->project = 'Project';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
|
||||
$lang->report->assign['noassign'] = 'Chưa giao';
|
||||
$lang->report->assign['assign'] = 'Đã giao';
|
||||
@@ -51,18 +48,6 @@ $lang->report->end = 'End';
|
||||
$lang->report->dept = 'Phòng/Ban';
|
||||
$lang->report->deviationChart = 'Biểu đồ chênh lệcthực hiệnh';
|
||||
|
||||
$lang->reportList = new stdclass();
|
||||
$lang->reportList->product = new stdclass();
|
||||
$lang->reportList->project = new stdclass();
|
||||
$lang->reportList->test = new stdclass();
|
||||
$lang->reportList->staff = new stdclass();
|
||||
|
||||
$lang->reportList->product->lists[10] = 'Tóm tắt '.$lang->productCommon . '|report|productsummary';
|
||||
$lang->reportList->project->lists[10] = 'Chênh lệchthực hiện|reportprojectdeviation';
|
||||
$lang->reportList->test->lists[10] = 'Báo cáo Bug|report|bugcreate';
|
||||
$lang->reportList->test->lists[13] = 'Bàn giao Bug|report|bugassign';
|
||||
$lang->reportList->staff->lists[10] = 'Lượng công việc đội nhóm|report|workload';
|
||||
|
||||
$lang->report->id = 'ID';
|
||||
$lang->report->execution = $lang->executionCommon;
|
||||
$lang->report->product = $lang->productCommon;
|
||||
@@ -108,10 +93,6 @@ $lang->report->mailTitle->task = " %s) nhiệm vụ,";
|
||||
$lang->report->mailTitle->todo = " (%s) việc,";
|
||||
$lang->report->mailTitle->testTask = " (%s) yêu cầu,";
|
||||
|
||||
$lang->report->deviationDesc = 'According to the Closed Execution Deviation Rate = ((Total Cost - Total Estimate) / Total Estimate), the Deviation Rate is n/a when the Total Estimate is 0.';
|
||||
$lang->report->proVersion = '<a href="https://api.zentao.net/goto.php?item=proversion&from=reportpage" target="_blank">Hãy thử ZenTao Pro để biết thêm!</a>';
|
||||
$lang->report->proVersionEn = '<a href="http://api.zentao.pm/goto.php?item=proversion&from=reportpage" target="_blank">Hãy thử ZenTao Pro để biết thêm!</a>';
|
||||
|
||||
$lang->report->annualData = new stdclass();
|
||||
$lang->report->annualData->title = "%s work summary in %s";
|
||||
$lang->report->annualData->exportByZentao = "Export By ZenTao";
|
||||
@@ -209,3 +190,20 @@ $lang->report->annualData->radarItems['execution'] = "Project";
|
||||
$lang->report->annualData->radarItems['devel'] = "Development";
|
||||
$lang->report->annualData->radarItems['qa'] = "QA";
|
||||
$lang->report->annualData->radarItems['other'] = "Other";
|
||||
|
||||
$lang->report->companyRadar = "公司能力雷达图";
|
||||
$lang->report->outputData = "产出数据";
|
||||
$lang->report->outputTotal = "产出总数";
|
||||
$lang->report->storyOutput = "需求产出";
|
||||
$lang->report->planOutput = "计划产出";
|
||||
$lang->report->releaseOutput = "发布产出";
|
||||
$lang->report->executionOutput = "执行产出";
|
||||
$lang->report->taskOutput = "任务产出";
|
||||
$lang->report->bugOutput = "Bug产出";
|
||||
$lang->report->caseOutput = "用例产出";
|
||||
$lang->report->bugProgress = "Bug进展";
|
||||
$lang->report->productProgress = "{$lang->productCommon}进展";
|
||||
$lang->report->executionProgress = "执行进展";
|
||||
$lang->report->projectProgress = "{$lang->projectCommon}进展";
|
||||
$lang->report->yearProjectOverview = "年度{$lang->projectCommon}总览";
|
||||
$lang->report->projectOverview = "截止目前{$lang->projectCommon}总览";
|
||||
|
||||
@@ -9,31 +9,27 @@
|
||||
* @version $Id: zh-cn.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = '统计首页';
|
||||
$lang->report->list = '透视表';
|
||||
$lang->report->preview = '查看透视表';
|
||||
$lang->report->item = '条目';
|
||||
$lang->report->value = '值';
|
||||
$lang->report->percent = '百分比';
|
||||
$lang->report->undefined = '未设定';
|
||||
$lang->report->query = '查询';
|
||||
$lang->report->annual = '年度总结';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->viewEveryoneAnnual = '查看所有人年度总结';
|
||||
$lang->report->index = '统计首页';
|
||||
$lang->report->list = '透视表';
|
||||
$lang->report->item = '条目';
|
||||
$lang->report->value = '值';
|
||||
$lang->report->percent = '百分比';
|
||||
$lang->report->undefined = '未设定';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
|
||||
$lang->report->assign['noassign'] = '未指派';
|
||||
$lang->report->assign['assign'] = '已指派';
|
||||
@@ -53,18 +49,6 @@ $lang->report->end = '结束日期';
|
||||
$lang->report->dept = '部门';
|
||||
$lang->report->deviationChart = "{$lang->execution->common}偏差曲线";
|
||||
|
||||
$lang->reportList = new stdclass();
|
||||
$lang->reportList->product = new stdclass();
|
||||
$lang->reportList->project = new stdclass();
|
||||
$lang->reportList->test = new stdclass();
|
||||
$lang->reportList->staff = new stdclass();
|
||||
|
||||
$lang->reportList->product->lists[10] = $lang->productCommon . '汇总表|report|productsummary';
|
||||
$lang->reportList->project->lists[10] = "{$lang->execution->common}偏差报表|report|projectdeviation";
|
||||
$lang->reportList->test->lists[10] = 'Bug创建表|report|bugcreate';
|
||||
$lang->reportList->test->lists[13] = 'Bug指派表|report|bugassign';
|
||||
$lang->reportList->staff->lists[10] = '员工负载表|report|workload';
|
||||
|
||||
$lang->report->id = '编号';
|
||||
$lang->report->execution = $lang->execution->common;
|
||||
$lang->report->product = $lang->productCommon;
|
||||
@@ -110,12 +94,6 @@ $lang->report->mailTitle->task = " 任务(%s),";
|
||||
$lang->report->mailTitle->todo = " 待办(%s),";
|
||||
$lang->report->mailTitle->testTask = " 测试版本(%s),";
|
||||
|
||||
$lang->report->deviationDesc = '按照已关闭执行统计偏差率(偏差率 = (总消耗 - 总预计) / 总预计),总预计为0时偏差率为n/a。';
|
||||
$lang->report->proVersion = '<a href="https://www.zentao.net/page/enterprise.html" target="_blank">更多精彩,尽在企业版!</a>';
|
||||
$lang->report->proVersionEn = '<a href="https://www.zentao.pm/" target="_blank">Try ZenTao Biz for more!</a>';
|
||||
$lang->report->workloadDesc = '工作负载=用户所有任务剩余工时之和/选择的时间天数*每天的工时。例如:起止时间设为1月1日~1月7日、工作日天数5天、每天工时8h,统计的是所有指派给该人员的未完成的任务,在5天内,每天8h的情况下的工作负载。';
|
||||
|
||||
|
||||
$lang->report->annualData = new stdclass();
|
||||
$lang->report->annualData->title = "%s %s年工作汇总";
|
||||
$lang->report->annualData->exportByZentao = "由禅道系统导出";
|
||||
|
||||
@@ -9,29 +9,27 @@
|
||||
* @version $Id: zh-tw.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = '統計首頁';
|
||||
$lang->report->list = '透视表';
|
||||
$lang->report->preview = '查看透视表';
|
||||
$lang->report->item = '條目';
|
||||
$lang->report->value = '值';
|
||||
$lang->report->percent = '百分比';
|
||||
$lang->report->undefined = '未設定';
|
||||
$lang->report->query = '查詢';
|
||||
$lang->report->annual = '年度總結';
|
||||
$lang->report->project = '項目';
|
||||
$lang->report->index = '統計首頁';
|
||||
$lang->report->list = '透视表';
|
||||
$lang->report->item = '條目';
|
||||
$lang->report->value = '值';
|
||||
$lang->report->percent = '百分比';
|
||||
$lang->report->undefined = '未設定';
|
||||
$lang->report->project = $lang->projectCommon;
|
||||
$lang->report->PO = 'PO';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
$lang->report->colors[] = '8BBA00';
|
||||
$lang->report->colors[] = 'FF8E46';
|
||||
$lang->report->colors[] = '008E8E';
|
||||
$lang->report->colors[] = 'D64646';
|
||||
$lang->report->colors[] = '8E468E';
|
||||
$lang->report->colors[] = '588526';
|
||||
$lang->report->colors[] = 'B3AA00';
|
||||
$lang->report->colors[] = '008ED6';
|
||||
$lang->report->colors[] = '9D080D';
|
||||
$lang->report->colors[] = 'A186BE';
|
||||
|
||||
$lang->report->assign['noassign'] = '未指派';
|
||||
$lang->report->assign['assign'] = '已指派';
|
||||
@@ -51,18 +49,6 @@ $lang->report->end = '結束日期';
|
||||
$lang->report->dept = '部門';
|
||||
$lang->report->deviationChart = "{$lang->execution->common}偏差曲綫";
|
||||
|
||||
$lang->reportList = new stdclass();
|
||||
$lang->reportList->product = new stdclass();
|
||||
$lang->reportList->project = new stdclass();
|
||||
$lang->reportList->test = new stdclass();
|
||||
$lang->reportList->staff = new stdclass();
|
||||
|
||||
$lang->reportList->product->lists[10] = $lang->productCommon . '彙總表|report|productsummary';
|
||||
$lang->reportList->project->lists[10] = "{$lang->execution->common}偏差報表|report|projectdeviation";
|
||||
$lang->reportList->test->lists[10] = 'Bug創建表|report|bugcreate';
|
||||
$lang->reportList->test->lists[13] = 'Bug指派表|report|bugassign';
|
||||
$lang->reportList->staff->lists[10] = '員工負載表|report|workload';
|
||||
|
||||
$lang->report->id = '編號';
|
||||
$lang->report->execution = $lang->execution->common;
|
||||
$lang->report->product = $lang->productCommon;
|
||||
@@ -108,12 +94,6 @@ $lang->report->mailTitle->task = " 任務(%s),";
|
||||
$lang->report->mailTitle->todo = " 待辦(%s),";
|
||||
$lang->report->mailTitle->testTask = " 測試版本(%s),";
|
||||
|
||||
$lang->report->deviationDesc = '按照已關閉執行統計偏差率(偏差率 = (總消耗 - 總預計) / 總預計),總預計為0時偏差率為n/a。';
|
||||
$lang->report->proVersion = '<a href="https://api.zentao.net/goto.php?item=proversion&from=reportpage" target="_blank">更多精彩,盡在專業版!</a>';
|
||||
$lang->report->proVersionEn = '<a href="http://api.zentao.pm/goto.php?item=proversion&from=reportpage" target="_blank">Try ZenTao Pro for more!</a>';
|
||||
$lang->report->workloadDesc = '工作負載=用戶所有任務剩餘工時之和/選擇的時間天數*每天的工時。例如:起止時間設為1月1日~1月7日、工作日天數5天、每天工時8h,統計的是所有指派給該人員的未完成的任務,在5天內,每天8h的情況下的工作負載。';
|
||||
|
||||
|
||||
$lang->report->annualData = new stdclass();
|
||||
$lang->report->annualData->title = "%s %s年工作彙總";
|
||||
$lang->report->annualData->exportByZentao = "由禪道系統導出";
|
||||
|
||||
@@ -88,378 +88,6 @@ class reportModel extends model
|
||||
return $dateList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get executions.
|
||||
*
|
||||
* @param string $begin
|
||||
* @param string $end
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getExecutions($begin = 0, $end = 0)
|
||||
{
|
||||
$permission = common::hasPriv('report', 'showProject') or $this->app->user->admin;
|
||||
$tasks = $this->dao->select('t1.*, IF(t3.multiple = "1", t2.name, "") as executionName, t3.name as projectName, t2.multiple')->from(TABLE_TASK)->alias('t1')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t3')->on('t1.project = t3.id')
|
||||
->where('t1.status')->ne('cancel')
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->beginIF(!$permission)->andWhere('t2.id')->in($this->app->user->view->sprints)->fi()
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->andWhere('t1.parent')->lt(1)
|
||||
->andWhere('t2.status')->eq('closed')
|
||||
->beginIF($begin)->andWhere('t2.begin')->ge($begin)->fi()
|
||||
->beginIF($end)->andWhere('t2.end')->le($end)->fi()
|
||||
->orderBy('t2.end_desc')
|
||||
->fetchAll();
|
||||
|
||||
$executions = array();
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
$executionID = $task->execution;
|
||||
if(!isset($executions[$executionID]))
|
||||
{
|
||||
$executions[$executionID] = new stdclass();
|
||||
$executions[$executionID]->estimate = 0;
|
||||
$executions[$executionID]->consumed = 0;
|
||||
}
|
||||
|
||||
$executions[$executionID]->projectID = $task->project;
|
||||
$executions[$executionID]->projectName = $task->projectName;
|
||||
$executions[$executionID]->multiple = $task->multiple;
|
||||
$executions[$executionID]->name = $task->executionName;
|
||||
$executions[$executionID]->estimate += $task->estimate;
|
||||
$executions[$executionID]->consumed += $task->consumed;
|
||||
}
|
||||
|
||||
return $executions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get products.
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getProducts($conditions, $storyType = 'story')
|
||||
{
|
||||
$permission = common::hasPriv('report', 'showProduct') or $this->app->user->admin;
|
||||
$products = $this->dao->select('t1.id as id, t1.code, t1.name, t1.PO')->from(TABLE_PRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id')
|
||||
->where('t1.deleted')->eq(0)
|
||||
->andWhere('t1.shadow')->eq(0)
|
||||
->andWhere('t1.vision')->eq('rnd')
|
||||
->beginIF(strpos($conditions, 'closedProduct') === false)->andWhere('t1.status')->ne('closed')->fi()
|
||||
->beginIF(!$permission)->andWhere('t1.id')->in($this->app->user->view->products)->fi()
|
||||
->orderBy('t2.order_asc, t1.line_desc, t1.order_asc')
|
||||
->fetchAll('id');
|
||||
|
||||
$plans = $this->dao->select('id, product, branch, parent, title, begin, end')->from(TABLE_PRODUCTPLAN)->where('deleted')->eq(0)->andWhere('product')->in(array_keys($products))
|
||||
->beginIF(strpos($conditions, 'overduePlan') === false)->andWhere('end')->gt(date('Y-m-d'))->fi()
|
||||
->orderBy('product,parent_desc,begin')
|
||||
->fetchAll('id');
|
||||
foreach($plans as $plan)
|
||||
{
|
||||
if($plan->parent > 0)
|
||||
{
|
||||
$parentPlan = zget($plans, $plan->parent, null);
|
||||
if($parentPlan)
|
||||
{
|
||||
$products[$plan->product]->plans[$parentPlan->id] = $parentPlan;
|
||||
unset($plans[$parentPlan->id]);
|
||||
}
|
||||
$plan->title = '>>' . $plan->title;
|
||||
}
|
||||
$products[$plan->product]->plans[$plan->id] = $plan;
|
||||
}
|
||||
|
||||
$planStories = array();
|
||||
$unplannedStories = array();
|
||||
$stmt = $this->dao->select('id,plan,product,status')
|
||||
->from(TABLE_STORY)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('parent')->ge(0)
|
||||
->beginIF($storyType)->andWhere('type')->eq($storyType)->fi()
|
||||
->query();
|
||||
while($story = $stmt->fetch())
|
||||
{
|
||||
if(empty($story->plan))
|
||||
{
|
||||
$unplannedStories[$story->id] = $story;
|
||||
continue;
|
||||
}
|
||||
|
||||
$storyPlans = array();
|
||||
$storyPlans[] = $story->plan;
|
||||
if(strpos($story->plan, ',') !== false) $storyPlans = explode(',', trim($story->plan, ','));
|
||||
foreach($storyPlans as $planID)
|
||||
{
|
||||
if(isset($plans[$planID]))
|
||||
{
|
||||
$planStories[$story->id] = $story;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($planStories as $story)
|
||||
{
|
||||
$storyPlans = array();
|
||||
$storyPlans[] = $story->plan;
|
||||
if(strpos($story->plan, ',') !== false) $storyPlans = explode(',', trim($story->plan, ','));
|
||||
foreach($storyPlans as $planID)
|
||||
{
|
||||
if(!isset($plans[$planID])) continue;
|
||||
$plan = $plans[$planID];
|
||||
$products[$plan->product]->plans[$planID]->status[$story->status] = isset($products[$plan->product]->plans[$planID]->status[$story->status]) ? $products[$plan->product]->plans[$planID]->status[$story->status] + 1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($unplannedStories as $story)
|
||||
{
|
||||
$product = $story->product;
|
||||
if(isset($products[$product]))
|
||||
{
|
||||
if(!isset($products[$product]->plans[0]))
|
||||
{
|
||||
$products[$product]->plans[0] = new stdClass();
|
||||
$products[$product]->plans[0]->title = $this->lang->report->unplanned;
|
||||
$products[$product]->plans[0]->begin = '';
|
||||
$products[$product]->plans[0]->end = '';
|
||||
}
|
||||
$products[$product]->plans[0]->status[$story->status] = isset($products[$product]->plans[0]->status[$story->status]) ? $products[$product]->plans[0]->status[$story->status] + 1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
unset($products['']);
|
||||
return $products;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bugs
|
||||
*
|
||||
* @param int $begin
|
||||
* @param int $end
|
||||
* @param int $product
|
||||
* @param int $execution
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getBugs($begin, $end, $product, $execution)
|
||||
{
|
||||
$end = date('Ymd', strtotime("$end +1 day"));
|
||||
$bugs = $this->dao->select('id, resolution, openedBy, status')->from(TABLE_BUG)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('openedDate')->ge($begin)
|
||||
->andWhere('openedDate')->le($end)
|
||||
->beginIF($product)->andWhere('product')->eq($product)->fi()
|
||||
->beginIF($execution)->andWhere('execution')->eq($execution)->fi()
|
||||
->fetchAll();
|
||||
|
||||
$bugCreate = array();
|
||||
foreach($bugs as $bug)
|
||||
{
|
||||
$bugCreate[$bug->openedBy][$bug->resolution] = empty($bugCreate[$bug->openedBy][$bug->resolution]) ? 1 : $bugCreate[$bug->openedBy][$bug->resolution] + 1;
|
||||
$bugCreate[$bug->openedBy]['all'] = empty($bugCreate[$bug->openedBy]['all']) ? 1 : $bugCreate[$bug->openedBy]['all'] + 1;
|
||||
if($bug->status == 'resolved' or $bug->status == 'closed')
|
||||
{
|
||||
$bugCreate[$bug->openedBy]['resolved'] = empty($bugCreate[$bug->openedBy]['resolved']) ? 1 : $bugCreate[$bug->openedBy]['resolved'] + 1;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($bugCreate as $account => $bug)
|
||||
{
|
||||
$validRate = 0;
|
||||
if(isset($bug['fixed'])) $validRate += $bug['fixed'];
|
||||
if(isset($bug['postponed'])) $validRate += $bug['postponed'];
|
||||
$bugCreate[$account]['validRate'] = (isset($bug['resolved']) and $bug['resolved']) ? ($validRate / $bug['resolved']) : "0";
|
||||
}
|
||||
uasort($bugCreate, 'sortSummary');
|
||||
return $bugCreate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get workload.
|
||||
*
|
||||
* @param int $dept
|
||||
* @param string $assign
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getWorkload($dept = 0, $assign = 'assign')
|
||||
{
|
||||
$deptUsers = array();
|
||||
if($dept) $deptUsers = $this->loadModel('dept')->getDeptUserPairs($dept);
|
||||
|
||||
if($assign == 'noassign')
|
||||
{
|
||||
$members = $this->dao->select('t1.account,t2.name,t2.multiple,t1.root,t3.id as project,t3.name as projectname')->from(TABLE_TEAM)->alias('t1')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t2.id = t1.root')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t3')->on('t3.id = t2.project')
|
||||
->where('t2.status')->notin('cancel, closed, done, suspended')
|
||||
->beginIF($dept)->andWhere('t1.account')->in(array_keys($deptUsers))->fi()
|
||||
->andWhere('t1.type')->eq('execution')
|
||||
->andWhere("t1.account NOT IN(SELECT `assignedTo` FROM " . TABLE_TASK . " WHERE `execution` = t1.`root` AND `status` NOT IN('cancel, closed, done, pause') AND assignedTo != '' GROUP BY assignedTo)")
|
||||
->andWhere('t2.deleted')->eq('0')
|
||||
->fetchGroup('account', 'name');
|
||||
|
||||
$workload = array();
|
||||
if(!empty($members))
|
||||
{
|
||||
foreach($members as $member => $executions)
|
||||
{
|
||||
$project = array();
|
||||
if(!empty($executions))
|
||||
{
|
||||
foreach($executions as $name => $execution)
|
||||
{
|
||||
$project[$execution->projectname]['projectID'] = $execution->project;
|
||||
$project[$execution->projectname]['execution'][$name]['executionID'] = $execution->root;
|
||||
$project[$execution->projectname]['execution'][$name]['multiple'] = $execution->multiple;
|
||||
$project[$execution->projectname]['execution'][$name]['count'] = 0;
|
||||
$project[$execution->projectname]['execution'][$name]['manhour'] = 0;
|
||||
|
||||
$workload[$member]['total']['count'] = 0;
|
||||
$workload[$member]['total']['manhour'] = 0;
|
||||
}
|
||||
}
|
||||
$workload[$member]['task']['project'] = $project;
|
||||
}
|
||||
}
|
||||
return $workload;
|
||||
}
|
||||
|
||||
$stmt = $this->dao->select('t1.*, t2.name as executionName, t3.name as projectname, t2.multiple')->from(TABLE_TASK)->alias('t1')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t3')->on('t3.id = t2.project')
|
||||
->where('t1.deleted')->eq(0)
|
||||
->andWhere('t1.status')->in('wait,pause,doing')
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->andWhere('t2.status')->in('wait,suspended,doing')
|
||||
->andWhere('assignedTo')->ne('');
|
||||
|
||||
$allTasks = $stmt->fetchAll('id');
|
||||
if(empty($allTasks)) return array();
|
||||
|
||||
$tasks = array();
|
||||
if(empty($dept))
|
||||
{
|
||||
$tasks = $allTasks;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($allTasks as $taskID => $task)
|
||||
{
|
||||
if(isset($deptUsers[$task->assignedTo])) $tasks[$taskID] = $task;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fix bug for children. */
|
||||
$parents = array();
|
||||
$taskIdList = array();
|
||||
$taskGroups = array();
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
if($task->parent > 0) $parents[$task->parent] = $task->parent;
|
||||
$taskGroups[$task->assignedTo][$task->id] = $task;
|
||||
}
|
||||
|
||||
$stmt = $this->dao->select('*')->from(TABLE_TASKTEAM)->where('task')->in(array_keys($allTasks))
|
||||
->beginIF($dept)->andWhere('account')->in(array_keys($deptUsers))->fi()
|
||||
->query();
|
||||
$multiTaskTeams = array();
|
||||
while($taskTeam = $stmt->fetch())
|
||||
{
|
||||
$account = $taskTeam->account;
|
||||
if(!isset($multiTaskTeams[$account][$taskTeam->task]))
|
||||
{
|
||||
$multiTaskTeams[$account][$taskTeam->task] = $taskTeam;
|
||||
}
|
||||
else
|
||||
{
|
||||
$multiTaskTeams[$account][$taskTeam->task]->estimate += $taskTeam->estimate;
|
||||
$multiTaskTeams[$account][$taskTeam->task]->consumed += $taskTeam->consumed;
|
||||
$multiTaskTeams[$account][$taskTeam->task]->left += $taskTeam->left;
|
||||
}
|
||||
}
|
||||
foreach($multiTaskTeams as $assignedTo => $taskTeams)
|
||||
{
|
||||
foreach($taskTeams as $taskTeam)
|
||||
{
|
||||
$userTask = clone $allTasks[$taskTeam->task];
|
||||
$userTask->estimate = $taskTeam->estimate;
|
||||
$userTask->consumed = $taskTeam->consumed;
|
||||
$userTask->left = $taskTeam->left;
|
||||
$taskGroups[$assignedTo][$taskTeam->task] = $userTask;
|
||||
}
|
||||
}
|
||||
|
||||
$workload = array();
|
||||
foreach($taskGroups as $user => $userTasks)
|
||||
{
|
||||
if($user)
|
||||
{
|
||||
$project = array();
|
||||
foreach($userTasks as $task)
|
||||
{
|
||||
if(isset($parents[$task->id])) continue;
|
||||
|
||||
$project[$task->projectname]['projectID'] = isset($project[$task->projectname]['projectID']) ? $project[$task->projectname]['projectID'] : $task->project;
|
||||
$project[$task->projectname]['execution'][$task->executionName]['executionID'] = isset($project[$task->projectname]['execution'][$task->executionName]['executionID']) ? $project[$task->projectname]['execution'][$task->executionName]['executionID'] : $task->execution;
|
||||
$project[$task->projectname]['execution'][$task->executionName]['multiple'] = isset($project[$task->projectname]['execution'][$task->executionName]['multiple']) ? $project[$task->projectname]['execution'][$task->executionName]['multiple'] : $task->multiple;
|
||||
$project[$task->projectname]['execution'][$task->executionName]['count'] = isset($project[$task->projectname]['execution'][$task->executionName]['count']) ? $project[$task->projectname]['execution'][$task->executionName]['count'] + 1 : 1;
|
||||
$project[$task->projectname]['execution'][$task->executionName]['manhour'] = isset($project[$task->projectname]['execution'][$task->executionName]['manhour']) ? $project[$task->projectname]['execution'][$task->executionName]['manhour'] + $task->left : $task->left;
|
||||
|
||||
$workload[$user]['total']['count'] = isset($workload[$user]['total']['count']) ? $workload[$user]['total']['count'] + 1 : 1;
|
||||
$workload[$user]['total']['manhour'] = isset($workload[$user]['total']['manhour']) ? $workload[$user]['total']['manhour'] + $task->left : $task->left;
|
||||
}
|
||||
|
||||
if(empty($project)) continue;
|
||||
$workload[$user]['task']['project'] = $project;
|
||||
}
|
||||
}
|
||||
unset($workload['closed']);
|
||||
return $workload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bug assign.
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getBugAssign()
|
||||
{
|
||||
$bugs = $this->dao->select('t1.*, t2.name AS productName')->from(TABLE_BUG)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product = t2.id')
|
||||
->where('t1.deleted')->eq(0)
|
||||
->andWhere('t1.status')->eq('active')
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->fetchGroup('assignedTo');
|
||||
$productProjects = $this->dao->select('t2.product, t2.project')->from(TABLE_PROJECT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.project')
|
||||
->where('t1.type')->eq('project')
|
||||
->andWhere('t1.hasProduct')->eq(0)
|
||||
->fetchPairs();
|
||||
$assign = array();
|
||||
foreach($bugs as $user => $userBugs)
|
||||
{
|
||||
if($user)
|
||||
{
|
||||
foreach($userBugs as $bug)
|
||||
{
|
||||
$assign[$user]['bug'][$bug->productName]['count'] = isset($assign[$user]['bug'][$bug->productName]['count']) ? $assign[$user]['bug'][$bug->productName]['count'] + 1 : 1;
|
||||
$assign[$user]['bug'][$bug->productName]['productID'] = $bug->product;
|
||||
$assign[$user]['bug'][$bug->productName]['projectID'] = zget($productProjects, $bug->product, 0);
|
||||
$assign[$user]['total']['count'] = isset($assign[$user]['total']['count']) ? $assign[$user]['total']['count'] + 1 : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($assign['closed']);
|
||||
return $assign;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get System URL.
|
||||
*
|
||||
@@ -1240,15 +868,3 @@ class reportModel extends model
|
||||
return $pairs;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $pre
|
||||
* @param $next
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
function sortSummary($pre, $next)
|
||||
{
|
||||
if($pre['validRate'] == $next['validRate']) return 0;
|
||||
return $pre['validRate'] > $next['validRate'] ? -1 : 1;
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
<div class="sidebar-toggle">
|
||||
<i class="icon icon-angle-left"></i>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class='panel'>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $lang->report->list;?></div>
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
ksort($lang->reportList->$submenu->lists);
|
||||
foreach($lang->reportList->$submenu->lists as $list)
|
||||
{
|
||||
$list .= '|';
|
||||
list($label, $module, $method, $params) = explode('|', $list);
|
||||
$class = $label == $title ? 'selected' : '';
|
||||
if(common::hasPriv($module, $method)) echo html::a($this->createLink($module, $method, $params), '<i class="icon icon-file-text"></i> ' . $label, '', "class='$class' title='$label'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($this->config->edition == 'open'):?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>BIZ</strong> <span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion;?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
@@ -1,62 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php if($this->config->edition != 'open'):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col col-lg' id='sidebar'>
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<?php if(empty($assigns)):?>
|
||||
<div class="cell">
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->error->noData;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='cell'>
|
||||
<div class='panel'>
|
||||
<div class="panel-heading">
|
||||
<div class="panel-title"><?php echo $title;?></div>
|
||||
<nav class="panel-actions btn-toolbar"></nav>
|
||||
</div>
|
||||
<div data-ride='table'>
|
||||
<table class='table table-condensed table-striped table-bordered table-fixed no-margin' id='bugAssign'>
|
||||
<thead>
|
||||
<tr class='colhead text-center'>
|
||||
<th><?php echo $lang->report->user;?></th>
|
||||
<th><?php echo $lang->report->product;?></th>
|
||||
<th><?php echo $lang->report->bugTotal;?></th>
|
||||
<th><?php echo $lang->report->total;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($assigns as $account => $assign):?>
|
||||
<?php if(!array_key_exists($account, $users)) continue;?>
|
||||
<tr class="a-center text-center">
|
||||
<td rowspan="<?php echo count($assign['bug']);?>"><?php echo $users[$account];?></td>
|
||||
<?php $id = 1;?>
|
||||
<?php foreach($assign['bug'] as $product => $count):?>
|
||||
<?php if($id != 1) echo '<tr class="a-center text-center">';?>
|
||||
<td>
|
||||
<?php $viewLink = empty($count['projectID']) ? $this->createLink('product', 'view', "product={$count['productID']}") : $this->createLink('project', 'view', "projectID={$count['projectID']}");?>
|
||||
<?php echo html::a($viewLink, $product);?>
|
||||
</td>
|
||||
<td><?php echo $count['count'];?></td>
|
||||
<?php if($id == 1):?>
|
||||
<td rowspan="<?php echo count($assign['bug']);?>">
|
||||
<?php echo $assign['total']['count'];?>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
<?php if($id != 1) echo '</tr>'; $id ++;?>
|
||||
<?php endforeach;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,85 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php if($this->config->edition != 'open'):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col col-lg' id='sidebar'>
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<div class='cell'>
|
||||
<div class="row" id='conditions'>
|
||||
<div class='col-sm-4'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->bugOpenedDate;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('begin', $begin, "class='form-control form-date' onchange='changeParams(this)'");?></div>
|
||||
<span class='input-group-addon'><?php echo $lang->report->to;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('end', $end, "class='form-control form-date' onchange='changeParams(this)'");?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-sm-4'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->product;?></span>
|
||||
<?php echo html::select('product', $products, $product, "class='form-control chosen' onchange='changeParams(this)'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-sm-4'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->execution->common;?></span>
|
||||
<?php echo html::select('execution', $executions, $execution, "class='form-control chosen' onchange='changeParams(this)'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(empty($bugs)):?>
|
||||
<div class="cell">
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->error->noData;?></span></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='cell'>
|
||||
<div class='panel'>
|
||||
<div class="panel-heading">
|
||||
<div class="panel-title"><?php echo $title;?></div>
|
||||
<nav class="panel-actions btn-toolbar"></nav>
|
||||
</div>
|
||||
<div data-ride='table'>
|
||||
<table class='table table-condensed table-striped table-bordered table-fixed no-margin' id="bug">
|
||||
<thead>
|
||||
<tr class='colhead text-center'>
|
||||
<th><?php echo $lang->bug->openedBy;?></th>
|
||||
<th><?php echo $lang->bug->unResolved;?></th>
|
||||
<?php foreach($lang->bug->resolutionList as $resolutionType => $resolution):?>
|
||||
<?php if(empty($resolutionType)) continue;?>
|
||||
<th><?php echo $resolution;?></th>
|
||||
<?php endforeach;?>
|
||||
<th title='<?php echo $lang->report->validRateTips;?>'><?php echo $lang->report->validRate;?></th>
|
||||
<th><?php echo $lang->report->total;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($bugs as $user => $bug):?>
|
||||
<?php if(!isset($users[$user])) continue;?>
|
||||
<tr class="text-center">
|
||||
<td><?php echo $users[$user];?></td>
|
||||
<td><?php echo isset($bug['']) ? $bug[''] : 0;?></td>
|
||||
<?php foreach($lang->bug->resolutionList as $resolutionType => $resolution):?>
|
||||
<?php if(empty($resolutionType)) continue;?>
|
||||
<td><?php echo isset($bug[$resolutionType]) ? $bug[$resolutionType] : 0;?></td>
|
||||
<?php endforeach;?>
|
||||
<td title='<?php echo $lang->report->validRateTips;?>'><?php echo round($bug['validRate'] * 100, 2) . '%';?></td>
|
||||
<td><?php echo $bug['all'];?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<script>
|
||||
$('#subNavbar li').not('[data-id=<?php echo $group;?>]').removeClass('active');
|
||||
</script>
|
||||
<?php if($this->config->edition != 'open'):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 210px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
<?php js::set('dimension', $dimension);?>
|
||||
<?php js::set('group', $group);?>
|
||||
<div id="mainMenu" class='clearfix main-position'>
|
||||
<div class='btn-toolBar pull-left toolbar-padding'>
|
||||
<?php foreach($this->config->report->pivotMenu as $id => $menuInfo):?>
|
||||
<?php list($menuName, $menuModule, $menuMethod, $menuParams) = explode('|', $menuInfo['link']);?>
|
||||
<?php $activeClass = ($id == $group) ? ' btn-active-text' : '';?>
|
||||
<?php echo html::a(inlink($menuMethod, $menuParams), $menuName, '', "class='btn btn-link {$activeClass}' id='{$group}Tab'");?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col col-lg' id='sidebar'>
|
||||
<div class="sidebar-toggle">
|
||||
<i class="icon icon-angle-left"></i>
|
||||
</div>
|
||||
<div class="cell">
|
||||
<div class='panel'>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $lang->report->list;?></div>
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<div class='list-group'>
|
||||
<?php echo $sidebar;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($this->config->edition == 'open'):?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>BIZ</strong> <span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion;?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<?php if(empty($module) || empty($method)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->error->noData;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<?php echo $this->fetch($module, $method, $params);?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,114 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php if(common::checkNotCN()):?>
|
||||
<style>#conditions .col-xs { width: 126px; }</style>
|
||||
<?php endif;?>
|
||||
<?php if($this->config->edition != 'open'):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col col-lg' id='sidebar'>
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<?php if(empty($products)):?>
|
||||
<div class="cell">
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->error->noData;?></span></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='cell'>
|
||||
<div class='panel'>
|
||||
<div class="panel-heading">
|
||||
<div class="panel-title">
|
||||
<div id='conditions'>
|
||||
<div><?php echo $title;?></div>
|
||||
<div class='condition-options'>
|
||||
<div class="checkbox-primary inline-block">
|
||||
<input type="checkbox" name="closedProduct" value="closedProduct" id="closedProduct" <?php if(strpos($conditions, 'closedProduct') !== false) echo "checked='checked'"?> />
|
||||
<label for="closedProduct"><?php echo $lang->report->closedProduct?></label>
|
||||
</div>
|
||||
<div class="checkbox-primary inline-block">
|
||||
<input type="checkbox" name="overduePlan" value="overduePlan" id="overduePlan" <?php if(strpos($conditions, 'overduePlan') !== false) echo "checked='checked'"?> />
|
||||
<label for="overduePlan"><?php echo $lang->report->overduePlan?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="panel-actions btn-toolbar"></nav>
|
||||
</div>
|
||||
<div data-ride='table'>
|
||||
<table class='table table-condensed table-striped table-bordered table-fixed no-margin' id='productList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php echo $lang->product->name;?></th>
|
||||
<th class='c-user'><?php echo $lang->report->PO;?></th>
|
||||
<th><?php echo $lang->productplan->common;?></th>
|
||||
<th class="c-date"><?php echo $lang->productplan->begin;?></th>
|
||||
<th class="c-date"><?php echo $lang->productplan->end;?></th>
|
||||
<th class="c-count"><?php echo $lang->story->statusList['draft'];?></th>
|
||||
<th class="c-count"><?php echo $lang->story->statusList['reviewing'];?></th>
|
||||
<th class="c-count"><?php echo $lang->story->statusList['active'];?></th>
|
||||
<th class="c-count"><?php echo $lang->story->statusList['changing'];?></th>
|
||||
<th class="c-count"><?php echo $lang->story->statusList['closed'];?></th>
|
||||
<th class="c-count"><?php echo $lang->report->total;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $color = false;?>
|
||||
<?php foreach($products as $product):?>
|
||||
<tr class="text-center">
|
||||
<?php $count = isset($product->plans) ? count($product->plans) : 1;?>
|
||||
<td class='c-name text-left' title="<?php echo $product->name;?>" rowspan="<?php echo $count;?>"><?php echo "<p>" . html::a($this->createLink('product', 'view', "product=$product->id"), $product->name) . "</p>";?></td>
|
||||
<td class='text-left' rowspan="<?php echo $count;?>"><?php echo "<p>" . zget($users, $product->PO) . '</p>';?></td>
|
||||
<?php if(isset($product->plans)):?>
|
||||
<?php $id = 1;?>
|
||||
<?php foreach($product->plans as $plan):?>
|
||||
<?php $class = $color ? 'rowcolor' : '';?>
|
||||
<?php if($id != 1) echo "<tr class='text-center'>"?>
|
||||
<?php $child = (isset($plan->parent) and $plan->parent > 0 and isset($product->plans[$plan->parent])) ? ' child' : '';?>
|
||||
<td align='left' class="text-left <?php echo $class . $child;?>" title="<?php echo $plan->title;?>"><?php echo $plan->title;?></td>
|
||||
<td class="<?php echo $class;?>"><?php echo $plan->begin == '2030-01-01' ? $lang->productplan->future : $plan->begin;?></td>
|
||||
<td class="<?php echo $class;?>"><?php echo $plan->end == '2030-01-01' ? $lang->productplan->future : $plan->end;?></td>
|
||||
<?php
|
||||
$draftCount = isset($plan->status['draft']) ? $plan->status['draft'] : 0;
|
||||
$reviewingCount = isset($plan->status['reviewing']) ? $plan->status['reviewing'] : 0;
|
||||
$activeCount = isset($plan->status['active']) ? $plan->status['active'] : 0;
|
||||
$changedCount = isset($plan->status['changing']) ? $plan->status['changing'] : 0;
|
||||
$closedCount = isset($plan->status['closed']) ? $plan->status['closed'] : 0;
|
||||
?>
|
||||
<td class="<?php echo $class;?>"><?php echo $draftCount;?></td>
|
||||
<td class="<?php echo $class;?>"><?php echo $reviewingCount;?></td>
|
||||
<td class="<?php echo $class;?>"><?php echo $activeCount;?></td>
|
||||
<td class="<?php echo $class;?>"><?php echo $changedCount;?></td>
|
||||
<td class="<?php echo $class;?>"><?php echo $closedCount;?></td>
|
||||
<td class="<?php echo $class;?>"><?php echo $draftCount + $reviewingCount + $activeCount + $changedCount + $closedCount;?></td>
|
||||
<?php if($id != 1) echo "</tr>"?>
|
||||
<?php $id ++;?>
|
||||
<?php $color = !$color;?>
|
||||
<?php endforeach;?>
|
||||
<?php else:?>
|
||||
<?php $class = $color ? 'rowcolor' : '';?>
|
||||
<td class="<?php echo $class;?>"></td>
|
||||
<td class="<?php echo $class;?>"></td>
|
||||
<td class="<?php echo $class;?>"></td>
|
||||
<td class="<?php echo $class;?>">0</td>
|
||||
<td class="<?php echo $class;?>">0</td>
|
||||
<td class="<?php echo $class;?>">0</td>
|
||||
<td class="<?php echo $class;?>">0</td>
|
||||
<td class="<?php echo $class;?>">0</td>
|
||||
<td class="<?php echo $class;?>">0</td>
|
||||
<?php $color = !$color;?>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,188 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php include '../../common/view/chart.html.php';?>
|
||||
<?php if($this->config->edition != 'open'):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
<?php $chartData = array('labels' => array(), 'data' => array());?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col col-lg' id='sidebar'>
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<div class='cell'>
|
||||
<div class="row" id='conditions'>
|
||||
<div class='w-220px col-md-3 col-sm-6'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->execution . $lang->report->begin;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('date', $begin, "class='form-control form-date' onchange='changeDate(this.value, \"$end\")'");?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='w-220px col-md-3 col-sm-6'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->execution . $lang->report->end;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('date', $end, "class='form-control form-date' onchange='changeDate(\"$begin\", this.value)'");?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(empty($executions)):?>
|
||||
<div class="cell">
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->error->noData;?></span></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='cell'>
|
||||
<div class='panel'>
|
||||
<div class="panel-heading">
|
||||
<div class="panel-title">
|
||||
<?php echo $title;?>
|
||||
<i class="icon icon-exclamation-sign icon-rotate-180"></i>
|
||||
<span class="hidden" id="desc"><?php echo $lang->report->deviationDesc;?></span>
|
||||
</div>
|
||||
<nav class="panel-actions btn-toolbar"></nav>
|
||||
</div>
|
||||
<div data-ride='table'>
|
||||
<table class='table table-condensed table-striped table-bordered table-fixed no-margin' id='executionList'>
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<th class='c-id'><?php echo $lang->report->id;?></th>
|
||||
<th><?php echo $lang->report->project;?></th>
|
||||
<th><?php echo $lang->report->execution;?></th>
|
||||
<th class="c-hours"><?php echo $lang->report->estimate;?></th>
|
||||
<th class="c-hours"><?php echo $lang->report->consumed;?></th>
|
||||
<th class="c-deviation"><?php echo $lang->report->deviation;?></th>
|
||||
<th class="c-deviation-rate"><?php echo $lang->report->deviationRate;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($executions as $id => $execution):?>
|
||||
<tr class="text-center">
|
||||
<td><?php echo $id;?></td>
|
||||
<td class="text-left" title="<?php echo $execution->projectName;?>">
|
||||
<?php echo $execution->name ? $execution->projectName : html::a($this->createLink('project', 'index', "projectID=$execution->projectID"), $execution->projectName);?>
|
||||
</td>
|
||||
<td class="text-left" title="<?php echo $execution->name;?>">
|
||||
<?php if($execution->multiple):?>
|
||||
<?php echo $execution->name ? html::a($this->createLink('execution', 'view', "executionID=$id"), $execution->name) : '';?>
|
||||
<?php else:?>
|
||||
<?php echo $lang->null;?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td><?php echo round($execution->estimate, 2);?></td>
|
||||
<td><?php echo round($execution->consumed, 2);?></td>
|
||||
<?php $deviation = round($execution->consumed - $execution->estimate, 2);?>
|
||||
<td class="deviation">
|
||||
<?php
|
||||
if($deviation > 0)
|
||||
{
|
||||
echo '<span class="up">↑</span>' . $deviation;
|
||||
}
|
||||
else if($deviation < 0)
|
||||
{
|
||||
echo '<span class="down">↓</span>' . abs($deviation);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<span class="zero">0</span>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td class="deviation">
|
||||
<?php
|
||||
$num = $execution->estimate ? round($deviation / $execution->estimate * 100, 2) : 'n/a';
|
||||
if($num >= 50)
|
||||
{
|
||||
echo '<span class="u50">' . $num . '%</span>';
|
||||
}
|
||||
elseif($num >= 30)
|
||||
{
|
||||
echo '<span class="u30">' . $num . '%</span>';
|
||||
}
|
||||
elseif($num >= 10)
|
||||
{
|
||||
echo '<span class="u10">' . $num . '%</span>';
|
||||
}
|
||||
elseif($num > 0)
|
||||
{
|
||||
echo '<span class="u0">' . abs($num) . '%</span>';
|
||||
}
|
||||
elseif($num <= -20)
|
||||
{
|
||||
echo '<span class="d20">' . abs($num) . '%</span>';
|
||||
}
|
||||
elseif($num < 0)
|
||||
{
|
||||
echo '<span class="d0">' . abs($num) . '%</span>';
|
||||
}
|
||||
elseif($num == 'n/a')
|
||||
{
|
||||
echo '<span class="zero">' . $num . '</span>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo '<span class="zero">' . abs($num) . '%</span>';
|
||||
}
|
||||
|
||||
$chartData['labels'][] = $execution->name;
|
||||
$chartData['data'][] = $deviation;
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php if(!empty($chartData)):?>
|
||||
<div class="cell">
|
||||
<?php
|
||||
if(count($chartData['labels']) > 30)
|
||||
{
|
||||
$chartData['labels'] = array_slice($chartData['labels'], 0, 30);
|
||||
$chartData['data'] = array_slice($chartData['data'], 0, 30);
|
||||
}
|
||||
?>
|
||||
<div class='panel'>
|
||||
<div class='panel-heading'>
|
||||
<div class='panel-title'><?php echo $lang->report->deviationChart?></div>
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<canvas id='deviationChart' width='800' height='300' data-bezier-curve='false' data-responsive='true'></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function initChart()
|
||||
{
|
||||
var data =
|
||||
{
|
||||
labels: <?php echo json_encode($chartData['labels'])?>,
|
||||
datasets: [
|
||||
{
|
||||
label: "",
|
||||
color: "#0033CC",
|
||||
pointStrokeColor: '#0033CC',
|
||||
pointHighlightStroke: '0033CC',
|
||||
data: <?php echo json_encode($chartData['data'])?>
|
||||
}]
|
||||
};
|
||||
|
||||
var burnChart = $("#deviationChart").lineChart(data,
|
||||
{
|
||||
animation: !($.zui.browser && $.zui.browser.ie === 8),
|
||||
pointDotStrokeWidth: 0,
|
||||
pointDotRadius: 1,
|
||||
datasetFill: false,
|
||||
datasetStroke: true,
|
||||
scaleShowBeyondLine: false,
|
||||
tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= value %>h"
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,127 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php if($this->config->edition != 'open'):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 210px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
<?php js::set('weekend', $config->execution->weekend);?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col col-lg' id='sidebar'>
|
||||
<?php include 'blockreportlist.html.php';?>
|
||||
</div>
|
||||
<div class='main-col'>
|
||||
<div class='cell'>
|
||||
<form method='post'>
|
||||
<div class="row" id='conditions'>
|
||||
<div class='col-sm-2'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->dept;?></span>
|
||||
<?php echo html::select('dept', $depts, $dept, "class='form-control chosen' onchange='changeParams(this)'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-sm-4'>
|
||||
<div class='input-group input-group-sm'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->beginAndEnd;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('begin', $begin, "class='form-control' style='padding-right:10px' onchange='changeParams(this)'");?></div>
|
||||
<span class='input-group-addon fix-border'><?php echo $lang->report->to;?></span>
|
||||
<div class='datepicker-wrapper datepicker-date'><?php echo html::input('end', $end, "class='form-control' style='padding-right:10px' onchange='changeParams(this)'");?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-sm-2'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->diffDays;?></span>
|
||||
<?php echo html::input('days', $days, "class='form-control' style='text-align:center'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-sm-4'>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->report->workday;?></span>
|
||||
<?php echo html::input('workday', $workday, "class='form-control'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<?php echo html::select('assign', $lang->report->assign, $assign, "class='form-control' onchange='changeParams(this)'");?>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<?php echo html::submitButton($lang->report->query, '', 'btn btn-primary btn-block');?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php if(empty($workload)):?>
|
||||
<div class="cell">
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->error->noData;?></span></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='cell'>
|
||||
<div class='panel'>
|
||||
<div class="panel-heading">
|
||||
<div class="panel-title"><?php echo $title;?>
|
||||
<a data-toggle='tooltip' title='<?php echo $lang->report->workloadDesc;?>'><i class='icon-help'></i></a>
|
||||
</div>
|
||||
<nav class="panel-actions btn-toolbar"></nav>
|
||||
</div>
|
||||
<div data-ride='table'>
|
||||
<table class='table table-condensed table-striped table-bordered table-fixed no-margin' id="workload">
|
||||
<thead>
|
||||
<tr class='colhead text-center'>
|
||||
<th class="c-user"><?php echo $lang->report->user;?></th>
|
||||
<th class="c-project"><?php echo $lang->report->project ;?>
|
||||
<th><?php echo $lang->report->execution;?></th>
|
||||
<th class="c-count"><?php echo $lang->report->task;?></th>
|
||||
<th class="c-hours"><?php echo $lang->report->remain;?></th>
|
||||
<th class="c-count"><?php echo $lang->report->taskTotal;?></th>
|
||||
<th class="c-hours"><?php echo $lang->report->manhourTotal;?></th>
|
||||
<th class="c-workload"><?php echo $lang->report->workloadAB;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $color = false;?>
|
||||
<?php foreach($workload as $account => $load):?>
|
||||
<?php if(!isset($users[$account])) continue;?>
|
||||
<tr class="text-center">
|
||||
<?php $userTimes = 1; $userCount = 0;?>
|
||||
<?php foreach($load['task']['project'] as $projectName => $info) foreach($info['execution'] as $executionName => $executionInfo) $userCount ++;?>
|
||||
<td class="<?php echo $class;?>" rowspan="<?php echo $userCount;?>"><?php echo $users[$account];?></td>
|
||||
<?php foreach($load['task']['project'] as $projectName => $info):?>
|
||||
<?php $projectTimes = 1; $projectCount = 0;?>
|
||||
<?php foreach($info['execution'] as $executionName => $executionInfo) $projectCount ++ ;?>
|
||||
<?php foreach($info['execution'] as $executionName => $executionInfo):?>
|
||||
<?php if($projectTimes != 1 || $userTimes != 1) echo "<tr>";?>
|
||||
<?php if($projectTimes == 1):?>
|
||||
<td class="text-center" rowspan="<?php echo $projectCount;?>" title="<?php echo $projectName;?>"><?php echo html::a($this->createLink('project', 'view', "projectID={$info['projectID']}"), $projectName);?></td>
|
||||
<?php endif;?>
|
||||
<?php if($executionInfo['multiple']):?>
|
||||
<td class="text-center" title="<?php echo $executionName;?>"><?php echo html::a($this->createLink('execution', 'view', "executionID={$executionInfo['executionID']}"), $executionName);?></td>
|
||||
<?php else:?>
|
||||
<td class='text-center'><?php echo $lang->null;?></td>
|
||||
<?php endif;?>
|
||||
<td class="text-center"><?php echo $executionInfo['count'];?></td>
|
||||
<td class="text-center"><?php echo $executionInfo['manhour'];?></td>
|
||||
<?php if($userTimes == 1):?>
|
||||
<td rowspan="<?php echo $userCount;?>"><?php echo $load['total']['count'];?></td>
|
||||
<td rowspan="<?php echo $userCount;?>"><?php echo $load['total']['manhour'];?></td>
|
||||
<td rowspan="<?php echo $userCount;?>"><?php echo round($load['total']['manhour'] / $allHour * 100, 2) . '%';?></td>
|
||||
<?php endif;?>
|
||||
<?php if($projectTimes != 1 || $userTimes != 1) echo "</tr>";?>
|
||||
<?php $projectTimes ++; $userTimes ++;?>
|
||||
<?php $color = !$color;?>
|
||||
<?php endforeach;?>
|
||||
<?php endforeach;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,139 +0,0 @@
|
||||
<?php
|
||||
class reportZen extends report
|
||||
{
|
||||
/**
|
||||
* Prepare for preview a report.
|
||||
*
|
||||
* @param int $dimension
|
||||
* @param string $group
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @param string $params
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function prepare4Preview($dimension, $group, $module, $method, $params)
|
||||
{
|
||||
$params = helper::safe64Decode($params);
|
||||
|
||||
if(!$dimension) $dimension = $this->getDefaultDimension();
|
||||
if(!$group) $group = $this->getDefaultGroup($dimension);
|
||||
if(!$module || !$method) list($module, $method, $params) = $this->getDefaultMethod($dimension, $group);
|
||||
|
||||
if(!empty($module) && !empty($method) && !common::hasPriv($module, $method)) common::deny('report', $method);
|
||||
|
||||
$this->view->sidebar = $this->getSidebar($dimension, $group, $module, $method, $params);
|
||||
$this->view->dimension = $dimension;
|
||||
$this->view->group = $group;
|
||||
$this->view->module = $module;
|
||||
$this->view->method = $method;
|
||||
$this->view->params = $params;
|
||||
|
||||
if(empty($this->view->title)) $this->view->title = $this->lang->report->list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get default dimension of report.
|
||||
*
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getDefaultDimension()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get default group of a dimension.
|
||||
*
|
||||
* @param int $dimension
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getDefaultGroup($dimension)
|
||||
{
|
||||
foreach($this->lang->reportList as $group => $list)
|
||||
{
|
||||
if(empty($list->lists)) continue;
|
||||
|
||||
foreach($list->lists as $item)
|
||||
{
|
||||
$items = explode('|', $item);
|
||||
if(count($items) < 3) continue;
|
||||
|
||||
list($label, $module, $method) = $items;
|
||||
|
||||
if(common::hasPriv($module, $method)) return $group;
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get default module name and method name and params of report in a group.
|
||||
*
|
||||
* @param int $dimension
|
||||
* @param string $group
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDefaultMethod($dimension, $group)
|
||||
{
|
||||
if(empty($this->lang->reportList->$group->lists)) return array('', '', '');
|
||||
|
||||
foreach($this->lang->reportList->$group->lists as $item)
|
||||
{
|
||||
$items = explode('|', $item . '|');
|
||||
if(count($items) < 4) continue;
|
||||
|
||||
list($label, $module, $method, $params) = $items;
|
||||
|
||||
if(common::hasPriv($module, $method)) return array($module, $method, $params);
|
||||
}
|
||||
|
||||
return array('', '', '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sidebar of report.
|
||||
*
|
||||
* @param int $dimension
|
||||
* @param string $group
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @param string $params
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getSidebar($dimension, $group, $module, $method, $params)
|
||||
{
|
||||
if(empty($this->lang->reportList->$group->lists)) return '';
|
||||
|
||||
$sidebar = '';
|
||||
$module = strtolower($module);
|
||||
$method = strtolower($method);
|
||||
|
||||
ksort($this->lang->reportList->$group->lists);
|
||||
foreach($this->lang->reportList->$group->lists as $item)
|
||||
{
|
||||
$items = explode('|', $item . '|');
|
||||
if(count($items) < 4) continue;
|
||||
|
||||
list($label, $moduleName, $methodName, $params) = $items;
|
||||
|
||||
$class = '';
|
||||
if($module == strtolower($moduleName) && $method == strtolower($methodName))
|
||||
{
|
||||
$class = 'selected';
|
||||
|
||||
$this->view->title = $label;
|
||||
}
|
||||
|
||||
$params = helper::safe64Encode($params);
|
||||
if(common::hasPriv($moduleName, $methodName)) $sidebar .= html::a(helper::createLink('report', 'preview', "dimension=$dimension&group=$group&module=$moduleName&method=$methodName¶ms=$params"), '<i class="icon icon-file-text"></i> ' . $label, '', "class='$class' title='$label'");
|
||||
}
|
||||
|
||||
return $sidebar;
|
||||
}
|
||||
}
|
||||
@@ -418,6 +418,25 @@ $config->delete['18_0'][] = 'extension/max/repo/ext/control/ajaxgetbranchesandta
|
||||
$config->delete['18_0'][] = 'extension/max/repo/ext/control/ajaxgetbranchesandtags.php';
|
||||
$config->delete['18_0'][] = 'extension/max/repo/ext/control/editbug.php';
|
||||
$config->delete['18_0'][] = 'extension/max/repo/ext/view/ajaxgetcommitinfo.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/css/bugcreate.css';
|
||||
$config->delete['18_4'][] = 'module/report/css/common.css';
|
||||
$config->delete['18_4'][] = 'module/report/css/preview.css';
|
||||
$config->delete['18_4'][] = 'module/report/css/productsummary.css';
|
||||
$config->delete['18_4'][] = 'module/report/css/projectdeviation.css';
|
||||
$config->delete['18_4'][] = 'module/report/css/workload.css';
|
||||
$config->delete['18_4'][] = 'module/report/js/bugassign.js';
|
||||
$config->delete['18_4'][] = 'module/report/js/bugcreate.js';
|
||||
$config->delete['18_4'][] = 'module/report/js/productsummary.js';
|
||||
$config->delete['18_4'][] = 'module/report/js/projectdeviation.js';
|
||||
$config->delete['18_4'][] = 'module/report/js/workload.js';
|
||||
$config->delete['18_4'][] = 'module/report/view/blockreportlist.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/view/bugassign.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/view/bugcreate.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/view/preview.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/view/productsummary.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/view/projectdeviation.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/view/workload.html.php';
|
||||
$config->delete['18_4'][] = 'module/report/zen.php';
|
||||
$config->delete['18_4'][] = 'extension/max/report/ext/control/projectsummary.php';
|
||||
$config->delete['18_4'][] = 'extension/max/report/ext/control/projectworkload.php';
|
||||
$config->delete['18_4'][] = 'extension/max/report/ext/control/customeredreport.php';
|
||||
|
||||
Reference in New Issue
Block a user