WIP: Implement new role house manager

This commit is contained in:
Björn Fromme
2023-11-03 13:00:52 +01:00
parent 392ea3f16f
commit 538d39f63e
7 changed files with 84 additions and 14 deletions
+31
View File
@@ -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 Version20231103105105 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 user ADD hotel_code VARCHAR(32) DEFAULT NULL, DROP hotel_bus_pro_id');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE user ADD hotel_bus_pro_id INT DEFAULT NULL, DROP hotel_code');
}
}
@@ -36,4 +36,15 @@ class HotelDataProvider
{ {
return $this->getAll()[$busProId] ?? null; return $this->getAll()[$busProId] ?? null;
} }
public function findByCode(string $code): ?Hotel
{
foreach ($this->getAll() as $hotel) {
if ($code === $hotel->getCode()) {
return $hotel;
}
}
return null;
}
} }
@@ -9,6 +9,7 @@ class CrmAttributesResponse
private bool $manager = false; private bool $manager = false;
private bool $houseManager = false; private bool $houseManager = false;
private bool $teamer = false; private bool $teamer = false;
private ?string $hotelCode = null;
public function getAttributeGroups(): ?array public function getAttributeGroups(): ?array
{ {
@@ -69,6 +70,18 @@ class CrmAttributesResponse
return $this; return $this;
} }
public function getHotelCode(): ?string
{
return $this->hotelCode;
}
public function setHotelCode(?string $hotelCode): static
{
$this->hotelCode = $hotelCode;
return $this;
}
public function toArray(): array public function toArray(): array
{ {
$crmSelections = []; $crmSelections = [];
+12 -3
View File
@@ -134,6 +134,7 @@ class ResponseParser
{ {
$groups = []; $groups = [];
$isAdmin = $isManager = $isHouseManager = $isTeamer = false; $isAdmin = $isManager = $isHouseManager = $isTeamer = false;
$hotelCode = null;
foreach ($xml->xpath('selektionsmerkmale/selektionsgruppe') as $item) { foreach ($xml->xpath('selektionsmerkmale/selektionsgruppe') as $item) {
$group = new CrmAttributeGroup(); $group = new CrmAttributeGroup();
@@ -141,14 +142,21 @@ class ResponseParser
$attributes = []; $attributes = [];
foreach ($item->xpath('selektion') as $subItem) { foreach ($item->xpath('selektion') as $subItem) {
$attributeId = (int) $subItem->attributes()['id'];
$attributeLabel = (string) $subItem->attributes()['bezeichnung'];
$attributeSelected = 'True' === (string) $subItem->attributes()['auswahl'];
$attribute = new CrmAttribute(); $attribute = new CrmAttribute();
$attribute $attribute
->setId((int) $subItem->attributes()['id']) ->setId($attributeId)
->setLabel((string) $subItem->attributes()['bezeichnung']) ->setLabel($attributeLabel)
->setSelected('True' === (string) $subItem->attributes()['auswahl']) ->setSelected($attributeSelected)
; ;
$attributes[] = $attribute; $attributes[] = $attribute;
if (1 === preg_match('/Hausleitung ([A-Z0-9]+)/', $attributeLabel, $matches) && true === $attributeSelected) {
$isHouseManager = true;
$hotelCode = $matches[1];
}
if ($this->config['bpn_crm_id_admin'] === $attribute->getId() && true === $attribute->isSelected()) { if ($this->config['bpn_crm_id_admin'] === $attribute->getId() && true === $attribute->isSelected()) {
$isAdmin = true; $isAdmin = true;
} }
@@ -170,6 +178,7 @@ class ResponseParser
->setManager($isManager) ->setManager($isManager)
->setTeamer($isTeamer) ->setTeamer($isTeamer)
->setHouseManager($isHouseManager) ->setHouseManager($isHouseManager)
->setHotelCode($hotelCode)
; ;
return $response; return $response;
+9 -3
View File
@@ -55,7 +55,8 @@ class UserDataHandler
ProfileResponse $profileResponse, ProfileResponse $profileResponse,
array $roles, array $roles,
bool $isTeamer = false, bool $isTeamer = false,
array $crmSelections = [] array $crmSelections = [],
?string $hotelCode = null
): User { ): User {
$user = new User(); $user = new User();
$user $user
@@ -64,6 +65,7 @@ class UserDataHandler
->setEmail($profileResponse->getCommunication()->getEmail()) ->setEmail($profileResponse->getCommunication()->getEmail())
->setBusProPersonId($profileResponse->getPersonId()) ->setBusProPersonId($profileResponse->getPersonId())
->setBusProAddressId($profileResponse->getAddressId()) ->setBusProAddressId($profileResponse->getAddressId())
->setHotelCode($hotelCode)
->setRoles($roles) ->setRoles($roles)
; ;
@@ -93,9 +95,13 @@ class UserDataHandler
ProfileResponse $profileResponse, ProfileResponse $profileResponse,
array $roles, array $roles,
bool $isTeamer = false, bool $isTeamer = false,
array $crmSelections = [] array $crmSelections = [],
?string $hotelCode = null
): void { ): void {
$user->setRoles($roles); $user
->setRoles($roles)
->setHotelCode($hotelCode)
;
if (true === $isTeamer) { if (true === $isTeamer) {
$address = Address::fromApiResponse($profileResponse); $address = Address::fromApiResponse($profileResponse);
+6 -6
View File
@@ -48,8 +48,8 @@ class User implements UserInterface, TimestampableEntityInterface
#[ORM\OneToOne(inversedBy: 'user', cascade: ['persist', 'remove'])] #[ORM\OneToOne(inversedBy: 'user', cascade: ['persist', 'remove'])]
private ?Contact $contact = null; private ?Contact $contact = null;
#[ORM\Column(nullable: true)] #[ORM\Column(length: 32, nullable: true)]
private ?int $hotelBusProId = null; private ?string $hotelCode = null;
public function __construct() public function __construct()
{ {
@@ -221,14 +221,14 @@ class User implements UserInterface, TimestampableEntityInterface
return $this; return $this;
} }
public function getHotelBusProId(): ?int public function getHotelCode(): ?string
{ {
return $this->hotelBusProId; return $this->hotelCode;
} }
public function setHotelBusProId(?int $hotelBusProId): static public function setHotelCode(?string $hotelCode): static
{ {
$this->hotelBusProId = $hotelBusProId; $this->hotelCode = $hotelCode;
return $this; return $this;
} }
+2 -2
View File
@@ -137,7 +137,7 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
if (null !== $user) { if (null !== $user) {
$this $this
->userDataHandler ->userDataHandler
->updateLocalUser($user, $profileResponse, $roles, $isTeamer, $crmSelections) ->updateLocalUser($user, $profileResponse, $roles, $isTeamer, $crmSelections, $crmAttributes->getHotelCode())
; ;
return $user; return $user;
@@ -145,7 +145,7 @@ class BpnAuthenticator extends AbstractLoginFormAuthenticator implements Authent
return $this return $this
->userDataHandler ->userDataHandler
->createLocalUser($profileResponse, $roles, $isTeamer, $crmSelections) ->createLocalUser($profileResponse, $roles, $isTeamer, $crmSelections, $crmAttributes->getHotelCode())
; ;
} }
} }