public static OrderingIndexSnapshot GetOrderingIndexSnapshot(ElasticArchiveRecord entity, string unknowText = "")
        {
            var indexSnapShot = new OrderingIndexSnapshot
            {
                Darin           = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.WithinInfo,
                Dossiertitel    = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.Title,
                Hierarchiestufe = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.Level,
                IdentifikationDigitalesMagazin = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.PrimaryDataLink,
                Signatur = entity.ReferenceCode,
                VeId     = entity.ArchiveRecordId,
                ZugaenglichkeitGemaessBga = entity.HasCustomProperty("zugänglichkeitGemässBga")
                    ? entity.CustomFields.zugänglichkeitGemässBga
                    : "",
                ZusaetzlicheInformationen = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.Extent,
                ZeitraumDossier           = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.CreationPeriod?.Text,
                Schutzfristverzeichnung   = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.GetSchutzfristenVerzeichnung(),
                Publikationsrechte        = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.Publikationsrechte(),
                ZustaendigeStelle         = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.ZuständigeStelle(),
                Aktenzeichen = !string.IsNullOrEmpty(unknowText) ? unknowText : entity.Aktenzeichen()
            };

            if (entity.Containers != null && entity.Containers.Any())
            {
                indexSnapShot.BehaeltnisCode = !string.IsNullOrEmpty(unknowText)
                    ? unknowText
                    : string.Join("; ", entity.Containers.Select(c => c.ContainerCode));
                indexSnapShot.Behaeltnistyp = !string.IsNullOrEmpty(unknowText)
                    ? unknowText
                    : string.Join("; ", entity.Containers.Select(c => c.ContainerType));
                indexSnapShot.Standort = !string.IsNullOrEmpty(unknowText)
                    ? unknowText
                    : string.Join("; ", entity.Containers.Select(c => c.ContainerLocation));
            }

            return(indexSnapShot);
        }
示例#2
0
        public void StoreDownloadReasonInHistory(ElasticArchiveRecord record, User user, UserAccess access, int reasonId)
        {
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();

                using (var cmd = connection.CreateCommand())
                {
                    var    bestandItem               = record.ArchiveplanContext.FirstOrDefault(p => p.Level == "Bestand");
                    var    bestandString             = bestandItem == null ? string.Empty : bestandItem.RefCode + " " + bestandItem.Title;
                    var    teilbestandItem           = record.ArchiveplanContext.FirstOrDefault(p => p.Level == "Teilbestand");
                    var    teilbestandString         = teilbestandItem == null ? string.Empty : teilbestandItem.RefCode + " " + teilbestandItem.Title;
                    string zugaenglichkeitGemaessBga = record.HasCustomProperty("zugänglichkeitGemässBga")
                        ? record.CustomFields.zugänglichkeitGemässBga
                        : string.Empty;
                    var asTokens           = string.Join(", ", access.AsTokens);
                    var ablieferndeStellen = string.Join(", ", user.AblieferndeStelleList.Select(a => a.Kuerzel));

                    cmd.CommandText =
                        "INSERT INTO DownloadReasonHistory (UserId, DownloadedAt, ReasonId, VeId, " +
                        "Signatur, Dossiertitel, Aktenzeichen, Entstehungszeitraum, Bestand, Teilbestand, Ablieferung, ZustaendigeStelleVe, " +
                        "Schutzfristverzeichnung, ZugaenglichkeitGemaessBga, " +
                        "FirstName, FamilyName, Organization, EmailAddress, RolePublicClient, AsAccessTokensUser, ZustaendigeStellenUser) " +
                        "VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17, @p18, @p19, @p20, @p21)";

                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p1", Value = access.UserId, SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p2", Value = DateTime.Now, SqlDbType = SqlDbType.DateTime
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p3", Value = reasonId, SqlDbType = SqlDbType.Int
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p4", Value = ToDb(record.ArchiveRecordId), SqlDbType = SqlDbType.Int
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p5", Value = ToDb(record.ReferenceCode), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p6", Value = ToDb(record.Title), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p7", Value = ToDb(record.Aktenzeichen()), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "p8", Value = ToDb(record.CreationPeriod.Text), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p9", Value = ToDb(bestandString), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p10", Value = ToDb(teilbestandString), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p11", Value = ToDb(record.Ablieferung()), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "p12", Value = ToDb(record.ZuständigeStelle()), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "p13", Value = ToDb(record.GetSchutzfristenVerzeichnung()), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "p14", Value = ToDb(zugaenglichkeitGemaessBga), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p15", Value = ToDb(user.FirstName), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p16", Value = ToDb(user.FamilyName), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p17", Value = ToDb(user.Organization), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p18", Value = ToDb(user.EmailAddress), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p19", Value = ToDb(user.RolePublicClient), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p20", Value = ToDb(asTokens), SqlDbType = SqlDbType.NVarChar
                    });
                    cmd.Parameters.Add(new SqlParameter {
                        ParameterName = "p21", Value = ToDb(ablieferndeStellen), SqlDbType = SqlDbType.NVarChar
                    });

                    cmd.ExecuteScalar();
                }
            }
        }
        private DossierDIP AddDossierData(IList <DossierDIP> dossierCollection, IList <ICmisExtensionElement> extensions,
                                          ElasticArchiveRecord dossierRecord, bool addDateiRefList, List <RepositoryFile> filesToIgnore)
        {
            Log.Verbose("Adding Dossier data with metadata: {extensions} and index record customfields {dossierRecord}",
                        JsonConvert.SerializeObject(extensions), JsonConvert.SerializeObject(dossierRecord?.CustomFields));

            var dossier = new DossierDIP
            {
                Aktenzeichen = string.IsNullOrEmpty(dossierRecord?.Aktenzeichen())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Aktenzeichen")
                    : dossierRecord.Aktenzeichen(),
                Zusatzmerkmal = string.IsNullOrEmpty(dossierRecord?.Zusatzmerkmal())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Zusatzmerkmal")
                    : dossierRecord.Zusatzmerkmal(),
                Titel = string.IsNullOrEmpty(dossierRecord?.Title)
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Titel")
                    : dossierRecord.Title,
                Inhalt = string.IsNullOrEmpty(dossierRecord?.WithinInfo)
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Inhalt")
                    : dossierRecord.WithinInfo,
                Id = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:dossier/dossier@id"),
                Erscheinungsform =
                    Enum.TryParse(metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Erscheinungsform"), true,
                                  out ErscheinungsformDossier ef)
                        ? ef
                        : ErscheinungsformDossier.keineAngabe,
                Umfang = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Umfang"),
                FederfuehrendeOrganisationseinheit =
                    metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/FederfuehrendeOrganisationseinheit"),
                Eroeffnungsdatum    = metadataAccess.GetHistorischerZeitpunkt(extensions, "ARELDA:Dossier/Dossier/Eroeffnungsdatum"),
                Abschlussdatum      = metadataAccess.GetHistorischerZeitpunkt(extensions, "ARELDA:Dossier/Dossier/Abschlussdatum"),
                Entstehungszeitraum = dossierRecord?.CreationPeriod == null
                    ? metadataAccess.GetHistorischerZeitraum(extensions, "ARELDA:Dossier/Dossier/Entstehungszeitraum")
                    : GetEntstehungszeitraum(dossierRecord.CreationPeriod),
                EntstehungszeitraumAnmerkung = string.IsNullOrEmpty(dossierRecord?.EntstehungszeitraumAnmerkung())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/EntstehungszeitraumAnmerkung")
                    : dossierRecord.EntstehungszeitraumAnmerkung(),
                Klassifizierungskategorie = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Klassifizierungskategorie"),
                Datenschutz = bool.TryParse(metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Datenschutz"),
                                            out var datenschutz) && datenschutz,
                Oeffentlichkeitsstatus            = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Oeffentlichkeitsstatus"),
                OeffentlichkeitsstatusBegruendung =
                    metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/OeffentlichkeitsstatusBegruendung"),
                SonstigeBestimmungen = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/SonstigeBestimmungen"),
                // ToDO: In order to handle Vorgang we would need code that can handle collections. Currently we don't need that property.
                // Vorgang = metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Vorgang"),
                Bemerkung = string.IsNullOrEmpty(dossierRecord?.ZusätzlicheInformationen())
                    ? metadataAccess.GetExtendedPropertyValue(extensions, "ARELDA:Dossier/Dossier/Bemerkung")
                    : dossierRecord.ZusätzlicheInformationen(),
                DateiRef = addDateiRefList
                    ? GetFilteredDateiRef(metadataAccess.GetExtendedPropertyValues(extensions, "ARELDA:Dossier/Dossier/DateiRef"), filesToIgnore)
                    : null
            };

            // Add optional data
            if (!string.IsNullOrEmpty(dossierRecord?.ReferenceCode))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Signatur", Value = dossierRecord.ReferenceCode
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.Level))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Stufe", Value = dossierRecord.Level
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.FormerReferenceCode))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Frühere Signaturen", Value = dossierRecord.FormerReferenceCode
                });
            }

            if (dossierRecord?.ArchiveplanContext.Count > 0)
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal
                {
                    Name = "Archivplankontext", Value = JsonConvert.SerializeObject(dossierRecord.ArchiveplanContext)
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.Land()))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Land", Value = dossierRecord.Land()
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.Form()))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Form", Value = dossierRecord.Form()
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.FrüheresAktenzeichen()))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Früheres Aktenzeichen", Value = dossierRecord.FrüheresAktenzeichen()
                });
            }

            if (!string.IsNullOrEmpty(dossierRecord?.PrimaryDataLink))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Identifikation digitales Magazin", Value = dossierRecord.PrimaryDataLink
                });
            }

            if (dossierRecord?.CreationPeriod != null)
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "Entstehungszeitraum Anzeigetext", Value = dossierRecord.CreationPeriod.Text
                });
            }

            var reihenfolge =
                metadataAccess.GetExtendedPropertyBagValue(extensions, "ARELDA:Dossier/Dossier/Zusatzdaten/Merkmal", "ReihenfolgeAnalogesDossier");

            if (!string.IsNullOrEmpty(reihenfolge))
            {
                dossier.zusatzDaten.Add(new ZusatzDatenMerkmal {
                    Name = "ReihenfolgeAnalogesDossier", Value = reihenfolge
                });
            }


            dossierCollection.Add(dossier);
            return(dossier);
        }