From ffc91ccc72f2862453e51b2764a052ed766afd62 Mon Sep 17 00:00:00 2001 From: sunguangming Date: Fri, 11 Apr 2025 05:23:31 +0000 Subject: [PATCH] * [task#140904,done,1h] finish task. --- module/programplan/zen.php | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/module/programplan/zen.php b/module/programplan/zen.php index c091ff2fd6..f00ee46df5 100644 --- a/module/programplan/zen.php +++ b/module/programplan/zen.php @@ -68,11 +68,13 @@ class programplanZen extends programplan if(isset($fields[$field])) $fields[$field]['required'] = true; } - $totalPercent = 0; + $totalPercent = array(); $lastLevels = array(); - $names = $codes = array(); - $plans = form::batchData($fields)->get(); - $orders = $this->programplan->computeOrders(array(), $plans); + $names = $codes = array(); + $plans = form::batchData($fields)->get(); + $orders = $this->programplan->computeOrders(array(), $plans); + $group = 0; + $prevLevel = 0; foreach($plans as $rowID => $plan) { if(empty($parentID) and empty($oldPlans)) $plan->id = ''; @@ -105,9 +107,21 @@ class programplanZen extends programplan } $customKey = 'create' . ucfirst($project->model) . 'Fields'; - if(strpos(",{$this->config->programplan->custom->$customKey},", ',percent,') !== false) $totalPercent += $plan->percent; + if(strpos(",{$this->config->programplan->custom->$customKey},", ',percent,') !== false) + { + if($plan->level == 0) + { + $totalPercent[0] = isset($totalPercent[0]) ? $totalPercent[0] + $plan->percent : $plan->percent; + } + else + { + if($plan->level != $prevLevel) $group ++; + $totalPercent[$group] = isset($totalPercent[$group]) ? $totalPercent[$group] + $plan->percent : $plan->percent; + } + } - $names[] = $plan->name; + $prevLevel = $plan->level; + $names[] = $plan->name; if(!empty($plan->code)) $codes[] = $plan->code; $this->checkLegallyDate($plan, $project, !empty($parentStage) ? $parentStage : null, $rowID); @@ -115,7 +129,12 @@ class programplanZen extends programplan $lastLevels[$plan->level] = $plan; if($plan->level > 0) $this->checkLegallyDate($plan, $project, zget($lastLevels, $plan->level - 1, null), $rowID); } - if(!empty($this->config->setPercent) and $totalPercent > 100) dao::$errors["percent[$rowID]"] = $this->lang->programplan->error->percentOver; + + foreach($totalPercent as $group => $percent) + { + if(!empty($this->config->setPercent) and $percent > 100) dao::$errors[] = $this->lang->programplan->error->percentOver; + } + return $plans; }