예제 #1
0
        private Model.DocumentUnit UdsGetDocumentUnitModel(Guid idDocumentUnit, out bool isReadOnly, out bool isPreserved)
        {
            isReadOnly  = false;
            isPreserved = false;

            var unit = this.db.DocumentUnit
                       .Include("DocumentUnitAggregate")
                       .SingleOrDefault(p => p.IdDocumentUnit == idDocumentUnit);

            if (unit == null)
            {
                throw DocumentUnitException.NotFound();
            }

            if (unit.CloseDate != null)
            {
                isReadOnly = true;
            }

            foreach (var aggregate in unit.DocumentUnitAggregate)
            {
                isReadOnly  = isReadOnly || (aggregate.CloseDate != null || aggregate.PreservationDate != null);
                isPreserved = isPreserved || aggregate.PreservationDate != null;
            }

            return(unit);
        }
예제 #2
0
        /// <summary>
        /// Aggiunge una nuova DocumentUnit
        /// </summary>
        /// <param name="unit">DocumentUnit da aggiungere</param>
        /// <returns>DocumentUnit inserita</returns>
        public DocumentUnit UdsAddDocumentUnit(DocumentUnit unit)
        {
            try
            {
                if (unit == null)
                {
                    throw DocumentUnitException.NotFound();
                }

                var entity = new Model.DocumentUnit
                {
                    IdDocumentUnit = Guid.NewGuid(),
                    InsertDate     = DateTime.Now,
                    CloseDate      = null,
                    Identifier     = unit.Identifier ?? "",
                    Subject        = unit.Subject ?? "",
                    Classification = unit.Classification ?? "",
                    UriFascicle    = unit.UriFascicle ?? "",
                    XmlDoc         = unit.XmlDoc ?? ""
                };

                this.db.DocumentUnit.AddObject(entity);
                if (requireSave)
                {
                    this.db.SaveChanges();
                }

                var ret = entity.Convert(0, 3);
                return(ret);
            }
            finally
            {
                Dispose();
            }
        }
예제 #3
0
        private Model.DocumentUnit UdsGetDocumentUnitByIdentifierModel(string identifierDocumentUnit)
        {
            var unit = this.db.DocumentUnit
                       .SingleOrDefault(p => p.Identifier == identifierDocumentUnit);

            if (unit == null)
            {
                throw DocumentUnitException.NotFound();
            }

            return(unit);
        }
예제 #4
0
        private Model.DocumentUnit UdsTryEditDocumentUnit(Guid idDocumentUnit)
        {
            bool isReadOnly;
            bool isPreserved;

            var docUnit = UdsGetDocumentUnitModel(idDocumentUnit, out isReadOnly, out isPreserved);

            if (isReadOnly)
            {
                throw DocumentUnitException.ReadOnly();
            }

            return(docUnit);
        }
예제 #5
0
        /// <summary>
        /// Collega Documenti ad una DocumentUnit esistente
        /// </summary>
        /// <param name="idDocumentUnit"></param>
        /// <param name="documents"></param>
        /// <param name="checkUnitExist">Verifica l'esistenza della document unit prima di collegare i documenti (default true)</param>
        /// <returns>N.di documenti collegati</returns>
        public int UdsDocumentUnitAddDocuments(Guid idDocumentUnit, DocumentUnitChain[] documents, bool checkUnitExist = true)
        {
            try
            {
                //trova document unit
                if (checkUnitExist)
                {
                    UdsTryEditDocumentUnit(idDocumentUnit);
                }

                //determina se i documenti passati sono tutti capo catena validi
                var docs = documents.Select(x => x.IdParentBiblos).ToArray();

                var query = this.db.Document.Where(
                    x => !x.IdParentBiblos.HasValue &&
                    x.IsVisible == 1 &&
                    docs.Contains(x.IdDocument)).ToArray();

                var notFounds = query.Where(x => !docs.Contains(x.IdDocument)).Select(x => x.IdDocument.ToString()).ToArray();
                if (notFounds.Count() > 0)
                {
                    throw DocumentUnitException.InvalidDocuments(notFounds);
                }

                foreach (var doc in documents)
                {
                    var entity = new Model.DocumentUnitChain
                    {
                        IdDocumentUnit = idDocumentUnit,
                        IdParentBiblos = doc.IdParentBiblos,
                        Name           = doc.Name
                    };
                    this.db.DocumentUnitChain.AddObject(entity);
                }

                int count = 0;
                if (requireSave)
                {
                    count = this.db.SaveChanges();
                }

                return(count);
            }
            finally
            {
                Dispose();
            }
        }