Пример #1
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        public ApiResult <T> Save <T>(Guid declarationItemId, Guid companyItemId, DeclarationTestItem declarationTestItem) where T : DeclarationSaveResult
        {
            ClearCache(declarationItemId, companyItemId);

            return(inner.Save <T>(declarationItemId, companyItemId, declarationTestItem));
        }