providers (#3)
Reviewed-on: http://catelliub.zapto.org:3000/brontomark/flux/pulls/3 Co-authored-by: Mark M2 Macbook <marco@catelli.it> Co-committed-by: Mark M2 Macbook <marco@catelli.it>
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flux/core/blocs/session/session_bloc.dart';
|
||||
import 'package:flux/features/master_data/providers/data/provider_repository.dart';
|
||||
import 'package:flux/features/master_data/store/models/store_model.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import '../models/provider_model.dart';
|
||||
|
||||
@@ -43,18 +45,21 @@ class ProvidersState extends Equatable {
|
||||
|
||||
class ProvidersCubit extends Cubit<ProvidersState> {
|
||||
final ProviderRepository _repository = GetIt.I<ProviderRepository>();
|
||||
final SessionBloc _sessionBloc;
|
||||
|
||||
ProvidersCubit() : super(const ProvidersState());
|
||||
ProvidersCubit(this._sessionBloc) : super(const ProvidersState());
|
||||
|
||||
// Carica i provider della company e quelli associati a uno store specifico
|
||||
Future<void> loadProviders(String companyId, String? storeId) async {
|
||||
Future<void> loadProviders(StoreModel? store) async {
|
||||
emit(state.copyWith(isLoading: true));
|
||||
try {
|
||||
final all = await _repository.fetchAllCompanyProviders(companyId);
|
||||
final all = await _repository.fetchAllCompanyProviders(
|
||||
_sessionBloc.state.company!.id,
|
||||
);
|
||||
List<String> associated = [];
|
||||
|
||||
if (storeId != null) {
|
||||
associated = await _repository.fetchAssociatedProviderIds(storeId);
|
||||
if (store != null) {
|
||||
associated = await _repository.fetchAssociatedProviderIds(store.id!);
|
||||
}
|
||||
|
||||
emit(
|
||||
@@ -100,12 +105,46 @@ class ProvidersCubit extends Cubit<ProvidersState> {
|
||||
}
|
||||
|
||||
// Salvataggio/Update anagrafica (nuovo o modifica)
|
||||
Future<void> saveProvider(ProviderModel provider) async {
|
||||
Future<void> saveProvider(
|
||||
ProviderModel provider,
|
||||
List<String> selectedStoreIds,
|
||||
) async {
|
||||
emit(state.copyWith(isLoading: true));
|
||||
// Assicuriamoci di settare la companyId prima di salvare
|
||||
provider = provider.copyWith(companyId: _sessionBloc.state.company!.id);
|
||||
try {
|
||||
// 1. Salviamo l'anagrafica (upsert)
|
||||
// Se è un nuovo provider, l'ID potrebbe essere generato qui dal DB
|
||||
// Quindi carichiamo il risultato del salvataggio per avere l'ID
|
||||
final response = await _repository.saveProvider(provider);
|
||||
|
||||
// Assumiamo che il saveProvider restituisca l'oggetto salvato con l'ID
|
||||
final pId = provider.id ?? response.id;
|
||||
|
||||
// 2. Sincronizziamo i negozi
|
||||
await _repository.syncProviderStores(pId!, selectedStoreIds);
|
||||
|
||||
// 3. Ricarichiamo tutto
|
||||
await loadProviders(null);
|
||||
} catch (e) {
|
||||
emit(state.copyWith(isLoading: false, errorMessage: e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> saveProviderWithStores(
|
||||
ProviderModel provider,
|
||||
List<String> storeIds,
|
||||
) async {
|
||||
emit(state.copyWith(isLoading: true));
|
||||
try {
|
||||
// 1. Salva l'anagrafica provider
|
||||
await _repository.saveProvider(provider);
|
||||
// Ricarichiamo la lista per vedere le modifiche
|
||||
await loadProviders(provider.companyId, null);
|
||||
|
||||
// 2. Sincronizza i negozi (la via più semplice è cancellare e reinserire
|
||||
// o fare un confronto tra i presenti e i nuovi)
|
||||
await _repository.syncProviderStores(provider.id!, storeIds);
|
||||
|
||||
await loadProviders(null);
|
||||
} catch (e) {
|
||||
emit(state.copyWith(isLoading: false, errorMessage: e.toString()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user