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); }
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); }
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); }
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); }
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); }
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."); }