private void createMeetingSchedule()

in service/src/main/java/org/apache/fineract/cn/group/internal/command/handler/GroupAggregate.java [336:387]


  private void createMeetingSchedule(final GroupDefinitionEntity groupDefinitionEntity, final GroupEntity groupEntity) {
    final Integer numberOfMeetings = groupDefinitionEntity.getNumberOfMeetings();
    final Cycle.Frequency frequency = Cycle.Frequency.valueOf(groupDefinitionEntity.getFrequency());
    final Cycle.Adjustment adjustment = Cycle.Adjustment.valueOf(groupDefinitionEntity.getAdjustment());
    final Group.Weekday weekday = Group.Weekday.from(groupEntity.getWeekday());

    final Set<String> members = StringUtils.commaDelimitedListToSet(groupEntity.getMembers());

    LocalDate meeting = LocalDate.now(Clock.systemUTC());
    if (frequency != Cycle.Frequency.DAILY) {
      meeting = meeting.with(ChronoField.DAY_OF_WEEK, weekday.getValue());
    }

    for (int i = 0; i < numberOfMeetings; i++) {
      switch (frequency) {
        case DAILY:
          meeting = meeting.plusDays(1L);
          break;
        case WEEKLY:
          meeting = meeting.plusWeeks(1L);
          break;
        case FORTNIGHTLY:
          meeting = meeting.plusWeeks(2L);
          break;
        case MONTHLY:
          meeting.plusMonths(1L);
          break;
      }

      final MeetingEntity meetingEntity = new MeetingEntity();
      meetingEntity.setGroupEntity(groupEntity);
      meetingEntity.setCurrentCycle(groupEntity.getCurrentCycle());
      meetingEntity.setMeetingSequence((i + 1));
      meetingEntity.setScheduledFor(meeting);
      meetingEntity.setCreatedBy(UserContextHolder.checkedGetUser());
      meetingEntity.setCreatedOn(LocalDateTime.now(Clock.systemUTC()));
      final MeetingEntity savedMeeting = this.meetingRepository.save(meetingEntity);

      this.attendeeRepository.save(
          members
              .stream()
              .map(member -> {
                final AttendeeEntity attendeeEntity = new AttendeeEntity();
                attendeeEntity.setMeeting(savedMeeting);
                attendeeEntity.setCustomerIdentifier(member);
                attendeeEntity.setStatus(Attendee.Status.EXPECTED.name());
                return attendeeEntity;
              })
              .collect(Collectors.toList())
      );
    }
  }