This commit is contained in:
2026-05-19 16:00:40 +02:00
parent 364474471c
commit 8a1b582f4e
5 changed files with 62 additions and 47 deletions

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/routes/routes.dart';
import 'package:flux/features/customers/blocs/customer_form_cubit.dart';
import 'package:flux/features/customers/blocs/customers_list_cubit.dart';
import 'package:flux/features/customers/models/customer_model.dart';
import 'package:flux/features/customers/ui/quick_customer_dialog.dart';
@@ -279,10 +280,13 @@ class SharedCustomerSection extends StatelessWidget {
builder: (dialogContext) {
return BlocProvider.value(
value: context.read<CustomersListCubit>(),
child: BlocProvider<CustomerFormCubit>(
create: (context) => CustomerFormCubit(),
child: QuickCustomerDialog(
initialQuery:
currentSearchQuery, // <-- Passiamo quello che ha digitato!
),
),
);
},
);

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/blocs/session/session_cubit.dart';
import 'package:flux/core/widgets/image_upload/blocs/image_upload_cubit.dart';
import 'package:flux/core/widgets/image_upload/ui/image_upload_screen.dart';
import 'package:flux/core/widgets/qr_upload_dialog.dart';
import 'package:flux/features/attachments/blocs/attachments_bloc.dart';
@@ -98,6 +99,8 @@ class SharedFilesSection extends StatelessWidget {
MaterialPageRoute(
builder: (_) => BlocProvider.value(
value: bloc,
child: BlocProvider<ImageUploadCubit>(
create: (context) => ImageUploadCubit(),
child: ImageUploadScreen(
title: titleNameForUpload,
companyId: GetIt.I
@@ -108,6 +111,7 @@ class SharedFilesSection extends StatelessWidget {
),
),
),
),
);
},
),

View File

@@ -67,7 +67,9 @@ class _QuickCustomerDialogState extends State<QuickCustomerDialog> {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: [
ChoiceChip(
label: const Text('Privato (Domestico)'),
@@ -98,6 +100,7 @@ class _QuickCustomerDialogState extends State<QuickCustomerDialog> {
),
],
),
),
const Divider(height: 32),
TextField(
controller: _nameCtrl,

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/widgets/shared_forms/attachments_section.dart';
import 'package:flux/features/attachments/blocs/attachments_bloc.dart';
import 'package:flux/features/operations/blocs/operation_form_cubit.dart';
import 'package:flux/features/operations/models/operation_model.dart';
@@ -39,7 +40,7 @@ class _OperationFormScreenState extends State<OperationFormScreen> {
'Energy',
'Fin',
'Entertainment',
'Custom',
'Altro',
];
bool _isInitialized = false;
@@ -113,9 +114,10 @@ class _OperationFormScreenState extends State<OperationFormScreen> {
Future<String?> _generateIdForQr() async {
if (!_formKey.currentState!.validate()) return null;
_flushControllersToCubit();
// Lo leggiamo pulito pulito dal context, perché c'è!
final attachmentsBloc = context.read<AttachmentsBloc>();
// Assicurati che questo metodo esista nel Cubit (come per il Ticket)
final newId = await context.read<OperationFormCubit>().saveOperationDraft();
if (newId != null && context.mounted) {
attachmentsBloc.add(ParentEntitySavedEvent(newId));
@@ -602,8 +604,10 @@ class _OperationFormScreenState extends State<OperationFormScreen> {
icon: Icons.attach_file,
themeColor: Colors.deepPurple,
children: [
SharedFilesSection(
titleNameForUpload: state.operation.customer?.name ?? 'Nuova Pratica',
SharedAttachmentsSection(
parentType: AttachmentParentType.operation,
parentId: state.operation.id,
titleForUpload: state.operation.customer?.name ?? 'Nuova Pratica',
onGenerateIdForQr: _generateIdForQr,
),
],

View File

@@ -27,7 +27,7 @@ class OperationDetailsSection extends StatelessWidget {
ProviderModel provider,
String operationType,
) {
if (operationType == 'Custom') return true;
if (operationType == 'Altro') return true;
// Controlliamo che il fornitore abbia il ruolo specifico nel suo array
switch (operationType) {
@@ -241,7 +241,7 @@ class OperationDetailsSection extends StatelessWidget {
],
// 3. SCENARIO ENTERTAINMENT O CUSTOM (Testo libero)
if (currentType == 'Entertainment' || currentType == 'Custom') ...[
if (currentType == 'Entertainment' || currentType == 'Altro') ...[
TextFormField(
controller: freeTextSubtypeController,
decoration: InputDecoration(
@@ -258,7 +258,7 @@ class OperationDetailsSection extends StatelessWidget {
'Energy',
'Fin',
'Entertainment',
'Custom',
'Altro',
].contains(currentType)) ...[
const SizedBox(height: 8),
durationQuickPicks, // Passiamo i chips dall'esterno