@ -1,34 +1,44 @@
package com.example.application.views.tickets ;
import com.example.application.api.RedmineClient ;
import com.example.application.api.SecurityService ;
import com.example.application.api.ServerPrpperties ;
import com.example.application.models.Ticket ;
import com.example.application.views.MainLayout ;
import com.vaadin.flow.component.grid.Grid ;
import com.vaadin.flow.component.html.Span ;
import com.vaadin.flow.component.orderedlayout.VerticalLayout ;
import com.vaadin.flow.data.renderer.ComponentRenderer ;
import com.vaadin.flow.router.PageTitle ;
import com.vaadin.flow.router.Route ;
import com.vaadin.flow.server.auth.AnonymousAllowed ;
import org.springframework.beans.factory.annotation.Autowired ;
import java.util.List ;
@Route ( value = "mytickets" , layout = MainLayout . class )
@AnonymousAllowed
@PageTitle ( "Mis tickets" )
public class MisTicketsView extends VerticalLayout {
private final RedmineClient redmineClient ;
private final Grid < Ticket > grid ;
private final SecurityService securityService ;
public MisTicketsView ( ServerPrpperties prpperties ) {
@Autowired
public MisTicketsView ( ServerPrpperties prpperties , SecurityService securityService ) {
this . redmineClient = new RedmineClient ( prpperties . REDMINE_URL , prpperties . API_KEY ) ;
this . grid = new Grid < > ( Ticket . class , false ) ;
this . securityService = securityService ;
/ / Definir columnas en el orden deseado
grid . addColumn ( Ticket : : getId ) . setHeader ( "NO " )
grid . addColumn ( Ticket : : getId ) . setHeader ( "No. " )
. setWidth ( "4em" ) . setFlexGrow ( 0 ) ;
grid . addColumn ( Ticket : : getSubject ) . setHeader ( "Asunto" )
. setAutoWidth ( true ) . setFlexGrow ( 1 ) ;
grid . addColumn ( Ticket : : getStatus ) . setHeader ( "Estado" )
grid . addColumn ( createStatusRender ( ) ) . setHeader ( "Estado" )
. setWidth ( "7em" ) . setFlexGrow ( 1 ) ;
grid . addColumn ( Ticket : : getDescription ) . setHeader ( "Descripción" )
. setAutoWidth ( true ) . setFlexGrow ( 1 ) ;
@ -44,11 +54,39 @@ public class MisTicketsView extends VerticalLayout {
add ( grid ) ;
expand ( grid ) ;
loadTickets ( ) ;
loadTickets ( getAuthenticatedUsername ( ) ) ;
}
private void loadTickets ( ) {
List < Ticket > tickets = redmineClient . getTickets ( ) ;
private void loadTickets ( String authenticatedUsername ) {
List < Ticket > tickets = redmineClient . getTicketsCreatedBy ( authenticatedUsername ) ;
System . out . println ( "Tickets para mostrar: " + tickets . size ( ) ) ;
grid . setItems ( tickets ) ;
}
private String getAuthenticatedUsername ( ) {
String username = securityService . getAuthenticatedUser ( ) . getUsername ( ) ;
System . out . println ( "Usuario autenticado: " + username ) ;
return username ;
}
private ComponentRenderer < Span , Ticket > createStatusRender ( ) {
return new ComponentRenderer < > ( ticket - > {
Span span = new Span ( ticket . getStatus ( ) ) ;
switch ( ticket . getStatus ( ) . toLowerCase ( ) ) {
case "open" :
span . getElement ( ) . getStyle ( ) . set ( "color" , "green" ) ;
break ;
case "closed" :
span . getElement ( ) . getStyle ( ) . set ( "color" , "red" ) ;
break ;
case "in progress" :
span . getElement ( ) . getStyle ( ) . set ( "color" , "orange" ) ;
break ;
default :
span . getElement ( ) . getStyle ( ) . set ( "color" , "green" ) ;
break ;
}
return span ;
} ) ;
}
}