Skip to content

Commit 84ae030

Browse files
authored
Implement Client Identities Add/Update Screen (#2506)
1 parent 49bc962 commit 84ae030

File tree

59 files changed

+2286
-1830
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2286
-1830
lines changed

core/data/src/commonMain/kotlin/com/mifos/core/data/di/RepositoryModule.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import com.mifos.core.data.repository.CheckerInboxTasksRepository
1919
import com.mifos.core.data.repository.ClientChargeRepository
2020
import com.mifos.core.data.repository.ClientDetailsEditRepository
2121
import com.mifos.core.data.repository.ClientDetailsRepository
22-
import com.mifos.core.data.repository.ClientIdentifierDialogRepository
2322
import com.mifos.core.data.repository.ClientIdentifiersRepository
2423
import com.mifos.core.data.repository.ClientListRepository
2524
import com.mifos.core.data.repository.CreateNewCenterRepository
@@ -29,7 +28,7 @@ import com.mifos.core.data.repository.DataTableDataRepository
2928
import com.mifos.core.data.repository.DataTableListRepository
3029
import com.mifos.core.data.repository.DataTableRepository
3130
import com.mifos.core.data.repository.DataTableRowDialogRepository
32-
import com.mifos.core.data.repository.DocumentDialogRepository
31+
import com.mifos.core.data.repository.DocumentCreateUpdateRepository
3332
import com.mifos.core.data.repository.DocumentListRepository
3433
import com.mifos.core.data.repository.GenerateCollectionSheetRepository
3534
import com.mifos.core.data.repository.GroupDetailsRepository
@@ -81,7 +80,6 @@ import com.mifos.core.data.repositoryImp.CheckerInboxTasksRepositoryImp
8180
import com.mifos.core.data.repositoryImp.ClientChargeRepositoryImp
8281
import com.mifos.core.data.repositoryImp.ClientDetailsEditRepositoryImpl
8382
import com.mifos.core.data.repositoryImp.ClientDetailsRepositoryImp
84-
import com.mifos.core.data.repositoryImp.ClientIdentifierDialogRepositoryImp
8583
import com.mifos.core.data.repositoryImp.ClientIdentifiersRepositoryImp
8684
import com.mifos.core.data.repositoryImp.ClientListRepositoryImp
8785
import com.mifos.core.data.repositoryImp.CreateNewCenterRepositoryImp
@@ -91,7 +89,7 @@ import com.mifos.core.data.repositoryImp.DataTableDataRepositoryImp
9189
import com.mifos.core.data.repositoryImp.DataTableListRepositoryImp
9290
import com.mifos.core.data.repositoryImp.DataTableRepositoryImp
9391
import com.mifos.core.data.repositoryImp.DataTableRowDialogRepositoryImp
94-
import com.mifos.core.data.repositoryImp.DocumentDialogRepositoryImp
92+
import com.mifos.core.data.repositoryImp.DocumentCreateUpdateRepositoryImp
9593
import com.mifos.core.data.repositoryImp.DocumentListRepositoryImp
9694
import com.mifos.core.data.repositoryImp.GenerateCollectionSheetRepositoryImp
9795
import com.mifos.core.data.repositoryImp.GroupDetailsRepositoryImp
@@ -151,7 +149,6 @@ val RepositoryModule = module {
151149
singleOf(::ClientDetailsRepositoryImp) bind ClientDetailsRepository::class
152150
singleOf(::ClientListRepositoryImp) bind ClientListRepository::class
153151
singleOf(::ClientChargeRepositoryImp) bind ClientChargeRepository::class
154-
singleOf(::ClientIdentifierDialogRepositoryImp) bind ClientIdentifierDialogRepository::class
155152
singleOf(::ClientIdentifiersRepositoryImp) bind ClientIdentifiersRepository::class
156153
singleOf(::CreateNewClientRepositoryImp) bind CreateNewClientRepository::class
157154
singleOf(::ClientDetailsEditRepositoryImpl) bind ClientDetailsEditRepository::class
@@ -207,7 +204,7 @@ val RepositoryModule = module {
207204
singleOf(::DataTableListRepositoryImp) bind DataTableListRepository::class
208205
singleOf(::DataTableRepositoryImp) bind DataTableRepository::class
209206
singleOf(::DataTableRowDialogRepositoryImp) bind DataTableRowDialogRepository::class
210-
singleOf(::DocumentDialogRepositoryImp) bind DocumentDialogRepository::class
207+
singleOf(::DocumentCreateUpdateRepositoryImp) bind DocumentCreateUpdateRepository::class
211208
singleOf(::DocumentListRepositoryImp) bind DocumentListRepository::class
212209
singleOf(::IndividualCollectionSheetDetailsRepositoryImp) bind IndividualCollectionSheetDetailsRepository::class
213210
singleOf(::NewIndividualCollectionSheetRepositoryImp) bind NewIndividualCollectionSheetRepository::class

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

Lines changed: 0 additions & 27 deletions
This file was deleted.

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

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,33 @@ package com.mifos.core.data.repository
1111

1212
import com.mifos.core.common.utils.DataState
1313
import com.mifos.core.model.objects.noncoreobjects.Identifier
14-
import com.mifos.core.network.model.DeleteClientsClientIdIdentifiersIdentifierIdResponse
14+
import com.mifos.core.model.objects.noncoreobjects.IdentifierPayload
15+
import com.mifos.core.model.objects.noncoreobjects.IdentifierTemplate
16+
import com.mifos.core.network.GenericResponse
17+
import io.ktor.client.statement.HttpResponse
1518
import kotlinx.coroutines.flow.Flow
1619

1720
/**
18-
* Created by Aditya Gupta on 08/08/23.
21+
* Created by Arin Yadav on 12/09/2025.
1922
*/
2023
interface ClientIdentifiersRepository {
2124

22-
fun getClientIdentifiers(clientId: Int): Flow<DataState<List<Identifier>>>
25+
fun getClientListIdentifiers(clientId: Long): Flow<DataState<List<Identifier>>>
2326

24-
suspend fun deleteClientIdentifier(
25-
clientId: Int,
26-
identifierId: Int,
27-
): DeleteClientsClientIdIdentifiersIdentifierIdResponse
27+
fun getClientIdentifiers(clientId: Long, identifierId: Long): Flow<DataState<Identifier>>
28+
29+
fun getClientIdentifierTemplate(clientId: Long): Flow<DataState<IdentifierTemplate>>
30+
31+
suspend fun deleteClientIdentifier(clientId: Long, identifierId: Long): GenericResponse
32+
33+
suspend fun createClientIdentifier(
34+
clientId: Long,
35+
identifierPayload: IdentifierPayload,
36+
): HttpResponse
37+
38+
suspend fun updateClientIdentifier(
39+
clientId: Long,
40+
identifierId: Long,
41+
identifierPayload: IdentifierPayload,
42+
): GenericResponse
2843
}

core/data/src/commonMain/kotlin/com/mifos/core/data/repository/DocumentDialogRepository.kt renamed to core/data/src/commonMain/kotlin/com/mifos/core/data/repository/DocumentCreateUpdateRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import kotlinx.coroutines.flow.Flow
1717
/**
1818
* Created by Aditya Gupta on 16/08/23.
1919
*/
20-
interface DocumentDialogRepository {
20+
interface DocumentCreateUpdateRepository {
2121

2222
suspend fun createDocument(
2323
entityType: String,

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

Lines changed: 0 additions & 35 deletions
This file was deleted.

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

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,48 @@ import com.mifos.core.common.utils.DataState
1313
import com.mifos.core.common.utils.asDataStateFlow
1414
import com.mifos.core.data.repository.ClientIdentifiersRepository
1515
import com.mifos.core.model.objects.noncoreobjects.Identifier
16-
import com.mifos.core.network.datamanager.DataManagerClient
17-
import com.mifos.core.network.model.DeleteClientsClientIdIdentifiersIdentifierIdResponse
16+
import com.mifos.core.model.objects.noncoreobjects.IdentifierPayload
17+
import com.mifos.core.model.objects.noncoreobjects.IdentifierTemplate
18+
import com.mifos.core.network.GenericResponse
19+
import com.mifos.core.network.datamanager.DataManagerIdentifiers
20+
import io.ktor.client.statement.HttpResponse
1821
import kotlinx.coroutines.flow.Flow
1922

2023
/**
21-
* Created by Aditya Gupta on 08/08/23.
24+
* Created by Arin Yadav on 12/09/2025.
2225
*/
2326
class ClientIdentifiersRepositoryImp(
24-
private val dataManagerClient: DataManagerClient,
27+
private val dataManagerIdentifiers: DataManagerIdentifiers,
2528
) : ClientIdentifiersRepository {
2629

27-
override fun getClientIdentifiers(clientId: Int): Flow<DataState<List<Identifier>>> {
28-
return dataManagerClient.getClientIdentifiers(clientId).asDataStateFlow()
30+
override fun getClientListIdentifiers(clientId: Long): Flow<DataState<List<Identifier>>> {
31+
return dataManagerIdentifiers.getClientListIdentifiers(clientId).asDataStateFlow()
2932
}
3033

31-
override suspend fun deleteClientIdentifier(
32-
clientId: Int,
33-
identifierId: Int,
34-
): DeleteClientsClientIdIdentifiersIdentifierIdResponse {
35-
return dataManagerClient.deleteClientIdentifier(clientId, identifierId)
34+
override fun getClientIdentifiers(clientId: Long, identifierId: Long): Flow<DataState<Identifier>> {
35+
return dataManagerIdentifiers.getClientIdentifiers(clientId, identifierId).asDataStateFlow()
36+
}
37+
38+
override fun getClientIdentifierTemplate(clientId: Long): Flow<DataState<IdentifierTemplate>> {
39+
return dataManagerIdentifiers.getClientIdentifierTemplate(clientId).asDataStateFlow()
40+
}
41+
42+
override suspend fun deleteClientIdentifier(clientId: Long, identifierId: Long): GenericResponse {
43+
return dataManagerIdentifiers.deleteClientIdentifier(clientId, identifierId)
44+
}
45+
46+
override suspend fun createClientIdentifier(
47+
clientId: Long,
48+
identifierPayload: IdentifierPayload,
49+
): HttpResponse {
50+
return dataManagerIdentifiers.createClientIdentifier(clientId, identifierPayload)
51+
}
52+
53+
override suspend fun updateClientIdentifier(
54+
clientId: Long,
55+
identifierId: Long,
56+
identifierPayload: IdentifierPayload,
57+
): GenericResponse {
58+
return dataManagerIdentifiers.updateClientIdentifier(clientId, identifierId, identifierPayload)
3659
}
3760
}

core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/DocumentDialogRepositoryImp.kt renamed to core/data/src/commonMain/kotlin/com/mifos/core/data/repositoryImp/DocumentCreateUpdateRepositoryImp.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ package com.mifos.core.data.repositoryImp
1111

1212
import com.mifos.core.common.utils.DataState
1313
import com.mifos.core.common.utils.asDataStateFlow
14-
import com.mifos.core.data.repository.DocumentDialogRepository
14+
import com.mifos.core.data.repository.DocumentCreateUpdateRepository
1515
import com.mifos.core.network.GenericResponse
1616
import com.mifos.core.network.datamanager.DataManagerDocument
1717
import io.ktor.client.request.forms.MultiPartFormDataContent
@@ -21,9 +21,9 @@ import kotlinx.coroutines.flow.flow
2121
/**
2222
* Created by Aditya Gupta on 16/08/23.
2323
*/
24-
class DocumentDialogRepositoryImp(
24+
class DocumentCreateUpdateRepositoryImp(
2525
private val dataManagerDocument: DataManagerDocument,
26-
) : DocumentDialogRepository {
26+
) : DocumentCreateUpdateRepository {
2727

2828
override suspend fun createDocument(
2929
entityType: String,

core/data/src/commonMain/kotlin/com/mifos/core/data/util/ErrorHandling.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ suspend fun extractErrorMessage(response: HttpResponse): String {
2424
val errorResponse = json.decodeFromString<MifosError>(responseText)
2525
errorResponse.errors.firstOrNull()?.defaultUserMessage
2626
?: errorResponse.defaultUserMessage
27-
?: "Unknown error"
27+
?: Error.MSG_NOT_FOUND
2828
} catch (e: Exception) {
29-
"Failed to parse error response"
29+
Error.FAILED_TO_PARSE_ERROR_RESPONSE
3030
}
3131
}
32+
33+
data object Error {
34+
const val MSG_NOT_FOUND = "Message Not Found"
35+
const val FAILED_TO_PARSE_ERROR_RESPONSE = "Failed to parse error response"
36+
}

core/designsystem/src/commonMain/kotlin/com/mifos/core/designsystem/component/MifosButton.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,14 @@ fun MifosTextButton(
212212
modifier = modifier.height(48.dp),
213213
enabled = enabled,
214214
colors = ButtonDefaults.textButtonColors(
215-
contentColor = AppColors.customWhite,
216215
containerColor = MaterialTheme.colorScheme.primary,
216+
contentColor = MaterialTheme.colorScheme.onPrimary,
217+
disabledContainerColor = MaterialTheme.colorScheme.onSurface.copy(
218+
alpha = .12f,
219+
),
220+
disabledContentColor = MaterialTheme.colorScheme.onSurface.copy(
221+
.5f,
222+
),
217223
),
218224
content = content,
219225
shape = DesignToken.shapes.medium,

core/domain/src/commonMain/kotlin/com/mifos/core/domain/di/UseCaseModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ import com.mifos.core.domain.useCases.GetCentersInOfficeUseCase
4343
import com.mifos.core.domain.useCases.GetCheckerInboxBadgesUseCase
4444
import com.mifos.core.domain.useCases.GetCheckerTasksUseCase
4545
import com.mifos.core.domain.useCases.GetClientDetailsUseCase
46-
import com.mifos.core.domain.useCases.GetClientIdentifierTemplateUseCase
4746
import com.mifos.core.domain.useCases.GetClientPinpointLocationsUseCase
4847
import com.mifos.core.domain.useCases.GetClientSavingsAccountTemplateByProductUseCase
4948
import com.mifos.core.domain.useCases.GetClientTemplateUseCase
@@ -78,6 +77,7 @@ import com.mifos.core.domain.useCases.SaveIndividualCollectionSheetUseCase
7877
import com.mifos.core.domain.useCases.ServerConfigValidatorUseCase
7978
import com.mifos.core.domain.useCases.SubmitCollectionSheetUseCase
8079
import com.mifos.core.domain.useCases.SubmitProductiveSheetUseCase
80+
import com.mifos.core.domain.useCases.UpdateClientIdentifierUseCase
8181
import com.mifos.core.domain.useCases.UpdateClientPinpointUseCase
8282
import com.mifos.core.domain.useCases.UpdateNoteUseCase
8383
import com.mifos.core.domain.useCases.UpdateSignatureUseCase
@@ -125,7 +125,7 @@ val UseCaseModule = module {
125125
factoryOf(::GetCheckerInboxBadgesUseCase)
126126
factoryOf(::GetCheckerTasksUseCase)
127127
factoryOf(::GetClientDetailsUseCase)
128-
factoryOf(::GetClientIdentifierTemplateUseCase)
128+
factoryOf(::UpdateClientIdentifierUseCase)
129129
factoryOf(::GetClientPinpointLocationsUseCase)
130130
factoryOf(::GetClientSavingsAccountTemplateByProductUseCase)
131131
factoryOf(::GetDataTableInfoUseCase)

0 commit comments

Comments
 (0)