This is an automated email from the ASF dual-hosted git repository. rajanmaurya154 pushed a commit to branch development in repository https://gitbox.apache.org/repos/asf/fineract-cn-mobile.git
The following commit(s) were added to refs/heads/development by this push: new 09de0e3 Feat #FINCN-202 - Adds support for editing loan details. 09de0e3 is described below commit 09de0e3508b7e0cd5c13c4e2c8fb01bdd72cbeb8 Author: jawid1 <muhamm...@softcell.com> AuthorDate: Wed Mar 4 16:29:55 2020 +0530 Feat #FINCN-202 - Adds support for editing loan details. --- .../data/datamanager/api/DataManagerLoans.java | 13 ++- .../fineract/data/models/loan/AccountAssignment.kt | 5 +- .../fineract/data/models/loan/LoanAccount.kt | 8 +- .../fineract/data/models/loan/LoanParameters.kt | 18 ++-- .../apache/fineract/data/services/LoanService.java | 9 +- .../ui/adapters/LoanApplicationStepAdapter.java | 20 +++- .../loanaccountlist/LoanAccountsFragment.java | 6 +- .../loanapplication/BaseFragmentDebtIncome.java | 4 +- .../loanapplication/LoanApplicationAction.kt | 6 ++ .../loanapplication/LoanDebtIncomeFragment.java | 47 ++++++++- .../loanactivity/LoanApplicationActivity.java | 51 +++++++-- .../loanactivity/LoanApplicationContract.java | 4 + .../loanactivity/LoanApplicationPresenter.java | 34 +++++- .../loancosigner/LoanCoSignerFragment.java | 33 +++++- .../loancosigner/LoanCoSignerPresenter.java | 5 +- .../loandetails/LoanDetailsContract.java | 4 +- .../loandetails/LoanDetailsFragment.java | 114 ++++++++++++++++++--- .../loandetails/LoanDetailsPresenter.java | 16 ++- .../loandetails/CustomerLoanDetailsFragment.java | 34 ++++-- .../ui/online/review/AddLoanReviewFragment.kt | 3 +- .../org/apache/fineract/utils/ConstantKeys.java | 7 +- app/src/main/res/values/strings.xml | 2 + app/src/main/resources/loanAccount.json | 8 +- 23 files changed, 378 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerLoans.java b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerLoans.java index e641d7f..4efdfa2 100644 --- a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerLoans.java +++ b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerLoans.java @@ -17,7 +17,7 @@ import io.reactivex.functions.Function; /** * @author Rajan Maurya - * On 07/07/17. + * On 07/07/17. */ @Singleton public class DataManagerLoans extends FineractBaseDataManager { @@ -27,7 +27,7 @@ public class DataManagerLoans extends FineractBaseDataManager { @Inject public DataManagerLoans(BaseApiManager baseApiManager, PreferencesHelper preferencesHelper, - DataManagerAuth dataManagerAuth) { + DataManagerAuth dataManagerAuth) { super(dataManagerAuth, preferencesHelper); this.baseApiManager = baseApiManager; this.preferencesHelper = preferencesHelper; @@ -78,4 +78,13 @@ public class DataManagerLoans extends FineractBaseDataManager { return authenticatedCompletableApi(baseApiManager.getLoanApi() .createLoan(productIdentifier, loanAccount)); } + + public Completable updateLoan( + String productIdentifier, + LoanAccount loanAccount, + String caseIdentifier) { + return authenticatedCompletableApi( + baseApiManager.getLoanApi(). + updateLoan(productIdentifier, caseIdentifier, loanAccount)); + } } diff --git a/app/src/main/java/org/apache/fineract/data/models/loan/AccountAssignment.kt b/app/src/main/java/org/apache/fineract/data/models/loan/AccountAssignment.kt index 4a9e876..043d882 100644 --- a/app/src/main/java/org/apache/fineract/data/models/loan/AccountAssignment.kt +++ b/app/src/main/java/org/apache/fineract/data/models/loan/AccountAssignment.kt @@ -1,13 +1,16 @@ package org.apache.fineract.data.models.loan +import android.os.Parcelable import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize /** * @author Rajan Maurya * On 09/07/17. */ +@Parcelize data class AccountAssignment ( @SerializedName("designator") var designator: String? = null, @SerializedName("accountIdentifier") var accountIdentifier: String? = null, @SerializedName("ledgerIdentifier") var ledgerIdentifier: String? = null -) \ No newline at end of file +):Parcelable \ No newline at end of file diff --git a/app/src/main/java/org/apache/fineract/data/models/loan/LoanAccount.kt b/app/src/main/java/org/apache/fineract/data/models/loan/LoanAccount.kt index b1daa84..c7dd13f 100644 --- a/app/src/main/java/org/apache/fineract/data/models/loan/LoanAccount.kt +++ b/app/src/main/java/org/apache/fineract/data/models/loan/LoanAccount.kt @@ -1,14 +1,16 @@ package org.apache.fineract.data.models.loan +import android.os.Parcelable import com.google.gson.Gson import com.google.gson.annotations.SerializedName - -import java.util.ArrayList +import kotlinx.android.parcel.Parcelize +import java.util.* /** * @author Rajan Maurya * On 09/07/17. */ +@Parcelize data class LoanAccount( @SerializedName("identifier") var identifier: String? = null, @SerializedName("productIdentifier") var productIdentifier: String? = null, @@ -20,7 +22,7 @@ data class LoanAccount( @SerializedName("createdBy") var createdBy: String? = null, @SerializedName("lastModifiedOn") var lastModifiedOn: String? = null, @SerializedName("lastModifiedBy") var lastModifiedBy: String? = null -) { +):Parcelable { private val loanParameters: LoanParameters? = null diff --git a/app/src/main/java/org/apache/fineract/data/models/loan/LoanParameters.kt b/app/src/main/java/org/apache/fineract/data/models/loan/LoanParameters.kt index 08e9b08..cbd83d4 100644 --- a/app/src/main/java/org/apache/fineract/data/models/loan/LoanParameters.kt +++ b/app/src/main/java/org/apache/fineract/data/models/loan/LoanParameters.kt @@ -1,17 +1,21 @@ package org.apache.fineract.data.models.loan +import android.os.Parcelable import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize +import kotlinx.android.parcel.RawValue /** * @author Rajan Maurya * On 12/07/17. */ +@Parcelize data class LoanParameters( - @SerializedName("customerIdentifier") var customerIdentifier: String? = null, - @SerializedName("creditWorthinessSnapshots") var creditWorthinessSnapshots: - List<CreditWorthinessSnapshot>? = null, - @SerializedName("maximumBalance") var maximumBalance: Double? = null, - @SerializedName("termRange") var termRange: TermRange? = null, - @SerializedName("paymentCycle") var paymentCycle: PaymentCycle? = null -) \ No newline at end of file + @SerializedName("customerIdentifier") var customerIdentifier: String? = null, + @SerializedName("creditWorthinessSnapshots") var creditWorthinessSnapshots: + List<CreditWorthinessSnapshot>? = null, + @SerializedName("maximumBalance") var maximumBalance: Double? = null, + @SerializedName("termRange") var termRange: @RawValue TermRange? = null, + @SerializedName("paymentCycle") var paymentCycle: @RawValue PaymentCycle? = null +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/org/apache/fineract/data/services/LoanService.java b/app/src/main/java/org/apache/fineract/data/services/LoanService.java index f547c9f..b419331 100644 --- a/app/src/main/java/org/apache/fineract/data/services/LoanService.java +++ b/app/src/main/java/org/apache/fineract/data/services/LoanService.java @@ -10,12 +10,13 @@ import io.reactivex.Observable; import retrofit2.http.Body; import retrofit2.http.GET; import retrofit2.http.POST; +import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.Query; /** * @author Rajan Maurya - * On 07/07/17. + * On 07/07/17. */ public interface LoanService { @@ -40,4 +41,10 @@ public interface LoanService { Completable createLoan( @Path("productidentifier") String productidentifier, @Body LoanAccount loanAccount); + + @PUT(EndPoints.API_PORTFOLIO_PATH + "/products/{productidentifier}/cases/{caseidentifier}") + Completable updateLoan( + @Path("productidentifier") String productIdentifier, + @Path("caseidentifier") String caseIdentifier, + @Body LoanAccount loanAccount); } diff --git a/app/src/main/java/org/apache/fineract/ui/adapters/LoanApplicationStepAdapter.java b/app/src/main/java/org/apache/fineract/ui/adapters/LoanApplicationStepAdapter.java index 924ed33..8566f04 100644 --- a/app/src/main/java/org/apache/fineract/ui/adapters/LoanApplicationStepAdapter.java +++ b/app/src/main/java/org/apache/fineract/ui/adapters/LoanApplicationStepAdapter.java @@ -1,6 +1,7 @@ package org.apache.fineract.ui.adapters; import android.content.Context; + import androidx.annotation.IntRange; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentManager; @@ -10,6 +11,8 @@ import com.stepstone.stepper.adapter.AbstractFragmentStepAdapter; import com.stepstone.stepper.viewmodel.StepViewModel; import org.apache.fineract.R; +import org.apache.fineract.data.models.loan.LoanAccount; +import org.apache.fineract.ui.online.loanaccounts.loanapplication.LoanApplicationAction; import org.apache.fineract.ui.online.loanaccounts.loanapplication.LoanDebtIncomeFragment; import org.apache.fineract.ui.online.loanaccounts.loanapplication.loancosigner.LoanCoSignerFragment; import org.apache.fineract.ui.online.loanaccounts.loanapplication.loandetails.LoanDetailsFragment; @@ -17,16 +20,23 @@ import org.apache.fineract.ui.online.review.AddLoanReviewFragment; /** * @author Rajan Maurya - * On 17/07/17. + * On 17/07/17. */ public class LoanApplicationStepAdapter extends AbstractFragmentStepAdapter { private String[] loanApplicationSteps; + private LoanAccount loanAccount; + private LoanApplicationAction loanApplicationAction; - public LoanApplicationStepAdapter(@NonNull FragmentManager fm, @NonNull Context context) { + public LoanApplicationStepAdapter(@NonNull FragmentManager fm, + @NonNull Context context, + @NonNull LoanAccount loanAccount, + @NonNull LoanApplicationAction loanApplicationAction) { super(fm, context); loanApplicationSteps = context.getResources().getStringArray( R.array.loan_application_steps); + this.loanAccount = loanAccount; + this.loanApplicationAction = loanApplicationAction; } @NonNull @@ -41,11 +51,11 @@ public class LoanApplicationStepAdapter extends AbstractFragmentStepAdapter { public Step createStep(@IntRange(from = 0L) int position) { switch (position) { case 0: - return LoanDetailsFragment.newInstance(); + return LoanDetailsFragment.newInstance(loanAccount, loanApplicationAction); case 1: - return LoanDebtIncomeFragment.newInstance(); + return LoanDebtIncomeFragment.newInstance(loanAccount, loanApplicationAction); case 2: - return LoanCoSignerFragment.newInstance(); + return LoanCoSignerFragment.newInstance(loanAccount, loanApplicationAction); case 3: return AddLoanReviewFragment.Companion.newInstance(); } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java index 7862fca..a0ea70e 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java @@ -24,6 +24,7 @@ import org.apache.fineract.ui.base.FineractBaseActivity; import org.apache.fineract.ui.base.FineractBaseFragment; import org.apache.fineract.ui.base.OnItemClickListener; import org.apache.fineract.ui.base.Toaster; +import org.apache.fineract.ui.online.loanaccounts.loanapplication.LoanApplicationAction; import org.apache.fineract.ui.online.loanaccounts.loanapplication.loanactivity.LoanApplicationActivity; import org.apache.fineract.ui.online.loanaccounts.loandetails.CustomerLoanDetailsFragment; import org.apache.fineract.utils.ConstantKeys; @@ -39,7 +40,7 @@ import butterknife.OnClick; /** * @author Rajan Maurya - * On 07/07/17. + * On 07/07/17. */ public class LoanAccountsFragment extends FineractBaseFragment implements LoanAccountsContract.View, SwipeRefreshLayout.OnRefreshListener, OnItemClickListener { @@ -83,7 +84,7 @@ public class LoanAccountsFragment extends FineractBaseFragment implements LoanAc @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { + @Nullable Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_customer_loans, container, false); ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this); ButterKnife.bind(this, rootView); @@ -119,6 +120,7 @@ public class LoanAccountsFragment extends FineractBaseFragment implements LoanAc void createNewLoan() { Intent intent = new Intent(getActivity(), LoanApplicationActivity.class); intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier); + intent.putExtra(ConstantKeys.LOAN_APPLICATION_ACTION, LoanApplicationAction.CREATE); startActivity(intent); } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/BaseFragmentDebtIncome.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/BaseFragmentDebtIncome.java index 91d12fc..e70e63c 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/BaseFragmentDebtIncome.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/BaseFragmentDebtIncome.java @@ -69,8 +69,8 @@ public abstract class BaseFragmentDebtIncome extends FineractBaseFragment implem private Double totalIncome = 0.0; private Double ratio = 00.00; - private List<CreditWorthinessFactor> debtCreditWorthinessFactors; - private List<CreditWorthinessFactor> incomeCreditWorthinessFactors; + protected List<CreditWorthinessFactor> debtCreditWorthinessFactors; + protected List<CreditWorthinessFactor> incomeCreditWorthinessFactors; @Override public void onCreate(Bundle savedInstanceState) { diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/LoanApplicationAction.kt b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/LoanApplicationAction.kt new file mode 100644 index 0000000..c9f745c --- /dev/null +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/LoanApplicationAction.kt @@ -0,0 +1,6 @@ +package org.apache.fineract.ui.online.loanaccounts.loanapplication + +enum class LoanApplicationAction { + CREATE, + EDIT +} \ No newline at end of file diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/LoanDebtIncomeFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/LoanDebtIncomeFragment.java index 173a9e4..31a1fdc 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/LoanDebtIncomeFragment.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/LoanDebtIncomeFragment.java @@ -3,29 +3,72 @@ package org.apache.fineract.ui.online.loanaccounts.loanapplication; import android.app.Activity; import android.content.Context; import android.os.Bundle; +import android.view.View; + import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.gson.Gson; import com.stepstone.stepper.Step; import com.stepstone.stepper.VerificationError; import org.apache.fineract.R; +import org.apache.fineract.data.models.loan.CreditWorthinessFactor; +import org.apache.fineract.data.models.loan.CreditWorthinessSnapshot; +import org.apache.fineract.data.models.loan.LoanAccount; +import org.apache.fineract.data.models.loan.LoanParameters; +import org.apache.fineract.utils.ConstantKeys; + +import java.util.Objects; /** * @author Rajan Maurya - * On 24/07/17. + * On 24/07/17. */ public class LoanDebtIncomeFragment extends BaseFragmentDebtIncome implements Step { private OnNavigationBarListener.LoanDebtIncomeData onNavigationBarListener; + private LoanApplicationAction loanApplicationAction; + private LoanAccount loanAccount; + private LoanParameters loanParameters; - public static LoanDebtIncomeFragment newInstance() { + public static LoanDebtIncomeFragment newInstance( + LoanAccount loanAccount, + LoanApplicationAction loanApplicationAction) { LoanDebtIncomeFragment fragment = new LoanDebtIncomeFragment(); Bundle args = new Bundle(); + args.putSerializable(ConstantKeys.LOAN_APPLICATION_ACTION, loanApplicationAction); + args.putParcelable(ConstantKeys.LOAN_ACCOUNT, loanAccount); fragment.setArguments(args); return fragment; } @Override + public void onViewCreated(@NonNull View view, + @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + loanApplicationAction = (LoanApplicationAction) getArguments() + .getSerializable(ConstantKeys.LOAN_APPLICATION_ACTION); + + if (loanApplicationAction == LoanApplicationAction.EDIT) { + loanAccount = getArguments().getParcelable(ConstantKeys.LOAN_ACCOUNT); + loanParameters = new Gson().fromJson(loanAccount.getParameters(), LoanParameters.class); + for (CreditWorthinessSnapshot snapshot + : Objects.requireNonNull(loanParameters.getCreditWorthinessSnapshots())) { + for (CreditWorthinessFactor debt : snapshot.getDebts()) { + addDebt(debt); + } + + for (CreditWorthinessFactor income : snapshot.getIncomeSources()) { + addDebt(income); + } + } + + } + + } + + @Override protected int getFragmentLayout() { return R.layout.fragment_loan_debt_income_ratio; } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java index 4dd4e51..578a915 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java @@ -17,6 +17,7 @@ import org.apache.fineract.data.models.loan.TermRange; import org.apache.fineract.ui.adapters.LoanApplicationStepAdapter; import org.apache.fineract.ui.base.FineractBaseActivity; import org.apache.fineract.ui.base.Toaster; +import org.apache.fineract.ui.online.loanaccounts.loanapplication.LoanApplicationAction; import org.apache.fineract.ui.online.loanaccounts.loanapplication.OnNavigationBarListener; import org.apache.fineract.utils.ConstantKeys; @@ -30,7 +31,7 @@ import butterknife.ButterKnife; /** * @author Rajan Maurya - * On 17/07/17. + * On 17/07/17. */ public class LoanApplicationActivity extends FineractBaseActivity implements StepperLayout.StepperListener, OnNavigationBarListener.LoanDetailsData, @@ -53,6 +54,8 @@ public class LoanApplicationActivity extends FineractBaseActivity private String customerIdentifier; private LoanParameters loanParameters; private String selectedProduct; + private LoanApplicationAction loanApplicationAction; + private String caseIdentifier; @Override protected void onCreate(Bundle savedInstanceState) { @@ -64,18 +67,31 @@ public class LoanApplicationActivity extends FineractBaseActivity creditWorthinessSnapshots = new ArrayList<>(); loanAccount = new LoanAccount(); loanParameters = new LoanParameters(); - + loanApplicationAction = (LoanApplicationAction) getIntent() + .getSerializableExtra(ConstantKeys.LOAN_APPLICATION_ACTION); customerIdentifier = getIntent().getExtras().getString(ConstantKeys.CUSTOMER_IDENTIFIER); + switch (loanApplicationAction) { + case CREATE: + setToolbarTitle(getString(R.string.create_new_loan)); + break; + case EDIT: + setToolbarTitle(getString(R.string.edit_loan)); + caseIdentifier = getIntent().getExtras().getString(ConstantKeys.CASE_IDENTIFIER); + loanAccount = getIntent().getExtras().getParcelable(ConstantKeys.LOAN_ACCOUNT); + if (loanAccount != null) { + loanParameters = loanAccount.getLoanParameters(); + } + } if (savedInstanceState != null) { currentPosition = savedInstanceState.getInt(CURRENT_STEP_POSITION); } LoanApplicationStepAdapter stepAdapter = new LoanApplicationStepAdapter( - getSupportFragmentManager(), this); + getSupportFragmentManager(), this, loanAccount, loanApplicationAction); stepperLayout.setAdapter(stepAdapter, currentPosition); stepperLayout.setListener(this); stepperLayout.setOffscreenPageLimit(stepAdapter.getCount()); - setToolbarTitle(getString(R.string.create_new_loan)); + showBackButton(); } @@ -94,7 +110,18 @@ public class LoanApplicationActivity extends FineractBaseActivity @Override public void onCompleted(View completeButton) { loanParameters.setCreditWorthinessSnapshots(creditWorthinessSnapshots); - loanApplicationPresenter.createLoan(loanAccount.getProductIdentifier(), loanAccount); + switch (loanApplicationAction) { + case CREATE: + loanApplicationPresenter.createLoan( + loanAccount.getProductIdentifier(), + loanAccount); + case EDIT: + loanApplicationPresenter.updateLoan( + loanAccount.getProductIdentifier(), + loanAccount, + caseIdentifier); + } + } @Override @@ -120,6 +147,11 @@ public class LoanApplicationActivity extends FineractBaseActivity } @Override + public void applicationUpdatedSuccessfully() { + finish(); + } + + @Override public void showProgressbar(String message) { stepperLayout.showProgress(message); } @@ -140,9 +172,12 @@ public class LoanApplicationActivity extends FineractBaseActivity } @Override - public void setLoanDetails(LoanAccount.State currentState, String identifier, - String productIdentifier, Double maximumBalance, PaymentCycle paymentCycle, - TermRange termRange, String selectedProduct) { + public void setLoanDetails(LoanAccount.State currentState, + String identifier, + String productIdentifier, + Double maximumBalance, + PaymentCycle paymentCycle, + TermRange termRange, String selectedProduct) { this.selectedProduct = selectedProduct; loanAccount.setCurrentState(currentState); diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationContract.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationContract.java index 753d63e..4722418 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationContract.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationContract.java @@ -13,6 +13,8 @@ public interface LoanApplicationContract { void applicationCreatedSuccessfully(); + void applicationUpdatedSuccessfully(); + void showProgressbar(String message); void hideProgressbar(); @@ -23,5 +25,7 @@ public interface LoanApplicationContract { interface Presenter { void createLoan(String productIdentifier, LoanAccount loanAccount); + + void updateLoan(String productIdentifier, LoanAccount loanAccount, String caseIdentifier); } } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java index 8bcf87b..a53b716 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java @@ -18,7 +18,7 @@ import io.reactivex.schedulers.Schedulers; /** * @author Rajan Maurya - * On 24/07/17. + * On 24/07/17. */ @ConfigPersistent public class LoanApplicationPresenter extends BasePresenter<LoanApplicationContract.View> @@ -29,7 +29,7 @@ public class LoanApplicationPresenter extends BasePresenter<LoanApplicationContr @Inject public LoanApplicationPresenter(@ApplicationContext Context context, - DataManagerLoans dataManagerLoans) { + DataManagerLoans dataManagerLoans) { super(context); this.dataManagerLoans = dataManagerLoans; compositeDisposable = new CompositeDisposable(); @@ -69,4 +69,34 @@ public class LoanApplicationPresenter extends BasePresenter<LoanApplicationContr }) ); } + + @Override + public void updateLoan(String productIdentifier, + LoanAccount loanAccount, + String caseIdentifier) { + checkViewAttached(); + getMvpView().showProgressbar(context.getString(R.string.updating_loan_please_wait)); + compositeDisposable.add(dataManagerLoans.updateLoan( + productIdentifier, + loanAccount, + caseIdentifier + ).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeWith(new DisposableCompletableObserver() { + @Override + public void onComplete() { + getMvpView().hideProgressbar(); + getMvpView().applicationUpdatedSuccessfully(); + } + + @Override + public void onError(Throwable throwable) { + getMvpView().hideProgressbar(); + showExceptionError(throwable, + context.getString(R.string.error_while_updating_loan)); + } + }) + ); + } + } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java index 21f82fc..4851655 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java @@ -3,23 +3,29 @@ package org.apache.fineract.ui.online.loanaccounts.loanapplication.loancosigner; import android.app.Activity; import android.content.Context; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import android.text.TextUtils; import android.view.View; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.ImageView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.gson.Gson; import com.stepstone.stepper.Step; import com.stepstone.stepper.VerificationError; import org.apache.fineract.R; import org.apache.fineract.data.models.loan.CreditWorthinessSnapshot; +import org.apache.fineract.data.models.loan.LoanAccount; +import org.apache.fineract.data.models.loan.LoanParameters; import org.apache.fineract.ui.base.FineractBaseActivity; import org.apache.fineract.ui.base.Toaster; import org.apache.fineract.ui.online.loanaccounts.loanapplication.BaseFragmentDebtIncome; +import org.apache.fineract.ui.online.loanaccounts.loanapplication.LoanApplicationAction; import org.apache.fineract.ui.online.loanaccounts.loanapplication.OnNavigationBarListener; +import org.apache.fineract.utils.ConstantKeys; import java.util.List; @@ -30,7 +36,7 @@ import butterknife.OnClick; /** * @author Rajan Maurya - * On 19/07/17. + * On 19/07/17. */ public class LoanCoSignerFragment extends BaseFragmentDebtIncome implements Step, LoanCoSignerContract.View { @@ -49,10 +55,17 @@ public class LoanCoSignerFragment extends BaseFragmentDebtIncome implements Step String[] customers; private OnNavigationBarListener.LoanCoSignerData onNavigationBarListener; + private LoanAccount loanAccount; + private LoanApplicationAction loanApplicationAction; + private LoanParameters loanParameters; - public static LoanCoSignerFragment newInstance() { + public static LoanCoSignerFragment newInstance( + LoanAccount loanAccount, + LoanApplicationAction loanApplicationAction) { LoanCoSignerFragment fragment = new LoanCoSignerFragment(); Bundle args = new Bundle(); + args.putSerializable(ConstantKeys.LOAN_APPLICATION_ACTION, loanApplicationAction); + args.putParcelable(ConstantKeys.LOAN_ACCOUNT, loanAccount); fragment.setArguments(args); return fragment; } @@ -62,13 +75,23 @@ public class LoanCoSignerFragment extends BaseFragmentDebtIncome implements Step super.onViewCreated(view, savedInstanceState); ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this); loanCoSignerPresenter.attachView(this); + loanApplicationAction = (LoanApplicationAction) getArguments() + .getSerializable(ConstantKeys.LOAN_APPLICATION_ACTION); + if (loanApplicationAction == LoanApplicationAction.EDIT) { + loanAccount = getArguments().getParcelable(ConstantKeys.LOAN_ACCOUNT); + loanParameters = new Gson().fromJson(loanAccount.getParameters(), LoanParameters.class); + etCustomer.setText( + loanParameters.getCreditWorthinessSnapshots().get(0).getForCustomer() + ); + } rootView = view; } @OnClick(R.id.iv_search_customer) void searchCustomer() { if (TextUtils.isEmpty(etCustomer.getText().toString())) { - Toaster.show(rootView, getString(R.string.customer_name_should_not_be_empty)); + Toaster.show(rootView, + getString(R.string.customer_name_should_not_be_empty)); } else { loanCoSignerPresenter.searchCustomer(etCustomer.getText().toString().trim()); } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java index ee34cd2..a26d4e3 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java @@ -23,7 +23,7 @@ import io.reactivex.schedulers.Schedulers; /** * @author Rajan Maurya - * On 24/07/17. + * On 24/07/17. */ @ConfigPersistent public class LoanCoSignerPresenter extends BasePresenter<LoanCoSignerContract.View> @@ -37,7 +37,7 @@ public class LoanCoSignerPresenter extends BasePresenter<LoanCoSignerContract.Vi @Inject public LoanCoSignerPresenter(@ApplicationContext Context context, - DataManagerCustomer dataManagerCustomer) { + DataManagerCustomer dataManagerCustomer) { super(context); this.dataManagerCustomer = dataManagerCustomer; compositeDisposable = new CompositeDisposable(); @@ -96,6 +96,7 @@ public class LoanCoSignerPresenter extends BasePresenter<LoanCoSignerContract.Vi @Override public Boolean findCustomer(final String customer, String[] customers) { boolean isCustomerPresent = false; + if (customers == null) return false; for (String s : customers) { if (s.equals(customer)) { isCustomerPresent = true; diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsContract.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsContract.java index f591509..c13ae62 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsContract.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsContract.java @@ -7,7 +7,7 @@ import java.util.List; /** * @author Rajan Maurya - * On 20/07/17. + * On 20/07/17. */ public class LoanDetailsContract { @@ -46,5 +46,7 @@ public class LoanDetailsContract { void setProductPositionAndValidateViews(Integer position); List<String> getCurrentTermUnitType(List<String> unitTypes, String unitType); + + int getItemIndexFromList(List<String> list, String item); } } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java index 54e208b..1acf683 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java @@ -3,11 +3,6 @@ package org.apache.fineract.ui.online.loanaccounts.loanapplication.loandetails; import android.app.Activity; import android.content.Context; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.material.textfield.TextInputLayout; -import androidx.core.widget.NestedScrollView; -import androidx.appcompat.widget.AppCompatSpinner; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; @@ -19,18 +14,28 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RadioButton; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatSpinner; +import androidx.core.widget.NestedScrollView; + +import com.google.android.material.textfield.TextInputLayout; +import com.google.gson.Gson; import com.stepstone.stepper.Step; import com.stepstone.stepper.VerificationError; import org.apache.fineract.R; import org.apache.fineract.data.models.loan.LoanAccount; +import org.apache.fineract.data.models.loan.LoanParameters; import org.apache.fineract.data.models.loan.PaymentCycle; import org.apache.fineract.data.models.loan.TermRange; import org.apache.fineract.data.models.product.Product; import org.apache.fineract.ui.base.FineractBaseActivity; import org.apache.fineract.ui.base.FineractBaseFragment; import org.apache.fineract.ui.base.Toaster; +import org.apache.fineract.ui.online.loanaccounts.loanapplication.LoanApplicationAction; import org.apache.fineract.ui.online.loanaccounts.loanapplication.OnNavigationBarListener; +import org.apache.fineract.utils.ConstantKeys; import org.apache.fineract.utils.Utils; import org.apache.fineract.utils.ValidateIdentifierUtil; import org.apache.fineract.utils.ValidationUtil; @@ -47,7 +52,7 @@ import butterknife.OnClick; /** * @author Rajan Maurya - * On 17/07/17. + * On 17/07/17. */ public class LoanDetailsFragment extends FineractBaseFragment implements Step, LoanDetailsContract.View, AdapterView.OnItemSelectedListener, TextWatcher { @@ -141,10 +146,17 @@ public class LoanDetailsFragment extends FineractBaseFragment implements Step, private ArrayAdapter<String> productsAdapter; private ArrayAdapter<String> termUnitTypeAdapter; + private LoanAccount loanAccount; + private LoanParameters loanParameters; + private LoanApplicationAction loanApplicationAction; - public static LoanDetailsFragment newInstance() { + public static LoanDetailsFragment newInstance( + LoanAccount loanAccount, + LoanApplicationAction loanApplicationAction) { LoanDetailsFragment fragment = new LoanDetailsFragment(); Bundle args = new Bundle(); + args.putParcelable(ConstantKeys.LOAN_ACCOUNT, loanAccount); + args.putSerializable(ConstantKeys.LOAN_APPLICATION_ACTION, loanApplicationAction); fragment.setArguments(args); return fragment; } @@ -170,12 +182,23 @@ public class LoanDetailsFragment extends FineractBaseFragment implements Step, @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { + @Nullable Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_loan_details, container, false); ButterKnife.bind(this, rootView); initializeFineractUIErrorHandler(getActivity(), rootView); loanDetailsPresenter.attachView(this); + if (getArguments() != null) { + loanApplicationAction = (LoanApplicationAction) getArguments().getSerializable( + ConstantKeys.LOAN_APPLICATION_ACTION); + } + + if (loanApplicationAction == LoanApplicationAction.EDIT) { + loanAccount = getArguments().getParcelable(ConstantKeys.LOAN_ACCOUNT); + loanParameters = new Gson().fromJson(loanAccount.getParameters(), LoanParameters.class); + } + + showUserInterface(); loanDetailsPresenter.fetchProducts(); @@ -190,6 +213,65 @@ public class LoanDetailsFragment extends FineractBaseFragment implements Step, loanDetailsPresenter.fetchProducts(); } + public void showPreviousLoanDetails() { + spProducts.setSelection(loanDetailsPresenter.getItemIndexFromList( + products, + loanAccount.getProductIdentifier() + )); + etRepay.setText(String.valueOf( + loanParameters.getPaymentCycle().getPeriod() + )); + spTermUnitType.setSelection( + loanDetailsPresenter.getItemIndexFromList( + repayUnitType, + String.valueOf(loanParameters.getPaymentCycle().getTemporalUnit())) + ); + + + int unitType = loanDetailsPresenter.getItemIndexFromList( + repayUnitType, + String.valueOf(loanParameters.getPaymentCycle().getTemporalUnit())); + switch (unitType) { + case 0: + spRepayUnitType.setSelection(0); + spRepayWeekDays.setSelection(loanParameters.getPaymentCycle().getAlignmentDay()); + break; + case 1: + spRepayUnitType.setSelection(1); + if (loanParameters.getPaymentCycle().getAlignmentMonth() == null) { + spRepayWeekDays.setSelection( + loanParameters.getPaymentCycle().getAlignmentDay()); + rbRepayOnSpecificDay.setChecked(true); + spRepayTimeSlots.setSelection( + loanParameters.getPaymentCycle().getAlignmentWeek()); + } else { + rbRepayOnDay.setChecked(true); + spRepayMonthDayInNumber.setSelection( + loanParameters.getPaymentCycle().getAlignmentDay()); + } + break; + case 2: + spRepayUnitType.setSelection(2); + if (loanParameters.getPaymentCycle().getAlignmentMonth() == null) { + rbRepayOnSpecificDay.setChecked(true); + spRepayWeekDays.setSelection( + loanParameters.getPaymentCycle().getAlignmentDay()); + spRepayTimeSlots.setSelection( + loanParameters.getPaymentCycle().getAlignmentWeek()); + } else { + spRepayMonthDayInNumber.setSelection( + loanParameters.getPaymentCycle().getAlignmentDay()); + spRepayYearMonth.setSelection( + loanParameters.getPaymentCycle().getAlignmentMonth()); + } + break; + } + + etShortName.setText(loanAccount.getIdentifier()); + etPrincipalAmount.setText(String.valueOf(loanParameters.getMaximumBalance())); + etTerm.setText(String.valueOf(loanParameters.getTermRange().getMaximum())); + } + @Override public VerificationError verifyStep() { if (!validateShortName() || !validateTerm() || !validateRepay() @@ -233,11 +315,12 @@ public class LoanDetailsFragment extends FineractBaseFragment implements Step, Double.parseDouble(etTerm.getText().toString().trim())) , spProducts.getSelectedItem().toString()); - return null; } + } + @Override public void onSelected() { // when every condition will fine in verifyStep(); @@ -343,14 +426,19 @@ public class LoanDetailsFragment extends FineractBaseFragment implements Step, @Override public void setComponentsValidations(Product product) { this.product = product; - etPrincipalAmount.setText(String.valueOf(product.getBalanceRange().getMinimum())); ternUnitType.clear(); ternUnitType.addAll(loanDetailsPresenter.getCurrentTermUnitType( repayUnitType, product.getTermRange().getTemporalUnit())); termUnitTypeAdapter.notifyDataSetChanged(); spTermUnitType.setEnabled(false); - etTerm.setText("1"); - etRepay.setText("1"); + + if (loanApplicationAction == LoanApplicationAction.CREATE) { + etPrincipalAmount.setText(String.valueOf(product.getBalanceRange().getMinimum())); + etTerm.setText("1"); + etRepay.setText("1"); + } else { + showPreviousLoanDetails(); + } } @Override @@ -538,4 +626,6 @@ public class LoanDetailsFragment extends FineractBaseFragment implements Step, outState.putStringArrayList("products", (ArrayList<String>) products); super.onSaveInstanceState(outState); } + + } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java index 67fc9ea..210c0b4 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java @@ -25,7 +25,7 @@ import io.reactivex.schedulers.Schedulers; /** * @author Rajan Maurya - * On 20/07/17. + * On 20/07/17. */ @ConfigPersistent public class LoanDetailsPresenter extends BasePresenter<LoanDetailsContract.View> @@ -41,7 +41,7 @@ public class LoanDetailsPresenter extends BasePresenter<LoanDetailsContract.View @Inject public LoanDetailsPresenter(@ApplicationContext Context context, - DataManagerLoans dataManagerLoans) { + DataManagerLoans dataManagerLoans) { super(context); this.dataManagerLoans = dataManagerLoans; compositeDisposable = new CompositeDisposable(); @@ -117,4 +117,16 @@ public class LoanDetailsPresenter extends BasePresenter<LoanDetailsContract.View } }).toList().blockingGet(); } + + @Override + public int getItemIndexFromList(List<String> list, String item) { + int index = 0; + for (int i = 0; i < list.size(); i++) { + if (list.get(i).equals(item)) { + index = i; + break; + } + } + return index; + } } diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java index 51cbc3b..2128429 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java +++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java @@ -2,9 +2,6 @@ package org.apache.fineract.ui.online.loanaccounts.loandetails; import android.content.Intent; import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.widget.NestedScrollView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -15,6 +12,11 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.widget.NestedScrollView; + import com.google.gson.Gson; import org.apache.fineract.R; @@ -22,8 +24,9 @@ import org.apache.fineract.data.models.loan.LoanAccount; import org.apache.fineract.data.models.loan.PaymentCycle; import org.apache.fineract.ui.base.FineractBaseActivity; import org.apache.fineract.ui.base.FineractBaseFragment; -import org.apache.fineract.ui.base.Toaster; import org.apache.fineract.ui.online.loanaccounts.debtincomereport.DebtIncomeReportActivity; +import org.apache.fineract.ui.online.loanaccounts.loanapplication.LoanApplicationAction; +import org.apache.fineract.ui.online.loanaccounts.loanapplication.loanactivity.LoanApplicationActivity; import org.apache.fineract.ui.online.loanaccounts.plannedpayment.PlannedPaymentActivity; import org.apache.fineract.utils.ConstantKeys; import org.apache.fineract.utils.DateUtils; @@ -38,7 +41,7 @@ import butterknife.OnClick; /** * @author Rajan Maurya - * On 11/07/17. + * On 11/07/17. */ public class CustomerLoanDetailsFragment extends FineractBaseFragment implements CustomerLoanDetailsContract.View { @@ -94,9 +97,10 @@ public class CustomerLoanDetailsFragment extends FineractBaseFragment implements private String caseIdentifier; private LoanAccount loanAccount; private String[] weeksName, repayOnMonths, timeSlots, monthsName; + private Menu menu; public static CustomerLoanDetailsFragment newInstance(String productIdentifier, - String caseIdentifier) { + String caseIdentifier) { CustomerLoanDetailsFragment fragment = new CustomerLoanDetailsFragment(); Bundle args = new Bundle(); args.putString(ConstantKeys.PRODUCT_IDENTIFIER, productIdentifier); @@ -121,7 +125,7 @@ public class CustomerLoanDetailsFragment extends FineractBaseFragment implements @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { + @Nullable Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_customer_loan_details, container, false); ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this); ButterKnife.bind(this, rootView); @@ -235,6 +239,11 @@ public class CustomerLoanDetailsFragment extends FineractBaseFragment implements tvLastModifiedBy.setText(getString(R.string.loan_last_modified_by, loanAccount.getLastModifiedBy(), DateUtils.getDateTime(loanAccount.getLastModifiedOn()))); + + if (loanAccount.getCurrentState() == LoanAccount.State.APPROVED || + loanAccount.getCurrentState() == LoanAccount.State.CLOSED) { + hideEditMenu(menu); + } } @Override @@ -265,14 +274,23 @@ public class CustomerLoanDetailsFragment extends FineractBaseFragment implements public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_loan_account_details, menu); Utils.setToolbarIconColor(getActivity(), menu, R.color.white); + this.menu = menu; super.onCreateOptionsMenu(menu, inflater); } + private void hideEditMenu(@NonNull Menu menu) { + menu.findItem(R.id.menu_loan_account_edit).setVisible(false); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_loan_account_edit: - Toaster.show(rootView, R.string.Under_construction); + Intent intent = new Intent(getActivity(), LoanApplicationActivity.class) + .putExtra(ConstantKeys.CASE_IDENTIFIER, caseIdentifier) + .putExtra(ConstantKeys.LOAN_APPLICATION_ACTION, LoanApplicationAction.EDIT) + .putExtra(ConstantKeys.LOAN_ACCOUNT, loanAccount); + startActivity(intent); return true; default: return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/org/apache/fineract/ui/online/review/AddLoanReviewFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/review/AddLoanReviewFragment.kt index 6115765..88f7dd0 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/review/AddLoanReviewFragment.kt +++ b/app/src/main/java/org/apache/fineract/ui/online/review/AddLoanReviewFragment.kt @@ -2,10 +2,10 @@ package org.apache.fineract.ui.online.review import android.content.Context import android.os.Bundle -import androidx.recyclerview.widget.LinearLayoutManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import butterknife.ButterKnife import com.stepstone.stepper.Step @@ -240,7 +240,6 @@ class AddLoanReviewFragment : FineractBaseFragment(), Step { } - private fun showTotalIncome(pos: Int): Double { var totalIncome = 0.0 diff --git a/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java b/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java index 028076b..76c9d99 100644 --- a/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java +++ b/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java @@ -2,11 +2,11 @@ package org.apache.fineract.utils; /** * @author Rajan Maurya - * On 27/06/17. + * On 27/06/17. */ public class ConstantKeys { - public static final String CUSTOMER_IDENTIFIER = "customer_identifier"; + public static final String CUSTOMER_IDENTIFIER = "customer_identifier"; public static final String CUSTOMER_STATUS = "customer_status"; public static final String IS_NEW_CUSTOMER = "is_new_customer"; public static final String CUSTOMER_ACTION = "customer_action"; @@ -25,6 +25,9 @@ public class ConstantKeys { public static final String DEPOSIT_ACTION = "deposit_action"; public static final String DEPOSIT_ACCOUNT = "deposit"; public static final String COUNTRIES = "countries"; + public static final String LOAN_ACCOUNT = "loan_account"; + public static final String LOAN_APPLICATION_ACTION = "loan_application_action"; + public static final String PAYROLL_CONFIG = "payrollConfiguration"; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index af22aaa..b25c3ac 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -112,6 +112,7 @@ <string name="browse">Browse…</string> <string name="fetching_customer_please_wait">Fetching customer please wait…</string> <string name="creating_loan_please_wait">Creating loan please wait…</string> + <string name="updating_loan_please_wait">Updating loan please wait…</string> <string name="updating_customer_please_wait">Updating customer please wait…</string> <string name="creating_customer_please_wait">Creating customer please wait…</string> <string name="creating_identification_card_please_wait">Creating identification card please wait…</string> @@ -293,6 +294,7 @@ <string name="error_should_contain_only">should contain only</string> <string name="error_loading_products">Error while fetching products</string> <string name="error_while_creating_loan">Error while creating loan</string> + <string name="error_while_updating_loan">Error while updating loan</string> <string name="error_loading_countries">Error while fetching countries</string> <string name="error_creating_customer">Error while creating customer</string> <string name="error_updating_customer">Error while updating customer</string> diff --git a/app/src/main/resources/loanAccount.json b/app/src/main/resources/loanAccount.json index c619478..032d15e 100644 --- a/app/src/main/resources/loanAccount.json +++ b/app/src/main/resources/loanAccount.json @@ -1,7 +1,7 @@ { "identifier": "identifier", "productIdentifier": "productIdentifier", - "parameters": "{\"customerIdentifier\":\"customerIdentifier\",\"maximumBalance\": 343.45,\"termRange\": {\"temporalUnit\": \"WEEKS\", \"maximum\": 45.45 }, \"paymentCycle\": {\"temporalUnit\": \"WEEKS\",\"period\": 1,\"alignmentDay\": 1,\"alignmentWeek\": 1,\"alignmentMonth\": 1},\"creditWorthinessSnapshots\":[{\"forCustomer\":\"forCustomer\"}]}", + "parameters": "{\"customerIdentifier\":\"customerIdentifier\",\"maximumBalance\": 343.45,\"termRange\": {\"temporalUnit\": \"WEEKS\", \"maximum\": 45.00 }, \"paymentCycle\": {\"temporalUnit\": \"WEEKS\",\"period\": 1,\"alignmentDay\": 1,\"alignmentWeek\": 1,\"alignmentMonth\": 1},\"creditWorthinessSnapshots\":[{\"forCustomer\":\"forCustomer\"}]}", "accountAssignments": [ { "designator": "designator", @@ -22,19 +22,19 @@ "incomeSources": [ { "description": "description", - "amount": 45.45 + "amount": 45.00 } ], "assets": [ { "description": "description", - "amount": 45.45 + "amount": 45.00 } ], "debts": [ { "description": "description", - "amount": 45.45 + "amount": 45.00 } ] }