From 9599807752dd2ed9d8a6994dbfda822e5be29fd0 Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Tue, 6 Jan 2026 01:06:44 +0100 Subject: [PATCH] FIXME created for quick tagging --- argocd/deployment.yaml | 2 +- boxes/templates/boxes/fixme.html | 145 +++++++++++++++++++++++++++++++ boxes/views.py | 48 +++++++++- labhelper/templates/base.html | 1 + labhelper/urls.py | 2 + 5 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 boxes/templates/boxes/fixme.html diff --git a/argocd/deployment.yaml b/argocd/deployment.yaml index d086e5f..f233355 100644 --- a/argocd/deployment.yaml +++ b/argocd/deployment.yaml @@ -27,7 +27,7 @@ spec: mountPath: /data containers: - name: web - image: git.baumann.gr/adebaumann/labhelper:0.055 + image: git.baumann.gr/adebaumann/labhelper:0.056 imagePullPolicy: Always ports: - containerPort: 8000 diff --git a/boxes/templates/boxes/fixme.html b/boxes/templates/boxes/fixme.html new file mode 100644 index 0000000..25dffec --- /dev/null +++ b/boxes/templates/boxes/fixme.html @@ -0,0 +1,145 @@ +{% extends "base.html" %} + +{% load static %} + +{% block title %}Fixme - LabHelper{% endblock %} + +{% block page_header %} + +{% endblock %} + +{% block content %} +
+

Select a Facet

+ + {% if facets %} +
+ + +
+ {% else %} +

No facets found. Please create some facets first.

+ {% endif %} +
+ +{% if selected_facet %} +
+

Things Missing "{{ selected_facet.name }}" Tags

+ + {% if missing_things %} +
+ {% csrf_token %} + + +
+

Add Tags:

+ {% if selected_facet.tags.all %} + {% for tag in selected_facet.tags.all %} + + {% endfor %} + {% if selected_facet.cardinality == 'single' %} +

+ This facet allows only one tag per thing. +

+ {% endif %} + {% else %} +

No tags available for this facet. Please create some tags first.

+ {% endif %} +
+ +
+

Things to Update:

+ {% for thing in missing_things %} +
+ +
+ {% endfor %} +
+ +
+ + + Clear Selection + +
+
+ {% else %} +

+ All things have tags for "{{ selected_facet.name }}" facet! +

+ + Back to Facet Selection + + {% endif %} +
+{% endif %} + +{% block extra_js %} + +{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/boxes/views.py b/boxes/views.py index 7565e60..68c3b8e 100644 --- a/boxes/views.py +++ b/boxes/views.py @@ -2,7 +2,7 @@ import bleach import markdown from django.contrib.auth.decorators import login_required -from django.db.models import Q +from django.db.models import Q, Prefetch from django.http import HttpResponse, JsonResponse from django.shortcuts import get_object_or_404, redirect, render @@ -402,3 +402,49 @@ def resources_list(request): return render(request, 'boxes/resources_list.html', { 'resources': resources, }) + + +@login_required +def fixme(request): + """Page to find and fix things missing tags for specific facets.""" + facets = Facet.objects.all().prefetch_related('tags') + + selected_facet = None + missing_things = [] + + if request.method == 'GET' and 'facet_id' in request.GET: + try: + selected_facet = Facet.objects.get(pk=request.GET['facet_id']) + # Find things that don't have any tag from this facet + missing_things = Thing.objects.exclude( + tags__facet=selected_facet + ).select_related('box', 'box__box_type').prefetch_related('tags') + except Facet.DoesNotExist: + selected_facet = None + + elif request.method == 'POST': + facet_id = request.POST.get('facet_id') + tag_ids = request.POST.getlist('tag_ids') + thing_ids = request.POST.getlist('thing_ids') + + if facet_id and tag_ids and thing_ids: + facet = get_object_or_404(Facet, pk=facet_id) + tags = Tag.objects.filter(id__in=tag_ids, facet=facet) + things = Thing.objects.filter(id__in=thing_ids) + + for thing in things: + if facet.cardinality == Facet.Cardinality.SINGLE: + # Remove existing tags from this facet + thing.tags.remove(*thing.tags.filter(facet=facet)) + # Add new tags + for tag in tags: + if tag.facet == facet: + thing.tags.add(tag) + + return redirect('fixme') + + return render(request, 'boxes/fixme.html', { + 'facets': facets, + 'selected_facet': selected_facet, + 'missing_things': missing_things, + }) diff --git a/labhelper/templates/base.html b/labhelper/templates/base.html index 0a18558..a773594 100644 --- a/labhelper/templates/base.html +++ b/labhelper/templates/base.html @@ -411,6 +411,7 @@