コード例 #1
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);
        }
        public async Task Consume(ConsumeContext <FindOrderItemsRequest> context)
        {
            using (LogContext.PushProperty(nameof(context.ConversationId), context.ConversationId))
            {
                Log.Information("Received {CommandName} command with conversationId {ConversationId} from the bus",
                                context.Message.GetType().Name, context.ConversationId);

                var orderItems = await manager.FindOrderItems(context.Message.OrderItemIds);

                var response = new FindOrderItemsResponse {
                    OrderItems = orderItems
                };

                await context.RespondAsync(response);
            }
        }
コード例 #3
0
        public async Task <IHttpActionResult> DownloadFile(int id, string token)
        {
            var orderItemId = id;

            if (string.IsNullOrWhiteSpace(token))
            {
                return(Content(HttpStatusCode.Forbidden, "Invalid token"));
            }

            var ipAdress = downloadHelper.GetClientIp(Request);

            if (!downloadTokenDataAccess.CheckTokenIsValidAndClean(token, orderItemId, DownloadTokenType.OrderItem, ipAdress))
            {
                return(BadRequest("Token expires or is not valid"));
            }

            var userId = downloadTokenDataAccess.GetUserIdByToken(token, orderItemId, DownloadTokenType.OrderItem, ipAdress);

            if (string.IsNullOrWhiteSpace(userId))
            {
                return(Content(HttpStatusCode.Forbidden, "No User found for the requested Downloadtoken"));
            }

            var orderItem = (await orderManagerClient.FindOrderItems(new[] { orderItemId })).FirstOrDefault();

            if (orderItem == null)
            {
                return(BadRequest("OrderItem does not exist in DB"));
            }

            if (!orderItem.Benutzungskopie.HasValue || !orderItem.Benutzungskopie.Value)
            {
                return(BadRequest("OrderItem is not a Benutzungskopie"));
            }

            downloadTokenDataAccess.CleanUpOldToken(token, orderItemId, DownloadTokenType.OrderItem);

            var downloadAssetResult = (await downloadClient.GetResponse <DownloadAssetResult>(new DownloadAssetRequest
            {
                ArchiveRecordId = orderItem.VeId.ToString(),
                OrderItemId = orderItemId,
                AssetType = AssetType.Benutzungskopie,
                Recipient = userId,
                RetentionCategory = CacheRetentionCategory.UsageCopyBenutzungskopie,
                ForceSendPasswordMail = true
            })).Message;

            // If item is not in cache, indicate that it is gone
            if (string.IsNullOrEmpty(downloadAssetResult.AssetDownloadLink))
            {
                return(ResponseMessage(new HttpResponseMessage(HttpStatusCode.Gone)));
            }

            var stream = cacheHelper.GetStreamFromCache(downloadAssetResult.AssetDownloadLink);
            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StreamContent(stream)
            };

            var fileName = orderItemId + ".zip";

            result.Content.Headers.ContentType        = new MediaTypeHeaderValue("application/octet-stream");
            result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = fileName
            };

            return(ResponseMessage(result));
        }