import 'package:drift/drift.dart'; import '../database.dart'; import '../tables/articoli.dart'; import '../tables/listini.dart'; import '../tables/listini_articolo.dart'; import '../tables/listini_cliente.dart'; import '../views/top_item.dart'; class ArticoliDao { final AppDatabase db; ArticoliDao(this.db); Future getByCode(String code) { return (db.select(db.articoli)..where((t) => t.codArticolo.equals(code))).getSingleOrNull(); } Future> getItems(String filter) async { final words = filter.split(' ').where((w) => w.isNotEmpty).toList(); final q = db.select(db.articoli) ..where((t) => (t.gruppo.isNotNull() & t.gruppo.equals('*').not()) & (t.categoria.isNotNull() & t.categoria.equals('PPP').not()) & (t.descrizione.isNotNull() & t.descrizione.like('%.ANNULLATO%').not()) ) ..orderBy([(t) => OrderingTerm(expression: t.descrizione)]) ..limit(200); for (final word in words) { final pattern = '%$word%'; q.where((t) => t.codArticolo.like(pattern) | t.descrizione.like(pattern) | t.ean.like(pattern) ); } return q.get(); } Future> getActiveItems(String filter) async { final items = await getItems(filter); return items.where((a) => a.attivo == 1).toList(); } Future> getMostSoldItems(int limit) { return (db.select(db.topItem)..limit(limit)).get(); } Future> getListini() { return (db.select(db.listini) ..where((t) => t.codListino.isNotNull() & t.codListino.like('OF2').not() & t.codListino.like('OF4').not() & t.codListino.like('I0').not() ) ).get(); } Future> getListinoArticoli(int idListino) { return (db.select(db.listiniArticolo) ..where((t) => t.idListino.equals(idListino) & (t.attivo.equals(1))) ).get(); } Future getListPrice(int idListino, int idArticolo, String date) { return (db.select(db.listiniArticolo) ..where((t) => t.idListino.equals(idListino) & t.idArticolo.equals(idArticolo) & (t.attivo.equals(1)) ) ).getSingleOrNull(); } Future getCustomerListPrice(int idCliente, int idArticolo, String date) { return (db.select(db.listiniCliente) ..where((t) => t.idCliente.equals(idCliente) & t.idArticolo.equals(idArticolo) & (t.attivo.equals(1)) & (t.annullato.equals('N')) ) ..orderBy([(t) => OrderingTerm(expression: t.validoDa, mode: OrderingMode.desc)]) ..limit(1) ).getSingleOrNull(); } Future> getPriceCodes(int idArticolo) { return (db.select(db.listini) ..join([ innerJoin(db.listiniArticolo, db.listiniArticolo.idListino.equalsExp(db.listini.idListino) & db.listiniArticolo.idArticolo.equals(idArticolo)), ]) ..where((t) => t.codListino.isNotNull() & t.codListino.like('OF2').not() & t.codListino.like('OF4').not() & t.codListino.like('I0').not() ) ).get(); } }