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);
        }
Esempio n. 4
0
        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));
            }
        }
Esempio n. 5
0
        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);
        }