Actualizacion del programa
This commit is contained in:
186
celaya_limpia/lib/models/models.dart
Normal file
186
celaya_limpia/lib/models/models.dart
Normal file
@@ -0,0 +1,186 @@
|
||||
// ── USER ──────────────────────────────────────────────────────────────────
|
||||
class UserModel {
|
||||
final int? id;
|
||||
final String nombre;
|
||||
final String email;
|
||||
final String password;
|
||||
final String rol;
|
||||
|
||||
UserModel({this.id, required this.nombre, required this.email,
|
||||
required this.password, required this.rol});
|
||||
|
||||
Map<String, dynamic> toMap() =>
|
||||
{'id':id,'nombre':nombre,'email':email,'password':password,'rol':rol};
|
||||
|
||||
factory UserModel.fromMap(Map<String, dynamic> m) => UserModel(
|
||||
id:m['id'], nombre:m['nombre'], email:m['email'],
|
||||
password:m['password'], rol:m['rol']);
|
||||
}
|
||||
|
||||
// ── DOMICILIO (User → Domicilio → Zona → Ruta) ────────────────────────────
|
||||
class DomicilioModel {
|
||||
final int? id;
|
||||
final int userId;
|
||||
final String alias; // "Casa", "Trabajo", etc.
|
||||
final String calle;
|
||||
final String colonia; // Zona de cobertura
|
||||
final String routeId; // Ruta asignada
|
||||
final String horarioEstimado;
|
||||
final bool isPrimary;
|
||||
|
||||
DomicilioModel({this.id, required this.userId, this.alias = 'Casa',
|
||||
required this.calle, required this.colonia, required this.routeId,
|
||||
required this.horarioEstimado, this.isPrimary = true});
|
||||
|
||||
Map<String, dynamic> toMap() => {'id':id,'user_id':userId,'alias':alias,
|
||||
'calle':calle,'colonia':colonia,'route_id':routeId,
|
||||
'horario_estimado':horarioEstimado,'is_primary':isPrimary?1:0};
|
||||
|
||||
factory DomicilioModel.fromMap(Map<String, dynamic> m) => DomicilioModel(
|
||||
id:m['id'], userId:m['user_id'], alias:m['alias']??'Casa',
|
||||
calle:m['calle'], colonia:m['colonia'], routeId:m['route_id'],
|
||||
horarioEstimado:m['horario_estimado'], isPrimary:m['is_primary']==1);
|
||||
}
|
||||
|
||||
// ── RUTA DINÁMICA (creada por admin) ──────────────────────────────────────
|
||||
class RouteDefinitionModel {
|
||||
final int? id;
|
||||
final String routeId;
|
||||
final String nombre;
|
||||
final List<String> dias; // ['LUNES','MIERCOLES','VIERNES']
|
||||
final String horaInicio; // '06:00'
|
||||
final String horaFin; // '08:00'
|
||||
final String turno; // MATUTINO|VESPERTINO|NOCTURNO
|
||||
final List<String> colonias; // colonias que cubre
|
||||
final bool activa;
|
||||
|
||||
RouteDefinitionModel({this.id, required this.routeId, required this.nombre,
|
||||
required this.dias, required this.horaInicio, required this.horaFin,
|
||||
required this.turno, required this.colonias, this.activa = true});
|
||||
|
||||
Map<String, dynamic> toMap() => {
|
||||
'id':id,'route_id':routeId,'nombre':nombre,
|
||||
'dias':dias.join(','),'hora_inicio':horaInicio,'hora_fin':horaFin,
|
||||
'turno':turno,'colonias':colonias.join('|'),'activa':activa?1:0,
|
||||
};
|
||||
|
||||
factory RouteDefinitionModel.fromMap(Map<String, dynamic> m) =>
|
||||
RouteDefinitionModel(
|
||||
id:m['id'], routeId:m['route_id'], nombre:m['nombre'],
|
||||
dias:(m['dias']??'').toString().split(',').where((s)=>s.isNotEmpty).toList(),
|
||||
horaInicio:m['hora_inicio']??'06:00', horaFin:m['hora_fin']??'08:00',
|
||||
turno:m['turno']??'MATUTINO',
|
||||
colonias:(m['colonias']??'').toString().split('|').where((s)=>s.isNotEmpty).toList(),
|
||||
activa:m['activa']==1,
|
||||
);
|
||||
}
|
||||
|
||||
// ── RESEÑA DEL SERVICIO ───────────────────────────────────────────────────
|
||||
class ReviewModel {
|
||||
final int? id;
|
||||
final int userId;
|
||||
final String colonia;
|
||||
final String routeId;
|
||||
final int estrellas; // 1-5
|
||||
final String comentario;
|
||||
final String fecha;
|
||||
final String nombreUsuario;
|
||||
|
||||
ReviewModel({this.id, required this.userId, required this.colonia,
|
||||
required this.routeId, required this.estrellas, required this.comentario,
|
||||
required this.fecha, this.nombreUsuario = ''});
|
||||
|
||||
Map<String, dynamic> toMap() => {'id':id,'user_id':userId,'colonia':colonia,
|
||||
'route_id':routeId,'estrellas':estrellas,'comentario':comentario,
|
||||
'fecha':fecha,'nombre_usuario':nombreUsuario};
|
||||
|
||||
factory ReviewModel.fromMap(Map<String, dynamic> m) => ReviewModel(
|
||||
id:m['id'], userId:m['user_id'], colonia:m['colonia'],
|
||||
routeId:m['route_id'], estrellas:m['estrellas'],
|
||||
comentario:m['comentario']??'', fecha:m['fecha'],
|
||||
nombreUsuario:m['nombre_usuario']??'Ciudadano');
|
||||
}
|
||||
|
||||
// ── ASSIGNMENT ────────────────────────────────────────────────────────────
|
||||
class AssignmentModel {
|
||||
final int? id;
|
||||
final int conductorId;
|
||||
final String routeId;
|
||||
final String diaSemana;
|
||||
final String turno;
|
||||
|
||||
AssignmentModel({this.id, required this.conductorId, required this.routeId,
|
||||
required this.diaSemana, required this.turno});
|
||||
|
||||
Map<String, dynamic> toMap() => {'id':id,'conductor_id':conductorId,
|
||||
'route_id':routeId,'dia_semana':diaSemana,'turno':turno};
|
||||
|
||||
factory AssignmentModel.fromMap(Map<String, dynamic> m) => AssignmentModel(
|
||||
id:m['id'], conductorId:m['conductor_id'], routeId:m['route_id'],
|
||||
diaSemana:m['dia_semana'], turno:m['turno']);
|
||||
}
|
||||
|
||||
// ── ROUTE STATUS ──────────────────────────────────────────────────────────
|
||||
class RouteStatusModel {
|
||||
final String routeId;
|
||||
final String status;
|
||||
final String? mensaje;
|
||||
final String updatedAt;
|
||||
|
||||
RouteStatusModel({required this.routeId, required this.status,
|
||||
this.mensaje, required this.updatedAt});
|
||||
|
||||
Map<String, dynamic> toMap() => {'route_id':routeId,'status':status,
|
||||
'mensaje':mensaje,'updated_at':updatedAt};
|
||||
|
||||
factory RouteStatusModel.fromMap(Map<String, dynamic> m) => RouteStatusModel(
|
||||
routeId:m['route_id'], status:m['status'],
|
||||
mensaje:m['mensaje'], updatedAt:m['updated_at']);
|
||||
}
|
||||
|
||||
// ── ALERTA ────────────────────────────────────────────────────────────────
|
||||
class AlertaModel {
|
||||
final int? id;
|
||||
final String tipo;
|
||||
final String routeId;
|
||||
final String mensaje;
|
||||
final String fecha;
|
||||
final bool resuelta;
|
||||
|
||||
AlertaModel({this.id, required this.tipo, required this.routeId,
|
||||
required this.mensaje, required this.fecha, this.resuelta=false});
|
||||
|
||||
Map<String, dynamic> toMap() => {'id':id,'tipo':tipo,'route_id':routeId,
|
||||
'mensaje':mensaje,'fecha':fecha,'resuelta':resuelta?1:0};
|
||||
|
||||
factory AlertaModel.fromMap(Map<String, dynamic> m) => AlertaModel(
|
||||
id:m['id'], tipo:m['tipo'], routeId:m['route_id'],
|
||||
mensaje:m['mensaje'], fecha:m['fecha'], resuelta:m['resuelta']==1);
|
||||
}
|
||||
|
||||
// ── REPORTE ───────────────────────────────────────────────────────────────
|
||||
class ReporteModel {
|
||||
final int? id;
|
||||
final int userId;
|
||||
final String tipo;
|
||||
final String descripcion;
|
||||
final String colonia;
|
||||
final String routeId;
|
||||
final String fecha;
|
||||
final String estado;
|
||||
final int calificacion;
|
||||
|
||||
ReporteModel({this.id, required this.userId, required this.tipo,
|
||||
required this.descripcion, required this.colonia, required this.routeId,
|
||||
required this.fecha, this.estado='PENDIENTE', this.calificacion=5});
|
||||
|
||||
Map<String, dynamic> toMap() => {'id':id,'user_id':userId,'tipo':tipo,
|
||||
'descripcion':descripcion,'colonia':colonia,'route_id':routeId,
|
||||
'fecha':fecha,'estado':estado,'calificacion':calificacion};
|
||||
|
||||
factory ReporteModel.fromMap(Map<String, dynamic> m) => ReporteModel(
|
||||
id:m['id'], userId:m['user_id'], tipo:m['tipo'],
|
||||
descripcion:m['descripcion'], colonia:m['colonia'],
|
||||
routeId:m['route_id']??'', fecha:m['fecha'],
|
||||
estado:m['estado'], calificacion:m['calificacion']??5);
|
||||
}
|
||||
Reference in New Issue
Block a user