feat-tickets #14

Merged
brontomark merged 13 commits from feat-tickets into main 2026-05-07 16:28:01 +02:00
4 changed files with 189 additions and 169 deletions
Showing only changes of commit 1d45912fc7 - Show all commits

View File

@@ -29,6 +29,8 @@ import 'package:flux/features/operations/models/operation_model.dart';
import 'package:flux/features/operations/ui/operation_form_screen.dart'; import 'package:flux/features/operations/ui/operation_form_screen.dart';
import 'package:flux/features/operations/ui/operation_mobile_upload_screen.dart'; import 'package:flux/features/operations/ui/operation_mobile_upload_screen.dart';
import 'package:flux/features/operations/ui/operations_screen.dart'; import 'package:flux/features/operations/ui/operations_screen.dart';
import 'package:flux/features/tickets/blocs/ticket_list_cubit.dart';
import 'package:flux/features/tickets/ui/ticket_list_screen.dart';
import 'package:get_it/get_it.dart'; import 'package:get_it/get_it.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
@@ -146,6 +148,13 @@ class AppRouter {
builder: (context, state) => builder: (context, state) =>
const CustomersContent(), // O come si chiama il tuo widget della lista! const CustomersContent(), // O come si chiama il tuo widget della lista!
), ),
GoRoute(
path: '/tickets',
builder: (context, state) => BlocProvider(
create: (context) => TicketListCubit(),
child: const TicketListScreen(),
),
),
], ],
), ),

View File

@@ -47,6 +47,8 @@ class _LatestOperationsCardContent extends StatelessWidget {
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
side: BorderSide(color: theme.dividerColor.withValues(alpha: 0.5)), side: BorderSide(color: theme.dividerColor.withValues(alpha: 0.5)),
), ),
child: InkWell(
onTap: () => context.push('/operations'),
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
@@ -69,8 +71,6 @@ class _LatestOperationsCardContent extends StatelessWidget {
), ),
const SizedBox(width: 12), const SizedBox(width: 12),
Expanded( Expanded(
child: TextButton(
onPressed: () => context.push('/operations'),
child: Text( child: Text(
context.l10n.homeLatestOperations, context.l10n.homeLatestOperations,
style: TextStyle( style: TextStyle(
@@ -82,7 +82,6 @@ class _LatestOperationsCardContent extends StatelessWidget {
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
), ),
), ),
),
], ],
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
@@ -95,12 +94,17 @@ class _LatestOperationsCardContent extends StatelessWidget {
LatestStoreOperationsState LatestStoreOperationsState
>( >(
builder: (context, state) { builder: (context, state) {
if (state.status == LatestStoreOperationsStatus.loading || if (state.status ==
state.status == LatestStoreOperationsStatus.initial) { LatestStoreOperationsStatus.loading ||
return const Center(child: CircularProgressIndicator()); state.status ==
LatestStoreOperationsStatus.initial) {
return const Center(
child: CircularProgressIndicator(),
);
} }
if (state.status == LatestStoreOperationsStatus.failure) { if (state.status ==
LatestStoreOperationsStatus.failure) {
return Center( return Center(
child: Text( child: Text(
"Errore di caricamento", "Errore di caricamento",
@@ -184,6 +188,7 @@ class _LatestOperationsCardContent extends StatelessWidget {
], ],
), ),
), ),
),
); );
} }
} }

View File

@@ -77,12 +77,13 @@ class HomeScreen extends StatelessWidget {
context: context, context: context,
), ),
LatestStoreOperationsCard(), LatestStoreOperationsCard(),
_buildDashboardWidget( _buildDashboardWidget(
title: context.l10n.homeLatestOperationTickets, title: context.l10n.homeLatestOperationTickets,
icon: Icons.support_agent_outlined, icon: Icons.support_agent_outlined,
color: Colors.purple, color: Colors.purple,
context: context, context: context,
onTap: () =>
context.push('/tickets'), // <-- Aggiunto!
), ),
]), ]),
), ),
@@ -194,8 +195,8 @@ class HomeScreen extends StatelessWidget {
label: context.l10n.homeNewOperationTicket, label: context.l10n.homeNewOperationTicket,
color: Colors.redAccent, color: Colors.redAccent,
onTap: () { onTap: () {
// TODO: Quando avrai la rotta per la nuova assistenza // Andiamo alla lista! (Da lì poi aggiungeremo il tasto "+" per il form)
// context.push('/assistance-form'); context.push('/tickets');
}, },
), ),
const SizedBox(width: 12), const SizedBox(width: 12),
@@ -226,15 +227,19 @@ class HomeScreen extends StatelessWidget {
required String title, required String title,
required IconData icon, required IconData icon,
required Color color, required Color color,
VoidCallback? onTap,
}) { }) {
final theme = Theme.of(context); final theme = Theme.of(context);
return Card( return Card(
elevation: 0, elevation: 0,
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
side: BorderSide(color: theme.dividerColor.withValues(alpha: 0.5)), side: BorderSide(color: theme.dividerColor.withValues(alpha: 0.5)),
), ),
child: InkWell(
onTap: onTap,
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
@@ -290,6 +295,7 @@ class HomeScreen extends StatelessWidget {
], ],
), ),
), ),
),
); );
} }

View File

@@ -27,7 +27,7 @@ class TicketRepository {
.select(''' .select('''
*, *,
customer (*), customer (*),
staff (*), staff_member (*),
target_model:model!ticket_model_id_1_fkey (*), target_model:model!ticket_model_id_1_fkey (*),
source_model:model!ticket_model_id_2_fkey (*) source_model:model!ticket_model_id_2_fkey (*)
''') ''')
@@ -83,7 +83,7 @@ class TicketRepository {
.select(''' .select('''
*, *,
customer (*), customer (*),
staff (*), staff_member (*),
target_model:model!ticket_model_id_1_fkey (*), target_model:model!ticket_model_id_1_fkey (*),
source_model:model!ticket_model_id_2_fkey (*) source_model:model!ticket_model_id_2_fkey (*)
''') ''')