Statistic   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 43
c 1
b 0
f 0
dl 0
loc 83
rs 10
wmc 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A passRegisterPerDay() 0 19 3
A dayBook() 0 24 4
A perDayPaymentTotal() 0 19 3
1
<?php
2
3
namespace Adminetic\Website\Services;
4
5
use Adminetic\Website\Models\Admin\Pass;
0 ignored issues
show
Bug introduced by
The type Adminetic\Website\Models\Admin\Pass was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
use Adminetic\Website\Models\Admin\Payment;
7
use Carbon\Carbon;
8
use Carbon\CarbonPeriod;
9
10
class Statistic
11
{
12
    /*
13
    |--------------------------------------------------------------------------
14
    | Reports
15
    |--------------------------------------------------------------------------
16
    */
17
    public function dayBook(Carbon $start_date, Carbon $end_date, $event = null)
18
    {
19
        $data = null;
20
        $period = CarbonPeriod::create($start_date, $end_date);
21
        foreach ($period as $date) {
22
            if (! is_null($event)) {
23
                $payments = $event->payments->filter(function ($payment) use ($date) {
24
                    return $payment->created_at->format('Y-m-d') == $date->format('Y-m-d');
0 ignored issues
show
Bug introduced by
The method format() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

24
                    return $payment->created_at->format('Y-m-d') == $date->/** @scrutinizer ignore-call */ format('Y-m-d');

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
25
                });
26
                $passes = $event->passes->filter(function ($pass) use ($date) {
27
                    return $pass->created_at->format('Y-m-d') == $date->format('Y-m-d');
28
                });
29
            } else {
30
                $payments = Payment::whereDate('created_at', $date)->get();
31
                $passes = Pass::whereDate('created_at', $date);
32
            }
33
            $data[modeDate($date)] = [
0 ignored issues
show
Bug introduced by
It seems like $date can also be of type null; however, parameter $date of modeDate() does only seem to accept Carbon\Carbon, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

33
            $data[modeDate(/** @scrutinizer ignore-type */ $date)] = [
Loading history...
34
                'total_payment' => $payments->sum('payment'),
35
                'total_pass' => $passes->count(),
36
                'total_transaction' => $payments->count(),
37
            ];
38
        }
39
40
        return ! is_null($data) ? array_reverse($data) : null;
0 ignored issues
show
introduced by
The condition is_null($data) is always true.
Loading history...
41
    }
42
43
    /*
44
    |--------------------------------------------------------------------------
45
    | Pass Statistics
46
    |--------------------------------------------------------------------------
47
    */
48
    public function passRegisterPerDay($given_data = null, $limit = 30)
49
    {
50
        $data = $given_data ?? Pass::orderBy('position')->get();
51
        if ($data->count() > 0) {
52
            $data = $data->sortByDesc('created_at');
53
            $end_date = $data->first()->created_at;
54
            $start_date = $end_date->copy()->subDays($limit);
55
            $period = CarbonPeriod::create($start_date, $end_date);
56
            $total = [];
57
            foreach ($period as $date) {
58
                $total[modeDate($date)] = $data->filter(function ($p) use ($date) {
0 ignored issues
show
Bug introduced by
It seems like $date can also be of type null; however, parameter $date of modeDate() does only seem to accept Carbon\Carbon, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

58
                $total[modeDate(/** @scrutinizer ignore-type */ $date)] = $data->filter(function ($p) use ($date) {
Loading history...
59
                    return $p->created_at->format('Y-m-d') == $date->format('Y-m-d');
60
                })->count();
61
            }
62
63
            return $total;
64
        }
65
66
        return null;
67
    }
68
69
    /*
70
    |--------------------------------------------------------------------------
71
    | Payment Statistics
72
    |--------------------------------------------------------------------------
73
    */
74
    public function perDayPaymentTotal($given_data = null, $limit = 30)
75
    {
76
        $data = $given_data ?? Payment::orderBy('position')->get();
77
        if ($data->count() > 0) {
78
            $data = $data->sortByDesc('created_at');
79
            $end_date = $data->first()->created_at;
80
            $start_date = $end_date->copy()->subDays($limit);
81
            $period = CarbonPeriod::create($start_date, $end_date);
82
            $total = [];
83
            foreach ($period as $date) {
84
                $total[modeDate($date)] = $data->filter(function ($p) use ($date) {
0 ignored issues
show
Bug introduced by
It seems like $date can also be of type null; however, parameter $date of modeDate() does only seem to accept Carbon\Carbon, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

84
                $total[modeDate(/** @scrutinizer ignore-type */ $date)] = $data->filter(function ($p) use ($date) {
Loading history...
85
                    return $p->created_at->format('Y-m-d') == $date->format('Y-m-d');
86
                })->sum('payment');
87
            }
88
89
            return $total;
90
        }
91
92
        return  null;
93
    }
94
}
95