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); }
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"); } }
//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); } }
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); }