Example #1
0
 /**
  * Gets total data array
  *
  * @param   string              $id                  The identifier of the subject
  * @param   string              $name                The name of the subject
  * @param   array               $currentPeriod
  * @param   array               $previousPeriod
  * @param   array               $previousWholePeriod
  * @param   array               $detailed            Details by each point on chart
  * @param   ChartPeriodIterator $iterator            optional Iterator is needed when it returns long form of array
  * @param   bool                $bshort              optional Whether it should return short form of array
  * @return  array               Returns data array
  */
 public function getTotalDataArray($id, $name, $currentPeriod, $previousPeriod, $previousWholePeriod, $detailed, ChartPeriodIterator $iterator = null, $bshort = false)
 {
     $cl = ['id' => $id, 'name' => $name, 'cost' => isset($currentPeriod['cost']) ? round($currentPeriod['cost'], 2) : 0, 'costPct' => isset($currentPeriod['cost_percentage']) ? $currentPeriod['cost_percentage'] : 0, 'prevCost' => isset($previousPeriod['cost']) ? round($previousPeriod['cost'], 2) : 0, 'prevCostPct' => isset($previousPeriod['cost_percentage']) ? $previousPeriod['cost_percentage'] : 0];
     $cl['growth'] = $cl['cost'] - $cl['prevCost'];
     // growth
     $cl['growthPct'] = $cl['prevCost'] == 0 ? null : round(abs($cl['growth'] / $cl['prevCost'] * 100), 0);
     //growth percentage
     //short form of the data array
     if ($bshort) {
         return $cl;
     }
     // forecasted spend for period
     $cl['forecastCost'] = self::calculateForecast($cl['cost'], $iterator->getStart(), $iterator->getEnd(), $previousWholePeriod['cost'], ($cl['growth'] > 0 ? 1 : -1) * $cl['growthPct']);
     $mediandata = [];
     if (!empty($detailed[$id]['data'])) {
         $dt = $iterator->getStart();
         //FIXME rewrite searching a point
         foreach ($detailed[$id]['data'] as $i => $v) {
             if ($dt > $iterator->today) {
                 break;
             }
             $mediandata[] = !isset($v['cost']) ? 0 : $v['cost'];
             if ($iterator->getInterval() == '1 week') {
                 $dt->modify('next sunday');
             } else {
                 $dt->add($iterator->getIterationInterval());
             }
         }
     }
     $cl['median'] = empty($detailed[$id]['data']) ? 0 : round((double) Scalr_Util_Arrays::median($mediandata), 2);
     $cl['averageCost'] = count($mediandata) ? round(array_sum($mediandata) / count($mediandata), 2) : 0;
     // percentage difference between current and previous period
     $cl['curPrevPctGrowth'] = $cl['costPct'] - $cl['prevCostPct'];
     return $cl;
 }