- Implemented AppFooter widget for mobile and desktop views. - Created ChildrenSidebar widget to display children's information. - Developed AppLayout to manage app structure with optional footer. - Added ChildrenSidebar for selecting children and displaying their status. - Introduced DashboardAppBar for navigation and user actions. - Built WMainContentArea for displaying assistant details and calendar. - Created MainContentArea to manage contracts and events display. - Implemented MessagingSidebar for messaging functionality. - Updated widget tests to reflect new structure and imports.
202 lines
6.1 KiB
Dart
202 lines
6.1 KiB
Dart
import 'package:p_tits_pas/models/m_dashbord/assistant_model.dart';
|
|
import 'package:p_tits_pas/models/m_dashbord/child_model.dart';
|
|
import 'package:p_tits_pas/models/m_dashbord/contract_model.dart';
|
|
import 'package:p_tits_pas/models/m_dashbord/conversation_model.dart';
|
|
import 'package:p_tits_pas/models/m_dashbord/event_model.dart';
|
|
import 'package:p_tits_pas/models/m_dashbord/notification_model.dart';
|
|
|
|
class DashboardService {
|
|
// URL de base de l'API
|
|
static const String _baseUrl = 'YOUR_API_BASE_URL';
|
|
|
|
// Récupérer la liste des enfants
|
|
Future<List<ChildModel>> getChildren() async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
// Exemple de mock data pour le développement
|
|
return [
|
|
ChildModel(
|
|
id: '1',
|
|
firstName: 'Emma',
|
|
birthDate: DateTime(2020, 5, 15),
|
|
photoUrl: 'assets/images/child1.jpg',
|
|
status: ChildStatus.onHoliday,
|
|
),
|
|
ChildModel(
|
|
id: '2',
|
|
firstName: 'Lucas',
|
|
birthDate: DateTime(2021, 3, 10),
|
|
photoUrl: 'assets/images/child2.jpg',
|
|
status: ChildStatus.searching,
|
|
),
|
|
];
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération des enfants: $e');
|
|
}
|
|
}
|
|
|
|
// Récupérer l'assistante maternelle pour un enfant
|
|
Future<AssistantModel> getAssistantForChild(String childId) async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
return AssistantModel(
|
|
id: 'am1',
|
|
firstName: 'Marie',
|
|
lastName: 'Dupont',
|
|
hourlyRate: 10.0,
|
|
dailyFees: 80.0,
|
|
status: AssistantStatus.available,
|
|
photoUrl: 'assets/images/assistant1.jpg',
|
|
address: '123 rue des Lilas',
|
|
phone: '0123456789',
|
|
);
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération de l\'assistante: $e');
|
|
}
|
|
}
|
|
|
|
// Récupérer les événements pour un enfant
|
|
Future<List<EventModel>> getEventsForChild(String childId) async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
return [
|
|
EventModel(
|
|
id: 'evt1',
|
|
title: 'Rendez-vous médical',
|
|
startDate: DateTime.now().add(const Duration(days: 2)),
|
|
type: EventType.parentVacation,
|
|
status: EventStatus.pending,
|
|
description: 'Visite de routine',
|
|
childId: childId,
|
|
),
|
|
];
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération des événements: $e');
|
|
}
|
|
}
|
|
|
|
// Récupérer tous les événements à venir
|
|
Future<List<EventModel>> getUpcomingEvents() async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
return [
|
|
EventModel(
|
|
id: 'evt1',
|
|
title: 'Activité peinture',
|
|
startDate: DateTime.now().add(const Duration(days: 1)),
|
|
endDate: DateTime.now().add(const Duration(days: 1, hours: 2)),
|
|
type: EventType.parentVacation,
|
|
status: EventStatus.pending,
|
|
description: 'Atelier créatif',
|
|
childId: '1',
|
|
),
|
|
];
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération des événements: $e');
|
|
}
|
|
}
|
|
|
|
// Récupérer les contrats
|
|
Future<List<ContractModel>> getContracts() async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
return [
|
|
ContractModel(
|
|
id: 'contract1',
|
|
childId: '1',
|
|
assistantId: 'am1',
|
|
startDate: DateTime(2023, 9, 1),
|
|
endDate: DateTime(2024, 8, 31),
|
|
status: ContractStatus.pending,
|
|
hourlyRate: 10.0,
|
|
createdAt: DateTime.now(),
|
|
),
|
|
];
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération des contrats: $e');
|
|
}
|
|
}
|
|
|
|
// Récupérer les contrats pour un enfant spécifique
|
|
Future<List<ContractModel>> getContractsForChild(String childId) async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
return [
|
|
ContractModel(
|
|
id: 'contract1',
|
|
childId: childId,
|
|
assistantId: 'am1',
|
|
startDate: DateTime(2023, 9, 1),
|
|
endDate: DateTime(2024, 8, 31),
|
|
status: ContractStatus.active,
|
|
hourlyRate: 10.0,
|
|
createdAt: DateTime.now(),
|
|
),
|
|
];
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération des contrats: $e');
|
|
}
|
|
}
|
|
|
|
// Récupérer les conversations
|
|
Future<List<ConversationModel>> getConversations() async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
return [
|
|
ConversationModel(
|
|
id: 'conv1',
|
|
title: 'Conversation avec Marie Dupont',
|
|
participantIds: ['am1'],
|
|
messages: [
|
|
MessageModel(
|
|
id: 'msg1',
|
|
content: 'Bonjour, comment ça va ?',
|
|
senderId: 'am1',
|
|
sentAt: DateTime.now().subtract(const Duration(hours: 2)),
|
|
status: MessageStatus.read,
|
|
),
|
|
MessageModel(
|
|
id: 'msg2',
|
|
content: 'Tout va bien, merci !',
|
|
senderId: 'parent1',
|
|
sentAt: DateTime.now().subtract(const Duration(hours: 1, minutes: 30)),
|
|
status: MessageStatus.read,
|
|
),
|
|
],
|
|
lastMessageAt: DateTime.now().subtract(const Duration(hours: 2)),
|
|
unreadCount: 2,
|
|
),
|
|
];
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération des conversations: $e');
|
|
}
|
|
}
|
|
|
|
// Récupérer les notifications
|
|
Future<List<NotificationModel>> getNotifications() async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
return [
|
|
NotificationModel(
|
|
id: 'notif1',
|
|
title: 'Nouveau message',
|
|
createdAt: DateTime.now(),
|
|
isRead: false,
|
|
type: NotificationType.contractPending,
|
|
content: 'Votre contrat est en attente',
|
|
),
|
|
];
|
|
} catch (e) {
|
|
throw Exception('Erreur lors de la récupération des notifications: $e');
|
|
}
|
|
}
|
|
|
|
// Marquer une notification comme lue
|
|
Future<void> markNotificationAsRead(String notificationId) async {
|
|
try {
|
|
// TODO: Implémenter l'appel API
|
|
} catch (e) {
|
|
throw Exception('Erreur lors du marquage de la notification: $e');
|
|
}
|
|
}
|
|
} |