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.
		
		
		
		
		
			
		
			
				
					
					
						
							128 lines
						
					
					
						
							4.9 KiB
						
					
					
				
			
		
		
	
	
							128 lines
						
					
					
						
							4.9 KiB
						
					
					
				<?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();
 | 
						|
    }
 | 
						|
}
 | 
						|
 |