feat: Lizenzkontingente im Manager durchsetzen
This commit is contained in:
@@ -82,6 +82,62 @@ final class Lizenzpruefung
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Liefert die aufsummierte aktive Berechtigung fuer einen Katalogeintrag.
|
||||
*
|
||||
* @param array<string, mixed> $lease
|
||||
*/
|
||||
public static function berechtigungsMenge(array $lease, string $kennung): int
|
||||
{
|
||||
$berechtigungen = $lease['entitlements'] ?? null;
|
||||
if (!is_array($berechtigungen)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$menge = 0;
|
||||
foreach ($berechtigungen as $berechtigung) {
|
||||
if (!is_array($berechtigung)
|
||||
|| ($berechtigung['status'] ?? null) !== 'active'
|
||||
|| !is_int($berechtigung['quantity'] ?? null)
|
||||
|| $berechtigung['quantity'] < 1
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
$berechtigungsKennung = $berechtigung['catalog_key']
|
||||
?? $berechtigung['sku']
|
||||
?? null;
|
||||
if ($berechtigungsKennung === $kennung) {
|
||||
$menge += $berechtigung['quantity'];
|
||||
}
|
||||
}
|
||||
|
||||
return $menge;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $lease
|
||||
* @param array<string, int> $verwendeteMengen
|
||||
*/
|
||||
public static function pruefeVerbrauchermengen(array $lease, array $verwendeteMengen): void
|
||||
{
|
||||
foreach ($verwendeteMengen as $kennung => $verwendet) {
|
||||
if ($verwendet < 0) {
|
||||
throw new InvalidArgumentException(
|
||||
'Die verwendete Menge fuer ' . $kennung . ' darf nicht negativ sein.'
|
||||
);
|
||||
}
|
||||
$lizenziert = self::berechtigungsMenge($lease, $kennung);
|
||||
if ($verwendet > $lizenziert) {
|
||||
throw new InvalidArgumentException(sprintf(
|
||||
'Lizenzkontingent fuer %s ueberschritten: %d verwendet, %d lizenziert.',
|
||||
$kennung,
|
||||
$verwendet,
|
||||
$lizenziert
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $lease
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user