@Nonnull private static List<JobEvent> createJobEvents (final @Nonnull LocalDate startDate, final @Nonnull LocalDate endDate, final @Nonnull Money rate) { final List<JobEvent> result = new ArrayList<>(); final long days = startDate.until(endDate, ChronoUnit.DAYS); for (int i = 1; i <= days; i++) { final LocalDateTime s = startDate.plusDays(i - 1).atTime(8, 0).plusMinutes(i * 3); final LocalDateTime e = s.plusMinutes(60 + i * 4); final double hours = s.until(e, ChronoUnit.MINUTES) / 60.0; final BigDecimal earnings = rate.getAmount().multiply(new BigDecimal(hours)); result.add(JobEvent.builder().withId(new Id("" + nextId++)) .withName("Event #" + i) .withDescription("Description of Event #" + i) .withType(JobEvent.Type.TIMED) .withEarnings(new Money(earnings, "EUR")) .withStartDateTime(s) .withEndDateTime(e) .withHourlyRate(rate) .create()); } return result; }
@Nonnull public JobEvent.Builder toBuilder() { return JobEvent.builder().withId(id) .withType(type) .withStartDateTime(startDateTime) .withEndDateTime(endDateTime) .withName(name) .withDescription(description) .withEarnings(earnings) .withHourlyRate(hourlyRate) .withEvents(toJobEvents(jobEventsXml)); }
.withStartDateTime(parseDateTime("2014-01-05T12:34:56.0")) .withEndDateTime(parseDateTime("2014-01-05T13:45:34.0")) .withHourlyRate(new Money(48, "EUR")) .withEarnings(new Money(430, "EUR")) .create();
.withName(jobEventConfig.getString("jobEventName")) .withDescription(jobEventConfig.getString("jobEventNotes")) .withHourlyRate(jobEventConfig.getMoney("jobEventRate")) .withEarnings(jobEventConfig.getMoney("jobEventEarnings")) .withEvents(importJobEvents(jobEventConfig.getStream("children")))