You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					129 lines
				
				4.9 KiB
			
		
		
			
		
	
	
					129 lines
				
				4.9 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace App\Http\Controllers\Admin;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Exception;
							 | 
						||
| 
								 | 
							
								use App\Models\Order;
							 | 
						||
| 
								 | 
							
								use App\Models\Subscription;
							 | 
						||
| 
								 | 
							
								use Illuminate\Http\Request;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Carbon;
							 | 
						||
| 
								 | 
							
								use App\Models\BusinessSetting;
							 | 
						||
| 
								 | 
							
								use App\Models\OrderCancelReason;
							 | 
						||
| 
								 | 
							
								use App\Models\SubscriptionPause;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\DB;
							 | 
						||
| 
								 | 
							
								use App\Http\Controllers\Controller;
							 | 
						||
| 
								 | 
							
								use Brian2694\Toastr\Facades\Toastr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class OrderSubscriptionController extends Controller
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function index(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $order_subs=  BusinessSetting::where('key', 'order_subscription')->first();
							 | 
						||
| 
								 | 
							
								        $cash_on_delivery=  BusinessSetting::where('key', 'cash_on_delivery')->first();
							 | 
						||
| 
								 | 
							
								        // $subs_o= Order::whereNotNull('subscription_id')->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // if (!isset($order_subs) || ($order_subs->value != 1 &&  $cash_on_delivery->value != 1) ) {
							 | 
						||
| 
								 | 
							
								        //     Toastr::error(translate('messages.You_must_turn_on_Order_subscription_form_the_Business_settings_and_also_Cash_on_delivery_must_be_Enabled'));
							 | 
						||
| 
								 | 
							
								        //     return back();
							 | 
						||
| 
								 | 
							
								        // }
							 | 
						||
| 
								 | 
							
								        $key = explode(' ', $request['search']);
							 | 
						||
| 
								 | 
							
								        $subscriptions = Subscription::with(['customer', 'restaurant', 'order.details'])
							 | 
						||
| 
								 | 
							
								        ->when(isset($request['search']), function ($query) use($key){
							 | 
						||
| 
								 | 
							
								            $query->whereHas('order',function ($qu) use ($key){
							 | 
						||
| 
								 | 
							
								                    foreach ($key as $value) {
							 | 
						||
| 
								 | 
							
								                        $qu->Where('id', 'like', "%{$value}%");
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        })->orderBy('created_at', 'desc')
							 | 
						||
| 
								 | 
							
								        ->paginate(config('default_pagination'));
							 | 
						||
| 
								 | 
							
								        return view('admin-views.order-subscription.index', compact('subscriptions'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function show(Request $request, Subscription $subscription)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $tab = $request->query('tab', 'info');
							 | 
						||
| 
								 | 
							
								        return view('admin-views.order-subscription.view', compact('subscription', 'tab'));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function edit(Subscription $subscription)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return response()->json($subscription);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function update(Request $request, Subscription $subscription)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $request->validate([
							 | 
						||
| 
								 | 
							
								            'status' => 'required|in:active,paused,canceled',
							 | 
						||
| 
								 | 
							
								            'start_date' => 'required_if:status,paused|date|after_or_equal:today',
							 | 
						||
| 
								 | 
							
								            'end_date' => 'required_if:status,paused|date|after_or_equal:start_date'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        DB::beginTransaction();
							 | 
						||
| 
								 | 
							
								        try{
							 | 
						||
| 
								 | 
							
								            if($request->status == 'paused'){
							 | 
						||
| 
								 | 
							
								                if($subscription->pause()->checkDate($request->start_date, $request->end_date)->count())
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    Toastr::error(translate('messages.subscription_pause_log_overlap_warning'));
							 | 
						||
| 
								 | 
							
								                    return back();
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                $subscription->pause()->updateOrInsert(['from'=>$request->start_date, 'subscription_id'=>$subscription->id],['to'=>$request->end_date]);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            elseif ($request->status == 'canceled' && isset($subscription->order)) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $subscription->order()->update([
							 | 
						||
| 
								 | 
							
								                    'order_status' => $request->status,
							 | 
						||
| 
								 | 
							
								                    'canceled' => now(),
							 | 
						||
| 
								 | 
							
								                    'cancellation_note' => $request->note ?? null,
							 | 
						||
| 
								 | 
							
								                    'cancellation_reason' => $request->reason ?? null,
							 | 
						||
| 
								 | 
							
								                    'canceled_by' => 'admin',
							 | 
						||
| 
								 | 
							
								                    ]);
							 | 
						||
| 
								 | 
							
								                    if($subscription->log){
							 | 
						||
| 
								 | 
							
								                        $subscription->log()->update([
							 | 
						||
| 
								 | 
							
								                            'order_status' => $request->status,
							 | 
						||
| 
								 | 
							
								                            'canceled' => now(),
							 | 
						||
| 
								 | 
							
								                            ]);
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                $subscription->status = $request->status;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            elseif ($request->status == 'active' && isset($subscription->order)) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $subscription->order()->update([
							 | 
						||
| 
								 | 
							
								                    'order_status' => 'pending',
							 | 
						||
| 
								 | 
							
								                    'canceled' => null,
							 | 
						||
| 
								 | 
							
								                    'pending' => now(),
							 | 
						||
| 
								 | 
							
								                    ]);
							 | 
						||
| 
								 | 
							
								                $subscription->status = $request->status;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            else {
							 | 
						||
| 
								 | 
							
								                $subscription->status = $request->status;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $subscription->save();
							 | 
						||
| 
								 | 
							
								            DB::commit();
							 | 
						||
| 
								 | 
							
								            Toastr::success(translate('messages.subscription_updated_successfully'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }catch(Exception $ex){
							 | 
						||
| 
								 | 
							
								            DB::rollBack();
							 | 
						||
| 
								 | 
							
								            info($ex);
							 | 
						||
| 
								 | 
							
								            Toastr::error($ex->getMessage());
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Toastr::error(translate('messages.failed_updated_subscription'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    public function pause_log_delete($id){
							 | 
						||
| 
								 | 
							
								        $sub=SubscriptionPause::where('id',$id)->first();
							 | 
						||
| 
								 | 
							
								        $current_date = date('Y-m-d');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $from = Carbon::parse($sub->from);
							 | 
						||
| 
								 | 
							
								        if($sub &&  $from->gt($current_date)  ){
							 | 
						||
| 
								 | 
							
								            $sub->delete();
							 | 
						||
| 
								 | 
							
								            Toastr::success(translate('messages.pause_log_deleted_successfully'));
							 | 
						||
| 
								 | 
							
								            return back();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        Toastr::error(translate('messages.you_can_not_delete_this_time_log'));
							 | 
						||
| 
								 | 
							
								        return back();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |