private void cmdTestIsUsageCopy_Click(object sender, EventArgs e)
        {
            var orderData = DigitalisierungsAuftrag.LoadFromFile(@"C:\Temp\DigiOrder_4891626.xml", Encoding.UTF8);
            var result    = DigitizationOrderBuilder.IsUsageCopy(orderData);

            MessageBox.Show(result.ToString());
        }
        /// <summary>
        ///     Determines whether this order is a usage copy or not based on the data.
        /// </summary>
        /// <param name="digitizationOrderData">The digitization order data.</param>
        /// <returns><c>true</c> if it is a usage copy otherwise, <c>false</c>.</returns>
        public static bool IsUsageCopy(DigitalisierungsAuftrag digitizationOrderData)
        {
            // The rules are according to the specification

            /* Dieser Wert wird durch das System ermittelt. Dabei gelten die folgenden Regeln:
             *  –	AblieferungsType: Alle Felder müssen geliefert werden. Enthält eines der Felder den Dummy Wert «keine Angabe»,
             *      handelt es sich um eine Benutzungskopie.
             *  –	OrdnungsSystemType: Sämtliche Felder müssen geliefert werden. Enthält eines der Felder den Dummy Wert «keine Angabe»,
             *      handelt es sich um eine Benutzungskopie.
             *  –	VerzEinheitType: Es muss ein Wert für die Felder Titel und Entstehungszeitraum geliefert werden. Enthält eines der Felder den
             *      Dummy Wert «keine Angabe», handelt es sich um eine Benutzungskopie.
             *      –	Diese beiden Felder müssen auch für jeweils die untergeordneten Verzeichnungseinheiten vorhanden sein.  */

            // Instead of checking each individual field, we serialize the object and then try to search by regex
            // this reduces the complexity due to recursive fields we have

            var retVal = digitizationOrderData.Ablieferung.Ablieferungsnummer.Equals(NoDataAvailable);

            retVal = retVal || digitizationOrderData.Ablieferung.AblieferndeStelle.Equals(NoDataAvailable);
            retVal = retVal || digitizationOrderData.Ablieferung.AktenbildnerName.Equals(NoDataAvailable);

            retVal = retVal || CheckOrdnungsSystemForNoDataAvailable(digitizationOrderData.OrdnungsSystem);

            retVal = retVal || digitizationOrderData.Dossier.Titel.Equals(NoDataAvailable);
            retVal = retVal || digitizationOrderData.Dossier.Entstehungszeitraum.Equals(NoDataAvailable);
            retVal = retVal || CheckUntergeordneteVerzEinheitenNoDataAvailable(digitizationOrderData.Dossier.UntergeordneteVerzEinheiten);

            return(retVal);
        }
        /// <summary>
        ///     Gets the order data.
        /// </summary>
        /// <param name="recordId">The record identifier.</param>
        /// <param name="digitizationOrderData">The digitization order data.</param>
        /// <returns>AuftragsdatenType.</returns>
        private AuftragsdatenType GetOrderData(string recordId, DigitalisierungsAuftrag digitizationOrderData)
        {
            // Only these values can be filled by the order builder
            var retVal = new AuftragsdatenType
            {
                BestelleinheitId = recordId,
                Benutzungskopie  = IsUsageCopy(digitizationOrderData)
            };

            return(retVal);
        }
        /// <summary>
        ///     Builds the digitization order from a given record id.
        ///     The record id should be from a unit of description which is either a document or dossier.
        /// </summary>
        /// <param name="recordId">The record identifier.</param>
        /// <returns>DigitalisierungsAuftrag.</returns>
        public DigitalisierungsAuftrag Build(string recordId)
        {
            var result = new DigitalisierungsAuftrag();

            // clear cache
            containerContentCache.Clear();

            // Get lots of metadata we need for processing
            var archiveRecord = recordBuilder.Build(recordId);

            if (archiveRecord != null)
            {
                // Accession Data
                var t1 = Task.Factory.StartNew(() => { result.Ablieferung = GetAccessionData(recordId, archiveRecord); });

                var t2 = Task.Factory.StartNew(() =>
                {
                    // Ordering position Data
                    result.OrdnungsSystem = GetOrderingPositionData(archiveRecord);
                });

                var t3 = Task.Factory.StartNew(() =>
                {
                    // Archive record data
                    result.Dossier = GetDossierData(archiveRecord);
                });

                Task.WaitAll(t1, t2, t3);

                // The basic order data
                result.Auftragsdaten = GetOrderData(recordId, result);
            }
            else
            {
                result.Ablieferung = new AblieferungType
                {
                    AblieferndeStelle = NoDataAvailable, Ablieferungsnummer = NoDataAvailable, AktenbildnerName = NoDataAvailable
                };
                result.OrdnungsSystem = new OrdnungsSystemType {
                    Name = NoDataAvailable, Signatur = NoDataAvailable, Stufe = NoDataAvailable
                };
                result.Dossier = new VerzEinheitType
                {
                    Titel         = NoDataAvailable, Signatur = NoDataAvailable, Entstehungszeitraum = NoDataAvailable, Stufe = NoDataAvailable,
                    VerzEinheitId = Convert.ToInt64(recordId)
                };
                result.Auftragsdaten = GetOrderData(recordId, result);
            }

            return(result);
        }
Esempio n. 5
0
        /// <summary>Erstellt einen DigitalisierungsAuftrag anhand der vom Benutzer gemachten Eingaben bei der Bestellung.</summary>
        /// <param name="digipoolEntry">Der Auftrag aus dem DigiPool</param>
        public async Task <DigitalisierungsAuftrag> GetManualDigitalisierungsAuftrag(DigipoolEntry digipoolEntry)
        {
            // Die Muss-Daten zunächst mit "keine Angabe" initialisieren
            var auftrag = new DigitalisierungsAuftrag
            {
                Ablieferung = new AblieferungType
                {
                    AblieferndeStelle = noDataAvailable, Ablieferungsnummer = noDataAvailable, AktenbildnerName = noDataAvailable
                },
                OrdnungsSystem = new OrdnungsSystemType {
                    Name = noDataAvailable, Signatur = noDataAvailable, Stufe = noDataAvailable
                },
                Dossier = new VerzEinheitType
                {
                    Titel = noDataAvailable, Signatur = noDataAvailable, Entstehungszeitraum = noDataAvailable, Stufe = noDataAvailable
                },
                Auftragsdaten = new AuftragsdatenType {
                    Benutzungskopie = true, BestelleinheitId = "-1"
                }
            };


            // Nun die Auftragsdaten mit den Benutzerangaben überschreiben, bzw. setzen
            var orderItems = await orderManagerClient.FindOrderItems(new[] { digipoolEntry.OrderItemId });

            var orderItem = orderItems.FirstOrDefault();

            if (orderItem != null)
            {
                // Verschiedene Properties nun auf die angegebenen Benutzerangaben stellen.
                auftrag.Ablieferung.Ablieferungsnummer = orderItem.Ablieferung;
                auftrag.Dossier.Aktenzeichen           = orderItem.Aktenzeichen;
                auftrag.Dossier.Archivnummer           = orderItem.ArchivNummer;
                if (!string.IsNullOrEmpty(orderItem.BehaeltnisNummer))
                {
                    auftrag.Dossier.Behaeltnisse = new List <BehaeltnisType>
                    {
                        new BehaeltnisType {
                            BehaeltnisCode = orderItem.BehaeltnisNummer, BehaeltnisTyp = noDataAvailable
                        }
                    };
                }

                auftrag.Dossier.Titel               = orderItem.Dossiertitel;
                auftrag.Dossier.Signatur            = orderItem.Signatur;
                auftrag.Dossier.Entstehungszeitraum = orderItem.ZeitraumDossier;
            }

            return(auftrag);
        }
        private List <string> ValidateAuftrag(DigitalisierungsAuftrag auftrag)
        {
            var data = auftrag.Serialize();

            var    schemas = new XmlSchemaSet();
            string schema;
            var    assembly     = Assembly.LoadFrom(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CMI.Contract.Common.dll"));
            var    resourceName = "CMI.Contract.Common.Digitalisierungsauftrag.xsd";

            using (var stream = assembly.GetManifestResourceStream(resourceName))
                using (var reader = new StreamReader(stream ?? throw new InvalidOperationException()))
                {
                    schema = reader.ReadToEnd();
                }

            schemas.Add("", XmlReader.Create(new StringReader(schema)));

            var xmlDoc = XDocument.Parse(data);
            var errors = new List <string>();

            xmlDoc.Validate(schemas, (o, e) => { errors.Add(e.Message); });

            return(errors);
        }
        private void WriteItem(DigitalisierungsAuftrag digitalisierungsAuftrag, StreamWriter writer)
        {
            var data = digitalisierungsAuftrag.Serialize();

            writer.WriteLine(data);
        }