// Automatic FlutterFlow imports import '/backend/schema/structs/index.dart'; import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'index.dart'; // Imports other custom actions import '/flutter_flow/custom_functions.dart'; // Imports custom functions import 'package:flutter/material.dart'; // Begin custom action code // DO NOT REMOVE OR MODIFY THE CODE ABOVE! // ⬇⬇⬇ PLAK VANAF HIER — de drie importregels horen erbij! ⬇⬇⬇ // Zonder 'package:http' faalt de build met: Undefined name 'http'. import 'dart:async'; import 'dart:convert'; import 'package:http/http.dart' as http; Future evenementCreate( String sessionName, String sessionId, String token, String horecagelegenheidNid, String titel, String datumStart, String? datumEind, String? omschrijving, String? entreeTid, String? entreePrijs, String? toelichtingEntree, String? ticketsUrl, String? websiteUrl, List? categorieTids, String? logoFid, List? fotosFids, ) async { final horecaNidInt = int.tryParse(horecagelegenheidNid.trim()); if (horecaNidInt == null) { return {'success': false, 'error': 'Kies eerst een horecagelegenheid'}; } if (titel.trim().isEmpty) { return {'success': false, 'error': 'Titel is verplicht'}; } if (datumStart.trim().isEmpty) { return {'success': false, 'error': 'Datum is verplicht'}; } // Einddatum mag niet vóór de startdatum liggen (P2-29 / A3). // Beide komen binnen als 'yyyy-MM-dd HH:mm:ss'; DateTime.tryParse // accepteert die vorm. Een lege einddatum betekent: geen einddatum. if ((datumEind ?? '').trim().isNotEmpty) { final start = DateTime.tryParse(datumStart.trim()); final eind = DateTime.tryParse(datumEind!.trim()); if (start != null && eind != null && eind.isBefore(start)) { return { 'success': false, 'error': 'De einddatum ligt vóór de startdatum', }; } } final body = { 'horecagelegenheid_nid': horecaNidInt, 'titel': titel.trim(), 'datum_start': datumStart.trim(), }; if ((datumEind ?? '').trim().isNotEmpty) { body['datum_eind'] = datumEind!.trim(); } if ((omschrijving ?? '').trim().isNotEmpty) { body['omschrijving'] = omschrijving!.trim(); } if ((entreeTid ?? '').trim().isNotEmpty) { final tid = int.tryParse(entreeTid!.trim()); if (tid != null) body['entree_tid'] = tid; } if ((entreePrijs ?? '').trim().isNotEmpty) { body['entree_prijs'] = entreePrijs!.trim(); } if ((toelichtingEntree ?? '').trim().isNotEmpty) { body['toelichting_entree'] = toelichtingEntree!.trim(); } if ((ticketsUrl ?? '').trim().isNotEmpty) { body['tickets_url'] = ticketsUrl!.trim(); } if ((websiteUrl ?? '').trim().isNotEmpty) { body['website_url'] = websiteUrl!.trim(); } if (categorieTids != null && categorieTids.isNotEmpty) { final tids = categorieTids .map((e) => int.tryParse(e.trim())) .whereType() .toList(); if (tids.isNotEmpty) body['categorie_tids'] = tids; } if ((logoFid ?? '').trim().isNotEmpty) { final fid = int.tryParse(logoFid!.trim()); if (fid != null) body['logo_fid'] = fid; } if (fotosFids != null && fotosFids.isNotEmpty) { final fids = fotosFids.map((e) => int.tryParse(e.trim())).whereType().toList(); if (fids.isNotEmpty) body['fotos_fids'] = fids; } final headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', }; if (sessionName.trim().isNotEmpty && sessionId.trim().isNotEmpty) { headers['Cookie'] = '$sessionName=$sessionId'; } if (token.trim().isNotEmpty) { headers['X-CSRF-Token'] = token; } final base = FFAppState().apiBaseUrl.trim().isEmpty ? 'https://uitgaanskrant.com' : FFAppState().apiBaseUrl.trim(); final url = '$base/en/flutterdrup/evenementen/create.json'; print('========================================'); print('EVENEMENT CREATE'); print('URL : $url'); print('BODY : ${jsonEncode(body)}'); print('========================================'); try { final response = await http .post(Uri.parse(url), headers: headers, body: jsonEncode(body)) .timeout(const Duration(seconds: 30)); print('========================================'); print('STATUS : ${response.statusCode}'); print('BODY'); print(response.body); print('========================================'); dynamic data; try { data = jsonDecode(response.body); } catch (_) { data = response.body; } if (response.statusCode >= 200 && response.statusCode < 300) { return { 'success': true, 'nid': data is Map ? (data['nid']?.toString() ?? '') : '', 'status': data is Map ? (data['status']?.toString() ?? '') : '', }; } if (response.statusCode == 403) { return { 'success': false, 'statusCode': 403, 'error': 'Deze horecagelegenheid is niet van jou', }; } return { 'success': false, 'statusCode': response.statusCode, 'error': data is Map ? ((data['message'] ?? data['error'] ?? data).toString()) : data.toString(), }; } on TimeoutException { return {'success': false, 'error': 'Timeout'}; } catch (e, stack) { print(e); print(stack); return {'success': false, 'error': e.toString()}; } }