stripe customer create
This commit is contained in:
@@ -135,7 +135,6 @@ class PasswordResetSerializer(BasePasswordSerializer, serializers.ModelSerialize
|
||||
|
||||
class ProfileSerializer(serializers.ModelSerializer):
|
||||
profile_photo = serializers.ImageField(required=False)
|
||||
phone_no = serializers.CharField(read_only=True)
|
||||
email = serializers.CharField(read_only=True)
|
||||
invite_count = serializers.SerializerMethodField(read_only=True)
|
||||
principal_type_name = serializers.SerializerMethodField(read_only=True)
|
||||
@@ -148,7 +147,6 @@ class ProfileSerializer(serializers.ModelSerializer):
|
||||
"profile_photo",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"phone_no",
|
||||
"email",
|
||||
"invite_count",
|
||||
]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from rest_framework import serializers
|
||||
from accounts.models import IAmPrincipalLocation
|
||||
from accounts.api.serializers import ProfileSerializer
|
||||
from manage_events.models import (
|
||||
EventMaster,
|
||||
Event,
|
||||
@@ -23,6 +24,8 @@ class EventImageSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
||||
class VenueSerializer(serializers.ModelSerializer):
|
||||
created_by = ProfileSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Venue
|
||||
fields = "__all__"
|
||||
|
||||
@@ -1,3 +1,87 @@
|
||||
from django.contrib import admin
|
||||
from .models import ReferralCode, ReferralRecord, ReferralRecordReward
|
||||
|
||||
# Register your models here.
|
||||
|
||||
class ReferralCodeAdmin(admin.ModelAdmin):
|
||||
list_display = (
|
||||
"referral_code",
|
||||
"principal",
|
||||
"principal_type",
|
||||
"get_principal_name",
|
||||
)
|
||||
search_fields = (
|
||||
"referral_code",
|
||||
"principal__first_name",
|
||||
"principal__last_name",
|
||||
"principal_type__name",
|
||||
)
|
||||
list_filter = ("principal_type",)
|
||||
|
||||
def get_principal_name(self, obj):
|
||||
return obj.principal.first_name + " " + obj.principal.last_name
|
||||
|
||||
get_principal_name.short_description = "Principal Name"
|
||||
|
||||
|
||||
admin.site.register(ReferralCode, ReferralCodeAdmin)
|
||||
|
||||
|
||||
class ReferralRecordAdmin(admin.ModelAdmin):
|
||||
list_display = (
|
||||
"id",
|
||||
"get_referrer_name",
|
||||
"get_referred_name",
|
||||
"principal_type",
|
||||
"is_completed",
|
||||
)
|
||||
search_fields = (
|
||||
"referrer_principal__first_name",
|
||||
"referrer_principal__last_name",
|
||||
"referred_principal__first_name",
|
||||
"referred_principal__last_name",
|
||||
"principal_type__name",
|
||||
)
|
||||
list_filter = (
|
||||
"is_completed",
|
||||
"principal_type",
|
||||
)
|
||||
raw_id_fields = ("referrer_principal", "referred_principal", "principal_type")
|
||||
|
||||
def get_referrer_name(self, obj):
|
||||
return f"{obj.referrer_principal.first_name} {obj.referrer_principal.last_name}"
|
||||
|
||||
get_referrer_name.short_description = "Referrer Name"
|
||||
|
||||
def get_referred_name(self, obj):
|
||||
return f"{obj.referred_principal.first_name} {obj.referred_principal.last_name}"
|
||||
|
||||
get_referred_name.short_description = "Referred Name"
|
||||
|
||||
|
||||
admin.site.register(ReferralRecord, ReferralRecordAdmin)
|
||||
|
||||
|
||||
class ReferralRecordRewardAdmin(admin.ModelAdmin):
|
||||
list_display = (
|
||||
"id",
|
||||
"get_referral_record_id",
|
||||
"get_subscription_name",
|
||||
"coins",
|
||||
"value",
|
||||
)
|
||||
search_fields = ("referral_record__id", "subscription__name", "coins")
|
||||
list_filter = ("subscription",)
|
||||
raw_id_fields = ("referral_record", "subscription")
|
||||
|
||||
def get_referral_record_id(self, obj):
|
||||
return f"{obj.referral_record.id}"
|
||||
|
||||
get_referral_record_id.short_description = "Referral Record ID"
|
||||
|
||||
def get_subscription_name(self, obj):
|
||||
return obj.subscription.name
|
||||
|
||||
get_subscription_name.short_description = "Subscription Name"
|
||||
|
||||
|
||||
admin.site.register(ReferralRecordReward, ReferralRecordRewardAdmin)
|
||||
|
||||
65
manage_referrals/migrations/0002_goodtimecoins.py
Normal file
65
manage_referrals/migrations/0002_goodtimecoins.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# Generated by Django 5.0.2 on 2024-03-01 10:55
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("manage_referrals", "0001_initial"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="GoodTimeCoins",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("active", models.BooleanField(default=True)),
|
||||
("deleted", models.BooleanField(default=False)),
|
||||
("created_on", models.DateTimeField(auto_now_add=True)),
|
||||
("modified_on", models.DateTimeField(auto_now=True)),
|
||||
("coins", models.IntegerField()),
|
||||
(
|
||||
"value_in_pound",
|
||||
models.DecimalField(decimal_places=2, max_digits=10),
|
||||
),
|
||||
("comments", models.CharField(blank=True, max_length=255, null=True)),
|
||||
("start_date", models.DateField()),
|
||||
("end_date", models.DateField()),
|
||||
(
|
||||
"created_by",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="%(class)s_created",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
(
|
||||
"modified_by",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="%(class)s_modified",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"db_table": "good_time_coins",
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -2,7 +2,7 @@ from django.db import models
|
||||
import random
|
||||
import string
|
||||
from accounts.models import BaseModel, IAmPrincipal, IAmPrincipalType
|
||||
from manage_subscriptions.models import Subscription
|
||||
from manage_subscriptions.models import PrincipalSubscription, Subscription
|
||||
|
||||
|
||||
# Create your models here.
|
||||
@@ -147,6 +147,12 @@ class ReferralTracking(BaseModel):
|
||||
referral_record = models.ForeignKey(
|
||||
ReferralRecord, on_delete=models.CASCADE, related_name="record_tracking"
|
||||
)
|
||||
referrer_subscription_id = models.PositiveIntegerField(null=True, blank=True)
|
||||
referred_subscription_id = models.PositiveIntegerField(null=True, blank=True)
|
||||
is_referrer_subscribed = models.BooleanField(
|
||||
default=False,
|
||||
help_text="is referrer subscribed at the time of referred subscription",
|
||||
)
|
||||
ip_address = models.GenericIPAddressField()
|
||||
user_agent = models.CharField(max_length=255)
|
||||
device_model = models.CharField(max_length=100, blank=True, null=True)
|
||||
@@ -156,3 +162,17 @@ class ReferralTracking(BaseModel):
|
||||
|
||||
def __str__(self):
|
||||
return f"Referral Record ID: {self.referral_record.id}"
|
||||
|
||||
|
||||
class GoodTimeCoins(BaseModel):
|
||||
coins = models.IntegerField()
|
||||
value_in_pound = models.DecimalField(max_digits=10, decimal_places=2)
|
||||
comments = models.CharField(max_length=255, blank=True, null=True)
|
||||
start_date = models.DateField()
|
||||
end_date = models.DateField()
|
||||
|
||||
def __str__(self):
|
||||
return f"Coins: {self.coins}, Value in Pound: {self.value_in_pound}"
|
||||
|
||||
class Meta:
|
||||
db_table = "good_time_coins"
|
||||
|
||||
@@ -48,15 +48,29 @@ class CreatePrincipalSubscriptionApi(APIView):
|
||||
)
|
||||
print("order_id: ", order_id)
|
||||
try:
|
||||
customer = stripe.Customer.create(
|
||||
email=request.user.email,
|
||||
shipping={
|
||||
"name": request.user.first_name,
|
||||
"address": {
|
||||
"line1": "Test Address",
|
||||
"city": "Test City",
|
||||
"postal_code": "400060",
|
||||
"country": "IN", # Adjust accordingly
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
payment_intent = stripe.PaymentIntent.create(
|
||||
amount=int(subscription.amount * 100),
|
||||
currency="INR",
|
||||
currency="GBP",
|
||||
description="Principal Subscription",
|
||||
metadata={
|
||||
"principal": request.user.id,
|
||||
"order_id": order_id,
|
||||
"subscription": subscription.id,
|
||||
},
|
||||
customer=customer.id,
|
||||
)
|
||||
return Response(
|
||||
{
|
||||
@@ -120,6 +134,8 @@ class CreatePrincipalSubscriptionApi(APIView):
|
||||
# return ApiResponse.error(**fail_response)
|
||||
|
||||
import json
|
||||
|
||||
|
||||
@method_decorator(csrf_exempt, name="dispatch")
|
||||
class StripeWebhookTest(APIView):
|
||||
authentication_classes = []
|
||||
|
||||
20
manage_subscriptions/utils.py
Normal file
20
manage_subscriptions/utils.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from django.utils.timezone import now
|
||||
|
||||
from manage_subscriptions.models import PrincipalSubscription, SubscriptionStatus
|
||||
|
||||
|
||||
def get_active_subscription_id_for_principal(principal):
|
||||
# Filter subscriptions for the principal that are active and not cancelled
|
||||
active_subscriptions = PrincipalSubscription.objects.filter(
|
||||
principal=principal,
|
||||
status=SubscriptionStatus.ACTIVE,
|
||||
cancelled=False,
|
||||
end_date__gte=now().date(), # Ensure the subscription hasn't expired
|
||||
).order_by(
|
||||
"-end_date"
|
||||
) # Order by end_date to get the most recent active subscription
|
||||
|
||||
if active_subscriptions.exists():
|
||||
# Return the ID of the most recent active subscription
|
||||
return active_subscriptions.first().id
|
||||
return None
|
||||
Reference in New Issue
Block a user