prosapp_web_app has chat, dashboard, calendar, support, 13 providers and Fluro URL routing. Keep Dockerfile + nginx.conf from previous prosappweb. Upgrade google_fonts 6.2.1 → 8.1.0 (Dart 3.12 compat fix). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
75 lines
2.2 KiB
Dart
75 lines
2.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:prosapp_web_app/models/service.dart';
|
|
import 'package:prosapp_web_app/models/servicio_profesional.dart';
|
|
import 'package:prosapp_web_app/models/usuario.dart';
|
|
|
|
class CalendarServicesProvider extends ChangeNotifier {
|
|
List<ServicioProfesional> services = [];
|
|
ServicioProfesional? service;
|
|
bool isLoading = true;
|
|
|
|
final _servicesCollection = FirebaseFirestore.instance.collection('services');
|
|
final _usersCollection = FirebaseFirestore.instance.collection('users');
|
|
|
|
void logout() {
|
|
services = [];
|
|
service = null;
|
|
isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
getServicesForProfessional(String userId) async {
|
|
try {
|
|
isLoading = true;
|
|
|
|
final queryServices = await _servicesCollection
|
|
.where('professional_id', isEqualTo: userId)
|
|
.where('status', whereIn: [1, 3]).get();
|
|
|
|
final servicios = queryServices.docs.map(Service.fromDocument).toList();
|
|
|
|
final userIds = servicios.map((service) => service.userId).toList();
|
|
|
|
final queryUsers = await _usersCollection
|
|
.where(FieldPath.documentId, whereIn: userIds)
|
|
.get();
|
|
|
|
final users =
|
|
queryUsers.docs.map((e) => Usuario.fromDocument(e.data())).toList();
|
|
|
|
final usersMap = {for (var doc in users) doc.id: doc};
|
|
|
|
final servicesMap = (servicios.map((service) {
|
|
final user = usersMap[service.userId];
|
|
|
|
return ServicioProfesional(
|
|
user: user!,
|
|
service: service,
|
|
);
|
|
}).toList());
|
|
|
|
services = servicesMap
|
|
..sort((a, b) {
|
|
final dateA = DateTime.parse(a.service.day);
|
|
final dateB = DateTime.parse(b.service.day);
|
|
final range1A =
|
|
a.service.range1Hour1.hour * 60 + a.service.range1Hour1.minute;
|
|
final range1B =
|
|
b.service.range1Hour1.hour * 60 + b.service.range1Hour1.minute;
|
|
|
|
if (dateA.compareTo(dateB) != 0) {
|
|
return dateA.compareTo(dateB);
|
|
} else {
|
|
return range1A.compareTo(range1B);
|
|
}
|
|
});
|
|
} catch (e) {
|
|
print('Error obteniendo servicios: $e');
|
|
} finally {
|
|
isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
}
|