Пример #1
0
 public function actionSignupSummary()
 {
     $params = $this->getQuery();
     if (!isset($params['start']) || !isset($params['end'])) {
         throw new BadRequestHttpException(Yii::t('common', 'parameters_missing'));
     }
     if ($params['start'] > $params['end']) {
         throw new BadRequestHttpException(Yii::t('common', 'data_error'));
     }
     $accountId = $this->getAccountId();
     $startDate = TimeUtil::msTime2String($params['start'], 'Y-m');
     $endDate = TimeUtil::msTime2String($params['end'], 'Y-m');
     $statsData = StatsMemberMonthly::getByDate($startDate, $endDate, $accountId);
     $data = [];
     foreach ($statsData as $item) {
         $date = $item->month;
         $data[$item->origin][$date] = empty($data[$item->origin][$date]) ? 0 : $data[$item->origin][$date];
         $data[$item->origin][$date] += $item->total;
     }
     //ensure origins
     $channelOrigins = Channel::getOriginsByAccount($accountId);
     $origins = array_merge(StatsMemberMonthly::$originWithoutChannels, $channelOrigins);
     foreach ($origins as $origin) {
         if (empty($data[$origin])) {
             $data[$origin] = [];
         }
     }
     $endTime = strtotime($endDate);
     $dates = [];
     $totals = [];
     $dateTime = strtotime($startDate);
     while ($dateTime <= $endTime) {
         $date = date('Y-m', $dateTime);
         $dates[] = $date;
         foreach ($data as $origin => $dateTotal) {
             $totals[$origin][] = empty($dateTotal[$date]) ? 0 : $dateTotal[$date];
         }
         $dateTime = strtotime('+1 month', $dateTime);
     }
     return ['date' => $dates, 'data' => $totals];
 }
Пример #2
0
 public static function preProcessData($condition)
 {
     $stats = self::findAll($condition);
     $statsData = [];
     foreach ($stats as $item) {
         $date = $item->month;
         $statsData[$item->origin][$date] = empty($statsData[$item->origin][$date]) ? 0 : $statsData[$item->origin][$date];
         $statsData[$item->origin][$date] += $item->total;
     }
     //ensure origins
     $channelOrigins = Channel::getOriginsByAccount($condition['accountId']);
     $origins = array_merge(StatsMemberMonthly::$originWithoutChannels, $channelOrigins);
     foreach ($origins as $origin) {
         if (empty($statsData[$origin])) {
             $statsData[$origin] = [];
         }
     }
     $endDate = $condition['month']['$lte'];
     $startDate = $condition['month']['$gte'];
     $endTime = strtotime($endDate);
     $dateTime = strtotime($startDate);
     $data = [];
     while ($dateTime <= $endTime) {
         $date = date('Y-m', $dateTime);
         foreach ($statsData as $origin => $dateTotal) {
             $data[] = ['month' => $date, 'channel' => Yii::t('common', $origin), 'number' => empty($dateTotal[$date]) ? 0 : $dateTotal[$date]];
         }
         $dateTime = strtotime('+1 month', $dateTime);
     }
     return $data;
 }