@Test public void validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition() { final AuftragDO auftrag = new AuftragDO(); final List<AuftragsPositionDO> auftragsPositions = auftrag.ensureAndGetPositionen(); final List<PaymentScheduleDO> paymentSchedules = auftrag.ensureAndGetPaymentSchedules(); auftrag.setPeriodOfPerformanceBegin(LocalDate.of(2017, 5, 1)); auftrag.setPeriodOfPerformanceEnd(LocalDate.of(2017, 6, 30)); AuftragsPositionDO pos1 = new AuftragsPositionDO(); pos1.setNumber((short) 1); AuftragsPositionDO pos2 = new AuftragsPositionDO(); pos2.setNumber((short) 2); pos2.setPeriodOfPerformanceType(PeriodOfPerformanceType.OWN); pos2.setPeriodOfPerformanceBegin(LocalDate.of(2017, 5, 24)); pos2.setPeriodOfPerformanceEnd(LocalDate.of(2017, 5, 25)); auftragsPositions.add(pos1); auftragsPositions.add(pos2); PaymentScheduleDO paymentSchedule = new PaymentScheduleDO(); paymentSchedule.setPositionNumber((short) 1); paymentSchedule.setScheduleDate(LocalDate.of(2017, 5, 1)); paymentSchedules.add(paymentSchedule); paymentSchedule = new PaymentScheduleDO(); paymentSchedule.setPositionNumber((short) 1); paymentSchedule.setScheduleDate(LocalDate.of(2017, 5, 20)); paymentSchedules.add(paymentSchedule); paymentSchedule = new PaymentScheduleDO(); paymentSchedule.setPositionNumber((short) 1); paymentSchedule.setScheduleDate(LocalDate.of(2017, 6, 30)); paymentSchedules.add(paymentSchedule); paymentSchedule = new PaymentScheduleDO(); paymentSchedule.setPositionNumber((short) 2); paymentSchedule.setScheduleDate(LocalDate.of(2017, 5, 24)); paymentSchedules.add(paymentSchedule); paymentSchedule = new PaymentScheduleDO(); paymentSchedule.setPositionNumber((short) 2); paymentSchedule.setScheduleDate(LocalDate.of(2017, 5, 25)); paymentSchedules.add(paymentSchedule); boolean exceptionThrown = false; try { auftragDao.validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition(auftrag); } catch (UserException e) { exceptionThrown = true; } assertFalse(exceptionThrown); paymentSchedule = new PaymentScheduleDO(); paymentSchedule.setPositionNumber((short) 1); paymentSchedule.setScheduleDate(LocalDate.of(2017, 4, 30)); paymentSchedules.add(paymentSchedule); paymentSchedule = new PaymentScheduleDO(); paymentSchedule.setPositionNumber((short) 2); paymentSchedule.setScheduleDate(LocalDate.of(2017, 5, 26)); paymentSchedules.add(paymentSchedule); try { auftragDao.validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition(auftrag); } catch (UserException e) { exceptionThrown = true; assertEquals(e.getParams().length, 1); assertEquals(e.getParams()[0], "1, 2"); } assertTrue(exceptionThrown); }
void validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition(final AuftragDO auftrag) { final List<PaymentScheduleDO> paymentSchedules = auftrag.getPaymentSchedules(); if (paymentSchedules == null) { return; } final List<Short> positionsWithDatesNotWithinPop = new ArrayList<>(); for (final AuftragsPositionDO pos : auftrag.getPositionenExcludingDeleted()) { final LocalDate periodOfPerformanceBegin = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceBegin() : auftrag.getPeriodOfPerformanceBegin(); final LocalDate periodOfPerformanceEnd = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceEnd() : auftrag.getPeriodOfPerformanceEnd(); final boolean hasDateNotInRange = paymentSchedules.stream() .filter(payment -> payment.getPositionNumber() == pos.getNumber()) .map(PaymentScheduleDO::getScheduleDate) .filter(Objects::nonNull) .anyMatch(date -> date.isBefore(periodOfPerformanceBegin) || date.isAfter(periodOfPerformanceEnd)); if (hasDateNotInRange) { positionsWithDatesNotWithinPop.add(pos.getNumber()); } } if (!positionsWithDatesNotWithinPop.isEmpty()) { final String positions = positionsWithDatesNotWithinPop.stream() .map(Object::toString) .collect(Collectors.joining(", ")); throw new UserException("fibu.auftrag.error.datesInPaymentScheduleNotWithinPeriodOfPerformanceOfPosition", positions); } }
AuftragDao extends BaseDao<AuftragDO> { void validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition(final AuftragDO auftrag) { final List<PaymentScheduleDO> paymentSchedules = auftrag.getPaymentSchedules(); if (paymentSchedules == null) { return; } final List<Short> positionsWithDatesNotWithinPop = new ArrayList<>(); for (final AuftragsPositionDO pos : auftrag.getPositionenExcludingDeleted()) { final LocalDate periodOfPerformanceBegin = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceBegin() : auftrag.getPeriodOfPerformanceBegin(); final LocalDate periodOfPerformanceEnd = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceEnd() : auftrag.getPeriodOfPerformanceEnd(); final boolean hasDateNotInRange = paymentSchedules.stream() .filter(payment -> payment.getPositionNumber() == pos.getNumber()) .map(PaymentScheduleDO::getScheduleDate) .filter(Objects::nonNull) .anyMatch(date -> date.isBefore(periodOfPerformanceBegin) || date.isAfter(periodOfPerformanceEnd)); if (hasDateNotInRange) { positionsWithDatesNotWithinPop.add(pos.getNumber()); } } if (!positionsWithDatesNotWithinPop.isEmpty()) { final String positions = positionsWithDatesNotWithinPop.stream() .map(Object::toString) .collect(Collectors.joining(", ")); throw new UserException("fibu.auftrag.error.datesInPaymentScheduleNotWithinPeriodOfPerformanceOfPosition", positions); } } }
AuftragDao extends BaseDao<AuftragDO> { void validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition(final AuftragDO auftrag) { final List<PaymentScheduleDO> paymentSchedules = auftrag.getPaymentSchedules(); if (paymentSchedules == null) { return; } final List<Short> positionsWithDatesNotWithinPop = new ArrayList<>(); for (final AuftragsPositionDO pos : auftrag.getPositionenExcludingDeleted()) { final LocalDate periodOfPerformanceBegin = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceBegin() : auftrag.getPeriodOfPerformanceBegin(); final LocalDate periodOfPerformanceEnd = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceEnd() : auftrag.getPeriodOfPerformanceEnd(); final boolean hasDateNotInRange = paymentSchedules.stream() .filter(payment -> payment.getPositionNumber() == pos.getNumber()) .map(PaymentScheduleDO::getScheduleDate) .filter(Objects::nonNull) .anyMatch(date -> date.isBefore(periodOfPerformanceBegin) || date.isAfter(periodOfPerformanceEnd)); if (hasDateNotInRange) { positionsWithDatesNotWithinPop.add(pos.getNumber()); } } if (!positionsWithDatesNotWithinPop.isEmpty()) { final String positions = positionsWithDatesNotWithinPop.stream() .map(Object::toString) .collect(Collectors.joining(", ")); throw new UserException("fibu.auftrag.error.datesInPaymentScheduleNotWithinPeriodOfPerformanceOfPosition", positions); } } AuftragDao(); }
AuftragDao extends BaseDao<AuftragDO> { void validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition(final AuftragDO auftrag) { final List<PaymentScheduleDO> paymentSchedules = auftrag.getPaymentSchedules(); if (paymentSchedules == null) { return; } final List<Short> positionsWithDatesNotWithinPop = new ArrayList<>(); for (final AuftragsPositionDO pos : auftrag.getPositionenExcludingDeleted()) { final LocalDate periodOfPerformanceBegin = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceBegin() : auftrag.getPeriodOfPerformanceBegin(); final LocalDate periodOfPerformanceEnd = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceEnd() : auftrag.getPeriodOfPerformanceEnd(); final boolean hasDateNotInRange = paymentSchedules.stream() .filter(payment -> payment.getPositionNumber() == pos.getNumber()) .map(PaymentScheduleDO::getScheduleDate) .filter(Objects::nonNull) .anyMatch(date -> date.isBefore(periodOfPerformanceBegin) || date.isAfter(periodOfPerformanceEnd)); if (hasDateNotInRange) { positionsWithDatesNotWithinPop.add(pos.getNumber()); } } if (!positionsWithDatesNotWithinPop.isEmpty()) { final String positions = positionsWithDatesNotWithinPop.stream() .map(Object::toString) .collect(Collectors.joining(", ")); throw new UserException("fibu.auftrag.error.datesInPaymentScheduleNotWithinPeriodOfPerformanceOfPosition", positions); } } AuftragDao(); void registerTaskTree(final TaskTree taskTree); @Override String[] getAdditionalSearchFields(); int[] getYears(); Map<Integer, Set<AuftragsPositionVO>> getTaskReferences(); AuftragsStatistik buildStatistik(final List<AuftragDO> list); void calculateInvoicedSum(final Collection<AuftragDO> col); void calculateInvoicedSum(final AuftragDO order); void setContactPerson(final AuftragDO auftrag, final Integer contactPersonId); void setTask(final AuftragsPositionDO position, final Integer taskId); void setKunde(final AuftragDO auftrag, final Integer kundeId); void setProjekt(final AuftragDO auftrag, final Integer projektId); AuftragsPositionDO getAuftragsPosition(final String posString); synchronized int getAbgeschlossenNichtFakturiertAnzahl(); @Override List<AuftragDO> getList(final BaseSearchFilter filter); boolean sendNotificationIfRequired(final AuftragDO auftrag, final OperationType operationType,
                                            final String requestUrl); @SuppressWarnings("unchecked") Integer getNextNumber(); @SuppressWarnings("unchecked") Integer getNextNumber(final AuftragDO auftrag); @Override List<DisplayHistoryEntry> getDisplayHistoryEntries(final AuftragDO obj); @Override boolean contains(final Set<Integer> idSet, final AuftragDO entry); @Override AuftragDO newInstance(); }
AuftragDao extends BaseDao<AuftragDO> { void validateDatesInPaymentScheduleWithinPeriodOfPerformanceOfPosition(final AuftragDO auftrag) { final List<PaymentScheduleDO> paymentSchedules = auftrag.getPaymentSchedules(); if (paymentSchedules == null) { return; } final List<Short> positionsWithDatesNotWithinPop = new ArrayList<>(); for (final AuftragsPositionDO pos : auftrag.getPositionenExcludingDeleted()) { final LocalDate periodOfPerformanceBegin = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceBegin() : auftrag.getPeriodOfPerformanceBegin(); final LocalDate periodOfPerformanceEnd = pos.hasOwnPeriodOfPerformance() ? pos.getPeriodOfPerformanceEnd() : auftrag.getPeriodOfPerformanceEnd(); final boolean hasDateNotInRange = paymentSchedules.stream() .filter(payment -> payment.getPositionNumber() == pos.getNumber()) .map(PaymentScheduleDO::getScheduleDate) .filter(Objects::nonNull) .anyMatch(date -> date.isBefore(periodOfPerformanceBegin) || date.isAfter(periodOfPerformanceEnd)); if (hasDateNotInRange) { positionsWithDatesNotWithinPop.add(pos.getNumber()); } } if (!positionsWithDatesNotWithinPop.isEmpty()) { final String positions = positionsWithDatesNotWithinPop.stream() .map(Object::toString) .collect(Collectors.joining(", ")); throw new UserException("fibu.auftrag.error.datesInPaymentScheduleNotWithinPeriodOfPerformanceOfPosition", positions); } } AuftragDao(); void registerTaskTree(final TaskTree taskTree); @Override String[] getAdditionalSearchFields(); int[] getYears(); Map<Integer, Set<AuftragsPositionVO>> getTaskReferences(); AuftragsStatistik buildStatistik(final List<AuftragDO> list); void calculateInvoicedSum(final Collection<AuftragDO> col); void calculateInvoicedSum(final AuftragDO order); void setContactPerson(final AuftragDO auftrag, final Integer contactPersonId); void setTask(final AuftragsPositionDO position, final Integer taskId); void setKunde(final AuftragDO auftrag, final Integer kundeId); void setProjekt(final AuftragDO auftrag, final Integer projektId); AuftragsPositionDO getAuftragsPosition(final String posString); synchronized int getAbgeschlossenNichtFakturiertAnzahl(); @Override List<AuftragDO> getList(final BaseSearchFilter filter); boolean sendNotificationIfRequired(final AuftragDO auftrag, final OperationType operationType,
                                            final String requestUrl); @SuppressWarnings("unchecked") Integer getNextNumber(); @SuppressWarnings("unchecked") Integer getNextNumber(final AuftragDO auftrag); @Override List<DisplayHistoryEntry> getDisplayHistoryEntries(final AuftragDO obj); @Override boolean contains(final Set<Integer> idSet, final AuftragDO entry); @Override AuftragDO newInstance(); static final UserRightId USER_RIGHT_ID; final static int START_NUMBER; }