This commit is contained in:
2026-05-14 12:07:05 +02:00
parent 3b3cfb5e43
commit 0f9616f19a
8 changed files with 410 additions and 100 deletions

View File

@@ -125,7 +125,9 @@ class TicketFormCubit extends Cubit<TicketFormState> {
TicketStatus? status,
String? request,
String? targetSn,
String? targetPassword,
String? sourceSn,
String? sourcePassword,
String? alternativePhoneNumber,
bool? hasCourtesyDevice,
String? includedAccessories,
@@ -135,6 +137,7 @@ class TicketFormCubit extends Cubit<TicketFormState> {
double? internalCost,
String? assignedToId,
String? assignedToName,
WarrantyType? warrantyType,
}) {
emit(
state.copyWith(
@@ -143,6 +146,8 @@ class TicketFormCubit extends Cubit<TicketFormState> {
ticketStatus: status ?? state.ticket.ticketStatus,
request: request ?? state.ticket.request,
targetSn: targetSn ?? state.ticket.targetSn,
targetPassword: targetPassword ?? state.ticket.targetPassword,
sourcePassword: sourcePassword ?? state.ticket.sourcePassword,
sourceSn: sourceSn ?? state.ticket.sourceSn,
alternativePhoneNumber:
alternativePhoneNumber ?? state.ticket.alternativePhoneNumber,
@@ -156,6 +161,7 @@ class TicketFormCubit extends Cubit<TicketFormState> {
internalCost: internalCost ?? state.ticket.internalCost,
assignedToId: assignedToId ?? state.ticket.assignedToId,
assignedToName: assignedToName ?? state.ticket.assignedToName,
warrantyType: warrantyType ?? state.ticket.warrantyType,
),
),
);
@@ -271,4 +277,45 @@ class TicketFormCubit extends Cubit<TicketFormState> {
);
}
}
Future<void> pauseTicket({
required TicketStatus newStatus,
required String notes,
}) async {
final currentTicket = state.ticket;
if (currentTicket.id == null || currentTicket.id!.isEmpty) return;
// 1. Usiamo lo stato esatto scelto dal tecnico
final updatedTicket = currentTicket.copyWith(ticketStatus: newStatus);
try {
await _repository.updateTicket(updatedTicket);
// 2. Componiamo un bel messaggio per la Timeline
// Es: "Sospeso per: waitingForQuote. Note: Cliente in ferie"
String timelineMessage = "Lavorazione sospesa (${newStatus.name}).";
if (notes.isNotEmpty) {
timelineMessage += " Note: $notes";
}
await GetIt.I.get<TrackingRepository>().logQuickEvent(
companyId: currentTicket.companyId,
message: timelineMessage,
type: TrackingType.statusChange,
parentId: currentTicket.id!,
parentType: TrackingParentType.ticket,
staffId: currentTicket.assignedToId ?? '',
isInternal: false,
);
emit(state.copyWith(ticket: updatedTicket));
} catch (e) {
emit(
state.copyWith(
status: TicketFormStatus.failure,
errorMessage: 'Errore durante la sospensione: $e',
),
);
}
}
}