@Nonnull private Duration computeDuration() { return Duration.between(jobEvent.getStartDateTime(), jobEvent.getEndDateTime()); }
@Override @Nonnull protected AggregatePresentationModelBuilder aggregateBuilder() { return super.aggregateBuilder() .with(DATE, (Displayable) () -> DATETIME_FORMATTER.format(jobEvent.getStartDateTime())) .with(TIME, (Displayable) () -> DURATION_FORMATTER.format(computeDuration()), STYLE_RIGHT_ALIGNED) .with(HOURLY_RATE, (Displayable) () -> MONEY_FORMATTER.format(jobEvent.getHourlyRate()), STYLE_RIGHT_ALIGNED); }
List<TimedJobEventSpi> timedEventsSubList = temp; final TimedJobEventSpi lastEvent = timedEventsSubList.get(eventsSubList.size() - 1); final LocalDate lastDate = lastEvent.getStartDateTime().toLocalDate(); final double earnings = timedEventsSubList.stream() .collect(Collectors.summingDouble(ev -> ev.getEarnings().getAmount().doubleValue())); final double taxRate = 0.20d;
/******************************************************************************************************************* * * Retrieves the hourly rates - if missing from the project description, tries to recover it from the first * meaningful job event. * ******************************************************************************************************************/ @Nonnull private Money getHourlyRate(final ConfigurationDecorator projectConfig, final List<JobEvent> jobEvents) throws NotFoundException { Money hourlyRate = projectConfig.getMoney("projectRate"); if ((hourlyRate.compareTo(Money.ZERO) == 0) && !jobEvents.isEmpty()) // don't use equals() - see http://stackoverflow.com/questions/6787142/bigdecimal-equals-versus-compareto { JobEvent event = jobEvents.get(0); while ((event instanceof JobEventGroup) && ((JobEventGroup)event).findChildren().count() > 0) { event = ((JobEventGroup)event).findChildren().firstResult(); } if (event instanceof TimedJobEventSpi) { hourlyRate = ((TimedJobEventSpi)event).getHourlyRate(); } } return hourlyRate; }