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 AuthorizeEvidencijaMeca(int UserId, EvidencijaMeca obj) { if (!obj.Tim1.Select(x => x.IgracID).Contains(UserId) && !obj.Tim2.Select(x => x.IgracID).Contains(UserId)) { throw new AuthorizeException("Niste autorizovani za ovu radnju!"); } return(true); }
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; }
public EvidencijaMeca GetIgraceZaEvidenciju(EvidencijaMeca obj, int takmid) { var rezultat = evidentor.DobaviIgraceZaEvidencijuMeca(obj, takmid); if (rezultat == null) { throw new UserException("Neispravni podaci poslani"); } return(rezultat); }
public EvidencijaMeca EvidentirajMec(int takmid, EvidencijaMeca obj) //ovdje realno se moze vratiti trenutno evidentirani mec, ili pozvati metodu iznad GetEvidencije //i onda mu samo vrati ovo sto mu preostalo za evidentirati { ValidirajEvidencijuMeca(obj); //nikad ne bi niti jedan tim trebao biti null da napomenem, to je rijeseno u evidencijimeca httpget if (!evidentor.EvidentirajMec(obj, takmid)) { throw new UserException("Greška prilikom spašavanja zapisa"); } return(obj); }
//pobjednik je predstavljen intom, ako je prvi tim pobjednik onda je int = 1 ako je drugi onda je int = 2 public void UpdateIgracUtakmicaZapis(EvidencijaMeca obj, int pobjednik) { bool parovi = (obj.Tim1.Count() == 2) ? true : false; if (!parovi) { UpdateIgracUtakmicaSingle(obj, pobjednik); } else { UpdateIgracUtakmicaDouble(obj, pobjednik); } return; }
public IActionResult EvidencijaMeca(EvidencijaMecaVM obj) { if (ModelState.IsValid) { Igrac podnositeljZahtjeva = evidentor.NadjiIgraca(HttpContext.User.Identity.Name); if (!obj.Tim1.Select(x => x.IgracID).Contains(podnositeljZahtjeva.ID) && !obj.Tim2.Select(x => x.IgracID).Contains(podnositeljZahtjeva.ID)) { return(VratiNijeAutorizovan()); } EvidencijaMeca objekatZaEvidentor = mapko.Map <EvidencijaMeca>(obj); List <string> errori = evidentor.VratiListuErrora(objekatZaEvidentor); if (errori.Count() == 0) { //nikad ne bi niti jedan tim trebao biti null da napomenem, to je rijeseno u evidencijimeca httpget try { if (evidentor.EvidentirajMec(objekatZaEvidentor, obj.TakmicenjeID)) { notifikacijeHub.Clients.All.SendAsync("startaj", GetListaUseraNotifikacije(obj.Tim1[0].UtakmicaID), obj.NazivTim1, obj.NazivTim2, obj.TakmicenjeID); return(RedirectToAction("EvidencijaMeca", new { id = obj.TakmicenjeID })); } else { ModelState.AddModelError("", "Došlo je do nepredviđene greške, pokusajte opet"); } } catch (Exception) { //mislim da se ovaj blok nikad nece hittat obzirom da imam try catch u evidentoru ali eto ModelState.AddModelError("", "Došlo je do greške"); } } else { foreach (string err in errori) { ModelState.AddModelError("", err); } } } //nisam siguran da li je pametnije vratiti sve ili samo jedan ali eto List <EvidencijaMecaVM> temp = new List <EvidencijaMecaVM>(); temp.Add(obj); ViewBag.id = obj.TakmicenjeID; return(PartialView(temp)); }
public EvidencijaMeca EvidentirajMec(int id, [FromBody] EvidencijaMeca obj) { var napunjeniObjekat = takmicenjeService.GetIgraceZaEvidenciju(obj, id); var userId = usersService.GetRequestUserID(HttpContext.Request); takmicenjeAutorizator.AuthorizeEvidencijaMeca(userId, napunjeniObjekat); var rezultat = takmicenjeService.EvidentirajMec(id, napunjeniObjekat); rezultat.Tim1 = null; rezultat.Tim2 = null; //i dalje je mozda upitno da li vracati sve moguce evidencije odma ili samo ovaj mec koji //se upravo evidentirao //var userName = usersService.GetRequestUserName(HttpContext.Request); //return takmicenjeService.GetEvidencije(userName, id); return(rezultat); }
public List <string> VratiListuErrora(EvidencijaMeca obj) { List <string> errori = new List <string>(); if (obj.RezultatTim1.GetValueOrDefault() == obj.RezultatTim2.GetValueOrDefault()) { errori.Add("Rezultati ne mogu biti jednaki"); } if (!ValidanRezultat(obj.RezultatTim1.GetValueOrDefault()) || !ValidanRezultat(obj.RezultatTim2.GetValueOrDefault())) { errori.Add("Unesite pravilan broj osvojenih setova"); } if (VecEvidentiranaUtakmica(obj.Tim1)) { errori.Add("Utakmica je vec evidentirana!"); } return(errori); }
public async Task <EvidencijaMeca> EvidentirajMec(int id, EvidencijaMeca obj) { var url = $"{APIUrl}/{Resurs}/{id}/evidencije"; try { var rezult = await url.WithBasicAuth(Username, Password).PostJsonAsync(obj) .ReceiveJson <EvidencijaMeca>(); return(rezult); // trebalo bi promisliti, mozda je ipak pametnije vratiti konkretnu evidenciju //koja se evidentirala } catch (FlurlHttpException ex) { var errori = GetErrore(ex).Result; await Application.Current.MainPage.DisplayAlert("Greška", errori, "OK"); return(default(EvidencijaMeca)); } }
public List <EvidencijaMeca> GetEvidencije(string KorisnikUsername, int takmid) { Igrac igrac = evidentor.NadjiIgraca(KorisnikUsername); List <Utakmica> NjegoveUtakmice = evidentor.DobaviUtakmice(igrac, takmid); List <EvidencijaMeca> model = new List <EvidencijaMeca>(); foreach (Utakmica i in NjegoveUtakmice) { //ne bi se smjelo nikada desiti da se nadje null igracID jer je na frontendu prikazano samo ono gdje su oba igraca unesena.. //to je rjeseno onom funkcijom JelBye unutar funkcije DobaviUtakmice u par linija koda iznad EvidencijaMeca nova = new EvidencijaMeca(); List <Igrac_Utakmica> svaUcesca = db.IgraciUtakmice.Where(x => x.UtakmicaID == i.ID).ToList(); List <(Prijava pr, Igrac_Utakmica ucesce)> Timovi = new List <(Prijava pr, Igrac_Utakmica ucesce)>(); foreach (Igrac_Utakmica j in svaUcesca) { Prijava prijavaJoinUcesce = evidentor.GetPrijavuZaUcesce(j, takmid); Timovi.Add((prijavaJoinUcesce, j)); } (List <Igrac_Utakmica> Tim1, List <Igrac_Utakmica> Tim2)TimoviFinalni = evidentor.VratiUcescaPoTimu(Timovi); //dovoljno je provjeriti samo za jednog igraca, a svakako radi i za varijantu kad je double jer oba igraca pripadaju istoj prijavi koja ima //isti naziv string NazivTim1 = Timovi.Where(x => x.ucesce == TimoviFinalni.Tim1[0]).Select(x => x.pr.Naziv).FirstOrDefault(); string NazivTim2 = Timovi.Where(x => x.ucesce == TimoviFinalni.Tim2[0]).Select(x => x.pr.Naziv).FirstOrDefault(); nova.Tim1 = TimoviFinalni.Tim1; nova.Tim2 = TimoviFinalni.Tim2; nova.NazivTim1 = NazivTim1; nova.NazivTim2 = NazivTim2; nova.RezultatTim1 = null; nova.RezultatTim1 = null; //ovo ne bi trebalo smetati webappu obzirom da nece ovaj atribut nigdje koristit a webapiju je bitno //zbog ponovnog dobavljanja liste igraca nova.UtakmicaID = TimoviFinalni.Tim1[0].UtakmicaID; model.Add(nova); } return(model); }
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(); }
public TakmicenjaEvidentirajMec(EvidencijaMeca _evidencija, SharedModels.Takmicenja takmicenje) { InitializeComponent(); BindingContext = viewModel = new TakmicenjaEvidentirajMecViewModel(_evidencija, takmicenje); }
public TakmicenjaEvidentirajMecViewModel(EvidencijaMeca _evidencijaMeca, SharedModels.Takmicenja _takmicenje) { evidencijaMeca = _evidencijaMeca; takmicenje = _takmicenje; }