Agrego frontend app
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
enum EstadoHuerfana { pendiente, reubicado, resuelta }
|
||||
|
||||
class ReservaHuerfana {
|
||||
final String huerfanaId;
|
||||
final String clienteId;
|
||||
final String nombre;
|
||||
final String? apellido;
|
||||
final String? telefono;
|
||||
final String actividadNombre;
|
||||
final String fechaOriginal;
|
||||
final String horaInicioOriginal;
|
||||
final EstadoHuerfana estado;
|
||||
final String creadaEn;
|
||||
|
||||
const ReservaHuerfana({
|
||||
required this.huerfanaId,
|
||||
required this.clienteId,
|
||||
required this.nombre,
|
||||
this.apellido,
|
||||
this.telefono,
|
||||
required this.actividadNombre,
|
||||
required this.fechaOriginal,
|
||||
required this.horaInicioOriginal,
|
||||
required this.estado,
|
||||
required this.creadaEn,
|
||||
});
|
||||
|
||||
String get displayName =>
|
||||
apellido != null ? '$nombre $apellido' : nombre;
|
||||
|
||||
String get initials {
|
||||
final parts = displayName.trim().split(' ');
|
||||
if (parts.length == 1) return parts[0][0].toUpperCase();
|
||||
return '${parts[0][0]}${parts.last[0]}'.toUpperCase();
|
||||
}
|
||||
|
||||
static EstadoHuerfana _parseEstado(String s) {
|
||||
return switch (s) {
|
||||
'reubicado' => EstadoHuerfana.reubicado,
|
||||
'resuelta' => EstadoHuerfana.resuelta,
|
||||
_ => EstadoHuerfana.pendiente,
|
||||
};
|
||||
}
|
||||
|
||||
factory ReservaHuerfana.fromMap(Map<String, dynamic> m) {
|
||||
return ReservaHuerfana(
|
||||
huerfanaId: m['huerfana_id'] as String,
|
||||
clienteId: m['cliente_id'] as String,
|
||||
nombre: m['nombre'] as String,
|
||||
apellido: m['apellido'] as String?,
|
||||
telefono: m['telefono'] as String?,
|
||||
actividadNombre: m['actividad_nombre'] as String,
|
||||
fechaOriginal: m['fecha_original'] as String,
|
||||
horaInicioOriginal: m['hora_inicio_original'] as String,
|
||||
estado: _parseEstado(m['estado_resolucion'] as String? ?? 'pendiente'),
|
||||
creadaEn: m['creada_en'] as String,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:gimnasio_soma/features/huerfanas/domain/entities/reserva_huerfana.dart';
|
||||
|
||||
abstract class HuerfanasRepository {
|
||||
/// [estado] puede ser 'pendiente', 'reubicado', 'resuelta', o null para todos.
|
||||
Future<List<ReservaHuerfana>> obtenerHuerfanas({String? estado});
|
||||
|
||||
/// [nuevoEstado] debe ser 'pendiente', 'reubicado' o 'resuelta'.
|
||||
Future<void> resolverHuerfana(String huerfanaId, String nuevoEstado);
|
||||
|
||||
/// Reserva [turnoId] para el cliente de la huérfana y la marca como 'reubicado'
|
||||
/// en una sola transacción atómica.
|
||||
Future<void> moverHuerfana(String huerfanaId, String turnoId);
|
||||
}
|
||||
Reference in New Issue
Block a user