public override async Task <IHttpActionResult> Post([FromBody] IssueStatusPostModel model) { if (model.StatusBeschrijving == IssueStatusBeschrijving.InBehandeling.ToString() || model.StatusBeschrijving == IssueStatusBeschrijving.ExtraInfo.ToString()) { var isssue = await _issueReader.GetById(model.IssueId, nameof(Issue.IssueStatussen)); if (isssue == null) { return(NotFound()); } var lastStatus = isssue.IssueStatussen.OrderBy(x => x.CreationDate).LastOrDefault(); if (lastStatus.StatusBeschrijving == IssueStatusBeschrijving.ExtraInfo) { model.SolverId = lastStatus.SolverId; } else { var user = await _gebruikerReader.Filter(g => g.Email == User.Identity.Name); if (user == null || user.FirstOrDefault() == null) { return(Unauthorized()); } model.SolverId = user.FirstOrDefault().Id; } } return(await base.Post(model)); }
public async Task <IHttpActionResult> GetPossibleStatussen(int issueId) { try { var issue = await _issueReader.GetById(issueId, nameof(Issue.IssueStatussen)); if (issue == null) { return(NotFound()); } IssueStatus status = issue.IssueStatussen.OrderByDescending(i => i.CreationDate).FirstOrDefault(); if (status == null) { return(Ok(IssueStatusBeschrijving.Nieuw)); } //Huidige rol bekijken var rol = (await _gebruikerReader.Filter(g => g.Email == User.Identity.Name)).FirstOrDefault()?.Rol; if (rol == null) { return(NotFound()); } List <IssueStatusBeschrijving> possibleStatussen = new List <IssueStatusBeschrijving>(); switch (status.StatusBeschrijving) { case IssueStatusBeschrijving.Nieuw: if (CheckRole(rol, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.Toegewezen); } if (CheckRole(rol, Rol.Gebruiker, Rol.Manager, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.Canceled); } break; case IssueStatusBeschrijving.Toegewezen: if (CheckRole(rol, Rol.Solver, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.InBehandeling); } if (CheckRole(rol, Rol.Gebruiker, Rol.Manager)) { possibleStatussen.Add(IssueStatusBeschrijving.Canceled); } break; case IssueStatusBeschrijving.InBehandeling: if (CheckRole(rol, Rol.Solver, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.Opgelost); } if (CheckRole(rol, Rol.Solver, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.ExtraInfo); } if (CheckRole(rol, Rol.Solver, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.Geweigerd); } if (CheckRole(rol, Rol.Gebruiker, Rol.Manager)) { possibleStatussen.Add(IssueStatusBeschrijving.Canceled); } break; case IssueStatusBeschrijving.Opgelost: if (CheckRole(rol, Rol.Gebruiker, Rol.Manager)) { possibleStatussen.Add(IssueStatusBeschrijving.Afgesloten); } if (CheckRole(rol, Rol.Gebruiker, Rol.Manager)) { possibleStatussen.Add(IssueStatusBeschrijving.Canceled); } break; case IssueStatusBeschrijving.ExtraInfo: if (CheckRole(rol, Rol.Gebruiker, Rol.Manager)) { possibleStatussen.Add(IssueStatusBeschrijving.InBehandeling); } if (CheckRole(rol, Rol.Gebruiker, Rol.Manager)) { possibleStatussen.Add(IssueStatusBeschrijving.Canceled); } break; case IssueStatusBeschrijving.Geweigerd: if (CheckRole(rol, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.Toegewezen); } if (CheckRole(rol, Rol.Gebruiker, Rol.Manager, Rol.Dispatcher)) { possibleStatussen.Add(IssueStatusBeschrijving.Canceled); } break; case IssueStatusBeschrijving.Afgesloten: case IssueStatusBeschrijving.Canceled: break; default: break; } return(Ok(possibleStatussen.Select(ps => ps.ToString()))); } catch (Exception ex) { return(InternalServerError(ex)); } }