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')
-
-
-
- | Sr No. |
- Subscription ID |
- User First Name |
- User Last Name |
- State |
- Created At |
-
-
-
- @foreach($data as $subscription)
-
- | {{ $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' }} |
-
- @endforeach
-
-
+
+
+
+ | Sr No. |
+ Subscription ID |
+ User First Name |
+ User Last Name |
+ State |
+ Created At |
+
+
+
+ @foreach($data as $subscription)
+
+ | {{ $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' }} |
+
+ @endforeach
+
+
@elseif ($reportType === 'Total Users')
-
-
-
- | Sr No. |
- User ID |
- First Name |
- Last Name |
- State |
- Created At |
-
-
-
- @foreach($data as $user)
-
- | {{ $loop->iteration }} |
- {{ $user->id }} |
- {{ $user->first_name }} |
- {{ $user->last_name }} |
- {{ $user->state->name }} |
- {{ $user->created_at }} |
-
- @endforeach
-
-
+
+
+
+ | Sr No. |
+ User ID |
+ First Name |
+ Last Name |
+ State |
+ Created At |
+
+
+
+ @foreach($data as $user)
+
+ | {{ $loop->iteration }} |
+ {{ $user->id }} |
+ {{ $user->first_name }} |
+ {{ $user->last_name }} |
+ {{ $user->state->name }} |
+ {{ $user->created_at }} |
+
+ @endforeach
+
+
@elseif ($reportType === 'Redemptions')
-
-
-
- | Sr No. |
- Redemption ID |
- Restaurant Name |
- Customer Name |
- State |
- Created At |
-
-
-
- @foreach($data as $redemption)
-
- | {{ $loop->iteration }} |
- {{ $redemption->id }} |
- {{ $redemption->restaurant->name }} |
- {{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }} |
- {{ $redemption->customer->state->name }} |
- {{ $redemption->created_at }} |
-
- @endforeach
-
-
+
+
+
+ | Sr No. |
+ Redemption ID |
+ Restaurant Name |
+ Customer Name |
+ State |
+ Created At |
+
+
+
+ @foreach($data as $redemption)
+
+ | {{ $loop->iteration }} |
+ {{ $redemption->id }} |
+ {{ $redemption->restaurant->name }} |
+ {{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }} |
+ {{ $redemption->customer->state->name }} |
+ {{ $redemption->created_at }} |
+
+ @endforeach
+
+
@elseif ($reportType === 'Redemptions for Specific Restaurants')
-
-
-
- | Sr No. |
- Redemption ID |
- Restaurant Name |
- Customer Name |
- State |
- Created At |
+
+
+
+ | Sr No. |
+ Redemption ID |
+ Restaurant Name |
+ Customer Name |
+ State |
+ Created At |
+
+
+
+ @foreach($data as $redemption)
+
+ | {{ $loop->iteration }} |
+ {{ $redemption->id }} |
+ {{ $redemption->restaurant->name }} |
+ {{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }} |
+ {{ $redemption->customer->state->name }} |
+ {{ $redemption->created_at }} |
+
+ @endforeach
+
+
+
+ @elseif ($reportType === 'Subscriptions Cancelled')
+
+
+
+ | First Name |
+ Last Name |
+ Email |
+ State |
+ Subscription Status |
+ Cancelled At |
+
+
+
+ @foreach($data as $item)
+
+ | {{ $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') }} |
-
-
- @foreach($data as $redemption)
-
- | {{ $loop->iteration }} |
- {{ $redemption->id }} |
- {{ $redemption->restaurant->name }} |
- {{ $redemption->customer->first_name }} {{ $redemption->customer->last_name }} |
- {{ $redemption->customer->state->name }} |
- {{ $redemption->created_at }} |
-
- @endforeach
-
-
-
+ @endforeach
+
+
+
+
@endif
-
+
+