public IActionResult VratiSveZahtjeve([FromQuery] ListaZahtjevaRequestModel model) { var result = zahtjevService.VratiSveZahtjeve(model); return(Convert(result)); }
public ServiceResult <ZahtjevListModel> VratiSveZahtjeve(ListaZahtjevaRequestModel model) { //var securityLevel = new SecurityLevel(); var trenutni = authService.TrenutniKorisnik(); //var ulopga = trenutni.TrenutnaUloga.Naziv; var query = Enumerable.Empty <Zahtjev>().AsQueryable(); //var query = new IQueryable<Zahtjev>(); if (trenutni.TrenutnaUloga.VrijednostUAplikaciji == (int)Uloga.Administrator) { query = context.Zahtjevi.Where(z => !z.IsDeleted) .AsQueryable(); } else if (trenutni.TrenutnaUloga.VrijednostUAplikaciji == (int)Uloga.Moderator) { var ulogaId = context.Uloge.Where(a => a.VrijednostUAplikaciji == (int)Uloga.Moderator).Select(a => a.Id).FirstOrDefault(); var korisnikUlogaId = context.KorisnikUloge.Where(a => a.KorisnickoIme == trenutni.KorisnickoIme && a.UlogaId == ulogaId).Select(a => a.KorisnikUlogaId).FirstOrDefault(); var projekti = context.KorisnikProjekti.Where(a => a.KorisnikUlogaId == korisnikUlogaId).Select(a => a.ProjekatId).ToList(); query = context.Zahtjevi.Where(a => projekti.Contains(a.ProjekatId) && !a.IsDeleted).AsQueryable(); } else if (trenutni.TrenutnaUloga.VrijednostUAplikaciji == (int)Uloga.Support) { var kategorije = context.KorisnikKategorije.Where(a => a.KorisnickoIme == trenutni.KorisnickoIme).Select(a => a.ZahtjevKategorijaId).ToList(); query = context.Zahtjevi.Where(a => kategorije.Contains(a.ZahtjevKategorijaId) && !a.IsDeleted).AsQueryable(); } else if (trenutni.TrenutnaUloga.VrijednostUAplikaciji == (int)Uloga.TaskUser) { query = context.Zahtjevi.Where(a => a.CreatedBy == trenutni.KorisnickoIme && !a.IsDeleted).AsQueryable(); } //query = Secure(query, securityLevel); //filtriranje po vremenu if (model.PrethodniBrojDana != null) { //ako je npr. PrethodniBrojDana 1, vraca sve zahtjeve i za jucerasnji dan, a ne npr. u zadnja 24 sata DateTime dateTime = DateTime.Today; var pocetakProvjere = dateTime.AddDays(-(int)model.PrethodniBrojDana); query = query.Where(z => z.DatumKreiranja >= pocetakProvjere); } if (!model.Done) { query = query.Where(z => z.ZahtjevStatus.Oznaka != (int)OznakeStatusa.Done); } if (!model.InProgress) { query = query.Where(z => z.ZahtjevStatus.Oznaka != (int)OznakeStatusa.InProgress); } if (!model.ToDo) { query = query.Where(z => z.ZahtjevStatus.Oznaka != (int)OznakeStatusa.ToDo); } // uradi filtriranje po projektu if (model.ProjekatId != null) { query = query.Where(s => s.ProjekatId == model.ProjekatId); } // uradi filtriranje po dijelu projekta if (model.DioProjektaId != null) { query = query.Where(s => s.ZahtjevKategorija.DioProjektaId == model.DioProjektaId); } // uradi filtriranje po kategoriji zahtjeva if (model.KategorijaId != null) { query = query.Where(s => s.ZahtjevKategorijaId == model.KategorijaId); } // uradi filtriranje po tipu zahtjeva if (model.TipId != null) { query = query.Where(s => s.ZahtjevTipId == model.TipId); } // uradi filtriranje po prioritetu zahtjeva if (model.PrioritetId != null) { query = query.Where(s => s.ZahtjevPrioritetId == model.PrioritetId); } // uradi filtriranje po statusu zahtjeva if (model.StatusId != null) { query = query.Where(s => s.ZahtjevStatusId == model.StatusId); } if (!String.IsNullOrWhiteSpace(model.Naziv)) { var lowerNaziv = model.Naziv.ToLower(); query = query.Where(s => s.Naziv.ToLower().Contains(lowerNaziv)); } // uradi filtriranje po opisu zahtjeva if (!String.IsNullOrWhiteSpace(model.Opis)) { var lowerOpis = model.Opis.ToLower(); query = query.Where(s => s.Opis.ToLower().Contains(lowerOpis)); } // uradi filtriranje po nazivu korisnika if (!String.IsNullOrWhiteSpace(model.CreatedBy)) { var lowerCreatedBy = model.CreatedBy.ToLower(); query = query.Where(s => s.CreatedBy.ToLower().Contains(lowerCreatedBy)); } var zahtjevi = query.ToZahtjevListModelItem().OrderByDescending(d => d.DatumKreiranja).OrderBy(a => a.ZahtjevStatus) .ToList(); if (zahtjevi == null) { return(NotFound()); } var total = zahtjevi.Count(); if (!model.Sve) { zahtjevi = zahtjevi.Skip(model.Page * model.Count - model.Count) .Take(model.Count).ToList(); } var result = new ZahtjevListModel { Items = zahtjevi, Page = model.Page, Total = total }; return(Ok(result)); }