Beispiel #1
0
        public async Task <IActionResult> AssignStory([FromRoute] Guid organizationId, [FromRoute] Guid storyId,
                                                      [FromBody] AssignStoryInput input)
        {
            var story = await _storyService.AssignStory(_agencyOwner,
                                                        storyId, input);

            return(Ok(story));
        }
        public async Task <StoryResult> AssignStory(IOrganizationProjectManager pm, Guid storyId, AssignStoryInput input)
        {
            _logger.LogInformation(GetLogMessage("Project Manager {0}; Assigning Story: {1}"), pm.OrganizationId, storyId);

            var story = await Repository
                        .Queryable()
                        .Include(x => x.Project)
                        .ForOrganizationProjectManager(pm)
                        .Where(x => x.Id == storyId)
                        .FirstOrDefaultAsync();

            story.ContractorOrganizationId = input.ContractorId != null ? pm.OrganizationId : (Guid?)null;


            return(await AssignStory(story, input));
        }
        private async Task <StoryResult> AssignStory(Story story, AssignStoryInput input)
        {
            _logger.LogInformation(GetLogMessage("Story: {0}"), story.Id);

            var result = new StoryResult {
                StoryId = story.Id
            };

            var originalContractorId = story.ContractorId;

            story.ContractorId     = input.ContractorId;
            story.AssignedDateTime = DateTimeOffset.UtcNow;

            story.Updated     = DateTimeOffset.UtcNow;
            story.ObjectState = ObjectState.Modified;
            if (input.ContractorId.HasValue)
            {
                _logger.LogDebug(GetLogMessage("assign"));

                story.Status = StoryStatus.Assigned;
            }
            else
            {
                _logger.LogDebug(GetLogMessage("unassign"));


                switch (story.Project.Status)
                {
                case ProjectStatus.Pending:
                    story.Status = StoryStatus.Pending;
                    break;

                case ProjectStatus.Active:
                    story.Status = StoryStatus.Approved;
                    break;

                case ProjectStatus.Paused:
                    story.Status = StoryStatus.Pending;
                    break;

                case ProjectStatus.Ended:
                    story.Status = StoryStatus.Archived;
                    break;

                case ProjectStatus.Inactive:
                    story.Status = StoryStatus.Pending;
                    break;
                }
            }
            story.StatusTransitions.Add(new StoryStatusTransition()
            {
                Status      = story.Status,
                ObjectState = ObjectState.Added
            });


            var records = await Repository.UpdateAsync(story, true);

            _logger.LogDebug(GetLogMessage("{0} Records Updated"), records);

            if (records > 0)
            {
                result.Succeeded = true;

                if (originalContractorId != story.ContractorId && story.ContractorId.HasValue)
                {
                    await Task.Run(() => RaiseEvent(new StoryAssignedEvent()
                    {
                        StoryId = story.Id
                    }));
                }
            }

            return(result);
        }