| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- import 'package:drift/drift.dart';
- import 'package:ristoris/core/constants.dart';
- import 'db_connector.dart';
- import 'tables/agenti.dart';
- import 'tables/articoli.dart';
- import 'tables/clienti.dart';
- import 'tables/ordini.dart';
- import 'tables/righe_ordine.dart';
- import 'tables/filiali.dart';
- import 'tables/listini.dart';
- import 'tables/listini_articolo.dart';
- import 'tables/listini_cliente.dart';
- import 'tables/sconti.dart';
- import 'tables/sconti_cliente.dart';
- import 'tables/pagamenti.dart';
- import 'tables/parametri.dart';
- import 'tables/tabelle.dart';
- import 'tables/promozioni.dart';
- import 'tables/promo_articoli.dart';
- import 'tables/promo_listini.dart';
- import 'tables/promo_omaggi.dart';
- import 'tables/clienti_agente.dart';
- import 'tables/scadenze.dart';
- import 'tables/statistiche_vendita.dart';
- import 'views/articoli_con_promo.dart';
- import 'views/ordini_senza_righe.dart';
- import 'views/top_item.dart';
- import 'views/top_customer.dart';
- import 'views/v_ordini.dart';
- import 'views/v_righe_ordine.dart';
- import 'views/v_scadenze.dart';
- part 'database.g.dart';
- @DriftDatabase(
- tables: [
- Agenti,
- Articoli,
- Clienti,
- Ordini,
- RigheOrdine,
- Filiali,
- Listini,
- ListiniArticolo,
- ListiniCliente,
- Sconti,
- ScontiCliente,
- Pagamenti,
- Parametri,
- Tabelle,
- Promozioni,
- PromoArticoli,
- PromoListini,
- PromoOmaggi,
- ClientiAgente,
- Scadenze,
- StatisticheVendita,
- ArticoliConPromo,
- OrdiniSenzaRighe,
- TopItem,
- TopCustomer,
- VOrdini,
- VRigheOrdine,
- VScadenze,
- ],
- )
- class AppDatabase extends _$AppDatabase {
- AppDatabase() : super(_createDatabase());
- static String? _dbDirPath;
- static QueryExecutor _createDatabase() {
- return createDb(_dbDirPath ?? '', AppConstants.kDbName);
- }
- static Future<void> ensureDatabaseReady() async {
- _dbDirPath = await ensureDbReady();
- }
- static Future<bool> isDbEmpty() async {
- return isDatabaseEmpty(_dbDirPath ?? '');
- }
- Future<void> _renameColumn(
- String table,
- String oldName,
- String newName,
- ) async {
- try {
- await customStatement(
- 'ALTER TABLE $table RENAME COLUMN $oldName TO $newName',
- );
- } catch (_) {
- // Column might already be renamed or not exist
- }
- }
- @override
- int get schemaVersion => 12;
- @override
- MigrationStrategy get migration => MigrationStrategy(
- onCreate: (m) async {
- await m.createAll();
- },
- onUpgrade: (m, from, to) async {
- if (from < 2) {
- await m.addColumn(
- statisticheVendita,
- statisticheVendita.codStatistiche,
- );
- }
- if (from < 3) {
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS ndx_ro_idordine ON Righe_ordine(idOrdine)',
- );
- }
- if (from < 4) {
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS NDX_FILIALE_REMOTO ON Filiali(idFilialeRemoto)',
- );
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS NDX_CLI_COD ON Clienti(codCliente)',
- );
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS NDX_CLI_REMOTO ON Clienti(idClienteRemoto)',
- );
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS NDX_idOrdine_SEDE ON Ordini(idOrdineSede)',
- );
- }
- if (from < 5) {
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS NDX_NUMERO_ORDINE ON Ordini(numeroOrdine)',
- );
- }
- if (from < 6) {
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS NDX_filiali_cliente ON Filiali(idCliente)',
- );
- }
- if (from < 7) {
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS ndx_stat_cliart ON Statistiche_vendita(idCliente, idArticolo)',
- );
- await customStatement(
- 'CREATE INDEX IF NOT EXISTS ndx_righeOrdine_promo ON Righe_ordine(idOrdine, rigaPromozione)',
- );
- }
- if (from < 8) {
- await customStatement('DROP VIEW IF EXISTS v_ordini');
- await customStatement('''
- CREATE VIEW v_ordini AS
- SELECT
- a.codAgente,
- c.codCliente,
- c.ragioneSociale,
- f.codFiliale,
- f.descrizione Filiale,
- CASE WHEN o.idFiliale IS NOT NULL THEN f.indirizzo ELSE c.indirizzo END AS indirizzo,
- CASE WHEN o.idFiliale IS NOT NULL THEN f.citta ELSE c.citta END AS citta,
- CASE WHEN o.idFiliale IS NOT NULL THEN f.provincia ELSE c.provincia END AS provincia,
- CASE WHEN o.idFiliale IS NOT NULL THEN f.cap ELSE c.cap END AS cap,
- o.*,
- (SELECT SUM(ro.totale) FROM Righe_ordine ro WHERE ro.idOrdine = o.idOrdine) AS totale
- FROM Ordini o
- JOIN Clienti c ON c.idCliente = o.idCliente
- LEFT JOIN Filiali f ON f.idFiliale = o.idFiliale
- JOIN Agenti a ON a.idAgente = o.idAgente
- ''');
- await customStatement('DROP VIEW IF EXISTS v_righe_ordine');
- await customStatement('''
- CREATE VIEW v_righe_ordine AS
- SELECT ro.*, a.codArticolo, a.descrizione, l.codListino, l.descrizione AS Listino
- FROM Righe_ordine ro
- JOIN Articoli a ON a.idArticolo = ro.idArticolo
- LEFT JOIN Listini l ON l.idListino = ro.idListino
- ''');
- }
- if (from < 9) {
- await m.addColumn(clienti, clienti.creditScoreColor);
- await m.addColumn(clienti, clienti.dataCreditScore);
- }
- if (from < 10) {
- // await m.addColumn(listini, listini.listinoAgente);
- }
- if (from < 11) {
- await customStatement('DROP VIEW IF EXISTS v_scadenze');
- await customStatement('''
- CREATE VIEW v_scadenze AS
- SELECT s.*, c.codCliente, c.ragioneSociale
- FROM Scadenze s
- LEFT JOIN Clienti c ON c.idCliente = s.idCliente
- ''');
- }
- if (from < 12) {
- await _renameColumn('Agenti', 'CodAgente', 'codAgente');
- await _renameColumn('Agenti', 'Pwd', 'pwd');
- await _renameColumn('Promozioni', 'TipoPromozione', 'tipoPromozione');
- await _renameColumn('Promozioni', 'Descrizione', 'descrizione');
- await _renameColumn('Promozioni', 'DataInizio', 'dataInizio');
- await _renameColumn('Promozioni', 'DataFine', 'dataFine');
- await _renameColumn('Promozioni', 'LimiteQta', 'limiteQta');
- await _renameColumn('Promozioni', 'QuantitaOmaggio', 'quantitaOmaggio');
- await _renameColumn('Promozioni', 'LimiteImporto', 'limiteImporto');
- await _renameColumn('Promozioni', 'Stato', 'stato');
- await _renameColumn('Promozioni', 'Priorita', 'priorita');
- await _renameColumn('PromoArticoli', 'QuantitaOmaggio', 'quantitaOmaggio');
- await _renameColumn('PromoOmaggi', 'Riga', 'riga');
- await _renameColumn('PromoOmaggi', 'Quantita', 'quantita');
- await _renameColumn('Listini_cliente', 'ValidoDa', 'validoDa');
- await _renameColumn('Listini_cliente', 'ValidoA', 'validoA');
- await _renameColumn('Listini_cliente', 'Prezzo', 'prezzo');
- await _renameColumn('Listini_cliente', 'Annullato', 'annullato');
- await _renameColumn('Clienti_Agente', 'Attivo', 'attivo');
- await _renameColumn('Clienti', 'partitaIVA', 'partitaIva');
- await _renameColumn('Clienti', 'Pod', 'pod');
- }
- },
- );
- }
|