diff --git a/src/main/bundles/dev.bundle b/src/main/bundles/dev.bundle index 4c0805b..131a055 100644 Binary files a/src/main/bundles/dev.bundle and b/src/main/bundles/dev.bundle differ diff --git a/src/main/bundles/prod.bundle b/src/main/bundles/prod.bundle index 390b9d3..22bf9a6 100644 Binary files a/src/main/bundles/prod.bundle and b/src/main/bundles/prod.bundle differ diff --git a/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java b/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java index 1e2ab4f..ac5c80c 100644 --- a/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java +++ b/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java @@ -14,7 +14,7 @@ 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.component.textfield.TextArea; +import com.vaadin.flow.component.richtexteditor.RichTextEditor; import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.component.upload.Upload; import com.vaadin.flow.component.upload.UploadI18N; @@ -61,7 +61,7 @@ public class CrearnuevoTicketView extends VerticalLayout { //Componentes principales de la UI ComboBox tipoTickets = createTicketTypeComboBox(); TextField asunto = createTextField("Asunto", "1000px"); - TextArea descripcion = createTextArea("Descripcion", "1000px", "250px"); + RichTextEditor descripcion = createTextArea("Descripcion", "1000px", "250px"); // Marcar campos como obligatorios tipoTickets.setRequiredIndicatorVisible(true); @@ -172,14 +172,13 @@ public class CrearnuevoTicketView extends VerticalLayout { private TextField createTextField(String label, String width) { TextField textField = new TextField(label); - textField.setWidth(width); + textField.setSizeFull(); 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; } @@ -199,7 +198,7 @@ public class CrearnuevoTicketView extends VerticalLayout { } } - private void handleCreateButton(RedmineUser user, ComboBox tipoTickets, TextField asunto, TextArea descripcion) { + private void handleCreateButton(RedmineUser user, ComboBox tipoTickets, TextField asunto, RichTextEditor descripcion) { if (user.getKey() == null || user.getKey().isEmpty()) { Notification.show("No se encontró la API key en la sesión.", 5000, Notification.Position.MIDDLE) .addThemeVariants(NotificationVariant.LUMO_ERROR); @@ -252,7 +251,7 @@ public class CrearnuevoTicketView extends VerticalLayout { handleResponse(response, asunto, descripcion, tipoTickets); } - private void handleResponse(String response, TextField asunto, TextArea descripcion, ComboBox tipoTickets) { + private void handleResponse(String response, TextField asunto, RichTextEditor descripcion, ComboBox tipoTickets) { if (response.startsWith("{\"issue\":")) { JsonObject jsonResponse = JsonParser.parseString(response).getAsJsonObject(); 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 tipoTickets) { + private void resetForm(TextField asunto, RichTextEditor descripcion, ComboBox tipoTickets) { asunto.clear(); descripcion.clear(); tipoTickets.clear(); ticketTypeDesc.setText(""); asunto.setInvalid(false); - descripcion.setInvalid(false); + //descripcion.setInvalid(false); tipoTickets.setInvalid(false); buffer = new MultiFileMemoryBuffer(); diff --git a/src/main/java/mx/gob/jumapacelaya/views/login/LoginView.java b/src/main/java/mx/gob/jumapacelaya/views/login/LoginView.java index f50195b..665cd92 100644 --- a/src/main/java/mx/gob/jumapacelaya/views/login/LoginView.java +++ b/src/main/java/mx/gob/jumapacelaya/views/login/LoginView.java @@ -59,7 +59,7 @@ public class LoginView extends VerticalLayout implements BeforeEnterObserver { i18nError.setMessage("Usuario o contraseña incorrectos, verifica tus credenciales"); i18n.setErrorMessage(i18nError); - i18n.setAdditionalInformation("Versión 1.3.0"); + i18n.setAdditionalInformation("Versión 2.0.0"); // Configuración del formulario de login login.setAction("login"); diff --git a/src/main/java/mx/gob/jumapacelaya/views/tickets/AllTicketsView.java b/src/main/java/mx/gob/jumapacelaya/views/tickets/AllTicketsView.java index 93ac3c6..89d22dc 100644 --- a/src/main/java/mx/gob/jumapacelaya/views/tickets/AllTicketsView.java +++ b/src/main/java/mx/gob/jumapacelaya/views/tickets/AllTicketsView.java @@ -1,9 +1,15 @@ 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.GridVariant; 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.richtexteditor.RichTextEditor; import com.vaadin.flow.data.renderer.ComponentRenderer; import com.vaadin.flow.router.PageTitle; 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::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.getStyle().set("opacity", "0.8"); grid.addClassName("vaadin-grid::part(selected-row-cell)"); @@ -74,6 +85,32 @@ public class AllTicketsView extends VerticalLayout { 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() { try { List tickets = redmineClient.getTickets(userService.getRedmineUser(), true); diff --git a/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java b/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java index 49417f4..2278b62 100644 --- a/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java +++ b/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java @@ -1,13 +1,20 @@ 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.GridVariant; 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.richtexteditor.RichTextEditor; import com.vaadin.flow.data.renderer.ComponentRenderer; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; import jakarta.annotation.security.PermitAll; +import mx.gob.jumapacelaya.Application; import mx.gob.jumapacelaya.api.RedmineClient; import mx.gob.jumapacelaya.api.ServerPrpperties; import mx.gob.jumapacelaya.models.Ticket; @@ -30,13 +37,15 @@ public class MisTicketsView extends VerticalLayout { private final RedmineClient redmineClient; private final UserService userService; private final Grid grid; + private final Application application; @Autowired - public MisTicketsView(ServerPrpperties prpperties, RedmineClient redmineClient, UserService userService) { + public MisTicketsView(ServerPrpperties prpperties, RedmineClient redmineClient, UserService userService, Application application) { this.userService = userService; this.redmineClient = redmineClient; this.grid = new Grid<>(Ticket.class, false); + // Configuración de columnas del grid grid.addColumn(Ticket::getId).setHeader("No.") .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::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.getStyle().set("opacity", "0.8"); @@ -73,6 +86,33 @@ public class MisTicketsView extends VerticalLayout { setMargin(false); 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() { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d8cfea2..168fde2 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,13 +18,13 @@ spring.ldap.password=Dr3na$134%4guA ########PRODUCTIVO################################# -redmine.url=https://proyman.jumapacelaya.gob.mx/ -redmine.api_key=65b37a803babb6ba27f0f4fa3e562575d5ae63b3 +#redmine.url=https://proyman.jumapacelaya.gob.mx/ +#redmine.api_key=65b37a803babb6ba27f0f4fa3e562575d5ae63b3 ########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###