Files
ertl_filament_verwaltung/lib/controller/bauteil_auswertung_controller.dart
T
2026-10-29 15:03:48 +01:00

76 lines
2.4 KiB
Dart

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<GetStorageService>();
final bauteile = <BauteilModel>[].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<BauteilAuswertungsGruppe> get gruppen {
final auswahl = zeitraum.value;
final gruppiert = <DateTime, List<BauteilModel>>{};
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();
}
}