Teilnehmerauswertung auf Ledger-Lesemodell umstellen
This commit is contained in:
@@ -41,6 +41,44 @@ function ledger_current_year(): int
|
||||
return (int)date('Y');
|
||||
}
|
||||
|
||||
function ledger_default_tenant_slug(): string
|
||||
{
|
||||
$tenantSlug = app_env('M4_DEFAULT_TENANT_SLUG');
|
||||
if ($tenantSlug === null || trim($tenantSlug) === '') {
|
||||
$tenantSlug = app_env('M3_DEFAULT_TENANT_SLUG', 'default');
|
||||
}
|
||||
|
||||
return trim((string)$tenantSlug) !== '' ? trim((string)$tenantSlug) : 'default';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{id: int, name: string, slug: string}|null
|
||||
*/
|
||||
function ledger_fetch_tenant_by_slug(PDO $pdo, string $slug): ?array
|
||||
{
|
||||
$stmt = $pdo->prepare('SELECT id, name, slug FROM tenants WHERE slug = ? LIMIT 1');
|
||||
$stmt->execute([trim($slug)]);
|
||||
$tenant = $stmt->fetch();
|
||||
|
||||
if ($tenant === false) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => (int)$tenant['id'],
|
||||
'name' => (string)$tenant['name'],
|
||||
'slug' => (string)$tenant['slug'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{id: int, name: string, slug: string}|null
|
||||
*/
|
||||
function ledger_fetch_default_tenant(PDO $pdo): ?array
|
||||
{
|
||||
return ledger_fetch_tenant_by_slug($pdo, ledger_default_tenant_slug());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{total_payments_cents: int, total_costs_cents: int, total_marks: int, balance_cents: int, year_payments_cents: int, year_costs_cents: int, year_marks: int}
|
||||
*/
|
||||
@@ -99,6 +137,7 @@ function ledger_fetch_tenant_totals(PDO $pdo, int $tenantId, ?int $year = null):
|
||||
* - year: int
|
||||
* - active_only: bool|null
|
||||
* - participant_ids: list<int>
|
||||
* - legacy_mitarbeiter_ids: list<int>
|
||||
* - email_norms: list<string>
|
||||
*
|
||||
* @return list<array{participant_id: int, tenant_id: int, legacy_mitarbeiter_id: ?int, display_name: string, email: ?string, email_norm: ?string, paypal_name: ?string, active: bool, total_payments_cents: int, total_costs_cents: int, total_marks: int, balance_cents: int, year_payments_cents: int, year_costs_cents: int, year_marks: int}>
|
||||
@@ -125,6 +164,17 @@ function ledger_fetch_participant_summaries(PDO $pdo, int $tenantId, array $opti
|
||||
array_push($params, ...$participantIds);
|
||||
}
|
||||
|
||||
if (array_key_exists('legacy_mitarbeiter_ids', $options)) {
|
||||
$legacyIds = is_array($options['legacy_mitarbeiter_ids'])
|
||||
? ledger_normalize_ids($options['legacy_mitarbeiter_ids'])
|
||||
: [];
|
||||
if ($legacyIds === []) {
|
||||
return [];
|
||||
}
|
||||
$where[] = 'p.legacy_mitarbeiter_id IN (' . implode(',', array_fill(0, count($legacyIds), '?')) . ')';
|
||||
array_push($params, ...$legacyIds);
|
||||
}
|
||||
|
||||
if (array_key_exists('email_norms', $options)) {
|
||||
$emailNorms = is_array($options['email_norms'])
|
||||
? ledger_normalize_email_norms($options['email_norms'])
|
||||
@@ -202,6 +252,19 @@ function ledger_fetch_participant_summary(PDO $pdo, int $tenantId, int $particip
|
||||
return $summaries[0] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{participant_id: int, tenant_id: int, legacy_mitarbeiter_id: ?int, display_name: string, email: ?string, email_norm: ?string, paypal_name: ?string, active: bool, total_payments_cents: int, total_costs_cents: int, total_marks: int, balance_cents: int, year_payments_cents: int, year_costs_cents: int, year_marks: int}|null
|
||||
*/
|
||||
function ledger_fetch_participant_summary_by_legacy_id(PDO $pdo, int $tenantId, int $legacyMitarbeiterId, ?int $year = null): ?array
|
||||
{
|
||||
$summaries = ledger_fetch_participant_summaries($pdo, $tenantId, [
|
||||
'legacy_mitarbeiter_ids' => [$legacyMitarbeiterId],
|
||||
'year' => $year ?? ledger_current_year(),
|
||||
]);
|
||||
|
||||
return $summaries[0] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Options:
|
||||
* - participant_id: int
|
||||
|
||||
Reference in New Issue
Block a user