| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import 'package:drift/drift.dart';
- import 'package:flutter_riverpod/flutter_riverpod.dart';
- import '../database/database.dart';
- import '../../business/order_manager.dart';
- import '../../business/pricing_service.dart';
- import 'database_provider.dart';
- class OrderState {
- final Ordine? order;
- final List<RigaOrdine> lines;
- final bool isLoading;
- final String? error;
- const OrderState({this.order, this.lines = const [], this.isLoading = false, this.error});
- double get totale {
- return lines.fold(0.0, (sum, l) => sum + (l.totale ?? 0));
- }
- double get totQta {
- return lines.fold(0.0, (sum, l) => sum + (l.quantita ?? 0));
- }
- }
- class OrderNotifier extends Notifier<OrderState> {
- @override
- OrderState build() => const OrderState();
- OrderManager _buildManager() {
- return OrderManager(
- ref.read(ordiniDaoProvider),
- ref.read(clientiDaoProvider),
- ref.read(filialiDaoProvider),
- ref.read(articoliDaoProvider),
- ref.read(listiniDaoProvider),
- ref.read(scontiDaoProvider),
- ref.read(pagamentiDaoProvider),
- ref.read(agentiDaoProvider),
- );
- }
- Future<void> createOrder(int idAgente, {int? idCliente}) async {
- final mgr = _buildManager();
- mgr.idAgente = idAgente;
- final order = await mgr.createOrder(idCliente: idCliente);
- state = OrderState(order: order);
- }
- Future<void> loadOrder(int id) async {
- state = const OrderState(isLoading: true);
- final mgr = _buildManager();
- final order = await mgr.loadOrder(id);
- if (order != null) {
- final lines = await mgr.getOrderLines(id);
- state = OrderState(order: order, lines: lines);
- } else {
- state = const OrderState(error: 'Ordine non trovato');
- }
- }
- Future<void> addLine(RigaOrdine line) async {
- if (state.order == null) return;
- final dao = ref.read(ordiniDaoProvider);
- await dao.insertOrderLine(line.copyWith(idOrdine: Value<int?>(state.order!.idOrdine)));
- final lines = await dao.getOrderLines(state.order!.idOrdine);
- state = OrderState(order: state.order, lines: lines);
- }
- Future<void> editLine(RigaOrdine line) async {
- if (state.order == null) return;
- final dao = ref.read(ordiniDaoProvider);
- await dao.updateOrderLine(line);
- final lines = await dao.getOrderLines(state.order!.idOrdine);
- state = OrderState(order: state.order, lines: lines);
- }
- Future<void> removeLine(int idRigaOrdine) async {
- if (state.order == null) return;
- final dao = ref.read(ordiniDaoProvider);
- await dao.deleteOrderLine(idRigaOrdine);
- final lines = await dao.getOrderLines(state.order!.idOrdine);
- state = OrderState(order: state.order, lines: lines);
- }
- Future<void> saveOrder() async {
- if (state.order == null) return;
- final mgr = _buildManager();
- mgr.idAgente = state.order!.idAgente ?? 0;
- mgr.setCurrentOrder(state.order!);
- await mgr.saveOrder();
- final updated = mgr.currentOrder;
- state = OrderState(order: updated, lines: state.lines);
- }
- Future<void> deleteOrder() async {
- if (state.order == null) return;
- final dao = ref.read(ordiniDaoProvider);
- await dao.deleteOrder(state.order!.idOrdine);
- state = const OrderState();
- }
- void setIdFiliale(int? v) {
- if (state.order == null) return;
- state = OrderState(
- order: state.order!.copyWith(idFiliale: Value<int?>(v)),
- lines: state.lines,
- );
- }
- void setIdListino(int? v) {
- if (state.order == null) return;
- state = OrderState(
- order: state.order!.copyWith(idListino: Value<int?>(v)),
- lines: state.lines,
- );
- }
- void setIdPagamento(int? v) {
- if (state.order == null) return;
- state = OrderState(
- order: state.order!.copyWith(idPagamento: Value<int?>(v)),
- lines: state.lines,
- );
- }
- void setNoteCliente(String? v) {
- if (state.order == null) return;
- state = OrderState(
- order: state.order!.copyWith(noteCliente: Value<String?>(v)),
- lines: state.lines,
- );
- }
- void setNoteOrdine(String? v) {
- if (state.order == null) return;
- state = OrderState(
- order: state.order!.copyWith(noteOrdine: Value<String?>(v)),
- lines: state.lines,
- );
- }
- void setRiferimento(String? v) {
- if (state.order == null) return;
- state = OrderState(
- order: state.order!.copyWith(riferimento: Value<String?>(v)),
- lines: state.lines,
- );
- }
- }
- final orderProvider = NotifierProvider<OrderNotifier, OrderState>(OrderNotifier.new);
|