@@ -129,7 +129,9 @@ protected function _getOrdersTrackingCode()
129
129
{
130
130
/** @var Mage_GoogleAnalytics_Helper_Data $helper */
131
131
$ helper = $ this ->helper ('googleanalytics ' );
132
- if ($ helper ->isUseUniversalAnalytics ()) {
132
+ if ($ helper ->isUseAnalytics4 ()) {
133
+ return $ this ->_getOrdersTrackingCodeAnalytics4 ();
134
+ } elseif ($ helper ->isUseUniversalAnalytics ()) {
133
135
return $ this ->_getOrdersTrackingCodeUniversal ();
134
136
}
135
137
@@ -190,6 +192,46 @@ protected function _getOrdersTrackingCodeUniversal()
190
192
return implode ("\n" , $ result );
191
193
}
192
194
195
+ /**
196
+ * @return string
197
+ * @throws Mage_Core_Model_Store_Exception
198
+ */
199
+ protected function _getOrdersTrackingCodeAnalytics4 ()
200
+ {
201
+ $ orderIds = $ this ->getOrderIds ();
202
+ if (empty ($ orderIds ) || !is_array ($ orderIds )) {
203
+ return '' ;
204
+ }
205
+ $ collection = Mage::getResourceModel ('sales/order_collection ' )
206
+ ->addFieldToFilter ('entity_id ' , ['in ' => $ orderIds ]);
207
+ $ result = [];
208
+ /** @var Mage_Sales_Model_Order $order */
209
+ foreach ($ collection as $ order ) {
210
+ $ orderData = [
211
+ 'currency ' => $ order ->getBaseCurrencyCode (),
212
+ 'transaction_id ' => $ order ->getIncrementId (),
213
+ 'value ' => number_format ($ order ->getBaseGrandTotal (), 2 ),
214
+ 'coupon ' => strtoupper ($ order ->getCouponCode ()),
215
+ 'shipping ' => number_format ($ order ->getBaseShippingAmount (), 2 ),
216
+ 'tax ' => number_format ($ order ->getBaseTaxAmount (), 2 ),
217
+ 'items ' => []
218
+ ];
219
+
220
+ /** @var Mage_Sales_Model_Order_Item $item */
221
+ foreach ($ order ->getAllVisibleItems () as $ item ) {
222
+ $ orderData ['items ' ][] = [
223
+ 'item_id ' => $ item ->getSku (),
224
+ 'item_name ' => $ item ->getName (),
225
+ 'quantity ' => $ item ->getQtyOrdered (),
226
+ 'price ' => $ item ->getBasePrice (),
227
+ 'discount ' => $ item ->getBaseDiscountAmount ()
228
+ ];
229
+ }
230
+ $ result [] = "gtag('event', 'purchase', " . json_encode ($ orderData , JSON_THROW_ON_ERROR ) . "); " ;
231
+ }
232
+ return implode ("\n" , $ result );
233
+ }
234
+
193
235
/**
194
236
* Render information about specified orders and their items
195
237
*
0 commit comments