ReportController::sumChartsByPeriod()   A
last analyzed

Complexity

Conditions 5
Paths 6

Size

Total Lines 52
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 34
nc 6
nop 1
dl 0
loc 52
rs 9.0648
c 1
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace App\Http\Controllers\Api\V1;
4
5
use App\Http\Controllers\Controller;
6
use Illuminate\Http\Request;
7
use Illuminate\Support\Collection;
8
use App\User;
9
10
class ReportController extends Controller
11
{
12
	private $model;
13
14
	/**
15
     * Create a new controller instance.
16
     *
17
     * @return void
18
     */
19
    public function __construct(User $model)
20
    {
21
        $this->model = $model;
22
    }
23
24
    public function getStatementByPeriod(Request $request)
25
    {
26
        $rules = [
27
            'dateStart' => 'required|date',
28
            'dateEnd' => 'required|date',
29
        ];
30
31
        $validator = \Validator::make($request->all(), $rules);
32
33
        if ($validator->fails()) {
34
           return response()->json(['status' => 'error', 'errors' => $validator->errors()]);
35
        }
36
37
        $user = $this->model->where('id', $request->user()->id)->first();
38
39
        if (!$user) {
40
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
41
        }
42
43
        $dateStart = $request->dateStart;
44
        $dateEnd = $request->dateEnd;
45
        $status = ($request->status !== null && $request->status !== false && $request->status !== '')
46
                    ?
47
                    ['status' => $request->status]
48
                    :
49
                    [];
50
51
        $billPays = $user->bill_pays()->selectRaw('bill_pays.*, categories.name as category_name')
52
            ->join('categories', 'categories.id', '=', 'bill_pays.category_id')
53
            ->whereBetween('date_launch', [$dateStart, $dateEnd])
54
            ->orderBy('date_launch', 'DESC')
55
            ->where($status)
56
            ->get();
57
58
        $billReceives = $user->bill_receives()->selectRaw('bill_receives.*, categories.name as category_name')
59
            ->join('categories', 'categories.id', '=', 'bill_receives.category_id')
60
            ->whereBetween('date_launch', [$dateStart, $dateEnd])
61
            ->orderBy('date_launch', 'DESC')
62
            ->where($status)
63
            ->get();
64
65
        $collection = new Collection(array_merge_recursive($billPays->toArray(), $billReceives->toArray()));
66
        $statements = $collection->sortByDesc('date_launch');
67
68
        $total_pays = $billPays->sum('value');
69
        $total_receives = $billReceives->sum('value');
70
71
        $data['billPays'] = $billPays;
0 ignored issues
show
Comprehensibility Best Practice introduced by
$data was never initialized. Although not strictly required by PHP, it is generally a good practice to add $data = array(); before regardless.
Loading history...
72
        $data['billReceives'] = $billReceives;
73
        $data['total_pays'] = $total_pays;
74
        $data['total_receives'] = $total_receives;
75
        $data['statements'] = $statements;
76
77
        return response()->json(['status' => 'success', 'data' => $data]);
78
    }
79
80
    public function sumChartsByPeriod(Request $request)
81
    {
82
        $rules = [
83
            'dateStart' => 'required|date',
84
            'dateEnd' => 'required|date',
85
        ];
86
87
        $validator = \Validator::make($request->all(), $rules);
88
89
        if ($validator->fails()) {
90
           return response()->json(['status' => 'error', 'errors' => $validator->errors()]);
91
        }
92
93
        $user = $this->model->where('id', $request->user()->id)->first();
94
95
        if (!$user) {
96
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
97
        }
98
99
        $dateStart = $request->dateStart;
100
        $dateEnd = $request->dateEnd;
101
102
        $categoriesPay = $user->categories()->selectRaw('categories.name, sum(value) as value')
103
            ->leftJoin('bill_pays', 'bill_pays.category_id', '=', 'categories.id')
104
            ->whereBetween('date_launch', [$dateStart, $dateEnd])
105
            ->whereNotNull('bill_pays.category_id')
106
            ->groupBy('categories.name')
107
            ->where('status', '1')
108
            ->get();
109
110
        $categoriesReceive = $user->categories()->selectRaw('categories.name, sum(value) as value')
111
            ->leftJoin('bill_receives', 'bill_receives.category_id', '=', 'categories.id')
112
            ->whereBetween('date_launch', [$dateStart, $dateEnd])
113
            ->whereNotNull('bill_receives.category_id')
114
            ->groupBy('categories.name')
115
            ->where('status', '1')
116
            ->get();
117
118
        foreach ($categoriesPay as $key => $value) {
119
            $categoriesPay[$key]['name'] = $value->name;
120
            $categoriesPay[$key]['y'] = (float)$value->value;
121
        }
122
123
        foreach ($categoriesReceive as $key => $value) {
124
            $categoriesReceive[$key]['name'] = $value->name;
125
            $categoriesReceive[$key]['y'] = (float)$value->value;
126
        }
127
128
        $data["categoriesPay"] = $categoriesPay;
0 ignored issues
show
Comprehensibility Best Practice introduced by
$data was never initialized. Although not strictly required by PHP, it is generally a good practice to add $data = array(); before regardless.
Loading history...
129
        $data["categoriesReceive"] = $categoriesReceive;
130
131
        return response()->json(['status' => 'success', 'data' => $data]);
132
    }
133
  
134
    public function sumChartsByPeriodFull(Request $request)
135
    {
136
        $user = $this->model->where('id', $request->user()->id)->first();
137
138
        if (!$user) {
139
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
140
        }
141
142
        $dateStart = date('Y') . '-01-01';
143
        $dateEnd = date('Y-m-d');
144
145
        $categories = $user->categories()->selectRaw('categories.name, sum(value) as value')
146
            ->leftJoin('bill_pays', 'bill_pays.category_id', '=', 'categories.id')
147
            ->whereBetween('date_launch', [$dateStart, $dateEnd])
148
            ->whereNotNull('bill_pays.category_id')
149
            ->groupBy('categories.name')
150
            ->get();
151
152
        foreach ($categories as $key => $value) {
153
            $categories[$key]['name'] = $value->name;
154
            $categories[$key]['y'] = (float)$value->value;
155
        }
156
157
        return response()->json(['status' => 'success', 'data' => $categories]);
158
    }
159
}