package com.mozu.mozuandroidinstoreassistant.app.order; import android.app.Fragment; import android.app.FragmentManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.mozu.api.contracts.commerceruntime.orders.Order; import com.mozu.api.contracts.commerceruntime.returns.Return; import com.mozu.api.contracts.commerceruntime.returns.ReturnItem; import com.mozu.mozuandroidinstoreassistant.app.R; import com.mozu.mozuandroidinstoreassistant.app.models.ReturnItemForAdapterWrapper; import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachine; import com.mozu.mozuandroidinstoreassistant.app.models.authentication.UserAuthenticationStateMachineProducer; import com.mozu.mozuandroidinstoreassistant.app.order.adapters.OrderDetailReturnsAdapter; import com.mozu.mozuandroidinstoreassistant.app.views.LoadingView; import java.util.ArrayList; import java.util.List; import rx.android.observables.AndroidObservable; import rx.schedulers.Schedulers; public class OrderDetailReturnsFragment extends Fragment { public static final String REPLACE = "Replace"; public static final String REFUND = "Refund"; public static final String UNKNOWN = "Unknown"; private LinearLayout mListOfReturnsLayout; private Order mOrder; private TextView mTotal; private TextView mEmptyReturnsMessage; private ListView mItemList; private OrderReturnFetcher mOrderReturnFetcher; private rx.Observable<List<Return>> mOrderReturnObservable; private LoadingView mReturnLoading; private View mView; private OrderDetailReturnsAdapter mReturnAdapter; private static String RETURN_DETAIL_DIALOG_TAG = "returnDetailDialog"; public OrderDetailReturnsFragment() { // Required empty public constructor setRetainInstance(true); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mOrderReturnFetcher = new OrderReturnFetcher(); UserAuthenticationStateMachine userState = UserAuthenticationStateMachineProducer.getInstance(getActivity()); mOrderReturnObservable = AndroidObservable.bindFragment(this, mOrderReturnFetcher.getOrderReturns(userState.getTenantId(), userState.getSiteId())); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.order_detail_returns_fragment, null); mReturnLoading = (LoadingView) mView.findViewById(R.id.order_return_loading); mItemList = (ListView) mView.findViewById(R.id.returns_list); mReturnAdapter = new OrderDetailReturnsAdapter(getActivity(), new ArrayList<Return>()); mItemList.setAdapter(mReturnAdapter); mItemList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { Return returnItem = mReturnAdapter.getItem(position); OrderReturnDetailDialogFragment dialogFragment = OrderReturnDetailDialogFragment.getInstance(returnItem); FragmentManager manager = getFragmentManager(); dialogFragment.show(manager, RETURN_DETAIL_DIALOG_TAG); } }); return mView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); loadData(); } private void loadData(){ mOrderReturnFetcher.setOrderNumber(mOrder.getId()); mOrderReturnObservable.subscribeOn(Schedulers.io()).subscribe(new OrderReturnSubscriber()); } private class OrderReturnSubscriber implements rx.Observer<List<Return>> { List<Return> mReturnList = new ArrayList<Return>(); @Override public void onCompleted() { if (mReturnList.size() > 0) { mReturnAdapter.setData(mReturnList); setOrderToViews(mReturnList); mReturnAdapter.notifyDataSetChanged(); mReturnLoading.success(); } else { mReturnLoading.setError("No returns data available"); mReturnLoading.getErrorTextView().setTextColor(getResources().getColor(android.R.color.darker_gray)); } } @Override public void onError(Throwable e) { mReturnLoading.setError(e.getMessage()); } @Override public void onNext(List<Return> returnList) { mReturnList = returnList; } } private void setOrderToViews(List<Return> returnList) { if (returnList == null) { mTotal.setText(getString(R.string.not_available)); return; } mListOfReturnsLayout = (LinearLayout) mView.findViewById(R.id.list_of_returns_layout); mTotal = (TextView) mView.findViewById(R.id.total_returned); mEmptyReturnsMessage = (TextView) mView.findViewById(R.id.empty_returns_message); List<ReturnItemForAdapterWrapper> items = new ArrayList<ReturnItemForAdapterWrapper>(); for (Return item: returnList) { String returnType = ""; if (item.getCustomerInteractionType().equalsIgnoreCase(REPLACE)) { returnType = REPLACE; } else if (item.getCustomerInteractionType().equalsIgnoreCase(REFUND)) { returnType = REFUND; } else if (item.getCustomerInteractionType().equalsIgnoreCase(UNKNOWN)) { returnType = UNKNOWN; } for (ReturnItem ri: item.getItems()) { ReturnItemForAdapterWrapper wrapper = new ReturnItemForAdapterWrapper(ri, item.getAuditInfo().getCreateDate(), returnType); items.add(wrapper); } } if (items.size() < 1) { mListOfReturnsLayout.setVisibility(View.INVISIBLE); mEmptyReturnsMessage.setVisibility(View.VISIBLE); } else { mListOfReturnsLayout.setVisibility(View.VISIBLE); mEmptyReturnsMessage.setVisibility(View.GONE); } mTotal.setText(String.valueOf(items.size())); } public void setOrder(Order order) { mOrder = order; } }