public DeclarationTestItem CreateDeclarationTestItem(IDictionary <string, string> dataList, Guid id, List <DeclarationIndicatorGroup> indicatorList) { var declarationTestItem = new DeclarationTestItem { Id = id, SupplierAndVersionId = GetAnswerFromInt(dataList, "answer_int_supplierandversion"), SupplierAndVersionOther = GetAnswerFromString(dataList, "answer_string_testitem_supplierandversionother"), DescriptionInText = GetAnswerFromString(dataList, "answer_string_testitem_descriptionintext"), Image1Id = GetAnswerFromImage(dataList, "answer_image_testitem_image1"), Image2Id = GetAnswerFromImage(dataList, "answer_image_testitem_image2") }; var outcomeDataList = new List <OutcomeData>(); foreach (var declarationTestGroup in indicatorList.OrderBy(x => x.TestGroupOrder).ThenBy(x => x.IndicatorInTestGroupOrder)) { var indicator = declarationTestGroup.IndicatorItem; var outcomeData = new OutcomeData { Id = Guid.NewGuid(), IndicatorItemId = indicator.Id, RuleDataList = new List <RuleData>(), DeclarationTestItemId = id }; foreach (var ruleItem in indicator.RuleList.OrderBy(x => x.Order)) { outcomeData.RuleDataList.Add(new RuleData { Id = Guid.NewGuid(), RuleItemId = ruleItem.Id, AnswerDataList = ruleItem.AnswerList.OrderBy(x => x.Order).Select(x => new AnswerData { Id = Guid.NewGuid(), AnswerItemId = x.Id, TypeOfAnswerId = x.TypeOfAnswerId, String = GetAnswerFromString(dataList, $"answer_string_{indicator.Id}_{ruleItem.Id}_{x.Id}"), Bool = GetAnswerFromBool(dataList, $"answer_bool_{indicator.Id}_{ruleItem.Id}_{x.Id}"), Int = GetAnswerFromInt(dataList, $"answer_int_{indicator.Id}_{ruleItem.Id}_{x.Id}"), ImageId = GetAnswerFromImage(dataList, $"answer_image_{indicator.Id}_{ruleItem.Id}_{x.Id}") }).ToList() }); } outcomeDataList.Add(outcomeData); } declarationTestItem.OutcomeDataList = outcomeDataList; return(declarationTestItem); }
public ApiResult <T> Save <T>(Guid declarationItemId, Guid companyId, DeclarationTestItem declarationTestItem) where T : DeclarationSaveResult { var beforeSave = declarationTestItem.DeepClone(); var result = inner.Save <T>(declarationItemId, companyId, declarationTestItem); if (!result.Succeeded && LogError || result.Succeeded && LogChangeSucceeded || stopwatch.ElapsedMilliseconds > LogLongTime) { logRepository.Add(new LogItem(stopwatch, userId, companyId, result.GetApiResutlt(), declarationItemId, beforeSave)); } return(result); }
public ApiResult <T> Save <T>(Guid declarationItemId, Guid companyItemId, DeclarationTestItem declarationTestItem) where T : DeclarationSaveResult { var result = new ApiResult <T> { Data = (T) new DeclarationSaveResult { StausCount = 0, Step1Done = false, OutcomeData = new List <OutcomeData>() } }; var outComeList = new List <OutcomeData>(); var testGroupItemList = new List <TestGroupItem>(); var answerLanguageList = dbContext.AnswerLanguageList.Include(x => x.LanguageItem).Where(x => x.LanguageItem.Name == currentLang).FromCache().ToList(); var answerList = dbContext.AnswerList.Include(x => x.TypeOfAnswer).AsNoTracking().FromCache().ToList(); var indicatorOutcomeList = dbContext.IndicatorOutcomeList.FromCache().ToList(); ; foreach (var declarationIndicatorGroup in dbContext.DeclarationList.Include(x => x.IndicatorList).ThenInclude(x => x.TestGroupItem).ThenInclude(x => x.IndicatorList).Single(x => x.Id == declarationItemId).IndicatorList.OrderBy(x => x.TestGroupOrder)) { if (testGroupItemList.All(x => x.Id != declarationIndicatorGroup.TestGroupItemId)) { var item = declarationIndicatorGroup.TestGroupItem; item.AllDone = true; testGroupItemList.Add(item); } } try { foreach (var outcomeData in declarationTestItem.OutcomeDataList) { var allDone = true; outcomeData.ResultId = (int)TypeOfResult.NotTested; foreach (var ruleData in outcomeData.RuleDataList) { ruleData.ResultId = (int)TypeOfResult.NotTested; foreach (var answerData in ruleData.AnswerDataList) { answerData.ResultId = (int)GetResultId(answerData, ruleData, answerList); UpdateParent(ruleData, answerData, answerList); } if (ruleData.AnswerDataList.Any(x => x.ResultId == (int)TypeOfResult.Fail)) { ruleData.ResultId = (int)TypeOfResult.Fail; } else { if (ruleData.AnswerDataList.Any(x => x.ResultId == (int)TypeOfResult.Ok)) { ruleData.ResultId = (int)TypeOfResult.Ok; } } if (ruleData.AnswerDataList.Any(x => x.ResultId == (int)TypeOfResult.NotTested)) { allDone = false; } } if (outcomeData.RuleDataList.Any(x => x.ResultId == (int)TypeOfResult.Fail)) { outcomeData.ResultId = (int)TypeOfResult.Fail; } else { if (outcomeData.RuleDataList.Any(x => x.ResultId == (int)TypeOfResult.Ok)) { outcomeData.ResultId = (int)TypeOfResult.Ok; } } var indicatorItem = dbContext.IndicatorList.Include(x => x.TestGroupList).FromCache().Single(x => x.Id == outcomeData.IndicatorItemId); var listItem = testGroupItemList.Single(x => x.IndicatorList.Any(y => y.IndicatorItemId == indicatorItem.Id)); if (listItem.AllDone) { listItem.AllDone = allDone; } outcomeData.AllDone = allDone; var answerDataString = string.Empty; var resultString = string.Empty; foreach (var ruleData in outcomeData.RuleDataList) { foreach (var answerData in ruleData.AnswerDataList) { if (!string.IsNullOrEmpty(answerData.String)) { if (!string.IsNullOrEmpty(resultString)) { resultString += ", "; } resultString += answerLanguageList.Single(x => x.AnswerItemId == answerData.AnswerItemId).Question + ": " + answerData.String; } if (answerData.Int > 0) { if (!string.IsNullOrEmpty(resultString)) { resultString += ", "; } resultString += answerLanguageList.Single(x => x.AnswerItemId == answerData.AnswerItemId).Question + ": " + answerData.Int; } if (answerData.ResultId == (int)TypeOfResult.Ok || answerData.ResultId == (int)TypeOfResult.Fail) { if (!string.IsNullOrEmpty(answerDataString)) { answerDataString += ","; } answerDataString += answerData.ResultId; } } } outcomeData.ResultText = resultString; var match = indicatorOutcomeList.SingleOrDefault(x => x.IndicatorItemId == outcomeData.IndicatorItemId && (x.ResultString1 == answerDataString || x.ResultString2 == answerDataString)); if (match != null) { outcomeData.IndicatorOutcomeItemId = match.Id; } outComeList.Add(outcomeData); result.Data.OutcomeData.Add(new OutcomeData { Id = outcomeData.Id, IndicatorItemId = outcomeData.IndicatorItemId, DeclarationTestItemId = outcomeData.DeclarationTestItemId, AllDone = outcomeData.AllDone }); } var dbItem = dbContext.DeclarationList.Include(x => x.DeclarationTestItem).Single(x => x.Id == declarationItemId); dbItem.DeclarationTestItem.StatusCount = testGroupItemList.Count(x => x.AllDone); dbItem.DeclarationTestItem.SupplierAndVersionId = declarationTestItem.SupplierAndVersionId == 1 ? null : declarationTestItem.SupplierAndVersionId; dbItem.DeclarationTestItem.SupplierAndVersionOther = declarationTestItem.SupplierAndVersionOther; dbItem.DeclarationTestItem.DescriptionInText = declarationTestItem.DescriptionInText; dbItem.DeclarationTestItem.Image1Id = declarationTestItem.Image1Id; dbItem.DeclarationTestItem.Image2Id = declarationTestItem.Image2Id; if (dbItem.DeclarationTestItem.SupplierAndVersionId != null && dbItem.DeclarationTestItem.SupplierAndVersionId > 0 && !string.IsNullOrEmpty(dbItem.DeclarationTestItem.DescriptionInText) && dbItem.DeclarationTestItem.Image1Id != null && dbItem.DeclarationTestItem.Image2Id != null) { if (dbItem.DeclarationTestItem.SupplierAndVersionId == 99999 && string.IsNullOrWhiteSpace(dbItem.DeclarationTestItem.SupplierAndVersionOther)) { result.Data.Step1Done = false; } else { dbItem.DeclarationTestItem.StatusCount++; result.Data.Step1Done = true; } } lock (SaveLock.SaveLockObject) { dbContext.OutcomeData.RemoveRange(dbContext.OutcomeData.Where(x => x.DeclarationTestItemId == declarationItemId)); foreach (var outcomeData in outComeList) { dbContext.OutcomeData.Add(outcomeData); } dbContext.SaveChanges(); } result.Data.StausCount = dbItem.DeclarationTestItem.StatusCount; result.Succeeded = true; result.Id = dbItem.Id; } catch (Exception exception) { result.Succeeded = false; result.Exception = exception; } return(result); }
public ApiResult <T> Save <T>(Guid declarationItemId, Guid companyItemId, DeclarationTestItem declarationTestItem) where T : DeclarationSaveResult { ClearCache(declarationItemId, companyItemId); return(inner.Save <T>(declarationItemId, companyItemId, declarationTestItem)); }