fix: adopt response format of bpn personal data endpoint
This commit is contained in:
@@ -16,6 +16,7 @@ use App\BusProNet\Model\CrmAttributes;
|
|||||||
use App\BusProNet\Model\ExtendedServiceAvailabilityResponse;
|
use App\BusProNet\Model\ExtendedServiceAvailabilityResponse;
|
||||||
use App\BusProNet\Model\Notification;
|
use App\BusProNet\Model\Notification;
|
||||||
use App\BusProNet\Model\PersonalData;
|
use App\BusProNet\Model\PersonalData;
|
||||||
|
use App\BusProNet\Model\PersonalDataUpdateResponse;
|
||||||
use App\BusProNet\Model\PromoVoucher;
|
use App\BusProNet\Model\PromoVoucher;
|
||||||
use App\BusProNet\Model\PurchaseVoucher;
|
use App\BusProNet\Model\PurchaseVoucher;
|
||||||
use App\BusProNet\Model\RegistrationResponse;
|
use App\BusProNet\Model\RegistrationResponse;
|
||||||
@@ -127,7 +128,7 @@ class ApiClient
|
|||||||
string $password,
|
string $password,
|
||||||
PersonalData $personalData,
|
PersonalData $personalData,
|
||||||
bool $debug = false,
|
bool $debug = false,
|
||||||
): Notification|PersonalData {
|
): Notification|PersonalDataUpdateResponse {
|
||||||
$data = [
|
$data = [
|
||||||
'user' => $this->config['bpn_username'],
|
'user' => $this->config['bpn_username'],
|
||||||
'key' => $this->createKey($this->config['bpn_username'], $this->config['bpn_password'], static::TYPE_CUSTOMER_DATA),
|
'key' => $this->createKey($this->config['bpn_username'], $this->config['bpn_password'], static::TYPE_CUSTOMER_DATA),
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\BusProNet\Model;
|
||||||
|
|
||||||
|
class PersonalDataUpdateResponse
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
public readonly ?int $addressId,
|
||||||
|
public readonly ?int $personId,
|
||||||
|
public readonly bool $changed,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,9 +38,10 @@ class ApiResponseParser extends AbstractParser
|
|||||||
|
|
||||||
switch ($subType) {
|
switch ($subType) {
|
||||||
case 'Adressdaten':
|
case 'Adressdaten':
|
||||||
case 'Adressdaten_Ändern':
|
|
||||||
case 'Newsletter':
|
case 'Newsletter':
|
||||||
return (new PersonalDataParser())->parse($resultNode);
|
return (new PersonalDataParser())->parse($resultNode);
|
||||||
|
case 'Adressdaten_Ändern':
|
||||||
|
return (new PersonalDataUpdateParser())->parse($resultNode);
|
||||||
case 'Adresse_Neu':
|
case 'Adresse_Neu':
|
||||||
return (new ContactFormResponseParser())->parse($resultNode);
|
return (new ContactFormResponseParser())->parse($resultNode);
|
||||||
case 'SelektionCRM':
|
case 'SelektionCRM':
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\BusProNet\XmlParser;
|
||||||
|
|
||||||
|
use App\BusProNet\Model\PersonalDataUpdateResponse;
|
||||||
|
use Symfony\Component\DomCrawler\Crawler;
|
||||||
|
|
||||||
|
class PersonalDataUpdateParser extends AbstractParser
|
||||||
|
{
|
||||||
|
public function parse(Crawler $node): PersonalDataUpdateResponse
|
||||||
|
{
|
||||||
|
return new PersonalDataUpdateResponse(
|
||||||
|
addressId: $this->getIntOrNullValue($node->filterXPath('//idadresse')),
|
||||||
|
personId: $this->getIntOrNullValue($node->filterXPath('//idperson')),
|
||||||
|
changed: $this->getBoolValue($node->filterXPath('//änderung')),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ use App\BusProNet\ApiClient;
|
|||||||
use App\BusProNet\Exception\ApiClientException;
|
use App\BusProNet\Exception\ApiClientException;
|
||||||
use App\BusProNet\Model\Notification;
|
use App\BusProNet\Model\Notification;
|
||||||
use App\BusProNet\Model\PersonalData;
|
use App\BusProNet\Model\PersonalData;
|
||||||
|
use App\BusProNet\Model\PersonalDataUpdateResponse;
|
||||||
use App\Entity\User;
|
use App\Entity\User;
|
||||||
use App\Exception\NewsletterProviderException;
|
use App\Exception\NewsletterProviderException;
|
||||||
use App\Form\PersonalDataType;
|
use App\Form\PersonalDataType;
|
||||||
@@ -104,6 +105,16 @@ class PersonalDataController extends AbstractController
|
|||||||
return $this->redirectToRoute('app_personal_data');
|
return $this->redirectToRoute('app_personal_data');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($updateResult instanceof PersonalDataUpdateResponse && false === $updateResult->changed) {
|
||||||
|
$this->logger->error('BPN did not apply personal data update', [
|
||||||
|
'email' => $user->getEmail(),
|
||||||
|
'addressId' => $updateResult->addressId,
|
||||||
|
]);
|
||||||
|
$this->addFlash('error', 'Deine persönlichen Daten konnten nicht aktualisiert werden. Bitte versuche es erneut.');
|
||||||
|
|
||||||
|
return $this->redirectToRoute('app_personal_data');
|
||||||
|
}
|
||||||
|
|
||||||
// Invalidate cached bookings to ensure edit mode shows updated applicant data
|
// Invalidate cached bookings to ensure edit mode shows updated applicant data
|
||||||
$this->dataLoader->invalidateUserBookingCaches($user);
|
$this->dataLoader->invalidateUserBookingCaches($user);
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
} %}
|
} %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<!-- address id: {{ personalData.addressId}} person id: {{ personalData.personId}} -->
|
||||||
<div class="p-4 lg:p-8">
|
<div class="p-4 lg:p-8">
|
||||||
<div class="divide-y divide-primary-bg/40">
|
<div class="divide-y divide-primary-bg/40">
|
||||||
<div class="grid md:grid-cols-2 gap-x-8 gap-y-4 pb-8">
|
<div class="grid md:grid-cols-2 gap-x-8 gap-y-4 pb-8">
|
||||||
|
|||||||
Reference in New Issue
Block a user