public bool EvidentirajMec(EvidencijaMeca obj, int takmicenjeID)//potrebno je takmicenjeID { //nikad ne bi niti jedan tim trebao biti null da napomenem, to je rijeseno u evidencijimeca httpget using (var transakcija = db.Database.BeginTransaction()) { try { //obzirom da se implementacije razlikuju za web app i web api, i zbog problema sa serijalizacijom //i dubinom, ovdje cu dodati jednu mini funkciju koja ce provjeriti da li su List<Igrac_Utakmica> za tim1 i //tim2 prazne, ako jesu na osnovu imena timova(tj prijava) ce dobaviti igrac utakmice i setovati int pobjednik = (obj.RezultatTim1.GetValueOrDefault() > obj.RezultatTim2.GetValueOrDefault()) ? 1 : 2; UpdateIgracUtakmicaZapis(obj, pobjednik); //potrebno mec postaviti na zavrsen Igrac_Utakmica trenutniIg = db.IgraciUtakmice .AsNoTracking().Include(x => x.Utakmica).ThenInclude(x => x.Runda) .Where(x => x.IgID == obj.Tim1[0].IgID) .FirstOrDefault(); Utakmica trenutna = db.Utakmice.Include(x => x.UcescaNaUtakmici).Include(x => x.Runda) .Where(x => x.ID == trenutniIg.UtakmicaID).FirstOrDefault(); if (GetTakmicenjeSistem(takmicenjeID) == "Single elimination" && !ZadnjaUtakmica(obj.Tim1[0], takmicenjeID)) { if (pobjednik == 1) { UnaprijediIgraceNaUtakmicu(obj.Tim1, trenutna); } else { UnaprijediIgraceNaUtakmicu(obj.Tim2, trenutna); } } db.Utakmice.Where(x => x.ID == trenutna.ID).FirstOrDefault().IsEvidentirana = true; db.Utakmice.Where(x => x.ID == trenutna.ID).FirstOrDefault().DatumVrijeme = DateTime.Now; db.SaveChanges(); if (ZadnjaUtakmica(obj.Tim1[0], takmicenjeID)) { //prebaci takmicenje na zavrseno il whatever Status_Takmicenja zavrseno = db.StatusiTakmicenja.Where(x => x.Opis == "Zavrseno" || x.Opis == "Završeno").FirstOrDefault(); db.Takmicenja.Where(x => x.ID == takmicenjeID).FirstOrDefault().StatusID = zavrseno.ID; db.SaveChanges(); } transakcija.Commit(); return(true); } catch (Exception err) { transakcija.Rollback(); } } return(false); }
public bool ZadnjaUtakmica(Igrac_Utakmica ucesce, int takmid) { int brojUtakmica = BrojUtakmicaNaTakmicenju(takmid); Utakmica x = db.IgraciUtakmice.AsNoTracking().Include(c => c.Utakmica).Where(c => c.IgID == ucesce.IgID) .Select(c => c.Utakmica) .FirstOrDefault(); return(x.BrojUtakmice == brojUtakmica); }
public void UpdateIgracUtakmicaSingle(EvidencijaMeca obj, int pobjednik) { Tip_Rezultata pobjeda = db.TipoviRezultata.AsNoTracking().Where(c => c.Naziv == "Pobjeda").FirstOrDefault(); Tip_Rezultata poraz = db.TipoviRezultata.AsNoTracking().Where(c => c.Naziv == "Poraz").FirstOrDefault(); Igrac_Utakmica x = db.IgraciUtakmice .AsNoTracking() .Where(c => c.IgID == obj.Tim1[0].IgID).FirstOrDefault(); x.OsvojeniSetovi = obj.RezultatTim1.GetValueOrDefault(); int xs = (pobjednik == 1) ? 1 : 0; // predstavlja score x - naziv ucesca, slovo s - score Igrac_Utakmica y = db.IgraciUtakmice .AsNoTracking() .Where(c => c.IgID == obj.Tim2[0].IgID).FirstOrDefault(); y.OsvojeniSetovi = obj.RezultatTim2.GetValueOrDefault(); int ys = (pobjednik == 2) ? 1 : 0; // predstavlja score y - naziv ucesca, slovo s - score Igrac xigrac = db.Igraci.AsNoTracking().Where(c => c.ID == x.IgracID).FirstOrDefault(); Igrac yigrac = db.Igraci.AsNoTracking().Where(c => c.ID == y.IgracID).FirstOrDefault(); x.PristupniElo = xigrac.ELO; y.PristupniElo = yigrac.ELO; string X = "pobjeda"; string Y = "poraz"; if (xs == 1) { x.TipRezultata = pobjeda; y.TipRezultata = poraz; } else { x.TipRezultata = poraz; y.TipRezultata = pobjeda; X = "poraz"; Y = "pobjeda"; } UpdateStatistikuIStanjePrijave(x.IgracID ?? default(int), X == "pobjeda" ? true : false, false); UpdateStatistikuIStanjePrijave(y.IgracID ?? default(int), Y == "pobjeda" ? true : false, false); db.Update(x); db.Update(y); db.SaveChanges(); xigrac.ELO = ELOCalculator.VratiEloSingle(x.PristupniElo.GetValueOrDefault(), y.PristupniElo.GetValueOrDefault(), xs); yigrac.ELO = ELOCalculator.VratiEloSingle(y.PristupniElo.GetValueOrDefault(), x.PristupniElo.GetValueOrDefault(), ys); db.Igraci.Where(c => c.ID == xigrac.ID).FirstOrDefault().ELO = xigrac.ELO; db.SaveChanges(); db.Igraci.Where(c => c.ID == yigrac.ID).FirstOrDefault().ELO = yigrac.ELO; db.SaveChanges(); return; }
//ovo za sad na apiju ne znam da li ima smisla, tj ima sigurno samo onda treba skontati gdje bi klasa TopIgraci //tj u koji bi se folder smjestila, da li to pripada takmicenju ili nekom ipak drugom servisu? Jer getnajboljiovesedmice //nema bas veze sa evidencijom private List <TopIgraciVM> GetNajboljeOveSedmice() { DateTime prosliPonedjeljak = GetProsliPonedjeljak(DateTime.Now); List <Utakmica> utakmiceUSedmici = db.Utakmice.AsNoTracking().Include(x => x.UcescaNaUtakmici) .Where(x => x.IsEvidentirana && x.DatumVrijeme >= prosliPonedjeljak && x.DatumVrijeme <= DateTime.Now) .ToList(); List <TopIgraciVM> listaPovratnih = new List <TopIgraciVM>(); foreach (Utakmica i in utakmiceUSedmici) { foreach (Igrac_Utakmica j in i.UcescaNaUtakmici) { if (listaPovratnih.Where(x => x.IgracId == j.IgracID).Count() == 0) { Igrac_Utakmica ucesceNatekmi = db.IgraciUtakmice .Include(x => x.TipRezultata).Include(x => x.Igrac) .Where(x => x.IgID == j.IgID).FirstOrDefault(); listaPovratnih.Add(new TopIgraciVM { BrojOsvojenihSetova = 0, BrojPobjeda = 0, BrojPoraza = 0, ELO = ucesceNatekmi.Igrac.ELO, IgracId = ucesceNatekmi.IgracID.GetValueOrDefault(), Naziv = ucesceNatekmi.Igrac.PrikaznoIme }); } Igrac_Utakmica ucesce = db.IgraciUtakmice.Include(x => x.TipRezultata) .Where(x => x.IgID == j.IgID).FirstOrDefault(); TopIgraciVM obj = listaPovratnih.Where(x => x.IgracId == j.IgracID).FirstOrDefault(); bool pobjeda = (ucesce.TipRezultata.Naziv == "Pobjeda") ? true : false; if (pobjeda) { obj.BrojPobjeda++; } else { obj.BrojPoraza++; } obj.BrojOsvojenihSetova += j.OsvojeniSetovi.GetValueOrDefault(); } } return(listaPovratnih.OrderByDescending(x => x.BrojOsvojenihSetova).ToList()); }
public void UpdateIgracUtakmicaDouble(EvidencijaMeca obj, int pobjednik) { Tip_Rezultata pobjeda = db.TipoviRezultata.AsNoTracking().Where(x => x.Naziv == "Pobjeda").FirstOrDefault(); Tip_Rezultata poraz = db.TipoviRezultata.AsNoTracking().Where(x => x.Naziv == "Poraz").FirstOrDefault(); Igrac_Utakmica x1 = db.IgraciUtakmice.AsNoTracking() .Where(x => x.IgID == obj.Tim1[0].IgID).FirstOrDefault(); Igrac_Utakmica x2 = db.IgraciUtakmice.AsNoTracking() .Where(x => x.IgID == obj.Tim1[1].IgID).FirstOrDefault(); x1.OsvojeniSetovi = obj.RezultatTim1.GetValueOrDefault(); x2.OsvojeniSetovi = obj.RezultatTim1.GetValueOrDefault(); int xs = (pobjednik == 1) ? 1 : 0; // predstavlja score x - naziv ucesca, slovo s - score Igrac_Utakmica y1 = db.IgraciUtakmice.AsNoTracking() .Where(x => x.IgID == obj.Tim2[0].IgID).FirstOrDefault(); Igrac_Utakmica y2 = db.IgraciUtakmice.AsNoTracking() .Where(x => x.IgID == obj.Tim2[1].IgID).FirstOrDefault(); y1.OsvojeniSetovi = obj.RezultatTim2.GetValueOrDefault(); y2.OsvojeniSetovi = obj.RezultatTim2.GetValueOrDefault(); int ys = (pobjednik == 2) ? 1 : 0; // predstavlja score x - naziv ucesca, slovo s - score Igrac x1igrac = db.Igraci.AsNoTracking().Where(c => c.ID == x1.IgracID).FirstOrDefault(); Igrac x2igrac = db.Igraci.AsNoTracking().Where(c => c.ID == x2.IgracID).FirstOrDefault(); Igrac y1igrac = db.Igraci.AsNoTracking().Where(c => c.ID == y1.IgracID).FirstOrDefault(); Igrac y2igrac = db.Igraci.AsNoTracking().Where(c => c.ID == y2.IgracID).FirstOrDefault(); x1.PristupniElo = x1igrac.ELO; x2.PristupniElo = x2igrac.ELO; y1.PristupniElo = y1igrac.ELO; y2.PristupniElo = y2igrac.ELO; string X = "pobjeda"; string Y = "poraz"; if (xs == 1) { x1.TipRezultata = pobjeda; x2.TipRezultata = pobjeda; y1.TipRezultata = poraz; y2.TipRezultata = poraz; } else { x1.TipRezultata = poraz; x2.TipRezultata = poraz; y1.TipRezultata = pobjeda; y2.TipRezultata = pobjeda; X = "poraz"; Y = "pobjeda"; } UpdateStatistikuIStanjePrijave(x1.IgracID ?? default(int), X == "pobjeda" ? true : false, true); UpdateStatistikuIStanjePrijave(x2.IgracID ?? default(int), X == "pobjeda" ? true : false, true); UpdateStatistikuIStanjePrijave(y1.IgracID ?? default(int), Y == "pobjeda" ? true : false, true); UpdateStatistikuIStanjePrijave(y2.IgracID ?? default(int), Y == "pobjeda" ? true : false, true); db.IgraciUtakmice.Update(x1); db.IgraciUtakmice.Update(x2); db.IgraciUtakmice.Update(y1); db.IgraciUtakmice.Update(y2); db.SaveChanges(); x1igrac.ELO = ELOCalculator.VratiEloDouble( x1.PristupniElo.GetValueOrDefault(), x2.PristupniElo.GetValueOrDefault(), y1.PristupniElo.GetValueOrDefault(), y2.PristupniElo.GetValueOrDefault(), xs); x2igrac.ELO = ELOCalculator.VratiEloDouble( x2.PristupniElo.GetValueOrDefault(), x1.PristupniElo.GetValueOrDefault(), y1.PristupniElo.GetValueOrDefault(), y2.PristupniElo.GetValueOrDefault(), xs); y1igrac.ELO = ELOCalculator.VratiEloDouble( y1.PristupniElo.GetValueOrDefault(), y2.PristupniElo.GetValueOrDefault(), x1.PristupniElo.GetValueOrDefault(), x2.PristupniElo.GetValueOrDefault(), ys); y2igrac.ELO = ELOCalculator.VratiEloDouble( y2.PristupniElo.GetValueOrDefault(), y1.PristupniElo.GetValueOrDefault(), x1.PristupniElo.GetValueOrDefault(), x2.PristupniElo.GetValueOrDefault(), ys); db.Igraci.Where(x => x.ID == x1igrac.ID).FirstOrDefault().ELO = x1igrac.ELO; db.Igraci.Where(x => x.ID == x2igrac.ID).FirstOrDefault().ELO = x2igrac.ELO; db.Igraci.Where(x => x.ID == y1igrac.ID).FirstOrDefault().ELO = y1igrac.ELO; db.Igraci.Where(x => x.ID == y2igrac.ID).FirstOrDefault().ELO = y2igrac.ELO; db.SaveChanges(); }