示例#1
0
        public async Task <IHttpActionResult> GetKontingent(string forUserId = "")
        {
            var access = GetCurrentUserAccess();
            var role   = access.RolePublicClient.GetRolePublicClientEnum();

            User user;

            if (!string.IsNullOrWhiteSpace(forUserId) && role == AccessRolesEnum.BAR)
            // BAR User bestellt im Namen eines anderen Benutzer, Kontingent für Empfänger zurückgeben
            {
                user = userDataAccess.GetUser(forUserId);
            }
            else
            {
                user = userDataAccess.GetUser(access.UserId);
            }

            if (user == null)
            {
                return(Content(HttpStatusCode.NotFound, $"User with id {forUserId} not found"));
            }

            var bestimmer     = new KontingentBestimmer(digitalisierungsbeschraenkungSettings);
            var userOrderings = await client.GetOrderings(user.Id);

            var result = bestimmer.BestimmeKontingent(userOrderings, role, user);

            return(Ok(result));
        }
示例#2
0
        private async Task ValidateDigitalisierungsauftragBestellung(string bestellerId,
                                                                     bool bestellungIstFuerAndererBenutzer,
                                                                     UserAccess userAccess, OrderItemDto[] basket, List <int> orderItemIdsToExclude)
        {
            var kontingentBestimmer = new KontingentBestimmer(digitalisierungsbeschraenkungSettings);
            var orderings           = await client.GetOrderings(bestellerId);

            var role = bestellungIstFuerAndererBenutzer
                ? AccessRolesEnum.BAR
                : userAccess.RolePublicClient.GetRolePublicClientEnum();

            var user = userDataAccess.GetUser(bestellerId);

            var result = kontingentBestimmer.BestimmeKontingent(orderings, role, user);

            // User should usually not see these validation-messages, as it is already checked on client (so no translation here)
            if (result.Bestellkontingent <= 0)
            {
                throw new BadRequestException(
                          $"Das Bestellkontingent ist überschritten. Sie haben bereits {result.AktiveDigitalisierungsauftraege} aktive Aufträge.");
            }

            var anzahlgewaehlteAuftraege = basket.Select(i => i.Id).Except(orderItemIdsToExclude).Count();

            if (anzahlgewaehlteAuftraege == 0)
            {
                throw new BadRequestException("Es wurden keine Aufträge für die Bestellung ausgewählt.");
            }

            if (result.Bestellkontingent < anzahlgewaehlteAuftraege)
            {
                throw new BadRequestException(
                          $"Das Bestellkontingent wird überschritten. Sie haben {anzahlgewaehlteAuftraege} Aufträge ausgewählt, dürfen aber nur {result.Bestellkontingent} Aufträge bestellen.");
            }
        }
        public void BestimmeKontingent_AktiveAuftraege_Should_Not_BeCalculatedFromOrderings_When_Ordering_Is_Not_Digitalisierung(OrderType orderType)
        {
            // arrange
            var setting           = new DigitalisierungsbeschraenkungSettings();
            var itemsFromOrdering = new List <OrderItem>
            {
                new OrderItem
                {
                    Status = OrderStatesInternal.FreigabePruefen
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.Ausgeliehen
                }
            };

            var orderings = new List <Ordering>
            {
                new Ordering
                {
                    Type  = orderType,
                    Items = itemsFromOrdering.ToArray()
                }
            };

            var sut = new KontingentBestimmer(setting);

            // act
            var result = sut.BestimmeKontingent(orderings, AccessRolesEnum.Ö2, new User());

            // assert
            result.AktiveDigitalisierungsauftraege.Should().Be(0);
        }
        public void BestimmeKontingent_Bestellkontingent_Should_Be_Zero_When_Orderings_Equals_Threshold()
        {
            // arrange
            var setting = new DigitalisierungsbeschraenkungSettings {
                DigitalisierungsbeschraenkungBvw = 2
            };

            var itemsFromOrdering = new List <OrderItem>
            {
                new OrderItem
                {
                    Status = OrderStatesInternal.FreigabePruefen // Zählt
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.FuerDigitalisierungBereit // Zählt
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.Abgebrochen // Zählt nicht
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.DigitalisierungAbgebrochen // Zählt nicht
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.ZumReponierenBereit // Zählt nicht
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.Abgeschlossen // Zählt nicht
                }
            };
            var orderings = new List <Ordering>
            {
                new Ordering
                {
                    Type  = OrderType.Digitalisierungsauftrag, // zählt
                    Items = itemsFromOrdering.ToArray()
                },
                new Ordering
                {
                    Type  = OrderType.Einsichtsgesuch, // zählt nicht
                    Items = itemsFromOrdering.ToArray()
                }
            };

            var sut = new KontingentBestimmer(setting);

            // act
            var result = sut.BestimmeKontingent(orderings, AccessRolesEnum.BVW, new User());

            // assert
            result.AktiveDigitalisierungsauftraege.Should().Be(2);
            result.Digitalisierungesbeschraenkung.Should().Be(setting.DigitalisierungsbeschraenkungBvw);
            result.Bestellkontingent.Should().Be(0);
        }
        public void BestimmeKontingent_Von_Oe1_Should_Throw_NotImplementedException()
        {
            // arrange
            var setting   = new DigitalisierungsbeschraenkungSettings();
            var orderings = new List <Ordering>();
            var sut       = new KontingentBestimmer(setting);

            // act
            var action = new Action(() => { sut.BestimmeKontingent(orderings, AccessRolesEnum.Ö1, new User()); });

            // assert
            action.Should().Throw <ArgumentOutOfRangeException>();
        }
        public void BestimmeKontingent_AktiveAuftraege_Should_BeCalculatedFromOrderings_When_Ordering_Is_Digitalisierung()
        {
            // arrange
            var setting           = new DigitalisierungsbeschraenkungSettings();
            var itemsFromOrdering = new List <OrderItem>
            {
                new OrderItem
                {
                    Status = OrderStatesInternal.FreigabePruefen // Zählt
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.FuerDigitalisierungBereit // Zählt
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.Abgebrochen // Zählt nicht
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.DigitalisierungAbgebrochen // Zählt nicht
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.ZumReponierenBereit // Zählt nicht
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.Abgeschlossen // Zählt nicht
                }
            };

            var orderings = new List <Ordering>
            {
                new Ordering
                {
                    Type  = OrderType.Digitalisierungsauftrag,
                    Items = itemsFromOrdering.ToArray()
                }
            };

            var sut = new KontingentBestimmer(setting);

            // act
            var result = sut.BestimmeKontingent(orderings, AccessRolesEnum.Ö2, new User());

            // assert
            result.AktiveDigitalisierungsauftraege.Should().Be(2);
        }
        public void BestimmeKontingent_Digitalisierungsbeschraekung_Should_Come_From_Settings()
        {
            // arrange
            var setting = new DigitalisierungsbeschraenkungSettings {
                DigitalisierungsbeschraenkungOe2 = 2
            };

            var orderings = new List <Ordering>();
            var sut       = new KontingentBestimmer(setting);

            // act
            var result = sut.BestimmeKontingent(orderings, AccessRolesEnum.Ö2, new User());

            // assert
            result.Digitalisierungesbeschraenkung.Should().Be(setting.DigitalisierungsbeschraenkungOe2);
        }
示例#8
0
        public void BestimmeKontingent_Von_Oe1_Should_Throw_NotImplementedException()
        {
            // arrange
            var setting   = new DigitalisierungsbeschraenkungSettings();
            var orderings = new List <Ordering>();
            var sut       = new KontingentBestimmer(setting);

            // act
            var action = new Action(() =>
            {
                sut.BestimmeKontingent(orderings,
                                       new User
                {
                    RolePublicClient = AccessRoles.RoleOe1,
                    Access           = new UserAccess("1", AccessRoles.RoleOe1, "oe1", null, false)
                });
            });

            // assert
            action.Should().Throw <ArgumentOutOfRangeException>();
        }
        public void BestimmeKontingent_Bestellkontingent_Should_Be_Zero_When_User_DisablesThreshold_Ends_Yesterday()
        {
            // arrange
            var setting = new DigitalisierungsbeschraenkungSettings {
                DigitalisierungsbeschraenkungBar = 1
            };

            var itemsFromOrdering = new List <OrderItem>
            {
                new OrderItem
                {
                    Status = OrderStatesInternal.FreigabePruefen // Zählt
                },
                new OrderItem
                {
                    Status = OrderStatesInternal.FuerDigitalisierungBereit // Zählt
                }
            };
            var orderings = new List <Ordering>
            {
                new Ordering
                {
                    Type  = OrderType.Digitalisierungsauftrag, // zählt
                    Items = itemsFromOrdering.ToArray()
                }
            };

            var user = new User
            {
                DigitalisierungsbeschraenkungAufgehobenBis = DateTime.Now.AddDays(-1)
            };

            var sut = new KontingentBestimmer(setting);

            // act
            var result = sut.BestimmeKontingent(orderings, AccessRolesEnum.BAR, user);

            // assert
            result.Bestellkontingent.Should().Be(0);
        }