Files
flux/lib/features/documents/data/tickets_shipment_repository.dart
2026-05-15 19:18:03 +02:00

68 lines
2.3 KiB
Dart

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<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,
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<String> 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');
}
}
}