diff --git a/app/Exports/ReportExport.php b/app/Exports/ReportExport.php index 50f417f..7a93a19 100644 --- a/app/Exports/ReportExport.php +++ b/app/Exports/ReportExport.php @@ -1,5 +1,4 @@ -reportType === 'Total Subscribed') { - $query = Subscriptions::with(['iamPrincipal.state']); + $query = Subscriptions::query(); if (!empty($this->states)) { $query->whereHas('iamPrincipal', function ($q) { @@ -96,9 +95,49 @@ class ReportExport implements FromView $query->whereDate('created_at', '<=', $this->endDate); } + $data = $query->get(); + } elseif ($this->reportType === 'Subscriptions Cancelled') { + $query = Subscriptions::query()->where('is_cancelled_subscription', 1); + + if (!empty($this->states)) { + $query->whereHas('iamPrincipal', function ($q) { + $q->whereIn('state_xid', $this->states); + }); + } + + if ($this->startDate) { + $query->whereDate('created_at', '>=', $this->startDate); + } + + if ($this->endDate) { + $query->whereDate('created_at', '<=', $this->endDate); + } + $data = $query->get(); } + elseif ($this->reportType === 'Subscriptions Cancelled') { + $query = Subscriptions::with('iamPrincipal')->where('is_cancelled_subscription', 1); + + if (!empty($this->states)) { + $query->whereHas('iamPrincipal', function ($q) { + $q->whereIn('state_xid', $this->states); + }); + } + + if ($this->startDate) { + $query->whereDate('created_at', '>=', $this->startDate); + } + + if ($this->endDate) { + $query->whereDate('created_at', '<=', $this->endDate); + } + + $data = $query->get(); + } + + + return view('exports.report', [ 'data' => $data, 'reportType' => $this->reportType diff --git a/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php b/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php index 8258df1..ce05ea0 100644 --- a/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php +++ b/app/Http/Controllers/APIs/Customer_API/StripeWebhookController.php @@ -15,13 +15,15 @@ use Stripe\Stripe; use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\DB; +use DateTime; class StripeWebhookController extends Controller { // - - public function getWebhook(Request $request){ + + public function getWebhook(Request $request) + { // dd("ssssss",$request); Log::info('Stripe Webhook Received= in getWebhook '); Log::info('Stripe Webhook Received: ' . $request->getContent()); @@ -81,6 +83,47 @@ class StripeWebhookController extends Controller $userEmail = $metadata->userEmail; $subscriptionProductId = $metadata->subscriptionProductXid; + + $isReferralSubscription = $metadata->is_referral_subscription; + $referralUserId = $metadata->referral_user_id; + + if ($isReferralSubscription == 1) { + //who has refer the Subscription to Current user + Log::info("Referral User Subscription Updating Function Starts"); + + $referralUserSubscriptionData = Subscriptions::where('iam_principal_xid', $referralUserId)->where('subscription_status', '=', 'active')->first(); + if ($referralUserSubscriptionData && $referralUserSubscriptionData->is_cancelled_subscription == 0) { + //update subscription add 30 days trial period to this subscription + $nextPaymentDate = $referralUserSubscriptionData->next_payment_date; + $date = new DateTime($nextPaymentDate); + $date->modify('+30 days'); + $newDate = $date->format('Y-m-d H:i:s'); + Log::info("new Date = "); + Log::info($newDate); + $timestampForReferralUser = $date->getTimestamp(); + + $updateSubscription = $stripe->subscriptions->update( + $referralUserSubscriptionData->subscription_id, + ['trial_end' => $timestampForReferralUser] + ); + + $SubscriptionObject = $stripe->subscriptions->retrieve($referralUserSubscriptionData->subscription_id, []); + + $upcoming_invoice = $stripe->invoices->upcoming([ + 'subscription' => $referralUserSubscriptionData->subscription_id, // use retrieved id from subscription + ]); + $referralUserSubscriptionData->current_period_start = date('Y-m-d H:i:s', $SubscriptionObject->current_period_start); + $referralUserSubscriptionData->current_period_end = date('Y-m-d H:i:s', $SubscriptionObject->current_period_end); + $referralUserSubscriptionData->next_payment_date = date('Y-m-d H:i:s', $upcoming_invoice->next_payment_attempt); + $referralUserSubscriptionData->save(); + + Log::info("Referral User Subscription Updated with Referral"); + + //updated the Referral Users Subscription. + + } + } + $subscriptionProductData = SubscriptionProducts::where('id', $subscriptionProductId)->first(); //checkout store in db @@ -115,6 +158,41 @@ class StripeWebhookController extends Controller ] ); + if ($isReferralSubscription == 1) { + + Log::info("new User Subscription Updating Function Starts"); + + //update Current User subscription to add 30 days additional to their subscription end + $SubscriptionObject = $stripe->subscriptions->retrieve($subscriptionData->subscription, []); + $newUserSubscriptionDetails = Subscriptions::where('iam_principal_xid', $userId) + ->where('subscription_product_xid', $subscriptionProductId)->first(); + + $nextPaymentDate = $newUserSubscriptionDetails->next_payment_date; + $date = new DateTime($nextPaymentDate); + $date->modify('+30 days'); + $newDate = $date->format('Y-m-d H:i:s'); + Log::info("new Date = "); + Log::info($newDate); + $timestampForReferralUser = $date->getTimestamp(); + + $updateSubscription = $stripe->subscriptions->update( + $newUserSubscriptionDetails->subscription_id, + ['trial_end' => $timestampForReferralUser] + ); + + $SubscriptionObject = $stripe->subscriptions->retrieve($newUserSubscriptionDetails->subscription_id, []); + + $upcoming_invoice = $stripe->invoices->upcoming([ + 'subscription' => $newUserSubscriptionDetails->subscription_id, // use retrieved id from subscription + ]); + $newUserSubscriptionDetails->current_period_start = date('Y-m-d H:i:s', $SubscriptionObject->current_period_start); + $newUserSubscriptionDetails->current_period_end = date('Y-m-d H:i:s', $SubscriptionObject->current_period_end); + $newUserSubscriptionDetails->next_payment_date = date('Y-m-d H:i:s', $upcoming_invoice->next_payment_attempt); + $newUserSubscriptionDetails->save(); + + Log::info("new User Subscription Updated with Referral"); + } + $getUserData = IamPrincipal::where('id', $userId)->first(); $title = "Congratulations you subscription is now active"; @@ -140,10 +218,6 @@ class StripeWebhookController extends Controller } - - - - return response('Webhook received', 200); } } \ No newline at end of file diff --git a/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php b/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php index 687aaae..3abda2a 100644 --- a/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php +++ b/app/Http/Controllers/APIs/Customer_API/SubscriptionController.php @@ -183,6 +183,13 @@ class SubscriptionController extends Controller // dd($request->all()); try { + $isReferralSubscription = 0; + $referralUserId = $request->referral_user_id; + if( $referralUserId && $referralUserId != null){ + $isReferralSubscription = 1; + }else{ + $isReferralSubscription = 0; + } $userId = $request->user_id; $subscriptionProductXid = $request->subscription_product_xid; @@ -214,9 +221,12 @@ class SubscriptionController extends Controller // 'tax_id_collection' => ['enabled' => true], 'metadata' => [ 'userId' => $userData->id, - 'userEmail' => $userData->email_address, - 'subscriptionProductXid' => $subscriptionProductXid + 'subscriptionProductXid' => $subscriptionProductXid , + + 'is_referral_subscription'=>$isReferralSubscription, + 'referral_user_id'=>$referralUserId, + ], 'success_url' => route('thankyou'), diff --git a/app/Models/Subscriptions.php b/app/Models/Subscriptions.php index 2acea0e..bdd96eb 100644 --- a/app/Models/Subscriptions.php +++ b/app/Models/Subscriptions.php @@ -18,30 +18,6 @@ class Subscriptions extends Model } - protected $fillable = [ - 'id', - 'subscription_product_xid', - 'iam_principal_xid', - 'amount', - 'stripe_customer_id', - 'payment_intent_id', - 'payment_intent_client_secret', - 'subscription_id', - 'subscription_status', - 'current_period_start', - 'current_period_end', - 'status', - 'next_payment_date', - 'is_cancelled_subscription', - 'cancelled_at', - 'is_active', - 'deleted_at', - 'created_by', - 'modified_by', - 'created_at', - 'updated_at' - ]; - public function iamPrincipal() { diff --git a/resources/views/exports/report.blade.php b/resources/views/exports/report.blade.php index e7729d2..4dd4728 100644 --- a/resources/views/exports/report.blade.php +++ b/resources/views/exports/report.blade.php @@ -1,111 +1,141 @@ + Report +

{{ $reportType }} Report

@if ($reportType === 'Total Subscribed') - - - - - - - - - - - - - @foreach($data as $subscription) - - - - - - - - - @endforeach - -
Sr No.Subscription IDUser First NameUser Last NameStateCreated At
{{ $loop->iteration }}{{ $subscription->id }}{{ $subscription->iamPrincipal->first_name ?? 'N/A' }}{{ $subscription->iamPrincipal->last_name ?? 'N/A' }}{{ $subscription->iamPrincipal->state->name ?? 'N/A' }}{{ $subscription->created_at ?? 'N/A' }}
+ + + + + + + + + + + + + @foreach($data as $subscription) + + + + + + + + + @endforeach + +
Sr No.Subscription IDUser First NameUser Last NameStateCreated At
{{ $loop->iteration }}{{ $subscription->id }}{{ $subscription->iamPrincipal->first_name ?? 'N/A' }}{{ $subscription->iamPrincipal->last_name ?? 'N/A' }}{{ $subscription->iamPrincipal->state->name ?? 'N/A' }}{{ $subscription->created_at ?? 'N/A' }}
@elseif ($reportType === 'Total Users') - - - - - - - - - - - - - @foreach($data as $user) - - - - - - - - - @endforeach - -
Sr No.User IDFirst NameLast NameStateCreated At
{{ $loop->iteration }}{{ $user->id }}{{ $user->first_name }}{{ $user->last_name }}{{ $user->state->name }}{{ $user->created_at }}
+ + + + + + + + + + + + + @foreach($data as $user) + + + + + + + + + @endforeach + +
Sr No.User IDFirst NameLast NameStateCreated At
{{ $loop->iteration }}{{ $user->id }}{{ $user->first_name }}{{ $user->last_name }}{{ $user->state->name }}{{ $user->created_at }}
@elseif ($reportType === 'Redemptions') - - - - - - - - - - - - - @foreach($data as $redemption) - - - - - - - - - @endforeach - -
Sr No.Redemption IDRestaurant NameCustomer NameStateCreated At
{{ $loop->iteration }}{{ $redemption->id }}{{ $redemption->restaurant->name }}{{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }}{{ $redemption->customer->state->name }}{{ $redemption->created_at }}
+ + + + + + + + + + + + + @foreach($data as $redemption) + + + + + + + + + @endforeach + +
Sr No.Redemption IDRestaurant NameCustomer NameStateCreated At
{{ $loop->iteration }}{{ $redemption->id }}{{ $redemption->restaurant->name }}{{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }}{{ $redemption->customer->state->name }}{{ $redemption->created_at }}
@elseif ($reportType === 'Redemptions for Specific Restaurants') - - - - - - - - - +
Sr No.Redemption IDRestaurant NameCustomer NameStateCreated At
+ + + + + + + + + + + + @foreach($data as $redemption) + + + + + + + + + @endforeach + + +
Sr No.Redemption IDRestaurant NameCustomer NameStateCreated At
{{ $loop->iteration }}{{ $redemption->id }}{{ $redemption->restaurant->name }}{{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }}{{ $redemption->customer->state->name }}{{ $redemption->created_at }}
+ @elseif ($reportType === 'Subscriptions Cancelled') + + + + + + + + + + + + + @foreach($data as $item) + + + + + + + - - - @foreach($data as $redemption) - - - - - - - - - @endforeach - - -
First NameLast NameEmailStateSubscription StatusCancelled At
{{ $item->iamPrincipal->first_name }}{{ $item->iamPrincipal->last_name }}{{ $item->iamPrincipal->email_address }}{{ $item->iamPrincipal->state->name }}{{ $item->subscription_status }}{{ \Carbon\Carbon::parse($item->cancelled_at)->format('m-d-Y') }}
{{ $loop->iteration }}{{ $redemption->id }}{{ $redemption->restaurant->name }}{{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }}{{ $redemption->customer->state->name }}{{ $redemption->created_at }}
+ @endforeach + + + + @endif - + + \ No newline at end of file