public async Task <IEnumerable <SynthesisActivityItemViewModel> > GetCurrentSynthesisActivities()
        {
            GeneSynthesisProcess currentGeneSynthesisProcess = await GetCurrentGeneSynthesisProcess();

            if (currentGeneSynthesisProcess?.GeneSynthesisActivities != null && currentGeneSynthesisProcess.GeneSynthesisActivities.Any())
            {
                IList <SynthesisActivityItemViewModel> currentSynthesisActivities = new List <SynthesisActivityItemViewModel>();

                foreach (GeneSynthesisActivity geneSynthesisActivity in currentGeneSynthesisProcess.GeneSynthesisActivities)
                {
                    SynthesisActivityItemViewModel synthesisActivityItemViewModel = new SynthesisActivityItemViewModel();
                    synthesisActivityItemViewModel.Id             = geneSynthesisActivity.Id;
                    synthesisActivityItemViewModel.ChannelNumber  = geneSynthesisActivity.ChannelNumber;
                    synthesisActivityItemViewModel.DNASequence    = geneSynthesisActivity.DNASequence;
                    synthesisActivityItemViewModel.TotalTime      = geneSynthesisActivity.TotalTime;
                    synthesisActivityItemViewModel.SynthesisCycle = new SynthesisCycleItemViewModel()
                    {
                        Id   = geneSynthesisActivity.SynthesisCycle.Id,
                        Name = geneSynthesisActivity.SynthesisCycle.Name
                    };

                    currentSynthesisActivities.Add(synthesisActivityItemViewModel);
                }

                return(currentSynthesisActivities);
            }

            return(Enumerable.Empty <SynthesisActivityItemViewModel>());
        }
        public async Task CreateOrUpdateSynthesisActivity(SynthesisActivityItemViewModel item)
        {
            GeneSynthesisActivity entity;

            GeneSynthesisProcess currentGeneSynthesisProcess = await GetCurrentGeneSynthesisProcess();

            if (string.IsNullOrWhiteSpace(item.Id))
            {
                entity = new GeneSynthesisActivity();
                entity.GeneSynthesisProcess = currentGeneSynthesisProcess;
            }
            else
            {
                entity = await unitOfWork.GetAll <GeneSynthesisActivity>()
                         .Include(x => x.SynthesisCycle)
                         .Include(x => x.GeneSynthesisProcess)
                         .SingleAsync(x => x.Id == item.Id);
            }

            entity.DNASequence = !string.IsNullOrWhiteSpace(item.DNASequence) ? item.DNASequence.ToUpper() : "A";
            if (item.SynthesisCycle != null && !string.IsNullOrWhiteSpace(item.SynthesisCycle.Id))
            {
                entity.SynthesisCycle = unitOfWork.GetById <SynthesisCycle>(item.SynthesisCycle.Id);
            }
            else
            {
                SynthesisCycle defaultSynthesisCycle = await unitOfWork.GetAll <SynthesisCycle>()
                                                       .SingleAsync(x => x.UserId == null);

                entity.SynthesisCycle = defaultSynthesisCycle;
            }

            await AssignToChannel(entity, currentGeneSynthesisProcess.GeneSynthesisActivities);

            CalcGeneSynthesisActivityTotalTime(entity);

            unitOfWork.InsertOrUpdate(entity);
            unitOfWork.Commit();

            currentGeneSynthesisProcess = await GetCurrentGeneSynthesisProcess();

            CalcGeneSynthesisProcessTotalTime(currentGeneSynthesisProcess);

            unitOfWork.Commit();
        }