/// <summary>
        /// Akcija za premestanje ucenika u sledeci razred u odeljenje sa istom oznakom kao i proslo,i prebacivanje ucenika u to novo odeljenje prilikom
        /// arhiviranja trenutnog odeljenje usled zavrsetka skolske godine.
        /// </summary>
        /// <param name="odeljenje"></param>
        /// <returns></returns>
        private int PremestiUSledecuGodinu(Odeljenje odeljenje)
        {
            var pom = _context.Odeljenja.Include("Oznaka").SingleOrDefault(o => o.Id == odeljenje.Id);

            //Ukoliko je 4. razred ucenici se ne premestaju nigde,ili ukoliko je odljenje na trecoj godini na trogodisnjem smeru.
            if (odeljenje.Razred == 4 || pom.Oznaka.Smerovi.Any(x => x.Trajanje == 3 && odeljenje.Razred == 3))
            {
                return(0);
            }

            //objekat u kom se cuva odeljenje iste oznake za sledecu godinu,u koje treba ucenici automatksi da se premeste.
            var sledecaGodinaOdeljenjeUToku = _context.Odeljenja.SingleOrDefault(o => o.OznakaID == odeljenje.OznakaID && o.Razred == odeljenje.Razred + 1 && o.StatusID == 2); // Status 2 je U toku

            //Ukoliko ne postoji odeljenje koje je kreirano i u toku,kreira se novo sa godinom upisa jednom vecom od prosle godine.
            ///<see cref="Odeljenje.SledecaSkolskaGodina(int, int, ApplicationDbContext)"/>
            if (sledecaGodinaOdeljenjeUToku == null)
            {
                sledecaGodinaOdeljenjeUToku = new Odeljenje()
                {
                    OznakaID             = odeljenje.OznakaID,
                    Razred               = odeljenje.Razred + 1,
                    PocetakSkolskeGodine = Odeljenje.SledecaSkolskaGodina(odeljenje.Razred + 1, odeljenje.OznakaID, _context),
                    StatusID             = 2,
                    KrajSkolskeGodine    = Odeljenje.SledecaSkolskaGodina(odeljenje.Razred + 1, odeljenje.OznakaID, _context) + 1
                };

                _context.Odeljenja.Add(sledecaGodinaOdeljenjeUToku);
                _context.SaveChanges();
            }
            //Dodavanje ucenika u isto odeljenje sledeceg razreda sa statusom u toku.
            foreach (var ucenik in odeljenje.Ucenici)
            {
                ucenik.OdeljenjeId = sledecaGodinaOdeljenjeUToku.Id;
            }

            _context.SaveChanges();

            return(0);
        }
        /// <summary>
        /// Metoda dodeljuje uceniku odeljenje
        /// </summary>
        /// <param name="ucenikId"></param>
        /// <param name="razred"></param>
        /// <param name="oznaka"></param>
        /// <returns></returns>
        private void DodajUcenikaUOdeljenje(int ucenikId, int razred, int oznaka)
        {
            var skolskaGodina = _context.SkolskaGodine.SingleOrDefault(s => s.Aktuelna == true);

            if (skolskaGodina != null)
            {
                DateTime pocetakSkolskeGodine = skolskaGodina.PocetakSkolskeGodine.Date;
                DateTime krajSkolskeGodine    = skolskaGodina.KrajSkolskeGodine.Date;
                DateTime trenutniDatum        = DateTime.Now.Date;

                int status = 0;

                //Ako nije pocela skolska godina status je 2
                if (trenutniDatum < pocetakSkolskeGodine)
                {
                    status = 2;//Status 2 oznacava da je upis ucenika u toku
                }
                //Ako je pocela skolska godina status je 3
                else if (trenutniDatum >= pocetakSkolskeGodine && trenutniDatum <= krajSkolskeGodine)
                {
                    status = 3;//Status 3 oznacava vanredan upis ucenika u odeljenje i tom prilikom ucenik dolazi na kraj dnevnika
                }
                else if (trenutniDatum > krajSkolskeGodine)
                {
                    status = 2; //Status 2 oznacava da je upis ucenika u toku jer je zavrsena skolska godina
                                // i vrsi se upis za sledecu skolsku godinu
                }



                var ucenik = _context.Ucenici.Where(u => u.UcenikID == ucenikId)
                             .SingleOrDefault();

                if (ucenik != null)
                {
                    //Dodeljuje se odeljenje sa statusom koji je izabran na formi.
                    var odeljenje = _context.Odeljenja
                                    .Include("Status")
                                    .SingleOrDefault(o => o.OznakaID == oznaka && o.Razred == razred && o.StatusID == status);

                    //Ukoliko odeljenje nije ni kreirano u bazi bez obzira na status,kreira se.
                    if (odeljenje == null)
                    {
                        //Ukoliko je kreirana nova skolska godina njen Id se dodeljuje odeljenju
                        if (skolskaGodina.PocetakSkolskeGodine.Year == DateTime.Now.Year)
                        {
                            odeljenje = new Odeljenje()
                            {
                                OznakaID             = oznaka,
                                Razred               = razred,
                                PocetakSkolskeGodine = Odeljenje.SledecaSkolskaGodina(razred, oznaka, _context),
                                StatusID             = 2,
                                KrajSkolskeGodine    = Odeljenje.SledecaSkolskaGodina(razred, oznaka, _context) + 1,
                                SkolskaGodinaId      = skolskaGodina.SkolskaGodinaId
                            };
                        }
                        //Ukoliko nije kreirana nova skolska godina njen Id se dodeljuje odeljenju kada se bude kreirala
                        else
                        {
                            odeljenje = new Odeljenje()
                            {
                                OznakaID             = oznaka,
                                Razred               = razred,
                                PocetakSkolskeGodine = Odeljenje.SledecaSkolskaGodina(razred, oznaka, _context),
                                StatusID             = 2,
                                KrajSkolskeGodine    = Odeljenje.SledecaSkolskaGodina(razred, oznaka, _context) + 1
                            };
                        }


                        _context.Odeljenja.Add(odeljenje);
                        _context.SaveChanges();
                    }

                    else if (odeljenje.StatusID == 3)   //Status 3 = kreirano.
                    {
                        var poslednjiBrojUDnevniku = odeljenje.Ucenici.Max(u => u.BrojUDnevniku);

                        ucenik.BrojUDnevniku = poslednjiBrojUDnevniku + 1; //Ucenik se dodaje na kraj dnevnika.

                        ucenik.Odeljenje = odeljenje;

                        ucenik.GenerisiJedinstveniBroj();
                    }

                    ucenik.OdeljenjeId = odeljenje.Id;
                    _context.Ucenici.AddOrUpdate(ucenik);
                    _context.SaveChanges();
                }

                if (status == 3)
                {
                    /*Metoda se pozvia da proveri da li postoji odeljenje
                     * kojem nije promenjen status iz "Upis u toku" u "Kreirano odeljenje",
                     * do ovoga moze doci ukoliko je neko odeljenje prvi put kreirano nakon
                     * pocetka skolske.
                     */
                    PromeniStatusOdeljenjima();
                }
            }
        }