Untitled

mail@pastecode.io avatarunknown
java
25 days ago
3.0 kB
2
Indexable
Never
package com.appcent.efortapi.report;

import com.appcent.efortapi.employee.Employee;
import com.appcent.efortapi.employee.EmployeeRepository;
import com.appcent.efortapi.project.Project;
import com.appcent.efortapi.project.ProjectRepository;
import com.appcent.efortapi.timetrack.TimeTrack;
import com.appcent.efortapi.timetrack.TimeTrackRepository;
import com.appcent.efortapi.user.User;
import com.appcent.efortapi.user.UserRepository;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;

@Service
public class MonthlyReportServiceImpl implements MonthlyReportService {

    private final TimeTrackRepository timeTrackRepository;
    private final EmployeeRepository employeeRepository;
    private final ProjectRepository projectRepository;
    private final UserRepository userRepository;

    public MonthlyReportServiceImpl(TimeTrackRepository timeTrackRepository, EmployeeRepository employeeRepository, ProjectRepository projectRepository, UserRepository userRepository) {
        this.timeTrackRepository = timeTrackRepository;
        this.employeeRepository = employeeRepository;
        this.projectRepository = projectRepository;
        this.userRepository = userRepository;
    }

    @Override
    public MonthlyEmployeeReportDto getMonthlyReportByEmployee(Long employeeId, String year, String month) {

        User user = userRepository.findById(employeeId).orElseThrow(() -> new NoSuchElementException("Kullanıcı bulunamadı."));
        Employee employee = employeeRepository.findByEmail(user.getEmail());

        List<Project> projects = projectRepository.findByMembers_Email(user.getEmail());

        List<ProjectInfo> projectInfoList = new ArrayList<>();

        for (Project project : projects) {
            List<TimeTrack> timeTrackList = timeTrackRepository.findByPeriodYearAndPeriodMonthAndUser_EmailAndProject_Name(year, month, user.getEmail(), project.getName());
            List<TimeTrackInfo> timeTrackInfoList = new ArrayList<>();
            for (TimeTrack timeTrack : timeTrackList) {
                timeTrackInfoList.add(TimeTrackInfo.builder()
                        .date(timeTrack.getDate())
                        .description(timeTrack.getDescription())
                        .workHours(timeTrack.getWorkHours())
                        .overTime(timeTrack.getOverTime())
                        .build());
            }
            projectInfoList.add(ProjectInfo.builder()
                    .projectName(project.getName())
                    .timeTrackList(timeTrackInfoList)
                    .build());
        }

        return MonthlyEmployeeReportDto.builder()
                .employeeId(user.getId())
                .employeeName(employee.getFirstName())
                .employeeSurname(employee.getLastName())
                .projectInfoList(projectInfoList)
                .periodMonth(month)
                .periodYear(year)
                .build();
    }
}