h-1.flutter.0/lib/services/inventory_service.dart
2026-03-04 14:55:40 +09:00

51 lines
1.6 KiB
Dart

import '../models/inventory_models.dart';
import 'inventory_repository.dart';
class InventoryService {
InventoryService({InventoryRepository? repository}) : _repository = repository ?? InventoryRepository();
final InventoryRepository _repository;
Future<List<InventorySummary>> fetchSummaries({bool includeHidden = false}) {
return _repository.fetchSummaries(includeHidden: includeHidden);
}
Future<List<InventoryMovement>> fetchMovements(String productId, {int limit = 50}) {
return _repository.fetchMovements(productId, limit: limit);
}
Future<InventorySummary> recordManualMovement({
required String productId,
required InventoryMovementType type,
required int quantity,
String? reference,
String? notes,
}) {
if (quantity == 0 && type != InventoryMovementType.adjustment) {
throw ArgumentError('quantity must be non-zero');
}
final normalizedQuantity = quantity.abs();
final delta = _calculateDelta(type, quantity);
final recordedQuantity = type == InventoryMovementType.adjustment ? normalizedQuantity : normalizedQuantity;
return _repository.recordMovement(
productId: productId,
type: type,
quantity: recordedQuantity,
quantityDelta: delta,
reference: reference,
notes: notes,
);
}
int _calculateDelta(InventoryMovementType type, int quantity) {
switch (type) {
case InventoryMovementType.receipt:
return quantity.abs();
case InventoryMovementType.issue:
return -quantity.abs();
case InventoryMovementType.adjustment:
return quantity;
}
}
}