package org.ei.drishti.controller; import org.ei.drishti.scheduler.router.Action; import org.ei.drishti.scheduler.router.AlertRouter; import org.ei.drishti.scheduler.router.Matcher; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import static org.ei.drishti.scheduler.DrishtiScheduleConstants.ChildScheduleConstants.*; import static org.ei.drishti.scheduler.DrishtiScheduleConstants.ECSchedulesConstants.*; import static org.ei.drishti.scheduler.DrishtiScheduleConstants.MotherScheduleConstants.*; import static org.ei.drishti.scheduler.router.Matcher.*; import static org.motechproject.scheduletracking.api.domain.WindowName.*; @Component public class AlertController { @Autowired public AlertController(AlertRouter router, @Qualifier("ForceFulfillAction") Action forceFulfill, @Qualifier("AlertCreationAction") Action alertCreation, @Qualifier("AutoClosePNCAction") Action autoClosePNCAction) { router.addRoute(eq(SCHEDULE_ANC), any(), eq(max.toString()), forceFulfill); router.addRoute(eq(SCHEDULE_LAB), any(), eq(max.toString()), forceFulfill); router.addRoute(eq(SCHEDULE_AUTO_CLOSE_PNC), any(), any(), autoClosePNCAction); router.addRoute(motherSchedules(), any(), anyOf(earliest.toString(), due.toString(), late.toString()), alertCreation).addExtraData("beneficiaryType", "mother"); router.addRoute(childSchedules(), any(), anyOf(earliest.toString(), due.toString(), late.toString(), max.toString()), alertCreation).addExtraData("beneficiaryType", "child"); router.addRoute(ecSchedules(), any(), anyOf(earliest.toString(), due.toString(), late.toString()), alertCreation).addExtraData("beneficiaryType", "ec"); } private Matcher childSchedules() { return anyOf(CHILD_SCHEDULE_BCG, CHILD_SCHEDULE_DPT_BOOSTER1, CHILD_SCHEDULE_DPT_BOOSTER2, CHILD_SCHEDULE_MEASLES, CHILD_SCHEDULE_MEASLES_BOOSTER, CHILD_SCHEDULE_OPV_0_AND_1, CHILD_SCHEDULE_OPV_2, CHILD_SCHEDULE_OPV_3, CHILD_SCHEDULE_OPV_BOOSTER, CHILD_SCHEDULE_PENTAVALENT_1, CHILD_SCHEDULE_PENTAVALENT_2, CHILD_SCHEDULE_PENTAVALENT_3 ); } private Matcher motherSchedules() { return anyOf(SCHEDULE_ANC, SCHEDULE_TT_1, SCHEDULE_TT_2, SCHEDULE_IFA_1, SCHEDULE_IFA_2, SCHEDULE_IFA_3, SCHEDULE_LAB, SCHEDULE_EDD, SCHEDULE_HB_TEST_1, SCHEDULE_HB_TEST_2, SCHEDULE_HB_FOLLOWUP_TEST, SCHEDULE_DELIVERY_PLAN); } private Matcher ecSchedules() { return anyOf(EC_SCHEDULE_DMPA_INJECTABLE_REFILL, EC_SCHEDULE_OCP_REFILL, EC_SCHEDULE_CONDOM_REFILL, EC_SCHEDULE_FEMALE_STERILIZATION_FOLLOWUP, EC_SCHEDULE_MALE_STERILIZATION_FOLLOWUP, EC_SCHEDULE_IUD_FOLLOWUP, EC_SCHEDULE_FP_FOLLOWUP, EC_SCHEDULE_FP_REFERRAL_FOLLOWUP_MILESTONE); } }