Skip to content

Commit

Permalink
Merge pull request #30 from SoftmedTanzania/implement-anc-referrals-list
Browse files Browse the repository at this point in the history
Implemented viewing of pregnancy confirmations clients in ANC Register
  • Loading branch information
cozej4 authored Jan 11, 2022
2 parents 0f981ba + ea69548 commit 9811527
Show file tree
Hide file tree
Showing 13 changed files with 589 additions and 12 deletions.
2 changes: 1 addition & 1 deletion opensrp-chw-hf/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ android {

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation('org.smartregister:opensrp-client-chw-core:1.5.30.5-NACP-SNAPSHOT@aar') {
implementation('org.smartregister:opensrp-client-chw-core:1.5.30.6-NACP-SNAPSHOT@aar') {
// implementation(project(":opensrp-chw-core")) {
transitive = true
exclude group: 'com.android.support', module: 'appcompat-v7'
Expand Down
4 changes: 4 additions & 0 deletions opensrp-chw-hf/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@
android:name="org.smartregister.chw.hf.activity.ReferralTaskViewActivity"
android:screenOrientation="portrait"
android:theme="@style/HFTheme.NoActionBar" />
<activity
android:name="org.smartregister.chw.hf.activity.PregnancyConfirmationViewActivity"
android:screenOrientation="portrait"
android:theme="@style/HFTheme.NoActionBar" />
<activity
android:name="org.smartregister.chw.hf.activity.CommunityFollowupFeedbackViewActivity"
android:screenOrientation="portrait"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package org.smartregister.chw.hf.activity;

import static org.smartregister.chw.core.utils.CoreConstants.JSON_FORM.isMultiPartForm;

import android.app.Activity;
import android.content.Intent;
import android.widget.Toast;

import androidx.annotation.MenuRes;
import androidx.fragment.app.Fragment;

import com.google.android.material.bottomnavigation.LabelVisibilityMode;
import com.vijay.jsonwizard.constants.JsonFormConstants;
import com.vijay.jsonwizard.domain.Form;

Expand All @@ -27,12 +33,15 @@
import org.smartregister.chw.core.utils.CoreJsonFormUtils;
import org.smartregister.chw.core.utils.FormUtils;
import org.smartregister.chw.hf.R;
import org.smartregister.chw.hf.fragment.AncReferralListRegisterFragment;
import org.smartregister.chw.hf.fragment.AncRegisterFragment;
import org.smartregister.chw.hf.interactor.AncRegisterInteractor;
import org.smartregister.chw.hf.listener.AncBottomNavigationListener;
import org.smartregister.clientandeventmodel.Event;
import org.smartregister.family.util.JsonFormUtils;
import org.smartregister.family.util.Utils;
import org.smartregister.helper.BottomNavigationHelper;
import org.smartregister.listener.BottomNavigationListener;
import org.smartregister.repository.AllSharedPreferences;
import org.smartregister.view.fragment.BaseRegisterFragment;

Expand All @@ -41,8 +50,6 @@

import timber.log.Timber;

import static org.smartregister.chw.core.utils.CoreConstants.JSON_FORM.isMultiPartForm;

public class AncRegisterActivity extends CoreAncRegisterActivity {

public static void startAncRegistrationActivity(Activity activity, String memberBaseEntityID, String phoneNumber, String formName,
Expand All @@ -62,7 +69,6 @@ public static void startAncRegistrationActivity(Activity activity, String member

@Override
public void startFormActivity(JSONObject jsonForm) {

try {
JSONObject stepOne = jsonForm.getJSONObject(JsonFormUtils.STEP1);
JSONArray jsonArray = stepOne.getJSONArray(JsonFormUtils.FIELDS);
Expand Down Expand Up @@ -105,6 +111,12 @@ public void startFormActivity(JSONObject jsonForm) {
}
}

@Override
protected Fragment[] getOtherFragments() {
return new AncReferralListRegisterFragment[]{
new AncReferralListRegisterFragment()};
}

public static String getFormTable() {
if (form_name != null && (form_name.equals(CoreConstants.JSON_FORM.getAncRegistration()) || form_name.equals(org.smartregister.chw.hf.utils.Constants.JsonForm.getAncPregnancyConfirmationForm()))) {
return CoreConstants.TABLE_NAME.ANC_MEMBER;
Expand All @@ -117,7 +129,32 @@ protected void registerBottomNavigation() {
super.registerBottomNavigation();
bottomNavigationHelper = new BottomNavigationHelper();
bottomNavigationView = findViewById(R.id.bottom_navigation);
FamilyRegisterActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this);

if (bottomNavigationView != null) {
bottomNavigationView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
bottomNavigationView.getMenu().removeItem(org.smartregister.R.id.action_clients);
bottomNavigationView.getMenu().removeItem(org.smartregister.chw.tb.R.id.action_register);
bottomNavigationView.getMenu().removeItem(org.smartregister.R.id.action_search);
bottomNavigationView.getMenu().removeItem(org.smartregister.R.id.action_library);
//
// bottomNavigationView.inflateMenu(getMenuResource());
// bottomNavigationHelper.disableShiftMode(bottomNavigationView);

BottomNavigationListener ancBottomNavigationListener = getBottomNavigation(this);
bottomNavigationView.setOnNavigationItemSelectedListener(ancBottomNavigationListener);

}
}


@Override
public BottomNavigationListener getBottomNavigation(Activity activity) {
return new AncBottomNavigationListener(activity);
}

@MenuRes
public int getMenuResource() {
return R.menu.bottom_nav_anc_menu;
}

@Override
Expand Down Expand Up @@ -168,8 +205,7 @@ protected void onActivityResultExtended(int requestCode, int resultCode, Intent

if (encounter_type.equalsIgnoreCase(getRegisterEventType())) {
if (danger_sign_analysis.equalsIgnoreCase("None") && (upt.equalsIgnoreCase("positive") || uss.equalsIgnoreCase("present_gestation_sac")))
saveFormForPregnancyConfirmation(jsonString,table);

saveFormForPregnancyConfirmation(jsonString, table);
} else if (encounter_type.equalsIgnoreCase(Constants.EVENT_TYPE.PREGNANCY_OUTCOME)) {

presenter().saveForm(jsonString, false, table);
Expand Down Expand Up @@ -200,7 +236,7 @@ public static void saveFormForPregnancyConfirmation(String jsonString, String ta
LocalDate lmpDate = dateTimeFormat.parseLocalDate(eddJson.optString(JsonFormUtils.VALUE)).plusDays(-280);
lmp.put(JsonFormUtils.VALUE, dateTimeFormat.print(lmpDate));
}
processPregnancyConfirmation(form.toString(),table);
processPregnancyConfirmation(form.toString(), table);
} catch (Exception e) {
Timber.e(e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package org.smartregister.chw.hf.activity;

import static android.view.View.GONE;
import static org.smartregister.chw.core.utils.Utils.passToolbarTitle;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.NonNull;

import org.smartregister.chw.core.utils.CoreConstants;
import org.smartregister.chw.hf.R;
import org.smartregister.chw.hf.utils.AllClientsUtils;
import org.smartregister.chw.hf.utils.Constants;
import org.smartregister.commonregistry.CommonPersonObjectClient;
import org.smartregister.domain.Task;
import org.smartregister.opd.utils.OpdDbConstants;
import org.smartregister.view.customcontrols.CustomFontTextView;

public class PregnancyConfirmationViewActivity extends ReferralTaskViewActivity implements View.OnClickListener {

public static void startPregnancyConfirmationViewActivity(Activity activity, CommonPersonObjectClient personObjectClient, Task task, String startingActivity) {
PregnancyConfirmationViewActivity.personObjectClient = personObjectClient;
Intent intent = new Intent(activity, PregnancyConfirmationViewActivity.class);
intent.putExtra(CoreConstants.INTENT_KEY.USERS_TASKS, task);
intent.putExtra(CoreConstants.INTENT_KEY.CHILD_COMMON_PERSON, personObjectClient);
intent.putExtra(CoreConstants.INTENT_KEY.STARTING_ACTIVITY, startingActivity);
passToolbarTitle(activity, intent);
activity.startActivity(intent);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.referrals_tasks_view_layout);
if (getIntent().getExtras() != null) {
extraClientTask();
extraDetails();
setStartingActivity((String) getIntent().getSerializableExtra(CoreConstants.INTENT_KEY.STARTING_ACTIVITY));
inflateToolbar();
setUpViews();
}
}

@Override
protected void onCreation() {
//overridden
}

@Override
protected void onResumption() {
//Overridden
}

public void setUpViews() {
clientName = findViewById(R.id.client_name);
careGiverName = findViewById(R.id.care_giver_name);
childName = findViewById(R.id.child_name);
careGiverPhone = findViewById(R.id.care_giver_phone);
clientReferralProblem = findViewById(R.id.client_referral_problem);
chwDetailsNames = findViewById(R.id.chw_details_names);
referralDate = findViewById(R.id.referral_date);

womanGaLayout = findViewById(R.id.woman_ga_layout);
careGiverLayout = findViewById(R.id.care_giver_name_layout);
childNameLayout = findViewById(R.id.child_name_layout);

womanGa = findViewById(R.id.woman_ga);
CustomFontTextView viewProfile = findViewById(R.id.view_profile);

CustomFontTextView markAskDone = findViewById(R.id.mark_ask_done);
markAskDone.setOnClickListener(this);

if (getStartingActivity().equals(CoreConstants.REGISTERED_ACTIVITIES.REFERRALS_REGISTER_ACTIVITY)) {
viewProfile.setOnClickListener(this);
} else {
viewProfile.setVisibility(View.INVISIBLE);
}
getReferralDetails();

((CustomFontTextView) findViewById(R.id.toolbar_title)).setText(getResources().getString(R.string.return_to_all_anc_women));
((CustomFontTextView) findViewById(R.id.mark_ask_done)).setText(getResources().getString(R.string.pregnancy_confirmation));
findViewById(R.id.view_profile).setVisibility(GONE);
}

public void setStartingActivity(String startingActivity) {
this.startingActivity = startingActivity;
}

public String getBaseEntityId() {
return task.getForEntity();
}

@Override
public void onClick(View view) {
if (view.getId() == R.id.view_profile) {
personObjectClient.getDetails().put(OpdDbConstants.KEY.REGISTER_TYPE, mapTaskFocusToRegisterType());
AllClientsUtils.goToClientProfile(this, personObjectClient);
} else if (view.getId() == R.id.mark_ask_done) {
AncRegisterActivity.startAncRegistrationActivity(PregnancyConfirmationViewActivity.this, getBaseEntityId(), getFamilyMemberContacts(),
Constants.JsonForm.getAncPregnancyConfirmation(), null, getBaseEntityId(), name);
}
}

@NonNull
private String mapTaskFocusToRegisterType() {
switch (task.getFocus()) {
case CoreConstants.TASKS_FOCUS.SICK_CHILD:
return CoreConstants.REGISTER_TYPE.CHILD;
case CoreConstants.TASKS_FOCUS.SUSPECTED_MALARIA:
return CoreConstants.REGISTER_TYPE.MALARIA;
case CoreConstants.TASKS_FOCUS.ANC_DANGER_SIGNS:
return CoreConstants.REGISTER_TYPE.ANC;
case CoreConstants.TASKS_FOCUS.PNC_DANGER_SIGNS:
return CoreConstants.REGISTER_TYPE.PNC;
case CoreConstants.TASKS_FOCUS.FP_SIDE_EFFECTS:
return CoreConstants.REGISTER_TYPE.FAMILY_PLANNING;
default:
return "";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
package org.smartregister.chw.hf.fragment;

import android.database.Cursor;
import android.os.Bundle;
import android.widget.TextView;

import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;

import org.smartregister.chw.core.fragment.CoreAncRegisterFragment;
import org.smartregister.chw.core.utils.CoreConstants;
import org.smartregister.chw.core.utils.CoreReferralUtils;
import org.smartregister.chw.core.utils.Utils;
import org.smartregister.chw.hf.HealthFacilityApplication;
import org.smartregister.chw.hf.R;
import org.smartregister.chw.hf.activity.PregnancyConfirmationViewActivity;
import org.smartregister.chw.hf.model.AncReferralListRegisterRegisterFragmentModel;
import org.smartregister.chw.hf.presenter.HfAncReferralListRegisterFragmentPresenter;
import org.smartregister.chw.hf.provider.HfAncReferralListRegisterProvider;
import org.smartregister.commonregistry.CommonPersonObject;
import org.smartregister.commonregistry.CommonPersonObjectClient;
import org.smartregister.commonregistry.CommonRepository;
import org.smartregister.configurableviews.model.View;
import org.smartregister.cursoradapter.RecyclerViewPaginatedAdapter;
import org.smartregister.cursoradapter.SmartRegisterQueryBuilder;
import org.smartregister.domain.Task;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import timber.log.Timber;

public class AncReferralListRegisterFragment extends CoreAncRegisterFragment {

@Override
public void setupViews(android.view.View view) {
super.setupViews(view);
((TextView) view.findViewById(R.id.txt_title_label)).setText(getString(R.string.action_pregnancy_confirmation_referrals));
view.findViewById(R.id.due_only_layout).setVisibility(android.view.View.GONE);
}

@Override
public void initializeAdapter(Set<View> visibleColumns) {
HfAncReferralListRegisterProvider provider = new HfAncReferralListRegisterProvider(getActivity(), commonRepository(), visibleColumns, registerActionHandler, paginationViewHandler);
clientAdapter = new RecyclerViewPaginatedAdapter(null, provider, context().commonrepository(this.tablename));
clientAdapter.setCurrentlimit(20);
clientsView.setAdapter(clientAdapter);
}

@Override
protected void initializePresenter() {
if (getActivity() == null) {
return;
}
presenter = new HfAncReferralListRegisterFragmentPresenter(this, new AncReferralListRegisterRegisterFragmentModel(), null);
}

@Override
protected void openProfile(CommonPersonObjectClient client) {
PregnancyConfirmationViewActivity.startPregnancyConfirmationViewActivity(getActivity(), client, getTask(Utils.getValue(client.getColumnmaps(), "_id", false)), CoreConstants.REGISTERED_ACTIVITIES.REFERRALS_REGISTER_ACTIVITY);
}

private Task getTask(String taskId) {
return HealthFacilityApplication.getInstance().getTaskRepository().getTaskByIdentifier(taskId);
}

@Override
protected void openHomeVisit(CommonPersonObjectClient client) {
//Not needed on HF
}

@Override
public String getDueCondition() {
return "";
}

private Map<String, String> fetchCareGiverDetails(String careGiverId) {
Map<String, String> details = new HashMap<>();

String query = CoreReferralUtils.mainCareGiverSelect(CoreConstants.TABLE_NAME.FAMILY_MEMBER, careGiverId);
Timber.d("The caregiver query %s", query);
try (Cursor cursor = getCommonRepository(CoreConstants.TABLE_NAME.FAMILY_MEMBER).rawCustomQueryForAdapter(query)) {
if (cursor != null && cursor.moveToFirst()) {
CommonPersonObject personObject = getCommonRepository(CoreConstants.TABLE_NAME.FAMILY_MEMBER).readAllcommonforCursorAdapter(cursor);
details = personObject.getColumnmaps();
//pClient.getColumnmaps().putAll(personObject.getColumnmaps());
}
} catch (Exception e) {
Timber.e(e, "AncRegisterFragment --> fetchCareGiverDetails");
}

return details;
}

private CommonRepository getCommonRepository(String tableName) {
return Utils.context().commonrepository(tableName);
}

private String defaultFilterAndSortQuery() {
SmartRegisterQueryBuilder sqb = new SmartRegisterQueryBuilder(mainSelect);

String query = "";
String customFilter = getFilterString();
try {
sqb.addCondition(customFilter);
query = sqb.orderbyCondition(Sortqueries);
query = sqb.Endquery(sqb.addlimitandOffset(query, clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset()));
} catch (Exception e) {
Timber.e(e);
}

return query;
}

@Override
public Loader<Cursor> onCreateLoader(int id, final Bundle args) {
if (id == LOADER_ID) {
return new CursorLoader(getActivity()) {
@Override
public Cursor loadInBackground() {
// Count query
final String COUNT = "count_execute";
if (args != null && args.getBoolean(COUNT)) {
countExecute();
}
String query = defaultFilterAndSortQuery();
return commonRepository().rawCustomQueryForAdapter(query);
}
};
}
return super.onCreateLoader(id, args);
}
}
Loading

0 comments on commit 9811527

Please sign in to comment.