diff --git a/opensrp-brac-hnpp/build.gradle b/opensrp-brac-hnpp/build.gradle index 0238803d6..dfae4a5b4 100644 --- a/opensrp-brac-hnpp/build.gradle +++ b/opensrp-brac-hnpp/build.gradle @@ -45,7 +45,7 @@ android { buildConfigField "String[]", "ALLOWED_LOCATION_LEVELS", '{"MOH Jhpiego Facility Name" , "Village"}' buildConfigField "String", 'DEFAULT_LOCATION', '"Village"' buildConfigField "boolean", 'SUPPORT_QR', 'false' - buildConfigField "int", "DATABASE_VERSION", '23' + buildConfigField "int", "DATABASE_VERSION", '25' buildConfigField "int", "DATA_SYNC_DURATION_MINUTES", '10' buildConfigField "long", "MAX_SERVER_TIME_DIFFERENCE", "1800000l" buildConfigField "boolean", "TIME_CHECK", "false" diff --git a/opensrp-brac-hnpp/src/main/AndroidManifest.xml b/opensrp-brac-hnpp/src/main/AndroidManifest.xml index 2de6029cf..1cda19a65 100644 --- a/opensrp-brac-hnpp/src/main/AndroidManifest.xml +++ b/opensrp-brac-hnpp/src/main/AndroidManifest.xml @@ -118,6 +118,22 @@ android:name="org.smartregister.brac.hnpp.activity.HnppAncRegisterActivity" android:screenOrientation="portrait" android:theme="@style/HNPPTheme.NoActionBar" /> + + + + getNavigationItems() { if (navigationOptions.size() == 0) { navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_families, R.mipmap.sidemenu_families_active, R.string.menu_all_families, CoreConstants.DrawerMenu.ALL_FAMILIES, 0)); navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_families, R.mipmap.sidemenu_families_active, R.string.menu_all_member, CoreConstants.DrawerMenu.ALL_MEMBER, 0)); - navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_families, R.mipmap.sidemenu_families_active, R.string.menu_elco_clients, CoreConstants.DrawerMenu.ELCO_CLIENT, 0)); - navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_anc, R.mipmap.sidemenu_anc_active, R.string.menu_anc_clients, CoreConstants.DrawerMenu.ANC, 0)); - navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_pnc, R.mipmap.sidemenu_pnc_active, R.string.menu_pnc_clients, CoreConstants.DrawerMenu.PNC, 0)); - navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_children, R.mipmap.sidemenu_children_active, R.string.menu_child_clients, CoreConstants.DrawerMenu.CHILD_CLIENTS, 0)); + + NavigationOption optionElco = new NavigationOption(R.mipmap.sidemenu_families, R.mipmap.sidemenu_families_active, R.string.menu_elco_clients, CoreConstants.DrawerMenu.ELCO_CLIENT, 0); + optionElco.setNeedToExpand(true); + optionElco.setNavigationSubModel(new NavigationSubModel(R.string.menu_anc_risk_clients,0,CoreConstants.DrawerMenu.ELCO_RISK)); + navigationOptions.add(optionElco); + + NavigationOption option = new NavigationOption(R.mipmap.sidemenu_anc, R.mipmap.sidemenu_anc_active, R.string.menu_anc_clients, CoreConstants.DrawerMenu.ANC, 0); + option.setNeedToExpand(true); + option.setNavigationSubModel(new NavigationSubModel(R.string.menu_anc_risk_clients,0,CoreConstants.DrawerMenu.ANC_RISK)); + navigationOptions.add(option); + + NavigationOption optionPnc = new NavigationOption(R.mipmap.sidemenu_pnc, R.mipmap.sidemenu_pnc_active, R.string.menu_pnc_clients, CoreConstants.DrawerMenu.PNC, 0); + optionPnc.setNeedToExpand(true); + optionPnc.setNavigationSubModel(new NavigationSubModel(R.string.menu_anc_risk_clients,0,CoreConstants.DrawerMenu.PNC_RISK)); + navigationOptions.add(optionPnc); + + + NavigationOption optionChild = new NavigationOption(R.mipmap.sidemenu_children, R.mipmap.sidemenu_children_active, R.string.menu_child_clients, CoreConstants.DrawerMenu.CHILD_CLIENTS, 0); + optionChild.setNeedToExpand(true); + optionChild.setNavigationSubModel(new NavigationSubModel(R.string.menu_anc_risk_clients,0,CoreConstants.DrawerMenu.CHILD_RISK)); + navigationOptions.add(optionChild); + navigationOptions.add(new NavigationOption(R.drawable.ic_forum_un, R.drawable.ic_forum, R.string.menu_forum, CoreConstants.DrawerMenu.FORUM, -1)); navigationOptions.add(new NavigationOption(R.drawable.ic_ss_icon_un, R.drawable.ic_ss_icon, R.string.menu_ss_info, CoreConstants.DrawerMenu.SS_INFO, -1)); diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppBaseAncRegisterPresenter.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppBaseAncRegisterPresenter.java deleted file mode 100644 index eb9014a91..000000000 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppBaseAncRegisterPresenter.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.smartregister.brac.hnpp.presenter; - -import org.smartregister.chw.anc.contract.BaseAncRegisterContract; -import org.smartregister.chw.anc.presenter.BaseAncRegisterPresenter; - -import timber.log.Timber; - - -public class HnppBaseAncRegisterPresenter extends BaseAncRegisterPresenter { - public HnppBaseAncRegisterPresenter(BaseAncRegisterContract.View view, BaseAncRegisterContract.Model model, BaseAncRegisterContract.Interactor interactor) { - super(view, model, interactor); - } - @Override - public void saveForm(String jsonString, boolean isEditMode, String table) { - try { - interactor.saveRegistration(jsonString, isEditMode, this, table); - } catch (Exception e) { - Timber.e(e); - } - } -} diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskAncRegisterFragmentPresenter.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskAncRegisterFragmentPresenter.java new file mode 100644 index 000000000..66df64e54 --- /dev/null +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskAncRegisterFragmentPresenter.java @@ -0,0 +1,18 @@ +package org.smartregister.brac.hnpp.presenter; + +import org.smartregister.brac.hnpp.utils.HnppDBConstants; +import org.smartregister.chw.anc.contract.BaseAncRegisterFragmentContract; +import org.smartregister.chw.anc.util.DBConstants; +import org.smartregister.chw.core.presenter.AncRegisterFragmentPresenter; +import org.smartregister.chw.core.utils.CoreConstants; + +public class HnppRiskAncRegisterFragmentPresenter extends AncRegisterFragmentPresenter { + public HnppRiskAncRegisterFragmentPresenter(BaseAncRegisterFragmentContract.View view, BaseAncRegisterFragmentContract.Model model, String viewConfigurationIdentifier) { + super(view, model, viewConfigurationIdentifier); + } + + @Override + public String getMainCondition() { + return super.getMainCondition()+" AND "+ CoreConstants.TABLE_NAME.FAMILY_MEMBER + ".is_risk = 'true'"; + } +} diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskChildRegisterFragmentPresenter.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskChildRegisterFragmentPresenter.java new file mode 100644 index 000000000..261403a7a --- /dev/null +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskChildRegisterFragmentPresenter.java @@ -0,0 +1,28 @@ +package org.smartregister.brac.hnpp.presenter; + +import org.smartregister.brac.hnpp.utils.ChildDBConstants; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.presenter.CoreChildRegisterFragmentPresenter; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.family.util.DBConstants; + +public class HnppRiskChildRegisterFragmentPresenter extends CoreChildRegisterFragmentPresenter { + + public HnppRiskChildRegisterFragmentPresenter(CoreChildRegisterFragmentContract.View view, CoreChildRegisterFragmentContract.Model model, String viewConfigurationIdentifier) { + super(view, model, viewConfigurationIdentifier); + } + + @Override + public String getMainCondition() { + return String.format(" %s is null AND %s %s", CoreConstants.TABLE_NAME.CHILD+ "." + DBConstants.KEY.DATE_REMOVED,ChildDBConstants.childAgeLimitFilter(CoreConstants.TABLE_NAME.CHILD),ChildDBConstants.riskChildPatient()); + } + + @Override + public String getMainCondition(String tableName) { + return String.format(" %s is null AND %s %s", tableName + "." + DBConstants.KEY.DATE_REMOVED, ChildDBConstants.childAgeLimitFilter(tableName),ChildDBConstants.riskChildPatient()); + } + @Override + public String getDefaultSortQuery() { + return CoreConstants.TABLE_NAME.CHILD+ "." +DBConstants.KEY.LAST_INTERACTED_WITH + " DESC" ; + } +} diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskElcoMemberRegisterFragmentPresenter.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskElcoMemberRegisterFragmentPresenter.java new file mode 100644 index 000000000..eea8eea9c --- /dev/null +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskElcoMemberRegisterFragmentPresenter.java @@ -0,0 +1,59 @@ +package org.smartregister.brac.hnpp.presenter; + +import org.smartregister.brac.hnpp.model.HnppElcoMemberRegisterFragmentModel; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.presenter.CoreChildRegisterFragmentPresenter; +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.configurableviews.model.Field; +import org.smartregister.family.util.DBConstants; + +import java.util.List; + +public class HnppRiskElcoMemberRegisterFragmentPresenter extends CoreChildRegisterFragmentPresenter { + + private HnppElcoMemberRegisterFragmentModel model; + + public HnppRiskElcoMemberRegisterFragmentPresenter(CoreChildRegisterFragmentContract.View view, CoreChildRegisterFragmentContract.Model model, String viewConfigurationIdentifier) { + super(view, model, viewConfigurationIdentifier); + this.model = (HnppElcoMemberRegisterFragmentModel)model; + } + @Override + public void processViewConfigurations() { + super.processViewConfigurations(); + + } + + @Override + public void initializeQueries(String mainCondition) { + String countSelect = model.countSelect(CoreConstants.TABLE_NAME.FAMILY_MEMBER, mainCondition); + String mainSelect = model.mainSelect(null,CoreConstants.TABLE_NAME.FAMILY, CoreConstants.TABLE_NAME.FAMILY_MEMBER, mainCondition); + getView().initializeQueryParams(CoreConstants.TABLE_NAME.FAMILY_MEMBER, countSelect, mainSelect); + getView().initializeAdapter(visibleColumns); + + getView().countExecute(); + + getView().filterandSortInInitializeQueries(); + } + @Override + public void updateSortAndFilter(List filterList, Field sortField) { + String filterText = model.getFilterText(filterList, getView().getString(org.smartregister.R.string.filter)); + String sortText = model.getSortText(sortField); + + getView().updateFilterAndFilterStatus(filterText, sortText); + } + + @Override + public String getMainCondition() { + return String.format(" %s is null AND %s", CoreConstants.TABLE_NAME.FAMILY_MEMBER+"."+DBConstants.KEY.DATE_REMOVED, ChildDBConstants.riskElcoFilterWithTableName()); + } + + @Override + public String getMainCondition(String tableName) { + return String.format(" %s is null AND %s", tableName + "." + DBConstants.KEY.DATE_REMOVED, ChildDBConstants.riskElcoFilter()); + } + @Override + public String getDefaultSortQuery() { + return CoreConstants.TABLE_NAME.FAMILY_MEMBER+"."+DBConstants.KEY.LAST_INTERACTED_WITH + " DESC ";// AND "+ChildDBConstants.childAgeLimitFilter(); + } +} diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskPncRegisterFragmentPresenter.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskPncRegisterFragmentPresenter.java new file mode 100644 index 000000000..a5109d492 --- /dev/null +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/presenter/HnppRiskPncRegisterFragmentPresenter.java @@ -0,0 +1,16 @@ +package org.smartregister.brac.hnpp.presenter; + +import org.smartregister.chw.anc.contract.BaseAncRegisterFragmentContract; +import org.smartregister.chw.core.presenter.AncRegisterFragmentPresenter; +import org.smartregister.chw.core.utils.CoreConstants; + +public class HnppRiskPncRegisterFragmentPresenter extends AncRegisterFragmentPresenter { + public HnppRiskPncRegisterFragmentPresenter(BaseAncRegisterFragmentContract.View view, BaseAncRegisterFragmentContract.Model model, String viewConfigurationIdentifier) { + super(view, model, viewConfigurationIdentifier); + } + + @Override + public String getMainCondition() { + return super.getMainCondition()+" AND "+ CoreConstants.TABLE_NAME.FAMILY_MEMBER + ".is_risk = 'true'"; + } +} diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAllMemberRegisterProvider.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAllMemberRegisterProvider.java index edc001099..978796af1 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAllMemberRegisterProvider.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAllMemberRegisterProvider.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.text.WordUtils; import org.smartregister.brac.hnpp.R; import org.smartregister.brac.hnpp.utils.HnppConstants; +import org.smartregister.brac.hnpp.utils.HnppDBUtils; import org.smartregister.chw.core.holders.RegisterViewHolder; import org.smartregister.chw.core.provider.CoreChildRegisterProvider; import org.smartregister.chw.core.task.UpdateLastAsyncTask; @@ -89,6 +90,12 @@ public void populatePatientColumn(CommonPersonObjectClient pc, SmartRegisterClie viewHolder.profileImage.setImageResource(org.smartregister.family.util.Utils.getMemberProfileImageResourceIDentifier(entityType)); viewHolder.textViewAddressGender.setTextColor(ContextCompat.getColor(context, android.R.color.black)); addButtonClickListeners(client, viewHolder); + String baseEntityId = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + if(HnppDBUtils.isRiskAll(baseEntityId)){ + viewHolder.riskView.setVisibility(View.VISIBLE); + }else{ + viewHolder.riskView.setVisibility(View.GONE); + } } diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAncRegisterProvider.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAncRegisterProvider.java index 85ab3c5c8..b4dc5cd15 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAncRegisterProvider.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppAncRegisterProvider.java @@ -5,6 +5,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; @@ -12,6 +13,7 @@ import org.joda.time.DateTime; import org.joda.time.Years; import org.smartregister.brac.hnpp.utils.HnppConstants; +import org.smartregister.brac.hnpp.utils.HnppDBUtils; import org.smartregister.chw.anc.fragment.BaseAncRegisterFragment; import org.smartregister.chw.anc.provider.AncRegisterProvider; import org.smartregister.chw.anc.util.DBConstants; @@ -39,7 +41,8 @@ public HnppAncRegisterProvider(Context context, CommonRepository commonRepositor } @Override - protected void populatePatientColumn(@NotNull CommonPersonObjectClient pc, SmartRegisterClient client, @NotNull final AncRegisterProvider.RegisterViewHolder viewHolder) { + protected void populatePatientColumn(@NotNull CommonPersonObjectClient pc, SmartRegisterClient client, @NotNull final AncRegisterProvider.RegisterViewHolder viewHolder1) { + HnppAncRegisterViewHolder viewHolder = (HnppAncRegisterViewHolder)viewHolder1; String fname = Utils.getName( Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.FIRST_NAME, true), Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.MIDDLE_NAME, true) @@ -89,11 +92,30 @@ protected void populatePatientColumn(@NotNull CommonPersonObjectClient pc, Smart viewHolder.registerColumns.setOnClickListener(v -> viewHolder.patientColumn.performClick()); viewHolder.dueWrapper.setOnClickListener(v -> viewHolder.dueButton.performClick()); + String baseEntityId = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + if(HnppDBUtils.isAncRisk(baseEntityId)){ + viewHolder.riskView.setVisibility(View.VISIBLE); + }else{ + viewHolder.riskView.setVisibility(View.GONE); + } + if(HnppConstants.isEddImportant(lmpString)){ + viewHolder.eddView.setVisibility(View.VISIBLE); + }else{ + viewHolder.eddView.setVisibility(View.GONE); + } } @Override public AncRegisterProvider.RegisterViewHolder createViewHolder(ViewGroup parent) { View view = inflater.inflate(R.layout.anc_register_list_row, parent, false); - return new AncRegisterProvider.RegisterViewHolder(view); + return new HnppAncRegisterViewHolder(view); + } + public class HnppAncRegisterViewHolder extends AncRegisterProvider.RegisterViewHolder{ + public TextView riskView,eddView; + public HnppAncRegisterViewHolder(View itemView) { + super(itemView); + riskView = itemView.findViewById(R.id.risk_view); + eddView = itemView.findViewById(R.id.edd_view); + } } } diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppChildRegisterProvider.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppChildRegisterProvider.java index 10b8efca8..7d309c619 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppChildRegisterProvider.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppChildRegisterProvider.java @@ -8,6 +8,7 @@ import org.apache.commons.lang3.text.WordUtils; import org.smartregister.brac.hnpp.R; +import org.smartregister.brac.hnpp.utils.HnppDBConstants; import org.smartregister.brac.hnpp.utils.HnppDBUtils; import org.smartregister.brac.hnpp.utils.HnppConstants; import org.smartregister.chw.core.holders.RegisterViewHolder; @@ -98,6 +99,13 @@ public void populatePatientColumn(CommonPersonObjectClient pc, SmartRegisterClie setAddressAndGender(pc, viewHolder); addButtonClickListeners(client, viewHolder); + String baseEntityId = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + + if(HnppDBUtils.childRisk(baseEntityId)){ + viewHolder.riskView.setVisibility(View.VISIBLE); + }else{ + viewHolder.riskView.setVisibility(View.GONE); + } } diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppPncRegisterProvider.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppPncRegisterProvider.java index bf33fcb17..858c56bc5 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppPncRegisterProvider.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/provider/HnppPncRegisterProvider.java @@ -4,14 +4,19 @@ import android.database.Cursor; import android.os.AsyncTask; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.Button; +import android.widget.TextView; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; import org.jeasy.rules.api.Rules; import org.smartregister.brac.hnpp.HnppApplication; import org.smartregister.brac.hnpp.R; import org.smartregister.brac.hnpp.utils.HnppConstants; +import org.smartregister.brac.hnpp.utils.HnppDBUtils; import org.smartregister.chw.anc.AncLibrary; import org.smartregister.chw.anc.domain.Visit; import org.smartregister.chw.anc.util.DBConstants; @@ -45,11 +50,19 @@ public HnppPncRegisterProvider(Context context, CommonRepository commonRepositor } @Override - public void getView(Cursor cursor, SmartRegisterClient client, RegisterViewHolder viewHolder) { - super.getView(cursor, client, viewHolder); + public RegisterViewHolder createViewHolder(ViewGroup parent) { + View view = LayoutInflater.from(context).inflate(R.layout.pnc_register_list_row, parent, false); + return new HnppPncRegisterViewHolder(view); + } + + @Override + public void getView(Cursor cursor, SmartRegisterClient client, RegisterViewHolder viewHolder1) { + super.getView(cursor, client, new HnppPncRegisterViewHolder(viewHolder1.itemView)); + HnppPncRegisterViewHolder viewHolder = (HnppPncRegisterViewHolder) viewHolder1; CommonPersonObjectClient pc = (CommonPersonObjectClient) client; - String patientName = Utils.getValue(pc.getColumnmaps(), "first_name", true); + String baseEntityId = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + String serialNo = org.smartregister.family.util.Utils.getValue(pc.getColumnmaps(), HnppConstants.KEY.SERIAL_NO, true); @@ -65,6 +78,19 @@ public void getView(Cursor cursor, SmartRegisterClient client, RegisterViewHolde viewHolder.dueButton.setVisibility(View.GONE); viewHolder.dueButton.setOnClickListener(null); Utils.startAsyncTask(new UpdateAsyncTask(context, viewHolder, pc), null); + if(HnppDBUtils.isRisk(baseEntityId, HnppConstants.EVENT_TYPE.PNC_REGISTRATION)){ + viewHolder.riskView.setVisibility(View.VISIBLE); + }else{ + viewHolder.riskView.setVisibility(View.GONE); + } + } + public class HnppPncRegisterViewHolder extends PncRegisterProvider.RegisterViewHolder{ + public TextView riskView,eddView; + public HnppPncRegisterViewHolder(View itemView) { + super(itemView); + riskView = itemView.findViewById(R.id.risk_view); + eddView = itemView.findViewById(R.id.edd_view); + } } private void updateDueColumn(Context context, RegisterViewHolder viewHolder, PncVisitAlertRule pncVisitAlertRule) { diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/repository/HnppChwRepository.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/repository/HnppChwRepository.java index a705903a5..2a368a5b3 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/repository/HnppChwRepository.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/repository/HnppChwRepository.java @@ -64,6 +64,7 @@ protected void onCreation(SQLiteDatabase database) { upgradeToVersion20(context,database); upgradeToVersion21(context,database); upgradeToVersion22(context,database); + upgradeToVersion25(context,database); } @@ -116,6 +117,9 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { case 23: upgradeToVersion23(context,db); break; + case 25: + upgradeToVersion25(context,db); + break; default: break; } @@ -160,7 +164,12 @@ private void upgradeToVersion19(Context context, SQLiteDatabase db) { DistrictListRepository.createTable(db); } + private void upgradeToVersion25(Context context, SQLiteDatabase db) { + db.execSQL("ALTER TABLE ec_family_member ADD COLUMN risk_event_type VARCHAR;"); + db.execSQL("ALTER TABLE ec_child ADD COLUMN is_risk VARCHAR;"); + RiskDetailsRepository.createTable(db); + } private void upgradeToVersion18(Context context, SQLiteDatabase db) { db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_EVENT_ID_COL); diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/repository/RiskDetailsRepository.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/repository/RiskDetailsRepository.java new file mode 100644 index 000000000..64cd3ed52 --- /dev/null +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/repository/RiskDetailsRepository.java @@ -0,0 +1,111 @@ +package org.smartregister.brac.hnpp.repository; + +import android.content.ContentValues; +import android.util.Log; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import net.sqlcipher.Cursor; +import net.sqlcipher.database.SQLiteDatabase; + +import org.joda.time.DateTime; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.smartregister.brac.hnpp.location.SSLocations; +import org.smartregister.brac.hnpp.location.SSModel; +import org.smartregister.brac.hnpp.utils.RiskyModel; +import org.smartregister.repository.BaseRepository; +import org.smartregister.repository.LocationRepository; +import org.smartregister.repository.Repository; +import org.smartregister.util.DateTimeTypeConverter; + +import java.util.ArrayList; + +/** + * Created by mahmud on 11/23/18. + */ +public class RiskDetailsRepository extends BaseRepository { + + protected static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") + .registerTypeAdapter(DateTime.class, new DateTimeTypeConverter()).create(); + + protected static final String ID = "_id"; + + protected static final String RISKY_TABLE = "risky_details"; + protected static final String BASE_ENTITY_ID = "base_entity_id"; + protected static final String EVENT_TYPE = "event_type"; + protected static final String RISKY_KEY = "risky_key"; + protected static final String RISKY_VALUE = "risky_value"; + + + protected static final String[] COLUMNS = new String[]{ID, BASE_ENTITY_ID, EVENT_TYPE,RISKY_KEY}; + + private static final String CREATE_LOCATION_TABLE = + "CREATE TABLE " + RISKY_TABLE + " (" + + ID + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," + + BASE_ENTITY_ID + " VARCHAR , " +EVENT_TYPE + " VARCHAR , " + RISKY_VALUE+ " VARCHAR NOT NULL,"+ + RISKY_KEY + " VARCHAR NOT NULL ) "; + + private static final String CREATE_LOCATION_NAME_INDEX = "CREATE INDEX " + + RISKY_TABLE + "_" + BASE_ENTITY_ID + "_ind ON " + RISKY_TABLE + "(" + BASE_ENTITY_ID + ")"; + + + public RiskDetailsRepository(Repository repository) { + super(repository); + } + + protected String getLocationTableName() { + return RISKY_TABLE; + } + + public static void createTable(SQLiteDatabase database) { + database.execSQL(CREATE_LOCATION_TABLE); + database.execSQL(CREATE_LOCATION_NAME_INDEX); + } + public void dropTable(){ + getWritableDatabase().execSQL("delete from "+getLocationTableName()); + } + + public void addOrUpdate(RiskyModel riskyModel) { + ContentValues contentValues = new ContentValues(); + contentValues.put(BASE_ENTITY_ID, riskyModel.baseEntityId); + contentValues.put(RISKY_KEY, riskyModel.riskyKey); + contentValues.put(EVENT_TYPE, riskyModel.eventType); + contentValues.put(RISKY_VALUE, riskyModel.riskyValue); + long inserted = getWritableDatabase().replace(getLocationTableName(), null, contentValues); + + + } + + public ArrayList getRiskyKeyByEntityId(String baseEntityId) { + Cursor cursor = null; + ArrayList locations = new ArrayList<>(); + try { + cursor = getReadableDatabase().rawQuery("SELECT * FROM " + getLocationTableName()+" where base_entity_id = '"+baseEntityId+"", null); + while (cursor.moveToNext()) { + locations.add(readCursor(cursor)); + } + cursor.close(); + } catch (Exception e) { + Log.e(LocationRepository.class.getCanonicalName(), e.getMessage(), e); + } finally { + if (cursor != null) + cursor.close(); + } + return locations; + } + + protected RiskyModel readCursor(Cursor cursor) { + String riskyKey = cursor.getString(cursor.getColumnIndex(RISKY_KEY)); + String eventType = cursor.getString(cursor.getColumnIndex(EVENT_TYPE)); + String baseEntityId = cursor.getString(cursor.getColumnIndex(BASE_ENTITY_ID)); + RiskyModel riskyModel = new RiskyModel(); + riskyModel.baseEntityId = baseEntityId; + riskyModel.eventType = eventType; + riskyModel.riskyKey = riskyKey; + return riskyModel; + } + +} diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/service/VisitLogIntentService.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/service/VisitLogIntentService.java index 690edb069..ab2f7ef2e 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/service/VisitLogIntentService.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/service/VisitLogIntentService.java @@ -21,6 +21,7 @@ import org.smartregister.brac.hnpp.utils.HnppConstants; import org.smartregister.brac.hnpp.utils.HnppDBUtils; import org.smartregister.brac.hnpp.utils.HnppJsonFormUtils; +import org.smartregister.brac.hnpp.utils.RiskyModel; import org.smartregister.brac.hnpp.utils.VisitLog; import org.smartregister.chw.anc.AncLibrary; import org.smartregister.chw.anc.domain.Visit; @@ -182,6 +183,7 @@ else if( HnppConstants.EVENT_TYPE.MEMBER_REFERRAL.equalsIgnoreCase(encounter_typ if(details.containsKey("pregnancy_test_result")&&!StringUtils.isEmpty(details.get("pregnancy_test_result"))){ log.setPregnantStatus(details.get("pregnancy_test_result")); } + updateElcoRisk(base_entity_id,details); } if(ANC1_REGISTRATION.equalsIgnoreCase(encounter_type) || ANC2_REGISTRATION.equalsIgnoreCase(encounter_type) || ANC3_REGISTRATION.equalsIgnoreCase(encounter_type)){ @@ -199,6 +201,7 @@ else if( HnppConstants.EVENT_TYPE.MEMBER_REFERRAL.equalsIgnoreCase(encounter_typ FamilyLibrary.getInstance().context().allSharedPreferences().savePreference(base_entity_id+"_BRAC_ANC",1+""); } } + updateAncHomeVisitRisk(encounter_type,base_entity_id,details); } if(PNC_REGISTRATION.equalsIgnoreCase(encounter_type)|| encounter_type.equalsIgnoreCase(CoreConstants.EventType.PNC_HOME_VISIT)){ @@ -235,11 +238,15 @@ else if( HnppConstants.EVENT_TYPE.MEMBER_REFERRAL.equalsIgnoreCase(encounter_typ } } + updatePncRisk(base_entity_id,details); } if(ANC_REGISTRATION.equalsIgnoreCase(encounter_type)){ FamilyLibrary.getInstance().context().allSharedPreferences().savePreference(base_entity_id+"_BRAC_ANC",0+""); FamilyLibrary.getInstance().context().allSharedPreferences().savePreference(base_entity_id+"_BRAC_PNC",0+""); - + updateAncRegistrationRisk(base_entity_id,details); + } + if(IYCF_PACKAGE.equalsIgnoreCase(encounter_type)){ + updateIYCFRisk(base_entity_id,details); } if(HOME_VISIT_FAMILY.equalsIgnoreCase(encounter_type)){ log.setFamilyId(base_entity_id); @@ -269,6 +276,315 @@ else if( HnppConstants.EVENT_TYPE.MEMBER_REFERRAL.equalsIgnoreCase(encounter_typ } processAncregistration(); } + private void updateAncRegistrationRisk(String baseEntityId,HashMapdetails){ + if(details.containsKey("no_prev_preg") && !StringUtils.isEmpty(details.get("no_prev_preg"))){ + String ancValue = details.get("no_prev_preg"); + if(!TextUtils.isEmpty(ancValue)){ + int nP = Integer.parseInt(ancValue); + if (nP>4){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = ancValue; + riskyModel.riskyKey = "no_prev_preg"; + riskyModel.eventType = ANC_REGISTRATION; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskFamilyMember(baseEntityId,"true",ANC_REGISTRATION); + return; + } + + } + } + if(details.containsKey("height") && !StringUtils.isEmpty(details.get("height"))){ + String hight = details.get("height"); + if(!TextUtils.isEmpty(hight)){ + int h = Integer.parseInt(hight); + if (h<145){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = hight; + riskyModel.riskyKey = "height"; + riskyModel.eventType = ANC_REGISTRATION; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskFamilyMember(baseEntityId,"true",ANC_REGISTRATION); + return; + } + + } + } + + } + private void updateAncHomeVisitRisk(String eventType , String baseEntityId,HashMapdetails){ + if(details.containsKey("blood_pressure_systolic") && !StringUtils.isEmpty(details.get("blood_pressure_systolic"))){ + String bps = details.get("blood_pressure_systolic"); + if(!TextUtils.isEmpty(bps)){ + int nBPS = Integer.parseInt(bps); + if(details.containsKey("blood_pressure_diastolic") && !StringUtils.isEmpty(details.get("blood_pressure_diastolic"))){ + String bpd = details.get("blood_pressure_diastolic"); + if(!TextUtils.isEmpty(bpd)) { + int nBPD = Integer.parseInt(bpd); + if(details.containsKey("has_edema") && !StringUtils.isEmpty(details.get("has_edema"))){ + String edema = details.get("has_edema"); + if(!TextUtils.isEmpty(edema)) { + if(details.containsKey("albumin_test") && !StringUtils.isEmpty(details.get("albumin_test"))){ + String albumin = details.get("albumin_test"); + if(!TextUtils.isEmpty(albumin)) + { + if(edema.equalsIgnoreCase("yes") && (nBPS >=120 || nBPD >= 80) && albumin.equalsIgnoreCase("yes")){ + + HnppDBUtils.updateIsRiskFamilyMember(baseEntityId,"true",eventType); + + RiskyModel riskynBPSModel = new RiskyModel(); + riskynBPSModel.riskyValue = bps; + riskynBPSModel.riskyKey = "blood_pressure_systolic"; + riskynBPSModel.eventType = eventType; + riskynBPSModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskynBPSModel); + RiskyModel riskynBPDModel = new RiskyModel(); + riskynBPDModel.riskyValue = bpd; + riskynBPDModel.riskyKey = "blood_pressure_diastolic"; + riskynBPDModel.eventType = eventType; + riskynBPDModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskynBPDModel); + RiskyModel riskyedemaModel = new RiskyModel(); + riskyedemaModel.riskyValue = edema; + riskyedemaModel.riskyKey = "has_edema"; + riskyedemaModel.eventType = eventType; + riskyedemaModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyedemaModel); + + RiskyModel riskyalbuminModel = new RiskyModel(); + riskyalbuminModel.riskyValue = albumin; + riskyalbuminModel.riskyKey = "albumin"; + riskyalbuminModel.eventType = eventType; + riskyalbuminModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyalbuminModel); + + } + + } + + } + + + } + } + } + } + } + } + + } + private void updatePncRisk(String baseEntityId,HashMapdetails){ + if(details.containsKey("excess_bleeding") && !StringUtils.isEmpty(details.get("excess_bleeding"))){ + String eb = details.get("excess_bleeding"); + if(!TextUtils.isEmpty(eb) && eb.equalsIgnoreCase("yes")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = eb; + riskyModel.riskyKey = "excess_bleeding"; + riskyModel.eventType = PNC_REGISTRATION; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskFamilyMember(baseEntityId,"true",PNC_REGISTRATION); + return; + + + } + } + if(details.containsKey("obsessive_compulsive_disorder") && !StringUtils.isEmpty(details.get("obsessive_compulsive_disorder"))){ + String obs = details.get("obsessive_compulsive_disorder"); + if(!TextUtils.isEmpty(obs) && obs.equalsIgnoreCase("yes")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = obs; + riskyModel.riskyKey = "obsessive_compulsive_disorder"; + riskyModel.eventType = PNC_REGISTRATION; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskFamilyMember(baseEntityId,"true",PNC_REGISTRATION); + return; + + + } + } + + } + + private void updateElcoRisk(String baseEntityId,HashMapdetails){ + if(details.containsKey("complications_known") && !StringUtils.isEmpty(details.get("complications_known"))){ + String pck = details.get("complications_known"); + if(!TextUtils.isEmpty(pck) && pck.equalsIgnoreCase("yes")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = pck; + riskyModel.riskyKey = "complications_known"; + riskyModel.eventType = ELCO; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskFamilyMember(baseEntityId,"true",ELCO); + return; + + + } + } + + } + private void updateIYCFRisk(String baseEntityId,HashMapdetails){ + if(details.containsKey("head_balance") && !StringUtils.isEmpty(details.get("head_balance"))){ + String head_balance = details.get("head_balance"); + if(!TextUtils.isEmpty(head_balance) && head_balance.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = head_balance; + riskyModel.riskyKey = "head_balance"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_sit") && !StringUtils.isEmpty(details.get("can_sit"))){ + String can_sit = details.get("can_sit"); + if(!TextUtils.isEmpty(can_sit) && can_sit.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_sit; + riskyModel.riskyKey = "can_sit"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_sound") && !StringUtils.isEmpty(details.get("can_sound"))){ + String can_sound = details.get("can_sound"); + if(!TextUtils.isEmpty(can_sound) && can_sound.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_sound; + riskyModel.riskyKey = "can_sound"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_crap") && !StringUtils.isEmpty(details.get("can_crap"))){ + String can_crap = details.get("can_crap"); + if(!TextUtils.isEmpty(can_crap) && can_crap.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_crap; + riskyModel.riskyKey = "can_crap"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_sound_baba_maa") && !StringUtils.isEmpty(details.get("can_sound_baba_maa"))){ + String can_sound_baba_maa = details.get("can_sound_baba_maa"); + if(!TextUtils.isEmpty(can_sound_baba_maa) && can_sound_baba_maa.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_sound_baba_maa; + riskyModel.riskyKey = "can_sound_baba_maa"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_catch") && !StringUtils.isEmpty(details.get("can_catch"))){ + String can_catch = details.get("can_catch"); + if(!TextUtils.isEmpty(can_catch) && can_catch.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_catch; + riskyModel.riskyKey = "can_catch"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_make_word") && !StringUtils.isEmpty(details.get("can_make_word"))){ + String can_make_word = details.get("can_make_word"); + if(!TextUtils.isEmpty(can_make_word) && can_make_word.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_make_word; + riskyModel.riskyKey = "can_make_word"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_walk") && !StringUtils.isEmpty(details.get("can_walk"))){ + String can_walk = details.get("can_walk"); + if(!TextUtils.isEmpty(can_walk) && can_walk.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_walk; + riskyModel.riskyKey = "can_walk"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_two_sound") && !StringUtils.isEmpty(details.get("can_two_sound"))){ + String can_two_sound = details.get("can_two_sound"); + if(!TextUtils.isEmpty(can_two_sound) && can_two_sound.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_two_sound; + riskyModel.riskyKey = "can_two_sound"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_one_walk") && !StringUtils.isEmpty(details.get("can_one_walk"))){ + String can_one_walk = details.get("can_one_walk"); + if(!TextUtils.isEmpty(can_one_walk) && can_one_walk.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_one_walk; + riskyModel.riskyKey = "can_one_walk"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_run") && !StringUtils.isEmpty(details.get("can_run"))){ + String can_run = details.get("can_run"); + if(!TextUtils.isEmpty(can_run) && can_run.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_run; + riskyModel.riskyKey = "can_run"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + if(details.containsKey("can_make_sentance") && !StringUtils.isEmpty(details.get("can_make_sentance"))){ + String can_make_sentance = details.get("can_make_sentance"); + if(!TextUtils.isEmpty(can_make_sentance) && can_make_sentance.equalsIgnoreCase("no")){ + RiskyModel riskyModel = new RiskyModel(); + riskyModel.riskyValue = can_make_sentance; + riskyModel.riskyKey = "can_make_sentance"; + riskyModel.eventType = IYCF_PACKAGE; + riskyModel.baseEntityId = baseEntityId; + HnppApplication.getRiskDetailsRepository().addOrUpdate(riskyModel); + HnppDBUtils.updateIsRiskChild(baseEntityId,"true"); + + } + } + + } private boolean isForumEvent(String eventType){ switch (eventType) { case HnppConstants.EVENT_TYPE.FORUM_CHILD: diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppConstants.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppConstants.java index ad15bcf13..01bc7b8f0 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppConstants.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppConstants.java @@ -12,8 +12,10 @@ import com.google.common.collect.ImmutableMap; import org.joda.time.DateTime; +import org.joda.time.Days; import org.joda.time.LocalDate; import org.joda.time.Months; +import org.joda.time.format.DateTimeFormat; import org.json.JSONException; import org.json.JSONObject; import org.smartregister.brac.hnpp.BuildConfig; @@ -27,6 +29,7 @@ import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Locale; @@ -70,6 +73,14 @@ public class OTHER_SERVICE_TYPE{ public static final int TYPE_NCD = 3; public static final int TYPE_IYCF = 4; } + public static boolean isEddImportant(String lmp){ + DateTime lmpDate = DateTimeFormat.forPattern("dd-MM-yyyy").parseDateTime(lmp); + + LocalDate lastMenstrualPeriod = new LocalDate(lmpDate); + LocalDate expectedDeliveryDate = lastMenstrualPeriod.plusDays(280); + int dayDiff = Days.daysBetween(lastMenstrualPeriod, expectedDeliveryDate).getDays(); + return dayDiff <=30; + } public static String getHomeVisitStatus(long lastHomeVisit , String dateCreatedStr){ @@ -239,6 +250,7 @@ public static final class KEY { public static final String HOUSE_HOLD_ID = "house_hold_id"; public static final String HOUSE_HOLD_NAME = "house_hold_name"; public static final String SS_NAME = "ss_name"; + public static final String IS_RISK = "is_risk"; public static final String SERIAL_NO = "serial_no"; public static final String CHILD_MOTHER_NAME_REGISTERED = "mother_name"; public static final String CHILD_MOTHER_NAME = "Mother_Guardian_First_Name_english"; diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppDBUtils.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppDBUtils.java index 5c756068e..577672330 100644 --- a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppDBUtils.java +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/HnppDBUtils.java @@ -54,6 +54,28 @@ public static void updateCoronaFamilyMember(String base_entity_id, String value) } } + public static void updateIsRiskFamilyMember(String base_entity_id, String value, String eventType){ + try{ + SQLiteDatabase database = CoreChwApplication.getInstance().getRepository().getWritableDatabase(); + String sql = "update ec_family_member set is_risk = '"+value+"', risk_event_type ='"+eventType+"' where " + + "base_entity_id = '"+base_entity_id+"' ;"; + database.execSQL(sql); + }catch(Exception e){ + e.printStackTrace(); + + } + } + public static void updateIsRiskChild(String base_entity_id, String value){ + try{ + SQLiteDatabase database = CoreChwApplication.getInstance().getRepository().getWritableDatabase(); + String sql = "update ec_child set is_risk = '"+value+"' where " + + "base_entity_id = '"+base_entity_id+"' ;"; + database.execSQL(sql); + }catch(Exception e){ + e.printStackTrace(); + + } + } public static ArrayList getPreviousForum(){ String query = "select * from ec_visit_log where event_type ='"+HnppConstants.EVENT_TYPE.FORUM_CHILD+"' OR event_type = '"+HnppConstants.EVENT_TYPE.FORUM_ADO+"'" + @@ -131,6 +153,81 @@ public static String getGuid(String baseEntityId){ } return birthWeight; } + public static boolean isRisk(String baseEntityId, String eventType){ + + String query = "select count(*) from ec_family_member where base_entity_id = '"+baseEntityId+"' and is_risk ='true' and risk_event_type ='"+ eventType+"'"; + Cursor cursor = null; + int count=0; + try { + cursor = CoreChwApplication.getInstance().getRepository().getReadableDatabase().rawQuery(query, new String[]{}); + if(cursor !=null && cursor.getCount() >0){ + cursor.moveToFirst(); + count = cursor.getInt(0); + cursor.close(); + } + + return count>0; + } catch (Exception e) { + Timber.e(e); + } + return count>0; + } + public static boolean isRiskAll(String baseEntityId){ + + String query = "select count(*) from ec_family_member where base_entity_id = '"+baseEntityId+"' and is_risk ='true'"; + Cursor cursor = null; + int count=0; + try { + cursor = CoreChwApplication.getInstance().getRepository().getReadableDatabase().rawQuery(query, new String[]{}); + if(cursor !=null && cursor.getCount() >0){ + cursor.moveToFirst(); + count = cursor.getInt(0); + cursor.close(); + } + + return count>0; + } catch (Exception e) { + Timber.e(e); + } + return count>0; + } + public static boolean childRisk(String baseEntityId){ + + String query = "select count(*) from ec_child where base_entity_id = '"+baseEntityId+"' and is_risk ='true'"; + Cursor cursor = null; + int count=0; + try { + cursor = CoreChwApplication.getInstance().getRepository().getReadableDatabase().rawQuery(query, new String[]{}); + if(cursor !=null && cursor.getCount() >0){ + cursor.moveToFirst(); + count = cursor.getInt(0); + cursor.close(); + } + + return count>0; + } catch (Exception e) { + Timber.e(e); + } + return count>0; + } + public static boolean isAncRisk(String baseEntityId){ + String query = "select count(*) from ec_family_member where base_entity_id = '"+baseEntityId+"' and is_risk ='true' and (risk_event_type ='"+ HnppConstants.EVENT_TYPE.ANC_REGISTRATION +"' OR risk_event_type ='"+ HnppConstants.EVENT_TYPE.ANC1_REGISTRATION +"' OR risk_event_type ='"+ HnppConstants.EVENT_TYPE.ANC2_REGISTRATION +"' OR risk_event_type ='"+ HnppConstants.EVENT_TYPE.ANC3_REGISTRATION +"' OR risk_event_type ='"+ HnppConstants.EVENT_TYPE.ANC_PREGNANCY_HISTORY +"' OR risk_event_type ='"+ HnppConstants.EVENT_TYPE.ANC_GENERAL_DISEASE +"')"; + Cursor cursor = null; + int count=0; + try { + cursor = CoreChwApplication.getInstance().getRepository().getReadableDatabase().rawQuery(query, new String[]{}); + if(cursor !=null && cursor.getCount() >0){ + cursor.moveToFirst(); + count = cursor.getInt(0); + cursor.close(); + } + + return count>0; + } catch (Exception e) { + Timber.e(e); + } + return count>0; + } public static int getCoutByFingerPrint(String startTime, String endTime){ String query = "select count(*) from ec_family_member where gu_id IS NOT NULL and gu_id !='test' and strftime('%Y-%m-%d', datetime((last_interacted_with)/1000,'unixepoch') ) BETWEEN '"+startTime+"' AND '"+endTime+"'"; Cursor cursor = null; diff --git a/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/RiskyModel.java b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/RiskyModel.java new file mode 100644 index 000000000..a42804a5f --- /dev/null +++ b/opensrp-brac-hnpp/src/main/java/org/smartregister/brac/hnpp/utils/RiskyModel.java @@ -0,0 +1,8 @@ +package org.smartregister.brac.hnpp.utils; + +public class RiskyModel { + public String baseEntityId; + public String eventType; + public String riskyKey; + public String riskyValue; +} diff --git a/opensrp-brac-hnpp/src/main/res/layout/anc_register_list_row.xml b/opensrp-brac-hnpp/src/main/res/layout/anc_register_list_row.xml index 90c8a57cd..055e82060 100644 --- a/opensrp-brac-hnpp/src/main/res/layout/anc_register_list_row.xml +++ b/opensrp-brac-hnpp/src/main/res/layout/anc_register_list_row.xml @@ -34,19 +34,40 @@ android:layout_marginRight="@dimen/register_list_item_margin" android:layout_marginBottom="@dimen/register_list_top_bottom_margin" android:orientation="vertical"> + + + + + + + - + + + + + + + - খানার তালিকা সক্ষম দম্পতি গর্ভবতী মায়ের তালিকা + ঝুঁকিপূর্ণ ও জরুরী প্রসূতি মায়ের তালিকা শিশু তালিকা সব সদস্য তালিকা @@ -88,7 +89,7 @@ মায়ের নাম : %s বয়স : %s খানা প্রধানের নাম : %s - শিশু ক্লায়েন্ট + শিশু তালিকা এডিট ৫ বছরের কম বয়সী শিশু লগ আউট : সিঙ্ক diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/adapter/NavigationAdapter.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/adapter/NavigationAdapter.java index 037c58143..629fc58ad 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/adapter/NavigationAdapter.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/adapter/NavigationAdapter.java @@ -9,6 +9,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import org.smartregister.chw.core.R; @@ -24,7 +25,7 @@ public class NavigationAdapter extends RecyclerView.Adapter navigationOptionList; private String selectedView = CoreConstants.DrawerMenu.ALL_FAMILIES; - private View.OnClickListener onClickListener; + private NavigationListener onClickListener; private Context context; private Map registeredActivities; @@ -83,6 +84,36 @@ public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.tvName.setTextColor(Color.WHITE); holder.ivIcon.setImageResource(model.getResourceID()); } + if(model.isNeedToExpand()){ + holder.expandIcon.setVisibility(View.VISIBLE); + holder.sTvName.setText(model.getNavigationSubModel().getSubTitle()); + holder.sTvCount.setText(model.getNavigationSubModel().getSubCount()+""); + boolean expanded = model.isExpanded(); + + holder.subLayout.setVisibility(expanded ? View.VISIBLE : View.GONE); + holder.expandIcon.setImageResource(expanded? R.drawable.ic_less : R.drawable.ic_more); + holder.expandIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean expanded = model.isExpanded(); + model.setExpanded(!expanded); + notifyItemChanged(holder.getAdapterPosition()); + + } + }); + holder.subLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onClickListener.onClickSubMenu(model.getNavigationSubModel().getType()); + } + }); + + }else{ + holder.expandIcon.setVisibility(View.INVISIBLE); + holder.subLayout.setVisibility(View.GONE); + } + + } @Override @@ -95,22 +126,25 @@ public Map getRegisteredActivities() { } public class MyViewHolder extends RecyclerView.ViewHolder { - public TextView tvName, tvCount; - public ImageView ivIcon; + public TextView tvName, tvCount,sTvName, sTvCount; + public RelativeLayout subLayout; + public ImageView ivIcon,expandIcon; private View myView; private MyViewHolder(View view) { super(view); + subLayout = view.findViewById(R.id.sub_item_panel); tvName = view.findViewById(R.id.tvName); tvCount = view.findViewById(R.id.tvCount); ivIcon = view.findViewById(R.id.ivIcon); - + expandIcon = view.findViewById(R.id.expandBtn); + sTvName = view.findViewById(R.id.stvName); + sTvCount = view.findViewById(R.id.stvCount); + myView = view; if (onClickListener != null) { - view.setOnClickListener(onClickListener); + myView.setOnClickListener(onClickListener); } - - myView = view; } public View getView() { diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/holders/RegisterViewHolder.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/holders/RegisterViewHolder.java index 2dd35753d..21fbfde7e 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/holders/RegisterViewHolder.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/holders/RegisterViewHolder.java @@ -19,6 +19,7 @@ public class RegisterViewHolder extends RecyclerView.ViewHolder { public ImageView goToProfileImage; public ImageView profileImage; public View goToProfileLayout; + public TextView riskView; public RegisterViewHolder(View itemView) { super(itemView); @@ -33,5 +34,6 @@ public RegisterViewHolder(View itemView) { profileImage = itemView.findViewById(R.id.profile_img); profileImage.setVisibility(View.GONE); childColumn = itemView.findViewById(R.id.child_column); + riskView = itemView.findViewById(R.id.risk_view); } } diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/interactor/NavigationInteractor.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/interactor/NavigationInteractor.java index 6f44597cb..b0679e164 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/interactor/NavigationInteractor.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/interactor/NavigationInteractor.java @@ -61,19 +61,32 @@ private int getCount(String tableName) { int count; Cursor cursor = null; String mainCondition; - if(tableName.equalsIgnoreCase("test")){ - tableName = "ec_family_member"; - mainCondition = String.format(" where %s is null AND %s", DBConstants.KEY.DATE_REMOVED, ChildDBConstants.elcoFilterWithTableName()); + if(tableName.equalsIgnoreCase("test") || tableName.equalsIgnoreCase("elco_risk")){ + + if(tableName.equalsIgnoreCase("elco_risk")){ + mainCondition = String.format(" where %s is null AND %s", DBConstants.KEY.DATE_REMOVED, ChildDBConstants.riskElcoFilterWithTableName()); + + }else{ + mainCondition = String.format(" where %s is null AND %s", DBConstants.KEY.DATE_REMOVED, ChildDBConstants.elcoFilterWithTableName()); + } + tableName = "ec_family_member"; } - else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.CHILD)) { - mainCondition = String.format(" where %s is null AND %s", DBConstants.KEY.DATE_REMOVED, ChildDBConstants.childAgeLimitFilter()); + else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.CHILD) || tableName.equalsIgnoreCase("child_risk")) { + if(tableName.equalsIgnoreCase("child_risk")){ + mainCondition = String.format(" where %s is null AND %s", DBConstants.KEY.DATE_REMOVED, ChildDBConstants.riskChildAgeLimitFilter()); + + }else{ + mainCondition = String.format(" where %s is null AND %s", DBConstants.KEY.DATE_REMOVED, ChildDBConstants.childAgeLimitFilter()); + } + tableName = CoreConstants.TABLE_NAME.CHILD; + }else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.FAMILY_MEMBER)) { mainCondition = String.format(" where %s is null", DBConstants.KEY.DATE_REMOVED); } else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.FAMILY)) { mainCondition = String.format(" where %s is null ", DBConstants.KEY.DATE_REMOVED); - } else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.ANC_MEMBER)) { + } else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.ANC_MEMBER) || tableName.equalsIgnoreCase("anc_risk")) { mainCondition = MessageFormat.format(" inner join {0} ", CoreConstants.TABLE_NAME.FAMILY_MEMBER) + MessageFormat.format(" on {0}.{1} = {2}.{3} ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, DBConstants.KEY.BASE_ENTITY_ID, CoreConstants.TABLE_NAME.ANC_MEMBER, DBConstants.KEY.BASE_ENTITY_ID) + @@ -86,10 +99,14 @@ else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.FAMILY)) { MessageFormat.format(" where {0}.{1} is null ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, DBConstants.KEY.DATE_REMOVED) + MessageFormat.format(" and {0}.{1} is 0 ", CoreConstants.TABLE_NAME.ANC_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.IS_CLOSED); // mainCondition = mainCondition+" AND ec_anc_register.base_entity_id NOT IN (SELECT ec_pregnancy_outcome.base_entity_id from ec_pregnancy_outcome where ec_pregnancy_outcome.is_closed = '0')"; + if(tableName.equalsIgnoreCase("anc_risk")){ + tableName = CoreConstants.TABLE_NAME.ANC_MEMBER; + mainCondition = mainCondition + " "+ChildDBConstants.riskAncPatient(); + } } else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.TASK)) { mainCondition = MessageFormat.format(" where {0}.{1} is \''READY'\' AND {0}.{2} is \''Referral'\' ", CoreConstants.TABLE_NAME.CHILD_REFERRAL, ChwDBConstants.TASK_STATUS, ChwDBConstants.TASK_CODE); - } else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.ANC_PREGNANCY_OUTCOME)) { + } else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.ANC_PREGNANCY_OUTCOME) || tableName.equalsIgnoreCase("pnc_risk")) { StringBuilder build = new StringBuilder(); build.append(MessageFormat.format(" inner join {0} ", CoreConstants.TABLE_NAME.FAMILY_MEMBER)); build.append(MessageFormat.format(" on {0}.{1} = {2}.{3} ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, DBConstants.KEY.BASE_ENTITY_ID, @@ -104,6 +121,11 @@ else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.FAMILY)) { build.append(MessageFormat.format(" and {0}.{1} is null ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, DBConstants.KEY.DATE_REMOVED)); mainCondition = build.toString(); + if(tableName.equalsIgnoreCase("pnc_risk")){ + tableName = CoreConstants.TABLE_NAME.ANC_PREGNANCY_OUTCOME; + mainCondition = mainCondition + " "+ChildDBConstants.riskAncPatient(); + Log.v("NAVIGATION_QUERY","query pnc_risk:"+mainCondition); + } } else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.MALARIA_CONFIRMATION)) { StringBuilder stb = new StringBuilder(); @@ -127,7 +149,7 @@ else if (tableName.equalsIgnoreCase(CoreConstants.TABLE_NAME.FAMILY)) { SmartRegisterQueryBuilder sqb = new SmartRegisterQueryBuilder(); String query = MessageFormat.format("select count(*) from {0} {1}", tableName, mainCondition); query = sqb.Endquery(query); - Log.v("DB_UPGRADE","2%s"+query); + Log.v("NAVIGATION_QUERY","final:"+query); cursor = commonRepository(tableName).rawCustomQueryForAdapter(query); count = cursor != null && cursor.moveToFirst() ? cursor.getInt(0) : 0; diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/listener/NavigationListener.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/listener/NavigationListener.java index 964056ffb..2dfe33e5d 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/listener/NavigationListener.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/listener/NavigationListener.java @@ -9,7 +9,7 @@ import org.smartregister.chw.core.adapter.NavigationAdapter; import org.smartregister.chw.core.utils.CoreConstants; -public class NavigationListener implements View.OnClickListener { +public class NavigationListener implements View.OnClickListener,NavigationSubMenu { private Activity activity; private NavigationAdapter navigationAdapter; @@ -20,6 +20,11 @@ public void setAdapter(NavigationAdapter adapter,Activity activity){ this.activity = activity; } + @Override + public void onClickSubMenu(String v) { + + } + @Override public void onClick(View v) { if (v.getTag() instanceof String) { diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/listener/NavigationSubMenu.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/listener/NavigationSubMenu.java new file mode 100644 index 000000000..d421a6000 --- /dev/null +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/listener/NavigationSubMenu.java @@ -0,0 +1,7 @@ +package org.smartregister.chw.core.listener; + +import android.view.View; + +public interface NavigationSubMenu { + void onClickSubMenu(String type); +} diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/model/NavigationOption.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/model/NavigationOption.java index ea302701c..7e076e89b 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/model/NavigationOption.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/model/NavigationOption.java @@ -7,6 +7,9 @@ public class NavigationOption { private int TitleID; private String MenuTitle; private long RegisterCount; + private boolean expanded; + private boolean isNeedToExpand = false; + private NavigationSubModel navigationSubModel; public NavigationOption(int resourceID, int resourceActiveID, int titleID, String menuTitle, long registerCount) { ResourceID = resourceID; @@ -16,6 +19,30 @@ public NavigationOption(int resourceID, int resourceActiveID, int titleID, Strin RegisterCount = registerCount; } + public void setNavigationSubModel(NavigationSubModel navigationSubModel) { + this.navigationSubModel = navigationSubModel; + } + + public NavigationSubModel getNavigationSubModel() { + return navigationSubModel; + } + + public void setExpanded(boolean expanded) { + this.expanded = expanded; + } + + public boolean isExpanded() { + return expanded; + } + + public void setNeedToExpand(boolean needToExpand) { + isNeedToExpand = needToExpand; + } + + public boolean isNeedToExpand() { + return isNeedToExpand; + } + public int getResourceID() { return ResourceID; } diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/model/NavigationSubModel.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/model/NavigationSubModel.java new file mode 100644 index 000000000..4c2550cb0 --- /dev/null +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/model/NavigationSubModel.java @@ -0,0 +1,36 @@ +package org.smartregister.chw.core.model; + +public class NavigationSubModel { + private int subTitleId; + private int subCount; + private String type; + public NavigationSubModel(int subTitleId,int subCount,String type){ + this.subTitleId = subTitleId; + this.subCount = subCount; + this.type = type; + } + + public int getSubTitle() { + return subTitleId; + } + + public void setSubTitle(int subTitle) { + this.subTitleId = subTitle; + } + + public int getSubCount() { + return subCount; + } + + public void setSubCount(int subCount) { + this.subCount = subCount; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/presenter/NavigationPresenter.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/presenter/NavigationPresenter.java index 2fcbd80ab..b803d1adb 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/presenter/NavigationPresenter.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/presenter/NavigationPresenter.java @@ -10,6 +10,7 @@ import org.smartregister.chw.core.job.VaccineRecurringServiceJob; import org.smartregister.chw.core.model.NavigationModel; import org.smartregister.chw.core.model.NavigationOption; +import org.smartregister.chw.core.model.NavigationSubModel; import org.smartregister.chw.core.utils.CoreConstants; import org.smartregister.job.ImageUploadServiceJob; import org.smartregister.job.PullUniqueIdsServiceJob; @@ -49,6 +50,10 @@ protected void initialize() { tableMap.put(CoreConstants.DrawerMenu.CHILD_CLIENTS, CoreConstants.TABLE_NAME.CHILD); tableMap.put(CoreConstants.DrawerMenu.ANC_CLIENTS, CoreConstants.TABLE_NAME.ANC_MEMBER); tableMap.put(CoreConstants.DrawerMenu.ANC, CoreConstants.TABLE_NAME.ANC_MEMBER); + tableMap.put(CoreConstants.DrawerMenu.ANC_RISK, "anc_risk"); + tableMap.put(CoreConstants.DrawerMenu.PNC_RISK, "pnc_risk"); + tableMap.put(CoreConstants.DrawerMenu.ELCO_RISK, "elco_risk"); + tableMap.put(CoreConstants.DrawerMenu.CHILD_RISK, "child_risk"); tableMap.put(CoreConstants.DrawerMenu.PNC, CoreConstants.TABLE_NAME.ANC_PREGNANCY_OUTCOME); tableMap.put(CoreConstants.DrawerMenu.REFERRALS, CoreConstants.TABLE_NAME.TASK); tableMap.put(CoreConstants.DrawerMenu.MALARIA, CoreConstants.TABLE_NAME.MALARIA_CONFIRMATION); @@ -73,8 +78,24 @@ public void refreshNavigationCount(final Activity activity) { int x = 0; while (x < mModel.getNavigationItems().size()) { + final int finalX = x; - mInteractor.getRegisterCount(tableMap.get(mModel.getNavigationItems().get(x).getMenuTitle()), new NavigationContract.InteractorCallback() { + NavigationOption option = mModel.getNavigationItems().get(x); + if(option.isNeedToExpand()){ + mInteractor.getRegisterCount(tableMap.get(option.getNavigationSubModel().getType()), new NavigationContract.InteractorCallback() { + @Override + public void onResult(Integer result) { + mModel.getNavigationItems().get(finalX).getNavigationSubModel().setSubCount(result); + getNavigationView().refreshCount(); + } + + @Override + public void onError(Exception e) { + + } + }); + } + mInteractor.getRegisterCount(tableMap.get(option.getMenuTitle()), new NavigationContract.InteractorCallback() { @Override public void onResult(Integer result) { mModel.getNavigationItems().get(finalX).setRegisterCount(result); diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/ChildDBConstants.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/ChildDBConstants.java index c2ccbbd67..a14e50407 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/ChildDBConstants.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/ChildDBConstants.java @@ -12,6 +12,23 @@ public class ChildDBConstants { public static String childAgeLimitFilter() { return childAgeLimitFilter(DBConstants.KEY.DOB, FIVE_YEAR); } + public static String riskChildAgeLimitFilter() { + return childAgeLimitFilter(DBConstants.KEY.DOB, FIVE_YEAR)+" "+riskChildPatient(); + } + public static String riskChildPatient(){ + return " AND ec_child.is_risk = 'true'"; + } + public static String riskAncPatient(){ + return " AND ec_family_member.is_risk = 'true'"; + } + public static String riskElcoFilterWithTableName(){ + String query = " ((( julianday('now') - julianday(ec_family_member.dob))/365) >" + 10 + ")"; + String query2 = " ((( julianday('now') - julianday(ec_family_member.dob))/365) <" + 50 + ")"; + String married = " ec_family_member.marital_status = 'Married' and ec_family_member.gender = 'F'"; + return query+" AND "+query2 +" AND "+married +riskAncPatient()+ " AND "+CoreConstants.TABLE_NAME.FAMILY_MEMBER+"."+DBConstants.KEY.BASE_ENTITY_ID+" " + + " NOT IN (select ec_anc_register.base_entity_id from ec_anc_register where ec_anc_register.is_closed = '0' group by ec_anc_register.base_entity_id)" + + " and ec_family_member.base_entity_id NOT IN (select ec_pregnancy_outcome.base_entity_id from ec_pregnancy_outcome where ec_pregnancy_outcome.is_closed = '0' group by ec_pregnancy_outcome.base_entity_id)"; + } public static String elcoFilterWithTableName(){ String query = " ((( julianday('now') - julianday(ec_family_member.dob))/365) >" + 10 + ")"; String query2 = " ((( julianday('now') - julianday(ec_family_member.dob))/365) <" + 50 + ")"; @@ -28,6 +45,15 @@ public static String elcoFilter(){ " NOT IN (select ec_anc_register.base_entity_id from ec_anc_register where ec_anc_register.is_closed = '0' group by ec_anc_register.base_entity_id) " + " and ec_family_member.base_entity_id NOT IN (select ec_pregnancy_outcome.base_entity_id from ec_pregnancy_outcome where ec_pregnancy_outcome.is_closed = '0' group by ec_pregnancy_outcome.base_entity_id)"; + } + public static String riskElcoFilter(){ + String query = " ((( julianday('now') - julianday(dob))/365) >" + 10 + ")"; + String query2 = " ((( julianday('now') - julianday(dob))/365) <" + 50 + ")"; + String married = " marital_status = 'Married' and gender = 'F'"; + return query+" AND "+query2 +" AND "+married +riskAncPatient()+ " AND "+CoreConstants.TABLE_NAME.FAMILY_MEMBER+"."+DBConstants.KEY.BASE_ENTITY_ID+" " + + " NOT IN (select ec_anc_register.base_entity_id from ec_anc_register where ec_anc_register.is_closed = '0' group by ec_anc_register.base_entity_id) " + + " and ec_family_member.base_entity_id NOT IN (select ec_pregnancy_outcome.base_entity_id from ec_pregnancy_outcome where ec_pregnancy_outcome.is_closed = '0' group by ec_pregnancy_outcome.base_entity_id)"; + } private static String childAgeLimitFilter(String dateColumn, int age) { return " ((( julianday('now') - julianday(" + dateColumn + "))/365) <" + age + ")"; diff --git a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/CoreConstants.java b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/CoreConstants.java index f5c338d15..6bb2bfdc9 100644 --- a/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/CoreConstants.java +++ b/opensrp-chw-core/src/main/java/org/smartregister/chw/core/utils/CoreConstants.java @@ -435,12 +435,16 @@ public static final class DrawerMenu { public static final String ALL_CLIENTS = "All Clients"; public static final String ALL_MEMBER = "All Member"; public static final String ELCO_CLIENT = "Elco Clients"; + public static final String ELCO_RISK = "Elco risk"; public static final String ALL_FAMILIES = "All Families"; public static final String ANC_CLIENTS = "ANC Clients"; public static final String CHILD_CLIENTS = "Child Clients"; public static final String CHILD = "Child"; public static final String HIV_CLIENTS = "Hiv Clients"; public static final String ANC = "ANC"; + public static final String ANC_RISK = "ANC Risk"; + public static final String PNC_RISK = "PNC Risk"; + public static final String CHILD_RISK = "Child Risk"; public static final String LD = "L&D"; public static final String PNC = "PNC"; public static final String FAMILY_PLANNING = "Family Planning"; @@ -625,6 +629,10 @@ public static final class REGISTERED_ACTIVITIES { public static final String ELCO_REGISTER_ACTIVITY = "ELCO_REGISTER_ACTIVITY"; public static final String FAMILY_REGISTER_ACTIVITY = "FAMILY_REGISTER_ACTIVITY"; public static final String ANC_REGISTER_ACTIVITY = "ANC_REGISTER_ACTIVITY"; + public static final String ANC_RISK_REGISTER_ACTIVITY = "ANC_RISK_MEMBER_REGISTER_ACTIVITY"; + public static final String PNC_RISK_REGISTER_ACTIVITY = "PNC_RISK_MEMBER_REGISTER_ACTIVITY"; + public static final String ELCO_RISK_REGISTER_ACTIVITY = "ELCO_RISK_MEMBER_REGISTER_ACTIVITY"; + public static final String CHILD_RISK_REGISTER_ACTIVITY = "CHILD_RISK_MEMBER_REGISTER_ACTIVITY"; public static final String PNC_REGISTER_ACTIVITY = "PNC_REGISTER_ACTIVITY"; public static final String REFERRALS_REGISTER_ACTIVITY = "REFERRALS_REGISTER_ACTIVITY"; public static final String MALARIA_REGISTER_ACTIVITY = "MALARIA_REGISTER_ACTIVITY"; diff --git a/opensrp-chw-core/src/main/res/drawable-hdpi/ic_less.png b/opensrp-chw-core/src/main/res/drawable-hdpi/ic_less.png new file mode 100644 index 000000000..1259e0e15 Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-hdpi/ic_less.png differ diff --git a/opensrp-chw-core/src/main/res/drawable-hdpi/ic_more.png b/opensrp-chw-core/src/main/res/drawable-hdpi/ic_more.png new file mode 100644 index 000000000..2b1f0fb24 Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-hdpi/ic_more.png differ diff --git a/opensrp-chw-core/src/main/res/drawable-mdpi/ic_less.png b/opensrp-chw-core/src/main/res/drawable-mdpi/ic_less.png new file mode 100644 index 000000000..f049a85ca Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-mdpi/ic_less.png differ diff --git a/opensrp-chw-core/src/main/res/drawable-mdpi/ic_more.png b/opensrp-chw-core/src/main/res/drawable-mdpi/ic_more.png new file mode 100644 index 000000000..2b6634998 Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-mdpi/ic_more.png differ diff --git a/opensrp-chw-core/src/main/res/drawable-xhdpi/ic_less.png b/opensrp-chw-core/src/main/res/drawable-xhdpi/ic_less.png new file mode 100644 index 000000000..5c18e944a Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-xhdpi/ic_less.png differ diff --git a/opensrp-chw-core/src/main/res/drawable-xhdpi/ic_more.png b/opensrp-chw-core/src/main/res/drawable-xhdpi/ic_more.png new file mode 100644 index 000000000..ac3382cc2 Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-xhdpi/ic_more.png differ diff --git a/opensrp-chw-core/src/main/res/drawable-xxhdpi/ic_less.png b/opensrp-chw-core/src/main/res/drawable-xxhdpi/ic_less.png new file mode 100644 index 000000000..7ac3b7dc7 Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-xxhdpi/ic_less.png differ diff --git a/opensrp-chw-core/src/main/res/drawable-xxhdpi/ic_more.png b/opensrp-chw-core/src/main/res/drawable-xxhdpi/ic_more.png new file mode 100644 index 000000000..195e53d02 Binary files /dev/null and b/opensrp-chw-core/src/main/res/drawable-xxhdpi/ic_more.png differ diff --git a/opensrp-chw-core/src/main/res/layout/adapter_child_register_list_row.xml b/opensrp-chw-core/src/main/res/layout/adapter_child_register_list_row.xml index 025d96323..aa583df92 100644 --- a/opensrp-chw-core/src/main/res/layout/adapter_child_register_list_row.xml +++ b/opensrp-chw-core/src/main/res/layout/adapter_child_register_list_row.xml @@ -39,19 +39,33 @@ android:layout_toStartOf="@+id/due_button_wrapper" android:layout_toLeftOf="@+id/due_button_wrapper" android:orientation="vertical"> + + + + + + - - + + + - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + \ No newline at end of file