OpenSRP/opensrp-client-anc

View on GitHub
opensrp-anc/src/main/java/org/smartregister/anc/library/interactor/ProfileFragmentInteractor.java

Summary

Maintainability
A
1 hr
Test Coverage
package org.smartregister.anc.library.interactor;

import com.vijay.jsonwizard.constants.JsonFormConstants;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.smartregister.anc.library.AncLibrary;
import org.smartregister.anc.library.contract.ProfileFragmentContract;
import org.smartregister.anc.library.model.Task;
import org.smartregister.anc.library.task.FetchProfileDataTask;
import org.smartregister.anc.library.util.ANCFormUtils;
import org.smartregister.anc.library.util.Utils;

import java.util.List;

import timber.log.Timber;

/**
 * Created by ndegwamartin on 13/07/2018.
 */
public class ProfileFragmentInteractor implements ProfileFragmentContract.Interactor {
    private ProfileFragmentContract.Presenter mProfileFrgamentPresenter;
    private final ANCFormUtils ANCFormUtils = new ANCFormUtils();
    private final Utils utils = new Utils();

    public ProfileFragmentInteractor(ProfileFragmentContract.Presenter presenter) {
        this.mProfileFrgamentPresenter = presenter;
    }

    @Override
    public void onDestroy(boolean isChangingConfiguration) {
        if (!isChangingConfiguration) {
            mProfileFrgamentPresenter = null;
        }
    }

    @Override
    public void refreshProfileView(String baseEntityId, boolean isForEdit) {
        new FetchProfileDataTask(isForEdit).execute(baseEntityId);
    }

    @Override
    public List<Task> getContactTasks(String baseEntityId, String contactNo) {
        return AncLibrary.getInstance().getContactTasksRepository().getTasks(baseEntityId, null);
    }

    @Override
    public void updateTask(Task task, String contactNo) {
        getProfileView().refreshTasksList(AncLibrary.getInstance().getContactTasksRepository().saveOrUpdateTasks(task));
        savePreviousTaskDetails(contactNo, task);
        createTaskPartialForm(task, contactNo);
    }

    public ProfileFragmentContract.View getProfileView() {
        return mProfileFrgamentPresenter.getProfileView();
    }

    private void savePreviousTaskDetails(String contactNo, Task task) {
        try {
            JSONObject taskValue = new JSONObject(task.getValue());
            if (taskValue.has(JsonFormConstants.VALUE)) {
                JSONArray value = taskValue.getJSONArray(JsonFormConstants.VALUE);
                if (value.length() > 0) {
                    for (int i = 0; i < value.length(); i++) {
                        JSONObject valueObject = value.getJSONObject(i);
                        if (valueObject != null && valueObject.has(JsonFormConstants.KEY) && valueObject.has(JsonFormConstants.TYPE) && valueObject.has(JsonFormConstants.VALUES)) {
                            ANCFormUtils.saveExpansionPanelValues(task.getBaseEntityId(), contactNo, valueObject);
                        }
                    }
                }
            }
        } catch (JSONException e) {
            Timber.e(e, " --> savePreviousTestDetails");
        }
    }

    private void createTaskPartialForm(Task task, String contactNo) {
        List<Task> doneTasks = utils.getContactTasksRepositoryHelper().getClosedTasks(task.getBaseEntityId());
        utils.createTasksPartialContainer(task.getBaseEntityId(), getProfileView().getContext(), Integer.parseInt(contactNo) + 1, doneTasks);
    }
}