Files
receipity/lib/models/line_item.dart
T
2026-08-31 16:51:31 +02:00

52 lines
1.2 KiB
Dart

/// A parsed receipt row shown on the review screen.
library;
class LineItem {
LineItem({
required this.id,
required this.name,
required this.price,
this.quantity,
this.unitPrice,
this.discount = 0,
});
final String id;
final String name;
/// Line total after any discount.
final double price;
final int? quantity;
final double? unitPrice;
/// Negative amount when a discount was folded into [price].
final double discount;
bool get hasDiscount => discount != 0;
/// List price before a folded discount. Equals [price] when there is none.
double get originalPrice {
if (!hasDiscount) return price;
return ((price - discount) * 100).round() / 100;
}
LineItem copyWith({
String? id,
String? name,
double? price,
int? quantity,
double? unitPrice,
double? discount,
bool clearQuantity = false,
}) {
return LineItem(
id: id ?? this.id,
name: name ?? this.name,
price: price ?? this.price,
quantity: clearQuantity ? null : (quantity ?? this.quantity),
unitPrice: clearQuantity ? null : (unitPrice ?? this.unitPrice),
discount: discount ?? this.discount,
);
}
}