mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-07-14 00:02:05 -04:00
164 lines
5.3 KiB
PHP
164 lines
5.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\Subscription\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Subscription\Repositories\SubscriptionCouponsRepository;
|
|
use Modules\Subscription\Entities\SubscriptionPlan;
|
|
use Modules\Subscription\Entities\SubscriptionPlanPrice;
|
|
use Carbon\Carbon;
|
|
use Exception;
|
|
use Log;
|
|
|
|
class SubscriptionCouponController extends Controller
|
|
{
|
|
private $subscriptionCouponsRepository;
|
|
private $stripePayment;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->subscriptionCouponsRepository = new SubscriptionCouponsRepository();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
return view('subscription::coupons.index');
|
|
}
|
|
|
|
public function data()
|
|
{
|
|
try {
|
|
$coupons = $this->subscriptionCouponsRepository->all();
|
|
$subscription_plans = SubscriptionPlanPrice::with('plan')->whereHas('plan', function ($query) {
|
|
$query->where('status', 1);
|
|
})->get()->map(function($price, $key) {
|
|
return [
|
|
'id' => $price->id,
|
|
'label' => $price->plan->title.' - $'.($price->payment == 'monthly' ? number_format($price->price / $price->custom_interval,2) : number_format($price->price,2)).' for '.$price->custom_interval.' Months'
|
|
];
|
|
});
|
|
return response()->json([
|
|
'coupons' => $coupons,
|
|
'subscription_plans' => $subscription_plans
|
|
]);
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'message' => 'An error occurred.'
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'name' => 'required|unique:subscription_coupons,name,NULL,id,deleted_at,NULL',
|
|
'code' => 'required|unique:subscription_coupons,code,NULL,id,deleted_at,NULL',
|
|
'applied_to' => 'required',
|
|
'subscription_plan_price_id' => 'required_if:applied_to,subscription',
|
|
'alacarte_id' => 'required_if:applied_to,alacarte',
|
|
'payment_mode' => 'required_if:applied_to,subscription',
|
|
'type' => 'required',
|
|
'amount' => 'required',
|
|
'duration' => 'required',
|
|
'duration_in_months' => 'required',
|
|
'max_redemptions' => 'required'
|
|
]);
|
|
|
|
//try {
|
|
|
|
$this->subscriptionCouponsRepository->create($request);
|
|
|
|
return response()->json([
|
|
'message' => 'Coupon has been successfully saved.'
|
|
]);
|
|
// } catch (\Exception $e) {
|
|
// return response()->json([
|
|
// 'message' => $e->getMessage()
|
|
// ], 500);
|
|
// }
|
|
}
|
|
|
|
public function delete(Request $request)
|
|
{
|
|
try {
|
|
|
|
$ret = $this->subscriptionCouponsRepository->delete($request->id);
|
|
|
|
if ($ret === true) {
|
|
return response()->json([
|
|
'message' => 'Coupon has been successfully deleted.'
|
|
]);
|
|
}
|
|
else {
|
|
if ($ret == 'in_use') {
|
|
return response()->json([
|
|
'message' => 'Unable to delete coupon. Coupon is in use.'
|
|
], 403);
|
|
}
|
|
else {
|
|
return response()->json([
|
|
'message' => 'Failed to delete coupon. Coupon not found.'
|
|
], 500);
|
|
}
|
|
}
|
|
}
|
|
catch (\Exception $e) {
|
|
return response()->json([
|
|
'message' => $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function validate(Request $request)
|
|
{
|
|
$request->validate([
|
|
'code' => 'required',
|
|
'storefront' => !auth()->check() ? 'required' : ''
|
|
]);
|
|
|
|
try {
|
|
$storefront = $request->storefront;
|
|
if(auth()->check()){
|
|
$storefront = auth()->user()->company_details['storefront'];
|
|
}
|
|
|
|
$response = $this->subscriptionCouponsRepository->validate($request->code, $storefront);
|
|
if($response == 'already_redeemed_once'){
|
|
return response()->json([
|
|
'error' => 'Promo Code can be used once only with same strore front!'
|
|
], 500);
|
|
|
|
} else if($response == 'not_found'){
|
|
|
|
return response()->json([
|
|
'error' => 'Promo Code Not Found!'
|
|
], 500);
|
|
|
|
} else if($response){
|
|
|
|
return response()->json([
|
|
'message' => 'Coupon Successfully Applied',
|
|
'plan_ids' => $response->subscription_plan_price_id,
|
|
'type' => $response->type,
|
|
'duration' => $response->duration,
|
|
'discount' => $response->discount,
|
|
'payment_mode' => $response->payment_mode,
|
|
], 200);
|
|
|
|
} else {
|
|
return response()->json([
|
|
'error' => 'Promo Code Not Valid!'
|
|
], 500);
|
|
}
|
|
}
|
|
catch (\Exception $e) {
|
|
return response()->json([
|
|
'message' => $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
}
|