HSE-Observation-Android-App/app/src/main/java/com/utopiaindustries/hseobservationsapp/fragments/HomeFragment.java

559 lines
24 KiB
Java

package com.utopiaindustries.hseobservationsapp.fragments;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.utopiaindustries.hseobservationsapp.R;
import com.utopiaindustries.hseobservationsapp.activities.HSETrainingForms.HseOneActivity;
import com.utopiaindustries.hseobservationsapp.activities.InjuryRecordForms.InjuryFormOne;
import com.utopiaindustries.hseobservationsapp.activities.ObservationForms.ObservationOneActivity;
import com.utopiaindustries.hseobservationsapp.activities.OtherHSEActivityForms.OtherHseActivity;
import com.utopiaindustries.hseobservationsapp.activities.PermitToWorkForms.PermitOneActivity;
import com.utopiaindustries.hseobservationsapp.activities.ProgressiveActivityForms.ProgressiveActivity;
import com.utopiaindustries.hseobservationsapp.activities.WeeklyActivityForms.WeeklyFormOne;
import com.utopiaindustries.hseobservationsapp.adapters.BuildingsAdapter;
import com.utopiaindustries.hseobservationsapp.adapters.DepartmentAdapter;
import com.utopiaindustries.hseobservationsapp.adapters.FloorsAdapter;
import com.utopiaindustries.hseobservationsapp.adapters.RecordTypeAdapter;
import com.utopiaindustries.hseobservationsapp.adapters.ShiftAdapter;
import com.utopiaindustries.hseobservationsapp.adapters.SiteAdapter;
import com.utopiaindustries.hseobservationsapp.adapters.SupervisorAdapter;
import com.utopiaindustries.hseobservationsapp.helper.Helper;
import com.utopiaindustries.hseobservationsapp.helper.Preference;
import com.utopiaindustries.hseobservationsapp.models.HseData.HseBuilding;
import com.utopiaindustries.hseobservationsapp.models.HseData.HseDepartment;
import com.utopiaindustries.hseobservationsapp.models.HseData.HseFloor;
import com.utopiaindustries.hseobservationsapp.models.HseData.RecordType;
import com.utopiaindustries.hseobservationsapp.models.HseData.Site;
import com.utopiaindustries.hseobservationsapp.models.HseData.Supervisor;
import com.utopiaindustries.hseobservationsapp.models.HseData.Shift;
import com.utopiaindustries.hseobservationsapp.utils.StorageManager.StorageManager;
import com.utopiaindustries.hseobservationsapp.utils.ProgressDialogFragment;
import com.utopiaindustries.hseobservationsapp.viewmodels.LoginViewModel;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors;
public class HomeFragment extends Fragment {
private int year, month, day;
private Calendar calendar;
private TextView txtUserName, txtDate;
private ImageView imgCalendar;
private Button btnNext;
private AutoCompleteTextView siteTextView, supervisorTextView, shiftTextview, formTextview,
departmentTextview, buildingTextview, floorTextview;
private SiteAdapter siteAdapter;
private ArrayList<Site> siteArrayList = new ArrayList<>();
private SupervisorAdapter supervisorAdapter;
private ArrayList<Supervisor> supervisorArrayList_temp = new ArrayList<>();
private ArrayList<Supervisor> supervisorArrayList = new ArrayList<>();
private ShiftAdapter shiftAdapter;
private ArrayList<Shift> shiftArrayList = new ArrayList<>();
private RecordTypeAdapter recordTypeAdapter;
private List<RecordType> recordTypeArrayList = new ArrayList<>();
private DepartmentAdapter departmentAdapter;
private ArrayList<HseDepartment> departmentArrayList_temp = new ArrayList<>();
private ArrayList<HseDepartment> departmentArrayList = new ArrayList<>();
private ArrayList<HseBuilding> buildingArrayList_temp = new ArrayList<>();
private ArrayList<HseBuilding> buildingArrayList = new ArrayList<>();
private BuildingsAdapter buildingAdapter;
private ArrayList<HseFloor> floorArrayList_temp = new ArrayList<>();
private ArrayList<HseFloor> floorArrayList = new ArrayList<>();
private FloorsAdapter floorsAdapter;
int selectedOption = 0;
String userName = "";
String siteName = "";
String supervisorName = "";
String shiftName = "";
String departmentName = "", buildingName = "", floorName = "";
LoginViewModel loginViewModel;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);
initializeLayout(view);
txtUserName.setText(String.format("User: %s", userName));
imgCalendar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDatePickerDialog(getActivity());
}
});
siteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Perform action when siteTextView item is clicked
//Toast.makeText(getActivity(), "Item clicked: " + siteArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
siteName = siteArrayList.get(position).getTitle();
Site clickedItem = siteArrayList.get(position);
supervisorTextView.setText(null);
StorageManager.getInstance().setSite_id(clickedItem.getId());
if (!supervisorArrayList_temp.isEmpty()) {
List<Supervisor> filteredUnitItems = supervisorArrayList_temp.stream()
.filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId()))
.collect(Collectors.toList());
supervisorArrayList.clear();
supervisorArrayList.addAll(filteredUnitItems);
supervisorAdapter = new SupervisorAdapter(getActivity(), supervisorArrayList);
supervisorTextView.setAdapter(supervisorAdapter);
}
//department
if (!departmentArrayList_temp.isEmpty()) {
List<HseDepartment> filteredUnitItems = departmentArrayList_temp.stream()
.filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId()))
.collect(Collectors.toList());
departmentArrayList.clear();
departmentArrayList.addAll(filteredUnitItems);
departmentAdapter = new DepartmentAdapter(getActivity(), departmentArrayList);
departmentTextview.setAdapter(departmentAdapter);
}
//Location -- Building
if (!buildingArrayList_temp.isEmpty()) {
List<HseBuilding> filteredUnitItems = buildingArrayList_temp.stream()
.filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId()))
.collect(Collectors.toList());
buildingArrayList.clear();
buildingArrayList.addAll(filteredUnitItems);
buildingAdapter = new BuildingsAdapter(getActivity(), buildingArrayList);
buildingTextview.setAdapter(buildingAdapter);
}
//Sub Location -- floor
if (!floorArrayList_temp.isEmpty()) {
List<HseFloor> filteredUnitItems = floorArrayList_temp.stream()
.filter(item -> Objects.equals(item.getSiteId(), clickedItem.getId()))
.collect(Collectors.toList());
floorArrayList.clear();
floorArrayList.addAll(filteredUnitItems);
floorsAdapter = new FloorsAdapter(getActivity(), floorArrayList);
floorTextview.setAdapter(floorsAdapter);
}
}
});
supervisorTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Perform action when supervisorTextView item is clicked
//Toast.makeText(getActivity(), "Item clicked: " + supervisorArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
supervisorName = supervisorArrayList.get(position).getName();
StorageManager.getInstance().setSupervisorId(supervisorArrayList.get(position).getId());
}
});
shiftTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Perform action when shiftTextview item is clicked
//Toast.makeText(getActivity(), "Item clicked: " + shiftArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
shiftName = shiftArrayList.get(position).getTitle();
StorageManager.getInstance().setShift(shiftName);
}
});
formTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Perform action when formTextview item is clicked
// Toast.makeText(getActivity(), "Item clicked: " + formArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
selectedOption = recordTypeArrayList.get(position).getId();
StorageManager.getInstance().setRecordTypeId(selectedOption);
}
});
departmentTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Perform action when departmentTextview item is clicked
//Toast.makeText(getActivity(), "Item clicked: " + departmentArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
departmentName = departmentArrayList.get(position).getTitle();
StorageManager.getInstance().setDepartmentId(departmentArrayList.get(position).getId());
}
});
buildingTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Perform action when buildingTextview item is clicked
//Toast.makeText(getActivity(), "Item clicked: " + buildingArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
buildingName = buildingArrayList.get(position).getTitle();
StorageManager.getInstance().setBuildingId(buildingArrayList.get(position).getId());
}
});
floorTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Perform action when floorTextview item is clicked
//Toast.makeText(getActivity(), "Item clicked: " + floorArrayList.get(position).getTitle(), Toast.LENGTH_SHORT).show();
floorName = floorArrayList.get(position).getTitle();
StorageManager.getInstance().setFloorId(floorArrayList.get(position).getId());
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isValidate()) {
switch (selectedOption) {
case 1:
startActivity(new Intent(getActivity(), ObservationOneActivity.class));
break;
case 2:
startActivity(new Intent(getActivity(), PermitOneActivity.class));
break;
case 3:
startActivity(new Intent(getActivity(), HseOneActivity.class));
break;
case 4:
startActivity(new Intent(getActivity(), InjuryFormOne.class));
break;
case 5:
startActivity(new Intent(getActivity(), WeeklyFormOne.class));
break;
case 6:
startActivity(new Intent(getActivity(), ProgressiveActivity.class));
break;
case 7:
startActivity(new Intent(getActivity(), OtherHseActivity.class));
break;
default:
startActivity(new Intent(getActivity(), ObservationOneActivity.class));
// Toast.makeText(getActivity(), "No option selected", Toast.LENGTH_SHORT).show();
break;
}
}
}
});
return view;
}
public void initializeLayout(View view) {
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
txtUserName = view.findViewById(R.id.txt_user_name);
txtDate = view.findViewById(R.id.txt_date);
imgCalendar = view.findViewById(R.id.img_calendar);
btnNext = view.findViewById(R.id.btn_next);
siteTextView = view.findViewById(R.id.site_textview);
supervisorTextView = view.findViewById(R.id.supervisor_textview);
shiftTextview = view.findViewById(R.id.shift_textview);
formTextview = view.findViewById(R.id.form_textview);
departmentTextview = view.findViewById(R.id.department_textview);
buildingTextview = view.findViewById(R.id.building_textview);
floorTextview = view.findViewById(R.id.floor_textview);
userName = Preference.getMyStringPref(Helper.project_file, Helper.logInUser, getActivity());
loginViewModel = new ViewModelProvider(getActivity()).get(LoginViewModel.class);
loginViewModel.getLoadingState().observe(getActivity(), isLoading -> {
if (isLoading != null && isLoading) {
showProgressDialog();
} else {
dismissProgressDialog();
}
});
loginViewModel.getErrorMessage().observe(getActivity(), errorResponse -> {
Toast.makeText(getActivity(), errorResponse, Toast.LENGTH_SHORT).show();
});
loginViewModel.getUserLiveData().observe(getActivity(), qcResponse -> {
if (qcResponse != null) {
if (!qcResponse.getHseInjuryTypes().isEmpty()) {
Helper.saveList(qcResponse.getHseInjuryTypes(), Helper.hseInjuryTypes, getActivity());
}
if (!qcResponse.getHseKpis().isEmpty()) {
Helper.saveList(qcResponse.getHseKpis(), Helper.hseKpis, getActivity());
}
if (!qcResponse.getSites().isEmpty()) {
Helper.saveList(qcResponse.getSites(), Helper.homeSite, getActivity());
siteArrayList.addAll(qcResponse.getSites());
siteAdapter = new SiteAdapter(getActivity(), siteArrayList);
siteTextView.setAdapter(siteAdapter);
}
if (!qcResponse.getRecordTypes().isEmpty()) {
Helper.saveList(qcResponse.getRecordTypes(), Helper.recordType, getActivity());
recordTypeArrayList.addAll(qcResponse.getRecordTypes());
recordTypeAdapter = new RecordTypeAdapter(getActivity(), recordTypeArrayList);
formTextview.setAdapter(recordTypeAdapter);
}
if (!qcResponse.getSupervisors().isEmpty()) {
Helper.saveList(qcResponse.getSupervisors(), Helper.superVisor, getActivity());
supervisorArrayList_temp.addAll(qcResponse.getSupervisors());
}
if (!qcResponse.getHseObservationClasses().isEmpty()) {
Helper.saveList(qcResponse.getHseObservationClasses(), Helper.observationClass, getActivity());
}
if (!qcResponse.getHseObservationSubClasses().isEmpty()) {
Helper.saveList(qcResponse.getHseObservationSubClasses(), Helper.observationSubClass, getActivity());
}
if (!qcResponse.getHseFloors().isEmpty()) {
Helper.saveList(qcResponse.getHseFloors(), Helper.hseFloors, getActivity());
floorArrayList_temp.addAll(qcResponse.getHseFloors());
}
if (!qcResponse.getHseActivities().isEmpty()) {
Helper.saveList(qcResponse.getHseActivities(), Helper.hseActivities, getActivity());
}
if (!qcResponse.getHseDepartment().isEmpty()) {
Helper.saveList(qcResponse.getHseDepartment(), Helper.hseDepartment, getActivity());
//department
departmentArrayList_temp.addAll(qcResponse.getHseDepartment());
}
if (!qcResponse.getHseIncidentTypes().isEmpty()) {
Helper.saveList(qcResponse.getHseIncidentTypes(), Helper.hseIncidentTypes, getActivity());
}
if (!qcResponse.getHseInjuredBodyPart().isEmpty()) {
Helper.saveList(qcResponse.getHseInjuredBodyPart(), Helper.hseInjuredBodyPart, getActivity());
}
if (!qcResponse.getHsePtwType().isEmpty()) {
Helper.saveList(qcResponse.getHsePtwType(), Helper.hsePtwType, getActivity());
}
if (!qcResponse.getHseSafetyTrainingTopics().isEmpty()) {
Helper.saveList(qcResponse.getHseSafetyTrainingTopics(), Helper.hseSafetyTrainingTopics, getActivity());
}
if (!qcResponse.getHseBuildings().isEmpty()) {
Helper.saveList(qcResponse.getHseBuildings(), Helper.hseBuildings, getActivity());
buildingArrayList_temp.addAll(qcResponse.getHseBuildings());
}
if (!qcResponse.getHseWorkingTeam().isEmpty()) {
Helper.saveList(qcResponse.getHseWorkingTeam(), Helper.hseWorkingTeams, getActivity());
}
if (!qcResponse.getHseInjuries().isEmpty()) {
Helper.saveList(qcResponse.getHseInjuries(), Helper.hseInjuries, getActivity());
}
Preference.setMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity(), "true");
} else {
Toast.makeText(getActivity(), "Fetching Records Failed", Toast.LENGTH_SHORT).show();
}
});
if (Preference.getMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity()).equalsIgnoreCase("false") ||
Preference.getMyStringPref(Helper.project_file, Helper.firstTimeApiCall, getActivity()).equalsIgnoreCase("default")) {
loginViewModel.getHSEData();
}
else {
siteArrayList.clear();
recordTypeArrayList.clear();
siteArrayList.clear();
supervisorArrayList_temp.clear();
supervisorArrayList.clear();
departmentArrayList_temp.clear();
departmentArrayList.clear();
buildingArrayList_temp.clear();
buildingArrayList.clear();
floorArrayList_temp.clear();
floorArrayList.clear();
siteArrayList.addAll(Helper.getList(Helper.homeSite, getActivity(), Site.class));
siteAdapter = new SiteAdapter(getActivity(), siteArrayList);
siteTextView.setAdapter(siteAdapter);
supervisorArrayList_temp.addAll(Helper.getList(Helper.superVisor, getActivity(), Supervisor.class));
recordTypeArrayList.addAll(Helper.getList(Helper.recordType, getActivity(), RecordType.class));
recordTypeAdapter = new RecordTypeAdapter(getActivity(), recordTypeArrayList);
formTextview.setAdapter(recordTypeAdapter);
//department
departmentArrayList_temp.addAll(Helper.getList(Helper.hseDepartment, getActivity(), HseDepartment.class));
//building
buildingArrayList_temp.addAll(Helper.getList(Helper.hseBuildings, getActivity(), HseBuilding.class));
//floor
floorArrayList_temp.addAll(Helper.getList(Helper.hseFloors, getActivity(), HseFloor.class));
}
shiftArrayList.add(new Shift(1, "General Shift(08:00AM - 05:00PM)"));
shiftArrayList.add(new Shift(2, "Evening Shift(12:00PM - 09:00PM)"));
shiftArrayList.add(new Shift(3, "Night Shift(09:00PM - 06:00AM)"));
shiftAdapter = new ShiftAdapter(getActivity(), shiftArrayList);
shiftTextview.setAdapter(shiftAdapter);
}
private void showDatePickerDialog(Context context) {
DatePickerDialog datePickerDialog = new DatePickerDialog(
context,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// Month is 0-indexed, so we add 1
Calendar selectedCalendar = Calendar.getInstance();
selectedCalendar.set(year, monthOfYear, dayOfMonth);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
String selectedDate = dateFormat.format(selectedCalendar.getTime());
txtDate.setText(selectedDate);
StorageManager.getInstance().setObservation_date(selectedDate);
}
},
year, month, day
);
datePickerDialog.show();
}
public boolean isValidate() {
boolean returnValue = true;
String message = "";
if (floorName.isEmpty()) {
message = "Please select floor.";
returnValue = false;
}
if (buildingName.isEmpty()) {
message = "Please select building.";
returnValue = false;
}
if (departmentName.isEmpty()) {
message = "Please select department.";
returnValue = false;
}
if (selectedOption == 0) {
message = "Please select form type.";
returnValue = false;
}
if (shiftName.isEmpty()) {
message = "Please select shift.";
returnValue = false;
}
if (supervisorName.isEmpty()) {
message = "Please select supervisor.";
returnValue = false;
}
if (siteName.isEmpty()) {
message = "Please select site.";
returnValue = false;
}
if (txtDate.getText().toString().isEmpty()) {
message = "Please select date.";
returnValue = false;
}
if (!returnValue) {
Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
}
return returnValue;
}
public void showProgressDialog() {
ProgressDialogFragment progressDialog = new ProgressDialogFragment();
progressDialog.setCancelable(false);
progressDialog.show(requireActivity().getSupportFragmentManager(), "progressDialog");
}
public void dismissProgressDialog() {
ProgressDialogFragment progressDialog = (ProgressDialogFragment)
requireActivity().getSupportFragmentManager().findFragmentByTag("progressDialog");
if (progressDialog != null) {
progressDialog.dismiss();
}
}
}