Browse Source

Se cambio la forma en que se ven las descripciones, ahora hay un boton que dice ver y al dar clic en el se abre un Dialog con la descripcion del ticket. Esto para que las columnas en el grid no se hagan tan grandes

pull/1/head
mramirezg 9 months ago
parent
commit
9f02c7da18
7 changed files with 95 additions and 19 deletions
  1. BIN
      src/main/bundles/dev.bundle
  2. BIN
      src/main/bundles/prod.bundle
  3. +10
    -11
      src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java
  4. +1
    -1
      src/main/java/mx/gob/jumapacelaya/views/login/LoginView.java
  5. +38
    -1
      src/main/java/mx/gob/jumapacelaya/views/tickets/AllTicketsView.java
  6. +42
    -2
      src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java
  7. +4
    -4
      src/main/resources/application.properties

BIN
src/main/bundles/dev.bundle View File


BIN
src/main/bundles/prod.bundle View File


+ 10
- 11
src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java View File

@ -14,7 +14,7 @@ import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.notification.NotificationVariant; import com.vaadin.flow.component.notification.NotificationVariant;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextArea;
import com.vaadin.flow.component.richtexteditor.RichTextEditor;
import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.component.upload.Upload; import com.vaadin.flow.component.upload.Upload;
import com.vaadin.flow.component.upload.UploadI18N; import com.vaadin.flow.component.upload.UploadI18N;
@ -61,7 +61,7 @@ public class CrearnuevoTicketView extends VerticalLayout {
//Componentes principales de la UI //Componentes principales de la UI
ComboBox<String> tipoTickets = createTicketTypeComboBox(); ComboBox<String> tipoTickets = createTicketTypeComboBox();
TextField asunto = createTextField("Asunto", "1000px"); TextField asunto = createTextField("Asunto", "1000px");
TextArea descripcion = createTextArea("Descripcion", "1000px", "250px");
RichTextEditor descripcion = createTextArea("Descripcion", "1000px", "250px");
// Marcar campos como obligatorios // Marcar campos como obligatorios
tipoTickets.setRequiredIndicatorVisible(true); tipoTickets.setRequiredIndicatorVisible(true);
@ -172,14 +172,13 @@ public class CrearnuevoTicketView extends VerticalLayout {
private TextField createTextField(String label, String width) { private TextField createTextField(String label, String width) {
TextField textField = new TextField(label); TextField textField = new TextField(label);
textField.setWidth(width);
textField.setSizeFull();
return textField; return textField;
} }
private TextArea createTextArea(String label, String width, String height) {
TextArea textArea = new TextArea(label);
textArea.setWidth(width);
textArea.setHeight(height);
private RichTextEditor createTextArea(String label, String width, String height) {
RichTextEditor textArea = new RichTextEditor();
textArea.setSizeFull();
return textArea; return textArea;
} }
@ -199,7 +198,7 @@ public class CrearnuevoTicketView extends VerticalLayout {
} }
} }
private void handleCreateButton(RedmineUser user, ComboBox<String> tipoTickets, TextField asunto, TextArea descripcion) {
private void handleCreateButton(RedmineUser user, ComboBox<String> tipoTickets, TextField asunto, RichTextEditor descripcion) {
if (user.getKey() == null || user.getKey().isEmpty()) { if (user.getKey() == null || user.getKey().isEmpty()) {
Notification.show("No se encontró la API key en la sesión.", 5000, Notification.Position.MIDDLE) Notification.show("No se encontró la API key en la sesión.", 5000, Notification.Position.MIDDLE)
.addThemeVariants(NotificationVariant.LUMO_ERROR); .addThemeVariants(NotificationVariant.LUMO_ERROR);
@ -252,7 +251,7 @@ public class CrearnuevoTicketView extends VerticalLayout {
handleResponse(response, asunto, descripcion, tipoTickets); handleResponse(response, asunto, descripcion, tipoTickets);
} }
private void handleResponse(String response, TextField asunto, TextArea descripcion, ComboBox<String> tipoTickets) {
private void handleResponse(String response, TextField asunto, RichTextEditor descripcion, ComboBox<String> tipoTickets) {
if (response.startsWith("{\"issue\":")) { if (response.startsWith("{\"issue\":")) {
JsonObject jsonResponse = JsonParser.parseString(response).getAsJsonObject(); JsonObject jsonResponse = JsonParser.parseString(response).getAsJsonObject();
int issueNumber = jsonResponse.getAsJsonObject("issue").get("id").getAsInt(); int issueNumber = jsonResponse.getAsJsonObject("issue").get("id").getAsInt();
@ -265,14 +264,14 @@ public class CrearnuevoTicketView extends VerticalLayout {
} }
} }
private void resetForm(TextField asunto, TextArea descripcion, ComboBox<String> tipoTickets) {
private void resetForm(TextField asunto, RichTextEditor descripcion, ComboBox<String> tipoTickets) {
asunto.clear(); asunto.clear();
descripcion.clear(); descripcion.clear();
tipoTickets.clear(); tipoTickets.clear();
ticketTypeDesc.setText(""); ticketTypeDesc.setText("");
asunto.setInvalid(false); asunto.setInvalid(false);
descripcion.setInvalid(false);
//descripcion.setInvalid(false);
tipoTickets.setInvalid(false); tipoTickets.setInvalid(false);
buffer = new MultiFileMemoryBuffer(); buffer = new MultiFileMemoryBuffer();


+ 1
- 1
src/main/java/mx/gob/jumapacelaya/views/login/LoginView.java View File

@ -59,7 +59,7 @@ public class LoginView extends VerticalLayout implements BeforeEnterObserver {
i18nError.setMessage("Usuario o contraseña incorrectos, verifica tus credenciales"); i18nError.setMessage("Usuario o contraseña incorrectos, verifica tus credenciales");
i18n.setErrorMessage(i18nError); i18n.setErrorMessage(i18nError);
i18n.setAdditionalInformation("Versión 1.3.0");
i18n.setAdditionalInformation("Versión 2.0.0");
// Configuración del formulario de login // Configuración del formulario de login
login.setAction("login"); login.setAction("login");


+ 38
- 1
src/main/java/mx/gob/jumapacelaya/views/tickets/AllTicketsView.java View File

@ -1,9 +1,15 @@
package mx.gob.jumapacelaya.views.tickets; package mx.gob.jumapacelaya.views.tickets;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridVariant; import com.vaadin.flow.component.grid.GridVariant;
import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.html.Span;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.richtexteditor.RichTextEditor;
import com.vaadin.flow.data.renderer.ComponentRenderer; import com.vaadin.flow.data.renderer.ComponentRenderer;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
@ -56,7 +62,12 @@ public class AllTicketsView extends VerticalLayout {
grid.addColumn(ticket -> ticket.tiempoEst(ticket.getTrackerId())).setHeader("Tiempo estimado de atencion").setAutoWidth(false); grid.addColumn(ticket -> ticket.tiempoEst(ticket.getTrackerId())).setHeader("Tiempo estimado de atencion").setAutoWidth(false);
grid.addColumn(Ticket::getDescription).setHeader("Descripcion").setWidth("25em");
grid.addComponentColumn(ticket -> {
Button btnVer = new Button("Ver");
btnVer.addClickListener(event -> showDescription(ticket));
return btnVer;
}).setHeader("Descripcion").setAutoWidth(true);
grid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); grid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT);
grid.getStyle().set("opacity", "0.8"); grid.getStyle().set("opacity", "0.8");
grid.addClassName("vaadin-grid::part(selected-row-cell)"); grid.addClassName("vaadin-grid::part(selected-row-cell)");
@ -74,6 +85,32 @@ public class AllTicketsView extends VerticalLayout {
loadTickets(); loadTickets();
} }
// Metodo para mostrar las descripciones en un componente Dialog
private void showDescription(Ticket ticket) {
Dialog dialog = new Dialog();
dialog.getElement().setAttribute("arial-label", "Add note");
dialog.setMaxHeight("500px");
dialog.setMaxWidth("1100px");
RichTextEditor textEditor = new RichTextEditor();
textEditor.setValue(ticket.getDescription());
textEditor.setReadOnly(true);
Button closeButton = new Button("Cerrar");
closeButton.addThemeVariants(ButtonVariant.LUMO_ERROR);
closeButton.addClickListener(e -> dialog.close());
HorizontalLayout buttonLayout = new HorizontalLayout(closeButton);
buttonLayout.setWidthFull();
buttonLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.END);
buttonLayout.add(closeButton);
dialog.add(textEditor, buttonLayout);
dialog.open();
}
private void loadTickets() { private void loadTickets() {
try { try {
List<Ticket> tickets = redmineClient.getTickets(userService.getRedmineUser(), true); List<Ticket> tickets = redmineClient.getTickets(userService.getRedmineUser(), true);


+ 42
- 2
src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java View File

@ -1,13 +1,20 @@
package mx.gob.jumapacelaya.views.tickets; package mx.gob.jumapacelaya.views.tickets;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridVariant; import com.vaadin.flow.component.grid.GridVariant;
import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.html.Span;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.richtexteditor.RichTextEditor;
import com.vaadin.flow.data.renderer.ComponentRenderer; import com.vaadin.flow.data.renderer.ComponentRenderer;
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 jakarta.annotation.security.PermitAll; import jakarta.annotation.security.PermitAll;
import mx.gob.jumapacelaya.Application;
import mx.gob.jumapacelaya.api.RedmineClient; import mx.gob.jumapacelaya.api.RedmineClient;
import mx.gob.jumapacelaya.api.ServerPrpperties; import mx.gob.jumapacelaya.api.ServerPrpperties;
import mx.gob.jumapacelaya.models.Ticket; import mx.gob.jumapacelaya.models.Ticket;
@ -30,13 +37,15 @@ public class MisTicketsView extends VerticalLayout {
private final RedmineClient redmineClient; private final RedmineClient redmineClient;
private final UserService userService; private final UserService userService;
private final Grid<Ticket> grid; private final Grid<Ticket> grid;
private final Application application;
@Autowired @Autowired
public MisTicketsView(ServerPrpperties prpperties, RedmineClient redmineClient, UserService userService) {
public MisTicketsView(ServerPrpperties prpperties, RedmineClient redmineClient, UserService userService, Application application) {
this.userService = userService; this.userService = userService;
this.redmineClient = redmineClient; this.redmineClient = redmineClient;
this.grid = new Grid<>(Ticket.class, false); this.grid = new Grid<>(Ticket.class, false);
// Configuración de columnas del grid // Configuración de columnas del grid
grid.addColumn(Ticket::getId).setHeader("No.") grid.addColumn(Ticket::getId).setHeader("No.")
.setAutoWidth(true).setFlexGrow(0).setSortable(true); .setAutoWidth(true).setFlexGrow(0).setSortable(true);
@ -58,7 +67,11 @@ public class MisTicketsView extends VerticalLayout {
grid.addColumn(ticket -> ticket.tiempoEst(ticket.getTrackerId())).setHeader("Tiempo estimado de atencion").setAutoWidth(false); grid.addColumn(ticket -> ticket.tiempoEst(ticket.getTrackerId())).setHeader("Tiempo estimado de atencion").setAutoWidth(false);
grid.addColumn(Ticket::getDescription).setHeader("Descripción").setWidth("25em");
grid.addComponentColumn(ticket -> {
Button btnVer = new Button("Ver");
btnVer.addClickListener(event -> showDescription(ticket));
return btnVer;
}).setHeader("Descripcion").setAutoWidth(true);
grid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); grid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT);
grid.getStyle().set("opacity", "0.8"); grid.getStyle().set("opacity", "0.8");
@ -73,6 +86,33 @@ public class MisTicketsView extends VerticalLayout {
setMargin(false); setMargin(false);
loadTickets(); loadTickets();
this.application = application;
}
// Metodo para mostrar las descripciones en un componente Dialog
private void showDescription(Ticket ticket) {
Dialog dialog = new Dialog();
dialog.getElement().setAttribute("arial-label", "Add note");
dialog.setMaxHeight("500px");
dialog.setMaxWidth("1100px");
RichTextEditor textEditor = new RichTextEditor();
textEditor.setValue(ticket.getDescription());
textEditor.setReadOnly(true);
Button closeButton = new Button("Cerrar");
closeButton.addThemeVariants(ButtonVariant.LUMO_ERROR);
closeButton.addClickListener(e -> dialog.close());
HorizontalLayout buttonLayout = new HorizontalLayout(closeButton);
buttonLayout.setWidthFull();
buttonLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.END);
buttonLayout.add(closeButton);
dialog.add(textEditor, buttonLayout);
dialog.open();
} }
private void loadTickets() { private void loadTickets() {


+ 4
- 4
src/main/resources/application.properties View File

@ -18,13 +18,13 @@ spring.ldap.password=Dr3na$134%4guA
########PRODUCTIVO################################# ########PRODUCTIVO#################################
redmine.url=https://proyman.jumapacelaya.gob.mx/
redmine.api_key=65b37a803babb6ba27f0f4fa3e562575d5ae63b3
#redmine.url=https://proyman.jumapacelaya.gob.mx/
#redmine.api_key=65b37a803babb6ba27f0f4fa3e562575d5ae63b3
########LOCAL###################################### ########LOCAL######################################
#redmine.url=http://localhost:10083
#redmine.api_key=69b347fdfbf01bb60a10ea6daa92eb86acd10e3b
redmine.url=http://localhost:10083
redmine.api_key=69b347fdfbf01bb60a10ea6daa92eb86acd10e3b
###CONFIGURACION DEL TAMANO MAXIMO PERMITIDO PARA ARCHIVOS### ###CONFIGURACION DEL TAMANO MAXIMO PERMITIDO PARA ARCHIVOS###


Loading…
Cancel
Save