add two views

This commit is contained in:
atseirjo
2026-10-27 15:00:16 +01:00
parent 864da57537
commit 07a1bb02fd
42 changed files with 3582 additions and 346 deletions
+43
View File
@@ -0,0 +1,43 @@
class AnwendungModel {
final String anwendungId;
final String filamentId;
final DateTime erstelltAm;
final double druckbettTemperatur;
final double druckTemperatur;
final bool bauraumGeschlossen;
final double? bauraumTemperatur;
final String sonstiges;
const AnwendungModel({
required this.anwendungId,
required this.filamentId,
required this.erstelltAm,
required this.druckbettTemperatur,
required this.druckTemperatur,
required this.bauraumGeschlossen,
this.bauraumTemperatur,
this.sonstiges = '',
});
Map<String, dynamic> toJson() => {
'anwendungId': anwendungId,
'filamentId': filamentId,
'erstelltAm': erstelltAm.toIso8601String(),
'druckbettTemperatur': druckbettTemperatur,
'druckTemperatur': druckTemperatur,
'bauraumGeschlossen': bauraumGeschlossen,
'bauraumTemperatur': bauraumTemperatur,
'sonstiges': sonstiges,
};
factory AnwendungModel.fromJson(Map<String, dynamic> json) => AnwendungModel(
anwendungId: json['anwendungId'] as String,
filamentId: json['filamentId'] as String,
erstelltAm: DateTime.parse(json['erstelltAm'] as String),
druckbettTemperatur: (json['druckbettTemperatur'] as num).toDouble(),
druckTemperatur: (json['druckTemperatur'] as num).toDouble(),
bauraumGeschlossen: json['bauraumGeschlossen'] as bool,
bauraumTemperatur: (json['bauraumTemperatur'] as num?)?.toDouble(),
sonstiges: json['sonstiges'] as String? ?? '',
);
}
+107
View File
@@ -0,0 +1,107 @@
import 'dart:convert';
import 'dart:typed_data';
class BauteilFilamentModel {
final String filamentId;
final String? anwendungId;
final double verbrauchGramm;
const BauteilFilamentModel({
required this.filamentId,
this.anwendungId,
this.verbrauchGramm = 0,
});
Map<String, dynamic> toJson() => {
'filamentId': filamentId,
'anwendungId': anwendungId,
'verbrauchGramm': verbrauchGramm,
};
factory BauteilFilamentModel.fromJson(Map<String, dynamic> json) =>
BauteilFilamentModel(
filamentId: json['filamentId'] as String,
anwendungId: json['anwendungId'] as String?,
verbrauchGramm: (json['verbrauchGramm'] as num?)?.toDouble() ?? 0,
);
}
class BauteilModel {
final String bauteilId;
final DateTime erstelltAm;
final String name;
final String verwendung;
final int druckdauerMinuten;
final double gewichtGramm;
final double abfallGramm;
final List<BauteilFilamentModel> filamente;
final String? fotoBase64;
const BauteilModel({
required this.bauteilId,
required this.erstelltAm,
required this.name,
required this.verwendung,
required this.druckdauerMinuten,
required this.gewichtGramm,
required this.abfallGramm,
required this.filamente,
this.fotoBase64,
});
double get gesamtverbrauchGramm => gewichtGramm + abfallGramm;
Uint8List? get fotoBytes {
if (fotoBase64 == null) return null;
try {
return base64Decode(fotoBase64!);
} on FormatException {
return null;
}
}
BauteilModel copyWith({
required String bauteilId,
required DateTime erstelltAm,
}) => BauteilModel(
bauteilId: bauteilId,
erstelltAm: erstelltAm,
name: name,
verwendung: verwendung,
druckdauerMinuten: druckdauerMinuten,
gewichtGramm: gewichtGramm,
abfallGramm: abfallGramm,
filamente: filamente,
fotoBase64: fotoBase64,
);
Map<String, dynamic> toJson() => {
'bauteilId': bauteilId,
'erstelltAm': erstelltAm.toIso8601String(),
'name': name,
'verwendung': verwendung,
'druckdauerMinuten': druckdauerMinuten,
'gewichtGramm': gewichtGramm,
'abfallGramm': abfallGramm,
'filamente': filamente.map((item) => item.toJson()).toList(),
'fotoBase64': fotoBase64,
};
factory BauteilModel.fromJson(Map<String, dynamic> json) => BauteilModel(
bauteilId: json['bauteilId'] as String,
erstelltAm: DateTime.parse(json['erstelltAm'] as String),
name: json['name'] as String,
verwendung: json['verwendung'] as String,
druckdauerMinuten: json['druckdauerMinuten'] as int,
gewichtGramm: (json['gewichtGramm'] as num).toDouble(),
abfallGramm: (json['abfallGramm'] as num).toDouble(),
fotoBase64: json['fotoBase64'] as String?,
filamente: (json['filamente'] as List)
.map(
(item) => BauteilFilamentModel.fromJson(
Map<String, dynamic>.from(item as Map),
),
)
.toList(),
);
}
+16 -3
View File
@@ -19,6 +19,19 @@ class KaufFilamentModel {
required this.gewicht,
});
/// Supports old purchases saved as "1kg" as well as gram values.
double? get gewichtGramm {
final match = RegExp(
r'^\s*(\d+(?:[.,]\d+)?)\s*(kg|g)?\s*$',
caseSensitive: false,
).firstMatch(gewicht);
if (match == null) return null;
final value = double.tryParse(match.group(1)!.replaceAll(',', '.'));
if (value == null || !value.isFinite) return null;
final grams = value * (match.group(2)?.toLowerCase() == 'kg' ? 1000 : 1);
return grams.isFinite ? grams : null;
}
Map<String, dynamic> toJson() => {
'filamentId': filamentId,
'kaufdatum': kaufdatum.toIso8601String(),
@@ -39,7 +52,7 @@ class KaufFilamentModel {
material: json['material'] as String,
preis: (json['preis'] as num).toDouble(),
farbe: json['farbe'] as String,
gewicht: json['gewicht'] ?? '1000'
gewicht: json['gewicht'] ?? '1000',
);
}
@@ -61,7 +74,7 @@ class KaufFilamentModel {
material: material ?? this.material,
preis: preis ?? this.preis,
farbe: farbe ?? this.farbe,
gewicht: gewicht ?? this.gewicht
gewicht: gewicht ?? this.gewicht,
);
}
}
}