@Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Bundle args = new Bundle();
    inflater = getActivity().getLayoutInflater();
    getActivity().setTitle("Requisition");
    ((MainActivity) getActivity()).setOnBackPressedListener(this);
    View view = inflater.inflate(R.layout.fragment_retrieval_list, container, false);
    ButterKnife.bind(this, view);
    mRecyclerView = (RecyclerView) view.findViewById(R.id.ret_recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new GridLayoutManager(this.getActivity().getBaseContext(), 1);
    mRecyclerView.setLayoutManager(mLayoutManager);
    System.out.println(filters.length);
    adapter = new RequisitionListAdapter();
    showAllRequisition();
    allRequisitions = Setup.allRequisition;
    adapter.SetOnItemClickListener(
        new RequisitionListAdapter.OnItemClickListener() {
          @Override
          public void onItemClick(View view, int position) {
            // retrieve requisition details from server and set to adapter here
            Log.i("Req Click", "Reached");
            final JSONRequisition selected = RequisitionListAdapter.mRequisitions.get(position);
            RequisitionAPI reqAPI = restAdapter.create(RequisitionAPI.class);
            reqAPI.getReqDetail(
                selected.getReqID(),
                new Callback<List<JSONReqDetail>>() {
                  @Override
                  public void success(List<JSONReqDetail> jsonReqDetails, Response response) {
                    RequisitionFormAdapter.mRequisitionDetails = jsonReqDetails;
                    final Bundle args = new Bundle();
                    args.putString("Date", selected.getDate());
                    args.putInt("ReqID", selected.getReqID());
                    args.putInt("StatusID", selected.getStatusID());
                    args.putInt("EmpID", selected.getEmpID());
                    String p = "";
                    if (selected.getPriorityID().equals(2)) {
                      p = "Low";
                      System.out.println(p + " " + selected.getPriorityID());
                      args.putString("Priority", p);
                    } else if (selected.getPriorityID().equals(1)) {
                      p = "High";
                      System.out.println(p + " " + selected.getPriorityID());
                      args.putString("Priority", p);
                    }
                    if (Setup.user.getRoleID().equals("DD")
                        || Setup.user.getRoleID().equals("DH")) {
                      args.putString("APPROVAL", "ENABLED");
                    }
                    RequisitionDetailFragment reqDetailFrag = new RequisitionDetailFragment();
                    reqDetailFrag.setArguments(args);
                    android.support.v4.app.FragmentTransaction fragmentTransaction =
                        getFragmentManager().beginTransaction();
                    fragmentTransaction.replace(R.id.frame, reqDetailFrag).commit();
                  }

                  @Override
                  public void failure(RetrofitError error) {}
                });
          }
        });
    if (Setup.user.getRoleID().equals("EM")
        || Setup.user.getRoleID().equals("DR")
        || Setup.user.getRoleID().equals("DH")
        || Setup.user.getRoleID().equals("DD")) {
      ArrayAdapter<String> FiltersAdapter =
          new ArrayAdapter<String>(
              this.getActivity(), android.R.layout.simple_spinner_item, filters);
      FiltersAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
      spinnerRetStatus.setAdapter(FiltersAdapter);
      spinnerRetStatus.getLayoutParams().width += 200;
      requisitionSearch.setVisibility(View.VISIBLE);
      requisitionSearch.setQueryHint("Search Requisition ID");
      requisitionSearch.setOnQueryTextListener(
          new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
              return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
              final List<JSONRequisition> filteredModelList = filter(allRequisitions, newText);
              adapter.animateTo(filteredModelList);
              mRecyclerView.scrollToPosition(0);
              return true;
            }
          });

      spinnerRetStatus.setOnItemSelectedListener(
          new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
              Log.i("spinner's :", filters[position]);
              switch (position) {
                case (0):
                  showAllRequisition();
                  break;
                case (1):
                  showPendingRequisition();
                  break;
                case (2):
                  showApprovedRequisition();
                  break;
                case (3):
                  showProcessedRequistion();
                  break;
                case (4):
                  showCollectedRequisition();
                  break;
                case (5):
                  showRejectedRequisition();
                  break;
                case (6):
                  showCancelledRequisition();
                  break;
              }
            }

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

      adapter.SetOnItemClickListener(
          new RequisitionListAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
              // retrieve requisition details from server and set to adapter here
              final JSONRequisition selected = RequisitionListAdapter.mRequisitions.get(position);
              RequisitionAPI reqAPI = restAdapter.create(RequisitionAPI.class);
              reqAPI.getReqDetail(
                  selected.getReqID(),
                  new Callback<List<JSONReqDetail>>() {
                    @Override
                    public void success(List<JSONReqDetail> jsonReqDetails, Response response) {
                      RequisitionFormAdapter.mRequisitionDetails = jsonReqDetails;
                      final Bundle args = new Bundle();
                      args.putString("Date", selected.getDate());
                      args.putInt("ReqID", selected.getReqID());
                      args.putInt("StatusID", selected.getStatusID());
                      args.putInt("EmpID", selected.getEmpID());
                      String p = "";
                      if (selected.getPriorityID().equals(2)
                          || selected.getPriorityID().equals(null)) {
                        p = "Low";
                        System.out.println(p + " " + selected.getPriorityID());
                        args.putString("Priority", p);
                      } else if (selected.getPriorityID().equals(1)) {
                        p = "High";
                        System.out.println(p + " " + selected.getPriorityID());
                        args.putString("Priority", p);
                      }
                      if (Setup.user.getRoleID().equals("DD")
                          || Setup.user.getRoleID().equals("DH")) {
                        args.putString("APPROVAL", "ENABLED");
                      }
                      RequisitionDetailFragment reqDetailFrag = new RequisitionDetailFragment();
                      reqDetailFrag.setArguments(args);
                      android.support.v4.app.FragmentTransaction fragmentTransaction =
                          getFragmentManager().beginTransaction();
                      fragmentTransaction.replace(R.id.frame, reqDetailFrag).commit();
                    }

                    @Override
                    public void failure(RetrofitError error) {}
                  });
            }
          });
    } else if (Setup.user.getRoleID().equals("SC")) {
      filterBy.setVisibility(View.GONE);
      ArrayAdapter<String> FiltersAdapter =
          new ArrayAdapter<String>(
              this.getActivity(), android.R.layout.simple_spinner_item, filters2);
      FiltersAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
      spinnerRetStatus.setAdapter(FiltersAdapter);
      spinnerRetStatus.getLayoutParams().width = 360;
      spinnerStatus.setVisibility(View.VISIBLE);
      spinnerStatus.getLayoutParams().width = 360;

      ArrayAdapter<String> PriorityAdapter =
          new ArrayAdapter<String>(
              this.getActivity(), android.R.layout.simple_spinner_item, priority);
      PriorityAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
      spinnerStatus.setAdapter(PriorityAdapter);

      spinnerStatus.setOnItemSelectedListener(
          new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
              switch (position) {
                case (0):
                  showAllRequisition();
                  break;
                case (1):
                  showHighPriorityRequisition();
                  break;
                case (2):
                  showLowPriorityRequisition();
                  break;
              }
            }

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

      spinnerRetStatus.setOnItemSelectedListener(
          new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
              Log.i("spinner's :", filters[position]);
              switch (position) {
                case (0):
                  showAllRequisition();
                  break;
                case (1):
                  showApprovedRequisition();
                  break;
                case (2):
                  showProcessedRequistion();
                  break;
                case (3):
                  showCollectedRequisition();
                  break;
              }
            }

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

      adapter.SetOnItemClickListener(
          new RequisitionListAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
              Log.i("Click", "Here");
              // retrieve requisition details from server and set to adapter here
              final JSONRequisition selected = RequisitionListAdapter.mRequisitions.get(position);
              RequisitionAPI reqAPI = restAdapter.create(RequisitionAPI.class);
              reqAPI.getReqDetail(
                  selected.getReqID(),
                  new Callback<List<JSONReqDetail>>() {
                    @Override
                    public void success(List<JSONReqDetail> jsonReqDetails, Response response) {
                      Log.i("Success", "success");
                      Log.i("priorityID", selected.getPriorityID().toString());
                      System.out.println(" " + selected.getPriorityID());
                      RequisitionFormAdapter.mRequisitionDetails = jsonReqDetails;
                      final Bundle args = new Bundle();
                      args.putString("Date", selected.getDate());
                      args.putInt("ReqID", selected.getReqID());
                      args.putInt("StatusID", selected.getStatusID());
                      args.putInt("EmpID", selected.getEmpID());
                      String p = "";
                      if (selected.getPriorityID().equals(2)
                          || selected.getPriorityID().equals(null)) {
                        p = "Low";
                        System.out.println(p + " " + selected.getPriorityID());
                        args.putString("Priority", p);
                      } else if (selected.getPriorityID().equals(1)) {
                        p = "High";
                        System.out.println(p + " " + selected.getPriorityID());
                        args.putString("Priority", p);
                      }
                      if (Setup.user.getRoleID().equals("DD")
                          || Setup.user.getRoleID().equals("DH")) {
                        args.putString("APPROVAL", "ENABLED");
                      }
                      RequisitionDetailFragment reqDetailFrag = new RequisitionDetailFragment();
                      reqDetailFrag.setArguments(args);
                      android.support.v4.app.FragmentTransaction fragmentTransaction =
                          getFragmentManager().beginTransaction();
                      fragmentTransaction.replace(R.id.frame, reqDetailFrag).commit();
                    }

                    @Override
                    public void failure(RetrofitError error) {
                      Log.i("Fail get Detail", error.toString());
                    }
                  });
            }
          });
    }

    // PullToRefresh
    mSwipeRefreshLayout.setOnRefreshListener(
        new SwipeRefreshLayout.OnRefreshListener() {
          @Override
          public void onRefresh() {
            if (Setup.MODE == 1) {
              // user requisition page
              if (Setup.user.getRoleID().equals("SC")
                  || Setup.user.getRoleID().equals("SS")
                  || Setup.user.getRoleID().equals("SM")) {
                reqAPI.getRequisitionFromSC(
                    new Callback<List<JSONRequisition>>() {
                      @Override
                      public void success(
                          List<JSONRequisition> jsonRequisitions, Response response) {
                        List<JSONRequisition> reqList = new ArrayList<JSONRequisition>();
                        for (JSONRequisition jsonReq : jsonRequisitions) {
                          if (jsonReq.getStatusID().equals(2)
                              || jsonReq.getStatusID().equals(3)
                              || jsonReq.getStatusID().equals(4)) {
                            reqList.add(jsonReq);
                          }
                        }
                        Log.i("URL", response.getUrl());
                        Log.i("STATUS", String.valueOf(response.getStatus()));
                        Log.i("REASON", response.getReason());
                        Log.i("Size of requisition", String.valueOf(jsonRequisitions.size()));
                        RequisitionListAdapter.mRequisitions = reqList;
                        Setup.allRequisition = reqList;
                        RequisitionListFragment reqListFrag = new RequisitionListFragment();
                        FragmentTransaction fragmentTran = getFragmentManager().beginTransaction();
                        fragmentTran.replace(R.id.frame, reqListFrag).commit();
                      }

                      @Override
                      public void failure(RetrofitError error) {
                        Log.i("GetRequisitionFail", error.toString());
                      }
                    });
              }
              // load requisitionlist by EmpID
              else {
                reqAPI.getRequisition(
                    Setup.user.getEmpID(),
                    new Callback<List<JSONRequisition>>() {
                      @Override
                      public void success(
                          List<JSONRequisition> jsonRequisitions, Response response) {
                        Log.i("URL", response.getUrl());
                        Log.i("STATUS", String.valueOf(response.getStatus()));
                        Log.i("REASON", response.getReason());
                        Log.i("Size of requisition", String.valueOf(jsonRequisitions.size()));
                        RequisitionListAdapter.mRequisitions = jsonRequisitions;
                        Setup.allRequisition = jsonRequisitions;
                        RequisitionListAdapter.mRequisitions = Setup.allRequisition;
                        RequisitionListFragment reqListFrag = new RequisitionListFragment();
                        FragmentTransaction fragmentTran = getFragmentManager().beginTransaction();
                        fragmentTran.replace(R.id.frame, reqListFrag).commit();
                      }

                      @Override
                      public void failure(RetrofitError error) {
                        Log.i("GetRequisitionFail", error.toString());
                      }
                    });
              }
            } else if (Setup.MODE == 2) {
              // approval
              reqAPI.getRequisitionFromSC(
                  new Callback<List<JSONRequisition>>() {
                    @Override
                    public void success(List<JSONRequisition> jsonRequisitions, Response response) {

                      Log.i("URL", response.getUrl());
                      Log.i("STATUS", String.valueOf(response.getStatus()));
                      Log.i("REASON", response.getReason());
                      Log.i("Size of requisition", String.valueOf(jsonRequisitions.size()));
                      List<JSONRequisition> reqList = new ArrayList<JSONRequisition>();
                      // inside all requisition filter requisition by Department & PENDING Status
                      for (JSONRequisition jsonReq : jsonRequisitions) {
                        if (jsonReq.getDeptID() != null) {
                          if (jsonReq
                              .getDeptID()
                              .toString()
                              .equals(Setup.user.getDeptID().toString())) {
                            Log.i("Here what", String.valueOf(jsonReq.getReqID()));
                            if (jsonReq.getStatusID().equals(1)
                                || jsonReq.getStatusID().equals(2)
                                || jsonReq.getStatusID().equals(5)) {
                              reqList.add(jsonReq);
                              Log.i("what here", String.valueOf(jsonReq.getReqID()));
                            }
                          }
                        }
                      }
                      Log.i("SIZE OFFFFF reqList", String.valueOf(reqList.size()));
                      RequisitionListAdapter.mRequisitions = reqList;
                      Setup.allRequisition = reqList;
                      // RequisitionListAdapter.mRequisitions = Setup.allRequisition;
                      RequisitionListFragment reqListFrag = new RequisitionListFragment();
                      FragmentTransaction fragmentTran = getFragmentManager().beginTransaction();
                      fragmentTran.replace(R.id.frame, reqListFrag).commit();
                    }

                    @Override
                    public void failure(RetrofitError error) {
                      Log.i("GetRequisitionFail", error.toString() + " " + error.getUrl());
                    }
                  });
            }

            onItemsLoadComplete();
          }
        });

    return view;
  }