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