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

<?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();
}
}