Feat: Enable bookmark toggling from overview, improve disposition detail

This commit is contained in:
Björn Fromme
2023-10-20 18:26:25 +02:00
parent 30ce617cf7
commit 69a6e0a0b6
8 changed files with 68 additions and 29 deletions
@@ -43,6 +43,7 @@ class IndexController extends AbstractController
); );
return $this->render('teamer/bookmark/index.html.twig', [ return $this->render('teamer/bookmark/index.html.twig', [
'teamer' => $teamer,
'pagination' => $pagination, 'pagination' => $pagination,
]); ]);
} }
+5
View File
@@ -85,6 +85,11 @@ class Upload implements BlameableEntityInterface, TimestampableEntityInterface
return $instance; return $instance;
} }
public function __toString()
{
return $this->getDisplayName() ?? $this->getOriginalFilename();
}
public function getId(): ?int public function getId(): ?int
{ {
return $this->id; return $this->id;
+7 -1
View File
@@ -8,7 +8,7 @@
</h1> </h1>
<div class="grid sm:grid-cols-2 md:grid-cols-3 gap-4 pb-4"> <div class="grid sm:grid-cols-2 md:grid-cols-3 gap-4 pb-4">
{% for assignment in pagination %} {% for assignment in pagination %}
<div class="flex flex-col justify-between rounded-md border border-gray-200 bg-gray-100 p-4"> <div class="relative flex flex-col justify-between rounded-md border border-gray-200 bg-gray-100 p-4">
<div class="flex flex-col space-y-2 pb-2"> <div class="flex flex-col space-y-2 pb-2">
<div class="flex items-start space-x-2"> <div class="flex items-start space-x-2">
{{ icon('flag-' ~ assignment.destination.country, 'w-5 h-5 shrink-0') }} {{ icon('flag-' ~ assignment.destination.country, 'w-5 h-5 shrink-0') }}
@@ -56,6 +56,12 @@
<span>{{ label }}</span> <span>{{ label }}</span>
</a> </a>
</div> </div>
{% set isBookmarked = teamer.bookmarks.contains(assignment) %}
<a href="{{ path('app_teamer_bookmark_toggle', { 'uuid': assignment.uuid, 'r': return_url() }) }}"
class="absolute top-0 right-0 mt-2 mr-2"
title="{{ isBookmarked ? 'Von der Merkliste löschen' : 'Auf die Merkliste setzen' }}">
{{ icon('star', html_classes('w-5 h-5', { 'text-yellow-500': isBookmarked, 'text-gray-200': not isBookmarked } )) }}
</a>
</div> </div>
{% else %} {% else %}
... ist leer ... ist leer
@@ -31,9 +31,6 @@
{{ icon('info', 'w-4 h-4 shrink-0') }} {{ icon('info', 'w-4 h-4 shrink-0') }}
<span>Details</span> <span>Details</span>
</a> </a>
{% if teamer.bookmarks.contains(assignment) %}
{{ icon('star', 'w-5 h-5 text-yellow-500 absolute top-0 right-0 mt-2 mr-2') }}
{% endif %}
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
+45 -18
View File
@@ -10,35 +10,62 @@
{% endmacro %} {% endmacro %}
{% block content %} {% block content %}
{% set assignment = disposition.assignment %}
<h1 class="text-2xl font-bold pb-8"> <h1 class="text-2xl font-bold pb-8">
Einsatzdetails Einsatzdetails
</h1> </h1>
<div class="grid lg:grid-cols-2 gap-8 items-start"> <div class="grid lg:grid-cols-2 gap-8 items-start">
<div class="bg-gray-100 rounded-md p-4">
{% set assignment = disposition.assignment %}
{% include '_partials/_assignment_info.html.twig' %}
</div>
<div> <div>
<h2 class="text-2xl font-bold pb-8"> <h2 class="text-xl font-bold pb-4">
Dein Einsatz wurde bestätigt! Dein Einsatz wurde bestätigt!
</h2> </h2>
<p class="pb-4"> <div class="pb-2">
Dein Ansprechpartner für alle reisebezogenen Themen ist: Dein Ansprechpartner für alle reisebezogenen Themen ist:
<br> </div>
{{ assignment.contact }}, <a href="mailto:{{ assignment.contact.email }}" class="underline">{{ assignment.contact.email }}</a> <div class="pb-4">
</p> <strong>{{ assignment.contact }}</strong>, <a href="mailto:{{ assignment.contact.email }}" class="underline">{{ assignment.contact.email }}</a>
<p class="pb-4"> </div>
<a href="{{ path('app_teamer_disposition_ics', { 'uuid': disposition.uuid }) }}" class="underline"> <div class="pb-4">
Hier kannst du den Einsatz in deinen Kalender eintragen (ICS). <a href="{{ path('app_teamer_disposition_ics', { 'uuid': disposition.uuid }) }}"
title="In den Kalender eintragen"
class="group">
<div class="flex items-center justify-between">
<span class="flex-1">Klicke hier, um den Einsatz in deinen Kalender einzutragen</span>
{{ icon('calendar', 'w-4 h-4 duration-200 group-hover:scale-125') }}
</div>
</a> </a>
</p> </div>
{% if disposition.assignment.documents|length %}
<h3 class="text-lg font-bold">
Dokumente
</h3>
<ul class="pb-4 divide-y divide-gray-200">
{% for document in disposition.assignment.documents %}
<li class="py-2">
<a href="{{ path('app_common_download', { 'uuid': document.uuid }) }}"
target="_blank"
title="Download {{ document }}"
class="group">
<div class="flex items-center justify-between">
<span class="flex-1">{{ document }}</span>
{{ icon('download', 'w-4 h-4 duration-200 group-hover:scale-125') }}
</div>
</a>
</li>
{% endfor %}
</ul>
{% endif %}
<div class="bg-gray-100 rounded-md p-4">
{% include '_partials/_assignment_info.html.twig' %}
</div>
</div>
<div>
{# Upload contract #} {# Upload contract #}
{% if workflow_has_marked_place(disposition, 'new') %} {% if workflow_has_marked_place(disposition, 'new') %}
{% if workflow_can(disposition, 'upload_contract') %}
<h3 class="text-xl font-bold pb-4"> <h3 class="text-xl font-bold pb-4">
Hier findest du deinen Honorarvertrag Honorarvertrag
</h3> </h3>
{% if workflow_can(disposition, 'upload_contract') %}
<div class="pb-4"> <div class="pb-4">
<a href="{{ path('app_teamer_disposition_contractpdf', { 'uuid': disposition.uuid }) }}" target="_blank" class="inline-block"> <a href="{{ path('app_teamer_disposition_contractpdf', { 'uuid': disposition.uuid }) }}" target="_blank" class="inline-block">
<img src="{{ asset('build/images/contract_thumb.jpg') }}" alt="Honorarvertrag" class="block w-32 h-auto shadow-md"> <img src="{{ asset('build/images/contract_thumb.jpg') }}" alt="Honorarvertrag" class="block w-32 h-auto shadow-md">
@@ -68,10 +95,10 @@
{# Upload invoice #} {# Upload invoice #}
{% if workflow_has_marked_place(disposition, 'confirmed') %} {% if workflow_has_marked_place(disposition, 'confirmed') %}
{% if workflow_can(disposition, 'upload_invoice') %}
<h3 class="text-xl font-bold pb-4"> <h3 class="text-xl font-bold pb-4">
Hier findest du deine Honorarnote Honorarnote
</h3> </h3>
{% if workflow_can(disposition, 'upload_invoice') %}
<div class="pb-4"> <div class="pb-4">
<a href="{{ path('app_teamer_disposition_invoicepdf', { 'uuid': disposition.uuid }) }}" target="_blank" class="inline-block"> <a href="{{ path('app_teamer_disposition_invoicepdf', { 'uuid': disposition.uuid }) }}" target="_blank" class="inline-block">
<img src="{{ asset('build/images/invoice_thumb.jpg') }}" alt="Honorarnote" class="block w-32 h-auto shadow-md"> <img src="{{ asset('build/images/invoice_thumb.jpg') }}" alt="Honorarnote" class="block w-32 h-auto shadow-md">
@@ -6,5 +6,5 @@
<h1 class="text-2xl font-bold pb-8"> <h1 class="text-2xl font-bold pb-8">
Meine letzten Einsätze Meine letzten Einsätze
</h1> </h1>
{% include 'teamer/disposition/_table.html.twig' %} {% include 'teamer/disposition/_list.html.twig' %}
{% endblock %} {% endblock %}
@@ -6,5 +6,5 @@
<h1 class="text-2xl font-bold pb-8"> <h1 class="text-2xl font-bold pb-8">
Meine nächsten Einsätze Meine nächsten Einsätze
</h1> </h1>
{% include 'teamer/disposition/_table.html.twig' %} {% include 'teamer/disposition/_list.html.twig' %}
{% endblock %} {% endblock %}
+6 -3
View File
@@ -68,9 +68,12 @@
<span>{{ label }}</span> <span>{{ label }}</span>
</a> </a>
</div> </div>
{% if teamer.bookmarks.contains(assignment) %} {% set isBookmarked = teamer.bookmarks.contains(assignment) %}
{{ icon('star', 'w-5 h-5 text-yellow-500 absolute top-0 right-0 mt-2 mr-2') }} <a href="{{ path('app_teamer_bookmark_toggle', { 'uuid': assignment.uuid, 'r': return_url() }) }}"
{% endif %} class="absolute top-0 right-0 mt-2 mr-2"
title="{{ isBookmarked ? 'Von der Merkliste löschen' : 'Auf die Merkliste setzen' }}">
{{ icon('star', html_classes('w-5 h-5', { 'text-yellow-500': isBookmarked, 'text-gray-200': not isBookmarked } )) }}
</a>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>