Example #1
0
        public List <Rezervacija> Get(RezervacijaSearchRequest request)
        {
            var query = _context.Rezervacija
                        .Where(x => x.KlijentId == _korisnikService.GetCurrentUser().Klijent.Id);

            if (request.DatumOd.HasValue)
            {
                query = query.Where(x => x.DatumRezervacije.Date >= request.DatumOd.Value.Date);
            }
            if (request.DatumDo.HasValue)
            {
                query = query.Where(x => x.DatumRezervacije.Date <= request.DatumDo.Value.Date);
            }

            query = query
                    .OrderByDescending(x => x.RezervacijaId);

            var result = _mapper.Map <List <Model.Rezervacija> >(query.ToList());

            foreach (var item in result)
            {
                if (_context.RezervacijaIznajmljenaBicikla.Any(x => x.RezervacijaId == item.RezervacijaId))
                {
                    item.IsTerminRezervacija = true;
                }
                else if (_context.RezervacijaServis.Any(x => x.RezervacijaId == item.RezervacijaId))
                {
                    item.IsServisRezervacija = true;
                }
            }

            return(result);
        }
Example #2
0
        public List <DateTime> GetDaneBezDostupnihTermina(int Id, int Kolicina)
        {
            var rezervisani_termini = new List <DateTime>();

            var aktivne_rezervacije = _context.RezervacijaIznajmljenaBicikla
                                      .Where(x => x.BiciklStanje.BiciklId == Id)
                                      .Where(x => x.DatumPreuzimanja.Date >= DateTime.Now.Date || x.DatumVracanja.Date >= DateTime.Now.Date)
                                      .ToList();

            Dictionary <DateTime, int> broj_rezervacija_po_danima = new Dictionary <DateTime, int>();

            foreach (var item in aktivne_rezervacije)
            {
                foreach (DateTime date in DateTimeHelper.EachDay(item.DatumPreuzimanja, item.DatumVracanja))
                {
                    if (broj_rezervacija_po_danima.ContainsKey(date))
                    {
                        broj_rezervacija_po_danima[date]++;
                    }
                    else
                    {
                        broj_rezervacija_po_danima[date] = 1;
                    }
                }
            }

            var termini_u_kosarici = _context.TerminStavka.Where(x => x.KlijentId == korisnikService.GetCurrentUser().Klijent.Id&& x.BiciklId == Id).ToList();

            foreach (var termin_u_kosarici in termini_u_kosarici)
            {
                foreach (DateTime date in DateTimeHelper.EachDay(termin_u_kosarici.DatumPreuzimanja, termin_u_kosarici.DatumVracanja))
                {
                    if (broj_rezervacija_po_danima.ContainsKey(date))
                    {
                        broj_rezervacija_po_danima[date] += termin_u_kosarici.Kolicina;
                    }
                    else
                    {
                        broj_rezervacija_po_danima[date] = termin_u_kosarici.Kolicina;
                    }
                }
            }

            var ukupno_u_skladistu = _context.BiciklStanje.Where(x => x.BiciklId == Id && x.Aktivan == true).Sum(x => x.Kolicina);

            foreach (var item in broj_rezervacija_po_danima)
            {
                DateTime date = item.Key;
                int      broj_rezervacija_za_dan = item.Value;
                int      preostalo_bicikala      = ukupno_u_skladistu - broj_rezervacija_za_dan;

                if (preostalo_bicikala < Kolicina)
                {
                    rezervisani_termini.Add(date);
                }
            }

            return(rezervisani_termini);
        }
Example #3
0
        public List <TerminStavka> Get()
        {
            var query = _context.TerminStavka.AsQueryable();

            query = query.Include(x => x.Bicikl).ThenInclude(x => x.Model).ThenInclude(x => x.MaterijalOkvira)
                    .Include(x => x.Bicikl).ThenInclude(x => x.Model).ThenInclude(x => x.Proizvodjac)
                    .Include(x => x.Bicikl).ThenInclude(x => x.StarosnaGrupa)
                    .Include(x => x.Bicikl).ThenInclude(x => x.VelicinaOkvira)
                    .Include(x => x.Bicikl).ThenInclude(x => x.Boja)
                    .Where(x => x.KlijentId == _korisnikService.GetCurrentUser().Klijent.Id);

            var list = query.ToList();

            var model_list = _mapper.Map <List <Model.TerminStavka> >(list);

            return(model_list);
        }
Example #4
0
        public List <KorpaStavka> Get()
        {
            var query = _context.KorpaStavka.AsQueryable();

            query = query.Include(x => x.Bicikl).ThenInclude(x => x.Model).ThenInclude(x => x.MaterijalOkvira)
                    .Include(x => x.Bicikl).ThenInclude(x => x.Model).ThenInclude(x => x.Proizvodjac)
                    .Include(x => x.Bicikl).ThenInclude(x => x.StarosnaGrupa)
                    .Include(x => x.Bicikl).ThenInclude(x => x.VelicinaOkvira)
                    .Include(x => x.Bicikl).ThenInclude(x => x.Boja)
                    .Include(x => x.Dio).ThenInclude(x => x.Proizvodjac)
                    .Include(x => x.Oprema).ThenInclude(x => x.Proizvodjac)
                    .Where(x => x.KlijentId == _korisnikService.GetCurrentUser().Klijent.Id);

            var list = query.ToList();

            var model_list = _mapper.Map <List <Model.KorpaStavka> >(list);

            foreach (var item in model_list)
            {
                if (item.Bicikl != null)
                {
                    item.Ocjena          = _context.OcjenaProizvoda.Where(x => x.BiciklId == item.BiciklId).Average(x => (double?)x.Ocjena) ?? 0.0;
                    item.Bicikl.Kolicina = _context.BiciklStanje.Where(x => x.BiciklId == item.BiciklId && x.Aktivan).Sum(x => x.Kolicina);
                }
                else if (item.Dio != null)
                {
                    item.Ocjena       = _context.OcjenaProizvoda.Where(x => x.DioId == item.DioId).Average(x => (double?)x.Ocjena) ?? 0.0;
                    item.Dio.Kolicina = _context.DioStanje.Where(x => x.DioId == item.DioId && x.Aktivan && x.KupacId == null).Count();
                }
                else if (item.Oprema != null)
                {
                    item.Ocjena          = _context.OcjenaProizvoda.Where(x => x.OpremaId == item.OpremaId).Average(x => (double?)x.Ocjena) ?? 0.0;
                    item.Oprema.Kolicina = _context.OpremaStanje.Where(x => x.OpremaId == item.OpremaId && x.Aktivan && x.KupacId == null).Count();
                }
            }

            return(model_list);
        }
Example #5
0
        public List <string> DostupniTermini(ServisOdaberiTerminRequest request)
        {
            var Klijent       = _korisnikService.GetCurrentUser().Klijent;
            var lista_termina = new List <string>();

            Data.EntityModels.Servis Servis = _context.Servis
                                              .Where(x => x.IsDeleted == false)
                                              .Where(x => x.ServisId == request.Id).FirstOrDefault();

            Data.EntityModels.RadnoVrijeme radnoVrijeme = _context.RadnoVrijeme
                                                          .Where(x => x.IsDeleted == false).Where(x => x.DanUSedmici == request.Datum.DayOfWeek).FirstOrDefault();

            if (radnoVrijeme == null || Servis == null)
            {
                return(lista_termina);
            }

            var rezervacije_za_dan = _context.RezervacijaServis.Where(x => x.DatumServisiranja.Date == request.Datum.Date).Include(x => x.Servis).ToList();

            int pocetak_minute = radnoVrijeme.Pocetak.Hours * 60 + radnoVrijeme.Pocetak.Minutes;
            int kraj_minute    = radnoVrijeme.Kraj.Hours * 60 + radnoVrijeme.Kraj.Minutes;

            for (int pocetak_termina = pocetak_minute; pocetak_termina < kraj_minute; pocetak_termina += 30)
            {
                int termin_sati   = pocetak_termina / 60;
                int termin_minute = pocetak_termina % 60;

                int kraj_termina = pocetak_termina + (int)(Servis.Trajanje * 60) * request.Kolicina;

                string sati_string   = termin_sati.ToString().PadLeft(2, '0');
                string minute_string = termin_minute.ToString().PadLeft(2, '0');

                bool kolizija = false;
                if (pocetak_termina + Servis.Trajanje * 60 > kraj_minute)
                {
                    kolizija = true;
                }
                else if (kraj_termina > kraj_minute)
                {
                    kolizija = true;
                }

                foreach (var rezervacija in rezervacije_za_dan)
                {
                    int pocetak_rezervacije = rezervacija.DatumServisiranja.Hour * 60 + rezervacija.DatumServisiranja.Minute;
                    int kraj_rezervacije    = pocetak_rezervacije + (int)(rezervacija.Servis.Trajanje * 60);
                    if (pocetak_termina >= pocetak_rezervacije && pocetak_termina < kraj_rezervacije)
                    {
                        kolizija = true;
                    }

                    else if (kraj_termina > pocetak_rezervacije && kraj_termina <= kraj_rezervacije)
                    {
                        kolizija = true;
                    }
                }

                if (!kolizija)
                {
                    lista_termina.Add(sati_string + ":" + minute_string);
                }
            }

            return(lista_termina);
        }
Example #6
0
        public bool OcijeniProizvod(OcjenaKorisnikaInsertRequest request)
        {
            var Klijent = _korisnikService.GetCurrentUser().Klijent;

            if (request.Ocjena < 1 || request.Ocjena > 5)
            {
                throw new UserException("Neispravna ocjena.");
            }

            var postojeca_ocjena_qry = _context.OcjenaProizvoda.Where(x => x.KlijentId == Klijent.Id);
            var ocjena_proizvoda     = new Data.EntityModels.OcjenaProizvoda
            {
                KlijentId   = Klijent.Id,
                Ocjena      = request.Ocjena,
                DatumOcjene = DateTime.Now
            };

            bool kupio_bicikl = false, kupio_dio = false, kupio_opremu = false;

            if (request.BiciklId != null)
            {
                kupio_bicikl = _context.RezervacijaProdajaBicikla.Where(x => x.BiciklStanje.BiciklId == request.BiciklId)
                               .Where(x => x.Rezervacija.KlijentId == Klijent.Id)
                               .Any();
                if (!kupio_bicikl)
                {
                    kupio_bicikl = _context.RezervacijaIznajmljenaBicikla.Where(x => x.BiciklStanje.BiciklId == request.BiciklId)
                                   .Where(x => x.Rezervacija.KlijentId == Klijent.Id)
                                   .Any();
                }

                postojeca_ocjena_qry      = postojeca_ocjena_qry.Where(x => x.BiciklId == request.BiciklId);
                ocjena_proizvoda.BiciklId = request.BiciklId;
            }
            else if (request.DioId != null)
            {
                kupio_dio = _context.RezervacijaProdajaDio.Where(x => x.DioStanje.DioId == request.DioId)
                            .Where(x => x.Rezervacija.KlijentId == Klijent.Id)
                            .Any();

                postojeca_ocjena_qry   = postojeca_ocjena_qry.Where(x => x.DioId == request.DioId);
                ocjena_proizvoda.DioId = request.DioId;
            }

            else if (request.OpremaId != null)
            {
                kupio_opremu = _context.RezervacijaProdajaOprema.Where(x => x.OpremaStanje.OpremaId == request.OpremaId)
                               .Where(x => x.Rezervacija.KlijentId == Klijent.Id)
                               .Any();

                postojeca_ocjena_qry      = postojeca_ocjena_qry.Where(x => x.OpremaId == request.OpremaId);
                ocjena_proizvoda.OpremaId = request.OpremaId;
            }

            if (kupio_bicikl || kupio_dio || kupio_opremu)
            {
                var postojeca_ocjena = postojeca_ocjena_qry.FirstOrDefault();
                if (postojeca_ocjena != null)
                {
                    postojeca_ocjena.Ocjena      = request.Ocjena;
                    postojeca_ocjena.DatumOcjene = DateTime.Now;
                }
                else
                {
                    _context.OcjenaProizvoda.Add(ocjena_proizvoda);
                }

                _context.SaveChanges();
                return(true);
            }
            throw new UserException("Ne možete ocijeniti proizvod koji niste kupili.");
        }