사용하지 않는 파일 정리 전 백업 (Phase 10 완료 후 상태)

This commit is contained in:
JiWoong Sul
2025-08-29 15:11:59 +09:00
parent a740ff10c8
commit d916b281a7
333 changed files with 53617 additions and 22574 deletions

View File

@@ -0,0 +1,286 @@
import 'package:flutter/material.dart';
import 'package:superport/data/models/equipment_history_dto.dart';
import 'package:superport/domain/usecases/equipment_history_usecase.dart';
import 'package:superport/injection_container.dart';
import 'package:superport/utils/constants.dart';
class EquipmentHistoryController extends ChangeNotifier {
final EquipmentHistoryUseCase _useCase = getIt<EquipmentHistoryUseCase>();
// 상태 관리
bool _isLoading = false;
bool _isSubmitting = false;
String? _errorMessage;
String? _successMessage;
// 데이터 (백엔드 스키마 기반)
List<EquipmentHistoryDto> _histories = [];
int _totalCount = 0;
int _currentPage = 1;
final int _pageSize = PaginationConstants.defaultPageSize;
// 필터
int? _filterEquipmentId;
int? _filterWarehouseId;
int? _filterCompanyId;
String? _filterTransactionType;
String? _filterStartDate;
String? _filterEndDate;
String? _searchQuery;
// Getters
bool get isLoading => _isLoading;
bool get isSubmitting => _isSubmitting;
String? get errorMessage => _errorMessage;
String? get successMessage => _successMessage;
List<EquipmentHistoryDto> get histories => _histories;
int get totalCount => _totalCount;
int get currentPage => _currentPage;
int get pageSize => _pageSize;
int get totalPages => (_totalCount / _pageSize).ceil();
// 필터 Getters
int? get filterEquipmentId => _filterEquipmentId;
int? get filterWarehouseId => _filterWarehouseId;
int? get filterCompanyId => _filterCompanyId;
String? get filterTransactionType => _filterTransactionType;
String? get filterStartDate => _filterStartDate;
String? get filterEndDate => _filterEndDate;
String? get searchQuery => _searchQuery;
// 필터 설정
void setFilters({
int? equipmentId,
int? warehouseId,
int? companyId,
String? transactionType,
String? startDate,
String? endDate,
String? search,
}) {
_filterEquipmentId = equipmentId;
_filterWarehouseId = warehouseId;
_filterCompanyId = companyId;
_filterTransactionType = transactionType;
_filterStartDate = startDate;
_filterEndDate = endDate;
_searchQuery = search;
_currentPage = 1;
loadHistories();
}
// 필터 초기화
void clearFilters() {
_filterEquipmentId = null;
_filterWarehouseId = null;
_filterCompanyId = null;
_filterTransactionType = null;
_filterStartDate = null;
_filterEndDate = null;
_searchQuery = null;
_currentPage = 1;
loadHistories();
}
// 페이지 변경
void changePage(int page) {
if (page < 1 || page > totalPages) return;
_currentPage = page;
loadHistories();
}
// 재고 이력 목록 조회
Future<void> loadHistories() async {
_isLoading = true;
_errorMessage = null;
notifyListeners();
try {
final response = await _useCase.getEquipmentHistories(
page: _currentPage,
pageSize: _pageSize,
equipmentsId: _filterEquipmentId,
warehousesId: _filterWarehouseId,
companiesId: _filterCompanyId,
transactionType: _filterTransactionType,
startDate: _filterStartDate,
endDate: _filterEndDate,
);
_histories = response.items;
_totalCount = response.totalCount;
} catch (e) {
_errorMessage = e.toString();
_histories = [];
_totalCount = 0;
} finally {
_isLoading = false;
notifyListeners();
}
}
// 특정 장비의 재고 이력 조회
Future<void> loadEquipmentHistories(int equipmentId) async {
_isLoading = true;
_errorMessage = null;
notifyListeners();
try {
_histories = await _useCase.getEquipmentHistoriesByEquipmentId(equipmentId);
_totalCount = _histories.length;
} catch (e) {
_errorMessage = e.toString();
_histories = [];
_totalCount = 0;
} finally {
_isLoading = false;
notifyListeners();
}
}
// 창고별 재고 이력 조회
Future<void> loadWarehouseHistories(int warehouseId) async {
_isLoading = true;
_errorMessage = null;
notifyListeners();
try {
_histories = await _useCase.getEquipmentHistoriesByWarehouseId(warehouseId);
_totalCount = _histories.length;
} catch (e) {
_errorMessage = e.toString();
_histories = [];
_totalCount = 0;
} finally {
_isLoading = false;
notifyListeners();
}
}
// 백엔드 스키마 기반 단순 재고 조회 (EquipmentHistoryDto 기반)
// 특정 장비의 현재 재고량 계산 (입고량 - 출고량)
int calculateEquipmentStock(int equipmentId) {
final equipmentHistories = _histories.where((h) => h.equipmentsId == equipmentId);
int totalIn = equipmentHistories
.where((h) => h.transactionType == 'I')
.fold(0, (sum, h) => sum + h.quantity);
int totalOut = equipmentHistories
.where((h) => h.transactionType == 'O')
.fold(0, (sum, h) => sum + h.quantity);
return totalIn - totalOut;
}
// 입고 처리 (백엔드 스키마 기반)
Future<bool> createStockIn({
required int equipmentsId,
required int warehousesId,
required int quantity,
DateTime? transactedAt,
String? remark,
}) async {
_isSubmitting = true;
_errorMessage = null;
_successMessage = null;
notifyListeners();
try {
final request = EquipmentHistoryRequestDto(
equipmentsId: equipmentsId,
warehousesId: warehousesId,
transactionType: 'I', // 입고
quantity: quantity,
transactedAt: transactedAt ?? DateTime.now(),
remark: remark,
);
await _useCase.createEquipmentHistory(request);
_successMessage = '입고 처리가 완료되었습니다.';
await loadHistories();
return true;
} catch (e) {
_errorMessage = e.toString();
return false;
} finally {
_isSubmitting = false;
notifyListeners();
}
}
// 출고 처리 (백엔드 스키마 기반)
Future<bool> createStockOut({
required int equipmentsId,
required int warehousesId,
required int quantity,
DateTime? transactedAt,
String? remark,
}) async {
_isSubmitting = true;
_errorMessage = null;
_successMessage = null;
notifyListeners();
try {
final request = EquipmentHistoryRequestDto(
equipmentsId: equipmentsId,
warehousesId: warehousesId,
transactionType: 'O', // 출고
quantity: quantity,
transactedAt: transactedAt ?? DateTime.now(),
remark: remark,
);
await _useCase.createEquipmentHistory(request);
_successMessage = '출고 처리가 완료되었습니다.';
await loadHistories();
return true;
} catch (e) {
_errorMessage = e.toString();
return false;
} finally {
_isSubmitting = false;
notifyListeners();
}
}
// 백엔드 스키마 기반 단순 통계 기능들
// 특정 창고의 재고 현황 (장비별 집계)
Map<int, int> getWarehouseStock(int warehouseId) {
Map<int, int> stockMap = {};
final warehouseHistories = _histories.where((h) => h.warehousesId == warehouseId);
for (var equipmentId in warehouseHistories.map((h) => h.equipmentsId).toSet()) {
stockMap[equipmentId] = calculateEquipmentStock(equipmentId);
}
return stockMap;
}
// 전체 재고 현황 요약
Map<String, int> getStockSummary() {
int totalIn = _histories
.where((h) => h.transactionType == 'I')
.fold(0, (sum, h) => sum + h.quantity);
int totalOut = _histories
.where((h) => h.transactionType == 'O')
.fold(0, (sum, h) => sum + h.quantity);
return {
'totalStock': totalIn - totalOut,
'totalIn': totalIn,
'totalOut': totalOut,
};
}
// 메시지 클리어
void clearMessages() {
_errorMessage = null;
_successMessage = null;
notifyListeners();
}
@override
void dispose() {
_histories.clear();
super.dispose();
}
}