From 5be9b18fb54603a41a197997e18ca18d98e0661c Mon Sep 17 00:00:00 2001 From: Hritikkk9 Date: Fri, 28 Jun 2024 19:30:31 +0530 Subject: [PATCH] subscription updated --- .../Customer_API/SubscriptionController.php | 339 ++++++++++++++++++ .../pages/subscriptions/images/arrow-left.png | Bin 0 -> 223 bytes .../subscriptions/images/cheers-logo.png | Bin 0 -> 2916 bytes .../Admin/pages/subscriptions/images/dull.png | Bin 0 -> 4417 bytes .../pages/subscriptions/images/glass.png | Bin 0 -> 7964 bytes .../Admin/pages/subscriptions/images/x.svg | 1 + .../subscriptions/list-of-products.blade.php | 162 +++++++++ .../subscriptions/my-subscription.blade.php | 153 ++++++++ .../subscriptions/subscription-style.css | 208 +++++++++++ routes/web.php | 20 ++ 10 files changed, 883 insertions(+) create mode 100644 app/Http/Controllers/Admin/APIs/Customer_API/SubscriptionController.php create mode 100644 resources/views/Admin/pages/subscriptions/images/arrow-left.png create mode 100644 resources/views/Admin/pages/subscriptions/images/cheers-logo.png create mode 100644 resources/views/Admin/pages/subscriptions/images/dull.png create mode 100644 resources/views/Admin/pages/subscriptions/images/glass.png create mode 100644 resources/views/Admin/pages/subscriptions/images/x.svg create mode 100644 resources/views/Admin/pages/subscriptions/list-of-products.blade.php create mode 100644 resources/views/Admin/pages/subscriptions/my-subscription.blade.php create mode 100644 resources/views/Admin/pages/subscriptions/subscription-style.css diff --git a/app/Http/Controllers/Admin/APIs/Customer_API/SubscriptionController.php b/app/Http/Controllers/Admin/APIs/Customer_API/SubscriptionController.php new file mode 100644 index 0000000..2eba9a2 --- /dev/null +++ b/app/Http/Controllers/Admin/APIs/Customer_API/SubscriptionController.php @@ -0,0 +1,339 @@ +getMessage(), ['exception' => $e]); + return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500); + } + } + + + //created by; Hritik + //On - 28th June ,2024 + //use - to get Data of User in Webview and show list of product + + + public function listOfProduct(Request $request) + { + try { + + + + return view('Admin.pages.subscriptions.list-of-products'); + + } catch (\Exception $e) { + Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]); + return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500); + } + } + + + + //created by; Hritik + //On - 18th May ,2024 + //use - to get Data of Detailed List Of Product , Monthly & Yearly + public function nextPage(Request $request) + { + + try { + // $token = readHeaderToken(); + $token = true; + // dd($request); + if ($token) { + // $user_id = $token['sub']; + + // $validator = $this->validateSubscriptionsForm($request); + + // if ($validator->fails()) { + // $validationErrors = $validator->errors()->all(); + // Log::error("Razorpay subscriptions plan validation error: " . implode(", ", $validationErrors)); + // return jsonResponseWithErrorMessageApi($validationErrors, 203); + // } + + // $request['iam_principal_id'] = $user_id; + $productTypeXid = $request->query('selected_product_type_id'); + + $userId = $request->query('user_id'); + $products = Products::with('productType', 'productTier') + ->where('product_type_xid', $productTypeXid) + ->where('is_active', '1')->get(); + + foreach ($products as $k => $val) { + + $products[$k]['product_image'] = ListingImageUrl('product_image', $val['product_image']); + } + + $user = IamPrincipal::where('id', $userId)->where('is_active', 1)->first(); + + $user_name = $user->user_name; + $user_contact_no = $user->phone_number; + $user_email = $user->email_address; + + + return view( + 'admin-dashboard.pages.razorpay-subscription.subscription-product-detail-pay', + compact( + 'products', + 'userId', + 'user_name', + 'user_contact_no', + 'user_email', + + ) + ); + } else { + return jsonResponseWithErrorMessageApi(__('auth.user_deleted'), 409); + } + } catch (Exception $e) { + Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]); + return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500); + } + } + + //created by :-Hritik + // On - 16th may ,2024 + //subscription to a particular project based on plans and returning the subscription id to web to open Subscription screen + public function subscribeToProduct(Request $request) + { + try { + DB::beginTransaction(); + // $token = readHeaderToken(); + + $iamId = $request->iam_principal_xid; + $razorPayPlanId = $request->razorpay_plan_id; + $productId = $request->product_id; + + + $user = IamPrincipal::where('id', $iamId)->where('is_active', 1)->first(); + $id = $user->id; + $phone = $user->phone_number; + $email = $user->email_address; + + $product = Products::where('razorpay_plan_id', $razorPayPlanId) + ->where('is_active', 1) + ->first(); + + if ($product && $product->product_tier_xid == 1) { + //if product tier is monthly then we are setting count to 1200 means 100 years + $total_count = 1200; + } else if ($product && $product->product_tier_xid == 2) { + //if product tier is Yearly then we are setting count to 100 means 100 years + + $total_count = 100; + } else { + + //if product tier is not found then we are setting to 1 + + $total_count = 1; + } + + + $api = new Api(config('constants.razorpay.key_id'), config('constants.razorpay.key_secret')); + $plan_id = $product->razorpay_plan_id; + + // Call the subscription create method with request parameters + $response = $api->subscription->create([ + 'plan_id' => $plan_id, + 'total_count' => $total_count, + 'quantity' => '1', + + 'notes' => [ + 'product_id' => intval($product->id), + 'iam_principal_xid' => intval($iamId) + ], + 'notify_info' => [ + 'notify_phone' => $phone, + 'notify_email' => $email + ], + // 'callback_url' => route('my-subscription-page') + ]); + + $notes = $response->notes; + $notesArray = [ + 'product_id' => $notes->product_id, + 'iam_principal_xid' => $notes->iam_principal_xid, + ]; + + DB::commit(); + + // return response()->json($response); + + return response()->json([ + 'subId' => $response->id, + 'userId' => $iamId, + + + ]); + return jsonResponseWithSuccessMessage(__('success.save_data', $response->short_url)); + + // return Redirect::away($response->short_url); + + } catch (Exception $e) { + DB::rollBack(); + + Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]); + return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500); + } + } + + public function validateSubscriptionsForm(Request $request) + { + return Validator::make( + $request->all(), + [ + 'plan_id' => 'required', + ] + ); + } + + public function thankyou(Request $request) + { + $userId = $request->query('user_xid'); + if ($userId) { + //store data in DATABSE + + RazorpayWebhookUsers::updateOrCreate( + ['iam_principal_xid' => $userId], + ['isSuccessPayment' => 1] + ); + } + return view('admin-dashboard.pages.razorpay-subscription.thankyou'); + } + + public function cancelThankYou(Request $request) + { + $endAt = $request->query('end_date'); + if ($endAt) { + $endDate = $endAt; + } else { + $endDate = null; + } + return view('admin-dashboard.pages.razorpay-subscription.cancel-thank-you', compact('endDate')); + } + + + + + //created by; Hritik + //On - 28th May ,2024 + //use - To cancel the subscription of user on end of subscription end period + + public function cancelSubscription(Request $request) + { + try { + Log::info("Razorpay Cancel subscriptions Begin: "); + DB::beginTransaction(); + + $validator = $this->validateCancelSubscriptionForm($request); + + if ($validator->fails()) { + $validationErrors = $validator->errors()->all(); + Log::error("Razorpay Cancel subscriptions validation error: " . implode(", ", $validationErrors)); + return jsonResponseWithErrorMessageApi($validationErrors, 203); + } + + $iamPrincipalId = $request->iam_principal_xid; + $razorpaySubscriptionId = $request->subscription_id; + $subscriptionXid = $request->subscription_xid; + + $getSubscriptionData = RazorpaySubscriptions::where(['id' => $subscriptionXid, 'iam_principal_xid' => $iamPrincipalId, 'subscription_id' => $razorpaySubscriptionId, 'isCancelledSubscription' => 0])->first(); + + + if (!$getSubscriptionData) { + return response()->json(['status' => 502, 'message' => 'Something went wrong while cancelling Subscription']); + } + + $api = new Api(config('constants.razorpay.key_id'), config('constants.razorpay.key_secret')); + + $options = ['cancel_at_cycle_end' => 1]; + // Call the subscription create method with request parameters + $response = $api->subscription->fetch($razorpaySubscriptionId)->cancel($options); + + $endAt = date('Y-m-d H:i:s', $response->end_at); + $dateTime = now(); + $currentDateTime = $dateTime->format('Y-m-d H:i:s'); + $getSubscriptionData->isCancelledSubscription = 1; + $getSubscriptionData->cancelled_at = $currentDateTime; + $getSubscriptionData->save(); + + DB::commit(); + Log::info("Razorpay Cancel subscriptions end: "); + + return response()->json(['status' => 200, 'end_date' => $endAt]); + // return response()->json(['status' => 200, 'message' => 'Your Subscription has been cancelled Sucessfully']); + + + } catch (Exception $e) { + DB::rollBack(); + Log::error("An error occurred in " . __METHOD__ . ": " . $e->getMessage(), ['exception' => $e]); + return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500); + } + } + public function validateCancelSubscriptionForm(Request $request) + { + return Validator::make( + $request->all(), + [ + 'iam_principal_xid' => 'required', + 'subscription_id' => 'required', + 'subscription_xid' => 'required', + ] + ); + } + + + // public function subscriptionUpgrade(Request $request) + // { + // // dd($request->all()); + + // $razorPayPlanId = $request->razorpay_plan_id; + // $productTypeId = $request->product_type_xid; + // $productTierId = $request->product_tier_xid; + // $iamId = $request->iam_principal_xid; + + // $user_id = 12; // Change this to dynamic user ID + + // // Retrieve the current monthly subscription + // $currentSubscription = RazorpaySubscriptions::where('iam_principal_xid', $user_id)->first(); + + // if (!$currentSubscription) { + // return response()->json(['status' => 502, 'message' => 'Something went wrong current user Subscription not found']); + // } + + // $products = Products::where('product_type_xid', $productTypeId) + // ->where('product_tier_xid', $productTierId) + // ->where('razorpay_plan_id', $razorPayPlanId) + // ->where('is_active', '1')->first(); + + // if (!$products) { + // return response()->json(['status' => 502, 'message' => 'Something went wrong current product not found']); + // } + + // $api = new Api(config('constants.razorpay.key_id'), config('constants.razorpay.key_secret')); + // $plan_id = $products->razorpay_plan_id; + + // // Call the subscription create method with request parameters + + // } +} diff --git a/resources/views/Admin/pages/subscriptions/images/arrow-left.png b/resources/views/Admin/pages/subscriptions/images/arrow-left.png new file mode 100644 index 0000000000000000000000000000000000000000..6f07b563f3309bde1da65e7904d9ac3740758ad0 GIT binary patch literal 223 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 S3#mUIG`gAw8ntS+5&s8`Hcuh| literal 0 HcmV?d00001 diff --git a/resources/views/Admin/pages/subscriptions/images/glass.png b/resources/views/Admin/pages/subscriptions/images/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..c5556f42d80a8730b7b13cbc9acbbb4f86cd446d GIT binary patch literal 7964 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 literal 0 HcmV?d00001 diff --git a/resources/views/Admin/pages/subscriptions/images/x.svg b/resources/views/Admin/pages/subscriptions/images/x.svg new file mode 100644 index 0000000..7d5875c --- /dev/null +++ b/resources/views/Admin/pages/subscriptions/images/x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/Admin/pages/subscriptions/list-of-products.blade.php b/resources/views/Admin/pages/subscriptions/list-of-products.blade.php new file mode 100644 index 0000000..1017563 --- /dev/null +++ b/resources/views/Admin/pages/subscriptions/list-of-products.blade.php @@ -0,0 +1,162 @@ + + + + + + + + + + List Of Products + + + +
+
+

+ + {{-- --}} + + {{-- --}} + +

+
+ +
+

Subscribe to Cheers to the Season app to gain access to free cocktails* at + local + restaurants. +

+

*Free cocktail stipulations vary by state in accordance with local liquor + laws.

+
+

Subscription

+
+
+

Monthly Plan

+

Billed monthly

+
+
+

$2.99

+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+

Applied Discount

+

First Month free

+
+ +
+

$2.99

+
+
+
+
+
+

Total Payment

+
+ +
+

$0.00

+
+
+ +

You will be charged $2.99 every month after your free trial period ends. +

+

Subscription will be renewed monthly until cancelled.

+
+
+
+ +
+

Program/Redemption Rules

+
+
+
+ +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. +
+
+
+
+ + +
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/views/Admin/pages/subscriptions/my-subscription.blade.php b/resources/views/Admin/pages/subscriptions/my-subscription.blade.php new file mode 100644 index 0000000..ebe3360 --- /dev/null +++ b/resources/views/Admin/pages/subscriptions/my-subscription.blade.php @@ -0,0 +1,153 @@ + + + + + + + + + + My Subscription + + + +
+
+

+ + {{-- --}} + + My Active Plan +

+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+

Subscription FAQs

+
+
+ +
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut aliquip ex ea commodo consequat. +
+
+
+
+ + +
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/views/Admin/pages/subscriptions/subscription-style.css b/resources/views/Admin/pages/subscriptions/subscription-style.css new file mode 100644 index 0000000..6df8c4f --- /dev/null +++ b/resources/views/Admin/pages/subscriptions/subscription-style.css @@ -0,0 +1,208 @@ +@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:ital,opsz,wght@0,6..12,200..1000;1,6..12,200..1000&display=swap'); +@import "https://unpkg.com/jolty-ui/dist/jolty-ui.min.css"; + +:root { + --border-color: #E3E3E3; + --background-color: transparent; + --transition: all 0.2s ease; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: "Nunito Sans", sans-serif; +} + +.head { + font-weight: 700; + color: #000000; + font-size: 24px; +} + +.comm-head { + font-weight: 500; + color: #000000; + font-size: 18px; +} + +.grey-para { + color: #4D4D4D; +} + +.para { + color: #000000; + font-size: 17px; + font-weight: 500; +} + +.para-mid { + color: #000000; + font-size: 20px; + font-weight: 600; +} + +hr { + border: none; + border-top: 1px dashed #042857; + margin: 20px 0; +} + +.main-text { + display: flex; + align-items: center; + justify-content: space-around; + margin-top: 30px; +} + +.new-subs-img { + display: flex; + align-items: center; + justify-content: center; +} + +.subscription-card { + padding: 20px; + border-radius: 15px; + background-color: #E4F0FF; + box-shadow: 0px 0px 16.1px 0px #B4B4B440; + margin: 50px auto; + text-align: center; + position: relative; + border: 1px solid #ABD0FF; +} + +.subscription-card:before, +.subscription-card:after { + content: ''; + position: absolute; + width: 40px; + height: 40px; + background-color: #fff; + top: 22%; +} + +.subscription-card:before { + left: -25px; + border-top-right-radius: 20px; + border-bottom-right-radius: 20px; +} + +.subscription-card:after { + right: -25px; + border-top-left-radius: 20px; + border-bottom-left-radius: 20px; +} + +.subscription-card h1 { + font-size: 24px; + margin-bottom: 20px; +} + +.subscription-card .price { + font-size: 24px; + font-weight: 700; + color: #052857; +} + + +.subscription-card .coupon-input { + width: calc(100% - 70px); + display: inline-block; + border: 0.8px solid #CFCFCF !important; + border-radius: 20px !important; +} + +.apply { + border: 1px solid #042857; + padding: 3px 18px; + border-radius: 16px; + background: transparent; + color: #042857; +} + +.subscribe-button { + background-color: #EEBA2B; + border: none; + color: #000000; + padding: 10px 20px; + font-size: 16px; + border-radius: 20px; + cursor: pointer; + margin: 40px 0 20px 0; + font-weight: 600; +} + + +/* .subscription-card .note { + font-size: 12px; + color: #6c757d; + margin-top: 10px; +} */ + + +.modal-header { + border-bottom: none; + padding: 25px 30px; +} + +.modal-footer { + border-top: none; +} + +.modal-header .btn-close { + border: 1px solid #000000; + border-radius: 50%; +} + +.bottom-mod .modal-content { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.bottom-mod .modal-dialog { + position: fixed !important; + bottom: 0 !important; + left: 0% !important; + right: 0% !important; + margin-bottom: 0 !important; +} + +.ui-accordion { + max-width: 100%; + gap: 20px; +} + +.ui-accordion-header { + font-size: 18px; + font-weight: 600; + background: transparent; +} + +.other-input { + border-radius: 20px; +} + +.anch { + color: #0085FF; + text-decoration: underline; + font-size: 18px; + font-weight: 500; +} + +.no-btn { + padding: 4px 40px; + border: 0.5px solid #052857; + border-radius: 16px; + background-color: transparent; +} + +.yes-btn { + padding: 5px 40px; + background-color: #EEBA2B; + border: none; + border-radius: 16px; +} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index dc1db89..32d22fa 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ ['checkStatus']], function () { }); + + +//subscription ROutes +// Route::group(['middleware' => ['vendor.jwt.verify']], function () { + + Route::get('my-subscription-page', [SubscriptionController::class, 'mySubscription'])->name('my-subscription-page'); +// }); + + + + +// Route::middleware(['checkToken'])->group(function () { + Route::get('list-of-plans', [SubscriptionController::class, 'listOfProduct'])->name('next.page.route'); +// }); +// Route::post('subscribe-to-product', [SubscriptionController::class, 'subscribeToProduct'])->name('subscribe-to-product'); +// Route::post('cancel-subscription', [SubscriptionController::class, 'cancelSubscription'])->name('cancel-subscription'); +// Route::get('thank-you', [SubscriptionController::class, 'thankyou'])->name('thankyou'); +// Route::get('cancel-thank-you', [SubscriptionController::class, 'cancelThankYou'])->name('cancel-thank-you'); +// Route::post('subscription-upgrade', [SubscriptionController::class, 'subscriptionUpgrade'])->name('subscription-upgrade');