public async Task <ActionResult> Index()
        {
            var model = new ToborzasViewModel();

            using (var db = new ApplicationDbContext())
            {
                var userId = HttpContext.User.Identity.GetUserId();
                var orszag = await db.Orszagok
                             .Include("OrszagEgysegek.Egyseg")
                             .Include("OrszagEpuletek.Epulet")
                             .SingleOrDefaultAsync(o => o.User.Id == userId);

                var lehetsegesEgysegek = db.Egysegek.ToList();

                model.Arany = orszag.Arany;

                var barakk     = orszag.OrszagEpuletek.SingleOrDefault(o => o.Epulet.Name == "Barakk");
                var osszeshely = barakk == null ? 0 : barakk.Darab * 200;



                model.Egysegek = lehetsegesEgysegek.Select(e => new ToborzasEgysegListViewModel
                {
                    Id        = e.Id,
                    Name      = e.Name,
                    Tamadas   = e.Tamadas,
                    Vedekezes = e.Vedekezes,
                    Ar        = e.Ar,
                    Zsold     = e.Zsold,
                    Ellatmany = e.Ellatmany,

                    JelenlegVan = orszag.OrszagEgysegek.Where(oe => oe.Egyseg.Id == e.Id).Sum(oe => oe.Darab)
                }).ToList();

                model.Szabadhelyek = osszeshely - model.Egysegek.Sum(e => e.JelenlegVan);
            }
            return(View(model));
        }
        public async Task <ActionResult> Index(ToborzasViewModel model)
        {
            using (var db = new ApplicationDbContext())
            {
                var userId = HttpContext.User.Identity.GetUserId();
                var orszag = await db.Orszagok
                             .Include(o => o.User) //ez nem kéne, hanem az entitystate-tel kéne megoldani, csak nincs kedvem most
                             .Include("OrszagEgysegek.Egyseg")
                             .Include("OrszagEpuletek.Epulet")
                             .SingleOrDefaultAsync(o => o.User.Id == userId);

                var lehetsegesEgysegek = db.Egysegek.ToList();

                // ezt kéne jól csinálni a user include-ja helyett
                db.Entry <Orszag>(orszag).Reference(o => o.User).EntityEntry.State = EntityState.Unchanged;

                var barakk     = orszag.OrszagEpuletek.SingleOrDefault(o => o.Epulet.Name == "Barakk");
                var osszeshely = barakk == null ? 0 : barakk.Darab * 200;

                var szabadhely = osszeshely - orszag.OrszagEgysegek.Sum(e => e.Darab);

                var vetel   = 0;
                var vetelar = 0;
                foreach (var item in model.Egysegek)
                {
                    vetel   += (item.Vetel.HasValue ? item.Vetel.Value : 0);
                    vetelar += (item.Vetel.HasValue ? item.Vetel.Value * item.Ar : 0);
                }

                if (vetel > szabadhely)
                {
                    ModelState.AddModelError("", "Nincs szabad helyed!");
                }

                if (vetelar > orszag.Arany)
                {
                    ModelState.AddModelError("", "Nincs elég aranyad!");
                }

                if (ModelState.IsValid)
                {
                    foreach (var item in model.Egysegek)
                    {
                        var egyseg = orszag.OrszagEgysegek.SingleOrDefault(e => e.Egyseg.Id == item.Id);
                        if (egyseg == null)
                        {
                            orszag.OrszagEgysegek.Add(new Models.DataAccess.Entities.OrszagEgyseg
                            {
                                Orszag = orszag,
                                Egyseg = lehetsegesEgysegek.Single(e => e.Id == item.Id),
                                Darab  = item.Vetel.HasValue ? item.Vetel.Value : 0
                            });
                        }
                        else
                        {
                            egyseg.Darab += item.Vetel.HasValue ?  item.Vetel.Value : 0;
                        }
                    }

                    orszag.Arany -= vetelar;


                    await db.SaveChangesAsync();


                    return(RedirectToAction("Index"));
                }

                return(View(model));
            }
        }