diff --git a/client/src/components/onboarding/OrganisationAddress.vue b/client/src/components/onboarding/OrganisationAddress.vue index c5200b53..07740a81 100644 --- a/client/src/components/onboarding/OrganisationAddress.vue +++ b/client/src/components/onboarding/OrganisationAddress.vue @@ -3,11 +3,12 @@ import { computed } from "vue"; const props = defineProps<{ modelValue: { - street: string; - streetNumber: string; - postalCode: string; - city: string; - country: string; + company_name: string; + company_street: string; + company_street_number: string; + company_postal_code: string; + company_city: string; + company_country: string; }; }>(); @@ -25,6 +26,24 @@ const orgAddress = computed({ diff --git a/server/vbv_lernwelt/shop/migrations/0008_auto_20231117_0905.py b/server/vbv_lernwelt/shop/migrations/0008_auto_20231117_0905.py new file mode 100644 index 00000000..a0178ced --- /dev/null +++ b/server/vbv_lernwelt/shop/migrations/0008_auto_20231117_0905.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.20 on 2023-11-17 08:05 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("shop", "0007_checkoutinformation_webhook_history"), + ] + + operations = [ + migrations.RemoveField( + model_name="billingaddress", + name="id", + ), + migrations.AlterField( + model_name="billingaddress", + name="user", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + primary_key=True, + serialize=False, + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/server/vbv_lernwelt/shop/models.py b/server/vbv_lernwelt/shop/models.py index 879af2b2..5919435b 100644 --- a/server/vbv_lernwelt/shop/models.py +++ b/server/vbv_lernwelt/shop/models.py @@ -23,7 +23,11 @@ class BillingAddress(models.Model): Draft of a billing address for a purchase from the shop. """ - user = models.ForeignKey("core.User", on_delete=models.CASCADE) + user = models.OneToOneField( + "core.User", + on_delete=models.CASCADE, + primary_key=True, + ) # user first_name = models.CharField(max_length=255, blank=True) diff --git a/server/vbv_lernwelt/shop/views.py b/server/vbv_lernwelt/shop/views.py index 4706b820..009c25be 100644 --- a/server/vbv_lernwelt/shop/views.py +++ b/server/vbv_lernwelt/shop/views.py @@ -1,6 +1,5 @@ import structlog from django.http import JsonResponse -from django.shortcuts import get_object_or_404 from rest_framework import status from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticated @@ -41,10 +40,15 @@ def webhook_url(base_url): @api_view(["GET"]) @permission_classes([IsAuthenticated]) def get_billing_address(request): - billing_address = get_object_or_404(BillingAddress, user=request.user) - serializer = BillingAddressSerializer(billing_address) + try: + billing_address = BillingAddress.objects.get(user=request.user) + data = BillingAddressSerializer(billing_address).data + except BillingAddress.DoesNotExist: + data = BillingAddressSerializer().data + data["first_name"] = request.user.first_name + data["last_name"] = request.user.last_name - return Response(serializer.data) + return Response(data) @api_view(["PUT"]) @@ -143,7 +147,6 @@ def checkout_vv(request): # ) address = request.data["address"] - organization = request.data["organisation_address"] base_redirect_url = request.data["redirect_url"] # not yet initialized at all or canceled/failed @@ -166,21 +169,7 @@ def checkout_vv(request): product_price=product.price, product_name=product.name, product_description=product.description, - # address - first_name=address["firstName"], - last_name=address["lastName"], - street=address["street"], - street_number=address["streetNumber"], - postal_code=address["postalCode"], - city=address["city"], - country=address["country"], - # organization - company_name=organization.get("name"), - company_street=organization.get("street"), - company_street_number=organization.get("streetNumber"), - company_postal_code=organization.get("postalCode"), - company_city=organization.get("city"), - company_country=organization.get("country"), + **address, ) return JsonResponse(