package org.openlmis.core.view.widget;
import android.content.Context;
import android.support.annotation.NonNull;
import android.text.Html;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.inject.Inject;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.openlmis.core.R;
import org.openlmis.core.exceptions.LMISException;
import org.openlmis.core.model.Period;
import org.openlmis.core.model.service.RequisitionPeriodService;
import org.openlmis.core.utils.Constants;
import roboguice.RoboGuice;
import roboguice.inject.InjectView;
public class IncompleteRequisitionBanner extends LinearLayout {
@InjectView(R.id.tx_incomplete_requisition)
TextView txMissedRequisition;
@Inject
RequisitionPeriodService requisitionPeriodService;
protected Context context;
public IncompleteRequisitionBanner(Context context) {
super(context);
init(context);
}
public IncompleteRequisitionBanner(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
this.context = context;
LayoutInflater.from(context).inflate(R.layout.view_incomplete_requisition_banner, this);
RoboGuice.injectMembers(getContext(), this);
RoboGuice.getInjector(getContext()).injectViewMembers(this);
setIncompleteRequisitionBanner();
}
public void setIncompleteRequisitionBanner() {
try {
int periodOffsetMonthMmia = requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.MMIA_PROGRAM_CODE);
int periodOffsetMonthVia = requisitionPeriodService.getIncompletePeriodOffsetMonth(Constants.VIA_PROGRAM_CODE);
if (periodOffsetMonthMmia == 0 && periodOffsetMonthVia == 0) {
this.setVisibility(View.GONE);
return;
} else if (periodOffsetMonthMmia == 1 && periodOffsetMonthVia == 1) {
String periodRange = getPeriodRangeForIncompleteRequisition(Constants.VIA_PROGRAM_CODE);
txMissedRequisition.setText(Html.fromHtml(getResources().getString(R.string.via_and_mmia_requisition_alert, periodRange)));
} else if (periodOffsetMonthMmia == 0 && periodOffsetMonthVia == 1) {
String periodRange = getPeriodRangeForIncompleteRequisition(Constants.VIA_PROGRAM_CODE);
txMissedRequisition.setText(Html.fromHtml(getResources().getString(R.string.via_requisition_alert, periodRange)));
} else if (periodOffsetMonthMmia == 1 && periodOffsetMonthVia == 0) {
String periodRange = getPeriodRangeForIncompleteRequisition(Constants.MMIA_PROGRAM_CODE);
txMissedRequisition.setText(Html.fromHtml(getResources().getString(R.string.mmia_requisition_alert, periodRange)));
} else if (periodOffsetMonthMmia == 0 && periodOffsetMonthVia > 1) {
txMissedRequisition.setText(getResources().getString(R.string.via_requisition_for_multiple_periods_alert));
} else if (periodOffsetMonthMmia > 1 && periodOffsetMonthVia == 0) {
txMissedRequisition.setText(getResources().getString(R.string.mmia_requisition_for_multiple_periods_alert));
} else {
txMissedRequisition.setText(getResources().getString(R.string.via_and_mmia_requisitions_for_multiple_periods_alert));
}
this.setVisibility(VISIBLE);
} catch (LMISException e) {
e.printStackTrace();
}
}
@NonNull
private String getPeriodRangeForIncompleteRequisition(String programCode) throws LMISException {
Period period = requisitionPeriodService.generateNextPeriod(programCode, null);
DateTimeFormatter fmt = DateTimeFormat.forPattern("MMMM yyyy");
return getResources().getString(R.string.missed_requisition_time_range, fmt.print(period.getBegin()), fmt.print(period.getEnd()));
}
}