diff --git a/feature/collectionSheet/build.gradle.kts b/feature/collectionSheet/build.gradle.kts
index 8f7c9bf5993..818cf861299 100644
--- a/feature/collectionSheet/build.gradle.kts
+++ b/feature/collectionSheet/build.gradle.kts
@@ -25,6 +25,7 @@ kotlin {
implementation(compose.ui)
implementation(projects.core.domain)
implementation(libs.kotlinx.serialization.json)
+ implementation(compose.components.uiToolingPreview)
implementation(libs.coil.core)
implementation(libs.coil.kt)
@@ -32,4 +33,8 @@ kotlin {
}
}
+}
+
+dependencies {
+ debugImplementation(compose.uiTooling)
}
\ No newline at end of file
diff --git a/feature/collectionSheet/src/commonMain/composeResources/values/strings.xml b/feature/collectionSheet/src/commonMain/composeResources/values/strings.xml
index c9661223da9..446d7badd56 100644
--- a/feature/collectionSheet/src/commonMain/composeResources/values/strings.xml
+++ b/feature/collectionSheet/src/commonMain/composeResources/values/strings.xml
@@ -63,5 +63,4 @@
Productive Collection Sheet
Productive Sheet Submitted Successfully
Collection Sheet Submitted Successfully
-
\ No newline at end of file
diff --git a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheet/IndividualCollectionSheetScreen.kt b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheet/IndividualCollectionSheetScreen.kt
index 74b23639ab0..7d14e73d2c9 100644
--- a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheet/IndividualCollectionSheetScreen.kt
+++ b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheet/IndividualCollectionSheetScreen.kt
@@ -25,16 +25,16 @@ import androidx.compose.ui.Modifier
import com.mifos.core.designsystem.component.MifosScaffold
import com.mifos.core.designsystem.component.MifosTabRow
import com.mifos.core.designsystem.utility.TabContent
-import com.mifos.core.ui.util.DevicePreview
import com.mifos.feature.individualCollectionSheet.newIndividualCollectionSheet.NewIndividualCollectionSheetScreen
import com.mifos.feature.individualCollectionSheet.savedIndividualCollectionSheet.SavedIndividualCollectionSheetCompose
import com.mifos.room.entities.collectionsheet.IndividualCollectionSheet
import org.jetbrains.compose.resources.stringResource
+import org.jetbrains.compose.ui.tooling.preview.Preview
@Composable
internal fun IndividualCollectionSheetScreen(
onBackPressed: () -> Unit,
- onDetail: (String, IndividualCollectionSheet) -> Unit,
+ onDetail: (IndividualCollectionSheet) -> Unit,
) {
val snackbarHostState = remember { SnackbarHostState() }
@@ -69,8 +69,8 @@ enum class IndividualCollectionSheetScreenContents {
SAVED,
}
-@DevicePreview
+@Preview
@Composable
private fun IndividualCollectionSheetScreenPreview() {
- IndividualCollectionSheetScreen(onBackPressed = {}, onDetail = { _, _ -> })
+ IndividualCollectionSheetScreen(onBackPressed = {}, onDetail = { _ -> })
}
diff --git a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsScreen.kt b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsScreen.kt
index c2194d573b8..6739789baa2 100644
--- a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsScreen.kt
+++ b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsScreen.kt
@@ -30,6 +30,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Icon
@@ -58,14 +59,15 @@ import com.mifos.core.designsystem.component.MifosSweetError
import com.mifos.core.designsystem.icon.MifosIcons
import com.mifos.core.model.objects.account.loan.PaymentTypeOptions
import com.mifos.core.model.objects.collectionsheets.LoanAndClientName
+import com.mifos.core.model.objects.collectionsheets.LoanCollectionSheet
import com.mifos.core.network.model.IndividualCollectionSheetPayload
-import com.mifos.core.ui.util.DevicePreview
import com.mifos.room.entities.collectionsheet.ClientCollectionSheet
import com.mifos.room.entities.collectionsheet.IndividualCollectionSheet
import com.mifos.room.entities.noncore.BulkRepaymentTransactions
import kotlinx.coroutines.launch
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
+import org.jetbrains.compose.ui.tooling.preview.Preview
import org.koin.compose.viewmodel.koinViewModel
@Composable
@@ -178,17 +180,17 @@ internal fun IndividualCollectionSheetDetailsScreen(
} else {
LazyColumn {
sheet.clients?.toList()?.let {
- itemsIndexed(it) { index, client ->
+ itemsIndexed(it.zip(loansAndClientNames)) { index,(client, loanAndClientName) ->
IndividualCollectionSheetItem(
client = client,
- index = index,
+ loan = loanAndClientName.loan,
onClick = {
sheet.paymentTypeOptions?.let { paymentTypeOptions ->
submit(
index,
payload,
- paymentTypeOptions.map { paymentTypeOption -> paymentTypeOption.name.toString() },
- loansAndClientNames[index],
+ paymentTypeOptions.map { it.name.toString() },
+ loanAndClientName,
paymentTypeOptions.toList(),
client.clientId,
)
@@ -206,10 +208,11 @@ internal fun IndividualCollectionSheetDetailsScreen(
@Composable
private fun IndividualCollectionSheetItem(
client: ClientCollectionSheet,
- index: Int,
+ loan: LoanCollectionSheet?,
modifier: Modifier = Modifier,
onClick: () -> Unit,
) {
+
OutlinedCard(
modifier = modifier
.padding(6.dp)
@@ -246,18 +249,16 @@ private fun IndividualCollectionSheetItem(
Text(
text = it,
style = MaterialTheme.typography.bodyLarge,
-
)
}
Row {
Text(
text = stringResource(Res.string.feature_collection_sheet_total_due),
style = MaterialTheme.typography.bodyMedium,
-
)
Spacer(modifier = Modifier.width(16.dp))
Text(
- text = client.loans?.get(index)?.totalDue.toString(),
+ text = (loan?.totalDue ?: 0.0).toString(),
style = MaterialTheme.typography.bodyMedium,
)
}
@@ -268,18 +269,16 @@ private fun IndividualCollectionSheetItem(
)
Spacer(modifier = Modifier.width(16.dp))
Text(
- text = client.loans?.get(index)?.chargesDue.toString(),
+ text = (loan?.chargesDue ?: 0.0).toString(),
+ style = MaterialTheme.typography.bodyMedium,
+ )
+ }
+ if (loan?.productShortName != null) {
+ Text(
+ text = "${loan.productShortName} (#${loan.productShortName})",
style = MaterialTheme.typography.bodyMedium,
)
}
- Text(
- text = "${client.loans?.get(index)?.productShortName} (#${
- client.loans?.get(
- index,
- )?.productShortName
- })",
- style = MaterialTheme.typography.bodyMedium,
- )
}
Icon(
imageVector = MifosIcons.ArrowForward,
@@ -289,7 +288,7 @@ private fun IndividualCollectionSheetItem(
}
}
-@DevicePreview
+@Preview
@Composable
private fun IndividualCollectionSheetDetailsScreenEmptyPreview() {
IndividualCollectionSheetDetailsScreen(
@@ -303,7 +302,7 @@ private fun IndividualCollectionSheetDetailsScreenEmptyPreview() {
)
}
-@DevicePreview
+@Preview
@Composable
private fun IndividualCollectionSheetDetailsScreenErrorPreview() {
IndividualCollectionSheetDetailsScreen(
@@ -317,7 +316,7 @@ private fun IndividualCollectionSheetDetailsScreenErrorPreview() {
)
}
-@DevicePreview
+@Preview
@Composable
private fun IndividualCollectionSheetDetailsScreenLoadingPreview() {
IndividualCollectionSheetDetailsScreen(
@@ -331,7 +330,7 @@ private fun IndividualCollectionSheetDetailsScreenLoadingPreview() {
)
}
-@DevicePreview
+@Preview
@Composable
private fun IndividualCollectionSheetDetailsScreenSuccessPreview() {
IndividualCollectionSheetDetailsScreen(
diff --git a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsViewModel.kt b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsViewModel.kt
index 53e45085d8b..98acb5d141e 100644
--- a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsViewModel.kt
+++ b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/individualCollectionSheetDetails/IndividualCollectionSheetDetailsViewModel.kt
@@ -14,6 +14,7 @@ import androidclient.feature.collectionsheet.generated.resources.feature_collect
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import co.touchlab.kermit.Logger
import com.mifos.core.common.utils.Constants
import com.mifos.core.common.utils.DataState
import com.mifos.core.domain.useCases.SaveIndividualCollectionSheetUseCase
@@ -40,6 +41,12 @@ class IndividualCollectionSheetDetailsViewModel(
IndividualCollectionSheet()
}
+ init {
+ Logger.e("Revanth"){
+ sheet.toString()
+ }
+ }
+
@Suppress("ktlint:standard:property-naming")
private val uiStateInternal = MutableStateFlow(
IndividualCollectionSheetDetailsUiState.Empty,
diff --git a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/navigation/CollectionSheetNavigation.kt b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/navigation/CollectionSheetNavigation.kt
index 905534f332a..1329eb91436 100644
--- a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/navigation/CollectionSheetNavigation.kt
+++ b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/navigation/CollectionSheetNavigation.kt
@@ -25,7 +25,6 @@ import com.mifos.feature.individualCollectionSheet.individualCollectionSheetDeta
import com.mifos.feature.individualCollectionSheet.paymentDetails.PaymentDetailsScreenRoute
import com.mifos.room.entities.collectionsheet.IndividualCollectionSheet
import kotlinx.serialization.Serializable
-import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
fun NavGraphBuilder.individualCollectionSheetNavGraph(
@@ -38,7 +37,7 @@ fun NavGraphBuilder.individualCollectionSheetNavGraph(
) {
individualCollectionSheetScreen(
onBackPressed = onBackPressed,
- onDetail = { _, sheet ->
+ onDetail = { sheet ->
navController.navigateToIndividualCollectionSheetDetailScreen(sheet)
},
@@ -55,7 +54,7 @@ fun NavGraphBuilder.individualCollectionSheetNavGraph(
private fun NavGraphBuilder.individualCollectionSheetScreen(
onBackPressed: () -> Unit,
- onDetail: (String, IndividualCollectionSheet) -> Unit,
+ onDetail: (IndividualCollectionSheet) -> Unit,
) {
composable(
route = CollectionSheetScreens.IndividualCollectionSheetScreen.route,
diff --git a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/newIndividualCollectionSheet/NewIndividualCollectionSheetScreen.kt b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/newIndividualCollectionSheet/NewIndividualCollectionSheetScreen.kt
index 7ff2500e443..19eeb21b721 100644
--- a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/newIndividualCollectionSheet/NewIndividualCollectionSheetScreen.kt
+++ b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/newIndividualCollectionSheet/NewIndividualCollectionSheetScreen.kt
@@ -58,6 +58,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.mifos.core.common.utils.Constants
import com.mifos.core.common.utils.DateHelper
import com.mifos.core.designsystem.component.MifosBottomSheet
import com.mifos.core.designsystem.component.MifosButton
@@ -66,18 +67,20 @@ import com.mifos.core.designsystem.component.MifosDatePickerTextField
import com.mifos.core.designsystem.component.MifosScaffold
import com.mifos.core.designsystem.component.MifosTextFieldDropdown
import com.mifos.core.network.model.RequestCollectionSheetPayload
-import com.mifos.core.ui.util.DevicePreview
import com.mifos.room.entities.collectionsheet.IndividualCollectionSheet
import com.mifos.room.entities.organisation.OfficeEntity
import com.mifos.room.entities.organisation.StaffEntity
import kotlinx.datetime.Clock
import org.jetbrains.compose.resources.stringResource
+import org.jetbrains.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.PreviewParameter
+import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider
import org.koin.compose.viewmodel.koinViewModel
@Composable
internal fun NewIndividualCollectionSheetScreen(
viewModel: NewIndividualCollectionSheetViewModel = koinViewModel(),
- onDetail: (String, IndividualCollectionSheet) -> Unit,
+ onDetail: (IndividualCollectionSheet) -> Unit,
) {
val state = viewModel.newIndividualCollectionSheetUiState.collectAsStateWithLifecycle().value
@@ -92,8 +95,8 @@ internal fun NewIndividualCollectionSheetScreen(
officeId = id
transactionDate = date
staffId = idStaff
- locale = "en"
- dateFormat = "dd-MM-yyyy"
+ locale = Constants.LOCALE_EN
+ dateFormat = DateHelper.SHORT_MONTH
},
)
},
@@ -107,7 +110,7 @@ internal fun NewIndividualCollectionSheetScreen(
getStaffList: (Int) -> Unit,
generateCollection: (Int, Int, String) -> Unit,
modifier: Modifier = Modifier,
- onDetail: (String, IndividualCollectionSheet) -> Unit,
+ onDetail: (IndividualCollectionSheet) -> Unit,
) {
val keyboardController = LocalSoftwareKeyboardController.current
@@ -120,12 +123,16 @@ internal fun NewIndividualCollectionSheetScreen(
var showCollectionSheetDialog by rememberSaveable { mutableStateOf(false) }
var showDatePicker by rememberSaveable { mutableStateOf(false) }
- var repaymentDate by rememberSaveable { mutableLongStateOf(Clock.System.now().toEpochMilliseconds()) }
+ var repaymentDate by rememberSaveable {
+ mutableLongStateOf(
+ Clock.System.now().toEpochMilliseconds(),
+ )
+ }
val datePickerState = rememberDatePickerState(
initialSelectedDateMillis = repaymentDate,
selectableDates = object : SelectableDates {
override fun isSelectableDate(utcTimeMillis: Long): Boolean {
- return utcTimeMillis >= Clock.System.now().toEpochMilliseconds()
+ return utcTimeMillis <= Clock.System.now().toEpochMilliseconds()
}
},
)
@@ -188,7 +195,6 @@ internal fun NewIndividualCollectionSheetScreen(
showCollectionSheetDialog = false
individualCollectionSheet?.let {
onDetail(
- DateHelper.getDateAsStringFromLong(repaymentDate),
it,
)
}
@@ -229,15 +235,19 @@ internal fun NewIndividualCollectionSheetScreen(
selectedStaff = ""
},
onOptionSelected = { index, value ->
- state.officeList[index].id.let {
- getStaffList(it)
- officeId = it
+ state.officeList.getOrNull(index)?.let { selectedOfficeEntity ->
+ selectedOfficeEntity.id.let {
+ getStaffList(it)
+ officeId = it
+ }
+ selectedOffice = selectedOfficeEntity.name.toString()
+ selectedStaff = ""
}
- selectedOffice = value
- selectedStaff = ""
+
},
label = stringResource(Res.string.feature_collection_sheet_office),
options = state.officeList.map { it.name.toString() },
+ readOnly = true
)
Spacer(modifier = Modifier.height(8.dp))
MifosDatePickerTextField(
@@ -254,13 +264,15 @@ internal fun NewIndividualCollectionSheetScreen(
selectedStaff = it
},
onOptionSelected = { index, value ->
- state.staffList[index].id?.let {
+ val selectedStaffEntity = state.staffList[index]
+ selectedStaffEntity.id?.let {
staffId = it
}
selectedStaff = value
},
label = stringResource(Res.string.feature_collection_sheet_staff),
options = state.staffList.map { it.displayName.toString() },
+ readOnly = true
)
Row(
modifier = Modifier
@@ -388,46 +400,32 @@ private fun CollectionSheetDialogContent(
)
}
-@DevicePreview
-@Composable
-private fun NewIndividualCollectionSheetPreview() {
- Column {
- NewIndividualCollectionSheetScreen(
- state = NewIndividualCollectionSheetUiState(staffList = sampleStaffList),
- getStaffList = {},
- generateCollection = { _, _, _ ->
- },
- onDetail = { _, _ -> },
- )
- NewIndividualCollectionSheetScreen(
- state = NewIndividualCollectionSheetUiState(officeList = sampleOfficeList),
- getStaffList = {},
- generateCollection = { _, _, _ ->
- },
- onDetail = { _, _ -> },
- )
- NewIndividualCollectionSheetScreen(
- state = NewIndividualCollectionSheetUiState(error = "Error Occurred"),
- getStaffList = {},
- generateCollection = { _, _, _ ->
- },
- onDetail = { _, _ -> },
- )
- NewIndividualCollectionSheetScreen(
- state = NewIndividualCollectionSheetUiState(isLoading = true),
- getStaffList = {},
- generateCollection = { _, _, _ ->
- },
- onDetail = { _, _ -> },
- )
- NewIndividualCollectionSheetScreen(
- state = NewIndividualCollectionSheetUiState(individualCollectionSheet = IndividualCollectionSheet()),
- getStaffList = {},
- generateCollection = { _, _, _ ->
- },
- onDetail = { _, _ -> },
+class NewIndividualCollectionSheetUiStateProvider :
+ PreviewParameterProvider {
+
+ override val values: Sequence
+ get() = sequenceOf(
+ NewIndividualCollectionSheetUiState(staffList = sampleStaffList),
+ NewIndividualCollectionSheetUiState(officeList = sampleOfficeList),
+ NewIndividualCollectionSheetUiState(error = "Error Occurred"),
+ NewIndividualCollectionSheetUiState(isLoading = true),
+ NewIndividualCollectionSheetUiState(individualCollectionSheet = IndividualCollectionSheet()),
)
- }
+}
+
+@Preview
+@Composable
+private fun NewIndividualCollectionSheetPreview(
+ @PreviewParameter(NewIndividualCollectionSheetUiStateProvider::class)
+ newIndividualCollectionSheetUiState: NewIndividualCollectionSheetUiState,
+) {
+ NewIndividualCollectionSheetScreen(
+ state = newIndividualCollectionSheetUiState,
+ getStaffList = {},
+ generateCollection = { _, _, _ ->
+ },
+ onDetail = { _ -> },
+ )
}
val sampleStaffList = List(10) {
@@ -438,7 +436,7 @@ val sampleOfficeList = List(10) {
OfficeEntity(id = it, name = "Name")
}
-@DevicePreview
+@Preview
@Composable
private fun CollectionSheetDialogContentPreview() {
CollectionSheetDialogContent(date = "19 June 2024", member = "5", fillNow = {}, onDismiss = {})
diff --git a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/savedIndividualCollectionSheet/SavedIndividualCollectionSheetCompose.kt b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/savedIndividualCollectionSheet/SavedIndividualCollectionSheetCompose.kt
index b9fa65b409d..9e23bd9715f 100644
--- a/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/savedIndividualCollectionSheet/SavedIndividualCollectionSheetCompose.kt
+++ b/feature/collectionSheet/src/commonMain/kotlin/com/mifos/feature/individualCollectionSheet/savedIndividualCollectionSheet/SavedIndividualCollectionSheetCompose.kt
@@ -24,8 +24,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
-import com.mifos.core.ui.util.DevicePreview
import org.jetbrains.compose.resources.stringResource
+import org.jetbrains.compose.ui.tooling.preview.Preview
@Composable
internal fun SavedIndividualCollectionSheetCompose(
@@ -55,7 +55,7 @@ internal fun SavedIndividualCollectionSheetCompose(
}
}
-@DevicePreview
+@Preview
@Composable
private fun SavedIndividualCollectionSheetComposePreview() {
SavedIndividualCollectionSheetCompose()