Files
Handwerks_app/services/workflow_metrics_service.dart
JUSN 9ddce354c0 Feature
ein paar feature aber datenbank macht probleme wenn man aufträge speichern möchge
2026-04-05 12:47:57 +02:00

83 lines
2.6 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}