public async Task <IActionResult> UpdateAsync(int id, [FromBody] InquiryDto input) { // Map. var inquiry = _mapper.Map <InquiryFull>(input); inquiry.Id = id; InquiryFull inquiry_existing = await _inquiryRepository.GetByIdAsync(id); if (inquiry_existing.Attribution.Creator == input.Reviewer) { throw new AuthorizationException(); } // Act. await _inquiryRepository.UpdateAsync(inquiry); // FUTURE: Does this make sense? // Only when this item was rejected can we move into // a pending state after update. if (inquiry.State.AuditStatus == AuditStatus.Rejected) { // Transition. inquiry.State.TransitionToPending(); // Act. await _inquiryRepository.SetAuditStatusAsync(inquiry.Id, inquiry); } // Return. return(NoContent()); }
public async Task <IActionResult> CreateAsync(int inquiryId, [FromBody] InquirySampleDto input, [FromServices] IGeocoderTranslation geocoderTranslation) { Address address = await geocoderTranslation.GetAddressIdAsync(input.Address); // Map. var inquirySample = _mapper.Map <InquirySample>(input); inquirySample.Address = address.Id; inquirySample.Inquiry = inquiryId; // Act. // FUTURE: Too much logic InquiryFull inquiry = await _inquiryRepository.GetByIdAsync(inquirySample.Inquiry); if (!inquiry.State.AllowWrite) { throw new EntityReadOnlyException(); } inquirySample = await _inquirySampleRepository.AddGetAsync(inquirySample); inquiry.State.TransitionToPending(); await _inquiryRepository.SetAuditStatusAsync(inquiry.Id, inquiry); // Map. var output = _mapper.Map <InquirySampleDto>(inquirySample); // Return. return(Ok(output)); }
public async Task <IActionResult> ResetAsync(int id) { // Act. InquiryFull inquiry = await _inquiryRepository.GetByIdAsync(id); // Transition. inquiry.State.TransitionToPending(); // Act. await _inquiryRepository.SetAuditStatusAsync(inquiry.Id, inquiry); // Return. return(NoContent()); }
public async Task <IActionResult> SetStatusRejectedAsync(int id, StatusChangeDto input) { // Act. InquiryFull inquiry = await _inquiryRepository.GetByIdAsync(id); Organization organization = await _organizationRepository.GetByIdAsync(_appContext.TenantId); User reviewer = await _userRepository.GetByIdAsync(inquiry.Attribution.Reviewer.Value); User creator = await _userRepository.GetByIdAsync(inquiry.Attribution.Creator); // Transition. inquiry.State.TransitionToRejected(); // Act. await _inquiryRepository.SetAuditStatusAsync(inquiry.Id, inquiry); string subject = $"FunderMaps - Rapportage afgekeurd"; object header = new { Title = subject, Preheader = "Rapportage is afgekeurd." }; string footer = "Dit bericht wordt verstuurd wanneer een rapportage is afgekeurd."; await _notifyService.NotifyAsync(new() { Recipients = new List <string> { creator.Email }, Subject = subject, Template = "InquiryRejected", Items = new Dictionary <string, object> { { "header", header }, { "footer", footer }, { "reviewer", reviewer.ToString() }, { "organization", organization.ToString() }, { "inquiry", inquiry }, { "message", input.Message }, { "redirect_link", $"{Request.Scheme}://{Request.Host}/inquiry/{inquiry.Id}" }, }, }); // Return. return(NoContent()); }
public async Task <IActionResult> SetStatusApprovedAsync(int id) { // Act. InquiryFull inquiry = await _inquiryRepository.GetByIdAsync(id); Organization organization = await _organizationRepository.GetByIdAsync(_appContext.TenantId); User reviewer = await _userRepository.GetByIdAsync(inquiry.Attribution.Reviewer.Value); User creator = await _userRepository.GetByIdAsync(inquiry.Attribution.Creator); // Transition. inquiry.State.TransitionToDone(); // Act. await _inquiryRepository.SetAuditStatusAsync(inquiry.Id, inquiry); string subject = $"FunderMaps - Rapportage goedgekeurd"; object header = new { Title = subject, Preheader = "Rapportage is goedgekeurd." }; string footer = "Dit bericht wordt verstuurd wanneer een rapportage is goedgekeurd."; await _notifyService.NotifyAsync(new() { Recipients = new List <string> { creator.Email }, Subject = "FunderMaps - Rapportage goedgekeurd", Template = "InquiryApproved", Items = new Dictionary <string, object> { { "header", header }, { "footer", footer }, { "reviewer", reviewer.ToString() }, { "organization", organization.ToString() }, { "inquiry", inquiry }, }, }); // Return. return(NoContent()); }
public async Task <IActionResult> GetDocumentAccessLinkAsync(int id) { // Act. InquiryFull inquiry = await _inquiryRepository.GetByIdAsync(id); Uri link = await _blobStorageService.GetAccessLinkAsync( containerName : Core.Constants.InquiryStorageFolderName, fileName : inquiry.DocumentFile, hoursValid : 1); // Map. BlobAccessLinkDto result = new() { AccessLink = link }; // Return. return(Ok(result)); }
public async Task <IActionResult> DeleteAsync(int id) { // Act. InquirySample inquirySample = await _inquirySampleRepository.GetByIdAsync(id); InquiryFull inquiry = await _inquiryRepository.GetByIdAsync(inquirySample.Inquiry); if (!inquiry.State.AllowWrite) { throw new EntityReadOnlyException(); } await _inquirySampleRepository.DeleteAsync(id); // FUTURE: Should only select inquiry if (await _inquirySampleRepository.CountAsync() == 0) { inquiry.State.TransitionToTodo(); await _inquiryRepository.SetAuditStatusAsync(inquiry.Id, inquiry); } // Return. return(NoContent()); }
public async Task <IActionResult> UpdateAsync(int inquiryId, int id, [FromBody] InquirySampleDto input) { // Map. var inquirySample = _mapper.Map <InquirySample>(input); inquirySample.Id = id; inquirySample.Inquiry = inquiryId; // Act. InquiryFull inquiry = await _inquiryRepository.GetByIdAsync(inquirySample.Inquiry); if (!inquiry.State.AllowWrite) { throw new EntityReadOnlyException(); } await _inquirySampleRepository.UpdateAsync(inquirySample); inquiry.State.TransitionToPending(); await _inquiryRepository.SetAuditStatusAsync(inquiry.Id, inquiry); // Return. return(NoContent()); }