import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import '../helper/storage_keys.dart'; import '../models/bauteil_auswertung_model.dart'; import '../models/bauteil_model.dart'; import '../services/get_storage_services.dart'; class BauteilAuswertungController extends GetxController { final storage = Get.find(); final bauteile = [].obs; final zeitraum = BauteilZeitraum.monat.obs; final scrollController = ScrollController(); @override void onInit() { super.onInit(); final entries = storage .getModelList(StorageKeys.bauteile) .map(BauteilModel.fromJson) .toList(); entries.sort((a, b) { final datum = b.erstelltAm.compareTo(a.erstelltAm); return datum == 0 ? a.bauteilId.compareTo(b.bauteilId) : datum; }); bauteile.assignAll(entries); } double get gesamtsumme => BauteilAuswertungsGruppe.summeFuer(bauteile); int get ohnePreis => bauteile .where((item) => !BauteilAuswertungsGruppe.preisBekannt(item)) .length; List get gruppen { final auswahl = zeitraum.value; final gruppiert = >{}; for (final bauteil in bauteile) { final datum = bauteil.erstelltAm.toLocal(); final beginn = switch (auswahl) { BauteilZeitraum.jahr => DateTime(datum.year), BauteilZeitraum.monat => DateTime(datum.year, datum.month), BauteilZeitraum.tag => DateTime(datum.year, datum.month, datum.day), }; gruppiert.putIfAbsent(beginn, () => []).add(bauteil); } final zeitpunkte = gruppiert.keys.toList()..sort((a, b) => b.compareTo(a)); return zeitpunkte .map( (beginn) => BauteilAuswertungsGruppe( beginn: beginn, bauteile: List.unmodifiable(gruppiert[beginn]!), ), ) .toList(); } String gruppenTitel(DateTime beginn) => switch (zeitraum.value) { BauteilZeitraum.jahr => 'Jahr ${beginn.year}', BauteilZeitraum.monat => 'Monat ${DateFormat('MM.yyyy').format(beginn)}', BauteilZeitraum.tag => DateFormat('dd.MM.yyyy').format(beginn), }; void waehleZeitraum(BauteilZeitraum auswahl) { if (auswahl == zeitraum.value) return; if (scrollController.hasClients) scrollController.jumpTo(0); zeitraum.value = auswahl; } @override void onClose() { scrollController.dispose(); super.onClose(); } }