Example #1
0
        private IssueCreate convertToViewModel(IssueCreateDTO dto, IssueCreate viewModel = null)
        {
            IssueCreate converted = viewModel ?? new IssueCreate();

            converted.Description = dto.Description;
            converted.ProjectID   = dto.ProjectID;
            converted.Title       = dto.Title;
            converted.IssueID     = dto.IssueID == 0 ? converted.IssueID : dto.IssueID;

            return(converted);
        }
Example #2
0
        public ActionResult Create(IssueCreateDTO dto)
        {
            if (ModelState.IsValid)
            {
                string userID = User.Identity.GetUserId();
                Issue  issue  = null;
                if (!this.db.HasProjectAccess(dto.ProjectID, userID))
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.Forbidden));
                }

                if (dto.IssueID > 0)
                {
                    issue = this.db.Issues.Find(dto.IssueID);
                    if (issue == null ||
                        !this.db.HasProjectAccess(issue.ProjectID, userID) ||
                        (issue.ReporterID != userID && !this.db.HasProjectRole(issue.ProjectID, userID, Role.Manager))
                        )
                    {
                        return(new HttpStatusCodeResult(HttpStatusCode.Forbidden));
                    }
                }
                else
                {
                    issue             = new Issue();
                    issue.RaportDate  = DateTime.UtcNow;
                    issue.ReporterID  = userID;
                    issue.Status      = IssueStatus.Reported;
                    issue.IssueNumber = this.db.Issues.Where(i => i.ProjectID == dto.ProjectID).Count() + 1;
                }

                issue.ProjectID    = dto.ProjectID;
                issue.Description  = dto.Description;
                issue.LastModified = DateTime.UtcNow;
                issue.Title        = dto.Title;

                if (dto.IssueID == 0)
                {
                    db.Issues.Add(issue);
                }
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            else
            {
                IssueCreate viewModel = this.getCreateModel();
                viewModel = this.convertToViewModel(dto, viewModel);
                return(View(viewModel));
            }
        }
        /// <summary>
        /// Borrow a book if available
        /// </summary>
        /// <param name="issue">Issue details.</param>
        /// <param name="username">To whom will the book be issued.</param>
        /// <param name="bookId">Id of the book to borrow.</param>
        /// <returns>Null if book not found, true if borrowed, false if out of capacity</returns>
        public async Task <(bool?, IssueDetailDTO?)> Borrow(string username, Guid bookId, IssueCreateDTO issue)
        {
            var book = await _books.Find(x => x.Id == bookId).FirstOrDefaultAsync();

            if (book == null)
            {
                return(null, null);
            }
            var update = Builders <Book> .Update.Inc(x => x.Issued, 1);

            var result = await _books.UpdateOneAsync(x => x.Id == bookId && x.Issued < book.Quantity, update);

            if (result.ModifiedCount == 0)
            {
                return(false, null);
            }

            var entity = new Issue {
                Id = Guid.NewGuid(), IssuedTo = username
            };

            entity = _mapper.Map(issue, entity);
            entity = _mapper.Map(book, entity);
            await _issues.InsertOneAsync(entity);

            return(true, _mapper.Map <IssueDetailDTO>(entity));
        }