Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ import com.mifos.feature.center.navigation.centerNavGraph
import com.mifos.feature.center.navigation.navigateCenterDetailsScreenRoute
import com.mifos.feature.center.navigation.navigateCreateCenterScreenRoute
import com.mifos.feature.center.navigation.navigateToCenterListScreenRoute
import com.mifos.feature.client.clientProfile.navigateToClientProfileRoute
import com.mifos.feature.client.navigation.clientNavGraph
import com.mifos.feature.client.navigation.navigateClientDetailsScreen
import com.mifos.feature.client.navigation.navigateCreateClientScreen
Expand Down Expand Up @@ -346,7 +347,7 @@ internal fun AuthenticatedNavbarNavigationScreenContent(
onCreateCenter = navController::navigateCreateCenterScreenRoute,
onCreateGroup = navController::navigateToCreateNewGroupScreen,
onCenter = navController::navigateCenterDetailsScreenRoute,
onClient = navController::navigateClientDetailsScreen,
onClient = navController::navigateToClientProfileRoute,
onGroup = navController::navigateToGroupDetailsScreen,
onLoan = navController::navigateToLoanAccountSummaryScreen,
onSavings = navController::navigateClientDetailsScreen,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.mifos.core.common.utils.DataState
import com.mifos.core.model.objects.account.share.ShareAccounts
import com.mifos.core.network.model.ClientCloseTemplateResponse
import com.mifos.core.network.model.CollateralItem
import com.mifos.core.network.model.CollateralItemResult
import com.mifos.core.network.model.SavingAccountOption
import com.mifos.core.network.model.StaffOption
import com.mifos.room.entities.accounts.ClientAccounts
Expand Down Expand Up @@ -41,6 +42,8 @@ interface ClientDetailsRepository {

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

suspend fun getClientCollaterals(clientId: Int): DataState<List<CollateralItemResult>>

suspend fun getClient(clientId: Int): ClientEntity

fun getImage(clientId: Int): Flow<DataState<String>>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import com.mifos.core.model.objects.account.share.ShareAccounts
import com.mifos.core.network.datamanager.DataManagerClient
import com.mifos.core.network.model.ClientCloseTemplateResponse
import com.mifos.core.network.model.CollateralItem
import com.mifos.core.network.model.CollateralItemResult
import com.mifos.core.network.model.SavingAccountOption
import com.mifos.core.network.model.StaffOption
import com.mifos.room.entities.accounts.ClientAccounts
Expand Down Expand Up @@ -72,6 +73,15 @@ class ClientDetailsRepositoryImp(
}
}

override suspend fun getClientCollaterals(clientId: Int): DataState<List<CollateralItemResult>> {
return try {
val res = dataManagerClient.getClientCollateralItems(clientId)
return DataState.Success(res)
} catch (e: Exception) {
DataState.Error(e)
}
}

override suspend fun getClient(clientId: Int): ClientEntity {
return dataManagerClient.getClient(clientId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import com.mifos.core.network.mappers.clients.GetClientResponseMapper
import com.mifos.core.network.mappers.clients.GetClientsClientIdAccountMapper
import com.mifos.core.network.model.ClientCloseTemplateResponse
import com.mifos.core.network.model.CollateralItem
import com.mifos.core.network.model.CollateralItemResult
import com.mifos.core.network.model.PinpointLocationActionResponse
import com.mifos.core.network.model.PostClientAddressRequest
import com.mifos.core.network.model.PostClientAddressResponse
Expand Down Expand Up @@ -185,6 +186,10 @@ class DataManagerClient(
return mBaseApiManager.clientService.getCollateralItems()
}

suspend fun getClientCollateralItems(clientId: Int): List<CollateralItemResult> {
return mBaseApiManager.clientService.getClientCollateralItems(clientId)
}

/**
* This Method Fetching the Client Accounts (Loan, saving, etc Accounts ) from REST API
* and get the ClientAccounts and then Saving all Accounts into the Database and give the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,12 @@ data class CollateralItem(
val name: String,
val id: Int,
)

@Serializable
data class CollateralItemResult(
val name: String,
val collateralId: Int,
val basePrice: Double,
val pctToBase: Double,
val quantity: Double,
)
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.mifos.core.model.objects.clients.UpdateSavingsAccountRequest
import com.mifos.core.network.GenericResponse
import com.mifos.core.network.model.ClientCloseTemplateResponse
import com.mifos.core.network.model.CollateralItem
import com.mifos.core.network.model.CollateralItemResult
import com.mifos.core.network.model.GetClientsPageItemsResponse
import com.mifos.core.network.model.PinpointLocationActionResponse
import com.mifos.core.network.model.PostAuthenticationRequest
Expand Down Expand Up @@ -222,6 +223,9 @@ interface ClientService {
@GET("collateral-management")
suspend fun getCollateralItems(): List<CollateralItem>

@GET("clients/{clientId}/collaterals/template")
suspend fun getClientCollateralItems(@Path("clientId") clientId: Int): List<CollateralItemResult>

@POST("clients/{clientId}?command=assignStaff")
suspend fun assignStaff(
@Path("clientId") clientId: Int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import androidclient.core.ui.generated.resources.core_ui_total_value
import androidclient.core.ui.generated.resources.core_ui_type
import androidclient.core.ui.generated.resources.core_ui_waived
import androidclient.core.ui.generated.resources.listing_component_identifier_not_available
import androidclient.core.ui.generated.resources.name
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.spring
Expand Down Expand Up @@ -231,13 +232,13 @@ fun MifosActionsCollateralDataListingComponent(
menuList: List<Actions>,
onActionClicked: (Actions) -> Unit,
) {
MifosActionsListingComponentOutline {
MifosActionsListingComponentOutline(isExpanded = false) {
Column {
Column(
modifier = Modifier.padding(DesignToken.padding.large),
) {
MifosListingRowItem(
key = "Name",
key = stringResource(Res.string.name),
value = name,
keyStyle = MifosTypography.titleSmallEmphasized,
valueStyle = MifosTypography.titleSmall,
Expand All @@ -263,40 +264,42 @@ fun MifosActionsCollateralDataListingComponent(
)
}

Surface(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(
bottomStart = DesignToken.padding.medium,
bottomEnd = DesignToken.padding.medium,
),
) {
Column(
modifier = Modifier.padding(
vertical = DesignToken.padding.small,
if (menuList.isNotEmpty()) {
Surface(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(
bottomStart = DesignToken.padding.medium,
bottomEnd = DesignToken.padding.medium,
),
) {
menuList.map { menuItem ->
Row(
modifier = Modifier.fillMaxWidth()
.height(DesignToken.sizes.avatarMedium)
.clickable {
onActionClicked(menuItem)
},
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start,
) {
Icon(
modifier = Modifier.padding(horizontal = DesignToken.padding.large),
imageVector = menuItem.icon,
contentDescription = "",
)
Column(
modifier = Modifier.padding(
vertical = DesignToken.padding.small,
),
) {
menuList.map { menuItem ->
Row(
modifier = Modifier.fillMaxWidth()
.height(DesignToken.sizes.avatarMedium)
.clickable {
onActionClicked(menuItem)
},
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start,
) {
Icon(
modifier = Modifier.padding(horizontal = DesignToken.padding.large),
imageVector = menuItem.icon,
contentDescription = "",
)

Text(
modifier = Modifier.fillMaxWidth(),
text = menuItem::class.simpleName ?: "",
color = MaterialTheme.colorScheme.onSurface,
fontSize = MaterialTheme.typography.bodyLarge.fontSize,
)
Text(
modifier = Modifier.fillMaxWidth(),
text = menuItem::class.simpleName ?: "",
color = MaterialTheme.colorScheme.onSurface,
fontSize = MaterialTheme.typography.bodyLarge.fontSize,
)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2025 Mifos Initiative
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* See https://github.com/openMF/android-client/blob/master/LICENSE.md
*/
package com.mifos.feature.client.clientCollateralDetails

import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import kotlinx.serialization.Serializable

@Serializable
data class ClientCollateralDetailRoute(
val clientId: Int = -1,
)

fun NavGraphBuilder.clientCollateralDetailDestination(
navController: NavController,
) {
composable<ClientCollateralDetailRoute> {
ClientCollateralDetailScreen(navController)
}
}

fun NavController.navigateToClientCollateralDetailRoute(
clientId: Int,
) {
this.navigate(
ClientCollateralDetailRoute(
clientId = clientId,
),
)
}
Loading