package com.databases.example.features.checkbook.accounts;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.TextInputEditText;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.databases.example.R;
import com.databases.example.database.DatabaseHelper;
import com.databases.example.database.MyContentProvider;
import com.databases.example.utils.Constants;
import com.databases.example.utils.DateTime;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;
import timber.log.Timber;
//Class that handles transfers fragment
public class AccountTransferFragment extends DialogFragment {
private Spinner transferSpinnerTo;
private Spinner transferSpinnerFrom;
private final String transferName = "TRANSFER";
private final String transferPlanId = "-1";
private final String transferCategory = "TRANSFER";
private final String transferCheckNum = "None";
private final String transferMemo = "This is an automatically generated transaction created when you transfer money";
private final String transferCleared = "true";
private String transferType = Constants.WITHDRAW;
public static AccountTransferFragment newInstance() {
return new AccountTransferFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final LayoutInflater li = LayoutInflater.from(getActivity());
final View promptsView = li.inflate(R.layout.account_transfer, null);
final TextInputEditText tAmount = (TextInputEditText) promptsView.findViewById(R.id.edit_account_amount);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setView(promptsView);
alertDialogBuilder.setTitle(R.string.transfer_money);
transferSpinnerFrom = (Spinner) promptsView.findViewById(R.id.spinner_account_from);
transferSpinnerTo = (Spinner) promptsView.findViewById(R.id.spinner_account_to);
//Populate Account Drop-down List
accountPopulate();
//Set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton(R.string.transfer,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Account accountFrom = ((Account) transferSpinnerFrom.getItemAtPosition(transferSpinnerFrom.getSelectedItemPosition()));
Account accountTo = ((Account) transferSpinnerTo.getItemAtPosition(transferSpinnerTo.getSelectedItemPosition()));
if (accountFrom == null || accountTo == null) {
Toast.makeText(getActivity(), "No Accounts \n\nUse The ActionBar To Create Accounts", Toast.LENGTH_LONG).show();
dialog.dismiss();
return;
}
if (accountFrom.id == accountTo.id) {
Toast.makeText(getActivity(), "You picked the same account!", Toast.LENGTH_LONG).show();
dismiss();
return;
}
String transferAmount = tAmount.getText().toString().trim();
Timber.d("From Account:" + accountFrom + " To Account:" + accountTo + " Amount:" + transferAmount);
//Transfer From
final Calendar cal = Calendar.getInstance();
Locale locale = getResources().getConfiguration().locale;
DateTime transferDate = new DateTime();
transferDate.setDate(cal.getTime());
float tAmount;
//Check Value to see if it's valid
try {
tAmount = Float.parseFloat(transferAmount);
} catch (Exception e) {
Timber.e("Invalid amount? Error e=" + e);
return;
}
ContentValues transferValues = new ContentValues();
try {
transferValues.put(DatabaseHelper.TRANS_ACCT_ID, accountFrom.id);
transferValues.put(DatabaseHelper.TRANS_PLAN_ID, transferPlanId);
transferValues.put(DatabaseHelper.TRANS_NAME, transferName);
transferValues.put(DatabaseHelper.TRANS_VALUE, tAmount);
transferValues.put(DatabaseHelper.TRANS_TYPE, transferType);
transferValues.put(DatabaseHelper.TRANS_CATEGORY, transferCategory);
transferValues.put(DatabaseHelper.TRANS_CHECKNUM, transferCheckNum);
transferValues.put(DatabaseHelper.TRANS_MEMO, transferMemo);
transferValues.put(DatabaseHelper.TRANS_TIME, transferDate.getSQLTime(locale));
transferValues.put(DatabaseHelper.TRANS_DATE, transferDate.getSQLDate(locale));
transferValues.put(DatabaseHelper.TRANS_CLEARED, transferCleared);
//Insert values into transaction table
getActivity().getContentResolver().insert(MyContentProvider.TRANSACTIONS_URI, transferValues);
//Update Account Info
ContentValues accountValues = new ContentValues();
accountValues.put(DatabaseHelper.ACCOUNT_ID, accountFrom.id);
accountValues.put(DatabaseHelper.ACCOUNT_NAME, accountFrom.name);
accountValues.put(DatabaseHelper.ACCOUNT_BALANCE, Float.parseFloat(accountFrom.balance) - tAmount + "");
accountValues.put(DatabaseHelper.ACCOUNT_TIME, accountFrom.time);
accountValues.put(DatabaseHelper.ACCOUNT_DATE, accountFrom.date);
getActivity().getContentResolver().update(Uri.parse(MyContentProvider.ACCOUNTS_URI + "/" + accountFrom.id), accountValues, DatabaseHelper.ACCOUNT_ID + "=" + accountFrom.id, null);
} catch (Exception e) {
Timber.e("Transfer From failed. Exception e=" + e);
Toast.makeText(getActivity(), "Error Transferring!\n Did you enter valid input? ", Toast.LENGTH_SHORT).show();
return;
}
//Transfer To
transferType = Constants.DEPOSIT;
try {
transferValues.clear();
transferValues.put(DatabaseHelper.TRANS_ACCT_ID, accountTo.id);
transferValues.put(DatabaseHelper.TRANS_PLAN_ID, transferPlanId);
transferValues.put(DatabaseHelper.TRANS_NAME, transferName);
transferValues.put(DatabaseHelper.TRANS_VALUE, tAmount);
transferValues.put(DatabaseHelper.TRANS_TYPE, transferType);
transferValues.put(DatabaseHelper.TRANS_CATEGORY, transferCategory);
transferValues.put(DatabaseHelper.TRANS_CHECKNUM, transferCheckNum);
transferValues.put(DatabaseHelper.TRANS_MEMO, transferMemo);
transferValues.put(DatabaseHelper.TRANS_TIME, transferDate.getSQLTime(locale));
transferValues.put(DatabaseHelper.TRANS_DATE, transferDate.getSQLDate(locale));
transferValues.put(DatabaseHelper.TRANS_CLEARED, transferCleared);
//Insert values into transaction table
getActivity().getContentResolver().insert(MyContentProvider.TRANSACTIONS_URI, transferValues);
//Update Account Info
ContentValues accountValues = new ContentValues();
accountValues.put(DatabaseHelper.ACCOUNT_ID, accountTo.id);
accountValues.put(DatabaseHelper.ACCOUNT_NAME, accountTo.name);
accountValues.put(DatabaseHelper.ACCOUNT_BALANCE, Float.parseFloat(accountTo.balance) + tAmount + "");
accountValues.put(DatabaseHelper.ACCOUNT_TIME, accountTo.time);
accountValues.put(DatabaseHelper.ACCOUNT_DATE, accountTo.date);
getActivity().getContentResolver().update(Uri.parse(MyContentProvider.ACCOUNTS_URI + "/" + accountTo.id), accountValues, DatabaseHelper.ACCOUNT_ID + "=" + accountTo.id, null);
} catch (Exception e) {
Timber.e("Transfer To failed. Exception e=" + e);
Toast.makeText(getActivity(), "Error Transferring!\n Did you enter valid input? ", Toast.LENGTH_SHORT).show();
}
}
}
)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
}
);
return alertDialogBuilder.create();
}
//Method to get the list of accounts for transfer spinner
private void accountPopulate() {
//TODO: need to customize this layout since we dont use a SimpleCursorAdapter anymore
String[] from = new String[]{DatabaseHelper.ACCOUNT_NAME};
int[] to = new int[]{android.R.id.text1};
ArrayList<Account> accounts = AccountsFragment.adapterAccounts.getAccounts();
ArrayAdapter<Account> adapterFrom = new ArrayAdapter<Account>(getContext(), android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, accounts);
ArrayAdapter<Account> adapterTo = new ArrayAdapter<Account>(getContext(), android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, accounts);
adapterFrom.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapterTo.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
transferSpinnerFrom.setAdapter(adapterFrom);
transferSpinnerTo.setAdapter(adapterTo);
transferSpinnerFrom.setSelection(0);
transferSpinnerTo.setSelection(1);
}
}