public IActionResult PotvrdaNarudzbe(PotvrdaNarudzbeVM Model) { var Korisnik = HttpContext.GetLogiraniKorisnik(); var Klijent = HttpContext.GetLogiraniKorisnik().Klijent; PotvrdaRezervacijeBicikalaVM VM = new PotvrdaRezervacijeBicikalaVM { Stavke = GetTerminStavke(Klijent) }; if (VM.Stavke.Count == 0) { return(RedirectToAction("Stavke")); } var UneseniPodaci = Model?.Podaci; VM.Podaci = new PotvrdaRezervacijeBicikalaVM.KorisnickiPodaci { AdresaStanovanja = UneseniPodaci?.AdresaStanovanja ?? Korisnik.AdresaStanovanja, BrojTelefona = UneseniPodaci?.BrojTelefona ?? Korisnik.BrojTelefona, Država = UneseniPodaci?.Država ?? "", Email = UneseniPodaci?.Email ?? Korisnik.Email, Grad = UneseniPodaci?.Grad ?? Korisnik.Grad.Naziv, Ime = UneseniPodaci?.Ime ?? Korisnik.Ime, Prezime = UneseniPodaci?.Prezime ?? Korisnik.Prezime, Pokrajina = UneseniPodaci?.Pokrajina ?? "", PostanskiKod = UneseniPodaci?.PostanskiKod ?? "" }; foreach (var stavka in VM.Stavke) { double cijena = 0; if (stavka.Bicikl != null) { cijena = stavka.Bicikl.CijenaPoDanu.Value * stavka.BrojDana; } VM.UkupniIznos += cijena * stavka.Kolicina; } double stopa_poreza = 17.0; VM.Osnovica = VM.UkupniIznos / (1 + stopa_poreza / 100); VM.UkupnoPoreza = VM.UkupniIznos - VM.Osnovica; if (Request.Method == "POST") { var lista_rezervisanih_bicikala = new List <RezervacijaIznajmljenaBicikla>(); try { // Bicikla foreach (var naruceno_biciklo in VM.Stavke.ToList()) { var bicikl_stanja = db.BiciklStanje .Where(x => x.BiciklId == naruceno_biciklo.BiciklId) .Where(x => x.Aktivan == true) .Where(x => x.Kolicina > 0) .ToList(); if (bicikl_stanja.Sum(x => x.Kolicina) < naruceno_biciklo.Kolicina) { throw new Exception("Naručeno biciklo " + naruceno_biciklo.Bicikl.PuniNaziv + " nije dostupno u traženoj kolicini!"); } var trazena_kolicina = naruceno_biciklo.Kolicina; foreach (var bicikl_na_stanju in bicikl_stanja) { var dostupna_kolicina = Math.Min(trazena_kolicina, bicikl_na_stanju.Kolicina); bicikl_na_stanju.Kolicina -= dostupna_kolicina; trazena_kolicina -= dostupna_kolicina; for (int i = 0; i < dostupna_kolicina; i++) { lista_rezervisanih_bicikala.Add(new RezervacijaIznajmljenaBicikla { BiciklStanjeId = bicikl_na_stanju.BiciklStanjeId, DatumPreuzimanja = naruceno_biciklo.DatumPreuzimanja, DatumVracanja = naruceno_biciklo.DatumVracanja }); } if (trazena_kolicina == 0) { break; } } } } catch (Exception ex) { TempData["error_message"] = ex.Message; if (Request.Headers["X-Requested-With"] == "XMLHttpRequest") { return(PartialView(VM)); } return(View(VM)); } Rezervacija narudzba = new Rezervacija { AdresaStanovanja = VM.Podaci.AdresaStanovanja, BrojTelefona = VM.Podaci.BrojTelefona, Država = VM.Podaci.Država, Email = VM.Podaci.Email, Grad = VM.Podaci.Grad, Ime = VM.Podaci.Ime, Prezime = VM.Podaci.Prezime, Pokrajina = VM.Podaci.Pokrajina, PostanskiKod = VM.Podaci.PostanskiKod, DatumRezervacije = DateTime.Now, KlijentId = Klijent.Id, NacinOtpremeId = Model.NacinOtpremeId, NacinPlacanja = Model.NacinPlacanja, Osnovica = VM.Osnovica, UkupniIznos = VM.UkupniIznos, UkupnoPoreza = VM.UkupnoPoreza, RezervacijaIznajmljenaBicikla = lista_rezervisanih_bicikala, StanjeRezervacije = StanjeRezervacije.ekanje_uplate }; if (narudzba.NacinOtpremeId == 0) { narudzba.NacinOtpremeId = db.NacinOtpreme .Where(x => x.IsDeleted == false).First(x => x.Cijena == 0).NacinOtpremeId; } db.Rezervacija.Add(narudzba); db.SaveChanges(); var termin_stavke = db.TerminStavka.Where(x => x.KlijentId == Klijent.Id).ToList(); foreach (var item in termin_stavke) { db.TerminStavka.Remove(item); } db.SaveChanges(); return(RedirectToAction("OnlineUplata", new { RezervacijaId = narudzba.RezervacijaId })); } else { if (Request.Headers["X-Requested-With"] == "XMLHttpRequest") { return(PartialView(VM)); } return(View(VM)); } }
public IActionResult PotvrdaNarudzbe(PotvrdaNarudzbeVM Model) { var Korisnik = HttpContext.GetLogiraniKorisnik(); var Klijent = HttpContext.GetLogiraniKorisnik().Klijent; PotvrdaNarudzbeVM VM = new PotvrdaNarudzbeVM { Stavke = GetKorpaStavke(Klijent), NaciniOtpreme = db.NacinOtpreme .Where(x => x.IsDeleted == false).OrderBy(x => x.Cijena).ToList(), NacinOtpremeId = Model.NacinOtpremeId, NacinPlacanja = Model.NacinPlacanja }; if (VM.Stavke.Count == 0) { return(RedirectToAction("Stavke")); } var UneseniPodaci = Model?.Podaci; VM.Podaci = new PotvrdaNarudzbeVM.KorisnickiPodaci { AdresaStanovanja = UneseniPodaci?.AdresaStanovanja ?? Korisnik.AdresaStanovanja, BrojTelefona = UneseniPodaci?.BrojTelefona ?? Korisnik.BrojTelefona, Država = UneseniPodaci?.Država ?? "", Email = UneseniPodaci?.Email ?? Korisnik.Email, Grad = UneseniPodaci?.Grad ?? Korisnik.Grad.Naziv, Ime = UneseniPodaci?.Ime ?? Korisnik.Ime, Prezime = UneseniPodaci?.Prezime ?? Korisnik.Prezime, Pokrajina = UneseniPodaci?.Pokrajina ?? "", PostanskiKod = UneseniPodaci?.PostanskiKod ?? "" }; VM.BrojKupljenihProizvoda = 0; foreach (var stavka in VM.Stavke) { double cijena = 0; if (stavka.Bicikl != null) { cijena = stavka.Bicikl.Cijena.Value; } else if (stavka.Oprema != null) { cijena = stavka.Oprema.Cijena; } else if (stavka.Dio != null) { cijena = stavka.Dio.Cijena; } VM.BrojKupljenihProizvoda++; VM.UkupnoProizvodi += cijena * stavka.Kolicina; } double stopa_poreza = 17.0; VM.Postarina = 0.0; if (VM.NacinOtpremeId != 0) { VM.Postarina = VM.NaciniOtpreme.Where(x => x.NacinOtpremeId == VM.NacinOtpremeId).Single()?.Cijena ?? 0.0; } VM.UkupniIznos = VM.UkupnoProizvodi; VM.Osnovica = VM.UkupniIznos / (1 + stopa_poreza / 100); VM.UkupnoPoreza = VM.UkupniIznos - VM.Osnovica; VM.UkupniIznos += VM.Postarina; if (Request.Method == "POST") { var lista_rezervisanih_dijelova = new List <RezervacijaProdajaDio>(); var lista_rezervisanih_bicikala = new List <RezervacijaProdajaBicikla>(); var lista_rezervisane_opreme = new List <RezervacijaProdajaOprema>(); try { // Bicikla foreach (var naruceno_biciklo in VM.Stavke.Where(x => x.BiciklId != null).ToList()) { var bicikl_stanja = db.BiciklStanje .Where(x => x.BiciklId == naruceno_biciklo.BiciklId) .Where(x => x.Aktivan == true) .Where(x => x.Kolicina > 0) .ToList(); if (bicikl_stanja.Sum(x => x.Kolicina) < naruceno_biciklo.Kolicina) { throw new Exception("Naručeno biciklo " + naruceno_biciklo.Bicikl.PuniNaziv + " nije dostupno u traženoj kolicini! Da bi ste nastavili narudžbu, uklonite proizvod iz košarice."); } var trazena_kolicina = naruceno_biciklo.Kolicina; foreach (var bicikl_na_stanju in bicikl_stanja) { var dostupna_kolicina = Math.Min(trazena_kolicina, bicikl_na_stanju.Kolicina); bicikl_na_stanju.Kolicina -= dostupna_kolicina; trazena_kolicina -= dostupna_kolicina; for (int i = 0; i < dostupna_kolicina; i++) { lista_rezervisanih_bicikala.Add(new RezervacijaProdajaBicikla { BiciklStanjeId = bicikl_na_stanju.BiciklStanjeId, }); } if (trazena_kolicina == 0) { break; } } } // Dijelovi foreach (var naruceno_dio in VM.Stavke.Where(x => x.DioId != null).ToList()) { var dio_stanja = db.DioStanje .Where(x => x.DioId == naruceno_dio.DioId) .Where(x => x.Aktivan == true) .Where(x => x.KupacId == null) .Take(naruceno_dio.Kolicina) .ToList(); if (dio_stanja.Count < naruceno_dio.Kolicina) { throw new Exception("Naručeno dio " + naruceno_dio.Dio.Naziv + " nije dostupno u traženoj kolicini! Da bi ste nastavili narudžbu, uklonite proizvod iz košarice."); } foreach (var dio_na_stanju in dio_stanja) { lista_rezervisanih_dijelova.Add(new RezervacijaProdajaDio { DioStanjeId = dio_na_stanju.DioStanjeId }); dio_na_stanju.Aktivan = false; dio_na_stanju.KupacId = Klijent.Id; } } // Oprema foreach (var narucena_oprema in VM.Stavke.Where(x => x.OpremaId != null).ToList()) { var oprema_stanja = db.OpremaStanje .Where(x => x.OpremaId == narucena_oprema.OpremaId) .Where(x => x.Aktivan == true) .Where(x => x.KupacId == null) .Take(narucena_oprema.Kolicina) .ToList(); if (oprema_stanja.Count < narucena_oprema.Kolicina) { throw new Exception("Naručena oprema " + narucena_oprema.Oprema.Naziv + " nije dostupna u traženoj kolicini! Da bi ste nastavili narudžbu, uklonite proizvod iz košarice."); } foreach (var oprema_na_stanju in oprema_stanja) { lista_rezervisane_opreme.Add(new RezervacijaProdajaOprema { OpremaStanjeId = oprema_na_stanju.OpremaStanjeId }); oprema_na_stanju.Aktivan = false; oprema_na_stanju.KupacId = Klijent.Id; } } } catch (Exception ex) { TempData["error_message"] = ex.Message; if (Request.Headers["X-Requested-With"] == "XMLHttpRequest") { return(PartialView(VM)); } return(View(VM)); } Rezervacija narudzba = new Rezervacija { AdresaStanovanja = VM.Podaci.AdresaStanovanja, BrojTelefona = VM.Podaci.BrojTelefona, Država = VM.Podaci.Država, Email = VM.Podaci.Email, Grad = VM.Podaci.Grad, Ime = VM.Podaci.Ime, Prezime = VM.Podaci.Prezime, Pokrajina = VM.Podaci.Pokrajina, PostanskiKod = VM.Podaci.PostanskiKod, DatumRezervacije = DateTime.Now, KlijentId = Klijent.Id, NacinOtpremeId = Model.NacinOtpremeId, NacinPlacanja = Model.NacinPlacanja, Osnovica = VM.Osnovica, Postarina = VM.Postarina, UkupniIznos = VM.UkupniIznos, UkupnoPoreza = VM.UkupnoPoreza, UkupnoProizvodi = VM.UkupnoProizvodi, RezervacijaProdajaBicikla = lista_rezervisanih_bicikala, RezervacijaProdajaDio = lista_rezervisanih_dijelova, RezervacijaProdajaOprema = lista_rezervisane_opreme, StanjeRezervacije = StanjeRezervacije.ekanje_uplate }; if (narudzba.NacinOtpremeId == 0) { narudzba.NacinOtpremeId = db.NacinOtpreme .Where(x => x.IsDeleted == false).First(x => x.Cijena == 0).NacinOtpremeId; } db.Rezervacija.Add(narudzba); db.SaveChanges(); var korpa_stavke = db.KorpaStavka.Where(x => x.KlijentId == Klijent.Id).ToList(); foreach (var item in korpa_stavke) { db.KorpaStavka.Remove(item); } db.SaveChanges(); if (VM.NacinPlacanja == "online") { return(RedirectToAction("OnlineUplata", new { narudzba.RezervacijaId })); } else { var zaposlenici = db.Zaposlenik.Where(x => x.Korisnik.Aktivan == true).ToList(); foreach (var zaposlenik in zaposlenici) { var notifikacija = new Notifikacija { ZaposlenikId = zaposlenik.Id, Tip = TipNotifikacije.Nova_Narudzba, Rezervacija = narudzba, DatumVrijeme = DateTime.Now }; db.Notifikacija.Add(notifikacija); } db.SaveChanges(); return(RedirectToAction("KrajNarudzbe")); } } else { if (Request.Headers["X-Requested-With"] == "XMLHttpRequest") { return(PartialView(VM)); } return(View(VM)); } }