96 lines
3.4 KiB
PHP
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;
|
|
}
|
|
}
|