ordini_dao.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import 'package:drift/drift.dart';
  2. import '../database.dart';
  3. class OrdiniDao {
  4. final AppDatabase db;
  5. OrdiniDao(this.db);
  6. Future<Ordine?> getById(int id) {
  7. return (db.select(db.ordini)..where((t) => t.idOrdine.equals(id))).getSingleOrNull();
  8. }
  9. Future<Ordine?> getByNumber(int numeroOrdine) {
  10. return (db.select(db.ordini)..where((t) => t.numeroOrdine.equals(numeroOrdine))).getSingleOrNull();
  11. }
  12. Future<List<Ordine>> customerOrders(int idCliente, bool includeReferences) {
  13. return (db.select(db.ordini)
  14. ..where((t) => t.idCliente.equals(idCliente))
  15. ..orderBy([(t) => OrderingTerm(expression: t.dataOrdine, mode: OrderingMode.desc)])
  16. ..limit(200)
  17. ).get();
  18. }
  19. Future<List<Ordine>> getLastOrders(int idAgente, int max) {
  20. return (db.select(db.ordini)
  21. ..where((t) => t.idAgente.equals(idAgente))
  22. ..orderBy([(t) => OrderingTerm(expression: t.dataOrdine, mode: OrderingMode.desc)])
  23. ..limit(max)
  24. ).get();
  25. }
  26. Future<int> countNewOrders() async {
  27. final rows = await (db.select(db.ordini)..where((t) => t.stato.equals('N'))).get();
  28. return rows.length;
  29. }
  30. Future<int> countOrdersOnHold() async {
  31. final rows = await (db.select(db.ordini)..where((t) => t.stato.equals('H'))).get();
  32. return rows.length;
  33. }
  34. Future<List<Ordine>> getNewOrders() {
  35. return (db.select(db.ordini)..where((t) => t.stato.equals('N'))).get();
  36. }
  37. Future<List<Ordine>> getUnsentOrders(int max) {
  38. return (db.select(db.ordini)
  39. ..where((t) => t.stato.equals('N') | t.stato.equals('H'))
  40. ..limit(max)
  41. ).get();
  42. }
  43. Future<int> generaNumeroOrdine(int idAgente) async {
  44. final result = await (db.select(db.ordini)
  45. ..where((t) => t.idAgente.equals(idAgente))
  46. ..orderBy([(t) => OrderingTerm(expression: t.numeroOrdine, mode: OrderingMode.desc)])
  47. ..limit(1)
  48. ).getSingleOrNull();
  49. return (result?.numeroOrdine ?? 0) + 1;
  50. }
  51. Future<void> markAsSent(int idOrdine, int idAssegnato) {
  52. return (db.update(db.ordini)..where((t) => t.idOrdine.equals(idOrdine)))
  53. .write(OrdiniCompanion(stato: const Value('T')));
  54. }
  55. Future<void> markAsSentStatus(int idOrdine) {
  56. return (db.update(db.ordini)..where((t) => t.idOrdine.equals(idOrdine)))
  57. .write(OrdiniCompanion(stato: const Value('T')));
  58. }
  59. Future<int> insertOrder(Ordine order) {
  60. return db.into(db.ordini).insert(order);
  61. }
  62. Future<bool> updateOrder(Ordine order) {
  63. return db.update(db.ordini).replace(order);
  64. }
  65. Future<void> deleteOrder(int idOrdine) {
  66. return (db.delete(db.ordini)..where((t) => t.idOrdine.equals(idOrdine))).go();
  67. }
  68. Future<int> insertOrderLine(RigaOrdine line) {
  69. return db.into(db.righeOrdine).insert(line);
  70. }
  71. Future<bool> updateOrderLine(RigaOrdine line) {
  72. return db.update(db.righeOrdine).replace(line);
  73. }
  74. Future<List<RigaOrdine>> getOrderLines(int idOrdine) {
  75. return (db.select(db.righeOrdine)..where((t) => t.idOrdine.equals(idOrdine))).get();
  76. }
  77. Future<void> deleteOrderLine(int idRigaOrdine) {
  78. return (db.delete(db.righeOrdine)..where((t) => t.idRigaOrdine.equals(idRigaOrdine))).go();
  79. }
  80. Future<void> zapOrderLines(int idOrdine) {
  81. return (db.delete(db.righeOrdine)..where((t) => t.idOrdine.equals(idOrdine))).go();
  82. }
  83. Future<Ordine?> findByNumeroOrdineSede(String numSede) {
  84. return (db.select(db.ordini)..where((t) => t.numeroOrdineSede.equals(numSede))).getSingleOrNull();
  85. }
  86. Future<Ordine?> findByIdOrdineSede(int idSede) {
  87. return (db.select(db.ordini)..where((t) => t.idOrdineSede.equals(idSede))).getSingleOrNull();
  88. }
  89. Future<double> totalAmountItems(int idOrdine) async {
  90. final lines = await (db.select(db.righeOrdine)
  91. ..where((t) => t.idOrdine.equals(idOrdine) & (t.rigaPromozione.equals(0) | t.rigaPromozione.isNull()))
  92. ).get();
  93. return lines.fold<double>(0.0, (sum, l) => sum + (l.totale ?? 0.0));
  94. }
  95. Future<double> totalQtyItems(int idOrdine) async {
  96. final lines = await (db.select(db.righeOrdine)
  97. ..where((t) => t.idOrdine.equals(idOrdine) & (t.rigaPromozione.equals(0) | t.rigaPromozione.isNull()))
  98. ).get();
  99. return lines.fold<double>(0.0, (sum, l) => sum + (l.quantita ?? 0.0));
  100. }
  101. }