Exemplo n.º 1
0
        public IActionResult OdaberiTermin(int Id)
        {
            IznajmiBiciklVM VM = new IznajmiBiciklVM
            {
                Bicikl = db.Bicikl
                         .Include(x => x.Model).ThenInclude(x => x.MaterijalOkvira)
                         .Include(x => x.Model).ThenInclude(x => x.Proizvodjac)
                         .Include(x => x.StarosnaGrupa)
                         .Include(x => x.VelicinaOkvira)
                         .Include(x => x.Boja)
                         .Include(x => x.BiciklStanje)
                         .Where(x => x.BiciklId == Id && x.Stanje == Stanje.Korišteno)
                         .FirstOrDefault()
            };

            if (VM.Bicikl == null)
            {
                return(Redirect("/Iznajmljivanje"));
            }

            var Klijent = HttpContext.GetLogiraniKorisnik().Klijent;

            var ukupno_u_skladistu = VM.Bicikl.BiciklStanje.Where(x => x.Aktivan == true).Sum(x => x.Kolicina);

            VM.KolicinaNaStanju = ukupno_u_skladistu;

            int Kolicina = 1;

            VM.RezervisaniTermini = GetDaneBezDostupnihTermina(Id, Klijent.Id, Kolicina, ukupno_u_skladistu);

            return(View(VM));
        }
Exemplo n.º 2
0
        public StatusCodeResult OdaberiTermin(IznajmiBiciklVM VM)
        {
            Bicikl Bicikl = db.Bicikl
                            .Include(x => x.BiciklStanje)
                            .Where(x => x.BiciklId == VM.Id)
                            .Where(x => x.Stanje == Stanje.Korišteno)
                            .FirstOrDefault();

            if (Bicikl == null)
            {
                return(new NotFoundResult());// 404
            }

            if (!ModelState.IsValid || VM.DatumPreuzimanja.Date < DateTime.Now.Date || VM.DatumPreuzimanja.Date > VM.DatumVracanja.Date)
            {
                return(new UnprocessableEntityResult()); // 422
            }

            var Klijent = HttpContext.GetLogiraniKorisnik().Klijent;

            int ukupno_u_skladistu = Bicikl.BiciklStanje.Where(x => x.Aktivan == true).Sum(x => x.Kolicina);
            int ukupno_u_kosarici  = db.TerminStavka.Where(x => x.KlijentId == Klijent.Id && x.BiciklId == VM.Id)
                                     .Where(x =>
                                            (
                                                (x.DatumPreuzimanja.Date >= VM.DatumPreuzimanja.Date && x.DatumPreuzimanja.Date <= VM.DatumVracanja.Date) ||
                                                (x.DatumVracanja.Date >= VM.DatumPreuzimanja.Date && x.DatumVracanja.Date <= VM.DatumVracanja.Date)
                                            )
                                            ||
                                            (
                                                (VM.DatumPreuzimanja.Date >= x.DatumPreuzimanja.Date && VM.DatumPreuzimanja.Date <= x.DatumVracanja.Date) ||
                                                (VM.DatumVracanja.Date >= x.DatumPreuzimanja.Date && VM.DatumVracanja.Date <= x.DatumVracanja.Date)
                                            ))
                                     .Sum(x => x.Kolicina);

            var broj_termina_kolizija = db.RezervacijaIznajmljenaBicikla
                                        .Where(x => x.BiciklStanje.BiciklId == VM.Id)
                                        .Where(x =>
                                               (
                                                   (x.DatumPreuzimanja.Date >= VM.DatumPreuzimanja.Date && x.DatumPreuzimanja.Date <= VM.DatumVracanja.Date) ||
                                                   (x.DatumVracanja.Date >= VM.DatumPreuzimanja.Date && x.DatumVracanja.Date <= VM.DatumVracanja.Date)
                                               )
                                               ||
                                               (
                                                   (VM.DatumPreuzimanja.Date >= x.DatumPreuzimanja.Date && VM.DatumPreuzimanja.Date <= x.DatumVracanja.Date) ||
                                                   (VM.DatumVracanja.Date >= x.DatumPreuzimanja.Date && VM.DatumVracanja.Date <= x.DatumVracanja.Date)
                                               )
                                               )
                                        .ToList();

            int ukupno_dostupno = ukupno_u_skladistu - ukupno_u_kosarici - broj_termina_kolizija.Count();

            if (VM.Kolicina > ukupno_dostupno)
            {
                if (ukupno_dostupno == 0)
                {
                    return(new BadRequestResult()); // 400
                }
                return(new StatusCodeResult(417));
            }

            var PostojecaStvaka = db.TerminStavka.Where(x => x.KlijentId == Klijent.Id && x.BiciklId == VM.Id && x.DatumPreuzimanja == VM.DatumPreuzimanja && x.DatumVracanja == VM.DatumVracanja).FirstOrDefault();

            if (PostojecaStvaka != null)
            {
                PostojecaStvaka.Kolicina += VM.Kolicina;
            }
            else
            {
                db.TerminStavka.Add(new TerminStavka
                {
                    KlijentId        = Klijent.Id,
                    BiciklId         = VM.Id,
                    Kolicina         = VM.Kolicina,
                    DatumPreuzimanja = VM.DatumPreuzimanja,
                    DatumVracanja    = VM.DatumVracanja.AddHours(23).AddMinutes(59).AddSeconds(59)
                });
            }
            db.SaveChanges();

            return(new OkResult()); // 200
        }