Exemple #1
0
        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));
        }