diff --git a/openmrs-client/src/androidTest/java/org/openmrs/mobile/listeners/watcher/dao/LocationRoomDAOTest.java b/openmrs-client/src/androidTest/java/org/openmrs/mobile/listeners/watcher/dao/LocationRoomDAOTest.java
index a58463d94f..98aac8a8cc 100644
--- a/openmrs-client/src/androidTest/java/org/openmrs/mobile/listeners/watcher/dao/LocationRoomDAOTest.java
+++ b/openmrs-client/src/androidTest/java/org/openmrs/mobile/listeners/watcher/dao/LocationRoomDAOTest.java
@@ -37,8 +37,8 @@ public class LocationRoomDAOTest {
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();
private AppDatabase mDatabase;
- private LocationEntity expectedLocationEntity1 = createDemoLocationEntity(10L, "name", "description", "display");
- private LocationEntity expectedLocationEntity2 = createDemoLocationEntity(20L, "name2", "description2", "display2");
+ private LocationEntity expectedLocationEntity1 = createDemoLocationEntity(10L, "uuid1", "name", "description", "display");
+ private LocationEntity expectedLocationEntity2 = createDemoLocationEntity(20L, "uuid2", "name2", "description2", "display2");
@Before
public void initDb() {
@@ -78,6 +78,16 @@ public void findLocationByName_ShouldFindCorrectLocationByName() {
&& Objects.equals(actualLocationEntity.getDisplay(), "display"));
}
+ @Test
+ public void findLocationByUUID_ShouldFindCorrectLocationByUUID() {
+ mDatabase.locationRoomDAO().saveLocation(expectedLocationEntity1);
+ mDatabase.locationRoomDAO().findLocationByUUID(expectedLocationEntity1.getUuid())
+ .test()
+ .assertValue(actualLocationEntity -> Objects.equals(actualLocationEntity.getName(), "name")
+ && Objects.equals(actualLocationEntity.getDescription(), "description")
+ && Objects.equals(actualLocationEntity.getDisplay(), "display"));
+ }
+
@Test
public void deleteAllLocations_ShouldDeleteAllSavedLoactions() {
mDatabase.locationRoomDAO().saveLocation(expectedLocationEntity1);
@@ -90,11 +100,11 @@ public void deleteAllLocations_ShouldDeleteAllSavedLoactions() {
.assertValue(locationEntities -> Objects.equals(locationEntities.size(), 0));
}
- private LocationEntity createDemoLocationEntity(Long id, String name, String description, String display) {
+ private LocationEntity createDemoLocationEntity(Long id, String uuid, String name, String description, String display) {
LocationEntity entity = new LocationEntity();
entity.setId(id);
entity.setDisplay(display);
- entity.setUuid("uuid");
+ entity.setUuid(uuid);
entity.setName(name);
entity.setDescription(description);
entity.setAddress_1("address 1");
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" />
+
+
+
+
+
(), DashboardContract.View, View.OnClickListener {
@@ -206,7 +207,7 @@ class DashboardFragment : ACBaseFragment(), Dashboa
R.id.registryPatientView -> startNewActivity(AddEditPatientActivity::class.java)
R.id.captureVitalsView -> startNewActivity(FormEntryPatientListActivity::class.java)
R.id.activeVisitsView -> startNewActivity(ActiveVisitsActivity::class.java)
- R.id.dashboardProviderManagementView -> startNewActivity(ProviderManagerDashboardActivity::class.java)
+ R.id.dashboardProviderManagementView -> ToastUtil.error(getString(R.string.failed_to_open_vitals_form));
else -> {
}
}
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionActivity.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionActivity.java
new file mode 100644
index 0000000000..bdfd102bd5
--- /dev/null
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionActivity.java
@@ -0,0 +1,70 @@
+/*
+ * 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.os.Bundle;
+import android.view.Menu;
+
+import androidx.appcompat.app.ActionBar;
+
+import org.openmrs.mobile.R;
+import org.openmrs.mobile.activities.ACBaseActivity;
+import org.openmrs.mobile.utilities.ApplicationConstants;
+
+public class FormAdmissionActivity extends ACBaseActivity {
+
+ Long patientID;
+ String encounterType;
+ String formName;
+
+ public static FormAdmissionFragment newInstance() {
+ return new FormAdmissionFragment();
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_form_admission);
+ ActionBar actionBar = getSupportActionBar();
+
+ if (actionBar != null) {
+ actionBar.setElevation(0);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+ Bundle bundle = getIntent().getExtras();
+ if (bundle != null) {
+ patientID = bundle.getLong(ApplicationConstants.BundleKeys.PATIENT_ID_BUNDLE);
+ encounterType = (String) bundle.get(ApplicationConstants.BundleKeys.ENCOUNTERTYPE);
+ formName = (String) bundle.get(ApplicationConstants.BundleKeys.FORM_NAME);
+ }
+
+ FormAdmissionFragment formAdmissionFragment = (FormAdmissionFragment) getSupportFragmentManager().findFragmentById(R.id.admissionFormContentFrame);
+ if (formAdmissionFragment == null) {
+ formAdmissionFragment = FormAdmissionFragment.newInstance();
+ }
+ if (!formAdmissionFragment.isActive()) {
+ addFragmentToActivity(getSupportFragmentManager(),
+ formAdmissionFragment, R.id.admissionFormContentFrame);
+ }
+
+ new FormAdmissionPresenter(formAdmissionFragment, patientID, encounterType, formName, getApplicationContext());
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ return true;
+ }
+}
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionContract.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionContract.java
new file mode 100644
index 0000000000..4c49c754e8
--- /dev/null
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionContract.java
@@ -0,0 +1,54 @@
+/*
+ * 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 org.openmrs.mobile.activities.BasePresenterContract;
+import org.openmrs.mobile.activities.BaseView;
+import org.openmrs.mobile.models.Location;
+import org.openmrs.mobile.models.Provider;
+import org.openmrs.mobile.models.Resource;
+
+import java.util.List;
+
+public interface FormAdmissionContract {
+
+ interface View extends BaseView {
+
+ void updateProviderAdapter(List providerList);
+
+ void showToast(String error);
+
+ void updateLocationAdapter(List locationList);
+
+ void enableSubmitButton(boolean value);
+
+ void quitFormEntry();
+
+ void updateEncounterRoleList(List encounterRoleList);
+ }
+
+ interface Presenter extends BasePresenterContract {
+
+ void getProviders(FormAdmissionFragment formAdmissionFragment);
+
+ void updateViews(List providerList);
+
+ void getLocation(String url);
+
+ void getEncounterRoles();
+
+ void createEncounter(String providerUUID, String locationUUID, String encounterRoleUUID);
+ }
+}
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..1c909a1f1f
--- /dev/null
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionFragment.java
@@ -0,0 +1,183 @@
+/*
+ * 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.annotation.SuppressLint;
+import android.os.Bundle;
+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.R;
+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.models.Resource;
+import org.openmrs.mobile.utilities.ToastUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+public class FormAdmissionFragment extends ACBaseFragment implements FormAdmissionContract.View {
+
+ private FragmentFormAdmissionBinding formAdmissionBinding;
+
+ private String providerUUID = "";
+ private String locationUUID = "";
+ private String encounterRoleUUID = "";
+
+ 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.getEncounterRoles();
+ 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 (providerUUID.isEmpty() || locationUUID.isEmpty() || encounterRoleUUID.isEmpty())
+ ToastUtil.showShortToast(getContext(), ToastUtil.ToastType.ERROR, getString(R.string.admission_fields_required));
+ else
+ mPresenter.createEncounter(providerUUID, locationUUID, encounterRoleUUID);
+ }
+
+ @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) {
+ String providerDisplay = formAdmissionBinding.admittedBySpinner.getSelectedItem().toString();
+
+ for (int i = 0; i < providerList.size(); i++) {
+ if (providerDisplay.equals(providerList.get(i).getDisplay())) {
+ providerUUID = providerList.get(i).getUuid();
+ }
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+ }
+
+ @Override
+ public void updateLocationAdapter(List locationList) {
+ String[] locations = new String[locationList.size()];
+ for (int i = 0; i < locationList.size(); i++) {
+ locations[i] = locationList.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) {
+ String locationDisplay = formAdmissionBinding.admittedToSpinner.getSelectedItem().toString();
+
+ for (int i = 0; i < locationList.size(); i++) {
+ if (locationDisplay.equals(locationList.get(i).getDisplay())) {
+ locationUUID = locationList.get(i).getUuid();
+ }
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+ }
+
+ @Override
+ public void updateEncounterRoleList(List encounterRoleList) {
+ String[] encounterRole = new String[encounterRoleList.size()];
+ for (int i = 0; i < encounterRoleList.size(); i++) {
+ encounterRole[i] = encounterRoleList.get(i).getDisplay();
+ }
+ ArrayAdapter adapterEncounterRole = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, encounterRole);
+ formAdmissionBinding.encounterRoleSpinner.setAdapter(adapterEncounterRole);
+ formAdmissionBinding.encounterRoleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ String encounterRoleDisplay = formAdmissionBinding.encounterRoleSpinner.getSelectedItem().toString();
+
+ for (int i = 0; i < encounterRoleList.size(); i++) {
+ if (encounterRoleDisplay.equals(encounterRoleList.get(i).getDisplay())) {
+ encounterRoleUUID = encounterRoleList.get(i).getUuid();
+ }
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+ }
+
+ @Override
+ public void showToast(String errorMessage) {
+ ToastUtil.error(errorMessage);
+ }
+
+ @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..826f379575
--- /dev/null
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formadmission/FormAdmissionPresenter.java
@@ -0,0 +1,192 @@
+/*
+ * 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.content.Context;
+
+import org.openmrs.mobile.R;
+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.repository.ProviderRepository;
+import org.openmrs.mobile.dao.PatientDAO;
+import org.openmrs.mobile.listeners.retrofit.DefaultResponseCallbackListener;
+import org.openmrs.mobile.models.EncounterProviderCreate;
+import org.openmrs.mobile.models.Encountercreate;
+import org.openmrs.mobile.models.Location;
+import org.openmrs.mobile.models.Obscreate;
+import org.openmrs.mobile.models.Patient;
+import org.openmrs.mobile.models.Provider;
+import org.openmrs.mobile.models.Resource;
+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 java.util.ArrayList;
+import java.util.List;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+import static org.openmrs.mobile.utilities.FormService.getFormResourceByName;
+
+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;
+ private Context mContext;
+
+ public FormAdmissionPresenter(FormAdmissionContract.View view, Long patientID, String encounterType, String formName, Context context) {
+ 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);
+ this.mContext = context;
+ }
+
+ public FormAdmissionPresenter(FormAdmissionContract.View formAdmissionView, RestApi restApi, Context context) {
+ this.view = formAdmissionView;
+ this.restApi = restApi;
+ this.view.setPresenter(this);
+ this.mContext = context;
+ }
+
+ @Override
+ public void subscribe() {
+ //the function to start with
+ }
+
+ @Override
+ public void getProviders(FormAdmissionFragment fragment) {
+ ProviderRepository providerRepository = new ProviderRepository();
+ providerRepository.getProvidersWithoutStorage(restApi).observe(fragment, this::updateViews);
+ }
+
+ @Override
+ public void updateViews(List providerList) {
+ if (providerList != null && providerList.size() != 0) {
+ view.updateProviderAdapter(providerList);
+ } else {
+ view.showToast(mContext.getResources().getString(R.string.error_occurred));
+ view.enableSubmitButton(false);
+ }
+ }
+
+ @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(mContext.getResources().getString(R.string.error_occurred));
+ view.enableSubmitButton(false);
+ }
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ view.showToast(t.getMessage());
+ view.enableSubmitButton(false);
+ }
+ });
+ } else {
+ view.showToast(mContext.getResources().getString(R.string.offline_error_message));
+ }
+ }
+
+ @Override
+ public void getEncounterRoles() {
+ restApi.getEncounterRoles().enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ if (response.isSuccessful()) {
+ view.updateEncounterRoleList(response.body().getResults());
+ } else {
+ view.enableSubmitButton(false);
+ view.showToast(mContext.getResources().getString(R.string.error_occurred));
+ }
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ view.showToast(t.getMessage());
+ view.enableSubmitButton(false);
+ }
+ });
+ }
+
+ @Override
+ public void createEncounter(String providerUUID, String locationUUID, String encounterRoleUUID) {
+ view.enableSubmitButton(false);
+
+ Encountercreate encountercreate = new Encountercreate();
+ encountercreate.setPatient(mPatient.getUuid());
+ encountercreate.setEncounterType(encounterType);
+ encountercreate.setFormname(formName);
+ encountercreate.setPatientId(patientID);
+ encountercreate.setFormUuid(formUUID);
+ encountercreate.setLocation(locationUUID);
+
+ List observations = new ArrayList<>();
+ encountercreate.setObservations(observations);
+
+ List encounterProviderCreate = new ArrayList<>();
+ encounterProviderCreate.add(new EncounterProviderCreate(providerUUID, encounterRoleUUID));
+ encountercreate.setEncounterProvider(encounterProviderCreate);
+
+ encountercreate.setObslist();
+ encountercreate.save();
+
+ if (!mPatient.isSynced()) {
+ mPatient.addEncounters(encountercreate.getId());
+ new PatientDAO().updatePatient(mPatient.getId(), mPatient);
+ view.showToast(mContext.getResources().getString(R.string.form_data_will_be_synced_later_error_message));
+ view.enableSubmitButton(true);
+ } else {
+ new EncounterService().addEncounter(encountercreate, new DefaultResponseCallbackListener() {
+ @Override
+ public void onResponse() {
+ view.enableSubmitButton(true);
+ ToastUtil.success(mContext.getString(R.string.form_submitted_successfully));
+ }
+
+ @Override
+ public void onErrorResponse(String errorMessage) {
+ ToastUtil.error(errorMessage);
+ view.enableSubmitButton(true);
+ }
+ });
+ view.quitFormEntry();
+ }
+ }
+}
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayActivity.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayActivity.java
index 546f9470c6..69336ee870 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayActivity.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayActivity.java
@@ -195,6 +195,11 @@ public void showToast(){
ToastUtil.error(getString(R.string.form_data_will_be_synced_later_error_message));
}
+ @Override
+ public void showSuccessfulToast() {
+ ToastUtil.success(getString(R.string.form_submitted_successfully));
+ }
+
private int getFragmentNumber(Fragment fragment) {
String fragmentTag = fragment.getTag();
String[] parts = fragmentTag.split(":");
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayContract.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayContract.java
index 9dde42c6af..d6770c4ca5 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayContract.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayContract.java
@@ -28,6 +28,8 @@ interface MainView extends BaseView {
void showToast(String errorMessage);
void showToast();
+
+ void showSuccessfulToast();
}
interface PageView extends BaseView {
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayMainPresenter.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayMainPresenter.java
index 73bce72e35..73cf243600 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayMainPresenter.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/formdisplay/FormDisplayMainPresenter.java
@@ -24,6 +24,7 @@
import org.openmrs.mobile.utilities.ApplicationConstants;
import org.openmrs.mobile.utilities.InputField;
import org.openmrs.mobile.utilities.SelectOneField;
+import org.openmrs.mobile.utilities.ToastUtil;
import java.util.ArrayList;
import java.util.List;
@@ -120,6 +121,7 @@ public void createEncounter() {
new EncounterService().addEncounter(encountercreate, new DefaultResponseCallbackListener() {
@Override
public void onResponse() {
+ mFormDisplayView.showSuccessfulToast();
mFormDisplayView.enableSubmitButton(true);
}
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/java/org/openmrs/mobile/activities/visitdashboard/VisitDashboardFragment.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/visitdashboard/VisitDashboardFragment.java
index a974b7b007..92f9215cd3 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/visitdashboard/VisitDashboardFragment.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/visitdashboard/VisitDashboardFragment.java
@@ -87,7 +87,9 @@ public void updateList(List visitEncounters) {
for (Encounter encounter : visitEncounters) {
String encounterTypeDisplay = encounter.getEncounterType().getDisplay();
+ encounterTypeDisplay=encounterTypeDisplay.split("\\(")[0].trim();
if (displayableEncounterTypesArray.contains(encounterTypeDisplay)) {
+ encounter.getEncounterType().setDisplay(encounterTypeDisplay.split("\\(")[0].trim());
displayableEncounters.add(encounter);
}
}
@@ -126,4 +128,10 @@ public void showErrorToast(String message) {
public void showErrorToast(int messageId) {
ToastUtil.error(getString(messageId));
}
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mPresenter.subscribe();
+ }
}
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/activities/visitdashboard/VisitExpandableListAdapter.java b/openmrs-client/src/main/java/org/openmrs/mobile/activities/visitdashboard/VisitExpandableListAdapter.java
index e34f140db7..b554caf394 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/activities/visitdashboard/VisitExpandableListAdapter.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/activities/visitdashboard/VisitExpandableListAdapter.java
@@ -95,8 +95,11 @@ private List generateChildLayouts() {
layouts.add(convertView);
break;
case EncounterType.DISCHARGE:
+ convertView = openMRSInflater.addSingleStringView(contentLayout, mContext.getString(R.string.discharge_location_in_list, encounter.getLocation().getDisplay()));
+ layouts.add(convertView);
+ break;
case EncounterType.ADMISSION:
- convertView = openMRSInflater.addSingleStringView(contentLayout, mContext.getString(R.string.list_item_encounter_no_notes));
+ convertView = openMRSInflater.addSingleStringView(contentLayout, mContext.getString(R.string.admission_location_in_list, encounter.getLocation().getDisplay()));
layouts.add(convertView);
break;
default:
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/api/EncounterService.java b/openmrs-client/src/main/java/org/openmrs/mobile/api/EncounterService.java
index a2374a2ef6..9af246f7c2 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/api/EncounterService.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/api/EncounterService.java
@@ -158,8 +158,7 @@ private void linkvisit(Long patientid, String formname, Encounter encounter, Enc
encounterList.add(encounter);
visitDAO.saveOrUpdate(visit, patientid)
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(id ->
- ToastUtil.success(getString(R.string.form_data_saved_successfully, formname)));
+ .subscribe();
});
}
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/api/RestApi.java b/openmrs-client/src/main/java/org/openmrs/mobile/api/RestApi.java
index 01159e8a14..5a246b2b2e 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/api/RestApi.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/api/RestApi.java
@@ -27,6 +27,7 @@
import org.openmrs.mobile.models.PatientDto;
import org.openmrs.mobile.models.PatientPhoto;
import org.openmrs.mobile.models.Provider;
+import org.openmrs.mobile.models.Resource;
import org.openmrs.mobile.models.Results;
import org.openmrs.mobile.models.Session;
import org.openmrs.mobile.models.SystemSetting;
@@ -34,6 +35,7 @@
import org.openmrs.mobile.models.Visit;
import org.openmrs.mobile.models.VisitType;
+import java.util.List;
import java.util.Map;
import okhttp3.ResponseBody;
@@ -101,6 +103,9 @@ Call uploadPatientPhoto(@Path("uuid") String uuid,
@GET("encountertype")
Call> getEncounterTypes();
+ @GET("encounterrole")
+ Call> getEncounterRoles();
+
@GET("session")
Call getSession();
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/api/repository/ProviderRepository.java b/openmrs-client/src/main/java/org/openmrs/mobile/api/repository/ProviderRepository.java
index 5c5bfdde0b..0a09a78d62 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/api/repository/ProviderRepository.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/api/repository/ProviderRepository.java
@@ -110,6 +110,42 @@ public void onFailure(@NotNull Call> call, @NotNull Throwable
return providerLiveData;
}
+ public LiveData> getProvidersWithoutStorage(RestApi restApi) {
+
+ final MutableLiveData> providerLiveData = new MutableLiveData<>();
+ if (NetworkUtils.isOnline()) {
+
+ restApi.getProviderList().enqueue(new Callback>() {
+ @Override
+ public void onResponse(@NotNull Call> call, @NotNull Response> response) {
+ if (response.isSuccessful()) {
+ if (!response.body().getResults().isEmpty()) {
+ providerLiveData.setValue(response.body().getResults());
+ } else {
+ providerLiveData.setValue(null);
+ }
+ } else {
+ OpenMRS.getInstance().getOpenMRSLogger().e("Reading providers failed. Response: " + response.errorBody());
+ ToastUtil.error(OpenMRS.getInstance().getString(R.string.unable_to_fetch_providers));
+ providerLiveData.setValue(null);
+ }
+ }
+
+ @Override
+ public void onFailure(@NotNull Call> call, @NotNull Throwable t) {
+ OpenMRS.getInstance().getOpenMRSLogger().e("Reading providers failed.", t);
+ ToastUtil.error(OpenMRS.getInstance().getString(R.string.unable_to_fetch_providers));
+ providerLiveData.setValue(null);
+ }
+ });
+ } else {
+ ToastUtil.error(OpenMRS.getInstance().getString(R.string.device_offline_msg));
+ OpenMRS.getInstance().getOpenMRSLogger().e("Failed to read providers. Device Offline");
+ }
+
+ return providerLiveData;
+ }
+
public void addProvider(RestApi restApi, Provider provider, CustomApiCallback callback) {
if (NetworkUtils.isOnline()) {
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/dao/EncounterDAO.java b/openmrs-client/src/main/java/org/openmrs/mobile/dao/EncounterDAO.java
index 49bc41c6aa..6aa439e528 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/dao/EncounterDAO.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/dao/EncounterDAO.java
@@ -150,12 +150,14 @@ public List findEncountersByVisitID(Long visitID) {
int datetime_CI = cursor.getColumnIndex(EncounterTable.Column.ENCOUNTER_DATETIME);
int encounterType_CI = cursor.getColumnIndex(EncounterTable.Column.ENCOUNTER_TYPE);
int formUuid_CI = cursor.getColumnIndex(EncounterTable.Column.FORM_UUID);
+ int location_CI = cursor.getColumnIndex(EncounterTable.Column.LOCATION_UUID);
Long id = cursor.getLong(id_CI);
String uuid = cursor.getString(uuid_CI);
String display = cursor.getString(display_CI);
Long datetime = cursor.getLong(datetime_CI);
String formUuid = cursor.getString(formUuid_CI);
String typeDisplay = cursor.getString(encounterType_CI);
+ String locationUUID = cursor.getString(location_CI);
Encounter encounter = new Encounter();
encounter.setEncounterType(new EncounterType(typeDisplay));
encounter.setId(id);
@@ -164,6 +166,7 @@ public List findEncountersByVisitID(Long visitID) {
encounter.setDisplay(display);
encounter.setEncounterDatetime(DateUtils.convertTime(datetime, DateUtils.OPEN_MRS_REQUEST_FORMAT));
encounter.setObservations(new ObservationDAO().findObservationByEncounterID(id));
+ encounter.setLocation(new LocationDAO().findLocationByUUID(locationUUID));
encounter.setForm(FormService.getFormByUuid(formUuid));
encounters.add(encounter);
}
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationDAO.java b/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationDAO.java
index 158a89c688..a6f63f5e06 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationDAO.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationDAO.java
@@ -85,6 +85,28 @@ public Location findLocationByName(String name) {
return location;
}
+ public Location findLocationByUUID(String uuid) {
+ if(!StringUtils.notNull(uuid)){
+ return null;
+ }
+ Location location = new Location();
+ String where = String.format("%s = ?", LocationTable.Column.UUID);
+ String[] whereArgs = new String[]{uuid};
+
+ DBOpenHelper helper = OpenMRSDBOpenHelper.getInstance().getDBOpenHelper();
+ final Cursor cursor = helper.getReadableDatabase().query(LocationTable.TABLE_NAME, null, where, whereArgs, null, null, null);
+ if (null != cursor) {
+ try {
+ if (cursor.moveToFirst()) {
+ location = cursorToLocation(cursor);
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ return location;
+ }
+
private Location cursorToLocation(Cursor cursor) {
Location location = new Location();
location.setId(cursor.getLong(cursor.getColumnIndex(LocationTable.Column.ID)));
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationRoomDAO.java b/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationRoomDAO.java
index 4b66db9683..63444d20ca 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationRoomDAO.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/dao/LocationRoomDAO.java
@@ -37,4 +37,7 @@ public interface LocationRoomDAO {
@Query("SELECT * FROM locations WHERE name = :mName")
Single findLocationByName(String mName);
+
+ @Query("SELECT * FROM locations WHERE uuid = :uuid")
+ Single findLocationByUUID(String uuid);
}
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/databases/DBOpenHelper.java b/openmrs-client/src/main/java/org/openmrs/mobile/databases/DBOpenHelper.java
index 9099cd2d9d..f2625ef20a 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/databases/DBOpenHelper.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/databases/DBOpenHelper.java
@@ -44,9 +44,9 @@
import rx.schedulers.Schedulers;
public class DBOpenHelper extends OpenMRSSQLiteOpenHelper {
- private static int DATABASE_VERSION = OpenMRS.getInstance().
- getResources().getInteger(R.integer.dbversion);
private static final String WHERE_ID_CLAUSE = String.format("%s = ?", Table.MasterColumn.ID);
+ private static int DATABASE_VERSION = OpenMRS.getInstance().
+ getResources().getInteger(R.integer.dbversion);
private PatientTable mPatientTable;
private ConceptTable mConceptTable;
private VisitTable mVisitTable;
@@ -64,6 +64,11 @@ public DBOpenHelper(Context context) {
this.mLocationTable = new LocationTable();
}
+ public static Observable createObservableIO(final Callable func) {
+ return Observable.fromCallable(func)
+ .subscribeOn(Schedulers.io());
+ }
+
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
mLogger.d("Database creating...");
@@ -275,6 +280,18 @@ public long insertEncounter(SQLiteDatabase db, Encounter encounter) {
bindString(5, encounter.getEncounterType().getDisplay(), encounterStatement);
bindString(6, encounter.getPatientUUID(), encounterStatement);
bindString(7, encounter.getFormUuid(), encounterStatement);
+
+ if (null == encounter.getLocation()) {
+ bindString(8, "", encounterStatement);
+ } else {
+ bindString(8, encounter.getLocation().getUuid(), encounterStatement);
+ }
+
+ if (0 == encounter.getEncounterProviders().size()) {
+ bindString(9, "", encounterStatement);
+ } else {
+ bindString(9, encounter.getEncounterProviders().get(0).getUuid(), encounterStatement);
+ }
encounterId = encounterStatement.executeInsert();
encounterStatement.clearBindings();
db.setTransactionSuccessful();
@@ -292,6 +309,17 @@ public int updateEncounter(SQLiteDatabase db, long encounterID, Encounter encoun
newValues.put(EncounterTable.Column.DISPLAY, encounter.getDisplay());
newValues.put(EncounterTable.Column.ENCOUNTER_DATETIME, encounter.getEncounterDatetime());
newValues.put(EncounterTable.Column.ENCOUNTER_TYPE, encounter.getEncounterType().getDisplay());
+ if (null == encounter.getLocation()) {
+ newValues.put(EncounterTable.Column.LOCATION_UUID, "");
+ } else {
+ newValues.put(EncounterTable.Column.LOCATION_UUID, encounter.getLocation().getUuid());
+ }
+
+ if (0 == encounter.getEncounterProviders().size()) {
+ newValues.put(EncounterTable.Column.ENCOUNTER_PROVIDER_UUID, "");
+ } else {
+ newValues.put(EncounterTable.Column.ENCOUNTER_PROVIDER_UUID, encounter.getEncounterProviders().get(0).getProvider().getUuid());
+ }
String[] whereArgs = new String[]{String.valueOf(encounterID)};
@@ -377,11 +405,6 @@ public Long insertLocation(SQLiteDatabase db, Location loc) {
return locID;
}
- public static Observable createObservableIO(final Callable func) {
- return Observable.fromCallable(func)
- .subscribeOn(Schedulers.io());
- }
-
private byte[] bitmapToByteArray(Bitmap image) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 0, outputStream);
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/databases/tables/EncounterTable.java b/openmrs-client/src/main/java/org/openmrs/mobile/databases/tables/EncounterTable.java
index 006363504c..85cd7baae3 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/databases/tables/EncounterTable.java
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/databases/tables/EncounterTable.java
@@ -28,7 +28,7 @@ public class EncounterTable extends Table {
*
* @see org.openmrs.mobile.databases.tables.Table#values(int)
*/
- private static final int INSERT_COLUMNS_COUNT = 7;
+ private static final int INSERT_COLUMNS_COUNT = 9;
@Override
public String createTableDefinition() {
@@ -40,7 +40,9 @@ public String createTableDefinition() {
+ Column.ENCOUNTER_DATETIME + Column.Type.DATE_TYPE_NOT_NULL
+ Column.ENCOUNTER_TYPE + Column.Type.DATE_TYPE_WITH_COMMA
+ Column.PATIENT_UUID + Column.Type.TEXT_TYPE + Column.COMMA
- + Column.FORM_UUID + Column.Type.TEXT_TYPE
+ + Column.FORM_UUID + Column.Type.TEXT_TYPE + Column.COMMA
+ + Column.LOCATION_UUID + Column.Type.TEXT_TYPE + Column.COMMA
+ + Column.ENCOUNTER_PROVIDER_UUID + Column.Type.TEXT_TYPE
+ ");";
}
@@ -53,7 +55,9 @@ public String insertIntoTableDefinition() {
+ Column.ENCOUNTER_DATETIME + Column.COMMA
+ Column.ENCOUNTER_TYPE + Column.COMMA
+ Column.PATIENT_UUID + Column.COMMA
- + Column.FORM_UUID + ")"
+ + Column.FORM_UUID + Column.COMMA
+ + Column.LOCATION_UUID + Column.COMMA
+ + Column.ENCOUNTER_PROVIDER_UUID + ")"
+ values(INSERT_COLUMNS_COUNT);
}
@@ -86,6 +90,8 @@ public class Column extends MasterColumn {
public static final String ENCOUNTER_TYPE = "type";
public static final String PATIENT_UUID = "patient_uuid";
public static final String FORM_UUID = "form_uuid";
+ public static final String LOCATION_UUID = "location_uuid";
+ public static final String ENCOUNTER_PROVIDER_UUID = "encounterProviders_uuid";
}
@NotNull
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/models/Encounter.kt b/openmrs-client/src/main/java/org/openmrs/mobile/models/Encounter.kt
index 81aa914380..5659c54e94 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/models/Encounter.kt
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/models/Encounter.kt
@@ -30,7 +30,7 @@ class Encounter : Resource(), Serializable {
@SerializedName("location")
@Expose
- var location: Resource? = null
+ var location: Location? = null
@SerializedName("form")
@Expose
@@ -58,7 +58,7 @@ class Encounter : Resource(), Serializable {
@SerializedName("encounterProviders")
@Expose
- var encounterProviders: List = ArrayList()
+ var encounterProviders: List = ArrayList()
@SerializedName("resourceVersion")
@Expose
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/models/EncounterProvider.kt b/openmrs-client/src/main/java/org/openmrs/mobile/models/EncounterProvider.kt
new file mode 100644
index 0000000000..eacc0af24b
--- /dev/null
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/models/EncounterProvider.kt
@@ -0,0 +1,14 @@
+package org.openmrs.mobile.models
+
+import com.google.gson.annotations.Expose
+import com.google.gson.annotations.SerializedName
+
+class EncounterProvider : Resource() {
+ @SerializedName("provider")
+ @Expose
+ var provider: Resource? = null
+ @SerializedName("encounterRole")
+ @Expose
+ var encounterRole: Resource? = null
+
+}
\ No newline at end of file
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/models/EncounterProviderCreate.kt b/openmrs-client/src/main/java/org/openmrs/mobile/models/EncounterProviderCreate.kt
new file mode 100644
index 0000000000..4e714de1ca
--- /dev/null
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/models/EncounterProviderCreate.kt
@@ -0,0 +1,13 @@
+package org.openmrs.mobile.models
+
+import com.google.gson.annotations.Expose
+import com.google.gson.annotations.SerializedName
+
+class EncounterProviderCreate(
+ @field:Expose
+ @field:SerializedName("provider")
+ var providerUUID: String,
+
+ @field:Expose
+ @field:SerializedName("encounterRole")
+ var encounterRoleUUID: String)
\ No newline at end of file
diff --git a/openmrs-client/src/main/java/org/openmrs/mobile/models/Encountercreate.kt b/openmrs-client/src/main/java/org/openmrs/mobile/models/Encountercreate.kt
index d9e5882751..a1d557b938 100644
--- a/openmrs-client/src/main/java/org/openmrs/mobile/models/Encountercreate.kt
+++ b/openmrs-client/src/main/java/org/openmrs/mobile/models/Encountercreate.kt
@@ -55,6 +55,14 @@ class Encountercreate : Model(), Serializable {
@Column(name = "synced")
private var synced = false
+ @SerializedName("location")
+ @Expose
+ var location: String? = null;
+
+ @SerializedName("encounterProviders")
+ @Expose
+ var encounterProvider: List = ArrayList();
+
@SerializedName("obs")
@Expose
var observations: List = ArrayList()
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..c35283afcf
--- /dev/null
+++ b/openmrs-client/src/main/res/layout/fragment_form_admission.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/openmrs-client/src/main/res/values-hi/strings.xml b/openmrs-client/src/main/res/values-hi/strings.xml
index 2f80c3250c..88a2234ef2 100644
--- a/openmrs-client/src/main/res/values-hi/strings.xml
+++ b/openmrs-client/src/main/res/values-hi/strings.xml
@@ -430,4 +430,14 @@
"जब डिवाइस नेटवर्क से कनेक्ट हो जाता है तो अपडेटेड प्रदाता सर्वर से सिंक हो जाएगा "
ऑनलाइन वापस आने पर प्रदाता को सर्वर से हटा दिया जाएगा
"ऐप से बाहर निकलने के लिए कृपया BACK पर फिर से क्लिक करें "
+
+
+ प्रवेश फार्म
+ An error Occurred, Try Again Later !!!
+ You are currently offline, Try again when connected !!!
+ Please Select Required Field
+ Admission Date :
+ Admitted By :
+ Provider Role :
+ Admitted To :
diff --git a/openmrs-client/src/main/res/values/strings.xml b/openmrs-client/src/main/res/values/strings.xml
index 75e1e7552a..ac52aa4540 100644
--- a/openmrs-client/src/main/res/values/strings.xml
+++ b/openmrs-client/src/main/res/values/strings.xml
@@ -479,4 +479,16 @@
Choose
https://wiki.openmrs.org/display/ISM/OpenMRS+environments
+
+ Admission
+ An error Occurred, Try Again Later !!!
+ You are currently offline, Try again when connected !!!
+ Please Select Required Field
+ Admission Date :
+ Admitted By :
+ Provider Role :
+ Admitted To :
+ Admitted To %1$s
+ Discharged From %1$s
+ Form Submitted Successfully
diff --git a/openmrs-client/src/test/java/org/openmrs/mobile/test/DBOpenHelperTest.java b/openmrs-client/src/test/java/org/openmrs/mobile/test/DBOpenHelperTest.java
index baf3182250..713e8b0279 100644
--- a/openmrs-client/src/test/java/org/openmrs/mobile/test/DBOpenHelperTest.java
+++ b/openmrs-client/src/test/java/org/openmrs/mobile/test/DBOpenHelperTest.java
@@ -36,7 +36,7 @@ public class DBOpenHelperTest {
"CREATE TABLE patients(_id integer primary key autoincrement,synced boolean,display text,uuid text,identifier text,givenName text not null,middleName text,familyName text not null,gender text not null,birthDate data not null,deathDate date,causeOfDeath text,age text,photo blob,address1 text,address2 text,postalCode text,country text,state text,city text,encounters text);",
"CREATE TABLE concepts(_id integer primary key autoincrement,uuid text not null,display text);",
"CREATE TABLE visits(_id integer primary key autoincrement,patient_id integer not null,uuid data not null,visit_type text,visit_place text,start_date data not null,stop_date date);",
- "CREATE TABLE encounters(_id integer primary key autoincrement,visit_id integer,uuid text not null,display text,encounterDatetime data not null,type date,patient_uuid text,form_uuid text);",
+ "CREATE TABLE encounters(_id integer primary key autoincrement,visit_id integer,uuid text not null,display text,encounterDatetime data not null,type date,patient_uuid text,form_uuid text,location_uuid text,encounterProviders_uuid text);",
"CREATE TABLE observations(_id integer primary key autoincrement,encounter_id integer not null,uuid text not null,display text,displayValue text,diagnosisOrder text,diagnosisList text,diagnosisCertainty text,diagnosisNote text,conceptUuid text);",
"CREATE TABLE locations(_id integer primary key autoincrement,uuid text not null,display text,name text,description text,address1 text,address2 text,city text,state text,country text,postalCode text,parentLocationUuid text);"
);
diff --git a/openmrs-client/src/test/java/org/openmrs/mobile/test/presenters/FormAdmissionPresenterTest.java b/openmrs-client/src/test/java/org/openmrs/mobile/test/presenters/FormAdmissionPresenterTest.java
new file mode 100644
index 0000000000..81e0c2e565
--- /dev/null
+++ b/openmrs-client/src/test/java/org/openmrs/mobile/test/presenters/FormAdmissionPresenterTest.java
@@ -0,0 +1,156 @@
+package org.openmrs.mobile.test.presenters;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.Observer;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.openmrs.mobile.activities.formadmission.FormAdmissionContract;
+import org.openmrs.mobile.activities.formadmission.FormAdmissionFragment;
+import org.openmrs.mobile.activities.formadmission.FormAdmissionPresenter;
+import org.openmrs.mobile.api.RestApi;
+import org.openmrs.mobile.application.OpenMRS;
+import org.openmrs.mobile.application.OpenMRSLogger;
+import org.openmrs.mobile.models.Location;
+import org.openmrs.mobile.models.Provider;
+import org.openmrs.mobile.models.Resource;
+import org.openmrs.mobile.test.ACUnitTestBase;
+import org.openmrs.mobile.utilities.NetworkUtils;
+import org.openmrs.mobile.utilities.ToastUtil;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.verify;
+
+@PrepareForTest({NetworkUtils.class,
+ ToastUtil.class,
+ OpenMRS.class,
+ OpenMRSLogger.class})
+public class FormAdmissionPresenterTest extends ACUnitTestBase {
+ @Rule
+ public InstantTaskExecutorRule taskExecutorRule = new InstantTaskExecutorRule();
+ MutableLiveData> providerLiveData = Mockito.mock(MutableLiveData.class);
+ List providerList;
+ @Mock
+ private RestApi restApi;
+ @Mock
+ private FormAdmissionContract.View formAdmissionView;
+ @Mock
+ private Observer> observer;
+ @Mock
+ private OpenMRSLogger openMRSLogger;
+ @Mock
+ private OpenMRS openMRS;
+ @Mock
+ private Context context;
+ @Mock
+ private Resources resources;
+
+
+ private FormAdmissionPresenter formAdmissionPresenter;
+ private FormAdmissionFragment fragment = new FormAdmissionFragment();
+
+ @Before
+ public void setUp() {
+ formAdmissionPresenter = new FormAdmissionPresenter(formAdmissionView, restApi, context);
+ mockStaticMethods();
+ }
+
+ @Test
+ public void shouldGetProviders_AllOK() {
+ Provider providerOne = createProvider(1l, "doctor");
+ Provider providerTwo = createProvider(2l, "nurse");
+ providerList = Arrays.asList(providerOne, providerTwo);
+ providerLiveData.postValue(providerList);
+
+ Mockito.lenient().when(NetworkUtils.isOnline()).thenReturn(true);
+ Mockito.lenient().when(restApi.getProviderList()).thenReturn(mockSuccessCall(providerList));
+
+ formAdmissionPresenter.getProviders(fragment);
+ formAdmissionPresenter.updateViews(providerList);
+
+ verify(restApi).getProviderList();
+ verify(formAdmissionView).updateProviderAdapter(providerList);
+ }
+
+ @Test
+ public void shouldGetProviders_Error() {
+ Mockito.lenient().when(NetworkUtils.isOnline()).thenReturn(true);
+ Mockito.lenient().when(restApi.getProviderList()).thenReturn(mockErrorCall(401));
+
+ formAdmissionPresenter.getProviders(fragment);
+ verify(restApi).getProviderList();
+ }
+
+ @Test
+ public void shouldGetAdmissionLocation_AllOK() {
+ Mockito.lenient().when(NetworkUtils.hasNetwork()).thenReturn(true);
+ Mockito.lenient().when(restApi.getLocations(any(), anyString(), anyString()))
+ .thenReturn(mockSuccessCall(Collections.singletonList(new Location())));
+ formAdmissionPresenter.getLocation("someUrl");
+ verify(formAdmissionView).updateLocationAdapter(any());
+ }
+
+ @Test
+ public void shouldLoadLocations_errorResponse() {
+ Mockito.lenient().when(NetworkUtils.hasNetwork()).thenReturn(true);
+ Mockito.lenient().when(restApi.getLocations(any(), anyString(), anyString()))
+ .thenReturn(mockErrorCall(401));
+
+ Resources res = Mockito.mock(context.getResources().getClass());
+ PowerMockito.when(context.getResources()).thenReturn(res);
+ Mockito.when(res.getString(Mockito.anyInt())).thenReturn("error_message");
+
+ formAdmissionPresenter.getLocation("someUrl");
+ verify(formAdmissionView).showToast(anyString());
+ verify(formAdmissionView).enableSubmitButton(false);
+ }
+
+ @Test
+ public void shouldGetEncounterRoles_AllOK() {
+ Mockito.lenient().when(NetworkUtils.hasNetwork()).thenReturn(true);
+ Mockito.lenient().when(restApi.getEncounterRoles())
+ .thenReturn(mockSuccessCall(Collections.singletonList(new Resource())));
+ formAdmissionPresenter.getEncounterRoles();
+ verify(formAdmissionView).updateEncounterRoleList(any());
+ }
+
+ @Test
+ public void shouldLoadEncounterRoles_errorResponse() {
+ Mockito.lenient().when(NetworkUtils.hasNetwork()).thenReturn(true);
+ Mockito.lenient().when(restApi.getEncounterRoles())
+ .thenReturn(mockErrorCall(401));
+
+ Resources res = Mockito.mock(context.getResources().getClass());
+ PowerMockito.when(context.getResources()).thenReturn(res);
+ Mockito.when(res.getString(Mockito.anyInt())).thenReturn("error_message");
+
+ formAdmissionPresenter.getEncounterRoles();
+ verify(formAdmissionView).showToast(anyString());
+ verify(formAdmissionView).enableSubmitButton(false);
+ }
+
+ private void mockStaticMethods() {
+ PowerMockito.mockStatic(NetworkUtils.class);
+ PowerMockito.mockStatic(OpenMRS.class);
+ PowerMockito.mockStatic(OpenMRSLogger.class);
+ Mockito.lenient().when(OpenMRS.getInstance()).thenReturn(openMRS);
+ PowerMockito.when(openMRS.getOpenMRSLogger()).thenReturn(openMRSLogger);
+ PowerMockito.mockStatic(ToastUtil.class);
+ PowerMockito.when(context.getApplicationContext()).thenReturn(context);
+ PowerMockito.when(context.getResources()).thenReturn(resources);
+ }
+}