コード例 #1
0
        public void AssignRecipients(AssignmentResult result)
        {
            // we can now execute massive amount of inserts ;)
            WithConnection(conn =>
            {
                foreach (var assignment in result.Assignments)
                {
                    conn.Execute($@"INSERT INTO [{nameof(Assignment)}s] (GiverId, RecepientId) VALUES(@GiverId, @RecepientId)",
                                 new { assignment.GiverId, assignment.RecepientId });
                }
            });

            // and save abandoned for future review
            WithConnection(conn =>
            {
                foreach (var abandonedUser in result.Abandoned)
                {
                    conn.Execute($@"INSERT INTO [{nameof(Abandoned)}] (SantaUserId, Reason) VALUES(@SantaUserId, @Reason)",
                                 new { abandonedUser.SantaUserId, abandonedUser.Reason });
                }
            });

            // verify
            var assignmentsFromDb =
                WithConnection(conn => conn.ExecuteScalar <int>($"SELECT COUNT(*) FROM [{nameof(Assignment)}s]"));

            if (assignmentsFromDb != result.Assignments.Count)
            {
                throw new InvalidOperationException("Inserts were performed, but there is numerical mismatch!");
            }
        }
コード例 #2
0
        public void Assign()
        {
            var assigner = MockRepository.GenerateMock<IAssign<Rotation>>();

              var block = new Block();
              var rotations = new List<Rotation>() { new Rotation() };
              rotations.ForEach(block.Rotations.Add);

              var block2 = new Block();
              var rotations2 = new List<Rotation>() { new Rotation(), new Rotation() };
              rotations2.ForEach(block2.Rotations.Add);

              var residents = new List<Resident> { new Resident() };
              var residents2 = new List<Resident> { new Resident(), new Resident() };
              var assignmentResult = new AssignmentResult(residents2);
              assigner.Stub(a => a.Assign(Arg<IEnumerable<Rotation>>.Matches(l=> rotations.All(l.Contains)), Arg.Is(residents))).Return(assignmentResult);

              var residents3 = new List<Resident> { new Resident(), new Resident(), new Resident() };
              var assignmentResult2 = new AssignmentResult(residents3);
              assigner.Stub(a => a.Assign(Arg<IEnumerable<Rotation>>.Matches(l => rotations2.All(l.Contains)), Arg.Is(residents2))).Return(assignmentResult2);

              var result = new BlockAssigner(assigner).Assign(new List<Block> { block, block2 }, residents);

              Assert.AreEqual(residents3, result.Residents);
        }
コード例 #3
0
        public void Verify(AssignmentResult result)
        {
            Log.Info($"{nameof(AssignmentAlgorithm)}.{nameof(Verify)}: Success={result.Success}, user count={result.UserDisplayById.Count}, assignments={result.Assignments.Count}, abandoned={result.Abandoned.Count} (Loner:{result.Abandoned.Count(a => a.Reason == AbandonmentReason.LoneWontSend)}, Algorithm: {result.Abandoned.Count(a => a.Reason == AbandonmentReason.ComputerSaysNo)})");

            // 1. All people either matched or saved as abandoned
            if (result.Assignments.Count + result.Abandoned.Count != result.UserDisplayById.Count)
            {
                throw new InvalidOperationException($"{nameof(AssignmentAlgorithm)}.{nameof(Verify)}: Missing people");
            }

            // 2. Nobody should be sending to themselves
            if (result.Assignments.Any(a => a.RecepientId == a.GiverId))
            {
                throw new InvalidOperationException($"{nameof(AssignmentAlgorithm)}.{nameof(Verify)}: Sending to yourself");
            }

            // 3. Nobody should be sending abroad if they did not wish to
            foreach (var a in result.Assignments)
            {
                var giver     = result.UserDisplayById[a.GiverId];
                var recipient = result.UserDisplayById[a.RecepientId];
                if (giver.SendAbroad == SendAbroadOption.WillNot && giver.Country != recipient.Country)
                {
                    throw new InvalidOperationException($"{nameof(AssignmentAlgorithm)}.{nameof(Verify)}: Sending abroad against preferences");
                }
            }

            // 4. Everyone who sends, gets
            var givers     = new HashSet <long>(result.Assignments.Select(a => a.GiverId));
            var recipients = new HashSet <long>(result.Assignments.Select(a => a.RecepientId));

            if (!givers.SetEquals(recipients))
            {
                throw new InvalidOperationException($"{nameof(AssignmentAlgorithm)}.{nameof(Verify)}: Unequal exchange detected");
            }

            // 5. Duplicates?
            if (result.Assignments.Select(a => a.RecepientId).Distinct().Count() !=
                result.Assignments.Select(a => a.RecepientId).Count())
            {
                throw new InvalidOperationException(
                          $"{nameof(AssignmentAlgorithm)}.{nameof(Verify)}: Duplicates detected");
            }
        }
コード例 #4
0
        public ResultViewModel(ForSchoolsDBContext context, int ClassID, int SubjectID, int SessionTermID)
        {
            _context         = context;
            TotalGrade       = new List <TotalGrade>();
            Exam             = _context.Exam.Where(e => e.ClassId == ClassID && e.SubjectId == SubjectID && e.SessionTermId == SessionTermID);
            PsycomotResult   = _context.PsycomotResult.Where(a => a.ClassId == ClassID && a.SessionTermId == SessionTermID);
            CEResult         = _context.CeResult.Where(b => b.ClassId == ClassID && b.SubjectId == SubjectID && b.SessionTermId == SessionTermID);
            AssignmentResult = _context.AssignmentResult.Where(c => c.ClassId == ClassID && c.SubjectId == SubjectID && c.SessionTermId == SessionTermID);
            AffectiveResult  = _context.AffectiveResult.Where(d => d.ClassId == ClassID && d.SessionTermId == SessionTermID);
            CAResult         = _context.CaResult.Where(f => f.ClassId == ClassID && f.SubjectId == SubjectID && f.SessionTermId == SessionTermID);
            Students         = _context.SCSt.Include(y => y.Student).Where(z => z.ClassId == ClassID && z.SessionTermId == SessionTermID).Select(p => p.Student);
            IEnumerable <Grade> grade = _context.Grade.Where(v => v.SchoolId == _context.Class.Find(ClassID).SchoolId);

            foreach (var student in Students)
            {
                TotalGrade tg = new TotalGrade
                {
                    StudentId = student.Id,
                    Total     = (Exam.FirstOrDefault(a => a.StudentId == student.Id).Score +

                                 CAResult.FirstOrDefault(a => a.StudentId == student.Id).FirstCa +
                                 CAResult.FirstOrDefault(a => a.StudentId == student.Id).SecondCa +
                                 CAResult.FirstOrDefault(a => a.StudentId == student.Id).ThirdCa +
                                 CAResult.FirstOrDefault(a => a.StudentId == student.Id).FourthCa +
                                 CAResult.FirstOrDefault(a => a.StudentId == student.Id).FifthCa +

                                 AssignmentResult.FirstOrDefault(a => a.StudentId == student.Id).Assignment1 +
                                 AssignmentResult.FirstOrDefault(a => a.StudentId == student.Id).Assignment2 +
                                 AssignmentResult.FirstOrDefault(a => a.StudentId == student.Id).Assignment3 +
                                 AssignmentResult.FirstOrDefault(a => a.StudentId == student.Id).Assignment4 +
                                 AssignmentResult.FirstOrDefault(a => a.StudentId == student.Id).Assignment5 +

                                 CEResult.FirstOrDefault(a => a.StudentId == student.Id).ClassExercise1 +
                                 CEResult.FirstOrDefault(a => a.StudentId == student.Id).ClassExercise2 +
                                 CEResult.FirstOrDefault(a => a.StudentId == student.Id).ClassExercise3 +
                                 CEResult.FirstOrDefault(a => a.StudentId == student.Id).ClassExercise4 +
                                 CEResult.FirstOrDefault(a => a.StudentId == student.Id).ClassExercise5)
                };
                tg.Grade = grade.FirstOrDefault(u => u.UpperLimit >= tg.Total && u.LowerLimit <= tg.Total).Name;
                TotalGrade.Add(tg);
            }
        }
コード例 #5
0
 /// <summary>
 /// Creates an AssignmentDisplayProvider.
 /// </summary>
 public IAssignmentDisplayProvider CreateDisplayProvider(
     AssignmentResult assignmentResult)
 {
     if (assignmentResult.CombinedSubmissions)
     {
         return(new CombinedSubmissionsDisplayProvider
                (
                    _timeZoneProvider,
                    _assignmentUrlProvider,
                    (CombinedSubmissionsAssignmentResult)assignmentResult
                ));
     }
     else
     {
         return(new SeparateSubmissionsDisplayProvider
                (
                    _timeZoneProvider,
                    _assignmentUrlProvider,
                    (SeparateSubmissionsAssignmentResult)assignmentResult
                ));
     }
 }
コード例 #6
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public AssignmentResultViewModel(
            AssignmentResult result,
            IAssignmentDisplayProvider displayProvider)
        {
            var assignmentUrl = displayProvider.GetAssignmentUrl();

            AssignmentName = assignmentUrl != null
                                ? GetLink(assignmentUrl, result.AssignmentName, preventWrapping : true)
                                : GetColoredText("black", result.AssignmentName, bold: false, preventWrapping: true);

            DueDate = GetColoredText
                      (
                "black",
                displayProvider.GetAssignmentDueDate(),
                bold: false,
                preventWrapping: true
                      );

            Score = GetColoredText
                    (
                "black",
                $"{result.Score} / {result.TotalPoints}",
                bold: false,
                preventWrapping: true
                    );

            Status = GetColoredText
                     (
                result.Status.GetColor(),
                result.Status.GetText(),
                result.Status.GetBold(),
                preventWrapping: true
                     );

            ChildTableData = displayProvider.GetChildTableData();
        }
コード例 #7
0
        public async Task GenerateResults(string signature, string schoolId, string assignmentId)
        {
            var students     = this.classesService.GetStudentsFromClass(signature, schoolId);
            var firstResults = new List <AssignmentResult>();

            foreach (var studentId in students)
            {
                var result = new AssignmentResult()
                {
                    StudentId    = studentId,
                    AssignmentId = assignmentId,
                    DueDate      = DateTime.UtcNow,
                    Points       = 0,
                    Content      = string.Empty,
                    Stage        = 1
                };

                firstResults.Add(result);
            }

            await this.context.AssignmentResults.AddRangeAsync(firstResults);

            await this.context.SaveChangesAsync();
        }
コード例 #8
0
        public ActionResult Assignment()
        {
            ViewBag.Title = "Rezultatas";
            List <List <int> > pyramidNumbers = new List <List <int> >
            {
                new List <int> {
                    215
                },
                new List <int> {
                    192, 124
                },
                new List <int> {
                    117, 269, 442
                },
                new List <int> {
                    218, 836, 347, 235
                },
                new List <int> {
                    320, 805, 522, 417, 345
                },
                new List <int> {
                    229, 601, 728, 835, 133, 124
                },
                new List <int> {
                    248, 202, 277, 433, 207, 263, 257
                },
                new List <int> {
                    359, 464, 504, 528, 516, 716, 871, 182
                },
                new List <int> {
                    461, 441, 426, 656, 863, 560, 380, 171, 923
                },
                new List <int> {
                    381, 348, 573, 533, 448, 632, 387, 176, 975, 449
                },
                new List <int> {
                    223, 711, 445, 645, 245, 543, 931, 532, 937, 541, 444
                },
                new List <int> {
                    330, 131, 333, 928, 376, 733, 017, 778, 839, 168, 197, 197
                },
                new List <int> {
                    131, 171, 522, 137, 217, 224, 291, 413, 528, 520, 227, 229, 928
                },
                new List <int> {
                    223, 626, 034, 683, 839, 052, 627, 310, 713, 999, 629, 817, 410, 121
                },
                new List <int> {
                    924, 622, 911, 233, 325, 139, 721, 218, 253, 223, 107, 233, 230, 124, 233
                }
            };

            bool             checkedNumbersResult = CheckPyramidFormation(pyramidNumbers);
            AssignmentResult finalResult          = new AssignmentResult {
                MaximumNumber = 0, NumbersInLine = new List <List <NumberWithIndexes> >(), gottenVariables = pyramidNumbers
            };

            if (checkedNumbersResult)
            {
                finalResult.MaximumNumber = pyramidNumbers.First().First();
                finalResult.NumbersInLine.Add(new List <NumberWithIndexes>
                {
                    new NumberWithIndexes {
                        Number      = pyramidNumbers.First().First(),
                        NumberIndex = 0
                    }
                });

                AssignmentResult notBranchingResults = new AssignmentResult
                {
                    MaximumNumber = pyramidNumbers.First().First(),
                    NumbersInLine = new List <List <NumberWithIndexes> >()
                };

                foreach (var pyramidNumberList in pyramidNumbers.Skip(1))
                {
                    List <List <NumberWithIndexes> > tempNumberList   = new List <List <NumberWithIndexes> >();
                    List <List <NumberWithIndexes> > listsForRemoving = new List <List <NumberWithIndexes> >();
                    foreach (var lineVarList in finalResult.NumbersInLine)
                    {
                        NumberWithIndexes lastNumber = lineVarList.Last();
                        bool addedNewList            = false;
                        if ((lastNumber.Number % 2 == 0 && pyramidNumberList.Skip(lastNumber.NumberIndex).First() % 2 != 0) ||
                            (lastNumber.Number % 2 != 0 && pyramidNumberList.Skip(lastNumber.NumberIndex).First() % 2 == 0)
                            )
                        {
                            List <NumberWithIndexes> tempVarlist = lineVarList.ToList();
                            tempVarlist.Add(new NumberWithIndexes {
                                Number = pyramidNumberList.Skip(lastNumber.NumberIndex).First(), NumberIndex = lastNumber.NumberIndex
                            });
                            tempNumberList.Add(tempVarlist);
                            addedNewList = true;
                        }
                        if ((lastNumber.Number % 2 == 0 && pyramidNumberList.Skip(lastNumber.NumberIndex + 1).First() % 2 != 0) ||
                            (lastNumber.Number % 2 != 0 && pyramidNumberList.Skip(lastNumber.NumberIndex + 1).First() % 2 == 0)
                            )
                        {
                            List <NumberWithIndexes> tempVarlist2 = lineVarList.ToList();
                            tempVarlist2.Add(new NumberWithIndexes {
                                Number = pyramidNumberList.Skip(lastNumber.NumberIndex + 1).First(), NumberIndex = lastNumber.NumberIndex + 1
                            });
                            tempNumberList.Add(tempVarlist2);
                            addedNewList = true;
                        }

                        if (!addedNewList)
                        {
                            List <NumberWithIndexes> tempVarlistNonBranching = lineVarList;
                            tempVarlistNonBranching.Add(new NumberWithIndexes {
                                Number = pyramidNumberList.Skip(lastNumber.NumberIndex).First(), NumberIndex = lastNumber.NumberIndex + 1
                            });
                            if (tempVarlistNonBranching.Select(m => m.Number).Sum() > notBranchingResults.MaximumNumber)
                            {
                                notBranchingResults.MaximumNumber = tempVarlistNonBranching.Select(m => m.Number).Sum();
                                notBranchingResults.NumbersInLine = new List <List <NumberWithIndexes> >
                                {
                                    tempVarlistNonBranching
                                };
                            }
                            else if (tempVarlistNonBranching.Select(m => m.Number).Sum() == notBranchingResults.MaximumNumber)
                            {
                                notBranchingResults.NumbersInLine.Add(tempVarlistNonBranching);
                            }
                            listsForRemoving.Add(tempVarlistNonBranching);
                        }
                    }
                    if (listsForRemoving.Any())
                    {
                        foreach (var badList in listsForRemoving)
                        {
                            finalResult.NumbersInLine.Remove(badList);
                        }
                    }
                    if (tempNumberList.Any())
                    {
                        finalResult.NumbersInLine = tempNumberList;
                        finalResult.MaximumNumber = tempNumberList.Max(m => m.Select(n => n.Number).Sum());
                    }
                    if (finalResult.MaximumNumber > notBranchingResults.MaximumNumber)
                    {
                        notBranchingResults.MaximumNumber = finalResult.MaximumNumber;
                        notBranchingResults.NumbersInLine = new List <List <NumberWithIndexes> >();
                    }
                }
                var maxSumAfterBranching = 0;
                try
                {
                    maxSumAfterBranching = finalResult.NumbersInLine.Max(m => m.Select(n => n.Number).Sum());
                }
                catch
                {
                }
                finalResult.NumbersInLine = finalResult.NumbersInLine.Where(m => m.Select(n => n.Number).Sum() == maxSumAfterBranching).ToList();
            }
            else
            {
                ViewBag.Klaida = "Bad variables";
            }
            return(View(finalResult));
        }
コード例 #9
0
 public AssignWorkResponseMessage()
 {
     Result = AssignmentResult.Unknown;
 }
コード例 #10
0
        public ResultViewModel(ForSchoolsDBContext context, int ClassID, int SessionTermID)
        {
            _context         = context;
            TotalGrade       = new List <TotalGrade>();
            S_C_ST           = _context.SCSt.Where(z => z.ClassId == ClassID && z.SessionTermId == SessionTermID);
            Students         = _context.SCSt.Include(y => y.Student).Where(z => z.ClassId == ClassID && z.SessionTermId == SessionTermID).Select(p => p.Student);
            Exam             = _context.Exam.Where(e => e.ClassId == ClassID && e.SessionTermId == SessionTermID);
            PsycomotResult   = _context.PsycomotResult.Where(a => a.ClassId == ClassID && a.SessionTermId == SessionTermID);
            CEResult         = _context.CeResult.Where(b => b.ClassId == ClassID && b.SessionTermId == SessionTermID);
            AssignmentResult = _context.AssignmentResult.Where(c => c.ClassId == ClassID && c.SessionTermId == SessionTermID);
            AffectiveResult  = _context.AffectiveResult.Where(d => d.ClassId == ClassID && d.SessionTermId == SessionTermID);
            CAResult         = _context.CaResult.Where(f => f.ClassId == ClassID && f.SessionTermId == SessionTermID);

            foreach (var student in Students)
            {
                TotalGrade tg = new TotalGrade
                {
                    StudentId    = student.Id,
                    NoOfSubjects = _context.Exam.Where(k => k.StudentId == student.Id && k.SessionTermId == SessionTermID && k.Score != null).Count()
                };
                IEnumerable <Subject> subjects = _context.Exam.Include(q => q.Subject).Where(k => k.StudentId == student.Id && k.SessionTermId == SessionTermID && k.Score != null).Select(g => g.Subject);

                Exam             = Exam.Where(e => e.StudentId == student.Id);
                PsycomotResult   = PsycomotResult.Where(a => a.StudentId == student.Id);
                CEResult         = CEResult.Where(b => b.StudentId == student.Id);
                AssignmentResult = AssignmentResult.Where(c => c.StudentId == student.Id);
                AffectiveResult  = AffectiveResult.Where(d => d.StudentId == student.Id);
                CAResult         = CAResult.Where(f => f.StudentId == student.Id);

                foreach (var subject in subjects)
                {
                    tg.Total = tg.Total + (Exam.FirstOrDefault(a => a.SubjectId == subject.Id).Score +

                                           CAResult.FirstOrDefault(a => a.SubjectId == subject.Id).FirstCa +
                                           CAResult.FirstOrDefault(a => a.SubjectId == subject.Id).SecondCa +
                                           CAResult.FirstOrDefault(a => a.SubjectId == subject.Id).ThirdCa +
                                           CAResult.FirstOrDefault(a => a.SubjectId == subject.Id).FourthCa +
                                           CAResult.FirstOrDefault(a => a.SubjectId == subject.Id).FifthCa +

                                           AssignmentResult.FirstOrDefault(a => a.SubjectId == subject.Id).Assignment1 +
                                           AssignmentResult.FirstOrDefault(a => a.SubjectId == subject.Id).Assignment2 +
                                           AssignmentResult.FirstOrDefault(a => a.SubjectId == subject.Id).Assignment3 +
                                           AssignmentResult.FirstOrDefault(a => a.SubjectId == subject.Id).Assignment4 +
                                           AssignmentResult.FirstOrDefault(a => a.SubjectId == subject.Id).Assignment5 +

                                           CEResult.FirstOrDefault(a => a.SubjectId == subject.Id).ClassExercise1 +
                                           CEResult.FirstOrDefault(a => a.SubjectId == subject.Id).ClassExercise2 +
                                           CEResult.FirstOrDefault(a => a.SubjectId == subject.Id).ClassExercise3 +
                                           CEResult.FirstOrDefault(a => a.SubjectId == subject.Id).ClassExercise4 +
                                           CEResult.FirstOrDefault(a => a.SubjectId == subject.Id).ClassExercise5);
                }
                if (tg.NoOfSubjects == 0)
                {
                    tg.Average = 0;
                }
                else
                {
                    tg.Average = tg.Total / tg.NoOfSubjects;
                }
                Avg = Avg + tg.Average;
                TotalGrade.Add(tg);
            }
            if (Students.Count() == 0)
            {
                Avg = 0;
            }
            else
            {
                Avg = Avg / Students.Count();
            }
        }
コード例 #11
0
 public void SaveAssignments(AssignmentResult result)
 => _userRepository.AssignRecipients(result);
コード例 #12
0
        public async Task <ActionResult <ImportExcelDTO> > Import(ImportExcelDTO payload)
        {
            foreach (var(studentId, studentResult) in payload.StudentResults)
            {
                var student = new Student
                {
                    Id       = studentId,
                    FullName = studentResult.Name
                };

                var courseResult = new CourseResult
                {
                    CourseId  = payload.CourseId,
                    StudentId = studentId,
                };

                foreach (var(assignmentId, assignmentTaskResults) in studentResult.AssignmentTaskResults)
                {
                    var assignmentResult = new AssignmentResult
                    {
                        AssignmentId = assignmentId,
                    };

                    foreach (var(assignmentTaskId, grade) in assignmentTaskResults)
                    {
                        var assignmentTaskResult = new AssignmentTaskResult
                        {
                            AssignmentTaskId = assignmentTaskId,
                            Grade            = grade
                        };

                        assignmentResult.AssignmentTaskResults.Add(assignmentTaskResult);
                    }

                    courseResult.AssignmentResults.Add(assignmentResult);
                }

                var existingStudent = await _context.Students.FindAsync(student.Id);

                if (existingStudent == null)
                {
                    _context.Students.Add(student);
                }
                else
                {
                    _context.Entry(existingStudent).CurrentValues.SetValues(student);
                }

                var existingCourseResult = await _context.CourseResults.FindAsync(courseResult.Id);

                if (existingCourseResult == null)
                {
                    _context.CourseResults.Add(courseResult);
                }
                else
                {
                    _context.Entry(existingCourseResult).CurrentValues.SetValues(courseResult);
                }
            }

            await _context.SaveChangesAsync();

            return(NoContent());
        }