Exemple #1
0
        public ActionResult AddItem(AddItemViewModel addedItem)
        {
            var capsuleDB = Database.Capsules.SingleOrDefault(p => p.CapsuleId == addedItem.CapsuleId && p.UserId == Username);

            if (capsuleDB == null)
            {
                return(new HttpNotFoundResult());
            }

            if (ModelState.IsValid)
            {
                Database.CapsulesItems.Add(new CapsulesItems {
                    CapsuleId = addedItem.CapsuleId, ItemId = addedItem.ItemId, Quantity = addedItem.Quantity
                });

                Database.SaveChanges();

                return(RedirectToAction("List", new { id = addedItem.CapsuleId }));
            }
            else
            {
                LoadCapsule(capsuleDB, addedItem);

                var itemsCargados = capsuleDB.CapsulesItems.Select(p => p.ItemId).ToList();
                var isKey         = ItemsXml.Where(p => p.IsKey).Select(s => s.ItemId);

                addedItem.AddeableItems = ItemsXml.Where(q => !ItemsCapsule.Contains(q) && !itemsCargados.Contains(q.ItemId) && (!addedItem.Properties.IsKeyLocker || isKey.Contains(q.ItemId)))
                                          .Select(q => new Models.ItemViewModel {
                    CurrentItem = q,
                }).ToList();

                return(View(addedItem));
            }
        }
        public ActionResult SaveNewQty(IList <ItemQuantity> items)
        {
            if (items == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "There are no items."));
            }

            if (items.Any(p => p.Quantity > 2000 || p.Quantity < 0))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "The item quantity must be a value between 0 and 2000"));
            }

            var itemsCapsule = ItemsXml.Where(p => p is ItemCapsule).Cast <ItemCapsule>();

            foreach (ItemQuantity item in items)
            {
                if (itemsCapsule.Any(p => p.ItemId == item.ItemId && !string.IsNullOrEmpty(p.UniqueId)))
                {
                    item.Quantity = 1;
                }

                string           itemId  = item.ItemId;
                InventoriesItems invItem = Database.InventoriesItems.SingleOrDefault(p => p.Inventories.UserId == Username && p.ItemId == itemId);

                if (invItem != null)
                {
                    if (item.Quantity == 0)
                    {
                        Database.InventoriesItems.Remove(invItem);
                    }
                    else
                    {
                        invItem.Quantity = item.Quantity;
                    }
                }
                else
                {
                    if (item.Quantity > 0)
                    {
                        Inventories inv = Database.Inventories.SingleOrDefault(p => p.UserId == Username);
                        if (inv == null)
                        {
                            inv = new Inventories {
                                UserId = Username
                            };
                            Database.Inventories.Add(inv);
                        }

                        Database.InventoriesItems.Add(new InventoriesItems {
                            Inventories = inv, ItemId = itemId, Quantity = item.Quantity
                        });
                    }
                }
            }

            Database.SaveChanges();

            return(Json("Successfully saved!"));
        }
        private ActionResult GetItems(string groupId, bool ignoreZeroQuantity)
        {
            bool allGroups = groupId == GroupIdAll;

            if (!allGroups && !GroupsXml.Any(p => p.GroupId == groupId))
            {
                return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "GroupId does not exists"));
            }

            DateTime inicio = DateTime.Now;

            var enCapsules = Database.CapsulesItems
                             .Where(s => s.Capsules.UserId == Username)
                             .GroupBy(t => t.ItemId)
                             .Select(u => new { ItemId = u.Key, CapsulesQuantity = u.Sum(v => v.Quantity) }).ToList();

            var inventario = Database.InventoriesItems
                             .Where(s => s.Inventories.UserId == Username)
                             .Select(u => new { ItemId = u.ItemId, Quantity = u.Quantity }).ToList();

            double elapsed = (DateTime.Now - inicio).TotalMilliseconds;

            var itemsGroups = ItemsXml
                              .Where(z => (allGroups || z.GroupId == groupId) && (ignoreZeroQuantity || (inventario.Any(y => y.ItemId == z.ItemId) || enCapsules.Any(y => y.ItemId == z.ItemId))))
                              .Select(y => new {
                GroupId          = y.GroupId,
                Item             = ItemBase.Create(y),
                Quantity         = inventario.SingleOrDefault(s => s.ItemId == y.ItemId) == null ? 0 : inventario.Single(s => s.ItemId == y.ItemId).Quantity,
                CapsulesQuantity = enCapsules.SingleOrDefault(s => s.ItemId == y.ItemId) == null ? 0 : enCapsules.Single(s => s.ItemId == y.ItemId).CapsulesQuantity
            })
                              .ToList();

            if (itemsGroups.Count == 0)
            {
                return(Json(new { Result = false }, JsonRequestBehavior.DenyGet));
            }

            var groups = itemsGroups
                         .GroupBy(d => d.GroupId)
                         .Select(p => new {
                GroupId = p.Key,
                Types   = p.GroupBy(e => e.Item.TypeId)
                          .Select(q => new {
                    TypeId           = q.Key,
                    Quantity         = q.Sum(f => f.Quantity),
                    CapsulesQuantity = q.Sum(f => f.CapsulesQuantity),
                    Items            = q.Select(r => new {
                        CurrentItem      = r.Item,
                        Quantity         = r.Quantity,
                        CapsulesQuantity = r.CapsulesQuantity
                    })
                })
            });

            return(Json(new { Result = true, Groups = groups }, JsonRequestBehavior.DenyGet));
        }
Exemple #4
0
        private LoadViewModel RecuperarItemsLoad(int id)
        {
            var capsuleDB = Database.Capsules.SingleOrDefault(p => p.CapsuleId == id && p.UserId == Username);

            if (capsuleDB == null)
            {
                return(null);
            }

            LoadViewModel model = new LoadViewModel();

            LoadCapsule(capsuleDB, model);

            model.Items = capsuleDB.CapsulesItems.Select(p => new ItemLoadViewModel {
                CurrentItem     = ItemBase.Create(ItemsXml, p.ItemId),
                CapsuleQuantity = p.Quantity,
                ItemQuantity    = 0,
                LoadQuantity    = 0
            }).OrderBy(x => x.CurrentItem.Order).ToList();

            var isCapsule = ItemsCapsule.Select(s => s.ItemId);
            var isKey     = ItemsXml.Where(p => p.IsKey).Select(s => s.ItemId);

            var inventoryDB = Database.InventoriesItems.Where(p => p.Inventories.UserId == Username && !isCapsule.Contains(p.ItemId) && (!model.Properties.IsKeyLocker || isKey.Contains(p.ItemId))).ToList();

            var inventories = inventoryDB.Select(q => new ItemLoadViewModel {
                CurrentItem     = ItemBase.Create(ItemsXml, q.ItemId),
                CapsuleQuantity = 0,
                ItemQuantity    = q.Quantity,
                LoadQuantity    = 0
            }).OrderBy(p => p.CurrentItem.Order).ToList();

            foreach (var item in model.Items)
            {
                ItemLoadViewModel inv = inventories.SingleOrDefault(p => p.CurrentItem == item.CurrentItem);
                if (inv != null)
                {
                    item.ItemQuantity = inv.ItemQuantity;
                    inventories.Remove(inv);
                }
            }

            model.Items.AddRange(inventories);

            return(model);
        }
Exemple #5
0
        public JsonResult ItemDetail(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(Json("Item invalid", JsonRequestBehavior.AllowGet));
            }
            var detalle = ItemsXml.SingleOrDefault(p => p.ItemID == id);

            if (detalle == null)
            {
                return(Json("Item invalid", JsonRequestBehavior.AllowGet));
            }

            var typeDesc = Resources.TypesDescriptions.ResourceManager.GetString(detalle.TypeID);

            var info = new { ItemID = id, Level = detalle.Level, Name = detalle.Nombre(), Rarity = detalle.Rarity, RarityName = detalle.RarityName(), TypeDescription = typeDesc };

            return(Json(info, JsonRequestBehavior.AllowGet));
        }
Exemple #6
0
        public ActionResult DateCharts(DateGrouping?grouping, string itemId, bool?accumulative)
        {
            var reproduccionesDB = Database.SpawnsCapsulesItems
                                   .Where(p => p.SpawnsCapsules.Spawns.UserId == Username)
                                   .Select(s => s.ItemId)
                                   .Distinct()
                                   .ToList();

            ChartsViewModel model = new ChartsViewModel();

            model.Grouping      = grouping ?? DateGrouping.Week;
            model.Accumulative  = accumulative.GetValueOrDefault();
            model.ItemId        = itemId;
            model.ViewableItems = ItemsXml.Where(p => reproduccionesDB.Contains(p.ItemId)).Select(q => new { q.ItemId, Description = q.Description() }).ToDictionary(r => r.ItemId, s => s.Description);
            model.ChartTitle    = new ChartTitleViewModel {
                Grouping     = model.Grouping,
                Item         = ItemViewModelLight.Create(ItemsXml, model.ItemId),
                Accumulative = model.Accumulative
            };
            return(View(model));
        }
Exemple #7
0
        public ActionResult AddItem(int id)
        {
            var capsuleDB = Database.Capsules.SingleOrDefault(p => p.CapsuleId == id && p.UserId == Username);

            if (capsuleDB == null)
            {
                return(new HttpNotFoundResult());
            }

            AddItemViewModel model = new AddItemViewModel();

            LoadCapsule(capsuleDB, model);

            var itemsCargados = capsuleDB.CapsulesItems.Select(p => p.ItemId).ToList();
            var isKey         = ItemsXml.Where(p => p.IsKey).Select(s => s.ItemId);

            model.AddeableItems = ItemsXml.Where(q => !ItemsCapsule.Contains(q) && !itemsCargados.Contains(q.ItemId) && (!model.Properties.IsKeyLocker || isKey.Contains(q.ItemId)))
                                  .Select(q => new Models.ItemViewModel {
                CurrentItem = q,
            }).ToList();

            return(View(model));
        }
Exemple #8
0
        public FileResult PercentageRarityChart(DateGrouping grouping, bool percentage)
        {
            DateTime inicio = DateTime.Now;

            var type = SeriesChartType.StackedColumn;

            if (percentage)
            {
                type = SeriesChartType.StackedColumn100;
            }

            string dateFormat = Resources.General.ResourceManager.GetString(string.Format("InterestsChart_DateFormat_{0}", grouping.ToString()));

            var rarityDef = new[] {
                new { Rarity = "R1", Name = "Very Common", Color = "#b5b2b5" },
                new { Rarity = "R2", Name = "Common", Color = "#84f7b5" },
                new { Rarity = "R3", Name = "Rare", Color = "#ad8eff" },
                new { Rarity = "R4", Name = "Very Rare", Color = "#ff8ef7" }
            };

            var dbData = Database.SpawnsCapsulesItems.Where(p => p.SpawnsCapsules.Spawns.UserId == Username)
                         .GroupBy(r => new { Date = DbFunctions.TruncateTime(r.SpawnsCapsules.Spawns.Date).Value, ItemId = r.ItemId })
                         .Select(s => new {
                Date     = s.Key.Date,
                ItemId   = s.Key.ItemId,
                Quantity = s.Sum(m => m.Quantity),
            }).ToList()
                         .GroupBy(r => new { Rarity = ItemsXml.Single(j => j.ItemId == r.ItemId).Rarity, Date = r.Date.GetResolvedDate(grouping) })
                         .Select(s => new {
                Rarity   = s.Key.Rarity,
                Date     = s.Key.Date,
                Quantity = s.Sum(w => w.Quantity)
            });

            var dates     = dbData.Select(p => p.Date.GetResolvedDate(grouping)).Distinct().ToArray();
            var rarityies = dbData.Select(p => p.Rarity).Distinct().ToArray();

            var points = from date in dates
                         from rarity in rarityies
                         select new {
                Rarity = rarity,
                Date   = date
            };

            var matrix = from point in points
                         join data in dbData on new { point.Rarity, point.Date } equals new { data.Rarity, data.Date } into joineddbData
            from subData in joineddbData.DefaultIfEmpty()
            select new {
                Rarity = point.Rarity,
                Date   = point.Date,
                Qty    = subData == null ? 0 : subData.Quantity
            };

            var itemsQtyDate = matrix
                               .OrderByDescending(a => a.Rarity)
                               .ThenBy(d => d.Date)
                               .GroupBy(b => b.Rarity)
                               .Select(c => new {
                Rarity = c.Key,
                Name   = rarityDef.Single(p => p.Rarity == c.Key).Name,
                Color  = System.Drawing.ColorTranslator.FromHtml(rarityDef.Single(p => p.Rarity == c.Key).Color),
                Dates  = c.Select(o => o.Date.ToString(dateFormat)).ToArray(),
                Values = c.Select(o => o.Qty).ToArray()
            }
                                       );


            PrivateFontCollection pfc = new PrivateFontCollection();

            pfc.AddFontFile(Server.MapPath("~/Content/Coda-Regular.ttf"));

            using (Chart chart = new Chart()) {
                chart.Font.Name           = pfc.Families[0].Name;
                chart.Font.Size           = FontUnit.Point(8);
                chart.Width               = 1000;
                chart.Height              = 400;
                chart.BackColor           = Color.FromArgb(255, 0x27, 0x2B, 0x30);
                chart.BorderlineDashStyle = ChartDashStyle.Solid;
                chart.BorderlineColor     = Color.Gray;
                chart.BorderlineWidth     = 1;
                Legend legend = new Legend();
                legend.BackColor = Color.Transparent;
                legend.ForeColor = Color.White;
                chart.Legends.Add(legend);
                chart.Palette             = ChartColorPalette.None;
                chart.PaletteCustomColors = itemsQtyDate.Select(p => p.Color).ToArray();

                using (Font fuente = new Font(pfc.Families[0], 8, GraphicsUnit.Point)) {
                    ChartArea area = new ChartArea();
                    area.BackColor       = Color.Transparent;
                    area.ShadowColor     = Color.Transparent;
                    area.BorderColor     = Color.FromArgb(255, 0x88, 0x88, 0x88);
                    area.BorderDashStyle = ChartDashStyle.Solid;

                    var ejeX = area.AxisX;
                    ejeX.LabelStyle.Font         = fuente;
                    ejeX.LabelStyle.ForeColor    = Color.White;
                    ejeX.LineColor               = Color.FromArgb(255, 0x99, 0x99, 0x99);
                    ejeX.IsLabelAutoFit          = false;
                    ejeX.IsMarginVisible         = true;
                    ejeX.MajorGrid.LineColor     = Color.FromArgb(255, 0x99, 0x99, 0x99);
                    ejeX.MajorTickMark.LineColor = Color.FromArgb(255, 0xAA, 0xAA, 0xAA);

                    var interval = Math.Max(dates.Count() / 25, 1);
                    ejeX.Interval         = interval;
                    ejeX.LabelStyle.Angle = -90;

                    var ejeY = area.AxisY;
                    ejeY.LabelStyle.Font         = fuente;
                    ejeY.LabelStyle.ForeColor    = Color.White;
                    ejeY.LineColor               = Color.FromArgb(255, 0x99, 0x99, 0x99);
                    ejeY.IsLabelAutoFit          = false;
                    ejeY.IsMarginVisible         = true;
                    ejeY.MajorGrid.LineColor     = Color.FromArgb(255, 0x99, 0x99, 0x99);
                    ejeY.MajorTickMark.LineColor = Color.FromArgb(255, 0xAA, 0xAA, 0xAA);

                    chart.ChartAreas.Add(area);

                    foreach (var item in itemsQtyDate)
                    {
                        Series itemsSerie = new Series(item.Name);
                        itemsSerie.Font      = fuente;
                        itemsSerie.ChartType = type;
                        itemsSerie.Points.DataBindXY(item.Dates, item.Values);
                        itemsSerie.IsValueShownAsLabel = grouping != DateGrouping.Day;
                        chart.Series.Add(itemsSerie);
                    }

                    MemoryStream ms = new MemoryStream();
                    chart.SaveImage(ms, ChartImageFormat.Png);
                    return(File(ms.ToArray(), "image/png"));
                }
            }
        }