public ResultMessageViewModel QAQCChemistryData(IEnumerable<ChemistryQAQCDataEditViewModel> data)
        {
            var versioningHelper = new DataVersioningHelper(_wqDefaultValueProvider);
                        
            var items = from qaqcData in data
                        select new ChemistryValueCheckingRuleItem { 
                            ActionId = qaqcData.ActionId,
                            CorrectionValue = qaqcData.NewResultValue
                        };
            var rule = new ChemistryValueCheckingRule { 
                Items = items.ToList()
            };

            var dataFetchCriteria = new GetActionDataByIdsCriteria(_actionRepository, rule);

            var chemistryQAQCTool = new ChemistryValueCheckingTool(versioningHelper, _relatedActionTypeRepository);

            try
            { 
                //Check
                //var qaqcResult = chemistryQAQCTool.Check(dataFetchCriteria.FetchData(), rule);

                //Correct
                var qaqcResult = chemistryQAQCTool.Correct(dataFetchCriteria.FetchData(), rule);

                if(qaqcResult.NeedCorrection)
                {
                    var numberOfActionSaved = _actionRepository.SaveChanges();
                }

                if (qaqcResult.Level == QualityCheckingResultLevel.Info)
                {
                    var message = ConstructResultMessage(qaqcResult, "QA/QC data is saved.");
                    return new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_INFO, message);
                }
                else
                {
                    var message = ConstructResultMessage(qaqcResult, "QA/QC data does not saved. Please check the result message for more detail.");
                    return new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_FATAL, message);
                }
                
            }
            catch(Exception ex)
            {
                var message = "QA/QC data fail due to " + ex.StackTrace;
                return new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_FATAL, message);
            }
            
        }
        public ResultMessageViewModel QAQCChemistryData(IEnumerable <ChemistryQAQCDataEditViewModel> data)
        {
            var versioningHelper = new DataVersioningHelper(_wqDefaultValueProvider);

            var items = from qaqcData in data
                        select new ChemistryValueCheckingRuleItem {
                ActionId        = qaqcData.ActionId,
                CorrectionValue = qaqcData.NewResultValue
            };
            var rule = new ChemistryValueCheckingRule {
                Items = items.ToList()
            };

            var dataFetchCriteria = new GetActionDataByIdsCriteria(_actionRepository, rule);

            var chemistryQAQCTool = new ChemistryValueCheckingTool(versioningHelper, _relatedActionTypeRepository);

            try
            {
                //Check
                //var qaqcResult = chemistryQAQCTool.Check(dataFetchCriteria.FetchData(), rule);

                //Correct
                var qaqcResult = chemistryQAQCTool.Correct(dataFetchCriteria.FetchData(), rule);

                if (qaqcResult.NeedCorrection)
                {
                    var numberOfActionSaved = _actionRepository.SaveChanges();
                }

                if (qaqcResult.Level == QualityCheckingResultLevel.Info)
                {
                    var message = ConstructResultMessage(qaqcResult, "QA/QC data is saved.");
                    return(new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_INFO, message));
                }
                else
                {
                    var message = ConstructResultMessage(qaqcResult, "QA/QC data does not saved. Please check the result message for more detail.");
                    return(new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_FATAL, message));
                }
            }
            catch (Exception ex)
            {
                var message = "QA/QC data fail due to " + ex.StackTrace;
                return(new ResultMessageViewModel(ResultMessageViewModel.RESULT_LEVEL_FATAL, message));
            }
        }