You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ra...@apache.org on 2019/05/31 17:16:49 UTC

[fineract-cn-mobile] branch development updated: feat : added review screens

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 b0e674d  feat : added review screens
b0e674d is described below

commit b0e674d9819adf9431590e5643211138e0b87c08
Author: Mohak <mo...@gmail.com>
AuthorDate: Mon Jun 11 21:49:05 2018 +0530

    feat : added review screens
---
 .../java/org/apache/fineract/FakeJsonName.java     |   2 +
 .../org/apache/fineract/FakeRemoteDataSource.java  |  12 +
 .../data/datamanager/api/DataManagerCustomer.java  |  18 +-
 .../data/datamanager/api/DataManagerDeposit.java   |  11 +-
 .../data/datamanager/api/DataManagerLoans.java     |  10 +-
 .../injection/component/ActivityComponent.java     |   5 +-
 .../ui/adapters/CreateCustomerStepAdapter.java     |   3 +
 .../ui/adapters/LoanApplicationStepAdapter.java    |   3 +
 .../ui/adapters/LoanDebtIncomeAdapter.java         |  17 +
 .../FormCustomerDetailsFragment.java               |   2 +-
 .../createcustomer/OnNavigationBarListener.java    |   3 +
 .../customeractivity/CreateCustomerActivity.java   |   5 +
 .../FormOverViewIdentificationFragment.java        |  32 +-
 .../loanapplication/OnNavigationBarListener.java   |  10 +-
 .../loanactivity/LoanApplicationActivity.java      |  24 +-
 .../loandetails/LoanDetailsFragment.java           |   3 +-
 .../ui/online/review/AddLoanReviewFragment.kt      | 278 +++++++++++++
 .../review/CreateCustomerReviewFragment.java       | 249 ++++++++++++
 app/src/main/res/drawable/review_circle_bg.xml     |  11 +
 .../main/res/layout/fragment_add_loan_review.xml   | 431 +++++++++++++++++++++
 .../res/layout/fragment_create_customer_review.xml | 315 +++++++++++++++
 .../res/layout/fragment_form_deposit_overview.xml  |  50 +--
 .../fragment_form_overview_identification.xml      | 126 +++---
 app/src/main/res/values/dimens.xml                 |   3 +-
 app/src/main/res/values/strings.xml                |  11 +-
 app/src/main/res/values/styles_text.xml            |  23 ++
 app/src/main/res/values/styles_view.xml            |  17 +
 app/src/main/resources/productDefinition.json      |  34 ++
 app/src/main/resources/productPage.json            |  39 ++
 29 files changed, 1596 insertions(+), 151 deletions(-)

diff --git a/app/src/commonTest/java/org/apache/fineract/FakeJsonName.java b/app/src/commonTest/java/org/apache/fineract/FakeJsonName.java
index d8f1f46..2e6951b 100644
--- a/app/src/commonTest/java/org/apache/fineract/FakeJsonName.java
+++ b/app/src/commonTest/java/org/apache/fineract/FakeJsonName.java
@@ -20,4 +20,6 @@ public class FakeJsonName {
     public static final String LEDGER_PAGE = "ledgerPage.json";
     public static final String ACCOUNT_PAGE = "accountsPage.json";
     public static final String TELLER = "teller.json";
+    public static final String PRODUCT_PAGE = "productPage.json";
+    public static final String PRODUCT_DEFINITION = "productDefinition.json";
 }
diff --git a/app/src/commonTest/java/org/apache/fineract/FakeRemoteDataSource.java b/app/src/commonTest/java/org/apache/fineract/FakeRemoteDataSource.java
index 70ccafb..3baa40a 100644
--- a/app/src/commonTest/java/org/apache/fineract/FakeRemoteDataSource.java
+++ b/app/src/commonTest/java/org/apache/fineract/FakeRemoteDataSource.java
@@ -11,9 +11,11 @@ import org.apache.fineract.data.models.customer.CustomerPage;
 import org.apache.fineract.data.models.customer.identification.Identification;
 import org.apache.fineract.data.models.customer.identification.ScanCard;
 import org.apache.fineract.data.models.deposit.DepositAccount;
+import org.apache.fineract.data.models.deposit.ProductDefinition;
 import org.apache.fineract.data.models.loan.LoanAccount;
 import org.apache.fineract.data.models.loan.LoanAccountPage;
 import org.apache.fineract.data.models.payment.PlannedPaymentPage;
+import org.apache.fineract.data.models.product.ProductPage;
 import org.apache.fineract.data.models.rolesandpermission.Role;
 import org.apache.fineract.data.models.teller.Teller;
 
@@ -94,4 +96,14 @@ public class FakeRemoteDataSource {
         return testDataFactory.getListTypePojo(new TypeToken<List<Teller>>() {
         }, FakeJsonName.TELLER);
     }
+
+    public static ProductPage getProductPage() {
+        return testDataFactory.getObjectTypePojo(ProductPage.class,
+                FakeJsonName.PRODUCT_PAGE);
+    }
+
+    public static List<ProductDefinition> getProductDefinition() {
+            return testDataFactory.getListTypePojo(new TypeToken<List<ProductDefinition>>() {
+            }, FakeJsonName.PRODUCT_DEFINITION);
+    }
 }
diff --git a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerCustomer.java b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerCustomer.java
index 61827c4..8a716a7 100644
--- a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerCustomer.java
+++ b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerCustomer.java
@@ -111,15 +111,15 @@ public class DataManagerCustomer extends FineractBaseDataManager implements Mana
     public Observable<List<Identification>> fetchIdentifications(String customerIdentifier) {
         return authenticatedObservableApi(baseApiManager.getCustomerApi()
                 .fetchIdentification(customerIdentifier))
-                .onErrorResumeNext(
-                        new Function<Throwable, ObservableSource<List<Identification>>> () {
-                            @Override
-                            public ObservableSource<List<Identification>> apply(
-                                    Throwable throwable)
-                                    throws Exception {
-                                return Observable.just(FakeRemoteDataSource.getIdentifications());
-                            }
-                        });
+                .onErrorResumeNext(new Function<Throwable,
+                        ObservableSource<List<Identification>>>() {
+                    @Override
+                    public ObservableSource<List<Identification>> apply(
+                            Throwable throwable)
+                            throws Exception {
+                        return Observable.just(FakeRemoteDataSource.getIdentifications());
+                    }
+                });
     }
 
     public Observable<Identification> searchIdentifications(String identifier, String number) {
diff --git a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerDeposit.java b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerDeposit.java
index beecc0f..be18af3 100644
--- a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerDeposit.java
+++ b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerDeposit.java
@@ -66,7 +66,16 @@ public class DataManagerDeposit extends FineractBaseDataManager {
     }
 
     public Observable<List<ProductDefinition>> fetchProductDefinitions() {
-        return authenticatedObservableApi(baseApiManager.getDepositApi().fetchProductDefinitions());
+        return authenticatedObservableApi
+                (baseApiManager.getDepositApi().fetchProductDefinitions()).onErrorResumeNext(
+                new Function<Throwable,
+                        ObservableSource<List<ProductDefinition>>>() {
+                        @Override
+                    public ObservableSource<List<ProductDefinition>> apply(
+                                Throwable throwable) throws Exception {
+                            return Observable.just(FakeRemoteDataSource.getProductDefinition());
+                        }
+                        });
     }
 
     public Completable createDepositAccount(DepositAccount depositAccount) {
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 7225fd9..e641d7f 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
@@ -63,7 +63,15 @@ public class DataManagerLoans extends FineractBaseDataManager {
 
     public Observable<ProductPage> getProducts(Integer pageIndex, Integer size) {
         return authenticatedObservableApi(baseApiManager.getLoanApi()
-                .getProducts(pageIndex, size, false));
+                .getProducts(pageIndex, size, false))
+                .onErrorResumeNext(
+                        new Function<Throwable, ObservableSource<? extends ProductPage>>() {
+                            @Override
+                            public ObservableSource<? extends ProductPage> apply(
+                                    Throwable throwable) throws Exception {
+                                return Observable.just(FakeRemoteDataSource.getProductPage());
+                            }
+                        });
     }
 
     public Completable createLoan(String productIdentifier, LoanAccount loanAccount) {
diff --git a/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java b/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java
index e3cecba..f77e955 100644
--- a/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java
+++ b/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java
@@ -42,6 +42,7 @@ import org.apache.fineract.ui.online.loanaccounts.loanapplication.loandetails.Lo
 import org.apache.fineract.ui.online.loanaccounts.loandetails.CustomerLoanDetailsFragment;
 import org.apache.fineract.ui.online.loanaccounts.plannedpayment.PlannedPaymentFragment;
 import org.apache.fineract.ui.online.login.LoginActivity;
+import org.apache.fineract.ui.online.review.AddLoanReviewFragment;
 import org.apache.fineract.ui.online.roles.roleslist.RolesFragment;
 import org.apache.fineract.ui.online.accounting.accounts.AccountsFragment;
 import org.apache.fineract.ui.online.teller.TellerFragment;
@@ -118,4 +119,6 @@ public interface ActivityComponent {
     void inject(AccountsFragment accountsFragment);
 
     void inject(TellerFragment tellerFragment);
-}
+
+    void inject(AddLoanReviewFragment addLoanReviewFragment);
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/adapters/CreateCustomerStepAdapter.java b/app/src/main/java/org/apache/fineract/ui/adapters/CreateCustomerStepAdapter.java
index d20e8e9..8aa8f69 100644
--- a/app/src/main/java/org/apache/fineract/ui/adapters/CreateCustomerStepAdapter.java
+++ b/app/src/main/java/org/apache/fineract/ui/adapters/CreateCustomerStepAdapter.java
@@ -16,6 +16,7 @@ import org.apache.fineract.ui.online.customers.createcustomer.FormCustomerContac
 import org.apache.fineract.ui.online.customers.createcustomer.FormCustomerDetailsFragment;
 import org.apache.fineract.ui.online.customers.createcustomer.formcustomeraddress
         .FormCustomerAddressFragment;
+import org.apache.fineract.ui.online.review.CreateCustomerReviewFragment;
 
 /**
  * @author Rajan Maurya
@@ -52,6 +53,8 @@ public class CreateCustomerStepAdapter extends AbstractFragmentStepAdapter {
                 return FormCustomerAddressFragment.newInstance(customer, customerAction);
             case 2:
                 return FormCustomerContactFragment.newInstance(customer, customerAction);
+            case 3:
+                return CreateCustomerReviewFragment.newInstance();
 
         }
         return null;
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 44f8493..3497041 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
@@ -13,6 +13,7 @@ import org.apache.fineract.R;
 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;
+import org.apache.fineract.ui.online.review.AddLoanReviewFragment;
 
 /**
  * @author Rajan Maurya
@@ -45,6 +46,8 @@ public class LoanApplicationStepAdapter extends AbstractFragmentStepAdapter {
                 return LoanDebtIncomeFragment.newInstance();
             case 2:
                 return LoanCoSignerFragment.newInstance();
+            case 3:
+                return AddLoanReviewFragment.Companion.newInstance();
         }
         return null;
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/adapters/LoanDebtIncomeAdapter.java b/app/src/main/java/org/apache/fineract/ui/adapters/LoanDebtIncomeAdapter.java
index 65e591f..61699a4 100644
--- a/app/src/main/java/org/apache/fineract/ui/adapters/LoanDebtIncomeAdapter.java
+++ b/app/src/main/java/org/apache/fineract/ui/adapters/LoanDebtIncomeAdapter.java
@@ -4,6 +4,7 @@ import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import org.apache.fineract.R;
@@ -28,6 +29,7 @@ public class LoanDebtIncomeAdapter extends RecyclerView.Adapter<LoanDebtIncomeAd
     private List<CreditWorthinessFactor> creditWorthinessFactors;
     private OnClickEditDeleteListener onClickEditDeleteListener;
     private CreditWorthinessSource creditWorthinessSource;
+    private boolean isReviewAdapter = false;
 
     @Inject
     public LoanDebtIncomeAdapter() {
@@ -48,6 +50,10 @@ public class LoanDebtIncomeAdapter extends RecyclerView.Adapter<LoanDebtIncomeAd
         holder.tvDescription.setText(creditWorthinessFactor.getDescription());
     }
 
+    public void isReview(boolean isReviewAdapter) {
+        this.isReviewAdapter = isReviewAdapter;
+    }
+
     @Override
     public int getItemCount() {
         return creditWorthinessFactors.size();
@@ -73,9 +79,20 @@ public class LoanDebtIncomeAdapter extends RecyclerView.Adapter<LoanDebtIncomeAd
         @BindView(R.id.tv_description)
         TextView tvDescription;
 
+        @BindView(R.id.iv_edit)
+        ImageView ivEdit;
+
+        @BindView(R.id.iv_delete)
+        ImageView ivDelete;
+
         public ViewHolder(View v) {
             super(v);
             ButterKnife.bind(this, v);
+
+            if (isReviewAdapter) {
+                ivEdit.setVisibility(View.GONE);
+                ivDelete.setVisibility(View.GONE);
+            }
         }
 
         @OnClick(R.id.iv_edit)
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/FormCustomerDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/FormCustomerDetailsFragment.java
index 49d1181..d4ccf31 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/FormCustomerDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/FormCustomerDetailsFragment.java
@@ -187,7 +187,7 @@ public class FormCustomerDetailsFragment extends FineractBaseFragment implements
                     etFirstName.getText().toString().trim(),
                     etLastName.getText().toString().trim(),
                     etMiddleName.getText().toString().trim(), dateOfBirth,
-                    cbIsmember.isEnabled());
+                    cbIsmember.isChecked());
         }
         return null;
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/OnNavigationBarListener.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/OnNavigationBarListener.java
index 95e2495..f005138 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/OnNavigationBarListener.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/OnNavigationBarListener.java
@@ -2,6 +2,7 @@ package org.apache.fineract.ui.online.customers.createcustomer;
 
 import org.apache.fineract.data.models.customer.Address;
 import org.apache.fineract.data.models.customer.ContactDetail;
+import org.apache.fineract.data.models.customer.Customer;
 import org.apache.fineract.data.models.customer.DateOfBirth;
 
 import java.util.List;
@@ -15,6 +16,8 @@ public interface OnNavigationBarListener {
     interface CustomerDetails {
         void setCustomerDetails(String identifier, String firstName, String surname,
                 String middleName, DateOfBirth dateOfBirth, boolean isMember);
+
+        Customer getCustomer();
     }
 
     interface CustomerAddress {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
index 500cd8e..2721008 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
@@ -143,6 +143,11 @@ public class CreateCustomerActivity extends FineractBaseActivity
     }
 
     @Override
+    public Customer getCustomer() {
+        return customer;
+    }
+
+    @Override
     public void setAddress(Address address) {
         customer.setAddress(address);
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/FormOverViewIdentificationFragment.java b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/FormOverViewIdentificationFragment.java
index b385118..cba4754 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/FormOverViewIdentificationFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/FormOverViewIdentificationFragment.java
@@ -6,7 +6,7 @@ import android.support.annotation.Nullable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.EditText;
+import android.widget.TextView;
 
 import com.stepstone.stepper.Step;
 import com.stepstone.stepper.VerificationError;
@@ -31,17 +31,17 @@ public class FormOverViewIdentificationFragment extends FineractBaseFragment imp
 
     public static final String DATE_FORMAT = "dd MMM yyyy";
 
-    @BindView(R.id.et_number)
-    EditText etNumber;
+    @BindView(R.id.tv_number)
+    TextView tvNumber;
 
-    @BindView(R.id.et_type)
-    EditText etType;
+    @BindView(R.id.tv_type)
+    TextView tvType;
 
-    @BindView(R.id.et_expiration_date)
-    EditText etExpirationDate;
+    @BindView(R.id.tv_expiration_date)
+    TextView tvExpirationDate;
 
-    @BindView(R.id.et_issuer)
-    EditText etIssuer;
+    @BindView(R.id.tv_issuer)
+    TextView tvIssuer;
 
     View rootView;
 
@@ -66,21 +66,17 @@ public class FormOverViewIdentificationFragment extends FineractBaseFragment imp
 
     @Override
     public void setIdentification(Identification identification) {
-        etIssuer.setText(identification.getIssuer());
-        etNumber.setText(identification.getNumber());
-        etType.setText(identification.getType());
+
+        tvIssuer.setText(identification.getIssuer());
+        tvNumber.setText(identification.getNumber());
+        tvType.setText(identification.getType());
         Calendar calendar = Calendar.getInstance();
         calendar.set(Calendar.YEAR, identification.getExpirationDate().getYear());
         calendar.set(Calendar.MONTH, identification.getExpirationDate().getMonth());
         calendar.set(Calendar.DAY_OF_MONTH, identification.getExpirationDate().getDay());
 
         SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH);
-        etExpirationDate.setText(sdf.format(calendar.getTime()));
-
-        etIssuer.setEnabled(false);
-        etNumber.setEnabled(false);
-        etType.setEnabled(false);
-        etExpirationDate.setEnabled(false);
+        tvExpirationDate.setText(sdf.format(calendar.getTime()));
     }
 
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/OnNavigationBarListener.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/OnNavigationBarListener.java
index b2fcbde..0af045e 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/OnNavigationBarListener.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/OnNavigationBarListener.java
@@ -5,6 +5,8 @@ import org.apache.fineract.data.models.loan.LoanAccount;
 import org.apache.fineract.data.models.loan.PaymentCycle;
 import org.apache.fineract.data.models.loan.TermRange;
 
+import java.util.List;
+
 /**
  * @author Rajan Maurya
  *         On 17/07/17.
@@ -15,7 +17,13 @@ public interface OnNavigationBarListener {
     interface LoanDetailsData {
         void setLoanDetails(LoanAccount.State currentState, String identifier,
                 String productIdentifier, Double maximumBalance, PaymentCycle paymentCycle,
-                TermRange termRange);
+                TermRange termRange, String selectedProduct);
+    }
+
+    interface ReviewLoan {
+        LoanAccount getLoanAccount();
+        String getSelectedProduct();
+        List<CreditWorthinessSnapshot> getCreditWorthinessSnapshot();
     }
 
     interface LoanDebtIncomeData {
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 5614ca6..4dd4e51 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
@@ -35,7 +35,7 @@ import butterknife.ButterKnife;
 public class LoanApplicationActivity extends FineractBaseActivity
         implements StepperLayout.StepperListener, OnNavigationBarListener.LoanDetailsData,
         OnNavigationBarListener.LoanDebtIncomeData, OnNavigationBarListener.LoanCoSignerData,
-        LoanApplicationContract.View {
+        LoanApplicationContract.View, OnNavigationBarListener.ReviewLoan {
 
     private static final String CURRENT_STEP_POSITION = "position";
     private static final String LOG_TAG = LoanApplicationActivity.class.getSimpleName();
@@ -52,6 +52,7 @@ public class LoanApplicationActivity extends FineractBaseActivity
     private List<CreditWorthinessSnapshot> creditWorthinessSnapshots;
     private String customerIdentifier;
     private LoanParameters loanParameters;
+    private String selectedProduct;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -93,7 +94,6 @@ public class LoanApplicationActivity extends FineractBaseActivity
     @Override
     public void onCompleted(View completeButton) {
         loanParameters.setCreditWorthinessSnapshots(creditWorthinessSnapshots);
-        loanAccount.setParameters(new Gson().toJson(loanParameters));
         loanApplicationPresenter.createLoan(loanAccount.getProductIdentifier(), loanAccount);
     }
 
@@ -142,7 +142,9 @@ public class LoanApplicationActivity extends FineractBaseActivity
     @Override
     public void setLoanDetails(LoanAccount.State currentState, String identifier,
             String productIdentifier, Double maximumBalance, PaymentCycle paymentCycle,
-            TermRange termRange) {
+            TermRange termRange, String selectedProduct) {
+        this.selectedProduct = selectedProduct;
+
         loanAccount.setCurrentState(currentState);
         loanAccount.setIdentifier(identifier);
         loanAccount.setProductIdentifier(productIdentifier);
@@ -151,6 +153,7 @@ public class LoanApplicationActivity extends FineractBaseActivity
         loanParameters.setMaximumBalance(maximumBalance);
         loanParameters.setPaymentCycle(paymentCycle);
         loanParameters.setTermRange(termRange);
+        loanAccount.setParameters(new Gson().toJson(loanParameters));
     }
 
     @Override
@@ -168,6 +171,21 @@ public class LoanApplicationActivity extends FineractBaseActivity
     }
 
     @Override
+    public LoanAccount getLoanAccount() {
+        return loanAccount;
+    }
+
+    @Override
+    public String getSelectedProduct() {
+        return selectedProduct;
+    }
+
+    @Override
+    public List<CreditWorthinessSnapshot> getCreditWorthinessSnapshot() {
+        return creditWorthinessSnapshots;
+    }
+
+    @Override
     protected void onDestroy() {
         super.onDestroy();
         hideProgressbar();
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 384df72..90397aa 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
@@ -230,7 +230,8 @@ public class LoanDetailsFragment extends FineractBaseFragment implements Step,
                     etShortName.getText().toString().trim(), product.getIdentifier(),
                     Double.parseDouble(etPrincipalAmount.getText().toString().trim()),
                     paymentCycle, new TermRange(product.getTermRange().getTemporalUnit(),
-                            Double.parseDouble(etTerm.getText().toString().trim())));
+                            Double.parseDouble(etTerm.getText().toString().trim()))
+                    , spProducts.getSelectedItem().toString());
 
 
             return null;
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
new file mode 100644
index 0000000..90abc5c
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/review/AddLoanReviewFragment.kt
@@ -0,0 +1,278 @@
+package org.apache.fineract.ui.online.review
+
+import android.content.Context
+import android.os.Bundle
+import android.support.v7.widget.LinearLayoutManager
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import butterknife.ButterKnife
+import com.stepstone.stepper.Step
+import com.stepstone.stepper.VerificationError
+import kotlinx.android.synthetic.main.fragment_add_loan_review.*
+import org.apache.fineract.R
+import org.apache.fineract.data.models.loan.CreditWorthinessSnapshot
+import org.apache.fineract.ui.adapters.LoanDebtIncomeAdapter
+import org.apache.fineract.ui.base.FineractBaseActivity
+import org.apache.fineract.ui.base.FineractBaseFragment
+import org.apache.fineract.ui.online.loanaccounts.loanapplication.OnNavigationBarListener
+import java.util.*
+import javax.inject.Inject
+
+class AddLoanReviewFragment : FineractBaseFragment(), Step {
+
+    var onNavigationBarListener: OnNavigationBarListener.ReviewLoan? = null
+    var creditWorthinessSnapshot: List<CreditWorthinessSnapshot>? = null
+
+    lateinit var repayUnitType: Array<String>
+    lateinit var days: Array<String>
+    lateinit var months: Array<String>
+    lateinit var repayOnMonths: Array<String>
+    lateinit var timeSlots: Array<String>
+    lateinit var reviewStep: Array<String>
+
+    @Inject
+    lateinit var incomeAdapter: LoanDebtIncomeAdapter
+
+    @Inject
+    lateinit var debtAdapter: LoanDebtIncomeAdapter
+
+    @Inject
+    lateinit var incomeCoSignerAdapter: LoanDebtIncomeAdapter
+
+    @Inject
+    lateinit var debtCoSignerAdapter: LoanDebtIncomeAdapter
+
+    override fun onAttach(context: Context?) {
+        super.onAttach(context)
+        if (context is OnNavigationBarListener.ReviewLoan) {
+            onNavigationBarListener = context
+        } else {
+            throw RuntimeException(context!!.toString() + " must implement OnNavigationBarListener.ReviewLoan")
+        }
+    }
+
+    companion object {
+        fun newInstance(): AddLoanReviewFragment = AddLoanReviewFragment()
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        repayUnitType = resources.getStringArray(R.array.repay_unit_type)
+        days = resources.getStringArray(R.array.week_names)
+        months = resources.getStringArray(R.array.month_names)
+        repayOnMonths = resources.getStringArray(R.array.repay_on_months)
+        timeSlots = resources.getStringArray(R.array.time_slots)
+        reviewStep = resources.getStringArray(R.array.loan_application_steps)
+    }
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+                              savedInstanceState: Bundle?): View? {
+        (activity as FineractBaseActivity).activityComponent.inject(this)
+        val view = inflater.inflate(R.layout.fragment_add_loan_review, container, false)
+        ButterKnife.bind(this, view)
+        return view
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        showUserInterface()
+    }
+
+    private fun showUserInterface() {
+        val layoutManagerDebt = LinearLayoutManager(activity)
+        layoutManagerDebt.orientation = LinearLayoutManager.VERTICAL
+        rvDebt.layoutManager = layoutManagerDebt
+        rvDebt.setHasFixedSize(true)
+        rvDebt.adapter = debtAdapter
+
+        val layoutManagerIncome = LinearLayoutManager(activity)
+        layoutManagerIncome.orientation = LinearLayoutManager.VERTICAL
+        rvIncome.layoutManager = layoutManagerIncome
+        rvIncome.setHasFixedSize(true)
+        rvIncome.adapter = incomeAdapter
+
+        val layoutManagerCoSignerDebt = LinearLayoutManager(activity)
+        layoutManagerCoSignerDebt.orientation = LinearLayoutManager.VERTICAL
+        rvCosignerDebt.layoutManager = layoutManagerCoSignerDebt
+        rvCosignerDebt.setHasFixedSize(true)
+        rvCosignerDebt.adapter = debtCoSignerAdapter
+
+        val layoutManagerCoSignerIncome = LinearLayoutManager(activity)
+        layoutManagerCoSignerIncome.orientation = LinearLayoutManager.VERTICAL
+        rvCosignerIncome.layoutManager = layoutManagerCoSignerIncome
+        rvCosignerIncome.setHasFixedSize(true)
+        rvCosignerIncome.adapter = incomeCoSignerAdapter
+
+        debtAdapter.isReview(true)
+        debtCoSignerAdapter.isReview(true)
+        incomeAdapter.isReview(true)
+        incomeCoSignerAdapter.isReview(true)
+
+        tvHeadOne.text = reviewStep[0]
+        tvHeadTwo.text = reviewStep[1]
+        tvHeadThree.text = reviewStep[2]
+
+    }
+
+    override fun onSelected() {
+
+        val loanAccount = onNavigationBarListener?.loanAccount
+        val loanParameters = loanAccount?.getLoanParameters()
+        val selectedProduct = onNavigationBarListener?.selectedProduct
+        creditWorthinessSnapshot = onNavigationBarListener?.creditWorthinessSnapshot
+        val paymentCycle = loanParameters?.paymentCycle
+        val repayUnit = loanParameters?.paymentCycle?.temporalUnit?.toLowerCase()
+
+        tvProduct.text = selectedProduct
+        tvShortName.text = loanAccount?.identifier
+        tvPrincipalAmount.text = loanParameters?.maximumBalance.toString()
+        tvTerm.text = loanParameters?.termRange?.maximum.toString()
+        tvTermUnitType.text = loanParameters?.termRange?.temporalUnit
+        tvRepay.text = loanParameters?.paymentCycle?.period.toString()
+        tvRepayUnitType.text = repayUnit
+
+        creditWorthinessSnapshot?.forEachIndexed { index, creditWorthinessSnapshot ->
+
+            when (index) {
+                0 -> {
+
+                    if (creditWorthinessSnapshot.incomeSources.isEmpty() &&
+                            creditWorthinessSnapshot.debts.isEmpty()) {
+                        llHeadTwo.visibility = View.GONE
+                    } else {
+                        llHeadTwo.visibility = View.VISIBLE
+                    }
+
+                    if (creditWorthinessSnapshot.incomeSources.isEmpty()) {
+                        llIncome.visibility = View.GONE
+                    } else {
+                        llIncome.visibility = View.VISIBLE
+                        incomeAdapter.setCreditWorthinessFactors(creditWorthinessSnapshot.incomeSources)
+                        incomeAdapter.notifyDataSetChanged()
+                        tvTotalIncome.text = getString(R.string.total_income,
+                                setPrecision(showTotalIncome(0)))
+                    }
+
+                    if (creditWorthinessSnapshot.debts.isEmpty()) {
+                        llDebts.visibility = View.GONE
+                    } else {
+                        llDebts.visibility = View.VISIBLE
+                        debtAdapter.setCreditWorthinessFactors(creditWorthinessSnapshot.debts)
+                        debtAdapter.notifyDataSetChanged()
+                        tvTotalDebt.text = getString(R.string.total_debt,
+                                setPrecision(showTotalDebts(0)))
+                    }
+                }
+
+                1 -> {
+
+                    if (creditWorthinessSnapshot.incomeSources.isEmpty()) {
+                        llCosignerIncome.visibility = View.GONE
+                    } else {
+                        llCosignerIncome.visibility = View.VISIBLE
+                        incomeCoSignerAdapter.setCreditWorthinessFactors(creditWorthinessSnapshot.incomeSources)
+                        incomeCoSignerAdapter.notifyDataSetChanged()
+                        tvCosignerTotalIncome.text = getString(R.string.total_income,
+                                setPrecision(showTotalIncome(1)))
+                    }
+
+                    if (creditWorthinessSnapshot.debts.isEmpty()) {
+                        llCosignerDebts.visibility = View.GONE
+                    } else {
+                        llCosignerDebts.visibility = View.VISIBLE
+                        debtCoSignerAdapter.setCreditWorthinessFactors(creditWorthinessSnapshot.debts)
+                        debtCoSignerAdapter.notifyDataSetChanged()
+                        tvCosignerTotalDebt.text = getString(R.string.total_debt,
+                                setPrecision(showTotalDebts(1)))
+                    }
+
+                    tvCoSignerName.text = creditWorthinessSnapshot.forCustomer
+                }
+            }
+        }
+
+        repayUnitType.forEachIndexed { index, repayType ->
+
+            if (repayType == repayUnit) {
+
+                when (index) {
+
+                    0 -> {
+                        llOn.visibility = View.VISIBLE
+                        llOnThe.visibility = View.GONE
+                        llIn.visibility = View.GONE
+                        tvRepayUnitWeek.text = days[paymentCycle?.alignmentDay!!]
+                    }
+
+                    1 -> {
+                        llOnThe.visibility = View.VISIBLE
+                        llOn.visibility = View.GONE
+                        llIn.visibility = View.GONE
+
+                        if (paymentCycle?.alignmentWeek == null) {
+                            tvOnThe.text = repayOnMonths[paymentCycle?.alignmentDay!!]
+                        } else {
+                            tvOnThe.text = timeSlots[paymentCycle.alignmentWeek!!]
+                            tvOnType.text = days[paymentCycle.alignmentDay!!]
+                        }
+                    }
+
+                    2 -> {
+                        llIn.visibility = View.VISIBLE
+                        llOnThe.visibility = View.VISIBLE
+                        llOn.visibility = View.GONE
+
+                        if (paymentCycle?.alignmentWeek == null) {
+                            tvOnThe.text = repayOnMonths[paymentCycle?.alignmentDay!!]
+                            tvOnType.text = getString(R.string.day)
+                        } else {
+                            tvOnThe.text = timeSlots[paymentCycle.alignmentWeek!!]
+                            tvOnType.text = days[paymentCycle.alignmentDay!!]
+                        }
+
+                        tvRepayYearMonth.text = months[paymentCycle.alignmentMonth!!]
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    private fun showTotalIncome(pos: Int): Double {
+
+        var totalIncome = 0.0
+
+        creditWorthinessSnapshot?.get(pos)?.incomeSources?.forEach {
+            totalIncome += it.amount!!
+        }
+        return totalIncome
+    }
+
+    fun showTotalDebts(pos: Int): Double {
+
+        var totalDebts = 0.0
+
+        creditWorthinessSnapshot?.get(pos)?.debts?.forEach {
+            totalDebts += it.amount!!
+        }
+
+        return totalDebts
+    }
+
+    private fun setPrecision(aDouble: Double?): String {
+        return String.format(Locale.ENGLISH, "%.2f", aDouble)
+    }
+
+    override fun verifyStep(): VerificationError? = null
+
+    override fun onError(error: VerificationError) {
+    }
+
+    override fun onDetach() {
+        super.onDetach()
+        onNavigationBarListener = null
+    }
+
+}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/review/CreateCustomerReviewFragment.java b/app/src/main/java/org/apache/fineract/ui/online/review/CreateCustomerReviewFragment.java
new file mode 100644
index 0000000..dffa38c
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/review/CreateCustomerReviewFragment.java
@@ -0,0 +1,249 @@
+package org.apache.fineract.ui.online.review;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.stepstone.stepper.Step;
+import com.stepstone.stepper.VerificationError;
+
+import org.apache.fineract.R;
+import org.apache.fineract.data.models.customer.ContactDetail;
+import org.apache.fineract.data.models.customer.Customer;
+import org.apache.fineract.ui.base.FineractBaseFragment;
+import org.apache.fineract.ui.online.customers.createcustomer.FormCustomerDetailsFragment;
+import org.apache.fineract.ui.online.customers.createcustomer.OnNavigationBarListener;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Locale;
+
+import butterknife.BindArray;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * @author Mohak Puri
+ *         On 26/05/18.
+ */
+
+public class CreateCustomerReviewFragment extends FineractBaseFragment implements Step {
+
+    View rootView;
+    Customer customer;
+    OnNavigationBarListener.CustomerDetails onNavigationBarListener;
+
+    @BindView(R.id.tv_account)
+    TextView tvAccount;
+
+    @BindView(R.id.tv_first_name)
+    TextView tvFirstName;
+
+    @BindView(R.id.tv_middle_name)
+    TextView tvMiddleName;
+
+    @BindView(R.id.tv_last_name)
+    TextView tvLastName;
+
+    @BindView(R.id.ll_middle_name)
+    LinearLayout llMiddleName;
+
+    @BindView(R.id.tv_dob)
+    TextView tvDob;
+
+    @BindView(R.id.cb_is_member)
+    CheckBox cbIsAMember;
+
+    @BindView(R.id.tv_street)
+    TextView tvStreet;
+
+    @BindView(R.id.tv_city)
+    TextView tvCity;
+
+    @BindView(R.id.ll_postal_code)
+    LinearLayout llPostalCode;
+
+    @BindView(R.id.tv_postal_code)
+    TextView tvPostalCode;
+
+    @BindView(R.id.tv_country)
+    TextView tvCountry;
+
+    @BindView(R.id.ll_region)
+    LinearLayout llRegion;
+
+    @BindView(R.id.tv_region)
+    TextView tvRegion;
+
+    @BindView(R.id.ll_email)
+    LinearLayout llEmail;
+
+    @BindView(R.id.tv_email)
+    TextView tvEmail;
+
+    @BindView(R.id.ll_phone)
+    LinearLayout llPhone;
+
+    @BindView(R.id.tv_phone)
+    TextView tvPhone;
+
+    @BindView(R.id.ll_mobile)
+    LinearLayout llMobile;
+
+    @BindView(R.id.tv_mobile)
+    TextView tvMobile;
+
+    @BindView(R.id.ll_step_three)
+    LinearLayout ll_stepThree;
+
+    @BindView(R.id.tv_reviewNameOne)
+    TextView tvReviewNameOne;
+
+    @BindView(R.id.tv_reviewNameTwo)
+    TextView tvReviewNameTwo;
+
+    @BindView(R.id.tv_reviewNameThree)
+    TextView tvReviewNameThree;
+
+    @BindArray(R.array.create_customer_steps)
+    String[] createCustomerSteps;
+
+
+    public static CreateCustomerReviewFragment newInstance() {
+        CreateCustomerReviewFragment fragment = new CreateCustomerReviewFragment();
+        return fragment;
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+
+        if (context instanceof OnNavigationBarListener.CustomerDetails) {
+            onNavigationBarListener = (OnNavigationBarListener.CustomerDetails) context;
+        } else {
+            throw new RuntimeException(context.toString()
+                    + " must implement OnNavigationBarListener.CustomerDetails");
+        }
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+
+        rootView = inflater.inflate(R.layout.fragment_create_customer_review, container, false);
+        ButterKnife.bind(this, rootView);
+        return rootView;
+    }
+
+    private void showUserInterface() {
+
+        if (customer == null) {
+            return;
+        }
+
+        tvAccount.setText(customer.getIdentifier());
+        tvFirstName.setText(customer.getGivenName());
+        tvLastName.setText(customer.getSurname());
+
+        tvReviewNameOne.setText(createCustomerSteps[0]);
+        tvReviewNameTwo.setText(createCustomerSteps[1]);
+
+        if (customer.getMiddleName().isEmpty()) {
+            llMiddleName.setVisibility(View.GONE);
+        } else {
+            llMiddleName.setVisibility(View.VISIBLE);
+            tvMiddleName.setText(customer.getMiddleName());
+        }
+
+        setDateOfBirth();
+        cbIsAMember.setChecked(customer.getMember());
+        tvStreet.setText(customer.getAddress().getStreet());
+        tvCity.setText(customer.getAddress().getCity());
+
+        if (customer.getAddress().getPostalCode().isEmpty()) {
+            llPostalCode.setVisibility(View.GONE);
+        } else {
+            llPostalCode.setVisibility(View.VISIBLE);
+            tvPostalCode.setText(customer.getAddress().getPostalCode());
+        }
+
+        tvCountry.setText(customer.getAddress().getCountry());
+
+        if (customer.getAddress().getRegion().isEmpty()) {
+            llRegion.setVisibility(View.GONE);
+        } else {
+            llRegion.setVisibility(View.VISIBLE);
+            tvRegion.setText(customer.getAddress().getRegion());
+        }
+
+        llEmail.setVisibility(View.GONE);
+        llPhone.setVisibility(View.GONE);
+        llMobile.setVisibility(View.GONE);
+
+        if (customer.getContactDetails().isEmpty()) {
+            ll_stepThree.setVisibility(View.GONE);
+        } else {
+            ll_stepThree.setVisibility(View.VISIBLE);
+            tvReviewNameThree.setText(createCustomerSteps[2]);
+        }
+
+        for (ContactDetail detail : customer.getContactDetails()) {
+
+            if (detail.getType() == ContactDetail.Type.EMAIL) {
+                llEmail.setVisibility(View.VISIBLE);
+                tvEmail.setText(detail.getValue());
+            }
+
+            if (detail.getType() == ContactDetail.Type.PHONE) {
+                llPhone.setVisibility(View.VISIBLE);
+                tvPhone.setText(detail.getValue());
+            }
+
+            if (detail.getType() == ContactDetail.Type.MOBILE) {
+                llMobile.setVisibility(View.VISIBLE);
+                tvMobile.setText(detail.getValue());
+            }
+        }
+
+    }
+
+    private void setDateOfBirth() {
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.YEAR, customer.getDateOfBirth().getYear());
+        calendar.set(Calendar.MONTH, customer.getDateOfBirth().getMonth());
+        calendar.set(Calendar.DAY_OF_MONTH, customer.getDateOfBirth().getDay());
+        SimpleDateFormat sdf = new SimpleDateFormat(FormCustomerDetailsFragment.DATE_FORMAT,
+                Locale.ENGLISH);
+        tvDob.setText(sdf.format(calendar.getTime()));
+    }
+
+    @Override
+    public VerificationError verifyStep() {
+        return null;
+    }
+
+    @Override
+    public void onSelected() {
+        customer = onNavigationBarListener.getCustomer();
+        showUserInterface();
+    }
+
+    @Override
+    public void onError(@NonNull VerificationError error) {
+
+    }
+
+    @Override
+    public void onDetach() {
+        super.onDetach();
+        onNavigationBarListener = null;
+    }
+
+}
diff --git a/app/src/main/res/drawable/review_circle_bg.xml b/app/src/main/res/drawable/review_circle_bg.xml
new file mode 100644
index 0000000..00715c7
--- /dev/null
+++ b/app/src/main/res/drawable/review_circle_bg.xml
@@ -0,0 +1,11 @@
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <gradient
+        android:angle="45"
+        android:endColor="@color/colorPrimary"
+        android:startColor="@color/colorPrimary" />
+    <size
+        android:width="@dimen/layout_padding_24dp"
+        android:height="@dimen/layout_padding_24dp" />
+
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_add_loan_review.xml b/app/src/main/res/layout/fragment_add_loan_review.xml
new file mode 100644
index 0000000..4b6f1fb
--- /dev/null
+++ b/app/src/main/res/layout/fragment_add_loan_review.xml
@@ -0,0 +1,431 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/cl_loan_review"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:visibility="visible">
+
+    <android.support.v4.widget.NestedScrollView xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:id="@+id/ncv_loan_review"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/gray_light"
+        android:visibility="visible"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+        <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:app="http://schemas.android.com/apk/res-auto"
+            android:id="@+id/cv_loan_review"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/layout_padding_8dp"
+            android:layout_marginTop="@dimen/layout_padding_8dp"
+            app:cardBackgroundColor="@color/white">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:padding="@dimen/layout_padding_16dp">
+
+                <LinearLayout
+                    android:id="@+id/llHeadOne"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginBottom="@dimen/layout_padding_16dp"
+                    android:baselineAligned="false"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:background="@drawable/review_circle_bg"
+                        android:gravity="center"
+                        android:text="@string/one"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/text_size_12sp" />
+
+                    <TextView
+                        android:id="@+id/tvHeadOne"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/products" />
+
+                <TextView
+                    android:id="@+id/tvProduct"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/short_name" />
+
+                <TextView
+                    android:id="@+id/tvShortName"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/principal_amount" />
+
+                <TextView
+                    android:id="@+id/tvPrincipalAmount"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/term" />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:weightSum="2">
+
+                    <LinearLayout
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:layout_weight="1"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/tvTerm"
+                            style="@style/TextViewReview.Input" />
+
+                        <View style="@style/TextViewUnderline.Grey" />
+
+                    </LinearLayout>
+
+                    <LinearLayout
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="@dimen/layout_padding_8dp"
+                        android:layout_marginStart="@dimen/layout_padding_8dp"
+                        android:layout_weight="1"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/tvTermUnitType"
+                            style="@style/TextViewReview.Input" />
+
+                        <View style="@style/TextViewUnderline.Grey" />
+
+                    </LinearLayout>
+
+                </LinearLayout>
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/repay_every" />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="horizontal"
+                    android:weightSum="2">
+
+                    <LinearLayout
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:layout_weight="1"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/tvRepay"
+                            style="@style/TextViewReview.Input" />
+
+                        <View style="@style/TextViewUnderline.Grey" />
+
+                    </LinearLayout>
+
+                    <LinearLayout
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="@dimen/layout_padding_8dp"
+                        android:layout_marginStart="@dimen/layout_padding_8dp"
+                        android:layout_weight="1"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/tvRepayUnitType"
+                            style="@style/TextViewReview.Input" />
+
+                        <View style="@style/TextViewUnderline.Grey" />
+
+                    </LinearLayout>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llOn"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/on" />
+
+                    <TextView
+                        android:id="@+id/tvRepayUnitWeek"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llOnThe"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/on_the" />
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:orientation="horizontal"
+                        android:weightSum="2">
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="wrap_content"
+                            android:layout_marginEnd="@dimen/layout_padding_8dp"
+                            android:layout_marginRight="@dimen/layout_padding_8dp"
+                            android:layout_weight="1"
+                            android:orientation="vertical">
+
+                            <TextView
+                                android:id="@+id/tvOnThe"
+                                style="@style/TextViewReview.Input" />
+
+                            <View style="@style/TextViewUnderline.Grey" />
+
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="@dimen/layout_padding_8dp"
+                            android:layout_marginStart="@dimen/layout_padding_8dp"
+                            android:layout_weight="1"
+                            android:orientation="vertical">
+
+                            <TextView
+                                android:id="@+id/tvOnType"
+                                style="@style/TextViewReview.Input"
+                                android:text="@string/day" />
+
+                            <View style="@style/TextViewUnderline.Grey" />
+
+                        </LinearLayout>
+
+                    </LinearLayout>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llIn"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/in" />
+
+                    <TextView
+                        android:id="@+id/tvRepayYearMonth"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llHeadTwo"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginBottom="@dimen/layout_padding_16dp"
+                    android:layout_marginTop="@dimen/layout_padding_16dp"
+                    android:baselineAligned="false"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:background="@drawable/review_circle_bg"
+                        android:gravity="center"
+                        android:text="@string/two"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/text_size_12sp" />
+
+                    <TextView
+                        android:id="@+id/tvHeadTwo"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llDebts"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        android:id="@+id/tvTotalDebt"
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/total_debt" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                    <android.support.v7.widget.RecyclerView
+                        android:id="@+id/rvDebt"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="@dimen/layout_padding_16dp" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llIncome"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        android:id="@+id/tvTotalIncome"
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/total_income" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                    <android.support.v7.widget.RecyclerView
+                        android:id="@+id/rvIncome"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="@dimen/layout_padding_16dp" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llHeadThree"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginBottom="@dimen/layout_padding_16dp"
+                    android:layout_marginTop="@dimen/layout_padding_16dp"
+                    android:baselineAligned="false"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:background="@drawable/review_circle_bg"
+                        android:gravity="center"
+                        android:text="@string/three"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/text_size_12sp" />
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:id="@+id/tvHeadThree"
+                        android:layout_height="wrap_content"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/customer" />
+
+                <TextView
+                    android:id="@+id/tvCoSignerName"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <LinearLayout
+                    android:id="@+id/llCosignerDebts"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        android:id="@+id/tvCosignerTotalDebt"
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/total_debt" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                    <android.support.v7.widget.RecyclerView
+                        android:id="@+id/rvCosignerDebt"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="@dimen/layout_padding_16dp" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/llCosignerIncome"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical"
+                    android:visibility="gone">
+
+                    <TextView
+                        android:id="@+id/tvCosignerTotalIncome"
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/total_income" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                    <android.support.v7.widget.RecyclerView
+                        android:id="@+id/rvCosignerIncome"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="@dimen/layout_padding_16dp" />
+
+                </LinearLayout>
+
+            </LinearLayout>
+
+        </android.support.v7.widget.CardView>
+
+    </android.support.v4.widget.NestedScrollView>
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_create_customer_review.xml b/app/src/main/res/layout/fragment_create_customer_review.xml
new file mode 100644
index 0000000..3707575
--- /dev/null
+++ b/app/src/main/res/layout/fragment_create_customer_review.xml
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/cl_customer_review"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:visibility="visible">
+
+    <android.support.v4.widget.NestedScrollView xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:id="@+id/ncv_customer_review"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/gray_light"
+        android:visibility="visible"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+        <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:app="http://schemas.android.com/apk/res-auto"
+            android:id="@+id/cv_customer_review"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/layout_padding_8dp"
+            android:layout_marginTop="@dimen/layout_padding_8dp"
+            app:cardBackgroundColor="@color/white">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:padding="@dimen/layout_padding_16dp">
+
+                <LinearLayout
+                    android:id="@+id/ll_step_one"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:baselineAligned="false"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:background="@drawable/review_circle_bg"
+                        android:gravity="center"
+                        android:text="@string/one"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/text_size_12sp" />
+
+                    <TextView
+                        android:id="@+id/tv_reviewNameOne"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_account" />
+
+                <TextView
+                    android:id="@+id/tv_account"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_first_name" />
+
+                <TextView
+                    android:id="@+id/tv_first_name"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <LinearLayout
+                    android:id="@+id/ll_middle_name"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/optional_middle_name" />
+
+                    <TextView
+                        android:id="@+id/tv_middle_name"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_last_name" />
+
+                <TextView
+                    android:id="@+id/tv_last_name"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_date_of_birth" />
+
+                <TextView
+                    android:id="@+id/tv_dob"
+                    style="@style/TextViewReview.Input"
+                    android:drawableLeft="@drawable/ic_cake_black_24dp"
+                    android:drawablePadding="@dimen/layout_padding_16dp"
+                    android:drawableStart="@drawable/ic_cake_black_24dp" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <CheckBox
+                    android:id="@+id/cb_is_member"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginBottom="@dimen/layout_padding_16dp"
+                    android:layout_marginTop="@dimen/layout_padding_16dp"
+                    android:clickable="false"
+                    android:paddingLeft="@dimen/layout_padding_8dp"
+                    android:paddingRight="@dimen/layout_padding_8dp"
+                    android:paddingStart="@dimen/layout_padding_8dp"
+                    android:text="@string/is_member" />
+
+                <LinearLayout
+                    android:id="@+id/ll_step_two"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/layout_padding_16dp"
+                    android:layout_marginBottom="@dimen/layout_padding_16dp"
+                    android:baselineAligned="false"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:background="@drawable/review_circle_bg"
+                        android:gravity="center"
+                        android:text="@string/two"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/text_size_12sp" />
+
+                    <TextView
+                        android:id="@+id/tv_reviewNameTwo"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_street" />
+
+                <TextView
+                    android:id="@+id/tv_street"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_city" />
+
+                <TextView
+                    android:id="@+id/tv_city"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <LinearLayout
+                    android:id="@+id/ll_postal_code"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/optional_postal_code" />
+
+                    <TextView
+                        android:id="@+id/tv_postal_code"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_country" />
+
+                <TextView
+                    android:id="@+id/tv_country"
+                    style="@style/TextViewReview.Input" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <LinearLayout
+                    android:id="@+id/ll_region"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/optional_region" />
+
+                    <TextView
+                        android:id="@+id/tv_region"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/ll_step_three"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/layout_padding_16dp"
+                    android:layout_marginBottom="@dimen/layout_padding_16dp"                    android:baselineAligned="false"
+                    android:gravity="center_vertical"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/layout_padding_8dp"
+                        android:layout_marginRight="@dimen/layout_padding_8dp"
+                        android:background="@drawable/review_circle_bg"
+                        android:gravity="center"
+                        android:text="@string/three"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/text_size_12sp" />
+
+                    <TextView
+                        android:id="@+id/tv_reviewNameThree"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textStyle="bold" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/ll_email"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/optional_email" />
+
+                    <TextView
+                        android:id="@+id/tv_email"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/ll_phone"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/optional_phone" />
+
+                    <TextView
+                        android:id="@+id/tv_phone"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/ll_mobile"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical">
+
+                    <TextView
+                        style="@style/TextViewReview.Head"
+                        android:text="@string/optional_mobile" />
+
+                    <TextView
+                        android:id="@+id/tv_mobile"
+                        style="@style/TextViewReview.Input" />
+
+                    <View style="@style/TextViewUnderline.Grey" />
+
+                </LinearLayout>
+
+            </LinearLayout>
+        </android.support.v7.widget.CardView>
+
+    </android.support.v4.widget.NestedScrollView>
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_form_deposit_overview.xml b/app/src/main/res/layout/fragment_form_deposit_overview.xml
index 482a1b0..f7e5533 100644
--- a/app/src/main/res/layout/fragment_form_deposit_overview.xml
+++ b/app/src/main/res/layout/fragment_form_deposit_overview.xml
@@ -30,71 +30,45 @@
                 android:layout_height="match_parent"
                 android:layout_width="match_parent"
                 android:orientation="vertical"
-                android:padding="@dimen/layout_padding_30dp">
+                android:padding="@dimen/layout_padding_16dp">
 
                 <LinearLayout
                     android:id="@+id/ll_product_overview"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:visibility="gone"
+                    android:visibility="visible"
                     android:orientation="vertical">
 
                     <TextView
-                        style="@style/Base.TextAppearance.AppCompat.Small"
+                        style="@style/TextViewReview.Head"
                         android:layout_height="wrap_content"
                         android:layout_width="match_parent"
-                        android:paddingEnd="@dimen/layout_padding_16dp"
-                        android:paddingLeft="@dimen/layout_padding_16dp"
-                        android:paddingStart="@dimen/layout_padding_16dp"
                         android:text="@string/select_product"/>
 
                     <TextView
-                        style="@style/Base.TextAppearance.AppCompat.Medium"
+                        style="@style/TextViewReview.Input"
                         android:id="@+id/tv_product"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:paddingEnd="@dimen/layout_padding_16dp"
-                        android:paddingLeft="@dimen/layout_padding_16dp"
-                        android:paddingStart="@dimen/layout_padding_16dp"
-                        android:text="@string/products"
-                        android:textColor="@color/black"/>
-
-                    <View
-                        android:background="@color/grey_500"
-                        android:layout_height="0.2dp"
-                        android:layout_marginLeft="@dimen/layout_padding_16dp"
-                        android:layout_marginRight="@dimen/layout_padding_16dp"
-                        android:layout_width="wrap_content"/>
+                        android:text="@string/products"/>
 
-                </LinearLayout>
+                    <View style="@style/TextViewUnderline.Grey"/>
 
+                </LinearLayout>
 
                 <TextView
-                    style="@style/Base.TextAppearance.AppCompat.Small"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:paddingEnd="@dimen/layout_padding_16dp"
-                    android:paddingLeft="@dimen/layout_padding_16dp"
-                    android:paddingStart="@dimen/layout_padding_16dp"
-                    android:layout_marginTop="@dimen/layout_padding_16dp"
+                    style="@style/TextViewReview.Head"
                     android:text="@string/beneficiaries"/>
 
                 <TextView
-                    style="@style/Base.TextAppearance.AppCompat.Medium"
+                    style="@style/TextViewReview.Input"
                     android:id="@+id/tv_no_beneficiary"
-                    android:layout_height="match_parent"
-                    android:layout_width="match_parent"
-                    android:paddingEnd="@dimen/layout_padding_16dp"
-                    android:paddingLeft="@dimen/layout_padding_16dp"
-                    android:paddingStart="@dimen/layout_padding_16dp"
                     android:text="@string/no_beneficiary"
-                    android:visibility="gone"
-                    android:textColor="@color/black"/>
+                    android:visibility="gone"/>
 
                 <android.support.v7.widget.RecyclerView
                     android:id="@+id/rv_beneficiary"
                     android:layout_height="match_parent"
-                    android:layout_width="match_parent"/>
+                    android:layout_width="match_parent"
+                    android:layout_marginTop="@dimen/layout_padding_16dp"/>
 
                 <View
                     android:layout_height="300dp"
diff --git a/app/src/main/res/layout/fragment_form_overview_identification.xml b/app/src/main/res/layout/fragment_form_overview_identification.xml
index 7ea4afe..e33065f 100644
--- a/app/src/main/res/layout/fragment_form_overview_identification.xml
+++ b/app/src/main/res/layout/fragment_form_overview_identification.xml
@@ -9,10 +9,10 @@
     <android.support.v4.widget.NestedScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:background="@color/gray_light"
         android:id="@+id/ncv_loan_details"
-        android:layout_height="match_parent"
         android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/gray_light"
         android:visibility="visible"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
@@ -20,86 +20,64 @@
             xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto"
             android:id="@+id/cv_financial_products"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginBottom="@dimen/layout_padding_8dp"
             android:layout_marginTop="@dimen/layout_padding_8dp"
-            android:layout_width="match_parent"
             app:cardBackgroundColor="@color/white">
 
             <LinearLayout
-                android:layout_height="wrap_content"
                 android:layout_width="match_parent"
+                android:layout_height="wrap_content"
                 android:orientation="vertical"
-                android:padding="@dimen/layout_padding_24dp" >
-
-                <android.support.design.widget.TextInputLayout
-                    android:id="@+id/til_number"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:paddingTop="@dimen/layout_padding_16dp"
-                    android:textColorHint="@color/grey_500"
-                    app:errorEnabled="true">
-
-                    <EditText
-                        android:hint="@string/number"
-                        android:id="@+id/et_number"
-                        android:inputType="text"
-                        android:textColor="@color/black"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"/>
-                </android.support.design.widget.TextInputLayout>
-
-                <android.support.design.widget.TextInputLayout
-                    android:id="@+id/til_type"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:textColorHint="@color/grey_500"
-                    app:errorEnabled="true">
-
-                    <EditText
-                        android:hint="@string/type"
-                        android:id="@+id/et_type"
-                        android:inputType="text"
-                        android:textColor="@color/black"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"/>
-                </android.support.design.widget.TextInputLayout>
-
-                <android.support.design.widget.TextInputLayout
-                    android:id="@+id/til_expiration_date"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:textColorHint="@color/grey_500"
-                    app:errorEnabled="true">
-
-                    <EditText
-                        android:drawableLeft="@drawable/ic_event_black_24dp"
-                        android:drawablePadding="@dimen/layout_padding_16dp"
-                        android:drawableStart="@drawable/ic_event_black_24dp"
-                        android:hint="@string/expiration_date"
-                        android:id="@+id/et_expiration_date"
-                        android:inputType="date"
-                        android:focusable="false"
-                        android:textColor="@color/black"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"/>
-                </android.support.design.widget.TextInputLayout>
-
-                <android.support.design.widget.TextInputLayout
-                    android:id="@+id/til_issuer"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:textColorHint="@color/grey_500"
-                    app:errorEnabled="true">
-
-                    <EditText
-                        android:hint="@string/issuer"
-                        android:id="@+id/et_issuer"
-                        android:inputType="text"
-                        android:textColor="@color/black"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"/>
-                </android.support.design.widget.TextInputLayout>
+                android:padding="@dimen/layout_padding_24dp">
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_number" />
+
+                <TextView
+                    android:id="@+id/tv_number"
+                    style="@style/TextViewReview.Input"
+                    android:text="@string/number" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_type" />
+
+                <TextView
+                    android:id="@+id/tv_type"
+                    style="@style/TextViewReview.Input"
+                    android:text="@string/type" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_expiration_date" />
+
+                <TextView
+                    android:id="@+id/tv_expiration_date"
+                    style="@style/TextViewReview.Input"
+                    android:drawableLeft="@drawable/ic_event_black_24dp"
+                    android:drawablePadding="@dimen/layout_padding_16dp"
+                    android:drawableStart="@drawable/ic_event_black_24dp"
+                    android:text="@string/expiration_date" />
+
+                <View style="@style/TextViewUnderline.Grey" />
+
+                <TextView
+                    style="@style/TextViewReview.Head"
+                    android:text="@string/required_issuer" />
+
+                <TextView
+                    android:id="@+id/tv_issuer"
+                    style="@style/TextViewReview.Input"
+                    android:text="@string/issuer" />
+
+                <View style="@style/TextViewUnderline.Grey" />
 
             </LinearLayout>
 
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 05edc43..43d83a8 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -22,10 +22,11 @@
     <dimen name="header_view_end_margin_right">14dp</dimen>
     <dimen name="header_view_start_margin_bottom">14dp</dimen>
 
-
+    <dimen name="view_line_height">1dp</dimen>
 
     <dimen name="text_size_12sp">12sp</dimen>
     <dimen name="text_size_14sp">14sp</dimen>
+    <dimen name="text_size_18sp">18sp</dimen>
     <dimen name="text_size_20sp">20sp</dimen>
     <!-- Dimen values for text size -->
     <dimen name="text_headline">24sp</dimen>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dc99a36..63544cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -339,6 +339,11 @@
     <string name="locked">LOCKED</string>
     <string name="closed">CLOSED</string>
 
+    <!-- Review Screen Count-->
+    <string name="one">1</string>
+    <string name="two">2</string>
+    <string name="three">3</string>
+    <string name="four">4</string>
 
     <!--Required Field-->
     <string name="error_tenant_identifier_required">Tenant identifier required</string>
@@ -366,22 +371,24 @@
         <item>Loan details</item>
         <item>Debt to income ratio</item>
         <item>Co-signer</item>
+        <item>Review</item>
     </string-array>
 
     <string-array name="create_identification_steps">
         <item>Identification card</item>
-        <item>Overview</item>
+        <item>Review</item>
     </string-array>
 
     <string-array name="create_customer_steps">
         <item>Customer details</item>
         <item>Customer address</item>
         <item>Customer contact</item>
+        <item>Review</item>
     </string-array>
 
     <string-array name="create_deposit_steps">
         <item>Assign product</item>
-        <item>Overview</item>
+        <item>Review</item>
     </string-array>
 
     <string-array name="repay_unit_type">
diff --git a/app/src/main/res/values/styles_text.xml b/app/src/main/res/values/styles_text.xml
new file mode 100755
index 0000000..40b7cdb
--- /dev/null
+++ b/app/src/main/res/values/styles_text.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ This project is licensed under the open source MPL V2.
+  ~ See https://github.com/openMF/android-client/blob/master/LICENSE.md
+  -->
+
+<resources>
+
+    <style name="TextViewReview" parent="TextAppearance.Design.Hint">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+    </style>
+
+    <style name="TextViewReview.Head">
+        <item name="android:paddingTop">@dimen/layout_padding_16dp</item>
+    </style>
+
+    <style name="TextViewReview.Input">
+        <item name="android:textSize">@dimen/text_size_18sp</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:paddingTop">@dimen/layout_padding_8dp</item>
+    </style>
+
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles_view.xml b/app/src/main/res/values/styles_view.xml
new file mode 100755
index 0000000..6d7da86
--- /dev/null
+++ b/app/src/main/res/values/styles_view.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ This project is licensed under the open source MPL V2.
+  ~ See https://github.com/openMF/android-client/blob/master/LICENSE.md
+  -->
+
+<resources>
+
+    <style name="TextViewUnderline" parent="Widget.Design.TextInputLayout">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">@dimen/view_line_height</item>
+        <item name="android:layout_marginBottom">@dimen/layout_padding_16dp</item>
+    </style>
+
+    <style name="TextViewUnderline.Grey" parent="TextViewUnderline">
+        <item name="android:background">@color/light_grey</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/resources/productDefinition.json b/app/src/main/resources/productDefinition.json
new file mode 100644
index 0000000..ebfed13
--- /dev/null
+++ b/app/src/main/resources/productDefinition.json
@@ -0,0 +1,34 @@
+[
+  {
+    "identifier": "identifier",
+    "name": "name",
+    "description": "description",
+    "currency": {
+      "code": "code",
+      "name": "name",
+      "sign": "sign",
+      "scale": 1
+    },
+    "minimumBalance": 1000,
+    "equityLedgerIdentifier": "equityLedgerIdentifier",
+    "cashAccountIdentifier": "cashAccountIdentifier",
+    "expenseAccountIdentifier": "expenseAccountIdentifier",
+    "accrueAccountIdentifier": "accrueAccountIdentifier",
+    "interest": 2.45,
+    "term": {
+      "period": 1
+    },
+    "charges": [
+      {
+        "actionIdentifier": "actionIdentifier",
+        "incomeAccountIdentifier": "incomeAccountIdentifier",
+        "name": "name",
+        "description": "description",
+        "proportional": true,
+        "amount": 4345
+      }
+    ],
+    "flexible": true,
+    "active": true
+  }
+]
\ No newline at end of file
diff --git a/app/src/main/resources/productPage.json b/app/src/main/resources/productPage.json
new file mode 100644
index 0000000..00f806e
--- /dev/null
+++ b/app/src/main/resources/productPage.json
@@ -0,0 +1,39 @@
+{
+  "elements": [
+    {
+      "identifier": "identifier",
+      "name": "name",
+      "termRange": {
+        "temporalUnit": "temporalUnit",
+        "maximum": 2
+      },
+      "balanceRange": {
+        "minimum": 1000,
+        "maximum": 15000
+      },
+      "interestRange": {
+        "minimum": 3,
+        "maximum": 7.5
+      },
+      "interestBasis": "CURRENT_BALANCE",
+      "patternPackage": "patternPackage",
+      "description": "description",
+      "currencyCode": "currencyCode",
+      "minorCurrencyUnitDigits": 2,
+      "accountAssignments": [
+        {
+          "designator": "designator",
+          "accountIdentifier": "accountIdentifier",
+          "ledgerIdentifier": "ledgerIdentifier"
+        }
+      ],
+      "parameters": "parameters",
+      "createdOn": "createdOn",
+      "createdBy": "createdBy",
+      "lastModifiedOn": "lastModifiedOn",
+      "lastModifiedBy": "lastModifiedBy"
+    }
+  ],
+  "totalPages": 1,
+  "totalElements": 1
+}
\ No newline at end of file