Refactor Store management: implement save and sync functionality for providers and staff; create StoreCard and StoreForm components
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flux/core/blocs/session/session_bloc.dart';
|
||||
import 'package:flux/features/master_data/providers/models/provider_model.dart';
|
||||
import 'package:flux/features/master_data/staff/data/staff_repository.dart';
|
||||
import 'package:flux/features/master_data/staff/models/staff_member_model.dart';
|
||||
import 'package:flux/features/master_data/store/data/store_repository.dart';
|
||||
@@ -54,21 +55,56 @@ class StoreCubit extends Cubit<StoreState> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> assignProviderToStore(String storeId, String providerId) async {
|
||||
Future<void> saveProvidersForStore(
|
||||
StoreModel store,
|
||||
List<ProviderModel> providers,
|
||||
) async {
|
||||
emit(state.copyWith(status: StoreStatus.loading));
|
||||
|
||||
try {
|
||||
await _repository.associateProviderToStore(
|
||||
final savedStore = await _repository.saveStore(store);
|
||||
await _repository.syncStoreProviders(savedStore.id!, providers);
|
||||
await loadStores();
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: StoreStatus.failure,
|
||||
errorMessage: "Errore nel salvataggio dei provider: $e",
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> saveStaffForStore(
|
||||
StoreModel store,
|
||||
List<StaffMemberModel> staffMembers,
|
||||
) async {
|
||||
emit(state.copyWith(status: StoreStatus.loading));
|
||||
|
||||
try {
|
||||
final savedStore = await _repository.saveStore(store);
|
||||
await _repository.syncStoreStaff(savedStore.id!, staffMembers);
|
||||
await loadStores();
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: StoreStatus.failure,
|
||||
errorMessage: "Errore nel salvataggio dello staff: $e",
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> associateStoreToProvider(
|
||||
String storeId,
|
||||
String providerId,
|
||||
) async {
|
||||
try {
|
||||
await _repository.associateStoreToProvider(
|
||||
providerId: providerId,
|
||||
storeId: storeId,
|
||||
);
|
||||
// Dopo l'associazione, potresti voler ricaricare i provider per quel negozio
|
||||
final updatedProviders = await _repository.fetchProvidersForStore(
|
||||
storeId,
|
||||
);
|
||||
final newMap = Map<String, List<ProviderModel>>.from(
|
||||
state.providersByStore,
|
||||
);
|
||||
newMap[storeId] = updatedProviders;
|
||||
emit(state.copyWith(providersByStore: newMap));
|
||||
loadStores();
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
@@ -84,18 +120,11 @@ class StoreCubit extends Cubit<StoreState> {
|
||||
String providerId,
|
||||
) async {
|
||||
try {
|
||||
await _repository.removeProviderFromStore(
|
||||
await _repository.removeStoreFromProvider(
|
||||
providerId: providerId,
|
||||
storeId: storeId,
|
||||
);
|
||||
final updatedProviders = await _repository.fetchProvidersForStore(
|
||||
storeId,
|
||||
);
|
||||
final newMap = Map<String, List<ProviderModel>>.from(
|
||||
state.providersByStore,
|
||||
);
|
||||
newMap[storeId] = updatedProviders;
|
||||
emit(state.copyWith(providersByStore: newMap));
|
||||
loadStores();
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
@@ -110,14 +139,7 @@ class StoreCubit extends Cubit<StoreState> {
|
||||
try {
|
||||
await _staffRepository.assignToStore(staffId, storeId);
|
||||
// Dopo l'assegnazione, potresti voler ricaricare lo staff per quel negozio
|
||||
final updatedStaff = await _staffRepository.getStaffMembersInStore(
|
||||
storeId,
|
||||
);
|
||||
final newMap = Map<String, List<StaffMemberModel>>.from(
|
||||
state.staffByStore,
|
||||
);
|
||||
newMap[storeId] = updatedStaff;
|
||||
emit(state.copyWith(status: StoreStatus.success, staffByStore: newMap));
|
||||
loadStores();
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(status: StoreStatus.failure, errorMessage: e.toString()),
|
||||
@@ -129,14 +151,7 @@ class StoreCubit extends Cubit<StoreState> {
|
||||
Future<void> removeStaffFromStore(String staffId, String storeId) async {
|
||||
try {
|
||||
await _staffRepository.removeFromStore(staffId, storeId);
|
||||
final updatedStaff = await _staffRepository.getStaffMembersInStore(
|
||||
storeId,
|
||||
);
|
||||
final newMap = Map<String, List<StaffMemberModel>>.from(
|
||||
state.staffByStore,
|
||||
);
|
||||
newMap[storeId] = updatedStaff;
|
||||
emit(state.copyWith(staffByStore: newMap));
|
||||
loadStores();
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
|
||||
Reference in New Issue
Block a user