Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
283116d
feat(shareAccount): enhance terms page with new fields and date picke…
sam-arth07 Nov 1, 2025
2f6b626
feat(shareAccount): update date picker actions and enhance terms page…
sam-arth07 Nov 3, 2025
6d25b4a
fixed static checks
sam-arth07 Nov 4, 2025
c10ffcf
Merge branch 'openMF:development' into MIFOSAC-544
sam-arth07 Nov 4, 2025
09c1a66
Merge branch 'MIFOSAC-544' of https://github.com/sam-arth07/android-c…
sam-arth07 Nov 4, 2025
6f7de12
Initial plan
Copilot Nov 4, 2025
657dcc8
Enhance Terms Step with validation, proper data sources, and date pic…
Copilot Nov 4, 2025
663e532
Fix date validation by using kotlinx.datetime for proper date parsing
Copilot Nov 4, 2025
c414b9c
Fix code review issues: use proper validators and remove unnecessary …
Copilot Nov 4, 2025
3db0286
Add validation for frequency type when frequency value is provided
Copilot Nov 4, 2025
c71ad79
Remove unused TimeZone import
Copilot Nov 4, 2025
bed0bfe
feat(shareAccount): add functionality to retrieve share template from…
sam-arth07 Nov 4, 2025
caafa32
Implement Terms Step (Step 2) for Share Account Creation Flow
sam-arth07 Nov 4, 2025
73a7865
fixed static checks
sam-arth07 Nov 4, 2025
da06acb
fix(shareAccount): update date validation logic and enhance error han…
sam-arth07 Nov 6, 2025
7cb8e6a
fixed copilot actionale comments
sam-arth07 Nov 6, 2025
7d9636e
Merge branch 'development' into MIFOSAC-544
sam-arth07 Nov 6, 2025
4d63175
refactor(shareAccount): rename string resources to include feature pr…
sam-arth07 Nov 7, 2025
bb5544d
Merge branch 'MIFOSAC-544' of https://github.com/sam-arth07/android-c…
sam-arth07 Nov 7, 2025
8d8d427
Merge branch 'development' into MIFOSAC-544
sam-arth07 Nov 7, 2025
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 @@ -15,5 +15,5 @@ import kotlinx.coroutines.flow.Flow

interface ShareAccountRepository {

fun getShareTemplate(clientId: Int): Flow<DataState<ShareTemplate>>
fun getShareTemplate(clientId: Int, productId: Int?): Flow<DataState<ShareTemplate>>
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ShareAccountRepositoryImpl(
private val dataManagerShare: DataManagerShare,
) : ShareAccountRepository {

override fun getShareTemplate(clientId: Int): Flow<DataState<ShareTemplate>> {
return dataManagerShare.getShareTemplate(clientId).asDataStateFlow()
override fun getShareTemplate(clientId: Int, productId: Int?): Flow<DataState<ShareTemplate>> {
return dataManagerShare.getShareTemplate(clientId, productId).asDataStateFlow()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ fun MifosDatePickerTextField(
.fillMaxWidth()
.clip(DesignToken.shapes.medium),
label: String? = null,
errorMessage: String? = null,
openDatePicker: () -> Unit,
) {
OutlinedTextField(
Expand Down Expand Up @@ -398,6 +399,16 @@ fun MifosDatePickerTextField(
Icon(imageVector = Icons.Default.CalendarMonth, null)
}
},
isError = errorMessage != null,
supportingText = errorMessage?.let {
{
Text(
text = it,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.error,
)
}
},
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ class DataManagerShare(
private val baseApiManager: BaseApiManager,
) {

fun getShareTemplate(clientId: Int): Flow<ShareTemplate> =
baseApiManager.shareAccountService.shareProductTemplate(clientId)
fun getShareTemplate(clientId: Int, productId: Int?): Flow<ShareTemplate> =
baseApiManager.shareAccountService.shareProductTemplate(clientId, productId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,34 @@
*/
package com.mifos.core.network.model.share

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ProductOption(
@SerialName("id")
val id: Int,

@SerialName("name")
val name: String,

@SerialName("shortName")
val shortName: String,

@SerialName("totalShares")
val totalShares: Int,

val currency: ProductCurrency? = null,

val unitPrice: Double? = null,
)

@Serializable
data class ProductCurrency(
val code: String,

val name: String,

val decimalPlaces: Int? = null,

val displaySymbol: String? = null,

val nameCode: String? = null,

val displayLabel: String? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,46 @@
*/
package com.mifos.core.network.model.share

import com.mifos.core.model.objects.template.client.Currency
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class ShareTemplate(
@SerialName("clientId")
val clientId: Int,

@SerialName(value = "clientName")
val clientName: String,

@SerialName("productOptions")
val currency: Currency? = null,

val currentMarketPrice: Double? = null,

val productOptions: List<ProductOption> = emptyList(),

@SerialName("clientSavingsAccounts")
val savingsAccountOptions: List<SavingsAccountOption>? = emptyList(),

val lockinPeriodFrequencyTypeOptions: List<FrequencyTypeOption>? = emptyList(),

val minimumActivePeriodFrequencyTypeOptions: List<FrequencyTypeOption>? = emptyList(),
)

@Serializable
data class SavingsAccountOption(
val id: Int,

val accountNo: String,

val savingsProductName: String? = null,

val savingsProductId: Int? = null,
)

@Serializable
data class FrequencyTypeOption(
val id: Int,

val code: String,

val value: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@ interface ShareAccountService {
@GET("accounts/" + APIEndPoint.SHARE + "/template")
fun shareProductTemplate(
@Query("clientId") clientId: Int,
@Query("productId") productId: Int?,
): Flow<ShareTemplate>
}
38 changes: 25 additions & 13 deletions feature/client/src/commonMain/composeResources/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -539,21 +539,33 @@
<string name="title_new_fixed_deposit_account">New Fixed Deposit Account</string>

<!-- Create Share Account -->
<string name="share_account_details">Details</string>
<string name="share_account_terms">Terms</string>
<string name="share_account_charges">Charges</string>
<string name="share_account_preview">Preview</string>
<string name="share_account_back">Back</string>
<string name="share_account_next">Next</string>

<string name="share_account_detail_product_name">Product Name*</string>
<string name="share_account_detail_submission_date">Submission Date*</string>
<string name="share_account_detail_external_id">External Id</string>
<string name="share_account_detail_date_select">Select</string>
<string name="share_account_detail_date_cancel">Cancel</string>
<string name="feature_share_account_details">Details</string>
<string name="feature_share_account_terms">Terms</string>
<string name="feature_share_account_charges">Charges</string>
<string name="feature_share_account_preview">Preview</string>
<string name="feature_share_account_back">Back</string>
<string name="feature_share_account_next">Next</string>

<string name="feature_share_account_detail_product_name">Product Name*</string>
<string name="feature_share_account_detail_submission_date">Submission Date*</string>
<string name="feature_share_account_detail_external_id">External Id</string>
<string name="feature_share_account_detail_date_select">Select</string>
<string name="feature_share_account_detail_date_cancel">Cancel</string>

<string name="feature_share_account_terms_currency">Currency</string>
<string name="feature_share_account_terms_current_price">Current Price</string>
<string name="feature_share_account_terms_total_shares">Total Number of Shares</string>
<string name="feature_share_account_terms_default_savings_account">Default Savings Account</string>
<string name="feature_share_account_terms_application_date">Application Date</string>
<string name="feature_share_account_terms_allow_dividends">Allow dividends for inactive clients</string>
<string name="feature_share_account_terms_min_active_period">Minimum Active Period</string>
<string name="feature_share_account_terms_frequency">Frequency</string>
<string name="feature_share_account_terms_type">Type</string>
<string name="feature_share_account_terms_lock_in_period">Lock-in Period</string>


<!-- Handle Error-->
<string name="field_empty">This field cannot be empty</string>
<string name="feature_share_account_field_empty">This field cannot be empty</string>

<!-- Charges -->
<string name="charges_update">Update</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
package com.mifos.feature.client.createShareAccount

import androidclient.feature.client.generated.resources.Res
import androidclient.feature.client.generated.resources.share_account_charges
import androidclient.feature.client.generated.resources.share_account_details
import androidclient.feature.client.generated.resources.share_account_preview
import androidclient.feature.client.generated.resources.share_account_terms
import androidclient.feature.client.generated.resources.feature_share_account_charges
import androidclient.feature.client.generated.resources.feature_share_account_details
import androidclient.feature.client.generated.resources.feature_share_account_preview
import androidclient.feature.client.generated.resources.feature_share_account_terms
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
Expand Down Expand Up @@ -71,23 +71,24 @@ private fun CreateShareAccountContent(
navController: NavController,
) {
val steps = listOf(
Step(name = stringResource(Res.string.share_account_details)) {
Step(name = stringResource(Res.string.feature_share_account_details)) {
DetailsPage(
state = state,
onAction = onAction,
)
},
Step(name = stringResource(Res.string.share_account_terms)) {
Step(name = stringResource(Res.string.feature_share_account_terms)) {
TermsPage(
onNext = { onAction(ShareAccountAction.NextStep) },
state = state,
onAction = onAction,
)
},
Step(name = stringResource(Res.string.share_account_charges)) {
Step(name = stringResource(Res.string.feature_share_account_charges)) {
ChargesPage(
onNext = { onAction(ShareAccountAction.NextStep) },
)
},
Step(name = stringResource(Res.string.share_account_preview)) {
Step(name = stringResource(Res.string.feature_share_account_preview)) {
PreviewPage(
onNext = { onAction(ShareAccountAction.Finish) },
)
Expand Down
Loading