articoli_dao.dart 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:drift/drift.dart';
  2. import '../database.dart';
  3. import '../tables/articoli.dart';
  4. import '../tables/listini.dart';
  5. import '../tables/listini_articolo.dart';
  6. import '../tables/listini_cliente.dart';
  7. import '../views/top_item.dart';
  8. class ArticoliDao {
  9. final AppDatabase db;
  10. ArticoliDao(this.db);
  11. Future<Articolo?> getByCode(String code) {
  12. return (db.select(db.articoli)..where((t) => t.codArticolo.equals(code))).getSingleOrNull();
  13. }
  14. Future<List<Articolo>> getItems(String filter) async {
  15. final words = filter.split(' ').where((w) => w.isNotEmpty).toList();
  16. final q = db.select(db.articoli)
  17. ..where((t) =>
  18. (t.gruppo.isNotNull() & t.gruppo.equals('*').not()) &
  19. (t.categoria.isNotNull() & t.categoria.equals('PPP').not()) &
  20. (t.descrizione.isNotNull() & t.descrizione.like('%.ANNULLATO%').not())
  21. )
  22. ..orderBy([(t) => OrderingTerm(expression: t.descrizione)])
  23. ..limit(200);
  24. for (final word in words) {
  25. final pattern = '%$word%';
  26. q.where((t) =>
  27. t.codArticolo.like(pattern) | t.descrizione.like(pattern) | t.ean.like(pattern)
  28. );
  29. }
  30. return q.get();
  31. }
  32. Future<List<Articolo>> getActiveItems(String filter) async {
  33. final items = await getItems(filter);
  34. return items.where((a) => a.attivo == 1).toList();
  35. }
  36. Future<List<TopItemData>> getMostSoldItems(int limit) {
  37. return (db.select(db.topItem)..limit(limit)).get();
  38. }
  39. Future<List<Listino>> getListini() {
  40. return (db.select(db.listini)
  41. ..where((t) =>
  42. t.codListino.isNotNull() &
  43. t.codListino.like('OF2').not() &
  44. t.codListino.like('OF4').not() &
  45. t.codListino.like('I0').not()
  46. )
  47. ).get();
  48. }
  49. Future<List<ListinoArticolo>> getListinoArticoli(int idListino) {
  50. return (db.select(db.listiniArticolo)
  51. ..where((t) => t.idListino.equals(idListino) & (t.attivo.equals(1)))
  52. ).get();
  53. }
  54. Future<ListinoArticolo?> getListPrice(int idListino, int idArticolo, String date) {
  55. return (db.select(db.listiniArticolo)
  56. ..where((t) =>
  57. t.idListino.equals(idListino) &
  58. t.idArticolo.equals(idArticolo) &
  59. (t.attivo.equals(1))
  60. )
  61. ).getSingleOrNull();
  62. }
  63. Future<ListinoCliente?> getCustomerListPrice(int idCliente, int idArticolo, String date) {
  64. return (db.select(db.listiniCliente)
  65. ..where((t) =>
  66. t.idCliente.equals(idCliente) &
  67. t.idArticolo.equals(idArticolo) &
  68. (t.attivo.equals(1)) &
  69. (t.annullato.equals('N'))
  70. )
  71. ..orderBy([(t) => OrderingTerm(expression: t.validoDa, mode: OrderingMode.desc)])
  72. ..limit(1)
  73. ).getSingleOrNull();
  74. }
  75. Future<List<Listino>> getPriceCodes(int idArticolo) {
  76. return (db.select(db.listini)
  77. ..join([
  78. innerJoin(db.listiniArticolo, db.listiniArticolo.idListino.equalsExp(db.listini.idListino) & db.listiniArticolo.idArticolo.equals(idArticolo)),
  79. ])
  80. ..where((t) =>
  81. t.codListino.isNotNull() &
  82. t.codListino.like('OF2').not() &
  83. t.codListino.like('OF4').not() &
  84. t.codListino.like('I0').not()
  85. )
  86. ).get();
  87. }
  88. }