validate([ 'page_id' => ['required', 'integer', 'exists:preregistration_pages,id'], ]); $page = PreregistrationPage::query()->findOrFail($request->integer('page_id')); $this->authorize('update', $page); $config = $page->weeztixConfig; if ($config === null || ! $config->is_connected) { return response()->json([ 'message' => __('Niet verbonden met Weeztix.'), ], 422); } $companyGuid = $config->company_guid; if (! is_string($companyGuid) || $companyGuid === '') { return response()->json([ 'message' => __('Geen Weeztix-bedrijf gekoppeld. Verbind opnieuw met Weeztix.'), ], 422); } try { $raw = (new WeeztixService($config))->getCoupons(); $coupons = $this->normalizeCouponsPayload($raw); return response()->json(['coupons' => $coupons]); } catch (RuntimeException) { return response()->json([ 'message' => __('Kon kortingsbonnen niet laden.'), ], 422); } } /** * @param array $raw * @return list */ private function normalizeCouponsPayload(array $raw): array { $list = $raw; if (isset($raw['data']) && is_array($raw['data'])) { $list = $raw['data']; } if (! is_array($list)) { return []; } $out = []; foreach ($list as $row) { if (! is_array($row)) { continue; } if (! $this->couponRowHasEnabledStatus($row)) { continue; } $guid = data_get($row, 'guid') ?? data_get($row, 'id'); if (! is_string($guid) || $guid === '') { continue; } $name = data_get($row, 'name') ?? data_get($row, 'title') ?? $guid; $out[] = [ 'guid' => $guid, 'name' => is_string($name) ? $name : $guid, ]; } return $out; } /** * Weeztix coupon list items expose a string status; only "enabled" should appear in the admin picker. * * @param array $row */ private function couponRowHasEnabledStatus(array $row): bool { $status = data_get($row, 'status'); return is_string($status) && strcasecmp(trim($status), 'enabled') === 0; } }