added singleUserMode and removed StaffSection from forms

This commit is contained in:
2026-05-13 15:41:35 +02:00
parent efb82b0d4a
commit c610d68b9c
9 changed files with 138 additions and 84 deletions

View File

@@ -12,37 +12,36 @@ import 'ticket_form_state.dart';
class TicketFormCubit extends Cubit<TicketFormState> {
final TicketRepository _repository = GetIt.I.get<TicketRepository>();
final SessionCubit _sessionCubit = GetIt.I.get<SessionCubit>();
final StaffMemberModel? _createdBy;
TicketFormCubit({StaffMemberModel? createdBy})
// Costruttore: prepariamo subito il ticket base con i dati di chi lo crea
TicketFormCubit({StaffMemberModel? createdBy, TicketModel? existingTicket})
: super(
// Inizializziamo con un ticket vuoto di default
TicketFormState(
ticket: TicketModel.empty().copyWith(
createdById: createdBy?.id,
createdByName: createdBy?.name,
),
// Se c'è un ticket esistente usa quello, ALTRIMENTI ne crea uno vuoto
// e ci stampa subito il nome del creatore!
ticket:
existingTicket ??
TicketModel.empty().copyWith(
createdById: createdBy?.id,
createdByName: createdBy?.name,
),
),
);
/// 1. INIZIALIZZAZIONE (Se stiamo modificando un ticket esistente)
/// 1. INIZIALIZZAZIONE
Future<void> initForm({String? id, TicketModel? existingTicket}) async {
if (existingTicket != null) {
// SCENARIO 1 (App Native / Navigazione interna Web):
// Abbiamo l'oggetto intero passato via 'extra'. Lo mostriamo all'istante!
// SCENARIO 1: Abbiamo il ticket intero passato via record
emit(
state.copyWith(ticket: existingTicket, status: TicketFormStatus.ready),
);
} else if (id != null) {
// SCENARIO 2 (Web Refresh o Link condiviso):
// L'utente ha premuto F5 su /tickets/form/123. L'extra è andato perso, ma abbiamo l'ID!
emit(
state.copyWith(status: TicketFormStatus.loading),
); // Mostriamo uno spinner
// SCENARIO 2: QR CODE o Web Refresh! (Hai solo l'ID)
emit(state.copyWith(status: TicketFormStatus.loading));
try {
final fetchedTicket = await _repository.getTicketById(
id,
); // Lo scarichiamo!
// Boom! Lo scarica dal database in tempo reale
final fetchedTicket = await _repository.getTicketById(id);
emit(
state.copyWith(ticket: fetchedTicket, status: TicketFormStatus.ready),
);
@@ -55,19 +54,17 @@ class TicketFormCubit extends Cubit<TicketFormState> {
);
}
} else {
// SCENARIO 3 (Nuovo Ticket):
// È un nuovo ticket! Inseriamo i default base (Azienda, Negozio, Creatore)
// SCENARIO 3: Nuovo Ticket
final currentStore = _sessionCubit.state.currentStore;
final companyId = _sessionCubit.state.company?.id ?? '';
final newTicket = TicketModel.empty().copyWith(
// IL TRUCCO È QUI: Usiamo `state.ticket` invece di `TicketModel.empty()`.
// `state.ticket` HA GIÀ i dati di 'createdBy' settati nel costruttore!
final newTicket = state.ticket.copyWith(
companyId: companyId,
storeId: currentStore?.id,
createdById: createdBy.id,
createdByName: _createdBy.name,
// Impostiamo lo stato iniziale
ticketStatus: TicketStatus.open,
ticketType: TicketType.repair, // Default
ticketStatus: TicketStatus.open, // <-- O il tuo status di default
ticketType: TicketType.repair,
);
emit(state.copyWith(ticket: newTicket, status: TicketFormStatus.ready));

View File

@@ -297,7 +297,9 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
return Scaffold(
appBar: AppBar(
title: Text(
ticket.id == null ? 'Nuova Scheda Assistenza' : 'Modifica Scheda',
ticket.id == null
? 'Nuovo Ticket - Operatore: ${state.ticket.createdByName}'
: 'Modifica Ticket - Operatore: ${state.ticket.createdByName}',
),
actions: [
BlocBuilder<TicketFormCubit, TicketFormState>(
@@ -559,7 +561,7 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
icon: Icons.person,
themeColor: Colors.indigo,
children: [
StaffSection(
/* StaffSection(
label: 'Creato Da',
staffId: ticket.createdById,
staffName: ticket.createdByName,
@@ -567,7 +569,7 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
.read<TicketFormCubit>()
.updateCreator(staffId: staff.id!, staffName: staff.name),
),
const Divider(height: 32),
const Divider(height: 32), */
SharedCustomerSection(
customer: ticket.customer,
onCustomerSelected: (customer) =>

View File

@@ -160,7 +160,7 @@ class _TicketListScreenState extends State<TicketListScreen> {
context.pushNamed(
Routes.ticketForm,
pathParameters: {'id': 'new'},
extra: createdBy,
extra: (createdBy: createdBy, ticket: null),
);
},
),