Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
            }
        }