diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000..4c32413 Binary files /dev/null and b/db.sqlite3 differ diff --git a/portal/__pycache__/__init__.cpython-311.pyc b/portal/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..23bbc66 Binary files /dev/null and b/portal/__pycache__/__init__.cpython-311.pyc differ diff --git a/portal/__pycache__/settings.cpython-311.pyc b/portal/__pycache__/settings.cpython-311.pyc new file mode 100644 index 0000000..970f036 Binary files /dev/null and b/portal/__pycache__/settings.cpython-311.pyc differ diff --git a/portal/settings.py b/portal/settings.py index 6e85203..f5b6ef5 100644 --- a/portal/settings.py +++ b/portal/settings.py @@ -48,6 +48,7 @@ "portal", "volunteer", "portal_account", + "sponsorship", ] MIDDLEWARE = [ diff --git a/sponsorship/__init__.py b/sponsorship/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sponsorship/__pycache__/__init__.cpython-311.pyc b/sponsorship/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..154b9e6 Binary files /dev/null and b/sponsorship/__pycache__/__init__.cpython-311.pyc differ diff --git a/sponsorship/__pycache__/admin.cpython-311.pyc b/sponsorship/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000..69598da Binary files /dev/null and b/sponsorship/__pycache__/admin.cpython-311.pyc differ diff --git a/sponsorship/__pycache__/apps.cpython-311.pyc b/sponsorship/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000..0866d54 Binary files /dev/null and b/sponsorship/__pycache__/apps.cpython-311.pyc differ diff --git a/sponsorship/__pycache__/models.cpython-311.pyc b/sponsorship/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000..14db630 Binary files /dev/null and b/sponsorship/__pycache__/models.cpython-311.pyc differ diff --git a/sponsorship/__pycache__/urls.cpython-311.pyc b/sponsorship/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000..0b34f8f Binary files /dev/null and b/sponsorship/__pycache__/urls.cpython-311.pyc differ diff --git a/sponsorship/__pycache__/views.cpython-311.pyc b/sponsorship/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000..1295324 Binary files /dev/null and b/sponsorship/__pycache__/views.cpython-311.pyc differ diff --git a/sponsorship/admin.py b/sponsorship/admin.py new file mode 100644 index 0000000..c453b09 --- /dev/null +++ b/sponsorship/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import SponsorshipApplication, SponsorshipAsset + +# Register your models here. +admin.site.register(SponsorshipApplication) +admin.site.register(SponsorshipAsset) + diff --git a/sponsorship/apps.py b/sponsorship/apps.py new file mode 100644 index 0000000..db38c61 --- /dev/null +++ b/sponsorship/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SponsorshipConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'sponsorship' diff --git a/sponsorship/migrations/0001_initial.py b/sponsorship/migrations/0001_initial.py new file mode 100644 index 0000000..8237442 --- /dev/null +++ b/sponsorship/migrations/0001_initial.py @@ -0,0 +1,36 @@ +# Generated by Django 5.1.7 on 2025-04-03 15:14 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='SponsorshipApplication', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('company_name', models.CharField(max_length=255)), + ('email', models.EmailField(max_length=254)), + ('tier', models.CharField(max_length=100)), + ('status', models.CharField(choices=[('Pending', 'Pending'), ('Approved', 'Approved'), ('Rejected', 'Rejected')], default='Pending', max_length=10)), + ('contract_sent', models.BooleanField(default=False)), + ('payment_received', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='SponsorshipAsset', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('asset_file', models.FileField(upload_to='sponsorship_assets/')), + ('uploaded_at', models.DateTimeField(auto_now_add=True)), + ('sponsorship_application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sponsorship.sponsorshipapplication')), + ], + ), + ] diff --git a/sponsorship/migrations/__init__.py b/sponsorship/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sponsorship/migrations/__pycache__/0001_initial.cpython-311.pyc b/sponsorship/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000..0a3a542 Binary files /dev/null and b/sponsorship/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/sponsorship/migrations/__pycache__/__init__.cpython-311.pyc b/sponsorship/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000..a01b8c9 Binary files /dev/null and b/sponsorship/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/sponsorship/models.py b/sponsorship/models.py new file mode 100644 index 0000000..82bdfe6 --- /dev/null +++ b/sponsorship/models.py @@ -0,0 +1,26 @@ +#model schema creation for more functionality addition to sponsorship portal +from django.db import models + +class SponsorshipApplication(models.Model): + STATUS_CHOICES = [ + ("Pending", "Pending"), + ("Approved", "Approved"), + ("Rejected", "Rejected"), + ] + company_name = models.CharField(max_length=255) + email = models.EmailField() + tier = models.CharField(max_length=100) + status = models.CharField(max_length=10, choices=STATUS_CHOICES, default="Pending") + contract_sent = models.BooleanField(default=False) + payment_received = models.BooleanField(default=False) + + def __str__(self): + return f"{self.company_name} - {self.status}" + +class SponsorshipAsset(models.Model): + sponsorship_application = models.ForeignKey(SponsorshipApplication, on_delete=models.CASCADE) + asset_file = models.FileField(upload_to="sponsorship_assets/") + uploaded_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"Asset for {self.sponsorship_application.company_name}" diff --git a/sponsorship/tests.py b/sponsorship/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/sponsorship/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/sponsorship/urls.py b/sponsorship/urls.py new file mode 100644 index 0000000..d15a3b2 --- /dev/null +++ b/sponsorship/urls.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + +app_name = "sponsorship" + +urlpatterns = [ +] \ No newline at end of file diff --git a/sponsorship/views.py b/sponsorship/views.py new file mode 100644 index 0000000..9044e7f --- /dev/null +++ b/sponsorship/views.py @@ -0,0 +1,62 @@ +from django.shortcuts import render, get_object_or_404, redirect +from django.http import JsonResponse +from django.views.decorators.csrf import csrf_exempt +from django.contrib.auth.decorators import login_required +from .models import SponsorshipApplication, SponsorshipAsset +#from .forms import SponsorshipTierForm, SponsorshipStatusForm, SponsorshipAssetForm + + +"""from the above this is a sample code i am contributing of starting the sponsorship +portal below, we would have to import the form and models which i havent +written code for yet which is to be implemented in the views here""" + +# Creating views here. + +#code functionality for sponsorship tier creation +@login_required +def create_sponsorship_tier(request): + """ Allow sponsorship team to define sponsorship tiers. """ + if request.method == "POST": + form = SponsorshipTierForm(request.POST) + if form.is_valid(): + form.save() + return JsonResponse({"message": "Sponsorship tier created successfully!"}, status=201) + else: + form = SponsorshipTierForm() + return render(request, "sponsorship/create_tier.html", {"form": form}) + +#code sample for tier listing +@login_required +def list_sponsorship_tiers(request): + """ List all sponsorship tiers available. """ + tiers = SponsorshipTier.objects.all() + return render(request, "sponsorship/list_tiers.html", {"tiers": tiers}) + +#addition of more functionalities via sponsorship review code +@login_required +def review_sponsorship_applications(request): + """ Allow sponsorship team to review applications. """ + applications = SponsorshipApplication.objects.all() + return render(request, "sponsorship/review_applications.html", {"applications": applications}) + +#code for sponsorship progress functionality +@login_required +def sponsorship_progress_overview(request): + """ Display an overview of sponsorship progress. """ + applications = SponsorshipApplication.objects.all() + total_applications = applications.count() + approved = applications.filter(status="Approved").count() + pending = applications.filter(status="Pending").count() + rejected = applications.filter(status="Rejected").count() + contracts_sent = applications.filter(contract_sent=True).count() + paid_sponsorships = applications.filter(payment_received=True).count() + + context = { + "total_applications": total_applications, + "approved": approved, + "pending": pending, + "rejected": rejected, + "contracts_sent": contracts_sent, + "paid_sponsorships": paid_sponsorships, + } + return render(request, "sponsorship/progress_overview.html", context)