public IActionResult ProvjeraMjesta(DateTime Datum, int PonudId, string TipKarte = "")
        {
            RezervacijeProvjeraMjestaVM model = new RezervacijeProvjeraMjestaVM();

            HttpContext.Session.SetString("PonudaId", PonudId.ToString());

            MySessionExtensions.Set <DateTime>(HttpContext.Session, "DatumRezervacije", Datum);

            HttpContext.Session.SetString("TipKarte", TipKarte);

            var podaci = _db.PosjecujeLokacije.Include(x => x.Linije.Autobus).FirstOrDefault(x => x.Id == PonudId);

            //Get occupied places in bus
            var brojZauzetihMjesta = _db.Karte.Where(x => x.datumPutovanja == Datum && x.PosjecujeLokacije.LinijeId == podaci.LinijeId).ToList();

            foreach (var item in brojZauzetihMjesta)
            {
                model.ZauzetaMjesta.Add(Convert.ToInt32(item.brojSjedista));
            }
            //Initialise model
            model.UkupanBrojMjestaAutobusa = podaci.Linije.Autobus.brojSjedistaBusa;
            model.BrojZauzetihMjesta       = brojZauzetihMjesta.Count();
            model.BrojSlobodnihMjesta      = model.UkupanBrojMjestaAutobusa - model.BrojZauzetihMjesta;

            return(View(model));
        }
        //Checking validity of code
        public IActionResult ProvjeriValidnostKoda(string code)
        {
            var datumRezervacije = MySessionExtensions.Get <DateTime>(HttpContext.Session, "DatumRezervacije");

            //Check for coupon expiracy
            var ponuda = _db.PosjecujeLokacije.FirstOrDefault(x => x.Id == Convert.ToInt32(HttpContext.Session.GetString("PonudaId")));
            var popust = _db.PopustNaLiniji.Include(x => x.Popust).FirstOrDefault(x => x.LinijeId == ponuda.LinijeId);

            DateTime datum = datumRezervacije;

            if (HttpContext.Session.GetString("code").Equals(code.Trim()) && datum < popust.Popust.DatumVazenjaPopusta)
            {
                HttpContext.Session.SetString("code", "");
                return(Content("Kod je validan"));
            }
            return(Content("Nevalidan kod"));
        }
        //Form for paying
        public IActionResult PrikazFormeZaPlacanje([FromBody] RezervacijaMjestaJson Model)
        {
            var ponudaRezervacije = _db.PosjecujeLokacije
                                    .FirstOrDefault(x => x.Id == Convert.ToInt32(HttpContext.Session.GetString("PonudaId")));

            //Initializing model
            RezervacijePrikazFormePlacanjeVM viewmodel = new RezervacijePrikazFormePlacanjeVM();

            viewmodel.Banke                 = Banke.VratiBanke();
            viewmodel.Karte                 = Kartice.VratiKartice();
            viewmodel.KolicinaKarata        = Model.Mjesta.Count.ToString();
            viewmodel.ProsliModel           = Model;
            viewmodel.PostojiPopustNaLiniji = _db.PopustNaLiniji.FirstOrDefault(x => x.LinijeId == ponudaRezervacije.LinijeId) != null ? true : false;
            //Check for expiracy
            viewmodel.DatumRezervacije = MySessionExtensions.Get <DateTime>(HttpContext.Session, "DatumRezervacije");

            if (viewmodel.PostojiPopustNaLiniji)
            {
                viewmodel.IstekaoDatumPopusta = _db.PopustNaLiniji.Include(x => x.Popust).FirstOrDefault(x => x.LinijeId == ponudaRezervacije.LinijeId).Popust.DatumVazenjaPopusta > viewmodel.DatumRezervacije ? true : false;
            }
            //Get total spent that user ordered
            foreach (var item in Model.Mjesta)
            {
                viewmodel.UkupnaCijena += _db.PosjecujeLokacije
                                          .FirstOrDefault(x => x.Id == Convert.ToInt32(HttpContext.Session.GetString("PonudaId"))).cijenaOdPolaska;
                viewmodel.MjestaOdabrana.Add(item);
            }

            //Type of card user picked, travel that he reserved.
            viewmodel.TipKarte       = _db.TipoviKarte.FirstOrDefault(x => x.Tip == HttpContext.Session.GetString("TipKarte")).Tip;
            viewmodel.PonudaOdabrana = _db.PosjecujeLokacije.Include(x => x.Linije.Polazak)
                                       .Include(x => x.Grad)
                                       .FirstOrDefault(x => x.Id == Convert.ToInt32(HttpContext.Session.GetString("PonudaId")));

            return(View(viewmodel));
        }
        public IActionResult DodajRezervaciju(RezervacijePrikazFormePlacanjeVM model)
        {
            Korisnik logirani = HttpContext.GetLogiraniKorisnik();

            if (string.IsNullOrEmpty(model.BrojKreditneKartice))
            {
                return(Content("niste unijeli kreditnu karticu"));
            }

            //Add new credit card
            Kartica novaKartica = new Kartica
            {
                BrojKartice        = model.BrojKreditneKartice,
                Klijenti           = (Klijenti)logirani,
                SredstvoPlacanjaId = 1,
                Banka = Banke.VratiBanke().Find(x => x.Value == model.OdabranaBankaId.ToString()).Text,
            };

            _db.Kartice.Add(novaKartica);

            //Picked reservation travels
            var ponudaRezervacije = _db.PosjecujeLokacije.Include(x => x.Linije)
                                    .FirstOrDefault(x => x.Id == Convert.ToInt32(HttpContext.Session.GetString("PonudaId")));

            //Crete new transaction of cards
            var transakcijaNova = new Transakcija();

            transakcijaNova.brojTransakcije = "1";
            transakcijaNova.datumKupovine   = DateTime.Now;
            transakcijaNova.otkazano        = false;
            transakcijaNova.Status          = "zaprimljena";
            transakcijaNova.Klijenti        = (Klijenti)logirani;
            transakcijaNova.Kartica         = novaKartica;

            TransakcijaStavke stavkeTransakcije = new TransakcijaStavke();

            //Add new transaction of cards in database
            foreach (var item in model.ProsliModel.Mjesta)
            {
                Karta karta = new Karta();

                stavkeTransakcije.Karta       = karta;
                stavkeTransakcije.Kolicina    = model.ProsliModel.Mjesta.Count;
                stavkeTransakcije.Transakcija = transakcijaNova;

                if (model.UkupnaCijenaPopust == 0)
                {
                    stavkeTransakcije.UkupnaCijena = model.UkupnaCijena;
                }
                else
                {
                    stavkeTransakcije.UkupnaCijena = model.UkupnaCijenaPopust;
                }

                karta.PosjecujeLokacije = ponudaRezervacije;
                karta.Aktivna           = true;
                karta.brojSjedista      = item.ToString();
                karta.BrojKarte         = "XXX-123";
                karta.datumPutovanja    = MySessionExtensions.Get <DateTime>(HttpContext.Session, "DatumRezervacije");

                //karta.datumPutovanja = new DateTime(Convert.ToInt32(godina[0]), Convert.ToInt32(razdvojeniDatum[1]), Convert.ToInt32(razdvojeniDatum[0]));
                karta.TipKarte = _db.TipoviKarte.FirstOrDefault(x => x.Tip == HttpContext.Session.GetString("TipKarte"));

                _db.Karte.Add(karta);
            }
            _db.TransakcijaStavke.Add(stavkeTransakcije);
            _db.SaveChanges();

            //Send user a email
            string bodyText = "Poštovani Uspješno ste platili rezervaciju za ponudu " + ponudaRezervacije.Linije.Naziv + " u iznosu od " + stavkeTransakcije.UkupnaCijena + "na dan " + transakcijaNova.datumKupovine.ToShortDateString() + " Pozdrav Vaša autobuska stanica";

            _emailService.BuildEmailTemplate("Potvrda  o uspješnosti rezervacije", bodyText, logirani.Email);

            return(Content("Rezervacija uspjesno provedena"));
        }