public override IList <AnnouncementComplex> GetAnnouncementsByIds(IList <int> announcementIds)
        {
            using (var u = Read())
            {
                var announcement = InternalGetDetailses(CreateSupplementalAnnouncementDataAccess(u), announcementIds)
                                   .Cast <AnnouncementComplex>().ToList();
                var recipients = new SupplementalAnnouncementRecipientDataAccess(u).GetRecipientsByAnnouncementIds(announcementIds);

                foreach (var announcementComplex in announcement)
                {
                    announcementComplex.SupplementalAnnouncementData.Recipients = recipients
                                                                                  .Where(x => x.SupplementalAnnouncementRef == announcementComplex.Id)
                                                                                  .Select(x => x.Recipient).ToList();
                }

                return(announcement);
            }
        }
        public override void Submit(int announcementId)
        {
            Trace.Assert(Context.PersonId.HasValue);
            using (var u = Update())
            {
                var da  = CreateSupplementalAnnouncementDataAccess(u);
                var res = InternalGetDetails(da, announcementId);
                var suppAnnouncement = res.SupplementalAnnouncementData;
                var recipients       = new SupplementalAnnouncementRecipientDataAccess(u).GetRecipientsByAnnouncementId(suppAnnouncement.Id);
                AnnouncementSecurity.EnsureInModifyAccess(res, Context);

                ValidateSupplementalAnnouncement(suppAnnouncement, da, ServiceLocator, recipients.Select(x => x.StudentRef).ToList(), suppAnnouncement.ClassRef);

                if (suppAnnouncement.IsDraft)
                {
                    suppAnnouncement.State   = AnnouncementState.Created;
                    suppAnnouncement.Created = Context.NowSchoolTime.Date;
                    da.Update(suppAnnouncement);
                }
                ServiceLocator.AnnouncementAssignedAttributeService.ValidateAttributes(res.AnnouncementAttributes);
                u.Commit();
            }
        }