evenement_create.dart.txt 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // Automatic FlutterFlow imports
  2. import '/backend/schema/structs/index.dart';
  3. import '/flutter_flow/flutter_flow_theme.dart';
  4. import '/flutter_flow/flutter_flow_util.dart';
  5. import 'index.dart'; // Imports other custom actions
  6. import '/flutter_flow/custom_functions.dart'; // Imports custom functions
  7. import 'package:flutter/material.dart';
  8. // Begin custom action code
  9. // DO NOT REMOVE OR MODIFY THE CODE ABOVE!
  10. // ⬇⬇⬇ PLAK VANAF HIER — de drie importregels horen erbij! ⬇⬇⬇
  11. // Zonder 'package:http' faalt de build met: Undefined name 'http'.
  12. import 'dart:async';
  13. import 'dart:convert';
  14. import 'package:http/http.dart' as http;
  15. Future<dynamic> evenementCreate(
  16. String sessionName,
  17. String sessionId,
  18. String token,
  19. String horecagelegenheidNid,
  20. String titel,
  21. String datumStart,
  22. String? datumEind,
  23. String? omschrijving,
  24. String? entreeTid,
  25. String? entreePrijs,
  26. String? toelichtingEntree,
  27. String? ticketsUrl,
  28. String? websiteUrl,
  29. List<String>? categorieTids,
  30. String? logoFid,
  31. List<String>? fotosFids,
  32. ) async {
  33. final horecaNidInt = int.tryParse(horecagelegenheidNid.trim());
  34. if (horecaNidInt == null) {
  35. return {'success': false, 'error': 'Kies eerst een horecagelegenheid'};
  36. }
  37. if (titel.trim().isEmpty) {
  38. return {'success': false, 'error': 'Titel is verplicht'};
  39. }
  40. if (datumStart.trim().isEmpty) {
  41. return {'success': false, 'error': 'Datum is verplicht'};
  42. }
  43. // Einddatum mag niet vóór de startdatum liggen (P2-29 / A3).
  44. // Beide komen binnen als 'yyyy-MM-dd HH:mm:ss'; DateTime.tryParse
  45. // accepteert die vorm. Een lege einddatum betekent: geen einddatum.
  46. if ((datumEind ?? '').trim().isNotEmpty) {
  47. final start = DateTime.tryParse(datumStart.trim());
  48. final eind = DateTime.tryParse(datumEind!.trim());
  49. if (start != null && eind != null && eind.isBefore(start)) {
  50. return {
  51. 'success': false,
  52. 'error': 'De einddatum ligt vóór de startdatum',
  53. };
  54. }
  55. }
  56. final body = <String, dynamic>{
  57. 'horecagelegenheid_nid': horecaNidInt,
  58. 'titel': titel.trim(),
  59. 'datum_start': datumStart.trim(),
  60. };
  61. if ((datumEind ?? '').trim().isNotEmpty) {
  62. body['datum_eind'] = datumEind!.trim();
  63. }
  64. if ((omschrijving ?? '').trim().isNotEmpty) {
  65. body['omschrijving'] = omschrijving!.trim();
  66. }
  67. if ((entreeTid ?? '').trim().isNotEmpty) {
  68. final tid = int.tryParse(entreeTid!.trim());
  69. if (tid != null) body['entree_tid'] = tid;
  70. }
  71. if ((entreePrijs ?? '').trim().isNotEmpty) {
  72. body['entree_prijs'] = entreePrijs!.trim();
  73. }
  74. if ((toelichtingEntree ?? '').trim().isNotEmpty) {
  75. body['toelichting_entree'] = toelichtingEntree!.trim();
  76. }
  77. if ((ticketsUrl ?? '').trim().isNotEmpty) {
  78. body['tickets_url'] = ticketsUrl!.trim();
  79. }
  80. if ((websiteUrl ?? '').trim().isNotEmpty) {
  81. body['website_url'] = websiteUrl!.trim();
  82. }
  83. if (categorieTids != null && categorieTids.isNotEmpty) {
  84. final tids = categorieTids
  85. .map((e) => int.tryParse(e.trim()))
  86. .whereType<int>()
  87. .toList();
  88. if (tids.isNotEmpty) body['categorie_tids'] = tids;
  89. }
  90. if ((logoFid ?? '').trim().isNotEmpty) {
  91. final fid = int.tryParse(logoFid!.trim());
  92. if (fid != null) body['logo_fid'] = fid;
  93. }
  94. if (fotosFids != null && fotosFids.isNotEmpty) {
  95. final fids =
  96. fotosFids.map((e) => int.tryParse(e.trim())).whereType<int>().toList();
  97. if (fids.isNotEmpty) body['fotos_fids'] = fids;
  98. }
  99. final headers = <String, String>{
  100. 'Accept': 'application/json',
  101. 'Content-Type': 'application/json',
  102. };
  103. if (sessionName.trim().isNotEmpty && sessionId.trim().isNotEmpty) {
  104. headers['Cookie'] = '$sessionName=$sessionId';
  105. }
  106. if (token.trim().isNotEmpty) {
  107. headers['X-CSRF-Token'] = token;
  108. }
  109. final base = FFAppState().apiBaseUrl.trim().isEmpty
  110. ? 'https://uitgaanskrant.com'
  111. : FFAppState().apiBaseUrl.trim();
  112. final url = '$base/en/flutterdrup/evenementen/create.json';
  113. print('========================================');
  114. print('EVENEMENT CREATE');
  115. print('URL : $url');
  116. print('BODY : ${jsonEncode(body)}');
  117. print('========================================');
  118. try {
  119. final response = await http
  120. .post(Uri.parse(url), headers: headers, body: jsonEncode(body))
  121. .timeout(const Duration(seconds: 30));
  122. print('========================================');
  123. print('STATUS : ${response.statusCode}');
  124. print('BODY');
  125. print(response.body);
  126. print('========================================');
  127. dynamic data;
  128. try {
  129. data = jsonDecode(response.body);
  130. } catch (_) {
  131. data = response.body;
  132. }
  133. if (response.statusCode >= 200 && response.statusCode < 300) {
  134. return {
  135. 'success': true,
  136. 'nid': data is Map ? (data['nid']?.toString() ?? '') : '',
  137. 'status': data is Map ? (data['status']?.toString() ?? '') : '',
  138. };
  139. }
  140. if (response.statusCode == 403) {
  141. return {
  142. 'success': false,
  143. 'statusCode': 403,
  144. 'error': 'Deze horecagelegenheid is niet van jou',
  145. };
  146. }
  147. return {
  148. 'success': false,
  149. 'statusCode': response.statusCode,
  150. 'error': data is Map
  151. ? ((data['message'] ?? data['error'] ?? data).toString())
  152. : data.toString(),
  153. };
  154. } on TimeoutException {
  155. return {'success': false, 'error': 'Timeout'};
  156. } catch (e, stack) {
  157. print(e);
  158. print(stack);
  159. return {'success': false, 'error': e.toString()};
  160. }
  161. }