feat(approvals): 결재 접근 차단 대응과 전표 전이 메모 전달 강화

- approvals 모듈에서 APPROVAL_ACCESS_DENIED 응답을 포착하여 ApprovalAccessDeniedException으로 변환하고 접근 거부 시 토스트·대시보드 리다이렉트를 처리

- approval history 조회가 서버 action id에 맞춰 필터링되도록 repository·controller·테스트를 보강

- 재고 트랜잭션 상태 전이 API 호출에 note를 전달하도록 repository·컨트롤러·통합/단위 테스트를 업데이트

- 승인 플로우 QA 체크리스트 및 연동 문서를 최신 계약과 테스트 흐름으로 업데이트
This commit is contained in:
JiWoong Sul
2025-10-31 16:43:14 +09:00
parent d76f765814
commit 3e83408aa7
35 changed files with 1056 additions and 470 deletions

View File

@@ -408,12 +408,13 @@ class RentalController extends ChangeNotifier {
/// 대여/반납 트랜잭션을 상신한다.
Future<RentalRecord> submitTransaction(
int id, {
String? note,
bool refreshAfter = true,
StockTransactionListFilter? refreshFilter,
bool? refreshFilterByRentalTypes,
}) {
return _executeMutation(
() => _transactionRepository.submit(id),
() => _transactionRepository.submit(id, note: note),
trackedId: id,
refreshAfter: refreshAfter,
refreshFilter: refreshFilter,
@@ -424,12 +425,13 @@ class RentalController extends ChangeNotifier {
/// 대여/반납 트랜잭션을 완료 처리한다.
Future<RentalRecord> completeTransaction(
int id, {
String? note,
bool refreshAfter = true,
StockTransactionListFilter? refreshFilter,
bool? refreshFilterByRentalTypes,
}) {
return _executeMutation(
() => _transactionRepository.complete(id),
() => _transactionRepository.complete(id, note: note),
trackedId: id,
refreshAfter: refreshAfter,
refreshFilter: refreshFilter,
@@ -440,12 +442,13 @@ class RentalController extends ChangeNotifier {
/// 대여/반납 트랜잭션을 승인 처리한다.
Future<RentalRecord> approveTransaction(
int id, {
String? note,
bool refreshAfter = true,
StockTransactionListFilter? refreshFilter,
bool? refreshFilterByRentalTypes,
}) {
return _executeMutation(
() => _transactionRepository.approve(id),
() => _transactionRepository.approve(id, note: note),
trackedId: id,
refreshAfter: refreshAfter,
refreshFilter: refreshFilter,
@@ -456,12 +459,13 @@ class RentalController extends ChangeNotifier {
/// 대여/반납 트랜잭션을 반려 처리한다.
Future<RentalRecord> rejectTransaction(
int id, {
String? note,
bool refreshAfter = true,
StockTransactionListFilter? refreshFilter,
bool? refreshFilterByRentalTypes,
}) {
return _executeMutation(
() => _transactionRepository.reject(id),
() => _transactionRepository.reject(id, note: note),
trackedId: id,
refreshAfter: refreshAfter,
refreshFilter: refreshFilter,
@@ -472,12 +476,13 @@ class RentalController extends ChangeNotifier {
/// 대여/반납 트랜잭션을 취소 처리한다.
Future<RentalRecord> cancelTransaction(
int id, {
String? note,
bool refreshAfter = true,
StockTransactionListFilter? refreshFilter,
bool? refreshFilterByRentalTypes,
}) {
return _executeMutation(
() => _transactionRepository.cancel(id),
() => _transactionRepository.cancel(id, note: note),
trackedId: id,
refreshAfter: refreshAfter,
refreshFilter: refreshFilter,