| package org.apache.fineract.ui.online.depositaccounts.createdepositaccount.formdepositassignproduct; |
| |
| import android.app.Activity; |
| import android.content.Context; |
| import android.os.Bundle; |
| import android.support.annotation.NonNull; |
| import android.support.annotation.Nullable; |
| import android.support.design.widget.TextInputLayout; |
| import android.support.v4.widget.NestedScrollView; |
| import android.support.v7.widget.RecyclerView; |
| import android.support.v7.widget.StaggeredGridLayoutManager; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.AdapterView; |
| import android.widget.ArrayAdapter; |
| import android.widget.ProgressBar; |
| import android.widget.Spinner; |
| 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.Customer; |
| import org.apache.fineract.data.models.deposit.DepositAccount; |
| import org.apache.fineract.ui.adapters.BeneficiaryAdapter; |
| import org.apache.fineract.ui.adapters.BeneficiaryAutoCompleteAdapter; |
| import org.apache.fineract.ui.base.FineractBaseActivity; |
| import org.apache.fineract.ui.base.FineractBaseFragment; |
| import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositAction; |
| import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositOnNavigationBarListener; |
| import org.apache.fineract.ui.views.DelayAutoCompleteTextView; |
| import org.apache.fineract.utils.ConstantKeys; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import javax.inject.Inject; |
| |
| import butterknife.BindView; |
| import butterknife.ButterKnife; |
| import butterknife.OnClick; |
| |
| /** |
| * @author Rajan Maurya |
| * On 13/08/17. |
| */ |
| public class FormDepositAssignProductFragment extends FineractBaseFragment implements Step, |
| FormDepositAssignProductContract.View, AdapterView.OnItemSelectedListener, |
| AdapterView.OnItemClickListener { |
| |
| private static final Integer THRESHOLD = 1; |
| |
| @BindView(R.id.sp_products) |
| Spinner spProducts; |
| |
| @BindView(R.id.tv_select_product_header) |
| TextView tvSelectProductHeader; |
| |
| @BindView(R.id.et_search_beneficiary) |
| DelayAutoCompleteTextView etSearchBeneficiary; |
| |
| @BindView(R.id.til_search_beneficiary) |
| TextInputLayout tilSearchBeneficiary; |
| |
| @BindView(R.id.rv_beneficiary) |
| RecyclerView rvBeneficiary; |
| |
| @BindView(R.id.ncv_deposit_assign_product) |
| NestedScrollView ncvDepositAssignProduct; |
| |
| @BindView(R.id.layout_error) |
| View layoutError; |
| |
| @BindView(R.id.pb_search_beneficiary) |
| ProgressBar pbSearchBeneficiary; |
| |
| @Inject |
| FormDepositAssignProductPresenter formDepositAssignProductPresenter; |
| |
| @Inject |
| BeneficiaryAutoCompleteAdapter beneficiaryAutoCompleteAdapter; |
| |
| @Inject |
| BeneficiaryAdapter beneficiaryAdapter; |
| |
| View rootView; |
| |
| private DepositAction depositAction; |
| private DepositAccount depositAccount; |
| private List<String> products; |
| private ArrayAdapter<String> productsAdapter; |
| private String productIdentifier; |
| private DepositOnNavigationBarListener.ProductInstanceDetails onNavigationBarListener; |
| |
| public static FormDepositAssignProductFragment newInstance(DepositAction action, |
| DepositAccount depositAccounts) { |
| FormDepositAssignProductFragment fragment = new FormDepositAssignProductFragment(); |
| Bundle args = new Bundle(); |
| args.putSerializable(ConstantKeys.DEPOSIT_ACTION, action); |
| args.putParcelable(ConstantKeys.DEPOSIT_ACCOUNT, depositAccounts); |
| fragment.setArguments(args); |
| return fragment; |
| } |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this); |
| products = new ArrayList<>(); |
| depositAccount = new DepositAccount(); |
| if (getArguments() != null) { |
| depositAction = (DepositAction) getArguments().getSerializable( |
| ConstantKeys.DEPOSIT_ACTION); |
| depositAccount = getArguments().getParcelable(ConstantKeys.DEPOSIT_ACCOUNT); |
| } |
| } |
| |
| @Nullable |
| @Override |
| public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, |
| @Nullable Bundle savedInstanceState) { |
| rootView = inflater.inflate(R.layout.fragment_form_deposit_assign_product, |
| container, false); |
| ButterKnife.bind(this, rootView); |
| initializeFineractUIErrorHandler(getActivity(), rootView); |
| formDepositAssignProductPresenter.attachView(this); |
| |
| showUserInterface(); |
| |
| switch (depositAction) { |
| case CREATE: |
| formDepositAssignProductPresenter.fetchProductDefinitions(); |
| break; |
| case EDIT: |
| editDepositAccountDetails(depositAccount); |
| break; |
| } |
| |
| return rootView; |
| } |
| |
| @OnClick(R.id.btn_try_again) |
| void onRetry() { |
| ncvDepositAssignProduct.setVisibility(View.GONE); |
| layoutError.setVisibility(View.GONE); |
| formDepositAssignProductPresenter.fetchProductDefinitions(); |
| } |
| |
| @Override |
| public VerificationError verifyStep() { |
| if (productIdentifier == null) { |
| return new VerificationError(null); |
| } else { |
| if (depositAction == DepositAction.CREATE) { |
| DepositAccount depositAccount = new DepositAccount(); |
| depositAccount.setBeneficiaries(beneficiaryAdapter.getAllBeneficiary()); |
| depositAccount.setProductIdentifier(productIdentifier); |
| onNavigationBarListener.setProductInstance(depositAccount, |
| spProducts.getSelectedItem().toString()); |
| } else { |
| depositAccount.setBeneficiaries(beneficiaryAdapter.getAllBeneficiary()); |
| onNavigationBarListener.setProductInstance(depositAccount, null); |
| } |
| } |
| return null; |
| } |
| |
| @Override |
| public void onSelected() { |
| } |
| |
| @Override |
| public void onError(@NonNull VerificationError error) { |
| } |
| |
| @Override |
| public void showUserInterface() { |
| productsAdapter = new ArrayAdapter<>(getActivity(), |
| android.R.layout.simple_gallery_item, products); |
| productsAdapter.setDropDownViewResource( |
| android.R.layout.simple_spinner_dropdown_item); |
| spProducts.setAdapter(productsAdapter); |
| spProducts.setOnItemSelectedListener(this); |
| |
| etSearchBeneficiary.setThreshold(THRESHOLD); |
| etSearchBeneficiary.setAdapter(beneficiaryAutoCompleteAdapter); |
| etSearchBeneficiary.setLoadingIndicator(pbSearchBeneficiary); |
| etSearchBeneficiary.setOnItemClickListener(this); |
| |
| StaggeredGridLayoutManager staggeredGridLayoutManager = |
| new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); |
| rvBeneficiary.setLayoutManager(staggeredGridLayoutManager); |
| rvBeneficiary.setAdapter(beneficiaryAdapter); |
| } |
| |
| @Override |
| public void editDepositAccountDetails(DepositAccount depositAccount) { |
| ncvDepositAssignProduct.setVisibility(View.VISIBLE); |
| beneficiaryAdapter.setAllBeneficiary(depositAccount.getBeneficiaries()); |
| spProducts.setVisibility(View.GONE); |
| tvSelectProductHeader.setVisibility(View.GONE); |
| productIdentifier = depositAccount.getProductIdentifier(); |
| } |
| |
| @Override |
| public void showProductDefinitions(List<String> products) { |
| ncvDepositAssignProduct.setVisibility(View.VISIBLE); |
| layoutError.setVisibility(View.GONE); |
| this.products.addAll(products); |
| productsAdapter.notifyDataSetChanged(); |
| } |
| |
| @Override |
| public void showProgressbar() { |
| showMifosProgressBar(); |
| } |
| |
| @Override |
| public void hideProgressbar() { |
| hideMifosProgressBar(); |
| } |
| |
| @Override |
| public void showNoInternetConnection() { |
| ncvDepositAssignProduct.setVisibility(View.GONE); |
| layoutError.setVisibility(View.VISIBLE); |
| showFineractNoInternetUI(); |
| } |
| |
| @Override |
| public void showError(String message) { |
| ncvDepositAssignProduct.setVisibility(View.GONE); |
| layoutError.setVisibility(View.VISIBLE); |
| showFineractErrorUI(getString(R.string.deposit_product)); |
| } |
| |
| @Override |
| public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { |
| productIdentifier = formDepositAssignProductPresenter.getProductIdentifier(position); |
| } |
| |
| @Override |
| public void onNothingSelected(AdapterView<?> parent) { |
| } |
| |
| @Override |
| public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
| Customer customer = (Customer) parent.getItemAtPosition(position); |
| beneficiaryAdapter.setBeneficiary(customer.getIdentifier()); |
| etSearchBeneficiary.setText(""); |
| } |
| |
| @Override |
| public void onDestroyView() { |
| super.onDestroyView(); |
| hideMifosProgressBar(); |
| formDepositAssignProductPresenter.detachView(); |
| } |
| |
| @Override |
| public void onAttach(Context context) { |
| super.onAttach(context); |
| Activity activity = context instanceof Activity ? (Activity) context : null; |
| try { |
| onNavigationBarListener = (DepositOnNavigationBarListener.ProductInstanceDetails) |
| activity; |
| } catch (ClassCastException e) { |
| throw new ClassCastException(activity.toString() |
| + " must implement DepositOnNavigationBarListener.ProductInstanceDetails"); |
| } |
| } |
| } |