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'; import 'package:get_it/get_it.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class TicketsShipmentRepository { final _supabase = GetIt.I.get(); final _companyId = GetIt.I.get().state.company!.id!; Future> 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)) .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 createShipmentDocument({ required ShipmentDocumentModel document, required String newTicketStatus, // es: 'shipped' o 'inExternalLab' }) 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 .from('tickets') .update({'ticket_status': newTicketStatus}) .inFilter('id', document.ticketIds); } catch (e) { throw ('Errore durante la creazione della spedizione: $e'); } } Future getNextAutoDocumentNumber() async { try { final response = await _supabase .from('document_sequences') .select('*') .eq('company_id', _companyId) .eq('document_type', DocumentType.shipment.name) .single(); return DocumentSequence.fromMap(response); } catch (e) { throw ('Errore recupero numero documento: $e'); } } }