Files
kupshop/bundles/KupShop/GTMBundle/ServerSideGTMEvent/ReservationCreatedEvent.php
2025-08-02 16:30:27 +02:00

96 lines
3.4 KiB
PHP

<?php
namespace KupShop\GTMBundle\ServerSideGTMEvent;
use KupShop\GTMBundle\Utils\PriceComputer;
use KupShop\ReservationBundle\Entity\Reservation;
use Symfony\Contracts\EventDispatcher\Event;
use Symfony\Contracts\Service\Attribute\Required;
class ReservationCreatedEvent extends AbstractServerSideGTMEvent
{
public PriceComputer $priceComputer;
public function getPayload(Event $event): array
{
/** @var Reservation $reservation */
$reservation = $event->reservation;
$dbcfg = \Settings::getDefault();
$items = [
$this->productLoader->loadProductObject($reservation->getProduct())
+ ['index' => 1, 'quantity' => 1],
];
$commonData = $this->getCommonData($event);
$allDeliveryTypes = \DeliveryType::getAll(true);
$deliveryType = $allDeliveryTypes[$dbcfg->reservations['delivery_type']];
$params = $commonData + [
'currency' => $this->currencyContext->getActiveId(),
'transaction_id' => 'RES'.$reservation->id,
'value' => $this->priceComputer->getPrice($reservation->getPrice()),
'vat' => $this->priceComputer->getPrice($reservation->getPrice()->getVatPrice(), null, false),
'delivery_type' => $deliveryType ? $deliveryType->getDelivery()->getName() : '',
'payment_type' => $deliveryType ? $deliveryType->getPayment()->getName() : '',
'items' => $items,
'shipping' => \DecimalConstants::zero(),
];
return [
'user_id' => $commonData['user_id'],
'client_id' => $commonData['client_id'],
'ga3_session_id' => $this->getGA3SessionId(),
'events' => [
[
'name' => 'purchase',
'params' => $params,
],
],
];
}
protected function getCommonData(Event $event): array
{
$dbcfg = \Settings::getDefault();
/** @var Reservation $Reservation */
$Reservation = $event->reservation;
$request = $this->requestStack->getCurrentRequest();
return array_merge(parent::getCommonData($event), [
'ip_override' => $request->getClientIp(),
'page_path' => createScriptURL(['s' => 'product', 'IDproduct' => $Reservation->getProduct()->id, 'TITLE' => $Reservation->getProduct()->title]),
'page_title' => $Reservation->getProduct()->title,
'page_referrer' => $request->getSession()->get('referer'),
'user_agent' => $request->server->get('HTTP_USER_AGENT'),
'shaEmail' => hash('sha256', $Reservation->email.($dbcfg->analytics['google_tag_manager']['sha_salt'] ?? false ?: '')),
]);
}
protected function getUserData(Event $event): array
{
return [
'email_address' => $event->reservation['email'] ?? '',
'phone_number' => $event->reservation['phone'] ?? '',
'address' => [
'first_name' => $event->reservation['name'] ?? '',
'last_name' => $event->reservation['surname'] ?? '',
'street' => null,
'city' => null,
'region' => null,
'postal_code' => null,
'country' => null,
],
];
}
#[Required]
public function setPriceComputer(PriceComputer $priceComputer): void
{
$this->priceComputer = $priceComputer;
}
}