diff --git a/lib/date/date.class.php b/lib/date/date.class.php index efdc37eb02..5737e68cb2 100644 --- a/lib/date/date.class.php +++ b/lib/date/date.class.php @@ -9,14 +9,14 @@ * @version $Id: date.class.php 2605 2013-01-09 07:22:58Z wwccss $ * @link http://www.zentao.net */ -class date +class date { /** * Build hour time list. - * - * @param int $begin - * @param int $end - * @param int $delta + * + * @param int $begin + * @param int $end + * @param int $delta * @access public * @return array */ @@ -37,7 +37,7 @@ class date /** * Get today. - * + * * @access public * @return date */ @@ -47,8 +47,8 @@ class date } /** - * Get yesterday - * + * Get yesterday + * * @access public * @return date */ @@ -59,7 +59,7 @@ class date /** * Get tomorrow. - * + * * @access public * @return date */ @@ -70,7 +70,7 @@ class date /** * Get the day before yesterday. - * + * * @access public * @return date */ @@ -81,8 +81,8 @@ class date /** * Get now time period. - * - * @param int $delta + * + * @param int $delta * @access public * @return string the current time period, like 0915 */ @@ -114,8 +114,8 @@ class date /** * Format time 0915 to 09:15 - * - * @param string $time + * + * @param string $time * @access public * @return string */ @@ -127,7 +127,7 @@ class date /** * Get the begin and end date of this week. - * + * * @access public * @return array */ @@ -141,7 +141,7 @@ class date /** * Get the begin and end date of last week. - * + * * @access public * @return array */ @@ -155,7 +155,7 @@ class date /** * Get the time at the middle of this week. - * + * * If today in week is 1, move it one day in future. Else is 7, move it back one day. To keep the time geted in this week. * * @access public @@ -172,7 +172,7 @@ class date /** * Get middle of last week. - * + * * @access public * @return time */ @@ -188,7 +188,7 @@ class date /** * Get begin and end time of this month. - * + * * @access public * @return array */ @@ -201,7 +201,7 @@ class date /** * Get begin and end time of last month. - * + * * @access public * @return array */ @@ -213,11 +213,11 @@ class date } /** - * Get begin and end time of this season. - * + * Get begin and end time of this season. + * * @static * @access public - * @return array + * @return array */ public static function getThisSeason() { @@ -230,11 +230,11 @@ class date } /** - * Get begin and end time of last season. - * + * Get begin and end time of last season. + * * @static * @access public - * @return array + * @return array */ public static function getLastSeason() { @@ -242,43 +242,43 @@ class date $begin = date('Y-m-d H:i:s', mktime(0, 0, 0, $season * 3 - 2, 1, date('Y'))); $endDay = date('t', mktime(0, 0 , 0, $season * 3, 1, date("Y"))); // Get end day. $end = date('Y-m-d H:i:s', mktime(23, 59, 59, $season * 3, $endDay, date('Y'))); - + return array('begin' => $begin, 'end' => $end); } /** * Get begin and end time of this year. - * + * * @static * @access public - * @return array + * @return array */ public static function getThisYear() { $begin = date(DT_DATE1, strtotime('1/1 this year')) . ' 00:00:00'; - $end = date(DT_DATE1, strtotime('1/1 next year -1 day')) . ' 23:59:59'; + $end = date(DT_DATE1, strtotime('1/1 next year -1 day')) . ' 23:59:59'; return array('begin' => $begin, 'end' => $end); } /** * Get begin and end time of last year. - * + * * @static * @access public - * @return array + * @return array */ public static function getLastYear() { $begin = date(DT_DATE1, strtotime('1/1 last year')) . ' 00:00:00'; - $end = date(DT_DATE1, strtotime('1/1 this year -1 day')) . ' 23:59:59'; + $end = date(DT_DATE1, strtotime('1/1 this year -1 day')) . ' 23:59:59'; return array('begin' => $begin, 'end' => $end); } /** - * Get date list - * - * @param string $begin - * @param string $end + * Get date list + * + * @param string $begin + * @param string $end * @param string $format m/d/Y|Y-m-d * @param string $type noweekend|withweekend * @param int $weekend 2|1 @@ -295,7 +295,7 @@ class date for($date = $begin; $date <= $end; $date += 24 * 3600) { $weekDay = date('w', $date); - if($type == 'noweekend' and (($weekend == 2 and $weekDay == 6) or $weekDay == 0)) continue; + if(strpos($type, 'noweekend') !== false and (($weekend == 2 and $weekDay == 6) or $weekDay == 0)) continue; $dateList[] = date($format, $date); } diff --git a/module/execution/control.php b/module/execution/control.php index be01e4169e..8ed62988e5 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -1149,12 +1149,12 @@ class execution extends control * @access public * @return void */ - public function burn($executionID = 0, $type = 'noweekend', $interval = 0, $burnBy = 'left') + public function burn($executionID = 0, $type = 'noweekend,nodelay', $interval = 0, $burnBy = 'left') { $this->loadModel('report'); $execution = $this->commonAction($executionID); $executionID = $execution->id; - $burnBy = $this->cookie->burnBy ? $this->cookie->burnBy : $burnBy; + $burnBy = $this->cookie->burnBy ? $this->cookie->burnBy : $burnBy; /* Header and position. */ $title = $execution->name . $this->lang->colon . $this->lang->execution->burn; @@ -1163,7 +1163,8 @@ class execution extends control /* Get date list. */ $executionInfo = $this->execution->getByID($executionID); - list($dateList, $interval) = $this->execution->getDateList($executionInfo->begin, $executionInfo->end, $type, $interval, 'Y-m-d'); + $endDate = strpos($type, 'withdelay') !== false ? helper::today() : $executionInfo->end; + list($dateList, $interval) = $this->execution->getDateList($executionInfo->begin, $endDate, $type, $interval, 'Y-m-d'); $chartData = $this->execution->buildBurnData($executionID, $dateList, $type, $burnBy); $dayList = array_fill(1, floor((int)$execution->days / $this->config->execution->maxBurnDay) + 5, ''); diff --git a/module/execution/css/burn.css b/module/execution/css/burn.css index b954f140ad..71e7d4b506 100644 --- a/module/execution/css/burn.css +++ b/module/execution/css/burn.css @@ -6,5 +6,6 @@ #burnLegend > div {position: relative; padding-left: 30px;} #burnLegend > div > .barline {position: absolute; width: 20px; left: 0; top: 13px; height: 3px; background: #EEEEEE;} #burnLegend .line-real .bg-primary {background: #1183fb;} +#burnLegend .line-real .bg-delay {background: red;} .pull-left .input-control {margin-right: 10px;} diff --git a/module/execution/js/burn.js b/module/execution/js/burn.js index 85e78025cf..192151808a 100644 --- a/module/execution/js/burn.js +++ b/module/execution/js/burn.js @@ -5,6 +5,18 @@ $(function() { location.href = createLink('execution', 'burn', 'executionID=' + executionID + '&type=' + type + '&interval=' + $(this).val()); }); + + $('#weekend').click(function() + { + var browseType = type.match('noweekend') ? type.replace('noweekend', 'withweekend') : type.replace('withweekend', 'noweekend'); + location.href = createLink('execution', 'burn', 'executionID=' + executionID + '&type=' + browseType + '&interval=' + interval); + }); + + $('#delay').click(function() + { + var browseType = type.match('nodelay') ? type.replace('nodelay', 'withdelay') : type.replace('withdelay', 'nodelay'); + location.href = createLink('execution', 'burn', 'executionID=' + executionID + '&type=' + browseType + '&interval=' + interval); + }); }) /* Save burn as image.*/ diff --git a/module/execution/lang/en.php b/module/execution/lang/en.php index c9aa6aa2f0..5cff2f8144 100644 --- a/module/execution/lang/en.php +++ b/module/execution/lang/en.php @@ -359,7 +359,9 @@ $lang->execution->linkStory = 'Link Story'; $lang->execution->createTask = 'Create Task'; $lang->execution->goback = "Go Back"; $lang->execution->noweekend = 'Exclude Weekend'; +$lang->execution->nowdelay = 'Exclude Delay Date'; $lang->execution->withweekend = 'Include Weekend'; +$lang->execution->withdelay = 'Include Delay Date'; $lang->execution->interval = 'Intervals '; $lang->execution->fixFirstWithLeft = 'Update hours left too'; $lang->execution->unfinishedExecution = "This {$lang->executionCommon} has "; @@ -384,6 +386,7 @@ $lang->execution->charts->burn->graph->rotateNames = 1; $lang->execution->charts->burn->graph->showValues = 0; $lang->execution->charts->burn->graph->reference = 'Ideal'; $lang->execution->charts->burn->graph->actuality = 'Actual'; +$lang->execution->charts->burn->graph->delay = 'Delay'; $lang->execution->placeholder = new stdclass(); $lang->execution->placeholder->code = "Abbreviation of {$lang->executionCommon} name"; diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php index 9248f804cb..377421ee64 100644 --- a/module/execution/lang/zh-cn.php +++ b/module/execution/lang/zh-cn.php @@ -359,7 +359,9 @@ $lang->execution->linkStory = "关联{$lang->SRCommon}"; $lang->execution->createTask = '创建任务'; $lang->execution->goback = "返回任务列表"; $lang->execution->noweekend = '去除周末'; +$lang->execution->nodelay = '去除延期日期'; $lang->execution->withweekend = '显示周末'; +$lang->execution->withdelay = '显示延期日期'; $lang->execution->interval = '间隔'; $lang->execution->fixFirstWithLeft = '修改剩余工时'; $lang->execution->unfinishedExecution = "该{$lang->executionCommon}下还有"; @@ -384,6 +386,7 @@ $lang->execution->charts->burn->graph->rotateNames = 1; $lang->execution->charts->burn->graph->showValues = 0; $lang->execution->charts->burn->graph->reference = '参考'; $lang->execution->charts->burn->graph->actuality = '实际'; +$lang->execution->charts->burn->graph->delay = '延期'; $lang->execution->placeholder = new stdclass(); $lang->execution->placeholder->code = '团队内部的简称'; diff --git a/module/execution/model.php b/module/execution/model.php index b3180f1394..9bfb2c0046 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -2792,8 +2792,7 @@ class executionModel extends model { $today = helper::today(); $executions = $this->dao->select('id, code')->from(TABLE_EXECUTION) - ->where('end')->ge($today) - ->andWhere('type')->in('sprint,stage') + ->where('type')->in('sprint,stage') ->andWhere('lifetime')->ne('ops') ->andWhere('status')->notin('done,closed,suspended') ->fetchPairs(); @@ -2943,10 +2942,11 @@ class executionModel extends model * * @param int $executionID * @param string $burnBy + * @param bool $showDelay * @access public * @return array */ - public function getBurnDataFlot($executionID = 0, $burnBy = '') + public function getBurnDataFlot($executionID = 0, $burnBy = '', $showDelay = false) { /* Get execution and burn counts. */ $execution = $this->getById($executionID); @@ -2959,7 +2959,8 @@ class executionModel extends model foreach($sets as $date => $set) { if($date < $execution->begin) continue; - if($date > $execution->end) continue; + if(!$showDelay and $date > $execution->end) $set->value = 'null'; + if($showDelay and $date < $execution->end) $set->value = 'null'; $burnData[$date] = $set; $count++; @@ -3648,6 +3649,13 @@ class executionModel extends model $chartData['burnLine'] = $this->report->createSingleJSON($sets, $dateList); $chartData['baseLine'] = $baselineJSON; + $execution = $this->getById($executionID); + if($execution->status != 'closed' and helper::today() > $execution->end) + { + $delaySets = $this->getBurnDataFlot($executionID, $burnBy, true); + $chartData['delayLine'] = $this->report->createSingleJSON($delaySets, $dateList); + } + return $chartData; } diff --git a/module/execution/view/burn.html.php b/module/execution/view/burn.html.php index 2d0bd26ae7..fd640bf56b 100644 --- a/module/execution/view/burn.html.php +++ b/module/execution/view/burn.html.php @@ -18,13 +18,16 @@ execution->burnXUnit);?> execution->burnYUnit);?> + @@ -94,6 +100,19 @@ function initBurnChar() }] }; + var delaySets = + { + label: "execution->charts->burn->graph->delay;?>", + color: 'red', + pointStrokeColor: 'red', + pointHighlightStroke: 'red', + pointColor: 'red', + fillColor: 'rgba(0,106,241, .07)', + pointHighlightFill: '#fff', + data: + } + if(type.match('withdelay')) data.datasets.push(delaySets); + var burnChart = $("#burnCanvas").lineChart(data, { pointDotStrokeWidth: 2,