From 966144fe6f7ce78b2c344c09641f891a1760f6c7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rn=20Menne?= Date: Sat, 21 Dec 2024 14:40:39 +0100 Subject: [PATCH] Add Categories to reports --- README.md | 12 +++++++ georeport/admin.py | 3 +- ...lter_report_description_report_category.py | 32 +++++++++++++++++++ georeport/models.py | 20 ++++++++++-- georeport/templates/georeport/category.html | 9 ++++++ georeport/templates/georeport/detail.html | 1 + georeport/templates/georeport/index.html | 7 ++++ georeport/urls.py | 1 + georeport/views.py | 14 ++++++-- 9 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 georeport/migrations/0003_category_alter_report_description_report_category.py create mode 100644 georeport/templates/georeport/category.html diff --git a/README.md b/README.md index b847cf1..b95efd4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ # Pinpoint Simple project, in which it is possible to make a report to a specific location + + +planned upcoming Features: + +- [ ] Recursive Categories +- [ ] User Management + - User can be grouped + - Groups have change access to categories + - maybe groups enable creation of subcategories +- [ ] Sending Mails +- [ ] Open311 Compliance + diff --git a/georeport/admin.py b/georeport/admin.py index 2a218a2..fcab78e 100644 --- a/georeport/admin.py +++ b/georeport/admin.py @@ -2,6 +2,7 @@ from django.contrib import admin # Register your models here. -from .models import Report +from .models import Category, Report admin.site.register(Report) +admin.site.register(Category) diff --git a/georeport/migrations/0003_category_alter_report_description_report_category.py b/georeport/migrations/0003_category_alter_report_description_report_category.py new file mode 100644 index 0000000..8f292da --- /dev/null +++ b/georeport/migrations/0003_category_alter_report_description_report_category.py @@ -0,0 +1,32 @@ +# Generated by Django 5.1.4 on 2024-12-21 13:30 + +import django.db.models.deletion +import georeport.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('georeport', '0002_report_state'), + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ], + ), + migrations.AlterField( + model_name='report', + name='description', + field=models.CharField(blank=True, max_length=255, null=True), + ), + migrations.AddField( + model_name='report', + name='category', + field=models.ForeignKey(default=georeport.models.get_default_related, on_delete=django.db.models.deletion.RESTRICT, to='georeport.category'), + ), + ] diff --git a/georeport/models.py b/georeport/models.py index 73e9b9c..b9f8089 100644 --- a/georeport/models.py +++ b/georeport/models.py @@ -1,9 +1,22 @@ +from asyncio import wait from django.db import models from django.forms import ModelForm # Create your models here. +class Category(models.Model): + name = models.CharField(max_length=100) + + def __str__(self): + return self.name + + +def get_default_related(): + def get_default_related(): + return Category.objects.first().id + + class Report(models.Model): class State(models.IntegerChoices): NEW = 0 @@ -13,12 +26,15 @@ class Report(models.Model): creation_time = models.DateTimeField(auto_now_add=True) # TODO last change shall be set to creation_time at creation_time last_change = models.DateTimeField(auto_now=True) - description = models.CharField(max_length=255, null=True) + description = models.CharField(max_length=255, null=True, blank=True) latitude = models.DecimalField(max_digits=8, decimal_places=6) longitude = models.DecimalField(max_digits=9, decimal_places=6) state = models.IntegerField(choices=State, default=0) + category = models.ForeignKey( + Category, on_delete=models.RESTRICT, default=get_default_related + ) # TODO add status # @@ -29,4 +45,4 @@ class Report(models.Model): class ReportForm(ModelForm): class Meta: model = Report - fields = ["title", "description", "latitude", "longitude"] + fields = ["title", "description", "latitude", "longitude", "category"] diff --git a/georeport/templates/georeport/category.html b/georeport/templates/georeport/category.html new file mode 100644 index 0000000..bc69705 --- /dev/null +++ b/georeport/templates/georeport/category.html @@ -0,0 +1,9 @@ + +{% extends "georeport/base.html" %} +{% load static %} +{% block title %}Detail {{ category.id }} {% endblock %} +{% block body %} +

Categoriy {{ category.id }}

+

Name: {{ category.name }}

+ Back +{% endblock %} diff --git a/georeport/templates/georeport/detail.html b/georeport/templates/georeport/detail.html index 99aa80f..f4b850e 100644 --- a/georeport/templates/georeport/detail.html +++ b/georeport/templates/georeport/detail.html @@ -9,6 +9,7 @@

Latitude: {{ report.latitude }}

Longitude: {{ report.longitude }}

Status: {{ report.get_state_display }}

+

Kategorie: {{ report.category }}

Back {% endblock %} diff --git a/georeport/templates/georeport/index.html b/georeport/templates/georeport/index.html index 033a36d..6bb3e47 100644 --- a/georeport/templates/georeport/index.html +++ b/georeport/templates/georeport/index.html @@ -15,4 +15,11 @@ {% endfor %} +

Categories

+ + {% endblock %} diff --git a/georeport/urls.py b/georeport/urls.py index 14e2230..e00701d 100644 --- a/georeport/urls.py +++ b/georeport/urls.py @@ -6,4 +6,5 @@ urlpatterns = [ path("", views.index, name="index"), path("", views.details, name="detail"), path("create", views.create, name="create"), + path("category/", views.category_details, name="category"), ] diff --git a/georeport/views.py b/georeport/views.py index 68b92cd..4030764 100644 --- a/georeport/views.py +++ b/georeport/views.py @@ -2,12 +2,17 @@ from django.shortcuts import get_object_or_404, render, redirect # Create your views here. -from .models import Report, ReportForm +from .models import Category, Report, ReportForm def index(request): reports = Report.objects.all() - return render(request, "georeport/index.html", context={"report_list": reports}) + categories = Category.objects.all() + return render( + request, + "georeport/index.html", + context={"report_list": reports, "category_list": categories}, + ) def details(request, id): @@ -15,6 +20,11 @@ def details(request, id): return render(request, "georeport/detail.html", context={"report": report}) +def category_details(request, id): + category = get_object_or_404(Category, pk=id) + return render(request, "georeport/category.html", context={"category": category}) + + def create(request): if request.method == "POST": reportForm = ReportForm(request.POST) -- 2.39.5