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 @@ + + + + + + + + + + + + + + + + + + + +