public ActionResult Kreiraj()
        {
            RacunKreirajVM model = new RacunKreirajVM();

            model.Mjesec = DateTime.Now.Month.ToString();
            model.Godina = DateTime.Now.Year.ToString();
            return(View(model));
        }
        public ActionResult Kreiraj(RacunKreirajVM model)
        {
            if (!string.IsNullOrEmpty(model.Mjesec))
            {
                if (!Regex.IsMatch(model.Mjesec, @"^\d+$"))
                {
                    ModelState.AddModelError(string.Empty, "Niste unijeli ispravan mjesec!");
                    return(View(model));
                }
            }
            if (!string.IsNullOrEmpty(model.Godina))
            {
                if (!Regex.IsMatch(model.Mjesec, @"^\d+$"))
                {
                    ModelState.AddModelError(string.Empty, "Niste unijeli ispravnu godinu!");
                    return(View(model));
                }
            }
            int mjesec = Int32.Parse(model.Mjesec);

            if (DateTime.Now.Month == mjesec)
            {
                ModelState.AddModelError(string.Empty, "Racuni se mogu generisati samo za prethodni mjesec!");
                return(View(model));
            }
            if (db.RacuniDbSet.Where(c => c.ObracunskiPeriodOD.Month == mjesec).Count() > 0)
            {
                ModelState.AddModelError(string.Empty, "Već ste generisali račune za mjesec " + model.Mjesec + "!");
                return(View(model));
            }

            int brojRacuna = 0;

            var korisnici = db.KorisnikDbSet.ToList();

            foreach (var x in korisnici)
            {
                var datum   = new DateTime(Int32.Parse(model.Godina), Int32.Parse(model.Mjesec), 1);
                var datumdo = datum.AddMonths(1).AddDays(-1);

                var aktivne = db.AktivneUslugeDbSet.Where(c => c.KorisnikId == x.Id && c.DatumAktivacije < datumdo).ToList();
                if (aktivne != null && aktivne.Count() > 0)
                {
                    Racuni racun = new Racuni();
                    racun.KorisnikId         = x.Id;
                    racun.ObracunskiPeriodOD = new DateTime(Int32.Parse(model.Godina), Int32.Parse(model.Mjesec), 1);
                    racun.ObracunskiPeriodDO = racun.ObracunskiPeriodOD.AddMonths(1).AddDays(-1);
                    racun.RokPlacanja        = DateTime.Now.AddDays(20);
                    racun.DatumIzdavanja     = DateTime.Now;
                    racun.Placen             = false;
                    db.RacuniDbSet.Add(racun);
                    db.SaveChanges();



                    double sumPDV = 0, sumBEZPDV = 0;

                    foreach (var stavka in aktivne)
                    {
                        RacuniStavke rs = new RacuniStavke();
                        rs.RacunId = racun.Id;
                        bool temp = false;

                        rs.AktivneUslugeId = stavka.Id;
                        rs.DatumPocetka    = racun.ObracunskiPeriodOD;
                        rs.DatumKraja      = racun.ObracunskiPeriodDO;
                        rs.IznosBezPDV     = Math.Round(stavka.Paket.CijenaBezPdv, 2);
                        rs.IznosSaPDV      = Math.Round(stavka.Paket.CijenaSaPdv, 2);

                        // ako je usluga aktivirana u toku mjeseca, pocetni datum promjeniti
                        if (stavka.DatumAktivacije > rs.DatumPocetka)
                        {
                            rs.DatumPocetka = stavka.DatumAktivacije;
                            temp            = true;
                        }
                        if (stavka.DatumZatvaranja < rs.DatumKraja)
                        {
                            rs.DatumKraja = stavka.DatumZatvaranja ?? rs.DatumKraja;
                        }

                        if (temp)
                        {
                            rs.IznosBezPDV = Math.Round(stavka.Paket.CijenaBezPdv / 30 * (rs.DatumKraja - rs.DatumPocetka).TotalDays, 2);
                            rs.IznosSaPDV  = Math.Round(rs.IznosBezPDV * 1.17, 2);
                        }


                        db.RacuniStavkeDbSet.Add(rs);
                        db.SaveChanges();

                        sumPDV    += rs.IznosSaPDV;
                        sumBEZPDV += rs.IznosBezPDV;
                    }



                    racun.UkupnoBezPDV = Math.Round(sumBEZPDV, 2);
                    racun.UkupnoSaPDV  = Math.Round(sumPDV, 2);
                    racun.Sifra        = racun.Id.ToString() + model.Mjesec + "/" + model.Godina.Substring(model.Godina.Length - 2);
                    db.SaveChanges();



                    sumPDV = sumBEZPDV = 0;

                    brojRacuna++;
                }
            }



            TempData["Message"] = "Generisemo racune za mjesec " + model.Mjesec + " i godinu " + model.Godina + "<br><br> Generisano je ukupno: " + brojRacuna + " racuna!";
            TempData["code"]    = "info";



            return(RedirectToAction("Index"));
        }