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