public QuestionnaireUtils() { defaultModel = new QuestionnaireViewModels { AssessId = 0, UserId = Guid.Empty, Answers = new List<QuestionnaireViewModels.AnswerKeyArr>() }; }
public Task<QuestionnaireViewModels> GetQuestionnaireTopic(int AssessId, Guid UserId, int offset = 1) { return Task.Factory.StartNew(() => { try { QuestionnaireViewModels result = new QuestionnaireViewModels { AssessId = AssessId, UserId = UserId, Offset = offset }; using (var ctx = new EvaluationSysEntities()) { int pagecount = 6, totalcount = 0; var pagesetting = ctx.SettingConfig.FirstOrDefault(f => f.Name == "PageCount" && f.ConfigStatus >= 0)?.Value; int.TryParse(pagesetting ?? "6", out pagecount); var assess = ctx.AssessObj.FirstOrDefault(f => f.Id == AssessId && f.PID == ProjectId && f.UserID == UserId && f.Status >= -1); if (assess == null) throw new ArgumentException("Invaild Parameter", nameof(AssessId)); var page = new List<string>(assess.TestPage.TopicArr.Split(',')).ConvertAll(int.Parse); result.Answers = (from c in ctx.TopicRecord where page.Contains(c.Id) && c.PID == ProjectId orderby c.Id ascending select new QuestionnaireViewModels.AnswerKeyArr { TopicHead = c.Heading, TopicId = c.Id, TopicType = c.Type, topic = c, subject = c.SubjectiveItems.FirstOrDefault(f => f.AssessId == AssessId), }).Paging(offset, pagecount, out totalcount).ToList(); result.IsUserName = assess.UserInfo1.UserName; result.IsUserDepartment = assess.UserInfo1.BM; result.IsUserPosition = assess.UserInfo1.ZW; result.TotalCount = totalcount; result.TotalPage = totalcount / pagecount + (totalcount % pagecount > 0 ? 1 : 0); int i = (offset - 1) * pagecount; foreach (var ans in result.Answers) { ans.RecordNum = ++i; if (ans.TopicType == "A") { ans.Answer = assess.KeyArr?.Split(',').FirstOrDefault(f => int.Parse(f.Split('-')[0]) == ans.TopicId)?.Split('-')[1]; ans.Options = new List<string>() { ans.topic?.KeyA, ans.topic?.KeyB, ans.topic?.KeyC, ans.topic?.KeyD, ans.topic?.KeyE, ans.topic?.KeyF }; } else { ans.Answer = ans.subject?.Answers; } } } return result; } catch (Exception ex) { errmsg = ex.GetBaseException().Message; throw ex; } }); }
public bool AnswersSave(QuestionnaireViewModels models, out string ErrMsg) { ErrMsg = null; try { using (var ctx = new EvaluationSysEntities()) { var assess = ctx.AssessObj.FirstOrDefault(f => f.Id == models.AssessId && f.PID == ProjectId && f.UserID == models.UserId && f.Status >= -1); if (assess == null) throw new ArgumentException("Invaild Parameter", nameof(models.AssessId)); List<string> tmpans = new List<string>(); List<int> tmpsub = new List<int>(); if (!string.IsNullOrEmpty(assess.KeyArr)) tmpans.AddRange(assess.KeyArr.Split(',')); if (!string.IsNullOrEmpty(assess.SubjectArr)) tmpsub.AddRange(assess.SubjectArr.Split(',').ToList().ConvertAll(int.Parse)); if (models.Answers == null) return true; foreach (var ans in models.Answers) { if (ans.TopicType == "A") { var objcet = tmpans.FirstOrDefault(w => int.Parse(w.Split('-')[0]) == ans.TopicId); if (objcet != null) tmpans.Remove(objcet); tmpans.Add(ans.Answer); } else { if (!tmpsub.Contains(ans.TopicId)) tmpsub.Add(ans.TopicId); var subject = ctx.TopicRecord.FirstOrDefault(f => f.Id == ans.TopicId && f.PID == ProjectId)?.SubjectiveItems.FirstOrDefault(f => f.AssessId == assess.Id); if (subject == null) { ctx.SubjectiveItems.Add(new SubjectiveItems { TopicId = ans.TopicId, PID = ProjectId, AssessId = assess.Id, CreateTime = DateTime.Now, Answers = ans.Answer, }); } else { subject.Answers = ans.Answer; } } } if (models.TotalPage == models.Offset) assess.Status = 1; assess.EndTime = DateTime.Now; tmpans = tmpans.OrderBy(o => int.Parse(o.Split('-')[0])).ToList(); assess.KeyArr = string.Join(",", tmpans); assess.SubjectArr = string.Join(",", tmpsub); return ctx.SaveChanges() >= 0; } } catch (Exception ex) { ErrMsg = errmsg = ex.GetBaseException().Message; return false; } }
public ActionResult QuestionnaireSave(QuestionnaireViewModels answers) { string err = "";string href = Url.Action("Questionnaire", new { offset = answers.Offset + 1, assId = answers.AssessId, userId = answers.UserId.ToString("N") }); if (answers.Offset == answers.TotalPage) href = Url.Action("Action", new { userId = answers.UserId.ToString("N") }); if (!questionnaireUtils.AnswersSave(answers,out err)) { return Json(new { isErr = true, errMsg = err, href = Url.Action("Action", new { userId = answers.UserId.ToString("N") }) }); } return Json(new { isErr = false, href = href }); }