Files
kulakpos_web/app/Http/Controllers/Admin/AcnooPlanController.php

165 lines
5.8 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Plan;
use App\Models\PlanSubscribe;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AcnooPlanController extends Controller
{
public function __construct()
{
$this->middleware('permission:plans-create')->only('create', 'store');
$this->middleware('permission:plans-read')->only('index');
$this->middleware('permission:plans-update')->only('edit', 'update', 'status');
$this->middleware('permission:plans-delete')->only('destroy', 'deleteAll');
}
public function index(Request $request)
{
$search = $request->input('search');
$plans = Plan::when($request->search, function ($q) use ($search) {
$q->where(function ($q) use ($search) {
$q->where('subscriptionName', 'like', '%' . $search . '%')
->orWhere('duration', 'like', '%' . $search . '%')
->orWhere('subscriptionPrice', 'like', '%' . $search . '%');
});
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
if ($request->ajax()) {
return response()->json([
'data' => view('admin.plans.datas', compact('plans'))->render()
]);
}
return view('admin.plans.index', compact('plans'));
}
public function create()
{
return view('admin.plans.create');
}
public function store(Request $request)
{
$request->validate([
'duration' => 'required|string',
'offerPrice' => 'nullable|numeric|min:0|max:9999999999999',
'subscriptionName' => 'required|string|max:255|unique:plans,subscriptionName',
'subscriptionPrice' => 'required|numeric|min:0|max:9999999999999',
'addon_domain_limit' => 'nullable|integer|min:0',
'subdomain_limit' => 'nullable|integer|min:0',
]);
Plan::create($request->except(['offerPrice', 'status', 'allow_multibranch']) + [
'offerPrice' => $request->offerPrice ?? NULL,
'status' => $request->status ? 1 : 0,
'allow_multibranch' => $request->allow_multibranch ? 1 : 0,
]);
return response()->json([
'message' => __('Subscription Plan created successfully'),
'redirect' => route('admin.plans.index')
]);
}
public function edit(Plan $plan)
{
return view('admin.plans.edit', compact('plan'));
}
public function update(Request $request, Plan $plan)
{
$request->validate([
'duration' => 'required|string',
'offerPrice' => 'nullable|numeric|min:0|max:9999999999999',
'subscriptionPrice' => 'required|numeric|min:0|max:9999999999999',
'subscriptionName' => 'required|string|max:255|unique:plans,subscriptionName,' . $plan->id,
'addon_domain_limit' => 'nullable|integer|min:0',
'subdomain_limit' => 'nullable|integer|min:0',
]);
if ($plan->subscriptionName == 'Free' && ($plan->subscriptionName != $request->subscriptionName || $plan->subscriptionPrice != $request->subscriptionPrice || $plan->offerPrice != $request->offerPrice)) {
return response()->json([
'message' => __('You can not change the package name & price of free plan.'),
], 406);
}
DB::beginTransaction();
try {
$plan->update($request->except(['offerPrice', 'status', 'allow_multibranch']) + [
'offerPrice' => $request->offerPrice ?? NULL,
'status' => $request->status ? 1 : 0,
'allow_multibranch' => $request->allow_multibranch ? 1 : 0,
]);
if ($request->allow_existing_subscriber){
$updateData = [
'allow_multibranch' => $request->allow_multibranch ? 1 : 0,
'addon_domain_limit' => $request->addon_domain_limit ?? 0,
'subdomain_limit' => $request->subdomain_limit ?? 0,
];
PlanSubscribe::where('plan_id', $plan->id)->update($updateData);
}
DB::commit();
return response()->json([
'message' => __('Subscription Plan updated successfully'),
'redirect' => route('admin.plans.index')
]);
} catch (\Exception $e) {
DB::rollBack();
return response()->json([
'message' => 'Something went wrong.',
'error' => $e->getMessage()
], 500);
}
}
public function status(Request $request, $id)
{
$plan = Plan::findOrFail($id);
if ($plan->subscriptionName == 'Free') {
return response()->json([
'message' => __('You can not change the status for free plan.'),
], 406);
}
$plan->update(['status' => $request->status]);
return response()->json(['message' => 'Plan']);
}
public function destroy($id)
{
$plan = Plan::findOrFail($id);
if ($plan->subscriptionName == 'Free') {
return response()->json([
'message' => __('You can not delete free plan.'),
], 406);
}
$plan->delete();
return response()->json([
'message' => __('Subscription Plan deleted successfully'),
'redirect' => route('admin.plans.index')
]);
}
public function deleteAll(Request $request)
{
Plan::whereIn('id', $request->ids)->where('subscriptionName', '!=', 'Free')->delete();
return response()->json([
'message' => __('Subscription plan deleted successfully'),
'redirect' => route('admin.plans.index')
]);
}
}