import 'package:flutter/material.dart'; import 'google_sheets_api.dart'; import 'pdf_generator.dart'; class ExportPage extends StatefulWidget { const ExportPage({super.key}); @override State createState() => _ExportPageState(); } class _ExportPageState extends State { DateTime? selectedDate; TimeOfDay? startTime; TimeOfDay? endTime; final sheets = GoogleSheetsApi(); // ================= DATE ================= Future pickDate() async { final date = await showDatePicker( context: context, firstDate: DateTime(2024), lastDate: DateTime.now(), initialDate: DateTime.now(), ); if (date != null) { setState(() => selectedDate = date); } } // ================= HEURES ================= Future pickStartTime() async { final time = await showTimePicker( context: context, initialTime: const TimeOfDay(hour: 8, minute: 0), ); if (time != null) setState(() => startTime = time); } Future pickEndTime() async { final time = await showTimePicker( context: context, initialTime: const TimeOfDay(hour: 18, minute: 0), ); if (time != null) setState(() => endTime = time); } // ================= EXPORT ================= Future export() async { if (selectedDate == null) return; final day = selectedDate!.toIso8601String().split('T')[0]; final rawData = await sheets.getAllPresences(); final List> filtered = []; for (final row in rawData) { final datesStr = row['date_ajout']; if (datesStr == null || datesStr.isEmpty) continue; final dates = datesStr.split(';'); for (final d in dates) { final dateTime = DateTime.tryParse(d.trim()); if (dateTime == null) continue; // filtre date if (!dateTime.toIso8601String().startsWith(day)) continue; final t = TimeOfDay.fromDateTime(dateTime); final afterStart = startTime == null || (t.hour > startTime!.hour || (t.hour == startTime!.hour && t.minute >= startTime!.minute)); final beforeEnd = endTime == null || (t.hour < endTime!.hour || (t.hour == endTime!.hour && t.minute <= endTime!.minute)); if (afterStart && beforeEnd) { filtered.add({ ...row, 'date_ajout': d.trim(), }); } } } if (filtered.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("Aucune donnée pour ce filtre")), ); return; } await generatePdf( filtered, "$day ${startTime?.format(context) ?? ''}-${endTime?.format(context) ?? ''}", ); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("PDF généré avec succès ✅")), ); } // ================= UI ================= @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("Exporter présence")), body: Padding( padding: const EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ElevatedButton( onPressed: pickDate, child: const Text("Choisir une date"), ), if (selectedDate != null) Text("Date : ${selectedDate!.toString().substring(0, 10)}"), const SizedBox(height: 16), ElevatedButton( onPressed: pickStartTime, child: const Text("Heure début"), ), if (startTime != null) Text("De : ${startTime!.format(context)}"), const SizedBox(height: 8), ElevatedButton( onPressed: pickEndTime, child: const Text("Heure fin"), ), if (endTime != null) Text("À : ${endTime!.format(context)}"), const SizedBox(height: 24), ElevatedButton( onPressed: selectedDate == null ? null : export, child: const Text("Générer le PDF"), ), ], ), ), ); } }