//TODO : notification sending public AnnouncementQnA AskQuestion(int announcementId, AnnouncementTypeEnum announcementType, string question) { Trace.Assert(Context.PersonId.HasValue && Context.SchoolLocalId.HasValue); using (var uow = Update()) { var da = new AnnouncementQnADataAccess(uow); var ann = ServiceLocator.GetAnnouncementService(announcementType).GetAnnouncementById(announcementId); var annQnA = new AnnouncementQnAComplex { AnnouncementRef = announcementId, AskerRef = Context.PersonId.Value, Question = question, QuestionTime = Context.NowSchoolTime, State = AnnouncementQnAState.Asked }; da.Insert(annQnA); uow.Commit(); annQnA = da.GetAnnouncementQnA(new AnnouncementQnAQuery { AnnouncementId = announcementId, CallerId = annQnA.AskerRef, SchoolId = Context.SchoolLocalId.Value }).AnnouncementQnAs.OrderByDescending(x => x.Id).First(); ServiceLocator.NotificationService.AddAnnouncementNotificationQnToAuthor(annQnA.Id, ann.Id, announcementType); return(annQnA); } }
public void Delete(int announcementQnAId) { // todo: think about security using (var uow = Update()) { var da = new AnnouncementQnADataAccess(uow); var annQnA = GetAnnouncementQnA(announcementQnAId); da.Delete(annQnA.Id); uow.Commit(); } }
protected virtual IList <AnnouncementDetails> BuildGetDetailsesResult(SqlDataReader reader) { IList <AnnouncementDetails> res = new List <AnnouncementDetails>(); while (reader.Read()) { var ann = reader.Read <AnnouncementDetails>(); ann.AnnouncementData = ReadAnnouncementData(ann, reader); ann.StudentAnnouncements = new List <StudentAnnouncementDetails>(); res.Add(ann); } reader.NextResult(); var annAtts = reader.ReadList <AnnouncementAttachment>(true); foreach (var ann in res) { ann.AttachmentNames = annAtts.Where(x => x.AnnouncementRef == ann.Id).Select(x => x.Attachment.Name).ToList(); } reader.NextResult(); var owners = reader.ReadList <Person>(); reader.NextResult(); var announcementQnAs = AnnouncementQnADataAccess.ReadAnnouncementQnAComplexes(reader); reader.NextResult(); var announcementAttributes = AnnouncementAssignedAttributeDataAccess.ReadAttributes(reader); reader.NextResult(); var announcementApplications = reader.ReadList <AnnouncementApplication>(); reader.NextResult(); var announcementStandards = reader.ReadList <AnnouncementStandardDetails>(); reader.NextResult(); var announcementAttachments = reader.ReadList <AnnouncementAttachment>(true); foreach (var ann in res) { ann.Owner = owners.FirstOrDefault(x => ann.OwnereId == x.Id); ann.AnnouncementQnAs = announcementQnAs.Where(x => x.AnnouncementRef == ann.Id).ToList(); ann.AnnouncementAttributes = announcementAttributes.Where(x => x.AnnouncementRef == ann.Id).ToList(); ann.AnnouncementApplications = announcementApplications.Where(x => x.AnnouncementRef == ann.Id).ToList(); ann.AnnouncementStandards = announcementStandards.Where(x => x.AnnouncementRef == ann.Id).ToList(); ann.AnnouncementAttachments = announcementAttachments.Where(x => x.AnnouncementRef == ann.Id).ToList(); } return(res); }
public AnnouncementQnA MarkUnanswered(int announcementQnAId) { // todo: think about security using (var uow = Update()) { var da = new AnnouncementQnADataAccess(uow); var annQnA = GetAnnouncementQnA(announcementQnAId); annQnA.State = AnnouncementQnAState.Unanswered; da.Update(annQnA); uow.Commit(); return(annQnA); } }
public AnnouncementQnA EditQuestion(int announcementQnAId, string question) { using (var uow = Update()) { var da = new AnnouncementQnADataAccess(uow); var annQnA = GetAnnouncementQnA(announcementQnAId); if (!CanEditQuestion(annQnA, uow)) { throw new ChalkableSecurityException(); } annQnA.Question = question; da.Update(annQnA); uow.Commit(); return(annQnA); } }
public AnnouncementQnA Answer(int announcementQnAId, AnnouncementTypeEnum announcementType, string question, string answer) { Trace.Assert(Context.PersonId.HasValue); using (var uow = Update()) { var da = new AnnouncementQnADataAccess(uow); var annQnA = GetAnnouncementQnA(announcementQnAId); // todo: think about security if (!CanEditQuestion(annQnA, uow)) { throw new ChalkableSecurityException(); } annQnA.State = AnnouncementQnAState.Answered; annQnA.Question = question; if ((BaseSecurity.IsDistrictOrTeacher(Context)) && (!annQnA.AnswererRef.HasValue || annQnA.AnswererRef == Context.PersonId)) { var answerer = new PersonDataAccess(uow).GetById(Context.PersonId.Value); annQnA.Answerer = answerer; annQnA.AnswererRef = answerer.Id; annQnA.AnsweredTime = Context.NowSchoolTime; annQnA.Answer = answer; } da.Update(annQnA); uow.Commit(); var ann = ServiceLocator.GetAnnouncementService(announcementType).GetAnnouncementById(annQnA.AnnouncementRef); bool visibleForStudent = (ann is LessonPlan && (ann as LessonPlan).VisibleForStudent) || (ann is ClassAnnouncement && (ann as ClassAnnouncement).VisibleForStudent) || (ann is AdminAnnouncement); if (visibleForStudent) { ServiceLocator.NotificationService.AddAnnouncementNotificationAnswerToStudent(annQnA.Id, annQnA.AnnouncementRef, announcementType); } return(annQnA); } }