//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();
            }
        }
Beispiel #3
0
        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);
            }
        }