Feature
ein paar feature aber datenbank macht probleme wenn man aufträge speichern möchge
This commit is contained in:
82
services/workflow_metrics_service.dart
Normal file
82
services/workflow_metrics_service.dart
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user