Files
fforte/lib/methods/excursion_db_helper.dart

168 lines
6.1 KiB
Dart

import 'package:fforte/interfaces/i_db.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'dart:io' as io;
import 'package:path/path.dart';
// * Gives the complete functionality for the databases
// ! functions may not be named complete correctly
class ExcursionDBHelper implements IDb{
static Database? _excursionDB;
// checks if the databses are existing and creates them with the initPlaceDatabase function if not
@override
Future<Database> get dB async {
if (_excursionDB != null) {
return _excursionDB!;
}
_excursionDB = await initDatabases();
return _excursionDB!;
}
// Creates the databases with help from the _onCreateExcursion function
@override
initDatabases() async {
io.Directory documentsDirectory = await getApplicationCacheDirectory();
String path = join(documentsDirectory.path, 'excursionDB.db');
var excursionDB =
await openDatabase(path, version: 1, onCreate: onCreateDatabases);
return excursionDB;
}
// The function that helps
// TODO Change to right cols
@override
onCreateDatabases(Database excursionDB, int version) async {
await excursionDB.execute(
'CREATE TABLE excursion (ID INTEGER PRIMARY KEY AUTOINCREMENT, Datum TEXT, Rudel TEXT, Teilnehmer TEXT, Jahr TEXT, Mjahr TEXT, Monat INTEGER, Saison TEXT, Dauer TEXT, BLjahr TEXT, BLand, TEXT, Lkr TEXT, BeiOrt TEXT, Wetter TEXT, Temperat TEXT, RegenVor TEXT, KmAuto TEXT, KmFuss TEXT, KmRad TEXT, KmTotal TEXT, KmAuProf TEXT, KmFuProz TEXT, KmRaProz TEXT, SpGut TEXT, SpSchlecht TEXT, SpurFund TEXT, SpurLang TEXT, SpurTiere Text, SpSicher TEXT, WelpenSp TEXT, WelpenAnz TEXT, WpSicher TEXT, LosungGes TEXT, LosunAnz TEXT, LosunGen TEXT, UrinAnz TEXT, UrinGen TEXT, OestrAnz TEXT, OestrGen TEXT, HaarAnz TEXT, HaarGen TEXT, LosungKm TEXT, GenetiKm TEXT, Hinweise TEXT, Bemerk TEXT, IntKomm TEXT, BimaNr TEXT, BimaName TEXT, BimaNutzer TEXT, BimaAGV TEXT, FallNum INTEGER, MHund TEXT, MLeine TEXT, LogDat TEXT, HinweiseSonstiges TEXT)');
await excursionDB.execute(
'CREATE TABLE excursionTemplates (ID INTEGER PRIMARY KEY AUTOINCREMENT, Datum TEXT, Rudel TEXT, Teilnehmer TEXT, Jahr TEXT, Mjahr TEXT, Monat INTEGER, Saison TEXT, Dauer TEXT, BLjahr TEXT, BLand, TEXT, Lkr TEXT, BeiOrt TEXT, Wetter TEXT, Temperat TEXT, RegenVor TEXT, KmAuto TEXT, KmFuss TEXT, KmRad TEXT, KmTotal TEXT, KmAuProf TEXT, KmFuProz TEXT, KmRaProz TEXT, SpGut TEXT, SpSchlecht TEXT, SpurFund TEXT, SpurLang TEXT, SpurTiere Text, SpSicher TEXT, WelpenSp TEXT, WelpenAnz TEXT, WpSicher TEXT, LosungGes TEXT, LosunAnz TEXT, LosunGen TEXT, UrinAnz TEXT, UrinGen TEXT, OestrAnz TEXT, OestrGen TEXT, HaarAnz TEXT, HaarGen TEXT, LosungKm TEXT, GenetiKm TEXT, Hinweise TEXT, Bemerk TEXT, IntKomm TEXT, BimaNr TEXT, BimaName TEXT, BimaNutzer TEXT, BimaAGV TEXT, FallNum INTEGER, MHund TEXT, MLeine TEXT, LogDat TEXT, HinweiseSonstiges TEXT)');
}
// Function to add a finished entry and return its ID
@override
Future<int> addMainEntry(Map<String, String> excursion) async {
var excursionDBClient = await dB;
final existingID = await excursionDBClient.query(
'excursion',
where: 'ID = ?',
whereArgs: [excursion['ID']],
);
if (existingID.isNotEmpty) {
updateMainEntry(excursion);
return existingID.first['ID'] as int; // Return existing ID
}
int id = await excursionDBClient.insert(
'excursion',
excursion,
//conflictAlgorithm: ConflictAlgorithm.replace,
);
return id; // Return the ID of the newly inserted entry
}
@override
Future<void> updateMainEntry(Map<String, String> excursion) async {
var excursionDBClient = await dB;
await excursionDBClient
.update('excursion', excursion, where: "ID = ?", whereArgs: [excursion['ID']]);
}
// function to update the sent value
@override
Future<void> updateSent(int id) async {
var excursionDBClient = await dB;
await excursionDBClient.update('excursion', {'Sent': 1},
where: 'ID = ?', whereArgs: [id]);
}
// same thing as before but with templatews
@override
Future<void> addTemplate(Map<String, String> templates) async {
var excursionDBClient = await dB;
// final existingCID = await excursionDBClient.query(
// 'excursionTemplates',
// where: 'ID = ?',
// whereArgs: [templates['ID']],
// );
// if (existingCID.isNotEmpty) {
// return;
// }
await excursionDBClient.insert(
'excursionTemplates',
templates,
// conflictAlgorithm: ConflictAlgorithm.replace,
);
}
// Updates a existing template
@override
Future<void> updateTemplate(Map<String, String> template) async {
var excursionDBClient = await dB;
await excursionDBClient.update(
'excursionTemplates',
template,
where: "ID = ?",
whereArgs: [template['ID']],
);
}
// get the finished entries from db
@override
Future<List<Map<String, dynamic>>> getAllMainEntries() async {
var excursionDBClient = await dB;
return await excursionDBClient.query('excursion');
}
// get the finished templates from db
@override
Future<List<Map<String, dynamic>>> getAllTemplates() async {
var excursionDBClient = await dB;
return await excursionDBClient.query('excursionTemplates');
}
// deletes all finished entries from the db LOCALLY
@override
Future<void> deleteAllMainEntries() async {
var excursionDBClient = await dB;
await excursionDBClient.delete('excursion');
}
// deletes all templates from the db LOCALLY
@override
Future<void> deleteAllTemplates() async {
var excursionDBClient = await dB;
await excursionDBClient.delete('excursionTemplates');
}
// delete specific template
@override
Future<void> deleteTemplateById(String id) async {
var excursionDBClient = await dB;
await excursionDBClient.delete(
'excursionTemplates',
where: 'ID = ?',
whereArgs: [id],
);
}
// delete specific excursion
@override
Future<void> deleteMainEntryById(String id) async {
var excursionDBClient = await dB;
await excursionDBClient.delete(
'excursion',
where: 'ID = ?',
whereArgs: [id],
);
}
}