package com.databases.example.features.plans; import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; 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.DateTime; import com.databases.example.utils.Money; import com.wizardpager.wizard.WizardDialogFragment; import com.wizardpager.wizard.model.AbstractWizardModel; import com.wizardpager.wizard.model.PageList; import com.wizardpager.wizard.ui.StepPagerStrip; import java.util.Locale; /** * Created by kev on 7/31/14. */ public class PlanWizard extends WizardDialogFragment { private final AbstractWizardModel mWizardModel = new PlanWizardModel(getActivity()); private static Plan oldPlan; public static PlanWizard newInstance(Plan record) { PlanWizard frag = new PlanWizard(); if (record != null) { oldPlan = record; //Parse Rate (token 0 is amount, token 1 is type) String phrase = record.rate; String delims = "[ ]+"; String[] tokens = phrase.split(delims); final Bundle bundle = new Bundle(); final Bundle bdl1 = new Bundle(); bdl1.putInt("id", record.id); bdl1.putString("name", record.name); bdl1.putString("value", record.value); bdl1.putString("type", record.type); bdl1.putString("category", record.category); bundle.putBundle("Transaction Info", bdl1); final Bundle bdl2 = new Bundle(); bdl2.putInt("accountID", record.acctId); bdl2.putString("account", String.valueOf(record.acctId)); bdl2.putString("date", record.offset); bdl2.putString("rate", tokens[0]); bdl2.putString("rate type", tokens[1]); bundle.putBundle("Plan Info", bdl2); final Bundle bdl3 = new Bundle(); bdl3.putString("memo", record.memo); bdl3.putString("cleared", record.cleared); bundle.putBundle("Optional", bdl3); frag.setArguments(bundle); } return frag; } //Set Style & Theme of Dialog @SuppressLint("InlinedApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (android.os.Build.VERSION.SDK_INT > 14) { setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_DeviceDefault_Light_Dialog); } else { setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Dialog); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myFragmentView = inflater.inflate(R.layout.wizard, container, false); ViewPager mPager = (ViewPager) myFragmentView.findViewById(R.id.pager); mPager.setOffscreenPageLimit(5); StepPagerStrip mStepPagerStrip = (StepPagerStrip) myFragmentView.findViewById(R.id.strip); Button mNextButton = (Button) myFragmentView.findViewById(R.id.next_button); Button mPrevButton = (Button) myFragmentView.findViewById(R.id.prev_button); setControls(mPager, mStepPagerStrip, mNextButton, mPrevButton); //Load Data into Wizard final Bundle bundle = getArguments(); if (bundle != null) { mWizardModel.load(bundle); } return myFragmentView; } // @Override // public void onStart() { // super.onStart(); // // // safety check // if (getDialog() == null) { // return; // } // // int dialogWidth = 500; // int dialogHeight = 600; // // getDialog().getWindow().setLayout(dialogWidth, dialogHeight); // } //Create Wizard @Override public AbstractWizardModel onCreateModel() { return mWizardModel; } //Method that runs after wizard is finished @Override public void onSubmit() { final Bundle bundleInfo1 = mWizardModel.findByKey("Transaction Info").getData(); final Bundle bundleInfo2 = mWizardModel.findByKey("Plan Info").getData(); final Bundle bundleOptional = mWizardModel.findByKey("Optional").getData(); final Locale locale = getResources().getConfiguration().locale; String value = ""; final DateTime transactionDate = new DateTime(); transactionDate.setStringReadable(bundleInfo2.getString(PlanWizardInfo2Page.DATE_DATA_KEY).trim()); //Check to see if value is a number boolean validValue; try { Money transactionValue = new Money(bundleInfo1.getString(PlanWizardInfo1Page.VALUE_DATA_KEY).trim()); value = transactionValue.getBigDecimal(locale) + ""; validValue = true; } catch (Exception e) { validValue = false; Toast.makeText(getActivity(), "Please enter a valid value", Toast.LENGTH_SHORT).show(); } if (validValue) { getDialog().cancel(); if (getArguments() != null) { ContentValues transactionValues = new ContentValues(); transactionValues.put(DatabaseHelper.PLAN_ID, bundleInfo1.getInt(PlanWizardInfo1Page.ID_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_ACCT_ID, bundleInfo2.getInt(PlanWizardInfo2Page.ACCOUNT_ID_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_NAME, bundleInfo1.getString(PlanWizardInfo1Page.NAME_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_VALUE, value); transactionValues.put(DatabaseHelper.PLAN_TYPE, bundleInfo1.getString(PlanWizardInfo1Page.TYPE_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_CATEGORY, bundleInfo1.getString(PlanWizardInfo1Page.CATEGORY_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_MEMO, bundleOptional.getString(PlanWizardOptionalPage.MEMO_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_OFFSET, transactionDate.getSQLDate(locale)); transactionValues.put(DatabaseHelper.PLAN_RATE, bundleInfo2.getString(PlanWizardInfo2Page.RATE_DATA_KEY) + " " + bundleInfo2.getString(PlanWizardInfo2Page.RATE_TYPE_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_NEXT, ""); transactionValues.put(DatabaseHelper.PLAN_SCHEDULED, "true"); transactionValues.put(DatabaseHelper.PLAN_CLEARED, bundleOptional.getString(PlanWizardOptionalPage.CLEARED_DATA_KEY)); //Cancel old plan PlanUtils.cancelPlan(getActivity(), oldPlan); //Update Plan getActivity().getContentResolver().update(Uri.parse(MyContentProvider.PLANS_URI + "/" + bundleInfo1.getInt(PlanWizardInfo1Page.ID_DATA_KEY)), transactionValues, DatabaseHelper.PLAN_ID + "=" + bundleInfo1.getInt(PlanWizardInfo1Page.ID_DATA_KEY), null); //Schedule Plan Plan record = new Plan(bundleInfo1.getInt(PlanWizardInfo1Page.ID_DATA_KEY), bundleInfo2.getInt(PlanWizardInfo2Page.ACCOUNT_ID_DATA_KEY), bundleInfo1.getString(PlanWizardInfo1Page.NAME_DATA_KEY), value, bundleInfo1.getString(PlanWizardInfo1Page.TYPE_DATA_KEY), bundleInfo1.getString(PlanWizardInfo1Page.CATEGORY_DATA_KEY), bundleOptional.getString(PlanWizardOptionalPage.MEMO_DATA_KEY), transactionDate.getSQLDate(locale), bundleInfo2.getString(PlanWizardInfo2Page.RATE_DATA_KEY) + " " + bundleInfo2.getString(PlanWizardInfo2Page.RATE_TYPE_DATA_KEY), "", "true", bundleOptional.getString(PlanWizardOptionalPage.CLEARED_DATA_KEY)); PlanUtils.schedule(getActivity(), record); } else { ContentValues transactionValues = new ContentValues(); transactionValues.put(DatabaseHelper.PLAN_ACCT_ID, bundleInfo2.getInt(PlanWizardInfo2Page.ACCOUNT_ID_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_NAME, bundleInfo1.getString(PlanWizardInfo1Page.NAME_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_VALUE, value); transactionValues.put(DatabaseHelper.PLAN_TYPE, bundleInfo1.getString(PlanWizardInfo1Page.TYPE_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_CATEGORY, bundleInfo1.getString(PlanWizardInfo1Page.CATEGORY_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_MEMO, bundleOptional.getString(PlanWizardOptionalPage.MEMO_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_OFFSET, transactionDate.getSQLDate(locale)); transactionValues.put(DatabaseHelper.PLAN_RATE, bundleInfo2.getString(PlanWizardInfo2Page.RATE_DATA_KEY) + " " + bundleInfo2.getString(PlanWizardInfo2Page.RATE_TYPE_DATA_KEY)); transactionValues.put(DatabaseHelper.PLAN_NEXT, ""); transactionValues.put(DatabaseHelper.PLAN_SCHEDULED, "true"); transactionValues.put(DatabaseHelper.PLAN_CLEARED, bundleOptional.getString(PlanWizardOptionalPage.CLEARED_DATA_KEY)); Uri u = getActivity().getContentResolver().insert(MyContentProvider.PLANS_URI, transactionValues); //Schedule Plan Plan record = new Plan(Integer.parseInt(u.getLastPathSegment()), bundleInfo2.getInt(PlanWizardInfo2Page.ACCOUNT_ID_DATA_KEY), bundleInfo1.getString(PlanWizardInfo1Page.NAME_DATA_KEY), value, bundleInfo1.getString(PlanWizardInfo1Page.TYPE_DATA_KEY), bundleInfo1.getString(PlanWizardInfo1Page.CATEGORY_DATA_KEY), bundleOptional.getString(PlanWizardOptionalPage.MEMO_DATA_KEY), transactionDate.getSQLDate(locale), bundleInfo2.getString(PlanWizardInfo2Page.RATE_DATA_KEY) + " " + bundleInfo2.getString(PlanWizardInfo2Page.RATE_TYPE_DATA_KEY), "", "true", bundleOptional.getString(PlanWizardOptionalPage.CLEARED_DATA_KEY)); PlanUtils.schedule(getActivity(), record); } } } //Allow back button to be used to go back a step in the wizard @Override public boolean useBackForPrevious() { return true; } } class PlanWizardModel extends AbstractWizardModel { public PlanWizardModel(Context context) { super(context); } @Override protected PageList onNewRootPageList() { return new PageList( new PlanWizardInfo1Page(this, "Transaction Info") .setRequired(true), new PlanWizardInfo2Page(this, "Plan Info") .setRequired(true), new PlanWizardOptionalPage(this, "Optional") ); } }