blob: 53e77212533b68be838ed7d8c9c8d9f452f49003 [file] [log] [blame]
package org.apache.fineract.ui.online.identification.identificationdetails;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.gson.Gson;
import org.apache.fineract.R;
import org.apache.fineract.data.models.customer.identification.Identification;
import org.apache.fineract.data.models.customer.identification.ScanCard;
import org.apache.fineract.ui.adapters.IdentificationScanAdapter;
import org.apache.fineract.ui.base.MifosBaseActivity;
import org.apache.fineract.ui.base.MifosBaseFragment;
import org.apache.fineract.ui.online.identification.createidentification.Action;
import org.apache.fineract.ui.online.identification.createidentification.identificationactivity
.CreateIdentificationActivity;
import org.apache.fineract.ui.online.identification.uploadidentificationscan
.AddScanIdentificationListener;
import org.apache.fineract.ui.online.identification.uploadidentificationscan
.UploadIdentificationCardBottomSheet;
import org.apache.fineract.ui.online.identification.viewscancard.ViewScanCardActivity;
import org.apache.fineract.utils.ConstantKeys;
import org.apache.fineract.utils.DateUtils;
import org.apache.fineract.utils.MaterialDialog;
import org.apache.fineract.utils.Utils;
import java.util.Calendar;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* @author Rajan Maurya
* On 01/08/17.
*/
public class IdentificationDetailsFragment extends MifosBaseFragment
implements IdentificationDetailsContract.View,
IdentificationScanAdapter.OnItemClickListener, AddScanIdentificationListener {
private static final Integer ACTION_EDIT_IDENTIFICATION_CARD = 1;
@BindView(R.id.tv_number)
TextView tvNumber;
@BindView(R.id.tv_type)
TextView tvType;
@BindView(R.id.tv_expiration_date)
TextView tvExpirationDate;
@BindView(R.id.tv_issuer)
TextView tvIssuer;
@BindView(R.id.tv_scans_status)
TextView tvScansStatus;
@BindView(R.id.rv_scans_uploaded)
RecyclerView rvScansUploaded;
@BindView(R.id.rl_error)
RelativeLayout rlError;
@BindView(R.id.tv_error)
TextView tvError;
@Inject
IdentificationScanAdapter identificationScanAdapter;
@Inject
IdentificationDetailsPresenter identificationDetailsPresenter;
View rootView;
private String customerIdentifier;
private Identification identificationCard;
private List<ScanCard> scanCards;
public static IdentificationDetailsFragment newInstance(String customerIdentifier,
Identification identification) {
IdentificationDetailsFragment fragment = new IdentificationDetailsFragment();
Bundle args = new Bundle();
args.putString(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
args.putParcelable(ConstantKeys.IDENTIFICATION_CARD, identification);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
customerIdentifier = getArguments().getString(ConstantKeys.CUSTOMER_IDENTIFIER);
identificationCard = getArguments().getParcelable(ConstantKeys.IDENTIFICATION_CARD);
}
setHasOptionsMenu(true);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_identification_details, container, false);
((MifosBaseActivity) getActivity()).getActivityComponent().inject(this);
ButterKnife.bind(this, rootView);
identificationDetailsPresenter.attachView(this);
showUserInterface();
initializeRecyclerView();
return rootView;
}
@OnClick(R.id.fab_upload_identification_scan_card)
void addIdentificationCard() {
UploadIdentificationCardBottomSheet uploadIdentificationCardBottomSheet =
new UploadIdentificationCardBottomSheet();
uploadIdentificationCardBottomSheet.setIdentifierAndNumber(customerIdentifier,
identificationCard.getNumber());
uploadIdentificationCardBottomSheet.setAddScanIdentificationListener(this);
uploadIdentificationCardBottomSheet.show(getChildFragmentManager(),
getString(R.string.upload_new_identification_card_scan));
}
@OnClick(R.id.iv_retry)
void onRetry() {
identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
identificationCard.getNumber());
}
@Override
public void onResume() {
super.onResume();
identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
identificationCard.getNumber());
}
@Override
public void updateScanUploadedIdentification() {
tvScansStatus.setVisibility(View.VISIBLE);
rvScansUploaded.setVisibility(View.GONE);
rlError.setVisibility(View.GONE);
identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
identificationCard.getNumber());
}
@Override
public void showUserInterface() {
tvNumber.setText(identificationCard.getNumber());
tvIssuer.setText(identificationCard.getIssuer());
tvType.setText(identificationCard.getType());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, identificationCard.getExpirationDate().getYear());
calendar.set(Calendar.MONTH, identificationCard.getExpirationDate().getMonth() - 1);
calendar.set(Calendar.DAY_OF_MONTH, identificationCard.getExpirationDate().getDay());
tvExpirationDate.setText(DateUtils.convertServerDate(calendar));
}
@Override
public void initializeRecyclerView() {
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rvScansUploaded.setLayoutManager(layoutManager);
rvScansUploaded.setHasFixedSize(true);
identificationScanAdapter.setOnItemClickListener(this);
rvScansUploaded.setAdapter(identificationScanAdapter);
}
@Override
public void showScanCards(List<ScanCard> scanCards) {
this.scanCards = scanCards;
showRecyclerView(true);
identificationScanAdapter.setScanCards(scanCards);
}
@Override
public void showRecyclerView(boolean status) {
if (status) {
rvScansUploaded.setVisibility(View.VISIBLE);
rlError.setVisibility(View.GONE);
} else {
rvScansUploaded.setVisibility(View.GONE);
rlError.setVisibility(View.VISIBLE);
}
tvScansStatus.setVisibility(View.GONE);
}
@Override
public void showScansStatus(String message) {
showRecyclerView(false);
rlError.getChildAt(0).setVisibility(View.GONE);
tvError.setText(message);
}
@Override
public void showIdentifierDeletedSuccessfully() {
Toast.makeText(getActivity(), R.string.identification_deleted_successfully,
Toast.LENGTH_SHORT).show();
getActivity().getSupportFragmentManager().popBackStack();
}
@Override
public void showIdentificationCardScanDeletedSuccessfully(ScanCard scanCard) {
scanCards.remove(scanCard);
identificationScanAdapter.notifyDataSetChanged();
if (scanCards.size() == 0) {
showScansStatus(getString(R.string.empty_scans_to_show));
}
Toast.makeText(getActivity(), R.string.identification_card_scan_deleted_successfully,
Toast.LENGTH_SHORT).show();
}
@Override
public void showProgressDialog() {
showMifosProgressDialog(getString(R.string.deleting_identification_card));
}
@Override
public void hideProgressDialog() {
hideMifosProgressDialog();
}
@Override
public void showError(String message) {
showRecyclerView(false);
tvError.setText(message);
}
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(getActivity(), ViewScanCardActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
intent.putExtra(ConstantKeys.IDENTIFICATION_NUMBER, identificationCard.getNumber());
intent.putExtra(ConstantKeys.IDENTIFICATION_SCAN_CARD, (new Gson()).toJson(scanCards));
intent.putExtra(ConstantKeys.POSITION, position);
startActivity(intent);
}
@Override
public void onItemDelete(View view, final int position) {
new MaterialDialog.Builder()
.init(getActivity())
.setTitle(getString(R.string.dialog_title_confirm_deletion))
.setMessage(getString(
R.string.dialog_message_confirmation_delete_identification_card_scan))
.setPositiveButton(getString(R.string.dialog_action_delete),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
identificationDetailsPresenter.deleteIdentificationCardScan(
customerIdentifier, identificationCard.getNumber(),
scanCards.get(position));
}
})
.setNegativeButton(getString(R.string.dialog_action_cancel))
.createMaterialDialog()
.show();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_identification_card, menu);
Utils.setToolbarIconColor(getActivity(), menu, R.color.white);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_identification_edit:
Intent intent = new Intent(getActivity(), CreateIdentificationActivity.class);
intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER, customerIdentifier);
intent.putExtra(ConstantKeys.IDENTIFICATION_ACTION, Action.EDIT);
intent.putExtra(ConstantKeys.IDENTIFICATION_CARD, identificationCard);
startActivityForResult(intent, ACTION_EDIT_IDENTIFICATION_CARD);
return true;
case R.id.menu_identification_delete:
new MaterialDialog.Builder()
.init(getActivity())
.setTitle(getString(R.string.dialog_title_confirm_deletion))
.setMessage(getString(
R.string.dialog_message_confirmation_delete_identification_card))
.setPositiveButton(getString(R.string.dialog_action_delete),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
identificationDetailsPresenter.deleteIdentificationCard(
customerIdentifier, identificationCard.getNumber());
}
})
.setNegativeButton(getString(R.string.dialog_action_cancel))
.createMaterialDialog()
.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ACTION_EDIT_IDENTIFICATION_CARD && resultCode == Activity.RESULT_OK) {
identificationCard = data.getParcelableExtra(ConstantKeys.IDENTIFICATION_CARD);
showUserInterface();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
hideMifosProgressDialog();
identificationDetailsPresenter.detachView();
}
}