feat: ensure teamer accepts terms when confirming driver's license
This commit is contained in:
@@ -6,6 +6,7 @@ use App\Model\DriverLicenseDeclarationDto;
|
|||||||
use App\Model\UploadSessionDto;
|
use App\Model\UploadSessionDto;
|
||||||
use App\Service\Upload\UploadHandler;
|
use App\Service\Upload\UploadHandler;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
@@ -16,13 +17,18 @@ class DriverLicenseDeclarationType extends AbstractType
|
|||||||
{
|
{
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||||
{
|
{
|
||||||
$builder->add('hasDriverLicense', ChoiceType::class, [
|
$builder
|
||||||
'label' => 'Besitzt du einen gültigen Führerschein?',
|
->add('hasDriverLicense', ChoiceType::class, [
|
||||||
'choices' => [
|
'label' => 'Besitzt du einen gültigen Führerschein?',
|
||||||
'Ja' => true,
|
'choices' => [
|
||||||
'Nein' => false,
|
'Ja' => true,
|
||||||
],
|
'Nein' => false,
|
||||||
]);
|
],
|
||||||
|
])
|
||||||
|
->add('confirmTermsOfUse', CheckboxType::class, [
|
||||||
|
'label' => 'Ich bestätige, die KfZ-Nutzungsbedingungen gelesen zu haben und stimme ihnen zu.',
|
||||||
|
])
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildView(FormView $view, FormInterface $form, array $options): void
|
public function buildView(FormView $view, FormInterface $form, array $options): void
|
||||||
|
|||||||
@@ -3,11 +3,26 @@
|
|||||||
namespace App\Model;
|
namespace App\Model;
|
||||||
|
|
||||||
use Symfony\Component\Validator\Constraints as Assert;
|
use Symfony\Component\Validator\Constraints as Assert;
|
||||||
|
use Symfony\Component\Validator\Context\ExecutionContextInterface;
|
||||||
|
|
||||||
class DriverLicenseDeclarationDto
|
class DriverLicenseDeclarationDto
|
||||||
{
|
{
|
||||||
#[Assert\NotNull(message: 'Bitte gib an, ob du einen Führerschein hast.')]
|
#[Assert\NotNull(message: 'Bitte gib an, ob du einen Führerschein hast.')]
|
||||||
private ?bool $hasDriverLicense = null;
|
private ?bool $hasDriverLicense;
|
||||||
|
|
||||||
|
private ?bool $confirmTermsOfUse = false;
|
||||||
|
|
||||||
|
#[Assert\Callback]
|
||||||
|
public function validateTermsOfUse(ExecutionContextInterface $executionContext): void
|
||||||
|
{
|
||||||
|
if (true === $this->hasDriverLicense() && true !== $this->getConfirmTermsOfUse()) {
|
||||||
|
$executionContext
|
||||||
|
->buildViolation('Bitte bestätige die KfZ-Nutzungsbedingungen.')
|
||||||
|
->atPath('confirmTermsOfUse')
|
||||||
|
->addViolation()
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function __construct(?bool $hasDriverLicense = null)
|
public function __construct(?bool $hasDriverLicense = null)
|
||||||
{
|
{
|
||||||
@@ -25,4 +40,17 @@ class DriverLicenseDeclarationDto
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getConfirmTermsOfUse(): ?bool
|
||||||
|
{
|
||||||
|
return $this->confirmTermsOfUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setConfirmTermsOfUse(?bool $confirmTermsOfUse): static
|
||||||
|
{
|
||||||
|
$this->confirmTermsOfUse = $confirmTermsOfUse;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,12 +15,6 @@
|
|||||||
Führerscheins hoch.
|
Führerscheins hoch.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% if not form.vars.valid %}
|
|
||||||
<div class="border border-red-500 rounded-md p-4 text-red-500 mb-6">
|
|
||||||
{% include '_partials/_form_errors.html.twig' with { 'form': form } %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if teamer.driverLicenseStatus == constant('App\\Entity\\Teamer::DRIVER_LICENSE_STATUS_DENIED') %}
|
{% if teamer.driverLicenseStatus == constant('App\\Entity\\Teamer::DRIVER_LICENSE_STATUS_DENIED') %}
|
||||||
{% embed '_partials/_alert.html.twig' with { 'type': 'warning' } %}
|
{% embed '_partials/_alert.html.twig' with { 'type': 'warning' } %}
|
||||||
{% block message %}
|
{% block message %}
|
||||||
@@ -33,6 +27,14 @@
|
|||||||
{% endembed %}
|
{% endembed %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if not form.vars.valid %}
|
||||||
|
{% embed '_partials/_alert.html.twig' with { 'type': 'warning' } %}
|
||||||
|
{% block message %}
|
||||||
|
{% include '_partials/_form_errors.html.twig' with { 'form': form } %}
|
||||||
|
{% endblock %}
|
||||||
|
{% endembed %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="flex flex-col space-y-4 pb-6">
|
<div class="flex flex-col space-y-4 pb-6">
|
||||||
{{ form_row(form.hasDriverLicense) }}
|
{{ form_row(form.hasDriverLicense) }}
|
||||||
|
|
||||||
@@ -55,6 +57,8 @@
|
|||||||
'accepted_files': 'image/jpg,image/jpeg,image/png,application/pdf',
|
'accepted_files': 'image/jpg,image/jpeg,image/png,application/pdf',
|
||||||
} %}
|
} %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{ form_row(form.confirmTermsOfUse) }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="btn" {{ stimulus_target('form-upload-guard', 'submit') }}>
|
<button type="submit" class="btn" {{ stimulus_target('form-upload-guard', 'submit') }}>
|
||||||
|
|||||||
Reference in New Issue
Block a user