Viewing file: PlanController.php (15.13 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller; use App\Models\BillingRequest; use App\Models\CustomerPlan; use App\Models\Plan; use Illuminate\Http\Request; use Carbon\Carbon;
class PlanController extends Controller { public function index(){ return view('admin.plans.index'); } public function create(){ return view('admin.plans.create'); } public function store(Request $request){ $request->validate([ 'title'=>'required', 'price'=>'required|numeric', 'word_limit'=>'numeric', 'code_limit'=>'numeric', 'image_limit'=>'numeric', 'description'=>'required|max:255', 'trial'=>'required|in:yes,no', 'recurring_type'=>'required|in:weekly,monthly,yearly', 'support'=>'required|in:yes,no', 'status'=>'required|in:active,inactive', 'is_word_limit'=>'required|in:yes,no', 'is_code_limit'=>'required|in:yes,no', 'is_image_limit'=>'required|in:yes,no', ]);
if ($request->is_word_limit=='no' && !$request->word_limit){ return back()->withErrors(['msg'=>'Invalid word limit']); }
if ($request->is_code_limit=='no' && !$request->code_limit){ return back()->withErrors(['msg'=>'Invalid code limit']); }
if ($request->is_image_limit=='no' && !$request->image_limit){ return back()->withErrors(['msg'=>'Invalid image limit']); }
auth()->user()->plans()->create($request->all());
return redirect()->route('admin.plans.index')->with('success', 'Plan successfully created'); } public function getAll(){ $plans = auth()->user()->plans()->select(['id','admin_id','title','description','price','trial','recurring_type','support','status','created_at','word_limit','is_word_limit','code_limit','is_code_limit','image_limit','is_image_limit']); return datatables()->of($plans)
->addColumn('plan_details', function ($q) { $expireDate=now(); if($q->recurring_type=='weekly'){ $expireDate=new Carbon($q->created_at); $expireDate->addWeek(); }else if($q->recurring_type=='monthly'){ $expireDate= new Carbon($q->created_at); $expireDate->addMonth(); }else if($q->recurring_type=='yearly'){ $expireDate=new Carbon($q->created_at); $expireDate->addYear(); }
$title='<p class="d-block m-0">'.'<b>'.trans('admin.plan_name').'</b>'.': '.'<span class="text-muted">'.urlencode($q->title).'</span>'.'</p>';
$description='<p class="d-block m-0">'.'<b>'.trans('admin.description').'</b>'.': '."<span class='show-more text-muted' style='max-width: 500px;white-space: pre-wrap'>".'<span>'.urlencode($q->description).'</span>'."</span>".'</p>';
$price='<p class="d-block m-0">'.'<b>'.trans('admin.price').'</b>'.': '.'<span class="text-muted">'.formatNumberWithCurrSymbol($q->price).'</span>'.'</p>';
$recurring_type='<p class="d-block m-0">'.'<b>'.trans('admin.recurring_type').'</b>'.': '.'<span class="text-muted">'.ucwords(str_replace('_',' ', $q->recurring_type)).'</span>'.'</p>';
$expiredAt='<p class="d-block m-0">'.'<b>'.trans('admin.expired_at').'</b>'.': '. '<span class="text-muted">'.formatDate($expireDate).'</span>'.'</p>';
return '<div class="d-block">'.$title.$price.$recurring_type.$expiredAt.$description.'</div>'; })
->addColumn('wallets', function ($q) { if ($q->is_word_limit == 'no'){ $wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.$q->word_limit.'</span>'.'</p>'; }else{ $wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>'; } if ($q->is_code_limit == 'no'){ $codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.$q->code_limit.'</span>'.'</p>'; }else{ $codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</'; } if ($q->is_image_limit == 'no'){ $imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.$q->image_limit.'</span>'.'</p>'; }else{ $imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>'; }
return '<div>'.$wordLimit.$codeLimit.$imageLimit.'</div';
})
->addColumn('trail', function ($q) { return ucfirst($q->trial);
})
->addColumn('support', function ($q) { return ucfirst($q->support); })
->addColumn('status', function ($q) {
if($q->status=='Active'){ $status='<span class="badge bg-green custom-badge">Active</span>'; }else{ $status='<span class="badge bg-danger custom-badge">Inactive</span>'; } return $status; })
->addColumn('action', function (Plan $q) {
return '<div class="btn-group-vertical"> <div class="btn-group"> <i class="fa fa-ellipsis-h text-success" type="button" data-toggle="dropdown" aria-expanded="false"></i> <ul class="dropdown-menu" style=""> <li><a class="dropdown-item " href="'.route('admin.plans.edit',[$q]). '" >Edit</a></li> <li><a class="dropdown-item" href="#" data-message="Are you sure you want to delete ?" data-action='.route('admin.plans.destroy',[$q]).' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm" >Delete</a></li> </ul> </div> </div>' ;
})
->rawColumns(['action','status','wallets', 'plan_details']) ->toJson(); }
public function approvedPlan(){ return view('admin.plans.approved_plan'); } public function getAllApprovedPlan() { $approvedPlan=CustomerPlan::where('status', 'approved')->pluck('plan_id'); $plans = auth()->user()->plans()->whereIn('id', $approvedPlan);
return datatables()->of($plans) ->addColumn('plan_details', function ($q) { $expireDate=now(); if($q->recurring_type=='weekly'){ $expireDate=new Carbon($q->created_at); $expireDate->addWeek(); }else if($q->recurring_type=='monthly'){ $expireDate= new Carbon($q->created_at); $expireDate->addMonth(); }else if($q->recurring_type=='yearly'){ $expireDate=new Carbon($q->created_at); $expireDate->addYear(); }
$title='<p class="d-block m-0">'.'<b>'.trans('admin.plan_name').'</b>'.': '.'<span class="text-muted">'.urlencode($q->title).'</span>'.'</p>';
$description='<p class="d-block m-0">'.'<b>'.trans('admin.description').'</b>'.': '."<span class='show-more text-muted' style='max-width: 500px;white-space: pre-wrap'>".'<span>'.urlencode($q->description).'</span>'."</span>".'</p>';
$price='<p class="d-block m-0">'.'<b>'.trans('admin.price').'</b>'.': '.'<span class="text-muted">'.formatNumberWithCurrSymbol($q->price).'</span>'.'</p>';
$recurring_type='<p class="d-block m-0">'.'<b>'.trans('admin.recurring_type').'</b>'.': '.'<span class="text-muted">'.ucwords(str_replace('_',' ', $q->recurring_type)).'</span>'.'</p>';
$expiredAt='<p class="d-block m-0">'.'<b>'.trans('admin.expired_at').'</b>'.': '. '<span class="text-muted">'.formatDate($expireDate).'</span>'.'</p>';
return '<div class="d-block">'.$title.$price.$recurring_type.$expiredAt.$description.'</div>'; })
->addColumn('wallets', function ($q) { if ($q->is_word_limit == 'no'){ $wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.$q->word_limit.'</span>'.'</p>'; }else{ $wordLimit='<p class="m-0">'.'<b>'.trans('admin.word_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>'; } if ($q->is_code_limit == 'no'){ $codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.$q->code_limit.'</span>'.'</p>'; }else{ $codeLimit='<p class="m-0">'.'<b>'.trans('admin.code_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</'; } if ($q->is_image_limit == 'no'){ $imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.$q->image_limit.'</span>'.'</p>'; }else{ $imageLimit='<p class="m-0">'.'<b>'.trans('admin.image_limit').'</b>'.': '.'<span class="text-muted">'.'Unlimited'.'</span>'.'</p>'; }
return '<div>'.$wordLimit.$codeLimit.$imageLimit.'</div';
})
->addColumn('trail', function ($q) { return ucfirst($q->trial); }) ->addColumn('support', function ($q) { return ucfirst($q->support); }) ->addColumn('status', function ($q) {
if ($q->status == 'Active') { $status = '<span class="badge bg-green custom-badge">Active</span>'; } else { $status = '<span class="badge bg-danger custom-badge">Inactive</span>'; } return $status; })
->rawColumns(['status', 'wallets', 'plan_details']) ->toJson(); } public function edit(Plan $plan){ $data['plan'] = $plan; return view('admin.plans.edit',$data); } public function update(Plan $plan, Request $request){ $request->validate([ 'title'=>'required', 'price'=>'required|numeric', 'word_limit'=>'numeric', 'code_limit'=>'numeric', 'image_limit'=>'numeric', 'description'=>'required|max:255', 'trial'=>'required|in:yes,no', 'recurring_type'=>'required|in:weekly,monthly,yearly', 'support'=>'required|in:yes,no', 'status'=>'required|in:active,inactive', 'is_word_limit'=>'required|in:yes,no', 'is_code_limit'=>'required|in:yes,no', 'is_image_limit'=>'required|in:yes,no', ]);
if ($request->is_word_limit=='no' && !$request->word_limit){ return back()->withErrors(['msg'=>'Invalid word limit']); }
if ($request->is_code_limit=='no' && !$request->code_limit){ return back()->withErrors(['msg'=>'Invalid code limit']); }
if ($request->is_image_limit=='no' && !$request->image_limit){ return back()->withErrors(['msg'=>'Invalid image limit']); }
$plan->update($request->all());
return redirect()->route('admin.plans.index')->with('success', 'Plan successfully updated'); }
public function destroy(Plan $plan){ $plan->delete();
return back()->with('success','Plan successfully deleted'); } public function plan_request(){ return view('admin.plans.requests'); } public function getRequests() { $planRequests = CustomerPlan::where('status','pending')->select(['id','customer_id','plan_id','transaction_id','payment_method','status']); return datatables()->of($planRequests) ->addColumn('title', function (CustomerPlan $q) { return $q->plan->title; }) ->addColumn('price', function (CustomerPlan $q) { return formatNumberWithCurrSymbol($q->plan->price); }) ->addColumn('transaction_id', function (CustomerPlan $q) { return $q->transaction_id; }) ->addColumn('payment_method', function (CustomerPlan $q) { return ucfirst($q->payment_method); }) ->addColumn('status', function (CustomerPlan $q) { if($q->status=='approved'){ $status='<strong class="text-success">'.ucfirst($q->status).'</strong>'; }else{ $status='<strong class="text-danger">'.ucfirst($q->status).'</strong>'; } return $status; }) ->addColumn('action', function (CustomerPlan $q) { if($q->status=='pending') { return '<button class="mr-1 btn btn-sm btn-info" data-message="Are you sure you want to assign <b>\'' . $q->plan->title . '\'</b> to \'' . $q->customer->full_name . '\' ?" data-action=' . route('admin.customer.plan.change') . ' data-input={"id":"' . $q->plan_id . '","customer_id":"' . $q->customer_id . '","plan_request_id":"' . $q->id . '","status":"approved"} data-toggle="modal" data-target="#modal-confirm" >Approve</button>' . '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to reject <b>\'' . $q->plan->title . '\'</b> for \'' . $q->customer->full_name . '\' ?" data-action=' . route('admin.customer.plan.change') . ' data-input={"id":"' . $q->plan_id . '","customer_id":"' . $q->customer_id . '","plan_request_id":"' . $q->id . '","status":"rejected"} data-toggle="modal" data-target="#modal-confirm" >Reject</button>'; }else if($q->status=='approved'){ return '<button class="mr-1 btn btn-sm btn-success disabled" disabled >Approved</button>'; }else{ return '<button class="mr-1 btn btn-sm btn-danger disabled" disabled >Rejected</button>'; } }) ->addColumn('customer', function (CustomerPlan $q) { return "<a href='" . route('admin.customers.edit', [$q->customer_id]) . "'>" . $q->customer->full_name . "</a>"; }) ->rawColumns(['action', 'customer','status']) ->toJson(); } }
|