Files
2026-10-29 15:03:48 +01:00

88 lines
2.6 KiB
Dart

class KaufFilamentModel {
final String filamentId;
final DateTime kaufdatum;
final String haendler;
final String marke;
final String material;
final double preis;
final String farbe;
// Original net material weight, without the spool.
final String gewicht;
final double? bruttoGewichtGramm;
const KaufFilamentModel({
required this.filamentId,
required this.kaufdatum,
required this.haendler,
required this.marke,
required this.material,
required this.preis,
required this.farbe,
required this.gewicht,
this.bruttoGewichtGramm,
});
/// Original net material weight. Supports legacy "1kg" and 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(),
'haendler': haendler,
'marke': marke,
'material': material,
'preis': preis,
'farbe': farbe,
'gewicht': gewicht,
'bruttoGewichtGramm': bruttoGewichtGramm,
};
factory KaufFilamentModel.fromJson(Map<String, dynamic> json) {
return KaufFilamentModel(
filamentId: json['filamentId'] as String,
kaufdatum: DateTime.parse(json['kaufdatum'] as String),
haendler: json['haendler'] as String,
marke: json['marke'] ?? '',
material: json['material'] as String,
preis: (json['preis'] as num).toDouble(),
farbe: json['farbe'] as String,
gewicht: json['gewicht'] ?? '1000',
bruttoGewichtGramm: (json['bruttoGewichtGramm'] as num?)?.toDouble(),
);
}
KaufFilamentModel copyWith({
String? filamentId,
DateTime? kaufdatum,
String? haendler,
String? marke,
String? material,
double? preis,
String? farbe,
String? gewicht,
double? bruttoGewichtGramm,
}) {
return KaufFilamentModel(
filamentId: filamentId ?? this.filamentId,
kaufdatum: kaufdatum ?? this.kaufdatum,
haendler: haendler ?? this.haendler,
marke: marke ?? this.marke,
material: material ?? this.material,
preis: preis ?? this.preis,
farbe: farbe ?? this.farbe,
gewicht: gewicht ?? this.gewicht,
bruttoGewichtGramm: bruttoGewichtGramm ?? this.bruttoGewichtGramm,
);
}
}