Test Setup Failed
Push — development ( 28ee17...46a178 )
by Ashutosh
10:06
created

InvoiceController::createInvoiceItemsByAdmin()   A

Complexity

Conditions 5
Paths 38

Size

Total Lines 47
Code Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 37
dl 0
loc 47
rs 9.0168
c 0
b 0
f 0
cc 5
nc 38
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\Order;
4
5
use App\Http\Controllers\Front\CartController;
6
use App\Model\Common\Setting;
7
use App\Model\Common\Template;
8
use App\Model\Order\Invoice;
9
use App\Model\Order\InvoiceItem;
10
use App\Model\Order\Order;
11
use App\Model\Order\Payment;
12
use App\Model\Payment\Currency;
13
use App\Model\Payment\Plan;
14
use App\Model\Payment\Promotion;
15
use App\Model\Payment\Tax;
16
use App\Model\Payment\TaxByState;
17
use App\Model\Payment\TaxOption;
18
use App\Model\Product\Price;
19
use App\Model\Product\Product;
20
use App\Traits\CoupCodeAndInvoiceSearch;
21
use App\Traits\PaymentsAndInvoices;
22
use App\User;
23
use Bugsnag;
24
use Illuminate\Http\Request;
25
use Input;
26
use Log;
27
28
class InvoiceController extends TaxRatesAndCodeExpiryController
29
{
30
    use  CoupCodeAndInvoiceSearch;
0 ignored issues
show
introduced by
The trait App\Traits\CoupCodeAndInvoiceSearch requires some properties which are not provided by App\Http\Controllers\Order\InvoiceController: $grand_total, $id, $created_at, $type, $value
Loading history...
31
    use  PaymentsAndInvoices;
0 ignored issues
show
introduced by
The trait App\Traits\PaymentsAndInvoices requires some properties which are not provided by App\Http\Controllers\Order\InvoiceController: $grand_total, $first_name, $planPrice, $domain, $amount, $payment_method, $product_quantity, $id, $amt_to_credit, $planRelation, $no_of_agents
Loading history...
32
33
    public $invoice;
34
    public $invoiceItem;
35
    public $user;
36
    public $template;
37
    public $setting;
38
    public $payment;
39
    public $product;
40
    public $price;
41
    public $promotion;
42
    public $currency;
43
    public $tax;
44
    public $tax_option;
45
    public $order;
46
    public $cartController;
47
48
    public function __construct()
49
    {
50
        $this->middleware('auth');
51
        $this->middleware('admin', ['except' => ['pdf']]);
52
53
        $invoice = new Invoice();
54
        $this->invoice = $invoice;
55
56
        $invoiceItem = new InvoiceItem();
57
        $this->invoiceItem = $invoiceItem;
58
59
        $user = new User();
60
        $this->user = $user;
61
62
        $template = new Template();
63
        $this->template = $template;
64
65
        $seting = new Setting();
66
        $this->setting = $seting;
67
68
        $payment = new Payment();
69
        $this->payment = $payment;
70
71
        $product = new Product();
72
        $this->product = $product;
73
74
        $price = new Price();
75
        $this->price = $price;
76
77
        $promotion = new Promotion();
78
        $this->promotion = $promotion;
79
80
        $currency = new Currency();
81
        $this->currency = $currency;
82
83
        $tax = new Tax();
84
        $this->tax = $tax;
85
86
        $tax_option = new TaxOption();
87
        $this->tax_option = $tax_option;
88
89
        $order = new Order();
90
        $this->order = $order;
91
92
        $tax_by_state = new TaxByState();
93
        $this->tax_by_state = new $tax_by_state();
94
95
        $cartController = new CartController();
96
        $this->cartController = $cartController;
97
    }
98
99
    public function index(Request $request)
100
    {
101
        try {
102
            $currencies = Currency::where('status', 1)->pluck('code')->toArray();
103
            $name = $request->input('name');
104
            $invoice_no = $request->input('invoice_no');
105
            $status = $request->input('status');
106
107
            $currency_id = $request->input('currency_id');
108
            $from = $request->input('from');
109
            $till = $request->input('till');
110
111
            return view('themes.default1.invoice.index', compact('name','invoice_no','status','currencies','currency_id','from',
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 120 characters; contains 128 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
112
113
                'till'));
114
        } catch (\Exception $ex) {
115
            Bugsnag::notifyException($ex);
116
117
            return redirect()->back()->with('fails', $ex->getMessage());
118
        }
119
    }
120
121
    public function getInvoices(Request $request)
122
    {
123
        $name = $request->input('name');
124
        $invoice_no = $request->input('invoice_no');
125
        $status = $request->input('status');
126
        $currency = $request->input('currency_id');
127
        $from = $request->input('from');
128
        $till = $request->input('till');
129
        $query = $this->advanceSearch($name, $invoice_no, $currency, $status, $from, $till);
130
131
        return \DataTables::of($query->take(100))
132
         ->setTotalRecords($query->count())
133
134
         ->addColumn('checkbox', function ($model) {
135
             return "<input type='checkbox' class='invoice_checkbox' 
136
                            value=".$model->id.' name=select[] id=check>';
137
         })
138
                        ->addColumn('user_id', function ($model) {
139
                            $first = $this->user->where('id', $model->user_id)->first()->first_name;
140
                            $last = $this->user->where('id', $model->user_id)->first()->last_name;
141
                            $id = $this->user->where('id', $model->user_id)->first()->id;
142
143
                            return '<a href='.url('clients/'.$id).'>'.ucfirst($first).' '.ucfirst($last).'</a>';
144
                        })
145
                         ->addColumn('number', function ($model) {
146
                             return ucfirst($model->number);
147
                         })
148
149
                        ->addColumn('date', function ($model) {
150
                            $date = ($model->created_at);
151
152
                            return $date;
153
                            // return "<span style='display:none'>$model->id</span>".$date->format('l, F j, Y H:m');
154
                        })
155
                         ->addColumn('grand_total', function ($model) {
156
                             return $model->grand_total;
157
                         })
158
                          ->addColumn('status', function ($model) {
159
                              return ucfirst($model->status);
160
                          })
161
162
                        ->addColumn('action', function ($model) {
163
                            $action = '';
164
165
                            $check = $this->checkExecution($model->id);
166
                            if ($check == false) {
167
                                $action = '<a href='.url('order/execute?invoiceid='.$model->id)
168
                                ." class='btn btn-sm btn-primary btn-xs'>
169
                                <i class='fa fa-tasks' style='color:white;'>
170
                                 </i>&nbsp;&nbsp; Execute Order</a>";
171
                            }
172
173
                            return '<a href='.url('invoices/show?invoiceid='.$model->id)
174
                            ." class='btn btn-sm btn-primary btn-xs'><i class='fa fa-eye' 
175
                            style='color:white;'> </i>&nbsp;&nbsp;View</a>"
176
                                    ."   $action";
177
                        })
178
                         ->filterColumn('user_id', function ($query, $keyword) {
179
                             $sql = 'first_name like ?';
180
                             $query->whereRaw($sql, ["%{$keyword}%"]);
181
                         })
182
183
                          ->filterColumn('status', function ($query, $keyword) {
184
                              $sql = 'status like ?';
185
                              $query->whereRaw($sql, ["%{$keyword}%"]);
186
                          })
187
188
                        ->filterColumn('number', function ($query, $keyword) {
189
                            $sql = 'number like ?';
190
                            $query->whereRaw($sql, ["%{$keyword}%"]);
191
                        })
192
                         ->filterColumn('grand_total', function ($query, $keyword) {
193
                             $sql = 'grand_total like ?';
194
                             $query->whereRaw($sql, ["%{$keyword}%"]);
195
                         })
196
                          ->filterColumn('date', function ($query, $keyword) {
197
                              $sql = 'date like ?';
198
                              $query->whereRaw($sql, ["%{$keyword}%"]);
199
                          })
200
201
                         ->rawColumns(['checkbox', 'user_id', 'number', 'date', 'grand_total', 'status', 'action'])
202
                        ->make(true);
203
    }
204
205
    /**
206
     * Shoe Invoice when view Invoice is selected from dropdown in Admin Panel.
207
     *
208
     * @param Request $request Get InvoiceId as Request
209
     */
210
    public function show(Request $request)
211
    {
212
        try {
213
            $id = $request->input('invoiceid');
214
            $invoice = $this->invoice->where('id', $id)->first();
215
            $invoiceItems = $this->invoiceItem->where('invoice_id', $id)->get();
216
            $user = $this->user->find($invoice->user_id);
217
            $currency = CartController::currency($user->id);
218
            $symbol = $currency['symbol'];
219
220
            return view('themes.default1.invoice.show', compact('invoiceItems', 'invoice', 'user', 'currency', 'symbol'));
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 120 characters; contains 122 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
221
        } catch (\Exception $ex) {
222
            app('log')->warning($ex->getMessage());
223
            Bugsnag::notifyException($ex);
224
225
            return redirect()->back()->with('fails', $ex->getMessage());
226
        }
227
    }
228
229
    /**
230
     * not in use case.
231
     *
232
     * @param Request $request
233
     *
234
     * @return type
235
     */
236
    public function generateById(Request $request)
237
    {
238
        try {
239
            $clientid = $request->input('clientid');
240
            $user = new User();
241
            if ($clientid) {
242
                $user = $user->where('id', $clientid)->first();
243
                if (!$user) {
244
                    return redirect()->back()->with('fails', 'Invalid user');
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->back(...fails', 'Invalid user') also could return the type Illuminate\Http\Redirect...nate\Routing\Redirector which is incompatible with the documented return type App\Http\Controllers\Order\type.
Loading history...
245
                }
246
            } else {
247
                $user = '';
248
            }
249
            $products = $this->product->where('id', '!=', 1)->pluck('name', 'id')->toArray();
250
            $currency = $this->currency->pluck('name', 'code')->toArray();
251
252
            return view('themes.default1.invoice.generate', compact('user', 'products', 'currency'));
253
        } catch (\Exception $ex) {
254
            app('log')->info($ex->getMessage());
255
            Bugsnag::notifyException($ex);
256
257
            return redirect()->back()->with('fails', $ex->getMessage());
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->back(...ls', $ex->getMessage()) also could return the type Illuminate\Http\Redirect...nate\Routing\Redirector which is incompatible with the documented return type App\Http\Controllers\Order\type.
Loading history...
258
        }
259
    }
260
261
    /**
262
     * Generate invoice.
263
     *
264
     * @throws \Exception
265
     */
266
    public function generateInvoice()
267
    {
268
        try {
269
            $sessionValue = $this->getCodeFromSession();
270
            $code = $sessionValue['code'];
271
            $codeValue = $sessionValue['codevalue'];
272
            $tax_rule = new \App\Model\Payment\TaxOption();
273
            $rule = $tax_rule->findOrFail(1);
274
            $rounding = $rule->rounding;
275
            $user_id = \Auth::user()->id;
276
            if (\Auth::user()->currency == 'INR') {
277
                $grand_total = \Cart::getSubTotal();
278
            } else {
279
                foreach (\Cart::getContent() as $cart) {
280
                    $grand_total = \Cart::getSubTotal();
281
                }
282
            }
283
            $number = rand(11111111, 99999999);
284
            $date = \Carbon\Carbon::now();
285
            if ($rounding == 1) {
286
                $grand_total = round($grand_total);
287
            }
288
            $content = \Cart::getContent();
289
            $attributes = [];
290
            foreach ($content as $key => $item) {
291
                $attributes[] = $item->attributes;
292
            }
293
294
            $symbol = $attributes[0]['currency']['symbol'];
295
            $invoice = $this->invoice->create(['user_id' => $user_id, 'number' => $number,
296
             'date'                                      => $date, 'discount'=>$codevalue, 'grand_total' => $grand_total, 'coupon_code'=>$code, 'status' => 'pending',
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $codevalue does not exist. Did you maybe mean $codeValue?
Loading history...
Coding Style introduced by
This line exceeds maximum limit of 120 characters; contains 166 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
297
             'currency'                                  => \Auth::user()->currency, ]);
298
            foreach (\Cart::getContent() as $cart) {
299
                $this->createInvoiceItems($invoice->id, $cart, $codevalue);
300
            }
301
            $this->sendMail($user_id, $invoice->id);
302
303
            return $invoice;
304
        } catch (\Exception $ex) {
305
            app('log')->error($ex->getMessage());
306
            Bugsnag::notifyException($ex);
307
308
            throw new \Exception('Can not Generate Invoice');
309
        }
310
    }
311
312
313
    public function createInvoiceItems($invoiceid, $cart, $codevalue = '')
314
    {
315
        try {
316
            $planid = 0;
317
            $product_name = $cart->name;
318
            $regular_price = $cart->price;
319
            $quantity = $cart->quantity;
320
            $agents = $cart->attributes->agents;
321
            $domain = $this->domain($cart->id);
322
            $cart_cont = new \App\Http\Controllers\Front\CartController();
323
            if ($cart_cont->checkPlanSession() === true) {
324
                $planid = \Session::get('plan');
325
            }
326
            if ($planid == 0) {
327
                //When Product is added from Faveo Website
328
                $planid = Plan::where('product', $cart->id)->pluck('id')->first();
329
            }
330
            $user_currency = \Auth::user()->currency;
331
            $subtotal = $this->getSubtotal($user_currency, $cart);
332
333
            $tax_name = '';
334
            $tax_percentage = '';
335
336
            foreach ($cart->attributes['tax'] as $tax) {
337
                $tax_name .= $tax['name'].',';
338
                $tax_percentage .= $tax['rate'].',';
339
            }
340
            $invoiceItem = $this->invoiceItem->create([
341
                'invoice_id'     => $invoiceid,
342
                'product_name'   => $product_name,
343
                'regular_price'  => $regular_price,
344
                'quantity'       => $quantity,
345
                'tax_name'       => $tax_name,
346
                'discount'       => $codevalue,
347
                'tax_percentage' => $tax_percentage,
348
                'subtotal'       => $subtotal,
349
                'domain'         => $domain,
350
                'plan_id'        => $planid,
351
                'agents'         => $agents,
352
            ]);
353
354
            return $invoiceItem;
355
        } catch (\Exception $ex) {
356
            Bugsnag::notifyException($ex->getMessage());
357
358
            throw new \Exception('Can not create Invoice Items');
359
        }
360
    }
361
362
    public function invoiceGenerateByForm(Request $request, $user_id = '')
363
    {
364
        $this->validate($request, [
365
366
                'plan'      => 'required_if:subscription,true',
367
                'price'     => 'required',
368
            ], [
369
                'plan.required_if' => 'Select a Plan',
370
            ]);
371
372
        try {
373
            $agents = $request->input('agents');
374
            $status = 'pending';
375
            $qty = $request->input('quantity');
376
            if ($user_id == '') {
377
                $user_id = \Request::input('user');
378
            }
379
            $productid = $request->input('product');
380
381
            $plan = $request->input('plan');
382
            $agents = $this->getAgents($agents, $productid, $plan);
383
            $qty = $this->getQuantity($qty, $productid, $plan);
384
385
            $code = $request->input('code');
386
            $total = $request->input('price');
387
            $description = $request->input('description');
388
            if ($request->has('domain')) {
389
                $domain = $request->input('domain');
390
                $this->setDomain($productid, $domain);
391
            }
392
            $controller = new \App\Http\Controllers\Front\CartController();
393
            $userCurrency = $controller->currency($user_id);
394
            $currency = $userCurrency['currency'];
395
            $number = rand(11111111, 99999999);
396
            $date = \Carbon\Carbon::now();
397
            $product = Product::find($productid);
398
            $cost = $controller->cost($productid, $user_id, $plan);
399
            $grand_total = $this->getGrandTotal($code, $total, $cost, $productid, $currency);
400
            $promo = $this->promotion->where('code', $code)->first();
401
            $codeValue = $this->getCodeValue($promo, $code); //get coupon code value to be added to Invoice
402
            $grand_total = $qty * $grand_total;
403
            if ($grand_total == 0) {
404
                $status = 'success';
405
            }
406
            $tax = $this->checkTax($product->id, $user_id);
407
            $tax_name = '';
408
            $tax_rate = '';
409
            if (!empty($tax)) {
410
                $tax_name = $tax[0];
411
                $tax_rate = $tax[1];
412
            }
413
414
            $grand_total = $this->calculateTotal($tax_rate, $grand_total);
415
            $grand_total = \App\Http\Controllers\Front\CartController::rounding($grand_total);
416
417
            $invoice = Invoice::create(['user_id' => $user_id, 'number' => $number, 'date' => $date,
418
             'coupon_code'                        => $code, 'discount'=>$codeValue,
419
                'grand_total'                     => $grand_total,  'currency'  => $currency, 'status' => $status, 'description' => $description, ]);
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 120 characters; contains 149 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
420
421
            $items = $this->createInvoiceItemsByAdmin($invoice->id, $productid,
422
             $code, $total, $currency, $qty, $agents, $plan, $user_id, $tax_name, $tax_rate);
423
            $result = $this->getMessage($items, $user_id);
424
        } catch (\Exception $ex) {
425
            app('log')->info($ex->getMessage());
426
            Bugsnag::notifyException($ex);
427
            $result = ['fails' => $ex->getMessage()];
428
        }
429
430
        return response()->json(compact('result'));
431
    }
432
433
    public function createInvoiceItemsByAdmin($invoiceid, $productid, $code, $price,
434
        $currency, $qty, $agents, $planid = '', $userid = '', $tax_name = '', $tax_rate = '')
435
    {
436
        try {
437
            $discount = '';
438
            $mode = '';
439
            $product = $this->product->findOrFail($productid);
440
            $plan = Plan::where('product', $productid)->first();
441
            $subtotal = $qty * intval($price);
442
            if ($code) {
443
                $subtotal = $this->checkCode($code, $productid, $currency);
444
                $mode = 'coupon';
445
                $discount = $price - $subtotal;
446
            }
447
            $userid = \Auth::user()->id;
448
            if (\Auth::user()->role == 'user') {
449
                $tax = $this->checkTax($product->id, $userid);
450
                $tax_name = '';
451
                $tax_rate = '';
452
                if (!empty($tax)) {
453
                    $tax_name = $tax[0];
454
                    $tax_rate = $tax[1];
455
                }
456
            }
457
458
            $subtotal = $this->calculateTotal($tax_rate, $subtotal);
459
            $domain = $this->domain($productid);
460
            $items = $this->invoiceItem->create([
461
                'invoice_id'     => $invoiceid,
462
                'product_name'   => $product->name,
463
                'regular_price'  => $price,
464
                'quantity'       => $qty,
465
                'discount'       => $discount,
466
                'discount_mode'  => $mode,
467
                'subtotal'       => \App\Http\Controllers\Front\CartController::rounding($subtotal),
468
                'tax_name'       => $tax_name,
469
                'tax_percentage' => $tax_rate,
470
                'domain'         => $domain,
471
                'plan_id'        => $planid,
472
                'agents'         => $agents,
473
            ]);
474
475
            return $items;
476
        } catch (\Exception $ex) {
477
            Bugsnag::notifyException($ex);
478
479
            return redirect()->back()->with('fails', $ex->getMessage());
480
        }
481
    }
482
483
    public function checkTax($productid, $userid)
484
    {
485
        try {
486
            $taxs = [];
487
            $taxs[0] = ['name' => 'null', 'rate' => 0];
488
            $geoip_state = User::where('id', $userid)->pluck('state')->first();
489
            $geoip_country = User::where('id', $userid)->pluck('country')->first();
490
            $product = $this->product->findOrFail($productid);
491
            $cartController = new CartController();
492
            if ($this->tax_option->findOrFail(1)->inclusive == 0) {
493
                if ($this->tax_option->findOrFail(1)->tax_enable == 1) {
494
                    $taxs = $this->getTaxWhenEnable($productid, $taxs[0], $userid);
495
                } elseif ($this->tax_option->tax_enable == 0) {//if tax_enable is 0
496
497
                    $taxClassId = Tax::where('country', '')->where('state', 'Any State')
498
                     ->pluck('tax_classes_id')->first(); //In case of India when
499
                    //other tax is available and tax is not enabled
500
                    if ($taxClassId) {
501
                        $rate = $this->getTotalRate($taxClassId, $productid, $taxs);
502
                        $taxs = $rate['taxes'];
503
                        $rate = $rate['rate'];
504
                    } elseif ($geoip_country != 'IN') {//In case of other country
505
                        // when tax is available and tax is not enabled(Applicable
506
                        //when Global Tax class for any country and state is not there)
507
508
                        $taxClassId = Tax::where('state', $geoip_state)
509
                        ->orWhere('country', $geoip_country)->pluck('tax_classes_id')->first();
510
                        if ($taxClassId) { //if state equals the user State
511
                            $rate = $this->getTotalRate($taxClassId, $productid, $taxs);
512
                            $taxs = $rate['taxes'];
513
                            $rate = $rate['rate'];
514
                        }
515
                        $taxs = ([$taxs[0]['name'], $taxs[0]['rate']]);
516
517
                        return $taxs;
518
                    }
519
                    $taxs = ([$taxs[0]['name'], $taxs[0]['rate']]);
520
                } else {
521
                    $taxs = ([$taxs[0]['name'], $taxs[0]['rate']]);
522
                }
523
            }
524
525
            return $taxs;
526
        } catch (\Exception $ex) {
527
            throw new \Exception(\Lang::get('message.check-tax-error'));
528
        }
529
    }
530
531
    public function getRate($productid, $taxs, $userid)
532
    {
533
        $tax_attribute = [];
534
        $tax_attribute[0] = ['name' => 'null', 'rate' => 0, 'tax_enable' =>0];
535
        $tax_value = '0';
536
537
        $geoip_state = User::where('id', $userid)->pluck('state')->first();
538
        $geoip_country = User::where('id', $userid)->pluck('country')->first();
539
        $user_state = $this->tax_by_state::where('state_code', $geoip_state)->first();
540
        $origin_state = $this->setting->first()->state; //Get the State of origin
541
        $cartController = new CartController();
542
        $rate = 0;
543
        $name1 = 'CGST';
544
        $name2 = 'SGST';
545
        $name3 = 'IGST';
546
        $name4 = 'UTGST';
547
        $c_gst = 0;
548
        $s_gst = 0;
549
        $i_gst = 0;
550
        $ut_gst = 0;
551
        $state_code = '';
552
        if ($user_state != '') {//Get the CGST,SGST,IGST,STATE_CODE of the user
553
            $tax = $this->getTaxWhenState($user_state, $productid, $origin_state);
554
            $taxes = $tax['taxes'];
555
            $value = $tax['value'];
556
        } else {//If user from other Country
557
            $tax = $this->getTaxWhenOtherCountry($geoip_state, $geoip_country, $productid);
558
            $taxes = $tax['taxes'];
559
            $value = $tax['value'];
560
            $rate = $tax['rate'];
561
        }
562
563
        foreach ($taxes as $key => $tax) {
564
            if ($taxes[0]) {
565
                $tax_attribute[$key] = ['name' => $tax->name, 'name1' => $name1,
566
                 'name2'                       => $name2, 'name3' => $name3, 'name4' => $name4,
567
                 'rate'                        => $value, 'rate1'=>$c_gst, 'rate2'=>$s_gst,
568
                 'rate3'                       => $i_gst, 'rate4'=>$ut_gst, 'state'=>$state_code,
569
                  'origin_state'               => $origin_state, ];
570
571
                $rate = $tax->rate;
572
573
                $tax_value = $value;
574
            } else {
575
                $tax_attribute[0] = ['name' => 'null', 'rate' => 0, 'tax_enable' =>0];
576
                $tax_value = '0%';
577
            }
578
        }
579
580
        return ['taxs'=>$tax_attribute, 'value'=>$tax_value];
581
    }
582
583
    public function setDomain($productid, $domain)
584
    {
585
        try {
586
            if (\Session::has('domain'.$productid)) {
587
                \Session::forget('domain'.$productid);
588
            }
589
            \Session::put('domain'.$productid, $domain);
590
        } catch (\Exception $ex) {
591
            Bugsnag::notifyException($ex);
592
593
            throw new \Exception($ex->getMessage());
594
        }
595
    }
596
597
    public function sendMail($userid, $invoiceid)
598
    {
599
        try {
600
            $invoice = $this->invoice->find($invoiceid);
601
            $number = $invoice->number;
602
            $total = $invoice->grand_total;
603
604
            return $this->sendInvoiceMail($userid, $number, $total, $invoiceid);
605
        } catch (\Exception $ex) {
606
            Bugsnag::notifyException($ex);
607
608
            throw new \Exception($ex->getMessage());
609
        }
610
    }
611
}
612