예제 #1
0
        public static Person AddNewPerson(AddNewResidentRequest request)
        {
            return(new Person
            {
                Title = request.Title,
                FirstName = request.FirstName,
                LastName = request.LastName,
                //othernames
                Gender = request.Gender,
                DateOfBirth = request.DateOfBirth,
                DateOfDeath = request.DateOfDeath,
                Ethnicity = request.Ethnicity,
                FirstLanguage = request.FirstLanguage,
                Religion = request.Religion,
                SexualOrientation = request.SexualOrientation,
                NhsNumber = request.NhsNumber,
                //address
                //phonenumbers
                EmailAddress = request.EmailAddress,
                PreferredMethodOfContact = request.PreferredMethodOfContact,
                AgeContext = request.ContextFlag,

                //calculated and additional values
                FullName = $"{request.FirstName} {request.LastName}",
                DataIsFromDmPersonsBackup = "N",
                CreatedBy = request.CreatedBy,
                Restricted = request.Restricted
            });
        }
        public void AddNewResidentReturns201WhenSuccessful()
        {
            var addNewResidentResponse = _fixture.Create <AddNewResidentResponse>();
            var addNewResidentRequest  = new AddNewResidentRequest();

            _mockResidentUseCase
            .Setup(x => x.AddNewResident(addNewResidentRequest))
            .Returns(addNewResidentResponse);

            var response = _residentController.AddNewResident(addNewResidentRequest) as CreatedAtActionResult;

            response?.StatusCode.Should().Be(201);
            response?.Value.Should().BeEquivalentTo(addNewResidentResponse);
        }
        public IActionResult AddNewResident([FromBody] AddNewResidentRequest residentRequest)
        {
            try
            {
                var response = _residentUseCase.AddNewResident(residentRequest);

                return(CreatedAtAction(nameof(AddNewResident), new { id = response.Id }, response));
            }
            catch (Exception e) when(
                e is ResidentCouldNotBeinsertedException ||
                e is AddressCouldNotBeInsertedException
                )
            {
                return(StatusCode(500, e.Message));
            }
        }
예제 #4
0
        //Handle case note creation exception like below for now
        public AddNewResidentResponse AddNewResident(AddNewResidentRequest request)
        {
            Address address = null;
            List <PersonOtherName> names = null;
            Person resident;
            List <dbPhoneNumber> phoneNumbers = null;

            try
            {
                resident = AddNewPerson(request);

                if (request.Address != null)
                {
                    address            = AddResidentAddress(request.Address, resident.Id, request.CreatedBy);
                    resident.Addresses = new List <Address> {
                        address
                    };
                }

                if (request.OtherNames?.Count > 0)
                {
                    names = AddOtherNames(request.OtherNames, resident.Id, request.CreatedBy);
                    resident.OtherNames = new List <PersonOtherName>();
                    resident.OtherNames.AddRange(names);
                }

                if (request.PhoneNumbers?.Count > 0)
                {
                    phoneNumbers          = AddPhoneNumbers(request.PhoneNumbers, resident.Id, request.CreatedBy);
                    resident.PhoneNumbers = new List <dbPhoneNumber>();
                    resident.PhoneNumbers.AddRange(phoneNumbers);
                }

                _databaseContext.Persons.Add(resident);
                _databaseContext.SaveChanges();
            }
            catch (DbUpdateException ex)
            {
                throw new ResidentCouldNotBeinsertedException(
                          $"Error with inserting resident record has occurred - {ex.Message}");
            }

            string caseNoteId           = null;
            string caseNoteErrorMessage = null;

            //Add note
            try
            {
                DateTime dt = DateTime.Now;

                CreatePersonCaseNote note = new CreatePersonCaseNote()
                {
                    FirstName       = resident.FirstName,
                    LastName        = resident.LastName,
                    MosaicId        = resident.Id.ToString(),
                    Timestamp       = dt.ToString("dd/MM/yyyy H:mm:ss"), //in line with imported form data
                    WorkerEmail     = request.CreatedBy,
                    Note            = $"{dt.ToShortDateString()} Person added - by {request.CreatedBy}.",
                    FormNameOverall = "API_Create_Person",
                    FormName        = "Person added",
                    CreatedBy       = request.CreatedBy
                };

                CaseNotesDocument caseNotesDocument = new CaseNotesDocument()
                {
                    CaseFormData = JsonConvert.SerializeObject(note)
                };

                //TODO: refactor to appropriate pattern when using base API

                caseNoteId = _processDataGateway.InsertCaseNoteDocument(caseNotesDocument).Result;
            }
            catch (Exception ex)
            {
                caseNoteErrorMessage =
                    $"Unable to create a case note for creating a person {resident.Id}: {ex.Message}";
            }

            return(resident.ToResponse(address, names, phoneNumbers, caseNoteId, caseNoteErrorMessage));
        }
예제 #5
0
 public AddNewResidentResponse AddNewResident(AddNewResidentRequest request)
 {
     return(_databaseGateway.AddNewResident(request));
 }