Skip to content

Commit

Permalink
Merge 2e59d99 into b54d9ea
Browse files Browse the repository at this point in the history
  • Loading branch information
ndegwamartin committed Nov 29, 2019
2 parents b54d9ea + 2e59d99 commit 0b20e09
Show file tree
Hide file tree
Showing 20 changed files with 172 additions and 87 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,16 @@ This can be done via the setting below in your implementation's _app.properties_
```
vaccine.relaxation.days=2
```
## Expired vaccines edits
By default, once a vaccine has expired you can not administer it when it is in the Expired state e.g. `Expired: HepB`. You might want alter this behaviour to cater for the
use case where you need to register a child who already has previous vaccines (as shown on their vaccine cards) and entering the earlier dates recorded for those vaccines.
The app can now be used to track the rest of the upcoming vaccines.

This behaviour can be altered via the setting below in your implementation's _app.properties_ file

```
vaccine.expired.entry.allow=true
```

## Gotcha's when using the library

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VERSION_NAME=1.4.29-SNAPSHOT
VERSION_NAME=1.4.30
VERSION_CODE=2
GROUP=org.smartregister
POM_SETTING_DESCRIPTION=OpenSRP Client Immunization
Expand Down
4 changes: 2 additions & 2 deletions opensrp-immunization/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,12 @@ tasks.withType(Test) {
}

dependencies {
implementation('org.smartregister:opensrp-client-core:1.7.35-SNAPSHOT@aar') {
implementation('org.smartregister:opensrp-client-core:1.8.6-SNAPSHOT@aar') {
transitive = true
exclude group: 'com.github.bmelnychuk', module: 'atv'
}

implementation('org.smartregister:opensrp-client-native-form:1.6.51-SNAPSHOT@aar') {
implementation('org.smartregister:opensrp-client-native-form:1.6.63-SNAPSHOT@aar') {
transitive = true
exclude group: 'com.android.support', module: 'recyclerview-v7'
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;

import org.smartregister.Context;
import org.smartregister.commonregistry.CommonFtsObject;
Expand All @@ -13,18 +14,18 @@
import org.smartregister.immunization.repository.VaccineNameRepository;
import org.smartregister.immunization.repository.VaccineRepository;
import org.smartregister.immunization.repository.VaccineTypeRepository;
import org.smartregister.immunization.util.IMConstants;
import org.smartregister.immunization.util.VaccinatorUtils;
import org.smartregister.repository.EventClientRepository;
import org.smartregister.repository.Repository;
import org.smartregister.util.AppProperties;
import org.smartregister.util.AssetHandler;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;

/**
* Created by keyman on 31/07/17.
Expand All @@ -44,6 +45,7 @@ public class ImmunizationLibrary {
private int applicationVersion;
private int databaseVersion;
private Map<String, Object> jsonMap = new HashMap<>();
private static boolean allowExpiredVaccineEntry;

private VaccineRepo.Vaccine[] vaccines = VaccineRepo.Vaccine.values();

Expand All @@ -58,10 +60,14 @@ private ImmunizationLibrary(Context context, Repository repository, CommonFtsObj
this.databaseVersion = databaseVersion;
}

public static void init(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion,
int databaseVersion) {
public static void init(Context context, Repository repository, CommonFtsObject commonFtsObject, int applicationVersion, int databaseVersion) {
if (instance == null) {
instance = new ImmunizationLibrary(context, repository, commonFtsObject, applicationVersion, databaseVersion);
try {
allowExpiredVaccineEntry = instance.getProperties().hasProperty(IMConstants.APP_PROPERTIES.VACCINE_EXPIRED_ENTRY_ALLOW) && instance.getProperties().getPropertyBoolean(IMConstants.APP_PROPERTIES.VACCINE_EXPIRED_ENTRY_ALLOW);
} catch (Exception e) {
Log.e(ImmunizationLibrary.class.getName(), e.getMessage(), e);
}
}
}

Expand Down Expand Up @@ -148,7 +154,7 @@ public Map<String, Object> getVaccinesConfigJsonMap() {
return jsonMap;
}

public Properties getProperties() {
public AppProperties getProperties() {
return ImmunizationLibrary.getInstance().context().getAppProperties();
}

Expand All @@ -166,10 +172,10 @@ public HashMap<String, String> getVaccineGroupings(@NonNull android.content.Cont
List<VaccineGroup> vaccinesJsonMapping = VaccinatorUtils.getSupportedVaccines(context);

if (vaccinesJsonMapping != null && vaccinesJsonMapping.size() > 0) {
for (VaccineGroup vaccineGroup: vaccinesJsonMapping) {
for (VaccineGroup vaccineGroup : vaccinesJsonMapping) {
String groupName = vaccineGroup.name;

for (Vaccine vaccine: vaccineGroup.vaccines) {
for (Vaccine vaccine : vaccineGroup.vaccines) {
String shortVaccineName = vaccine.getName()
.trim()
.replace(" ", "")
Expand All @@ -179,7 +185,7 @@ public HashMap<String, String> getVaccineGroupings(@NonNull android.content.Cont
if (vaccine.getVaccineSeparator() != null && shortVaccineName.contains(vaccine.getVaccineSeparator().trim())) {
String[] individualVaccines = shortVaccineName.split(vaccine.getVaccineSeparator().trim());

for (String individualVaccine: individualVaccines) {
for (String individualVaccine : individualVaccines) {
if (!TextUtils.isEmpty(individualVaccine)) {
vaccineGrouping.put(individualVaccine, groupName);
}
Expand All @@ -195,4 +201,8 @@ public HashMap<String, String> getVaccineGroupings(@NonNull android.content.Cont

return vaccineGrouping;
}

public boolean isAllowExpiredVaccineEntry() {
return allowExpiredVaccineEntry;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,7 @@ public void onClick(View view) {
}
});

Button givenToday = defaultActions.findViewById(R.id.given_today);
final Button givenToday = defaultActions.findViewById(R.id.given_today);
givenToday.setText(String.format(getString(R.string.given_today),
VaccinatorUtils.getTranslatedVaccineName(getActivity(), tag.getName())));
givenToday.setOnClickListener(new Button.OnClickListener() {
Expand All @@ -538,6 +538,7 @@ public void onClick(View view) {
@Override
public void onClick(View view) {
givenEarlier.setVisibility(View.GONE);
givenToday.setVisibility(View.GONE);
earlierDatePicker.setVisibility(View.VISIBLE);
set.setVisibility(View.VISIBLE);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.smartregister.domain.AlertStatus;
import org.smartregister.immunization.ImmunizationLibrary;
import org.smartregister.immunization.R;
import org.smartregister.immunization.db.VaccineRepo;
import org.smartregister.immunization.domain.Vaccine;
Expand Down Expand Up @@ -193,6 +195,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,

final LinearLayout vaccinationNameLayout = dialogView.findViewById(R.id.vaccination_name_layout);

final Button vaccinateToday = dialogView.findViewById(R.id.vaccinate_today);
final Button vaccinateEarlier = dialogView.findViewById(R.id.vaccinate_earlier);

if (tags.size() == 1) {

String vName;
Expand Down Expand Up @@ -252,6 +257,7 @@ public void onClick(View view) {

vaccinationNameLayout.addView(vaccinationName);
}

} else {
for (VaccineWrapper vaccineWrapper : tags) {

Expand Down Expand Up @@ -327,10 +333,7 @@ public void onClick(View v) {
}
}

Button vaccinateToday = dialogView.findViewById(R.id.vaccinate_today);
vaccinateToday.setText(R.string.vaccines_done_today);

Button vaccinateEarlier = dialogView.findViewById(R.id.vaccinate_earlier);
vaccinateEarlier.setText(R.string.vaccines_done_earlier);
}

Expand Down Expand Up @@ -408,7 +411,6 @@ public void onClick(View view) {
}
});

Button vaccinateToday = dialogView.findViewById(R.id.vaccinate_today);
vaccinateToday.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
Expand Down Expand Up @@ -443,12 +445,12 @@ public void onClick(View view) {
}
});

final Button vaccinateEarlier = dialogView.findViewById(R.id.vaccinate_earlier);
vaccinateEarlier.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
vaccinateEarlier.setVisibility(View.GONE);
earlierDatePicker.setVisibility(View.VISIBLE);
vaccinateToday.setVisibility(View.GONE);
set.setVisibility(View.VISIBLE);

DatePickerUtils.themeDatePicker(earlierDatePicker, new char[]{'d', 'm', 'y'});
Expand All @@ -457,6 +459,10 @@ public void onClick(View view) {

updateDateRanges(vaccinateToday, vaccinateEarlier, set, earlierDatePicker);

if (ImmunizationLibrary.getInstance().isAllowExpiredVaccineEntry()) {
vaccinateToday.setVisibility(AlertStatus.expired.value().equals(tags.get(0).getStatus()) ? View.GONE : View.VISIBLE);//Determine whether to show today for expired
}

Button cancel = dialogView.findViewById(R.id.cancel);
cancel.setOnClickListener(new Button.OnClickListener() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.smartregister.domain.AlertStatus;
import org.smartregister.immunization.ImmunizationLibrary;
import org.smartregister.immunization.R;
import org.smartregister.immunization.db.VaccineRepo;
import org.smartregister.immunization.domain.Vaccine;
Expand Down Expand Up @@ -170,6 +172,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
service_date.setText("Service date: " + tags.get(0).getUpdatedVaccineDateAsString() + "");
final LinearLayout vaccinationNameLayout = dialogView.findViewById(R.id.vaccination_name_layout);


final Button vaccinateToday = dialogView.findViewById(R.id.vaccinate_today);
Button vaccinateEarlier = dialogView.findViewById(R.id.vaccinate_earlier);

if (tags.size() == 1) {
View vaccinationName = inflater.inflate(R.layout.vaccination_name_edit_dialog, null);
TextView vaccineView = vaccinationName.findViewById(R.id.vaccine);
Expand All @@ -185,6 +191,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
// select.setVisibility(View.GONE);

vaccinationNameLayout.addView(vaccinationName);

} else {
for (VaccineWrapper vaccineWrapper : tags) {

Expand All @@ -201,11 +208,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
vaccinationNameLayout.addView(vaccinationName);
}

Button vaccinateToday = dialogView.findViewById(R.id.vaccinate_today);
vaccinateToday.setText(vaccinateToday.getText().toString().replace("Vaccination", "Vaccinations"));

Button vaccinateEarlier = dialogView.findViewById(R.id.vaccinate_earlier);
vaccinateEarlier.setText(vaccinateEarlier.getText().toString().replace("Vaccination", "Vaccinations"));
vaccinateToday.setText(R.string.vaccines_done_today);
vaccinateEarlier.setText(R.string.vaccines_done_earlier);
}

if (tags.get(0).getId() != null) {
Expand Down Expand Up @@ -281,7 +285,6 @@ public void onClick(View view) {
}
});

final Button vaccinateToday = dialogView.findViewById(R.id.vaccinate_today);
vaccinateToday.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
Expand Down Expand Up @@ -316,15 +319,14 @@ public void onClick(View view) {
}
});

Button vaccinateEarlier = dialogView.findViewById(R.id.vaccinate_earlier);
vaccinateEarlier.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
if (tags.size() == 1) {
// tags.get(0).setUpdatedVaccineDate(dateTime, true);
listener.onUndoVaccination(tags.get(0), viewGroup);
} else
} else {
for (int i = 0; i < vaccinationNameLayout.getChildCount(); i++) {
View chilView = vaccinationNameLayout.getChildAt(i);
CheckBox selectChild = chilView.findViewById(R.id.select);
Expand All @@ -335,7 +337,8 @@ public void onClick(View view) {
listener.onUndoVaccination(tag, viewGroup);
}
}
// listener.onUndoVaccination(tags,viewGroup);
// listener.onUndoVaccination(tags,viewGroup);
}
}
});

Expand Down Expand Up @@ -363,6 +366,10 @@ public void onClick(View view) {

updateDateRanges(earlierDatePicker, set);

if (ImmunizationLibrary.getInstance().isAllowExpiredVaccineEntry()) {

vaccinateToday.setVisibility(AlertStatus.expired.value().equals(tags.get(0).getStatus()) ? View.GONE : View.VISIBLE);//Determine whether to show today for expired
}

return dialogView;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class IMConstants {

public class APP_PROPERTIES {
public static final String VACCINE_RELAXATION_DAYS = "vaccine.relaxation.days";
public static final String VACCINE_EXPIRED_ENTRY_ALLOW = "vaccine.expired.entry.allow";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public static void accessAssetsAndFillDataBaseForVaccineTypes(Context context, S
vaccineTypeRepository.add(vtObject, db);
}
} catch (JSONException e) {
e.printStackTrace();
Log.e(IMDatabaseUtils.class.getName(), e.getMessage(), e);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.joda.time.DateTime;
import org.smartregister.commonregistry.CommonPersonObjectClient;
import org.smartregister.domain.Alert;
import org.smartregister.immunization.ImmunizationLibrary;
import org.smartregister.immunization.R;
import org.smartregister.immunization.adapter.ServiceCardAdapter;
import org.smartregister.immunization.domain.GroupState;
Expand Down Expand Up @@ -83,7 +84,7 @@ public ServiceGroup(Context context, AttributeSet attrs, int defStyleAttr) {
}


@TargetApi (Build.VERSION_CODES.LOLLIPOP)
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ServiceGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
Expand Down Expand Up @@ -213,6 +214,11 @@ public void onItemClick(AdapterView parent, View v, int position, long id) {
onServiceClickedListener.onClick(ServiceGroup.this, serviceCard.getServiceWrapper());
}
break;
case EXPIRED:
if (onServiceClickedListener != null && ImmunizationLibrary.getInstance().isAllowExpiredVaccineEntry()) {
onServiceClickedListener.onClick(ServiceGroup.this, serviceCard.getServiceWrapper());
}
break;
case DONE_CAN_BE_UNDONE:
onUndoClick(serviceCard);
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.joda.time.DateTime;
import org.smartregister.commonregistry.CommonPersonObjectClient;
import org.smartregister.domain.Alert;
import org.smartregister.immunization.ImmunizationLibrary;
import org.smartregister.immunization.R;
import org.smartregister.immunization.adapter.VaccineCardAdapter;
import org.smartregister.immunization.domain.GroupState;
Expand Down Expand Up @@ -55,6 +56,7 @@ public class VaccineGroup extends LinearLayout implements View.OnClickListener {

private boolean isChildActive = true;
private VaccineCardAdapterLoadingListener vaccineCardAdapterLoadingListener;
private ImmunizationLibrary immunizationLibraryInstance;

public VaccineGroup(Context context) {
super(context);
Expand Down Expand Up @@ -215,6 +217,11 @@ public void onItemClick(AdapterView parent, View v, int position, long id) {
onVaccineClickedListener.onClick(VaccineGroup.this, vaccineCard.getVaccineWrapper());
}
break;
case EXPIRED:
if (onVaccineClickedListener != null && getImmunizationLibraryInstance().isAllowExpiredVaccineEntry()) {
onVaccineClickedListener.onClick(VaccineGroup.this, vaccineCard.getVaccineWrapper());
}
break;
case DONE_CAN_BE_UNDONE:
onUndoClick(vaccineCard);
break;
Expand Down Expand Up @@ -340,6 +347,17 @@ public void setVaccineCardAdapterLoadingListener(VaccineCardAdapterLoadingListen
}
}

public ImmunizationLibrary getImmunizationLibraryInstance() {
if (immunizationLibraryInstance == null) {
immunizationLibraryInstance = ImmunizationLibrary.getInstance();
}
return immunizationLibraryInstance;
}

public void setImmunizationLibraryInstance(ImmunizationLibrary immunizationLibrary) {
this.immunizationLibraryInstance = immunizationLibrary;
}

public interface OnRecordAllClickListener {
void onClick(VaccineGroup vaccineGroup, ArrayList<VaccineWrapper> dueVaccines);
}
Expand Down

0 comments on commit 0b20e09

Please sign in to comment.