コード例 #1
0
ファイル: Evidentor.cs プロジェクト: nedimkurtovic/FITPONG
        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);
        }
コード例 #2
0
 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);
 }
コード例 #3
0
ファイル: Evidentor.cs プロジェクト: nedimkurtovic/FITPONG
        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;
        }
コード例 #4
0
        public EvidencijaMeca GetIgraceZaEvidenciju(EvidencijaMeca obj, int takmid)
        {
            var rezultat = evidentor.DobaviIgraceZaEvidencijuMeca(obj, takmid);

            if (rezultat == null)
            {
                throw new UserException("Neispravni podaci poslani");
            }
            return(rezultat);
        }
コード例 #5
0
 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);
 }
コード例 #6
0
ファイル: Evidentor.cs プロジェクト: nedimkurtovic/FITPONG
        //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;
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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);
        }
コード例 #9
0
ファイル: Evidentor.cs プロジェクト: nedimkurtovic/FITPONG
        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);
        }
コード例 #10
0
        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));
            }
        }
コード例 #11
0
        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);
        }
コード例 #12
0
ファイル: Evidentor.cs プロジェクト: nedimkurtovic/FITPONG
        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();
        }
コード例 #13
0
 public TakmicenjaEvidentirajMec(EvidencijaMeca _evidencija, SharedModels.Takmicenja takmicenje)
 {
     InitializeComponent();
     BindingContext = viewModel = new TakmicenjaEvidentirajMecViewModel(_evidencija, takmicenje);
 }
コード例 #14
0
 public TakmicenjaEvidentirajMecViewModel(EvidencijaMeca _evidencijaMeca, SharedModels.Takmicenja _takmicenje)
 {
     evidencijaMeca = _evidencijaMeca;
     takmicenje     = _takmicenje;
 }