improved databases

This commit is contained in:
nico
2024-05-01 01:44:12 +02:00
parent 0840f21361
commit 4ffe64077d
6 changed files with 50 additions and 144 deletions

View File

@@ -1,14 +1,9 @@
todo:
Primary key(s) ändern
ausvon und ausbis fixen (falsches datum übergeben (20000-01-01))
zurückfeld in datenansicht
maybe auch vorschläge aus templates in dropdown menüs anzeigen
im englischen abändern
einzelnen eintrag löschen
alle datumsfelder in 1 klasse und überarbeiten dass entfernen funktioniert und knöpfe bissl breiter
sandorte ansehen in karte (extra tab)
Platzierung garnix als standart aber pflichtfeld
fix send file to server
keine ahnung obs funktioniert:
TEST SEND FILE TO SERVER FUNCTION
@@ -16,6 +11,10 @@ eintrg in db wenn http response (in sent column)
not to do:
zurückfeld in datenansicht
maybe auch vorschläge aus templates in dropdown menüs anzeigen
ausvon und ausbis fixen (falsches datum übergeben (20000-01-01))
Primary key(s) ändern
redesign datenansicht
möglichkeit einfügen um nicht gesendete einträge zu senden
save option einfügen nur zum speichern

View File

@@ -7,7 +7,6 @@ import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:geolocator/geolocator.dart';
import 'package:intl/intl.dart';
import 'package:latlong2/latlong.dart';
import 'package:animations/animations.dart';
import 'package:dio/dio.dart';
@@ -29,7 +28,7 @@ class _AddCamMainState extends State<AddCamMain> {
int currentStep = 0;
// bool isTemplate = false;
TextEditingController id = TextEditingController();
TextEditingController cid = TextEditingController();
TextEditingController rudelC = TextEditingController();
TextEditingController adresse1C = TextEditingController();
TextEditingController adresse2C = TextEditingController();
@@ -78,7 +77,8 @@ class _AddCamMainState extends State<AddCamMain> {
Map<String, dynamic> getPlace() {
Map<String, dynamic> place = {
'CID': id.text,
'ID': widget.existingData?['ID'],
'CID': cid.text,
'Rudel': rudelC.text,
'Datum': datum.toString().split(" ").first,
'Adresse1': adresse1C.text,
@@ -169,7 +169,7 @@ class _AddCamMainState extends State<AddCamMain> {
// If a template is edited this fills in the existing values
if (widget.isTemplate || widget.isFinished && widget.existingData != null) {
id.text = widget.existingData!['CID'];
cid.text = widget.existingData!['CID'];
rudelC.text = widget.existingData!['Rudel'];
adresse1C.text = widget.existingData!['Adresse1'];
adresse2C.text = widget.existingData!['Adresse2'];
@@ -186,9 +186,9 @@ class _AddCamMainState extends State<AddCamMain> {
selectedPlatzung = widget.existingData!['Platzung'];
kSchloNrC.text = widget.existingData!['KSchloNr'];
selectedBearsafe = widget.existingData!['Bearsafe'];
datum = widget.existingData!['Datum'];
kontDat = widget.existingData!['KontDat'];
abbauDat = widget.existingData!['AbbauDat'];
datum = DateTime.parse(widget.existingData!['Datum']);
kontDat = DateTime.parse(widget.existingData!['KontDat']);
abbauDat = widget.existingData!['AbbauDat'] == "" ? null : DateTime.parse(widget.existingData!['AbbauDat']);
auftragC.text = widget.existingData!['Auftrag'];
kontAbspC.text = widget.existingData!['KontAbsp'];
sonstBemC.text = widget.existingData!['SonstBem'];
@@ -198,7 +198,7 @@ class _AddCamMainState extends State<AddCamMain> {
standortC.text = widget.existingData!['Standort'];
kTage1C.text = widget.existingData!['KTage1'].toString();
kTage2C.text = widget.existingData!['KTage2'].toString();
protoAm = widget.existingData!['ProtoAm'];
protoAm = DateTime.parse(widget.existingData!['ProtoAm']);
intKommC.text = widget.existingData!['IntKomm'];
betreuungC.text = widget.existingData!['Betreuung'];
}
@@ -367,7 +367,7 @@ class _AddCamMainState extends State<AddCamMain> {
List<String> emptyFields = <String>[];
Map<String, TextEditingController> fields = {
'CID': id,
'CID': cid,
'Rudel': rudelC,
'Adresse1': adresse1C,
'BLand': bLandC,
@@ -419,7 +419,7 @@ class _AddCamMainState extends State<AddCamMain> {
await placeDB.addPlace(place);
if (widget.isTemplate) {
await placeDB.deleteTemplate(id.text);
await placeDB.deleteTemplate(cid.text);
}
}
@@ -485,7 +485,7 @@ class _AddCamMainState extends State<AddCamMain> {
height: 20,
),
VarTextField(
textController: id,
textController: cid,
localization: AppLocalizations.of(context)!.camLink,
dbName: "CID",
required: true),

View File

@@ -30,9 +30,9 @@ class DBHelper {
// The function that helps
_onCreatePlace(Database placeDB, int version) async {
await placeDB.execute(
'CREATE TABLE place (CID TEXT PRIMARY KEY UNIQUE NOT NULL, Standort TEXT, Rudel TEXT, Datum DATE, Adresse1 TEXT, Adresse2 TEXT, Adresse3 TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, Betreuung TEXT, AbbauDat DATE, Auftrag TEXT, KontAbsp TEXT, SonstBem TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8), Sent INTEGER DEFAULT 0)');
'CREATE TABLE place (ID INTEGER PRIMARY KEY AUTOINCREMENT, CID TEXT, Standort TEXT, Rudel TEXT, Datum DATE, Adresse1 TEXT, Adresse2 TEXT, Adresse3 TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, Betreuung TEXT, AbbauDat DATE, Auftrag TEXT, KontAbsp TEXT, SonstBem TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8), Sent INTEGER DEFAULT 0)');
await placeDB.execute(
'CREATE TABLE templates (CID TEXT PRIMARY KEY UNIQUE NOT NULL, Standort TEXT, Rudel TEXT, Datum DATE, Adresse1 TEXT, Adresse2 TEXT, Adresse3 TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, Betreuung TEXT, AbbauDat DATE, Auftrag TEXT, KontAbsp TEXT, SonstBem TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8))');
'CREATE TABLE templates (ID INTEGER PRIMARY KEY AUTOINCREMENT, CID TEXT, Standort TEXT, Rudel TEXT, Datum DATE, Adresse1 TEXT, Adresse2 TEXT, Adresse3 TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, Betreuung TEXT, AbbauDat DATE, Auftrag TEXT, KontAbsp TEXT, SonstBem TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8))');
}
// Function to add a finished entrie
@@ -40,14 +40,14 @@ class DBHelper {
var placeDBClient = await placeDB;
// gets an camid if it already exists
final existingCID = await placeDBClient.query(
final existingID = await placeDBClient.query(
'place',
where: 'CID = ?',
whereArgs: [place['CID']],
where: 'ID = ?',
whereArgs: [place['ID']],
);
// checks if the camid var from before is empty to avoid double entries
if (existingCID.isNotEmpty) {
if (existingID.isNotEmpty) {
updatePlace(place);
return;
}
@@ -68,8 +68,8 @@ class DBHelper {
await placeDBClient.update(
'place',
place,
where: "CID = ?",
whereArgs: [place['CID']]
where: "ID = ?",
whereArgs: [place['ID']]
);
}
@@ -78,7 +78,7 @@ class DBHelper {
var placeDBClient = await placeDB;
placeDBClient.update('place', true as Map<String, Object?>,
where: 'CID = ?', whereArgs: ['CID']);
where: 'ID = ?', whereArgs: ['ID']);
}
// same thing as before but with templatews
@@ -87,8 +87,8 @@ class DBHelper {
final existingCID = await placeDBClient.query(
'templates',
where: 'CID = ?',
whereArgs: [templates['CID']],
where: 'ID = ?',
whereArgs: [templates['ID']],
);
if (existingCID.isNotEmpty) {
return;
@@ -108,8 +108,8 @@ class DBHelper {
await placeDBClient.update(
'templates',
template,
where: "CID = ?",
whereArgs: [template['CID']],
where: "ID = ?",
whereArgs: [template['ID']],
);
}
@@ -138,22 +138,22 @@ class DBHelper {
}
// delete specific template
Future<void> deleteTemplate(String cid) async {
Future<void> deleteTemplate(String id) async {
var placeDBClient = await placeDB;
await placeDBClient.delete(
'templates',
where: 'CID = ?',
whereArgs: [cid],
where: 'ID = ?',
whereArgs: [id],
);
}
// delete specific place
Future<void> deletePlace(String cid) async {
Future<void> deletePlace(String id) async {
var placeDBClient = await placeDB;
await placeDBClient.delete(
'place',
where: 'CID = ?',
whereArgs: [cid],
where: 'ID = ?',
whereArgs: [id],
);
}
}

View File

@@ -159,115 +159,13 @@ class _ViewCamsState extends State<ViewCams> {
onChanged: null,
),
onTap: () async {
Navigator.push(
context,
MaterialPageRoute(builder: (context) =>
AddCamMain(
isFinished: true,
existingData: place,
)
)
);
/* showPopupCard(
context: context,
builder: (context) {
return PopupCard(
color: Theme.of(context).cardColor,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(12)),
child: Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(12),
color:
Theme.of(context).cardColor,
boxShadow: [
BoxShadow(
color: Theme.of(context)
.primaryColor,
spreadRadius: 7,
blurRadius: 7,
offset:
const Offset(0, 3))
]),
child: Padding(
padding:
const EdgeInsets.all(8.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'${AppLocalizations.of(context)!.date}: ${place['Datum']}'),
Text(
'${AppLocalizations.of(context)!.rudel}: ${place['Rudel']}'),
Text(
'${AppLocalizations.of(context)!.fftyp}: ${place['Datum']}'),
Text(
'${AppLocalizations.of(context)!.bearsafe}: ${place['Bearsafe']}'),
Text(
'${AppLocalizations.of(context)!.status}: ${place['Status']}'),
Text(
'${AppLocalizations.of(context)!.sttyp}: ${place['STTyp']}'),
Text(
'${AppLocalizations.of(context)!.foto}/${AppLocalizations.of(context)!.film}: ${place['FotoFilm']}'),
Text(
'${AppLocalizations.of(context)!.kschlonr}: ${place['KSchloNr']}'),
Text(
'${AppLocalizations.of(context)!.ktage1}: ${place['KTage1']}'),
Text(
'${AppLocalizations.of(context)!.ktage2}: ${place['KTage2']}'),
Text(
'${AppLocalizations.of(context)!.pickkontdat}: ${place['KontDat']}'),
Text(
'${AppLocalizations.of(context)!.pickabbaudat}: ${place['AbbauDat']}'),
Text(
'${AppLocalizations.of(context)!.sommerzeit}: ${place['MEZ']}'),
Text(
'${AppLocalizations.of(context)!.betreuung}: ${place['Betreuung']}'),
Text(
'${AppLocalizations.of(context)!.location}: ${place['Standort']}'),
Text(
'${AppLocalizations.of(context)!.adresse3}: ${place['Adresse3']}'),
Text(
'${AppLocalizations.of(context)!.bland}: ${place['BLand']}'),
Text(
'${AppLocalizations.of(context)!.lkr}: ${place['Lkr']}'),
Text(
'${AppLocalizations.of(context)!.beiort}: ${place['BeiOrt']}'),
Text(
'${AppLocalizations.of(context)!.platzung}: ${place['Platzung']}'),
Text(
'${AppLocalizations.of(context)!.altstort}: ${place['AltStOrt']}'),
Text(
'${AppLocalizations.of(context)!.adresse1}: ${place['Adresse1']}'),
Text(
'${AppLocalizations.of(context)!.adresse2}: ${place['Adresse2']}'),
Text(
'${AppLocalizations.of(context)!.auftrag}: ${place['Auftrag']}'),
Text(
'${AppLocalizations.of(context)!.kontabsp}: ${place['KontAbsp']}'),
Text(
'${AppLocalizations.of(context)!.sonstbemerkungen}: ${place['SonstBem']}'),
Text(
'${AppLocalizations.of(context)!.fkontakt1}: ${place['FKontakt1']}'),
Text(
'${AppLocalizations.of(context)!.fkontakt2}: ${place['FKontakt2']}'),
Text(
'${AppLocalizations.of(context)!.fkontakt3}: ${place['FKontakt3']}'),
Text(
'${AppLocalizations.of(context)!.intkomm}: ${place['IntKomm']}'),
],
),
),
),
),
);
}); */
context,
MaterialPageRoute(
builder: (context) => AddCamMain(
isFinished: true,
existingData: place,
)));
},
);
},

View File

@@ -187,6 +187,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.1.2"
flutter_slidable:
dependency: "direct main"
description:
name: flutter_slidable
sha256: "673403d2eeef1f9e8483bd6d8d92aae73b1d8bd71f382bc3930f699c731bc27c"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
flutter_test:
dependency: "direct dev"
description: flutter

View File

@@ -49,6 +49,7 @@ dependencies:
http: ^1.2.1
dio: ^5.4.1
geocoding: ^3.0.0
flutter_slidable: ^3.1.0
dev_dependencies:
flutter_lints: ^3.0.1