public Result <PatientChronicDeseaseDto> GetPatientChronicDeseases(int patientId)
        {
            Result <PatientChronicDeseaseDto> response = new Result <PatientChronicDeseaseDto>();

            using (UnitOfWork unitOfWork = new UnitOfWork())
            {
                IEnumerable <ChronicDesease>        ChronicDeseases        = unitOfWork.ChronicDeseaseRepository.GetEntities();
                IEnumerable <PatientChronicDesease> patientChronicDeseases = unitOfWork.PatientChronicDeseaseRepository.GetEntities(item => item.PatientId == patientId, p => p.OrderBy(o => o.ChronicDesease.SortKey));

                foreach (ChronicDesease ChronicDesease in ChronicDeseases)
                {
                    ChronicDeseaseDto     ChronicDeseaseDto     = _ChronicDeseaseMapper.MapToChronicDeseaseDto(ChronicDesease);
                    PatientChronicDesease patientChronicDesease = patientChronicDeseases.Where(item => item.ChronicDeseaseId == ChronicDesease.ChronicDeseaseId).FirstOrDefault();

                    PatientChronicDeseaseDto patientChronicDeseaseDto = new PatientChronicDeseaseDto()
                    {
                        PatientChronicDeseaseId = patientChronicDesease == null ? default(int?) : patientChronicDesease.PatientChronicDeseaseId,
                        PatientId       = patientId,
                        ChronicDesease  = ChronicDeseaseDto,
                        YearOfDiagnoses = patientChronicDesease == null ? default(int?) : patientChronicDesease.YearOfDiagnoses,
                        Value           = patientChronicDesease == null ? null : patientChronicDesease.Value,
                        SelectedInd     = patientChronicDesease == null ? false : true
                    };

                    response.Models.Add(patientChronicDeseaseDto);
                }
            }

            return(response);
        }
        public void MapToPatientChronicDesease(PatientChronicDesease patientChronicDesease, PatientChronicDeseaseDto patientChronicDeseaseDto)
        {
            if (patientChronicDeseaseDto == null)
            {
                return;
            }

            patientChronicDesease.PatientId = patientChronicDeseaseDto.PatientId;

            if (patientChronicDeseaseDto.ChronicDesease != null && patientChronicDeseaseDto.ChronicDesease.ChronicDeseaseId != null)
            {
                patientChronicDesease.ChronicDeseaseId = patientChronicDeseaseDto.ChronicDesease.ChronicDeseaseId.Value;
            }

            patientChronicDesease.Value           = patientChronicDeseaseDto.Value;
            patientChronicDesease.YearOfDiagnoses = patientChronicDeseaseDto.YearOfDiagnoses;
        }
        public PatientChronicDeseaseDto MapToPatientChronicDeseaseDto(PatientChronicDesease patientChronicDesease)
        {
            if (patientChronicDesease == null)
            {
                return(null);
            }

            PatientChronicDeseaseDto patientChronicDeseaseDto = new PatientChronicDeseaseDto();

            patientChronicDeseaseDto.PatientChronicDeseaseId = patientChronicDesease.PatientChronicDeseaseId;
            patientChronicDeseaseDto.PatientId       = patientChronicDesease.PatientId;
            patientChronicDeseaseDto.ChronicDesease  = _ChronicDeseaseMapper.MapToChronicDeseaseDto(patientChronicDesease.ChronicDesease);
            patientChronicDeseaseDto.Value           = patientChronicDesease.Value;
            patientChronicDeseaseDto.YearOfDiagnoses = patientChronicDesease.YearOfDiagnoses;
            patientChronicDeseaseDto.SelectedInd     = true;

            return(patientChronicDeseaseDto);
        }
        public Response <PatientChronicDeseaseDto> SavePatientChronicDeseases(List <PatientChronicDeseaseDto> patientChronicDeseases)
        {
            Response <PatientChronicDeseaseDto> response = new Response <PatientChronicDeseaseDto>();

            foreach (PatientChronicDeseaseDto patientChronicDeseaseDto in patientChronicDeseases)
            {
                response = _PatientChronicDeseaseBusinessRules.SaveCheck(patientChronicDeseaseDto);
                if (response.HasErrors)
                {
                    return(response);
                }
            }

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

                    try
                    {
                        foreach (PatientChronicDeseaseDto patientChronicDeseaseDto in patientChronicDeseases)
                        {
                            bool isNewPatientChronicDesease             = false;
                            PatientChronicDesease patientChronicDesease = unitOfWork.PatientChronicDeseaseRepository.GetByID(item => item.PatientId == patientChronicDeseaseDto.PatientId &&
                                                                                                                             item.ChronicDeseaseId == patientChronicDeseaseDto.ChronicDesease.ChronicDeseaseId.Value);

                            if (patientChronicDesease != null && !patientChronicDeseaseDto.SelectedInd)
                            {
                                unitOfWork.PatientChronicDeseaseRepository.Delete(patientChronicDesease);
                                continue;
                            }

                            if (!patientChronicDeseaseDto.SelectedInd)
                            {
                                continue;
                            }

                            if (patientChronicDesease == null)
                            {
                                isNewPatientChronicDesease = true;
                                patientChronicDesease      = new PatientChronicDesease();
                            }

                            _PatientChronicDeseaseMapper.MapToPatientChronicDesease(patientChronicDesease, patientChronicDeseaseDto);

                            if (isNewPatientChronicDesease)
                            {
                                unitOfWork.PatientChronicDeseaseRepository.Insert(patientChronicDesease);
                            }
                            else
                            {
                                unitOfWork.PatientChronicDeseaseRepository.Update(patientChronicDesease);
                            }
                        }
                    }
                    finally
                    {
                        unitOfWork.AutoDetectChanges = true;
                    }

                    unitOfWork.Save();
                }

                scope.Complete();
            }

            return(response);
        }