public ActionResult Difference() { using (InventarioEntities db = new InventarioEntities()) { string user = User.Identity.GetUserName(); if (user != "*****@*****.**" && user != "*****@*****.**") { return(new HttpNotFoundResult()); } DifferenceViewModel model = new DifferenceViewModel(); string usuarioA = user; string usuarioB = (user == "*****@*****.**" ? "*****@*****.**" : "*****@*****.**"); model.UsuarioA = usuarioA; model.UsuarioB = usuarioB; var inventarioA = db.Inventarios .Where(s => s.IdUsuario == usuarioA) .Select(u => new ItemBasico { ItemID = u.ItemID, Cantidad = u.Cantidad }).ToList(); var inventarioB = db.Inventarios .Where(s => s.IdUsuario == usuarioB) .Select(u => new ItemBasico { ItemID = u.ItemID, Cantidad = u.Cantidad }).ToList(); var capsulasA = db.CapsulasItems .Where(s => s.Capsulas.IdUsuario == usuarioA) .GroupBy(t => t.ItemID) .Select(u => new ItemBasico { ItemID = u.Key, Cantidad = u.Sum(v => v.Cantidad) }); var capsulasB = db.CapsulasItems .Where(s => s.Capsulas.IdUsuario == usuarioB) .GroupBy(t => t.ItemID) .Select(u => new ItemBasico { ItemID = u.Key, Cantidad = u.Sum(v => v.Cantidad) }); foreach (var itemC in capsulasA) { var itemI = inventarioA.SingleOrDefault(f => f.ItemID == itemC.ItemID); if (itemI == null) { inventarioA.Add(new ItemBasico { ItemID = itemC.ItemID, Cantidad = itemC.Cantidad }); } else { itemI.Cantidad += itemC.Cantidad; } } foreach (var itemC in capsulasB) { var itemI = inventarioB.SingleOrDefault(f => f.ItemID == itemC.ItemID); if (itemI == null) { inventarioB.Add(new ItemBasico { ItemID = itemC.ItemID, Cantidad = itemC.Cantidad }); } else { itemI.Cantidad += itemC.Cantidad; } } model.Grupos = GroupsXml .Select(p => new GrupoDifferenceViewModel { GroupID = p.GroupID, Tipos = p.Types.Select(q => new TipoDifferenceViewModel { TypeID = q.TypeID, Items = q.Items.Select(r => new ItemDifferenceViewModel { CurrentItem = r, CantidadUsuarioA = inventarioA.SingleOrDefault(s => s.ItemID == r.ItemID) == null ? 0 : inventarioA.Single(s => s.ItemID == r.ItemID).Cantidad, CantidadUsuarioB = inventarioB.SingleOrDefault(s => s.ItemID == r.ItemID) == null ? 0 : inventarioB.Single(s => s.ItemID == r.ItemID).Cantidad }) }) }).ToList(); return(View(model)); } }
public ActionResult DifferenceData() { if (Username != "*****@*****.**" && Username != "*****@*****.**") { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid user.")); } DifferenceViewModel model = new DifferenceViewModel(); string userIdA = Username; string userIdB = (Username == "*****@*****.**" ? "*****@*****.**" : "*****@*****.**"); model.OrigUserId = MyInventory.Utils.GetUsernamFromEmail(userIdA); model.DestUserId = MyInventory.Utils.GetUsernamFromEmail(userIdB); var inventoryA = Database.InventoriesItems .Where(s => s.Inventories.UserId == userIdA) .Select(u => new ItemQuantity { ItemId = u.ItemId, Quantity = u.Quantity }).ToList(); var inventoryB = Database.InventoriesItems .Where(s => s.Inventories.UserId == userIdB) .Select(u => new ItemQuantity { ItemId = u.ItemId, Quantity = u.Quantity }).ToList(); var capsulesA = Database.CapsulesItems .Where(s => s.Capsules.UserId == userIdA) .GroupBy(t => t.ItemId) .Select(u => new ItemQuantity { ItemId = u.Key, Quantity = u.Sum(v => v.Quantity) }); var capsulesB = Database.CapsulesItems .Where(s => s.Capsules.UserId == userIdB) .GroupBy(t => t.ItemId) .Select(u => new ItemQuantity { ItemId = u.Key, Quantity = u.Sum(v => v.Quantity) }); foreach (var itemC in capsulesA) { var itemI = inventoryA.SingleOrDefault(f => f.ItemId == itemC.ItemId); if (itemI == null) { inventoryA.Add(new ItemQuantity { ItemId = itemC.ItemId, Quantity = itemC.Quantity }); } else { itemI.Quantity += itemC.Quantity; } } foreach (var itemC in capsulesB) { var itemI = inventoryB.SingleOrDefault(f => f.ItemId == itemC.ItemId); if (itemI == null) { inventoryB.Add(new ItemQuantity { ItemId = itemC.ItemId, Quantity = itemC.Quantity }); } else { itemI.Quantity += itemC.Quantity; } } model.Groups = GroupsXml .Select(p => new GroupDifferenceViewModel { GroupId = p.GroupId, Types = p.Types.Select(q => new TypeDifferenceViewModel { TypeId = q.TypeId, Items = q.Items.Select(r => new ItemDifferenceViewModel { CurrentItem = ItemBase.Create(r), OrigQuantity = inventoryA.SingleOrDefault(s => s.ItemId == r.ItemId) == null ? 0 : inventoryA.Single(s => s.ItemId == r.ItemId).Quantity, DestQuantity = inventoryB.SingleOrDefault(s => s.ItemId == r.ItemId) == null ? 0 : inventoryB.Single(s => s.ItemId == r.ItemId).Quantity }).ToList() }).ToList() }).ToList(); model.Groups.RemoveAll(p => p.OrigDifference == 0 && p.DestDifference == 0); foreach (var group in model.Groups) { group.Types.RemoveAll(p => p.OrigDifference == 0 && p.DestDifference == 0); foreach (var type in group.Types) { type.Items.RemoveAll(p => p.OrigDifference == 0 && p.DestDifference == 0); } } return(Json(model, JsonRequestBehavior.AllowGet)); }