avg_of_dev_efficiency.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. class avg_of_dev_efficiency extends baseCalc
  3. {
  4. public $dataset = 'getAllDevStories';
  5. public $fieldList = array('t1.closedDate', 't1.closedReason', 't1.releasedDate', 't1.estimate', 't1.stage');
  6. public $result = array();
  7. public function calculate($row)
  8. {
  9. $releasedDate = $row->releasedDate;
  10. $closedDate = $row->closedDate;
  11. $closedReason = $row->closedReason;
  12. $estimate = $row->estimate;
  13. $stage = $row->stage;
  14. if(!in_array($stage, array('released', 'closed'))) return;
  15. if((!helper::isZeroDate($closedDate) && $closedReason == 'done') || !helper::isZeroDate($releasedDate))
  16. {
  17. // 如果关闭且关闭原因为已完成,没有发布时间,该需求为直接关闭跳过了中间流程,此时用关闭时间作为发布时间
  18. if(!helper::isZeroDate($closedDate) && $closedReason == 'done' && helper::isZeroDate($releasedDate)) $releasedDate = $closedDate;
  19. $year = $this->getYear($releasedDate);
  20. $month = substr($releasedDate, 5, 2);
  21. if(!isset($this->result[$year])) $this->result[$year] = array();
  22. if(!isset($this->result[$year][$month])) $this->result[$year][$month] = 0;
  23. $this->result[$year][$month] += $estimate;
  24. }
  25. }
  26. public function getResult($options = array())
  27. {
  28. global $app;
  29. $users = $app->control->loadModel('user')->getPairs('noempty|nodeleted|noclosed');
  30. $records = $this->getRecords(array('year', 'month', 'value'));
  31. foreach($records as $index => $record)
  32. {
  33. if($record['value']) $records[$index]['value'] = round($record['value'] / count($users), 4);
  34. }
  35. return $this->filterByOptions($records, $options);
  36. }
  37. }