Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
3.85% covered (danger)
3.85%
20 / 519
0.00% covered (danger)
0.00%
0 / 24
CRAP
0.00% covered (danger)
0.00%
0 / 1
Users
3.85% covered (danger)
3.85%
20 / 519
0.00% covered (danger)
0.00%
0 / 24
9532.18
0.00% covered (danger)
0.00%
0 / 1
 __construct
57.14% covered (warning)
57.14%
8 / 14
0.00% covered (danger)
0.00%
0 / 1
5.26
 create_users
0.00% covered (danger)
0.00%
0 / 48
0.00% covered (danger)
0.00%
0 / 1
90
 get_users
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
 get_user
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
30
 getUserByName
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
12
 getAllUserNames
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
6
 get_user_by_email
70.59% covered (warning)
70.59%
12 / 17
0.00% covered (danger)
0.00%
0 / 1
5.64
 add_company_user
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
30
 delete_company_user
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
 update_users
0.00% covered (danger)
0.00%
0 / 96
0.00% covered (danger)
0.00%
0 / 1
272
 delete_users
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
 get_roles
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 get_all_commercials
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
6
 get_g3w_warning_fields
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
20
 get_created_by
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
20
 get_commercial_with_pendings
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
20
 get_responsible_for_work
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
20
 get_job_created_by
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
20
 get_accepted_by
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
20
 get_commercials
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
20
 update_users_itv
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
20
 list_roles
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 update_role
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
12
 delete_role
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace App\Http\Controllers;
4
5use App\Models\TblUsers;
6use App\Models\TblRoles;
7use App\Models\TblCompanyUsers;
8use App\Models\TblQuotations;
9use App\Models\TblOngoingJobs;
10use App\Http\Controllers\Quotations;
11use Illuminate\Http\Request;
12use Illuminate\Support\Str;
13use Illuminate\Support\Facades\Log;
14use Illuminate\Support\Facades\DB;
15use Illuminate\Support\Facades\App;
16use Illuminate\Support\Facades\Cache;
17use Carbon\Carbon;
18
19class Users extends Controller
20{
21    private $locale;
22    private $userId;
23    private $region;
24    private $companyIds;
25    private $companyId;
26
27    public function __construct(){
28        $this->locale = @getallheaders()['Locale-ID'];
29        $this->userId = @getallheaders()['User-ID'];
30        $this->region = @getallheaders()['Region'];
31
32        App::setLocale($this->locale);
33
34        $this->companyIds = array();
35
36        if($this->region != null && $this->region != "" && $this->region != "All"){
37            $this->region = urldecode($this->region);
38
39            $query = "SELECT
40                        b.company_id
41                    FROM
42                        tbl_company_users a
43                        LEFT JOIN tbl_companies b ON a.company_id = b.company_id
44                    WHERE
45                        a.user_id = {$this->userId}
46                        AND b.region = '{$this->region}'";
47
48            $this->companyIds = DB::select($query);
49
50            $this->companyIds = collect($this->companyIds)->pluck('company_id')->toArray();
51        }else{
52            $this->companyIds = TblCompanyUsers::where('user_id', $this->userId)->pluck('company_id')->all();
53        }
54
55        $this->companyId = implode(',', $this->companyIds);
56    }
57
58    public function create_users(Request $request){
59
60        // try {
61            $data = $request->all();
62            $data['role_id'] = 2;
63
64            $sData = array(
65                'name' => $data['name'],
66                'email' => $data['email'],
67                'created_by' => $data['created_by'],
68                'role_id' => 2,
69                'sender_email' => $data['sender_email'],
70                'sender_enabled' => @$data['sender_enabled'],
71                'G3W_code' => $data['G3W_code']
72            );
73
74            $email = TblUsers::where('email', $data['email'])->count();
75
76            if($email > 0){
77                return response(['message' => 'KO', 'error' => __('language.email_already_exist')]);
78            }
79
80            $name = TblUsers::where('name', $data['name'])->count();
81
82            if($name > 0){
83                return response(['message' => 'KO', 'error' => __('language.name_already_exist')]);
84            }
85
86            $sendgrid = new \SendGrid(env('SENDGRID_API_KEY','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'));
87            $data['address'] = "Madrid";
88            $data['city'] = "Madrid";
89            $data['country'] = "Spain";
90            $data['nickname'] = $data['name'] . "-" . base64_encode($data['name'] . date('ymdhis'));
91            $data['from_name'] = $data['name'];
92            $data['from_email'] = $data['sender_email'];
93            $data['reply_to'] = $data['sender_email'];
94            $data['reply_to_name'] = $data['name'];
95            $requestBody = $data;
96            $error  = false;
97
98            $response = $sendgrid->client->verified_senders()->post($requestBody);
99            $x = json_decode($response->body());
100
101            if ($response->statusCode() == 201 || is_numeric(@$x->id)) {
102                $sData['response_id'] = $x->id;
103                $result = TblUsers::create($sData);
104                Log::channel('email_log')->info('USER EMAIL: ' . $data['sender_email'] . ' - VERIFICATION SENT');
105            } else {
106                $error = true;
107                Log::channel('email_log')->error('REQUEST BODY USER: - ' . $response->body());
108            }
109
110            $response = json_decode($response->body());
111
112            if($error){
113                if($response->errors[0]->message == "already exists" && $response->errors[0]->field == "from_email"){
114                    $result = TblUsers::create($sData);
115                    return response(['message' => 'OK', 'data' => $data, 'is_verified' => 'yes']);
116                }
117
118                $errMessage = @$response->errors[0]->field . ': ' . @$response->errors[0]->message;
119                return response(['message' => 'KO', 'error' => $errMessage]);
120            }else{
121                $isVerified = "no";
122
123                $u = TblUsers::where('id', $result->id)->first();
124
125                if($u->verified == 1){
126                    $isVerified = "yes";
127                }
128
129                return response(['message' => 'OK', 'data' => $response, 'is_verified' => $isVerified]);
130            }
131
132        // } catch (\Exception $e) {
133        //     return response(['message' => 'KO', 'error' => $e->getMessage()]);
134        // }
135    }
136
137    public function get_users($companyId = null){
138
139        try {
140
141            $column = "";
142
143            if($companyId != null){
144                $column = "(SELECT id FROM tbl_company_users WHERE user_id = a.id AND company_id = {$companyId}) user,";
145            }
146
147            $query = "SELECT
148                        a.id,
149                        a.name,
150                        a.email,
151                        DATE_FORMAT(a.created_at, '%b %d, %Y %l:%i%p') 'created_at',
152                        a.created_by,
153                        DATE_FORMAT(a.created_at, '%b %d, %Y %l:%i%p') 'updated_at',
154                        a.updated_by,
155                        a.sender_email,
156                        a.sender_enabled,
157                        a.is_itv,
158                        a.verified,
159                        {$column}
160                        a.default
161                    FROM tbl_users a
162                    ORDER BY a.name ASC";
163
164            $result = DB::select($query);
165
166            return response(['message' => 'OK', 'data' => $result]);
167
168        } catch (\Exception $e) {
169            /** @disregard P1014 */
170            $e->exceptionCode = 'GET_USERS_EXCEPTION'; 
171            report($e);
172            return response(['message' => 'KO', 'error' => $e->getMessage()]);
173        }
174    }
175
176    public function get_user($id){
177
178        try {
179
180            $id = addslashes($id);
181
182            $e = TblUsers::where('id', $id)->first();
183
184            $sendgrid = new \SendGrid(env('SENDGRID_API_KEY','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'));
185
186            $response = $sendgrid->client->verified_senders()->get(null, [
187                'limit' => 1000,
188                'offset' => 0
189            ]);
190
191            if ($response->statusCode() == 200) {
192                $x = json_decode($response->body())->results;
193
194                foreach ($x as $item) {
195                    if($item->from_email == $e->sender_email){
196                        TblUsers::where('sender_email', $item->from_email)->update(array(
197                            'verified' => $item->verified,
198                            'response_id' => $item->id
199                        ));
200                        break;
201                    }
202                }
203            }
204
205            $query = "SELECT
206                        a.id,
207                        a.name,
208                        a.email,
209                        a.created_at,
210                        a.created_by,
211                        a.updated_at,
212                        a.updated_by,
213                        a.default,
214                        a.role_id,
215                        b.name 'role',
216                        a.verified,
217                        a.is_itv,
218                        a.sender_email,
219                        a.sender_enabled,
220                        a.G3W_code
221                    FROM tbl_users a
222                    LEFT JOIN tbl_roles b
223                        ON a.role_id = b.role_id
224                    WHERE a.id = {$id}";
225
226            $result = DB::select($query);
227
228            return response(['message' => 'OK', 'data' => $result]);
229
230        } catch (\Exception $e) {
231            /** @disregard P1014 */
232            $e->exceptionCode = 'GET_USER_EXCEPTION'; 
233            report($e);
234            return response(['message' => 'KO', 'error' => $e->getMessage()]);
235        }
236    }
237
238    public function getUserByName($name)
239    {
240        try {
241            $formattedName = str_replace('_', ' ', $name);
242            $user = TblUsers::where('name', $formattedName)->first();
243
244            if (!$user) {
245                return response()->json([
246                    'success' => false,
247                    'message' => 'User not found',
248                ], 404);
249            }
250
251            return response()->json([
252                'success' => true,
253                'data' => $user,
254            ], 200);
255        } catch (\Exception $e) {
256            /** @disregard P1014 */
257            $e->exceptionCode = 'GET_USER_BY_NAME_EXCEPTION'; 
258            report($e);
259            return response()->json([
260                'success' => false,
261                'message' => 'An error occurred',
262                'error' => $e->getMessage(),
263            ], 500);
264        }
265    }
266
267    public function getAllUserNames()
268    {
269        try {
270            $users = TblUsers::pluck('name');
271            return response()->json([
272                'success' => true,
273                'data' => $users,
274            ]);
275        } catch (\Exception $e) {
276            /** @disregard P1014 */
277            $e->exceptionCode = 'GET_ALL_USER_NAMES_EXCEPTION'; 
278            report($e);
279            return response()->json([
280                'success' => false,
281                'message' => 'Error fetching users',
282                'error' => $e->getMessage(),
283            ], 500);
284        }
285    }
286
287
288    public function get_user_by_email(Request $request){
289
290        try {
291
292            $data = $request->all();
293            $where = "";
294
295            if(isset($data['company_id'])){
296                $companyId = addslashes($data['company_id']);
297                $where = " AND c.company_id = {$companyId} ";
298            }
299
300            $query = "SELECT
301                        a.id,
302                        a.name,
303                        a.email,
304                        a.created_at,
305                        a.created_by,
306                        a.updated_at,
307                        a.updated_by,
308                        c.filename,
309                        a.default,
310                        a.role_id,
311                        d.name role,
312                        b.company_id,
313                        c.logo,
314                        c.name company_name,
315                        c.default_page,
316                        b.can_read,
317                        b.can_write,
318                        a.is_loggedin,
319                        c.is_send,
320                        c.limit_send,
321                        c.is_send_follow_up,
322                        c.is_send_request,
323                        c.is_send_g3w,
324                        c.revenue_per_employee_per_day,
325                        c.minimum_margin,
326                        c.general_costs,
327                        c.hours_per_worker_per_day,
328                        c.cost_of_hour,
329                        c.hours_per_worker_per_day_percentage,
330                        c.convert_to_job_amount_limit,
331                        c.last_follow_up_date,
332                        c.limit_reminder_emails,
333                        c.workflow_budget_size,
334                        c.region,
335                        COALESCE(f.approver_id, e.approver_id) AS approver_id,
336                        a.is_itv,
337                        a.G3W_code,
338                        a.api_token
339                    FROM tbl_users a
340                    LEFT JOIN tbl_company_users b
341                        ON a.id = b.user_id AND (b.is_selected = 1 OR b.can_read = 1)
342                    LEFT JOIN tbl_companies c
343                        ON b.company_id = c.company_id
344                    LEFT JOIN tbl_roles d
345                        ON a.role_id = d.role_id
346                    LEFT JOIN tbl_approvers e
347                        ON a.id = e.user_id
348                    LEFT JOIN tbl_approvers_v2 f
349                        ON a.id = f.user_id
350                    WHERE a.email = '{$data['email']}'
351                    {$where}
352                    ORDER BY b.is_selected DESC
353                    LIMIT 1";
354
355            $result = DB::select($query);
356
357            if(isset($data['switch']) && $data['switch'] == 1){
358                $result[0]->is_loggedin = 1;
359            }
360
361            return response(['message' => 'OK', 'data' => $result]);
362
363        } catch (\Exception $e) {
364            /** @disregard P1014 */
365            $e->exceptionCode = 'GET_USER_BY_EMAIL_EXCEPTION'; 
366            report($e);
367            return response(['message' => 'KO', 'error' => $e->getMessage()]);
368        }
369    }
370
371    function add_company_user(Request $request){
372
373        try {
374
375            $data = $request->all();
376            $id = addslashes($data['user_id']);
377
378            if(isset($data['company_ids'])){
379
380                $ids = TblCompanyUsers::where('user_id', $id)->pluck('company_id')->toArray();
381                $companyUsers = array();
382
383                for ($i = 0; $i < count($data['company_ids']); $i++) {
384                    if(!in_array($data['company_ids'][$i], $ids)){
385                        array_push(
386                            $companyUsers,
387                            array(
388                                'user_id' => $id,
389                                'company_id' => $data['company_ids'][$i],
390                                'can_read' => 1,
391                                'can_write' => 0,
392                                'created_by' => $data['created_by']
393                            )
394                        );
395                    }
396                }
397
398                TblCompanyUsers::insert($companyUsers);
399            }
400
401            return response(['message' => 'OK']);
402
403        } catch (\Exception $e) {
404            /** @disregard P1014 */
405            $e->exceptionCode = 'ADD_COMPANY_USER_EXCEPTION'; 
406            report($e);
407            return response(['message' => 'KO', 'error' => $e->getMessage()]);
408        }
409
410    }
411
412    function delete_company_user(Request $request){
413
414        try {
415
416            $data = $request->all();
417            $id = addslashes($data['user_id']);
418            $companyId = addslashes($data['company_id']);
419
420            TblCompanyUsers::where('company_id', $companyId)->where('user_id', $id)->delete();
421
422            return response(['message' => 'OK']);
423
424        } catch (\Exception $e) {
425            /** @disregard P1014 */
426            $e->exceptionCode = 'DELETE_COMPANY_USER_EXCEPTION'; 
427            report($e);
428            return response(['message' => 'KO', 'error' => $e->getMessage()]);
429        }
430
431    }
432
433    public function update_users(Request $request, $id){
434
435        try {
436
437            $data = $request->all();
438            $id = addslashes($id);
439
440            if(!isset($data['is_loggedin'])){
441                $data['is_loggedin'] = 0;
442            }else{
443
444                if($data['is_loggedin'] == 1){
445                    $token = Str::random(60);
446                    $data['api_token'] = $token;
447                    $data['token_expires_at'] = Carbon::now()->addHours(72);
448                } else {
449                    $data['api_token'] = null;
450                    $data['token_expires_at'] = null;
451                }
452
453                $result = TblUsers::where('id', $id)->update($data);
454                return response(['message' => 'OK', 'data' => $data]);
455            }
456
457            $sData = array(
458                'name' => $data['name'],
459                'email' => $data['email'],
460                'role_id' => $data['role_id'],
461                'updated_by' => $data['updated_by'],
462                'sender_email' => $data['sender_email'],
463                'G3W_code' => $data['G3W_code'],
464                'sender_enabled' => @$data['sender_enabled']
465            );
466
467            if(isset($data['email'])){
468                $email = TblUsers::where('email', $data['email'])->first();
469
470                if($email != null && $id != $email->id){
471                    return response(['message' => 'KO', 'error' => __('language.email_already_exist')]);
472                }
473            }
474
475            $sData['updated_at'] = date('Y-m-d H:i:s');
476
477            $u = TblUsers::where('id', $id)->first();
478
479            if(isset($data['name'])){
480                TblQuotations::where('commercial', $u->name)->update(
481                    array(
482                        'commercial' => $data['name'],
483                    )
484                );
485
486                TblQuotations::where('created_by', $u->name)->update(
487                    array(
488                        'created_by' => $data['name'],
489                    )
490                );
491
492                TblQuotations::where('updated_by', $u->name)->update(
493                    array(
494                        'updated_by' => $data['name'],
495                    )
496                );
497
498                TblOngoingJobs::where('responsible_for_work', $u->name)->update(
499                    array(
500                        'responsible_for_work' => $data['name'],
501                    )
502                );
503
504                TblOngoingJobs::where('created_by', $u->name)->update(
505                    array(
506                        'created_by' => $data['name'],
507                    )
508                );
509
510                TblOngoingJobs::where('updated_by', $u->name)->update(
511                    array(
512                        'updated_by' => $data['name'],
513                    )
514                );
515            }
516
517            $sendgrid = new \SendGrid(env('SENDGRID_API_KEY','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'));
518            $data['address'] = "Madrid";
519            $data['city'] = "Madrid";
520            $data['country'] = "Spain";
521            $data['nickname'] = $data['name'] . "-" . base64_encode($data['name'] . date('ymdhis'));;
522            $data['from_name'] = $data['name'];
523            $data['from_email'] = $data['sender_email'];
524            $data['reply_to'] = $data['sender_email'];
525            $data['reply_to_name'] = $data['name'];
526            $requestBody = $data;
527            $error  = false;
528            $response = array();
529
530            if($u->response_id && $u->sender_email == $data['sender_email']){
531                $response = $sendgrid->client->verified_senders()->_($u->response_id)->patch($requestBody);
532            }else{
533                $requestBody['nickname'] = $data['name'] . "-" . base64_encode($data['name'] . date('ymdhis'));
534                $response = $sendgrid->client->verified_senders()->post($requestBody);
535            }
536
537            $x = json_decode($response->body());
538
539            if ($response->statusCode() == 200 || is_numeric(@$x->id)) {
540                $sData['response_id'] = $x->id;
541                $result = TblUsers::where('id', $id)->update($sData);
542                Log::channel('email_log')->info('USER EMAIL: ' . $data['sender_email'] . ' - VERIFICATION SENT');
543            } else {
544                $error = true;
545                Log::channel('email_log')->error('REQUEST BODY USER: - ' . $response->body());
546            }
547
548            $response = json_decode($response->body());
549
550            if($error){
551                if($response->errors[0]->message == "already exists" && $response->errors[0]->field == "from_email"){
552                    TblUsers::where('id', $id)->update($sData);
553                    return response(['message' => 'OK', 'data' => $data, 'is_verified' => 'yes']);
554                }
555
556                $errMessage = @$response->errors[0]->field . ': ' . @$response->errors[0]->message;
557                return response(['message' => 'KO', 'error' => $errMessage]);
558            }else{
559                $isVerified = "no";
560
561                if($response->verified){
562                    $isVerified = "yes";
563                }
564
565                return response(['message' => 'OK', 'data' => $response, 'is_verified' => $isVerified]);
566            }
567
568        } catch (\Exception $e) {
569            /** @disregard P1014 */
570            $e->exceptionCode = 'UPDATE_USER_EXCEPTION'; 
571            report($e);
572            return response(['message' => 'KO', 'error' => $e->getMessage()]);
573        }
574    }
575
576    public function delete_users($id){
577
578        try {
579
580            $id = addslashes($id);
581
582            $user = TblUsers::where('id', $id)->first();
583
584            $count = TblQuotations::where('commercial', $user->name)->where('company_id', '>', 0)->count();
585            $countQ = TblOngoingJobs::where('responsible_for_work', $user->name)->where('company_id', '>', 0)->count();
586
587            if($count > 0 || $countQ > 0){
588                $urlOrder = env('URL') . "orders?commercial={$user->name}&company_id=0";
589                $urlJob = env('URL') . "ongoing-jobs?responsible_for_work={$user->name}&company_id=0";
590                $urlOrder = "<a href='{$urlOrder}' target='_blank'>{$count}</a>";
591                $urlJob = "<a href='{$urlJob}' target='_blank'>{$countQ}</a>";
592                return response(['message' => 'user_cannot_be_deleted', 'error' => __('language.user_cannot_be_deleted'), 'total_job' => $urlJob, 'total_order' => $urlOrder]);
593            }
594
595            $count = TblQuotations::where('created_by', $user->name)->count();
596
597            if($count > 0){
598                $query = "UPDATE tbl_quotations SET created_by = 'Fire Service Titan' WHERE created_by = '{$user->name}'";
599                DB::select($query);
600            }
601
602            $count = TblOngoingJobs::where('created_by', $user->name)->count();
603
604            if($count > 0){
605                $query = "UPDATE tbl_ongoing_jobs SET created_by = 'Fire Service Titan' WHERE created_by = '{$user->name}'";
606                DB::select($query);
607            }
608
609            $result = TblUsers::where('id', $id)->delete();
610            TblCompanyUsers::where('user_id', $id)->delete();
611
612            return response(['message' => 'OK', 'data' => $result]);
613
614        } catch (\Exception $e) {
615            /** @disregard P1014 */
616            $e->exceptionCode = 'DELETE_USER_EXCEPTION'; 
617            report($e);
618            return response(['message' => 'KO', 'error' => $e->getMessage()]);
619        }
620    }
621
622    function get_roles(){
623
624        try {
625
626            $result = TblRoles::get();
627
628            return response(['message' => 'OK', 'data' => $result]);
629
630        } catch (\Exception $e) {
631            /** @disregard P1014 */
632            $e->exceptionCode = 'GET_ROLES_EXCEPTION'; 
633            report($e);
634            return response(['message' => 'KO', 'error' => $e->getMessage()]);
635        }
636    }
637
638    function get_all_commercials(Request $request){
639
640        try {
641
642            $data = $request->all();
643
644            $companyIds = implode(',', $data['company_ids']);
645
646            $query = "SELECT
647                    b.name
648                FROM
649                    tbl_company_users a
650                    LEFT JOIN tbl_users b ON a.user_id = b.id
651                WHERE
652                    a.company_id IN ({$companyIds})
653                GROUP BY
654                    a.user_id
655                HAVING
656                    COUNT(DISTINCT a.company_id) = (
657                    SELECT
658                        COUNT(DISTINCT company_id)
659                    FROM
660                        tbl_company_users
661                    WHERE
662                        company_id IN ({$companyIds})
663                    )";
664
665            $result = DB::select($query);
666
667            return response(['message' => 'OK', 'data' => $result]);
668
669        } catch (\Exception $e) {
670            /** @disregard P1014 */
671            $e->exceptionCode = 'GET_ALL_COMMERCIALS_EXCEPTION'; 
672            report($e);
673            return response(['message' => 'KO', 'error' => $e->getMessage()]);
674        }
675
676    }
677
678    function get_g3w_warning_fields($companyId){
679
680        try {
681
682            $companyId = addslashes($companyId);
683
684            $where = "";
685
686            if($companyId != 0){
687                $where = "WHERE company_id = {$companyId} ";
688            }else{
689                $where = "WHERE company_id IN ({$this->companyId}";
690            }
691
692            $query = "SELECT
693                        DISTINCT g3w_warning_fields
694                    FROM
695                        tbl_quotations
696                    {$where}
697                    ORDER BY
698                        g3w_warning_fields ASC";
699
700            $value = Cache::get(base64_encode($query));
701
702            if(!$value){
703                $result = DB::select($query);
704
705                $g3wWarningFields = array_map(function ($row) {
706                    return $row->g3w_warning_fields;
707                }, $result);
708
709                Cache::put(base64_encode($query), $g3wWarningFields, 600);
710            }else{
711                $g3wWarningFields = $value;
712            }
713
714            return response([
715                'message' => 'OK',
716                'g3wWarningFields' => $g3wWarningFields
717            ]);
718
719
720        } catch (\Exception $e) {
721            /** @disregard P1014 */
722            $e->exceptionCode = 'GET_G3W_WARNING_FIELDS_EXCEPTION'; 
723            report($e);
724            return response(['message' => 'KO', 'error' => $e->getMessage()]);
725        }
726    }
727
728    function get_created_by($companyId){
729
730        try {
731
732            $companyId = addslashes($companyId);
733
734            $where = "";
735
736            if($companyId != 0){
737                $where = "WHERE company_id = {$companyId} ";
738            }else{
739                $where = "WHERE company_id IN ({$this->companyId}";
740            }
741
742            $query = "SELECT
743                        DISTINCT created_by
744                    FROM
745                        tbl_quotations
746                    {$where}
747                    ORDER BY
748                        created_by ASC";
749
750            $value = Cache::get(base64_encode($query));
751
752            if(!$value){
753                $result = DB::select($query);
754
755                $createdBy = array_map(function ($row) {
756                    return $row->created_by;
757                }, $result);
758
759                Cache::put(base64_encode($query), $createdBy, 600);
760            }else{
761                $createdBy = $value;
762            }
763
764            return response([
765                'message' => 'OK',
766                'createdBy' => $createdBy
767            ]);
768
769        } catch (\Exception $e) {
770            /** @disregard P1014 */
771            $e->exceptionCode = 'GET_CREATED_BY_EXCEPTION'; 
772            report($e);
773            return response(['message' => 'KO', 'error' => $e->getMessage()]);
774        }
775    }
776
777    function get_commercial_with_pendings($companyId){
778
779        try {
780
781            $companyId = addslashes($companyId);
782
783            $where = "";
784
785            if($companyId != 0){
786                $where = "WHERE company_id = {$companyId} ";
787            }else{
788                $where = "WHERE company_id IN ({$this->companyId}";
789            }
790
791            $query = "SELECT
792                        b.id userId,
793                        b.name commercial,
794                        a.total_error totalError,
795                        a.total_pending_follow_ups totalPendingFollowUps,
796                        a.total_request_and_visits totalRequestAndVisit,
797                        a.total_g3w_error totalG3WError
798                    FROM
799                        tbl_company_users a
800                    LEFT JOIN tbl_users b
801                        ON a.user_id = b.id
802                    {$where}
803                    ORDER BY
804                        b.name ASC";
805
806            $value = Cache::get(base64_encode($query));
807
808            if(!$value){
809                $commercial = DB::select($query);
810
811                Cache::put(base64_encode($query), $commercial, 600);
812            }else{
813                $commercial = $value;
814            }
815
816            return response([
817                'message' => 'OK',
818                'commercialWithPendings' => $commercial
819            ]);
820
821        } catch (\Exception $e) {
822            /** @disregard P1014 */
823            $e->exceptionCode = 'GET_COMMERCIAL_WITH_PENDINGS_EXCEPTION'; 
824            report($e);
825            return response(['message' => 'KO', 'error' => $e->getMessage()]);
826        }
827    }
828
829    function get_responsible_for_work($companyId){
830
831        try {
832
833            $companyId = addslashes($companyId);
834
835            $where = "";
836
837            if($companyId != 0){
838                $where = "WHERE company_id = {$companyId} ";
839            }else{
840                $where = "WHERE company_id IN ({$this->companyId}";
841            }
842
843            $query = "SELECT
844                        DISTINCT responsible_for_work
845                    FROM
846                        tbl_ongoing_jobs
847                    {$where}
848                    ORDER BY
849                    responsible_for_work ASC";
850
851            $value = Cache::get(base64_encode($query));
852
853            if(!$value){
854                $result = DB::select($query);
855
856                $responsibleForWork = array_map(function ($row) {
857                    return $row->responsible_for_work;
858                }, $result);
859
860                Cache::put(base64_encode($query), $responsibleForWork, 600);
861            }else{
862                $responsibleForWork = $value;
863            }
864
865            return response([
866                'message' => 'OK',
867                'responsibleForWork' => $responsibleForWork,
868            ]);
869
870        } catch (\Exception $e) {
871            /** @disregard P1014 */
872            $e->exceptionCode = 'GET_RESPONSIBLE_FOR_WORK_EXCEPTION'; 
873            report($e);
874            return response(['message' => 'KO', 'error' => $e->getMessage()]);
875        }
876
877    }
878
879    function get_job_created_by($companyId){
880
881        try {
882
883            $companyId = addslashes($companyId);
884
885            $where = "";
886
887            if($companyId != 0){
888                $where = "WHERE company_id = {$companyId} ";
889            }else{
890                $where = "WHERE company_id IN ({$this->companyId}";
891            }
892
893            $query = "SELECT
894                        DISTINCT created_by
895                    FROM
896                        tbl_ongoing_jobs
897                    {$where}
898                    ORDER BY
899                    created_by ASC";
900
901            $value = Cache::get(base64_encode($query));
902
903            if(!$value){
904                $result = DB::select($query);
905
906                $jobCreatedBy = array_map(function ($row) {
907                    return $row->created_by;
908                }, $result);
909
910                Cache::put(base64_encode($query), $jobCreatedBy, 600);
911            }else{
912                $jobCreatedBy = $value;
913            }
914
915            return response([
916                'message' => 'OK',
917                'jobCreatedBy' => $jobCreatedBy,
918            ]);
919
920        } catch (\Exception $e) {
921            /** @disregard P1014 */
922            $e->exceptionCode = 'GET_JOB_CREATED_BY_EXCEPTION'; 
923            report($e);
924            return response(['message' => 'KO', 'error' => $e->getMessage()]);
925        }
926    }
927
928    function get_accepted_by($companyId){
929
930        try {
931
932            $companyId = addslashes($companyId);
933
934            $where = "";
935
936            if($companyId != 0){
937                $where = "WHERE company_id = {$companyId} ";
938            }else{
939                $where = "WHERE company_id IN ({$this->companyId}";
940            }
941
942            $query = "SELECT
943                        DISTINCT accepted_by
944                    FROM
945                        tbl_quotations
946                    {$where}
947                    ORDER BY
948                        accepted_by ASC";
949
950            $value = Cache::get(base64_encode($query));
951
952            if(!$value){
953                $result = DB::select($query);
954
955                $acceptedBy = array_map(function ($row) {
956                    return $row->accepted_by;
957                }, $result);
958
959                Cache::put(base64_encode($query), $acceptedBy, 600);
960            }else{
961                $acceptedBy = $value;
962            }
963
964            return response([
965                'message' => 'OK',
966                'acceptedBy' => $acceptedBy,
967            ]);
968
969        } catch (\Exception $e) {
970            /** @disregard P1014 */
971            $e->exceptionCode = 'GET_ACCEPTED_BY_EXCEPTION'; 
972            report($e);
973            return response(['message' => 'KO', 'error' => $e->getMessage()]);
974        }
975    }
976
977
978    function get_commercials($companyId){
979
980        try {
981
982            $companyId = addslashes($companyId);
983
984            $where = "";
985
986            if($companyId != 0){
987                $where = "WHERE company_id = {$companyId} ";
988            }else{
989                $where = "WHERE company_id IN ({$this->companyId}";
990            }
991
992            $query = "SELECT
993                        DISTINCT commercial
994                    FROM
995                        tbl_quotations
996                    {$where}
997                    ORDER BY
998                        commercial ASC";
999
1000            $value = Cache::get(base64_encode($query));
1001
1002            if(!$value){
1003                $result = DB::select($query);
1004
1005                $commercials = array_map(function ($row) {
1006                    return $row->commercial;
1007                }, $result);
1008
1009                Cache::put(base64_encode($query), $commercials, 600);
1010            }else{
1011                $commercials = $value;
1012            }
1013
1014            return response([
1015                'message' => 'OK',
1016                'commercials' => $commercials,
1017            ]);
1018
1019        } catch (\Exception $e) {
1020            /** @disregard P1014 */
1021            $e->exceptionCode = 'GET_COMMERCIALS_EXCEPTION'; 
1022            report($e);
1023            return response(['message' => 'KO', 'error' => $e->getMessage()]);
1024        }
1025    }
1026
1027    function update_users_itv(Request $request){
1028
1029        try {
1030
1031            $data = $request->all();
1032
1033            if(isset($data['user_ids'])){
1034                TblUsers::query()->update(['is_itv' => null]);
1035                for ($i = 0; $i < count($data['user_ids']); $i++) {
1036                    TblUsers::where('id', $data['user_ids'][$i])->update(array('is_itv' => 1));
1037                }
1038            }
1039
1040            return response(['message' => 'OK']);
1041
1042        } catch (\Exception $e) {
1043            /** @disregard P1014 */
1044            $e->exceptionCode = 'UPDATE_USERS_ITV_EXCEPTION'; 
1045            report($e);
1046            return response(['message' => 'KO', 'error' => $e->getMessage()]);
1047        }
1048
1049    }
1050
1051    function list_roles(){
1052
1053        try {
1054
1055            $result = TblRoles::get();
1056
1057            return response(['message' => 'OK', 'data' => $result]);
1058
1059        } catch (\Exception $e) {
1060            /** @disregard P1014 */
1061            $e->exceptionCode = 'LIST_ROLES_EXCEPTION'; 
1062            report($e);
1063            return response(['message' => 'KO', 'error' => $e->getMessage()]);
1064        }
1065
1066    }
1067
1068    function update_role(Request $request){
1069
1070        try {
1071
1072            $data = $request->all();
1073
1074            foreach ($data as $item) {
1075                $id = $item['role_id'];
1076                unset($item['role_id']);
1077
1078                $item['updated_at'] = date('Y-m-d H:i:s');
1079                TblRoles::where('role_id', $id)->update($item);
1080            }
1081
1082            $result = TblRoles::get();
1083
1084            return response(['message' => 'OK', 'data' => $result]);
1085
1086        } catch (\Exception $e) {
1087            /** @disregard P1014 */
1088            $e->exceptionCode = 'UPDATE_ROLE_EXCEPTION'; 
1089            report($e);
1090            return response(['message' => 'KO', 'error' => $e->getMessage()]);
1091        }
1092    }
1093
1094    function delete_role($id){
1095
1096        try {
1097
1098            $id = addslashes($id);
1099
1100            TblRoles::where('role_id', $id)->delete();
1101
1102            $result = TblRoles::get();
1103
1104            return response(['message' => 'OK', 'data' => $result]);
1105
1106        } catch (\Exception $e) {
1107            /** @disregard P1014 */
1108            $e->exceptionCode = 'DELETE_ROLE_EXCEPTION'; 
1109            report($e);
1110            return response(['message' => 'KO', 'error' => $e->getMessage()]);
1111        }
1112    }
1113}