Completed
Push — master ( 45f86d...419882 )
by Ajit
12s
created

SubscriptionsController::modify()   C

Complexity

Conditions 9
Paths 181

Size

Total Lines 81
Code Lines 58

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 81
rs 5.2544
c 0
b 0
f 0
cc 9
eloc 58
nc 181
nop 2

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace App\Http\Controllers;
4
5
use DB;
6
use Auth;
7
use JavaScript;
0 ignored issues
show
Bug introduced by
The type JavaScript was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
8
use App\Invoice;
9
use App\Service;
10
use App\Setting;
11
use Carbon\Carbon;
12
use App\Sms_trigger;
13
use App\Subscription;
14
use App\Cheque_detail;
15
use App\Invoice_detail;
16
use App\Payment_detail;
17
use Illuminate\Http\Request;
18
19
class SubscriptionsController extends Controller
20
{
21
    public function __construct()
22
    {
23
        $this->middleware('auth');
24
    }
25
26
    public function index(Request $request)
27
    {
28
        $subscriptions = Subscription::indexQuery($request->sort_field, $request->sort_direction, $request->drp_start, $request->drp_end, $request->plan_name)->search('"'.$request->input('search').'"')->paginate(10);
29
        $subscriptionTotal = Subscription::indexQuery($request->sort_field, $request->sort_direction, $request->drp_start, $request->drp_end, $request->plan_name)->search('"'.$request->input('search').'"')->get();
30
        $count = $subscriptionTotal->count();
31
32
        if (! $request->has('drp_start') or ! $request->has('drp_end')) {
33
            $drp_placeholder = 'Select daterange filter';
34
        } else {
35
            $drp_placeholder = $request->drp_start.' - '.$request->drp_end;
36
        }
37
38
        $request->flash();
39
40
        return view('subscriptions.index', compact('subscriptions', 'count', 'drp_placeholder'));
41
    }
42
43
    public function expiring(Request $request)
44
    {
45
        $expirings = Subscription::expiring($request->sort_field, $request->sort_direction, $request->drp_start, $request->drp_end)->search('"'.$request->input('search').'"')->paginate(10);
46
        $expiringTotal = Subscription::expiring($request->sort_field, $request->sort_direction, $request->drp_start, $request->drp_end)->search('"'.$request->input('search').'"')->get();
47
        $count = $expiringTotal->count();
48
49
        if (! $request->has('drp_start') or ! $request->has('drp_end')) {
50
            $drp_placeholder = 'Select daterange filter';
51
        } else {
52
            $drp_placeholder = $request->drp_start.' - '.$request->drp_end;
53
        }
54
55
        $request->flash();
56
57
        return view('subscriptions.expiring', compact('expirings', 'count', 'drp_placeholder'));
58
    }
59
60
    public function expired(Request $request)
61
    {
62
        $allExpired = Subscription::expired($request->sort_field, $request->sort_direction, $request->drp_start, $request->drp_end)->search('"'.$request->input('search').'"')->paginate(10);
63
        $allExpiredTotal = Subscription::expired($request->sort_field, $request->sort_direction, $request->drp_start, $request->drp_end)->search('"'.$request->input('search').'"')->get();
64
        $count = $allExpiredTotal->count();
65
66
        if (! $request->has('drp_start') or ! $request->has('drp_end')) {
67
            $drp_placeholder = 'Select daterange filter';
68
        } else {
69
            $drp_placeholder = $request->drp_start.' - '.$request->drp_end;
70
        }
71
72
        $request->flash();
73
74
        return view('subscriptions.expired', compact('allExpired', 'count', 'drp_placeholder'));
75
    }
76
77
    public function create()
78
    {
79
        // For Tax calculation
80
        JavaScript::put([
81
          'taxes' => \Utilities::getSetting('taxes'),
82
          'gymieToday' => Carbon::today()->format('Y-m-d'),
83
          'servicesCount' => Service::count(),
84
      ]);
85
86
        //Get Numbering mode
87
        $invoice_number_mode = \Utilities::getSetting('invoice_number_mode');
88
89
        //Generating Invoice number
90
        if ($invoice_number_mode == \constNumberingMode::Auto) {
91
            $invoiceCounter = \Utilities::getSetting('invoice_last_number') + 1;
92
            $invoicePrefix = \Utilities::getSetting('invoice_prefix');
93
            $invoice_number = $invoicePrefix.$invoiceCounter;
94
        } else {
95
            $invoice_number = '';
96
            $invoiceCounter = '';
97
        }
98
99
        return view('subscriptions.create', compact('invoice_number', 'invoiceCounter', 'invoice_number_mode'));
100
    }
101
102
    public function store(Request $request)
103
    {
104
        DB::beginTransaction();
105
106
        try {
107
            //Helper function to set Payment status
108
            $invoice_total = $request->admission_amount + $request->subscription_amount + $request->taxes_amount - $request->discount_amount;
109
            $paymentStatus = \constPaymentStatus::Unpaid;
110
            $pending = $invoice_total - $request->payment_amount;
111
112
            if ($request->mode == 1) {
113
                if ($request->payment_amount == $invoice_total) {
114
                    $paymentStatus = \constPaymentStatus::Paid;
115
                } elseif ($request->payment_amount > 0 && $request->payment_amount < $invoice_total) {
116
                    $paymentStatus = \constPaymentStatus::Partial;
117
                } elseif ($request->payment_amount == 0) {
118
                    $paymentStatus = \constPaymentStatus::Unpaid;
119
                } else {
120
                    $paymentStatus = \constPaymentStatus::Overpaid;
121
                }
122
            }
123
124
            // Storing Invoice
125
            $invoiceData = ['invoice_number'=> $request->invoice_number,
126
                                     'member_id'=> $request->member_id,
127
                                     'total'=> $invoice_total,
128
                                     'status'=> $paymentStatus,
129
                                     'pending_amount'=> $pending,
130
                                     'discount_amount'=> $request->discount_amount,
131
                                     'discount_percent'=> $request->discount_percent,
132
                                     'discount_note'=> $request->discount_note,
133
                                     'tax'=> $request->taxes_amount,
134
                                     'additional_fees'=> $request->additional_fees,
135
                                     'note'=>' ', ];
136
137
            $invoice = new Invoice($invoiceData);
138
            $invoice->createdBy()->associate(Auth::user());
139
            $invoice->updatedBy()->associate(Auth::user());
140
            $invoice->save();
141
142
            // Storing subscription
143
            foreach ($request->plan as $plan) {
144
                $subscriptionData = ['member_id'=> $request->member_id,
145
                                            'invoice_id'=> $invoice->id,
146
                                            'plan_id'=> $plan['id'],
147
                                            'start_date'=> $plan['start_date'],
148
                                            'end_date'=> $plan['end_date'],
149
                                            'status'=> \constSubscription::onGoing,
150
                                            'is_renewal'=>'0', ];
151
152
                $subscription = new Subscription($subscriptionData);
153
                $subscription->createdBy()->associate(Auth::user());
154
                $subscription->updatedBy()->associate(Auth::user());
155
                $subscription->save();
156
157
                //Adding subscription to invoice(Invoice Details)
158
                $detailsData = ['invoice_id'=> $invoice->id,
159
                                       'plan_id'=> $plan['id'],
160
                                       'item_amount'=> $plan['price'], ];
161
162
                $invoice_details = new Invoice_detail($detailsData);
163
                $invoice_details->createdBy()->associate(Auth::user());
164
                $invoice_details->updatedBy()->associate(Auth::user());
165
                $invoice_details->save();
166
            }
167
168
            //Payment Details
169
            $paymentData = ['invoice_id'=> $invoice->id,
170
                                   'payment_amount'=> $request->payment_amount,
171
                                   'mode'=> $request->mode,
172
                                   'note'=> ' ', ];
173
174
            $payment_details = new Payment_detail($paymentData);
175
            $payment_details->createdBy()->associate(Auth::user());
176
            $payment_details->updatedBy()->associate(Auth::user());
177
            $payment_details->save();
178
179
            if ($request->mode == 0) {
180
                // Store Cheque Details
181
                $chequeData = ['payment_id'=> $payment_details->id,
182
                                    'number'=> $request->number,
183
                                    'date'=> $request->date,
184
                                    'status'=> \constChequeStatus::Recieved, ];
185
186
                $cheque_details = new Cheque_detail($chequeData);
187
                $cheque_details->createdBy()->associate(Auth::user());
188
                $cheque_details->updatedBy()->associate(Auth::user());
189
                $cheque_details->save();
190
            }
191
192
            // Set the subscription status of the 'Renewed' subscription to Renew
193
            if ($request->has('previousSubscriptions')) {
194
                Subscription::where('invoice_id', $invoice->id)->update(['is_renewal' => '1']);
195
196
                foreach ($request->previousSubscriptions as $subscriptionId) {
197
                    $oldSubscription = Subscription::findOrFail($subscriptionId);
198
                    $oldSubscription->status = \constSubscription::renewed;
199
                    $oldSubscription->updatedBy()->associate(Auth::user());
200
                    $oldSubscription->save();
201
                }
202
            }
203
204
            //Updating Numbering Counters
205
            Setting::where('key', '=', 'invoice_last_number')->update(['value' => $request->invoiceCounter]);
206
            $sender_id = \Utilities::getSetting('sms_sender_id');
207
            $gym_name = \Utilities::getSetting('gym_name');
208
209
            //SMS Trigger
210
            if ($invoice->status == \constPaymentStatus::Paid) {
211
                if ($request->mode == 0) {
212
                    $sms_trigger = Sms_trigger::where('alias', '=', 'payment_with_cheque')->first();
213
                    $message = $sms_trigger->message;
214
                    $sms_text = sprintf($message, $subscription->member->name, $payment_details->payment_amount, $cheque_details->number, $invoice->invoice_number, $gym_name);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $cheque_details does not seem to be defined for all execution paths leading up to this point.
Loading history...
Comprehensibility Best Practice introduced by
The variable $subscription seems to be defined by a foreach iteration on line 143. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
215
                    $sms_status = $sms_trigger->status;
216
217
                    \Utilities::Sms($sender_id, $subscription->member->contact, $sms_text, $sms_status);
218
                } else {
219
                    $sms_trigger = Sms_trigger::where('alias', '=', 'subscription_renewal_with_paid_invoice')->first();
220
                    $message = $sms_trigger->message;
221
                    $sms_text = sprintf($message, $subscription->member->name, $payment_details->payment_amount, $invoice->invoice_number);
222
                    $sms_status = $sms_trigger->status;
223
224
                    \Utilities::Sms($sender_id, $subscription->member->contact, $sms_text, $sms_status);
225
                }
226
            } elseif ($invoice->status == \constPaymentStatus::Partial) {
227
                if ($request->mode == 0) {
228
                    $sms_trigger = Sms_trigger::where('alias', '=', 'payment_with_cheque')->first();
229
                    $message = $sms_trigger->message;
230
                    $sms_text = sprintf($message, $subscription->member->name, $payment_details->payment_amount, $cheque_details->number, $invoice->invoice_number, $gym_name);
231
                    $sms_status = $sms_trigger->status;
232
233
                    \Utilities::Sms($sender_id, $subscription->member->contact, $sms_text, $sms_status);
234
                } else {
235
                    $sms_trigger = Sms_trigger::where('alias', '=', 'subscription_renewal_with_partial_invoice')->first();
236
                    $message = $sms_trigger->message;
237
                    $sms_text = sprintf($message, $subscription->member->name, $payment_details->payment_amount, $invoice->invoice_number, $invoice->pending_amount);
238
                    $sms_status = $sms_trigger->status;
239
240
                    \Utilities::Sms($sender_id, $subscription->member->contact, $sms_text, $sms_status);
241
                }
242
            } elseif ($invoice->status == \constPaymentStatus::Unpaid) {
243
                if ($request->mode == 0) {
244
                    $sms_trigger = Sms_trigger::where('alias', '=', 'payment_with_cheque')->first();
245
                    $message = $sms_trigger->message;
246
                    $sms_text = sprintf($message, $subscription->member->name, $payment_details->payment_amount, $cheque_details->number, $invoice->invoice_number, $gym_name);
247
                    $sms_status = $sms_trigger->status;
248
249
                    \Utilities::Sms($sender_id, $subscription->member->contact, $sms_text, $sms_status);
250
                } else {
251
                    $sms_trigger = Sms_trigger::where('alias', '=', 'subscription_renewal_with_unpaid_invoice')->first();
252
                    $message = $sms_trigger->message;
253
                    $sms_text = sprintf($message, $subscription->member->name, $invoice->total, $invoice->invoice_number);
254
                    $sms_status = $sms_trigger->status;
255
256
                    \Utilities::Sms($sender_id, $subscription->member->contact, $sms_text, $sms_status);
257
                }
258
            }
259
260
            DB::commit();
261
            flash()->success('Subscription was successfully created');
262
263
            return redirect(action('SubscriptionsController@index'));
264
        } catch (\Exception $e) {
265
            DB::rollback();
266
            flash()->error('Error while creating the Subscription');
267
268
            return redirect(action('SubscriptionsController@index'));
269
        }
270
    }
271
272
    //End of store method
273
274
    public function edit($id)
275
    {
276
        $subscription = Subscription::findOrFail($id);
277
        // $carbonToday = Carbon::today()->format('Y-m-d');
278
        // $subscriptionEndDate = $subscription->end_date->format('Y-m-d');
279
        $diff = Carbon::today()->diffInDays($subscription->end_date);
280
        //$gymieDiff = $diff->format('Y-m-d');
281
        $gymieDiff = $subscription->end_date->addDays($diff);
282
283
        JavaScript::put([
284
          'gymieToday' => Carbon::today()->format('Y-m-d'),
285
          'gymieEndDate' => $subscription->end_date->format('Y-m-d'),
286
          'gymieDiff' => $gymieDiff->format('Y-m-d'),
287
      ]);
288
289
        return view('subscriptions.edit', compact('subscription'));
290
    }
291
292
    public function update($id, Request $request)
293
    {
294
        $subscription = Subscription::findOrFail($id);
295
296
        $subscription->update($request->all());
297
        $subscription->updatedBy()->associate(Auth::user());
298
        $subscription->save();
299
        flash()->success('Subscription details were successfully updated');
300
301
        return redirect('subscriptions/all');
302
    }
303
304
    public function renew($id, Request $request)
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

304
    public function renew($id, /** @scrutinizer ignore-unused */ Request $request)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
305
    {
306
307
        //Get Numbering mode
308
        $invoice_number_mode = \Utilities::getSetting('invoice_number_mode');
309
310
        //Generating Invoice number
311
        if ($invoice_number_mode == \constNumberingMode::Auto) {
312
            $invoiceCounter = \Utilities::getSetting('invoice_last_number') + 1;
313
            $invoicePrefix = \Utilities::getSetting('invoice_prefix');
314
            $invoice_number = $invoicePrefix.$invoiceCounter;
315
        } else {
316
            $invoice_number = '';
317
            $invoiceCounter = '';
318
        }
319
320
        $subscriptions = Subscription::where('invoice_id', $id)->get();
321
        $member_id = $subscriptions->pluck('member_id')->first();
322
323
        // Javascript Variables
324
        JavaScript::put([
325
            'taxes' => \Utilities::getSetting('taxes'),
326
            'gymieToday' => Carbon::today()->format('Y-m-d'),
327
            'servicesCount' => Service::count(),
328
            'currentServices' => $subscriptions->count(),
329
        ]);
330
331
        return view('subscriptions.renew', compact('subscriptions', 'member_id', 'invoice_number', 'invoiceCounter', 'invoice_number_mode'));
332
    }
333
334
    public function cancelSubscription($id)
335
    {
336
        DB::beginTransaction();
337
        try {
338
            $subscription = Subscription::findOrFail($id);
339
340
            $subscription->update(['status' => \constSubscription::cancelled]);
341
342
            $subscription->member->update(['status' => \constStatus::InActive]);
343
344
            DB::commit();
345
            flash()->success('Subscription was successfully cancelled');
346
347
            return redirect('subscriptions/expired');
348
        } catch (Exception $e) {
0 ignored issues
show
Bug introduced by
The type App\Http\Controllers\Exception was not found. Did you mean Exception? If so, make sure to prefix the type with \.
Loading history...
349
            DB::rollback();
350
            flash()->error('Error while cancelling the Subscription');
351
352
            return redirect('subscriptions/expired');
353
        }
354
    }
355
356
    public function delete($id)
357
    {
358
        DB::beginTransaction();
359
360
        try {
361
            $subscription = Subscription::findOrFail($id);
362
            $invoice = Invoice::where('id', $subscription->invoice_id)->first();
363
            $invoice_details = Invoice_detail::where('invoice_id', $invoice->id)->get();
364
            $payment_details = Payment_detail::where('invoice_id', $invoice->id)->get();
365
366
            foreach ($invoice_details as $invoice_detail) {
367
                $invoice_detail->delete();
368
            }
369
370
            foreach ($payment_details as $payment_detail) {
371
                Cheque_detail::where('payment_id', $payment_detail->id)->delete();
372
                $payment_detail->delete();
373
            }
374
375
            $subscription->delete();
376
            $invoice->delete();
377
378
            DB::commit();
379
380
            return back();
381
        } catch (\Exception $e) {
382
            DB::rollback();
383
384
            return back();
385
        }
386
    }
387
388
    public function change($id)
389
    {
390
        $subscription = Subscription::findOrFail($id);
391
392
        $already_paid = Payment_detail::leftJoin('trn_cheque_details', 'trn_payment_details.id', '=', 'trn_cheque_details.payment_id')
393
                                     ->whereRaw("trn_payment_details.invoice_id = $subscription->invoice_id AND (trn_cheque_details.`status` = 2 or trn_cheque_details.`status` IS NULL)")
394
                                     ->sum('trn_payment_details.payment_amount');
395
396
        JavaScript::put([
397
          'taxes' => \Utilities::getSetting('taxes'),
398
          'gymieToday' => Carbon::today()->format('Y-m-d'),
399
          'servicesCount' => Service::count(),
400
      ]);
401
402
        return view('subscriptions.change', compact('subscription', 'already_paid'));
403
    }
404
405
    public function modify($id, Request $request)
406
    {
407
        $subscription = Subscription::findOrFail($id);
408
409
        try {
410
            DB::beginTransaction();
411
            //Helper function to set Payment status
412
            $invoice_total = $request->admission_amount + $request->subscription_amount + $request->taxes_amount - $request->discount_amount;
413
            $paymentStatus = \constPaymentStatus::Unpaid;
414
            $total_paid = $request->payment_amount + $request->previous_payment;
415
            $pending = $invoice_total - $total_paid;
416
417
            if ($request->mode == 1) {
418
                if ($total_paid == $invoice_total) {
419
                    $paymentStatus = \constPaymentStatus::Paid;
420
                } elseif ($total_paid > 0 && $total_paid < $invoice_total) {
421
                    $paymentStatus = \constPaymentStatus::Partial;
422
                } elseif ($total_paid == 0) {
423
                    $paymentStatus = \constPaymentStatus::Unpaid;
424
                } else {
425
                    $paymentStatus = \constPaymentStatus::Overpaid;
426
                }
427
            }
428
429
            Invoice::where('id', $subscription->invoice_id)->update(['invoice_number'=> $request->invoice_number,
430
                                                               'total'=> $invoice_total,
431
                                                               'status'=> $paymentStatus,
432
                                                               'pending_amount'=> $pending,
433
                                                               'discount_amount'=> $request->discount_amount,
434
                                                               'discount_percent'=> $request->discount_percent,
435
                                                               'discount_note'=> $request->discount_note,
436
                                                               'tax'=> $request->taxes_amount,
437
                                                               'additional_fees'=> $request->additional_fees,
438
                                                               'note'=>' ', ]);
439
440
            foreach ($request->plan as $plan) {
441
                $subscription->update(['plan_id'=> $plan['id'],
442
                                        'start_date'=> $plan['start_date'],
443
                                        'end_date'=> $plan['end_date'],
444
                                        'status'=> \constSubscription::onGoing,
445
                                        'is_renewal'=>'0', ]);
446
447
                //Adding subscription to invoice(Invoice Details)
448
449
                Invoice_detail::where('invoice_id', $subscription->invoice_id)->update(['plan_id'=> $plan['id'],
450
                                                                                         'item_amount'=> $plan['price'], ]);
451
            }
452
453
            //Payment Details
454
            $paymentData = ['invoice_id'=> $subscription->invoice_id,
455
                                   'payment_amount'=> $request->payment_amount,
456
                                   'mode'=> $request->mode,
457
                                   'note'=> ' ', ];
458
459
            $payment_details = new Payment_detail($paymentData);
460
            $payment_details->createdBy()->associate(Auth::user());
461
            $payment_details->updatedBy()->associate(Auth::user());
462
            $payment_details->save();
463
464
            if ($request->mode == 0) {
465
                // Store Cheque Details
466
                $chequeData = ['payment_id'=> $payment_details->id,
467
                                    'number'=> $request->number,
468
                                    'date'=> $request->date,
469
                                    'status'=> \constChequeStatus::Recieved, ];
470
471
                $cheque_details = new Cheque_detail($chequeData);
472
                $cheque_details->createdBy()->associate(Auth::user());
473
                $cheque_details->updatedBy()->associate(Auth::user());
474
                $cheque_details->save();
475
            }
476
477
            DB::commit();
478
            flash()->success('Subscription was successfully changed');
479
480
            return redirect(action('MembersController@show', ['id' => $subscription->member_id]));
481
        } catch (\Exception $e) {
482
            DB::rollback();
483
            flash()->error('Error while changing the Subscription');
484
485
            return back();
486
        }
487
    }
488
}
489