feat: forced teamer data verification after configured due dates

addresses #869b33c7p
This commit is contained in:
Björn Fromme
2026-03-15 12:42:28 +01:00
parent 20da6a0afc
commit 518bc7339f
19 changed files with 357 additions and 14 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ use App\BusProNet\Model\CrmAttributesResponse;
use App\BusProNet\Model\ProfileResponse;
use App\BusProNet\UserDataHandler;
use App\Entity\User;
use App\Security\RequiredCheck\RequiredTeamerCheckRegistry;
use App\RequiredTeamerCheck\RequiredTeamerCheckRegistry;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -1,72 +0,0 @@
<?php
namespace App\Security\RequiredCheck;
use App\Entity\Teamer;
use App\Entity\Upload;
use App\Entity\User;
class DriverLicenseRequiredCheck implements RequiredTeamerCheckInterface
{
public function getCode(): string
{
return 'driver_license';
}
public function appliesTo(User $user): bool
{
return true === $user->hasRole('ROLE_TEAMER');
}
public function isSatisfied(User $user): bool
{
$teamer = $user->getTeamer();
if (null === $teamer) {
return false;
}
$declaration = $teamer->getDriverLicenseDeclaration();
if (null === $declaration) {
return false;
}
if (false === $declaration) {
return true;
}
if (true === $teamer->isDriverLicenseVerified()) {
return true;
}
if (Teamer::DRIVER_LICENSE_STATUS_APPROVED === $teamer->getDriverLicenseStatus()) {
return true;
}
$upload = $teamer->getDriverLicenseUpload();
if (null === $upload) {
return false;
}
if (Upload::TYPE_DRIVER_LICENSE !== $upload->getType()) {
return false;
}
if (Teamer::DRIVER_LICENSE_STATUS_DENIED === $teamer->getDriverLicenseStatus()) {
return false;
}
if (Upload::STATUS_REJECTED === $upload->getStatus()) {
return false;
}
return true;
}
public function getRouteName(): string
{
return 'app_teamer_check_driver_license';
}
}
@@ -1,16 +0,0 @@
<?php
namespace App\Security\RequiredCheck;
use App\Entity\User;
interface RequiredTeamerCheckInterface
{
public function getCode(): string;
public function appliesTo(User $user): bool;
public function isSatisfied(User $user): bool;
public function getRouteName(): string;
}
@@ -1,30 +0,0 @@
<?php
namespace App\Security\RequiredCheck;
use App\Entity\User;
class RequiredTeamerCheckRegistry
{
/**
* @param iterable<RequiredTeamerCheckInterface> $checks
*/
public function __construct(private readonly iterable $checks)
{
}
public function getFirstUnresolvedCheck(User $user): ?RequiredTeamerCheckInterface
{
foreach ($this->checks as $check) {
if (false === $check->appliesTo($user)) {
continue;
}
if (false === $check->isSatisfied($user)) {
return $check;
}
}
return null;
}
}