Skip to content

Commit

Permalink
#183 added date validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Anthony4m committed Nov 18, 2024
1 parent 03d95e1 commit 21017ff
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,14 @@
import static android.view.View.GONE;

import android.view.View;
import android.widget.Toast;

import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
Expand All @@ -38,6 +42,7 @@
import de.symeda.sormas.api.ebs.OutComeSupervisor;
import de.symeda.sormas.api.ebs.POE;
import de.symeda.sormas.api.ebs.SignalCategory;
import de.symeda.sormas.api.i18n.I18nProperties;
import de.symeda.sormas.api.utils.YesNo;
import de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers;
import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers;
Expand All @@ -48,16 +53,19 @@
import de.symeda.sormas.app.backend.ebs.signalVerification.SignalVerification;
import de.symeda.sormas.app.backend.ebs.triaging.Triaging;
import de.symeda.sormas.app.component.Item;
import de.symeda.sormas.app.component.controls.ControlDateField;
import de.symeda.sormas.app.component.controls.ControlDateTimeField;
import de.symeda.sormas.app.component.dialog.ConfirmationDialog;
import de.symeda.sormas.app.component.dialog.ConfirmationInputDialog;
import de.symeda.sormas.app.databinding.FragmentEbsEditLayoutBinding;
import de.symeda.sormas.app.databinding.FragmentTriagingEditLayoutBinding;
import de.symeda.sormas.app.rest.SynchronizeDataAsync;
import de.symeda.sormas.app.triaging.edit.TriagingEditActivity;
import de.symeda.sormas.app.util.Callback;
import de.symeda.sormas.app.util.DataUtils;

public class TriagingEditFragment extends BaseEditFragment<FragmentTriagingEditLayoutBinding, Triaging, Triaging> {

public final String THE_DATE_OF_DECISION_CANNOT_BE_EARLIER_THAN_THE_DATE_OF_OCCURRENCE = "The Date of Decision cannot be earlier than the Date of Report or Date of Occurrence.";
private Triaging record;

private List<Item> signalCategory;
Expand Down Expand Up @@ -245,7 +253,7 @@ protected void onAfterLayoutBinding(FragmentTriagingEditLayoutBinding contentBin
}
});
contentBinding.triagingCategoryDetailsLevel.addValueChangedListener(e -> {
var level = (e.getValue() != null) ? e.getValue().toString() : "Community";
var level = (e.getValue() != null) ? e.getValue().toString() : "";
var category = contentBinding.triagingSignalCategory.getValue();
setVisibility(level, (SignalCategory) category,contentBinding);
});
Expand All @@ -263,7 +271,10 @@ protected void onAfterLayoutBinding(FragmentTriagingEditLayoutBinding contentBin
contentBinding.triagingTriagingDecision.setValue(EbsTriagingDecision.VERIFY);
}
});

contentBinding.triagingDecisionDate.addValueChangedListener(e->{
validateDateFields(contentBinding);
});
validateDateFields(contentBinding);
}

@Override
Expand Down Expand Up @@ -363,4 +374,46 @@ private void reviewSignal(int message) {
signalReviewDialog.show();
}

public void validateDateFields(FragmentTriagingEditLayoutBinding contentBinding) {
Date dateOfReport = EbsEditActivity.getParentEbs().getReportDateTime();
Date dateOfOccurrence = EbsEditActivity.getParentEbs().getDateOnset();
ControlDateField dateOfDecision = contentBinding.triagingDecisionDate;
Date dateOfDecisionDate = dateOfDecision.getValue();
if (dateOfOccurrence == null) {
dateOfOccurrence = new Date(0);
}
if (dateOfReport == null) {
dateOfReport = new Date(0);
}

Date dateOfReportDate = clearTime(dateOfReport);
Date dateOfOccurrenceDate = clearTime(dateOfOccurrence);
if (dateOfDecisionDate != null){
dateOfDecisionDate = clearTime(dateOfDecisionDate);
if (dateOfDecisionDate.before(dateOfReportDate)) {
if (!dateOfReportDate.toString().equals(dateOfDecisionDate.toString())) {
showError(THE_DATE_OF_DECISION_CANNOT_BE_EARLIER_THAN_THE_DATE_OF_OCCURRENCE);
dateOfDecision.setValidationCallback(() -> {
dateOfDecision.enableErrorState(I18nProperties.getValidationError(THE_DATE_OF_DECISION_CANNOT_BE_EARLIER_THAN_THE_DATE_OF_OCCURRENCE, THE_DATE_OF_DECISION_CANNOT_BE_EARLIER_THAN_THE_DATE_OF_OCCURRENCE));
return true;
});
}else {
dateOfDecision.setValidationCallback(() -> false);
}
}else{dateOfDecision.setValidationCallback(() -> false);}
}
}
private Date clearTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
private void showError(String message) {
Toast.makeText(getContext(), message, Toast.LENGTH_LONG).show();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

package de.symeda.sormas.app.triaging.edit;

import static de.symeda.sormas.app.core.notification.NotificationType.ERROR;
import static de.symeda.sormas.app.core.notification.NotificationType.WARNING;

import android.content.Context;
Expand All @@ -37,6 +38,7 @@
import de.symeda.sormas.app.backend.ebs.ebsAlert.EbsAlert;
import de.symeda.sormas.app.backend.ebs.triaging.Triaging;
import de.symeda.sormas.app.component.menu.PageMenuItem;
import de.symeda.sormas.app.component.validation.FragmentValidator;
import de.symeda.sormas.app.core.async.AsyncTaskResult;
import de.symeda.sormas.app.core.async.SavingAsyncTask;
import de.symeda.sormas.app.core.async.TaskResultHolder;
Expand Down Expand Up @@ -154,6 +156,13 @@ public void saveData() {

final Triaging triageToSave = getStoredRootEntity();

try {
FragmentValidator.validate(getContext(), getActiveFragment().getContentBinding());
} catch (ValidationException e) {
NotificationHelper.showNotification(this, ERROR, e.getMessage());
return;
}

saveTask = new SavingAsyncTask(getRootView(), triageToSave) {

@Override
Expand Down

0 comments on commit 21017ff

Please sign in to comment.