Passed
Push — master ( 634515...c5bdd3 )
by Paweł
02:21
created

BaseMultiDiff   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 17
dl 0
loc 36
rs 10
c 0
b 0
f 0
wmc 4

1 Method

Rating   Name   Duplication   Size   Complexity  
A prepareData() 0 29 4
1
<?php
2
/**
3
 * Created for monitoring-free.
4
 * User: jakim <[email protected]>
5
 * Date: 2019-05-18
6
 */
7
8
namespace app\components\stats\base;
9
10
11
use yii\helpers\ArrayHelper;
12
13
abstract class BaseMultiDiff extends BaseDiff
14
{
15
    protected function prepareData(): array
16
    {
17
        $models = [];
18
19
        $dbTo = $this->to->copy()->endOfDay()->toDateTimeString();
20
        $dbFrom = $this->from->copy()->endOfDay()->toDateTimeString();
21
22
        $toStatsIds = $this->findStatsIds($dbTo);
23
        $toModels = $this->findDataModels($toStatsIds);
24
25
        // jesli znaleziona ostatnia data 'do' jest wczesniejsza niz od, to nie pomijaj modelu
26
        $ignoredModels = array_filter($toModels, function ($toModel) use ($dbFrom) {
27
            if (strtotime($toModel['created_at']) > strtotime($dbFrom)) {
28
                return true;
29
            }
30
        });
31
32
        $fromStatsIds = $this->findStatsIds($dbFrom, ArrayHelper::getColumn($ignoredModels, 'id'));
33
        $fromModels = $this->findDataModels($fromStatsIds);
34
35
        foreach ($toModels as $accountId => $toModel) {
36
            $fromModel = ArrayHelper::getValue($fromModels, $accountId);
37
            foreach ($this->statsAttributes as $statsAttribute) {
38
                $value = ArrayHelper::getValue($toModel, $statsAttribute, 0) - ArrayHelper::getValue($fromModel, $statsAttribute, 0);
39
                $models[$accountId][$statsAttribute] = $value;
40
            }
41
        }
42
43
        return $models;
44
    }
45
46
    abstract protected function findStatsIds(?string $date, array $ignoredStatsIds = []);
47
48
    abstract protected function findDataModels(array $statsIds);
49
}