refactor: 인벤토리 테이블 스펙과 도메인 계층 정비
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
import 'package:superport_v2/features/inventory/transactions/domain/entities/stock_transaction.dart';
|
||||
|
||||
/// 입고 화면에서 사용하는 UI 전용 레코드 모델.
|
||||
class InboundRecord {
|
||||
InboundRecord({
|
||||
this.id,
|
||||
required this.number,
|
||||
required this.transactionNumber,
|
||||
required this.transactionType,
|
||||
this.transactionTypeId,
|
||||
required this.processedAt,
|
||||
required this.warehouse,
|
||||
this.warehouseId,
|
||||
required this.status,
|
||||
this.statusId,
|
||||
required this.writer,
|
||||
this.writerId,
|
||||
required this.remark,
|
||||
required this.items,
|
||||
this.expectedReturnDate,
|
||||
this.isActive = true,
|
||||
this.raw,
|
||||
});
|
||||
|
||||
factory InboundRecord.fromTransaction(StockTransaction transaction) {
|
||||
return InboundRecord(
|
||||
id: transaction.id,
|
||||
number: transaction.transactionNo,
|
||||
transactionNumber: transaction.transactionNo,
|
||||
transactionType: transaction.type.name,
|
||||
transactionTypeId: transaction.type.id,
|
||||
processedAt: transaction.transactionDate,
|
||||
warehouse: transaction.warehouse.name,
|
||||
warehouseId: transaction.warehouse.id,
|
||||
status: transaction.status.name,
|
||||
statusId: transaction.status.id,
|
||||
writer: transaction.createdBy.name,
|
||||
writerId: transaction.createdBy.id,
|
||||
remark: transaction.note ?? '-',
|
||||
items: transaction.lines
|
||||
.map(InboundLineItem.fromLine)
|
||||
.toList(growable: false),
|
||||
expectedReturnDate: transaction.expectedReturnDate,
|
||||
isActive: transaction.isActive,
|
||||
raw: transaction,
|
||||
);
|
||||
}
|
||||
|
||||
final int? id;
|
||||
final String number;
|
||||
final String transactionNumber;
|
||||
final String transactionType;
|
||||
final int? transactionTypeId;
|
||||
final DateTime processedAt;
|
||||
final String warehouse;
|
||||
final int? warehouseId;
|
||||
final String status;
|
||||
final int? statusId;
|
||||
final String writer;
|
||||
final int? writerId;
|
||||
final String remark;
|
||||
final List<InboundLineItem> items;
|
||||
final DateTime? expectedReturnDate;
|
||||
final bool isActive;
|
||||
final StockTransaction? raw;
|
||||
|
||||
int get itemCount => items.length;
|
||||
|
||||
int get totalQuantity =>
|
||||
items.fold<int>(0, (sum, item) => sum + item.quantity);
|
||||
|
||||
double get totalAmount =>
|
||||
items.fold<double>(0, (sum, item) => sum + (item.price * item.quantity));
|
||||
}
|
||||
|
||||
/// 입고 상세 모달에서 사용하는 품목 정보.
|
||||
class InboundLineItem {
|
||||
InboundLineItem({
|
||||
this.id,
|
||||
int? lineNo,
|
||||
int? productId,
|
||||
String? productCode,
|
||||
required this.product,
|
||||
required this.manufacturer,
|
||||
required this.unit,
|
||||
required this.quantity,
|
||||
required this.price,
|
||||
required this.remark,
|
||||
}) : lineNo = lineNo ?? 0,
|
||||
productId = productId ?? 0,
|
||||
productCode = productCode ?? '';
|
||||
|
||||
factory InboundLineItem.fromLine(StockTransactionLine line) {
|
||||
final product = line.product;
|
||||
return InboundLineItem(
|
||||
id: line.id,
|
||||
lineNo: line.lineNo,
|
||||
productId: product.id,
|
||||
productCode: product.code,
|
||||
product: product.name,
|
||||
manufacturer: product.vendor?.name ?? '-',
|
||||
unit: product.uom?.name ?? '-',
|
||||
quantity: line.quantity,
|
||||
price: line.unitPrice,
|
||||
remark: line.note ?? '',
|
||||
);
|
||||
}
|
||||
|
||||
final int? id;
|
||||
final int lineNo;
|
||||
final int productId;
|
||||
final String productCode;
|
||||
final String product;
|
||||
final String manufacturer;
|
||||
final String unit;
|
||||
final int quantity;
|
||||
final double price;
|
||||
final String remark;
|
||||
}
|
||||
Reference in New Issue
Block a user