From 4ca2e8cd4fd87c141e2a40bb947ce24692ff9bf7 Mon Sep 17 00:00:00 2001 From: Der-Alex-K <18263366+Der-Alex-K@users.noreply.github.com> Date: Tue, 26 Mar 2024 10:55:26 +0100 Subject: [PATCH] Feat/dave 108 export pdf report (#61) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Options der Messstelle werden nun übergeben * neu generiert * OPtionen der Messstelle angebunden * Neu generiert, Groesse der Zeitintervalle wird nun beruecksichtigt * zeitauswahl der spitzenstunde angebunden * rename field * fix error * fix error * darstellungsoptionen der listenausgabe angebunden * Roundingservice erstellt * Titel erweitert * Tests geschrieben * Messstelle Listenausgabe angebunden * fix border * Logik fuer MessstellenPDF's ausgelagert --- .../muenchen/dave/domain/enums/AssetType.java | 3 +- .../DatentabellePdfMessstelleMapper.java | 61 +++++++++++ .../dave/domain/pdf/assets/BaseAsset.java | 1 + .../pdf/assets/MessstelleDatatableAsset.java | 20 ++++ .../pdf/helper/DatentabellePdfZaehldaten.java | 4 + .../pdf/helper/DatentabellePdfZaehldatum.java | 2 + .../FillPdfBeanMessstelleService.java | 98 +++++++++++++++++ .../services/pdfgenerator/ReportService.java | 22 +++- .../report/datatable-report-table.mustache | 10 ++ .../DatentabellePdfMessstelleMapperTests.java | 102 ++++++++++++++++++ 10 files changed, 318 insertions(+), 5 deletions(-) create mode 100644 src/main/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapper.java create mode 100644 src/main/java/de/muenchen/dave/domain/pdf/assets/MessstelleDatatableAsset.java create mode 100644 src/main/java/de/muenchen/dave/services/pdfgenerator/FillPdfBeanMessstelleService.java create mode 100644 src/test/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapperTests.java diff --git a/src/main/java/de/muenchen/dave/domain/enums/AssetType.java b/src/main/java/de/muenchen/dave/domain/enums/AssetType.java index 4ec71598..33360da6 100644 --- a/src/main/java/de/muenchen/dave/domain/enums/AssetType.java +++ b/src/main/java/de/muenchen/dave/domain/enums/AssetType.java @@ -7,7 +7,8 @@ @Getter public enum AssetType { TEXT("TEXT"), HEADING1("HEADING1"), HEADING2("HEADING2"), HEADING3("HEADING3"), HEADING4("HEADING4"), HEADING5("HEADING5"), IMAGE("IMAGE"), PAGEBREAK( - "PAGEBREAK"), NEWLINE("NEWLINE"), LOGO("LOGO"), DATATABLE("DATATABLE"), ZAEHLUNGSKENNGROESSEN("ZAEHLUNGSKENNGROESSEN"); + "PAGEBREAK"), NEWLINE("NEWLINE"), LOGO( + "LOGO"), DATATABLE("DATATABLE"), DATATABLE_MESSSTELLE("DATATABLE_MESSSTELLE"), ZAEHLUNGSKENNGROESSEN("ZAEHLUNGSKENNGROESSEN"); private final String type; } diff --git a/src/main/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapper.java b/src/main/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapper.java new file mode 100644 index 00000000..cdbaca24 --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapper.java @@ -0,0 +1,61 @@ +package de.muenchen.dave.domain.mapper; + +import de.muenchen.dave.domain.dtos.laden.messwerte.LadeMesswerteDTO; +import de.muenchen.dave.domain.dtos.messstelle.FahrzeugOptionsDTO; +import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldaten; +import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldatum; +import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.mapstruct.AfterMapping; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.Mappings; + +/** + * Mapper wird benötigt, da Mustache nicht mit @JsonGetter umgehen kann. + * Mustache ist eine Sprache für Templates aus denen die für die PDF benötigten HTML Strings + * entstehen. + */ +@Mapper(componentModel = "spring") +public interface DatentabellePdfMessstelleMapper { + + String UHRZEIT_23_59 = "23:59"; + String UHRZEIT_24_00 = "24:00"; + + @Mappings({ + @Mapping(target = "endeUhrzeit", source = "dto.endeUhrzeit", dateFormat = "HH:mm"), + @Mapping(target = "startUhrzeit", source = "dto.startUhrzeit", dateFormat = "HH:mm"), + }) + DatentabellePdfZaehldatum ladeMesswerteDTO2bean(LadeMesswerteDTO dto); + + @AfterMapping + default void ladeMesswerteDTO2beanAfterMapping(@MappingTarget DatentabellePdfZaehldatum bean, LadeMesswerteDTO dto) { + if (StringUtils.equals(bean.getEndeUhrzeit(), UHRZEIT_23_59)) { + bean.setEndeUhrzeit(UHRZEIT_24_00); + } + } + + List ladeMesswerteDTOList2beanList(List LadeMesswerteDTOList); + + @Mapping(target = "activeTabsFahrzeugtypen", ignore = true) + @Mapping(target = "activeTabsFahrzeugklassen", ignore = true) + @Mapping(target = "activeTabsAnteile", ignore = true) + @Mapping(target = "showPkwEinheiten", ignore = true) + @Mapping(target = "zaehldatenList", ignore = true) + @Mapping(target = "showPersonenkraftwagen", source = "personenkraftwagen") + @Mapping(target = "showLastkraftwagen", source = "lastkraftwagen") + @Mapping(target = "showLastzuege", source = "lastzuege") + @Mapping(target = "showLieferwagen", source = "lieferwagen") + @Mapping(target = "showBusse", source = "busse") + @Mapping(target = "showKraftraeder", source = "kraftraeder") + @Mapping(target = "showRadverkehr", source = "radverkehr") + @Mapping(target = "showFussverkehr", source = "fussverkehr") + @Mapping(target = "showKraftfahrzeugverkehr", source = "kraftfahrzeugverkehr") + @Mapping(target = "showSchwerverkehr", source = "schwerverkehr") + @Mapping(target = "showGueterverkehr", source = "gueterverkehr") + @Mapping(target = "showSchwerverkehrsanteilProzent", source = "schwerverkehrsanteilProzent") + @Mapping(target = "showGueterverkehrsanteilProzent", source = "gueterverkehrsanteilProzent") + DatentabellePdfZaehldaten fahrzeugOptionsToDatentabellePdfZaehldaten(final FahrzeugOptionsDTO options); + +} diff --git a/src/main/java/de/muenchen/dave/domain/pdf/assets/BaseAsset.java b/src/main/java/de/muenchen/dave/domain/pdf/assets/BaseAsset.java index ca237f77..c44f215c 100644 --- a/src/main/java/de/muenchen/dave/domain/pdf/assets/BaseAsset.java +++ b/src/main/java/de/muenchen/dave/domain/pdf/assets/BaseAsset.java @@ -19,6 +19,7 @@ @JsonSubTypes.Type(value = NewlineAsset.class, name = "NEWLINE"), @JsonSubTypes.Type(value = LogoAsset.class, name = "LOGO"), @JsonSubTypes.Type(value = DatatableAsset.class, name = "DATATABLE"), + @JsonSubTypes.Type(value = MessstelleDatatableAsset.class, name = "DATATABLE_MESSSTELLE"), @JsonSubTypes.Type(value = ZaehlungskenngroessenAsset.class, name = "ZAEHLUNGSKENNGROESSEN") }) @Data public class BaseAsset implements MustacheBean { diff --git a/src/main/java/de/muenchen/dave/domain/pdf/assets/MessstelleDatatableAsset.java b/src/main/java/de/muenchen/dave/domain/pdf/assets/MessstelleDatatableAsset.java new file mode 100644 index 00000000..3f9cac22 --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/pdf/assets/MessstelleDatatableAsset.java @@ -0,0 +1,20 @@ +package de.muenchen.dave.domain.pdf.assets; + +import de.muenchen.dave.domain.dtos.messstelle.MessstelleOptionsDTO; +import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldaten; +import lombok.Data; + +@Data +public class MessstelleDatatableAsset extends BaseAsset { + + private DatentabellePdfZaehldaten datentabelleZaehldaten; + + private String randomTableId; + + private String text; + + private MessstelleOptionsDTO options; + + private String mstId; + +} diff --git a/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldaten.java b/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldaten.java index 742ad4e8..63f16483 100644 --- a/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldaten.java +++ b/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldaten.java @@ -20,6 +20,8 @@ public class DatentabellePdfZaehldaten { private boolean showLastzuege; + private boolean showLieferwagen; + private boolean showBusse; private boolean showKraftraeder; @@ -116,6 +118,8 @@ public String getRightBorderFahrzeugtypen() { return "kraftraeder"; } else if (isShowBusse()) { return "busse"; + } else if (isShowLieferwagen()) { + return "lieferwagen"; } else if (isShowLastzuege()) { return "lastzuege"; } else if (isShowLastkraftwagen()) { diff --git a/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldatum.java b/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldatum.java index 9bde4a17..fc5ba535 100644 --- a/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldatum.java +++ b/src/main/java/de/muenchen/dave/domain/pdf/helper/DatentabellePdfZaehldatum.java @@ -18,6 +18,8 @@ public class DatentabellePdfZaehldatum { private Integer lastzuege; + private Integer lfw; + private Integer busse; private Integer kraftraeder; diff --git a/src/main/java/de/muenchen/dave/services/pdfgenerator/FillPdfBeanMessstelleService.java b/src/main/java/de/muenchen/dave/services/pdfgenerator/FillPdfBeanMessstelleService.java new file mode 100644 index 00000000..83885ae8 --- /dev/null +++ b/src/main/java/de/muenchen/dave/services/pdfgenerator/FillPdfBeanMessstelleService.java @@ -0,0 +1,98 @@ +package de.muenchen.dave.services.pdfgenerator; + +import de.muenchen.dave.domain.dtos.laden.messwerte.LadeMesswerteDTO; +import de.muenchen.dave.domain.dtos.laden.messwerte.LadeMesswerteListenausgabeDTO; +import de.muenchen.dave.domain.dtos.messstelle.FahrzeugOptionsDTO; +import de.muenchen.dave.domain.dtos.messstelle.MessstelleOptionsDTO; +import de.muenchen.dave.domain.mapper.DatentabellePdfMessstelleMapper; +import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldaten; +import de.muenchen.dave.services.messstelle.MesswerteService; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class FillPdfBeanMessstelleService { + + private final MesswerteService messwerteService; + private final DatentabellePdfMessstelleMapper datentabellePdfMessstelleMapper; + + /** + * Diese Methode befüllt ein Objekt der Klasse {@link DatentabellePdfZaehldaten} und gibt dieses + * zurück. + * + * @param options Die im Frontend ausgewählten Optionen. + * @param mstId ID der im Frontend ausgewählten Messstelle + * @return Befülltes Objekt vom Typ {@link DatentabellePdfZaehldaten}. + */ + public DatentabellePdfZaehldaten getDatentabellePdf(final MessstelleOptionsDTO options, final String mstId) { + final LadeMesswerteListenausgabeDTO zaehldatenTable = messwerteService.ladeMesswerte(mstId, options).getZaehldatenTable(); + final List zaehlwerteDtos = zaehldatenTable.getZaehldaten(); + + final FahrzeugOptionsDTO optionsFahrzeuge = options.getFahrzeuge(); + final DatentabellePdfZaehldaten datentabellePdfZaehldaten = this.datentabellePdfMessstelleMapper + .fahrzeugOptionsToDatentabellePdfZaehldaten(optionsFahrzeuge); + datentabellePdfZaehldaten.setActiveTabsFahrzeugtypen(this.calcActiveTabsFahrzeugtypen(optionsFahrzeuge)); + datentabellePdfZaehldaten.setActiveTabsFahrzeugklassen(this.calcActiveTabsFahrzeugklassen(optionsFahrzeuge)); + datentabellePdfZaehldaten.setActiveTabsAnteile(this.calcActiveTabsAnteile(optionsFahrzeuge)); + + datentabellePdfZaehldaten.setZaehldatenList(this.datentabellePdfMessstelleMapper.ladeMesswerteDTOList2beanList(zaehlwerteDtos)); + return datentabellePdfZaehldaten; + } + + private int calcActiveTabsFahrzeugtypen(final FahrzeugOptionsDTO optionsDTO) { + int activeTabsFahrzeugtypen = 0; + if (optionsDTO.isPersonenkraftwagen()) { + activeTabsFahrzeugtypen++; + } + if (optionsDTO.isLastkraftwagen()) { + activeTabsFahrzeugtypen++; + } + if (optionsDTO.isLastzuege()) { + activeTabsFahrzeugtypen++; + } + if (optionsDTO.isLieferwagen()) { + activeTabsFahrzeugtypen++; + } + if (optionsDTO.isBusse()) { + activeTabsFahrzeugtypen++; + } + if (optionsDTO.isKraftraeder()) { + activeTabsFahrzeugtypen++; + } + if (optionsDTO.isRadverkehr()) { + activeTabsFahrzeugtypen++; + } + if (optionsDTO.isFussverkehr()) { + activeTabsFahrzeugtypen++; + } + return activeTabsFahrzeugtypen; + } + + private int calcActiveTabsFahrzeugklassen(final FahrzeugOptionsDTO optionsDTO) { + int activeTabsFahrzeugklasse = 0; + if (optionsDTO.isKraftfahrzeugverkehr()) { + activeTabsFahrzeugklasse++; + } + if (optionsDTO.isSchwerverkehr()) { + activeTabsFahrzeugklasse++; + } + if (optionsDTO.isGueterverkehr()) { + activeTabsFahrzeugklasse++; + } + return activeTabsFahrzeugklasse; + } + + private int calcActiveTabsAnteile(final FahrzeugOptionsDTO optionsDTO) { + int activeTabsAnteile = 0; + if (optionsDTO.isSchwerverkehrsanteilProzent()) { + activeTabsAnteile++; + } + if (optionsDTO.isGueterverkehrsanteilProzent()) { + activeTabsAnteile++; + } + return activeTabsAnteile; + } + +} diff --git a/src/main/java/de/muenchen/dave/services/pdfgenerator/ReportService.java b/src/main/java/de/muenchen/dave/services/pdfgenerator/ReportService.java index 2d2c0e8a..fa52ac2b 100644 --- a/src/main/java/de/muenchen/dave/services/pdfgenerator/ReportService.java +++ b/src/main/java/de/muenchen/dave/services/pdfgenerator/ReportService.java @@ -10,6 +10,7 @@ import de.muenchen.dave.domain.pdf.assets.BaseAsset; import de.muenchen.dave.domain.pdf.assets.DatatableAsset; import de.muenchen.dave.domain.pdf.assets.LogoAsset; +import de.muenchen.dave.domain.pdf.assets.MessstelleDatatableAsset; import de.muenchen.dave.domain.pdf.assets.ZaehlungskenngroessenAsset; import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldaten; import de.muenchen.dave.domain.pdf.helper.ZaehlungskenngroessenData; @@ -47,6 +48,7 @@ public class ReportService { private static final String PDF_TEMPLATES_REPORT_PARTS_DATENTABELLE_CSS_FIXED = "/pdf/templates/parts/report/datatable-fixed-css.mustache"; private final GeneratePdfService generatePdfService; private final FillPdfBeanService fillPdfBeanService; + private final FillPdfBeanMessstelleService fillPdfBeanMessstelleService; private final ProcessZaehldatenService processZaehldatenService; private final ZaehlstelleIndexService indexService; private final LadeZaehldatumMapper ladeZaehldatumMapper; @@ -69,10 +71,12 @@ public class ReportService { public ReportService(final GeneratePdfService generatePdfService, final FillPdfBeanService fillPdfBeanService, + final FillPdfBeanMessstelleService fillPdfBeanMessstelleService, final ProcessZaehldatenService processZaehldatenService, final ZaehlstelleIndexService indexService, final LadeZaehldatumMapper ladeZaehldatumMapper) { this.fillPdfBeanService = fillPdfBeanService; + this.fillPdfBeanMessstelleService = fillPdfBeanMessstelleService; this.generatePdfService = generatePdfService; this.processZaehldatenService = processZaehldatenService; this.indexService = indexService; @@ -113,10 +117,8 @@ private String generateReportCss(final List assetList) { final StringBuilder sb = new StringBuilder(); assetList.stream() - .filter(asset -> asset.getType().equals(AssetType.DATATABLE)) - .forEach(asset -> { - sb.append(this.generatePdfService.getHtml(this.dataTableCssMustacheCustom, asset)); - }); + .filter(asset -> asset.getType().equals(AssetType.DATATABLE) || asset.getType().equals(AssetType.DATATABLE_MESSSTELLE)) + .forEach(asset -> sb.append(this.generatePdfService.getHtml(this.dataTableCssMustacheCustom, asset))); return sb.toString(); } @@ -157,6 +159,18 @@ public String generateReportBody(final List assetList) { } catch (final DataNotFoundException dataNotFoundException) { sb.append("Die Datentabelle konnte aufgrund eines technischen Fehlers nicht angezeigt werden."); } + } else if (asset.getType().equals(AssetType.DATATABLE_MESSSTELLE)) { + final MessstelleDatatableAsset datatableAsset = (MessstelleDatatableAsset) asset; + try { + final DatentabellePdfZaehldaten datentabellePdfZaehldaten = this.fillPdfBeanMessstelleService + .getDatentabellePdf(datatableAsset.getOptions(), datatableAsset.getMstId()); + datatableAsset.setDatentabelleZaehldaten(datentabellePdfZaehldaten); + datatableAsset.setRandomTableId(UUID.randomUUID().toString()); + + sb.append(this.generatePdfService.getHtml(this.dataTableMustache, datatableAsset)); + } catch (final Exception exception) { + sb.append("Die Datentabelle konnte aufgrund eines technischen Fehlers nicht angezeigt werden."); + } } else if (asset.getType().equals(AssetType.ZAEHLUNGSKENNGROESSEN)) { final ZaehlungskenngroessenAsset zaehlungskenngroessenAsset = (ZaehlungskenngroessenAsset) asset; try { diff --git a/src/main/resources/pdf/templates/parts/report/datatable-report-table.mustache b/src/main/resources/pdf/templates/parts/report/datatable-report-table.mustache index 3e941859..14948a2a 100644 --- a/src/main/resources/pdf/templates/parts/report/datatable-report-table.mustache +++ b/src/main/resources/pdf/templates/parts/report/datatable-report-table.mustache @@ -51,6 +51,11 @@ Lz {{/showLastzuege}} + {{#showLieferwagen}} + + Lfw + + {{/showLieferwagen}} {{#showBusse}} Bus @@ -124,6 +129,11 @@ {{lastzuege}} {{/showLastzuege}} + {{#showLieferwagen}} + + {{lfw}} + + {{/showLieferwagen}} {{#showBusse}} {{busse}} diff --git a/src/test/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapperTests.java b/src/test/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapperTests.java new file mode 100644 index 00000000..fd85adcb --- /dev/null +++ b/src/test/java/de/muenchen/dave/domain/mapper/DatentabellePdfMessstelleMapperTests.java @@ -0,0 +1,102 @@ +package de.muenchen.dave.domain.mapper; + +import de.muenchen.dave.domain.dtos.laden.messwerte.LadeMesswerteDTO; +import de.muenchen.dave.domain.dtos.messstelle.FahrzeugOptionsDTO; +import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldaten; +import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldatum; +import java.math.BigDecimal; +import java.time.LocalTime; +import lombok.extern.slf4j.Slf4j; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +@Slf4j +class DatentabellePdfMessstelleMapperTests { + + private final DatentabellePdfMessstelleMapper mapper = new DatentabellePdfMessstelleMapperImpl(); + + @Test + void fahrzeugOptionsToDatentabellePdfZaehldaten() { + final FahrzeugOptionsDTO fahrzeugOptionsDTO = new FahrzeugOptionsDTO(); + fahrzeugOptionsDTO.setKraftfahrzeugverkehr(false); + fahrzeugOptionsDTO.setSchwerverkehr(true); + fahrzeugOptionsDTO.setGueterverkehr(false); + fahrzeugOptionsDTO.setSchwerverkehrsanteilProzent(true); + fahrzeugOptionsDTO.setGueterverkehrsanteilProzent(false); + fahrzeugOptionsDTO.setRadverkehr(true); + fahrzeugOptionsDTO.setFussverkehr(false); + fahrzeugOptionsDTO.setLastkraftwagen(true); + fahrzeugOptionsDTO.setLastzuege(false); + fahrzeugOptionsDTO.setBusse(true); + fahrzeugOptionsDTO.setKraftraeder(false); + fahrzeugOptionsDTO.setPersonenkraftwagen(true); + fahrzeugOptionsDTO.setLieferwagen(false); + + final DatentabellePdfZaehldaten expected = new DatentabellePdfZaehldaten(); + expected.setShowPersonenkraftwagen(fahrzeugOptionsDTO.isPersonenkraftwagen()); + expected.setShowLastkraftwagen(fahrzeugOptionsDTO.isLastkraftwagen()); + expected.setShowLastzuege(fahrzeugOptionsDTO.isLastzuege()); + expected.setShowLieferwagen(fahrzeugOptionsDTO.isLieferwagen()); + expected.setShowBusse(fahrzeugOptionsDTO.isBusse()); + expected.setShowKraftraeder(fahrzeugOptionsDTO.isKraftraeder()); + expected.setShowRadverkehr(fahrzeugOptionsDTO.isRadverkehr()); + expected.setShowFussverkehr(fahrzeugOptionsDTO.isFussverkehr()); + expected.setShowKraftfahrzeugverkehr(fahrzeugOptionsDTO.isKraftfahrzeugverkehr()); + expected.setShowSchwerverkehr(fahrzeugOptionsDTO.isSchwerverkehr()); + expected.setShowGueterverkehr(fahrzeugOptionsDTO.isGueterverkehr()); + expected.setShowSchwerverkehrsanteilProzent(fahrzeugOptionsDTO.isSchwerverkehrsanteilProzent()); + expected.setShowGueterverkehrsanteilProzent(fahrzeugOptionsDTO.isGueterverkehrsanteilProzent()); + + Assertions.assertThat(mapper.fahrzeugOptionsToDatentabellePdfZaehldaten(fahrzeugOptionsDTO)) + .isNotNull() + .usingRecursiveComparison() + .ignoringFields("activeTabsFahrzeugtypen", "activeTabsFahrzeugklassen", "activeTabsAnteile", "showPkwEinheiten") + .isEqualTo(expected); + } + + @Test + void ladeMesswerteDTO2bean() { + final LadeMesswerteDTO dto = new LadeMesswerteDTO(); + dto.setSortingIndex(1); + dto.setType("Stunde"); + dto.setStartUhrzeit(LocalTime.of(0, 0)); + dto.setEndeUhrzeit(LocalTime.of(0, 15)); + dto.setPkw(1); + dto.setLkw(2); + dto.setLfw(3); + dto.setLastzuege(4); + dto.setBusse(5); + dto.setKraftraeder(6); + dto.setFahrradfahrer(7); + dto.setFussgaenger(8); + dto.setKfz(9); + dto.setSchwerverkehr(10); + dto.setGueterverkehr(11); + dto.setAnteilSchwerverkehrAnKfzProzent(1.2); + dto.setAnteilGueterverkehrAnKfzProzent(1.3); + + final DatentabellePdfZaehldatum expected = new DatentabellePdfZaehldatum(); + expected.setType(dto.getType()); + expected.setStartUhrzeit("00:00"); + expected.setEndeUhrzeit("00:15"); + expected.setPkw(dto.getPkw()); + expected.setLkw(dto.getLkw()); + expected.setLastzuege(dto.getLastzuege()); + expected.setLfw(dto.getLfw()); + expected.setBusse(dto.getBusse()); + expected.setKraftraeder(dto.getKraftraeder()); + expected.setFahrradfahrer(dto.getFahrradfahrer()); + expected.setFussgaenger(dto.getFussgaenger()); + expected.setKfz(BigDecimal.valueOf(dto.getKfz())); + expected.setSchwerverkehr(BigDecimal.valueOf(dto.getSchwerverkehr())); + expected.setGueterverkehr(BigDecimal.valueOf(dto.getGueterverkehr())); + expected.setAnteilSchwerverkehrAnKfzProzent(BigDecimal.valueOf(dto.getAnteilSchwerverkehrAnKfzProzent())); + expected.setAnteilGueterverkehrAnKfzProzent(BigDecimal.valueOf(dto.getAnteilGueterverkehrAnKfzProzent())); + + Assertions.assertThat(this.mapper.ladeMesswerteDTO2bean(dto)) + .isNotNull() + .usingRecursiveComparison() + .ignoringFields("pkwEinheiten", "gesamt") + .isEqualTo(expected); + } +}