public async Task <IActionResult> Post([FromBody] ScreeningRequest screeningRequest) { try { var user = new User(HttpContext.User); var ministries = await ScreeningRequest.GetMinistryScreeningTypesAsync(_dynamicsClient); var siteMinderMinistry = ministries.FirstOrDefault(m => m.Name == user.Ministry); var siteMinderProgramArea = siteMinderMinistry?.ProgramAreas.FirstOrDefault(a => a.Name == user.ProgramArea); var screeningType = siteMinderProgramArea?.ScreeningTypes.Find(t => t.Value == screeningRequest.ScreeningType); // ensure ministry and program area from siteminder match a ministry and program area in our system if (siteMinderProgramArea == null) { _logger.LogWarning(string.Join(Environment.NewLine, "Cannot find ministry and program area in database matching SiteMinder headers", "{@User}", "{@RetrievedMinistries}"), user, ministries); return(Unauthorized()); } // validate screening request try { bool validationResult = await screeningRequest.Validate(_dynamicsClient, siteMinderMinistry, siteMinderProgramArea); if (validationResult == false) { _logger.LogWarning("Validation failed for screening request {@ScreeningRequest} {@Ministry} {@ProgramArea}", screeningRequest, siteMinderMinistry, siteMinderProgramArea); return(BadRequest()); } } catch (DynamicsEntityNotFoundException ex) { _logger.LogError(ex, "Validation failed for screening request {@ScreeningRequest} {@Ministry} {@ProgramArea}", screeningRequest, siteMinderMinistry, siteMinderProgramArea); return(BadRequest()); } // validate user if (string.IsNullOrWhiteSpace(user.Email)) { _logger.LogWarning("Validation failed for user {@user} submitting screening request {@ScreeningRequest}", user, screeningRequest); return(BadRequest()); } // submit request to dynamics and return its new screeningId string screeningId = await screeningRequest.Submit(_dynamicsClient, _logger, user, screeningType, siteMinderProgramArea.Value); return(new JsonResult(new { screeningId })); } catch (Exception ex) { _logger.LogError(ex, "Failed to submit screening request {@ScreeningRequest}", screeningRequest); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <IActionResult> GetMinistryScreeningTypes() { try { var data = await ScreeningRequest.GetMinistryScreeningTypesAsync(_dynamicsClient); _logger.LogInformation("Successfully retrieved ministry screening types {@Ministries}", data); return(new JsonResult(data)); } catch (Exception ex) { _logger.LogError(ex, "Failed to retrieve ministry screening types"); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public static async Task <MicrosoftDynamicsCRMincident> CreateScreeningRequestAsync(IDynamicsClient dynamicsClient, ScreeningRequest screeningRequest, string candidateId, string submitterId, string contactId, int?applicantType, int?cannabisApplicantType) { string candidate = dynamicsClient.GetEntityURI("contacts", candidateId); string submitter = dynamicsClient.GetEntityURI("contacts", submitterId); string programArea = dynamicsClient.GetEntityURI("spice_ministries", screeningRequest.ProgramArea); string screeningType = dynamicsClient.GetEntityURI("spice_serviceses", screeningRequest.ScreeningType); string reason = dynamicsClient.GetEntityURI("spice_reasonforscreenings", screeningRequest.Reason); string contact = dynamicsClient.GetEntityURI("spice_ministryemployees", contactId); var entity = new MicrosoftDynamicsCRMincident { CustomerIdODataBind = candidate, ApplyingPersonIdODataBind = submitter, SpiceClientIdODataBind = programArea, SpiceServiceIdODataBind = screeningType, SpiceReasonForScreeningIdODataBind = reason, SpiceOtherscreeningreason = screeningRequest.OtherReason, SpiceReturnToIdODataBind = contact, SpiceApplicanttype = applicantType, SpiceCannabisapplicanttype = cannabisApplicantType, }; entity = await dynamicsClient.Incidents.CreateAsync(entity); return(entity); }
public async Task <IActionResult> Post([FromBody] ScreeningRequest screeningRequest) { try { var user = new User(HttpContext.User); var(ministry, programArea, screeningType) = await ScreeningRequest.GetMinistryScreeningTypeAsync( _dynamicsClient, user.OrgCode, screeningRequest.ScreeningType ); // validate screening request try { bool validationResult = await screeningRequest.Validate(_dynamicsClient, ministry, programArea, screeningType); if (validationResult == false) { _logger.LogWarning( string.Join( Environment.NewLine, "Validation failed for screening request {@ScreeningRequest}", "{@ministry}", "{@programArea}", "{@screeningType}" ), screeningRequest, ministry, programArea, screeningType ); return(BadRequest()); } } catch (DynamicsEntityNotFoundException ex) { _logger.LogError( ex, string.Join( Environment.NewLine, "Validation failed for screening request {@ScreeningRequest}", "{@ministry}", "{@programArea}", "{@screeningType}" ), screeningRequest, ministry, programArea, screeningType ); return(BadRequest()); } // validate user if (string.IsNullOrWhiteSpace(user.Email)) { _logger.LogWarning("Validation failed for user {@user} submitting screening request {@ScreeningRequest}", user, screeningRequest); return(BadRequest()); } // submit request to dynamics and return its new screeningId string screeningId = await screeningRequest.Submit(_dynamicsClient, _logger, user, screeningType, programArea.Value); return(new JsonResult(new { screeningId })); } catch (Exception ex) { _logger.LogError(ex, "Failed to submit screening request {@ScreeningRequest}", screeningRequest); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public ScreeningResponse ScreeningMultiPleData(BeneficialOwnership_Main beneficial, int memberId) { ScreeningResponse screeningResponse = new ScreeningResponse(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string endpoint = "https://rpstest.visualcompliance.com/RPS/RPSService.svc/SearchEntity"; var httpWebRequest = (HttpWebRequest)WebRequest.Create(endpoint); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; httpWebRequest.Accept = "application/json"; httpWebRequest.Host = "rpstest.visualcompliance.com"; httpWebRequest.Headers.Add("Accept-Encoding", "gzip,deflate"); ScreeningRequest screeningRequest = new ScreeningRequest(); screeningRequest.__type = "searchrequest:http://eim.visualcompliance.com/RPSService/2016/11"; screeningRequest.sguid = ""; screeningRequest.stransid = ""; screeningRequest.ssecno = "XA65D"; screeningRequest.spassword = "******"; screeningRequest.smodes = ""; screeningRequest.srpsgroupbypass = ""; screeningRequest.searches = new List <Search>(); foreach (var item in memberId > 0 ? beneficial.lstCombinedData.Where(x => x.memberID == memberId) : beneficial.lstCombinedData) { Search search = new Search(); search.__type = "search:http://eim.visualcompliance.com/RPSService/2016/11"; search.soptionalid = Convert.ToString(item.memberID); if (item.beneficiaryType.ToLower() == "business") { search.sname = ""; search.scompany = item.name.Replace("*", "").TrimStart(); } else { search.sname = item.name.Replace("*", "").TrimStart(); search.scompany = ""; } search.saddress1 = item.addressStreetLine1; search.saddress2 = item.addressStreetLine2; search.saddress3 = item.addressStreetLine3; search.scity = item.addressCity; search.sstate = item.addressState; search.szip = item.addressPostalCode; search.scountry = item.addressCountryIsoAlpha2Code; search.selective1 = Convert.ToString(item.memberID); search.selective2 = item.beneficiaryType; screeningRequest.searches.Add(search); } string json = string.Empty; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { json = JsonConvert.SerializeObject(screeningRequest, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } try { var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); JObject jsonResult = JObject.Parse(result); if (jsonResult.ContainsKey("serrorstring")) { screeningResponse.Errormsg = jsonResult["serrorstring"].ToString(); } screeningResponse.resultsJSON = result; screeningResponse.userId = Helper.oUser.UserId; screeningResponse.credentialId = Helper.lstEnrichCreds.FirstOrDefault(x => x.EnrichmentType == "OWNERSHIP").CredentialId; screeningResponse.searchJSON = json; screeningResponse.requestUrl = endpoint; } } catch (WebException ex) { using (var stream = ex.Response.GetResponseStream()) using (var streamReader = new StreamReader(stream)) { var result = streamReader.ReadToEnd(); screeningResponse.resultsJSON = result; screeningResponse.userId = Helper.oUser.UserId; screeningResponse.credentialId = Helper.lstEnrichCreds.FirstOrDefault(x => x.EnrichmentType == "OWNERSHIP").CredentialId; screeningResponse.searchJSON = json; screeningResponse.requestUrl = endpoint; } } return(screeningResponse); }