* code for task#1030.

This commit is contained in:
zhujinyong
2013-01-09 03:21:29 +00:00
parent 4ca79b465e
commit dd765793c2
6 changed files with 137 additions and 2 deletions

View File

@@ -423,6 +423,32 @@ class task extends control
$this->display();
}
/**
* Record consumed and estimate.
*
* @param int $taskID
* @access public
* @return void
*/
public function record($taskID, $confirm = 'no')
{
$this->commonAction($taskID);
if(!empty($_POST))
{
$changes = $this->task->record($taskID);
$actionID = $this->action->create('task', $taskID, 'Record', '');
$this->action->logHistory($actionID, $changes);
die(js::locate($this->createLink('task', 'view', "taskID=$taskID"), 'parent'));
}
$header['title'] = $this->lang->task->record;
$this->view->header = $header;
$this->view->beforeConsumed = $this->task->getBeforeConsumed($taskID);
$this->display();
}
/**
* Finish a task.
*

View File

@@ -18,6 +18,7 @@ $lang->task->edit = "Update";
$lang->task->delete = "Delete";
$lang->task->view = "Info";
$lang->task->logEfforts = "Efforts";
$lang->task->record = "Estimate";
$lang->task->start = "Start";
$lang->task->finish = "Finish";
$lang->task->close = "Close";
@@ -46,6 +47,8 @@ $lang->task->leftAB = 'Left';
$lang->task->consumed = 'Consumed';
$lang->task->consumedAB = 'Use';
$lang->task->hour = 'Hour';
$lang->task->beforeConsumed = 'Before consumed';
$lang->task->consumedThisTime = 'This time consumed';
$lang->task->estStarted = 'Estimate start';
$lang->task->realStarted = 'Real start';
$lang->task->deadline = 'Deadline';
@@ -135,7 +138,8 @@ $lang->task->remindBug = "This task from Bug, update the Bug:%s or no
$lang->task->confirmChangeProject = 'Change project will change module, story and assignedTo also, are you sure?';
$lang->task->error = new stdclass();
$lang->task->error->consumed = '"Consumed" must be number';
$lang->task->error->consumed = '"Consumed" must be number';
$lang->task->error->newConsumed = '"Consumed" must be more than consumed before';
/* Report. */
$lang->task->report = new stdclass();

View File

@@ -18,6 +18,7 @@ $lang->task->edit = "编辑";
$lang->task->delete = "删除";
$lang->task->view = "查看任务";
$lang->task->logEfforts = "记录工时";
$lang->task->record = "工时";
$lang->task->start = "开始";
$lang->task->finish = "完成";
$lang->task->close = "关闭";
@@ -46,6 +47,8 @@ $lang->task->leftAB = '剩';
$lang->task->consumed = '已经消耗';
$lang->task->consumedAB = '耗';
$lang->task->hour = '小时';
$lang->task->beforeConsumed = '之前消耗';
$lang->task->consumedThisTime = '本次消耗';
$lang->task->estStarted = '预计开始';
$lang->task->realStarted = '实际开始';
$lang->task->deadline = '截止日期';
@@ -135,7 +138,8 @@ $lang->task->remindBug = "该任务为Bug转化得到是否更新B
$lang->task->confirmChangeProject = '修改项目会导致相应的所属模块、相关需求和指派人发生变化,确定吗?';
$lang->task->error = new stdclass();
$lang->task->error->consumed = '"已经消耗"必须为数字';
$lang->task->error->consumed = '"已经消耗"必须为数字';
$lang->task->error->newConsumed = '"已经消耗"必须大于之前消耗';
/* 统计报表。*/
$lang->task->report = new stdclass();

View File

@@ -184,6 +184,23 @@ class taskModel extends model
->get();
$task->statusCustom = strpos(self::CUSTOM_STATUS_ORDER, $task->status) + 1;
if($task->consumed < $oldTask->consumed)
{
die(js::error($this->lang->task->error->newConsumed));
}
else if($task->consumed != $oldTask->consumed or $task->left != $oldTask->left)
{
$estimate = new stdClass();
$estimate->consumed = $task->consumed - $oldTask->consumed;
$estimate->left = $task->left;
$estimate->task = $taskID;
$estimate->account = $this->app->user->account;
$estimate->date = helper::now();
$this->dao->insert(TABLE_TASKESTIMATE)->data($estimate)
->autoCheck()
->exec();
}
$this->dao->update(TABLE_TASK)->data($task)
->autoCheck()
->batchCheckIF($task->status != 'cancel', $this->config->task->edit->requiredFields, 'notempty')
@@ -386,6 +403,35 @@ class taskModel extends model
if(!dao::isError()) return common::createChanges($oldTask, $task);
}
/**
* Record estimate and left of task.
*
* @param int $taskID
* @access public
* @return void
*/
public function record($taskID)
{
$oldTask = $this->getById($taskID);
$estimate = fixer::input('post')
->setDefault('account', $this->app->user->account)
->setDefault('task', $taskID)
->setDefault('date', helper::now())
->get();
$this->dao->insert(TABLE_TASKESTIMATE)->data($estimate)
->autoCheck()
->exec();
$consumed = $this->getBeforeConsumed($taskID);
$this->dao->update(TABLE_TASK)
->set('consumed')->eq($consumed)
->set('`left`')->eq($estimate->left)
->where('id')->eq($taskID)
->exec();
$task = $this->getById($taskID);
if(!dao::isError()) return common::createChanges($oldTask, $task);
}
/**
* Finish a task.
*
@@ -729,6 +775,24 @@ class taskModel extends model
return $taskCounts;
}
/**
* Get before consumed.
*
* @param int $taskID
* @access public
* @return int
*/
public function getBeforeConsumed($taskID)
{
$tasks = $this->dao->select('consumed')->from(TABLE_TASKESTIMATE)->where('task')->eq($taskID)->fetchAll();
$beforeConsumed = 0;
foreach($tasks as $task)
{
$beforeConsumed += $task->consumed;
}
return $beforeConsumed;
}
/**
* Batch process tasks.
*
@@ -1072,6 +1136,7 @@ class taskModel extends model
if($action == 'assignto') return $task->status != 'closed' and $task->status != 'cancel';
if($action == 'start') return $task->status != 'doing' and $task->status != 'closed' and $task->status != 'cancel';
if($action == 'record') return $task->status != 'done' and $task->status != 'closed' and $task->status != 'cancel';
if($action == 'finish') return $task->status != 'done' and $task->status != 'closed' and $task->status != 'cancel';
if($action == 'close') return $task->status == 'done' or $task->status == 'cancel';
if($action == 'activate') return $task->status == 'done' or $task->status == 'closed' or $task->status == 'cancel' ;

View File

@@ -0,0 +1,35 @@
<?php
/**
* The record file of task module of ZenTaoPMS.
*
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
* @author Chunsheng Wang<wwccss@gmail.com>
* @package task
* @version $Id: record.html.php 935 2013-01-08 07:49:24Z wwccss@gmail.com $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<form method='post' target='hiddenwin'>
<table class='table-1'>
<caption><?php echo $task->name;?></caption>
<tr>
<th class='rowhead'><?php echo $lang->task->beforeConsumed;?></th>
<td><?php echo $beforeConsumed . ' ' . $lang->task->hour;?></td>
</tr>
<tr>
<th class='rowhead'><?php echo $lang->task->consumedThisTime;?></th>
<td><?php echo html::input('consumed', '', "class='text-2'") . $lang->task->hour;?></td>
</tr>
<tr>
<th class='rowhead'><?php echo $lang->task->left;?></th>
<td><?php echo html::input('left', '', "class='text-2'") . $lang->task->hour;?></td>
</tr>
<tr>
<td colspan='2' class='a-center'><?php echo html::submitButton() . html::linkButton($lang->goback, $this->session->taskList); ?></td>
</tr>
</table>
<?php include '../../common/view/action.html.php';?>
</form>
<?php include '../../common/view/footer.html.php';?>

View File

@@ -27,6 +27,7 @@
//if(!($task->status != 'closed' and $task->status != 'cancel' and common::printLink('task', 'logEfforts', "taskID=$task->id", $lang->task->buttonLogEfforts))) echo $lang->task->buttonLogEfforts . ' ';
common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id");
if($this->task->isClickable($task, 'start')) common::printIcon('task', 'start', "taskID=$task->id");
if($this->task->isClickable($task, 'record')) common::printIcon('task', 'record', "taskID=$task->id");
if($this->task->isClickable($task, 'finish')) common::printIcon('task', 'finish', "taskID=$task->id");
if($this->task->isClickable($task, 'close')) common::printIcon('task', 'close', "taskID=$task->id");
if($this->task->isClickable($task, 'activate')) common::printIcon('task', 'activate', "taskID=$task->id");