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);
}
}