Files
wticreatorstudio/Modules/Subscription/Http/Controllers/PaymentCodeController.php
T
Leonard Biano 9dc58d6fc6 Subscription Module Update
Payment codes changes and fix paypal payment failed
2024-08-29 23:48:19 +08:00

176 lines
5.0 KiB
PHP

<?php
namespace Modules\Subscription\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Subscription\Repositories\PaymentCodeRepository;
use Modules\Subscription\Entities\PaymentCode;
use Modules\Subscription\Entities\PaymentCodeAddon;
use Modules\Subscription\Entities\SubscriptionPlanPrice;
use Carbon\Carbon;
use Exception;
use Log;
class PaymentCodeController extends Controller
{
private $paymentCodeRepository;
public function __construct()
{
$this->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('prepaid', 1)->where('status', 1);
})->get()->map(function($price, $key) {
return [
'id' => $price->id,
'label' => $price->plan->title.' - '.$price->total_credits.' Credits for '.$price->access_expire_duration.' '.$price->access_expire_duration_type.' ($'.number_format($price->price,2).')'
];
});
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);
}
}
}