blob: b34f58e10552487b0180457cc7c5ce89191605cc [file] [log] [blame]
package org.apache.fineract.ui.online.customers.customerdetails;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import org.apache.fineract.R;
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.ui.base.FineractBaseActivity;
import org.apache.fineract.ui.base.FineractBaseFragment;
import org.apache.fineract.ui.online.customers.createcustomer.CustomerAction;
import org.apache.fineract.ui.online.customers.createcustomer.customeractivity.CreateCustomerActivity;
import org.apache.fineract.ui.online.customers.customeractivities.CustomerActivitiesActivity;
import org.apache.fineract.ui.online.customers.customerpayroll.PayrollActivity;
import org.apache.fineract.ui.online.customers.customerprofile.CustomerProfileActivity;
import org.apache.fineract.ui.online.customers.customertasks.CustomerTasksBottomSheetFragment;
import org.apache.fineract.ui.online.customers.customertasks.OnTasksChangeListener;
import org.apache.fineract.ui.online.depositaccounts.depositaccountslist.DepositAccountsActivity;
import org.apache.fineract.ui.online.identification.identificationlist.IdentificationsActivity;
import org.apache.fineract.ui.online.loanaccounts.loanaccountlist.LoanAccountsActivity;
import org.apache.fineract.ui.views.HeaderView;
import org.apache.fineract.utils.ConstantKeys;
import org.apache.fineract.utils.ImageLoaderUtils;
import org.apache.fineract.utils.StatusUtils;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* @author Rajan Maurya
* On 26/06/17.
*/
public class CustomerDetailsFragment extends FineractBaseFragment
implements AppBarLayout.OnOffsetChangedListener, CustomerDetailsContract.View,
OnTasksChangeListener {
@BindView(R.id.app_bar_layout)
AppBarLayout appBarLayout;
@BindView(R.id.collapsing_toolbar)
CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.toolbar_header_view)
HeaderView toolbarHeaderView;
@BindView(R.id.float_header_view)
HeaderView floatHeaderView;
@BindView(R.id.tv_current_status)
TextView tvCurrentStatus;
@BindView(R.id.tv_address)
TextView tvAddress;
@BindView(R.id.tv_email)
TextView tvEmail;
@BindView(R.id.tv_phone_no)
TextView tvPhoneNo;
@BindView(R.id.tv_mobile_no)
TextView tvMobileNo;
@BindView(R.id.tv_birthday)
TextView tvBirthDay;
@BindView(R.id.tv_no_contact_details_available)
TextView tvNoContactDetailsAvailable;
@BindView(R.id.cl_customer_details)
CoordinatorLayout clCustomerDetails;
@BindView(R.id.layout_error)
View layoutError;
@BindView(R.id.rl_email)
RelativeLayout rlEmail;
@BindView(R.id.rl_phone_no)
RelativeLayout rlPhoneNo;
@BindView(R.id.rl_mobile_no)
RelativeLayout rlMobileNo;
@BindView(R.id.iv_current_status)
ImageView ivCurrentStatus;
@BindView(R.id.iv_customer_profile)
ImageView ivCustomerProfile;
@Inject
CustomerDetailsPresenter customerDetailsPresenter;
private View rootView;
private String customerIdentifier;
private boolean isHideToolbarView = false;
private Customer customer;
public static CustomerDetailsFragment newInstance(String identifier) {
CustomerDetailsFragment fragment = new CustomerDetailsFragment();
Bundle args = new Bundle();
args.putString(ConstantKeys.CUSTOMER_IDENTIFIER, identifier);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
customerIdentifier = getArguments().getString(ConstantKeys.CUSTOMER_IDENTIFIER);
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_customer_details, container, false);
((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
initializeFineractUIErrorHandler(getActivity(), rootView);
customerDetailsPresenter.attachView(this);
showUserInterface();
return rootView;
}
@Override
public void onResume() {
super.onResume();
clCustomerDetails.setVisibility(View.GONE);
collapsingToolbarLayout.setTitle(" ");
customerDetailsPresenter.loanCustomerDetails(customerIdentifier);
}
@OnClick(R.id.btn_try_again)
void onRetry() {
clCustomerDetails.setVisibility(View.GONE);
layoutError.setVisibility(View.GONE);
customerDetailsPresenter.loanCustomerDetails(customerIdentifier);
}
@OnClick(R.id.ll_deposit_accounts)
void viewDepositAccounts() {
Intent intent = new Intent(getActivity(), DepositAccountsActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
startActivity(intent);
}
@OnClick(R.id.ll_loan_accounts)
void viewLoanAccounts() {
Intent intent = new Intent(getActivity(), LoanAccountsActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
startActivity(intent);
}
@OnClick(R.id.ll_tasks)
void updateCustomerStatus() {
CustomerTasksBottomSheetFragment tasksBottomSheet = new CustomerTasksBottomSheetFragment();
tasksBottomSheet.setCustomerStatus(customer.getCurrentState());
tasksBottomSheet.setCustomerIdentifier(customerIdentifier);
tasksBottomSheet.setCustomerTasksChangeListener(this);
tasksBottomSheet.show(getChildFragmentManager(), getString(R.string.tasks));
}
@OnClick(R.id.ll_identifier_cards)
void showIdentificationCards() {
Intent intent = new Intent(getActivity(), IdentificationsActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
startActivity(intent);
}
@OnClick(R.id.iv_customer_profile)
void showCustomerProfileImage() {
Intent intent = new Intent(getActivity(), CustomerProfileActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
startActivity(intent);
}
@OnClick(R.id.ll_activities)
void showCustomerActivities() {
Intent intent = new Intent(getActivity(), CustomerActivitiesActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
startActivity(intent);
}
@OnClick(R.id.ll_payroll)
void showPayrollActivity() {
Intent intent = new Intent(getActivity(), PayrollActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
startActivity(intent);
}
@OnClick(R.id.fab_edit_customer)
void editCustomer() {
Intent intent = new Intent(getActivity(), CreateCustomerActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_ACTION, CustomerAction.EDIT);
intent.putExtra(ConstantKeys.CUSTOMER, customer);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
startActivity(intent);
}
@Override
public void showUserInterface() {
if (toolbar != null) {
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity) getActivity()).getSupportActionBar()
.setDisplayHomeAsUpEnabled(true);
}
collapsingToolbarLayout.setTitle(" ");
appBarLayout.addOnOffsetChangedListener(this);
}
@Override
public void showCustomerDetails(Customer customer) {
this.customer = customer;
clCustomerDetails.setVisibility(View.VISIBLE);
layoutError.setVisibility(View.GONE);
loadCustomerPortrait();
tvCurrentStatus.setText(customer.getCurrentState().name());
StatusUtils.setCustomerStatusIcon(customer.getCurrentState(),
ivCurrentStatus, getActivity());
Address address = customer.getAddress();
StringBuilder addressBuilder = new StringBuilder();
addressBuilder
.append(address.getStreet()).append(", ")
.append(address.getCity()).append(", ");
if (address.getPostalCode() != null) {
addressBuilder.append(address.getPostalCode());
addressBuilder.append(", ");
}
addressBuilder.append(address.getCountry());
tvAddress.setText(addressBuilder);
if (customer.getContactDetails().size() == 0) {
tvNoContactDetailsAvailable.setVisibility(View.VISIBLE);
tvEmail.setVisibility(View.GONE);
tvPhoneNo.setVisibility(View.GONE);
tvMobileNo.setVisibility(View.GONE);
} else {
for (ContactDetail contactDetail : customer.getContactDetails()) {
showContactDetails(contactDetail);
}
}
tvBirthDay.setText(customer.getDateOfBirth().getYear() + "-" +
customer.getDateOfBirth().getMonth() + "-" + customer.getDateOfBirth().getDay());
String title = customer.getGivenName() + " " + customer.getSurname();
String subtitle;
if (customer.getAssignedEmployee() == null) {
subtitle = getString(R.string.assigned_employee) + " " +
getString(R.string.not_assigned);
} else {
subtitle = getString(R.string.assigned_employee) + " " + customer.getAssignedEmployee();
}
showToolbarTitleSubtitle(title, subtitle);
}
@Override
public void showContactDetails(ContactDetail contactDetail) {
switch (contactDetail.getType()) {
case EMAIL:
tvEmail.setText(contactDetail.getValue());
rlEmail.setVisibility(View.VISIBLE);
break;
case MOBILE:
tvMobileNo.setText(contactDetail.getValue());
rlMobileNo.setVisibility(View.VISIBLE);
break;
case PHONE:
tvPhoneNo.setText(contactDetail.getValue());
rlPhoneNo.setVisibility(View.VISIBLE);
break;
}
}
@Override
public void showToolbarTitleSubtitle(String title, String subtitle) {
toolbarHeaderView.bindTo(title, subtitle);
floatHeaderView.bindTo(title, subtitle);
}
@Override
public void loadCustomerPortrait() {
ImageLoaderUtils imageLoaderUtils = new ImageLoaderUtils(getActivity());
imageLoaderUtils.loadImage(imageLoaderUtils.buildCustomerPortraitImageUrl(
customer.getIdentifier()), ivCustomerProfile, R.drawable.mifos_logo_new);
}
@Override
public Customer.State getCustomerStatus() {
return customer.getCurrentState();
}
@Override
public void showProgressbar() {
showMifosProgressBar();
}
@Override
public void hideProgressbar() {
hideMifosProgressBar();
}
@Override
public void showNoInternetConnection() {
clCustomerDetails.setVisibility(View.GONE);
layoutError.setVisibility(View.VISIBLE);
showFineractNoInternetUI();
}
@Override
public void showError(String errorMessage) {
clCustomerDetails.setVisibility(View.GONE);
layoutError.setVisibility(View.VISIBLE);
showFineractErrorUI(getString(R.string.customer_details));
}
@Override
public void onDestroyView() {
super.onDestroyView();
hideMifosProgressBar();
customerDetailsPresenter.detachView();
}
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int offset) {
int maxScroll = appBarLayout.getTotalScrollRange();
float percentage = (float) Math.abs(offset) / (float) maxScroll;
if (percentage == 1f && isHideToolbarView) {
toolbarHeaderView.setVisibility(View.VISIBLE);
isHideToolbarView = !isHideToolbarView;
} else if (percentage < 1f && !isHideToolbarView) {
toolbarHeaderView.setVisibility(View.GONE);
isHideToolbarView = !isHideToolbarView;
}
}
@Override
public void changeCustomerStatus(Customer.State state) {
customer.setCurrentState(state);
tvCurrentStatus.setText(state.name());
StatusUtils.setCustomerStatusIcon(state, ivCurrentStatus, getActivity());
}
}