public AnswerViewModel(ExamTask sourseTask, int gotPoints) { task_id = sourseTask.Id; right_answer = sourseTask.Answer; max_points = sourseTask.TaskTopic.PointsPerTask; type = sourseTask.TaskTopic.IsShort ? 0 : 1; points = gotPoints; }
public ExamTaskViewModel(ExamTask sourseTask, int?user_points = null) { id = sourseTask.Id; text = sourseTask.Text; topic_id = sourseTask.TaskTopic.Id; topic_name = sourseTask.TaskTopic.Name; type = sourseTask.TaskTopic.IsShort ? 0 : 1; code = sourseTask.TaskTopic.Code; max_points = sourseTask.TaskTopic.PointsPerTask; this.user_points = user_points; }
private UserTaskAttempt GenerateNewEmptyAttempt(ExamTask task) { UserTaskAttempt result = null; if (task.TaskTopic.IsShort) { result = new UserSimpleTaskAttempt() { ExamTask = task }; } else { result = new UserManualCheckingTaskAttempt() { ExamTask = task }; } if (result != null) { //_dbContext.UserTaskAttempts.Add(result); } return(result); }
public async Task AddNewTasks(ExamAppDbContext examAppDbContext) { var exam = examAppDbContext.Exams.OfType <EgeExam>().FirstOrDefault(); var existingTopics = examAppDbContext.TaskTopics.ToList(); var existingTasks = examAppDbContext.Tasks.ToList(); var createdTasksTopics = new List <TaskTopic>(); var createdTasks = new List <ExamTask>(); var config = Configuration.Default.WithDefaultLoader(); const int numberOfVariants = 20; for (int i = 1; i <= numberOfVariants; i++) { var address = "http://kpolyakov.spb.ru/school/ege/gen.php?B=on&C=on&action=viewVar&varId=" + i; var document = await BrowsingContext.New(config).OpenAsync(address).ConfigureAwait(false); var cellSelector = "td.topicview script"; var cells = document.QuerySelectorAll(cellSelector); const string numberPrefix = "№ "; const string textPrexfix = "changeImageFilePath('"; foreach (var cell in cells) { var result = cell.TextContent; var firstOrDefault = cell.ParentElement.ParentElement.QuerySelectorAll("td.egeno span").FirstOrDefault(); if (firstOrDefault != null) { int orderNum = int.Parse(firstOrDefault.TextContent); int numStartPoint = result.IndexOf(numberPrefix) + numberPrefix.Length; int textStartPoint = result.IndexOf(textPrexfix) + textPrexfix.Length; if (existingTopics.All(x => x.Number != orderNum)) { var newTopic = new TaskTopic() { Exam = exam, Name = "DefaultName" + orderNum, Number = orderNum, PointsPerTask = 0 }; createdTasksTopics.Add(newTopic); existingTopics.Add(newTopic); } var topic = existingTopics.FirstOrDefault(x => x.Number == orderNum); var number = int.Parse(result.Substring(numStartPoint, result.IndexOf(")") - numStartPoint)); if (!existingTasks.Any(x => x.Number == number)) { var newTask = new ExamTask() { TaskTopic = topic, Number = number, Text = result.Substring(textStartPoint, result.LastIndexOf("\') );") - textStartPoint), Answer = document .QuerySelectorAll("table.varanswer tr td.egeno") .Where( x => int.Parse(x.TextContent.Substring(0, x.TextContent.Length - 1)) == orderNum) .Next("td.answer") .FirstOrDefault()?.TextContent }; createdTasks.Add(newTask); existingTasks.Add(newTask); } } } } examAppDbContext.TaskTopics.AddRange(createdTasksTopics); examAppDbContext.Tasks.AddRange(createdTasks); CreateEgeTasksTopics(examAppDbContext, existingTopics); examAppDbContext.SaveChanges(); }
private bool RatedAnswerIsCorrect(ExamTask task, UserTaskAttempt attempt) { return(task.TaskTopic.PointsPerTask == attempt.Points); }
private Task CreateNewTask(string type, string title, string description, Priority priority, DateTime due) { if (title.Length < 3) { Toastr.Warning("Warning", "Title length is too short"); return(null); } if (description.Length < 10) { Toastr.Warning("Warning", "Description length is too short."); return(null); } if (!DateService.DateAfterToday(due)) { Toastr.Warning("Warning", "The due date must be in the future."); return(null); } Task newTask = null; Toastr.TurnOffNotifications(); // Prevent multiple 'update' notifications DateTime now = DateTime.Now; switch (type) { case "Assignment": string subject = tbxSubject.Text; int percentage = int.Parse(tbxPercentage.Text); newTask = new AssignmentTask(title, description, priority, due, now, subject, percentage); break; case "Exam": string subjectExam = tbxSubjectExam.Text; string materials = tbxMaterials.Text; int percentageExam = int.Parse(tbxPercentExam.Text); newTask = new ExamTask(title, description, priority, due, now, subjectExam, percentageExam, new List <string>(materials.Split(','))); break; case "Event": string location = tbxLocation.Text; newTask = new EventTask(title, description, priority, due, now, location); break; case "Payment": decimal amount = decimal.Parse(tbxAmount.Text); newTask = new PaymentTask(title, description, priority, due, now, amount); break; default: Toastr.Error("Error", "Invalid task type."); break; } Toastr.TurnOnNotifications(); if (newTask != null) { Toastr.Success("Created", "The '" + title + "' task has been created"); } return(newTask); }