com.mifos.mifosxdroid.dialogfragments.ChargeDialogFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.mifos.mifosxdroid.dialogfragments.ChargeDialogFragment.java

Source

/*
 * This project is licensed under the open source MPL V2.
 * See https://github.com/openMF/android-client/blob/master/LICENSE.md
 */

package com.mifos.mifosxdroid.dialogfragments;

import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.mifos.App;
import com.mifos.mifosxdroid.R;
import com.mifos.mifosxdroid.core.ProgressableDialogFragment;
import com.mifos.mifosxdroid.uihelpers.MFDatePicker;
import com.mifos.objects.client.Charges;
import com.mifos.services.data.ChargesPayload;
import com.mifos.utils.Constants;
import com.mifos.utils.DateHelper;
import com.mifos.utils.FragmentConstants;
import com.mifos.utils.SafeUIBlockingUtility;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;

/**
 * Created by nellyk on 1/22/2016.
 * <p/>
 * Use this Dialog Fragment to Create and/or Update charges
 */
public class ChargeDialogFragment extends ProgressableDialogFragment implements MFDatePicker.OnDatePickListener {

    public final String LOG_TAG = getClass().getSimpleName();
    @InjectView(R.id.sp_charge_name)
    Spinner sp_charge_name;
    @InjectView(R.id.amount_due_charge)
    EditText et_amout_due;
    @InjectView(R.id.et_date)
    EditText charge_due_date;
    @InjectView(R.id.et_charge_locale)
    EditText charge_locale;
    @InjectView(R.id.bt_save_charge)
    Button bt_save_charge;
    String duedateString;
    private View rootView;
    private SafeUIBlockingUtility safeUIBlockingUtility;
    private DialogFragment mfDatePicker;
    private int Id;
    private int clientId;
    private HashMap<String, Integer> chargeNameIdHashMap = new HashMap<String, Integer>();
    private String chargeName;

    public static ChargeDialogFragment newInstance(int clientId) {
        ChargeDialogFragment chargeDialogFragment = new ChargeDialogFragment();
        Bundle args = new Bundle();
        args.putInt(Constants.CLIENT_ID, clientId);
        chargeDialogFragment.setArguments(args);
        return chargeDialogFragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null)
            clientId = getArguments().getInt(Constants.CLIENT_ID);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        if (getArguments() != null)
            clientId = getArguments().getInt(Constants.CLIENT_ID);
        return super.onCreateDialog(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        if (getActivity().getActionBar() != null)
            getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
        rootView = inflater.inflate(R.layout.dialog_fragment_charge, null);
        ButterKnife.inject(this, rootView);
        inflatedueDate();
        inflateChargesSpinner();

        duedateString = charge_due_date.getText().toString();
        duedateString = DateHelper.getDateAsStringUsedForCollectionSheetPayload(duedateString).replace("-", " ");

        bt_save_charge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ChargesPayload chargesPayload = new ChargesPayload();
                chargesPayload.setAmount(et_amout_due.getEditableText().toString());
                chargesPayload.setLocale(charge_locale.getEditableText().toString());
                chargesPayload.setDueDate(duedateString);
                chargesPayload.setDateFormat("dd MMMM yyyy");
                chargesPayload.setChargeId(Id);
                initiateChargesCreation(chargesPayload);
            }
        });
        return rootView;
    }

    @Override
    public void onDatePicked(String date) {
        charge_due_date.setText(date);
    }

    private void inflateChargesSpinner() {
        showProgress(true);
        App.apiManager.getAllChargesV2(clientId, new Callback<Response>() {

            @Override
            public void success(final Response result, Response response) {
                /* Activity is null - Fragment has been detached; no need to do anything. */
                if (getActivity() == null)
                    return;

                Log.d(LOG_TAG, "Charges Loaded Successfully");

                final List<Charges> charges = new ArrayList<>();
                // you can use this array to populate your spinner
                final ArrayList<String> chargesNames = new ArrayList<String>();
                //Try to get response body
                BufferedReader reader = null;
                StringBuilder sb = new StringBuilder();
                try {
                    reader = new BufferedReader(new InputStreamReader(result.getBody().in()));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                    JSONObject obj = new JSONObject(sb.toString());
                    if (obj.has("chargeOptions")) {
                        JSONArray chargesTypes = obj.getJSONArray("chargeOptions");
                        for (int i = 0; i < chargesTypes.length(); i++) {
                            JSONObject chargesObject = chargesTypes.getJSONObject(i);
                            Charges charge = new Charges();
                            charge.setId(chargesObject.optInt("id"));
                            charge.setName(chargesObject.optString("name"));
                            charges.add(charge);
                            chargesNames.add(chargesObject.optString("name"));
                            chargeNameIdHashMap.put(charge.getName(), charge.getId());
                        }

                    }
                    String stringResult = sb.toString();
                } catch (Exception e) {
                    Log.e(LOG_TAG, e.getMessage());
                }
                final ArrayAdapter<String> chargesAdapter = new ArrayAdapter<String>(getActivity(),
                        android.R.layout.simple_spinner_item, chargesNames);
                chargesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                sp_charge_name.setAdapter(chargesAdapter);
                sp_charge_name.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                        Id = chargeNameIdHashMap.get(chargesNames.get(i));
                        Log.d("chargesoptionss" + chargesNames.get(i), String.valueOf(Id));
                        if (Id != -1) {

                        } else {

                            Toast.makeText(getActivity(), getString(R.string.error_select_charge),
                                    Toast.LENGTH_SHORT).show();

                        }

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });

                showProgress(false);

            }

            @Override
            public void failure(RetrofitError retrofitError) {

                Log.d(LOG_TAG, retrofitError.getLocalizedMessage());

                showProgress(false);
            }
        });
    }

    private void initiateChargesCreation(ChargesPayload chargesPayload) {
        safeUIBlockingUtility = new SafeUIBlockingUtility(getActivity());
        safeUIBlockingUtility.safelyBlockUI();
        App.apiManager.createCharges(clientId, chargesPayload, new Callback<Charges>() {
            @Override
            public void success(Charges charges, Response response) {
                safeUIBlockingUtility.safelyUnBlockUI();
                Toast.makeText(getActivity(), "Charge created successfully", Toast.LENGTH_LONG).show();
            }

            @Override
            public void failure(RetrofitError error) {
                safeUIBlockingUtility.safelyUnBlockUI();
                Toast.makeText(getActivity(), "Try again", Toast.LENGTH_LONG).show();
            }
        });
    }

    public void inflatedueDate() {
        mfDatePicker = MFDatePicker.newInsance(this);
        charge_due_date.setText(MFDatePicker.getDatePickedAsString());
        charge_due_date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mfDatePicker.show(getActivity().getSupportFragmentManager(), FragmentConstants.DFRAG_DATE_PICKER);
            }
        });
    }
}