From 58e81517c7f43a922d92df3e0b0b9d50e8e7ca00 Mon Sep 17 00:00:00 2001 From: alhanoufALLUHAYDDAN Date: Wed, 27 Nov 2024 11:46:00 +0300 Subject: [PATCH 01/13] started project --- Pawtential/Pawtential/__init__.py | 0 Pawtential/Pawtential/asgi.py | 16 ++++ Pawtential/Pawtential/settings.py | 123 ++++++++++++++++++++++++++++++ Pawtential/Pawtential/urls.py | 22 ++++++ Pawtential/Pawtential/wsgi.py | 16 ++++ Pawtential/manage.py | 22 ++++++ README.md | 8 ++ 7 files changed, 207 insertions(+) create mode 100644 Pawtential/Pawtential/__init__.py create mode 100644 Pawtential/Pawtential/asgi.py create mode 100644 Pawtential/Pawtential/settings.py create mode 100644 Pawtential/Pawtential/urls.py create mode 100644 Pawtential/Pawtential/wsgi.py create mode 100755 Pawtential/manage.py diff --git a/Pawtential/Pawtential/__init__.py b/Pawtential/Pawtential/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/Pawtential/asgi.py b/Pawtential/Pawtential/asgi.py new file mode 100644 index 0000000..487bd58 --- /dev/null +++ b/Pawtential/Pawtential/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for Pawtential project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Pawtential.settings') + +application = get_asgi_application() diff --git a/Pawtential/Pawtential/settings.py b/Pawtential/Pawtential/settings.py new file mode 100644 index 0000000..7147395 --- /dev/null +++ b/Pawtential/Pawtential/settings.py @@ -0,0 +1,123 @@ +""" +Django settings for Pawtential project. + +Generated by 'django-admin startproject' using Django 5.1.3. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.1/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-3!tw7xfpn(!-ju07_(yphklcdwe%u37)(0_=wc)t42dldt9s@$' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'Pawtential.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'Pawtential.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.1/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.1/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/Pawtential/Pawtential/urls.py b/Pawtential/Pawtential/urls.py new file mode 100644 index 0000000..5b6abec --- /dev/null +++ b/Pawtential/Pawtential/urls.py @@ -0,0 +1,22 @@ +""" +URL configuration for Pawtential project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/Pawtential/Pawtential/wsgi.py b/Pawtential/Pawtential/wsgi.py new file mode 100644 index 0000000..c048849 --- /dev/null +++ b/Pawtential/Pawtential/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for Pawtential project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Pawtential.settings') + +application = get_wsgi_application() diff --git a/Pawtential/manage.py b/Pawtential/manage.py new file mode 100755 index 0000000..a96ba89 --- /dev/null +++ b/Pawtential/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Pawtential.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/README.md b/README.md index cb428d7..090cc6a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,12 @@ # UNIT-PROJECT-3 +## Pawtential +- **Overview:** A platform for managing pet adoption and rescue, allowing individuals and organizations to list animals, request adoptions, and provide or receive support for animal care +- **Features:** +- User registration and profile management. +- Pet listing and adoption request submission. +- Financial and material support (donations for food, medical care, etc.). +- Adoption status updates and notifications. +- Pet status tracking after adoption. ## Create a Project of your own choosing From a6c340c2e656010e34decce75d0274bc6afd34dc Mon Sep 17 00:00:00 2001 From: alhanoufALLUHAYDDAN Date: Wed, 27 Nov 2024 12:51:56 +0300 Subject: [PATCH 02/13] added the UML diagram and created the apps --- Pawtential/Pawtential/settings.py | 6 ++++++ Pawtential/accounts/__init__.py | 0 Pawtential/accounts/admin.py | 3 +++ Pawtential/accounts/apps.py | 6 ++++++ Pawtential/accounts/migrations/__init__.py | 0 Pawtential/accounts/models.py | 3 +++ Pawtential/accounts/tests.py | 3 +++ Pawtential/accounts/views.py | 3 +++ Pawtential/adoptions/__init__.py | 0 Pawtential/adoptions/admin.py | 3 +++ Pawtential/adoptions/apps.py | 6 ++++++ Pawtential/adoptions/migrations/__init__.py | 0 Pawtential/adoptions/models.py | 3 +++ Pawtential/adoptions/tests.py | 3 +++ Pawtential/adoptions/views.py | 3 +++ Pawtential/donations/__init__.py | 0 Pawtential/donations/admin.py | 3 +++ Pawtential/donations/apps.py | 6 ++++++ Pawtential/donations/migrations/__init__.py | 0 Pawtential/donations/models.py | 3 +++ Pawtential/donations/tests.py | 3 +++ Pawtential/donations/views.py | 3 +++ Pawtential/main/__init__.py | 0 Pawtential/main/admin.py | 3 +++ Pawtential/main/apps.py | 6 ++++++ Pawtential/main/migrations/__init__.py | 0 Pawtential/main/models.py | 3 +++ Pawtential/main/tests.py | 3 +++ Pawtential/main/views.py | 3 +++ Pawtential/pets/__init__.py | 0 Pawtential/pets/admin.py | 3 +++ Pawtential/pets/apps.py | 6 ++++++ Pawtential/pets/migrations/__init__.py | 0 Pawtential/pets/models.py | 3 +++ Pawtential/pets/tests.py | 3 +++ Pawtential/pets/views.py | 3 +++ README.md | 2 ++ 37 files changed, 98 insertions(+) create mode 100644 Pawtential/accounts/__init__.py create mode 100644 Pawtential/accounts/admin.py create mode 100644 Pawtential/accounts/apps.py create mode 100644 Pawtential/accounts/migrations/__init__.py create mode 100644 Pawtential/accounts/models.py create mode 100644 Pawtential/accounts/tests.py create mode 100644 Pawtential/accounts/views.py create mode 100644 Pawtential/adoptions/__init__.py create mode 100644 Pawtential/adoptions/admin.py create mode 100644 Pawtential/adoptions/apps.py create mode 100644 Pawtential/adoptions/migrations/__init__.py create mode 100644 Pawtential/adoptions/models.py create mode 100644 Pawtential/adoptions/tests.py create mode 100644 Pawtential/adoptions/views.py create mode 100644 Pawtential/donations/__init__.py create mode 100644 Pawtential/donations/admin.py create mode 100644 Pawtential/donations/apps.py create mode 100644 Pawtential/donations/migrations/__init__.py create mode 100644 Pawtential/donations/models.py create mode 100644 Pawtential/donations/tests.py create mode 100644 Pawtential/donations/views.py create mode 100644 Pawtential/main/__init__.py create mode 100644 Pawtential/main/admin.py create mode 100644 Pawtential/main/apps.py create mode 100644 Pawtential/main/migrations/__init__.py create mode 100644 Pawtential/main/models.py create mode 100644 Pawtential/main/tests.py create mode 100644 Pawtential/main/views.py create mode 100644 Pawtential/pets/__init__.py create mode 100644 Pawtential/pets/admin.py create mode 100644 Pawtential/pets/apps.py create mode 100644 Pawtential/pets/migrations/__init__.py create mode 100644 Pawtential/pets/models.py create mode 100644 Pawtential/pets/tests.py create mode 100644 Pawtential/pets/views.py diff --git a/Pawtential/Pawtential/settings.py b/Pawtential/Pawtential/settings.py index 7147395..053fc12 100644 --- a/Pawtential/Pawtential/settings.py +++ b/Pawtential/Pawtential/settings.py @@ -37,6 +37,12 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'main', + 'accounts', + 'adoptions', + 'donations', + 'pets', + ] MIDDLEWARE = [ diff --git a/Pawtential/accounts/__init__.py b/Pawtential/accounts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/accounts/admin.py b/Pawtential/accounts/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/Pawtential/accounts/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Pawtential/accounts/apps.py b/Pawtential/accounts/apps.py new file mode 100644 index 0000000..3e3c765 --- /dev/null +++ b/Pawtential/accounts/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AccountsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'accounts' diff --git a/Pawtential/accounts/migrations/__init__.py b/Pawtential/accounts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/accounts/models.py b/Pawtential/accounts/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/Pawtential/accounts/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Pawtential/accounts/tests.py b/Pawtential/accounts/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Pawtential/accounts/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Pawtential/accounts/views.py b/Pawtential/accounts/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/Pawtential/accounts/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/Pawtential/adoptions/__init__.py b/Pawtential/adoptions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/adoptions/admin.py b/Pawtential/adoptions/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/Pawtential/adoptions/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Pawtential/adoptions/apps.py b/Pawtential/adoptions/apps.py new file mode 100644 index 0000000..0b40e1d --- /dev/null +++ b/Pawtential/adoptions/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AdoptionsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'adoptions' diff --git a/Pawtential/adoptions/migrations/__init__.py b/Pawtential/adoptions/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/adoptions/models.py b/Pawtential/adoptions/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/Pawtential/adoptions/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Pawtential/adoptions/tests.py b/Pawtential/adoptions/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Pawtential/adoptions/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Pawtential/adoptions/views.py b/Pawtential/adoptions/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/Pawtential/adoptions/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/Pawtential/donations/__init__.py b/Pawtential/donations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/donations/admin.py b/Pawtential/donations/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/Pawtential/donations/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Pawtential/donations/apps.py b/Pawtential/donations/apps.py new file mode 100644 index 0000000..916def2 --- /dev/null +++ b/Pawtential/donations/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DonationsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'donations' diff --git a/Pawtential/donations/migrations/__init__.py b/Pawtential/donations/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/donations/models.py b/Pawtential/donations/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/Pawtential/donations/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Pawtential/donations/tests.py b/Pawtential/donations/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Pawtential/donations/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Pawtential/donations/views.py b/Pawtential/donations/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/Pawtential/donations/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/Pawtential/main/__init__.py b/Pawtential/main/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/main/admin.py b/Pawtential/main/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/Pawtential/main/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Pawtential/main/apps.py b/Pawtential/main/apps.py new file mode 100644 index 0000000..167f044 --- /dev/null +++ b/Pawtential/main/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MainConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'main' diff --git a/Pawtential/main/migrations/__init__.py b/Pawtential/main/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/main/models.py b/Pawtential/main/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/Pawtential/main/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Pawtential/main/tests.py b/Pawtential/main/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Pawtential/main/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Pawtential/main/views.py b/Pawtential/main/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/Pawtential/main/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/Pawtential/pets/__init__.py b/Pawtential/pets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/pets/admin.py b/Pawtential/pets/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/Pawtential/pets/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Pawtential/pets/apps.py b/Pawtential/pets/apps.py new file mode 100644 index 0000000..8f49ff2 --- /dev/null +++ b/Pawtential/pets/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class PetsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'pets' diff --git a/Pawtential/pets/migrations/__init__.py b/Pawtential/pets/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/pets/models.py b/Pawtential/pets/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/Pawtential/pets/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/Pawtential/pets/tests.py b/Pawtential/pets/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Pawtential/pets/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Pawtential/pets/views.py b/Pawtential/pets/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/Pawtential/pets/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/README.md b/README.md index 090cc6a..ff94b6b 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ - Adoption status updates and notifications. - Pet status tracking after adoption. +- [UML](https://lucid.app/lucidchart/9d07aaa2-e133-4f98-a805-d37d963d7819/edit?viewport_loc=-719%2C-275%2C2384%2C1395%2CHWEp-vi-RSFO&invitationId=inv_6f54713b-2af9-4aea-abcc-d1001242bd77) + ## Create a Project of your own choosing Base on what you’ve learned until now , create a project of your choosing. Impress us with your creativity and execution. From 9847176bb3e4db6ce0e724a07f556a0b0365654a Mon Sep 17 00:00:00 2001 From: alhanoufALLUHAYDDAN Date: Wed, 27 Nov 2024 12:53:59 +0300 Subject: [PATCH 03/13] added the UML diagram and created the apps --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ff94b6b..567d04c 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ - Adoption status updates and notifications. - Pet status tracking after adoption. +- **UML link** - [UML](https://lucid.app/lucidchart/9d07aaa2-e133-4f98-a805-d37d963d7819/edit?viewport_loc=-719%2C-275%2C2384%2C1395%2CHWEp-vi-RSFO&invitationId=inv_6f54713b-2af9-4aea-abcc-d1001242bd77) ## Create a Project of your own choosing From a429eea03cf88d6fdb29e6f0ff717e9e3b220b1a Mon Sep 17 00:00:00 2001 From: alhanoufALLUHAYDDAN Date: Wed, 27 Nov 2024 12:58:09 +0300 Subject: [PATCH 04/13] update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 567d04c..d171241 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - Adoption status updates and notifications. - Pet status tracking after adoption. -- **UML link** +## UML link - [UML](https://lucid.app/lucidchart/9d07aaa2-e133-4f98-a805-d37d963d7819/edit?viewport_loc=-719%2C-275%2C2384%2C1395%2CHWEp-vi-RSFO&invitationId=inv_6f54713b-2af9-4aea-abcc-d1001242bd77) ## Create a Project of your own choosing From d139e7d2a752b8b12d9e22392a139e17c0066b33 Mon Sep 17 00:00:00 2001 From: alhanoufALLUHAYDDAN Date: Thu, 28 Nov 2024 21:07:30 +0300 Subject: [PATCH 05/13] started base layout, home page, added user model, and registration page --- .DS_Store | Bin 0 -> 6148 bytes Pawtential/.DS_Store | Bin 0 -> 6148 bytes Pawtential/Pawtential/settings.py | 4 + Pawtential/Pawtential/urls.py | 11 +- .../accounts/migrations/0001_initial.py | 44 ++++++ .../migrations/0002_alter_shelter_address.py | 18 +++ Pawtential/accounts/models.py | 31 +++++ .../accounts/templates/accounts/login.html | 0 .../templates/accounts/registration.html | 126 ++++++++++++++++++ Pawtential/accounts/urls.py | 8 ++ Pawtential/accounts/views.py | 9 ++ Pawtential/adoptions/urls.py | 0 Pawtential/db.sqlite3 | Bin 0 -> 180224 bytes Pawtential/donations/urls.py | 0 Pawtential/main/.DS_Store | Bin 0 -> 8196 bytes Pawtential/main/static/.DS_Store | Bin 0 -> 6148 bytes Pawtential/main/static/css/styles.css | 114 ++++++++++++++++ Pawtential/main/static/images/.DS_Store | Bin 0 -> 6148 bytes Pawtential/main/static/images/Pawtential.png | Bin 0 -> 59634 bytes Pawtential/main/static/images/paw.png | Bin 0 -> 177149 bytes Pawtential/main/templates/main/base.html | 54 ++++++++ Pawtential/main/templates/main/home.html | 19 +++ Pawtential/main/urls.py | 7 + Pawtential/main/views.py | 6 +- Pawtential/media/.DS_Store | Bin 0 -> 6148 bytes .../profile_pics/default_profile_pic.jpg | Bin 0 -> 6910 bytes Pawtential/pets/models.py | 1 + Pawtential/pets/urls.py | 0 28 files changed, 449 insertions(+), 3 deletions(-) create mode 100644 .DS_Store create mode 100644 Pawtential/.DS_Store create mode 100644 Pawtential/accounts/migrations/0001_initial.py create mode 100644 Pawtential/accounts/migrations/0002_alter_shelter_address.py create mode 100644 Pawtential/accounts/templates/accounts/login.html create mode 100644 Pawtential/accounts/templates/accounts/registration.html create mode 100644 Pawtential/accounts/urls.py create mode 100644 Pawtential/adoptions/urls.py create mode 100644 Pawtential/db.sqlite3 create mode 100644 Pawtential/donations/urls.py create mode 100644 Pawtential/main/.DS_Store create mode 100644 Pawtential/main/static/.DS_Store create mode 100644 Pawtential/main/static/css/styles.css create mode 100644 Pawtential/main/static/images/.DS_Store create mode 100644 Pawtential/main/static/images/Pawtential.png create mode 100644 Pawtential/main/static/images/paw.png create mode 100644 Pawtential/main/templates/main/base.html create mode 100644 Pawtential/main/templates/main/home.html create mode 100644 Pawtential/main/urls.py create mode 100644 Pawtential/media/.DS_Store create mode 100644 Pawtential/media/profile_pics/default_profile_pic.jpg create mode 100644 Pawtential/pets/urls.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1c562376e999c927265de363088ebee43c4a3d26 GIT binary patch literal 6148 zcmeHK%Sr=55Ukc5f?jgWael!+7(%=Y`2ht(5W)(g=DH`p%TKfVffzP9c<>_C&|Nb< zU9)T*wzmP;>h19cSOA#Q9r58|YJToMv5U$WkqJE-3y#L?Q&&>bFB<-Yt6!=#P*lfL7ulP#UTPH8)y|&Ts>0a|mcjG!J4AG8> j(T=(CcD#(DtZTmJc`qCjgU)==iTW9EU1U<=uNC+L`VJL{ literal 0 HcmV?d00001 diff --git a/Pawtential/.DS_Store b/Pawtential/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..de0a5cd2a55328fd3bfbe083cfe2af2d77e82c3e GIT binary patch literal 6148 zcmeHKI|>3Z5S{S@f{mqRuHX%V=n1@lf+B(+5VYRPb9pr1e41sk(?WRzlb1~9CFB)5 zJ0ha<+jb^05s?wxP#!jP&GyYZ*2{+o4eb zDnJFO02QDDpH?6%>}dSygLxhmpaMUyfPEhd+^{A#f&S^h;4J`ffUq0p-b( +
+
+
+
+

Create New Account

+
+
+
+ {% csrf_token %} + +
+ + +
+ + + + + + + + + + + +
+
+
+
+
+ + + + +{% endblock %} diff --git a/Pawtential/accounts/urls.py b/Pawtential/accounts/urls.py new file mode 100644 index 0000000..1ef757d --- /dev/null +++ b/Pawtential/accounts/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('login/', views.login_view, name='login'), + path('register/', views.register_view, name='register'), + +] diff --git a/Pawtential/accounts/views.py b/Pawtential/accounts/views.py index 91ea44a..3d96a8d 100644 --- a/Pawtential/accounts/views.py +++ b/Pawtential/accounts/views.py @@ -1,3 +1,12 @@ from django.shortcuts import render +from django.http import HttpRequest # Create your views here. + + +def login_view(): + pass + +def register_view(request): + + return render(request,'accounts/registration.html') \ No newline at end of file diff --git a/Pawtential/adoptions/urls.py b/Pawtential/adoptions/urls.py new file mode 100644 index 0000000..e69de29 diff --git a/Pawtential/db.sqlite3 b/Pawtential/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..b5eff30d14d787e4899605e3030eaefae14d8121 GIT binary patch literal 180224 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 bBCpsS`!#V4bUNZr2l8jYbfHm!zgFM|YL^v< literal 0 HcmV?d00001 diff --git a/Pawtential/main/static/css/styles.css b/Pawtential/main/static/css/styles.css new file mode 100644 index 0000000..38ccb87 --- /dev/null +++ b/Pawtential/main/static/css/styles.css @@ -0,0 +1,114 @@ +.root{ + --primary-color:#FFAAA7; + --secondary-color: #FF8551; + --bakground-color: #FAF0E4; + --text-color : #98ddca; + --text-color-h: #24A19C; +} +html, body{ + font-family: "Geist Mono", serif; + height: 100%; + margin: 0; + background-color: #FAF0E4; +} + +main{ + flex: 1; + margin: 10px; +} +header{ + height: 200px; + border-bottom: 2px solid #FF8551; +} +.navbar-logo img{ + width: 200px; + height:auto; +} +.navbar-nav .nav-link , .bi-box-arrow-in-right{ + color: #98DDCA; + font-size: 20px; + font-weight: bold; + } + +.navbar-nav .nav-link:hover , .bi-box-arrow-in-right{ + color: #FFAAA7; + +} +.navbar-toggler{ + color: #98DDCA; +} +.navbar-toggler-icon{ + background-color: #98DDCA; + border-radius: 4px; +} +h1{ + color: #24A19C; +} +.search-form { + position: absolute; + top: 50%; + left: 80%; + transform: translate(-50%, -50%); + width: 120%; + justify-content: center; + align-items: center; + display: flex; +} +.search-form .form-control { + flex-grow: 1; + margin-right: 10px; + background-color: rgba(255, 255, 255, 0.636); + border: 1px solid #FFAAA7; +} +.search-form i { + color: #98DDCA; + font-size: 1.5rem; + cursor: pointer; +} +footer{ + padding: 10px 0; + align-items: center; + text-align: center; +} + +/*accounts*/ + +.custom-form-container { + max-width: 800px; + margin: 0 auto; + padding: 20px; + background-color: #f8f9fa91; + border-radius: 30px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); +} + +.custom-form-container .card-header { + color: #24A19C; + font-size: 1.5rem; + padding: 10px; +} + +.form-label { + font-weight: bold; +} + +.form-control { + border-radius: 0.375rem; + border-color: #ccc; +} + +.btn-primary { + background-color: #24A19C; + border-color: #24A19C; + padding: 10px 20px; + border-radius: 5px; +} + +.btn-primary:hover { + background-color: #98ddca; + border-color: #98ddca; +} + +.account-fields { + display: none; +} diff --git a/Pawtential/main/static/images/.DS_Store b/Pawtential/main/static/images/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 z 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 P`1kCIifr*CULvgp@{)V3O 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
^#R0>?(2ToJLKOb3m}l$tny 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


V~7`niD7hMWG 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 Cg>TRR literal 0 HcmV?d00001 diff --git a/Pawtential/main/templates/main/base.html b/Pawtential/main/templates/main/base.html new file mode 100644 index 0000000..056e587 --- /dev/null +++ b/Pawtential/main/templates/main/base.html @@ -0,0 +1,54 @@ +{% load static %} + + + + + + + + + + + + + {% block title %}{% endblock %} + + + + +
+ {% block content%} + {% endblock %} +
+
+

Footer

+
+ + \ No newline at end of file diff --git a/Pawtential/main/templates/main/home.html b/Pawtential/main/templates/main/home.html new file mode 100644 index 0000000..c5fc5c3 --- /dev/null +++ b/Pawtential/main/templates/main/home.html @@ -0,0 +1,19 @@ +{% extends 'main/base.html' %} +{% load static %} +{% block content %} +{% block title %}Home Page{% endblock %} +
+

Pawtential

+

we believe every pet has the potential to thrive in a loving home

+
+
+ home.png +
+ + +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/Pawtential/main/urls.py b/Pawtential/main/urls.py new file mode 100644 index 0000000..6dbbdad --- /dev/null +++ b/Pawtential/main/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +app_name = "main" +urlpatterns = [ + path('', views.home_view, name='home_view'), +] \ No newline at end of file diff --git a/Pawtential/main/views.py b/Pawtential/main/views.py index 91ea44a..8ee88ac 100644 --- a/Pawtential/main/views.py +++ b/Pawtential/main/views.py @@ -1,3 +1,7 @@ from django.shortcuts import render - +from django.http import HttpRequest # Create your views here. + +def home_view(request): + + return render(request, 'main/home.html') \ No newline at end of file diff --git a/Pawtential/media/.DS_Store b/Pawtential/media/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b2942d14a97433e26c7e149b519dbc786e52953d GIT binary patch literal 6148 zcmeHK%SyyR5UkccEa+j69_JVQgJD^}zzzE7nLz0op-!qz%w53#??A=?ltS*G2&&$KjM5k zABU%L9M)Z>Dk&fZq<|EV0#aaw0^WOR+p9!HDIf);z>fm{eQ0#YUN|Mjr-LCz0OE$} zFs@^kAU01Bd*PJG49${COsdt0VM%AcRb4Nf5|a+A;lt|5RuhWF(|Lc3a#&APlmb#< zuE1q(ci#W+=)cVWbCPyaKnnaT1#EM;KkWHR)ms-Y=e@SkAL(B6MR(&mC=Ah#iP4U^ g@pgO@MOoK;>M3B?g`OpcC~o;JV19z+Wry4PG-AT>t<8 literal 0 HcmV?d00001 diff --git a/Pawtential/media/profile_pics/default_profile_pic.jpg b/Pawtential/media/profile_pics/default_profile_pic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2fbedd31840b9d0ead2560916089132e9f7c4bc GIT binary patch literal 6910 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 Date: Thu, 28 Nov 2024 23:28:07 +0300 Subject: [PATCH 06/13] added login and registration pages and implemented their views --- .../accounts/migrations/0001_initial.py | 4 +- .../migrations/0002_alter_shelter_address.py | 18 ------ .../accounts/templates/accounts/login.html | 48 +++++++++++++++ .../templates/accounts/registration.html | 20 ++++++- Pawtential/accounts/urls.py | 2 + Pawtential/accounts/views.py | 55 ++++++++++++++++-- Pawtential/db.sqlite3 | Bin 180224 -> 180224 bytes Pawtential/main/templates/main/home.html | 7 +++ 8 files changed, 129 insertions(+), 25 deletions(-) delete mode 100644 Pawtential/accounts/migrations/0002_alter_shelter_address.py diff --git a/Pawtential/accounts/migrations/0001_initial.py b/Pawtential/accounts/migrations/0001_initial.py index e6baef1..7e4de70 100644 --- a/Pawtential/accounts/migrations/0001_initial.py +++ b/Pawtential/accounts/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.1.3 on 2024-11-28 15:49 +# Generated by Django 5.1.3 on 2024-11-28 18:48 from django.db import migrations, models @@ -35,7 +35,7 @@ class Migration(migrations.Migration): ('email', models.EmailField(max_length=254, unique=True)), ('password', models.CharField(max_length=255)), ('phone_number', models.CharField(max_length=15)), - ('address', models.TextField()), + ('address', models.CharField(max_length=255)), ('profile_picture', models.ImageField(blank=True, null=True, upload_to='profile_pics/')), ('bio', models.TextField(blank=True, null=True)), ('license_number', models.CharField(max_length=50, unique=True)), diff --git a/Pawtential/accounts/migrations/0002_alter_shelter_address.py b/Pawtential/accounts/migrations/0002_alter_shelter_address.py deleted file mode 100644 index b4584bf..0000000 --- a/Pawtential/accounts/migrations/0002_alter_shelter_address.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.3 on 2024-11-28 17:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='shelter', - name='address', - field=models.CharField(max_length=255), - ), - ] diff --git a/Pawtential/accounts/templates/accounts/login.html b/Pawtential/accounts/templates/accounts/login.html index e69de29..1cf1410 100644 --- a/Pawtential/accounts/templates/accounts/login.html +++ b/Pawtential/accounts/templates/accounts/login.html @@ -0,0 +1,48 @@ +{% extends 'main/base.html' %} +{% load static %} + +{% block title %}Login{% endblock %} + +{% block content %} + +
+
+
+
+
+

Login to Your Account

+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} +
+
+
+ {% csrf_token %} + +
+ + +
+ +
+ + +
+ + + +
+

Don't have an account? Sign Up

+
+
+
+
+
+
+
+ +{% endblock %} diff --git a/Pawtential/accounts/templates/accounts/registration.html b/Pawtential/accounts/templates/accounts/registration.html index 008937b..2b8bf4f 100644 --- a/Pawtential/accounts/templates/accounts/registration.html +++ b/Pawtential/accounts/templates/accounts/registration.html @@ -10,6 +10,13 @@

Create New Account

+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %}
@@ -33,6 +40,10 @@

Create New Account

+
+ + +
@@ -46,7 +57,7 @@

Create New Account

- +
@@ -73,6 +84,10 @@

Create New Account

+
+ + +
@@ -100,6 +115,9 @@

Create New Account

+
+

Already have an account? Login

+
diff --git a/Pawtential/accounts/urls.py b/Pawtential/accounts/urls.py index 1ef757d..5a9fe85 100644 --- a/Pawtential/accounts/urls.py +++ b/Pawtential/accounts/urls.py @@ -1,8 +1,10 @@ from django.urls import path from . import views +app_name = 'accounts' urlpatterns = [ path('login/', views.login_view, name='login'), path('register/', views.register_view, name='register'), + path('logout/', views.logout_view, name='logout'), ] diff --git a/Pawtential/accounts/views.py b/Pawtential/accounts/views.py index 3d96a8d..d6390a1 100644 --- a/Pawtential/accounts/views.py +++ b/Pawtential/accounts/views.py @@ -1,12 +1,59 @@ -from django.shortcuts import render +from django.shortcuts import render ,redirect from django.http import HttpRequest +from django.contrib import messages +from django.contrib.auth import authenticate, login , logout +from .models import IndividualUser , User # Create your views here. -def login_view(): - pass +def login_view(request): + + if request.method == 'POST': + username = request.POST['username'] + password = request.POST['password'] + + user = authenticate(request, username=username,password=password) + + if user is not None: + + login(request,user) + messages.success(request, 'Login successful! Welcome') + return redirect('main:home_view') + + else: + messages.error(request, 'Invalid username or password.') + return render(request, 'accounts/login.html') + + + return render(request,'accounts/login.html') def register_view(request): + + if request.method == 'POST': + username = request.POST['username'] + email = request.POST['email'] + password = request.POST['password'] + confirm_password = request.POST['confirm_password'] + + if password != confirm_password: + messages.error(request, "Passwords do not match.") + return redirect('accounts:register') + + if User.objects.filter(username=username).exists(): + messages.error(request, "Username already exists.") + return redirect('accounts:register') + + user = User.objects.create_user(username=username, email=email, password=password) + user.save() + messages.success(request, "Account created successfully. Please log in.") + print("Success: Account created successfully.") + return redirect('accounts:login') - return render(request,'accounts/registration.html') \ No newline at end of file + return render(request, 'accounts/registration.html') + +def logout_view(request): + + logout(request) + messages.success(request, "You have logged out successfully.") + return redirect('main:home_view') \ No newline at end of file diff --git a/Pawtential/db.sqlite3 b/Pawtential/db.sqlite3 index b5eff30d14d787e4899605e3030eaefae14d8121..57148a5b3b2c304ee2a2b43b6acfb577d2ae1ad5 100644 GIT binary patch delta 1111 zcmaizOKciP7{_-P3@i&QmJcLy+B%6V#Z9pH0sEkFU?H%Du*Sp>1xpoK_Q7KpFt8Z# z#ki5$OAk(0s!vs_s=ZZFDh{bq^;qQ^B|TJX+CzKjp_O`!dZ^T~eM;-7GxL`|jpqM- z^ZiCM9%JJ%b}%~~g&^n(&}ASeQ1b2-8jgN-`*YkegUwFdK|F}y;^h3?5`ONC&%t_H z+MryP6{X#8S-ou!FziE*Q^1cxEz9T*deHS=bNl zFAHeMA4gHazg;m@odSNDiZb&YOMo$-HFa?_HM(W=3gVWQt>56q)G#-1j7k=L(@63I zVQ8tw@N%@#Pvy8Ry(Twwwc6xMTsyB91udOkrU)t$Cdn|x%~3>*0^=_rumYf&-*KMGmt}}G*0ge3R3Y>7 zpg-y~)>)zyS!Ff~10mewnY~JDv#XNXbz(zTQ~gSWHq~_+T%(ZMDUIZOHl?OTIhV|3 z`IanY8qF-fA=C=*WYU9VcXu^irIns@&{AZh7$Ysw*iFScH#(Ur zucm5zdqrY&KFY4~61%eA1u7|Ztmds~I;?7+yNGsB!tdK^ASiy-6{% block title %}Home Page{% endblock %}
+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %}

Pawtential

we believe every pet has the potential to thrive in a loving home

From 7d373af84fd6f14f6b5b958ce8eae6dfbece6e5f Mon Sep 17 00:00:00 2001 From: alhanoufALLUHAYDDAN Date: Fri, 29 Nov 2024 20:00:53 +0300 Subject: [PATCH 07/13] added profile page and edit functionality, fixed issues --- .DS_Store | Bin 6148 -> 6148 bytes Pawtential/Pawtential/settings.py | 1 + Pawtential/Pawtential/urls.py | 3 +- Pawtential/accounts/admin.py | 16 +- Pawtential/accounts/forms.py | 16 ++ .../accounts/migrations/0001_initial.py | 11 +- Pawtential/accounts/models.py | 36 ++-- .../accounts/individual_registration.html | 72 ++++++++ .../accounts/templates/accounts/login.html | 4 +- .../templates/accounts/registration.html | 41 ++--- .../accounts/shelter_registration.html | 72 ++++++++ .../profile/individual_edit_profile.html | 94 ++++++++++ .../templates/profile/individual_profile.html | 41 +++++ .../profile/shelter_edit_profile.html | 76 ++++++++ .../templates/profile/shelter_profile.html | 39 +++++ Pawtential/accounts/urls.py | 11 +- Pawtential/accounts/views.py | 163 ++++++++++++++---- Pawtential/db.sqlite3 | Bin 180224 -> 184320 bytes Pawtential/main/static/css/styles.css | 6 +- Pawtential/main/templates/main/base.html | 124 ++++++++----- 20 files changed, 699 insertions(+), 127 deletions(-) create mode 100644 Pawtential/accounts/forms.py create mode 100644 Pawtential/accounts/templates/accounts/individual_registration.html create mode 100644 Pawtential/accounts/templates/accounts/shelter_registration.html create mode 100644 Pawtential/accounts/templates/profile/individual_edit_profile.html create mode 100644 Pawtential/accounts/templates/profile/individual_profile.html create mode 100644 Pawtential/accounts/templates/profile/shelter_edit_profile.html create mode 100644 Pawtential/accounts/templates/profile/shelter_profile.html diff --git a/.DS_Store b/.DS_Store index 1c562376e999c927265de363088ebee43c4a3d26..75b078022845a9a2a47a34899d2b486a58f97e6a 100644 GIT binary patch delta 278 zcmZoMXfc=|#>B)qu~2NHo+2aD!~pA!2O1bB8;Gz>>=&(1DlaZb%E?b+U|`shRFIQd zTw-8wjgg6&g_Vt+gPnt$BQ`iAzdX1kv81%vDX}OT#0$yK&q;!@6O+O+Q_JH8M4a>U zN)j{kQj5SEGE-84N@Bt@^HTE5o$^cbQi{QPgCP z)s{vEK(?`2Z7nBfYER&$^kNgP#NF&y5?u cGf(Ch(G>y7f^;-MXt3tZAtD=?CpNGE06e`&IRF3v delta 71 zcmZoMXfc=|#>CJzu~2NHo+2aT!~knX#>qTP5}TOWSvM;%$1rVX=iui6s@N>Z{GE9+ Zzlbg;BLf4&0U&0WY{MhHIYwj&GXP(a59|N{ diff --git a/Pawtential/Pawtential/settings.py b/Pawtential/Pawtential/settings.py index 36fbecf..675d9e9 100644 --- a/Pawtential/Pawtential/settings.py +++ b/Pawtential/Pawtential/settings.py @@ -43,6 +43,7 @@ 'adoptions', 'donations', 'pets', + 'widget_tweaks', ] diff --git a/Pawtential/Pawtential/urls.py b/Pawtential/Pawtential/urls.py index 9e12133..8af8b8c 100644 --- a/Pawtential/Pawtential/urls.py +++ b/Pawtential/Pawtential/urls.py @@ -26,4 +26,5 @@ #path('adoptions/',include("adoptions.urls")), #path('donations/',include("donations.urls")), #path('pets/',include("pets.urls")), -] +static(settings.MEDIA_URL,decument_root=settings.MEDIA_ROOT) +] +static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + diff --git a/Pawtential/accounts/admin.py b/Pawtential/accounts/admin.py index 8c38f3f..0436f0f 100644 --- a/Pawtential/accounts/admin.py +++ b/Pawtential/accounts/admin.py @@ -1,3 +1,17 @@ from django.contrib import admin - +from .models import IndividualUser, Shelter # Register your models here. + +class IndividualUserAdmin(admin.ModelAdmin): + list_display = ('user', 'first_name', 'last_name', 'email', 'phone_number', 'birth_date', 'profile_picture') + search_fields = ['user__username', 'email', 'first_name', 'last_name'] + list_filter = ['birth_date'] + + +class ShelterAdmin(admin.ModelAdmin): + list_display = ('user', 'name', 'phone_number', 'address', 'license_number', 'profile_picture') + search_fields = ['user__username', 'name', 'phone_number', 'address'] + list_filter = ['address'] + +admin.site.register(IndividualUser, IndividualUserAdmin) +admin.site.register(Shelter, ShelterAdmin) diff --git a/Pawtential/accounts/forms.py b/Pawtential/accounts/forms.py new file mode 100644 index 0000000..1c599f3 --- /dev/null +++ b/Pawtential/accounts/forms.py @@ -0,0 +1,16 @@ +from django import forms +from .models import IndividualUser, Shelter + + +class IndividualUserForm(forms.ModelForm): + class Meta: + model = IndividualUser + fields = ['first_name', 'last_name', 'username', 'email', 'birth_date', 'phone_number', 'bio', 'profile_picture'] + widgets = { + 'birth_date': forms.DateInput(attrs={'type': 'date'}), + } +class ShelterProfileForm(forms.ModelForm): + class Meta: + model = Shelter + fields = ['name', 'phone_number', 'address', 'license_number', 'bio', 'profile_picture'] + diff --git a/Pawtential/accounts/migrations/0001_initial.py b/Pawtential/accounts/migrations/0001_initial.py index 7e4de70..c70c70c 100644 --- a/Pawtential/accounts/migrations/0001_initial.py +++ b/Pawtential/accounts/migrations/0001_initial.py @@ -1,5 +1,7 @@ -# Generated by Django 5.1.3 on 2024-11-28 18:48 +# Generated by Django 5.1.3 on 2024-11-29 14:21 +import django.db.models.deletion +from django.conf import settings from django.db import migrations, models @@ -8,6 +10,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -15,15 +18,16 @@ class Migration(migrations.Migration): name='IndividualUser', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('frist_name', models.CharField(max_length=100)), + ('first_name', models.CharField(max_length=100)), ('last_name', models.CharField(max_length=100)), ('username', models.CharField(max_length=100, unique=True)), ('email', models.EmailField(max_length=254, unique=True)), ('password', models.CharField(max_length=255)), - ('brith_date', models.DateField(blank=True, null=True)), + ('birth_date', models.DateField(blank=True, null=True)), ('profile_picture', models.ImageField(blank=True, default='images/default_profile_pic.jpg', null=True, upload_to='profile_pics/')), ('phone_number', models.CharField(blank=True, max_length=15, null=True)), ('bio', models.TextField(blank=True, null=True)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='individual_user', to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( @@ -39,6 +43,7 @@ class Migration(migrations.Migration): ('profile_picture', models.ImageField(blank=True, null=True, upload_to='profile_pics/')), ('bio', models.TextField(blank=True, null=True)), ('license_number', models.CharField(max_length=50, unique=True)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='shelter', to=settings.AUTH_USER_MODEL)), ], ), ] diff --git a/Pawtential/accounts/models.py b/Pawtential/accounts/models.py index 1dc830f..870355a 100644 --- a/Pawtential/accounts/models.py +++ b/Pawtential/accounts/models.py @@ -5,30 +5,34 @@ class IndividualUser(models.Model): - frist_name = models.CharField(max_length=100) + user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='individual_user') + first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) username = models.CharField(max_length=100, unique=True) email = models.EmailField(unique=True) password = models.CharField(max_length=255) - brith_date = models.DateField(null=True,blank=True) + birth_date = models.DateField(null=True,blank=True) profile_picture = models.ImageField(upload_to='profile_pics/',blank=True , null=True , default='images/default_profile_pic.jpg' ) phone_number = models.CharField(max_length=15,blank=True,null=True) bio = models.TextField(blank=True,null=True) + USERNAME_FIELD = 'username' def __str__(self): - return f"{self.frist_name} {self.last_name} ({self.username})" + return f"{self.first_name} {self.last_name} ({self.username})" - class Shelter(models.Model): - - name = models.CharField(max_length=200) - username = models.CharField(max_length=100, unique=True) - email = models.EmailField(unique=True) - password = models.CharField(max_length=255) - phone_number = models.CharField(max_length=15) - address = models.CharField(max_length=255) - profile_picture = models.ImageField(upload_to='profile_pics/', blank=True, null=True) - bio = models.TextField(blank=True,null=True) - license_number = models.CharField(max_length=50, unique=True) +class Shelter(models.Model): + + user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='shelter') + name = models.CharField(max_length=200) + username = models.CharField(max_length=100, unique=True) + email = models.EmailField(unique=True) + password = models.CharField(max_length=255) + phone_number = models.CharField(max_length=15) + address = models.CharField(max_length=255) + profile_picture = models.ImageField(upload_to='profile_pics/', blank=True, null=True) + bio = models.TextField(blank=True,null=True) + license_number = models.CharField(max_length=50, unique=True) - def __str__(self): - return super().__str__() \ No newline at end of file + USERNAME_FIELD = 'username' + def __str__(self): + return super().__str__() \ No newline at end of file diff --git a/Pawtential/accounts/templates/accounts/individual_registration.html b/Pawtential/accounts/templates/accounts/individual_registration.html new file mode 100644 index 0000000..67b998e --- /dev/null +++ b/Pawtential/accounts/templates/accounts/individual_registration.html @@ -0,0 +1,72 @@ +{% extends 'main/base.html' %} +{% block title %}Register Individual{% endblock %} + +{% block content %} +
+
+
+
+
+

Create Individual Account

+
+
+ {% if messages %} + + {% endif %} +
+ {% csrf_token %} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+

Already have an account? Login

+
+
+
+
+
+
+
+{% endblock %} diff --git a/Pawtential/accounts/templates/accounts/login.html b/Pawtential/accounts/templates/accounts/login.html index 1cf1410..db86920 100644 --- a/Pawtential/accounts/templates/accounts/login.html +++ b/Pawtential/accounts/templates/accounts/login.html @@ -36,7 +36,9 @@

Login to Your Account

-

Don't have an account? Sign Up

+

Don't have an account?

+ Register as Individual + Register as Shelter
diff --git a/Pawtential/accounts/templates/accounts/registration.html b/Pawtential/accounts/templates/accounts/registration.html index 2b8bf4f..270c0af 100644 --- a/Pawtential/accounts/templates/accounts/registration.html +++ b/Pawtential/accounts/templates/accounts/registration.html @@ -3,22 +3,23 @@ {% block title %}Register{% endblock %} {% block content %} -

Create New Account

+
+
{% if messages %} +
{% for message in messages %} {% endfor %} - {% endif %} -
-
+
+ {% endif %}
{% csrf_token %} @@ -30,8 +31,8 @@

Create New Account

- - - - - - - -
-

Already have an account? Login

+ +
+

Already have an account? Login

diff --git a/Pawtential/accounts/templates/accounts/shelter_registration.html b/Pawtential/accounts/templates/accounts/shelter_registration.html new file mode 100644 index 0000000..2386bb5 --- /dev/null +++ b/Pawtential/accounts/templates/accounts/shelter_registration.html @@ -0,0 +1,72 @@ +{% extends 'main/base.html' %} +{% block title %}Register Shelter{% endblock %} + +{% block content %} +
+
+
+
+
+

Create Shelter Account

+
+
+ {% if messages %} + + {% endif %} +
+ {% csrf_token %} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+

Already have an account? Login

+
+
+
+
+
+
+
+{% endblock %} diff --git a/Pawtential/accounts/templates/profile/individual_edit_profile.html b/Pawtential/accounts/templates/profile/individual_edit_profile.html new file mode 100644 index 0000000..4431ce7 --- /dev/null +++ b/Pawtential/accounts/templates/profile/individual_edit_profile.html @@ -0,0 +1,94 @@ +{% extends 'main/base.html' %} +{% load widget_tweaks %} + +{% block title %}Edit Individual Profile{% endblock %} + +{% block content %} +
+
+
+
+
+

Edit Profile for {{ form.instance.user.username }}

+
+
+ {% if messages %} + + {% endif %} + +
+ {% csrf_token %} + + +
+ + {{ form.first_name|add_class:"form-control" }} +
+ + +
+ + {{ form.last_name|add_class:"form-control" }} +
+ + +
+ + {{ form.username|add_class:"form-control" }} +
+ + +
+ + {{ form.email|add_class:"form-control" }} +
+ + +
+ + {{ form.birth_date|add_class:"form-control" }} +
+ + +
+ + {{ form.phone_number|add_class:"form-control" }} +
+ + +
+ + {{ form.bio|add_class:"form-control" }} +
+ + +
+ + {{ form.profile_picture|add_class:"form-control" }} + {% if form.instance.profile_picture %} +
+ Profile Picture +
+ {% else %} +
+ Profile Picture +
+ {% endif %} +
+ + +
+ + +
+
+
+
+
+{% endblock %} diff --git a/Pawtential/accounts/templates/profile/individual_profile.html b/Pawtential/accounts/templates/profile/individual_profile.html new file mode 100644 index 0000000..c42b3ec --- /dev/null +++ b/Pawtential/accounts/templates/profile/individual_profile.html @@ -0,0 +1,41 @@ +{% extends 'main/base.html' %} +{% load static %} + +{% block content %} +
+

Individual User Profile

+ {% if messages %} + + {% endif %} +
+
+ +
+ User Picture + +
+ +

Phone Number: {{ profile.phone_number }}

+

Bio: {{ profile.bio }}

+ + {% if profile.user == request.user %} + Edit Profile + {% endif %} +
+
+ +

{{ profile.first_name }} {{ profile.last_name }}

+

Username: {{ profile.username }}

+

Email: {{ profile.email }}

+

Birth Date: {{ profile.birth_date }}

+
+
+
+{% endblock %} diff --git a/Pawtential/accounts/templates/profile/shelter_edit_profile.html b/Pawtential/accounts/templates/profile/shelter_edit_profile.html new file mode 100644 index 0000000..e04a533 --- /dev/null +++ b/Pawtential/accounts/templates/profile/shelter_edit_profile.html @@ -0,0 +1,76 @@ +{% extends 'main/base.html' %} +{% load static %} +{% load widget_tweaks %} +{% block title %}Edit Shelter Profile{% endblock %} + +{% block content %} +
+
+
+
+
+

Edit {{ form.instance.user.username }}'s Shelter Profile

+
+
+ {% if messages %} + + {% endif %} + +
+ {% csrf_token %} + + +
+ + {{ form.name|add_class:"form-control" }} +
+ + +
+ + {{ form.phone_number|add_class:"form-control" }} +
+ +
+ + {{ form.address|add_class:"form-control" }} +
+ +
+ + {{ form.license_number|add_class:"form-control" }} +
+ + +
+ + {{ form.bio|add_class:"form-control" }} +
+ + +
+ + {{ form.profile_picture|add_class:"form-control" }} + {% if form.instance.profile_picture %} + Profile Picture + {% else %} + Profile Picture + {% endif %} +
+ + +
+ + +
+
+
+
+
+{% endblock %} diff --git a/Pawtential/accounts/templates/profile/shelter_profile.html b/Pawtential/accounts/templates/profile/shelter_profile.html new file mode 100644 index 0000000..36178cf --- /dev/null +++ b/Pawtential/accounts/templates/profile/shelter_profile.html @@ -0,0 +1,39 @@ +{% extends 'main/base.html' %} +{% load static %} + +{% block content %} +
+

Shelter Profile

+ {% if messages %} + + {% endif %} +
+
+ +
+ Shelter Picture +
+

Address: {{ profile.address }}

+ + {% if profile.user == request.user %} + Edit Profile + {% endif %} +
+
+ +

{{ profile.name }}

+

Username: {{ profile.user }}

+

Phone Number: {{ profile.phone_number }}

+

License Number: {{ profile.license_number }}

+

Bio: {{ profile.bio }}

+
+
+
+{% endblock %} diff --git a/Pawtential/accounts/urls.py b/Pawtential/accounts/urls.py index 5a9fe85..5377178 100644 --- a/Pawtential/accounts/urls.py +++ b/Pawtential/accounts/urls.py @@ -4,7 +4,14 @@ app_name = 'accounts' urlpatterns = [ path('login/', views.login_view, name='login'), - path('register/', views.register_view, name='register'), path('logout/', views.logout_view, name='logout'), - + path('register/individual/', views.register_individual_view, name='register_individual'), + path('register/shelter/', views.register_shelter_view, name='register_shelter'), + path('profile/individual/', views.individual_profile, name='individual_profile'), + path('profile/edit/', views.edit_individual_profile, name='individual_edit_profile'), + path('profile/shelter/', views.shelter_profile, name='shelter_profile'), + path('profile/shelter/edit/', views.edit_shelter_profile, name='shelter_edit_profile'), ] + + + diff --git a/Pawtential/accounts/views.py b/Pawtential/accounts/views.py index d6390a1..3a3ae01 100644 --- a/Pawtential/accounts/views.py +++ b/Pawtential/accounts/views.py @@ -1,59 +1,154 @@ -from django.shortcuts import render ,redirect -from django.http import HttpRequest +from django.shortcuts import render, redirect from django.contrib import messages -from django.contrib.auth import authenticate, login , logout -from .models import IndividualUser , User - -# Create your views here. +from django.contrib.auth import authenticate, login, logout +from django.contrib.auth.models import User +from .models import IndividualUser, Shelter +from django.contrib.auth.decorators import login_required +from .forms import ShelterProfileForm ,IndividualUserForm def login_view(request): - if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] - - user = authenticate(request, username=username,password=password) + user = authenticate(request, username=username, password=password) if user is not None: - - login(request,user) + login(request, user) messages.success(request, 'Login successful! Welcome') return redirect('main:home_view') - else: messages.error(request, 'Invalid username or password.') return render(request, 'accounts/login.html') + return render(request, 'accounts/login.html') - return render(request,'accounts/login.html') - -def register_view(request): - +def register_individual_view(request): if request.method == 'POST': - username = request.POST['username'] - email = request.POST['email'] - password = request.POST['password'] - confirm_password = request.POST['confirm_password'] + username = request.POST.get('username') + email = request.POST.get('email') + password = request.POST.get('password') + confirm_password = request.POST.get('confirm_password') + + if not username: + messages.error(request, "Username is required.") + return render(request, 'accounts/individual_registration.html') + if User.objects.filter(username=username).exists(): + messages.error(request, "Username already exists. Please choose a different username.") + return render(request, 'accounts/individual_registration.html') + if password != confirm_password: messages.error(request, "Passwords do not match.") - return redirect('accounts:register') - - if User.objects.filter(username=username).exists(): - messages.error(request, "Username already exists.") - return redirect('accounts:register') - + return render(request, 'accounts/individual_registration.html') + user = User.objects.create_user(username=username, email=email, password=password) - user.save() + + first_name = request.POST.get('first_name') + last_name = request.POST.get('last_name') + phone_number = request.POST.get('phone_number', '') + bio = request.POST.get('bio', '') + birth_date = request.POST.get('birth_date', None) + profile_picture = request.FILES.get('profile_picture', None) + + individual_user = IndividualUser( + user=user, + first_name=first_name, + last_name=last_name, + phone_number=phone_number, + bio=bio, + birth_date=birth_date, + profile_picture=profile_picture + ) + individual_user.save() + messages.success(request, "Account created successfully. Please log in.") - print("Success: Account created successfully.") return redirect('accounts:login') - - return render(request, 'accounts/registration.html') - -def logout_view(request): - logout(request) + return render(request, 'accounts/individual_registration.html') + +def register_shelter_view(request): + if request.method == 'POST': + username = request.POST.get('username') + email = request.POST.get('email') + password = request.POST.get('password') + confirm_password = request.POST.get('confirm_password') + + if User.objects.filter(username=username).exists(): + messages.error(request, "Username is already taken. Please choose a different one.") + return render(request, 'accounts/shelter_registration.html') + + + if password != confirm_password: + messages.error(request, "Passwords do not match.") + return render(request, 'accounts/shelter_registration.html') + + user = User.objects.create_user(username=username, email=email, password=password) + + shelter_name = request.POST.get('shelter_name') + phone_number_shelter = request.POST.get('phone_number_shelter') + address = request.POST.get('address') + license_number = request.POST.get('license_number') + bio = request.POST.get('bio', '') + profile_picture = request.FILES.get('profile_picture_shelter', None) + + shelter = Shelter( + user=user, + name=shelter_name, + phone_number=phone_number_shelter, + address=address, + license_number=license_number, + bio=bio, + profile_picture=profile_picture + ) + shelter.save() + + messages.success(request, "Shelter account created successfully. Please log in.") + return redirect('accounts:login') + + return render(request, 'accounts/shelter_registration.html') + + +def logout_view(request): + logout(request) messages.success(request, "You have logged out successfully.") - return redirect('main:home_view') \ No newline at end of file + return redirect('main:home_view') + +def individual_profile(request): + profile = IndividualUser.objects.get(user=request.user ) + return render(request, 'profile/individual_profile.html', {'profile': profile}) + +def edit_individual_profile(request): + profile = IndividualUser.objects.get(user=request.user) + + if request.method == 'POST': + form = IndividualUserForm(request.POST, request.FILES, instance=profile) + + if form.is_valid(): + form.save() + messages.success(request, 'Your profile has been updated successfully.') + return redirect('accounts:individual_profile') + else: + messages.error(request, 'Please correct the errors below.') + else: + form = IndividualUserForm(instance=profile) + + return render(request, 'profile/individual_edit_profile.html', {'form': form}) + +def shelter_profile(request): + shelter_profile = Shelter.objects.get(user=request.user) + return render(request, 'profile/shelter_profile.html', {'profile': shelter_profile}) + +def edit_shelter_profile(request): + profile = Shelter.objects.get(user=request.user) + + if request.method == 'POST': + form = ShelterProfileForm(request.POST, request.FILES, instance=profile) + + if form.is_valid(): + form.save() + return redirect('accounts:shelter_profile') + else: + form = ShelterProfileForm(instance=profile) + + return render(request, 'profile/shelter_edit_profile.html', {'form': form}) \ No newline at end of file diff --git a/Pawtential/db.sqlite3 b/Pawtential/db.sqlite3 index 57148a5b3b2c304ee2a2b43b6acfb577d2ae1ad5..4f25124a77881e454142fd4e2c9da708e5146190 100644 GIT binary patch delta 4735 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 xX;~Cee-yUkuNf7+NRHw!jq%Im1PIyB8~V - - - - - - - - - - - {% block title %}{% endblock %} - - - -
- +
+ +
+ {% block content %} + {% endblock %} +
+ +
+

Footer

+
+ + + + + From 8ff712e6073037e137ce5d2b35fc7771317b161a Mon Sep 17 00:00:00 2001 From: alhanoufALLUHAYDDAN Date: Sat, 30 Nov 2024 23:50:46 +0300 Subject: [PATCH 08/13] implemented templates and views for pets and adoption requests --- Pawtential/Pawtential/settings.py | 1 + Pawtential/Pawtential/urls.py | 4 +- .../profile/individual_edit_profile.html | 8 +- .../templates/profile/individual_profile.html | 120 ++++++++++++++++-- .../profile/shelter_edit_profile.html | 2 +- .../templates/profile/shelter_profile.html | 97 ++++++++++++-- Pawtential/accounts/urls.py | 8 +- Pawtential/accounts/views.py | 73 ++++++++--- Pawtential/adoptions/admin.py | 9 ++ .../adoptions/migrations/0001_initial.py | 33 +++++ Pawtential/adoptions/models.py | 23 ++++ .../adoptions/already_requested.html | 10 ++ .../templates/adoptions/request_adoption.html | 41 ++++++ Pawtential/adoptions/urls.py | 11 ++ Pawtential/adoptions/views.py | 51 +++++++- Pawtential/db.sqlite3 | Bin 184320 -> 196608 bytes Pawtential/main/static/css/styles.css | 60 +++++++++ Pawtential/main/templates/main/base.html | 35 ++--- .../89466355de3a9651bdc7fa2daf49c17b.jpg | Bin 0 -> 38115 bytes ...466355de3a9651bdc7fa2daf49c17b_2FAmOJc.jpg | Bin 0 -> 38115 bytes ...466355de3a9651bdc7fa2daf49c17b_Chavrky.jpg | Bin 0 -> 38115 bytes ...466355de3a9651bdc7fa2daf49c17b_NODEyRa.jpg | Bin 0 -> 38115 bytes ...466355de3a9651bdc7fa2daf49c17b_WYJSp2W.jpg | Bin 0 -> 38115 bytes ...466355de3a9651bdc7fa2daf49c17b_pRMiXTg.jpg | Bin 0 -> 38115 bytes Pawtential/media/pet_images/Pawtential.png | Bin 0 -> 13258 bytes .../media/pet_images/default_pet_image.jpg | Bin 0 -> 38115 bytes .../89466355de3a9651bdc7fa2daf49c17b.jpg | Bin 0 -> 38115 bytes ...466355de3a9651bdc7fa2daf49c17b_0CAFJKm.jpg | Bin 0 -> 38115 bytes Pawtential/pets/admin.py | 10 ++ Pawtential/pets/forms.py | 7 + Pawtential/pets/migrations/0001_initial.py | 35 +++++ Pawtential/pets/models.py | 30 +++++ Pawtential/pets/templates/pets/add_pet.html | 89 +++++++++++++ Pawtential/pets/templates/pets/edit_pet.html | 87 +++++++++++++ .../pets/templates/pets/pet_detail.html | 65 ++++++++++ Pawtential/pets/templates/pets/pet_list.html | 95 ++++++++++++++ Pawtential/pets/urls.py | 12 ++ Pawtential/pets/views.py | 105 ++++++++++++++- 38 files changed, 1055 insertions(+), 66 deletions(-) create mode 100644 Pawtential/adoptions/migrations/0001_initial.py create mode 100644 Pawtential/adoptions/templates/adoptions/already_requested.html create mode 100644 Pawtential/adoptions/templates/adoptions/request_adoption.html create mode 100644 Pawtential/media/pet_images/89466355de3a9651bdc7fa2daf49c17b.jpg create mode 100644 Pawtential/media/pet_images/89466355de3a9651bdc7fa2daf49c17b_2FAmOJc.jpg create mode 100644 Pawtential/media/pet_images/89466355de3a9651bdc7fa2daf49c17b_Chavrky.jpg create mode 100644 Pawtential/media/pet_images/89466355de3a9651bdc7fa2daf49c17b_NODEyRa.jpg create mode 100644 Pawtential/media/pet_images/89466355de3a9651bdc7fa2daf49c17b_WYJSp2W.jpg create mode 100644 Pawtential/media/pet_images/89466355de3a9651bdc7fa2daf49c17b_pRMiXTg.jpg create mode 100644 Pawtential/media/pet_images/Pawtential.png create mode 100644 Pawtential/media/pet_images/default_pet_image.jpg create mode 100644 Pawtential/media/profile_pics/89466355de3a9651bdc7fa2daf49c17b.jpg create mode 100644 Pawtential/media/profile_pics/89466355de3a9651bdc7fa2daf49c17b_0CAFJKm.jpg create mode 100644 Pawtential/pets/forms.py create mode 100644 Pawtential/pets/migrations/0001_initial.py create mode 100644 Pawtential/pets/templates/pets/add_pet.html create mode 100644 Pawtential/pets/templates/pets/edit_pet.html create mode 100644 Pawtential/pets/templates/pets/pet_detail.html create mode 100644 Pawtential/pets/templates/pets/pet_list.html diff --git a/Pawtential/Pawtential/settings.py b/Pawtential/Pawtential/settings.py index 675d9e9..fc197fc 100644 --- a/Pawtential/Pawtential/settings.py +++ b/Pawtential/Pawtential/settings.py @@ -13,6 +13,7 @@ from pathlib import Path import os + # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent diff --git a/Pawtential/Pawtential/urls.py b/Pawtential/Pawtential/urls.py index 8af8b8c..1cf0ae1 100644 --- a/Pawtential/Pawtential/urls.py +++ b/Pawtential/Pawtential/urls.py @@ -23,8 +23,8 @@ path('admin/', admin.site.urls), path('',include("main.urls")), path('accounts/',include("accounts.urls")), - #path('adoptions/',include("adoptions.urls")), + path('adoptions/',include("adoptions.urls")), #path('donations/',include("donations.urls")), - #path('pets/',include("pets.urls")), + path('pets/',include("pets.urls")), ] +static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/Pawtential/accounts/templates/profile/individual_edit_profile.html b/Pawtential/accounts/templates/profile/individual_edit_profile.html index 4431ce7..9f92b70 100644 --- a/Pawtential/accounts/templates/profile/individual_edit_profile.html +++ b/Pawtential/accounts/templates/profile/individual_edit_profile.html @@ -84,8 +84,12 @@

Edit Profile for {{ form.instance.user.username }}

+ {% if profile.id %} + Back to Profile + {% else %} +

Profile ID is not available.

+ {% endif %} +
diff --git a/Pawtential/accounts/templates/profile/individual_profile.html b/Pawtential/accounts/templates/profile/individual_profile.html index c42b3ec..662418c 100644 --- a/Pawtential/accounts/templates/profile/individual_profile.html +++ b/Pawtential/accounts/templates/profile/individual_profile.html @@ -4,38 +4,136 @@ {% block content %}

Individual User Profile

+ {% if messages %} {% endif %} +
-
User Picture - + alt="User Picture" class="img-fluid rounded-circle" + style="width: 200px; height: 200px; object-fit: cover; border: 5px solid #FF8551;">
- +

Phone Number: {{ profile.phone_number }}

Bio: {{ profile.bio }}

{% if profile.user == request.user %} - Edit Profile + Edit Profile {% endif %}
+ +
-

{{ profile.first_name }} {{ profile.last_name }}

Username: {{ profile.username }}

Email: {{ profile.email }}

Birth Date: {{ profile.birth_date }}

+ +
+ + +

Pets Added by {{ profile.first_name }} {{ profile.last_name }}

+ {% if pets %} +
    + {% for pet in pets %} +
  • +
    + {{ pet.name }} + {{ pet.name }} - {{ pet.species }}
    + Age: {{ pet.age }} years
    + Status: {{ pet.get_adoption_status_display }} +
    + +
    + {% if pet.user == request.user %} + Edit +
    + {% csrf_token %} + +
    + {% endif %} + Details +
    +
  • + {% endfor %} +
+ {% else %} +

No pets added yet.

+ {% endif %} + + + + + + {% if profile.user == request.user %} +
+

Sent Adoption Requests

+
    + {% for request in sent_requests %} +
  • +
    + Pet: {{ request.pet.name }} - Status: {{ request.get_status_display }} +
    +
    + {% if request.status == 'pending' %} + Cancel Request + {% endif %} +
    +
  • + {% endfor %} +
+ {% else %} +

+ {% endif %} + + + + + {% if profile.user == request.user %} +
+

Adoption Requests

+
    + {% for request in adoption_requests %} +
  • +
    +

    Pet: {{ request.pet.name }} | + User: + {% if request.user %} + {% if request.user.individual_user %} + + {{ request.user.username }} + + {% elif request.user.shelter %} + + {{ request.user.username }} + + {% endif %} + {% else %} + No user linked with this request + {% endif %} + | + Status: {{ request.get_status_display }}

    +
    +
    + {% if request.status == 'pending' %} + Accept + Reject + {% endif %} +
    +
  • + {% endfor %} +
+ {% else %} +

+ {% endif %}
{% endblock %} diff --git a/Pawtential/accounts/templates/profile/shelter_edit_profile.html b/Pawtential/accounts/templates/profile/shelter_edit_profile.html index e04a533..d3c0eb6 100644 --- a/Pawtential/accounts/templates/profile/shelter_edit_profile.html +++ b/Pawtential/accounts/templates/profile/shelter_edit_profile.html @@ -66,7 +66,7 @@

Edit {{ form.instance.user.username }}'s Shelter Profile

diff --git a/Pawtential/accounts/templates/profile/shelter_profile.html b/Pawtential/accounts/templates/profile/shelter_profile.html index 36178cf..f531875 100644 --- a/Pawtential/accounts/templates/profile/shelter_profile.html +++ b/Pawtential/accounts/templates/profile/shelter_profile.html @@ -4,36 +4,105 @@ {% block content %}

Shelter Profile

+ {% if messages %} {% endif %} +
- -
+
Shelter Picture + alt="User Picture" class="img-fluid rounded-circle" + style="width: 200px; height: 200px; object-fit: cover; border: 5px solid #FF8551;">
-

Address: {{ profile.address }}

- {% if profile.user == request.user %} - Edit Profile - {% endif %} +

Address: {{ profile.address }}

+ + {% if profile.user == request.user %} + Edit Profile + {% endif %}
+
-

{{ profile.name }}

-

Username: {{ profile.user }}

+

Username: {{ profile.user.username }}

Phone Number: {{ profile.phone_number }}

License Number: {{ profile.license_number }}

Bio: {{ profile.bio }}

+ +
+ +

Pets Added by {{ profile.name }}

+ {% if pets %} +
    + {% for pet in pets %} +
  • +
    + {{ pet.name }} + {{ pet.name }} - {{ pet.species }}
    + Age: {{ pet.age }} years
    + Status: {{ pet.get_adoption_status_display }} +
    + +
    + {% if pet.user == request.user %} + Edit +
    + {% csrf_token %} + +
    + {% endif %} + Details +
    +
  • + {% endfor %} +
+ {% else %} +

No pets added yet.

+ {% endif %} + +
+ + {% if profile.user == request.user %} +

Adoption Requests

+
    + {% for request in adoption_requests %} +
  • +
    +

    Pet: {{ request.pet.name }} | + User: + {% if request.user %} + {% if request.user.individual_user %} + + {{ request.user.username }} + + {% elif request.user.shelter %} + + {{ request.user.username }} + + {% endif %} + {% else %} + No user linked with this request + {% endif %} + | + Status: {{ request.get_status_display }}

    +
    +
    + {% if request.status == 'pending' %} + Accept + Reject + {% endif %} +
    +
  • + {% endfor %} +
+ {% endif %}
{% endblock %} diff --git a/Pawtential/accounts/urls.py b/Pawtential/accounts/urls.py index 5377178..74bbf7f 100644 --- a/Pawtential/accounts/urls.py +++ b/Pawtential/accounts/urls.py @@ -7,10 +7,10 @@ path('logout/', views.logout_view, name='logout'), path('register/individual/', views.register_individual_view, name='register_individual'), path('register/shelter/', views.register_shelter_view, name='register_shelter'), - path('profile/individual/', views.individual_profile, name='individual_profile'), - path('profile/edit/', views.edit_individual_profile, name='individual_edit_profile'), - path('profile/shelter/', views.shelter_profile, name='shelter_profile'), - path('profile/shelter/edit/', views.edit_shelter_profile, name='shelter_edit_profile'), + path('profile/individual//', views.individual_profile, name='individual_profile'), + path('profile/edit/', views.edit_individual_profile, name='individual_edit_profile'), + path('profile/shelter//', views.shelter_profile, name='shelter_profile'), + path('profile/shelter/edit//', views.edit_shelter_profile, name='shelter_edit_profile'), ] diff --git a/Pawtential/accounts/views.py b/Pawtential/accounts/views.py index 3a3ae01..fb4f5ea 100644 --- a/Pawtential/accounts/views.py +++ b/Pawtential/accounts/views.py @@ -1,10 +1,12 @@ -from django.shortcuts import render, redirect +from django.shortcuts import render, redirect , get_object_or_404 from django.contrib import messages from django.contrib.auth import authenticate, login, logout from django.contrib.auth.models import User from .models import IndividualUser, Shelter from django.contrib.auth.decorators import login_required from .forms import ShelterProfileForm ,IndividualUserForm +from pets.models import Pet +from adoptions.models import AdoptionRequest def login_view(request): @@ -23,6 +25,7 @@ def login_view(request): return render(request, 'accounts/login.html') + def register_individual_view(request): if request.method == 'POST': username = request.POST.get('username') @@ -67,6 +70,7 @@ def register_individual_view(request): return render(request, 'accounts/individual_registration.html') + def register_shelter_view(request): if request.method == 'POST': username = request.POST.get('username') @@ -114,12 +118,33 @@ def logout_view(request): messages.success(request, "You have logged out successfully.") return redirect('main:home_view') -def individual_profile(request): - profile = IndividualUser.objects.get(user=request.user ) - return render(request, 'profile/individual_profile.html', {'profile': profile}) -def edit_individual_profile(request): - profile = IndividualUser.objects.get(user=request.user) +def individual_profile(request, individual_id): + try: + individual_profile = IndividualUser.objects.get(id=individual_id) + except IndividualUser.DoesNotExist: + individual_profile = None + + if individual_profile: + pets = Pet.objects.filter(user=individual_profile.user) + sent_requests = AdoptionRequest.objects.filter(user=individual_profile.user) + adoption_requests = AdoptionRequest.objects.filter(pet__user=individual_profile.user) + else: + pets = [] + sent_requests = [] + adoption_requests = [] + + return render(request, 'profile/individual_profile.html', { + 'profile': individual_profile, + 'pets': pets, + 'sent_requests': sent_requests, + 'adoption_requests': adoption_requests + }) + + +def edit_individual_profile(request, individual_id): + + profile = get_object_or_404(IndividualUser, id=individual_id) if request.method == 'POST': form = IndividualUserForm(request.POST, request.FILES, instance=profile) @@ -127,7 +152,7 @@ def edit_individual_profile(request): if form.is_valid(): form.save() messages.success(request, 'Your profile has been updated successfully.') - return redirect('accounts:individual_profile') + return redirect('accounts:individual_profile', individual_id=profile.id) else: messages.error(request, 'Please correct the errors below.') else: @@ -135,20 +160,38 @@ def edit_individual_profile(request): return render(request, 'profile/individual_edit_profile.html', {'form': form}) -def shelter_profile(request): - shelter_profile = Shelter.objects.get(user=request.user) - return render(request, 'profile/shelter_profile.html', {'profile': shelter_profile}) +def shelter_profile(request, shelter_id): + try: + shelter_profile = Shelter.objects.get(id=shelter_id) + except Shelter.DoesNotExist: + shelter_profile = None + + if shelter_profile: + + pets = Pet.objects.filter(user=shelter_profile.user) + adoption_requests = AdoptionRequest.objects.filter(pet__user=shelter_profile.user) + + else: + pets = [] + adoption_requests = [] + return render(request, 'profile/shelter_profile.html', {'profile': shelter_profile , 'pets': pets , 'adoption_requests': adoption_requests,}) -def edit_shelter_profile(request): - profile = Shelter.objects.get(user=request.user) + +def edit_shelter_profile(request, shelter_id): + profile = Shelter.objects.get(id=shelter_id) if request.method == 'POST': form = ShelterProfileForm(request.POST, request.FILES, instance=profile) if form.is_valid(): - form.save() - return redirect('accounts:shelter_profile') + form.save() + messages.success(request, 'Profile updated successfully!') + return redirect('accounts:shelter_profile', shelter_id=profile.id) else: form = ShelterProfileForm(instance=profile) - return render(request, 'profile/shelter_edit_profile.html', {'form': form}) \ No newline at end of file + return render(request, 'profile/shelter_edit_profile.html', {'form': form}) + + + + diff --git a/Pawtential/adoptions/admin.py b/Pawtential/adoptions/admin.py index 8c38f3f..8742bb3 100644 --- a/Pawtential/adoptions/admin.py +++ b/Pawtential/adoptions/admin.py @@ -1,3 +1,12 @@ from django.contrib import admin +from .models import AdoptionRequest + # Register your models here. + +class AdoptionRequestAdmin(admin.ModelAdmin): + list_display = ('user', 'pet', 'status', 'created_at', 'updated_at') + list_filter = ('status', 'pet') + search_fields = ('user__username', 'pet__name') + +admin.site.register(AdoptionRequest, AdoptionRequestAdmin) \ No newline at end of file diff --git a/Pawtential/adoptions/migrations/0001_initial.py b/Pawtential/adoptions/migrations/0001_initial.py new file mode 100644 index 0000000..ebd90b5 --- /dev/null +++ b/Pawtential/adoptions/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# Generated by Django 5.1.3 on 2024-11-30 16:27 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('pets', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='AdoptionRequest', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('pending', 'Pending'), ('accepted', 'Accepted'), ('rejected', 'Rejected')], default='pending', max_length=10)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('comments', models.TextField(blank=True, null=True)), + ('pet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='adoption_requests', to='pets.pet')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='adoption_requests', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'unique_together': {('pet', 'user')}, + }, + ), + ] diff --git a/Pawtential/adoptions/models.py b/Pawtential/adoptions/models.py index 71a8362..c91f652 100644 --- a/Pawtential/adoptions/models.py +++ b/Pawtential/adoptions/models.py @@ -1,3 +1,26 @@ from django.db import models +from django.contrib.auth.models import User +from pets.models import Pet # Create your models here. + +class AdoptionRequest(models.Model): + + STATUS_CHOICES = [ + ('pending', 'Pending'), + ('accepted', 'Accepted'), + ('rejected', 'Rejected'), + ] + + pet = models.ForeignKey(Pet , related_name='adoption_requests',on_delete=models.CASCADE) + user = models.ForeignKey(User , related_name='adoption_requests', on_delete=models.CASCADE) + status = models.CharField(max_length=10, choices=STATUS_CHOICES , default='pending') + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + comments = models.TextField(blank=True, null=True) + + class Meta: + unique_together = ['pet', 'user'] + + def __str__(self): + return f"Adoption Request by {self.user.username} for {self.pet.name} ({self.status})" \ No newline at end of file diff --git a/Pawtential/adoptions/templates/adoptions/already_requested.html b/Pawtential/adoptions/templates/adoptions/already_requested.html new file mode 100644 index 0000000..5b66b76 --- /dev/null +++ b/Pawtential/adoptions/templates/adoptions/already_requested.html @@ -0,0 +1,10 @@ +{% extends 'main/base.html' %} +{% load static %} + +{% block content %} +
+

Adoption Request Already Sent

+

You have already sent an adoption request for this pet.

+ Go Back to Pet Details +
+{% endblock %} diff --git a/Pawtential/adoptions/templates/adoptions/request_adoption.html b/Pawtential/adoptions/templates/adoptions/request_adoption.html new file mode 100644 index 0000000..8a39a72 --- /dev/null +++ b/Pawtential/adoptions/templates/adoptions/request_adoption.html @@ -0,0 +1,41 @@ +{% extends 'main/base.html' %} +{% load static %} + +{% block content %} +
+

Request Adoption for {{ pet.name }}

+
+
+ {{ pet.name }} +
+
+

{{ pet.name }}

+

Species: {{ pet.species }}

+

Age: {{ pet.age }} years

+

Description: {{ pet.description }}

+

Status: {{ pet.get_adoption_status_display }}

+ + {% if pet.adoption_status == 'available' %} + {% if existing_request %} +
+ You have already requested to adopt this pet! +
+ {% else %} +
+ {% csrf_token %} +
+ + +
+ +
+ {% endif %} + {% else %} +
+ This pet is not available for adoption at the moment. +
+ {% endif %} +
+
+
+{% endblock %} diff --git a/Pawtential/adoptions/urls.py b/Pawtential/adoptions/urls.py index e69de29..bba155c 100644 --- a/Pawtential/adoptions/urls.py +++ b/Pawtential/adoptions/urls.py @@ -0,0 +1,11 @@ +from django.urls import path +from . import views + +app_name = 'adoptions' + +urlpatterns = [ + path('request//', views.request_adoption, name='request_adoption'), + path('adoption_request///', views.handle_adoption_request, name='handle_adoption_request'), +] + + diff --git a/Pawtential/adoptions/views.py b/Pawtential/adoptions/views.py index 91ea44a..dc583f4 100644 --- a/Pawtential/adoptions/views.py +++ b/Pawtential/adoptions/views.py @@ -1,3 +1,52 @@ -from django.shortcuts import render +from django.shortcuts import render ,redirect, get_object_or_404 +from .models import AdoptionRequest +from pets.models import Pet +from django.contrib import messages + + # Create your views here. + + +def request_adoption(request, pet_id): + pet = get_object_or_404(Pet, id=pet_id) + + existing_request = AdoptionRequest.objects.filter(pet=pet, user=request.user).first() + if existing_request: + messages.warning(request, 'You have already sent an adoption request for this pet.') + return render(request, 'adoptions/already_requested.html', {'pet': pet}) + + if request.method == 'POST': + adoption_request = AdoptionRequest.objects.create(pet=pet, user=request.user, status='pending') + messages.success(request, 'Your adoption request has been sent successfully!') + return redirect('pets:pet_detail', pet_id=pet.id) + + return render(request, 'adoptions/request_adoption.html', {'pet': pet}) + + + +def handle_adoption_request(request, request_id, action): + adoption_request = get_object_or_404(AdoptionRequest, id=request_id) + + if adoption_request.status == 'pending': + if action == 'accept': + adoption_request.status = 'accepted' + adoption_request.save() + messages.success(request, f"The adoption request for {adoption_request.pet.name} has been accepted successfully!") + + elif action == 'reject': + adoption_request.status = 'rejected' + adoption_request.save() + messages.info(request, f"The adoption request for {adoption_request.pet.name} has been rejected.") + elif action == 'cancel' and adoption_request.user == request.user: + adoption_request.delete() + messages.info(request, "The adoption request has been successfully canceled.") + + if hasattr(request.user, 'individual_user'): + return redirect('accounts:individual_profile', individual_id=request.user.individual_user.id) + elif hasattr(request.user, 'shelter'): + return redirect('accounts:shelter_profile', shelter_id=request.user.shelter.id) + else: + messages.error(request, "An error occurred while processing the request.") + return redirect('accounts:login') + diff --git a/Pawtential/db.sqlite3 b/Pawtential/db.sqlite3 index 4f25124a77881e454142fd4e2c9da708e5146190..c60d0503122ba5b825158f9cc739a8c5e18a3dd0 100644 GIT binary patch delta 5915 zcmbVQ4{RIPdB1nZ6U7sck8#S#i7bnf|3s>y)BQgl>p-SyDvtHnvK>pp8swAX?RA~Qz3-i8TZT1G|n9WZ<^tcNRRQ}=cF~59}CVGxVjO0qe%B!o^-(_yt_7U{|}!v_&ld1d&qLkAh~ zoWa8cz?jGXj)(DE_}loa_*p!GHwFJZvpMa5)iv1d>KWXIvw5Kff(*#mRn6->~Ww(1#BOkQi2OCC$ zb-%TTVUQkWl4jPl%)N%yBzF!xUK^N58~Kzyuw0wJx?bC0O?1ad;TVjR9%YPVaxZ)E z`i>zF9fcv?$2^W}Ku6OZxIcUZWW58PnYs&gaUHhZp|94Vj+K1VP zYr-abJIFi!pbJT8FM^KwT&Np0c{u7HcA;M6*>?Si-+8g^Yai=EU8vz)@22_DXGkCI zeUiYVzCU39kv-yl5*!)#dN)qdEV1!uq(f#7M3M0#4Cy<7+Hv$mDR$LJuoiSP(f$(LzF~@`c>z?bo(NIV`DM$j%^IWj_C0jAdb_X8RNnuIgLLpuih05Qoobb{3H3I(&{x1G+{5F1V^S;6h z`2GXb0BQiQxj}EfUDo`r?-0K40H@#dm2ceWL-fSc=OaaVNz1IKL!wx?vbK78RZpwA zY-lN$xwfF0iM3_UJbU$trPHyg)V0V&WP0fQ>fA~qm76|ax?ruHJ2Rh&=J?Ur%3}r9 z8Y-TTT(iu)sajX_vN*Pw9vfeoOkA6v<&~xJ@vD#TP;NS;w^zv6+L8>1ID(-Ja z{CEWGSi(d2Vcd(mZ~*xJs*k5BgqVJ(eb{M_JMA&M^&EBDBTn1rw7r|LcVB;s!pN+; zPol%f+&X>|ji9ZIX@tnF#VGotL&w@L5|}(exL|&b)%qIH5{|)u>-yvllC@6;add$5By_%YxBPAU)w9Jsp^kkM?DOMU$)o4 zE&MXX|DWJs4;5`=)c+87*~HV7-MUB@g*+q+7!a-! zxC&}Nh38WMxr=4luFi6x7oAU=S<5WeFP5>ex?Cu(EM~H1ypTzhhC{lns*<84P07$z zMOa8Cv_(Tq8jG@?5VVCjAB~Kj9m{b`h1Ay1Zln93f--?4@K5kR;WzPXP%8XB&f_^e zj=9ZV{s104#JGr_!NxXOYTVSfwGNMq2;2`_Lka#{b8+$y`6G8kGwb^nL3{HAj-# zEE{V;xv^kx;I)@6DYKS#d4=OcWl2(%y+x9wYxG7BQ-g=PelvKJQ>SC=Ge#>sGHn`J zE4^+*EZ+?yAC^T<)J0j+cR_4QG>P0e?)DK~z@WR%U_CDGiNta}A}-CHJzo$nwZa_v zd&&8I5SxM+mW8k=b2gJoE13e6s#2I&Iav$IqC)*nyN~G90)YmX!ID)riY+)xmQfS| zgPF4L?7yppD~GCvpoI`9iWR^ha=akwinyOdRVi3ipCAGw+f-TQozXUJT!CH0${1O$ zkZ;D*$ba4g6QUjzLiTp92pq3SvZC$+B8LT;<9S`w1#;ssT??zS=QoTiaWs;fI-6*n zu-#Pc5&1AzBJAV}r}B~<(nNl+S&Oua6j7k;G)Uw3?Cka{{Bx++--BHB7LM3i%1Kpp zhkZ*j&Wm=Zb=QQf?>&O?K1bkJd<-7&&G>Gzf5l#7MelRofA#*`*5R*^ANQ6=aXZl+ zi4X`GiG*3O%w!8+_6ilkvd+nhrfaP+WlMCsWKu&RQI;8c)ZfrkG?&c8oq9BInGWQ#(auJW>^($uKuE{g2>4$J}|T@d9~K(+)J3UM0v%ZqN;DAmx@!ce(U zgVq+Q6oN#fYx<7W16ts`DRQc&fzxhsw5_3N56{3XObqY|<*lSjEmVU95(KPIP1JN= zb5o=4cA~uR+}9KV{*VeYyjzhS7@Q_ZswmPlzDzvU<-}0I%qKJXREyQShmcUNMOTRD z1&ATK;aCepO@g4n4uxf?jb&BlTVn{2ijesPPKB*PRN84+GIzz(5{eLi&825UZHhu6 z2t{-^JgQy7L%}b>3Xu2~J&*_`$b~X6C-RC)ldSs$;X^kG&wqKo=$Uo(wEep6)wcDv z5a~soH{CaJ(3fTZ6hJqBObm|AX;dzZyE{j^(Z+q5eA2uM8QMAA$L%A1Jd=zIrmARK zQfmkXqcgF{g;?b}U1Q(C$NgjO&hBpXdywE42C`;D zN8|e8x`_*sQ{%C19hHbTTD`rD{C!Tn&=*`Yig3;=_6s~e5S+X?KK@9s59*Rc#w=Ce z{adoL49^Qi(@bu6RknLV$F)`xF>dCK@^O>hVG69o0f_|3!WmCJ0Pys!AKO7GnZNDR$vRQpu< z5`q5*|0NuXeujUDJKn*61|L$tfnUP!!=dbxxa@WzyA<*{*ACL}T-!;nbET;c=gQF7 zxw>7R+I!kvd#2i)YdcNXo=K_=^m%CK{K?=q>;vMD@H=owd>?-g--eH+-@!I_7=>M&1B( r?>Gj31O{IRPd`_y`Dn)o=@=m$Ba~x=c8s`Mj8Kjd+A%^pM#%pME{bp< delta 1521 zcmai!ZERCj7{|}K_x5FNZ_i#BVV3qW_#Idl|-P#!I!79_Kmh!iX{ zrjxW{BTepr((6lv0TQC8eJg9CwWL`cDHW69iRpZ43Vi`;s~*Zq4y@{E9chG52_+tF zUkBCVx%R&GYc;q&H3|WoD1?4MSJ6%MF*=5DjZ-~H4DCEcnl$%CRX2}|KBFn$_vsX* zi55hazd{=6vhdPTLPya}0QKr$qrak?Fs`G;rtDNL=QOc4m(Av4Y;AVd;ounYz3hp{ zm~*&n&Njx%I_!2alsoZ+vCvCBkH4%%t`Jr6_o=Hyym{6EyeWl{A zqF+eFdc%WBt8F?l)WKRtgahsgA8Q$$J+OZ`xR;OfVRoL)B@6LDA!zsblRXyJ5zS`> z*5P*!&83nVw!c5^?wgGJ_`<%iQhye+`H*kV8DVO%2}9-+@t@H*|q*z}YyFdB7dyxvHE+}-D$ZJFzNG3iZ) zB77{=6CCCk&Sqgb3u}G$NSydg&K|psO#kOg$ zC-r1PQgy>ka6oSEhC89$d6|HOoN&W;8n$QxKuHCGdQ^2vWl-)`EKtFJfBF%*c^s}K zv=jMoK`0bb`J7f>&B7W&4#wf1q%80d5=sCRry@I~Yu(T+%`Xux7*Knk0Z96KiCABu z>VMGID?|f4FLy^F1ts(;u~~X82Cqtd3^psa0s!BYs(H9Yxp$Y+koHvU*Gco^un}^V zp`ivp3WO0i2}tGG=amMJu`*@7^m`hvQCho{hCcHna3c%XN^}N(Ao&L&PvHfhRE)Pv zmj+>NMIL-4|LA@s`HFlFYRd5TU+r%!QfdMT0G&hv?z|SHohEdk(b(8doAc7tY1k|Y zr=gn;Kpilf&34*M8|$U>r(thRQ79CNN*5F84nRMnJGdKeAnDFUXvCJ+D@}48qtB3Z zeHn5X-2>72|8&0*6rs<6ay50;&l0xPEdOQ>( z(NbFeX%*IuuTi5hfWAjJ&=vF%ez9IfIW&e#;E_BQCf;Id{&V4u-!>ibs|*Crw;jhe z98EYj<1hmtZ#qM~qAUBWUnW~=jR(|HMu4{I57Ddi1s$!usWof9)eNY*s(!6{zbZ%> pl@F8`lygc)nXmqZl#Q2(MpEvI!UjSLE)lCrpvJa99+-q>#ot^9tm^;( diff --git a/Pawtential/main/static/css/styles.css b/Pawtential/main/static/css/styles.css index b4337c6..5254f98 100644 --- a/Pawtential/main/static/css/styles.css +++ b/Pawtential/main/static/css/styles.css @@ -10,6 +10,7 @@ html, body{ height: 100%; margin: 0; background-color: #FAF0E4; + scroll-behavior: smooth; } main{ @@ -112,3 +113,62 @@ footer{ .account-fields { display: none; } + + +/* pet list */ +.pet-img { + width: 100%; + height: 200px; + object-fit: cover; +} + +.pet-card { + height: 450px; + display: flex; + flex-direction: column; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + border-radius: 10px; + overflow: hidden; +} + +.pet-card .card-body { + flex-grow: 1; + padding: 20px; +} + +.pet-card .card-title { + font-size: 1.2rem; + font-weight: bold; + margin-bottom: 10px; +} + +.pet-card .card-text { + font-size: 0.9rem; +} + +.pet-card .btn-link { + font-size: 0.9rem; + color: #FFAAA7; +} + +.pet-card .btn-link:hover { + text-decoration: underline; +} + +.pet-card .btn-secondary { + background-color: #24A19C; + border: none; + font-size: 1rem; + padding: 5px 15px; + position: absolute; + bottom: 20px; + right: 10px; + border-radius: 4px; +} + +.pet-card .btn-secondary:hover { + background-color: #98DDCA; +} + + + diff --git a/Pawtential/main/templates/main/base.html b/Pawtential/main/templates/main/base.html index ed22e1f..c5c79d4 100644 --- a/Pawtential/main/templates/main/base.html +++ b/Pawtential/main/templates/main/base.html @@ -36,28 +36,33 @@ Home + {% if user.is_authenticated %} + + {% endif %} {% if user.is_authenticated %} - {% else %}
{% endblock %} diff --git a/Pawtential/accounts/views.py b/Pawtential/accounts/views.py index fb4f5ea..f24b066 100644 --- a/Pawtential/accounts/views.py +++ b/Pawtential/accounts/views.py @@ -7,7 +7,7 @@ from .forms import ShelterProfileForm ,IndividualUserForm from pets.models import Pet from adoptions.models import AdoptionRequest - +from donations.models import DonationRequest def login_view(request): if request.method == 'POST': @@ -170,11 +170,13 @@ def shelter_profile(request, shelter_id): pets = Pet.objects.filter(user=shelter_profile.user) adoption_requests = AdoptionRequest.objects.filter(pet__user=shelter_profile.user) - + donation_requests = DonationRequest.objects.filter(shelter=shelter_profile).all() + else: pets = [] adoption_requests = [] - return render(request, 'profile/shelter_profile.html', {'profile': shelter_profile , 'pets': pets , 'adoption_requests': adoption_requests,}) + donation_requests = [] + return render(request, 'profile/shelter_profile.html', {'profile': shelter_profile , 'pets': pets , 'adoption_requests': adoption_requests,'donation_requests':donation_requests}) def edit_shelter_profile(request, shelter_id): diff --git a/Pawtential/db.sqlite3 b/Pawtential/db.sqlite3 index c60d0503122ba5b825158f9cc739a8c5e18a3dd0..cfee66aa026c6ecd2ad32123da71d777f37cb449 100644 GIT binary patch delta 2334 zcmai0U2qds6u$RvHrXV*If=tx3x#b4oR)@kH`%mFgsBlK?MzE;fk99wgk*tWNJ6^> z>I((N7kRKw9x}rWKQihJ!>C}Cpu?Xc1BfC#2q-9HopJaX!O<807`?kmN{6;%?(WUq zd(QdJckaFC><$j{gQxkS>8|4lAs@XfzZGwI{P_5h)o%ea#kM?WaW)X!@_n{Fk!gp{2_Ja#LVOOD6 z`rVOhY+<9r+4ire;W)g~Ok<3{P3VZtFi zI+jr!8%o0Q1DIQ7!hSp+$$G<`%~;e}B9ql}pS0TwS6=LQO)^fCEQNh?I3Rm{a!~RI za;wt&9|?S6U$ZwL2mHQZ&XIYiB#@fJvJ&>oUOA-rgTcc2%zTj}!cpY7AsnS49u(?# z>~IsdbLY}XZ%hlW%_xeL4Q%R7C4-@OvyxJKvzpW|CsUbJj@kEN`})A<@W86h72WBM zNMN8RzN~FYa{Z!IG^TbfUAesT*`-NUe!010OWV>-?eTSyN-D?!Q72#K*d$3!g&TY8 zF-M??;3gCcuE9evXExJ`|BnSJ+ZtO-zI}#*1ICqoIIL@ypc9?vtdAE)Kd{{P`rAiLo=!o+h(Qe3gA=vFrla+7&-p*jk*9@ygmX)1pV7vRW9 zyHlvm?t=WmTV(QT8*y1o7-N>P8~-*I;77z^i^*D=XD#$hOv4sNKPpblv8*v~A&i;Y zSy^I(@2RV^2>ynj;0j!$FVV9j?IJAzZ$kdm1LEwmx%4z+?RswmxP#0Vt1+W{c*3IN z^Aw&+EsTkw(4&ygQq(IH|Jq19RYv}oxWWc7V*pe76xcKh*dWfc1~4&zi9lUpxQ^gD x1-S&ulbA!3kr3gmYcrYA=~ntUQ50_=7;KXL`u75ce-OQ7YWVv@J zZs>y{D8W`Z1!~e}zcg8Eo^HbN%pI~amtSSj4{?0@23Zk(R9=TmQD1pG)}rz9w$^5i z$I_sTIH4O}K^bnrLzsY3*a?G4TmQQdl{ej`CG}z?Z{D43$#<#A#m@aXTGG=Cst>gaaI1?kps;`;Rp(ciKI>=-Q#@hhD|11vS4~jkT2%r6S_X<;5O_H%_S1TWzM+=Q!Kr7xiu_QDRZcwO&6YW0wNMG3RxRA5zXFK`{2iOqOG_znJsKjBpt_z7%a6l1CgD+|jEa{+1kc?9F8 z25Zed=CJXL@tNW3=hK!SNV7pY^!WFyWc3Fwm$+&rpqUTdmtwna0DD zWV-}M(YEwCM`3KnY>K=mWfPm0rpOUl={lS?E=`^DMLBlr`V{&bt{ zAg$b?!5D(S;Ah^PKj10M!WBNsH((52@a7Cc{M|e$98icZOBiEDmx)zlAXZsY8-6A? z_B1C}g|Wt-&>X*~GSZmtX$1ekGalqM5Aqlm`HbI(X}HA)=xd0tEt32$MbCt1%QCA$ zW@S})L__3U_RsN|pGuUYmylm`-ZUrA3idP3zV?RvFKMy`m= self.amount_requested: + self.fulfilled = True + self.save() + +class Donation(models.Model): + DONATION_METHOD_CHOICES = [ + ('cash', 'Cash Donation'), + ('supplies', 'Supplies Donation'), + ] + + PAYMENT_METHOD_CHOICES = [ + ('bank_transfer', 'Bank Transfer'), + ('apple_pay', 'Apple Pay'), + ('paypal', 'PayPal'), + ] + + donation_request = models.ForeignKey(DonationRequest, on_delete=models.CASCADE, related_name='donations') + donor_name = models.CharField(max_length=255, blank=True, null=True) + donation_type = models.CharField(max_length=20, choices=DONATION_METHOD_CHOICES) + amount = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True) + shipping_company = models.CharField(max_length=255, blank=True, null=True) + tracking_number = models.CharField(max_length=255, blank=True, null=True) + payment_method = models.CharField(max_length=50, choices=PAYMENT_METHOD_CHOICES, blank=True, null=True) + date_donated = models.DateTimeField(auto_now_add=True) + donation_status = models.CharField(max_length=50, default='pending') + + def __str__(self): + return f"{self.donor_name if self.donor_name else 'Anonymous'} - {self.donation_type} ({self.amount} SAR)" diff --git a/Pawtential/donations/templates/donations/add_donation_request.html b/Pawtential/donations/templates/donations/add_donation_request.html new file mode 100644 index 0000000..7ee4d96 --- /dev/null +++ b/Pawtential/donations/templates/donations/add_donation_request.html @@ -0,0 +1,45 @@ +{% extends 'main/base.html' %} +{% load static %} +{% block title %}Request Donation{% endblock %} + +{% block content %} +
+
+
+
+
+

Request a Donation

+
+
+
+ {% csrf_token %} + +
+ + +
+ +
+ + + Leave empty if you do not want to request a specific amount (e.g. for food or supplies). +
+ +
+ + +
+ + +
+
+
+
+
+
+{% endblock %} diff --git a/Pawtential/donations/templates/donations/donate.html b/Pawtential/donations/templates/donations/donate.html new file mode 100644 index 0000000..9cc7e9b --- /dev/null +++ b/Pawtential/donations/templates/donations/donate.html @@ -0,0 +1,65 @@ +{% extends 'main/base.html' %} +{% block title %}Donate{% endblock %} + +{% block content %} +
+

Make a Donation

+ +
+ {% csrf_token %} + +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + + + +
+
+ + + +{% endblock %} diff --git a/Pawtential/donations/templates/donations/donation_request_list.html b/Pawtential/donations/templates/donations/donation_request_list.html new file mode 100644 index 0000000..faa7bb5 --- /dev/null +++ b/Pawtential/donations/templates/donations/donation_request_list.html @@ -0,0 +1,93 @@ +{% extends 'main/base.html' %} +{% load static %} + +{% block title %}Donation Requests{% endblock %} + +{% block content %} +
+

List of Donation Requests

+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+ {% for request in donation_requests %} +
+
+
+
{{ request.donation_type|capfirst }}
+

Amount Requested:{{ request.amount_requested|floatformat:2 }}SAR

+

Description: {{ request.description|truncatewords:10 }}

+

Status: + {% if request.fulfilled %} + Fulfilled + {% else %} + Pending + {% endif %} +

+

Shelter: + {{ request.shelter.name }} + Donate Now + +

+
+
+
+ {% empty %} +

No donation requests found.

+ {% endfor %} + +
+ +
+ +
+
+{% endblock %} diff --git a/Pawtential/donations/templates/donations/edit_donation_request.html b/Pawtential/donations/templates/donations/edit_donation_request.html new file mode 100644 index 0000000..83f0a63 --- /dev/null +++ b/Pawtential/donations/templates/donations/edit_donation_request.html @@ -0,0 +1,62 @@ +{% extends 'main/base.html' %} +{% load static %} + +{% block title %}Edit Donation Request{% endblock %} + +{% block content %} +
+
+
+
+
+

Edit Donation Request

+
+
+ {% if messages %} + + {% endif %} + +
+ {% csrf_token %} + +
+ + +
+ +
+ + + Leave empty if you do not want to request a specific amount (e.g. for food or supplies). +
+ +
+ + +
+ +
+ + +
+ + +
+
+
+
+
+ +
+ Back to Donation Requests +
+{% endblock %} diff --git a/Pawtential/donations/urls.py b/Pawtential/donations/urls.py index e69de29..33edeba 100644 --- a/Pawtential/donations/urls.py +++ b/Pawtential/donations/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from . import views + +app_name = 'donations' + +urlpatterns = [ + path('add/', views.add_donation_request, name='add_donation_request'), + path('list/', views.donation_request_list, name='donation_request_list'), + path('delete//', views.delete_donation_request, name='delete_donation_request'), + path('edit//', views.edit_donation_request, name='edit_donation_request'), + path('donate//', views.make_donation, name='make_donation'), +] diff --git a/Pawtential/donations/views.py b/Pawtential/donations/views.py index 91ea44a..aa7fde7 100644 --- a/Pawtential/donations/views.py +++ b/Pawtential/donations/views.py @@ -1,3 +1,141 @@ -from django.shortcuts import render +from django.shortcuts import render , redirect ,get_object_or_404 +from django.contrib import messages +from .models import DonationRequest , Donation +from django.http import HttpResponseBadRequest # Create your views here. + +def add_donation_request(request): + if request.method == 'POST': + if not hasattr(request.user, 'shelter'): + return HttpResponseBadRequest("You do not have shelter permissions.") + + shelter = request.user.shelter + donation_type = request.POST.get('donation_type') + amount_requested = request.POST.get('amount_requested') + description = request.POST.get('description') + + if donation_type in ['food', 'supplies'] and not amount_requested: + amount_requested = None + else: + try: + amount_requested = float(amount_requested) + except ValueError: + messages.error(request, 'Invalid amount requested.') + return redirect('donations:add_donation_request') + + donation_request = DonationRequest( + shelter=shelter, + donation_type=donation_type, + amount_requested=amount_requested, + description=description, + ) + donation_request.save() + + messages.success(request, 'Your donation request has been successfully submitted!') + return redirect('donations:donation_request_list') + + return render(request, 'donations/add_donation_request.html') + +def donation_request_list(request): + donation_type = request.GET.get('donation_type', '') + fulfilled_status = request.GET.get('fulfilled_status', '') + + filters = {} + if donation_type: + filters['donation_type__icontains'] = donation_type + if fulfilled_status: + filters['fulfilled'] = fulfilled_status.lower() == 'true' + + donation_requests = DonationRequest.objects.filter(**filters) + + return render(request, 'donations/donation_request_list.html', {'donation_requests': donation_requests}) + + +def edit_donation_request(request, request_id): + donation_request = get_object_or_404(DonationRequest, id=request_id) + + if request.user != donation_request.shelter.user: + messages.error(request, "You are not authorized to edit this request.") + return redirect('donations:donation_request_list') + + if request.method == 'POST': + donation_type = request.POST.get('donation_type') + amount_requested = request.POST.get('amount_requested') + description = request.POST.get('description') + fulfilled = 'fulfilled' in request.POST + + if donation_type in ['food', 'supplies'] and not amount_requested: + amount_requested = None + else: + try: + amount_requested = float(amount_requested) + except ValueError: + amount_requested = None + + donation_request.donation_type = donation_type + donation_request.amount_requested = amount_requested + donation_request.description = description + donation_request.fulfilled = fulfilled + + donation_request.save() + + messages.success(request, "Donation request updated successfully.") + return redirect('donations:donation_request_list') + + return render(request, 'donations/edit_donation_request.html', {'donation_request': donation_request}) + + +def delete_donation_request(request, donation_id): + donation_request = get_object_or_404(DonationRequest, id=donation_id) + + if request.user != donation_request.shelter.user: + messages.error(request, "You are not authorized to delete this request.") + return redirect('donations:donation_request_list') + + donation_request.delete() + messages.success(request, "Donation request has been successfully deleted.") + return redirect('donations:donation_request_list') + +def make_donation(request, donation_request_id): + donation_request = get_object_or_404(DonationRequest, id=donation_request_id) + + if request.method == 'POST': + donor_name = request.POST.get('donor_name', '') + donation_type = request.POST.get('donation_type', '') + amount = request.POST.get('amount', '') + shipping_company = request.POST.get('shipping_company', '') + tracking_number = request.POST.get('tracking_number', '') + payment_method = request.POST.get('payment_method', None) + + if donation_type == 'cash' and amount and payment_method: + + donation = Donation( + donor_name=donor_name, + donation_type=donation_type, + amount=amount, + payment_method=payment_method, + donation_request=donation_request + ) + donation.save() + messages.success(request, f"Thank you for your monetary donation via {payment_method}!") + return redirect('donations:donation_request_list') + + elif donation_type == 'supplies' and shipping_company and tracking_number: + + donation = Donation( + donor_name=donor_name, + donation_type=donation_type, + shipping_company=shipping_company, + tracking_number=tracking_number, + donation_request=donation_request + ) + donation.save() + messages.success(request, "Thank you for your supplies donation!") + return redirect('donations:donation_request_list') + + else: + messages.error(request, "Please fill all required fields.") + return redirect('donations:make_donation', donation_request_id=donation_request.id) + + return render(request, 'donations/donate.html', {'donation_request': donation_request}) diff --git a/Pawtential/main/templates/main/base.html b/Pawtential/main/templates/main/base.html index c5c79d4..69df2d9 100644 --- a/Pawtential/main/templates/main/base.html +++ b/Pawtential/main/templates/main/base.html @@ -44,9 +44,13 @@ {% endif %} + {% if user.is_authenticated and user.shelter %} + - + {% endif %} {% if user.is_authenticated %} + {% endfor %} + + {% else %} +

No donation requests added yet.

+ {% endif %} {% endif %} {% endblock %} diff --git a/Pawtential/accounts/views.py b/Pawtential/accounts/views.py index f24b066..43be6c0 100644 --- a/Pawtential/accounts/views.py +++ b/Pawtential/accounts/views.py @@ -82,7 +82,10 @@ def register_shelter_view(request): messages.error(request, "Username is already taken. Please choose a different one.") return render(request, 'accounts/shelter_registration.html') - + if User.objects.filter(email=email).exists(): + messages.error(request, "This email is already registered. Please choose a different one.") + return render(request, 'accounts/shelter_registration.html') + if password != confirm_password: messages.error(request, "Passwords do not match.") return render(request, 'accounts/shelter_registration.html') @@ -98,12 +101,14 @@ def register_shelter_view(request): shelter = Shelter( user=user, + username=username, name=shelter_name, phone_number=phone_number_shelter, address=address, license_number=license_number, bio=bio, - profile_picture=profile_picture + profile_picture=profile_picture, + email=email ) shelter.save() @@ -171,12 +176,16 @@ def shelter_profile(request, shelter_id): pets = Pet.objects.filter(user=shelter_profile.user) adoption_requests = AdoptionRequest.objects.filter(pet__user=shelter_profile.user) donation_requests = DonationRequest.objects.filter(shelter=shelter_profile).all() - + else: pets = [] adoption_requests = [] donation_requests = [] - return render(request, 'profile/shelter_profile.html', {'profile': shelter_profile , 'pets': pets , 'adoption_requests': adoption_requests,'donation_requests':donation_requests}) + return render(request, 'profile/shelter_profile.html', + {'profile': shelter_profile , + 'pets': pets , + 'adoption_requests': adoption_requests, + 'donation_requests':donation_requests}) def edit_shelter_profile(request, shelter_id): diff --git a/Pawtential/adoptions/migrations/0002_adoptionrequest_comment_by_approver.py b/Pawtential/adoptions/migrations/0002_adoptionrequest_comment_by_approver.py new file mode 100644 index 0000000..f2a8091 --- /dev/null +++ b/Pawtential/adoptions/migrations/0002_adoptionrequest_comment_by_approver.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.3 on 2024-12-01 21:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('adoptions', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='adoptionrequest', + name='comment_by_approver', + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/Pawtential/adoptions/models.py b/Pawtential/adoptions/models.py index c91f652..e5c14d8 100644 --- a/Pawtential/adoptions/models.py +++ b/Pawtential/adoptions/models.py @@ -18,6 +18,7 @@ class AdoptionRequest(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) comments = models.TextField(blank=True, null=True) + comment_by_approver = models.TextField(null=True, blank=True) class Meta: unique_together = ['pet', 'user'] diff --git a/Pawtential/adoptions/templates/adoptions/already_requested.html b/Pawtential/adoptions/templates/adoptions/already_requested.html index 5b66b76..c7e4a1e 100644 --- a/Pawtential/adoptions/templates/adoptions/already_requested.html +++ b/Pawtential/adoptions/templates/adoptions/already_requested.html @@ -4,6 +4,13 @@ {% block content %}

Adoption Request Already Sent

+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %}

You have already sent an adoption request for this pet.

Go Back to Pet Details
diff --git a/Pawtential/adoptions/templates/adoptions/request_adoption.html b/Pawtential/adoptions/templates/adoptions/request_adoption.html index 8a39a72..1f6d342 100644 --- a/Pawtential/adoptions/templates/adoptions/request_adoption.html +++ b/Pawtential/adoptions/templates/adoptions/request_adoption.html @@ -4,6 +4,13 @@ {% block content %}

Request Adoption for {{ pet.name }}

+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %}
{{ pet.name }} diff --git a/Pawtential/adoptions/views.py b/Pawtential/adoptions/views.py index dc583f4..1e0a3d6 100644 --- a/Pawtential/adoptions/views.py +++ b/Pawtential/adoptions/views.py @@ -2,12 +2,13 @@ from .models import AdoptionRequest from pets.models import Pet from django.contrib import messages +from django.contrib.auth.decorators import login_required # Create your views here. - +@login_required def request_adoption(request, pet_id): pet = get_object_or_404(Pet, id=pet_id) @@ -17,10 +18,17 @@ def request_adoption(request, pet_id): return render(request, 'adoptions/already_requested.html', {'pet': pet}) if request.method == 'POST': - adoption_request = AdoptionRequest.objects.create(pet=pet, user=request.user, status='pending') + comment = request.POST.get('comments', '') + + adoption_request = AdoptionRequest.objects.create( + pet=pet, + user=request.user, + status='pending', + comments=comment + ) messages.success(request, 'Your adoption request has been sent successfully!') return redirect('pets:pet_detail', pet_id=pet.id) - + return render(request, 'adoptions/request_adoption.html', {'pet': pet}) @@ -28,16 +36,31 @@ def request_adoption(request, pet_id): def handle_adoption_request(request, request_id, action): adoption_request = get_object_or_404(AdoptionRequest, id=request_id) + pet = adoption_request.pet + + if not (pet.user == request.user or pet.shelter == request.user): + messages.error(request, "You are not authorized to take this action.") + return redirect('pets:pet_detail', pet_id=pet.id) + if adoption_request.status == 'pending': + comment = request.POST.get('comments', '') if action == 'accept': adoption_request.status = 'accepted' + if not comment: + comment = "Congratulations! Your adoption request has been accepted, and you will be contacted shortly." + adoption_request.comment_by_approver = comment adoption_request.save() - messages.success(request, f"The adoption request for {adoption_request.pet.name} has been accepted successfully!") + + messages.success(request, f"The adoption request for {adoption_request.pet.name} has been accepted successfully! {comment}") elif action == 'reject': adoption_request.status = 'rejected' + if not comment: + comment = "We regret to inform you that your adoption request has not been accepted. We wish you all the best in your future endeavors." + adoption_request.comment_by_approver = comment adoption_request.save() messages.info(request, f"The adoption request for {adoption_request.pet.name} has been rejected.") + elif action == 'cancel' and adoption_request.user == request.user: adoption_request.delete() messages.info(request, "The adoption request has been successfully canceled.") diff --git a/Pawtential/db.sqlite3 b/Pawtential/db.sqlite3 index cfee66aa026c6ecd2ad32123da71d777f37cb449..4627883e567ef9d57d2de2420ff8fc5ce49234fc 100644 GIT binary patch delta 12046 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 MS)=bUboO`tf6qUcbpQYW delta 3910 zcma)9Yj7LY72bPStJPyyS4t3$<0Q69piu1fzO}1_aa4#%NStRgAsHrSv1M6_EE!u4 zlXj+ZNEw*YPE+(_r|yHo^uePc1hoig+R~Oxp*%{`nUVr+ftDE{1DOewJ_19}U0Jpg z66o&iL-*W0=R4my_uQkYDRJs?VgJH;=rF@DDqPKD>o>bqj1C{Vewv7%hr#&eV&o`u zVQ5R0kM`6OU5QX_%fbWPqAxSy$O(qLNgg40lI^5K_LED=N^&y^Mo!cc@-q?t;zcpG zFIYV(wR4N3Y#(y(I)dB%u?~@4hTP~7YU9}X5w@qgy7ywGTMV;_fHPSh8OV*7CdbIL zj87o!Vl!t;G>Phe=LQ_PhHoT1TtaiCDj0q8|R z&wvp}Y%iLTkLGjZPB~vHPAm+;lrV`gfO`pNCJ*wnj`YOL>F zwma}#m0z)~mW~z!wdYouJlid-s`4AQ0S|A4Ypbq%l#PKZPT0YaOyq0gaq%Ky2gue6 z)g6W61xk-5cd2qpOQv*9vSh>16jwQjx*i%`gNP!hR3&97lB!s;W>mKqf9Q>=DK#k> zilM1iHB!1argX{4l%l6JMN({Cv#jcqrR5Qh9A?NH z)c-IOc}aX2klZU?cJs}j!Ce2o&1vx78ZPO&JZ9WDUdUVaU{Wt+$H&U@q>?X`3e`uy z^V8KM#_rUf?fqLf7T2bYJ(~uTxfA z2G2*GjrZYa@Vxr5b*MLXd0-1e@N$N~k8ks@;ii1olFvoxBG)5B2rWg`bi+(qHl_=NCC3@SM$BXN9*A+jObvUELp;)(fJpn`|3AvS4@0> zVTB??21G$9(i7I$bwXrsM>xX7zZ8!LkoLRjwRyc8~Ac)1-pZF_9nK zqbrRL(5qpxrO?TSBwLzh8t0SPNp5dvs9_LwfWdScQB6?e2lAs%E<4d{+3ta9+*w(- z{;HLGHaV>z@JQAvlt=b_8W1_9tCDJ~x@MmRWLA>YFa-4w(*d6I)N=qblO7E$?vJMN zC6%q)uGu`MZfyn8_eae;K8+DYP3cNX)g?-Y(aMODOlew5HYGi2>8im3kU(299&ZxT zHBolPJrtD&CG@un7_vF~MlavlOf&^8{wik501T=mE2?d%=aZNw0AOxo;(c>WG(%FE ziOB}%rgFAe&N~HZtmrKdI-~F1|APtD?ouqe3Bq0{8??ln1w@DKO_F6>wH3T~2{)6B zjofg*J&l!$nn{nYzh zW<%s1sCTc?V)bA08a;uKxudpZ>X+ndT5G(5!-eUqS0n{C;0^N)p(v`1U$`5QMZ)m2Efy*bMXCm!g<@Dr7>mDQ zuI}&vjb&lyDCSy7Yi#hkDcP!`H}!aQo*}W+5XPBs6VSOGQy}{dsRDVaoROCRh>9%9 zHf3EiIX3bdv;VvdDG*&NB_}C-Rc~GCR00fHQWE@?Ro*wJr-h+q(7SlGtFaz63rdEa zw9i;5pv8p7MlzF0-86Zei8VZPum3rYSI+SKW1KWRF`x=5A)MhqffB$=BWg*O2@%y= zVgwRMRcQW_ie{=R$3YJLsTrb5ON?fV@cDCQMq@1w5_TlnVOxfs78PSI#zAB`ycb~@mp9x)BH5)iWJ133GLx+fZIDl zE1|(3LG>G-!na`dD;H+m4QUj2=RJ!zRM&?(+{i8zsqef2-G=J#KaG8egjO;;+LkRt zx32cOPVcXV%Vm))_&54JmHU?U^Y!}g@MFk5HHhAZJsw>^1++N~Am83AHu3H~PvFPN zzV?lLTVEf#CGDxAf0pX=e~TwjJ$D4J#Y;luDB~xG81f(TYv>3bB~Ot=)F-XLxjA^`1znWLe0+O zsZjxJ!W^EZ{SVh-?g*GV3PxX;J%0tB-bL1U3Opm&GlD%MtXGb~KQQ8JG2(e9aGnwD z8JX!3k2B;rD146Smq5= self.amount_requested: + total_donated = self.donations.aggregate(models.Sum('amount'))['amount__sum'] or 0 + if total_donated >= self.amount_requested: self.fulfilled = True - self.save() + else: + self.fulfilled = False + self.save() + + def update_remaining_amount(self): + if self.amount_requested is None: + return + + total_donated = self.donations.aggregate(models.Sum('amount'))['amount__sum'] or 0 + self.amount_remaining = self.amount_requested - total_donated + self.check_fulfilled() + self.save() class Donation(models.Model): DONATION_METHOD_CHOICES = [ @@ -39,7 +52,6 @@ class Donation(models.Model): PAYMENT_METHOD_CHOICES = [ ('bank_transfer', 'Bank Transfer'), ('apple_pay', 'Apple Pay'), - ('paypal', 'PayPal'), ] donation_request = models.ForeignKey(DonationRequest, on_delete=models.CASCADE, related_name='donations') @@ -51,6 +63,20 @@ class Donation(models.Model): payment_method = models.CharField(max_length=50, choices=PAYMENT_METHOD_CHOICES, blank=True, null=True) date_donated = models.DateTimeField(auto_now_add=True) donation_status = models.CharField(max_length=50, default='pending') + payment_proof = models.FileField(upload_to='payment_proofs/', blank=True, null=True) + def __str__(self): return f"{self.donor_name if self.donor_name else 'Anonymous'} - {self.donation_type} ({self.amount} SAR)" + + def is_bank_transfer(self): + return self.payment_method == 'bank_transfer' + + def check_payment_proof(self): + if self.is_bank_transfer() and not self.payment_proof: + return False + return True + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + self.donation_request.update_remaining_amount() diff --git a/Pawtential/donations/templates/donations/add_donation_request.html b/Pawtential/donations/templates/donations/add_donation_request.html index 7ee4d96..8e5aecc 100644 --- a/Pawtential/donations/templates/donations/add_donation_request.html +++ b/Pawtential/donations/templates/donations/add_donation_request.html @@ -1,7 +1,6 @@ {% extends 'main/base.html' %} {% load static %} {% block title %}Request Donation{% endblock %} - {% block content %}
@@ -9,6 +8,13 @@

Request a Donation

+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %}
diff --git a/Pawtential/donations/templates/donations/donate.html b/Pawtential/donations/templates/donations/donate.html index 9cc7e9b..15e337e 100644 --- a/Pawtential/donations/templates/donations/donate.html +++ b/Pawtential/donations/templates/donations/donate.html @@ -1,65 +1,97 @@ {% extends 'main/base.html' %} +{% load static %} + {% block title %}Donate{% endblock %} + {% block content %}

Make a Donation

+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} + {% if remaining_amount %} +
+ Remaining amount to be donated: {{ remaining_amount }}. +
+ {% endif %} - + {% csrf_token %}
- +
- +
- -
+ + - -
+ +