Files
ertl_filament_verwaltung/lib/controller/anwendung_controller.dart
T
2026-10-28 08:10:55 +01:00

99 lines
3.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:uuid/uuid.dart';
import '../helper/input_validators.dart';
import '../models/anwendung_model.dart';
import '../models/kauf_filament_model.dart';
import '../services/get_storage_services.dart';
import 'home_controller.dart';
class AnwendungController extends GetxController {
AnwendungController({required this.filamentId});
static const storageKey = 'filament_anwendungen';
final String filamentId;
final storage = Get.find<GetStorageService>();
final formKey = GlobalKey<FormState>();
final druckbettController = TextEditingController();
final druckController = TextEditingController();
final bauraumController = TextEditingController();
final sonstigesController = TextEditingController();
final bauraumGeschlossen = false.obs;
final isSaving = false.obs;
final message = RxnString();
final hasError = false.obs;
final filament = Rxn<KaufFilamentModel>();
final anwendungen = <AnwendungModel>[].obs;
@override
void onInit() {
super.onInit();
final filamente = storage
.getModelList(HomeController.storageKey)
.map(KaufFilamentModel.fromJson)
.toList();
filament.value = filamente.firstWhereOrNull(
(item) => item.filamentId == filamentId,
);
final profiles =
storage
.getModelList(storageKey)
.map(AnwendungModel.fromJson)
.where((item) => item.filamentId == filamentId)
.toList()
..sort((a, b) => b.erstelltAm.compareTo(a.erstelltAm));
if (profiles.isNotEmpty) {
final profile = profiles.first;
anwendungen.assignAll([profile]);
druckbettController.text = profile.druckbettTemperatur.toString();
druckController.text = profile.druckTemperatur.toString();
bauraumController.text = profile.bauraumTemperatur?.toString() ?? '';
sonstigesController.text = profile.sonstiges;
bauraumGeschlossen.value = profile.bauraumGeschlossen;
}
}
Future<void> saveAnwendung() async {
if (isSaving.value || filament.value == null) return;
if (!(formKey.currentState?.validate() ?? false)) return;
isSaving.value = true;
message.value = null;
try {
final existing = anwendungen.firstOrNull;
final entry = AnwendungModel(
anwendungId: existing?.anwendungId ?? const Uuid().v4(),
filamentId: filamentId,
erstelltAm: existing?.erstelltAm ?? DateTime.now(),
druckbettTemperatur: InputValidators.number(druckbettController.text)!,
druckTemperatur: InputValidators.number(druckController.text)!,
bauraumGeschlossen: bauraumGeschlossen.value,
bauraumTemperatur: InputValidators.number(bauraumController.text),
sonstiges: sonstigesController.text.trim(),
);
final entries = storage.getModelList(storageKey);
await storage.saveModelList(storageKey, [
...entries.where((item) => item['filamentId'] != filamentId),
entry.toJson(),
]);
anwendungen.assignAll([entry]);
hasError.value = false;
message.value = 'Verarbeitungsprofil gespeichert.';
} catch (_) {
hasError.value = true;
message.value = 'Speichern fehlgeschlagen. Bitte erneut versuchen.';
} finally {
isSaving.value = false;
}
}
@override
void onClose() {
druckbettController.dispose();
druckController.dispose();
bauraumController.dispose();
sonstigesController.dispose();
super.onClose();
}
}