public AnnouncementApplication AddToAnnouncement(int announcementId, AnnouncementTypeEnum type, Guid applicationId)
        {
            var app = ServiceLocator.ServiceLocatorMaster.ApplicationService.GetApplicationById(applicationId);

            EnsureApplicationPermission(app.Id);

            using (var uow = Update())
            {
                var ann = ServiceLocator.GetAnnouncementService(type).GetAnnouncementDetails(announcementId);
                if (!ApplicationSecurity.CanAddToAnnouncement(app, ann, Context))
                {
                    throw new ChalkableSecurityException();
                }
                var aa = new AnnouncementApplication
                {
                    AnnouncementRef = announcementId,
                    ApplicationRef  = applicationId,
                    Active          = false,
                    Order           = ServiceLocator.GetAnnouncementService(type).GetNewAnnouncementItemOrder(ann)
                };
                var da = new AnnouncementApplicationDataAccess(uow);
                da.Insert(aa);
                uow.Commit();
                aa = da.GetAll(new AndQueryCondition
                {
                    { nameof(AnnouncementApplication.AnnouncementRef), announcementId },
                    { nameof(AnnouncementApplication.ApplicationRef), applicationId },
                    { nameof(AnnouncementApplication.Active), false }
                }).OrderByDescending(x => x.Id).First();
                return(aa);
            }
        }
        public AnnouncementApplication AddToAnnouncement(int announcementId, AnnouncementTypeEnum announcementType, Guid applicationId)
        {
            var app = ServiceLocator.ServiceLocatorMaster.ApplicationService.GetApplicationById(applicationId);
            var ann = ServiceLocator.GetAnnouncementService(announcementType).GetAnnouncementDetails(announcementId);

            if (!ApplicationSecurity.CanAddToAnnouncement(app, ann, Context))
            {
                throw new ChalkableSecurityException();
            }
            var aa = new AnnouncementApplication
            {
                AnnouncementRef = announcementId,
                ApplicationRef  = applicationId,
                Active          = false,
                Order           = ServiceLocator.GetAnnouncementService(announcementType).GetNewAnnouncementItemOrder(ann)
            };

            AnnouncementApplicationStorage.Add(aa);
            aa = AnnouncementApplicationStorage.GetAll(announcementId, applicationId, false).OrderByDescending(x => x.Id).First();
            return(aa);
        }
        public static AnnouncementApplicationViewData Create(AnnouncementApplication announcementApplication,
                                                             Application application, int?currentPersonId, AnnouncementTypeEnum announcementType)
        {
            var res = new AnnouncementApplicationViewData(application)
            {
                AnnouncementApplicationId = announcementApplication.Id,
                Active           = announcementApplication.Active,
                AnnouncementId   = announcementApplication.AnnouncementRef,
                AnnouncementType = (int)announcementType,
                EditUrl          = AppTools.BuildAppUrl(application, announcementApplication.Id, AppMode.Edit),
                ViewUrl          = AppTools.BuildAppUrl(application, announcementApplication.Id, AppMode.View),
                GradingViewUrl   = AppTools.BuildAppUrl(application, announcementApplication.Id, AppMode.GradingView),
                CurrentPersonId  = currentPersonId,
                Order            = announcementApplication.Order,
                Text             = announcementApplication.Text,
                LongDescription  = announcementApplication.Description,
                ImageUrl         = announcementApplication.ImageUrl
            };

            return(res);
        }