package co.smartreceipts.android.fragments;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.Toast;
import com.google.common.base.Preconditions;
import java.util.EnumSet;
import javax.inject.Inject;
import co.smartreceipts.android.R;
import co.smartreceipts.android.activities.NavigationHandler;
import co.smartreceipts.android.analytics.Analytics;
import co.smartreceipts.android.analytics.events.Events;
import co.smartreceipts.android.model.Trip;
import co.smartreceipts.android.persistence.PersistenceManager;
import co.smartreceipts.android.utils.log.Logger;
import co.smartreceipts.android.workers.EmailAssistant;
import dagger.android.support.AndroidSupportInjection;
import wb.android.flex.Flex;
public class GenerateReportFragment extends WBFragment implements View.OnClickListener {
@Inject
Flex flex;
@Inject
PersistenceManager persistenceManager;
@Inject
Analytics analytics;
@Inject
NavigationHandler navigationHandler;
private CheckBox pdfFullCheckbox;
private CheckBox pdfImagesCheckbox;
private CheckBox csvCheckbox;
private CheckBox zipStampedImagesCheckbox;
private Trip trip;
@NonNull
public static GenerateReportFragment newInstance() {
return new GenerateReportFragment();
}
@Override
public void onAttach(Context context) {
AndroidSupportInjection.inject(this);
super.onAttach(context);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View root = inflater.inflate(R.layout.generate_report_layout, container, false);
pdfFullCheckbox = (CheckBox) flex.getSubView(getActivity(), root, R.id.DIALOG_EMAIL_CHECKBOX_PDF_FULL);
pdfImagesCheckbox = (CheckBox) flex.getSubView(getActivity(), root, R.id.DIALOG_EMAIL_CHECKBOX_PDF_IMAGES);
csvCheckbox = (CheckBox) flex.getSubView(getActivity(), root, R.id.DIALOG_EMAIL_CHECKBOX_CSV);
zipStampedImagesCheckbox = (CheckBox) flex.getSubView(getActivity(), root, R.id.DIALOG_EMAIL_CHECKBOX_ZIP_IMAGES_STAMPED);
root.findViewById(R.id.receipt_action_send).setOnClickListener(this);
root.findViewById(R.id.generate_report_tooltip).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
analytics.record(Events.Informational.ConfigureReport);
navigationHandler.navigateToSettingsScrollToReportSection();
}
});
return root;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Logger.debug(this, "onActivityCreated");
trip = ((ReportInfoFragment) getParentFragment()).getTrip();
Preconditions.checkNotNull(trip, "A valid trip is required");
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setSubtitle(null);
}
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
Logger.debug(this, "pre-onSaveInstanceState");
super.onSaveInstanceState(outState);
Logger.debug(this, "onSaveInstanceState");
}
@Override
public void onClick(View v) {
if (!pdfFullCheckbox.isChecked() && !pdfImagesCheckbox.isChecked() && !csvCheckbox.isChecked() && !zipStampedImagesCheckbox.isChecked()) {
Toast.makeText(getActivity(), flex.getString(getActivity(), R.string.DIALOG_EMAIL_TOAST_NO_SELECTION), Toast.LENGTH_SHORT).show();
return;
}
analytics.record(Events.Generate.GenerateReports);
if (pdfFullCheckbox.isChecked()) {
analytics.record(Events.Generate.FullPdfReport);
}
if (pdfImagesCheckbox.isChecked()) {
analytics.record(Events.Generate.ImagesPdfReport);
}
if (csvCheckbox.isChecked()) {
analytics.record(Events.Generate.CsvReport);
}
if (zipStampedImagesCheckbox.isChecked()) {
analytics.record(Events.Generate.StampedZipReport);
}
// TODO: Off the UI thread :/
if (persistenceManager.getDatabase().getReceiptsTable().getBlocking(trip, true).isEmpty()) {
if (persistenceManager.getDatabase().getDistanceTable().getBlocking(trip, true).isEmpty() || !pdfFullCheckbox.isChecked()) {
// Only allow report processing to continue with no reciepts if we're doing a full pdf report with distances
Toast.makeText(getActivity(), flex.getString(getActivity(), R.string.DIALOG_EMAIL_TOAST_NO_RECEIPTS), Toast.LENGTH_SHORT).show();
return;
} else {
// Uncheck "Illegal" Items
pdfImagesCheckbox.setChecked(false);
csvCheckbox.setChecked(false);
zipStampedImagesCheckbox.setChecked(false);
}
}
EnumSet<EmailAssistant.EmailOptions> options = EnumSet.noneOf(EmailAssistant.EmailOptions.class);
if (pdfFullCheckbox.isChecked()) {
options.add(EmailAssistant.EmailOptions.PDF_FULL);
}
if (pdfImagesCheckbox.isChecked()) {
options.add(EmailAssistant.EmailOptions.PDF_IMAGES_ONLY);
}
if (csvCheckbox.isChecked()) {
options.add(EmailAssistant.EmailOptions.CSV);
}
if (zipStampedImagesCheckbox.isChecked()) {
options.add(EmailAssistant.EmailOptions.ZIP_IMAGES_STAMPED);
}
final EmailAssistant emailAssistant = new EmailAssistant(navigationHandler, getActivity(), flex, persistenceManager, trip);
emailAssistant.emailTrip(options);
}
}