need to fix quiz assignment bug

This commit is contained in:
2023-08-18 14:32:08 -06:00
parent a57a687f3c
commit 6a76172231
8 changed files with 109 additions and 46 deletions

View File

@@ -9,18 +9,20 @@ public static class CoursePlannerExtensions
{
public static LocalCourse GeneralCourseCleanup(this LocalCourse incomingCourse)
{
var cleanModules = incomingCourse.Modules.Select(
module =>
module with
{
Assignments = module.Assignments
.OrderBy(a => a.DueAt)
.DistinctBy(a => a.Id)
.Select(a => a.validateSubmissionTypes())
.Select(a => a.validateDates())
.ToArray()
}
).ToArray();
var cleanModules = incomingCourse.Modules
.Select(
module =>
module with
{
Assignments = module.Assignments
.OrderBy(a => a.DueAt)
.DistinctBy(a => a.Id)
.Select(a => a.validateSubmissionTypes())
.Select(a => a.validateDates())
.ToArray()
}
)
.ToArray();
var cleanStartDay = new DateTime(
incomingCourse.StartDate.Year,
@@ -102,18 +104,16 @@ public static class CoursePlannerExtensions
}
return assignment;
}
private static LocalQuiz validateQuizForCanvasId(
this LocalQuiz quiz,
IEnumerable<CanvasQuiz> canvasQuizzes
)
{
var assignmentIdInCanvas =
canvasQuizzes.FirstOrDefault(cq => cq.Id == quiz.CanvasId) != null;
var assignmentIdInCanvas = canvasQuizzes.FirstOrDefault(cq => cq.Id == quiz.CanvasId) != null;
if (!assignmentIdInCanvas)
{
Console.WriteLine(
$"no id in canvas for quiz, removing old canvas id: {quiz.Name}"
);
Console.WriteLine($"no id in canvas for quiz, removing old canvas id: {quiz.Name}");
return quiz with { CanvasId = null };
}
return quiz;
@@ -125,19 +125,18 @@ public static class CoursePlannerExtensions
assignment.SubmissionTypes.FirstOrDefault(t => t == SubmissionType.DISCUSSION_TOPIC) != null;
if (containsDiscussion)
return assignment with
{
SubmissionTypes = new string[] { SubmissionType.DISCUSSION_TOPIC }
};
return assignment with { SubmissionTypes = new string[] { SubmissionType.DISCUSSION_TOPIC } };
return assignment;
}
public static LocalAssignment validateDates(this LocalAssignment assignment)
public static LocalAssignment validateDates(this LocalAssignment assignment)
{
var dueAt = assignment.DueAt.AddMilliseconds(0).AddMilliseconds(0);
var lockAt = assignment.LockAt?.AddMilliseconds(0).AddMilliseconds(0);
return assignment with
{
return assignment with
{
DueAt=assignment.DueAt.AddMilliseconds(0).AddMilliseconds(0),
LockAt=assignment.LockAt?.AddMilliseconds(0).AddMilliseconds(0)
};
}
DueAt = dueAt,
LockAt = assignment.LockAtDueDate ? dueAt : lockAt
};
}
}

View File

@@ -78,7 +78,9 @@ public static partial class AssignmentSyncronizationExtensions
.Replace(">", "")
.Replace("<", "")
.Replace("&quot;", "")
.Replace("\"", "");
.Replace("\"", "")
.Replace("&amp;", "")
.Replace("&", "");
var canvasHtmlDescription = canvasAssignment.Description;
canvasHtmlDescription = CanvasScriptTagRegex().Replace(canvasHtmlDescription, "");
@@ -90,7 +92,9 @@ public static partial class AssignmentSyncronizationExtensions
.Replace(">", "")
.Replace("<", "")
.Replace("&quot;", "")
.Replace("\"", "");
.Replace("\"", "")
.Replace("&amp;", "")
.Replace("&", "");
var canvasComparisonDueDate =
canvasAssignment.DueAt != null
@@ -115,12 +119,37 @@ public static partial class AssignmentSyncronizationExtensions
)
: new DateTime();
var canvasComparisonLockDate =
canvasAssignment.LockAt != null
? new DateTime(
year: canvasAssignment.LockAt.Value.Year,
month: canvasAssignment.LockAt.Value.Month,
day: canvasAssignment.LockAt.Value.Day,
hour: canvasAssignment.LockAt.Value.Hour,
minute: canvasAssignment.LockAt.Value.Minute,
second: canvasAssignment.LockAt.Value.Second
)
: new DateTime();
var localComparisonLockDate = localAssignment.LockAtDueDate
? localComparisonDueDate
: canvasAssignment.LockAt != null
? new DateTime(
year: localAssignment.LockAt?.Year ?? 0,
month: localAssignment.LockAt?.Month ?? 0,
day: localAssignment.LockAt?.Day ?? 0,
hour: localAssignment.LockAt?.Hour ?? 0,
minute: localAssignment.LockAt?.Minute ?? 0,
second: localAssignment.LockAt?.Second ?? 0
)
: new DateTime();
var dueDatesSame =
canvasAssignment.DueAt != null && canvasComparisonDueDate == localComparisonDueDate;
var lockDatesSame = canvasAssignment.LockAt != null && canvasComparisonLockDate == localComparisonLockDate;
var descriptionSame = canvasHtmlDescription == localHtmlDescription;
var nameSame = canvasAssignment.Name == localAssignment.Name;
var lockDateSame = canvasAssignment.LockAt == localAssignment.LockAt;
var pointsSame = canvasAssignment.PointsPossible == localAssignment.PointsPossible;
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
localAssignment.SubmissionTypes.Select(t => t.ToString())
@@ -134,12 +163,24 @@ public static partial class AssignmentSyncronizationExtensions
Console.WriteLine(canvasComparisonDueDate);
Console.WriteLine(localComparisonDueDate);
Console.WriteLine(
$"Due dates different for {localAssignment.Name}, local: {localAssignment.DueAt}, in canvas {canvasAssignment.DueAt}"
$"Due dates different for assignment {localAssignment.Name}, local: {localAssignment.DueAt}, in canvas {canvasAssignment.DueAt}"
);
Console.WriteLine(JsonSerializer.Serialize(localAssignment.DueAt));
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment.DueAt));
}
if (!lockDatesSame)
{
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment));
Console.WriteLine(canvasComparisonLockDate);
Console.WriteLine(localComparisonLockDate);
Console.WriteLine(
$"Lock dates different for assignment {localAssignment.Name}, local: {localAssignment.LockAt}, in canvas {canvasAssignment.LockAt}"
);
Console.WriteLine(JsonSerializer.Serialize(localAssignment.LockAt));
Console.WriteLine(JsonSerializer.Serialize(canvasAssignment.LockAt));
}
if (!descriptionSame)
{
Console.WriteLine();
@@ -161,10 +202,6 @@ public static partial class AssignmentSyncronizationExtensions
Console.WriteLine(
$"names different for {localAssignment.Name}, local: {localAssignment.Name}, in canvas {canvasAssignment.Name}"
);
if (!lockDateSame)
Console.WriteLine(
$"Lock Dates different for {localAssignment.Name}, local: {localAssignment.LockAt}, in canvas {canvasAssignment.LockAt}"
);
if (!pointsSame)
Console.WriteLine(
$"Points different for {localAssignment.Name}, local: {localAssignment.PointsPossible}, in canvas {canvasAssignment.PointsPossible}"
@@ -177,7 +214,7 @@ public static partial class AssignmentSyncronizationExtensions
return !nameSame
|| !dueDatesSame
|| !lockDateSame
|| !lockDatesSame
|| !descriptionSame
|| !pointsSame
|| !submissionTypesSame;

View File

@@ -134,6 +134,26 @@ public static partial class ModuleSyncronizationExtensions
}
}
foreach(var localQuiz in localModule.Quizzes)
{
var canvasModuleItemContentIds = canvasModulesItems[moduleCanvasId].Select(i => i.ContentId);
if (!canvasModuleItemContentIds.Contains(localQuiz.CanvasId))
{
var canvasAssignmentId =
localQuiz.CanvasId
?? throw new Exception("cannot create module item if assignment does not have canvas id");
await canvas.CreateModuleItem(
canvasId,
moduleCanvasId,
localQuiz.Name,
"Quiz",
canvasAssignmentId
);
anyUpdated = true;
}
}
return anyUpdated;
}