Skip to content

Commit 36fbf47

Browse files
feat : collateral data screen added (#2546)
1 parent f9dc5bf commit 36fbf47

File tree

12 files changed

+388
-35
lines changed

12 files changed

+388
-35
lines changed

cmp-navigation/src/commonMain/kotlin/cmp/navigation/authenticated/AuthenticatedNavbarNavigationScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import com.mifos.feature.center.navigation.centerNavGraph
7575
import com.mifos.feature.center.navigation.navigateCenterDetailsScreenRoute
7676
import com.mifos.feature.center.navigation.navigateCreateCenterScreenRoute
7777
import com.mifos.feature.center.navigation.navigateToCenterListScreenRoute
78+
import com.mifos.feature.client.clientProfile.navigateToClientProfileRoute
7879
import com.mifos.feature.client.navigation.clientNavGraph
7980
import com.mifos.feature.client.navigation.navigateClientDetailsScreen
8081
import com.mifos.feature.client.navigation.navigateCreateClientScreen
@@ -346,7 +347,7 @@ internal fun AuthenticatedNavbarNavigationScreenContent(
346347
onCreateCenter = navController::navigateCreateCenterScreenRoute,
347348
onCreateGroup = navController::navigateToCreateNewGroupScreen,
348349
onCenter = navController::navigateCenterDetailsScreenRoute,
349-
onClient = navController::navigateClientDetailsScreen,
350+
onClient = navController::navigateToClientProfileRoute,
350351
onGroup = navController::navigateToGroupDetailsScreen,
351352
onLoan = navController::navigateToLoanAccountSummaryScreen,
352353
onSavings = navController::navigateClientDetailsScreen,

core/data/src/commonMain/kotlin/com/mifos/core/data/repository/ClientDetailsRepository.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.mifos.core.common.utils.DataState
1313
import com.mifos.core.model.objects.account.share.ShareAccounts
1414
import com.mifos.core.network.model.ClientCloseTemplateResponse
1515
import com.mifos.core.network.model.CollateralItem
16+
import com.mifos.core.network.model.CollateralItemResult
1617
import com.mifos.core.network.model.SavingAccountOption
1718
import com.mifos.core.network.model.StaffOption
1819
import com.mifos.room.entities.accounts.ClientAccounts
@@ -41,6 +42,8 @@ interface ClientDetailsRepository {
4142

4243
suspend fun getCollateralItems(): DataState<List<CollateralItem>>
4344

45+
suspend fun getClientCollaterals(clientId: Int): DataState<List<CollateralItemResult>>
46+
4447
suspend fun getClient(clientId: Int): ClientEntity
4548

4649
fun getImage(clientId: Int): Flow<DataState<String>>

core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/ClientDetailsRepositoryImp.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.mifos.core.model.objects.account.share.ShareAccounts
1616
import com.mifos.core.network.datamanager.DataManagerClient
1717
import com.mifos.core.network.model.ClientCloseTemplateResponse
1818
import com.mifos.core.network.model.CollateralItem
19+
import com.mifos.core.network.model.CollateralItemResult
1920
import com.mifos.core.network.model.SavingAccountOption
2021
import com.mifos.core.network.model.StaffOption
2122
import com.mifos.room.entities.accounts.ClientAccounts
@@ -72,6 +73,15 @@ class ClientDetailsRepositoryImp(
7273
}
7374
}
7475

76+
override suspend fun getClientCollaterals(clientId: Int): DataState<List<CollateralItemResult>> {
77+
return try {
78+
val res = dataManagerClient.getClientCollateralItems(clientId)
79+
return DataState.Success(res)
80+
} catch (e: Exception) {
81+
DataState.Error(e)
82+
}
83+
}
84+
7585
override suspend fun getClient(clientId: Int): ClientEntity {
7686
return dataManagerClient.getClient(clientId)
7787
}

core/network/src/commonMain/kotlin/com/mifos/core/network/datamanager/DataManagerClient.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import com.mifos.core.network.mappers.clients.GetClientResponseMapper
2727
import com.mifos.core.network.mappers.clients.GetClientsClientIdAccountMapper
2828
import com.mifos.core.network.model.ClientCloseTemplateResponse
2929
import com.mifos.core.network.model.CollateralItem
30+
import com.mifos.core.network.model.CollateralItemResult
3031
import com.mifos.core.network.model.PinpointLocationActionResponse
3132
import com.mifos.core.network.model.PostClientAddressRequest
3233
import com.mifos.core.network.model.PostClientAddressResponse
@@ -185,6 +186,10 @@ class DataManagerClient(
185186
return mBaseApiManager.clientService.getCollateralItems()
186187
}
187188

189+
suspend fun getClientCollateralItems(clientId: Int): List<CollateralItemResult> {
190+
return mBaseApiManager.clientService.getClientCollateralItems(clientId)
191+
}
192+
188193
/**
189194
* This Method Fetching the Client Accounts (Loan, saving, etc Accounts ) from REST API
190195
* and get the ClientAccounts and then Saving all Accounts into the Database and give the

core/network/src/commonMain/kotlin/com/mifos/core/network/model/CollateralItem.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,12 @@ data class CollateralItem(
2121
val name: String,
2222
val id: Int,
2323
)
24+
25+
@Serializable
26+
data class CollateralItemResult(
27+
val name: String,
28+
val collateralId: Int,
29+
val basePrice: Double,
30+
val pctToBase: Double,
31+
val quantity: Double,
32+
)

core/network/src/commonMain/kotlin/com/mifos/core/network/services/ClientService.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.mifos.core.model.objects.clients.UpdateSavingsAccountRequest
2222
import com.mifos.core.network.GenericResponse
2323
import com.mifos.core.network.model.ClientCloseTemplateResponse
2424
import com.mifos.core.network.model.CollateralItem
25+
import com.mifos.core.network.model.CollateralItemResult
2526
import com.mifos.core.network.model.GetClientsPageItemsResponse
2627
import com.mifos.core.network.model.PinpointLocationActionResponse
2728
import com.mifos.core.network.model.PostAuthenticationRequest
@@ -222,6 +223,9 @@ interface ClientService {
222223
@GET("collateral-management")
223224
suspend fun getCollateralItems(): List<CollateralItem>
224225

226+
@GET("clients/{clientId}/collaterals/template")
227+
suspend fun getClientCollateralItems(@Path("clientId") clientId: Int): List<CollateralItemResult>
228+
225229
@POST("clients/{clientId}?command=assignStaff")
226230
suspend fun assignStaff(
227231
@Path("clientId") clientId: Int,

core/ui/src/commonMain/kotlin/com/mifos/core/ui/components/MifosActionsListingCardComponent.kt

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import androidclient.core.ui.generated.resources.core_ui_total_value
4040
import androidclient.core.ui.generated.resources.core_ui_type
4141
import androidclient.core.ui.generated.resources.core_ui_waived
4242
import androidclient.core.ui.generated.resources.listing_component_identifier_not_available
43+
import androidclient.core.ui.generated.resources.name
4344
import androidx.compose.animation.AnimatedVisibility
4445
import androidx.compose.animation.core.animateDpAsState
4546
import androidx.compose.animation.core.spring
@@ -231,13 +232,13 @@ fun MifosActionsCollateralDataListingComponent(
231232
menuList: List<Actions>,
232233
onActionClicked: (Actions) -> Unit,
233234
) {
234-
MifosActionsListingComponentOutline {
235+
MifosActionsListingComponentOutline(isExpanded = false) {
235236
Column {
236237
Column(
237238
modifier = Modifier.padding(DesignToken.padding.large),
238239
) {
239240
MifosListingRowItem(
240-
key = "Name",
241+
key = stringResource(Res.string.name),
241242
value = name,
242243
keyStyle = MifosTypography.titleSmallEmphasized,
243244
valueStyle = MifosTypography.titleSmall,
@@ -263,40 +264,42 @@ fun MifosActionsCollateralDataListingComponent(
263264
)
264265
}
265266

266-
Surface(
267-
modifier = Modifier.fillMaxWidth(),
268-
shape = RoundedCornerShape(
269-
bottomStart = DesignToken.padding.medium,
270-
bottomEnd = DesignToken.padding.medium,
271-
),
272-
) {
273-
Column(
274-
modifier = Modifier.padding(
275-
vertical = DesignToken.padding.small,
267+
if (menuList.isNotEmpty()) {
268+
Surface(
269+
modifier = Modifier.fillMaxWidth(),
270+
shape = RoundedCornerShape(
271+
bottomStart = DesignToken.padding.medium,
272+
bottomEnd = DesignToken.padding.medium,
276273
),
277274
) {
278-
menuList.map { menuItem ->
279-
Row(
280-
modifier = Modifier.fillMaxWidth()
281-
.height(DesignToken.sizes.avatarMedium)
282-
.clickable {
283-
onActionClicked(menuItem)
284-
},
285-
verticalAlignment = Alignment.CenterVertically,
286-
horizontalArrangement = Arrangement.Start,
287-
) {
288-
Icon(
289-
modifier = Modifier.padding(horizontal = DesignToken.padding.large),
290-
imageVector = menuItem.icon,
291-
contentDescription = "",
292-
)
275+
Column(
276+
modifier = Modifier.padding(
277+
vertical = DesignToken.padding.small,
278+
),
279+
) {
280+
menuList.map { menuItem ->
281+
Row(
282+
modifier = Modifier.fillMaxWidth()
283+
.height(DesignToken.sizes.avatarMedium)
284+
.clickable {
285+
onActionClicked(menuItem)
286+
},
287+
verticalAlignment = Alignment.CenterVertically,
288+
horizontalArrangement = Arrangement.Start,
289+
) {
290+
Icon(
291+
modifier = Modifier.padding(horizontal = DesignToken.padding.large),
292+
imageVector = menuItem.icon,
293+
contentDescription = "",
294+
)
293295

294-
Text(
295-
modifier = Modifier.fillMaxWidth(),
296-
text = menuItem::class.simpleName ?: "",
297-
color = MaterialTheme.colorScheme.onSurface,
298-
fontSize = MaterialTheme.typography.bodyLarge.fontSize,
299-
)
296+
Text(
297+
modifier = Modifier.fillMaxWidth(),
298+
text = menuItem::class.simpleName ?: "",
299+
color = MaterialTheme.colorScheme.onSurface,
300+
fontSize = MaterialTheme.typography.bodyLarge.fontSize,
301+
)
302+
}
300303
}
301304
}
302305
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright 2025 Mifos Initiative
3+
*
4+
* This Source Code Form is subject to the terms of the Mozilla Public
5+
* License, v. 2.0. If a copy of the MPL was not distributed with this
6+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
7+
*
8+
* See https://github.com/openMF/android-client/blob/master/LICENSE.md
9+
*/
10+
package com.mifos.feature.client.clientCollateralDetails
11+
12+
import androidx.navigation.NavController
13+
import androidx.navigation.NavGraphBuilder
14+
import androidx.navigation.compose.composable
15+
import kotlinx.serialization.Serializable
16+
17+
@Serializable
18+
data class ClientCollateralDetailRoute(
19+
val clientId: Int = -1,
20+
)
21+
22+
fun NavGraphBuilder.clientCollateralDetailDestination(
23+
navController: NavController,
24+
) {
25+
composable<ClientCollateralDetailRoute> {
26+
ClientCollateralDetailScreen(navController)
27+
}
28+
}
29+
30+
fun NavController.navigateToClientCollateralDetailRoute(
31+
clientId: Int,
32+
) {
33+
this.navigate(
34+
ClientCollateralDetailRoute(
35+
clientId = clientId,
36+
),
37+
)
38+
}

0 commit comments

Comments
 (0)