Example #1
0
        public AnnouncementAssignedAttribute RemoveAttachment(int announcementAssignedAttributeId)
        {
            Trace.Assert(Context.PersonId.HasValue);
            Trace.Assert(Context.SchoolLocalId.HasValue);

            using (var uow = Update())
            {
                var da        = new AnnouncementAssignedAttributeDataAccess(uow);
                var attribute = da.GetById(announcementAssignedAttributeId);
                if (!attribute.AttachmentRef.HasValue)
                {
                    throw new ChalkableException("Attribute has no attachments for remove.");
                }
                if (attribute.IsStiAttribute)
                {
                    var activityAssignedAttribute = ConnectorLocator.ActivityAssignedAttributeConnector.GetAttribute(attribute.SisActivityId.Value, attribute.SisActivityAssignedAttributeId.Value);
                    activityAssignedAttribute.Attachment = null;
                    ConnectorLocator.ActivityAssignedAttributeConnector.Update(attribute.SisActivityId.Value, attribute.SisActivityAssignedAttributeId.Value, activityAssignedAttribute);
                }
                attribute.AttachmentRef = null;
                da.Update(attribute);
                uow.Commit();
                return(attribute);
            }
        }
Example #2
0
        public override void Submit(int announcementId)
        {
            Trace.Assert(Context.SchoolLocalId.HasValue);
            var res = GetAnnouncementDetails(announcementId);

            if (res.ClassAnnouncementData.Title == null || Exists(res.ClassAnnouncementData.Title, res.ClassAnnouncementData.ClassRef, res.ClassAnnouncementData.Expires, res.ClassAnnouncementData.Id))
            {
                throw new ChalkableException("Invalid Class Announcement Title");
            }

            using (var uow = Update())
            {
                var da = CreateClassAnnouncementDataAccess(uow);
                AnnouncementSecurity.EnsureInModifyAccess(res, Context);
                if (res.ClassAnnouncementData.IsDraft)
                {
                    ServiceLocator.AnnouncementAssignedAttributeService.ValidateAttributes(res.AnnouncementAttributes);
                    res.ClassAnnouncementData.State   = AnnouncementState.Created;
                    res.ClassAnnouncementData.Created = Context.NowSchoolTime.Date;

                    var activity = new Activity();
                    MapperFactory.GetMapper <Activity, AnnouncementDetails>().Map(activity, res);
                    activity = ConnectorLocator.ActivityConnector.CreateActivity(res.ClassAnnouncementData.ClassRef, activity);
                    if (da.Exists(activity.Id))
                    {
                        throw new ChalkableException("Announcement with such activityId already exists");
                    }

                    var annAttDa = new AnnouncementAssignedAttributeDataAccess(uow);
                    annAttDa.Delete(res.AnnouncementAttributes);
                    MapperFactory.GetMapper <AnnouncementDetails, Activity>().Map(res, activity);
                    var attributes = res.AnnouncementAttributes.Where(x => x.Attachment != null).ToList();
                    if (attributes.Count > 0)
                    {
                        var atts = new AttachmentDataAccess(uow).GetBySisAttachmentIds(attributes.Select(a => a.Attachment.SisAttachmentId.Value).ToList());
                        foreach (var attribute in res.AnnouncementAttributes)
                        {
                            if (attribute.Attachment == null)
                            {
                                continue;
                            }
                            var att = atts.FirstOrDefault(x => x.SisAttachmentId == attribute.Attachment.SisAttachmentId);
                            if (att == null)
                            {
                                continue;
                            }
                            attribute.AttachmentRef = att.Id;
                        }
                    }
                    annAttDa.Insert(res.AnnouncementAttributes);
                }
                da.Update(res.ClassAnnouncementData);
                uow.Commit();
            }
        }
Example #3
0
        public AnnouncementAssignedAttribute AddAttachment(AnnouncementTypeEnum announcementType, int announcementId, int assignedAttributeId, int attachmentId)
        {
            Trace.Assert(Context.PersonId.HasValue);
            var ann = ServiceLocator.GetAnnouncementService(announcementType).GetAnnouncementById(announcementId);

            if (!CanAttach(ann))
            {
                throw new ChalkableSecurityException();
            }

            using (var uow = Update())
            {
                var da        = new AnnouncementAssignedAttributeDataAccess(uow);
                var attribute = da.GetById(assignedAttributeId);
                if (attribute.AttachmentRef > 0)
                {
                    throw new ChalkableSisException("You can't attach more than one file to an attribute");
                }

                var attDa      = new AttachmentDataAccess(uow);
                var attachment = attDa.GetById(attachmentId);
                if (attachment.PersonRef != Context.PersonId)
                {
                    throw new ChalkableSecurityException();
                }

                attribute.AttachmentRef = attachment.Id;
                attribute.Attachment    = attachment;
                da.Update(attribute);

                if (announcementType == AnnouncementTypeEnum.Class)
                {
                    if (!attachment.SisAttachmentId.HasValue)
                    {
                        var attContent = ServiceLocator.AttachementService.GetAttachmentContent(attachment);
                        var stiAtt     = ConnectorLocator.AttachmentConnector.UploadAttachment(attachment.Name, attContent.Content).Last();
                        MapperFactory.GetMapper <Attachment, StiAttachment>().Map(attachment, stiAtt);
                        attDa.Update(attachment);
                    }

                    if (attribute.SisActivityAssignedAttributeId.HasValue)
                    {
                        var stiAttribute = ConnectorLocator.ActivityAssignedAttributeConnector.GetAttribute(attribute.SisActivityId.Value, attribute.SisActivityAssignedAttributeId.Value);
                        MapperFactory.GetMapper <ActivityAssignedAttribute, AnnouncementAssignedAttribute>().Map(stiAttribute, attribute);
                        ConnectorLocator.ActivityAssignedAttributeConnector.Update(stiAttribute.ActivityId, stiAttribute.Id, stiAttribute);
                    }
                }
                uow.Commit();
                return(attribute);
            }
        }
Example #4
0
        public static IList <Pair <AnnouncementAssignedAttribute, AnnouncementAssignedAttribute> > CopyNonStiAttributes(IDictionary <int, int> fromToAnnouncementIds,
                                                                                                                        UnitOfWork unitOfWork, IServiceLocatorSchool serviceLocator, ConnectorLocator connectorLocator)
        {
            //var attachmentDA = new AttachmentDataAccess(unitOfWork);

            var annAssignedAttributeDA = new AnnouncementAssignedAttributeDataAccess(unitOfWork);
            var attributesForCopying   = annAssignedAttributeDA.GetLastListByAnnIds(fromToAnnouncementIds.Select(x => x.Key).ToList(), int.MaxValue)
                                         .Where(x => !x.SisActivityAssignedAttributeId.HasValue).ToList();

            var fromToAttributes = new List <Pair <AnnouncementAssignedAttribute, AnnouncementAssignedAttribute> >();

            foreach (var announcementPair in fromToAnnouncementIds)
            {
                var assignedAttToCopy = attributesForCopying.Where(x => x.AnnouncementRef == announcementPair.Key).ToList();
                foreach (var attributeToCopy in assignedAttToCopy)
                {
                    var newAttribute = new AnnouncementAssignedAttribute
                    {
                        AnnouncementRef    = announcementPair.Value,
                        AttributeTypeId    = attributeToCopy.AttributeTypeId,
                        Name               = attributeToCopy.Name,
                        Text               = attributeToCopy.Text,
                        VisibleForStudents = attributeToCopy.VisibleForStudents,
                        AttachmentRef      = attributeToCopy.AttachmentRef,
                        Attachment         = attributeToCopy.Attachment
                    };

                    //if (attributeToCopy.Attachment != null)
                    //{
                    //    var attachment = new Attachment
                    //    {
                    //        Name = attributeToCopy.Attachment.Name,
                    //        PersonRef = serviceLocator.Context.PersonId.Value,
                    //        Uuid = null,
                    //        UploadedDate = serviceLocator.Context.NowSchoolTime,
                    //        LastAttachedDate = serviceLocator.Context.NowSchoolTime,
                    //    };

                    //    attachment.Id = attachmentDA.InsertWithEntityId(attachment);

                    //    newAttribute.AttachmentRef = attachment.Id;
                    //    newAttribute.Attachment = attachment;
                    //}
                    fromToAttributes.Add(new Pair <AnnouncementAssignedAttribute, AnnouncementAssignedAttribute>(attributeToCopy, newAttribute));
                }
            }

            annAssignedAttributeDA.Insert(fromToAttributes.Select(x => x.Second).ToList());
            return(fromToAttributes);
        }
Example #5
0
        protected virtual IList <AnnouncementDetails> BuildGetDetailsesResult(SqlDataReader reader)
        {
            IList <AnnouncementDetails> res = new List <AnnouncementDetails>();

            while (reader.Read())
            {
                var ann = reader.Read <AnnouncementDetails>();
                ann.AnnouncementData     = ReadAnnouncementData(ann, reader);
                ann.StudentAnnouncements = new List <StudentAnnouncementDetails>();
                res.Add(ann);
            }

            reader.NextResult();
            var annAtts = reader.ReadList <AnnouncementAttachment>(true);

            foreach (var ann in res)
            {
                ann.AttachmentNames = annAtts.Where(x => x.AnnouncementRef == ann.Id).Select(x => x.Attachment.Name).ToList();
            }

            reader.NextResult();
            var owners = reader.ReadList <Person>();

            reader.NextResult();
            var announcementQnAs = AnnouncementQnADataAccess.ReadAnnouncementQnAComplexes(reader);

            reader.NextResult();
            var announcementAttributes = AnnouncementAssignedAttributeDataAccess.ReadAttributes(reader);

            reader.NextResult();
            var announcementApplications = reader.ReadList <AnnouncementApplication>();

            reader.NextResult();
            var announcementStandards = reader.ReadList <AnnouncementStandardDetails>();

            reader.NextResult();
            var announcementAttachments = reader.ReadList <AnnouncementAttachment>(true);

            foreach (var ann in res)
            {
                ann.Owner                    = owners.FirstOrDefault(x => ann.OwnereId == x.Id);
                ann.AnnouncementQnAs         = announcementQnAs.Where(x => x.AnnouncementRef == ann.Id).ToList();
                ann.AnnouncementAttributes   = announcementAttributes.Where(x => x.AnnouncementRef == ann.Id).ToList();
                ann.AnnouncementApplications = announcementApplications.Where(x => x.AnnouncementRef == ann.Id).ToList();
                ann.AnnouncementStandards    = announcementStandards.Where(x => x.AnnouncementRef == ann.Id).ToList();
                ann.AnnouncementAttachments  = announcementAttachments.Where(x => x.AnnouncementRef == ann.Id).ToList();
            }
            return(res);
        }
Example #6
0
 public void Delete(int assignedAttributeId)
 {
     BaseSecurity.EnsureAdminOrTeacher(Context);
     Trace.Assert(Context.PersonId.HasValue);
     Trace.Assert(Context.SchoolLocalId.HasValue);
     DoUpdate(u =>
     {
         var da        = new AnnouncementAssignedAttributeDataAccess(u);
         var attribute = da.GetById(assignedAttributeId);
         if (attribute.SisActivityId.HasValue && attribute.SisActivityAssignedAttributeId.HasValue)
         {
             ConnectorLocator.ActivityAssignedAttributeConnector.Delete(attribute.SisActivityId.Value, attribute.SisActivityAssignedAttributeId.Value);
         }
         da.Delete(assignedAttributeId);
     });
 }
Example #7
0
        public AnnouncementAssignedAttribute Add(AnnouncementTypeEnum announcementType, int announcementId, int attributeTypeId)
        {
            var ann = ServiceLocator.GetAnnouncementService(announcementType).GetAnnouncementById(announcementId);

            Trace.Assert(Context.PersonId.HasValue);
            Trace.Assert(Context.SchoolLocalId.HasValue);

            var attributeType = ServiceLocator.AnnouncementAttributeService.GetAttributeById(attributeTypeId, true);


            using (var uow = Update())
            {
                if (!CanAttach(ann))
                {
                    throw new ChalkableSecurityException();
                }

                var annAttribute = new AnnouncementAssignedAttribute
                {
                    AnnouncementRef    = ann.Id,
                    AttributeTypeId    = attributeType.Id,
                    Text               = "",
                    VisibleForStudents = false,
                    Name               = attributeType.Name
                };

                if (announcementType == AnnouncementTypeEnum.Class)
                {
                    var announcement = ServiceLocator.ClassAnnouncementService.GetClassAnnouncemenById(announcementId);
                    if (announcement.SisActivityId.HasValue)
                    {
                        var activityAssignedAttr = new ActivityAssignedAttribute();
                        MapperFactory.GetMapper <ActivityAssignedAttribute, AnnouncementAssignedAttribute>().Map(activityAssignedAttr, annAttribute);
                        activityAssignedAttr.Text = " ";
                        activityAssignedAttr      = ConnectorLocator.ActivityAssignedAttributeConnector.CreateActivityAttribute(announcement.SisActivityId.Value, activityAssignedAttr);
                        MapperFactory.GetMapper <AnnouncementAssignedAttribute, ActivityAssignedAttribute>().Map(annAttribute, activityAssignedAttr);
                        annAttribute.Name = attributeType.Name;//activity attr returns null name
                    }
                }

                var da = new AnnouncementAssignedAttributeDataAccess(uow);
                var id = da.InsertWithEntityId(annAttribute);
                uow.Commit();
                return(da.GetById(id));
            }
        }
Example #8
0
        public static IList <AnnouncementAssignedAttribute> CopyNonStiAttributes(int fromAnnouncementId, IList <int> toAnnouncementIds,
                                                                                 UnitOfWork unitOfWork, IServiceLocatorSchool serviceLocator, ConnectorLocator connectorLocator)
        {
            var da = new AnnouncementAssignedAttributeDataAccess(unitOfWork);
            var attributesForCopying = da.GetListByAnntId(fromAnnouncementId);

            attributesForCopying = attributesForCopying.Where(x => !x.SisActivityAssignedAttributeId.HasValue).ToList();

            var attributes = new List <AnnouncementAssignedAttribute>();

            foreach (var attributeForCopying in attributesForCopying)
            {
                foreach (var toAnnouncementId in toAnnouncementIds)
                {
                    var attribute = new AnnouncementAssignedAttribute
                    {
                        AnnouncementRef    = toAnnouncementId,
                        AttributeTypeId    = attributeForCopying.AttributeTypeId,
                        Name               = attributeForCopying.Name,
                        Text               = attributeForCopying.Text,
                        VisibleForStudents = attributeForCopying.VisibleForStudents,
                        AttachmentRef      = attributeForCopying.AttachmentRef,
                        Attachment         = attributeForCopying.Attachment
                    };
                    //if (attributeForCopying.Attachment != null)
                    //{
                    //    var attContent = serviceLocator.AttachementService.GetAttachmentContent(attributeForCopying.Attachment);
                    //    if (attContent.Content != null)
                    //    {
                    //        var att = AttachmentService.Upload(attContent.Attachment.Name, attContent.Content, attContent.Attachment.IsStiAttachment, unitOfWork, serviceLocator, connectorLocator);
                    //        attribute.AttachmentRef = att.Id;
                    //        attribute.Attachment = att;
                    //    }
                    //}
                    attributes.Add(attribute);
                }
            }
            da.Insert(attributes);
            return(da.GetLastListByAnnIds(toAnnouncementIds, attributes.Count));
        }
Example #9
0
        public AnnouncementAssignedAttribute UploadAttachment(AnnouncementTypeEnum announcementType, int announcementId, int assignedAttributeId, byte[] bin, string name)
        {
            Trace.Assert(Context.PersonId.HasValue && Context.SchoolLocalId.HasValue);
            var ann = ServiceLocator.GetAnnouncementService(announcementType).GetAnnouncementById(announcementId);

            using (var uow = Update())
            {
                var da = new AnnouncementAssignedAttributeDataAccess(uow);
                var assignedAttribute = da.GetById(assignedAttributeId);
                if (!CanAttach(ann))
                {
                    throw new ChalkableSecurityException();
                }

                if (assignedAttribute.AttachmentRef > 0)
                {
                    throw new ChalkableSisException("You can't attach more than one file to an attribute");
                }

                var isStiAttribute = assignedAttribute.IsStiAttribute || announcementType == AnnouncementTypeEnum.Class;
                var attachment     = AttachmentService.Upload(name, bin, isStiAttribute, uow, ServiceLocator, ConnectorLocator);
                assignedAttribute.AttachmentRef = attachment.Id;
                assignedAttribute.Attachment    = attachment;
                da.Update(assignedAttribute);

                if (assignedAttribute.IsStiAttribute)
                {
                    var stiAttribute = ConnectorLocator.ActivityAssignedAttributeConnector.GetAttribute(
                        assignedAttribute.SisActivityId.Value,
                        assignedAttribute.SisActivityAssignedAttributeId.Value);

                    MapperFactory.GetMapper <ActivityAssignedAttribute, AnnouncementAssignedAttribute>().Map(stiAttribute, assignedAttribute);
                    ConnectorLocator.ActivityAssignedAttributeConnector.Update(stiAttribute.ActivityId, stiAttribute.Id, stiAttribute);
                }
                uow.Commit();
                return(assignedAttribute);
            }
        }
Example #10
0
        public void Edit(AnnouncementTypeEnum announcementType, int announcementId, IList <AssignedAttributeInputModel> inputAttributes)
        {
            BaseSecurity.EnsureAdminOrTeacher(Context);
            Trace.Assert(Context.PersonId.HasValue);
            Trace.Assert(Context.SchoolLocalId.HasValue);

            var annoncement = ServiceLocator.GetAnnouncementService(announcementType).GetAnnouncementById(announcementId); // security check

            if (inputAttributes != null)
            {
                DoUpdate(u =>
                {
                    var da = new AnnouncementAssignedAttributeDataAccess(u);
                    var attributesForUpdate = da.GetAttributesByIds(inputAttributes.Select(x => x.Id).ToList());
                    foreach (var attribute in attributesForUpdate)
                    {
                        var inputAttr = inputAttributes.FirstOrDefault(x => x.Id == attribute.Id);
                        if (inputAttr == null)
                        {
                            continue;
                        }
                        attribute.AnnouncementRef    = inputAttr.AnnouncementId;
                        attribute.Name               = inputAttr.Name;
                        attribute.Text               = inputAttr.Text;
                        attribute.VisibleForStudents = inputAttr.VisibleForStudents;
                        attribute.AttributeTypeId    = inputAttr.AttributeTypeId;
                        attribute.AttachmentRef      = inputAttr.AttachmentId;
                    }
                    if (!annoncement.IsDraft)
                    {
                        ValidateAttributes(attributesForUpdate);
                    }
                    da.Update(attributesForUpdate);
                });
            }
        }