예제 #1
0
        public async Task <SSG_SearchRequest> ProcessUpdateSearchRequest(SearchRequestOrdered searchRequestOrdered)
        {
            var cts = new CancellationTokenSource();

            _cancellationToken = cts.Token;
            SSG_SearchRequest existedSearchRequest = await VerifySearchRequest(searchRequestOrdered);

            if (existedSearchRequest == null)
            {
                return(null);
            }
            existedSearchRequest.IsDuplicated = true;
            _uploadedSearchRequest            = existedSearchRequest;

            //get existedPersonSought
            SSG_Person existedSoughtPerson = existedSearchRequest?.SSG_Persons?.FirstOrDefault(
                m => m.IsPrimary == true);

            if (existedSoughtPerson == null)
            {
                string error = "the updating personSought does not exist. something is wrong.";
                _logger.LogError(error);
                throw new Exception(error);
            }
            existedSoughtPerson = await _searchRequestService.GetPerson(existedSoughtPerson.PersonId, _cancellationToken);

            existedSoughtPerson.IsDuplicated = true;
            _uploadedPerson = existedSoughtPerson;


            SearchRequestEntity newSearchRequest = _mapper.Map <SearchRequestEntity>(searchRequestOrdered);

            if (newSearchRequest == null)
            {
                string error = "cannot do updating as newSearchRequest is null";
                _logger.LogError(error);
                throw new Exception(error);
            }

            //update searchRequestEntity
            await UpdateSearchRequest(newSearchRequest);

            //update notesEntity
            if (!String.IsNullOrEmpty(newSearchRequest.Notes) &&
                !String.Equals(existedSearchRequest.Notes, newSearchRequest.Notes, StringComparison.InvariantCultureIgnoreCase))
            {
                await UploadNotes(newSearchRequest, existedSearchRequest);
            }

            //update PersonEntity
            if (searchRequestOrdered.Person == null)
            {
                string error = "the searchRequestOrdered does not contain Person. The request is wrong.";
                _logger.LogError(error);
                throw new Exception(error);
            }
            _personSought = searchRequestOrdered.Person;

            await UpdatePersonSought();
            await UpdateSafetyConcern();

            //update RelatedPerson applicant
            await UpdateRelatedApplicant((string.IsNullOrEmpty(newSearchRequest.ApplicantFirstName) && string.IsNullOrEmpty(newSearchRequest.ApplicantLastName))?null : new RelatedPersonEntity()
            {
                FirstName  = newSearchRequest.ApplicantFirstName,
                LastName   = newSearchRequest.ApplicantLastName,
                StatusCode = 1
            });

            //update identifiers
            //await UpdateIdentifiers();
            await UploadIdentifiers(true);

            //update employment
            await UploadEmployment(true);

            //for phones, addresses, relatedPersons, names are same as creation, as if different, add new one, if same, ignore
            await UploadAddresses(true);
            await UploadPhones(true);
            await UploadRelatedPersons(true);
            await UploadAliases(true);



            return(_uploadedSearchRequest);
        }