* [feedback#9756] Update stage by product when edit waterfall project.

This commit is contained in:
xieqiyu
2025-07-15 02:33:08 +00:00
parent d5754d40c0
commit fc5403b90d
+30 -7
View File
@@ -1437,18 +1437,41 @@ class projectModel extends model
* Update product stage by project.
*
* @param int $projectID
* @param string $stageBy
* @param object $postProductData
* @access public
* @return bool
*/
public function updateProductStage(int $projectID, string $stageBy, object $postProductData): bool
public function updateProductStage(int $projectID, object $postProductData): bool
{
/* 如果项目的阶段为由按产品创建,则更新此项目下每个产品。*/
if($stageBy == 'project') return true;
if(empty($postProductData)) return false;
$executions = $this->loadModel('execution')->getPairs($projectID);
foreach(array_keys($executions) as $executionID) $this->execution->updateProducts($executionID, $postProductData); // 更新项目下所有产品的阶段。
$stageParis = $this->loadModel('execution')->getPairs($projectID);
$stageProducts = $this->dao->select('project, product')->from(TABLE_PROJECTPRODUCT)
->where('project')->in(array_keys($stageParis))
->fetchPairs('project', 'product');
$products = zget($postProductData, 'products', array());
$branches = zget($postProductData, 'branch', array(0));
$plans = zget($postProductData, 'plans', array());
$productBranches = array();
foreach($products as $i => $productID) $productBranches[$productID] = zget($branches, $i, array(0));
foreach($stageProducts as $stageID => $productID)
{
foreach($productBranches[$productID] as $branchID)
{
$data = new stdclass();
$data->project = (int)$stageID;
$data->product = (int)$productID;
$data->branch = (int)$branchID;
$data->plan = isset($plans[$productID]) ? implode(',', $plans[$productID]) : '';
$data->plan = trim($data->plan, ',');
$data->plan = empty($data->plan) ? 0 : ",$data->plan,";
$this->dao->replace(TABLE_PROJECTPRODUCT)->data($data)->exec();
}
}
return !dao::isError();
}
@@ -1492,7 +1515,7 @@ class projectModel extends model
$this->updatePlans($projectID, (array)$this->post->plans); // 更新关联的计划列表。
if($oldProject->hasProduct > 0) $this->updateProducts($projectID, (array)$this->post->products, $postProductData); // 更新关联的产品列表。
$this->updateTeamMembers($project, $oldProject, zget($_POST, 'teamMembers', array())); // 更新关联的用户信息。
if(!empty((array)$postProductData) && in_array($oldProject->model, array('waterfall', 'waterfallplus'))) $this->updateProductStage($projectID, (string)$oldProject->stageBy, $postProductData); // 更新关联的所有产品的阶段。
if($oldProject->stageBy == 'product' && in_array($oldProject->model, array('waterfall', 'waterfallplus'))) $this->updateProductStage($projectID, $postProductData); // 更新多套阶段
$this->file->updateObjectID((string)$this->post->uid, $projectID, 'project'); // 通过uid更新文件id。