Completed
Push — development ( c0476d...f313ce )
by Ashutosh
08:43
created

ClientController::advanceSearch()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 15
rs 9.9666
c 0
b 0
f 0
cc 1
nc 1
nop 11

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace App\Http\Controllers\User;
4
5
use App\Http\Requests\User\ClientRequest;
6
use App\Model\Order\Invoice;
7
use App\Model\Order\Order;
8
use App\Model\Order\Payment;
9
use App\Model\User\AccountActivate;
10
use App\User;
11
use Bugsnag;
12
use DB;
13
use Illuminate\Http\Request;
14
use Log;
15
16
class ClientController extends AdvanceSearchController
17
{
18
    public $user;
19
    public $activate;
20
    public $product;
21
22
    public function __construct()
23
    {
24
        $this->middleware('auth');
25
        // $this->middleware('admin');
26
        $user = new User();
27
        $this->user = $user;
28
        $activate = new AccountActivate();
29
        $this->activate = $activate;
30
        $product = new \App\Model\Product\Product();
31
        $this->product = $product;
32
    }
33
34
    /**
35
     * Display a listing of the resource.
36
     *
37
     * @return \Response
38
     */
39
    public function index(Request $request)
40
    {
41
        $name = $request->input('name');
42
        $username = $request->input('username');
43
        $company = $request->input('company');
44
        $mobile = $request->input('mobile');
45
        $email = $request->input('email');
46
        $country = $request->input('country');
47
        $industry = $request->input('industry');
48
        $company_type = $request->input('company_type');
49
        $company_size = $request->input('company_size');
50
        $role = $request->input('role');
51
        $position = $request->input('position');
52
53
        return view('themes.default1.user.client.index',
54
            compact('name', 'username', 'company', 'mobile', 'email',
55
                'country', 'industry', 'company_type', 'company_size', 'role', 'position'));
56
    }
57
58
    /**
59
     * Get Clients for chumper datatable.
60
     */
61
    public function getClients(Request $request)
62
    {
63
        $name = $request->input('name');
64
        $username = $request->input('username');
65
        $company = $request->input('company');
66
        $mobile = $request->input('mobile');
67
        $email = $request->input('email');
68
        $country = $request->input('country');
69
        $industry = $request->input('industry');
70
        $company_type = $request->input('company_type');
71
        $company_size = $request->input('company_size');
72
        $role = $request->input('role');
73
        $position = $request->input('position');
74
75
        $user = $this->advanceSearch($name, $username, $company,
76
         $mobile, $email, $country, $industry, $company_type, $company_size, $role, $position);
77
78
        return\ DataTables::of($user->take(50)->get())
79
                        ->setTotalRecords($user->count())
80
                        ->addColumn('checkbox', function ($model) {
81
                            return "<input type='checkbox' class='user_checkbox' 
82
                            value=".$model->id.' name=select[] id=check>';
83
                        })
84
                        ->addColumn('first_name', function ($model) {
85
                            return '<a href='.url('clients/'.$model->id).'>'
86
                            .ucfirst($model->first_name).' '.ucfirst($model->last_name).'</a>';
87
                        })
88
                         ->addColumn('email', function ($model) {
89
                             return $model->email;
90
                         })
91
                          ->addColumn('created_at', function ($model) {
92
                              $ends = $model->created_at;
93
                              if ($ends) {
94
                                  $date = date_create($ends);
95
                                  $end = date_format($date, 'l, F j, Y H:m');
96
                              }
97
98
                              return $end;
99
                          })
100
                        // ->showColumns('email', 'created_at')
101
                        ->addColumn('active', function ($model) {
102
                            if ($model->active == 1) {
103
                                $email = "<span class='glyphicon glyphicon-envelope'
104
                                 style='color:green' title='verified email'></span>";
105
                            } else {
106
                                $email = "<span class='glyphicon glyphicon-envelope'
107
                                 style='color:red' title='unverified email'></span>";
108
                            }
109
                            if ($model->mobile_verified == 1) {
110
                                $mobile = "<span class='glyphicon glyphicon-phone' 
111
                                style='color:green' title='verified mobile'></span>";
112
                            } else {
113
                                $mobile = "<span class='glyphicon glyphicon-phone'
114
                                 style='color:red' title='unverified mobile'></span>";
115
                            }
116
117
                            return $email.'&nbsp;&nbsp;'.$mobile;
118
                        })
119
                        ->addColumn('action', function ($model) {
120
                            return '<a href='.url('clients/'.$model->id.'/edit')
121
                            ." class='btn btn-sm btn-primary btn-xs'>
122
                            <i class='fa fa-edit' style='color:white;'> </i>&nbsp;&nbsp;Edit</a>"
123
                                    .'  <a href='.url('clients/'.$model->id)
124
                                    ." class='btn btn-sm btn-primary btn-xs'>
125
                                    <i class='fa fa-eye' style='color:white;'> </i>&nbsp;&nbsp;View</a>";
126
                            // return 'hhhh';
127
                        })
128
                        ->rawColumns(['checkbox', 'first_name', 'email',  'created_at', 'active', 'action'])
129
                        ->make(true);
130
131
        // ->searchColumns('email', 'first_name')
132
                        // ->orderColumns('email', 'first_name', 'created_at')
133
                        // ->make();
134
    }
135
136
    /**
137
     * Show the form for creating a new resource.
138
     *
139
     * @return \Response
140
     */
141
    public function create()
142
    {
143
        $timezones = new \App\Model\Common\Timezone();
144
        $timezones = $timezones->pluck('name', 'id')->toArray();
145
        $bussinesses = \App\Model\Common\Bussiness::pluck('name', 'short')->toArray();
146
        $managers = User::where('role', 'admin')->where('position', 'manager')->pluck('first_name', 'id')->toArray();
147
148
        return view('themes.default1.user.client.create', compact('timezones', 'bussinesses', 'managers'));
149
    }
150
151
    /**
152
     * Store a newly created resource in storage.
153
     *
154
     * @return \Response
155
     */
156
    public function store(ClientRequest $request)
157
    {
158
        try {
159
            $user = $this->user;
160
            $str = str_random(6);
161
            $password = \Hash::make($str);
162
            $user->password = $password;
163
            $user->fill($request->input())->save();
164
            $this->sendWelcomeMail($user);
165
166
            return redirect()->back()->with('success', \Lang::get('message.saved-successfully'));
167
        } catch (\Swift_TransportException $e) {
168
            return redirect()->back()->with('warning', 'User has created successfully
169
             But email configuration has some problem!');
170
        } catch (\Exception $e) {
171
            return redirect()->back()->with('fails', $e->getMessage());
172
        }
173
    }
174
175
    /**
176
     * Display the specified resource.
177
     *
178
     * @param int $id
179
     *
180
     * @return \Response
181
     */
182
    public function show($id)
183
    {
184
        try {
185
            $invoice = new Invoice();
186
            $order = new Order();
187
            $invoices = $invoice->where('user_id', $id)->orderBy('created_at', 'desc')->get();
188
            $invoiceSum = $this->getTotalInvoice($invoices);
189
            $amountReceived = $this->getAmountPaid($id);
190
            $pendingAmount = $invoiceSum - $amountReceived;
191
            $client = $this->user->where('id', $id)->first();
192
            $currency = $client->currency;
193
            $orders = $order->where('client', $id)->get();
194
            //dd($client);
195
196
            return view('themes.default1.user.client.show',
197
                compact('id', 'client', 'invoices', 'model_popup', 'orders',
198
                 'payments', 'invoiceSum', 'amountReceived', 'pendingAmount', 'currency'));
199
        } catch (\Exception $ex) {
200
            app('log')->useDailyFiles(storage_path().'/logs/laravel.log');
201
            app('log')->info($ex->getMessage());
202
            Bugsnag::notifyException($ex);
203
204
            return redirect()->back()->with('fails', $ex->getMessage());
205
        }
206
    }
207
208
    /**
209
     * Get total Amount paid for a particular invoice.
210
     */
211
    public function getAmountPaid($userId)
212
    {
213
        try {
214
            $amounts = Payment::where('user_id', $userId)->select('amount')->get();
215
            $paidSum = 0;
216
            foreach ($amounts as $amount) {
217
                $paidSum = $paidSum + $amount->amount;
218
            }
219
220
            return $paidSum;
221
        } catch (\Exception $ex) {
222
            app('log')->useDailyFiles(storage_path().'/logs/laravel.log');
223
            app('log')->info($ex->getMessage());
224
            Bugsnag::notifyException($ex);
225
226
            return redirect()->back()->with('fails', $ex->getMessage());
227
        }
228
    }
229
230
    /**
231
     * Get total of the Invoices for a User.
232
     */
233
    public function getTotalInvoice($invoices)
234
    {
235
        $sum = 0;
236
        foreach ($invoices as $invoice) {
237
            $sum = $sum + $invoice->grand_total;
238
        }
239
240
        return $sum;
241
    }
242
243
    /**
244
     * Show the form for editing the specified resource.
245
     *
246
     * @param int $id
247
     *
248
     * @return \Response
249
     */
250
    public function edit($id)
251
    {
252
        try {
253
            $user = $this->user->where('id', $id)->first();
254
            $timezones = new \App\Model\Common\Timezone();
255
            $timezones = $timezones->pluck('name', 'id')->toArray();
256
257
            $state = \App\Http\Controllers\Front\CartController::getStateByCode($user->state);
258
            $managers = User::where('role', 'admin')
259
            ->where('position', 'manager')
260
            ->pluck('first_name', 'id')->toArray();
261
262
            $states = \App\Http\Controllers\Front\CartController::findStateByRegionId($user->country);
263
264
            $bussinesses = \App\Model\Common\Bussiness::pluck('name', 'short')->toArray();
265
266
            return view('themes.default1.user.client.edit',
267
                compact('bussinesses', 'user', 'timezones', 'state', 'states', 'managers'));
268
        } catch (\Exception $ex) {
269
            app('log')->useDailyFiles(storage_path().'/laravel.log');
270
            app('log')->info($ex->getMessage());
271
272
            return redirect()->back()->with('fails', $ex->getMessage());
273
        }
274
    }
275
276
    /**
277
     * Update the specified resource in storage.
278
     *
279
     * @param int $id
280
     *
281
     * @return \Response
282
     */
283
    public function update($id, ClientRequest $request)
284
    {
285
        $user = $this->user->where('id', $id)->first();
286
287
        $user->fill($request->input())->save();
288
289
        return redirect()->back()->with('success', \Lang::get('message.updated-successfully'));
290
    }
291
292
    /**
293
     * Remove the specified resource from storage.
294
     *
295
     * @param int $id
296
     *
297
     * @return \Response
298
     */
299
    public function destroy(Request $request)
300
    {
301
        $ids = $request->input('select');
302
        if (!empty($ids)) {
303
            foreach ($ids as $id) {
304
                $user = $this->user->where('id', $id)->first();
305
                if ($user) {
306
                    $user->delete();
307
                } else {
308
                    echo "<div class='alert alert-success alert-dismissable'>
309
                    <i class='fa fa-ban'></i>
310
                    <b>"./* @scrutinizer ignore-type */\Lang::get('message.alert').'!</b> '.
311
                    /* @scrutinizer ignore-type */
312
                    \Lang::get('message.success').'
313
                    <button type=button class=close data-dismiss=alert aria-hidden=true>&times;</button>
314
                        './* @scrutinizer ignore-type */\Lang::get('message.no-record').'
315
                </div>';
316
                    //echo \Lang::get('message.no-record') . '  [id=>' . $id . ']';
317
                }
318
            }
319
            echo "<div class='alert alert-success alert-dismissable'>
320
                    <i class='fa fa-ban'></i>
321
                    <b>"./* @scrutinizer ignore-type */\Lang::get('message.alert')
322
                    .'!</b> './* @scrutinizer ignore-type */
323
                    \Lang::get('message.success').'
324
                    <button type=button class=close data-dismiss=alert aria-hidden=true>&times;</button>
325
                        './* @scrutinizer ignore-type */\Lang::get('message.deleted-successfully').'
326
                </div>';
327
        } else {
328
            echo "<div class='alert alert-success alert-dismissable'>
329
                    <i class='fa fa-ban'></i>
330
                    <b>"./* @scrutinizer ignore-type */\Lang::get('message.alert').'!</b> '
331
                    ./* @scrutinizer ignore-type */\Lang::get('message.success').'
332
                    <button type=button class=close data-dismiss=alert aria-hidden=true>&times;</button>
333
                        './* @scrutinizer ignore-type */\Lang::get('message.select-a-row').'
334
                </div>';
335
        }
336
    }
337
338
    public function getUsers(Request $request)
339
    {
340
        $options = $this->user
341
//->where('email','LIKE','%'.$s.'%')
342
                ->select('email AS text', 'id AS value')
343
                ->get(10);
344
345
        return response()->json(compact('options'));
346
    }
347
348
349
    // public function search(Request $request)
350
    // {
351
    //     if($request->ajax())
352
    //     {
353
    //         $output = "";
354
    //         $clients = $this->user->where('email','LIKE','%'.$request->search.'%')->get();
355
    //         if ($clients)
356
    //         {
357
    //             foreach ($clients as $key => $client) {
358
    //                 $output = '<tr>'.
359
    //                           '<td>'.$client->email.'</td>'.
360
    //                           '</tr>';
361
    //             }
362
    //             return response($output);
363
               
364
    //         }else{
365
    //             return response()->json(['no'=>'Not Found']);
366
    //         }
367
    //     }
368
    // }
369
370
    public function search(Request $request)
371
    {
372
        $data = $this->user->select('email as name')->where("email","LIKE","%{$request->input('query')}%")->get();
373
        return response()->json($data); 
374
    }
375
376
377
    public function advanceSearch($name = '', $username = '', $company = '',
378
     $mobile = '', $email = '', $country = '', $industry = '',
379
      $company_type = '', $company_size = '', $role = '', $position = '')
380
    {
381
        $join = new User();
382
        $join = $this->getNamUserCom($join, $name, $username, $company);
383
        $join = $this->getMobEmCoun($join, $mobile, $email, $country);
384
        $join = $this->getInCtCs($join, $industry, $company_type, $company_size);
385
        $join = $this->getRolPos($join, $role, $position);
386
387
        $join = $join->orderBy('created_at', 'desc')
388
        ->select('id', 'first_name', 'last_name', 'email', 'created_at',
389
         'active', 'mobile_verified', 'role', 'position');
390
391
        return $join;
392
    }
393
394
    public function sendWelcomeMail($user)
395
    {
396
        $activate_model = new AccountActivate();
397
        $str = str_random(40);
398
        $activate = $activate_model->create(['email' => $user->email, 'token' => $str]);
399
        $token = $activate->token;
400
        $url = url("activate/$token");
401
        //check in the settings
402
        $settings = new \App\Model\Common\Setting();
403
        $setting = $settings->where('id', 1)->first();
404
        //template
405
        $templates = new \App\Model\Common\Template();
406
        $temp_id = $setting->welcome_mail;
407
        $template = $templates->where('id', $temp_id)->first();
408
        $from = $setting->email;
409
        $to = $user->email;
410
        $subject = $template->name;
411
        $data = $template->data;
412
        $replace = ['name' => $user->first_name.' '.$user->last_name,
413
        'username'         => $user->email, 'password' => $str, 'url' => $url, ];
414
        $type = '';
415
        if ($template) {
416
            $type_id = $template->type;
417
            $temp_type = new \App\Model\Common\TemplateType();
418
            $type = $temp_type->where('id', $type_id)->first()->name;
419
        }
420
        //dd($type);
421
        $templateController = new \App\Http\Controllers\Common\TemplateController();
422
        $mail = $templateController->mailing($from, $to, $data, $subject, $replace, $type);
423
424
        return $mail;
425
    }
426
}
427