Example #1
0
        public ActionResult SaveAnnouncement(ClassAnnouncementInfo classAnnouncementInfo, int?classId, IList <AssignedAttributeInputModel> attributes)
        {
            Trace.Assert(Context.PersonId.HasValue);
            SchoolLocator.AnnouncementAssignedAttributeService.Edit(AnnouncementTypeEnum.Class, classAnnouncementInfo.AnnouncementId, attributes);
            var ann = SchoolLocator.ClassAnnouncementService.Edit(classAnnouncementInfo);

            return(Json(PrepareAnnouncmentViewDataForEdit(ann)));
        }
Example #2
0
        public ActionResult SubmitAnnouncement(ClassAnnouncementInfo classAnnouncementInfo, IList <AssignedAttributeInputModel> attributes)
        {
            SchoolLocator.AnnouncementAssignedAttributeService.Edit(AnnouncementTypeEnum.Class, classAnnouncementInfo.AnnouncementId, attributes);
            var annDetails = SchoolLocator.ClassAnnouncementService.Edit(classAnnouncementInfo);

            SchoolLocator.ClassAnnouncementService.Submit(annDetails.Id);
            SchoolLocator.ClassAnnouncementService.DeleteAnnouncements(classAnnouncementInfo.ClassId, annDetails.ClassAnnouncementData.ClassAnnouncementTypeRef, AnnouncementState.Draft);
            var includeDiscussion = annDetails.DiscussionEnabled;

            ApplicationLogic.NotifyApplications(MasterLocator, annDetails.AnnouncementApplications, (int)AnnouncementTypeEnum.Class, ChalkableAuthentication.GetSessionKey(), NotifyAppType.Attach);
            TrackNewItemCreate(annDetails, (s, appsCount, doscCount) => s.CreatedNewItem(Context.Login, annDetails.ClassAnnouncementData.ClassAnnouncementTypeName, annDetails.ClassAnnouncementData.ClassName, appsCount, doscCount, includeDiscussion));
            return(Json(true, 5));
        }
Example #3
0
        public ActionResult CreateClassAnnouncement(int?classAnnouncementTypeId, int classId, DateTime?expiresDate)
        {
            //TODO : need to refactor all announcemnt cerate , edit logic later))
            Trace.Assert(Context.PersonId.HasValue);

            var draft        = SchoolLocator.ClassAnnouncementService.GetLastDraft();
            var classAnnType = classAnnouncementTypeId.HasValue
                ? SchoolLocator.ClassAnnouncementTypeService.GetClassAnnouncementTypeById(classAnnouncementTypeId.Value)
                : null;

            if (classAnnType?.ClassRef != classId)
            {
                classAnnType = null;
            }

            if (classAnnType == null && draft?.ClassAnnouncementTypeRef != null && draft.ClassRef == classId)
            {
                classAnnType = SchoolLocator.ClassAnnouncementTypeService.GetClassAnnouncementTypeById(draft.ClassAnnouncementTypeRef.Value);
            }

            if (classAnnType == null)
            {
                var classAnnTypes = SchoolLocator.ClassAnnouncementTypeService.GetClassAnnouncementTypes(classId);
                if (classAnnTypes.Count == 0)
                {
                    throw new NoClassAnnouncementTypeException("Item can't be created. Current Class doesn't have classAnnouncementTypes");
                }
                classAnnType = classAnnTypes.First();
            }

            if (draft != null && draft.ClassAnnouncementTypeRef != classAnnType.Id)
            {
                draft.ClassAnnouncementTypeRef = classAnnType.Id;
                var classAnnInfo = ClassAnnouncementInfo.Create(draft);
                classAnnInfo.ClassId = classId;
                SchoolLocator.ClassAnnouncementService.Edit(classAnnInfo);
            }

            var annExpiredDate = GenerateDefaultExpiresDate(expiresDate);
            var annDetails     = SchoolLocator.ClassAnnouncementService.Create(classAnnType, classId, annExpiredDate);
            var classAnn       = annDetails.ClassAnnouncementData;

            // annExporedDate was assigned to have a correct announcements orderings, lets clear it if not user-provided
            if (!expiresDate.HasValue && classAnn.Expires == annExpiredDate)
            {
                classAnn.Expires = DateTime.MinValue;
            }

            Debug.Assert(Context.PersonId.HasValue);
            return(Json(PrepareCreateAnnouncementViewData(annDetails)));
        }
Example #4
0
        public AnnouncementDetails Edit(ClassAnnouncementInfo announcement)
        {
            if (!Context.PersonId.HasValue)
            {
                throw new UnassignedUserException();
            }
            using (var uow = Update())
            {
                var da  = CreateClassAnnouncementDataAccess(uow);
                var ann = da.GetAnnouncement(announcement.AnnouncementId, Context.PersonId.Value);
                AnnouncementSecurity.EnsureInModifyAccess(ann, Context);

                ann = UpdateTeacherAnnouncement(ann, announcement, announcement.ClassId, uow, da);
                var res = MergeEditAnnResultWithStiData(da, ann);
                uow.Commit();
                return(res);
            }
        }
Example #5
0
        private ClassAnnouncement UpdateTeacherAnnouncement(ClassAnnouncement ann, ClassAnnouncementInfo inputAnnData, int classId
                                                            , UnitOfWork uow, ClassAnnouncementDataAccess annDa)
        {
            ann.Content = inputAnnData.Content;
            ann.Title   = inputAnnData.Title;

            if (inputAnnData.ExpiresDate.HasValue)
            {
                ann.Expires = inputAnnData.ExpiresDate.Value.Date;
            }
            if (inputAnnData.ClassAnnouncementTypeId.HasValue)
            {
                var classAnnType = ServiceLocator.ClassAnnouncementTypeService.GetClassAnnouncementTypeById(inputAnnData.ClassAnnouncementTypeId.Value);
                if (classAnnType.ClassRef != inputAnnData.ClassId)
                {
                    throw new ChalkableException("Invalid Class Announcement type id");
                }
                ann.ClassAnnouncementTypeRef = inputAnnData.ClassAnnouncementTypeId.Value;
                ann.MaxScore = inputAnnData.MaxScore;
                ann.IsScored = ann.MaxScore.HasValue && (ann.MaxScore > 0 || inputAnnData.Gradable);

                if (ann.MaxScore == 0 && !inputAnnData.Gradable)
                {
                    var classRoomOption = ServiceLocator.ClassroomOptionService.GetClassOption(classId);
                    if (classRoomOption == null || !classRoomOption.IsAveragingMethodPoints)
                    {
                        ann.IsScored = false;
                    }
                }

                ann.WeightAddition    = inputAnnData.WeightAddition;
                ann.WeightMultiplier  = inputAnnData.WeightMultiplier;
                ann.MayBeDropped      = inputAnnData.CanDropStudentScore;
                ann.VisibleForStudent = !inputAnnData.HideFromStudents;

                if (inputAnnData.PreviewCommentsEnabled && inputAnnData.DiscussionEnabled && !ann.PreviewCommentsEnabled)
                {
                    if (ann.IsSubmitted)
                    {
                        new AnnouncementCommentDataAccess(uow).HideAll(ann.Id);
                    }
                }
                ann.DiscussionEnabled      = inputAnnData.DiscussionEnabled;
                ann.PreviewCommentsEnabled = inputAnnData.PreviewCommentsEnabled;
                ann.RequireCommentsEnabled = inputAnnData.RequireCommentsEnabled;

                if (ann.ClassRef != classId)
                {
                    if (!ann.IsDraft)
                    {
                        throw new ChalkableException("Class can't be changed for submmited standard announcement");
                    }

                    ann.ClassRef = classId;
                    //clear old data befor swiching
                    new AnnouncementApplicationDataAccess(uow).DeleteByAnnouncementId(ann.Id);
                    new AnnouncementStandardDataAccess(uow).DeleteNotAssignedToClass(ann.Id, classId);
                }
            }
            annDa.Update(ann);
            return(ann);
        }