Feat #FINCN-202 - Adds support for editing loan details.
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 @@
 
 /**
  * @author Rajan Maurya
- *         On 07/07/17.
+ * On 07/07/17.
  */
 @Singleton
 public class DataManagerLoans extends FineractBaseDataManager {
@@ -27,7 +27,7 @@
 
     @Inject
     public DataManagerLoans(BaseApiManager baseApiManager, PreferencesHelper preferencesHelper,
-            DataManagerAuth dataManagerAuth) {
+                            DataManagerAuth dataManagerAuth) {
         super(dataManagerAuth, preferencesHelper);
         this.baseApiManager = baseApiManager;
         this.preferencesHelper = preferencesHelper;
@@ -78,4 +78,13 @@
         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 @@
     @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 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 @@
     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.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 @@
 
 /**
  * @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 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.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 @@
 
 /**
  * @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 @@
 
     @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 @@
     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 @@
     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 @@
 import android.app.Activity;
 import android.content.Context;
 import android.os.Bundle;
-import androidx.annotation.NonNull;
+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.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 @@
 
 /**
  * @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 @@
     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 @@
         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 @@
     @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 @@
     }
 
     @Override
+    public void applicationUpdatedSuccessfully() {
+        finish();
+    }
+
+    @Override
     public void showProgressbar(String message) {
         stepperLayout.showProgress(message);
     }
@@ -140,9 +172,12 @@
     }
 
     @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 @@
 
         void applicationCreatedSuccessfully();
 
+        void applicationUpdatedSuccessfully();
+
         void showProgressbar(String message);
 
         void hideProgressbar();
@@ -23,5 +25,7 @@
     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 @@
 
 /**
  * @author Rajan Maurya
- *         On 24/07/17.
+ * On 24/07/17.
  */
 @ConfigPersistent
 public class LoanApplicationPresenter extends BasePresenter<LoanApplicationContract.View>
@@ -29,7 +29,7 @@
 
     @Inject
     public LoanApplicationPresenter(@ApplicationContext Context context,
-            DataManagerLoans dataManagerLoans) {
+                                    DataManagerLoans dataManagerLoans) {
         super(context);
         this.dataManagerLoans = dataManagerLoans;
         compositeDisposable = new CompositeDisposable();
@@ -69,4 +69,34 @@
                 })
         );
     }
+
+    @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 @@
 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 @@
 
 /**
  * @author Rajan Maurya
- *         On 19/07/17.
+ * On 19/07/17.
  */
 public class LoanCoSignerFragment extends BaseFragmentDebtIncome implements Step,
         LoanCoSignerContract.View {
@@ -49,10 +55,17 @@
     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 @@
         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 @@
 
 /**
  * @author Rajan Maurya
- *         On 24/07/17.
+ * On 24/07/17.
  */
 @ConfigPersistent
 public class LoanCoSignerPresenter extends BasePresenter<LoanCoSignerContract.View>
@@ -37,7 +37,7 @@
 
     @Inject
     public LoanCoSignerPresenter(@ApplicationContext Context context,
-            DataManagerCustomer dataManagerCustomer) {
+                                 DataManagerCustomer dataManagerCustomer) {
         super(context);
         this.dataManagerCustomer = dataManagerCustomer;
         compositeDisposable = new CompositeDisposable();
@@ -96,6 +96,7 @@
     @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 @@
 
 /**
  * @author Rajan Maurya
- *         On 20/07/17.
+ * On 20/07/17.
  */
 
 public class LoanDetailsContract {
@@ -46,5 +46,7 @@
         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 @@
 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.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 @@
 
 /**
  * @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 @@
 
     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 @@
 
     @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 @@
         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 @@
                             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 @@
     @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 @@
         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 @@
 
 /**
  * @author Rajan Maurya
- *         On 20/07/17.
+ * On 20/07/17.
  */
 @ConfigPersistent
 public class LoanDetailsPresenter extends BasePresenter<LoanDetailsContract.View>
@@ -41,7 +41,7 @@
 
     @Inject
     public LoanDetailsPresenter(@ApplicationContext Context context,
-            DataManagerLoans dataManagerLoans) {
+                                DataManagerLoans dataManagerLoans) {
         super(context);
         this.dataManagerLoans = dataManagerLoans;
         compositeDisposable = new CompositeDisposable();
@@ -117,4 +117,16 @@
             }
         }).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 @@
 
 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.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.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 @@
 
 /**
  * @author Rajan Maurya
- *         On 11/07/17.
+ * On 11/07/17.
  */
 public class CustomerLoanDetailsFragment extends FineractBaseFragment implements
         CustomerLoanDetailsContract.View {
@@ -94,9 +97,10 @@
     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 @@
 
     @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 @@
         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 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 @@
 
 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 @@
 
     }
 
-
     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 @@
 
 /**
  * @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 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
           }
         ]
       }