From 080cc2b4f7086836343f13fde9a1963119b22fe8 Mon Sep 17 00:00:00 2001 From: rishabh-997 Date: Fri, 12 Jun 2020 23:05:26 +0530 Subject: [PATCH 01/16] resolving conflicts --- openmrs-client/src/main/AndroidManifest.xml | 10 + .../formadmission/FormAdmissionActivity.java | 68 +++++++ .../formadmission/FormAdmissionContract.java | 49 +++++ .../formadmission/FormAdmissionFragment.java | 141 +++++++++++++ .../formadmission/FormAdmissionPresenter.java | 186 ++++++++++++++++++ .../activities/formlist/FormListContract.java | 2 + .../activities/formlist/FormListFragment.java | 11 ++ .../formlist/FormListPresenter.java | 10 +- .../activities/introduction/SplashActivity.kt | 8 +- .../main/res/drawable/ic_date_selector.xml | 10 + .../src/main/res/drawable/rectangle_box.xml | 14 ++ .../main/res/drawable/spinner_background.xml | 26 +++ .../res/layout/activity_form_admission.xml | 27 +++ .../res/layout/fragment_form_admission.xml | 75 +++++++ .../src/main/res/values-hi/strings.xml | 3 + .../src/main/res/values/strings.xml | 2 + 16 files changed, 633 insertions(+), 9 deletions(-) create mode 100644 openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionActivity.java create mode 100644 openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionContract.java create mode 100644 openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionFragment.java create mode 100644 openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionPresenter.java create mode 100644 openmrs-client/src/main/res/drawable/ic_date_selector.xml create mode 100644 openmrs-client/src/main/res/drawable/rectangle_box.xml create mode 100644 openmrs-client/src/main/res/drawable/spinner_background.xml create mode 100644 openmrs-client/src/main/res/layout/activity_form_admission.xml create mode 100644 openmrs-client/src/main/res/layout/fragment_form_admission.xml diff --git a/openmrs-client/src/main/AndroidManifest.xml b/openmrs-client/src/main/AndroidManifest.xml index dd56190781..a89d319535 100644 --- a/openmrs-client/src/main/AndroidManifest.xml +++ b/openmrs-client/src/main/AndroidManifest.xml @@ -163,6 +163,16 @@ android:name="android.support.PARENT_ACTIVITY" android:value=".activities.formentrypatientlist.FormEntryPatientListActivity" /> + + + + + { + + void updateProviderAdapter(List providerList); + + void showToast(String error); + + void updateLocationAdapter(List results); + + void enableSubmitButton(boolean value); + + void quitFormEntry(); + } + + interface Presenter extends BasePresenterContract { + + void getProviders(FormAdmissionFragment formAdmissionFragment); + + void updateViews(List providerList); + + void getLocation(String url); + + void createEncounter(String admittedByPerson, String admittedToPerson); + } +} diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionFragment.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionFragment.java new file mode 100644 index 0000000000..f44e1da2df --- /dev/null +++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionFragment.java @@ -0,0 +1,141 @@ +/* + * The contents of this file are subject to the OpenMRS Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://license.openmrs.org + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * Copyright (C) OpenMRS, LLC. All Rights Reserved. + */ + +package org.openmrs.mobile.activities.formadmission; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import android.annotation.SuppressLint; +import android.os.Bundle; +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 androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import org.openmrs.mobile.activities.ACBaseFragment; +import org.openmrs.mobile.application.OpenMRS; +import org.openmrs.mobile.databinding.FragmentFormAdmissionBinding; +import org.openmrs.mobile.models.Location; +import org.openmrs.mobile.models.Provider; +import org.openmrs.mobile.utilities.ToastUtil; + +public class FormAdmissionFragment extends ACBaseFragment implements FormAdmissionContract.View { + + private FragmentFormAdmissionBinding formAdmissionBinding; + + private String admittedByPerson = ""; + private String admittedToPerson = ""; + + public static FormAdmissionFragment newInstance() { + return new FormAdmissionFragment(); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + formAdmissionBinding = FragmentFormAdmissionBinding.inflate(inflater, container, false); + View root = formAdmissionBinding.getRoot(); + + initFragmentFields(); + mPresenter.getProviders(this); + mPresenter.getLocation(OpenMRS.getInstance().getServerUrl()); + + return root; + } + + private void initFragmentFields() { + + Date currentDate = Calendar.getInstance().getTime(); + + @SuppressLint("SimpleDateFormat") + SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); + formAdmissionBinding.admissionDateHeader.setText(df.format(currentDate)); + + formAdmissionBinding.submitButton.setOnClickListener(v -> createEncounter()); + } + + private void createEncounter() { + if(admittedByPerson.isEmpty() || admittedToPerson.isEmpty()) + ToastUtil.showShortToast(getContext(), ToastUtil.ToastType.ERROR, "Please Select Required Field"); + else + mPresenter.createEncounter(admittedByPerson, admittedToPerson); + + } + + @Override + public void updateProviderAdapter(List providerList) { + String[] providers = new String[providerList.size()]; + for (int i = 0; i < providerList.size(); i++) { + providers[i] = providerList.get(i).getDisplay(); + } + + ArrayAdapter adapterAdmittedBy = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, providers); + formAdmissionBinding.admittedBySpinner.setAdapter(adapterAdmittedBy); + formAdmissionBinding.admittedBySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + admittedByPerson = formAdmissionBinding.admittedBySpinner.getSelectedItem().toString(); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + } + + @Override + public void showToast(String error) { + Log.i("error",error); + } + + @Override + public void updateLocationAdapter(List results) { + String[] locations = new String[results.size()]; + for (int i = 0; i < results.size(); i++) { + locations[i] = results.get(i).getDisplay(); + } + ArrayAdapter adapterAdmittedTo = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, locations); + formAdmissionBinding.admittedToSpinner.setAdapter(adapterAdmittedTo); + formAdmissionBinding.admittedToSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + admittedToPerson = formAdmissionBinding.admittedToSpinner.getSelectedItem().toString(); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + } + + @Override + public void enableSubmitButton(boolean value) { + formAdmissionBinding.submitButton.setEnabled(value); + } + + @Override + public void quitFormEntry() { + getActivity().finish(); + } + +} diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionPresenter.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionPresenter.java new file mode 100644 index 0000000000..d667068b32 --- /dev/null +++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionPresenter.java @@ -0,0 +1,186 @@ +/* + * The contents of this file are subject to the OpenMRS Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://license.openmrs.org + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * Copyright (C) OpenMRS, LLC. All Rights Reserved. + */ + +package org.openmrs.mobile.activities.formadmission; + +import android.util.Log; + +import static org.openmrs.mobile.utilities.FormService.getFormResourceByName; + +import java.util.ArrayList; +import java.util.List; + +import org.joda.time.LocalDateTime; +import org.openmrs.mobile.activities.BasePresenter; +import org.openmrs.mobile.api.EncounterService; +import org.openmrs.mobile.api.RestApi; +import org.openmrs.mobile.api.RestServiceBuilder; +import org.openmrs.mobile.api.retrofit.ProviderRepository; +import org.openmrs.mobile.dao.PatientDAO; +import org.openmrs.mobile.listeners.retrofit.DefaultResponseCallbackListener; +import org.openmrs.mobile.models.Encountercreate; +import org.openmrs.mobile.models.Location; +import org.openmrs.mobile.models.Obscreate; +import org.openmrs.mobile.models.Observation; +import org.openmrs.mobile.models.Patient; +import org.openmrs.mobile.models.Provider; +import org.openmrs.mobile.models.Results; +import org.openmrs.mobile.utilities.ApplicationConstants; +import org.openmrs.mobile.utilities.NetworkUtils; +import org.openmrs.mobile.utilities.ToastUtil; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class FormAdmissionPresenter extends BasePresenter implements FormAdmissionContract.Presenter { + + private FormAdmissionContract.View view; + private Long patientID; + private String encounterType; + private String formName; + private String formUUID; + private Patient mPatient; + private RestApi restApi; + + public FormAdmissionPresenter(FormAdmissionContract.View view, Long patientID, String encounterType, String formName) { + this.view = view; + this.patientID = patientID; + this.encounterType = encounterType; + this.formName = formName; + this.mPatient = new PatientDAO().findPatientByID(Long.toString(patientID)); + this.formUUID = getFormResourceByName(formName).getUuid(); + restApi = RestServiceBuilder.createService(RestApi.class); + this.view.setPresenter(this); + } + + @Override + public void subscribe() { + //the function to start with + } + + @Override + public void getProviders(FormAdmissionFragment fragment) { + ProviderRepository providerRepository = new ProviderRepository(); + providerRepository.getProviders(restApi).observe(fragment, this::updateViews); + } + + @Override + public void updateViews(List providerList) { + if (providerList != null && providerList.size() != 0) { + view.updateProviderAdapter(providerList); + } else { + view.showToast("Error"); + } + } + + @Override + public void getLocation(String url) { + if (NetworkUtils.hasNetwork()) { + String locationEndPoint = url + ApplicationConstants.API.REST_ENDPOINT + "location"; + Call> call = + restApi.getLocations(locationEndPoint, "Admission Location", "full"); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful()) { + view.updateLocationAdapter(response.body().getResults()); + } else { + view.showToast("An error Occurred, Try Again Later !!!"); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + view.showToast(t.getMessage()); + } + }); + } else { + view.showToast("You are currently offline, Try again when connected !!!"); + } + } + + @Override + public void createEncounter(String admittedByPerson, String admittedToPerson) { + view.enableSubmitButton(false); + + Encountercreate encountercreate=new Encountercreate(); + encountercreate.setPatient(mPatient.getUuid()); + Log.i("hello-patientUUID",mPatient.getUuid()); + + encountercreate.setEncounterType(encounterType); + Log.i("hello-encounterType",encounterType); + + encountercreate.setFormname(formName); + Log.i("hello-formName",formName); + + encountercreate.setPatientId(patientID); + Log.i("hello-patientID",patientID+""); + + encountercreate.setFormUuid(formUUID); + Log.i("hello-formUUID",formUUID); + + List observations=new ArrayList<>(); + LocalDateTime localDateTime = new LocalDateTime(); + + Obscreate obscreate1 = new Obscreate(); + obscreate1.setConcept("encounterDate"); + obscreate1.setValue(localDateTime.toString()); + obscreate1.setObsDatetime(localDateTime.toString()); + obscreate1.setPerson(mPatient.getUuid()); + observations.add(obscreate1); + Log.i("hello-obs1",obscreate1.toString()); + + Obscreate obscreate2 = new Obscreate(); + obscreate2.setConcept("encounterProviderAndRole"); + obscreate2.setValue(admittedByPerson); + obscreate2.setObsDatetime(localDateTime.toString()); + obscreate2.setPerson(mPatient.getUuid()); + observations.add(obscreate2); + Log.i("hello-obs2",obscreate2.toString()); + + Obscreate obscreate3 = new Obscreate(); + obscreate3.setConcept("encounterLocation"); + obscreate3.setValue(admittedToPerson); + obscreate3.setObsDatetime(localDateTime.toString()); + obscreate3.setPerson(mPatient.getUuid()); + observations.add(obscreate3); + Log.i("hello-obs3",obscreate3.toString()); + + encountercreate.setObservations(observations); + /*encountercreate.setObslist(); + encountercreate.save(); + + if(!mPatient.isSynced()) { + mPatient.addEncounters(encountercreate.getId()); + new PatientDAO().updatePatient(mPatient.getId(),mPatient); + ToastUtil.error("Patient not yet registered. Form data is saved locally " + + "and will sync when internet connection is restored. "); + view.enableSubmitButton(true); + } + else { + new EncounterService().addEncounter(encountercreate, new DefaultResponseCallbackListener() { + @Override + public void onResponse() { + view.enableSubmitButton(true); + } + @Override + public void onErrorResponse(String errorMessage) { + view.showToast(errorMessage); + view.enableSubmitButton(true); + } + }); + view.quitFormEntry(); + }*/ + } +} diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListContract.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListContract.java index 8784705f8b..89f08f2596 100644 --- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListContract.java +++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListContract.java @@ -26,6 +26,8 @@ interface View extends BaseView { void showError(String formName); Boolean formCreate(String uuid, String formName); + + void startAdmissionFormActivity(String formName, Long patientId, String encounterType); } interface Presenter extends BasePresenterContract { diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListFragment.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListFragment.java index e36aca5715..6a9f5c64ee 100644 --- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListFragment.java +++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListFragment.java @@ -17,6 +17,7 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -32,6 +33,7 @@ import org.json.JSONObject; import org.openmrs.mobile.R; import org.openmrs.mobile.activities.ACBaseFragment; +import org.openmrs.mobile.activities.formadmission.FormAdmissionActivity; import org.openmrs.mobile.activities.formdisplay.FormDisplayActivity; import org.openmrs.mobile.api.RestApi; import org.openmrs.mobile.api.RestServiceBuilder; @@ -86,6 +88,15 @@ public void startFormDisplayActivity(String formName, Long patientId, String val startActivity(intent); } + @Override + public void startAdmissionFormActivity(String formName, Long patientId, String encounterType) { + Intent intent = new Intent(getContext(), FormAdmissionActivity.class); + intent.putExtra(ApplicationConstants.BundleKeys.FORM_NAME, formName); + intent.putExtra(ApplicationConstants.BundleKeys.PATIENT_ID_BUNDLE, patientId); + intent.putExtra(ApplicationConstants.BundleKeys.ENCOUNTERTYPE, encounterType); + startActivity(intent); + } + @RequiresApi(api = Build.VERSION_CODES.KITKAT) public Boolean formCreate(String uuid, String formName) { formCreateFlag = false; diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListPresenter.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListPresenter.java index 36da2c37da..d1c1df9d43 100644 --- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListPresenter.java +++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formlist/FormListPresenter.java @@ -89,11 +89,15 @@ public void listItemClicked(int position, String formName) { valueRefString = resource.getValueReference(); } } - - EncounterType encType = encounterDAO.getEncounterTypeByFormName(formsStringArray[position]); + String encounterName=formsStringArray[position].split("\\(")[0].trim(); + EncounterType encType = encounterDAO.getEncounterTypeByFormName(encounterName); if (encType != null) { String encounterType = encType.getUuid(); - view.startFormDisplayActivity(formName, patientId, valueRefString, encounterType); + if(EncounterType.ADMISSION.equals(encounterName)) { + view.startAdmissionFormActivity(formName, patientId, encounterType); + } else { + view.startFormDisplayActivity(formName, patientId, valueRefString, encounterType); + } } else { view.showError(formName); } diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/introduction/SplashActivity.kt b/openmrs-client/src/main/java/org/openmrs/mobile/activities/introduction/SplashActivity.kt index a101a97c77..e64fd08df9 100644 --- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/introduction/SplashActivity.kt +++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/introduction/SplashActivity.kt @@ -18,11 +18,7 @@ import android.graphics.Typeface import android.os.Bundle import android.os.Handler import android.view.WindowManager -import android.view.animation.AccelerateInterpolator -import android.view.animation.AlphaAnimation -import android.view.animation.Animation -import android.view.animation.AnimationUtils -import android.view.animation.AnimationSet +import android.view.animation.* import org.openmrs.mobile.R import org.openmrs.mobile.activities.ACBaseActivity import org.openmrs.mobile.databinding.ActivitySplashBinding @@ -32,7 +28,7 @@ class SplashActivity : ACBaseActivity() { private val mHandler = Handler() private var mRunnable: Runnable? = null - private lateinit var binding: ActivitySplashBinding + private lateinit var binding: ActivitySplashBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/openmrs-client/src/main/res/drawable/ic_date_selector.xml b/openmrs-client/src/main/res/drawable/ic_date_selector.xml new file mode 100644 index 0000000000..1399541077 --- /dev/null +++ b/openmrs-client/src/main/res/drawable/ic_date_selector.xml @@ -0,0 +1,10 @@ + + + diff --git a/openmrs-client/src/main/res/drawable/rectangle_box.xml b/openmrs-client/src/main/res/drawable/rectangle_box.xml new file mode 100644 index 0000000000..1c5a09199b --- /dev/null +++ b/openmrs-client/src/main/res/drawable/rectangle_box.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/openmrs-client/src/main/res/drawable/spinner_background.xml b/openmrs-client/src/main/res/drawable/spinner_background.xml new file mode 100644 index 0000000000..35507efd2f --- /dev/null +++ b/openmrs-client/src/main/res/drawable/spinner_background.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/openmrs-client/src/main/res/layout/activity_form_admission.xml b/openmrs-client/src/main/res/layout/activity_form_admission.xml new file mode 100644 index 0000000000..0dea5cdd8c --- /dev/null +++ b/openmrs-client/src/main/res/layout/activity_form_admission.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/openmrs-client/src/main/res/layout/fragment_form_admission.xml b/openmrs-client/src/main/res/layout/fragment_form_admission.xml new file mode 100644 index 0000000000..f0b3fc16c4 --- /dev/null +++ b/openmrs-client/src/main/res/layout/fragment_form_admission.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + +