diff --git a/core/model/src/main/java/com/moneymong/moneymong/model/ledger/LedgerTransactionRequest.kt b/core/model/src/main/java/com/moneymong/moneymong/model/ledger/LedgerTransactionRequest.kt index 7436c0a6..0241b086 100644 --- a/core/model/src/main/java/com/moneymong/moneymong/model/ledger/LedgerTransactionRequest.kt +++ b/core/model/src/main/java/com/moneymong/moneymong/model/ledger/LedgerTransactionRequest.kt @@ -6,5 +6,6 @@ data class LedgerTransactionRequest( val amount: Int, val description: String, val paymentDate: String, - val documentImageUrls: List = emptyList() + val documentImageUrls: List = emptyList(), + val category: String? = null, ) diff --git a/core/model/src/main/java/com/moneymong/moneymong/model/ledgerdetail/LedgerTransactionDetailResponse.kt b/core/model/src/main/java/com/moneymong/moneymong/model/ledgerdetail/LedgerTransactionDetailResponse.kt index 7c5ce8fa..fe9bae05 100644 --- a/core/model/src/main/java/com/moneymong/moneymong/model/ledgerdetail/LedgerTransactionDetailResponse.kt +++ b/core/model/src/main/java/com/moneymong/moneymong/model/ledgerdetail/LedgerTransactionDetailResponse.kt @@ -12,5 +12,6 @@ data class LedgerTransactionDetailResponse( val paymentDate: String, val receiptImageUrls: List, val documentImageUrls: List, - val authorName: String + val authorName: String, + val category: String?, ) \ No newline at end of file diff --git a/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerScreen.kt b/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerScreen.kt index 2571ac87..3836dc84 100644 --- a/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerScreen.kt +++ b/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerScreen.kt @@ -85,16 +85,10 @@ fun LedgerScreen( ) val analyticsTracker = LocalAnalyticsTracker.current - LaunchedEffect(Unit) { - viewModel.fetchMyAgencyList() - viewModel.fetchAgencyMemberList() - viewModel.fetchAgencyExistLedger() - } - viewModel.collectSideEffect { when (it) { is LedgerSideEffect.LedgerNavigateToLedgerDetail -> { - navigateToLedgerDetail(null, it.id, state.isStaff) + navigateToLedgerDetail(null, it.id, it.isStaff) } is LedgerSideEffect.LedgerNavigateToLedgerManual -> { @@ -236,7 +230,8 @@ fun LedgerScreen( onClickTransactionItem = { viewModel.eventEmit( LedgerSideEffect.LedgerNavigateToLedgerDetail( - it + id = it, + isStaff = state.isStaff, ) ) }, diff --git a/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerSideEffect.kt b/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerSideEffect.kt index 8dda7faf..a9d9e012 100644 --- a/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerSideEffect.kt +++ b/feature/ledger/src/main/java/com/moneymong/moneymong/ledger/LedgerSideEffect.kt @@ -7,7 +7,7 @@ sealed class LedgerSideEffect : SideEffect { data object LedgerCloseSheet : LedgerSideEffect() data object LedgerNavigateToLedgerManual : LedgerSideEffect() data object LedgerFetchRetry : LedgerSideEffect() - data class LedgerNavigateToLedgerDetail(val id: Int): LedgerSideEffect() + data class LedgerNavigateToLedgerDetail(val id: Int, val isStaff: Boolean): LedgerSideEffect() data class LedgerSelectedAgencyChange(val agencyId: Int): LedgerSideEffect() data class LedgerVisibleSnackbar(val message: String, val withDismissAction: Boolean): LedgerSideEffect() } diff --git a/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailScreen.kt b/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailScreen.kt index 8153008d..3334e78a 100644 --- a/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailScreen.kt +++ b/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailScreen.kt @@ -53,6 +53,7 @@ import com.moneymong.moneymong.design_system.component.button.MDSButtonSize import com.moneymong.moneymong.design_system.component.button.MDSButtonType import com.moneymong.moneymong.design_system.component.indicator.LoadingScreen import com.moneymong.moneymong.design_system.component.modal.MDSModal +import com.moneymong.moneymong.design_system.component.tag.MDSOutlineTag import com.moneymong.moneymong.design_system.component.textfield.MDSTextField import com.moneymong.moneymong.design_system.component.textfield.util.MDSTextFieldIcons import com.moneymong.moneymong.design_system.component.textfield.util.withRequiredMark @@ -177,6 +178,36 @@ fun LedgerDetailScreen( onClickDelete = { viewModel.onChangeVisibleConfirmModal(true) }, onClickDone = viewModel::onClickEditButton ) + }, + bottomBar = { + if (state.isStaff) { + DisposableEffect(key1 = Unit) { + SystemBarColorController.setNavigationBarColor(color = White) + + onDispose { + SystemBarColorController.initialSystemBarColors() + } + } + + Column( + modifier = Modifier + .fillMaxWidth() + .background(White) + .padding(horizontal = MMHorizontalSpacing), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(modifier = Modifier.height(20.dp)) + MDSButton( + modifier = Modifier.fillMaxWidth(), + text = "수정하기", + enabled = state.enabledEdit, + size = MDSButtonSize.LARGE, + type = MDSButtonType.PRIMARY, + onClick = viewModel::onClickEditButton + ) + Spacer(modifier = Modifier.height(12.dp)) + } + } } ) { Column( @@ -384,6 +415,22 @@ fun LedgerDetailScreen( .height(1.dp) .background(Gray03, shape = DottedShape(8.dp)) ) + Text( + text = "카테고리", + style = Body2, + color = Gray06 + ) + Spacer(modifier = Modifier.height(8.dp)) + state.ledgerTransactionDetail?.category?.let { + MDSOutlineTag(text = it) + } + Box( + modifier = Modifier + .padding(vertical = 20.dp) + .fillMaxWidth() + .height(1.dp) + .background(Gray03, shape = DottedShape(8.dp)) + ) Text( text = "사진 첨부 (최대12장)", style = Body2, @@ -467,34 +514,6 @@ fun LedgerDetailScreen( } } Spacer(modifier = Modifier.height(20.dp)) - if (state.isStaff) { - DisposableEffect(key1 = Unit) { - SystemBarColorController.setNavigationBarColor(color = White) - - onDispose { - SystemBarColorController.initialSystemBarColors() - } - } - - Column( - modifier = Modifier - .fillMaxWidth() - .background(White) - .padding(horizontal = MMHorizontalSpacing), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Spacer(modifier = Modifier.height(20.dp)) - MDSButton( - modifier = Modifier.fillMaxWidth(), - text = "수정하기", - enabled = state.enabledEdit, - size = MDSButtonSize.LARGE, - type = MDSButtonType.PRIMARY, - onClick = viewModel::onClickEditButton - ) - Spacer(modifier = Modifier.height(12.dp)) - } - } } if (state.isLoading) { LoadingScreen(modifier = Modifier.fillMaxSize()) diff --git a/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailViewModel.kt b/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailViewModel.kt index d9dc9c93..a9b30693 100644 --- a/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailViewModel.kt +++ b/feature/ledgerdetail/src/main/java/com/moneymong/moneymong/ledgerdetail/LedgerDetailViewModel.kt @@ -272,7 +272,7 @@ class LedgerDetailViewModel @Inject constructor( reduce { state.copy(isStaff = isStaff) } } - private fun showErrorDialog(message: String?) = intent { + private fun showErrorDialog(message: String?) = blockingIntent { reduce { state.copy( showErrorDialog = true, diff --git a/feature/ledgermanual/src/main/java/com/moneymong/moneymong/ledgermanual/LedgerManualViewModel.kt b/feature/ledgermanual/src/main/java/com/moneymong/moneymong/ledgermanual/LedgerManualViewModel.kt index a8b7ce5e..99b91eff 100644 --- a/feature/ledgermanual/src/main/java/com/moneymong/moneymong/ledgermanual/LedgerManualViewModel.kt +++ b/feature/ledgermanual/src/main/java/com/moneymong/moneymong/ledgermanual/LedgerManualViewModel.kt @@ -64,6 +64,7 @@ class LedgerManualViewModel @Inject constructor( description = state.memoValue.text.ifEmpty { "내용 없음" }, paymentDate = state.postPaymentDate, documentImageUrls = state.documentList, + category = state.selectedCategory?.name, ) postLedgerTransactionUseCase(state.agencyId, ledgerTransactionRequest) .onSuccess {