public Result<PatientMedicalNoteDto> GetPatientMedicalNotes(int patientConsultationId)
        {
            Result<PatientMedicalNoteDto> response = new Result<PatientMedicalNoteDto>();

            using (UnitOfWork unitOfWork = new UnitOfWork())
            {
                IEnumerable<MedicalNote> medicalNotes = unitOfWork.MedicalNoteRepository.GetEntities();
                IEnumerable<PatientMedicalNote> patientMedicalNotes = unitOfWork.PatientMedicalNoteRepository.GetEntities(item => item.PatientConsultationId == patientConsultationId, p => p.OrderBy(o => o.MedicalNote.SortKey));

                foreach (MedicalNote medicalNote in medicalNotes)
                {
                    MedicalNoteDto medicalNoteDto = _MedicalNoteMapper.MapToMedicalNoteDto(medicalNote);
                    PatientMedicalNote patientMedicalNote = patientMedicalNotes.Where(item => item.MedicalNoteId == medicalNote.MedicalNoteId).FirstOrDefault();

                    PatientMedicalNoteDto patientMedicalNoteDto = new PatientMedicalNoteDto()
                    {
                        PatientMedicalNoteId = patientMedicalNote == null ? default(int?) : patientMedicalNote.PatientMedicalNoteId,
                        PatientConsultationId = patientConsultationId,
                        MedicalNote = medicalNoteDto,
                        Value = patientMedicalNote == null ? null : patientMedicalNote.Value
                    };

                    response.Models.Add(patientMedicalNoteDto);
                }
            }

            return response;
        }
        public void MapToPatientMedicalNote(PatientMedicalNote patientMedicalNote, PatientMedicalNoteDto patientMedicalNoteDto)
        {
            if (patientMedicalNoteDto == null)
            {
                return;
            }

            patientMedicalNote.PatientConsultationId = patientMedicalNoteDto.PatientConsultationId;

            if (patientMedicalNoteDto.MedicalNote != null && patientMedicalNoteDto.MedicalNote.MedicalNoteId != null)
            {
                patientMedicalNote.MedicalNoteId = patientMedicalNoteDto.MedicalNote.MedicalNoteId.Value;
            }

            patientMedicalNote.Value = patientMedicalNoteDto.Value;
        }
        public PatientMedicalNoteDto MapToPatientMedicalNoteDto(PatientMedicalNote patientMedicalNote)
        {
            if (patientMedicalNote == null)
            {
                return(null);
            }

            PatientMedicalNoteDto patientMedicalNoteDto = new PatientMedicalNoteDto();

            patientMedicalNoteDto.PatientMedicalNoteId  = patientMedicalNote.PatientMedicalNoteId;
            patientMedicalNoteDto.PatientConsultationId = patientMedicalNote.PatientConsultationId;
            patientMedicalNoteDto.MedicalNote           = _MedicalNoteMapper.MapToMedicalNoteDto(patientMedicalNote.MedicalNote);
            patientMedicalNoteDto.Value = patientMedicalNote.Value;

            return(patientMedicalNoteDto);
        }
        public Response<PatientMedicalNoteDto> SavePatientMedicalNotes(List<PatientMedicalNoteDto> patientMedicalNotes)
        {
            Response<PatientMedicalNoteDto> response = new Response<PatientMedicalNoteDto>();

            foreach (PatientMedicalNoteDto patientMedicalNoteDto in patientMedicalNotes)
            {
                response = _PatientMedicalNoteBusinessRules.SaveCheck(patientMedicalNoteDto);
                if (response.HasErrors) return response;
            }

            using (TransactionScope scope = new TransactionScope())
            {
                using (UnitOfWork unitOfWork = new UnitOfWork())
                {
                    unitOfWork.AutoDetectChanges = false;
                    unitOfWork.ValidateOnSave = false;

                    try
                    {
                        foreach (PatientMedicalNoteDto patientMedicalNoteDto in patientMedicalNotes)
                        {
                            bool isNewPatientMedicalNote = false;
                            PatientMedicalNote patientMedicalNote = unitOfWork.PatientMedicalNoteRepository.GetByID(item => item.PatientConsultationId == patientMedicalNoteDto.PatientConsultationId &&
                                                                                                                            item.MedicalNoteId == patientMedicalNoteDto.MedicalNote.MedicalNoteId.Value);
                            
                            if (patientMedicalNote != null && string.IsNullOrEmpty(patientMedicalNoteDto.Value))
                            {
                                unitOfWork.PatientMedicalNoteRepository.Delete(patientMedicalNote);
                                continue;
                            }

                            if (string.IsNullOrEmpty(patientMedicalNoteDto.Value))
                            {
                                continue;
                            }

                            if (patientMedicalNote == null)
                            {
                                isNewPatientMedicalNote = true;
                                patientMedicalNote = new PatientMedicalNote();
                            }

                            _PatientMedicalNoteMapper.MapToPatientMedicalNote(patientMedicalNote, patientMedicalNoteDto);

                            if (isNewPatientMedicalNote)
                            {
                                unitOfWork.PatientMedicalNoteRepository.Insert(patientMedicalNote);
                            }
                            else
                            {
                                unitOfWork.PatientMedicalNoteRepository.Update(patientMedicalNote);
                            }
                        }
                    }
                    finally
                    {
                        unitOfWork.AutoDetectChanges = true;
                    }

                    unitOfWork.Save();
                }

                scope.Complete();
            }

            return response;
        }