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