HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/TDijk1/erp-apps.eu/wwwroot/CMSWebParts/Pux/Ecommerce/GoogleRemarketing.ascx.cs
using CMS.CMSHelper;
using CMS.Ecommerce;
using CMS.GlobalHelper;
using CMS.Helpers;
using CMS.PortalControls;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class CMSWebParts_Pux_Ecommerce_GoogleRemarketing : CMSAbstractWebPart
{
    #region "Public properties"

    public string CodeType
    {
        get
        {
            return ValidationHelper.GetString(GetValue("CodeType"), string.Empty);
        }

        set
        {
            SetValue("CodeType", value);
        }
    }

    public bool UseDataLayer
    {
        get
        {
            return ValidationHelper.GetBoolean(GetValue("UseDataLayer"), false);
        }
        set
        {
            SetValue("UseDataLayer", value);
        }
    }

    #endregion

    #region "Private properties"

    public int OrderId
    {
        get
        {
            int urlId = QueryHelper.GetInteger("testorder", 0);
            if (urlId > 0)
                return urlId;

            string orderHash = QueryHelper.GetString("o", string.Empty);
            if (!string.IsNullOrEmpty(orderHash))
            {
                return ValidationHelper.GetInteger(WindowHelper.GetItem(orderHash), 0);
            }

            return ValidationHelper.GetInteger(SessionHelper.GetValue("orderid"), 0);
        }
    }

    private OrderInfo orderInfo;
    public OrderInfo OrderInfo
    {
        get
        {
            if (orderInfo == null) orderInfo = OrderInfoProvider.GetOrderInfo(OrderId);
            return orderInfo;
        }
    }

    private List<OrderItemInfo> orderedItems;
    public List<OrderItemInfo> OrderedItems
    {
        get
        {
            if (orderedItems == null)
            {
                var items = new List<OrderItemInfo>();
                foreach (var item in OrderItemInfoProvider.GetOrderItems(OrderId))
                {
                    items.Add(item);
                }

                orderedItems = items.OrderBy(p => p.OrderItemID).ToList();
            }

            return orderedItems;
        }
    }

    #endregion

    protected void Page_Load(object sender, EventArgs e)
    {
        string script = string.Empty;

        List<string> dataLayer = new List<string>();

        switch (CodeType.ToLowerInvariant())
        {
            case "product":
                if (CurrentDocument.HasSKU)
                {
                    var skuInfo = SKUInfoProvider.GetSKUInfo(CurrentDocument.NodeSKUID);
                    if (skuInfo != null)
                    {
                        var price = SKUInfoProvider.GetSKUPrice(skuInfo, ECommerceContext.CurrentShoppingCart, true, true, false);
                        script = string.Format("ecomm_prodid: '{0}', ecomm_pagetype: 'product', ecomm_pvalue: {1}", GetProductId(CurrentDocument.NodeSKUID), FormatNumber(price));
                        dataLayer.Add(script);
                        break;
                    }

                }
                break;

            case "purchase":
                if (OrderId > 0 && OrderInfo != null && OrderedItems != null )
                {
                    var productVariants = string.Join(", ", OrderedItems.Select(p => string.Format("'{0}'", GetProductId(p.OrderItemSKUID))).ToArray());

                    script = string.Format("ecomm_prodid: [{0}], ecomm_pagetype: 'purchase', ecomm_totalvalue: '{1}'", productVariants, FormatNumber(OrderInfo.OrderTotalPrice - OrderInfo.OrderTotalShipping));
                    dataLayer.Add(script);
                }
                break;

            case "cart":
                if (ECommerceContext.CurrentShoppingCart.CartItems != null && ECommerceContext.CurrentShoppingCart.CartItems.Count > 0)
                {
                    List<string> ids = new List<string>();
                    foreach (var cartItem in ECommerceContext.CurrentShoppingCart.CartItems)
                    {
                        ids.Add(string.Format("'{0}'", GetProductId(cartItem.SKUID)));
                    }

                    script = string.Format("ecomm_prodid: [{0}], ecomm_pagetype: 'cart', ecomm_totalvalue: '{1}'", ids.Join(", "), FormatNumber(ECommerceContext.CurrentShoppingCart.TotalItemsPrice));
                    dataLayer.Add(script);
                }

                break;

            case "checkout":
                if (ECommerceContext.CurrentShoppingCart.CartItems != null && ECommerceContext.CurrentShoppingCart.CartItems.Count > 0)
                {
                    List<string> ids = new List<string>();
                    foreach (var cartItem in ECommerceContext.CurrentShoppingCart.CartItems)
                    {
                        ids.Add(string.Format("'{0}'", GetProductId(cartItem.SKUID)));
                    }

                    script = string.Format("ecomm_prodid: [{0}], ecomm_pagetype: 'checkout', ecomm_totalvalue: '{1}'", ids.Join(", "), FormatNumber(ECommerceContext.CurrentShoppingCart.TotalItemsPrice));
                    dataLayer.Add(script);
                }

                break;

        }

        if (string.IsNullOrEmpty(script))
            return;

        if (!UseDataLayer)
        {
            ltlScript.Text = string.Format("<script type=\"text/javascript\">var google_tag_params = {{ {0} }};</script>", script);
        }
        else
        {
            ltlScript.Text = string.Format("<script type=\"text/javascript\">{0}</script>", dataLayer.Select(p => string.Format("dataLayer.push({{'event': 'fireRemarketingTag', 'google_tag_params' : {{ {0} }} }});", p)).ToArray().Join(""));
        }
        //ltlScript.Text = string.Format("<script type=\"text/javascript\">{0}</script>", dataLayer.Select(p => string.Format("dataLayer.push({{'event': 'fireRemarketingTag', {0} }});", p)).ToArray().Join(""));
    }

    protected string FormatNumber(double price)
    {
        return price.ToString().Replace(",", ".");
    }

    protected string GetProductId(int skuid)
    {
        return string.Format("KL{0}", skuid);
    }
}