76 lines
2.4 KiB
Dart
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();
|
|
}
|
|
}
|