public void fillFieldsForInitiatedRequisition( Rnr requisition, ProgramRnrTemplate rnrTemplate, RegimenTemplate regimenTemplate) { List<ProcessingPeriod> fivePreviousPeriods = processingScheduleService.getNPreviousPeriodsInDescOrder( requisition.getPeriod(), MAX_NUMBER_OF_PERIODS_TO_TRACK); if (fivePreviousPeriods.size() == 0) { requisition.setFieldsAccordingToTemplateFrom(null, rnrTemplate, regimenTemplate); fillPreviousNCsInLineItems( requisition, requisition.getPeriod().getNumberOfMonths(), requisition.getPeriod().getStartDate()); return; } Rnr previousRequisition = requisitionRepository.getRegularRequisitionWithLineItems( requisition.getFacility(), requisition.getProgram(), fivePreviousPeriods.get(0)); requisition.setFieldsAccordingToTemplateFrom(previousRequisition, rnrTemplate, regimenTemplate); Integer numberOfMonths = fivePreviousPeriods.get(0).getNumberOfMonths(); Date trackingDate = fivePreviousPeriods.get(0).getStartDate(); int lastPeriodIndex = MAX_NUMBER_OF_PERIODS_TO_TRACK - 1; int secondPeriodIndex = 1; if (numberOfMonths == 1) { trackingDate = getStartDateForNthPreviousPeriod(fivePreviousPeriods, lastPeriodIndex); } else if (numberOfMonths == 2) { trackingDate = getStartDateForNthPreviousPeriod(fivePreviousPeriods, secondPeriodIndex); } fillPreviousNCsInLineItems(requisition, numberOfMonths, trackingDate); }
public void fillReportingDays(Rnr requisition) { Date startDate = requisition.getPeriod().getStartDate(); Integer numberOfMonths = requisition.getPeriod().getNumberOfMonths(); List<ProcessingPeriod> twoPreviousPeriods = processingScheduleService.getNPreviousPeriodsInDescOrder(requisition.getPeriod(), 2); if (twoPreviousPeriods.size() != 0) { numberOfMonths = twoPreviousPeriods.get(0).getNumberOfMonths(); startDate = (numberOfMonths < 3 && twoPreviousPeriods.size() != 1) ? twoPreviousPeriods.get(1).getStartDate() : twoPreviousPeriods.get(0).getStartDate(); } for (RnrLineItem lineItem : requisition.getNonSkippedLineItems()) { Integer reportingDays = getReportingDaysBasedOnRequisition( requisition, lineItem.getProductCode(), startDate, numberOfMonths); lineItem.setReportingDays(reportingDays); } }