WIP: Implement crm selections
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
<?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 Version20231011122510 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 teamer ADD crm_selections JSON DEFAULT NULL COMMENT \'(DC2Type:json)\'');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
// this down() migration is auto-generated, please modify it to your needs
|
||||
$this->addSql('ALTER TABLE teamer DROP crm_selections');
|
||||
}
|
||||
}
|
||||
@@ -55,4 +55,25 @@ class CrmAttributesResponse
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function toArray(): array
|
||||
{
|
||||
$crmSelections = [];
|
||||
|
||||
foreach ($this->getAttributeGroups() as $group) {
|
||||
/** @var CrmAttributeGroup $group */
|
||||
if (false === isset($crmSelections[$group->getLabel()])) {
|
||||
$crmSelections[$group->getLabel()] = [];
|
||||
}
|
||||
foreach ($group->getAttributes() as $attribute) {
|
||||
/** @var CrmAttribute $attribute */
|
||||
if (false === $attribute->isSelected()) {
|
||||
continue;
|
||||
}
|
||||
$crmSelections[$group->getLabel()][] = $attribute->getLabel();
|
||||
}
|
||||
}
|
||||
|
||||
return $crmSelections;
|
||||
}
|
||||
}
|
||||
@@ -48,8 +48,12 @@ class UserDataHandler
|
||||
]);
|
||||
}
|
||||
|
||||
public function createLocalUser(ProfileResponse $profileResponse, array $roles, bool $isTeamer = false): User
|
||||
{
|
||||
public function createLocalUser(
|
||||
ProfileResponse $profileResponse,
|
||||
array $roles,
|
||||
bool $isTeamer = false,
|
||||
array $crmSelections = []
|
||||
): User {
|
||||
$user = new User();
|
||||
$user
|
||||
->setFirstName($profileResponse->getFirstName())
|
||||
@@ -62,6 +66,7 @@ class UserDataHandler
|
||||
|
||||
if (true === $isTeamer) {
|
||||
$teamer = Teamer::fromApiResponse($profileResponse);
|
||||
$teamer->setCrmSelections($crmSelections);
|
||||
$user->setTeamer($teamer);
|
||||
$this->logger->info('Create teamer', [
|
||||
'uuid' => $teamer->getUuid(),
|
||||
@@ -82,7 +87,8 @@ class UserDataHandler
|
||||
User $user,
|
||||
ProfileResponse $profileResponse,
|
||||
array $roles,
|
||||
bool $isTeamer = false
|
||||
bool $isTeamer = false,
|
||||
array $crmSelections = []
|
||||
): void {
|
||||
$user->setRoles($roles);
|
||||
|
||||
@@ -93,6 +99,7 @@ class UserDataHandler
|
||||
->getTeamer()
|
||||
->setAddress($address)
|
||||
->setCommunication($communication)
|
||||
->setCrmSelections($crmSelections)
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@@ -128,6 +128,9 @@ class Teamer implements TimestampableEntityInterface
|
||||
#[ORM\Column(length: 2, nullable: true)]
|
||||
private ?string $size = null;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
private ?array $crmSelections = null;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->uuid = Uuid::v4();
|
||||
@@ -720,4 +723,16 @@ class Teamer implements TimestampableEntityInterface
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getCrmSelections(): ?array
|
||||
{
|
||||
return $this->crmSelections;
|
||||
}
|
||||
|
||||
public function setCrmSelections(?array $crmSelections): static
|
||||
{
|
||||
$this->crmSelections = $crmSelections;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ namespace App\Security;
|
||||
|
||||
use App\BusProNet\ApiClient;
|
||||
use App\BusProNet\ApiClientException;
|
||||
use App\BusProNet\Model\CrmAttribute;
|
||||
use App\BusProNet\Model\CrmAttributeGroup;
|
||||
use App\BusProNet\Model\CrmAttributesResponse;
|
||||
use App\BusProNet\Model\ProfileResponse;
|
||||
use App\BusProNet\UserDataHandler;
|
||||
@@ -117,6 +119,9 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
|
||||
return null;
|
||||
}
|
||||
|
||||
// Flatten selected CRM attributes
|
||||
$crmSelections = $crmAttributes->toArray();
|
||||
|
||||
// Determine teamer status from CRM attributes
|
||||
$isTeamer = $crmAttributes->isTeamer();
|
||||
|
||||
@@ -130,7 +135,7 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
|
||||
if (null !== $user) {
|
||||
$this
|
||||
->userDataHandler
|
||||
->updateLocalUser($user, $profileResponse, $roles, $isTeamer)
|
||||
->updateLocalUser($user, $profileResponse, $roles, $isTeamer, $crmSelections)
|
||||
;
|
||||
|
||||
return $user;
|
||||
@@ -138,7 +143,7 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
|
||||
|
||||
return $this
|
||||
->userDataHandler
|
||||
->createLocalUser($profileResponse, $roles, $isTeamer)
|
||||
->createLocalUser($profileResponse, $roles, $isTeamer, $crmSelections)
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,25 @@
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Selektionsmerkmale {{ teamer }}
|
||||
</h1>
|
||||
{% for group, attributes in teamer.crmSelections %}
|
||||
<h2 class="font-bold text-lg">
|
||||
{{ group }}
|
||||
</h2>
|
||||
{% if attributes|length %}
|
||||
<ul class="pb-4">
|
||||
{% for attribute in attributes %}
|
||||
<li class="flex items-center space-x-2">
|
||||
{{ icon('check', 'w-4 h-4') }}
|
||||
<span>{{ attribute }}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<div class="text-sm pb-4">
|
||||
-
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user