185 lines
4.9 KiB
Dart

import 'dart:convert';
import 'package:manager_api_new/api.dart';
class Agenda {
List<EventAgenda> events;
Agenda({required this.events});
factory Agenda.fromJson(String jsonString) {
final List<dynamic> jsonList = json.decode(jsonString);
List<EventAgenda> events = [];
for (var eventData in jsonList) {
try {
events.add(EventAgenda.fromJson(eventData));
} catch(e) {
print("Erreur lors du parsing du json : ${e.toString()}");
}
}
return Agenda(events: events);
}
}
class EventAgenda {
String? name;
String? description;
String? type;
DateTime? dateAdded;
DateTime? dateFrom;
DateTime? dateTo;
String? dateHour;
EventAddress? address;
String? website;
String? phone;
String? idVideoYoutube;
String? videoLink;
String? videoResourceUrl;
String? email;
String? image;
EventAgenda({
required this.name,
required this.description,
required this.type,
required this.dateAdded,
required this.dateFrom,
required this.dateTo,
required this.dateHour,
required this.address,
required this.website,
required this.phone,
required this.idVideoYoutube,
this.videoLink,
this.videoResourceUrl,
required this.email,
required this.image,
});
factory EventAgenda.fromDto(EventAgendaDTO dto, String language) {
String? pickTranslation(List<TranslationDTO>? list) {
if (list == null || list.isEmpty) return null;
return (list.firstWhere(
(t) => t.language == language,
orElse: () => list.first,
)).value;
}
EventAddress? address;
final a = dto.address;
if (a != null) {
final coords = a.geometry?.coordinates as List?;
address = EventAddress(
address: a.address,
lat: coords != null && coords.length >= 2 ? coords[1] : null,
lng: coords != null && coords.length >= 2 ? coords[0] : null,
zoom: a.zoom,
placeId: null,
name: null,
streetNumber: a.streetNumber,
streetName: a.streetName,
streetNameShort: null,
city: a.city,
state: a.state,
stateShort: null,
postCode: a.postCode,
country: a.country,
countryShort: null,
);
}
return EventAgenda(
name: pickTranslation(dto.label),
description: pickTranslation(dto.description),
type: dto.type,
dateAdded: dto.dateAdded,
dateFrom: dto.dateFrom,
dateTo: dto.dateTo,
dateHour: null,
address: address,
website: dto.website,
phone: dto.phone,
idVideoYoutube: dto.idVideoYoutube,
videoLink: dto.videoLink,
videoResourceUrl: dto.videoResource?.url,
email: dto.email,
image: dto.resource?.url,
);
}
factory EventAgenda.fromJson(Map<String, dynamic> json) {
return EventAgenda(
name: json['name'],
description: json['description'],
type: json['type'] is !bool ? json['type'] : null,
dateAdded: json['date_added'] != null && json['date_added'].isNotEmpty ? DateTime.parse(json['date_added']) : null,
dateFrom: json['date_from'] != null && json['date_from'].isNotEmpty ? DateTime.parse(json['date_from']) : null,
dateTo: json['date_to'] != null && json['date_to'].isNotEmpty ? DateTime.parse(json['date_to']) : null,
dateHour: json['date_hour'],
address: json['address'] is !bool ? EventAddress.fromJson(json['address']) : null,
website: json['website'],
phone: json['phone'],
idVideoYoutube: json['id_video_youtube'],
email: json['email'],
image: json['image'],
);
}
}
class EventAddress {
String? address;
dynamic lat;
dynamic lng;
int? zoom;
String? placeId;
String? name;
String? streetNumber;
String? streetName;
String? streetNameShort;
String? city;
String? state;
String? stateShort;
String? postCode;
String? country;
String? countryShort;
EventAddress({
required this.address,
required this.lat,
required this.lng,
required this.zoom,
required this.placeId,
required this.name,
required this.streetNumber,
required this.streetName,
required this.streetNameShort,
required this.city,
required this.state,
required this.stateShort,
required this.postCode,
required this.country,
required this.countryShort,
});
factory EventAddress.fromJson(Map<String, dynamic> json) {
return EventAddress(
address: json['address'],
lat: json['lat'],
lng: json['lng'],
zoom: json['zoom'],
placeId: json['place_id'],
name: json['name'],
streetNumber: json['street_number'],
streetName: json['street_name'],
streetNameShort: json['street_name_short'],
city: json['city'],
state: json['state'],
stateShort: json['state_short'],
postCode: json['post_code'],
country: json['country'],
countryShort: json['country_short'],
);
}
}