From c3f63d7d8ed4d2a889d149045467d11a5cc120ce Mon Sep 17 00:00:00 2001
From: Lucas Brandstaetter <lucas@brandstaetter.tech>
Date: Sat, 2 Nov 2024 09:26:03 +0100
Subject: [PATCH] Update assembly_links view

---
 .../locale/de/LC_MESSAGES/django.po           |  9 ++++--
 .../locale/en/LC_MESSAGES/django.po           |  9 ++++--
 .../templates/backoffice/assembly_detail.html |  8 +++++-
 .../templates/backoffice/assembly_edit.html   |  6 ++--
 .../backoffice/assembly_editlinks.html        | 28 +++++++++++--------
 src/backoffice/views/assemblies.py            |  4 +++
 src/core/models/assemblies.py                 |  1 +
 7 files changed, 43 insertions(+), 22 deletions(-)

diff --git a/src/backoffice/locale/de/LC_MESSAGES/django.po b/src/backoffice/locale/de/LC_MESSAGES/django.po
index 8163ec99a..4290e78bf 100644
--- a/src/backoffice/locale/de/LC_MESSAGES/django.po
+++ b/src/backoffice/locale/de/LC_MESSAGES/django.po
@@ -338,6 +338,9 @@ msgstr "Anmelde-Informationen"
 msgid "assembly_links"
 msgstr "Befreundete Assemblies"
 
+msgid "Edit"
+msgstr "Bearbeiten"
+
 msgid "no_entries"
 msgstr "keine Einträge"
 
@@ -371,9 +374,6 @@ msgstr "Befreundete Assemblies"
 msgid "opensinnewpage"
 msgstr "öffnet in neuem Fenster/Tab"
 
-msgid "Edit"
-msgstr "Bearbeiten"
-
 msgid "assemblyedit_children"
 msgstr "Zugeordnete Assemblies"
 
@@ -401,6 +401,9 @@ msgstr "Bezug zu anderer Assembly herstellen"
 msgid "assemblyedit_links__intro"
 msgstr "Ihr fühlt euch einer anderen Assembly verbunden, möchtet eure Buddies in der Nähe haben? Lasst uns wissen wer sie sind!"
 
+msgid "remove"
+msgstr "entfernen"
+
 msgid "Event-new"
 msgstr "Neue Veranstaltung"
 
diff --git a/src/backoffice/locale/en/LC_MESSAGES/django.po b/src/backoffice/locale/en/LC_MESSAGES/django.po
index 1e37ae805..5553fbae5 100644
--- a/src/backoffice/locale/en/LC_MESSAGES/django.po
+++ b/src/backoffice/locale/en/LC_MESSAGES/django.po
@@ -336,6 +336,9 @@ msgstr "registration details"
 msgid "assembly_links"
 msgstr "related assemblies"
 
+msgid "Edit"
+msgstr ""
+
 msgid "no_entries"
 msgstr "no entries"
 
@@ -369,9 +372,6 @@ msgstr "related assemblies"
 msgid "opensinnewpage"
 msgstr "opens in a new tab or window"
 
-msgid "Edit"
-msgstr ""
-
 msgid "assemblyedit_children"
 msgstr "Grouped Assemblies"
 
@@ -399,6 +399,9 @@ msgstr "Associate with another assembly"
 msgid "assemblyedit_links__intro"
 msgstr "You like to be close to your friends? Let us know who they are."
 
+msgid "remove"
+msgstr "remove"
+
 msgid "Event-new"
 msgstr "new event"
 
diff --git a/src/backoffice/templates/backoffice/assembly_detail.html b/src/backoffice/templates/backoffice/assembly_detail.html
index 7a045c327..af23a6f1c 100644
--- a/src/backoffice/templates/backoffice/assembly_detail.html
+++ b/src/backoffice/templates/backoffice/assembly_detail.html
@@ -119,7 +119,13 @@
     {% if assembly.hierarchy == 'regular' %}
       <div class="col-md-12">
         <div class="card">
-          <div class="card-header">{% trans "assembly_links" %}</div>
+          <div class="card-header">
+            {% trans "assembly_links" %}
+            <a class="float-end btn btn-primary btn-sm"
+               href="{% url 'backoffice:assembly-editlinks' pk=assembly.pk %}"
+               target="_blank"
+               title="{% trans "Edit" %}">{% trans "Edit" %}</a>
+          </div>
           <div class="card-body">
             {% with la=assembly.linked_assemblies %}
               {% if la|length > 0 %}
diff --git a/src/backoffice/templates/backoffice/assembly_edit.html b/src/backoffice/templates/backoffice/assembly_edit.html
index cec8b6840..84743ef97 100644
--- a/src/backoffice/templates/backoffice/assembly_edit.html
+++ b/src/backoffice/templates/backoffice/assembly_edit.html
@@ -90,9 +90,9 @@
             <div class="card-body">
               {% with la=assembly.linked_assemblies %}
                 {% if la|length > 0 %}
-                  <ul>
+                  <ul class="list-group">
                     {% for linked in la %}
-                      <li>
+                      <li class="list-group-item">
                         <a href="{% url 'backoffice:assembly' pk=linked.pk %}" target="_blank">{{ linked.name }}</a>
                       </li>
                     {% endfor %}
@@ -107,7 +107,7 @@
               <a class="float-end btn btn-primary"
                  href="{% url 'backoffice:assembly-editlinks' pk=assembly.pk %}"
                  target="_blank"
-                 title="{% trans "opensinnewpage" %}">{% trans "Edit" %} ({% trans "opensinnewpage" %})</a>
+                 title="{% trans "Edit" %}">{% trans "Edit" %} ({% trans "opensinnewpage" %})</a>
             </div>
           {% else %}
             {# assembly.is_cluster #}
diff --git a/src/backoffice/templates/backoffice/assembly_editlinks.html b/src/backoffice/templates/backoffice/assembly_editlinks.html
index b08a37a0c..a9baba842 100644
--- a/src/backoffice/templates/backoffice/assembly_editlinks.html
+++ b/src/backoffice/templates/backoffice/assembly_editlinks.html
@@ -24,14 +24,14 @@
             <form action="{% url 'backoffice:assembly-editlinks' pk=assembly.id %}"
                   method="post">
               {% csrf_token %}
-              <select class="form-control" name="add" required>
-                <option value="">({% trans "please_select" %})</option>
-                {% for a in candidates %}
-                  <option value="{{ a.pk }}"
-                          {% if a in links or a.pk == assembly.pk %}disabled{% endif %}>{{ a.name }}</option>
-                {% endfor %}
-              </select>
-              <button type="submit" class="btn btn-sm btn-secondary">{% trans "add" %}</button>
+              <div class="input-group">
+
+                <select class="form-select" name="add" required>
+                  <option value="">({% trans "please_select" %})</option>
+                  {% for a in candidates %}<option value="{{ a.pk }}">{{ a.name }}</option>{% endfor %}
+                </select>
+                <button type="submit" class="btn btn-sm btn-primary">{% trans "add" %}</button>
+              </div>
             </form>
           </div>
         </div>
@@ -44,15 +44,19 @@
           <div class="card-header">{% trans "assemblyedit_links" %}</div>
           <div class="card-body">
             {% if links|length > 0 %}
-              <ul>
+              <ul class="list-group">
                 {% for link in links %}
-                  <li>
-                    {{ link.name }} (Slug: {{ link.slug }})
+                  <li class="list-group-item">
                     <form action="{% url 'backoffice:assembly-editlinks' pk=assembly.id %}"
                           method="post">
+                      {{ link.name }} (Slug: {{ link.slug }})
                       {% csrf_token %}
                       <input type="hidden" name="delete" value="{{ link.pk }}">
-                      <button type="submit" class="btn btn-sm btn-secondary">{% trans "delete" %}</button>
+                      <span class="float-end">
+
+                        <button type="submit" class="btn btn-outline-danger btn-sm">{% trans "remove" %}</button>
+                      </span>
+
                     </form>
                   </li>
                 {% endfor %}
diff --git a/src/backoffice/views/assemblies.py b/src/backoffice/views/assemblies.py
index d5c894fbc..44f1a3134 100644
--- a/src/backoffice/views/assemblies.py
+++ b/src/backoffice/views/assemblies.py
@@ -535,6 +535,10 @@ class AssemblyEditLinksView(AssemblyMixin, View):
             Assembly.objects.associated_with_user(conference=self.conference, user=self.request.user)
             .filter(hierarchy=Assembly.Hierarchy.REGULAR)
             .exclude(state_assembly__in=[Assembly.State.NONE, Assembly.State.PLANNED, Assembly.State.HIDDEN, Assembly.State.REJECTED])
+            # Remove self from list (cannot link to self)
+            .exclude(pk=self.assembly.pk)
+            # Remove already linked assemblies
+            .exclude(related_assemblies__a=self.assembly)
         )
         candidates = list(candidates_qs.order_by('name'))
         context = self.get_context_data()
diff --git a/src/core/models/assemblies.py b/src/core/models/assemblies.py
index 5acc01978..bcc988744 100644
--- a/src/core/models/assemblies.py
+++ b/src/core/models/assemblies.py
@@ -354,6 +354,7 @@ class Assembly(TaggedItemMixin, models.Model):
     @property
     def linked_assemblies(self):
         qs = self.assembly_links.filter(is_public=True, type__in=AssemblyLink.PUBLIC_TYPES)
+        qs = qs.order_by('b__name')
         return [x.b for x in qs.select_related('b')]
 
     @property
-- 
GitLab