Files
flux/lib/features/documents/data/tickets_shipment_repository.dart

54 lines
2.0 KiB
Dart
Raw Normal View History

2026-05-15 19:18:03 +02:00
import 'package:flux/core/blocs/session/session_cubit.dart';
import 'package:flux/features/documents/models/shipment_document_model.dart';
import 'package:flux/features/master_data/providers/models/provider_model.dart';
import 'package:flux/features/master_data/providers/models/provider_role.dart';
import 'package:flux/features/settings/document_sequence/models/document_sequence_model.dart';
2026-05-16 11:51:26 +02:00
import 'package:flux/features/tickets/models/ticket_model.dart';
2026-05-15 19:18:03 +02:00
import 'package:get_it/get_it.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class TicketsShipmentRepository {
final _supabase = GetIt.I.get<SupabaseClient>();
final _companyId = GetIt.I.get<SessionCubit>().state.company!.id!;
Future<List<ProviderModel>> fetchRepairCenters() async {
try {
final response = await _supabase
.from('provider')
.select('*, provider_locations (*)')
.eq('is_active', true)
.order('name');
final allProviders = (response as List)
.map((row) => ProviderModel.fromMap(row as Map<String, dynamic>))
.toList();
// Filtriamo lato client per prendere SOLO i repairCenter
return allProviders
.where((p) => p.roles.contains(ProviderRole.repairCenter))
.toList();
} catch (e) {
throw ('Errore caricamento laboratori: $e');
}
}
// NUOVO METODO: Salva il DDT e aggiorna i Ticket
Future<void> createShipmentDocument({
required ShipmentDocumentModel document,
2026-05-16 11:51:26 +02:00
required TicketStatus newTicketStatus, // es: 'shipped' o 'inExternalLab'
2026-05-15 19:18:03 +02:00
}) async {
try {
// 1. Inseriamo il singolo Documento di Trasporto
await _supabase.from('shipment_documents').insert(document.toMap());
// 2. Aggiorniamo lo stato di TUTTI i ticket inclusi nel DDT
await _supabase
2026-05-16 11:51:26 +02:00
.from('ticket')
.update({'ticket_status': newTicketStatus.value})
2026-05-15 19:18:03 +02:00
.inFilter('id', document.ticketIds);
} catch (e) {
throw ('Errore durante la creazione della spedizione: $e');
}
}
}