database.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import 'package:drift/drift.dart';
  2. import 'package:ristoris/core/constants.dart';
  3. import 'db_connector.dart';
  4. import 'tables/agenti.dart';
  5. import 'tables/articoli.dart';
  6. import 'tables/clienti.dart';
  7. import 'tables/ordini.dart';
  8. import 'tables/righe_ordine.dart';
  9. import 'tables/filiali.dart';
  10. import 'tables/listini.dart';
  11. import 'tables/listini_articolo.dart';
  12. import 'tables/listini_cliente.dart';
  13. import 'tables/sconti.dart';
  14. import 'tables/sconti_cliente.dart';
  15. import 'tables/pagamenti.dart';
  16. import 'tables/parametri.dart';
  17. import 'tables/tabelle.dart';
  18. import 'tables/promozioni.dart';
  19. import 'tables/promo_articoli.dart';
  20. import 'tables/promo_listini.dart';
  21. import 'tables/promo_omaggi.dart';
  22. import 'tables/clienti_agente.dart';
  23. import 'tables/scadenze.dart';
  24. import 'tables/statistiche_vendita.dart';
  25. import 'views/articoli_con_promo.dart';
  26. import 'views/ordini_senza_righe.dart';
  27. import 'views/top_item.dart';
  28. import 'views/top_customer.dart';
  29. part 'database.g.dart';
  30. @DriftDatabase(
  31. tables: [
  32. Agenti,
  33. Articoli,
  34. Clienti,
  35. Ordini,
  36. RigheOrdine,
  37. Filiali,
  38. Listini,
  39. ListiniArticolo,
  40. ListiniCliente,
  41. Sconti,
  42. ScontiCliente,
  43. Pagamenti,
  44. Parametri,
  45. Tabelle,
  46. Promozioni,
  47. PromoArticoli,
  48. PromoListini,
  49. PromoOmaggi,
  50. ClientiAgente,
  51. Scadenze,
  52. StatisticheVendita,
  53. ArticoliConPromo,
  54. OrdiniSenzaRighe,
  55. TopItem,
  56. TopCustomer,
  57. ],
  58. )
  59. class AppDatabase extends _$AppDatabase {
  60. AppDatabase() : super(_createDatabase());
  61. static String? _dbDirPath;
  62. static QueryExecutor _createDatabase() {
  63. return createDb(_dbDirPath ?? '', AppConstants.kDbName);
  64. }
  65. static Future<void> ensureDatabaseReady() async {
  66. _dbDirPath = await ensureDbReady();
  67. }
  68. static Future<bool> isDbEmpty() async {
  69. return isDatabaseEmpty(_dbDirPath ?? '');
  70. }
  71. @override
  72. int get schemaVersion => 7;
  73. @override
  74. MigrationStrategy get migration => MigrationStrategy(
  75. onCreate: (m) async {
  76. await m.createAll();
  77. },
  78. onUpgrade: (m, from, to) async {
  79. if (from < 2) {
  80. await m.addColumn(
  81. statisticheVendita,
  82. statisticheVendita.codStatistiche,
  83. );
  84. }
  85. if (from < 3) {
  86. await customStatement(
  87. 'CREATE INDEX IF NOT EXISTS ndx_ro_idordine ON Righe_ordine(idOrdine)',
  88. );
  89. }
  90. if (from < 4) {
  91. await customStatement(
  92. 'CREATE INDEX IF NOT EXISTS NDX_FILIALE_REMOTO ON Filiali(idFilialeRemoto)',
  93. );
  94. await customStatement(
  95. 'CREATE INDEX IF NOT EXISTS NDX_CLI_COD ON Clienti(codCliente)',
  96. );
  97. await customStatement(
  98. 'CREATE INDEX IF NOT EXISTS NDX_CLI_REMOTO ON Clienti(idClienteRemoto)',
  99. );
  100. await customStatement(
  101. 'CREATE INDEX IF NOT EXISTS NDX_idOrdine_SEDE ON Ordini(idOrdineSede)',
  102. );
  103. }
  104. if (from < 5) {
  105. await customStatement(
  106. 'CREATE INDEX IF NOT EXISTS NDX_NUMERO_ORDINE ON Ordini(numeroOrdine)',
  107. );
  108. }
  109. if (from < 6) {
  110. await customStatement(
  111. 'CREATE INDEX IF NOT EXISTS NDX_filiali_cliente ON Filiali(idCliente)',
  112. );
  113. }
  114. if (from < 7) {
  115. await customStatement(
  116. 'CREATE INDEX IF NOT EXISTS ndx_stat_cliart ON Statistiche_vendita(idCliente, idArticolo)',
  117. );
  118. await customStatement(
  119. 'CREATE INDEX IF NOT EXISTS ndx_righeOrdine_promo ON Righe_ordine(idOrdine, rigaPromozione)',
  120. );
  121. }
  122. },
  123. );
  124. }