finish save data
This commit is contained in:
228
lib/controller/home_controller.dart
Normal file
228
lib/controller/home_controller.dart
Normal file
@@ -0,0 +1,228 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user