En-desarrollo #80
BIN
Reporte_Vacaciones.xlsx
Normal file
BIN
Reporte_Vacaciones.xlsx
Normal file
Binary file not shown.
@ -5,19 +5,33 @@ import com.primefactorsolutions.service.EmployeeService;
|
|||||||
import com.primefactorsolutions.service.TeamService;
|
import com.primefactorsolutions.service.TeamService;
|
||||||
import com.primefactorsolutions.service.TimeOffRequestService;
|
import com.primefactorsolutions.service.TimeOffRequestService;
|
||||||
import com.primefactorsolutions.service.VacationService;
|
import com.primefactorsolutions.service.VacationService;
|
||||||
|
import com.vaadin.flow.component.UI;
|
||||||
import com.vaadin.flow.component.button.Button;
|
import com.vaadin.flow.component.button.Button;
|
||||||
import com.vaadin.flow.component.combobox.ComboBox;
|
import com.vaadin.flow.component.combobox.ComboBox;
|
||||||
|
import com.vaadin.flow.component.dialog.Dialog;
|
||||||
|
import com.vaadin.flow.component.html.Anchor;
|
||||||
|
import com.vaadin.flow.component.html.Span;
|
||||||
import com.vaadin.flow.component.notification.Notification;
|
import com.vaadin.flow.component.notification.Notification;
|
||||||
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
||||||
import com.vaadin.flow.router.PageTitle;
|
import com.vaadin.flow.router.PageTitle;
|
||||||
import com.vaadin.flow.router.Route;
|
import com.vaadin.flow.router.Route;
|
||||||
|
import com.vaadin.flow.server.StreamRegistration;
|
||||||
|
import com.vaadin.flow.server.StreamResource;
|
||||||
import com.vaadin.flow.spring.annotation.SpringComponent;
|
import com.vaadin.flow.spring.annotation.SpringComponent;
|
||||||
import jakarta.annotation.security.PermitAll;
|
import jakarta.annotation.security.PermitAll;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.vaadin.firitin.components.grid.PagingGrid;
|
import org.vaadin.firitin.components.grid.PagingGrid;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.UncheckedIOException;
|
||||||
|
import java.time.DayOfWeek;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
|
import java.time.temporal.WeekFields;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -67,7 +81,6 @@ public class RequestsListView extends BaseView {
|
|||||||
hl.add(createEmployeeFilter());
|
hl.add(createEmployeeFilter());
|
||||||
hl.add(createTeamFilter());
|
hl.add(createTeamFilter());
|
||||||
hl.add(createStateFilter());
|
hl.add(createStateFilter());
|
||||||
|
|
||||||
getCurrentPageLayout().add(hl);
|
getCurrentPageLayout().add(hl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +108,9 @@ public class RequestsListView extends BaseView {
|
|||||||
Notification.show("Seleccione una solicitud.", 3000, Notification.Position.MIDDLE);
|
Notification.show("Seleccione una solicitud.", 3000, Notification.Position.MIDDLE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Button downloadButton = new Button("Descargar reporte", event -> downloadReport());
|
||||||
Button closeButton = new Button("Salir", event -> navigateToMainView());
|
Button closeButton = new Button("Salir", event -> navigateToMainView());
|
||||||
return new HorizontalLayout(viewButton, closeButton);
|
return new HorizontalLayout(viewButton, downloadButton, closeButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshGeneralRequestGrid(final Employee employee,
|
private void refreshGeneralRequestGrid(final Employee employee,
|
||||||
@ -419,4 +433,52 @@ public class RequestsListView extends BaseView {
|
|||||||
private void navigateToTimeOffRequestView(final UUID idEmployee) {
|
private void navigateToTimeOffRequestView(final UUID idEmployee) {
|
||||||
getUI().ifPresent(ui -> ui.navigate("requests/" + idEmployee.toString()));
|
getUI().ifPresent(ui -> ui.navigate("requests/" + idEmployee.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ByteArrayInputStream generateExcelReport(List<Employee> employees) {
|
||||||
|
try (Workbook workbook = new XSSFWorkbook()) {
|
||||||
|
Sheet sheet = workbook.createSheet("Reporte Horas Trabajadas");
|
||||||
|
Row headerRow = sheet.createRow(0);
|
||||||
|
|
||||||
|
String[] headers = {"Nombre", "Equipo", "Estado", "Total Horas"};
|
||||||
|
for (int i = 0; i < headers.length; i++) {
|
||||||
|
Cell cell = headerRow.createCell(i);
|
||||||
|
cell.setCellValue(headers[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int rowIndex = 1;
|
||||||
|
for (Employee employee : employees) {
|
||||||
|
Row row = sheet.createRow(rowIndex++);
|
||||||
|
row.createCell(0).setCellValue(getEmployeeFullName(employee));
|
||||||
|
row.createCell(1).setCellValue(getTeamName(employee));
|
||||||
|
row.createCell(2).setCellValue(getEmployeeStatus(employee));
|
||||||
|
row.createCell(3).setCellValue(getGeneralTotal(employee));
|
||||||
|
}
|
||||||
|
|
||||||
|
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
|
||||||
|
workbook.write(out);
|
||||||
|
return new ByteArrayInputStream(out.toByteArray());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new UncheckedIOException("Error al generar el archivo Excel", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private StreamResource generateGeneralVacationReport() {
|
||||||
|
List<Employee> employees = employeeService.findAllEmployees();
|
||||||
|
|
||||||
|
ByteArrayInputStream excelStream = generateExcelReport(employees);
|
||||||
|
|
||||||
|
return new StreamResource("reporte_general_de_vacaciones_" + LocalDate.now() + ".xlsx",
|
||||||
|
() -> excelStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void downloadReport() {
|
||||||
|
StreamResource resource = generateGeneralVacationReport();
|
||||||
|
getUI().ifPresent(ui -> openDocumentStream(resource, ui));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openDocumentStream(final StreamResource resource, final UI ui) {
|
||||||
|
StreamRegistration registration = ui.getSession().getResourceRegistry().registerResource(resource);
|
||||||
|
ui.getPage().open(registration.getResourceUri().toString());
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user