Example #1
0
        public override async Task <IActionResult> PostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(View(this));
            }

            if (Id == 0) // new item
            {
                var issue = _mapper.Map <Issue>(this);
                issue.CreatedDate = DateTime.Now;

                _db.Issue.Add(issue);
                await _db.SaveChangesAsync();

                await SettleInsertAsync(issue);
            }
            else
            {
                var issue = await _db.Issue.SingleOrDefaultAsync(c => c.Id == Id);

                var originalIssue = new OriginalIssue(issue);

                _mapper.Map(this, issue);

                _db.Issue.Update(issue);
                await _db.SaveChangesAsync();

                await SettleUpdateAsync(originalIssue, issue);
            }

            return(LocalRedirect(Referer ?? "/issues"));
        }
Example #2
0
        private async Task SettleUpdateAsync(OriginalIssue original, Issue issue)
        {
            _cache.MergeIssue(issue);

            if (original.Type != issue.Type || original.Status != issue.Status || original.Priority != issue.Priority)
            {
                await _issueService.LogChangeHistoryAsync(issue);
            }

            if (original.AssigneeId != issue.AssigneeId)
            {
                await _rollup.RollupUserAsync(original.AssigneeId);

                await _rollup.RollupUserAsync(issue.AssigneeId);
            }
            if (original.ProjectId != issue.ProjectId)
            {
                await _rollup.RollupProjectAsync(original.ProjectId);

                await _rollup.RollupProjectAsync(issue.ProjectId);
            }
            if (original.OwnerId != issue.OwnerId)
            {
                await _rollup.RollupUserAsync(original.OwnerId);

                await _rollup.RollupUserAsync(issue.OwnerId);
            }
        }