diff --git a/module/action/model.php b/module/action/model.php
index ddfeef63fe..ca1ef97a30 100755
--- a/module/action/model.php
+++ b/module/action/model.php
@@ -707,6 +707,10 @@ class actionModel extends model
{
$desc = $this->lang->$objectType->action->rejectreviewed;
}
+ elseif($action->objectType == 'productplan' and in_array($action->action, array('startedbychild','finishedbychild','closedbychild','activatedbychild')))
+ {
+ $desc = $this->lang->$objectType->action->changebychild;
+ }
elseif(isset($this->config->maxVersion) and strpos($this->config->action->assetType, $action->objectType) !== false and $action->action == 'approved')
{
$desc = empty($this->lang->action->approve->{$action->extra}) ? '' : $this->lang->action->approve->{$action->extra};
diff --git a/module/productplan/control.php b/module/productplan/control.php
index a58a0efd39..8b6204bf00 100644
--- a/module/productplan/control.php
+++ b/module/productplan/control.php
@@ -408,9 +408,6 @@ class productplan extends control
$changes = $this->productplan->updateStatus($planID, 'doing');
if(dao::isError()) die(js::error(dao::getError()));
- $actionID = $this->loadModel('action')->create('productplan', $planID, 'started');
- $this->action->logHistory($actionID, $changes);
-
die(js::reload('parent'));
}
}
@@ -421,9 +418,6 @@ class productplan extends control
$changes = $this->productplan->updateStatus($planID, 'doing');
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- $actionID = $this->loadModel('action')->create('productplan', $planID, 'started');
- $this->action->logHistory($actionID, $changes);
-
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess,'locate' => 'parent'));
}
$this->view->plan = $plan;
@@ -450,9 +444,6 @@ class productplan extends control
$changes = $this->productplan->updateStatus($planID, 'done');
if(dao::isError()) die(js::error(dao::getError()));
- $actionID = $this->loadModel('action')->create('productplan', $planID, 'finished');
- $this->action->logHistory($actionID, $changes);
-
die(js::reload('parent'));
}
}
@@ -476,9 +467,6 @@ class productplan extends control
$changes = $this->productplan->updateStatus($planID, 'closed');
if(dao::isError()) die(js::error(dao::getError()));
- $actionID = $this->loadModel('action')->create('productplan', $planID, 'closed');
- $this->action->logHistory($actionID, $changes);
-
die(js::reload('parent'));
}
}
@@ -502,9 +490,6 @@ class productplan extends control
$changes = $this->productplan->updateStatus($planID, 'doing');
if(dao::isError()) die(js::error(dao::getError()));
- $actionID = $this->loadModel('action')->create('productplan', $planID, 'activated');
- $this->action->logHistory($actionID, $changes);
-
die(js::reload('parent'));
}
}
diff --git a/module/productplan/lang/en.php b/module/productplan/lang/en.php
index cff90a3bb8..a8abcabed2 100644
--- a/module/productplan/lang/en.php
+++ b/module/productplan/lang/en.php
@@ -98,6 +98,11 @@ $lang->productplan->statusList['doing'] = 'Doing';
$lang->productplan->statusList['done'] = 'Done';
$lang->productplan->statusList['closed'] = 'Closed';
+$lang->productplan->parentActionList['startedbychild'] = 'starting the productplan sets the plan status as Doing.';
+$lang->productplan->parentActionList['finishedbychild'] = 'finishing all productplan sets the plan status as Done.';
+$lang->productplan->parentActionList['closedbychild'] = 'closing all productplan sets the plan status as Closed.';
+$lang->productplan->parentActionList['activatedbychild'] = 'activating the productplan sets the plan status as Doing.';
+
$lang->productplan->endList[7] = '1 Week';
$lang->productplan->endList[14] = '2 Weeks';
$lang->productplan->endList[31] = '1 Month';
@@ -122,3 +127,6 @@ $lang->productplan->featureBar['browse']['wait'] = 'Waiting';
$lang->productplan->featureBar['browse']['doing'] = 'Doing';
$lang->productplan->featureBar['browse']['done'] = 'Done';
$lang->productplan->featureBar['browse']['closed'] = 'Closed';
+
+$lang->productplan->action = new stdclass();
+$lang->productplan->action->changebychild = array('main' => '$date, $extra', 'extra' => 'parentActionList');
diff --git a/module/productplan/lang/zh-cn.php b/module/productplan/lang/zh-cn.php
index 2cc93bd7d8..ac6197f574 100644
--- a/module/productplan/lang/zh-cn.php
+++ b/module/productplan/lang/zh-cn.php
@@ -97,6 +97,11 @@ $lang->productplan->statusList['doing'] = '进行中';
$lang->productplan->statusList['done'] = '已完成';
$lang->productplan->statusList['closed'] = '已关闭';
+$lang->productplan->parentActionList['startedbychild'] = '系统判断由于子计划 开始 ,将计划状态置为 进行中 。';
+$lang->productplan->parentActionList['finishedbychild'] = '系统判断由于子计划 全部完成 ,将计划状态置为 已完成 。';
+$lang->productplan->parentActionList['closedbychild'] = '系统判断由于子计划 全部关闭 ,将计划状态置为 已关闭 。';
+$lang->productplan->parentActionList['activatedbychild'] = '系统判断由于子计划 激活 ,将计划状态置为 进行中 。';
+
$lang->productplan->endList[7] = '一星期';
$lang->productplan->endList[14] = '两星期';
$lang->productplan->endList[31] = '一个月';
@@ -121,3 +126,6 @@ $lang->productplan->featureBar['browse']['wait'] = '未开始';
$lang->productplan->featureBar['browse']['doing'] = '进行中';
$lang->productplan->featureBar['browse']['done'] = '已完成';
$lang->productplan->featureBar['browse']['closed'] = '已关闭';
+
+$lang->productplan->action = new stdclass();
+$lang->productplan->action->changebychild = array('main' => '$date, $extra', 'extra' => 'parentActionList');
diff --git a/module/productplan/model.php b/module/productplan/model.php
index 2b8b027fca..2d9fca41e1 100644
--- a/module/productplan/model.php
+++ b/module/productplan/model.php
@@ -467,7 +467,7 @@ class productplanModel extends model
if($oldPlan->parent > 0) $parentPlan = $this->getByID($oldPlan->parent);
if(!empty($parentPlan->begin))
- {
+ {
if($plan->begin < $parentPlan->begin) dao::$errors['begin'] = sprintf($this->lang->productplan->beginLetterParent, $parentPlan->begin);
}
if(!empty($parentPlan->end))
@@ -513,7 +513,11 @@ class productplanModel extends model
{
$planID = (int)$planID;
$oldPlan = $this->getByID($planID);
- if($oldPlan->parent > 0) $parentPlan = $this->getByID($oldPlan->parent);
+ if($oldPlan->parent > 0)
+ {
+ $parentPlan = $this->getByID($oldPlan->parent);
+ $parentChange = false;
+ }
if($status == 'doing' and !empty($_POST))
{
@@ -530,6 +534,7 @@ class productplanModel extends model
->where('id')->eq($planID)
->beginIF(isset($parentPlan))->orWhere('id')->eq($oldPlan->parent)->fi()
->exec();
+ if($parentPlan->status != 'doing') $parentChange = true;
}
elseif($status == 'doing' and isset($parentPlan) and $parentPlan->status != 'doing')
{
@@ -538,6 +543,7 @@ class productplanModel extends model
->where('id')->eq($planID)
->orWhere('id')->eq($oldPlan->parent)
->exec();
+ if($parentPlan->status != 'doing') $parentChange = true;
}
elseif($status == 'done' and isset($parentPlan))
{
@@ -551,6 +557,7 @@ class productplanModel extends model
break;
}
}
+ if($parentDone) $parentChange = true;
$this->dao->update(TABLE_PRODUCTPLAN)
->set('`status`')->eq($status)
->where('id')->eq($planID)
@@ -569,6 +576,7 @@ class productplanModel extends model
break;
}
}
+ if($parentClosed) $parentChange = true;
$this->dao->update(TABLE_PRODUCTPLAN)
->set('`status`')->eq($status)
->where('id')->eq($planID)
@@ -586,7 +594,39 @@ class productplanModel extends model
if(dao::isError()) return false;
if(!isset($plan)) $plan = $this->getByID($planID);
- if(!dao::isError())return common::createChanges($oldPlan, $plan);
+ if(!dao::isError())
+ {
+ $method = $this->app->rawMethod;
+ if($method == 'start')
+ {
+ $action = 'started';
+ if($parentChange) $parentAction = 'startedbychild';
+ }
+ elseif($method == 'finish')
+ {
+ $action = 'finished';
+ if($parentChange) $parentAction = 'finishedbychild';
+ }
+ elseif($method == 'close')
+ {
+ $action = 'closed';
+ if($parentChange) $parentAction = 'closedbychild';
+ }
+ elseif($method == 'activate')
+ {
+ $action = 'activated';
+ if($parentChange) $parentAction = 'activatedbychild';
+ }
+
+ if(isset($action))
+ {
+ $changes = common::createChanges($oldPlan, $plan);
+ $actionID = $this->loadModel('action')->create('productplan', $planID, $action);
+ $this->action->loghistory($actionID, $changes);
+
+ if($parentChange) $actionID = $this->action->create('productplan', $oldPlan->parent, $parentAction, '', $parentAction);
+ }
+ }
}
/**
@@ -605,7 +645,7 @@ class productplanModel extends model
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
$purifier = new HTMLPurifier($config);
-
+
$plans = array();
$extendFields = $this->getFlowExtendFields();
foreach($data->id as $planID)
@@ -617,7 +657,7 @@ class productplanModel extends model
$plan->begin = $data->begin[$planID] == '' ? '2030-01-01' : $data->begin[$planID];
$plan->end = $data->end[$planID] == '' ? '2030-01-01' : $data->end[$planID];
$plan->status = $data->status[$planID];
-
+
if($oldPlans[$planID]->parent > 0) $parentPlan = $this->getByID($oldPlans[$planID]->parent);
if(!empty($parentPlan->begin))
{