Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 80
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
BusinessGoals
0.00% covered (danger)
0.00%
0 / 80
0.00% covered (danger)
0.00%
0 / 4
702
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 list_business_goals
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
6
 business_goals
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 1
306
 update_business_goals
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3namespace App\Http\Controllers;
4
5use App\Models\TblRoles;
6use App\Models\TblUsers;
7use App\Models\TblBusinessGoals;
8use Illuminate\Support\Facades\App;
9use Illuminate\Support\Facades\Cache;
10use Illuminate\Http\Request;
11use Illuminate\Support\Facades\DB;
12use Illuminate\Support\Facades\Storage;
13use Illuminate\Support\Facades\Log;
14use SendGrid\Mail\Mail;
15use GuzzleHttp\Client;
16
17class BusinessGoals extends Controller
18{
19
20    private $business_goals = array();
21
22    public function __construct(){        
23        $this->locale = @getallheaders()['Locale-ID'];
24        $this->userId = @getallheaders()['User-ID'];
25
26        App::setLocale($this->locale);
27    }
28
29    function list_business_goals(Request $request){
30
31        try {
32
33            $data = $request->all();
34
35            $this->business_goals($data);
36
37            return response([
38                'message' => 'OK', 
39                'data' => $this->business_goals
40            ]);
41
42        } catch (\Exception $e) {
43            /** @disregard P1014 */
44            $e->exceptionCode = 'LIST_BUSINESS_GOALS_EXCEPTION'; 
45            report($e);
46            return response(['message' => 'KO', 'error' => $e->getMessage()]);
47        }
48
49    }
50
51    function business_goals($params){
52
53        $where = "";
54
55        if(isset($params['budget_type_group_id']) && $params['budget_type_group_id'] != null){
56            $budgetTypeGroupIds = implode(",", $params['budget_type_group_id']);
57            if(count($params['budget_type_group_id']) > 0){
58                $where .= " AND bg.budget_type_group_id IN ({$budgetTypeGroupIds}, 999999999)";
59            }
60        }else{
61            $where .= " AND bg.budget_type_group_id > 0";
62        }
63
64        if(isset($params['user_id']) && $params['user_id'] != null){
65            $userIds = implode(",", $params['user_id']);
66            if(count($params['user_id']) > 0){
67                $where .= " AND bg.user_id IN ({$userIds}) OR (bg.is_default = 1 {$where})";
68            }
69        }
70
71        if(isset($params['role_id']) && $params['role_id'] != null){
72            $roleIds = implode(",", $params['role_id']);
73            if(count($params['role_id']) > 0){
74                $where .= " AND bg.role_id IN ({$roleIds}, 999999999)";
75            }
76        }
77
78        $query = "SELECT
79                    bg.id,
80                    bg.budget_type_group_id,
81                    CASE 
82                        WHEN bg.budget_type_group_id = 999999999 THEN 'Default'
83                        ELSE btg.name
84                    END budget_type,
85                    CASE
86                        WHEN bg.is_commercial_type = 1 THEN r.name 
87                        ELSE u.name 
88                    END users, 
89                    bg.is_commercial_type, 
90                    bg.issue_objective, 
91                    bg.acceptance_objective, 
92                    bg.new_objective, 
93                    bg.role_id, 
94                    bg.user_id,
95                    bg.is_default,
96                    bg.is_amount
97                FROM
98                    tbl_business_goals bg 
99                LEFT JOIN tbl_budget_type_groups btg 
100                    ON btg.budget_type_group_id = bg.budget_type_group_id
101                LEFT JOIN tbl_roles r 
102                    ON bg.role_id = r.role_id 
103                LEFT JOIN tbl_users u 
104                    ON bg.user_id = u.id
105                WHERE bg.id > 0 {$where}
106                ORDER BY 
107                    FIELD(bg.role_id, 999999999) DESC,
108                    FIELD(btg.budget_type_group_id, 999999999) DESC,
109                    FIELD(bg.is_commercial_type, 1) DESC,
110                    bg.role_id ASC,
111                    btg.priority ASC";
112
113        $data = DB::select($query);
114
115        $result = ['users' => [], 'roles' => [], 'budget_types' => []];
116
117        foreach ($data as $item) {
118
119            if($item->budget_type != null){
120                $key = $item->is_commercial_type === 1 ? 'roles' : 'users';
121
122                $id = $item->user_id;
123                if($key == 'roles'){
124                    $id = $item->role_id;   
125                }
126
127                if (!isset($result[$key][$id])) {
128
129                    $result[$key][$id] = [
130                        $key == 'roles' ? 'role_id' : 'user_id' => $id,
131                        'name' => $item->is_default === 1 ? "Default" : $item->users,
132                        'id' => $item->id, 
133                        'is_default' => $item->is_default,
134                        'is_amount' => $item->is_amount,
135                        'budget_types' => []
136                    ];
137                    
138                }
139
140                $result[$key][$id]['budget_types'][] = [
141                    'id' => $item->id,                    
142                    'budget_type_group_id' => $item->budget_type_group_id,
143                    'budget_type' => $item->budget_type,
144                    'issue_objective' => $item->issue_objective,
145                    'acceptance_objective' => $item->acceptance_objective,
146                    'new_objective' => $item->new_objective
147                ];
148
149                array_push($result['budget_types'], $item->budget_type);
150            }            
151        }
152
153        $result['users'] = array_values($result['users']);
154        $result['roles'] = array_values($result['roles']);
155        $result['budget_types'] = array_values(array_unique($result['budget_types']));
156        
157        $this->business_goals = $result;     
158    }
159
160    function update_business_goals(Request $request){
161
162        try {
163            
164            $data = $request->all();
165
166            foreach ($data as $item) {
167                $id = $item['id'];
168                unset($item['id']);
169
170                $item['updated_at'] = date('Y-m-d H:i:s');
171
172                if(isset($item['is_amount'])){
173                    $bg = TblBusinessGoals::where('id', $id)->first();
174                    if(is_numeric($bg->user_id)){
175                        TblBusinessGoals::where('user_id', $bg->user_id)->update($item);
176                    }
177
178                    if(is_numeric($bg->role_id)){
179                        TblBusinessGoals::where('role_id', $bg->role_id)->update($item);
180                    }
181                }
182                
183                TblBusinessGoals::where('id', $id)->update($item);
184            }            
185
186            Cache::flush();
187
188            return response([
189                'message' => 'OK'
190            ]);
191
192        } catch (\Exception $e) {
193            /** @disregard P1014 */
194            $e->exceptionCode = 'UPDATE_BUSINESS_GOALS_EXCEPTION'; 
195            report($e);
196            return response(['message' => 'KO', 'error' => $e->getMessage()]);
197        }
198
199    }
200}