Files
flux/lib/features/settings/document_sequence/blocs/document_sequence_cubit.dart

96 lines
2.6 KiB
Dart
Raw Normal View History

2026-05-16 09:04:18 +02:00
import 'package:equatable/equatable.dart';
2026-05-10 14:09:57 +02:00
import 'package:flutter_bloc/flutter_bloc.dart';
2026-05-16 09:04:18 +02:00
import 'package:flux/features/settings/document_sequence/data/document_sequence_repository.dart';
2026-05-10 14:09:57 +02:00
import 'package:flux/features/settings/document_sequence/models/document_sequence_model.dart';
2026-05-16 09:04:18 +02:00
import 'package:get_it/get_it.dart';
2026-05-10 14:09:57 +02:00
2026-05-16 09:04:18 +02:00
enum DocumentSequenceStatus { initial, loading, success, failure }
class DocumentSequenceState extends Equatable {
final DocumentSequenceStatus status;
2026-05-10 14:09:57 +02:00
final List<DocumentSequence> sequences;
final String? error;
2026-05-16 09:04:18 +02:00
const DocumentSequenceState({
2026-05-10 14:09:57 +02:00
this.sequences = const [],
this.error,
2026-05-16 09:04:18 +02:00
this.status = DocumentSequenceStatus.initial,
2026-05-10 14:09:57 +02:00
});
2026-05-16 09:04:18 +02:00
DocumentSequenceState copyWith({
List<DocumentSequence>? sequences,
String? error,
DocumentSequenceStatus? status,
}) {
return DocumentSequenceState(
sequences: sequences ?? this.sequences,
error: error ?? this.error,
status: status ?? this.status,
);
}
@override
List<Object?> get props => [sequences, error, status];
2026-05-10 14:09:57 +02:00
}
class DocumentSequenceCubit extends Cubit<DocumentSequenceState> {
final String companyId;
2026-05-16 09:04:18 +02:00
final _repository = GetIt.I.get<DocumentSequenceRepository>();
2026-05-10 14:09:57 +02:00
DocumentSequenceCubit(this.companyId) : super(DocumentSequenceState());
Future<void> loadSequences() async {
2026-05-16 09:04:18 +02:00
emit(state.copyWith(status: DocumentSequenceStatus.loading));
2026-05-10 14:09:57 +02:00
try {
2026-05-16 09:04:18 +02:00
final list = await _repository.getDocumentSequences();
emit(
state.copyWith(sequences: list, status: DocumentSequenceStatus.success),
);
2026-05-10 14:09:57 +02:00
} catch (e) {
2026-05-16 09:04:18 +02:00
emit(
state.copyWith(
error: e.toString(),
status: DocumentSequenceStatus.failure,
),
);
2026-05-10 14:09:57 +02:00
}
}
void updateLocalSequence(String docType, {String? prefix, int? nextValue}) {
2026-05-16 09:04:18 +02:00
bool found = false;
2026-05-10 14:09:57 +02:00
final newList = state.sequences.map((s) {
if (s.docType == docType) {
2026-05-16 09:04:18 +02:00
found = true;
2026-05-10 14:09:57 +02:00
return s.copyWith(prefix: prefix, nextValue: nextValue);
}
return s;
}).toList();
2026-05-16 09:04:18 +02:00
if (!found) {
newList.add(
DocumentSequence(
docType: docType,
prefix: prefix ?? '',
nextValue: nextValue ?? 1,
),
);
}
emit(state.copyWith(sequences: newList));
2026-05-10 14:09:57 +02:00
}
Future<void> saveSequences() async {
try {
for (var seq in state.sequences) {
2026-05-16 09:04:18 +02:00
await _repository.createOrUpdateSequence(sequence: seq);
2026-05-10 14:09:57 +02:00
}
// Opzionale: mostra un feedback di successo
} catch (e) {
emit(
2026-05-16 09:04:18 +02:00
state.copyWith(
2026-05-10 14:09:57 +02:00
error: "Errore nel salvataggio",
2026-05-16 09:04:18 +02:00
status: DocumentSequenceStatus.failure,
2026-05-10 14:09:57 +02:00
),
);
}
}
}