private static object MapToNewsTile(JObject tile, JsonSerializer serializer)
        {
            var contentId = tile.Value <int>("contentId");

            var item = new UmbracoHelper(UmbracoContext.Current).TypedContent(contentId);

            if (item != null)
            {
                var newsTile = tile.ToObject <GridControlNewsTile>(serializer);
                newsTile.Title   = item.GetPropertyValue <string>(NewsTileConfig.Title);
                newsTile.Summary = item.GetPropertyValue <string>(NewsTileConfig.Summary);
                newsTile.Date    = item.GetPropertyValue <DateTime>(NewsTileConfig.Date);
                newsTile.Eyebrow = item.GetPropertyValue <string>(NewsTileConfig.Eyebrow);
                newsTile.Link    = item.Url;
                newsTile.Image   = item.GetPropertyValue <IPublishedContent>(NewsTileConfig.Image)?.Url;

                return(newsTile);
            }

            return(null);
        }
        private static object MapToNewsTile(JObject tile)
        {
            var contentId = tile.Value <int>("contentId");

            var item = new UmbracoHelper(UmbracoContext.Current).TypedContent(contentId);

            if (item != null)
            {
                var newsTile = new GridControlNewsTile
                {
                    Title       = item.GetPropertyValue <string>(NewsTileConfig.Title),
                    Description = item.GetPropertyValue <string>(NewsTileConfig.Description),
                    Date        = item.GetPropertyValue <DateTime>(NewsTileConfig.Date),
                    Link        = item.Url,
                    Image       = item.GetPropertyValue <IPublishedContent>(NewsTileConfig.Image)?.Url
                };

                return(newsTile);
            }

            return(null);
        }
        public ActionResult AddProductToBasket(BasketEntry entry)
        {
            try
            {
                entry.Price            = new UmbracoHelper(UmbracoContext.Current).TypedContent(entry.Id).GetPropertyValue <double>("price");
                entry.DiscountPercents = new UmbracoHelper(UmbracoContext.Current).TypedContent(entry.Id).GetPropertyValue <int>("discount");
                var product = new UmbracoHelper(UmbracoContext.Current).TypedContent(entry.Id);

                int itemsRemained = product.GetPropertyValue <int>("inStock");

                if (entry.Items > itemsRemained)
                {
                    throw new Exception("Not enough items in stock");
                }

                List <BasketEntry> entries = Session["basket"] as List <BasketEntry>;
                if (entries == null)
                {
                    Session["basket"] = new List <BasketEntry>()
                    {
                        entry
                    };
                }
                else
                {
                    bool found = false;

                    var comp = entries.Where(x => x.Name == entry.Name);

                    foreach (var pr in comp)
                    {
                        bool suitable = true;

                        if (pr.Properties.Count() != entry.Properties.Count())
                        {
                            suitable = false;
                        }

                        if (suitable)
                        {
                            var entryProp = entry.Properties.OrderBy(x => x.Name).ToList();
                            var currProp  = pr.Properties.OrderBy(x => x.Name).ToList();

                            for (int i = 0; i < entryProp.Count(); ++i)
                            {
                                if (entryProp[i].Name != currProp[i].Name || entryProp[i].Values[0] != currProp[i].Values[0])
                                {
                                    suitable = false;
                                    break;
                                }
                            }
                        }

                        if (suitable)
                        {
                            found     = true;
                            pr.Items += entry.Items;
                            break;
                        }
                    }


                    if (!found)
                    {
                        entries.Add(entry);
                    }

                    Session["basket"] = entries;
                }

                var      contentService = Services.ContentService;
                IContent content        = contentService.GetById(entry.Id);
                content.SetValue("inStock", itemsRemained - entry.Items);

                System.Threading.Tasks.Task.Run(() => Services.ContentService.SaveAndPublishWithStatus(content));

                return(new HttpStatusCodeResult(HttpStatusCode.OK));
            }
            catch (Exception e)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, e.Message));
            }
        }