jakim/ig-monitoring

View on GitHub
components/stats/providers/AccountDiffDataProvider.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php
/**
 * Created for IG Monitoring.
 * User: jakim <pawel@jakimowski.info>
 * Date: 2019-01-24
 */

namespace app\components\stats\providers;


use app\components\stats\contracts\DataProviderInterface;
use app\dictionaries\Grouping;
use yii\helpers\ArrayHelper;

class AccountDiffDataProvider extends AccountDataProvider implements DataProviderInterface
{
    protected function prepareModels()
    {
        $models = [];

        $dbFrom = $this->from->copy();
        switch ($this->grouping) {
            case Grouping::MONTHLY:
                $dbFrom = $dbFrom->subMonth()->endOfMonth();
                break;
            case Grouping::WEEKLY:
                $dbFrom = $dbFrom->subWeek()->endOfWeek();
                break;
            case Grouping::DAILY:
            default:
                $dbFrom = $dbFrom->subDay()->endOfDay();
        }
        $dbFrom = $this->findDbDate($dbFrom);

        $dbTo = $this->to->copy()->endOfDay()->toDateTimeString();

        $idsQuery = $this->findStatsIds($dbFrom, $dbTo, false);
        $data = $this->findDataModels($idsQuery);

        $older = array_shift($data);
        foreach ($data as $stats) {
            foreach ($this->statsAttributes as $statsAttribute) {
                $value = ArrayHelper::getValue($stats, $statsAttribute, 0) - ArrayHelper::getValue($older, $statsAttribute, 0);
                $models[$stats['created_at']][$statsAttribute] = $value;
            }
            $older = $stats;
        }

        return $models;
    }
}