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); } } }