depor_os/lib/services/mock/mock_member_service.dart

223 lines
6.6 KiB
Dart
Raw Normal View History

2026-03-18 11:47:06 +00:00
import '../../models/member.dart';
import '../member_repository.dart';
class MockMemberService implements MemberRepository {
static final _members = [_member7, _member42, _member85];
int _indexOf(int id) {
final i = _members.indexWhere((m) => m.id == id);
return i == -1 ? 0 : i;
}
@override Future<Member> first() async => _members.first;
@override Future<Member> last() async => _members.last;
@override Future<Member> show(int id) async =>
_members.firstWhere((m) => m.id == id, orElse: () => _members.first);
@override
Future<Member> prev(int id) async {
final i = _indexOf(id);
return _members[i == 0 ? _members.length - 1 : i - 1];
}
@override
Future<Member> next(int id) async {
final i = _indexOf(id);
return _members[(i + 1) % _members.length];
}
@override
Future<Map<String, String>> search(String term) async {
final t = term.toLowerCase();
final results = <String, String>{};
for (final m in _members) {
for (final p in m.people) {
if (p.fullName.toLowerCase().contains(t) || m.formattedId.contains(t)) {
final key = '${m.formattedId}${p.family.toString().padLeft(2, '0')}';
results[key] =
'(${m.formattedId}-${p.family.toString().padLeft(2, '0')}) ${p.lastName}, ${p.firstName}';
}
}
}
return results;
}
}
// ── Datos mock ────────────────────────────────────────────────────────────────
final _member7 = Member(
id: 7,
regDate: '1993-01-01',
address: 'CALLE SALVADOR ESCUDERO, Nº3-2ºA',
city: 'CARTAGENA',
zip: '30205',
email: 'RICARDO.LEGAZ@GMAIL.COM',
phone: '648101900',
bank: '0182',
bankOffice: '6855',
bankSecCode: '87',
bankAccount: '0201674767',
bankName: 'CAIXABANK',
mandate: 'MNDT-00007',
type: 'FAMILIAR',
fee: 33.80,
comment: '',
comment2: '',
paid: false,
remSpecial: false,
retenido: false,
unregDate: null,
unregReason: '',
2026-03-18 22:20:31 +00:00
monthlyFees: {
2025: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
2026: [1, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2027: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2028: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
},
2026-03-18 11:47:06 +00:00
people: [
Person(
memberId: 7, family: 1,
firstName: 'ANTONIO', lastName: 'PUENTE CARBALLES',
dni: '', birthDate: '1953-01-02',
phone: '633313501', email: 'apcarballes@gmail.com',
lopd: true, newsletter: true, bHealth: true, authorized: true, authorized2: false,
),
Person(
memberId: 7, family: 2,
firstName: 'POLONIA', lastName: 'COLMENAR SÁNCHEZ',
dni: '', birthDate: '1952-08-09',
phone: '670243473', email: '',
lopd: true, newsletter: true, authorized: true, authorized2: false,
),
Person(
memberId: 7, family: 3,
firstName: 'RICARDO', lastName: 'LEGAZ RÍOS',
dni: '23032266C', birthDate: '1961-04-21',
phone: '648101900', email: 'RICARDO.LEGAZ@GMAIL.COM',
lopd: true, newsletter: true, authorized: true, authorized2: true,
),
Person(
memberId: 7, family: 4,
firstName: 'CRISTINA', lastName: 'PUENTE COLMENAR',
dni: '23019853TX', birthDate: '1978-10-15',
phone: '690728311', email: 'CPUENTE.SPANIA@GMAIL.COM',
lopd: true, newsletter: true, authorized: true, authorized2: true,
),
Person(
memberId: 7, family: 5,
firstName: 'MATILDA', lastName: 'LEGAZ PUENTE',
dni: '', birthDate: '2013-04-28',
phone: '', email: '',
lopd: false, newsletter: false, authorized: false, authorized2: false,
),
],
comments: [
MemberComment(
id: 1,
comment:
'11.03.23 chema: viene a darse de baja pero va a intentar traspasar el abono a su hija. 12.03.23. Cristina: Su hija está interesada, en el caso de traspaso, toma nota. 13.03.25: LOS TITULARES 3 Y 4 HARÁN USO ACTIVO DE CLUB.',
createdAt: '2023-03-11',
),
],
);
final _member42 = Member(
id: 42,
regDate: '2018-03-15',
address: 'Calle Mayor 12',
city: 'Madrid',
zip: '28001',
email: 'socio@example.com',
phone: '612345678',
bank: '0049',
bankOffice: '1500',
bankSecCode: '42',
bankAccount: '0123456789',
bankName: 'Santander',
mandate: 'MNDT-00042',
type: 'INDIVIDUAL',
fee: 25.50,
comment: 'Nota antigua importada del sistema anterior.',
comment2: 'Revisado en auditoría 2024.',
paid: false,
remSpecial: false,
retenido: false,
unregDate: null,
unregReason: '',
2026-03-18 22:20:31 +00:00
monthlyFees: {
2025: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
2026: [1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2027: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2028: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
},
2026-03-18 11:47:06 +00:00
people: [
Person(
memberId: 42, family: 1,
firstName: 'María', lastName: 'García López',
dni: '12345678A', birthDate: '1985-03-15',
phone: '612345678', email: 'maria@example.com',
lopd: true, newsletter: true, authorized: true, authorized2: false,
),
Person(
memberId: 42, family: 2,
firstName: 'Carlos', lastName: 'García López',
dni: '87654321B', birthDate: '1988-07-22',
phone: '699887766', email: 'carlos@example.com',
lopd: true, newsletter: false, authorized: true, authorized2: true,
),
],
comments: [
MemberComment(
id: 10,
comment: 'Solicitó cambio de domiciliación bancaria el 05/01/2024.',
createdAt: '2024-01-05',
),
MemberComment(
id: 11,
comment: 'Renovó cuota anual sin incidencias.',
createdAt: '2024-09-01',
),
],
);
final _member85 = Member(
id: 85,
regDate: '2010-06-20',
address: 'Av. de la Constitución 45, 3B',
city: 'Murcia',
zip: '30008',
email: 'jlopez@correo.es',
phone: '968112233',
bank: '2100',
bankOffice: '0001',
bankSecCode: '12',
bankAccount: '9876543210',
bankName: 'CaixaBank',
mandate: 'MNDT-00085',
type: 'JUVENIL',
fee: 18.00,
comment: '',
comment2: '',
paid: false,
remSpecial: true,
retenido: true,
unregDate: null,
unregReason: '',
2026-03-18 22:20:31 +00:00
monthlyFees: {
2025: [1, 1, 1, 1, 1, 0, 4, 0, 0, 0, 0, 0],
2026: [0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2027: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
2028: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
},
2026-03-18 11:47:06 +00:00
people: [
Person(
memberId: 85, family: 1,
firstName: 'Jorge', lastName: 'López Martínez',
dni: '22334455C', birthDate: '2005-11-30',
phone: '968112233', email: 'jlopez@correo.es',
lopd: true, newsletter: true, authorized: true, authorized2: false,
),
],
comments: [],
);