Skip to content

Commit

Permalink
Merge branch '1.1.0'
Browse files Browse the repository at this point in the history
# Conflicts:
#	app/src/main/res/values-es/strings.xml
  • Loading branch information
Balcan committed Oct 1, 2018
2 parents ebbeb76 + 895389c commit a725b1e
Show file tree
Hide file tree
Showing 170 changed files with 4,850 additions and 1,535 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ android {
minSdkVersion 19
targetSdkVersion 27
versionCode 33
versionName "1.0.2"
versionName "1.0.3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.dhis2">
Expand Down Expand Up @@ -35,11 +34,8 @@
</intent-filter>
<intent-filter android:autoVerify="true">
<category android:name="android.intent.category.DEFAULT" />

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.BROWSABLE" />

<data
android:host="play.dhis2.org"
android:scheme="https" />
Expand Down Expand Up @@ -97,6 +93,10 @@
android:name="io.fabric.ApiKey"
android:value="a5caa46009119f5e584e4964c30a922095b1075c" />

<activity android:name=".usescases.dataset.dataSetPeriod.DataSetPeriodActivity"></activity>
<activity android:name=".usescases.datasets.datasetDetail.DataSetDetailActivity" />
<activity android:name=".usescases.datasets.datasetInitial.DataSetInitialActivity" />

<receiver android:name=".widgets.DhisCustomLauncher">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
Expand Down
13 changes: 7 additions & 6 deletions app/src/main/java/org/dhis2/Bindings/Bindings.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import org.dhis2.data.tuples.Pair;
import org.dhis2.utils.CatComboAdapter;
import org.dhis2.utils.DateUtils;
import org.hisp.dhis.android.core.category.CategoryComboModel;
import org.hisp.dhis.android.core.category.CategoryOptionComboModel;
import org.hisp.dhis.android.core.common.State;
import org.hisp.dhis.android.core.enrollment.EnrollmentModel;
Expand Down Expand Up @@ -429,7 +428,7 @@ public static void setEventIcon(ImageView view, EventModel event, EnrollmentMode
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
program -> {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType()!=null?eventProgramStage.periodType():program.expiryPeriodType())) {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType() != null ? eventProgramStage.periodType() : program.expiryPeriodType())) {
view.setImageDrawable(ContextCompat.getDrawable(view.getContext(), R.drawable.ic_eye_red));
} else {
view.setImageDrawable(ContextCompat.getDrawable(view.getContext(), R.drawable.ic_edit));
Expand Down Expand Up @@ -479,7 +478,7 @@ public static void setEventText(TextView view, EventModel event, EnrollmentModel
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
program -> {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType()!=null?eventProgramStage.periodType():program.expiryPeriodType())) {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType() != null ? eventProgramStage.periodType() : program.expiryPeriodType())) {
view.setText(view.getContext().getString(R.string.event_expired));
} else {
view.setText(view.getContext().getString(R.string.event_open));
Expand All @@ -495,7 +494,7 @@ public static void setEventText(TextView view, EventModel event, EnrollmentModel
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
program -> {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType()!=null?eventProgramStage.periodType():program.expiryPeriodType())) {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType() != null ? eventProgramStage.periodType() : program.expiryPeriodType())) {
view.setText(view.getContext().getString(R.string.event_expired));
} else {
view.setText(view.getContext().getString(R.string.event_completed));
Expand All @@ -511,7 +510,7 @@ public static void setEventText(TextView view, EventModel event, EnrollmentModel
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
program -> {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType()!=null?eventProgramStage.periodType():program.expiryPeriodType())) {
if (DateUtils.getInstance().hasExpired(event, program.expiryDays(), program.completeEventsExpiryDays(), eventProgramStage.periodType() != null ? eventProgramStage.periodType() : program.expiryPeriodType())) {
view.setText(view.getContext().getString(R.string.event_expired));
} else {
view.setText(view.getContext().getString(R.string.event_schedule));
Expand Down Expand Up @@ -631,9 +630,11 @@ public static void setCategoryOptionComboName(TextView textView, String category
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
categoryOptionModel -> {
if (!CategoryComboModel.DEFAULT_UID.equals(categoryOptionModel.uid())) {
if (!categoryOptionModel.isDefault()) {
textView.setVisibility(View.VISIBLE);
textView.setText(categoryOptionComboModel.displayName());
} else {
textView.setVisibility(View.GONE);
textView.setText("");
}
},
Expand Down
112 changes: 98 additions & 14 deletions app/src/main/java/org/dhis2/data/forms/EnrollmentFormRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.hisp.dhis.android.core.period.PeriodType;
import org.hisp.dhis.android.core.program.ProgramModel;
import org.hisp.dhis.android.core.program.ProgramStageModel;
import org.hisp.dhis.android.core.trackedentity.TrackedEntityAttributeModel;
import org.hisp.dhis.android.core.trackedentity.TrackedEntityAttributeValueModel;
import org.hisp.dhis.android.core.trackedentity.TrackedEntityInstanceModel;
import org.hisp.dhis.rules.RuleEngine;
Expand Down Expand Up @@ -76,27 +77,56 @@ class EnrollmentFormRepository implements FormRepository {

private static final String SELECT_INCIDENT_DATE = "SELECT Enrollment.* FROM Enrollment WHERE Enrollment.uid = ? LIMIT 1";

private static final String SELECT_AUTO_GENERATE_PROGRAM_STAGE = "SELECT ProgramStage.uid, " +
"Program.uid, Enrollment.organisationUnit, ProgramStage.minDaysFromStart, ProgramStage.generatedByEnrollmentDate, Enrollment.incidentDate, Enrollment.enrollmentDate, ProgramStage.periodType \n" +
private static final String SELECT_AUTO_GENERATE_PROGRAM_STAGE = "SELECT " +
"ProgramStage.uid, " +
"Program.uid, " +
"Enrollment.organisationUnit, " +
"ProgramStage.minDaysFromStart, " +
"ProgramStage.generatedByEnrollmentDate, " +
"Enrollment.incidentDate, " +
"Enrollment.enrollmentDate, " +
"ProgramStage.periodType \n" +
"FROM Enrollment\n" +
" JOIN Program ON Enrollment.program = Program.uid\n" +
" JOIN ProgramStage ON Program.uid = ProgramStage.program AND ProgramStage.autoGenerateEvent = 1\n" +
"WHERE Enrollment.uid = ?";
" JOIN ProgramStage ON Program.uid = ProgramStage.program \n" +
"WHERE Enrollment.uid = ? AND ProgramStage.autoGenerateEvent = 1";

private static final String GET_FIRST_STAGE = "SELECT " +
"ProgramStage.* FROM ProgramStage " +
"WHERE ProgramStage.program = ? " +
"AND ProgramStage.sortOrder != 0 " +
"ORDER BY ProgramStage.sortOrder ASC LIMIT 1";
private static final String CHECK_IF_FIRST_STAGE_EVENT_EXIST_IN_ENROLLMENT = "SELECT " +
"Event.uid, " +
"Program.trackedEntityType "+
"FROM Event " +
"JOIN Enrollment ON Enrollment.uid = Event.enrollment " +
"JOIN Program ON Program.uid = Enrollment.program " +
"WHERE Event.programStage = ? AND Enrollment.uid = ?";

private static final String SELECT_USE_FIRST_STAGE =
"SELECT ProgramStage.uid, ProgramStage.program, Enrollment.organisationUnit, Program.trackedEntityType, Event.uid\n" +
"SELECT ProgramStage.uid, " +
"ProgramStage.program, " +
"Enrollment.organisationUnit, " +
"Program.trackedEntityType, " +
"Event.uid\n" +
"FROM Enrollment\n" +
" JOIN Program ON Enrollment.program = Program.uid\n" +
" JOIN ProgramStage ON Program.uid = ProgramStage.program\n" +
" JOIN Event ON event.enrollment = Enrollment.uid\n" +
"WHERE Enrollment.uid = ? AND ProgramStage.sortOrder = 1 AND (Program.useFirstStageDuringRegistration = 1 OR ProgramStage.openAfterEnrollment = 1)";
"WHERE Enrollment.uid = ? AND (Program.useFirstStageDuringRegistration = 1 OR ProgramStage.openAfterEnrollment = 1) " +
"ORDER BY ProgramStage.sortOrder ASC LIMIT 1";

private static final String SELECT_USE_FIRST_STAGE_WITHOUT_AUTOGENERATE_EVENT =
"SELECT ProgramStage.uid, ProgramStage.program, Enrollment.organisationUnit, Program.trackedEntityType\n" +
"SELECT ProgramStage.uid, " +
"ProgramStage.program, " +
"Enrollment.organisationUnit, " +
"Program.trackedEntityType\n" +
"FROM Enrollment\n" +
" JOIN Program ON Enrollment.program = Program.uid\n" +
" JOIN ProgramStage ON Program.uid = ProgramStage.program\n" +
"WHERE Enrollment.uid = ? AND ProgramStage.sortOrder = 1 AND (Program.useFirstStageDuringRegistration = 1 OR ProgramStage.openAfterEnrollment = 1)";
"WHERE Enrollment.uid = ? AND (Program.useFirstStageDuringRegistration = 1 OR ProgramStage.openAfterEnrollment = 1) " +
"ORDER BY ProgramStage.sortOrder ASC";

private static final String SELECT_PROGRAM = "SELECT \n" +
" program\n" +
Expand All @@ -113,18 +143,20 @@ class EnrollmentFormRepository implements FormRepository {
private static final String SELECT_VALUES = "SELECT TrackedEntityAttributeValue.value FROM TrackedEntityAttributeValue " +
"JOIN TrackedEntityInstance ON TrackedEntityInstance.uid = TrackedEntityAttributeValue.trackedEntityInstance " +
"JOIN Enrollment ON Enrollment.trackedEntityInstance = TrackedEntityInstance.uid WHERE Enrollment.uid = ?";

private static final String QUERY = "SELECT \n" +
" Field.id,\n" +
" Field.label,\n" +
" Field.type,\n" +
" Field.mandatory,\n" +
" Field.optionSet,\n" +
" Value.value,\n" +
" Option.name,\n" +
" Option.displayName,\n" +
" Field.allowFutureDate,\n" +
" Field.generated,\n" +
" Enrollment.organisationUnit,\n" +
" Enrollment.status\n" +
" Enrollment.status,\n" +
" Field.displayDescription\n" +
"FROM (Enrollment INNER JOIN Program ON Program.uid = Enrollment.program)\n" +
" LEFT OUTER JOIN (\n" +
" SELECT\n" +
Expand All @@ -135,7 +167,8 @@ class EnrollmentFormRepository implements FormRepository {
" ProgramTrackedEntityAttribute.program AS program,\n" +
" ProgramTrackedEntityAttribute.mandatory AS mandatory,\n" +
" ProgramTrackedEntityAttribute.allowFutureDate AS allowFutureDate,\n" +
" TrackedEntityAttribute.generated AS generated\n" +
" TrackedEntityAttribute.generated AS generated,\n" +
" TrackedEntityAttribute.displayDescription AS displayDescription\n" +
" FROM ProgramTrackedEntityAttribute INNER JOIN TrackedEntityAttribute\n" +
" ON TrackedEntityAttribute.uid = ProgramTrackedEntityAttribute.trackedEntityAttribute\n" +
" ) AS Field ON Field.program = Program.uid\n" +
Expand Down Expand Up @@ -488,6 +521,7 @@ private FieldViewModel transform(@NonNull Cursor cursor) {
String section = cursor.getString(7);
Boolean allowFutureDates = cursor.getInt(8) == 1;
EnrollmentStatus status = EnrollmentStatus.valueOf(cursor.getString(10));
String description = cursor.getString(11);
if (!isEmpty(optionCodeName)) {
dataValue = optionCodeName;
}
Expand All @@ -504,13 +538,63 @@ private FieldViewModel transform(@NonNull Cursor cursor) {
"");

return fieldFactory.create(uid, label, valueType, mandatory, optionSetUid, dataValue, section,
allowFutureDates, status == EnrollmentStatus.ACTIVE, null);
allowFutureDates, status == EnrollmentStatus.ACTIVE, null,description);
}

@NonNull
@Override
public Observable<Trio<String, String, String>> useFirstStageDuringRegistration() { //EnrollmentUid,
return briteDatabase.createQuery(ProgramStageModel.TABLE, SELECT_USE_FIRST_STAGE, enrollmentUid == null ? "" : enrollmentUid)

return briteDatabase.createQuery(ProgramStageModel.TABLE, GET_FIRST_STAGE, programUid)
.mapToOne(ProgramStageModel::create)
.map(programStage->{
Cursor eventCursor = briteDatabase.query(CHECK_IF_FIRST_STAGE_EVENT_EXIST_IN_ENROLLMENT,programStage.uid(),enrollmentUid);
if(eventCursor!=null && eventCursor.moveToFirst()){ //Event exist
return Trio.create(enrollmentUid,eventCursor.getString(1),eventCursor.getString(0));
}else{//Event does not exist
Cursor newCursor = briteDatabase.query(SELECT_USE_FIRST_STAGE_WITHOUT_AUTOGENERATE_EVENT, enrollmentUid);
if (newCursor.moveToFirst()) {
String programStageUid = programStage.uid();
String programStageProgram = programStage.program();
String enrollmentOrgUnit = newCursor.getString(2);
String trackedEntityType = newCursor.getString(3);

Calendar cal = Calendar.getInstance();
cal.setTime(cal.getTime());
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

Date createdDate = Calendar.getInstance().getTime();
EventModel event = EventModel.builder()
.uid(codeGenerator.generate())
.created(createdDate)
.lastUpdated(createdDate)
.eventDate(cal.getTime())
.enrollment(enrollmentUid)
.program(programStageProgram)
.programStage(programStageUid)
.organisationUnit(enrollmentOrgUnit)
.status(EventStatus.ACTIVE)
.state(State.TO_POST)
.build();

if (briteDatabase.insert(EventModel.TABLE, event.toContentValues()) < 0) {
throw new OnErrorNotImplementedException(new Throwable("Unable to store event:" + event));
}
updateProgramTable(createdDate, programStageProgram);
return Trio.create(enrollmentUid, trackedEntityType, event.uid());
} else {
Cursor tetCursor = briteDatabase.query(SELECT_TE_TYPE, enrollmentUid == null ? "" : enrollmentUid);
tetCursor.moveToFirst();

return Trio.create(tetCursor.getString(0), tetCursor.getString(1), "");
}
}});


/*return briteDatabase.createQuery(ProgramStageModel.TABLE, SELECT_USE_FIRST_STAGE, enrollmentUid == null ? "" : enrollmentUid)
.map(query -> {
String trackedEntityType = "";
String eventUid;
Expand Down Expand Up @@ -561,7 +645,7 @@ public Observable<Trio<String, String, String>> useFirstStageDuringRegistration(
return Trio.create(tetCursor.getString(0), tetCursor.getString(1), "");
}
}
});
});*/
}

@NonNull
Expand Down
Loading

0 comments on commit a725b1e

Please sign in to comment.