pageData['body']['order']; if (!empty($order) && $order instanceof \Order && !$order->getData('conversion_sent')) { $orderVAT = $this->priceComputer->getPrice($order->total_price_array['value_vat']); $deliveryType = $order->getDeliveryType(); $delivery = $deliveryType->getDelivery()?->getClassName() ?? ''; $payment = $deliveryType->getPayment()?->getClassName() ?? ''; $affiliation = join(' | ', [$delivery, $payment, $this->languageContext->getActiveId()]); $discounts = $this->purchaseStateLoader->getDiscounts($order->getPurchaseState(true)); $this->addAdditionalFields($dataContainer, $order); $dataContainer->event = 'orderSuccess'; if (!empty($order->invoice_name)) { $dataContainer->user = $dataContainer->user ?? new \stdClass(); $dataContainer->user->name = $order->invoice_name; $dataContainer->user->surname = $order->invoice_surname; $dataContainer->user->email = $order->invoice_email; $dataContainer->user->phone = $order->invoice_phone; $dataContainer->user->address = [ 'street' => $order->invoice_street, 'city' => $order->invoice_city, 'region' => $order->invoice_state, 'postalCode' => $order->invoice_zip, 'country' => $order->invoice_country, ]; } $purchase = new \stdClass(); $purchase->id = $order->order_no; $purchase->affiliation = $affiliation; $purchase->paymentType = $payment; $purchase->payment = $this->purchaseStateLoader->getPaymentObject($order); $purchase->deliveryType = $delivery; $currency = $this->priceComputer->getOutputCurrency(); $purchase->currency = $currency->getId(); $shippingPrice = $this->getDeliveryPrice($order); $shippWithVat = $shippingPrice['value_with_vat'] ?? \DecimalConstants::zero(); $shippWithoutVat = $shippingPrice['value_without_vat'] ?? \DecimalConstants::zero(); $purchase->shipping = $this->priceComputer->getPrice($shippingPrice ?? toDecimal(0)); $purchase->shippingWithVat = $this->priceComputer->getPrice($shippWithVat); $purchase->shippingWithOutVat = $this->priceComputer->getPrice($shippWithoutVat); if (($dbcfg->analytics['google_tag_manager']['withoutDelivery'] ?? 'N') == 'Y') { // Tohle je kvuli tomu, ze podle nastaveni nevime jestli ma byt bez nebo s dph, proto nechame rozhodnout funkce uvnitr a pak to akorat proste odectu $tp = toDecimal($this->priceComputer->getPrice($order->getTotalPrice())); $shipp = toDecimal($purchase->shipping); $purchase->total = $tp->sub($shipp); $purchase->totalWithVat = $this->priceComputer->getPrice($order->getTotalPrice()->getPriceWithVat()->sub($shippWithVat)); $purchase->totalWithoutVat = $this->priceComputer->getPrice($order->getTotalPrice()->getPriceWithoutVat()->sub($shippWithoutVat)); } else { $purchase->total = $this->priceComputer->getPrice($order->getTotalPrice()); $purchase->totalWithVat = $this->priceComputer->getPrice($order->getTotalPrice()->getPriceWithVat()); $purchase->totalWithoutVat = $this->priceComputer->getPrice($order->getTotalPrice()->getPriceWithoutVat()); } $purchase->totalWithoutVatAndShipping = $this->priceComputer->getPrice($order->getTotalPrice()->getPriceWithoutVat()->sub(toDecimal($shippingPrice['value_without_vat'] ?? 0))); $purchase->vat = $orderVAT; $purchase->flags = array_filter(array_keys($order->getFlags())); if ($coupons = OrderInfo::getUsedCoupons($order)) { $coupons = join(',', $coupons); } $purchase->coupons = $coupons ?: ''; $purchase->heurekaDisagree = $order->getData('heurekaDisagree'); $purchase->discounts = $discounts; $purchase->products = []; $order->productList->fetchVariations(true); $order->productList->fetchSections(); $order->productList->fetchProducers(); $order->productList->fetchMainImages(1); foreach ($order->fetchItems() as $item) { if ($item['id_product']) { $p = $this->productLoader->getData($item['product'], $this->view); $p->quantity = $item['pieces']; if ($p->categoryCurrent == '@breadcrumbs') { $p->categoryCurrent = []; } $prices = $this->purchaseStateLoader->getPrices($item); $p->price = $prices['price']; $p->priceWithVat = $prices['priceWithVat']; $p->priceWithoutVat = $prices['priceWithoutVat']; $p->priceVat = $prices['priceVat']; $purchase->products[] = $p; } } $purchase->charges = $this->purchaseStateLoader->getCharges($order); $this->appendAfilliateCodes($purchase); $dataContainer->purchase = $purchase; if (!$dataContainer->user) { $dataContainer->user = new \stdClass(); } $dataContainer->user->email = $order->invoice_email; $userStats = $this->fetchUsersStatsOrderData($order); $dataContainer->user->lastOrderDate = $userStats['last_date'] ?? null; $dataContainer->user->firstOrderDate = $userStats['first_date'] ?? null; $dataContainer->user->countOrders = $userStats['count'] ?? null; $dataContainer->user->shaEmail = hash('sha256', $order->invoice_email.($dbcfg->analytics['google_tag_manager']['sha_salt'] ?? false ?: '')); } } /** * @required */ public function setLanguageContext(LanguageContext $languageContext): void { $this->languageContext = $languageContext; } /** * @return \Decimal */ public function getDeliveryPrice(\Order $order) { $delivery_item = $this->deliveryInfo->getDeliveryItem($order); return $delivery_item ? $order->fetchItems()[$delivery_item]['total_price'] : null; } /** * @required */ public function setPurchaseStateLoader(PurchaseState $purchaseStateLoader): void { $this->purchaseStateLoader = $purchaseStateLoader; } protected function appendAfilliateCodes(\stdClass &$purchase) { $request = $this->getRequest(); if (!$request) { return; } $cjevent = $request->cookies->get('cjevent') ?: $request->getSession()->get('cjevent'); if ($cjevent) { $purchase->cjevent = $cjevent; } $AP_tracker_TID = $request->cookies->get('AP_tracker_TID') ?: $request->getSession()->get('AP_tracker_TID'); if ($AP_tracker_TID) { $purchase->AP_tracker_TID = $AP_tracker_TID; } } /** * @required */ public function setCurrencyContext(CurrencyContext $currencyContext): void { $this->currencyContext = $currencyContext; } /** * @required */ public function setDeliveryInfo(DeliveryInfo $deliveryInfo): void { $this->deliveryInfo = $deliveryInfo; } /** * @required */ public function setOrderInfo(OrderInfo $orderInfo): void { $this->orderInfo = $orderInfo; } }