예제 #1
0
        private AnnouncementDetails MergeEditAnnResultWithStiData(ClassAnnouncementDataAccess annDa, ClassAnnouncement ann)
        {
            var res = InternalGetDetails(annDa, ann.Id);

            if (ann.IsSubmitted)
            {
                var activity = ConnectorLocator.ActivityConnector.GetActivity(ann.SisActivityId.Value);
                foreach (var activityStandard in activity.Standards)
                {
                    if (res.AnnouncementStandards.All(x => x.Standard.Id != activityStandard.Id))
                    {
                        res.AnnouncementStandards.Add(new AnnouncementStandardDetails
                        {
                            AnnouncementRef = ann.Id,
                            StandardRef     = activityStandard.Id,
                            Standard        = new Standard
                            {
                                Id   = activityStandard.Id,
                                Name = activityStandard.Name
                            }
                        });
                    }
                }
                MapperFactory.GetMapper <Activity, AnnouncementDetails>().Map(activity, res);
                ConnectorLocator.ActivityConnector.UpdateActivity(ann.SisActivityId.Value, activity);

                var studentAnnouncements = ServiceLocator.StudentAnnouncementService.GetStudentAnnouncements(ann.Id);
                res.GradingStudentsCount = studentAnnouncements.Count(x => x.IsGraded);
            }
            res.AnnouncementData = PrepareClassAnnouncementTypeData(res.ClassAnnouncementData);
            return(res);
        }
예제 #2
0
        private static void EnsureInAnnouncementsExisting(IList <Activity> activities, ClassAnnouncementDataAccess dataAccess)
        {
            var ids = activities.Select(x => x.Id).ToList();

            if (dataAccess.Exists(ids))
            {
                throw new ChalkableException($"Announcement with such activity Ids {ids.Select(x => x.ToString()).JoinString()} already exists");
            }
        }
예제 #3
0
        //TODO: Strange and ugly logic with school year. Needed to be refactored!
        private static void AddActivitiesToChalkable(IServiceLocatorSchool locator, IList <Activity> activities, ClassAnnouncementDataAccess dataAccess)
        {
            if (activities == null || activities.Count == 0)
            {
                return;
            }

            var classIds = activities.GroupBy(x => x.SectionId).Select(x => x.Key).ToList();
            var classes  = locator.ClassService.GetByIds(classIds);

            EnsureInAnnouncementsExisting(activities, dataAccess);
            IList <ClassAnnouncement> addToChlkAnns = new List <ClassAnnouncement>();

            foreach (var activity in activities)
            {
                var @class = classes.First(x => x.Id == activity.SectionId); //  !!!
                if ([email protected])
                {
                    continue;
                }

                var ann = new ClassAnnouncement
                {
                    Created       = locator.Context.NowSchoolTime,
                    State         = AnnouncementState.Created,
                    SchoolYearRef = @class.SchoolYearRef.Value,
                    SisActivityId = activity.Id,
                };
                MapperFactory.GetMapper <ClassAnnouncement, Activity>().Map(ann, activity);
                addToChlkAnns.Add(ann);
            }
            if (addToChlkAnns.Count > 0)
            {
                dataAccess.Insert(addToChlkAnns);
            }
        }
예제 #4
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);
        }