diff --git a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java index 6dca37a..a0a3477 100644 --- a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java +++ b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java @@ -140,17 +140,31 @@ public class RedmineClient { // Verifica y obtiene la fecha de creación String dateString = issue.has("created_on") && !issue.get("created_on").isJsonNull() ? issue.get("created_on").getAsString() : ""; - LocalDate date = null; + LocalDate dateCreate = null; if (!dateString.isEmpty()) { try { DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; - date = LocalDate.parse(dateString, formatter); + dateCreate = LocalDate.parse(dateString, formatter); } catch (DateTimeParseException e) { System.err.println("Error al parsear la fecha: " + dateString); e.printStackTrace(); } } + // Verifica y obtiene la fecha de cierre + String closeDateString = issue.has("closed_on") && !issue.get("closed_on").isJsonNull() ? issue.get("closed_on").getAsString() : ""; + LocalDate dateClose = null; + if (!closeDateString.isEmpty()) { + try { + DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; + dateClose = LocalDate.parse(closeDateString, formatter); + } catch (DateTimeParseException e) { + System.err.println("Error al parsear la fecha de cierre: " + closeDateString); + e.printStackTrace(); + } + } + + //Verifica y obtiene el ID del tipo de ticket Integer trackerId = null; if (issue.has("tracker") && !issue.get("tracker").isJsonNull()) { @@ -162,7 +176,10 @@ public class RedmineClient { // Agrega el ticket a la lista - tickets.add(new Ticket(id, subject, description, status, date != null ? date.toString() : "", trackerId)); + tickets.add(new Ticket(id, subject, description, status, + dateCreate != null ? dateCreate.toString() : "", + dateClose != null ? dateClose.toString() : "", + trackerId, "Tipo Desconocido")); } } else { System.out.println("La respuesta JSON no contiene la clave 'issues'"); diff --git a/src/main/java/mx/gob/jumapacelaya/models/Ticket.java b/src/main/java/mx/gob/jumapacelaya/models/Ticket.java index 0a9941a..da28919 100644 --- a/src/main/java/mx/gob/jumapacelaya/models/Ticket.java +++ b/src/main/java/mx/gob/jumapacelaya/models/Ticket.java @@ -4,23 +4,39 @@ import java.sql.Date; import java.time.LocalDate; public class Ticket { - private int id; - private String subject; - private String description; - private String status; - private LocalDate dateCreate; + private final int id; + private final String subject; + private final String description; + private final String status; + private final LocalDate dateCreate; + private LocalDate dateClose; private User author; private Integer trackerId; + private String type; - public Ticket(int id, String subject, String description, String status, String dateCreate, Integer trackerId) { + + public Ticket(int id, String subject, String description, String status, String dateCreate, String dateClose, Integer trackerId, String type) { this.id = id; this.subject = subject; this.description = description; this.status = status; - this.dateCreate = LocalDate.parse(dateCreate); + // Manejo de la fecha de creación + if (dateCreate != null && !dateCreate.isEmpty()) { + this.dateCreate = LocalDate.parse(dateCreate); // Solo se parsea si no está vacío + } else { + this.dateCreate = null; // Si está vacío, asignar null + } + + // Manejo de la fecha de cierre + if (dateClose != null && !dateClose.isEmpty()) { + this.dateClose = LocalDate.parse(dateClose); // Solo se parsea si no está vacío + } else { + this.dateClose = null; // Si está vacío, asignar null + } this.author = author; this.trackerId = trackerId; + this.type = type; } public int getId() { @@ -56,9 +72,22 @@ public class Ticket { } public void setTrackerId(Integer tipoId) { - this.trackerId = trackerId; + this.trackerId = tipoId; + } + + public LocalDate getDateClose() { + return dateClose; + } + + public void setDateClose(LocalDate dateClose) { + this.dateClose = dateClose; } + public void setType(String type) { + this.type = type; + } + + public static class User { private String username; @@ -95,4 +124,27 @@ public class Ticket { return "N/A"; } } + + + public String getType() { + if (trackerId == null) { + return "Desconocido"; + } + return switch (trackerId) { + case 4 -> "Acceso/Permiso/Bajas"; + case 5 -> "Soporte de Software"; + case 6 -> "Capacitacion de Software"; + case 7 -> "Configuracion de Software"; + case 8 -> "Desarrollo de Software"; + case 9 -> "Digitalizacion GIS"; + case 10 -> "Documento"; + case 11 -> "Reporte"; + case 13 -> "DML"; + case 14 -> "DCL"; + case 15 -> "DDL"; + case 16 -> "Mantenimiento Correctivo"; + case 17 -> "Actividad"; + default -> "N/A"; + }; + } } diff --git a/src/main/java/mx/gob/jumapacelaya/ui/ActDiariaView.java b/src/main/java/mx/gob/jumapacelaya/ui/ActDiariaView.java index 6c4377d..f22ff82 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/ActDiariaView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/ActDiariaView.java @@ -21,6 +21,7 @@ import mx.gob.jumapacelaya.services.UserService; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.*; @@ -44,6 +45,10 @@ public class ActDiariaView extends VerticalLayout { grid.addColumn(Ticket::getId).setHeader("No.") .setAutoWidth(true).setFlexGrow(0).setSortable(true); + grid.addColumn(Ticket::getType) + .setHeader("Tipo") + .setAutoWidth(true); + grid.addColumn(Ticket::getSubject).setHeader("Asunto") .setAutoWidth(true); @@ -57,12 +62,19 @@ public class ActDiariaView extends VerticalLayout { } else { return ""; } - }).setHeader("Fecha creacion"); + }).setHeader("Fecha creacion").setAutoWidth(true); + + grid.addColumn(ticket -> { + LocalDate fechaCierre = ticket.getDateClose(); + return fechaCierre != null ? fechaCierre.toString() : ""; + }).setHeader("Fecha cierre").setAutoWidth(true); grid.addColumn(ticket -> ticket.tiempoEst(ticket.getTrackerId())).setHeader("Tiempo estimado de atencion").setAutoWidth(false); grid.addColumn(Ticket::getDescription).setHeader("Descripción").setWidth("25em"); + //grid.addColumn().setHeader("Realizar"); + grid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); grid.getStyle().set("opacity", "0.8"); grid.setAllRowsVisible(true); diff --git a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java index ebb97fc..e66d780 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java @@ -37,6 +37,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse private final VerticalLayout actualizacionesLayout; private final VerticalLayout etiquetaLayout; private DatePicker fecha; + private ComboBox tipoMantt; public MantenimientoView() { this.databaseService = new DatabaseService(); @@ -61,8 +62,8 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse //ComboBox Tipo de Mantenimiento - ComboBox tipoMantt = new ComboBox<>("Tipo de Mantenimiento"); List tiposDeMantenimiento = databaseService.getTiposDeMantenimientos(); + this.tipoMantt = new ComboBox<>("Tipo de Mantenimiento"); tipoMantt.setItems(tiposDeMantenimiento); tipoMantt.addClassName("mantenimiento-combo"); tipoMantt.addValueChangeListener(event -> { @@ -297,7 +298,14 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse @Override public void beforeEnter(BeforeEnterEvent beforeEnterEvent) { - String fechaParam = beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("fecha") != null ? beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("fecha").stream().findFirst().orElse(null) : null; + String fechaParam = beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("fecha") != null + ? beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("fecha").stream().findFirst().orElse(null) + : null; + + String tipoParam = beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("tipo") != null + ? beforeEnterEvent.getLocation().getQueryParameters().getParameters("tipo").stream().findFirst().orElse(null) + : null; + if (fechaParam != null) { try { LocalDate fechaActual = LocalDate.parse(fechaParam); @@ -306,5 +314,10 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse Notification.show("Error al establecer la fecha: " + e.getMessage(), 3000, Notification.Position.MIDDLE); } } + + if ("PREVENTIVO".equalsIgnoreCase(tipoParam)) { + tipoMantt.setValue("PREVENTIVO"); + tipoMantt.setReadOnly(true); + } } } diff --git a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java index 016f753..1213c6b 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java @@ -74,7 +74,7 @@ public class PlanAnualView extends VerticalLayout { btnRealizar.addClickListener(event -> { LocalDate fechaSistem = LocalDate.now(); String fechaStr = fechaSistem.toString(); - btnRealizar.getUI().ifPresent(ui -> ui.navigate("mantenimiento?fecha=" + fechaStr)); + btnRealizar.getUI().ifPresent(ui -> ui.navigate("mantenimiento?fecha=" + fechaStr + "&tipo=PREVENTIVO")); }); return btnRealizar; }).setHeader("Realizar").setAutoWidth(true); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5119dfd..dcdb813 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -15,9 +15,15 @@ spring.ldap.base=DC=JUMAPACELAYA,DC=GOB,DC=MX spring.ldap.username=administrator spring.ldap.password=Dr3na%134$4guA -########PRODUCTIVO################################# -redmine.url=https://proyman.jumapacelaya.gob.mx/ -redmine.api_key=ce4dc8b6b531c818017e6831a5732ccc15b8faf6 +###################PRODUCTIVO#################### +#redmine.url=https://proyman.jumapacelaya.gob.mx/ +#redmine.api_key=ce4dc8b6b531c818017e6831a5732ccc15b8faf6 + + +######################PRUEBAS#################### +redmine.url=http://localhost:10083/ +redmine.api_key=bada7949fd4d879cbd98eb645ae4b88603bf77d0 + #Conexion a la base de datos Mantenimientos #MySQL Configuration