Skip to content

Commit fae0221

Browse files
authored
feat(shareAccount): implement terms page for share account. (#2531)
1 parent 2cea67f commit fae0221

File tree

12 files changed

+607
-75
lines changed

12 files changed

+607
-75
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ import kotlinx.coroutines.flow.Flow
1515

1616
interface ShareAccountRepository {
1717

18-
fun getShareTemplate(clientId: Int): Flow<DataState<ShareTemplate>>
18+
fun getShareTemplate(clientId: Int, productId: Int?): Flow<DataState<ShareTemplate>>
1919
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ShareAccountRepositoryImpl(
2020
private val dataManagerShare: DataManagerShare,
2121
) : ShareAccountRepository {
2222

23-
override fun getShareTemplate(clientId: Int): Flow<DataState<ShareTemplate>> {
24-
return dataManagerShare.getShareTemplate(clientId).asDataStateFlow()
23+
override fun getShareTemplate(clientId: Int, productId: Int?): Flow<DataState<ShareTemplate>> {
24+
return dataManagerShare.getShareTemplate(clientId, productId).asDataStateFlow()
2525
}
2626
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ fun MifosDatePickerTextField(
368368
.fillMaxWidth()
369369
.clip(DesignToken.shapes.medium),
370370
label: String? = null,
371+
errorMessage: String? = null,
371372
openDatePicker: () -> Unit,
372373
) {
373374
OutlinedTextField(
@@ -398,6 +399,16 @@ fun MifosDatePickerTextField(
398399
Icon(imageVector = Icons.Default.CalendarMonth, null)
399400
}
400401
},
402+
isError = errorMessage != null,
403+
supportingText = errorMessage?.let {
404+
{
405+
Text(
406+
text = it,
407+
style = MaterialTheme.typography.bodySmall,
408+
color = MaterialTheme.colorScheme.error,
409+
)
410+
}
411+
},
401412
)
402413
}
403414

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ class DataManagerShare(
1717
private val baseApiManager: BaseApiManager,
1818
) {
1919

20-
fun getShareTemplate(clientId: Int): Flow<ShareTemplate> =
21-
baseApiManager.shareAccountService.shareProductTemplate(clientId)
20+
fun getShareTemplate(clientId: Int, productId: Int?): Flow<ShareTemplate> =
21+
baseApiManager.shareAccountService.shareProductTemplate(clientId, productId)
2222
}

core/network/src/commonMain/kotlin/com/mifos/core/network/model/share/ProductOption.kt

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,34 @@
99
*/
1010
package com.mifos.core.network.model.share
1111

12-
import kotlinx.serialization.SerialName
1312
import kotlinx.serialization.Serializable
1413

1514
@Serializable
1615
data class ProductOption(
17-
@SerialName("id")
1816
val id: Int,
1917

20-
@SerialName("name")
2118
val name: String,
2219

23-
@SerialName("shortName")
2420
val shortName: String,
2521

26-
@SerialName("totalShares")
2722
val totalShares: Int,
23+
24+
val currency: ProductCurrency? = null,
25+
26+
val unitPrice: Double? = null,
27+
)
28+
29+
@Serializable
30+
data class ProductCurrency(
31+
val code: String,
32+
33+
val name: String,
34+
35+
val decimalPlaces: Int? = null,
36+
37+
val displaySymbol: String? = null,
38+
39+
val nameCode: String? = null,
40+
41+
val displayLabel: String? = null,
2842
)

core/network/src/commonMain/kotlin/com/mifos/core/network/model/share/ShareTemplate.kt

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,46 @@
99
*/
1010
package com.mifos.core.network.model.share
1111

12+
import com.mifos.core.model.objects.template.client.Currency
1213
import kotlinx.serialization.SerialName
1314
import kotlinx.serialization.Serializable
1415

1516
@Serializable
1617
data class ShareTemplate(
17-
@SerialName("clientId")
1818
val clientId: Int,
1919

20-
@SerialName(value = "clientName")
2120
val clientName: String,
2221

23-
@SerialName("productOptions")
22+
val currency: Currency? = null,
23+
24+
val currentMarketPrice: Double? = null,
25+
2426
val productOptions: List<ProductOption> = emptyList(),
27+
28+
@SerialName("clientSavingsAccounts")
29+
val savingsAccountOptions: List<SavingsAccountOption>? = emptyList(),
30+
31+
val lockinPeriodFrequencyTypeOptions: List<FrequencyTypeOption>? = emptyList(),
32+
33+
val minimumActivePeriodFrequencyTypeOptions: List<FrequencyTypeOption>? = emptyList(),
34+
)
35+
36+
@Serializable
37+
data class SavingsAccountOption(
38+
val id: Int,
39+
40+
val accountNo: String,
41+
42+
val savingsProductName: String? = null,
43+
44+
val savingsProductId: Int? = null,
45+
)
46+
47+
@Serializable
48+
data class FrequencyTypeOption(
49+
val id: Int,
50+
51+
val code: String,
52+
53+
val value: String,
2554
)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ interface ShareAccountService {
2020
@GET("accounts/" + APIEndPoint.SHARE + "/template")
2121
fun shareProductTemplate(
2222
@Query("clientId") clientId: Int,
23+
@Query("productId") productId: Int?,
2324
): Flow<ShareTemplate>
2425
}

feature/client/src/commonMain/composeResources/values/strings.xml

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -539,21 +539,33 @@
539539
<string name="title_new_fixed_deposit_account">New Fixed Deposit Account</string>
540540

541541
<!-- Create Share Account -->
542-
<string name="share_account_details">Details</string>
543-
<string name="share_account_terms">Terms</string>
544-
<string name="share_account_charges">Charges</string>
545-
<string name="share_account_preview">Preview</string>
546-
<string name="share_account_back">Back</string>
547-
<string name="share_account_next">Next</string>
548-
549-
<string name="share_account_detail_product_name">Product Name*</string>
550-
<string name="share_account_detail_submission_date">Submission Date*</string>
551-
<string name="share_account_detail_external_id">External Id</string>
552-
<string name="share_account_detail_date_select">Select</string>
553-
<string name="share_account_detail_date_cancel">Cancel</string>
542+
<string name="feature_share_account_details">Details</string>
543+
<string name="feature_share_account_terms">Terms</string>
544+
<string name="feature_share_account_charges">Charges</string>
545+
<string name="feature_share_account_preview">Preview</string>
546+
<string name="feature_share_account_back">Back</string>
547+
<string name="feature_share_account_next">Next</string>
548+
549+
<string name="feature_share_account_detail_product_name">Product Name*</string>
550+
<string name="feature_share_account_detail_submission_date">Submission Date*</string>
551+
<string name="feature_share_account_detail_external_id">External Id</string>
552+
<string name="feature_share_account_detail_date_select">Select</string>
553+
<string name="feature_share_account_detail_date_cancel">Cancel</string>
554+
555+
<string name="feature_share_account_terms_currency">Currency</string>
556+
<string name="feature_share_account_terms_current_price">Current Price</string>
557+
<string name="feature_share_account_terms_total_shares">Total Number of Shares</string>
558+
<string name="feature_share_account_terms_default_savings_account">Default Savings Account</string>
559+
<string name="feature_share_account_terms_application_date">Application Date</string>
560+
<string name="feature_share_account_terms_allow_dividends">Allow dividends for inactive clients</string>
561+
<string name="feature_share_account_terms_min_active_period">Minimum Active Period</string>
562+
<string name="feature_share_account_terms_frequency">Frequency</string>
563+
<string name="feature_share_account_terms_type">Type</string>
564+
<string name="feature_share_account_terms_lock_in_period">Lock-in Period</string>
565+
554566

555567
<!-- Handle Error-->
556-
<string name="field_empty">This field cannot be empty</string>
568+
<string name="feature_share_account_field_empty">This field cannot be empty</string>
557569

558570
<!-- Charges -->
559571
<string name="charges_update">Update</string>

feature/client/src/commonMain/kotlin/com/mifos/feature/client/createShareAccount/CreateShareAccountScreen.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
package com.mifos.feature.client.createShareAccount
1111

1212
import androidclient.feature.client.generated.resources.Res
13-
import androidclient.feature.client.generated.resources.share_account_charges
14-
import androidclient.feature.client.generated.resources.share_account_details
15-
import androidclient.feature.client.generated.resources.share_account_preview
16-
import androidclient.feature.client.generated.resources.share_account_terms
13+
import androidclient.feature.client.generated.resources.feature_share_account_charges
14+
import androidclient.feature.client.generated.resources.feature_share_account_details
15+
import androidclient.feature.client.generated.resources.feature_share_account_preview
16+
import androidclient.feature.client.generated.resources.feature_share_account_terms
1717
import androidx.compose.foundation.layout.Column
1818
import androidx.compose.foundation.layout.fillMaxSize
1919
import androidx.compose.foundation.layout.fillMaxWidth
@@ -71,23 +71,24 @@ private fun CreateShareAccountContent(
7171
navController: NavController,
7272
) {
7373
val steps = listOf(
74-
Step(name = stringResource(Res.string.share_account_details)) {
74+
Step(name = stringResource(Res.string.feature_share_account_details)) {
7575
DetailsPage(
7676
state = state,
7777
onAction = onAction,
7878
)
7979
},
80-
Step(name = stringResource(Res.string.share_account_terms)) {
80+
Step(name = stringResource(Res.string.feature_share_account_terms)) {
8181
TermsPage(
82-
onNext = { onAction(ShareAccountAction.NextStep) },
82+
state = state,
83+
onAction = onAction,
8384
)
8485
},
85-
Step(name = stringResource(Res.string.share_account_charges)) {
86+
Step(name = stringResource(Res.string.feature_share_account_charges)) {
8687
ChargesPage(
8788
onNext = { onAction(ShareAccountAction.NextStep) },
8889
)
8990
},
90-
Step(name = stringResource(Res.string.share_account_preview)) {
91+
Step(name = stringResource(Res.string.feature_share_account_preview)) {
9192
PreviewPage(
9293
onNext = { onAction(ShareAccountAction.Finish) },
9394
)

0 commit comments

Comments
 (0)