Task: Improve layout
This commit is contained in:
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20231021133634 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE application ADD remarks_by_id INT DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE application ADD CONSTRAINT FK_A45BDDC1DF01D017 FOREIGN KEY (remarks_by_id) REFERENCES user (id)');
|
||||||
|
$this->addSql('CREATE INDEX IDX_A45BDDC1DF01D017 ON application (remarks_by_id)');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE application DROP FOREIGN KEY FK_A45BDDC1DF01D017');
|
||||||
|
$this->addSql('DROP INDEX IDX_A45BDDC1DF01D017 ON application');
|
||||||
|
$this->addSql('ALTER TABLE application DROP remarks_by_id');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,6 +40,9 @@ class Application implements TimestampableEntityInterface
|
|||||||
#[ORM\Column(type: Types::TEXT, nullable: true)]
|
#[ORM\Column(type: Types::TEXT, nullable: true)]
|
||||||
private ?string $remarks = null;
|
private ?string $remarks = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne]
|
||||||
|
private ?User $remarksBy = null;
|
||||||
|
|
||||||
public function __construct(Assignment $assignment, Teamer $teamer)
|
public function __construct(Assignment $assignment, Teamer $teamer)
|
||||||
{
|
{
|
||||||
$this->uuid = Uuid::v4();
|
$this->uuid = Uuid::v4();
|
||||||
@@ -143,4 +146,16 @@ class Application implements TimestampableEntityInterface
|
|||||||
|
|
||||||
return $count === $requiredTrainings->count();
|
return $count === $requiredTrainings->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getRemarksBy(): ?User
|
||||||
|
{
|
||||||
|
return $this->remarksBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setRemarksBy(?User $remarksBy): static
|
||||||
|
{
|
||||||
|
$this->remarksBy = $remarksBy;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Repository;
|
namespace App\Repository;
|
||||||
|
|
||||||
|
use App\Entity\Application;
|
||||||
use App\Entity\Assignment;
|
use App\Entity\Assignment;
|
||||||
use App\Entity\Teamer;
|
use App\Entity\Teamer;
|
||||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||||
@@ -37,14 +38,15 @@ class AssignmentRepository extends ServiceEntityRepository
|
|||||||
|
|
||||||
if (null !== $teamer) {
|
if (null !== $teamer) {
|
||||||
$qb
|
$qb
|
||||||
->leftJoin('assignment.applications', 'application', Join::WITH, 'application.teamer = :teamer')
|
->leftJoin('assignment.applications', 'application', Join::WITH, $qb->expr()->eq('application.teamer', ':teamer'))
|
||||||
->leftJoin('assignment.dispositions', 'disposition', Join::WITH, 'disposition.teamer = :teamer')
|
->leftJoin('assignment.dispositions', 'disposition', Join::WITH, $qb->expr()->eq('disposition.teamer', ':teamer'))
|
||||||
->setParameter('teamer', $teamer)
|
->setParameter('teamer', $teamer)
|
||||||
;
|
;
|
||||||
} else {
|
} else {
|
||||||
$qb
|
$qb
|
||||||
->leftJoin('assignment.applications', 'application')
|
->leftJoin('assignment.applications', 'application', Join::WITH, $qb->expr()->neq('application.status', ':status'))
|
||||||
->leftJoin('assignment.dispositions', 'disposition')
|
->leftJoin('assignment.dispositions', 'disposition')
|
||||||
|
->setParameter('status', Application::STATUS_REJECTED)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,9 +61,9 @@ class AssignmentRepository extends ServiceEntityRepository
|
|||||||
->select('assignment', 'destination', 'job_profile', 'application', 'disposition')
|
->select('assignment', 'destination', 'job_profile', 'application', 'disposition')
|
||||||
->innerJoin('assignment.destination', 'destination')
|
->innerJoin('assignment.destination', 'destination')
|
||||||
->innerJoin('assignment.jobProfile', 'job_profile')
|
->innerJoin('assignment.jobProfile', 'job_profile')
|
||||||
->innerJoin('assignment.teamers', 'teamer', Join::WITH, 'teamer = :teamer')
|
->innerJoin('assignment.teamers', 'teamer', Join::WITH, $qb->expr()->eq('teamer', ':teamer'))
|
||||||
->leftJoin('assignment.applications', 'application', Join::WITH, 'application.teamer = :teamer')
|
->leftJoin('assignment.applications', 'application', Join::WITH, $qb->expr()->eq('application.teamer', ':teamer'))
|
||||||
->leftJoin('assignment.dispositions', 'disposition', Join::WITH, 'disposition.teamer = :teamer')
|
->leftJoin('assignment.dispositions', 'disposition', Join::WITH, $qb->expr()->eq('disposition.teamer', ':teamer'))
|
||||||
->where($qb->expr()->isNull('assignment.deletedAt'))
|
->where($qb->expr()->isNull('assignment.deletedAt'))
|
||||||
->setParameter('teamer', $teamer)
|
->setParameter('teamer', $teamer)
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -1,52 +1,76 @@
|
|||||||
<div class="grid grid-cols-2 gap-x-4 gap-y-3">
|
<dl class="divide-y divide-gray-100">
|
||||||
<div class="font-bold text-xl">
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Jobprofil
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
Jobprofil
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.jobProfile.name }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div class="font-bold text-xl">
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
{{ assignment.jobProfile.name }}
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
Destination
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.destination.product }}, {{ assignment.destination.hotel }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Destination
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
</div>
|
Einsatztermin
|
||||||
<div>
|
</dt>
|
||||||
{{ assignment.destination.product }}
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
<br>
|
{{ assignment.effectivePeriod.start|date('d.m.Y') }} - {{ assignment.effectivePeriod.end|date('d.m.Y') }}
|
||||||
{{ assignment.destination.hotel }}
|
</dd>
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
Einsatztermin
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ assignment.effectivePeriod.start|date('d.m.Y') }} - {{ assignment.effectivePeriod.end|date('d.m.Y') }}
|
|
||||||
</div>
|
</div>
|
||||||
{% if assignment.pickup and assignment.pickupDate %}
|
{% if assignment.pickup and assignment.pickupDate %}
|
||||||
<div>
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Busabfahrt
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
Busabfahrt
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.pickupDate|date('d.m.Y') }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
{{ assignment.pickupDate|date('d.m.Y') }}
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
</div>
|
Busbegleitung
|
||||||
<div>
|
</dt>
|
||||||
Busbegleitung
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
</div>
|
{{ assignment.pickup|bpn_pickup_label }}
|
||||||
<div>
|
</dd>
|
||||||
{{ assignment.pickup|bpn_pickup_label }}
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div>
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Du bekommst
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
</div>
|
Du bekommst
|
||||||
<div>
|
</dt>
|
||||||
{{ assignment.benefits|nl2list }}
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.benefits|nl2list }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
{% if assignment.fees|length %}
|
{% if assignment.fees|length %}
|
||||||
<div>
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Honorar
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
</div>
|
Honorar
|
||||||
<div>
|
</dt>
|
||||||
{% for fee in assignment.fees %}
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
{{ fee.name }} {{ fee.value|format_money }}
|
{% for fee in assignment.fees %}
|
||||||
{% endfor %}
|
{{ fee.name }} {{ fee.value|format_money }}
|
||||||
|
{% endfor %}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
{% if additional is defined %}
|
||||||
|
{% for item in additional %}
|
||||||
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
{{ item.type }}
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ item.description|raw }}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</dl>
|
||||||
|
|||||||
@@ -1,49 +1,62 @@
|
|||||||
<div class="grid lg:grid-cols-2 gap-x-8 gap-y-4">
|
<div class="grid lg:grid-cols-2 gap-x-8 gap-y-4">
|
||||||
<div class="lg:col-span-2 font-bold text-xl">
|
<dl class="divide-y divide-gray-100">
|
||||||
Jobprofil {{ assignment.jobProfile.name }}
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
</div>
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
<div class="grid grid-cols-2 gap-x-4 gap-y-3">
|
Jobprofil
|
||||||
<div class="font-bold">
|
</dt>
|
||||||
Destination
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.jobProfile.name }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
{{ assignment.destination.product }}
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
<br>
|
Destination
|
||||||
{{ assignment.destination.hotel }}
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.destination.product }}, {{ assignment.destination.hotel }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div class="font-bold">
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Einsatztermin
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
Einsatztermin
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.effectivePeriod.start|date('d.m.Y') }} - {{ assignment.effectivePeriod.end|date('d.m.Y') }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</dl>
|
||||||
{{ assignment.effectivePeriod.start|date('d.m.Y') }} - {{ assignment.effectivePeriod.end|date('d.m.Y') }}
|
<dl class="divide-y divide-gray-100">
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="grid grid-cols-2 gap-x-4 gap-y-3">
|
|
||||||
{% if assignment.pickup and assignment.pickupDate %}
|
{% if assignment.pickup and assignment.pickupDate %}
|
||||||
<div class="font-bold">
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Busabfahrt
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
Busabfahrt
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ assignment.pickupDate|date('d.m.Y') }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
{{ assignment.pickupDate|date('d.m.Y') }}
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
</div>
|
Busbegleitung
|
||||||
<div class="font-bold">
|
</dt>
|
||||||
Busbegleitung
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
</div>
|
{{ assignment.pickup|bpn_pickup_label }}
|
||||||
<div>
|
</dd>
|
||||||
{{ assignment.pickup|bpn_pickup_label }}
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="font-bold">
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
Honorar
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
Honorar
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{% if assignment.fees|length %}
|
||||||
|
{% for fee in assignment.fees %}
|
||||||
|
{{ fee.name }} {{ fee.value|format_money }}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
-
|
||||||
|
{% endif %}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</dl>
|
||||||
{% if assignment.fees|length %}
|
|
||||||
{% for fee in assignment.fees %}
|
|
||||||
{{ fee.name }} {{ fee.value|format_money }}
|
|
||||||
{% endfor %}
|
|
||||||
{% else %}
|
|
||||||
-
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<ul class="pb-8 divide-y divide-gray-200">
|
<ul class="pb-8 divide-y divide-gray-200">
|
||||||
{% if assignment.pickup and assignment.effectivePickupDate %}
|
{% if assignment.pickup and assignment.effectivePickupDate %}
|
||||||
<li class="py-2">
|
<li class="py-2">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<span class="flex-1">Busbegleitung {{ assignment.pickup|bpn_pickup_label }} am {{ assignment.effectivePickupDate|date('d.m.Y') }}</span>
|
<span class="flex-1">Busbegleitung {{ assignment.pickup|bpn_pickup_label }} am {{ assignment.effectivePickupDate|date('d.m.Y') }}</span>
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<dl class="divide-y divide-gray-100">
|
||||||
|
{% for item in items %}
|
||||||
|
<div class="py-6 first:pt-0 last:pb-0 sm:grid sm:grid-cols-3 sm:gap-4">
|
||||||
|
<dt class="text-sm font-bold leading-6 text-gray-900">
|
||||||
|
{{ item.type }}
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-6 text-gray-700 sm:col-span-2 sm:mt-0">
|
||||||
|
{{ item.description }}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</dl>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<div class="flex items-start space-x-4 bg-red-600 text-white p-4 rounded-md w-full">
|
||||||
|
{{ icon('alert', 'w-6 h-6 shrink-0') }}
|
||||||
|
<span>{{ message }}</span>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<div class="flex items-start space-x-4 bg-primary text-white p-4 rounded-md w-full">
|
||||||
|
{{ icon('info', 'w-6 h-6 shrink-0') }}
|
||||||
|
<span>{{ message }}</span>
|
||||||
|
</div>
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
<h1 class="text-2xl font-bold pb-8">
|
<h1 class="text-2xl font-bold pb-8">
|
||||||
Einsatzübersicht
|
Einsatzübersicht
|
||||||
</h1>
|
</h1>
|
||||||
<div class="bg-gray-100 rounded-md p-4 mb-8">
|
<div class="pb-8">
|
||||||
{% include '_partials/_assignment_info_compact.html.twig' %}
|
{% include '_partials/_assignment_info_compact.html.twig' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-2">
|
<div class="col-span-2">
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
Name
|
Name
|
||||||
</th>
|
</th>
|
||||||
<th class="w-1/3">
|
<th class="w-1/3">
|
||||||
Anmerkungen
|
Wünsche
|
||||||
</th>
|
</th>
|
||||||
<th class="w-1/6">
|
<th class="w-1/6">
|
||||||
Status
|
Status
|
||||||
|
|||||||
@@ -35,25 +35,22 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col space-y-2">
|
<div class="flex flex-col space-y-2">
|
||||||
<a href="{{ path('app_teamer_assignment', { 'uuid': assignment.uuid, 'r': return_url() }) }}"
|
{% if application.status == constant('App\\Entity\\Application::STATUS_REJECTED') %}
|
||||||
class="btn btn--small flex items-center space-x-2">
|
{% set icon = 'close' %}
|
||||||
{{ icon('info', 'w-4 h-4 shrink-0') }}
|
{% set class = 'bg-gray-100 text-gray-800 hover:bg-gray-50' %}
|
||||||
<span>Details</span>
|
{% set url = path('app_teamer_assignment', { 'uuid': assignment.uuid, 'r': return_url() }) %}
|
||||||
</a>
|
{% set label = 'Bewerbung abgelehnt' %}
|
||||||
{% if is_granted('DELETE', application) %}
|
{% else %}
|
||||||
<button type="button"
|
{% set icon = 'hourglass' %}
|
||||||
title="Bewerbung löschen"
|
{% set class = 'bg-yellow-100 text-yellow-800 hover:bg-yellow-50' %}
|
||||||
class="btn btn--small bg-red-100 text-red-800 hover:bg-red-50"
|
{% set url = path('app_teamer_assignment', { 'uuid': assignment.uuid, 'r': return_url() }) %}
|
||||||
{{ stimulus_controller('modal-button', [], [], {'confirmation-modal': '#confirmation-modal'}) }}
|
{% set label = 'in Bearbeitung' %}
|
||||||
{{ stimulus_action('modal-button', 'confirmation', null, {
|
|
||||||
'title': 'Bist du sicher?',
|
|
||||||
'content': 'Möchtest du die Bewerbing wirklich zurückziehen/löschen?',
|
|
||||||
'target-url': path('app_teamer_application_delete', { 'uuid': application.uuid })
|
|
||||||
}) }}>
|
|
||||||
{{ icon('delete', 'w-4 h-4 shrink-0') }}
|
|
||||||
<span>Löschen</span>
|
|
||||||
</button>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<a href="{{ url }}"
|
||||||
|
class="btn btn--small flex items-center space-x-2 {{ class }}">
|
||||||
|
{{ icon(icon, 'w-4 h-4 shrink-0') }}
|
||||||
|
<span>{{ label }}</span>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% if teamer.bookmarks.contains(assignment) %}
|
{% if teamer.bookmarks.contains(assignment) %}
|
||||||
{{ icon('star', 'w-5 h-5 text-yellow-500 absolute top-0 right-0 mt-2 mr-2') }}
|
{{ icon('star', 'w-5 h-5 text-yellow-500 absolute top-0 right-0 mt-2 mr-2') }}
|
||||||
|
|||||||
@@ -7,9 +7,7 @@
|
|||||||
Einsatzübersicht
|
Einsatzübersicht
|
||||||
</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">
|
{% include '_partials/_assignment_info.html.twig' %}
|
||||||
{% include '_partials/_assignment_info.html.twig' %}
|
|
||||||
</div>
|
|
||||||
<div>
|
<div>
|
||||||
<h2 class="text-xl font-bold pb-2">
|
<h2 class="text-xl font-bold pb-2">
|
||||||
Voraussetzungen für diesen Einsatz
|
Voraussetzungen für diesen Einsatz
|
||||||
@@ -17,24 +15,33 @@
|
|||||||
{% include '_partials/_assignment_requirements_info.html.twig' %}
|
{% include '_partials/_assignment_requirements_info.html.twig' %}
|
||||||
<div class="flex flex-col items-start space-y-4">
|
<div class="flex flex-col items-start space-y-4">
|
||||||
{% if disposition is not null %}
|
{% if disposition is not null %}
|
||||||
<div>
|
{% include '_partials/_infobox.html.twig' with {
|
||||||
Du wurdest am {{ disposition.createdAt|date('d.m.Y') }} für diesen Einsatz eingeteilt.
|
'message': 'Du wurdest am ' ~ disposition.createdAt|date('d.m.Y') ~ 'für diesen Einsatz eingeteilt.'
|
||||||
</div>
|
} %}
|
||||||
{% elseif application is not null %}
|
{% elseif application is not null %}
|
||||||
<div>
|
{% if application.status == constant('App\\Entity\\Application::STATUS_REJECTED') %}
|
||||||
Du hast dich am {{ application.createdAt|date('d.m.Y') }} auf diesen Einsatz beworben.
|
{% include '_partials/_errorbox.html.twig' with {
|
||||||
</div>
|
'message': 'Deine Bewerbung wurde leider abgelehnt.'
|
||||||
<button type="button"
|
} %}
|
||||||
class="btn btn--secondary"
|
{% if application.remarks %}
|
||||||
title="Bewerbung zurückziehen"
|
<strong>Begründung:</strong> {{ application.remarks|nl2br}}
|
||||||
{{ stimulus_controller('modal-button', [], [], {'confirmation-modal': '#confirmation-modal'}) }}
|
{% endif %}
|
||||||
{{ stimulus_action('modal-button', 'confirmation', null, {
|
{% else %}
|
||||||
'title': 'Bist du sicher?',
|
{% include '_partials/_infobox.html.twig' with {
|
||||||
'content': 'Möchtest du die Bewerbing wirklich zurückziehen?',
|
'message': 'Du hast dich am ' ~ application.createdAt|date('d.m.Y') ~ 'auf diesen Einsatz beworben.'
|
||||||
'target-url': path('app_teamer_application_withdraw', { 'uuid': application.uuid })
|
} %}
|
||||||
}) }}>
|
<button type="button"
|
||||||
Bewerbung zurückziehen
|
class="btn btn--secondary"
|
||||||
</button>
|
title="Bewerbung zurückziehen"
|
||||||
|
{{ stimulus_controller('modal-button', [], [], {'confirmation-modal': '#confirmation-modal'}) }}
|
||||||
|
{{ stimulus_action('modal-button', 'confirmation', null, {
|
||||||
|
'title': 'Bist du sicher?',
|
||||||
|
'content': 'Möchtest du die Bewerbing wirklich zurückziehen?',
|
||||||
|
'target-url': path('app_teamer_application_withdraw', { 'uuid': application.uuid })
|
||||||
|
}) }}>
|
||||||
|
Bewerbung zurückziehen
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<div>
|
<div>
|
||||||
Erfüllst du mehrere oder alle Voraussetzungen für diesen Einsatz?
|
Erfüllst du mehrere oder alle Voraussetzungen für diesen Einsatz?
|
||||||
@@ -42,10 +49,10 @@
|
|||||||
<a href="{{ path('app_teamer_application_create', { 'uuid': assignment.uuid }) }}" class="btn">
|
<a href="{{ path('app_teamer_application_create', { 'uuid': assignment.uuid }) }}" class="btn">
|
||||||
Hier bewerben!
|
Hier bewerben!
|
||||||
</a>
|
</a>
|
||||||
|
<a href="{{ path('app_teamer_bookmark_toggle', { 'uuid': assignment.uuid, 'r': return_url() }) }}" class="underline">
|
||||||
|
{% if not isBookmarked %}auf die Merkliste setzen{% else %}von der Merkliste löschen{% endif %}
|
||||||
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="{{ path('app_teamer_bookmark_toggle', { 'uuid': assignment.uuid, 'r': return_url() }) }}" class="underline">
|
|
||||||
{% if not isBookmarked %}auf die Merkliste setzen{% else %}von der Merkliste löschen{% endif %}
|
|
||||||
</a>
|
|
||||||
<a href="{{ returnUrl }}" class="underline">
|
<a href="{{ returnUrl }}" class="underline">
|
||||||
zurück
|
zurück
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -2,43 +2,31 @@
|
|||||||
|
|
||||||
{% block title %}Einsatzdetails{% endblock %}
|
{% block title %}Einsatzdetails{% endblock %}
|
||||||
|
|
||||||
{% macro infobox(message) %}
|
|
||||||
<div class="flex items-start space-x-4 bg-primary text-white p-4 rounded-md">
|
|
||||||
{{ icon('info', 'w-6 h-6 shrink-0') }}
|
|
||||||
<span>{{ message }}</span>
|
|
||||||
</div>
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% set assignment = disposition.assignment %}
|
{% set assignment = disposition.assignment %}
|
||||||
<h1 class="text-2xl font-bold pb-8">
|
<h1 class="text-2xl font-bold pb-8">
|
||||||
Einsatzdetails
|
Dein Einsatz wurde bestätigt!
|
||||||
</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>
|
<div>
|
||||||
<h2 class="text-xl font-bold pb-4">
|
{% include '_partials/_assignment_info.html.twig' with {
|
||||||
Dein Einsatz wurde bestätigt!
|
'additional': [
|
||||||
</h2>
|
{
|
||||||
<div class="pb-2">
|
'type': 'Ansprechpartner',
|
||||||
Dein Ansprechpartner für alle reisebezogenen Themen ist:
|
'description': 'Für alle reisebezogenen Themen wende dich bitte an ' ~ assignment.contact ~ ' (<a href="mailto:' ~ assignment.contact.email ~'" class="underline">' ~ assignment.contact.email ~ '</a>)'
|
||||||
</div>
|
},
|
||||||
<div class="pb-4">
|
{
|
||||||
<strong>{{ assignment.contact }}</strong>, <a href="mailto:{{ assignment.contact.email }}" class="underline">{{ assignment.contact.email }}</a>
|
'type': 'Kalendereintrag',
|
||||||
</div>
|
'description': '<a href="' ~ path('app_teamer_disposition_ics', { 'uuid': disposition.uuid }) ~ '" title="In den Kalender eintragen" class="underline">Hier klicken</a>'
|
||||||
<div class="pb-4">
|
}
|
||||||
<a href="{{ path('app_teamer_disposition_ics', { 'uuid': disposition.uuid }) }}"
|
]
|
||||||
title="In den Kalender eintragen"
|
} %}
|
||||||
class="group">
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div>
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
{% if disposition.assignment.documents|length %}
|
{% if disposition.assignment.documents|length %}
|
||||||
<h3 class="text-lg font-bold">
|
<h2 class="text-lg font-bold">
|
||||||
Dokumente
|
Dokumente
|
||||||
</h3>
|
</h2>
|
||||||
<ul class="pb-4 divide-y divide-gray-200">
|
<ul class="pb-4 divide-y divide-gray-200">
|
||||||
{% for document in disposition.assignment.documents %}
|
{% for document in disposition.assignment.documents %}
|
||||||
<li class="py-2">
|
<li class="py-2">
|
||||||
@@ -55,16 +43,11 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% 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') %}
|
||||||
<h3 class="text-xl font-bold pb-4">
|
<h2 class="text-lg font-bold pb-4">
|
||||||
Honorarvertrag
|
Honorarvertrag
|
||||||
</h3>
|
</h2>
|
||||||
{% if workflow_can(disposition, 'upload_contract') %}
|
{% 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">
|
||||||
@@ -88,16 +71,16 @@
|
|||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for blocker in workflow_transition_blockers(disposition, 'upload_contract') %}
|
{% for blocker in workflow_transition_blockers(disposition, 'upload_contract') %}
|
||||||
{{ _self.infobox(blocker.message) }}
|
{% include '_partials/_infobox.html.twig' with { 'message': blocker.message } %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{# Upload invoice #}
|
{# Upload invoice #}
|
||||||
{% if workflow_has_marked_place(disposition, 'confirmed') %}
|
{% if workflow_has_marked_place(disposition, 'confirmed') %}
|
||||||
<h3 class="text-xl font-bold pb-4">
|
<h2 class="text-lg font-bold pb-4">
|
||||||
Honorarnote
|
Honorarnote
|
||||||
</h3>
|
</h2>
|
||||||
{% if workflow_can(disposition, 'upload_invoice') %}
|
{% 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">
|
||||||
@@ -121,7 +104,7 @@
|
|||||||
{{ form_end(form) }}
|
{{ form_end(form) }}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for blocker in workflow_transition_blockers(disposition, 'upload_invoice') %}
|
{% for blocker in workflow_transition_blockers(disposition, 'upload_invoice') %}
|
||||||
{{ _self.infobox(blocker.message) }}
|
{% include '_partials/_infobox.html.twig' with { 'message': blocker.message } %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -47,10 +47,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
{% if assignment.applications|length %}
|
{% if assignment.applications|length %}
|
||||||
{% set icon = 'hourglass' %}
|
{% set application = assignment.applications[0] %}
|
||||||
{% set class = 'bg-yellow-100 text-yellow-800 hover:bg-yellow-50' %}
|
{% if application.status == constant('App\\Entity\\Application::STATUS_REJECTED') %}
|
||||||
{% set url = path('app_teamer_assignment', { 'uuid': assignment.uuid, 'r': return_url() }) %}
|
{% set icon = 'close' %}
|
||||||
{% set label = 'in Bearbeitung' %}
|
{% set class = 'bg-gray-100 text-gray-800 hover:bg-gray-50' %}
|
||||||
|
{% set url = path('app_teamer_assignment', { 'uuid': assignment.uuid, 'r': return_url() }) %}
|
||||||
|
{% set label = 'Bewerbung abgelehnt' %}
|
||||||
|
{% else %}
|
||||||
|
{% set icon = 'hourglass' %}
|
||||||
|
{% set class = 'bg-yellow-100 text-yellow-800 hover:bg-yellow-50' %}
|
||||||
|
{% set url = path('app_teamer_assignment', { 'uuid': assignment.uuid, 'r': return_url() }) %}
|
||||||
|
{% set label = 'in Bearbeitung' %}
|
||||||
|
{% endif %}
|
||||||
{% elseif assignment.dispositions|length %}
|
{% elseif assignment.dispositions|length %}
|
||||||
{% set icon = 'check' %}
|
{% set icon = 'check' %}
|
||||||
{% set class = 'bg-green-100 text-green-700 hover:bg-green-50' %}
|
{% set class = 'bg-green-100 text-green-700 hover:bg-green-50' %}
|
||||||
|
|||||||
Reference in New Issue
Block a user