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

ClientController::search()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
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