diff --git a/src/main/java/com/gepardec/mega/domain/model/Bill.java b/src/main/java/com/gepardec/mega/domain/model/Bill.java deleted file mode 100644 index 51f02d0dc..000000000 --- a/src/main/java/com/gepardec/mega/domain/model/Bill.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.gepardec.mega.domain.model; - -import com.gepardec.mega.db.entity.common.PaymentMethodType; - -import java.time.LocalDate; - -public class Bill { - private final LocalDate billDate; - - private final Double bruttoValue; - - private final String billType; - - private final PaymentMethodType paymentMethodType; - - private final String projectName; - - private final String attachmentBase64String; - private final String attachmentFileName; - - - private Bill(Builder builder){ - this.billDate = builder.billDate; - this.bruttoValue = builder.bruttoValue; - this.billType = builder.billType; - this.paymentMethodType = builder.paymentMethodType; - this.projectName = builder.projectName; - this.attachmentBase64String = builder.attachmentBase64String; - this.attachmentFileName = builder.attachmentFileName; - } - - public static Builder builder() { - return Builder.aBill(); - } - - public LocalDate getBillDate() { - return billDate; - } - - public Double getBruttoValue() { - return bruttoValue; - } - - public String getBillType() { - return billType; - } - - public PaymentMethodType getPaymentMethodType() { - return paymentMethodType; - } - - public String getProjectName() { - return projectName; - } - - public String getAttachmentBase64String() { - return attachmentBase64String; - } - - public String getAttachmentFileName() {return attachmentFileName;} - - public static final class Builder { - private LocalDate billDate; - - private Double bruttoValue; - - private String billType; - - private PaymentMethodType paymentMethodType; - - private String projectName; - - private String attachmentBase64String; - private String attachmentFileName; - - private Builder(){} - - public static Builder aBill(){return new Builder();} - - public Builder billDate(LocalDate billDate) { - this.billDate = billDate; - return this; - } - - public Builder bruttoValue(Double bruttoValue) { - this.bruttoValue = bruttoValue; - return this; - } - - public Builder billType(String billType) { - this.billType = billType; - return this; - } - - public Builder paymentMethodType(PaymentMethodType paymentMethodType) { - this.paymentMethodType = paymentMethodType; - return this; - } - - public Builder projectName(String projectName) { - this.projectName = projectName; - return this; - } - - public Builder attachmentBase64(String attachmentBase64String){ - this.attachmentBase64String = attachmentBase64String; - return this; - } - - public Builder attachmentFileName(String attachmentFileName) { - this.attachmentFileName = attachmentFileName; - return this; - } - - public Bill build() { - return new Bill(this); - } - } -} diff --git a/src/main/java/com/gepardec/mega/rest/mapper/BillMapper.java b/src/main/java/com/gepardec/mega/rest/mapper/BillMapper.java deleted file mode 100644 index 7a6b6798e..000000000 --- a/src/main/java/com/gepardec/mega/rest/mapper/BillMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.gepardec.mega.rest.mapper; - -import com.gepardec.mega.domain.model.Bill; -import com.gepardec.mega.rest.model.BillDto; -import jakarta.enterprise.context.ApplicationScoped; - -@ApplicationScoped -public class BillMapper implements DtoMapper { - @Override - public BillDto mapToDto(Bill object) { - return BillDto.builder() - .billDate(object.getBillDate()) - .billType(object.getBillType()) - .bruttoValue(object.getBruttoValue()) - .paymentMethodType(object.getPaymentMethodType()) - .projectName(object.getProjectName()) - .attachmentBase64(object.getAttachmentBase64String()) - .attachmentFileName(object.getAttachmentFileName()) - .build(); - } - - @Override - public Bill mapToDomain(BillDto object) { - return Bill.builder() - .billDate(object.getBillDate()) - .billType(object.getBillType()) - .bruttoValue(object.getBruttoValue()) - .paymentMethodType(object.getPaymentMethodType()) - .projectName(object.getProjectName()) - .attachmentBase64(object.getAttachmentBase64String()) - .attachmentFileName(object.getAttachmentFileName()) - .build(); - } -} diff --git a/src/main/java/com/gepardec/mega/rest/model/BillDto.java b/src/main/java/com/gepardec/mega/rest/model/BillDto.java deleted file mode 100644 index 30a3efc9a..000000000 --- a/src/main/java/com/gepardec/mega/rest/model/BillDto.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.gepardec.mega.rest.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.gepardec.mega.db.entity.common.PaymentMethodType; -import java.time.LocalDate; -import java.util.Objects; - -@JsonIgnoreProperties(ignoreUnknown = true) -@JsonDeserialize(builder = BillDto.Builder.class) -public class BillDto { - - @JsonSerialize(using = LocalDateSerializer.class) - @JsonDeserialize(using = LocalDateDeserializer.class) - private final LocalDate billDate; - - private final Double bruttoValue; - - private final String billType; - - private final PaymentMethodType paymentMethodType; - - private final String projectName; - - private final String attachmentBase64String; - - private final String attachmentFileName; - - - private BillDto(Builder builder){ - this.billDate = builder.billDate; - this.bruttoValue = builder.bruttoValue; - this.billType = builder.billType; - this.paymentMethodType = builder.paymentMethodType; - this.projectName = builder.projectName; - this.attachmentBase64String = builder.attachmentBase64String; - this.attachmentFileName = builder.attachmentFileName; - } - - public static Builder builder() {return Builder.aBillDto();} - - - public LocalDate getBillDate() { - return billDate; - } - - public Double getBruttoValue() { - return bruttoValue; - } - - public String getBillType() { - return billType; - } - - public PaymentMethodType getPaymentMethodType() { - return paymentMethodType; - } - - public String getProjectName() { - return projectName; - } - - public String getAttachmentBase64String() { - return attachmentBase64String; - } - - public String getAttachmentFileName() { return attachmentFileName; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - BillDto billDto = (BillDto) o; - return Objects.equals(billDate, billDto.billDate) && Objects.equals(bruttoValue, billDto.bruttoValue) && Objects.equals(billType, billDto.billType) && paymentMethodType == billDto.paymentMethodType && Objects.equals(projectName, billDto.projectName) && Objects.equals(attachmentBase64String, billDto.attachmentBase64String); - } - - @Override - public int hashCode() { - return Objects.hash(billDate, bruttoValue, billType, paymentMethodType, projectName, attachmentBase64String); - } - - @JsonPOJOBuilder(withPrefix = "") - public static final class Builder { - @JsonSerialize(using = LocalDateSerializer.class) - @JsonDeserialize(using = LocalDateDeserializer.class) - private LocalDate billDate; - - private Double bruttoValue; - - private String billType; - - private PaymentMethodType paymentMethodType; - - private String projectName; - - private String attachmentBase64String; - - private String attachmentFileName; - - private Builder(){} - - public static Builder aBillDto(){return new Builder();} - - public Builder billDate(LocalDate billDate) { - this.billDate = billDate; - return this; - } - - public Builder bruttoValue(Double bruttoValue) { - this.bruttoValue = bruttoValue; - return this; - } - - public Builder billType(String billType) { - this.billType = billType; - return this; - } - - public Builder paymentMethodType(PaymentMethodType paymentMethodType) { - this.paymentMethodType = paymentMethodType; - return this; - } - - public Builder projectName(String projectName) { - this.projectName = projectName; - return this; - } - - public Builder attachmentBase64(String attachmentBase64String){ - this.attachmentBase64String = attachmentBase64String; - return this; - } - - public Builder attachmentFileName(String attachmentFileName) { - this.attachmentFileName = attachmentFileName; - return this; - } - - public BillDto build() { - return new BillDto(this); - } - } - - - -} diff --git a/src/main/java/com/gepardec/mega/zep/impl/ZepRestServiceImpl.java b/src/main/java/com/gepardec/mega/zep/impl/ZepRestServiceImpl.java index fa43b148a..03d88945c 100644 --- a/src/main/java/com/gepardec/mega/zep/impl/ZepRestServiceImpl.java +++ b/src/main/java/com/gepardec/mega/zep/impl/ZepRestServiceImpl.java @@ -22,8 +22,14 @@ import com.gepardec.mega.zep.rest.dto.ZepReceipt; import com.gepardec.mega.zep.rest.dto.ZepReceiptAttachment; import com.gepardec.mega.zep.rest.dto.ZepRegularWorkingTimes; -import com.gepardec.mega.zep.rest.mapper.Mapper; +import com.gepardec.mega.zep.rest.mapper.AbsenceMapper; +import com.gepardec.mega.zep.rest.mapper.ActiveMapper; +import com.gepardec.mega.zep.rest.mapper.EmployeeMapper; import com.gepardec.mega.zep.rest.mapper.ProjectEmployeesMapper; +import com.gepardec.mega.zep.rest.mapper.ProjectEntryMapper; +import com.gepardec.mega.zep.rest.mapper.ProjectMapper; +import com.gepardec.mega.zep.rest.mapper.ProjectTimeMapper; +import com.gepardec.mega.zep.rest.mapper.RegularWorkingHoursMapMapper; import com.gepardec.mega.zep.rest.service.AbsenceService; import com.gepardec.mega.zep.rest.service.AttendanceService; import com.gepardec.mega.zep.rest.service.EmployeeService; @@ -41,18 +47,14 @@ import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.DayOfWeek; -import java.time.Duration; import java.time.LocalDate; import java.time.YearMonth; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.stream.IntStream; - @ApplicationScoped @Rest public class ZepRestServiceImpl implements ZepService { @@ -73,7 +75,7 @@ public class ZepRestServiceImpl implements ZepService { AbsenceService absenceService; @Inject - Mapper absenceMapper; + AbsenceMapper absenceMapper; @Inject RegularWorkingTimesService regularWorkingTimesService; @@ -85,25 +87,25 @@ public class ZepRestServiceImpl implements ZepService { DateHelperService dateHelperService; @Inject - Mapper employeeMapper; + EmployeeMapper employeeMapper; @Inject - Mapper projectEntryMapper; + ProjectEntryMapper projectEntryMapper; @Inject - Mapper attendanceMapper; + ProjectTimeMapper projectTimeMapper; @Inject - Mapper projectMapper; + ProjectMapper projectMapper; @Inject - Mapper, List> projectEmployeesMapper; + ProjectEmployeesMapper projectEmployeesMapper; @Inject - Mapper, ZepRegularWorkingTimes> regularWorkingTimesMapper; + RegularWorkingHoursMapMapper regularWorkingTimesMapper; @Inject - Mapper> activeEmployeeMapper; + ActiveMapper activeEmployeeMapper; @Inject Logger logger; @@ -186,7 +188,7 @@ public List getProjectTimesForEmployeePerProject(String project, Lo logger.debug("Retrieving attendance of user %s of project %d from ZEP".formatted(projectEmployee.username(), projectId)); allZepAttendancesForProject.addAll(attendanceService.getAttendanceForUserProjectAndMonth(projectEmployee.username(), curDate, projectId)); }); - return attendanceMapper.mapList(allZepAttendancesForProject); + return projectTimeMapper.mapList(allZepAttendancesForProject); } @Override @@ -223,7 +225,7 @@ public List getAbsenceForEmployee(Employee employee, LocalDate date public List getBillableForEmployee(Employee employee, LocalDate date) { logger.debug("Retrieving billable entries of employee %s from ZEP".formatted(employee.getUserId())); List projectTimes = attendanceService.getBillableAttendancesForUserAndMonth(employee.getUserId(), date); - return attendanceMapper.mapList(projectTimes); + return projectTimeMapper.mapList(projectTimes); } @Override @@ -237,7 +239,7 @@ public List getAllProjectsForMonthAndEmployee(Employee empl Optional employeeRetrieved = zepEmployeeService.getZepEmployeeByUsername(employee.getUserId()); List resultProjectHoursSummary = new ArrayList<>(); - if(employeeRetrieved.isPresent()) { + if (employeeRetrieved.isPresent()) { resultProjectHoursSummary = getProjectsForMonthAndEmployeeInternal(employeeRetrieved.get(), yearMonth); } return resultProjectHoursSummary; @@ -249,13 +251,13 @@ public double getDoctorsVisitingTimeForMonthAndEmployee(Employee employee, YearM LocalDate startDate = DateUtils.parseDate(startDateString); List doctorsAttendances = attendanceService.getAttendanceForUserProjectAndMonth(employee.getUserId(), startDate, ProjectTaskType.PROJECT_INTERNAL.getId()) - .stream() - .filter(attendance -> attendance.projectTaskId().equals(ProjectTaskType.TASK_DOCTOR_VISIT.getId())) - .toList(); + .stream() + .filter(attendance -> attendance.projectTaskId().equals(ProjectTaskType.TASK_DOCTOR_VISIT.getId())) + .toList(); return doctorsAttendances.stream() - .mapToDouble(ZepAttendance::duration) - .sum(); + .mapToDouble(ZepAttendance::duration) + .sum(); } private List getProjectsForMonthAndEmployeeInternal(ZepEmployee employee, YearMonth yearMonth) { @@ -268,14 +270,14 @@ private List getProjectsForMonthAndEmployeeInternal(ZepEmpl projectsRetrieved.forEach( project -> { Optional projectEmployee = projectService.getProjectEmployeesForId(project.id()) - .stream() - .filter(e -> e.username().equals(employee.username())) - .findFirst(); - if(projectEmployee.isEmpty()) { + .stream() + .filter(e -> e.username().equals(employee.username())) + .findFirst(); + if (projectEmployee.isEmpty()) { return; } List attendancesForEmployeeAndProject = attendanceService.getAttendanceForUserProjectAndMonth(projectEmployee.get().username(), dateForRequest, project.id()); - if(!attendancesForEmployeeAndProject.isEmpty()){ + if (!attendancesForEmployeeAndProject.isEmpty()) { Optional optionalProjectHoursSummary = createProjectsHoursSummary(attendancesForEmployeeAndProject, project); optionalProjectHoursSummary.ifPresent(resultProjectHoursSummary::add); } @@ -290,39 +292,41 @@ private Optional createProjectsHoursSummary(List !a.billable()) - .mapToDouble(ZepAttendance::duration) - .sum(); + nonBillableHoursSum += attendances.stream() + .filter(a -> !a.billable()) + .mapToDouble(ZepAttendance::duration) + .sum(); - double totalHours = Double.sum(billableHoursSum, nonBillableHoursSum); + double totalHours = Double.sum(billableHoursSum, nonBillableHoursSum); - if(!(Double.compare(totalHours, 0.0d) == 0)){ - chargeability = billableHoursSum/totalHours; - chargeability = BigDecimal.valueOf(chargeability) - .setScale(2, RoundingMode.HALF_UP) - .doubleValue(); - } + if (!(Double.compare(totalHours, 0.0d) == 0)) { + chargeability = billableHoursSum / totalHours; + chargeability = BigDecimal.valueOf(chargeability) + .setScale(2, RoundingMode.HALF_UP) + .doubleValue(); + } - return Optional.of(ProjectHoursSummary.builder() - .projectName(projectName) - .billableHoursSum(billableHoursSum) - .nonBillableHoursSum(nonBillableHoursSum) - .chargeability(chargeability * 100) - .isInternalProject(project.customerId() == null) - .build()); + return Optional.of( + ProjectHoursSummary.builder() + .projectName(projectName) + .billableHoursSum(billableHoursSum) + .nonBillableHoursSum(nonBillableHoursSum) + .chargeability(chargeability * 100) + .isInternalProject(project.customerId() == null) + .build() + ); } @@ -332,8 +336,8 @@ private MonthlyBillInfo getMonthlyBillInfoInternal(PersonioEmployee personioEmpl if (!allReceiptsForYearMonth.isEmpty()) { allReceiptsForYearMonthAndEmployee = allReceiptsForYearMonth.stream() - .filter(receipt -> receipt.employeeId().equals(employee.getUserId())) - .toList(); + .filter(receipt -> receipt.employeeId().equals(employee.getUserId())) + .toList(); int sumBills = allReceiptsForYearMonthAndEmployee.size(); return createMonthlyBillInfo(personioEmployee, allReceiptsForYearMonthAndEmployee, sumBills); @@ -341,7 +345,7 @@ private MonthlyBillInfo getMonthlyBillInfoInternal(PersonioEmployee personioEmpl return createMonthlyBillInfoWhenNoBills(personioEmployee); } - private MonthlyBillInfo createMonthlyBillInfoWhenNoBills(PersonioEmployee personioEmployee){ + private MonthlyBillInfo createMonthlyBillInfoWhenNoBills(PersonioEmployee personioEmployee) { return MonthlyBillInfo.builder() .sumBills(0) .sumPrivateBills(0) @@ -355,13 +359,13 @@ private MonthlyBillInfo createMonthlyBillInfo(PersonioEmployee personioEmployee, boolean hasAttachmentWarnings = false; int sumPrivateBills = 0; - for(ZepReceipt receipt : zepReceipts) { + for (ZepReceipt receipt : zepReceipts) { Optional attachment = receiptService.getAttachmentByReceiptId(receipt.id()); - if(attachment.isEmpty()) { + if (attachment.isEmpty()) { hasAttachmentWarnings = true; } - if(receipt.paymentMethodType().getPaymentMethodName().equals(PaymentMethodType.PRIVATE.getPaymentMethodName())) { + if (receipt.paymentMethodType().getPaymentMethodName().equals(PaymentMethodType.PRIVATE.getPaymentMethodName())) { sumPrivateBills++; } } diff --git a/src/main/java/com/gepardec/mega/zep/impl/ZepServiceImpl.java b/src/main/java/com/gepardec/mega/zep/impl/ZepServiceImpl.java index 5c054fc66..6d173a7ed 100644 --- a/src/main/java/com/gepardec/mega/zep/impl/ZepServiceImpl.java +++ b/src/main/java/com/gepardec/mega/zep/impl/ZepServiceImpl.java @@ -1,7 +1,6 @@ package com.gepardec.mega.zep.impl; import com.gepardec.mega.domain.model.AbsenceTime; -import com.gepardec.mega.domain.model.Bill; import com.gepardec.mega.domain.model.Employee; import com.gepardec.mega.domain.model.MonthlyBillInfo; import com.gepardec.mega.domain.model.PersonioEmployee; diff --git a/src/main/java/com/gepardec/mega/zep/rest/mapper/AttendanceMapper.java b/src/main/java/com/gepardec/mega/zep/rest/mapper/ProjectTimeMapper.java similarity index 90% rename from src/main/java/com/gepardec/mega/zep/rest/mapper/AttendanceMapper.java rename to src/main/java/com/gepardec/mega/zep/rest/mapper/ProjectTimeMapper.java index afeb0506b..66a76f45a 100644 --- a/src/main/java/com/gepardec/mega/zep/rest/mapper/AttendanceMapper.java +++ b/src/main/java/com/gepardec/mega/zep/rest/mapper/ProjectTimeMapper.java @@ -11,7 +11,7 @@ import java.time.LocalTime; @ApplicationScoped -public class AttendanceMapper implements Mapper { +public class ProjectTimeMapper implements Mapper { @Inject Logger logger; @@ -28,7 +28,7 @@ public ProjectTime map(ZepAttendance zepAttendance) { Boolean isBillable = zepAttendance.billable(); String duration = null; - if (zepAttendance.duration() != null ) { + if (zepAttendance.duration() != null) { BigDecimal bigDecimal = BigDecimal.valueOf(zepAttendance.duration()); int hours = bigDecimal.intValue(); int minutes = bigDecimal @@ -43,7 +43,7 @@ public ProjectTime map(ZepAttendance zepAttendance) { .isBillable(isBillable) .build(); - }catch (Exception e){ + } catch (Exception e) { throw new ZepServiceException("Error while mapping ZepAttendance to ProjectTime", e); } } diff --git a/src/test/java/com/gepardec/mega/zep/rest/mapper/AttendanceMapperTest.java b/src/test/java/com/gepardec/mega/zep/rest/mapper/ProjectTimeMapperTest.java similarity index 64% rename from src/test/java/com/gepardec/mega/zep/rest/mapper/AttendanceMapperTest.java rename to src/test/java/com/gepardec/mega/zep/rest/mapper/ProjectTimeMapperTest.java index 53a3222ed..5029768aa 100644 --- a/src/test/java/com/gepardec/mega/zep/rest/mapper/AttendanceMapperTest.java +++ b/src/test/java/com/gepardec/mega/zep/rest/mapper/ProjectTimeMapperTest.java @@ -10,20 +10,21 @@ import static org.assertj.core.api.Assertions.assertThat; -class AttendanceMapperTest { +class ProjectTimeMapperTest { @Test void withFullSettings_thenReturnsAbsenceTimeObject() { - AttendanceMapper attendanceMapper = new AttendanceMapper(); - ZepAttendanceDirectionOfTravel zepAttendanceDirectionOfTravel = ZepAttendanceDirectionOfTravel.builder() - .id("2") - .name("return") - .build(); + ProjectTimeMapper projectTimeMapper = new ProjectTimeMapper(); + ZepAttendanceDirectionOfTravel zepAttendanceDirectionOfTravel = + ZepAttendanceDirectionOfTravel.builder() + .id("2") + .name("return") + .build(); ZepAttendance zepAttendance = ZepAttendance.builder() .id(2) - .date(LocalDate.of(2015,2,11)) - .from(LocalTime.of(9,0,0)) - .to(LocalTime.of(13,45,0)) + .date(LocalDate.of(2015, 2, 11)) + .from(LocalTime.of(9, 0, 0)) + .to(LocalTime.of(13, 45, 0)) .employeeId("001-duser") .projectId(1) .projectTaskId(2) @@ -36,7 +37,7 @@ void withFullSettings_thenReturnsAbsenceTimeObject() { .directionOfTravel(zepAttendanceDirectionOfTravel) .build(); - ProjectTime pt = attendanceMapper.map(zepAttendance); + ProjectTime pt = projectTimeMapper.map(zepAttendance); assertThat(pt.getUserId()).isEqualTo(zepAttendance.employeeId()); assertThat(pt.getDuration()).isEqualTo("04:45");