Merge branch '20.x' of https://github.com/easysoft/zentaopms into 20.x
This commit is contained in:
@@ -1621,7 +1621,10 @@ class block extends control
|
||||
$products = $this->loadModel('product')->getPairs();
|
||||
|
||||
ksort($products);
|
||||
$this->view->roadmaps = $this->product->getRoadmap(key($products), 0, 6);
|
||||
$productID = key($products);
|
||||
$this->view->roadmaps = $this->product->getRoadmap($productID, 0, 6);
|
||||
$this->view->productID = $productID;
|
||||
$this->view->products = $products;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,24 +1,72 @@
|
||||
<?php if(empty($programs)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-200px'></th>
|
||||
<th><?php echo $lang->program->teamCount;?></th>
|
||||
<th><?php echo $lang->task->consumed;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$maxTeamCount = 0;
|
||||
$maxConsumed = 0;
|
||||
?>
|
||||
<div class='panel-body'>
|
||||
<div class='table-row'>
|
||||
<div class='table-col chart-titles'>
|
||||
|
||||
<?php foreach($programs as $program):?>
|
||||
<tr>
|
||||
<td title='<?php echo $program->name?>'><?php echo $program->name;?></td>
|
||||
<td><?php echo $program->teamCount;?></td>
|
||||
<td><?php echo $program->consumed;?></td>
|
||||
</tr>
|
||||
<?php
|
||||
$maxTeamCount = max($program->teamCount, $maxTeamCount);
|
||||
$maxConsumed = max($program->consumed, $maxConsumed);
|
||||
?>
|
||||
<div class='chart-title text-ellipsis'><strong><?php echo $program->name;?></strong></div>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='table-col chart-rows'>
|
||||
<div class='row'>
|
||||
<div class='col col-6 program-team'>
|
||||
<div class='chart-col-title strong'><?php echo $lang->program->teamCount;?></div>
|
||||
<?php foreach($programs as $program):?>
|
||||
<div class='chart-col-item'>
|
||||
<div class='progress'>
|
||||
<div class='progress-bar' style='width: <?php echo $maxTeamCount ? (100 * $program->teamCount / $maxTeamCount) : 0; ?>%'>
|
||||
<div class='progress-text'><?php echo $program->teamCount;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<div class='col col-6 program-consumed'>
|
||||
<div class='chart-col-title strong'><?php echo $lang->task->consumed;?></div>
|
||||
<?php foreach($programs as $program):?>
|
||||
<div class='chart-col-item'>
|
||||
<div class='progress'>
|
||||
<div class='progress-bar' style='width: <?php echo $maxConsumed ? (100 * $program->consumed / $maxConsumed) : 0; ?>%'>
|
||||
<div class='progress-text'><?php echo $program->consumed;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.block-programteam .panel-body {margin-top: -10px;}
|
||||
.chart-titles {width: 110px; padding-right: 10px; padding-top: 30px; position: relative; z-index: 1;}
|
||||
.chart-rows {position: relative; z-index: 0;}
|
||||
.chart-title {width: 100px; line-height: 20px; padding: 5px 0; height: 30px;}
|
||||
.chart-title > strong {background: #fff;}
|
||||
.chart-col-title {line-height: 20px; margin-bottom: 10px; padding: 0 10px;}
|
||||
.program-team, .program-consumed {padding: 0;}
|
||||
.program-team {border-right: 1px solid #e5e8ec;}
|
||||
.program-team > .chart-col-title {text-align: right;}
|
||||
.chart-col-item {height: 30px; padding: 5px 0; position: relative;}
|
||||
.chart-col-text {width: 50px; position: absolute; top: 5px; line-height: 20px; left: 0;}
|
||||
.program-team .chart-col-item {padding-left: 50px; position: relative;}
|
||||
.program-team .chart-col-item:before {position: absolute; content: ' '; z-index: 0; left: -100px; top: 14px; right: 0; border-top: 1px dotted #e5e8ec;}
|
||||
.program-consumed .chart-col-item {padding-right: 50px;}
|
||||
.chart-col-item .progress {background: none; border-radius: 0; overflow: visible; margin: 6px 0 0 0; position: relative; z-index: 1;}
|
||||
.chart-col-item .progress > .progress-bar {border-radius: 0; position: relative; min-width: 1px;}
|
||||
.program-team .chart-col-item .progress > .progress-bar {float: right; background-color: #39cfff;}
|
||||
.chart-col-item .progress .progress-text {position: absolute; top: -6px; color: #333; width: 50px; line-height: 20px; white-space: nowrap; overflow: visible;}
|
||||
.program-team .progress .progress-text {text-align: right; left: -50px; padding-right: 5px;}
|
||||
.program-consumed .progress .progress-text {text-align: left; right: -50px; padding-left: 5px;}
|
||||
</style>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php if(empty($projectStats)): ?>
|
||||
<div class='empty-tip'><?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?></div>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class="panel-body has-table scrollbar-hover">
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-projects tablesorter'>
|
||||
|
||||
@@ -13,48 +13,74 @@
|
||||
<?php if(empty($totalData)): ?>
|
||||
<div class='empty-tip'><?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?></div>
|
||||
<?php else:?>
|
||||
<div class="panel-body has-table scrollbar-hover">
|
||||
<table class='table table-borderless table-hover'>
|
||||
<thead>
|
||||
<tr class=''>
|
||||
<th colspan="3" class='c-name text-left'><?php echo '总投入';?></th>
|
||||
<th class="c-name"><?php echo $lang->block->totalStory;?></th>
|
||||
<th class="c-name"><?php echo $lang->block->totalBug;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="text-center">
|
||||
<tr>
|
||||
<td class="c-name"><i class="icon icon-user"></i><?php echo '总人数';?></td>
|
||||
<td class="c-name"><i class="icon icon-time"></i><?php echo '已消耗工时';?></td>
|
||||
<td class="c-name"><i class="icon icon-yen"></i><?php echo '已花费';?></td>
|
||||
<td class="c-name"><?php echo $totalData[$programID]->allStories;?></td>
|
||||
<td class="c-name"><?php echo $totalData[$programID]->allBugs;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="c-data"><?php echo $totalData[$programID]->teamCount;?></td>
|
||||
<td class="c-data"><?php echo $totalData[$programID]->consumed;?></td>
|
||||
<td class="c-data"><?php echo '无数据'?></td>
|
||||
<td class="c-data">
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $totalData[$programID]->doneStories;?>" aria-valuemin="0" aria-valuemax="<?php echo $totalData[$programID]->allStories;?>" style="width: <?php echo (($totalData[$programID]->doneStories/$totalData[$programID]->allStories)*100).'%'; ?>">
|
||||
</div>
|
||||
<style>
|
||||
#toal-investment{padding-bottom: 5px;}
|
||||
.over-title{font-size: 14px; color: #838a9d;}
|
||||
.extra-title{font-size: 12px; color: #a1a7b7;}
|
||||
.progress{margin-bottom: 8px;}
|
||||
.total-div{padding: 0px 25px;}
|
||||
.extra-div{position: relative; padding: 0px 5px 5px; display: table-cell;text-align: center;}
|
||||
.extra-div > small {display: block; color: #A6AAB8;}
|
||||
.extra-div > span {display: block; color: #3c4353; font-weight: bold;}
|
||||
</style>
|
||||
<div class="panel-body conatiner-fluid">
|
||||
<div class="table-row">
|
||||
<div class="col-6 tile">
|
||||
<div class="text-left" id="toal-investment"><strong>总投入</strong></div>
|
||||
<div class="table-row">
|
||||
<div class="col-4 tile">
|
||||
<div class="over-title"><i class="icon-program-group icon-group"></i> 我的任务</div>
|
||||
<div class="tile-amount"><a href="/my-task-assignedTo.html">96</a>
|
||||
</div>
|
||||
</td>
|
||||
<td class="c-data">
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $totalData[$programID]->doneBugs;?>" aria-valuemin="0" aria-valuemax="<?php echo $totalData[$programID]->allBugs;?>" style="width: <?php echo (($totalData[$programID]->doneBugs/$totalData[$progaramID]->allBugs)*100).'%'; ?>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 tile">
|
||||
<div class="over-title"><i class="icon icon-time"></i> 已消耗工时</div>
|
||||
<div class="tile-amount"><a href="/my-task-assignedTo.html">96</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td class="c-data"><?php echo '总预计'.' '.$totalData[$programID]->estimate;?></td>
|
||||
<td class="c-data"><?php echo '无数据';?></td>
|
||||
<td class="c-data"><?php echo "已完成".' '."剩余".'<br/>'.$totalData[$programID]->doneStories.' '.$totalData[$programID]->leftStories;?></td>
|
||||
<td class="c-data"><?php echo "已完成".' '."剩余".'<br/>'.$totalData[$programID]->doneBugs.' '.$totalData[$programID]->leftBugs;?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="tile-info">
|
||||
<span class="extra-title">总预计 10</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 tile">
|
||||
<div class="over-title"><i class="icon icon-circle"></i> 已花费</div>
|
||||
<div class="tile-amount"><a href="/my-task-assignedTo.html">¥200,00</a>
|
||||
</div>
|
||||
<div class="tile-info">
|
||||
<span class="extra-title">预算 ¥1000,00</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3 total-div">
|
||||
<div><strong>总需求</strong></div>
|
||||
<div class="tile-amount"><a href="/my-task-assignedTo.html">80</a></div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"></div>
|
||||
</div>
|
||||
<div class="extra-div">
|
||||
<small>已完成</small>
|
||||
<span>0</span>
|
||||
</div>
|
||||
<div class="extra-div">
|
||||
<small>剩余</small>
|
||||
<span>0</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3 total-div">
|
||||
<div><strong>总Bug</strong></div>
|
||||
<div class="tile-amount"><a href="/my-task-assignedTo.html">80</a></div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"></div>
|
||||
</div>
|
||||
<div class="extra-div">
|
||||
<small>已完成</small>
|
||||
<span>0</span>
|
||||
</div>
|
||||
<div class="extra-div">
|
||||
<small>剩余</small>
|
||||
<span>0</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -13,8 +13,16 @@
|
||||
<style>
|
||||
.release-line>li:nth-child(even)>a{height:92px;}
|
||||
.release-line>li:nth-child(odd){padding-top: 87px;}
|
||||
#dashboard .panel-move-handler{right:78px}
|
||||
#productList{width:28%; position: absolute; top: 6px; left: 96px;}
|
||||
#createPlan{position: absolute; top: 3px; right:0px;}
|
||||
#createPlan a{padding: 0 5px;line-height: 24px;margin: 3px;color: #3C4353;}
|
||||
</style>
|
||||
<div class="panel-body">
|
||||
<div class="panel-move-handler">
|
||||
<div id="productList"><?php echo html::select('productID', $products, '', 'class="form-control chosen"');?></div>
|
||||
<div id="createPlan"><?php echo html::a($this->createLink('productplan', 'create', 'productID=' . $productID), '<i class="icon icon-sm icon-plus"></i>'. $lang->productplan->create, '', 'class="btn btn-mini" id="createPlan"');?></div>
|
||||
</div>
|
||||
<div class="panel-body conatiner-fluid">
|
||||
<div class="release-path">
|
||||
<ul class="release-line">
|
||||
<?php foreach($roadmaps as $year => $mapBranches):?>
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
$lang->budget->create = 'Create Budget';
|
||||
$lang->budget->edit = 'Edit Budget';
|
||||
$lang->budget->total = 'Total Budget';
|
||||
$lang->budget->summary = 'Summary';
|
||||
$lang->budget->browse = 'Browse Dudget';
|
||||
$lang->budget->list = 'Budget List';
|
||||
$lang->budget->view = 'Budget Detail';
|
||||
$lang->budget->delete = 'Delete';
|
||||
$lang->budget->batchCreate = 'Batch Create';
|
||||
$lang->budget->common = 'Cost Estimate';
|
||||
$lang->budget->id = 'ID';
|
||||
$lang->budget->stage = 'Stage';
|
||||
$lang->budget->subject = 'Subject';
|
||||
$lang->budget->name = 'Name of fee';
|
||||
$lang->budget->amount = 'Estimated amount';
|
||||
$lang->budget->desc = 'Explain';
|
||||
$lang->budget->yuan = 'yuan';
|
||||
$lang->budget->dollar = 'Dollars';
|
||||
$lang->budget->createdBy = 'CreatedBy';
|
||||
$lang->budget->createdDate = 'CreatedDate';
|
||||
$lang->budget->lastEditedBy = 'LastEditBy';
|
||||
$lang->budget->lastEditedDate = 'LastEditedDate';
|
||||
$lang->budget->basicInfo = 'BasicInfo';
|
||||
$lang->budget->noData = 'No Data';
|
||||
|
||||
$lang->budget->summaryReport = 'SummaryReport';
|
||||
$lang->budget->confirmDelete = 'Are you sure you want to delete it?';
|
||||
@@ -199,3 +199,5 @@ $lang->custom->conceptOptions->story['1'] = 'Story';
|
||||
$lang->custom->conceptOptions->hourPoint = array();
|
||||
$lang->custom->conceptOptions->hourPoint['0'] = 'Hour';
|
||||
$lang->custom->conceptOptions->hourPoint['1'] = 'Story Point';
|
||||
$lang->custom->conceptOptions->hourPoint['2'] = 'Function Ponit';
|
||||
$lang->custom->conceptOptions->hourPoint['3'] = 'Code Line';
|
||||
|
||||
@@ -68,7 +68,7 @@ class design extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function create($productID = 0, $prevModule = '', $prevID = 0)
|
||||
public function create($productID = 0)
|
||||
{
|
||||
$productID = $this->loadModel('product')->saveState($productID, $this->product->getPairs('nocode'));
|
||||
$this->design->setProductMenu($productID);
|
||||
@@ -231,9 +231,9 @@ class design extends control
|
||||
|
||||
$repos = $this->loadModel('repo')->getRepoPairs();
|
||||
$repoID = $repoID ? $repoID : key($repos);
|
||||
$repo = $this->loadModel('repo')->getRepoByID($repoID);
|
||||
$repo = $repoID ? $this->loadModel('repo')->getRepoByID($repoID) : '';
|
||||
|
||||
$revisions = $this->repo->getCommits($repo, '', 'HEAD', '', $pager, $begin, $end);
|
||||
$revisions = $repo ? $this->repo->getCommits($repo, '', 'HEAD', '', $pager, $begin, $end) : '';
|
||||
|
||||
if($_POST)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
<?php
|
||||
/**
|
||||
* The design module English file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package design
|
||||
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->design->common = 'Design';
|
||||
$lang->design->browse = 'List';
|
||||
$lang->design->commit = 'Link Commit';
|
||||
@@ -26,6 +36,7 @@ $lang->design->desc = 'Description';
|
||||
$lang->design->product = 'Linked Product';
|
||||
$lang->design->basicInfo = 'Basic Information';
|
||||
$lang->design->commitDate = 'Committed Date';
|
||||
$lang->design->commitBy = 'Commit By';
|
||||
$lang->design->affectedStory = "{$lang->storyCommon}";
|
||||
$lang->design->affectedTasks = 'Task';
|
||||
$lang->design->submit = 'Submit Review';
|
||||
@@ -46,6 +57,7 @@ $lang->design->typeList['ADS'] = 'API';
|
||||
$lang->design->range = 'Impact';
|
||||
$lang->design->errorSelection = 'No record selected!';
|
||||
$lang->design->noDesign = 'No record.';
|
||||
$lang->design->noCommit = 'No record commited.';
|
||||
|
||||
$lang->design->rangeList = array();
|
||||
$lang->design->rangeList['all'] = 'All';
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
<?php
|
||||
/**
|
||||
* The design module zh-cn file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package design
|
||||
* @version $Id: zh-cn.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->design->common = '设计';
|
||||
$lang->design->browse = '浏览列表';
|
||||
$lang->design->commit = '关联提交';
|
||||
@@ -46,6 +56,7 @@ $lang->design->typeList['ADS'] = '接口设计';
|
||||
$lang->design->range = '影响范围';
|
||||
$lang->design->errorSelection = '还没有选中记录!';
|
||||
$lang->design->noDesign = '暂时没有记录';
|
||||
$lang->design->noCommit = '暂时没有提交记录';
|
||||
|
||||
$lang->design->rangeList = array();
|
||||
$lang->design->rangeList['all'] = '全部记录';
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
</div>
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php common::printLink('design', 'batchCreate', "productID=$productID", "<i class='icon icon-plus'></i>" . $lang->design->batchCreate, '', "class='btn btn-primary'");?>
|
||||
<?php if(common::hasPriv('design', 'create')) echo html::a($this->createLink('design', 'create', "productID=$productID&designID=0"), "<i class='icon icon-plus'></i> {$lang->design->create}", '', "class='btn btn-primary'");?>
|
||||
<?php common::printLink('design', 'create', "productID=$productID", "<i class='icon icon-plus'></i>" . $lang->design->create, '', "class='btn btn-primary'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell<?php if($type == 'bySearch') echo ' show';?>" id="queryBox" data-module='design'></div>
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
<small><?php echo $lang->arrow . $lang->design->commit;?></small>
|
||||
</h2>
|
||||
</div>
|
||||
<?php if(empty($repoID)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->design->noCommit;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='searchBox'>
|
||||
<table class="table">
|
||||
<tr>
|
||||
@@ -76,6 +81,7 @@
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</form>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('designID', $designID);?>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->design->type;?></th>
|
||||
<td><?php echo html::select('type', $lang->design->typeList, '', "class='form-control chosen'");?></td>
|
||||
<td class="required"><?php echo html::select('type', $lang->design->typeList, '', "class='form-control chosen'");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->design->name;?></th>
|
||||
<td><?php echo html::input('name', '', "class='form-control'");?></td>
|
||||
<td class="required"><?php echo html::input('name', '', "class='form-control'");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -6,14 +6,21 @@ $lang->holiday->create = 'Create';
|
||||
$lang->holiday->edit = 'Edit';
|
||||
$lang->holiday->delete = 'Delete';
|
||||
|
||||
$lang->holiday->createAction = 'Create Holiday';
|
||||
$lang->holiday->editAction = 'Edit Holiday';
|
||||
$lang->holiday->deleteAction = 'Delete Holiday';
|
||||
|
||||
$lang->holiday->id = 'ID';
|
||||
$lang->holiday->name = 'Name';
|
||||
$lang->holiday->desc = 'Description';
|
||||
$lang->holiday->type = 'Type';
|
||||
$lang->holiday->begin = 'Begin';
|
||||
$lang->holiday->end = 'End';
|
||||
$lang->holiday->all = 'All';
|
||||
|
||||
$lang->holiday->holiday = 'Holiday';
|
||||
|
||||
$lang->holiday->typeList['holiday'] = 'Holiday';
|
||||
$lang->holiday->typeList['working'] = 'Working Day';
|
||||
|
||||
$lang->holiday->emptyTip = 'No Holiday';
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
$lang->milestone->index = 'Milestone Home';
|
||||
$lang->milestone->title = 'Milestone Report';
|
||||
$lang->milestone->common = 'Project Milestone Report';
|
||||
$lang->milestone->name = 'Milestone Name';
|
||||
$lang->milestone->stage = 'Milestone Stage';
|
||||
$lang->milestone->save = 'Save';
|
||||
|
||||
$lang->milestone->startedWeeks = 'Started Weeks';
|
||||
$lang->milestone->finishedWeeks = 'Finished Weeks';
|
||||
$lang->milestone->offset = 'Milestone Deviation';
|
||||
|
||||
$lang->milestone->processCommon = 'Project Current Status';
|
||||
$lang->milestone->process = 'Project Schedule';
|
||||
$lang->milestone->projectCost = 'Project Cost';
|
||||
$lang->milestone->toNow = 'So far';
|
||||
$lang->milestone->targetRange = 'Target Range';
|
||||
$lang->milestone->ge = 'ge';
|
||||
$lang->milestone->le = 'le';
|
||||
$lang->milestone->analysis = 'Analysis';
|
||||
$lang->milestone->PV = 'The work to be done(PV)';
|
||||
$lang->milestone->EV = 'Actual work done(EV)';
|
||||
$lang->milestone->AC = 'Actual cost(AC)';
|
||||
$lang->milestone->SPI = 'Project schedule performance(SPI)';
|
||||
$lang->milestone->CPI = 'Project cost performance(CPI)';
|
||||
$lang->milestone->SV = 'Rate of progress deviation(SV%)';
|
||||
$lang->milestone->CV = 'Cost deviation rate(CV%)';
|
||||
|
||||
$lang->milestone->workHours = 'Workload (man-hour)';
|
||||
$lang->milestone->allStage = 'Project Stage';
|
||||
$lang->milestone->devHours = 'Development Workload';
|
||||
$lang->milestone->toHours = 'Rework Workload';
|
||||
$lang->milestone->qaHours = 'Test Workload';
|
||||
$lang->milestone->rowSummary = 'Workload Subtotal';
|
||||
$lang->milestone->rowPercent = 'Percentage Distribution(%)';
|
||||
$lang->milestone->colPercent = 'Percentage of workload(%)';
|
||||
$lang->milestone->colSummary = 'Total';
|
||||
$lang->milestone->qatoDev = 'Test Development ratio';
|
||||
|
||||
$lang->milestone->projectRisk = '5.Project Risks (top five highest priority risks)';
|
||||
$lang->milestone->riskCountermove = 'Risk Countermove';
|
||||
$lang->milestone->riskDescriptio = 'Risk Description';
|
||||
$lang->milestone->riskPossibility = 'Risk Possibility';
|
||||
$lang->milestone->riskSeriousness = 'Risk Seriousness';
|
||||
$lang->milestone->riskFactor = 'Risk Factor';
|
||||
$lang->milestone->riskMeasures = 'Risk Measures';
|
||||
$lang->milestone->riskAccumulate = 'Risk Accumulate';
|
||||
|
||||
$lang->milestone->otherIssue = 'Other Issue';
|
||||
$lang->milestone->issueSolutions = 'Issue Solutions';
|
||||
$lang->milestone->issueDescription = 'Issue Description';
|
||||
$lang->milestone->needHelp = 'Help';
|
||||
$lang->milestone->issuePropose = 'Issue Propose';
|
||||
|
||||
$lang->milestone->demandStatus = '4.Customer Demand Analysis';
|
||||
$lang->milestone->storyUnit = 'Unit:Item';
|
||||
$lang->milestone->engineeringStage = 'Engineering Stage';
|
||||
$lang->milestone->rateChange = 'Rate of change in demand';
|
||||
$lang->milestone->originalStory = 'Quantity of original demand';
|
||||
$lang->milestone->modifyNumber = 'Total post-change requirements';
|
||||
$lang->milestone->changeStory = 'Number of changed requirements';
|
||||
|
||||
$lang->milestone->paogressForecast = 'Project Forecast';
|
||||
$lang->milestone->duration = 'Construction period(day)';
|
||||
$lang->milestone->cost = 'Cost(hours)';
|
||||
$lang->milestone->forecastResults = 'Forecast Results';
|
||||
$lang->milestone->plannedValue = 'Planned Value';
|
||||
$lang->milestone->predictedValue = 'Predicted Value';
|
||||
$lang->milestone->predictedValueDesc = 'Rentenformel (Germany):If the project progress performance(SPI)=0,So the predicted value=0,Otherwise,Predicted value=Planned value divided by Project schedule performance(SPI)';
|
||||
$lang->milestone->periodDeviation = 'Period Deviation';
|
||||
$lang->milestone->costDeviation = 'Cost Deviation';
|
||||
$lang->milestone->nextStage = 'Next Stage';
|
||||
$lang->milestone->overallProject = 'Overall Project';
|
||||
$lang->milestone->corrective = 'Corrective Measure';
|
||||
$lang->milestone->timeOverrun = 'The total construction time will exceed:%s day.';
|
||||
$lang->milestone->costOverrun = 'The total cost will exceed:%s unit';
|
||||
$lang->milestone->saveOtherProblem = 'Save Other Problem';
|
||||
|
||||
$lang->milestone->chart = new stdclass();
|
||||
$lang->milestone->chart->title = 'Trend Chart of project progress to date';
|
||||
$lang->milestone->chart->time = 'No';
|
||||
$lang->milestone->chart->week = 'week';
|
||||
$lang->milestone->chart->month = 'month';
|
||||
$lang->milestone->chart->workhour = 'Development Workload Analysis Chart';
|
||||
|
||||
$lang->milestone->otherproblem = '6.Other Problem';
|
||||
$lang->milestone->problemandsuggest = 'Problem and Suggest';
|
||||
$lang->milestone->suggest = 'Suggest';
|
||||
$lang->milestone->needhelp = 'Does it require high-level support?';
|
||||
$lang->milestone->prodescr = 'Problem Description';
|
||||
|
||||
$lang->milestone->quality = new stdclass();
|
||||
$lang->milestone->quality->total = 'Total';
|
||||
$lang->milestone->quality->identify = 'Defect identification phase';
|
||||
$lang->milestone->quality->injection = 'Defect injection phase';
|
||||
$lang->milestone->quality->scale = 'Scale';
|
||||
$lang->milestone->quality->identifyRate = 'Defect recognition rate';
|
||||
$lang->milestone->quality->injectionRate = 'Defect injection rate';
|
||||
|
||||
$lang->milestone->options = 'Options';
|
||||
@@ -24,6 +24,15 @@
|
||||
#cards .program-detail .progress {height: 4px;}
|
||||
#cards .program-detail .progress-text-left .progress-text {width: 50px; left: -50px;}
|
||||
#cards .pager {margin: 0; float: right;}
|
||||
#cards .pager .btn{border: none}
|
||||
#cards .pager .btn {border: none}
|
||||
#cards .program-stages-container {margin: 0 -16px -16px -16px; padding: 0 4px; height: 46px; overflow-x: auto; position: relative;}
|
||||
#cards .program-stages:after {content: ' '; width: 30px; display: block; right: -16px; top: 16px; bottom: -6px; z-index: 1; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%); position: absolute;}
|
||||
#cards .program-stages-row {position: relative; height: 30px; z-index: 0;}
|
||||
#cards .program-stage-item {white-space: nowrap; position: absolute; top: 0; min-width: 48px; padding-top: 13px; color: #838A9D;}
|
||||
#cards .program-stage-item > div {white-space: nowrap; overflow: visible; text-align: center; text-overflow: ellipsis;}
|
||||
#cards .program-stage-item:before {content: ' '; display: block; width: 8px; height: 8px; border-radius: 50%; background: #D1D1D1; position: absolute; left: 50%; margin-left: -4px; top: 0; z-index: 1;}
|
||||
#cards .program-stage-item + .program-stage-item:after {content: ' '; display: block; left: -50%; right: 50%; height: 2px; background-color: #D1D1D1; top: 3px; position: absolute; z-index: 0;}
|
||||
#cards .program-stage-item.is-going {color: #333;}
|
||||
#cards .program-stage-item.is-going::before {background-color: #0C64EB;}
|
||||
|
||||
.w-240px{width:240px;}
|
||||
|
||||
@@ -7,7 +7,7 @@ $(function()
|
||||
window.location.reload();
|
||||
});
|
||||
|
||||
// Auto resize cards size
|
||||
/* Auto resize cards size */
|
||||
var minCardWidth = 280;
|
||||
var $cards = $('#cards');
|
||||
var resizeCards = function()
|
||||
@@ -23,7 +23,22 @@ $(function()
|
||||
resizeCards();
|
||||
$(window).on('resize', resizeCards);
|
||||
|
||||
// Make cards clickable
|
||||
/* Auto resize stages */
|
||||
$cards.find('.program-stages-container').each(function()
|
||||
{
|
||||
var $container = $(this);
|
||||
var $row = $container.children();
|
||||
var totalWidth = 0;
|
||||
$row.children().each(function()
|
||||
{
|
||||
var $item = $(this);
|
||||
$item.css('left', totalWidth);
|
||||
totalWidth += $item.width();
|
||||
});
|
||||
$row.css('minWidth', totalWidth);
|
||||
});
|
||||
|
||||
/* Make cards clickable */
|
||||
$cards.on('click', '.panel', function(e)
|
||||
{
|
||||
if(!$(e.target).closest('.panel-actions').length)
|
||||
|
||||
@@ -35,7 +35,26 @@
|
||||
<?php if($program->template === 'cmmi'): ?>
|
||||
<div class='program-detail program-stages'>
|
||||
<p class='text-muted'><?php echo $lang->program->ongoingStage; ?></p>
|
||||
<?php
|
||||
$programProjects = array();
|
||||
foreach($program->projects as $project)
|
||||
{
|
||||
if(!$project->parent) $programProjects[] = $project;
|
||||
}
|
||||
?>
|
||||
<?php if(empty($programProjects)): ?>
|
||||
<div class='label label-outline'><?php echo zget($lang->project->statusList, $program->status);?></div>
|
||||
<?php else: ?>
|
||||
<div class='program-stages-container scrollbar-hover'>
|
||||
<div class='program-stages-row'>
|
||||
<?php foreach ($programProjects as $project): ?>
|
||||
<div class='program-stage-item is-<?php echo $project->status;?><?php if($project->status !== 'wait') echo ' is-going'; ?>'>
|
||||
<div><?php echo $project->name; ?></div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<?php $project = $program->projects ? current($program->projects) : '';?>
|
||||
@@ -58,6 +77,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php endforeach;?>
|
||||
<div class='col-xs-12' id='cardsFooter'>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
|
||||
+10
-6
@@ -343,15 +343,17 @@ class repoModel extends model
|
||||
/**
|
||||
* Get commits.
|
||||
*
|
||||
* @param object $repo
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
* @param string $type
|
||||
* @param object $pager
|
||||
* @param object $repo
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
* @param string $type
|
||||
* @param object $pager
|
||||
* @param string $begin
|
||||
* @param string $end
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getCommits($repo, $entry, $revision = 'HEAD', $type = 'dir', $pager = null)
|
||||
public function getCommits($repo, $entry, $revision = 'HEAD', $type = 'dir', $pager = null, $begin = 0, $end = 0)
|
||||
{
|
||||
$entry = ltrim($entry, '/');
|
||||
$entry = $repo->prefix . (empty($entry) ? '' : '/' . $entry);
|
||||
@@ -395,6 +397,8 @@ class repoModel extends model
|
||||
->andWhere('left(t1.comment, 12)')->ne('Merge branch')
|
||||
->beginIF($this->cookie->repoBranch)->andWhere('t2.branch')->eq($this->cookie->repoBranch)->fi()
|
||||
->beginIF($entry != '/' and !empty($entry))->andWhere('t1.id')->in($historyIdList)->fi()
|
||||
->beginIF($begin)->andWhere('t1.time')->ge($begin)->fi()
|
||||
->beginIF($end)->andWhere('t1.time')->le($end)->fi()
|
||||
->orderBy('time desc');
|
||||
if($entry == '/' or empty($entry))$comments->page($pager, 't1.id');
|
||||
$comments = $comments->fetchAll('revision');
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
$lang->subject->common = 'Subject';
|
||||
$lang->subject->manage = 'Manage Subject';
|
||||
$lang->subject->manageChild = 'Manage Child Subject';
|
||||
$lang->subject->name = 'Subject Name';
|
||||
$lang->subject->browse = 'Browse Subject';
|
||||
@@ -11,6 +11,8 @@
|
||||
*/
|
||||
$lang->user->common = 'User';
|
||||
$lang->user->id = 'ID';
|
||||
$lang->user->inside = 'Inside Members';
|
||||
$lang->user->outside = 'Outside Members';
|
||||
$lang->user->company = 'Company';
|
||||
$lang->user->dept = 'Department';
|
||||
$lang->user->account = 'Account';
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$lang->workestimation->common = 'Workload estimation';
|
||||
$lang->workestimation->budget = 'Estimate';
|
||||
$lang->workestimation->index = 'Overview';
|
||||
$lang->workestimation->scale = 'Scale';
|
||||
$lang->workestimation->productivity = 'Productivity';
|
||||
$lang->workestimation->duration = 'Estimated total man-hour';
|
||||
$lang->workestimation->unitLaborCost = 'Unit Labour cost';
|
||||
$lang->workestimation->totalLaborCost = 'Estimate labor costs';
|
||||
$lang->workestimation->dayHour = 'Daily working hours';
|
||||
$lang->workestimation->hour = 'Man-hour';
|
||||
$lang->workestimation->consumed = 'Man-hours consumed';
|
||||
|
||||
$lang->workestimation->programScaleTip = "Actual scale of current project:<strong>%s{$lang->hourCommon}</strong> <a href='###' id='useScale' class='btn btn-xs'>use</span>";
|
||||
|
||||
$lang->workestimation->placeholder = new stdclass();
|
||||
$lang->workestimation->placeholder->scale = '';
|
||||
$lang->workestimation->placeholder->productivity = '';
|
||||
$lang->workestimation->placeholder->duration = '';
|
||||
$lang->workestimation->placeholder->unitLaborCost = '';
|
||||
$lang->workestimation->placeholder->totalLaborCost = '';
|
||||
Reference in New Issue
Block a user