From d3096d9ea447994795f00091b9376f2f95c5b2e3 Mon Sep 17 00:00:00 2001 From: anthony4m Date: Sun, 15 Dec 2024 12:44:55 +0000 Subject: [PATCH] fixed data not showing for affected person --- .../edit/CaseEditFoodHistoryFragment.java | 293 +++++++++--------- .../app/foodhistory/AffectedPersonDialog.java | 160 +++++----- 2 files changed, 233 insertions(+), 220 deletions(-) diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditFoodHistoryFragment.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditFoodHistoryFragment.java index 81eaf763937..bc4b1218279 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditFoodHistoryFragment.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/caze/edit/CaseEditFoodHistoryFragment.java @@ -16,23 +16,21 @@ import static android.view.View.GONE; -import android.content.res.Resources; -import android.util.Log; -import android.view.ViewGroup; - -import androidx.databinding.ObservableArrayList; +import java.util.List; import com.googlecode.openbeans.Introspector; import com.googlecode.openbeans.PropertyDescriptor; -import java.util.List; +import android.content.res.Resources; +import android.view.ViewGroup; + +import androidx.databinding.ObservableArrayList; import de.symeda.sormas.api.FormType; import de.symeda.sormas.api.foodhistory.FoodHistoryDto; import de.symeda.sormas.api.utils.EventType; import de.symeda.sormas.api.utils.FoodSource; import de.symeda.sormas.api.utils.YesNo; -import de.symeda.sormas.api.utils.YesNoUnknown; import de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers; import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers; import de.symeda.sormas.app.BaseEditFragment; @@ -51,142 +49,149 @@ public class CaseEditFoodHistoryFragment extends BaseEditFragment { - private FoodHistory record; - private Case caze; - private List foodSourceList; - private List eventTypeList; - private IEntryItemOnClickListener onAffectedPersonItemClickListener; - - public static CaseEditFoodHistoryFragment newInstance(Case activityRootData) { - return newInstanceWithFieldCheckers( - CaseEditFoodHistoryFragment.class, - null, - activityRootData, - new FieldVisibilityCheckers(), - UiFieldAccessCheckers.forSensitiveData(activityRootData.isPseudonymized())); - } - - @Override - protected String getSubHeadingTitle() { - Resources r = getResources(); - return r.getString(R.string.caption_case_food_history); - } - @Override - public FoodHistory getPrimaryData() { - return record; - } - @Override - protected void prepareFragmentData() { - caze = getActivityRootData(); - record = caze.getFoodHistory(); - foodSourceList = DataUtils.getEnumItems(FoodSource.class, true); - eventTypeList = DataUtils.getEnumItems(EventType.class, true); - } - - @Override - public void onLayoutBinding(final FragmentCaseEditFoodhistoryLayoutBinding contentBinding) { - setUpControlListeners(contentBinding); - setDefaultValues(record); - contentBinding.setData(record); - - contentBinding.setYesNoClass(YesNo.class); - contentBinding.foodHistoryFoodSource.initializeSpinner(foodSourceList); - contentBinding.foodHistoryEventType.initializeSpinner(eventTypeList); - contentBinding.foodHistoryDateConsumed.initializeDateTimeField(getFragmentManager()); - - contentBinding.setAffectedPersonList(getAffectedPersons()); - contentBinding.setAffectedPersonItemClickCallback(onAffectedPersonItemClickListener); - contentBinding.setAffectedPersonListBindCallback( - v -> FieldVisibilityAndAccessHelper - .setFieldVisibilitiesAndAccesses(AffectedPerson.class, (ViewGroup) v, new FieldVisibilityCheckers(), getFieldAccessCheckers())); - - if (caze.getDisease() != null) { - super.hideFieldsForDisease(caze.getDisease(), contentBinding.mainContent, FormType.FOOD_HISTORY_EDIT); - } - } - - public void setDefaultValues(FoodHistory foodHistoryDto) { - if (foodHistoryDto == null) { - return; - } - - try { - for (PropertyDescriptor pd : Introspector.getBeanInfo(FoodHistory.class, AbstractDomainObject.class).getPropertyDescriptors()) { - if (pd.getWriteMethod() != null && (pd.getReadMethod().getReturnType().equals(YesNo.class))) { - try { - if (pd.getReadMethod().invoke(foodHistoryDto) == null) - pd.getWriteMethod().invoke(foodHistoryDto, YesNo.NO); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - } - - @Override - protected void onAfterLayoutBinding(FragmentCaseEditFoodhistoryLayoutBinding contentBinding) { - setFieldVisibilitiesAndAccesses(FoodHistoryDto.class, contentBinding.mainContent); - - if (getActivityRootData() == null) { - contentBinding.affectedPersonLayout.setVisibility(GONE); - } - - } - @Override - public int getEditLayout() { - return R.layout.fragment_case_edit_foodhistory_layout; - } - - private void setUpControlListeners(final FragmentCaseEditFoodhistoryLayoutBinding contentBinding) { - - contentBinding.btnAddAffectedPerson.setOnClickListener(v -> { - final AffectedPerson affectedPerson = DatabaseHelper.getAffectedPersonDao().build(); - final AffectedPersonDialog dialog = - new AffectedPersonDialog(CaseEditActivity.getActiveActivity(), affectedPerson, getActivityRootData(), true); - dialog.setPositiveCallback(() -> addAffectedPerson(affectedPerson)); - dialog.show(); - }); - onAffectedPersonItemClickListener = (v, item) -> { - final AffectedPerson affectedPerson = (AffectedPerson) item; - final AffectedPerson affectedPersonClone = (AffectedPerson) affectedPerson.clone(); - final AffectedPersonDialog dialog = - new AffectedPersonDialog(CaseEditActivity.getActiveActivity(), affectedPersonClone, getActivityRootData(), false); - dialog.setPositiveCallback(() -> { - record.getAffectedPersons().set(record.getAffectedPersons().indexOf(affectedPerson), affectedPersonClone); - updateAffectedPersons(); - }); - dialog.setDeleteCallback(() -> { - removeAffectedPerson(affectedPerson); - dialog.dismiss(); - }); - dialog.show(); - }; - contentBinding.setAffectedPersonItemClickCallback(onAffectedPersonItemClickListener); - - } - - private void addAffectedPerson(AffectedPerson affectedPerson) { - record.getAffectedPersons().add(0, affectedPerson); - updateAffectedPersons(); - } - - private void updateAffectedPersons() { - getContentBinding().setAffectedPersonList(getAffectedPersons()); - } - - private ObservableArrayList getAffectedPersons() { - ObservableArrayList affectedPersons = new ObservableArrayList<>(); - affectedPersons.addAll(record.getAffectedPersons()); - return affectedPersons; - } - - private void removeAffectedPerson(AffectedPerson affectedPerson) { - record.getAffectedPersons().remove(affectedPerson); - updateAffectedPersons(); - } + private FoodHistory record; + private Case caze; + private List foodSourceList; + private List eventTypeList; + private IEntryItemOnClickListener onAffectedPersonItemClickListener; + + public static CaseEditFoodHistoryFragment newInstance(Case activityRootData) { + return newInstanceWithFieldCheckers( + CaseEditFoodHistoryFragment.class, + null, + activityRootData, + new FieldVisibilityCheckers(), + UiFieldAccessCheckers.forSensitiveData(activityRootData.isPseudonymized())); + } + + @Override + protected String getSubHeadingTitle() { + Resources r = getResources(); + return r.getString(R.string.caption_case_food_history); + } + + @Override + public FoodHistory getPrimaryData() { + return record; + } + + @Override + protected void prepareFragmentData() { + caze = getActivityRootData(); + record = caze.getFoodHistory(); + foodSourceList = DataUtils.getEnumItems(FoodSource.class, true); + eventTypeList = DataUtils.getEnumItems(EventType.class, true); + } + + @Override + public void onLayoutBinding(final FragmentCaseEditFoodhistoryLayoutBinding contentBinding) { + setUpControlListeners(contentBinding); + setDefaultValues(record); + contentBinding.setData(record); + + contentBinding.setYesNoClass(YesNo.class); + contentBinding.foodHistoryFoodSource.initializeSpinner(foodSourceList); + contentBinding.foodHistoryEventType.initializeSpinner(eventTypeList); + contentBinding.foodHistoryDateConsumed.initializeDateTimeField(getFragmentManager()); + + contentBinding.setAffectedPersonList(getAffectedPersons()); + contentBinding.setAffectedPersonItemClickCallback(onAffectedPersonItemClickListener); + contentBinding.setAffectedPersonListBindCallback( + v -> FieldVisibilityAndAccessHelper + .setFieldVisibilitiesAndAccesses(AffectedPerson.class, (ViewGroup) v, new FieldVisibilityCheckers(), getFieldAccessCheckers())); + + if (caze.getDisease() != null) { + super.hideFieldsForDisease(caze.getDisease(), contentBinding.mainContent, FormType.FOOD_HISTORY_EDIT); + } + } + + public void setDefaultValues(FoodHistory foodHistoryDto) { + if (foodHistoryDto == null) { + return; + } + + try { + for (PropertyDescriptor pd : Introspector.getBeanInfo(FoodHistory.class, AbstractDomainObject.class).getPropertyDescriptors()) { + if (pd.getWriteMethod() != null && (pd.getReadMethod().getReturnType().equals(YesNo.class))) { + try { + if (pd.getReadMethod().invoke(foodHistoryDto) == null) + pd.getWriteMethod().invoke(foodHistoryDto, YesNo.NO); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @Override + protected void onAfterLayoutBinding(FragmentCaseEditFoodhistoryLayoutBinding contentBinding) { + setFieldVisibilitiesAndAccesses(FoodHistoryDto.class, contentBinding.mainContent); + + if (getActivityRootData() == null) { + contentBinding.affectedPersonLayout.setVisibility(GONE); + } + + } + + @Override + public int getEditLayout() { + return R.layout.fragment_case_edit_foodhistory_layout; + } + + private void setUpControlListeners(final FragmentCaseEditFoodhistoryLayoutBinding contentBinding) { + + contentBinding.btnAddAffectedPerson.setOnClickListener(v -> { + final AffectedPerson affectedPerson = DatabaseHelper.getAffectedPersonDao().build(); + final AffectedPersonDialog dialog = + new AffectedPersonDialog(CaseEditActivity.getActiveActivity(), affectedPerson, getActivityRootData(), true); + dialog.setPositiveCallback(() -> addAffectedPerson(affectedPerson)); + dialog.show(); + }); + onAffectedPersonItemClickListener = (v, item) -> { + AffectedPerson affectedPerson = (AffectedPerson) item; + final AffectedPerson affectedPersonClone = (AffectedPerson) affectedPerson.clone(); + final AffectedPersonDialog dialog = + new AffectedPersonDialog(CaseEditActivity.getActiveActivity(), affectedPersonClone, getActivityRootData(), false); + dialog.setPositiveCallback(() -> { + affectedPerson.setNameOfAffectedPerson(dialog.getData().getNameOfAffectedPerson()); + affectedPerson.setTelNo(dialog.getData().getTelNo()); + affectedPerson.setDateTime(dialog.getData().getDateTime()); + affectedPerson.setAge(dialog.getData().getAge()); + record.getAffectedPersons().set(record.getAffectedPersons().indexOf(affectedPerson), affectedPersonClone); + updateAffectedPersons(); + }); + dialog.setDeleteCallback(() -> { + removeAffectedPerson(affectedPerson); + dialog.dismiss(); + }); + dialog.show(); + }; + contentBinding.setAffectedPersonItemClickCallback(onAffectedPersonItemClickListener); + + } + + private void addAffectedPerson(AffectedPerson affectedPerson) { + record.getAffectedPersons().add(0, affectedPerson); + updateAffectedPersons(); + } + + private void updateAffectedPersons() { + getContentBinding().setAffectedPersonList(getAffectedPersons()); + } + + private ObservableArrayList getAffectedPersons() { + ObservableArrayList affectedPersons = new ObservableArrayList<>(); + affectedPersons.addAll(record.getAffectedPersons()); + return affectedPersons; + } + + private void removeAffectedPerson(AffectedPerson affectedPerson) { + record.getAffectedPersons().remove(affectedPerson); + updateAffectedPersons(); + } } diff --git a/sormas-app/app/src/main/java/de/symeda/sormas/app/foodhistory/AffectedPersonDialog.java b/sormas-app/app/src/main/java/de/symeda/sormas/app/foodhistory/AffectedPersonDialog.java index fbeb44e53c6..6a3a6c39214 100644 --- a/sormas-app/app/src/main/java/de/symeda/sormas/app/foodhistory/AffectedPersonDialog.java +++ b/sormas-app/app/src/main/java/de/symeda/sormas/app/foodhistory/AffectedPersonDialog.java @@ -24,80 +24,88 @@ public class AffectedPersonDialog extends FormDialog { - private final AffectedPerson data; - private DialogAffectedPersonEditLayoutBinding contentBinding; - private final boolean create; - - public AffectedPersonDialog(final FragmentActivity activity, AffectedPerson affectedPerson, PseudonymizableAdo activityRootData, boolean create) { - super( - activity, - R.layout.dialog_root_layout, - R.layout.dialog_affected_person_edit_layout, - R.layout.dialog_root_three_button_panel_layout, - R.string.heading_affected_person_details, - -1, - false, - UiFieldAccessCheckers.forSensitiveData(affectedPerson.isPseudonymized()), - FieldVisibilityCheckers.withDisease(getDiseaseOfCaseOrContact(activityRootData)).andWithCountry(ConfigProvider.getServerCountryCode())); - - this.data = affectedPerson; - this.create = create; - } - - private void setUpHeadingVisibilities() { - } - - @Override - protected void setContentBinding(Context context, ViewDataBinding binding, String layoutName) { - contentBinding = (DialogAffectedPersonEditLayoutBinding) binding; - binding.setVariable(BR.data, data); - } - - @Override - protected void initializeContentView(ViewDataBinding rootBinding, ViewDataBinding buttonPanelBinding) { - - contentBinding.affectedPersonDateTime.initializeDateField(getFragmentManager()); - - if (data.getId() == null) { - setLiveValidationDisabled(true); - } - } - - @Override - protected void onPositiveClick() { - setLiveValidationDisabled(false); - try { - FragmentValidator.validate(getContext(), contentBinding); - } catch (ValidationException e) { - NotificationHelper.showDialogNotification(AffectedPersonDialog.this, ERROR, e.getMessage()); - return; - } - super.setCloseOnPositiveButtonClick(true); - super.onPositiveClick(); - } - - @Override - public boolean isDeleteButtonVisible() { - return !create; - } - - @Override - public boolean isRounded() { - return true; - } - - @Override - public ControlButtonType getNegativeButtonType() { - return ControlButtonType.LINE_SECONDARY; - } - - @Override - public ControlButtonType getPositiveButtonType() { - return ControlButtonType.LINE_PRIMARY; - } - - @Override - public ControlButtonType getDeleteButtonType() { - return ControlButtonType.LINE_DANGER; - } + private final AffectedPerson data; + private final boolean create; + private DialogAffectedPersonEditLayoutBinding contentBinding; + + public AffectedPersonDialog(final FragmentActivity activity, AffectedPerson affectedPerson, PseudonymizableAdo activityRootData, boolean create) { + super( + activity, + R.layout.dialog_root_layout, + R.layout.dialog_affected_person_edit_layout, + R.layout.dialog_root_three_button_panel_layout, + R.string.heading_affected_person_details, + -1, + false, + UiFieldAccessCheckers.forSensitiveData(affectedPerson.isPseudonymized()), + FieldVisibilityCheckers.withDisease(getDiseaseOfCaseOrContact(activityRootData)).andWithCountry(ConfigProvider.getServerCountryCode())); + + this.data = affectedPerson; + this.create = create; + } + + private void setUpHeadingVisibilities() { + } + + public AffectedPerson getData() { + return data; + } + + @Override + protected void setContentBinding(Context context, ViewDataBinding binding, String layoutName) { + contentBinding = (DialogAffectedPersonEditLayoutBinding) binding; + binding.setVariable(BR.data, data); + } + + @Override + protected void initializeContentView(ViewDataBinding rootBinding, ViewDataBinding buttonPanelBinding) { + + contentBinding.affectedPersonDateTime.initializeDateField(getFragmentManager()); + + if (data.getId() == null) { + setLiveValidationDisabled(true); + } + } + + @Override + protected void onPositiveClick() { + setLiveValidationDisabled(false); + try { + FragmentValidator.validate(getContext(), contentBinding); + this.data.setAge(contentBinding.affectedPersonAge.getValue()); + this.data.setNameOfAffectedPerson(contentBinding.affectedPersonNameOfAffectedPerson.getValue()); + this.data.setDateTime(contentBinding.affectedPersonDateTime.getValue()); + this.data.setTelNo(contentBinding.affectedPersonTelNo.getValue()); + } catch (ValidationException e) { + NotificationHelper.showDialogNotification(AffectedPersonDialog.this, ERROR, e.getMessage()); + return; + } + super.setCloseOnPositiveButtonClick(true); + super.onPositiveClick(); + } + + @Override + public boolean isDeleteButtonVisible() { + return !create; + } + + @Override + public boolean isRounded() { + return true; + } + + @Override + public ControlButtonType getNegativeButtonType() { + return ControlButtonType.LINE_SECONDARY; + } + + @Override + public ControlButtonType getPositiveButtonType() { + return ControlButtonType.LINE_PRIMARY; + } + + @Override + public ControlButtonType getDeleteButtonType() { + return ControlButtonType.LINE_DANGER; + } }