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); }
/// <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); }