public async Task <OrderItem> AddToBasket(OrderingIndexSnapshot indexSnapShot, string userId)
        {
            var client = GetRequestClient <AddToBasketRequest>();

            var request = new AddToBasketRequest
            {
                UserId        = userId,
                IndexSnapshot = indexSnapShot
            };

            var result = await client.GetResponse <AddToBasketResponse>(request);

            return(result.Message.OrderItem);
        }
        /// <summary>
        ///     Mappt Elastic-Daten auf ein Auftragsdetail, somit werden die zum Zeitpunkt der Bestellung aufgenommenen Index-Daten
        ///     temporär überschrieben
        ///     Damit das Admin-Backend statt "nicht-sichtbar" die korrekten, echten Daten sehen
        /// </summary>
        /// <param name="snapshot"></param>
        /// <param name="item"></param>
        public static void ApplySnapshotToDetailItem(OrderingIndexSnapshot snapshot, OrderingFlatItem item)
        {
            foreach (var snapshotProperty in typeof(OrderingIndexSnapshot).GetProperties())
            {
                try
                {
                    var itemProperty = typeof(OrderingFlatItem).GetProperty(snapshotProperty.Name);
                    if (itemProperty == null || itemProperty.PropertyType != snapshotProperty.PropertyType)
                    {
                        continue;
                    }

                    itemProperty.SetValue(item, snapshotProperty.GetValue(snapshot));
                }
                catch (Exception ex)
                {
                    Log.Warning(ex, "Error when applying indexsnapshot to detail item");
                }
            }

            // Ausnahmen, die sich nicht automatisch mappen lassen
            item.BehaeltnisNummer = snapshot.BehaeltnisCode;
        }
        public void When_Applying_An_ElasticSnapshot_To_Detailitem_It_Should_Replace_Unknown_Texts_With_Real_Data()
        {
            // arrange
            var detailItem = new OrderingFlatItem();
            var snapshot   = new OrderingIndexSnapshot();

            foreach (var prop in detailItem.GetType().GetProperties().Where(p => p.PropertyType == typeof(string)))
            {
                var isElasticProperty = typeof(OrderingIndexSnapshot).GetProperty(prop.Name) != null;
                if (!isElasticProperty)
                {
                    continue;
                }

                prop.SetValue(detailItem, "HIDDEN");
            }

            detailItem.BehaeltnisNummer = "HIDDEN";
            SetAllStringPropertiesWithThisText(snapshot, "SECRET");

            // act
            OrderHelper.ApplySnapshotToDetailItem(snapshot, detailItem);

            // assert
            foreach (var prop in typeof(OrderingFlatItem)
                     .GetProperties()
                     .Where(p => p.PropertyType == typeof(string)))
            {
                var value = prop.GetValue(detailItem) as string;
                if (value == null || string.IsNullOrEmpty(value))
                {
                    continue;
                }

                value.Should().Be("SECRET", $"Field {prop.Name} must have the value of the snapshot");
            }
        }
        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);
        }
예제 #5
0
 public Task <OrderItem> AddToBasket(OrderingIndexSnapshot indexSnapshot, string userId)
 {
     return(sqlDataAccess.AddToBasket(indexSnapshot, userId));
 }