Exemple #1
0
        public List <Model.Bicikl> Get(BiciklSearchRequest request)
        {
            var query = _context.Bicikl.AsQueryable();


            query = query.Include(x => x.Boja)
                    .Include(x => x.Model.MaterijalOkvira)
                    .Include(x => x.Model.Proizvodjac)
                    .Include(x => x.VelicinaOkvira)
                    .Include(x => x.StarosnaGrupa);

            query = query.Where(x => x.BiciklStanje.Where(y => y.Aktivan).Any(y => y.Kolicina > 0))
                    .Where(x => x.Aktivan);

            #region Filteri

            if (request.Stanje != null && request.Stanje.Count != 0)
            {
                var stanja = new List <Data.EntityModels.Stanje>();
                foreach (var item in request.Stanje)
                {
                    stanja.Add((Data.EntityModels.Stanje)item);
                }
                query = query.Where(x => stanja.Contains(x.Stanje));
            }
            else
            {
                if (request.SamoIznajmljivanje)
                {
                    query = query.Where(x => x.Stanje == Data.EntityModels.Stanje.Korišteno);
                }
                else
                {
                    query = query.Where(x => x.Stanje == Data.EntityModels.Stanje.Novo || x.Stanje == Data.EntityModels.Stanje.Polovno);
                }
            }

            if (request.SpolBicikla != null && request.SpolBicikla.Count != 0)
            {
                var spolovi = new List <Data.EntityModels.SpolBicikl>();
                foreach (var item in request.SpolBicikla)
                {
                    spolovi.Add((Data.EntityModels.SpolBicikl)item);
                }
                query = query.Where(x => spolovi.Contains(x.Model.SpolBicikl));
            }


            if (request.ModelId != 0)
            {
                query = query.Where(x => x.ModelId == request.ModelId);
            }

            if (!string.IsNullOrEmpty(request.VelicinaOkvira))
            {
                query = query.Where(x => x.VelicinaOkvira.Naziv == request.VelicinaOkvira);
            }

            if (request.VelicinaOkviraId != null && request.VelicinaOkviraId.Count != 0)
            {
                query = query.Where(x => request.VelicinaOkviraId.Contains(x.VelicinaOkviraId));
            }

            if (request.ProizvodjacId != null && request.ProizvodjacId.Count != 0)
            {
                query = query.Where(x => request.ProizvodjacId.Contains(x.Model.ProizvodjacId));
            }

            if (request.StarosnaGrupaId != null && request.StarosnaGrupaId.Count != 0)
            {
                query = query.Where(x => request.StarosnaGrupaId.Contains(x.StarosnaGrupaId));
            }

            if (request.BojaId != null && request.BojaId.Count != 0)
            {
                query = query.Where(x => request.BojaId.Contains(x.BojaId));
            }

            if (request.Brzina != null && request.Brzina.Count != 0)
            {
                query = query.Where(x => request.Brzina.Contains(x.Model.Brzina));
            }

            if (request.NoznaKocnica != null)
            {
                if (request.NoznaKocnica == 0)
                {
                    query = query.Where(x => x.NoznaKocnica == false);
                }
                else
                {
                    query = query.Where(x => x.NoznaKocnica == true);
                }
            }

            if (request.Suspenzija != null)
            {
                var suspenzija = (Data.EntityModels.Suspenzija)request.Suspenzija;
                query = query.Where(x => x.Model.Suspenzija == suspenzija);
            }

            #endregion

            if (request.Poredak != 0)
            {
                switch (request.Poredak)
                {
                case 1: query = query.OrderBy(x => x.Model.Naziv); break;

                case 2: query = query.OrderByDescending(x => x.Model.Naziv); break;

                case 3: query = query.OrderByDescending(x => x.Cijena); break;

                case 4: query = query.OrderBy(x => x.Cijena); break;
                }
            }

            var list = query.ToList();

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

            foreach (var item in model_list)
            {
                item.Ocjena = _context.OcjenaProizvoda.Where(x => x.BiciklId == item.BiciklId).Average(x => (double?)x.Ocjena) ?? 0.0;

                Data.EntityModels.Stanje ItemStanje = (Data.EntityModels.Stanje)item.Stanje;
                var SizesQuery = _context.Bicikl.Where(x => x.ModelId == item.ModelId)
                                 .Where(x => x.Stanje == ItemStanje)
                                 .Where(x => x.BiciklStanje.Where(y => y.Aktivan).Any(y => y.Kolicina > 0))
                                 .Where(x => x.Aktivan)
                                 .AsQueryable();

                if (request.SamoIznajmljivanje)
                {
                    SizesQuery = SizesQuery.Where(x => x.Stanje == Data.EntityModels.Stanje.Korišteno);
                }
                else
                {
                    SizesQuery = SizesQuery.Where(x => x.Stanje == Data.EntityModels.Stanje.Novo || x.Stanje == Data.EntityModels.Stanje.Polovno);
                }

                item.SizeVariants = SizesQuery.GroupBy(x => x.VelicinaOkvira.Naziv).Select(x => x.Key).ToList();
            }

            return(model_list);
        }
Exemple #2
0
        public bool OdaberiTermin(Model.Requests.BiciklOdaberiTerminRequest request)
        {
            int StanjeInt = (int)Stanje.Korišteno;

            Data.EntityModels.Stanje StanjeEnum = (Data.EntityModels.Stanje)StanjeInt;
            Bicikl Bicikl = _context.Bicikl
                            .Include(x => x.BiciklStanje)
                            .Where(x => x.BiciklId == request.Id)
                            .Where(x => x.Stanje == StanjeEnum)
                            .FirstOrDefault();

            if (Bicikl == null)
            {
                throw new UserException("Biciklo nije pronađeno.");
            }

            if (request.DatumPreuzimanja.Date < DateTime.Now.Date || request.DatumPreuzimanja.Date > request.DatumVracanja.Date)
            {
                throw new UserException("Forma nije ispravno popunjena.");
            }

            var Klijent = korisnikService.GetCurrentUser().Klijent;

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

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

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

            if (request.Kolicina > ukupno_dostupno)
            {
                if (ukupno_dostupno == 0)
                {
                    throw new UserException("Nema dostupnih termina za odabrani dan ili vremenski opseg.");
                }

                throw new UserException("Biciklo nije dostupno u traženoj količini za odabrani vremenski opseg.");
            }

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

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

            return(true);
        }