/*
* The contents of this file are subject to the OpenMRS Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.mobile.activities.visitdashboard;
import org.openmrs.mobile.R;
import org.openmrs.mobile.activities.BasePresenter;
import org.openmrs.mobile.api.RestApi;
import org.openmrs.mobile.api.RestServiceBuilder;
import org.openmrs.mobile.dao.VisitDAO;
import org.openmrs.mobile.models.Encounter;
import org.openmrs.mobile.models.Patient;
import org.openmrs.mobile.models.Visit;
import org.openmrs.mobile.utilities.DateUtils;
import org.openmrs.mobile.utilities.StringUtils;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import rx.android.schedulers.AndroidSchedulers;
public class VisitDashboardPresenter extends BasePresenter implements VisitDashboardContract.Presenter {
private RestApi restApi;
private VisitDAO visitDAO;
private Long visitId;
private VisitDashboardContract.View mVisitDashboardView;
public VisitDashboardPresenter(VisitDashboardContract.View mVisitDashboardView, Long id) {
this.mVisitDashboardView = mVisitDashboardView;
this.visitDAO = new VisitDAO();
this.visitId = id;
this.restApi = RestServiceBuilder.createService(RestApi.class);
mVisitDashboardView.setPresenter(this);
}
public VisitDashboardPresenter(RestApi restApi, VisitDAO visitDAO, Long visitId, VisitDashboardContract.View mVisitDashboardView) {
this.mVisitDashboardView = mVisitDashboardView;
this.visitDAO = visitDAO;
this.visitId = visitId;
this.restApi = restApi;
mVisitDashboardView.setPresenter(this);
}
public void endVisitByUUID(final Visit visit) {
visit.setStopDatetime(DateUtils.convertTime(System.currentTimeMillis(), DateUtils.OPEN_MRS_REQUEST_FORMAT));
Visit test = new Visit();
test.setStopDatetime(visit.getStopDatetime());
Call<Visit> call = restApi.endVisitByUUID(visit.getUuid(), test );
call.enqueue(new Callback<Visit>() {
@Override
public void onResponse(Call<Visit> call, Response<Visit> response) {
if (response.isSuccessful()) {
addSubscription(visitDAO.getVisitByID(visit.getId())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(vis -> {
vis.setStopDatetime(response.body().getStopDatetime());
visitDAO.saveOrUpdate(vis, vis.getPatient().getId())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(id -> moveToPatientDashboard());
}));
}
else {
mVisitDashboardView.showErrorToast(response.message());
}
}
@Override
public void onFailure(Call<Visit> call, Throwable t) {
mVisitDashboardView.showErrorToast(t.getMessage());
}
});
}
public void endVisit() {
addSubscription(visitDAO.getVisitByID(visitId)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::endVisitByUUID));
}
@Override
public void subscribe() {
addSubscription(visitDAO.getVisitByID(visitId)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(visit -> {
List<Encounter> encounters = visit.getEncounters();
if (!encounters.isEmpty()) {
mVisitDashboardView.setEmptyListVisibility(false);
}
mVisitDashboardView.updateList(encounters);
}));
}
@Override
public void fillForm() {
addSubscription(visitDAO.getVisitByID(visitId)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(visit -> {
Patient patient = visit.getPatient();
if(patient.getUuid() != null) {
mVisitDashboardView.startCaptureVitals(patient.getId());
} else {
mVisitDashboardView.showErrorToast(R.string.patient_not_yet_registered);
}
}));
}
@Override
public void updatePatientName() {
addSubscription(visitDAO.getVisitByID(visitId)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(visit -> mVisitDashboardView.setActionBarTitle(visit.getPatient().getPerson().getName().getNameString())));
}
@Override
public void checkIfVisitActive() {
addSubscription(visitDAO.getVisitByID(visitId)
.observeOn(AndroidSchedulers.mainThread())
.filter(visit -> StringUtils.isBlank(visit.getStopDatetime()))
.subscribe(visit -> mVisitDashboardView.setActiveVisitMenu()));
}
public void moveToPatientDashboard() {
mVisitDashboardView.moveToPatientDashboard();
}
}