From c38b15d0f9ca74fe4a72fabf8a51b049d737033b Mon Sep 17 00:00:00 2001 From: MinhDTN Date: Thu, 11 Dec 2025 13:39:45 +0800 Subject: [PATCH 1/6] Update shop models --- .../registration/migrations/0001_initial.py | 64 +++++++++++++++++++ server/server/settings.py | 2 + server/shop/__init__.py | 0 server/shop/admin.py | 6 ++ server/shop/apps.py | 6 ++ server/shop/migrations/0001_initial.py | 52 +++++++++++++++ server/shop/migrations/__init__.py | 0 server/shop/models.py | 32 ++++++++++ server/shop/tests.py | 3 + server/shop/views.py | 5 ++ 10 files changed, 170 insertions(+) create mode 100644 server/registration/migrations/0001_initial.py create mode 100644 server/shop/__init__.py create mode 100644 server/shop/admin.py create mode 100644 server/shop/apps.py create mode 100644 server/shop/migrations/0001_initial.py create mode 100644 server/shop/migrations/__init__.py create mode 100644 server/shop/models.py create mode 100644 server/shop/tests.py create mode 100644 server/shop/views.py diff --git a/server/registration/migrations/0001_initial.py b/server/registration/migrations/0001_initial.py new file mode 100644 index 0000000..5099420 --- /dev/null +++ b/server/registration/migrations/0001_initial.py @@ -0,0 +1,64 @@ +# Generated by Django 5.2.8 on 2025-12-11 05:37 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Business', + fields=[ + ('businessID', models.CharField(max_length=100, primary_key=True, serialize=False)), + ('businessName', models.CharField(max_length=255)), + ('streetNo', models.IntegerField()), + ('streetName', models.CharField(max_length=255)), + ('suburb', models.CharField(max_length=255)), + ('state', models.CharField(max_length=100)), + ('postcode', models.IntegerField()), + ('country', models.CharField(max_length=100)), + ('payDetail', models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name='Household', + fields=[ + ('houseID', models.CharField(max_length=100, primary_key=True, serialize=False)), + ('houseName', models.CharField(max_length=255)), + ('houseNo', models.IntegerField()), + ('streetName', models.CharField(max_length=255)), + ('suburb', models.CharField(max_length=255)), + ('postcode', models.IntegerField()), + ('state', models.CharField(max_length=100)), + ('country', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='PetCarer', + fields=[ + ('username', models.CharField(max_length=100, primary_key=True, serialize=False)), + ('fullName', models.CharField(max_length=255)), + ('email', models.EmailField(max_length=254)), + ('phoneNumber', models.CharField(max_length=20)), + ('payDetail', models.CharField(blank=True, max_length=255, null=True)), + ('belongsToBusiness', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='business_members', to='registration.business')), + ('belongsToHouse', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='household_members', to='registration.household')), + ], + ), + migrations.AddField( + model_name='household', + name='accountManager', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_households', to='registration.petcarer'), + ), + migrations.AddField( + model_name='business', + name='accountManager', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_businesses', to='registration.petcarer'), + ), + ] diff --git a/server/server/settings.py b/server/server/settings.py index 8474ca2..c8d7741 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -53,6 +53,8 @@ "tasks.apps.TasksConfig", "dog.apps.DogConfig", "vet.apps.VetConfig", + "shop.apps.ShopConfig", + "registration.apps.RegistrationConfig", "landing_page", ] diff --git a/server/shop/__init__.py b/server/shop/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/shop/admin.py b/server/shop/admin.py new file mode 100644 index 0000000..e24586f --- /dev/null +++ b/server/shop/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import ShopItem, ShopOrder, ShopSupplier +# Register your models here. +admin.site.register(ShopOrder) +admin.site.register(ShopItem) +admin.site.register(ShopSupplier) \ No newline at end of file diff --git a/server/shop/apps.py b/server/shop/apps.py new file mode 100644 index 0000000..1f05a2b --- /dev/null +++ b/server/shop/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ShopConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'shop' diff --git a/server/shop/migrations/0001_initial.py b/server/shop/migrations/0001_initial.py new file mode 100644 index 0000000..ea9a280 --- /dev/null +++ b/server/shop/migrations/0001_initial.py @@ -0,0 +1,52 @@ +# Generated by Django 5.2.8 on 2025-12-11 05:37 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('registration', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='ShopSupplier', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('phoneNumber', models.CharField(max_length=15)), + ('email', models.EmailField(max_length=254)), + ('streetNo', models.CharField(max_length=10)), + ('streetNome', models.CharField(max_length=100)), + ('suburb', models.CharField(max_length=100)), + ('state', models.CharField(max_length=100)), + ('postcode', models.CharField(max_length=10)), + ('country', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='ShopOrder', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('product_name', models.CharField(max_length=100)), + ('itemOrdered', models.CharField(max_length=100)), + ('dateOrdered', models.DateTimeField(auto_now_add=True)), + ('amountSpent', models.DecimalField(decimal_places=2, max_digits=10)), + ('useFor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='registration.petcarer')), + ], + ), + migrations.CreateModel( + name='ShopItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('itemName', models.CharField(max_length=100)), + ('price', models.DecimalField(decimal_places=2, max_digits=10)), + ('inStock', models.IntegerField()), + ('supplierPrice', models.DecimalField(decimal_places=2, max_digits=10)), + ('supplier', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shop.shopsupplier')), + ], + ), + ] diff --git a/server/shop/migrations/__init__.py b/server/shop/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/shop/models.py b/server/shop/models.py new file mode 100644 index 0000000..7a92abf --- /dev/null +++ b/server/shop/models.py @@ -0,0 +1,32 @@ +from django.db import models +from registration.models import PetCarer +# Create your models here. +class ShopOrder(models.Model): + useFor = models.ForeignKey(PetCarer, on_delete=models.CASCADE) + product_name = models.CharField(max_length=100) + itemOrdered = models.CharField(max_length=100) + dateOrdered = models.DateTimeField(auto_now_add=True) + amountSpent = models.DecimalField(max_digits=10, decimal_places=2) + def __str__(self): + return f"Order {self.order_id}: {self.product_name} (x{self.quantity})" + +class ShopItem(models.Model): + itemName = models.CharField(max_length=100) + price = models.DecimalField(max_digits=10, decimal_places=2) + inStock = models.IntegerField() + supplier = models.ForeignKey('ShopSupplier', on_delete=models.CASCADE) + supplierPrice = models.DecimalField(max_digits=10, decimal_places=2) + def __str__(self): + return self.itemName + +class ShopSupplier(models.Model): + phoneNumber = models.CharField(max_length=15) + email = models.EmailField() + streetNo = models.CharField(max_length=10) + streetNome = models.CharField(max_length=100) + suburb = models.CharField(max_length=100) + state = models.CharField(max_length=100) + postcode = models.CharField(max_length=10) + country = models.CharField(max_length=100) + def __str__(self): + return self.name \ No newline at end of file diff --git a/server/shop/tests.py b/server/shop/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/server/shop/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/server/shop/views.py b/server/shop/views.py new file mode 100644 index 0000000..3deb526 --- /dev/null +++ b/server/shop/views.py @@ -0,0 +1,5 @@ +from django.shortcuts import render +from django.http import HttpResponse +# Create your views here. +def index(request): + return HttpResponse("This is the shop index.") \ No newline at end of file From e22a263e89c05bb25173c0c4e4ff7953817c80d5 Mon Sep 17 00:00:00 2001 From: MinhDTN Date: Thu, 11 Dec 2025 13:52:33 +0800 Subject: [PATCH 2/6] update shop urls --- server/server/urls.py | 1 + 1 file changed, 1 insertion(+) diff --git a/server/server/urls.py b/server/server/urls.py index b1d0acf..68a347d 100644 --- a/server/server/urls.py +++ b/server/server/urls.py @@ -31,4 +31,5 @@ path("home/", include("landing_page.urls")), path("dog/", include("dog.urls")), path("vet/", include("vet.urls")), + path("shop/", include("shop.urls")), ] From d920639703a06e40a1a31e1bc9ee7e004d2ff15f Mon Sep 17 00:00:00 2001 From: MinhDTN Date: Thu, 11 Dec 2025 14:14:13 +0800 Subject: [PATCH 3/6] fix bug shop url --- server/shop/urls.py | 7 +++++++ server/shop/views.py | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 server/shop/urls.py diff --git a/server/shop/urls.py b/server/shop/urls.py new file mode 100644 index 0000000..3f577c3 --- /dev/null +++ b/server/shop/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +app_name = "shop" +urlpatterns = [ + path("", views.shop_home, name="shop-home"), +] diff --git a/server/shop/views.py b/server/shop/views.py index 3deb526..f2494b6 100644 --- a/server/shop/views.py +++ b/server/shop/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render -from django.http import HttpResponse + # Create your views here. -def index(request): - return HttpResponse("This is the shop index.") \ No newline at end of file +def shop_home(request): + return render(request, 'shop/shop_home.html') \ No newline at end of file From fe3012d400e142dea94a27a1cf7c222d24898c1d Mon Sep 17 00:00:00 2001 From: MinhDTN Date: Thu, 11 Dec 2025 21:59:35 +0800 Subject: [PATCH 4/6] Update view holder --- server/shop/shop_home.html | 10 ++++++++++ server/shop/templates/shop/shop_home.html | 14 ++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 server/shop/shop_home.html create mode 100644 server/shop/templates/shop/shop_home.html diff --git a/server/shop/shop_home.html b/server/shop/shop_home.html new file mode 100644 index 0000000..e4ab34b --- /dev/null +++ b/server/shop/shop_home.html @@ -0,0 +1,10 @@ + + + + + Welcome to Our Shop + + + + + diff --git a/server/shop/templates/shop/shop_home.html b/server/shop/templates/shop/shop_home.html new file mode 100644 index 0000000..87ebb42 --- /dev/null +++ b/server/shop/templates/shop/shop_home.html @@ -0,0 +1,14 @@ + + + + + + Shop — Placeholder + + +
+

Shop

+

This is a placeholder `shop_home.html` template. Replace with real content in a follow-up commit.

+
+ + From e4623582e6424a40117c107eee55632e786ce47c Mon Sep 17 00:00:00 2001 From: MinhDTN Date: Thu, 11 Dec 2025 22:12:58 +0800 Subject: [PATCH 5/6] resolve registration conflicts --- server/registration/apps.py | 2 +- server/registration/migrations/0001_initial.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/registration/apps.py b/server/registration/apps.py index 127d8e4..50a576a 100644 --- a/server/registration/apps.py +++ b/server/registration/apps.py @@ -2,4 +2,4 @@ class RegistrationConfig(AppConfig): - name = 'registration' + name = 'registration' \ No newline at end of file diff --git a/server/registration/migrations/0001_initial.py b/server/registration/migrations/0001_initial.py index 5099420..aabd2cb 100644 --- a/server/registration/migrations/0001_initial.py +++ b/server/registration/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.2.8 on 2025-12-11 05:37 +# Generated by Django 5.2.8 on 2025-12-11 03:01 import django.db.models.deletion from django.db import migrations, models @@ -61,4 +61,4 @@ class Migration(migrations.Migration): name='accountManager', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_businesses', to='registration.petcarer'), ), - ] + ] \ No newline at end of file From 7ff13e2c3c0fe5911b24571cc66362dd39eb8a38 Mon Sep 17 00:00:00 2001 From: MinhDTN Date: Thu, 11 Dec 2025 22:19:08 +0800 Subject: [PATCH 6/6] Resolve setting conflicts --- server/server/settings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server/server/settings.py b/server/server/settings.py index eba91b4..0887fcb 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -57,7 +57,6 @@ "registration.apps.RegistrationConfig", "landing_page", "health.apps.HealthConfig", - "registration", ] MIDDLEWARE = [