Refactor Staff and Store models to use fromMap method; enhance StoreCubit with provider management functionality
This commit is contained in:
@@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flux/core/blocs/session/session_bloc.dart';
|
||||
import 'package:flux/core/theme/theme.dart';
|
||||
import 'package:flux/core/widgets/flux_text_field.dart';
|
||||
import 'package:flux/features/master_data/providers/blocs/provider_cubit.dart';
|
||||
import 'package:flux/features/master_data/staff/blocs/staff_cubit.dart';
|
||||
import 'package:flux/features/master_data/store/bloc/store_cubit.dart';
|
||||
import 'package:flux/features/master_data/store/models/store_model.dart';
|
||||
@@ -94,13 +95,26 @@ class _StoresScreenState extends State<StoresScreen> {
|
||||
builder: (context, storeState) {
|
||||
final staffCount =
|
||||
storeState.staffByStore[store.id]?.length ?? 0;
|
||||
return ActionChip(
|
||||
avatar: const Icon(Icons.people, size: 16),
|
||||
label: Text("$staffCount Dipendenti"),
|
||||
onPressed: () => _manageStoreStaff(store),
|
||||
return Row(
|
||||
children: [
|
||||
ActionChip(
|
||||
avatar: const Icon(Icons.people, size: 16),
|
||||
label: Text("$staffCount Dipendenti"),
|
||||
onPressed: () => _manageStoreStaff(store),
|
||||
),
|
||||
const SizedBox(width: 16),
|
||||
ActionChip(
|
||||
avatar: const Icon(Icons.handshake, size: 16),
|
||||
label: Text("${store.providersCount} Providers"),
|
||||
onPressed: () {
|
||||
// Potresti voler navigare alla lista dei provider associati a questo store
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 16),
|
||||
TextButton.icon(
|
||||
onPressed: () => _openStoreForm(context, store: store),
|
||||
icon: const Icon(Icons.edit, size: 18),
|
||||
@@ -171,6 +185,51 @@ class _StoresScreenState extends State<StoresScreen> {
|
||||
);
|
||||
}
|
||||
|
||||
void _manageStoreProviders(StoreModel store) {
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
isScrollControlled: true,
|
||||
builder: (context) => BlocBuilder<ProvidersCubit, ProvidersState>(
|
||||
builder: (context, state) {
|
||||
// Qui dentro hai già tutta la lista dei provider e quelli associati a questo store
|
||||
// Puoi fare una UI simile a quella dello staff, con una checkbox per ogni provider
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text("Providers di ${store.nome}", style: context.titleLarge),
|
||||
const SizedBox(height: 16),
|
||||
...state.allProviders.map((provider) {
|
||||
final isAssociated = state.associatedIds.contains(
|
||||
provider.id,
|
||||
);
|
||||
return CheckboxListTile(
|
||||
title: Text(provider.nome),
|
||||
value: isAssociated,
|
||||
onChanged: (selected) {
|
||||
if (selected == true) {
|
||||
context.read<ProvidersCubit>().assignProviderToStore(
|
||||
store.id!,
|
||||
provider.id!,
|
||||
);
|
||||
} else {
|
||||
context.read<ProvidersCubit>().removeProviderFromStore(
|
||||
provider.id!,
|
||||
store.id!,
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _openStoreForm(BuildContext context, {StoreModel? store}) {
|
||||
final nomeController = TextEditingController(text: store?.nome);
|
||||
final indirizzoController = TextEditingController(text: store?.indirizzo);
|
||||
|
||||
Reference in New Issue
Block a user