paymentCodeRepository = new PaymentCodeRepository(); } public function index() { return view('subscription::payment_codes.index'); } public function data() { try { $paymentCodes = $this->paymentCodeRepository->all(); $subscription_plans = SubscriptionPlanPrice::with('plan')->where('payment','upfront')->where('payment_method','prepaid')->whereHas('plan', function ($query) { $query->where('status', 1); })->get()->map(function($price, $key) { return [ 'id' => $price->id, 'label' => $price->plan->title.' - '.$price->access_expire_duration.' Months' ]; }); return response()->json([ 'payment_codes' => $paymentCodes, 'subscription_plans' => $subscription_plans ]); } catch (\Exception $e) { return response()->json([ 'message' => 'An error occurred.' ], 500); } } public function store(Request $request) { $request->validate([ 'subscription_plan_price_id' => 'required|exists:subscription_plan_prices,id', 'type' => 'required', 'addons' => 'nullable|array', 'addons.*.description' => 'required' ], [ 'subscription_plan_price_id.required' => 'The subscription plan field is required.' ] ); try { $this->paymentCodeRepository->create($request); return response()->json([ 'message' => 'Payment Code has been successfully generated.' ]); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function update(Request $request) { $request->validate([ 'subscription_plan_price_id' => 'required|exists:subscription_plan_prices,id', 'type' => 'required', 'addons' => 'nullable|array', 'addons.*.description' => 'required' ], [ 'subscription_plan_price_id.required' => 'The subscription plan field is required.' ] ); try { $this->paymentCodeRepository->update($request); return response()->json([ 'message' => 'Payment Code has been successfully updated.' ]); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function delete(Request $request) { try { $ret = $this->paymentCodeRepository->delete($request->id); if ($ret === true) { return response()->json([ 'message' => 'Payment Code has been successfully deleted.' ]); } else { if ($ret == 'in_use') { return response()->json([ 'message' => 'Unable to delete payment code. Payment Code is in use.' ], 403); } else { return response()->json([ 'message' => 'Failed to delete payment code. Payment Code not found.' ], 500); } } } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function apply(Request $request) { $request->validate([ 'code' => 'required', 'user_id' => 'nullable' ]); try { return $this->paymentCodeRepository->apply($request->code); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } public function validate(Request $request) { $request->validate([ 'code' => 'required' ]); try { return $this->paymentCodeRepository->validate($request->code); } catch (\Exception $e) { return response()->json([ 'message' => $e->getMessage() ], 500); } } }