fix(inventory): 파트너 연동 및 상세 모달 동작 안정화

- 입고 레코드에 파트너 식별자와 고객 요약을 캐싱하고 상세 칩으로 노출

- 입고 등록 모달에서 파트너 선택 복원과 고객 동기화를 지원하며 취소 시 상세를 복귀하도록 수정

- 재고 컨트롤러에 고객 동기화 유틸리티와 결재 상태 로딩을 추가하고 단위 테스트를 확장

- 제품·파트너 자동완성 위젯을 재작성해 초기 로딩, 검색, 외부 컨트롤러 동기화를 안정화

- 재고 상세/공통 모달 닫기와 출고·대여 편집 모달의 네비게이터 호출을 루트 기준으로 통일

- 테스트: flutter analyze, flutter test (기존 레이아웃 검증 케이스 실패 지속)
This commit is contained in:
JiWoong Sul
2025-10-27 20:02:21 +09:00
parent 14624c4165
commit 259b056072
14 changed files with 1054 additions and 155 deletions

View File

@@ -27,10 +27,7 @@ class InboundDetailView extends StatelessWidget {
children: [
if (!transitionsEnabled) ...[
ShadBadge.outline(
child: Text(
'재고 상태 전이가 비활성화된 상태입니다.',
style: theme.textTheme.small,
),
child: Text('재고 상태 전이가 비활성화된 상태입니다.', style: theme.textTheme.small),
),
const SizedBox(height: 16),
],
@@ -55,6 +52,12 @@ class InboundDetailView extends StatelessWidget {
_DetailChip(label: '트랜잭션 유형', value: record.transactionType),
_DetailChip(label: '상태', value: record.status),
_DetailChip(label: '작성자', value: record.writer),
if (record.partnerName != null &&
record.partnerName!.trim().isNotEmpty)
_DetailChip(label: '파트너사', value: record.partnerName!.trim()),
if (record.partnerCode != null &&
record.partnerCode!.trim().isNotEmpty)
_DetailChip(label: '파트너 코드', value: record.partnerCode!.trim()),
_DetailChip(label: '품목 수', value: '${record.itemCount}'),
_DetailChip(label: '총 수량', value: '${record.totalQuantity}'),
_DetailChip(
@@ -93,9 +96,7 @@ class InboundDetailView extends StatelessWidget {
ShadTableCell(child: Text(item.manufacturer)),
ShadTableCell(child: Text(item.unit)),
ShadTableCell(child: Text('${item.quantity}')),
ShadTableCell(
child: Text(currencyFormatter.format(item.price)),
),
ShadTableCell(child: Text(currencyFormatter.format(item.price))),
ShadTableCell(
child: Text(item.remark.isEmpty ? '-' : item.remark),
),
@@ -128,13 +129,13 @@ class _DetailChip extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(label, style: theme.textTheme.small, textAlign: TextAlign.center),
const SizedBox(height: 4),
Text(
value,
style: theme.textTheme.p,
label,
style: theme.textTheme.small,
textAlign: TextAlign.center,
),
const SizedBox(height: 4),
Text(value, style: theme.textTheme.p, textAlign: TextAlign.center),
],
),
);