public static function show($metrics, $fullDataNeeded = false)
 {
     // defaults
     self::$statID = 'cancellations';
     self::$statName = 'Cancellations';
     $cancellationData = array();
     if ($fullDataNeeded) {
         $cancellationData = self::showFullStat($metrics);
     } else {
         $cancellationData = self::showSimpleStat($metrics);
     }
     // positiveIsGood, for front end colors
     $cancellationData['positiveIsGood'] = false;
     return $cancellationData;
 }
 /** 
  * first time metric calculator - called on connect
  * calculates metrics in the past
  * can be a long running method
  * @param $user
  * 
  * @return null
  */
 public static function calculateMetricsOnConnect($user)
 {
     $timestamp = time();
     $todayDate = date('Y-m-d', $timestamp);
     // request and save events
     Log::info('Connecting user: '******'Saving events');
     self::saveEvents($user);
     Log::info('Events saved, calculating metrics');
     // get first event date
     $firstDate = Event::where('user', $user->id)->orderBy('date', 'asc')->first();
     if ($firstDate) {
         $firstDate = $firstDate->date;
     } else {
         $firstDate = date('Y-m-d', time());
     }
     // request plans and subscription infos (alternativly, customers)
     $customers = TailoredData::getCustomers($user);
     // calculate starter mrr and au
     $starterAU = count($customers);
     $starterMRR = MrrStat::calculateFirstTime($customers);
     // reverse calculate from events
     $historyMRR = MrrStat::calculateHistory($timestamp, $user, $firstDate, $starterMRR);
     $historyAU = AUStat::calculateHistory($timestamp, $user, $firstDate, $starterAU);
     $historyCancellation = CancellationStat::calculateHistory($timestamp, $user);
     // calculate arr, arpu, uc
     $historyUC = UserChurnStat::calculateHistory($historyCancellation['monthly'], $historyAU);
     $historyARR = ArrStat::calculateHistory($historyMRR);
     $historyARPU = ArpuStat::calculateHistory($historyMRR, $historyAU);
     // save all the data
     foreach ($historyAU as $date => $au) {
         $metrics = Metric::firstOrNew(array('date' => $date, 'user' => $user->id));
         $metrics->user = $user->id;
         $metrics->date = $date;
         $metrics->mrr = $historyMRR[$date];
         $metrics->au = $au;
         $metrics->arr = $historyARR[$date];
         $metrics->arpu = $historyARPU[$date];
         $metrics->uc = array_key_exists($date, $historyUC) ? $historyUC[$date] : null;
         $metrics->cancellations = array_key_exists($date, $historyCancellation['daily']) ? $historyCancellation['daily'][$date] : 0;
         $metrics->monthlyCancellations = array_key_exists($date, $historyCancellation['monthly']) ? $historyCancellation['monthly'][$date] : 0;
         $metrics->save();
     }
     Log::info('Calculations done');
 }