Ejemplo n.º 1
0
        public Task <HttpResponseMessage> Import([FromBody] ExternalStandard externalStandard)
        {
            CsetLogManager.Instance.LogInfoMessage("SetsController.Import() - \n{0}", JsonConvert.SerializeObject(externalStandard));

            var response = default(HttpResponseMessage);

            try
            {
                if (ModelState.IsValid)
                {
                    var id = BackgroundJob.Enqueue(() => HangfireExecutor.SaveImport(externalStandard, null));
                    response = Request.CreateResponse(new { id });
                }
                else
                {
                    response = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
                }
            }
            catch (Exception ex)
            {
                response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
            }

            return(Task.FromResult(response));
        }
Ejemplo n.º 2
0
        public static async Task SaveImport(ExternalStandard externalStandard, PerformContext context)
        {
            var logger = new HangfireLogger(context);
            var result = await externalStandard.ToSet(logger);

            if (result.IsSuccess)
            {
                try
                {
                    using (var db = new CSET_Context())
                    {
                        db.SETS.Add(result.Result);
                        foreach (var question in result.Result.NEW_REQUIREMENT.SelectMany(s => s.NEW_QUESTIONs()).Where(s => s.Question_Id != 0).ToList())
                        {
                            db.Entry(question).State = EntityState.Unchanged;
                        }
                        await db.SaveChangesAsync();
                    }
                }
                //catch (DbEntityValidationException e)
                //{
                //    foreach(var error in e.EntityValidationErrors)
                //    {
                //        foreach(var validationError in error.ValidationErrors)
                //        {
                //            result.LogError(validationError.ErrorMessage);
                //        }
                //    }
                //    throw new Exception(String.Join("\r\n", result.ErrorMessages));
                //}
                catch (SqlException e)
                {
                    result.LogError(e.Message);
                }
                catch (Exception e)
                {
                    logger.Log("An error was encountered when adding the module to the database.  Please try again");
                    throw e;
                }
            }
            else
            {
                throw new Exception(String.Join("\r\n", result.ErrorMessages));
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Import new standards into CSET
 /// </summary>
 public async Task <HttpResponseMessage> Post([FromBody] ExternalStandard externalStandard)
 {
     return(await Task.Run(() =>
     {
         try
         {
             if (ModelState.IsValid)
             {
                 var id = BackgroundJob.Enqueue(() => HangfireExecutor.SaveImport(externalStandard, null));
                 return Request.CreateResponse(new { id });
             }
             else
             {
                 return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
             }
         }
         catch (Exception)
         {
             return Request.CreateResponse();
         }
     }));
 }
Ejemplo n.º 4
0
        public Task <HttpResponseMessage> Import([FromBody] ExternalStandard externalStandard)
        {
            var response = default(HttpResponseMessage);

            try
            {
                if (ModelState.IsValid)
                {
                    var id = BackgroundJob.Enqueue(() => HangfireExecutor.SaveImport(externalStandard, null));
                    response = Request.CreateResponse(new { id });
                }
                else
                {
                    response = Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
                }
            }
            catch (Exception ex)
            {
                response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
            }

            return(Task.FromResult(response));
        }
Ejemplo n.º 5
0
        public static ExternalStandard ToExternalStandard(this SETS standard)
        {
            var externalStandard = new ExternalStandard();

            externalStandard.ShortName = standard.Short_Name;
            externalStandard.Name      = standard.Full_Name;
            externalStandard.Summary   = standard.Standard_ToolTip;
            externalStandard.Category  = standard.Set_Category_.Set_Category_Name;

            var requirements = new List <ExternalRequirement>();

            //Caching for performance
            using (var db = new CSET_Context())
            {
                //db.Configuration.ProxyCreationEnabled = false;
                //db.Configuration.AutoDetectChangesEnabled = false;
                //db.Configuration.LazyLoadingEnabled = false;

                var reqs = standard.NEW_REQUIREMENT.ToList();
                Dictionary <int, List <QuestionAndHeading> > reqQuestions = reqs.Select(s => new { s.Requirement_Id, Questions = s.NEW_QUESTIONs().Select(t =>
                                                                                                                                                          new QuestionAndHeading()
                    {
                        Simple_Question = t.Simple_Question, Heading_Pair_Id = t.Heading_Pair_Id
                    }) })
                                                                            .ToDictionary(s => s.Requirement_Id, s => s.Questions.ToList());

                var reqHeadingIds = reqs.Select(s => s.Question_Group_Heading_Id).ToList();
                //var questionHeadings = from a in db.REQUIREMENT_QUESTIONS
                //                       join b in db.new on a.Question_Id equals b.Question_Id
                //                       join c in db.NEW_QUESTION_SETS on b.Question_Id equals c.Question_Id
                //                       where c.Set_Name == standard.Set_Name
                //                       select b.question_group_heading_id
                var questionHeadings = reqQuestions.SelectMany(s => s.Value.Select(t => t.Heading_Pair_Id)).Distinct().ToList();
                var reqHeadings      = db.QUESTION_GROUP_HEADING.Where(s => reqHeadingIds.Contains(s.Question_Group_Heading_Id)).ToDictionary(s => s.Question_Group_Heading_Id, s => s.Question_Group_Heading1);
                var headingPairs     = db.UNIVERSAL_SUB_CATEGORY_HEADINGS.Where(s => questionHeadings.Contains(s.Heading_Pair_Id));
                var subcategories    = headingPairs.Join(db.UNIVERSAL_SUB_CATEGORIES, s => s.Universal_Sub_Category_Id, s => s.Universal_Sub_Category_Id, (s, t) => new { s.Heading_Pair_Id, category = t })
                                       .ToDictionary(s => s.Heading_Pair_Id, s => s.category.Universal_Sub_Category);
                var headings = headingPairs.Join(db.QUESTION_GROUP_HEADING, s => s.Question_Group_Heading_Id, s => s.Question_Group_Heading_Id, (s, t) => new { s.Heading_Pair_Id, category = t })
                               .ToDictionary(s => s.Heading_Pair_Id, s => s.category.Question_Group_Heading1);

                var reqReferences = reqs.Select(s => new
                {
                    s.Requirement_Id,
                    Resources = s.REQUIREMENT_REFERENCES.Select(t =>
                                                                new ExternalResource
                    {
                        Destination      = t.Destination_String,
                        FileName         = t.Gen_File_.File_Name,
                        PageNumber       = t.Page_Number,
                        SectionReference = t.Section_Ref
                    })
                }).ToDictionary(t => t.Requirement_Id, t => t.Resources);

                var reqSource = reqs.Select(s => new
                {
                    s.Requirement_Id,
                    Resource = s.REQUIREMENT_SOURCE_FILES.Select(t =>
                                                                 new ExternalResource
                    {
                        Destination      = t.Destination_String,
                        FileName         = t.Gen_File_.File_Name,
                        PageNumber       = t.Page_Number,
                        SectionReference = t.Section_Ref
                    }).FirstOrDefault()
                }).ToDictionary(t => t.Requirement_Id, t => t.Resource);

                var reqLevels  = new Dictionary <int, int?>();
                var tempLevels = reqs.Select(s => new { s.Requirement_Id, levels = s.REQUIREMENT_LEVELS.Select(t => t.Standard_Level) }).ToList();
                if (tempLevels.Any())
                {
                    reqLevels = tempLevels.ToDictionary(s => s.Requirement_Id, s => ((s.levels != null && s.levels.Any()) ? s.levels?.Min(t =>
                    {
                        SalValues val;
                        if (Enum.TryParse(t, out val))
                        {
                            return((int)val);
                        }
                        else
                        {
                            return(1);
                        }
                    }) : 1));
                }

                foreach (var requirement in reqs)
                {
                    var externalRequirement = new ExternalRequirement()
                    {
                        Identifier   = requirement.Requirement_Title,
                        Text         = requirement.Requirement_Text,
                        Category     = requirement.Standard_Category,
                        Weight       = requirement.Weight,
                        Subcategory  = requirement.Standard_Sub_Category,
                        Supplemental = requirement.Supplemental_Info
                    };
                    var headingPairId = reqQuestions[requirement.Requirement_Id].Select(s => s.Heading_Pair_Id).FirstOrDefault(s => s != 0);

                    // References
                    var references = externalRequirement.References;
                    reqReferences.TryGetValue(requirement.Requirement_Id, out references);
                    externalRequirement.References = references.ToList();

                    // Heading
                    string heading = null;
                    headings.TryGetValue(headingPairId, out heading);
                    if (String.IsNullOrEmpty(heading))
                    {
                        reqHeadings.TryGetValue(requirement.Question_Group_Heading_Id, out heading);
                    }
                    if (String.IsNullOrEmpty(heading))
                    {
                        throw new Exception("Heading is not valid");
                    }
                    externalRequirement.Heading = heading;

                    // Questions
                    List <QuestionAndHeading> questions = new List <QuestionAndHeading>();
                    reqQuestions.TryGetValue(requirement.Requirement_Id, out questions);
                    externalRequirement.Questions = new QuestionList();
                    foreach (QuestionAndHeading h in questions)
                    {
                        externalRequirement.Questions.Add(h.Simple_Question);
                    }

                    // Subheading
                    string subheading = null;
                    subcategories.TryGetValue(headingPairId, out subheading);
                    if (subheading == null)
                    {
                        subheading = heading;
                    }
                    externalRequirement.Subheading = subheading;

                    // Source
                    var source = externalRequirement.Source;
                    reqSource.TryGetValue(requirement.Requirement_Id, out source);
                    externalRequirement.Source = source;

                    // SAL
                    int?sal;
                    reqLevels.TryGetValue(requirement.Requirement_Id, out sal);
                    externalRequirement.SecurityAssuranceLevel = sal;


                    requirements.Add(externalRequirement);
                }
                externalStandard.Requirements = requirements;
            }
            return(externalStandard);
        }