229 lines
7.0 KiB
Dart
229 lines
7.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:get_storage/get_storage.dart';
|
|
import 'package:intl/intl.dart';
|
|
|
|
class HomeController extends GetxController {
|
|
final isloadingData = false.obs;
|
|
final box = GetStorage();
|
|
final listKantine = <dynamic>[].obs;
|
|
final newBelegName = '?'.obs;
|
|
final newBelegDate = '?'.obs;
|
|
final newBelegBetrag = '?'.obs;
|
|
@override
|
|
void onInit() async {
|
|
super.onInit();
|
|
await _loadFromNotionKantine();
|
|
// Initialize any necessary data or services here
|
|
}
|
|
|
|
@override
|
|
void onClose() {}
|
|
|
|
Future<void> _loadFromNotionKantine() async {
|
|
isloadingData(true);
|
|
var postUrl = box.read('BASEURL');
|
|
var baeraToken = box.read('TOKEN'); // baeraToken aus GetStorage lesen
|
|
var headers = Map<String, String>.from(box.read('HEADERS') ?? {});
|
|
headers['Authorization'] = 'Bearer $baeraToken';
|
|
var httpClient = GetHttpClient(timeout: const Duration(seconds: 20));
|
|
var response = await httpClient.post(postUrl, headers: headers);
|
|
if (response.isOk) {
|
|
// Parse the response data and update your UI accordingly
|
|
var data = response.body;
|
|
var allJsonDataDynamicList = (data['results']);
|
|
for (var item in allJsonDataDynamicList) {
|
|
Map<String, dynamic> properties =
|
|
item['properties'] as Map<String, dynamic>;
|
|
properties['id'] = item['id'];
|
|
listKantine.add(properties);
|
|
}
|
|
listKantine.removeWhere((element) => element['Gelöscht']['number'] == 1);
|
|
listKantine.sort((a, b) {
|
|
var dateA = DateTime.parse(a['Verkaufsdatum']['date']['start']);
|
|
var dateB = DateTime.parse(b['Verkaufsdatum']['date']['start']);
|
|
return dateB.compareTo(dateA); // Sort in descending order
|
|
});
|
|
} else {
|
|
// Handle error
|
|
print('Error: ${response.statusCode}');
|
|
}
|
|
isloadingData(false);
|
|
httpClient.close();
|
|
update();
|
|
}
|
|
|
|
Future<void> addBeleg() async {
|
|
var dateFormat = DateFormat('yyyy-MM-dd');
|
|
DateTime selectedDate = DateTime.now(); // Standardwert für das Datum
|
|
await Get.defaultDialog(
|
|
title: 'Beleg hinzufügen',
|
|
content: Column(
|
|
children: [
|
|
TextField(
|
|
decoration: InputDecoration(
|
|
labelText: 'Beleg Name',
|
|
border: OutlineInputBorder(),
|
|
),
|
|
onChanged: (value) {
|
|
newBelegName(value); // Beleg Name speichern
|
|
},
|
|
),
|
|
const SizedBox(height: 10),
|
|
TextButton(
|
|
onPressed: () async {
|
|
DateTime? pickedDate = await showDatePicker(
|
|
context: Get.context!,
|
|
initialDate: selectedDate,
|
|
firstDate: DateTime(2025),
|
|
lastDate: DateTime(2100),
|
|
);
|
|
if (pickedDate != null) {
|
|
selectedDate = pickedDate;
|
|
newBelegDate.value = dateFormat.format(
|
|
selectedDate,
|
|
); // Datum speichern
|
|
}
|
|
},
|
|
child: Obx(
|
|
() => Text(
|
|
'Datum auswählen: ${newBelegDate.value == '?' ? 'Kein Datum' : dateFormat.format(selectedDate)}',
|
|
style: TextStyle(
|
|
color: newBelegDate.value == '?' ? Colors.red : Colors.black,
|
|
fontSize: 20,
|
|
),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
),
|
|
),
|
|
TextField(
|
|
decoration: InputDecoration(
|
|
labelText: 'Beleg Betrag',
|
|
border: OutlineInputBorder(),
|
|
),
|
|
onChanged: (value) {
|
|
newBelegBetrag(value); // Beleg Betrag speichern
|
|
},
|
|
),
|
|
],
|
|
),
|
|
textConfirm: 'Hinzufügen',
|
|
textCancel: 'Abbrechen',
|
|
confirmTextColor: Colors.white,
|
|
cancelTextColor: Colors.red,
|
|
buttonColor: Colors.blue,
|
|
onCancel: () {
|
|
// Handle cancel action
|
|
Get.back();
|
|
},
|
|
onConfirm: () {
|
|
// Handle adding the receipt
|
|
print('Beleg Name: ${newBelegName.value}');
|
|
print('Beleg Datum: ${newBelegDate.value}');
|
|
print('Beleg Betrag: ${newBelegBetrag.value}');
|
|
Get.back();
|
|
},
|
|
);
|
|
update();
|
|
_saveData();
|
|
}
|
|
|
|
Map<String, dynamic> currentBodyItem(
|
|
String currentDate,
|
|
String preis,
|
|
String belegName,
|
|
String dbId,
|
|
) {
|
|
return {
|
|
'parent': {'database_id': dbId},
|
|
'properties': {
|
|
'Verkaufsdatum': {
|
|
'date': {'start': currentDate},
|
|
},
|
|
'Gelöscht': {'number': 0},
|
|
'Betrag': {'number': double.parse(preis)},
|
|
'BelegName': {
|
|
'id': 'title',
|
|
'type': 'title',
|
|
'title': [
|
|
{
|
|
'type': 'text',
|
|
'text': {'content': belegName},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
};
|
|
}
|
|
|
|
Future<void> _saveData() async {
|
|
isloadingData(true);
|
|
var dbId = 'd036c0bc06304126aedaa8c5ad92b406';
|
|
var baeraToken = box.read('TOKEN');
|
|
var saveUrl = 'https://api.notion.com/v1/pages/';
|
|
var headers = Map<String, String>.from(box.read('HEADERS') ?? {});
|
|
headers['Authorization'] = 'Bearer $baeraToken';
|
|
var kantinData = currentBodyItem(
|
|
newBelegDate.value,
|
|
newBelegBetrag.value,
|
|
newBelegName.value,
|
|
dbId,
|
|
);
|
|
var httpClient = GetHttpClient(timeout: const Duration(seconds: 20));
|
|
await httpClient
|
|
.post(saveUrl, headers: headers, body: kantinData)
|
|
.then((response) {
|
|
if (response.isOk) {
|
|
print('Beleg erfolgreich hinzugefügt');
|
|
_loadFromNotionKantine();
|
|
} else {
|
|
print('Fehler beim Hinzufügen des Belegs: ${response.statusCode}');
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
print('Fehler: $error');
|
|
})
|
|
.whenComplete(() {
|
|
httpClient.close();
|
|
});
|
|
newBelegName.value = '?';
|
|
newBelegDate.value = '?';
|
|
newBelegBetrag.value = '?';
|
|
isloadingData(false);
|
|
update();
|
|
}
|
|
|
|
void deleteBeleg(stringItem, index) {
|
|
isloadingData(true);
|
|
print(stringItem);
|
|
var baeraToken = box.read('TOKEN');
|
|
var delUrl = 'https://api.notion.com/v1/pages/$stringItem/';
|
|
var headers = Map<String, String>.from(box.read('HEADERS') ?? {});
|
|
headers['Authorization'] = 'Bearer $baeraToken';
|
|
var httpClient = GetHttpClient(timeout: const Duration(seconds: 20));
|
|
var updateMap = {
|
|
'properties': {
|
|
'Gelöscht': {'number': 1},
|
|
},
|
|
};
|
|
httpClient
|
|
.patch(delUrl, headers: headers, body: updateMap)
|
|
.then((response) {
|
|
if (response.isOk) {
|
|
print('Beleg erfolgreich gelöscht');
|
|
} else {
|
|
print('Fehler beim Löschen des Belegs: ${response.statusCode}');
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
print('Fehler: $error');
|
|
})
|
|
.whenComplete(() {
|
|
httpClient.close();
|
|
});
|
|
listKantine.removeAt(index);
|
|
isloadingData(false);
|
|
update();
|
|
}
|
|
}
|