stripe customer create

This commit is contained in:
rizwanisready
2024-03-01 18:00:42 +05:30
parent 27adc0b19d
commit cbdbac40b0
7 changed files with 211 additions and 5 deletions

View File

@@ -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",
]

View File

@@ -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__"

View File

@@ -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)

View 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",
},
),
]

View File

@@ -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"

View File

@@ -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 = []

View 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