|
|
@@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
|
|
|
import 'package:intl/intl.dart';
|
|
|
import '../../../providers/auth_provider.dart';
|
|
|
import '../../../providers/order_provider.dart';
|
|
|
+import '../../../providers/database_provider.dart';
|
|
|
import '../../../database/database.dart';
|
|
|
import '../../widgets/search_bar.dart' as sw;
|
|
|
import '../../widgets/empty_state.dart';
|
|
|
@@ -81,6 +82,43 @@ class _OrderListPageState extends ConsumerState<OrderListPage> {
|
|
|
super.dispose();
|
|
|
}
|
|
|
|
|
|
+ void _openOrder(VOrdiniData order) {
|
|
|
+ context.push('/dashboard/orders/${order.idOrdine}');
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> _deleteOrder(VOrdiniData order) async {
|
|
|
+ final confirmed = await showDialog<bool>(
|
|
|
+ context: context,
|
|
|
+ builder: (ctx) => AlertDialog(
|
|
|
+ title: const Text('Elimina ordine'),
|
|
|
+ content: Text(
|
|
|
+ 'Vuoi eliminare l\'ordine n. ${order.numeroOrdine ?? order.idOrdine}?',
|
|
|
+ ),
|
|
|
+ actions: [
|
|
|
+ TextButton(
|
|
|
+ onPressed: () => Navigator.pop(ctx, false),
|
|
|
+ child: const Text('Annulla'),
|
|
|
+ ),
|
|
|
+ FilledButton(
|
|
|
+ onPressed: () => Navigator.pop(ctx, true),
|
|
|
+ child: const Text('Elimina'),
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ if (confirmed != true) return;
|
|
|
+
|
|
|
+ final agente = ref.read(authProvider).agente;
|
|
|
+ final dao = ref.read(ordiniDaoProvider);
|
|
|
+ await dao.zapOrderLines(order.idOrdine);
|
|
|
+ await dao.deleteOrder(order.idOrdine);
|
|
|
+
|
|
|
+ if (agente != null) {
|
|
|
+ ref.invalidate(ordersViewProvider(agente.idAgente));
|
|
|
+ ref.invalidate(orderStatsProvider(agente.idAgente));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
final agente = ref.watch(authProvider).agente;
|
|
|
@@ -131,10 +169,18 @@ class _OrderListPageState extends ConsumerState<OrderListPage> {
|
|
|
return ListView.builder(
|
|
|
padding: const EdgeInsets.all(16),
|
|
|
itemCount: orders.length,
|
|
|
- itemBuilder: (_, i) => _OrderCard(order: orders[i]),
|
|
|
+ itemBuilder: (_, i) => _OrderCard(
|
|
|
+ order: orders[i],
|
|
|
+ onEdit: () => _openOrder(orders[i]),
|
|
|
+ onDelete: () => _deleteOrder(orders[i]),
|
|
|
+ ),
|
|
|
);
|
|
|
}
|
|
|
- return _OrderTable(orders: orders);
|
|
|
+ return _OrderTable(
|
|
|
+ orders: orders,
|
|
|
+ onEdit: _openOrder,
|
|
|
+ onDelete: _deleteOrder,
|
|
|
+ );
|
|
|
},
|
|
|
loading: () =>
|
|
|
const Center(child: CircularProgressIndicator()),
|
|
|
@@ -159,7 +205,13 @@ class _OrderListPageState extends ConsumerState<OrderListPage> {
|
|
|
|
|
|
class _OrderCard extends StatelessWidget {
|
|
|
final VOrdiniData order;
|
|
|
- const _OrderCard({required this.order});
|
|
|
+ final VoidCallback onEdit;
|
|
|
+ final VoidCallback onDelete;
|
|
|
+ const _OrderCard({
|
|
|
+ required this.order,
|
|
|
+ required this.onEdit,
|
|
|
+ required this.onDelete,
|
|
|
+ });
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
@@ -239,6 +291,37 @@ class _OrderCard extends StatelessWidget {
|
|
|
textAlign: TextAlign.right,
|
|
|
),
|
|
|
),
|
|
|
+ const SizedBox(height: 8),
|
|
|
+ Row(
|
|
|
+ mainAxisAlignment: MainAxisAlignment.end,
|
|
|
+ children: [
|
|
|
+ if (order.stato == AppConstants.kStatusNew) ...[
|
|
|
+ IconButton(
|
|
|
+ icon: const Icon(Icons.edit, size: 20),
|
|
|
+ onPressed: onEdit,
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ IconButton(
|
|
|
+ icon: Icon(
|
|
|
+ Icons.delete_outline,
|
|
|
+ size: 20,
|
|
|
+ color: cs.error,
|
|
|
+ ),
|
|
|
+ onPressed: onDelete,
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ ] else
|
|
|
+ IconButton(
|
|
|
+ icon: Icon(
|
|
|
+ Icons.visibility,
|
|
|
+ size: 20,
|
|
|
+ color: cs.secondary,
|
|
|
+ ),
|
|
|
+ onPressed: onEdit,
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
],
|
|
|
),
|
|
|
),
|
|
|
@@ -249,7 +332,13 @@ class _OrderCard extends StatelessWidget {
|
|
|
|
|
|
class _OrderTable extends StatelessWidget {
|
|
|
final List<VOrdiniData> orders;
|
|
|
- const _OrderTable({required this.orders});
|
|
|
+ final void Function(VOrdiniData) onEdit;
|
|
|
+ final void Function(VOrdiniData) onDelete;
|
|
|
+ const _OrderTable({
|
|
|
+ required this.orders,
|
|
|
+ required this.onEdit,
|
|
|
+ required this.onDelete,
|
|
|
+ });
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
@@ -415,28 +504,35 @@ class _OrderTable extends StatelessWidget {
|
|
|
flex: 1,
|
|
|
),
|
|
|
_cell(
|
|
|
- IconButton(
|
|
|
- icon: Icon(
|
|
|
- Icons.visibility,
|
|
|
- size: 20,
|
|
|
- color: cs.secondary,
|
|
|
- ),
|
|
|
- onPressed: () {
|
|
|
- print(o.idOrdine);
|
|
|
- context.push(
|
|
|
- '/dashboard/orders/${o.idOrdine}',
|
|
|
- );
|
|
|
- },
|
|
|
- /*
|
|
|
- onPressed: () => {
|
|
|
- context.push(
|
|
|
- '/dashboard/orders/${o.idOrdine}',
|
|
|
- )
|
|
|
- }
|
|
|
- ,
|
|
|
- */
|
|
|
- visualDensity:
|
|
|
- VisualDensity.compact,
|
|
|
+ Row(
|
|
|
+ mainAxisSize: MainAxisSize.min,
|
|
|
+ children: [
|
|
|
+ if (o.stato == AppConstants.kStatusNew) ...[
|
|
|
+ IconButton(
|
|
|
+ icon: const Icon(Icons.edit, size: 20),
|
|
|
+ onPressed: () => onEdit(o),
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ IconButton(
|
|
|
+ icon: Icon(
|
|
|
+ Icons.delete_outline,
|
|
|
+ size: 20,
|
|
|
+ color: cs.error,
|
|
|
+ ),
|
|
|
+ onPressed: () => onDelete(o),
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ ] else
|
|
|
+ IconButton(
|
|
|
+ icon: Icon(
|
|
|
+ Icons.visibility,
|
|
|
+ size: 20,
|
|
|
+ color: cs.secondary,
|
|
|
+ ),
|
|
|
+ onPressed: () => onEdit(o),
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ ],
|
|
|
),
|
|
|
flex: 1,
|
|
|
),
|
|
|
@@ -513,17 +609,35 @@ class _OrderTable extends StatelessWidget {
|
|
|
flex: 1,
|
|
|
),
|
|
|
_cell(
|
|
|
- IconButton(
|
|
|
- icon: Icon(
|
|
|
- Icons.visibility,
|
|
|
- size: 20,
|
|
|
- color: cs.secondary,
|
|
|
- ),
|
|
|
- onPressed: () => context.push(
|
|
|
- '/dashboard/orders/${o.idOrdine}',
|
|
|
- ),
|
|
|
- visualDensity:
|
|
|
- VisualDensity.compact,
|
|
|
+ Row(
|
|
|
+ mainAxisSize: MainAxisSize.min,
|
|
|
+ children: [
|
|
|
+ if (o.stato == AppConstants.kStatusNew) ...[
|
|
|
+ IconButton(
|
|
|
+ icon: const Icon(Icons.edit, size: 20),
|
|
|
+ onPressed: () => onEdit(o),
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ IconButton(
|
|
|
+ icon: Icon(
|
|
|
+ Icons.delete_outline,
|
|
|
+ size: 20,
|
|
|
+ color: cs.error,
|
|
|
+ ),
|
|
|
+ onPressed: () => onDelete(o),
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ ] else
|
|
|
+ IconButton(
|
|
|
+ icon: Icon(
|
|
|
+ Icons.visibility,
|
|
|
+ size: 20,
|
|
|
+ color: cs.secondary,
|
|
|
+ ),
|
|
|
+ onPressed: () => onEdit(o),
|
|
|
+ visualDensity: VisualDensity.compact,
|
|
|
+ ),
|
|
|
+ ],
|
|
|
),
|
|
|
flex: 1,
|
|
|
),
|