* @package * @uses func * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html) * @Link https://www.zentao.net */ class progress_of_task_in_project extends baseCalc { public $dataset = 'getTasks'; public $fieldList = array('t1.consumed', 't1.left', 't1.project', 't1.status', 't1.isParent'); public $result = array(); public function calculate($row) { if($row->isParent == '1') return false; $consumed = !empty($row->consumed) ? $row->consumed : 0; $left = !empty($row->left) ? $row->left : 0; if(!isset($this->result[$row->project])) $this->result[$row->project] = array('consumed' => 0, 'left' => 0); $this->result[$row->project]['consumed'] += $consumed; if($row->status != 'cancel' && $row->status != 'closed') $this->result[$row->project]['left'] += $left; } public function getResult($options = array()) { $records = array(); foreach($this->result as $project => $taskInfo) { $total = $taskInfo['consumed'] + $taskInfo['left']; $progress = $total ? round($taskInfo['consumed'] / $total, 4) : 0; $records[] = array('project' => $project, 'value' => $progress); } return $this->filterByOptions($records, $options); } }