refactor providers e basi per spedizioni
This commit is contained in:
@@ -1,18 +1,20 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flux/core/widgets/shared_forms/model_section.dart';
|
||||
import 'package:flux/features/master_data/providers/blocs/provider_cubit.dart';
|
||||
import 'package:flux/features/master_data/providers/blocs/provider_list_cubit.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/operations/blocs/operation_form_cubit.dart';
|
||||
import 'package:flux/features/operations/models/operation_model.dart';
|
||||
|
||||
class DetailsSection extends StatelessWidget {
|
||||
class OperationDetailsSection extends StatelessWidget {
|
||||
final OperationModel? currentOp;
|
||||
final String currentType;
|
||||
final TextEditingController freeTextSubtypeController;
|
||||
final TextEditingController freeTextDescriptionController;
|
||||
final Widget durationQuickPicks;
|
||||
|
||||
const DetailsSection({
|
||||
const OperationDetailsSection({
|
||||
super.key,
|
||||
required this.currentOp,
|
||||
required this.currentType,
|
||||
@@ -21,24 +23,29 @@ class DetailsSection extends StatelessWidget {
|
||||
required this.durationQuickPicks,
|
||||
});
|
||||
|
||||
bool _doesProviderMatchOperationType(dynamic provider, String operationType) {
|
||||
bool _doesProviderMatchOperationType(
|
||||
ProviderModel provider,
|
||||
String operationType,
|
||||
) {
|
||||
if (operationType == 'Custom') return true;
|
||||
|
||||
// Controlliamo che il fornitore abbia il ruolo specifico nel suo array
|
||||
switch (operationType) {
|
||||
case 'AL':
|
||||
case 'MNP':
|
||||
return provider.mobile == true;
|
||||
case 'AL' || 'MNP':
|
||||
return provider.roles.contains(ProviderRole.mobile);
|
||||
case 'NIP':
|
||||
return provider.landline == true;
|
||||
return provider.roles.contains(ProviderRole.landline);
|
||||
case 'UNICA':
|
||||
return provider.landline == true || provider.mobile == true;
|
||||
return provider.roles.contains(ProviderRole.landline) ||
|
||||
provider.roles.contains(ProviderRole.mobile);
|
||||
case 'Energy':
|
||||
return provider.energy == true;
|
||||
return provider.roles.contains(ProviderRole.energy);
|
||||
case 'Fin':
|
||||
return provider.financing == true;
|
||||
return provider.roles.contains(ProviderRole.financing);
|
||||
case 'Entertainment':
|
||||
return provider.entertainment == true;
|
||||
return provider.roles.contains(ProviderRole.entertainment);
|
||||
case 'TELEPASS':
|
||||
return provider.telepass == true;
|
||||
return provider.roles.contains(ProviderRole.telepass);
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
@@ -79,21 +86,21 @@ class DetailsSection extends StatelessWidget {
|
||||
),
|
||||
const Divider(),
|
||||
Expanded(
|
||||
child: BlocBuilder<ProvidersCubit, ProvidersState>(
|
||||
child: BlocBuilder<ProviderListCubit, ProviderListState>(
|
||||
builder: (context, state) {
|
||||
if (state.isLoading) {
|
||||
if (state.status == ProviderListStatus.loading) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
|
||||
final allProviders = state.activeProviders;
|
||||
final filteredProviders = allProviders
|
||||
.where(
|
||||
(p) => _doesProviderMatchOperationType(
|
||||
p,
|
||||
operationType,
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
// Prendiamo i provider e li filtriamo per ruolo e per stato attivo
|
||||
final filteredProviders = state.providers.where((p) {
|
||||
final isMatch = _doesProviderMatchOperationType(
|
||||
p,
|
||||
operationType,
|
||||
);
|
||||
return isMatch &&
|
||||
p.isActive; // Mostriamo solo quelli attivi!
|
||||
}).toList();
|
||||
|
||||
if (filteredProviders.isEmpty) {
|
||||
return const Center(
|
||||
@@ -119,6 +126,15 @@ class DetailsSection extends StatelessWidget {
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
// Facoltativo: mostra i ruoli sotto al nome
|
||||
subtitle: Text(
|
||||
provider.roles
|
||||
.map((r) => r.displayValue)
|
||||
.join(', '),
|
||||
style: const TextStyle(fontSize: 12),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
onTap: () {
|
||||
context.read<OperationFormCubit>().updateFields(
|
||||
providerId: provider.id,
|
||||
|
||||
Reference in New Issue
Block a user