This commit is contained in:
2026-05-13 12:41:07 +02:00
parent 216fd85888
commit efb82b0d4a
15 changed files with 657 additions and 50 deletions

View File

@@ -14,9 +14,9 @@ import 'package:flux/features/tickets/models/ticket_model.dart';
import 'package:flux/core/widgets/shared_forms/staff_section.dart';
import 'package:flux/features/tickets/models/ticket_status_extension.dart';
import 'package:flux/features/tickets/ui/ticket_timeline_section.dart';
import 'package:flux/features/tickets/ui/ticket_workspace_screen.dart';
import 'package:flux/features/tickets/utils/ticket_pdf_service.dart';
import 'package:flux/features/tracking/blocs/tracking_cubit.dart';
import 'package:flux/features/tracking/data/tracking_repository.dart';
import 'package:flux/features/tracking/models/tracking_model.dart';
import 'package:get_it/get_it.dart';
import 'package:printing/printing.dart';
@@ -300,6 +300,83 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
ticket.id == null ? 'Nuova Scheda Assistenza' : 'Modifica Scheda',
),
actions: [
BlocBuilder<TicketFormCubit, TicketFormState>(
builder: (context, state) {
final ticket = state.ticket;
// Se il ticket non è ancora salvato, niente azioni rapide
if (ticket.id == null || ticket.id!.isEmpty) {
return const SizedBox.shrink();
}
// CONDIZIONE A: Da iniziare
if (ticket.ticketStatus == TicketStatus.open ||
ticket.ticketStatus == TicketStatus.inProgress) {
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 8.0,
),
child: FilledButton.icon(
style: FilledButton.styleFrom(
backgroundColor:
Colors.amber.shade700, // Colore Action
),
onPressed: () {
final currentUserId = GetIt.I
.get<SessionCubit>()
.state
.currentStaffMember!
.id!;
final currentUserName = GetIt.I
.get<SessionCubit>()
.state
.currentStaffMember!
.name;
context.read<TicketFormCubit>().takeInCharge(
staffId: currentUserId,
staffName: currentUserName,
);
Navigator.push(
context,
MaterialPageRoute(
builder: (_) =>
TicketWorkspaceScreen(ticket: ticket),
),
);
},
icon: const Icon(Icons.play_arrow, color: Colors.white),
label: const Text(
'Prendi in Carico',
style: TextStyle(color: Colors.white),
),
),
);
}
// CONDIZIONE B: Già in lavorazione
else if (ticket.ticketStatus == TicketStatus.inProgress) {
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 8.0,
),
child: FilledButton.icon(
onPressed: () {
// Naviga direttamente alla schermata di lavorazione
// Navigator.push(context, MaterialPageRoute(builder: (_) => TicketWorkspaceScreen(ticket: ticket)));
},
icon: const Icon(Icons.handyman),
label: const Text('Vai a Lavorazione'),
),
);
}
// Se è chiuso o in altri stati strani, nascondiamo il bottone
return const SizedBox.shrink();
},
),
Padding(
padding: const EdgeInsets.only(right: 16.0),
child: Chip(
@@ -807,10 +884,8 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
children: [
BlocProvider(
create: (context) => TrackingCubit(
repo: GetIt.I.get<TrackingRepository>(),
parentId: ticket.id!,
parentType: TrackingParentType.ticket,
companyId: ticket.companyId,
),
child: BlocBuilder<TrackingCubit, TrackingState>(
builder: (context, state) {
@@ -826,7 +901,11 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
context.read<TrackingCubit>().addManualNote(
message,
isInternal,
// staffId: currentStaffId,
staffId: GetIt.I
.get<SessionCubit>()
.state
.currentStaffMember
?.id,
);
},
);