import 'package:drift/drift.dart'; import '../database.dart'; class OrdiniDao { final AppDatabase db; OrdiniDao(this.db); Future getById(int id) { return (db.select(db.ordini)..where((t) => t.idOrdine.equals(id))).getSingleOrNull(); } Future getByNumber(int numeroOrdine) { return (db.select(db.ordini)..where((t) => t.numeroOrdine.equals(numeroOrdine))).getSingleOrNull(); } Future> customerOrders(int idCliente, bool includeReferences) { return (db.select(db.ordini) ..where((t) => t.idCliente.equals(idCliente)) ..orderBy([(t) => OrderingTerm(expression: t.dataOrdine, mode: OrderingMode.desc)]) ..limit(200) ).get(); } Future> getLastOrders(int idAgente, int max) { return (db.select(db.ordini) ..where((t) => t.idAgente.equals(idAgente)) ..orderBy([(t) => OrderingTerm(expression: t.dataOrdine, mode: OrderingMode.desc)]) ..limit(max) ).get(); } Future countNewOrders() async { final rows = await (db.select(db.ordini)..where((t) => t.stato.equals('N'))).get(); return rows.length; } Future countOrdersOnHold() async { final rows = await (db.select(db.ordini)..where((t) => t.stato.equals('H'))).get(); return rows.length; } Future> getNewOrders() { return (db.select(db.ordini)..where((t) => t.stato.equals('N'))).get(); } Future> getUnsentOrders(int max) { return (db.select(db.ordini) ..where((t) => t.stato.equals('N') | t.stato.equals('H')) ..limit(max) ).get(); } Future generaNumeroOrdine(int idAgente) async { final result = await (db.select(db.ordini) ..where((t) => t.idAgente.equals(idAgente)) ..orderBy([(t) => OrderingTerm(expression: t.numeroOrdine, mode: OrderingMode.desc)]) ..limit(1) ).getSingleOrNull(); return (result?.numeroOrdine ?? 0) + 1; } Future markAsSent(int idOrdine, int idAssegnato) { return (db.update(db.ordini)..where((t) => t.idOrdine.equals(idOrdine))) .write(OrdiniCompanion(stato: const Value('T'))); } Future markAsSentStatus(int idOrdine) { return (db.update(db.ordini)..where((t) => t.idOrdine.equals(idOrdine))) .write(OrdiniCompanion(stato: const Value('T'))); } Future insertOrder(Ordine order) { return db.into(db.ordini).insert(order); } Future updateOrder(Ordine order) { return db.update(db.ordini).replace(order); } Future deleteOrder(int idOrdine) { return (db.delete(db.ordini)..where((t) => t.idOrdine.equals(idOrdine))).go(); } Future insertOrderLine(RigaOrdine line) { return db.into(db.righeOrdine).insert(line); } Future updateOrderLine(RigaOrdine line) { return db.update(db.righeOrdine).replace(line); } Future> getOrderLines(int idOrdine) { return (db.select(db.righeOrdine)..where((t) => t.idOrdine.equals(idOrdine))).get(); } Future deleteOrderLine(int idRigaOrdine) { return (db.delete(db.righeOrdine)..where((t) => t.idRigaOrdine.equals(idRigaOrdine))).go(); } Future zapOrderLines(int idOrdine) { return (db.delete(db.righeOrdine)..where((t) => t.idOrdine.equals(idOrdine))).go(); } Future findByNumeroOrdineSede(String numSede) { return (db.select(db.ordini)..where((t) => t.numeroOrdineSede.equals(numSede))).getSingleOrNull(); } Future findByIdOrdineSede(int idSede) { return (db.select(db.ordini)..where((t) => t.idOrdineSede.equals(idSede))).getSingleOrNull(); } Future totalAmountItems(int idOrdine) async { final lines = await (db.select(db.righeOrdine) ..where((t) => t.idOrdine.equals(idOrdine) & (t.rigaPromozione.equals(0) | t.rigaPromozione.isNull())) ).get(); return lines.fold(0.0, (sum, l) => sum + (l.totale ?? 0.0)); } Future totalQtyItems(int idOrdine) async { final lines = await (db.select(db.righeOrdine) ..where((t) => t.idOrdine.equals(idOrdine) & (t.rigaPromozione.equals(0) | t.rigaPromozione.isNull())) ).get(); return lines.fold(0.0, (sum, l) => sum + (l.quantita ?? 0.0)); } }