Exemple #1
0
        public async Task <IActionResult> Update(int encounterId, int patientMasterVisitId, [FromBody] UpdateEncounterCommand updateEncounterCommand)
        {
            updateEncounterCommand.encounterId = encounterId;

            var screeningList = new List <KeyValuePair <string, int> >();

            screeningList.Add(new KeyValuePair <string, int>("TbScreening", updateEncounterCommand.Encounter.TbScreening));

            var result = await _mediator.Send(new UpdatePatientScreeningCommand()
            {
                ScreeningType        = screeningList,
                PatientMasterVisitId = patientMasterVisitId,
                PatientId            = updateEncounterCommand.Encounter.PatientId,
                UserId        = updateEncounterCommand.Encounter.ProviderId,
                ScreeningDate = updateEncounterCommand.Encounter.EncounterDate
            }, Request.HttpContext.RequestAborted);

            if (result.IsValid)
            {
            }
            else
            {
                return(BadRequest(result));
            }

            var response = await _mediator.Send(updateEncounterCommand, Request.HttpContext.RequestAborted);

            if (response.IsValid)
            {
                return(Ok(response.Value));
            }
            return(BadRequest(response));
        }
        public async Task <Result <UpdateEncounterResponse> > Handle(UpdateEncounterCommand request, CancellationToken cancellationToken)
        {
            using (_unitOfWork)
            {
                try
                {
                    var htsEncounter = await _unitOfWork.Repository <HtsEncounter>().FindByIdAsync(request.encounterId);

                    if (htsEncounter != null)
                    {
                        htsEncounter.EncounterRemarks    = request.Encounter.EncounterRemarks;
                        htsEncounter.EverSelfTested      = request.Encounter.EverSelfTested;
                        htsEncounter.EverTested          = request.Encounter.EverTested;
                        htsEncounter.GeoLocation         = request.Encounter.GeoLocation;
                        htsEncounter.MonthSinceSelfTest  = request.Encounter.MonthSinceSelfTest;
                        htsEncounter.MonthsSinceLastTest = request.Encounter.MonthsSinceLastTest;
                        htsEncounter.ProviderId          = request.Encounter.ProviderId;
                        htsEncounter.TestedAs            = request.Encounter.TestedAs;
                        htsEncounter.TestEntryPoint      = request.Encounter.TestEntryPoint;
                        htsEncounter.TestingStrategy     = request.Encounter.TestingStrategy;
                        htsEncounter.EncounterType       = request.Encounter.EncounterType;


                        _unitOfWork.Repository <HtsEncounter>().Update(htsEncounter);
                        await _unitOfWork.SaveAsync();


                        if (request.Encounter.Disabilities.Any())
                        {
                            var disabilities = await _unitOfWork.Repository <ClientDisability>().Get(x => x.PersonId == request.Encounter.PersonId).ToAsyncEnumerable().ToList();

                            foreach (var disability in disabilities)
                            {
                                disability.DeleteFlag = true;
                                _unitOfWork.Repository <ClientDisability>().Update(disability);
                                await _unitOfWork.SaveAsync();
                            }

                            List <ClientDisability> clientDisabilities = new List <ClientDisability>();
                            request.Encounter.Disabilities.ForEach(x => clientDisabilities.Add(new ClientDisability
                            {
                                DisabilityId       = x,
                                PatientEncounterId = htsEncounter.PatientEncounterID,
                                PersonId           = request.Encounter.PersonId,
                                DeleteFlag         = false,
                                CreateDate         = DateTime.Now,
                                CreatedBy          = request.Encounter.ProviderId
                            }));

                            await _unitOfWork.Repository <ClientDisability>().AddRangeAsync(clientDisabilities);

                            await _unitOfWork.SaveAsync();
                        }
                    }

                    _unitOfWork.Dispose();

                    return(Result <UpdateEncounterResponse> .Valid(new UpdateEncounterResponse()
                    {
                        IsSuccessFul = true
                    }));
                }
                catch (Exception e)
                {
                    Log.Error(e.Message);
                    return(Result <UpdateEncounterResponse> .Invalid(e.Message));
                }
            }
        }