Browse Source

Se agregaron validaciones en la vista de actividades diarias si es de tipo mantenimiento se redirecciona a la vista de mantenimientos y si es de tipo actividad cambia el estado a terminada

master
mramirezg 10 months ago
parent
commit
69c98f137c
2 changed files with 66 additions and 5 deletions
  1. +34
    -2
      src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java
  2. +32
    -3
      src/main/java/mx/gob/jumapacelaya/ui/ActDiariaView.java

+ 34
- 2
src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java View File

@ -78,15 +78,18 @@ public class RedmineClient {
//AQUI OBTENGO LOS TICKETS DESDE REDMINE
public List<Ticket> getTicketsAuthor(RedmineUser user) {
public List<Ticket> getTicketsAuthor(RedmineUser user, boolean includeClosed) {
List<Ticket> tickets = new ArrayList<>();
HttpClient client = HttpClient.newHttpClient();
int offset = 0;
// Si includeClose es true, incluira todos los tikets si no, incluira solo los que estan abiertos
String statusFilter = includeClosed ? "&status_id=*" : "&status_id=open";
while (true) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(REDMINE_URL + "/issues.json?key=" + user.getKey() + "&author_id=" + user.getId() + "&offset=" + offset))
.uri(URI.create(REDMINE_URL + "/issues.json?key=" + user.getKey() + "&author_id=" + user.getId() + statusFilter + "&offset=" + offset))
.header("Content-Type", "application/json")
.build();
@ -306,4 +309,33 @@ public class RedmineClient {
//user.setKey(userJson.get("key").getAsString());
return user;
}
/*Este metodo sirve para actualizar el estatus de los tickets
en este caso se actualiza al estatus TERMINADO */
public void closeTicket(int ticketId, RedmineUser user) throws IOException, InterruptedException {
int closedStatusId = 9; //este es el ID del estado TERMINADO, se debe poner el id a según corresponda
Map<String, Object> payload = new HashMap<>();
Map<String, Object> issue = new HashMap<>();
issue.put("status_id", closedStatusId);
payload.put("issue", issue);
String jsonPayload = GSON.toJson(payload);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(REDMINE_URL + "/issues/" + ticketId + ".json?key=" + user.getKey()))
.header("Content-Type", "application/json")
.PUT(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 204) {
String responseBody = response.body();
System.out.println("Ticket " + ticketId + " cerrado correctamente.");
} else {
System.err.println("Error al cerrar el ticket: " + response.statusCode());
System.err.println(response.body());
}
}
}

+ 32
- 3
src/main/java/mx/gob/jumapacelaya/ui/ActDiariaView.java View File

@ -1,5 +1,6 @@
package mx.gob.jumapacelaya.ui;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.grid.Grid;
@ -7,6 +8,7 @@ import com.vaadin.flow.component.grid.GridVariant;
import com.vaadin.flow.component.html.H3;
import com.vaadin.flow.component.html.Span;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.notification.NotificationVariant;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.data.renderer.ComponentRenderer;
@ -16,13 +18,16 @@ import jakarta.annotation.security.PermitAll;
import mx.gob.jumapacelaya.api.RedmineClient;
import mx.gob.jumapacelaya.api.ServerProperties;
import mx.gob.jumapacelaya.models.ActividadDiaria;
import mx.gob.jumapacelaya.models.RedmineUser;
import mx.gob.jumapacelaya.models.Ticket;
import mx.gob.jumapacelaya.services.LdapService;
import mx.gob.jumapacelaya.services.UserService;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -67,7 +72,12 @@ public class ActDiariaView extends VerticalLayout {
grid.addColumn(ticket -> {
LocalDate fechaCierre = ticket.getDateClose();
return fechaCierre != null ? fechaCierre.toString() : "";
if (fechaCierre != null) {
DateTimeFormatter formatterClose = DateTimeFormatter.ofPattern("dd/MM/yyyy");
return fechaCierre.format(formatterClose);
} else {
return "";
}
}).setHeader("Fecha cierre").setAutoWidth(true);
grid.addColumn(ticket -> ticket.tiempoEst(ticket.getTrackerId())).setHeader("Tiempo estimado de atencion").setAutoWidth(false);
@ -94,7 +104,7 @@ public class ActDiariaView extends VerticalLayout {
private void loadTickets() {
try {
List<Ticket> tickets = redmineClient.getTicketsAuthor(userService.getRedmineUser());
List<Ticket> tickets = redmineClient.getTicketsAuthor(userService.getRedmineUser(), true);
List<Ticket> filteredTickets = tickets.stream()
.filter(ticket -> ticket.getTrackerId() == 17 || ticket.getTrackerId() == 16)
.toList();
@ -131,10 +141,29 @@ public class ActDiariaView extends VerticalLayout {
return new ComponentRenderer<>(ticket -> {
Button button = new Button("Realizar");
button.addClickListener(e -> {
Notification.show("Accion para ticket: " + ticket.getId());
RedmineUser currentUser = userService.getRedmineUser();
if (ticket.getTrackerId() == 16) {
UI.getCurrent().navigate("mantenimiento");
} else if (ticket.getTrackerId() == 17) {
cerrarTicket(ticket, currentUser);
} else {
Notification.show("El ticket no es de tipo Mantenimiento o Actividad.");
}
});
return button;
});
}
public void cerrarTicket(Ticket ticket, RedmineUser user) {
try {
//Llamar al metodo para cambiar el estado del ticket
redmineClient.closeTicket(ticket.getId(), user);
Notification.show("El ticket " + ticket.getId() + " se ha cerrado exitosamente.", 3000, Notification.Position.MIDDLE)
.addThemeVariants(NotificationVariant.LUMO_WARNING);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
Notification.show("Error al cerrar el ticket " + ticket.getId());
}
}
}

Loading…
Cancel
Save