예제 #1
0
        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));
            }
        }