Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 76
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 / 76
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 / 8
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 / 18
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            return response(['message' => 'KO', 'error' => $e->getMessage()]);
44        }
45
46    }
47
48    function business_goals($params){
49
50        $where = "";
51
52        if(isset($params['budget_type_group_id']) && $params['budget_type_group_id'] != null){
53            $budgetTypeGroupIds = implode(",", $params['budget_type_group_id']);
54            if(count($params['budget_type_group_id']) > 0){
55                $where .= " AND bg.budget_type_group_id IN ({$budgetTypeGroupIds}, 999999999)";
56            }
57        }else{
58            $where .= " AND bg.budget_type_group_id > 0";
59        }
60
61        if(isset($params['user_id']) && $params['user_id'] != null){
62            $userIds = implode(",", $params['user_id']);
63            if(count($params['user_id']) > 0){
64                $where .= " AND bg.user_id IN ({$userIds}) OR (bg.is_default = 1 {$where})";
65            }
66        }
67
68        if(isset($params['role_id']) && $params['role_id'] != null){
69            $roleIds = implode(",", $params['role_id']);
70            if(count($params['role_id']) > 0){
71                $where .= " AND bg.role_id IN ({$roleIds}, 999999999)";
72            }
73        }
74
75        $query = "SELECT
76                    bg.id,
77                    bg.budget_type_group_id,
78                    CASE 
79                        WHEN bg.budget_type_group_id = 999999999 THEN 'Default'
80                        ELSE btg.name
81                    END budget_type,
82                    CASE
83                        WHEN bg.is_commercial_type = 1 THEN r.name 
84                        ELSE u.name 
85                    END users, 
86                    bg.is_commercial_type, 
87                    bg.issue_objective, 
88                    bg.acceptance_objective, 
89                    bg.new_objective, 
90                    bg.role_id, 
91                    bg.user_id,
92                    bg.is_default,
93                    bg.is_amount
94                FROM
95                    tbl_business_goals bg 
96                LEFT JOIN tbl_budget_type_groups btg 
97                    ON btg.budget_type_group_id = bg.budget_type_group_id
98                LEFT JOIN tbl_roles r 
99                    ON bg.role_id = r.role_id 
100                LEFT JOIN tbl_users u 
101                    ON bg.user_id = u.id
102                WHERE bg.id > 0 {$where}
103                ORDER BY 
104                    FIELD(bg.role_id, 999999999) DESC,
105                    FIELD(btg.budget_type_group_id, 999999999) DESC,
106                    FIELD(bg.is_commercial_type, 1) DESC,
107                    bg.role_id ASC,
108                    btg.priority ASC";
109
110        $data = DB::select($query);
111
112        $result = ['users' => [], 'roles' => [], 'budget_types' => []];
113
114        foreach ($data as $item) {
115
116            if($item->budget_type != null){
117                $key = $item->is_commercial_type === 1 ? 'roles' : 'users';
118
119                $id = $item->user_id;
120                if($key == 'roles'){
121                    $id = $item->role_id;   
122                }
123
124                if (!isset($result[$key][$id])) {
125
126                    $result[$key][$id] = [
127                        $key == 'roles' ? 'role_id' : 'user_id' => $id,
128                        'name' => $item->is_default === 1 ? "Default" : $item->users,
129                        'id' => $item->id, 
130                        'is_default' => $item->is_default,
131                        'is_amount' => $item->is_amount,
132                        'budget_types' => []
133                    ];
134                    
135                }
136
137                $result[$key][$id]['budget_types'][] = [
138                    'id' => $item->id,                    
139                    'budget_type_group_id' => $item->budget_type_group_id,
140                    'budget_type' => $item->budget_type,
141                    'issue_objective' => $item->issue_objective,
142                    'acceptance_objective' => $item->acceptance_objective,
143                    'new_objective' => $item->new_objective
144                ];
145
146                array_push($result['budget_types'], $item->budget_type);
147            }            
148        }
149
150        $result['users'] = array_values($result['users']);
151        $result['roles'] = array_values($result['roles']);
152        $result['budget_types'] = array_values(array_unique($result['budget_types']));
153        
154        $this->business_goals = $result;     
155    }
156
157    function update_business_goals(Request $request){
158
159        try {
160            
161            $data = $request->all();
162
163            foreach ($data as $item) {
164                $id = $item['id'];
165                unset($item['id']);
166
167                $item['updated_at'] = date('Y-m-d H:i:s');
168
169                if(isset($item['is_amount'])){
170                    $bg = TblBusinessGoals::where('id', $id)->first();
171                    if(is_numeric($bg->user_id)){
172                        TblBusinessGoals::where('user_id', $bg->user_id)->update($item);
173                    }
174
175                    if(is_numeric($bg->role_id)){
176                        TblBusinessGoals::where('role_id', $bg->role_id)->update($item);
177                    }
178                }
179                
180                TblBusinessGoals::where('id', $id)->update($item);
181            }            
182
183            Cache::flush();
184
185            return response([
186                'message' => 'OK'
187            ]);
188
189        } catch (\Exception $e) {
190            return response(['message' => 'KO', 'error' => $e->getMessage()]);
191        }
192
193    }
194}