Skip to main content

Helper & Konfiguration

App\Http\Helpers\Grenke\Helper

Statische Lookup-Tabellen für Entity-spezifische Defaults und Models.

getEntity($entity = null): array|string

Liste aller bekannten Entity-Slugs.

Helper::getEntity();           // → ['calculate', 'contracts', 'customslas', 'legalforms', 'objecttypes', 'requests']
Helper::getEntity('contracts');// → 'contracts'

getModel($entity = null)

Mapping Entity-Slug → Eloquent-Modell.

Helper::getModel('contracts'); // → \App\Models\Common\Grenke\Contracts::class
Helper::getModel('requests'); // → \App\Models\Common\Grenke\Requests::class

getParameter($entity)

Liefert die Listing-Parameter (Page, PageSize, State) je Entity. Default pageSize kommt aus GRENKE_PAGE_SIZE.

$param = Helper::getParameter('contracts');
// $param['pageSize'] = ['contractListParameter.pageSize', 3501]
// $param['page'] = ['contractListParameter.page', 1]
// $param['state'] = ['contractListParameter.state', 'ReadyToSign']

Verwendung im Controller:

$decoded = $this->grenkeApiService->getJson($entity, [
$param['pageSize'][0] => $param['pageSize'][1],
]);

getState($entity = null): array|string

Liste der RequestStates als Array (mirror von RequestState-Enum).

getFactor($period) & getFinancingAmount($monthlyInstalment, $period)

Fixe Faktor-Tabelle für Lease-Berechnung (siehe CalculateController.purchase):

Period (Monate)Factor
482.39
601.95
721.7
841.47
Helper::getFactor(84);                          // → 1.47
Helper::getFinancingAmount(299, 84); // → 20340.14

config/grenke.php

return [
'missing_info_mailflow' => [
'enabled' => env('GRENKE_MISSING_INFO_MAILFLOW_ENABLED', true),
'template_id' => env('GRENKE_MISSING_INFO_WECLAPP_TEMPLATE_ID', null),
'cc' => array_filter(array_map('trim', explode(',', env('GRENKE_MISSING_INFO_CC', '')))),
'bcc' => array_filter(array_map('trim', explode(',', env('GRENKE_MISSING_INFO_BCC', '')))),
'deduplicate_hours' => (int) env('GRENKE_MISSING_INFO_DEDUPLICATE_HOURS', 24),
'store_rendered_view' => env('GRENKE_MISSING_INFO_STORE_RENDERED_VIEW', false),
],
];

Siehe MissingInfo-Mailflow für Details zu jedem Schlüssel.

config/services.php'grenke'

'grenke' => [
'base_url' => rtrim(env('GRENKE_BASE_URL'), '/') . '/',
'pem_file' => storage_path('app/private/cert/' . env('GRENKE_PEM_FILE')),
'cert_pass' => env('GRENKE_CERT_PASS'),
'cert_file' => storage_path('app/private/cert/' . env('GRENKE_CERT_FILE')),
'ca_file' => storage_path('app/private/cert/' . env('GRENKE_CA_FILE')),
'api_key' => storage_path('app/private/cert/' . env('GRENKE_API_KEY')),
'timeout' => env('GRENKE_TIMEOUT', 30),
'connect_timeout' => env('GRENKE_CONNECT_TIMEOUT', 10),
'page_size' => env('GRENKE_PAGE_SIZE', 3501),
],

Das Zertifikat (GRENKE_PEM_FILE) muss in storage/app/private/cert/ liegen und im Repo unter Versionskontrolle (verschlüsselt) sein. Es wird vom ApiService automatisch via Http::withOptions(['cert' => [$pem, $pass]]) angehängt.

.env-Variablen — Übersicht

# Grenke API
GRENKE_BASE_URL="https://demo-api.grenke.de/basic/v1/"
GRENKE_PEM_FILE="grenke.pem"
GRENKE_CERT_PASS="..."
GRENKE_TIMEOUT=30
GRENKE_CONNECT_TIMEOUT=10
GRENKE_PAGE_SIZE=3501

# MissingInfo-Mailflow
GRENKE_MISSING_INFO_MAILFLOW_ENABLED=true
GRENKE_MISSING_INFO_WECLAPP_TEMPLATE_ID=12345
GRENKE_MISSING_INFO_CC=
GRENKE_MISSING_INFO_BCC=
GRENKE_MISSING_INFO_DEDUPLICATE_HOURS=24
GRENKE_MISSING_INFO_STORE_RENDERED_VIEW=false