protected override void ProcessDataTable(EducationSecurityPrincipal user, DataTable dataTable, ServiceUploadModel model)
        {
            string studentSISId, subjectName;
            Subject subject = new Subject();
            int duration;
            DateTime? dateAttended;
            Student student;

            for (int i = StartRow; i < dataTable.Rows.Count; i++)
            {
                studentSISId = dataTable.Rows[i][1].ToString();
                subjectName = dataTable.Rows[i][3].ToString();
                student = StudentRepository.Items.Where(s => s.StudentSISId == studentSISId).SingleOrDefault();
                subject = RetrieveSubject(subjectName);
                if (IsValidServiceOffering(user, i, studentSISId, student, dataTable, out dateAttended, out duration, model, subject))
                {
                    string notes = dataTable.Rows[i][5].ToString();
                    var studentAssignedOffering = StudentAssignedOfferingRepository.Items.Where(s => s.StudentId == student.Id && s.ServiceOfferingId == model.ServiceOfferingId).FirstOrDefault();
                    if (studentAssignedOffering == null)
                    {
                        studentAssignedOffering = CreateNewStudentAssignedOffering(student, model, user);
                    }
                    Create(studentAssignedOffering, (DateTime)dateAttended, subject, duration, notes, user);
                    model.SuccessfulRowsCount++;
                }
                model.ProcessedRowCount++;
            }
        }
 private void Create(StudentAssignedOffering studentAssignedOffering, DateTime dateAttended, Subject subject, decimal duration, string notes, EducationSecurityPrincipal user)
 {
     var newAttendance = new ServiceAttendance();
     newAttendance.StudentAssignedOffering = studentAssignedOffering;
     newAttendance.DateAttended = dateAttended;
     newAttendance.Subject = subject;
     newAttendance.Duration = duration;
     newAttendance.Notes = notes;
     newAttendance.CreatingUser = user.Identity.User;
     ServiceAttendanceRepository.Add(newAttendance);
 }
        public void GivenASubject_WhenUpdate_ThenContextSetsModified()
        {
            var expected = new Subject { Id = 1 };

            Target.ExpectException<NotSupportedException>(() => Target.Update(expected));
        }
        public void GivenASubject_WhenRemove_ThenRemoveFromContext()
        {
            var item = new Subject { Id = 1 };

            Target.ExpectException<NotSupportedException>(() => Target.Remove(item));
        }
        public void GivenASubject_WhenAdd_ThenAddToContext()
        {
            var expected = new Subject { Id = 1 };

            Target.ExpectException<NotSupportedException>(() => Target.Add(expected));
        }
 public void Update(Subject item)
 {
     throw new NotSupportedException("Update is not supported in this repository");
 }
 public void Remove(Subject item)
 {
     throw new NotSupportedException("Remove is not supported in this repository");
 }
 public void Add(Subject item)
 {
     throw new NotSupportedException("Add is not supported in this repository");
 }
 private static bool MatchProperties(ServiceAttendance actualState, StudentAssignedOffering expectedStudentAssignedOffering, DateTime expectedDateAttended, Subject expectedSubject, decimal expectedDuration, string expectedNotes)
 {
     Assert.AreEqual(expectedStudentAssignedOffering, actualState.StudentAssignedOffering);
     Assert.AreEqual(expectedDateAttended, actualState.DateAttended);
     Assert.AreEqual(expectedSubject.Id, actualState.Subject.Id);
     Assert.AreEqual(expectedDuration, actualState.Duration);
     Assert.AreEqual(expectedNotes, actualState.Notes);
     return true;
 }
 private Subject RetrieveSubject(string subjectName)
 {
     if (subjectName == string.Empty)
     {
         if (_DefaultSubjectCache == null)
         {
             _DefaultSubjectCache = SubjectRepository.Items.Where(s => s.Name.Equals(Subject.DefaultName)).FirstOrDefault();
         }
         return _DefaultSubjectCache;
     }
     else
     {
         return SubjectRepository.Items.Where(s => s.Name.Equals(subjectName)).FirstOrDefault();
     }
 }
 private bool IsValidServiceOffering(EducationSecurityPrincipal user, int index, string studentSISId, Student student, DataTable dataTable, out DateTime? dateAttended, out int duration, ServiceUploadModel model, Subject subject)
 {
     dateAttended = null;
     duration = 0;
     string subjectName = dataTable.Rows[index][3].ToString();
     if (studentSISId == null || student == null)
     {
         ProcessError(dataTable.Rows[index], string.Format(CultureInfo.CurrentCulture, "Malformed Student Id on row {0}", index + 1), model);
         return false;
     }
     else if (!GrantUserAccessToSchedulingAnOffering(user, student))
     {
         ProcessError(dataTable.Rows[index], string.Format(CultureInfo.CurrentCulture, "You do not have permission to interact with the referenced student on row {0}", index + 1), model);
         return false;
     }
     else if (!ExcelUtility.TryGetOADate(dataTable.Rows[index][2].ToString(), out dateAttended))
     {
         ProcessError(dataTable.Rows[index], string.Format(CultureInfo.CurrentCulture, "Malformed Date Attended on row {0}", index + 1), model);
         return false;
     }
     else if (subject == null)
     {
         ProcessError(dataTable.Rows[index], string.Format(CultureInfo.CurrentCulture, "Malformed Subject on row {0}", index + 1), model);
         return false;
     }
     else if (dataTable.Rows[index][4].ToString() != string.Empty && !int.TryParse(dataTable.Rows[index][4].ToString(), out duration))
     {
         ProcessError(dataTable.Rows[index], string.Format(CultureInfo.CurrentCulture, "Malformed Duration on row {0}", index + 1), model);
         return false;
     }
     return true;
 }