]> git.menne-pb.de Git - pinpoint.git/commitdiff
Add Categories to reports
authorJörn Menne <jmenne@fedora.de>
Sat, 21 Dec 2024 13:40:39 +0000 (14:40 +0100)
committerJörn Menne <jmenne@fedora.de>
Sat, 21 Dec 2024 13:53:23 +0000 (14:53 +0100)
README.md
georeport/admin.py
georeport/migrations/0003_category_alter_report_description_report_category.py [new file with mode: 0644]
georeport/models.py
georeport/templates/georeport/category.html [new file with mode: 0644]
georeport/templates/georeport/detail.html
georeport/templates/georeport/index.html
georeport/urls.py
georeport/views.py

index b847cf1c697758f88692e5bb4874174f1ccfad56..b95efd4e8a6ec99323cf9c47f3b7a82bc98b17a6 100644 (file)
--- 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
+
index 2a218a26ff45ca6b46740cc8adc61023c6134356..fcab78ef974060782ff3ad8049a6de0d33a4c32a 100644 (file)
@@ -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 (file)
index 0000000..8f292da
--- /dev/null
@@ -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'),
+        ),
+    ]
index 73e9b9c405762e6f50ca292f4c8cc3b3df48d479..b9f808983f2e4d4f97e2c55133f89731039d0c7b 100644 (file)
@@ -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 (file)
index 0000000..bc69705
--- /dev/null
@@ -0,0 +1,9 @@
+
+{% extends "georeport/base.html" %}
+{% load static %}
+{% block title %}Detail {{ category.id }} {% endblock %}
+{% block body %}
+    <h1>Categoriy {{ category.id }}</h1>
+    <p>Name: {{ category.name }}</p>
+    <a href="{% url 'index' %}">Back</a>
+{% endblock %}
index 99aa80feba19653743a50fb66247f0da040f03ba..f4b850ed35e478dd5535f37c5f90f460c6c80f61 100644 (file)
@@ -9,6 +9,7 @@
     <p id="p-lat" data-lat="{{ report.latitude }}">Latitude: {{ report.latitude }}</p>
     <p id="p-lng" data-lng="{{ report.longitude }}">Longitude: {{ report.longitude }}</p>
     <p>Status: {{ report.get_state_display }} </p>
+    <p>Kategorie: {{ report.category }} </p>
     <a href="{% url 'index' %}">Back</a>
     <script src="{% static 'georeport/details.js' %}"></script>
 {% endblock %} 
index 033a36d26b3e644e9d57660990d9dddd066b1a22..6bb3e47167dede9d1f2ab327fadd02579a5b790d 100644 (file)
     {% endfor %}
 </ul>
 
+<h2>Categories</h2>
+<ul>
+    {% for category in category_list %}
+        <li><a href="category/{{ category.id }}">{{ category.name }}</a></li>
+    {% endfor %}
+</ul>
+
 {% endblock %}
index 14e223030f8c278ae61b49cb7d66acce6ecfadf5..e00701dfcc6ef287e54e76cb3254ac3995cf5164 100644 (file)
@@ -6,4 +6,5 @@ urlpatterns = [
     path("", views.index, name="index"),
     path("<int:id>", views.details, name="detail"),
     path("create", views.create, name="create"),
+    path("category/<int:id>", views.category_details, name="category"),
 ]
index 68b92cd57786fbd8382ea31f55b6f2c2787dbb23..4030764c09be00085e4e2ac8551be6d799d1592e 100644 (file)
@@ -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)