Exemple #1
0
        private async Task <string> CreateAttachmentAsync(RequestCreationBindingModel model, Request request)
        {
            string failedAttachments = string.Empty;

            foreach (var attachment in model.Attachments)
            {
                var extension           = attachment.FileName.Split('.').Last();
                var isAllowedFileFormat = FileFormatValidator.IsValidFormat(extension);

                if (!isAllowedFileFormat)
                {
                    failedAttachments += Environment.NewLine;
                    failedAttachments += $"{attachment.FileName} failed to upload because the file format is forbidden.";
                    continue;
                }
                string currentDirectory = Directory.GetCurrentDirectory();
                string destination      = currentDirectory + "/Files" + "/Requests/" + model.Subject;
                Directory.CreateDirectory(destination);
                string path       = Path.Combine(destination, attachment.FileName);
                var    fileStream = new FileStream(path, FileMode.Create);
                using (fileStream)
                {
                    await attachment.CopyToAsync(fileStream);
                }
                this.dbContext.RequestAttachments.Add(new RequestAttachment
                {
                    FileName   = attachment.FileName,
                    PathToFile = path,
                    RequestId  = request.Id
                });
            }
            return(failedAttachments);
        }
Exemple #2
0
        public IActionResult Create()
        {
            var requestBindingModel = new RequestCreationBindingModel();
            var requestCategories   = dbContext.RequestCategories.ToArray();

            foreach (var requestCategory in requestCategories)
            {
                requestBindingModel.Categories.Add(new SelectListItem
                {
                    Text  = requestCategory.Name,
                    Value = requestCategory.Id.ToString()
                });
            }

            return(this.View(requestBindingModel));
        }
Exemple #3
0
        public async Task <IActionResult> Create(RequestCreationBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var request      = this.mapper.Map <Request>(model);
            var openStatusId = this.dbContext.RequestStatuses.FirstOrDefault(s => s.Name == "Open").Id;

            request.RequesterId = this.userManager.GetUserId(User);
            request.StatusId    = openStatusId;

            await this.requestService.AddAsync(request);

            string failedAttachments = string.Empty;

            if (model.Attachments != null)
            {
                failedAttachments = await CreateAttachmentAsync(model, request);
            }

            string message = "Request created successfully";

            if (failedAttachments != string.Empty)
            {
                message += failedAttachments;
            }

            await this.requestService.SaveChangesAsync();

            this.TempData.Put("__Message", new MessageModel()
            {
                Type    = MessageType.Success,
                Message = message
            });

            return(this.RedirectToAction("Details", new { id = request.Id.ToString() }));
        }
        public async Task <IActionResult> Create(RequestCreationBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var request = Mapper.Map <Request>(model);

            request.RequesterId = this.userManager.GetUserId(User);

            await this.requestService.AddAsync(request);

            if (model.Attachments != null)
            {
                string path = await fileUploader.CreateAttachmentAsync(model.Subject, model.Attachments, "Requests");

                ICollection <RequestAttachment> attachments = new List <RequestAttachment>();

                foreach (var attachment in model.Attachments)
                {
                    RequestAttachment requestAttachment = new RequestAttachment
                    {
                        FileName   = attachment.FileName,
                        PathToFile = Path.Combine(path, attachment.FileName),
                        RequestId  = request.Id
                    };
                    attachments.Add(requestAttachment);
                }

                await this.attachmentService.AddRangeAsync(attachments);
            }

            await this.requestService.SaveChangesAsync();

            this.alerter.AddMessage(MessageType.Success, "Request created successfully");

            return(this.RedirectToAction("Details", new { id = request.Id.ToString() }));
        }
        public void Create_AddsRequestToTheDatabase()
        {
            this.dbContext.RequestStatuses.Add(new RequestStatus
            {
                Id   = 1,
                Name = "Open"
            });

            this.dbContext.SaveChanges();

            var mockUserManager = TestsUserManager.GetUserManager();

            var controller = new RequestsController(this.dbContext, TestsAutoMapper.GetMapper(), mockUserManager.Object, requestService);

            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext
                {
                    User = new ClaimsPrincipal(new ClaimsIdentity(new[]
                    {
                        new Claim(ClaimTypes.Role, WebConstants.AdminRole)
                    }))
                }
            };

            var model = new RequestCreationBindingModel
            {
                Subject     = "Subject",
                Description = "Description"
            };

            var result = controller.Create(model);

            var lastRequest = this.dbContext.Requests.LastOrDefault();

            Assert.IsNotNull(lastRequest);
            Assert.IsTrue(lastRequest.Subject == model.Subject && lastRequest.Description == model.Description);
        }
Exemple #6
0
        public async Task <IActionResult> PostAsync(RequestCreationBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            string userId = this.userManager.GetUserId(User);

            var request = new Request
            {
                Subject     = model.Subject,
                Description = model.Description,
                CategoryId  = 1, // TODO CHANGE THIS
                RequesterId = userId,
            };

            await this.requestsService.AddAsync(request);

            await this.requestsService.SaveChangesAsync();

            return(CreatedAtAction(nameof(this.PostAsync), model));
        }