diff --git a/migrations/Version20250930161953.php b/migrations/Version20250930161953.php
new file mode 100644
index 0000000..5609bf1
--- /dev/null
+++ b/migrations/Version20250930161953.php
@@ -0,0 +1,31 @@
+addSql('ALTER TABLE disposition ADD synced_with_bus_pro_net TINYINT(1) NOT NULL');
+ }
+
+ public function down(Schema $schema): void
+ {
+ // this down() migration is auto-generated, please modify it to your needs
+ $this->addSql('ALTER TABLE disposition DROP synced_with_bus_pro_net');
+ }
+}
diff --git a/src/Controller/Administrative/Disposition/BusProNetSyncToggleController.php b/src/Controller/Administrative/Disposition/BusProNetSyncToggleController.php
new file mode 100644
index 0000000..f7e20cd
--- /dev/null
+++ b/src/Controller/Administrative/Disposition/BusProNetSyncToggleController.php
@@ -0,0 +1,43 @@
+isSyncedWithBusProNet();
+ $disposition->setSyncedWithBusProNet(!$isSynced);
+
+ $this->entityManager->flush();
+
+ $this->addFlash('success', 'BusProNet Status aktualisiert');
+
+ $this->logger->info('Edit toggle BusProNet sync', [
+ 'disposition' => $disposition->getUuid(),
+ 'synced' => $disposition->isSyncedWithBusProNet(),
+ ]);
+
+ return new HxRedirectResponse($this->generateUrl('app_administrative_assignment_detail', [
+ 'uuid' => $disposition->getAssignment()->getUuid(),
+ ]));
+ }
+}
diff --git a/src/Entity/Disposition.php b/src/Entity/Disposition.php
index 389b505..0d30622 100644
--- a/src/Entity/Disposition.php
+++ b/src/Entity/Disposition.php
@@ -69,6 +69,9 @@ class Disposition implements BlameableEntityInterface, TimestampableEntityInterf
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $calledOffReason = null;
+ #[ORM\Column(type: Types::BOOLEAN)]
+ private bool $syncedWithBusProNet = false;
+
public function __construct(Application $application)
{
$this->uuid = Uuid::v4();
@@ -277,4 +280,16 @@ class Disposition implements BlameableEntityInterface, TimestampableEntityInterf
return $this;
}
+
+ public function isSyncedWithBusProNet(): bool
+ {
+ return $this->syncedWithBusProNet;
+ }
+
+ public function setSyncedWithBusProNet(bool $syncedWithBusProNet): static
+ {
+ $this->syncedWithBusProNet = $syncedWithBusProNet;
+
+ return $this;
+ }
}
diff --git a/src/Form/AssignmentFilterType.php b/src/Form/AssignmentFilterType.php
index a432340..945711f 100644
--- a/src/Form/AssignmentFilterType.php
+++ b/src/Form/AssignmentFilterType.php
@@ -63,6 +63,10 @@ class AssignmentFilterType extends AbstractType
'label' => 'vergangene Einsätze anzeigen',
'required' => false,
])
+ ->add('syncedWithBusProNet', CheckboxType::class, [
+ 'label' => 'in BusProNet hinterlegt',
+ 'required' => false,
+ ])
->add('country', ChoiceType::class, [
'label' => 'Land',
'required' => false,
diff --git a/src/Model/AssignmentFilterDto.php b/src/Model/AssignmentFilterDto.php
index 6bcc451..113e681 100644
--- a/src/Model/AssignmentFilterDto.php
+++ b/src/Model/AssignmentFilterDto.php
@@ -18,6 +18,7 @@ class AssignmentFilterDto extends AbstractFilterDto
protected array $status = [];
protected bool $includePast = false;
protected ?string $country = null;
+ protected bool $syncedWithBusProNet = false;
public function getId(): ?int
{
@@ -126,4 +127,16 @@ class AssignmentFilterDto extends AbstractFilterDto
return $this;
}
+
+ public function isSyncedWithBusProNet(): bool
+ {
+ return $this->syncedWithBusProNet;
+ }
+
+ public function setSyncedWithBusProNet(bool $syncedWithBusProNet): static
+ {
+ $this->syncedWithBusProNet = $syncedWithBusProNet;
+
+ return $this;
+ }
}
diff --git a/src/Repository/AssignmentRepository.php b/src/Repository/AssignmentRepository.php
index 09f914c..3047866 100644
--- a/src/Repository/AssignmentRepository.php
+++ b/src/Repository/AssignmentRepository.php
@@ -185,6 +185,13 @@ class AssignmentRepository extends ServiceEntityRepository
->setParameter('country', $country)
;
}
+
+ if (true === $filterDto->isSyncedWithBusProNet()) {
+ $qb
+ ->andWhere($qb->expr()->eq('disposition.syncedWithBusProNet', ':syncedWithBusProNet'))
+ ->setParameter('syncedWithBusProNet', true)
+ ;
+ }
}
public function getBookmarkQueryForTeamer(Teamer $teamer): Query
diff --git a/src/Service/Common/AssignmentFilterHandler.php b/src/Service/Common/AssignmentFilterHandler.php
index dfed6aa..5ae61f7 100644
--- a/src/Service/Common/AssignmentFilterHandler.php
+++ b/src/Service/Common/AssignmentFilterHandler.php
@@ -51,6 +51,9 @@ class AssignmentFilterHandler extends AbstractFilterHandler
if (isset($data['country'])) {
$filterDto->setCountry($data['country']);
}
+ if (isset($data['synced_with_bus_pro_net'])) {
+ $filterDto->setSyncedWithBusProNet((bool) $data['synced_with_bus_pro_net']);
+ }
return $filterDto;
}
@@ -70,6 +73,7 @@ class AssignmentFilterHandler extends AbstractFilterHandler
'status' => $filterDto->getStatus(),
'include_past' => $filterDto->isIncludePast(),
'country' => $filterDto->getCountry(),
+ 'synced_with_bus_pro_net' => $filterDto->isSyncedWithBusProNet(),
]);
}
}
diff --git a/templates/administrative/assignment/detail.html.twig b/templates/administrative/assignment/detail.html.twig
index 4723ca9..e98c835 100644
--- a/templates/administrative/assignment/detail.html.twig
+++ b/templates/administrative/assignment/detail.html.twig
@@ -192,6 +192,9 @@
|
+
{% if is_granted('CONTRACT_SUPPLEMENTARY', disposition) %}
{{ form_widget(filterForm.apply, { 'attr': { 'class': 'btn' } }) }}
|