public async Task Consume(ConsumeContext <OrderCreationRequest> 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 m = context.Message; await manager.CreateOrderFromBasket(m); await context.RespondAsync(new CreateOrderFromBasketResponse()); } }
public async Task <IHttpActionResult> Order([FromBody] OrderParams orderParams) { // Diese Prüfung soll immer für den aktuellen Benutzer (also nicht für den Besteller) ablaufen gemäss Telefonat mit Marlies Hertig var basket = await GetBasket(); if (basket == null || basket.Count(i => !i.EinsichtsbewilligungNotwendig) == 0) { throw new BadRequestException("Order not is allowed, because there are no items in basket"); } var userAccess = GetUserAccess(); var bestellerId = !string.IsNullOrWhiteSpace(orderParams.UserId) ? orderParams.UserId : ControllerHelper.GetCurrentUserId(); var bestellungIstFuerAndererBenutzer = ControllerHelper.GetCurrentUserId() != bestellerId; if (bestellungIstFuerAndererBenutzer) { if (GetCurrentUserAccess().RolePublicClient != AccessRoles.RoleBAR) { throw new BadRequestException( "Es wird versucht, für einen anderen Benutzer als den aktuellen Benutzer zu bestellen. Dazu fehlt aber die Berechtigung."); } orderParams.Comment = string.Join(" ", orderParams.Comment, FrontendSettingsViaduc.Instance.GetTranslation(WebHelper.GetClientLanguage(Request), "order.frombar", "(Diese Bestellung wurde durch das Bundesarchiv ausgelöst.)")); } var orderItemIdsToExclude = basket .Where(basketItem => basketItem.EinsichtsbewilligungNotwendig || orderParams.Type == OrderType.Digitalisierungsauftrag && orderParams.OrderIdsToExclude != null && orderParams.OrderIdsToExclude.Contains(basketItem.Id)) .Select(item => item.Id) .ToList(); DateTime?leseSaalDateAsDateTime = null; switch (orderParams.Type) { case OrderType.Verwaltungsausleihe: ValidateVerwaltungsausleiheBestellung(userAccess); break; case OrderType.Digitalisierungsauftrag: await ValidateDigitalisierungsauftragBestellung(bestellerId, bestellungIstFuerAndererBenutzer, userAccess, basket, orderItemIdsToExclude); break; case OrderType.Lesesaalausleihen: leseSaalDateAsDateTime = orderParams.LesesaalDate.ParseDateTimeSwiss(); ValidateLesesaalBestellung(leseSaalDateAsDateTime); break; default: throw new BadRequestException( $"Bestelltyp {orderParams.Type.ToString()} ist hier nicht unterstützt."); } if (userAccess.RolePublicClient == AccessRoles.RoleAS) { orderParams.ArtDerArbeit = (int)verwaltungsausleiheSettings.ArtDerArbeitFuerAmtsBestellung; } var creationRequest = new OrderCreationRequest { OrderItemIdsToExclude = orderItemIdsToExclude, Type = orderParams.Type, Comment = orderParams.Comment, ArtDerArbeit = orderParams.ArtDerArbeit, LesesaalDate = leseSaalDateAsDateTime, CurrentUserId = ControllerHelper.GetCurrentUserId(), BestellerId = bestellerId }; var veInfoList = basket.Where(item => item.VeId.HasValue && !orderItemIdsToExclude.Contains(item.Id)) .Select(item => new VeInfo((int)item.VeId, item.Reason)).ToList(); await kontrollstellenInformer.InformIfNecessary(userAccess, veInfoList); await client.CreateOrderFromBasket(creationRequest); return(Content <object>(HttpStatusCode.NoContent, null)); }