This commit is contained in:
2026-05-12 12:36:50 +02:00
parent 2aab70aec5
commit 216fd85888
6 changed files with 592 additions and 3 deletions

View File

@@ -13,7 +13,11 @@ import 'package:flux/features/tickets/blocs/ticket_form_state.dart';
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/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';
@@ -409,7 +413,11 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(child: Column(children: [_cardAnagrafica(ticket)])),
Expanded(
child: Column(
children: [_cardTimeline(ticket), _cardAnagrafica(ticket)],
),
),
const SizedBox(width: 24),
Expanded(
child: Column(
@@ -441,7 +449,11 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
const SizedBox(width: 24),
Expanded(
child: Column(
children: [_cardDettagli(ticket), _cardCosti(ticket)],
children: [
_cardTimeline(ticket),
_cardDettagli(ticket),
_cardCosti(ticket),
],
),
),
],
@@ -451,6 +463,7 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_cardTimeline(ticket),
_cardAnagrafica(ticket),
_cardDispositivi(ticket),
_cardDettagli(ticket),
@@ -461,7 +474,7 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
}
}
// --- LE 5 CARD (MODULARIZZATE E COLORATE) ---
// --- LE 6 CARD (MODULARIZZATE E COLORATE) ---
Widget _cardAnagrafica(TicketModel ticket) {
return _buildCard(
@@ -781,6 +794,49 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
);
}
Widget _cardTimeline(TicketModel ticket) {
// Se il ticket è nuovo (non ha ancora un ID salvato a DB), nascondiamo la timeline
if (ticket.id == null || ticket.id!.isEmpty) {
return const SizedBox.shrink();
}
return _buildCard(
title: 'Timeline & Note',
icon: Icons.history,
themeColor: Colors.blueGrey,
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) {
if (state.isLoading && state.logs.isEmpty) {
return const Center(child: CircularProgressIndicator());
}
return TicketTimelineSection(
logs: state.logs,
onAddNote: (message, isInternal) {
// Recupera l'ID dello staff loggato dal tuo auth state
// final currentStaffId = ...
context.read<TrackingCubit>().addManualNote(
message,
isInternal,
// staffId: currentStaffId,
);
},
);
},
),
),
],
);
}
// --- WIDGET BASE PER LA CARD ---
Widget _buildCard({
required String title,