ein paar feature aber datenbank macht probleme wenn man aufträge speichern möchge
This commit is contained in:
2026-04-05 12:47:57 +02:00
parent e1d4bb7edf
commit 9ddce354c0
32 changed files with 3931 additions and 612 deletions

View File

@@ -0,0 +1,82 @@
import 'package:shared_preferences/shared_preferences.dart';
import '../models/dokument_typ.dart';
/// Lokale Kennzahlen (keine Cloud) Fokus: PDFs & Dokumenttypen.
class WorkflowMetricsService {
WorkflowMetricsService._();
static const _kPdfTotal = 'hp_metrics_pdf_total';
static const _kPdfWeek = 'hp_metrics_pdf_week';
static const _kPdfWeekId = 'hp_metrics_pdf_week_id';
static const _kLastPdfAt = 'hp_metrics_last_pdf_at';
static const _kPrefixDoc = 'hp_metrics_doc_';
static DateTime _montagNullUhr(DateTime d) {
final t = DateTime(d.year, d.month, d.day);
return t.subtract(Duration(days: t.weekday - DateTime.monday));
}
static int _kalenderWocheSchluessel(DateTime d) {
final m = _montagNullUhr(d);
return m.year * 10000 + m.month * 100 + m.day;
}
static Future<void> recordPdfExported() async {
final p = await SharedPreferences.getInstance();
final now = DateTime.now();
final wid = _kalenderWocheSchluessel(now);
final stored = p.getInt(_kPdfWeekId);
var week = p.getInt(_kPdfWeek) ?? 0;
if (stored != wid) {
week = 0;
await p.setInt(_kPdfWeekId, wid);
}
week += 1;
final total = (p.getInt(_kPdfTotal) ?? 0) + 1;
await p.setInt(_kPdfWeek, week);
await p.setInt(_kPdfTotal, total);
await p.setString(_kLastPdfAt, now.toIso8601String());
}
static Future<void> recordDokumentGespeichert(DokumentTyp typ) async {
final p = await SharedPreferences.getInstance();
final k = '$_kPrefixDoc${typ.storageValue}';
await p.setInt(k, (p.getInt(k) ?? 0) + 1);
}
static Future<WorkflowMetricsSnapshot> load() async {
final p = await SharedPreferences.getInstance();
final wid = _kalenderWocheSchluessel(DateTime.now());
final stored = p.getInt(_kPdfWeekId);
final week = (stored == wid) ? (p.getInt(_kPdfWeek) ?? 0) : 0;
final total = p.getInt(_kPdfTotal) ?? 0;
final last = DateTime.tryParse(p.getString(_kLastPdfAt) ?? '');
final byDoc = <String, int>{};
for (final t in DokumentTyp.values) {
final k = '$_kPrefixDoc${t.storageValue}';
final n = p.getInt(k);
if (n != null && n > 0) byDoc[t.storageValue] = n;
}
return WorkflowMetricsSnapshot(
pdfThisCalendarWeek: week,
pdfAllTime: total,
lastPdfAt: last,
savesByDokumentTyp: byDoc,
);
}
}
class WorkflowMetricsSnapshot {
WorkflowMetricsSnapshot({
required this.pdfThisCalendarWeek,
required this.pdfAllTime,
required this.lastPdfAt,
required this.savesByDokumentTyp,
});
final int pdfThisCalendarWeek;
final int pdfAllTime;
final DateTime? lastPdfAt;
final Map<String, int> savesByDokumentTyp;
}