3 Commits

14 changed files with 207 additions and 66 deletions
Unified View
  1. +20
    -0
      pom.xml
  2. BIN
      src/main/bundles/prod.bundle
  3. +5
    -1
      src/main/java/mx/gob/jumapacelaya/models/DetalleMantenimientoModel.java
  4. +21
    -1
      src/main/java/mx/gob/jumapacelaya/models/PlanAnual.java
  5. +47
    -32
      src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
  6. +41
    -0
      src/main/java/mx/gob/jumapacelaya/services/ReportService.java
  7. +51
    -20
      src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
  8. +2
    -2
      src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
  9. +16
    -6
      src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java
  10. BIN
      src/main/resources/META-INF/resources/images/FirmaGerenteTI.png
  11. BIN
      src/main/resources/META-INF/resources/images/firmaGcia.png
  12. BIN
      src/main/resources/META-INF/resources/reportes/mantenimientoReport.jasper
  13. +2
    -2
      src/main/resources/application-dev.properties
  14. +2
    -2
      src/main/resources/application-prod.properties

+ 20
- 0
pom.xml View File

@ -93,6 +93,12 @@
<artifactId>ojdbc8</artifactId> <artifactId>ojdbc8</artifactId>
</dependency> </dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency> <dependency>
<!-- Dependencia para poder enviar correos --> <!-- Dependencia para poder enviar correos -->
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@ -159,6 +165,20 @@
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
<version>2.16.1</version> <version>2.16.1</version>
</dependency> </dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>7.0.3</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-pdf</artifactId>
<version>7.0.3</version>
</dependency>
</dependencies> </dependencies>
<build> <build>


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


+ 5
- 1
src/main/java/mx/gob/jumapacelaya/models/DetalleMantenimientoModel.java View File

@ -15,10 +15,11 @@ public class DetalleMantenimientoModel {
private String firmaUser; private String firmaUser;
private String firmaSmt; private String firmaSmt;
private String firmaGcia; private String firmaGcia;
private String situacion;
public DetalleMantenimientoModel(int id, int planAnualId, String tipo, String departamento, public DetalleMantenimientoModel(int id, int planAnualId, String tipo, String departamento,
String usuario, LocalDate fechaprog, LocalDate fecha, String nombreEquipo, String formaMant, String usuario, LocalDate fechaprog, LocalDate fecha, String nombreEquipo, String formaMant,
String firmaUser, String firmaSmt, String firmaGcia) {
String firmaUser, String firmaSmt, String firmaGcia, String situacion) {
this.id = id; this.id = id;
this.planAnualId = planAnualId; this.planAnualId = planAnualId;
@ -32,6 +33,7 @@ public class DetalleMantenimientoModel {
this.firmaUser = firmaUser; this.firmaUser = firmaUser;
this.firmaSmt = firmaSmt; this.firmaSmt = firmaSmt;
this.firmaGcia = firmaGcia; this.firmaGcia = firmaGcia;
this.situacion = situacion;
} }
public int getId() { return id; } public int getId() { return id; }
@ -46,6 +48,7 @@ public class DetalleMantenimientoModel {
public String getFirmaUser() { return firmaUser; } public String getFirmaUser() { return firmaUser; }
public String getFirmaSmt() { return firmaSmt; } public String getFirmaSmt() { return firmaSmt; }
public String getFirmaGcia() { return firmaGcia; } public String getFirmaGcia() { return firmaGcia; }
public String getSituacion() { return situacion; }
public void setId(int id) { this.id = id; } public void setId(int id) { this.id = id; }
public void setPlanAnualId(int planAnualId) { this.planAnualId = planAnualId; } public void setPlanAnualId(int planAnualId) { this.planAnualId = planAnualId; }
@ -59,4 +62,5 @@ public class DetalleMantenimientoModel {
public void setFirmaUser(String firmaUser) { this.firmaUser = firmaUser; } public void setFirmaUser(String firmaUser) { this.firmaUser = firmaUser; }
public void setFirmaSmt(String firmaSmt) { this.firmaSmt = firmaSmt; } public void setFirmaSmt(String firmaSmt) { this.firmaSmt = firmaSmt; }
public void setFirmaGcia(String firmaGcia) { this.firmaGcia = firmaGcia; } public void setFirmaGcia(String firmaGcia) { this.firmaGcia = firmaGcia; }
public void setSituacion(String situacion) { this.situacion = situacion; }
} }

+ 21
- 1
src/main/java/mx/gob/jumapacelaya/models/PlanAnual.java View File

@ -17,15 +17,17 @@ public class PlanAnual {
private boolean escaner; // Cambiado a boolean private boolean escaner; // Cambiado a boolean
private LocalDate fechaProgramada; private LocalDate fechaProgramada;
private LocalDate fechaMantenimiento; private LocalDate fechaMantenimiento;
private String mesplaneado;
private String smt; private String smt;
private String estado; private String estado;
private String situacion;
// Constructor // Constructor
public PlanAnual(int numero, String nomEquipo, String departamento, boolean monitor, public PlanAnual(int numero, String nomEquipo, String departamento, boolean monitor,
boolean teclado, boolean mouse, boolean regulador, boolean teclado, boolean mouse, boolean regulador,
boolean cpu, boolean impresora, boolean miniPrint, boolean cpu, boolean impresora, boolean miniPrint,
boolean laptop, boolean escaner, LocalDate fechaProgramada, boolean laptop, boolean escaner, LocalDate fechaProgramada,
LocalDate fechaMantenimiento, String smt, String estado) {
LocalDate fechaMantenimiento, String mesplaneado, String smt, String estado, String situacion) {
this.numero = numero; this.numero = numero;
this.nomEquipo = nomEquipo; this.nomEquipo = nomEquipo;
@ -41,8 +43,10 @@ public class PlanAnual {
this.escaner = escaner; this.escaner = escaner;
this.fechaProgramada = fechaProgramada; this.fechaProgramada = fechaProgramada;
this.fechaMantenimiento = fechaMantenimiento; this.fechaMantenimiento = fechaMantenimiento;
this.mesplaneado = mesplaneado;
this.smt = smt; this.smt = smt;
this.estado = estado; this.estado = estado;
this.situacion = situacion;
} }
// Getters // Getters
@ -122,4 +126,20 @@ public class PlanAnual {
public void setFechaProgramada(LocalDate fechaProgramada) { public void setFechaProgramada(LocalDate fechaProgramada) {
this.fechaProgramada = fechaProgramada; this.fechaProgramada = fechaProgramada;
} }
public String getMesplaneado() {
return mesplaneado;
}
public void setMesplaneado(String mesplaneado) {
this.mesplaneado = mesplaneado;
}
public String getSituacion() {
return situacion;
}
public void setSituacion(String situacion) {
this.situacion = situacion;
}
} }

+ 47
- 32
src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java View File

@ -162,14 +162,17 @@ public class DatabaseService {
/* ----------------Obtener el Plan Anual de Mantenimiento ---------------- */ /* ----------------Obtener el Plan Anual de Mantenimiento ---------------- */
public List<PlanAnual> getPlanAnual() { public List<PlanAnual> getPlanAnual() {
List<PlanAnual> planAnualList = new ArrayList<>(); List<PlanAnual> planAnualList = new ArrayList<>();
String query = "SELECT p.plananualid, p.nomEquipo, p.area, \r\n" + //
" p.monitor, p.teclado, p.mouse, p.regulador, \r\n" + //
" p.cpu, p.impresora, p.miniPrint, p.laptop, p.escaner, \r\n" + //
" p.fechaprog, m.fecha AS fechaMantenimiento, \r\n" + //
" p.tecnicosmt, p.estado\r\n" + //
"FROM PLANANUAL p\r\n" + //
"LEFT JOIN MANTENIMIENTOS m ON p.plananualid = m.plananualid\r\n" + //
"ORDER BY p.plananualid ASC";
String query = "SELECT p.plananualid, p.nomEquipo, p.area,\n" +
" p.monitor, p.teclado, p.mouse, p.regulador,\n" +
" p.cpu, p.impresora, p.miniPrint, p.laptop, p.escaner,\n" +
" p.fechaprog, m.fecha AS fechaMantenimiento,\n" +
" me.NOMBRE AS MESPLANEADO, p.tecnicosmt, p.estado,\n" +
" COALESCE(v.SITUACION, 'NO REALIZADO') AS SITUACION\n" +
"FROM PLANANUAL p\n" +
"LEFT JOIN MANTENIMIENTOS m ON p.plananualid = m.plananualid\n" +
"LEFT JOIN MESES me ON p.MESID = me.MESID\n" +
"LEFT JOIN VW_SITUACION_MANTENIMIENTO v ON v.PLANANUALID = p.PLANANUALID\n" +
"ORDER BY p.plananualid ASC";
try (Connection connection = getMysqlConnection(); try (Connection connection = getMysqlConnection();
Statement statement = connection.createStatement(); Statement statement = connection.createStatement();
@ -191,8 +194,10 @@ public class DatabaseService {
resultSet.getBoolean("escaner"), resultSet.getBoolean("escaner"),
resultSet.getDate("fechaprog").toLocalDate(), // Cambiado a LocalDate resultSet.getDate("fechaprog").toLocalDate(), // Cambiado a LocalDate
resultSet.getDate("fechaMantenimiento") != null ? resultSet.getDate("fechaMantenimiento").toLocalDate() : null, // Cambiado a LocalDate resultSet.getDate("fechaMantenimiento") != null ? resultSet.getDate("fechaMantenimiento").toLocalDate() : null, // Cambiado a LocalDate
resultSet.getString("mesplaneado"),
resultSet.getString("tecnicosmt"), resultSet.getString("tecnicosmt"),
resultSet.getString("estado")
resultSet.getString("estado"),
resultSet.getString("SITUACION")
); );
planAnualList.add(planAnual); planAnualList.add(planAnual);
} }
@ -207,17 +212,28 @@ public class DatabaseService {
/* ----------------Obtener detalles del mantenimiento ---------------- */ /* ----------------Obtener detalles del mantenimiento ---------------- */
public DetalleMantenimientoModel getDetalleMantenimientoPorPlanAnualId(int planAnualId) { public DetalleMantenimientoModel getDetalleMantenimientoPorPlanAnualId(int planAnualId) {
String query = "SELECT\r\n" + //
"\tm.MANTENIMIENTOID ID, p.PLANANUALID, t.NOMBRE TIPO,\r\n" + //
"\td.DESCRIPCION DEPARTAMENTO, u.NOMBRE USUARIO, pa.FECHAPROG,\r\n" + //
"\tm.FECHA FECHAREALIZADO, NOMBREEQUIPO, FORMAMANT, FIRMAUSUARIO, FIRMASMT, FIRMAGCIA \r\n" + //
"FROM MANTENIMIENTOS m\r\n" + //
"INNER JOIN TIPOMANT t ON m.TIPOMANTID = t.TIPOMANTID\r\n" + //
"INNER JOIN DEPARTAMENTOS d ON m.DEPARTAMENTOID = d.DEPARTAMENTOID\r\n" + //
"INNER JOIN USUARIOS u ON u.EMPLEADOID = m.EMPLEADOID\r\n" + //
"INNER JOIN PLANANUAL p ON m.PLANANUALID = p.PLANANUALID\r\n" + //
"INNER JOIN PLANANUAL pa ON m.PLANANUALID = pa.PLANANUALID \r\n" + //
"WHERE p.PLANANUALID = ?";
String query = "SELECT\n" +
" m.MANTENIMIENTOID AS ID,\n" +
" p.PLANANUALID,\n" +
" t.NOMBRE AS TIPO,\n" +
" d.DESCRIPCION AS DEPARTAMENTO,\n" +
" u.NOMBRE AS USUARIO,\n" +
" v.FECHAPROG,\n" +
" v.FECHAREALIZADO,\n" +
" NOMBREEQUIPO,\n" +
" FORMAMANT,\n" +
" FIRMAUSUARIO,\n" +
" FIRMASMT,\n" +
" FIRMAGCIA,\n" +
" v.SITUACION\n" +
"FROM MANTENIMIENTOS m\n" +
"INNER JOIN TIPOMANT t ON m.TIPOMANTID = t.TIPOMANTID\n" +
"INNER JOIN DEPARTAMENTOS d ON m.DEPARTAMENTOID = d.DEPARTAMENTOID\n" +
"INNER JOIN USUARIOS u ON u.EMPLEADOID = m.EMPLEADOID\n" +
"INNER JOIN PLANANUAL p ON m.PLANANUALID = p.PLANANUALID\n" +
"INNER JOIN PLANANUAL pa ON m.PLANANUALID = pa.PLANANUALID\n" +
"INNER JOIN VW_SITUACION_MANTENIMIENTO v ON v.MANTENIMIENTOID = m.MANTENIMIENTOID\n" +
"WHERE p.PLANANUALID = ?";
try (Connection connection = getMysqlConnection(); try (Connection connection = getMysqlConnection();
PreparedStatement statement = connection.prepareStatement(query)) { PreparedStatement statement = connection.prepareStatement(query)) {
@ -238,7 +254,8 @@ public class DatabaseService {
rs.getString("FORMAMANT"), rs.getString("FORMAMANT"),
rs.getString("FIRMAUSUARIO"), rs.getString("FIRMAUSUARIO"),
rs.getString("FIRMASMT"), rs.getString("FIRMASMT"),
rs.getString("FIRMAGCIA")
rs.getString("FIRMAGCIA"),
rs.getString("SITUACION")
); );
} }
} }
@ -325,7 +342,7 @@ public class DatabaseService {
String smtSignatureBase64, String planAnualId) { String smtSignatureBase64, String planAnualId) {
String query = "INSERT INTO MANTENIMIENTOS (fecha, tipoMantId, departamentoId, empleadoId, formaMant, nombreequipo," + String query = "INSERT INTO MANTENIMIENTOS (fecha, tipoMantId, departamentoId, empleadoId, formaMant, nombreequipo," +
" firmaUsuario, firmaSmt, planAnualId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING MANTENIMIENTOID INTO ?";
" firmaUsuario, firmaSmt, planAnualId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
String updateStatusQuery = "UPDATE PLANANUAL SET estado = 'REALIZADO' WHERE planAnualId = ?"; String updateStatusQuery = "UPDATE PLANANUAL SET estado = 'REALIZADO' WHERE planAnualId = ?";
@ -343,7 +360,7 @@ public class DatabaseService {
connection.setAutoCommit(false); connection.setAutoCommit(false);
// Paso 1: primero inserta el mantenimiento // Paso 1: primero inserta el mantenimiento
try (OraclePreparedStatement preparedStatement = (OraclePreparedStatement) connection.prepareStatement(query)) {
try (PreparedStatement preparedStatement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS)) {
preparedStatement.setDate(1, Date.valueOf(fecha)); preparedStatement.setDate(1, Date.valueOf(fecha));
preparedStatement.setLong(2, Long.parseLong(tipoMantId)); preparedStatement.setLong(2, Long.parseLong(tipoMantId));
@ -366,13 +383,12 @@ public class DatabaseService {
preparedStatement.setLong(9, Long.parseLong(planAnualId)); preparedStatement.setLong(9, Long.parseLong(planAnualId));
preparedStatement.registerReturnParameter(10, Types.NUMERIC);
preparedStatement.executeUpdate(); preparedStatement.executeUpdate();
ResultSet rs = preparedStatement.getReturnResultSet();
if (rs != null && rs.next()) {
nuevoId = rs.getInt(1);
try (ResultSet rs = preparedStatement.getGeneratedKeys()) {
if (rs.next()) {
nuevoId = rs.getInt(1);
}
} }
} }
@ -604,13 +620,12 @@ public class DatabaseService {
/* ----------------Actualizar los detalles del del mantenimiento por ID ---------------- */ /* ----------------Actualizar los detalles del del mantenimiento por ID ---------------- */
public boolean actualizarPlanAnual(int planAnualId, String nombreEquipo, LocalDate fechaProg) {
String sql = "UPDATE PLANANUAL SET NOMEQUIPO=?, FECHAPROG=? WHERE PLANANUALID=?";
public boolean actualizarPlanAnual(int planAnualId, String nombreEquipo) {
String sql = "UPDATE PLANANUAL SET NOMEQUIPO=? WHERE PLANANUALID=?";
try (Connection conn = getMysqlConnection(); try (Connection conn = getMysqlConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) { PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, nombreEquipo); stmt.setString(1, nombreEquipo);
stmt.setDate(2, fechaProg != null ? Date.valueOf(fechaProg) : null);
stmt.setInt(3, planAnualId);
stmt.setInt(2, planAnualId);
return stmt.executeUpdate() > 0; return stmt.executeUpdate() > 0;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();


+ 41
- 0
src/main/java/mx/gob/jumapacelaya/services/ReportService.java View File

@ -0,0 +1,41 @@
package mx.gob.jumapacelaya.services;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Map;
@Service
public class ReportService {
@Value("${db.url}")
private String dbUrl;
@Value("${db.user}")
private String dbUser;
@Value("${db.pass}")
private String dbPass;
public byte[] generarReporte(String nombreReporte, Map<String, Object> parametros) throws Exception {
InputStream logo = getClass().getResourceAsStream("/META-INF/resources/images/LOGO_24'27.png");
parametros.put("logo", logo);
InputStream firmaGcia = getClass().getResourceAsStream("/META-INF/resources/images/FirmaGerenteTI.png");
parametros.put("firmaGcia", firmaGcia);
InputStream jasperStream = getClass().getResourceAsStream("/META-INF/resources/reportes/" + nombreReporte + ".jasper");
if (jasperStream == null) {
throw new IllegalArgumentException("No se encontro el archivo del reporte: " + nombreReporte);
}
try (Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPass)) {
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parametros, conn);
return JasperExportManager.exportReportToPdf(jasperPrint);
}
}
}

+ 51
- 20
src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java View File

@ -1,20 +1,23 @@
package mx.gob.jumapacelaya.ui; package mx.gob.jumapacelaya.ui;
import java.io.ByteArrayInputStream;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Base64; import java.util.Base64;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import com.vaadin.flow.component.html.Anchor;
import com.vaadin.flow.server.StreamResource;
import mx.gob.jumapacelaya.services.ReportService;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.cglib.core.Local;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.vaadin.lineawesome.LineAwesomeIcon; import org.vaadin.lineawesome.LineAwesomeIcon;
import com.nimbusds.jose.proc.SecurityContext;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.combobox.ComboBox; import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.confirmdialog.ConfirmDialog;
import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.dialog.Dialog; 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.grid.GridVariant;
import com.vaadin.flow.component.gridpro.GridPro; import com.vaadin.flow.component.gridpro.GridPro;
import com.vaadin.flow.component.html.H3; import com.vaadin.flow.component.html.H3;
@ -27,8 +30,6 @@ 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.TextField; import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.binder.Binder;
import com.vaadin.flow.function.ValueProvider;
import com.vaadin.flow.router.BeforeEnterEvent; import com.vaadin.flow.router.BeforeEnterEvent;
import com.vaadin.flow.router.BeforeEnterObserver; import com.vaadin.flow.router.BeforeEnterObserver;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
@ -44,7 +45,6 @@ import mx.gob.jumapacelaya.models.TiposMantenimiento;
import mx.gob.jumapacelaya.models.Usuario; import mx.gob.jumapacelaya.models.Usuario;
import mx.gob.jumapacelaya.services.DatabaseService; import mx.gob.jumapacelaya.services.DatabaseService;
import mx.gob.jumapacelaya.services.SecurityService; import mx.gob.jumapacelaya.services.SecurityService;
import oracle.net.aso.f;
@PageTitle("Detalles del mantenimiento") @PageTitle("Detalles del mantenimiento")
@Route(value = "detalles", layout = MainLayout.class) @Route(value = "detalles", layout = MainLayout.class)
@ -63,7 +63,8 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
private TextField txtEquipo; private TextField txtEquipo;
private ComboBox<TiposMantenimiento> cbTipo; private ComboBox<TiposMantenimiento> cbTipo;
private TextField txtFecha; private TextField txtFecha;
private TextField txtFechaRealizacion;
private TextField txtFechaProgramada;
private TextField txtSituacion;
private ComboBox<Usuario> cbUsuario; private ComboBox<Usuario> cbUsuario;
private ComboBox<DepartamentosModel> cbDepartamento; private ComboBox<DepartamentosModel> cbDepartamento;
private GridPro<HardwareDetalle> gridHardware; private GridPro<HardwareDetalle> gridHardware;
@ -90,10 +91,12 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
private final SecurityService securityService; private final SecurityService securityService;
private final DatabaseService service; private final DatabaseService service;
private final ReportService reportService;
public DetallesMantView(SecurityService securityService, DatabaseService service) {
public DetallesMantView(SecurityService securityService, DatabaseService service, ReportService reportService) {
this.service = service; this.service = service;
this.securityService = securityService; this.securityService = securityService;
this.reportService = reportService;
setPadding(true); setPadding(true);
mainLayout = new VerticalLayout(); mainLayout = new VerticalLayout();
@ -135,10 +138,12 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
fechasLayout = new HorizontalLayout(); fechasLayout = new HorizontalLayout();
fechasLayout.setWidthFull(); fechasLayout.setWidthFull();
txtFecha = new TextField("Fecha realización:"); txtFecha = new TextField("Fecha realización:");
txtFechaRealizacion = new TextField("Fecha programada:");
txtFechaProgramada = new TextField("Fecha programada:");
txtSituacion = new TextField("Situación:");
txtFecha.setReadOnly(true); txtFecha.setReadOnly(true);
txtFechaRealizacion.setReadOnly(true);
fechasLayout.add(txtFechaRealizacion,txtFecha);
txtFechaProgramada.setReadOnly(true);
txtSituacion.setReadOnly(true);
fechasLayout.add(txtFechaProgramada,txtFecha,txtSituacion);
layout3 = new HorizontalLayout(); layout3 = new HorizontalLayout();
layout3.setWidthFull(); layout3.setWidthFull();
@ -216,7 +221,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(false); txtEquipo.setReadOnly(false);
cbTipo.setReadOnly(false); cbTipo.setReadOnly(false);
txtFecha.setReadOnly(false); txtFecha.setReadOnly(false);
txtFechaRealizacion.setReadOnly(false);
cbUsuario.setReadOnly(false); cbUsuario.setReadOnly(false);
cbDepartamento.setReadOnly(false); cbDepartamento.setReadOnly(false);
btnImprimirRepo.setVisible(false); btnImprimirRepo.setVisible(false);
@ -246,7 +250,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(true); txtEquipo.setReadOnly(true);
cbTipo.setReadOnly(true); cbTipo.setReadOnly(true);
txtFecha.setReadOnly(true); txtFecha.setReadOnly(true);
txtFechaRealizacion.setReadOnly(true);
cbUsuario.setReadOnly(true); cbUsuario.setReadOnly(true);
cbDepartamento.setReadOnly(true); cbDepartamento.setReadOnly(true);
btnImprimirRepo.setVisible(true); btnImprimirRepo.setVisible(true);
@ -268,6 +271,34 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
}); });
btnImprimirRepo.addClickListener(e -> {
try {
// Prepara los parámetros para el reporte
Map<String, Object> parametros = new HashMap<>();
parametros.put("PLAN_ID", planAnualIdActual);
// Genera el PDF
byte[] pdf = reportService.generarReporte("mantenimientoReport", parametros);
// Se crea el recurso para descarga
StreamResource resource = new StreamResource("reporte.pdf", () -> new ByteArrayInputStream(pdf));
Anchor downloadLink = new Anchor(resource, "Descargar Reporte");
downloadLink.getElement().setAttribute("download", true);
downloadLink.setId("descargar-reporte-link");
add(downloadLink);
getUI().ifPresent(ui ->
ui.getPage().executeJs("document.getElementById('descargar-reporte-link').click();")
);
} catch (Exception ex) {
Notification.show("Error al generar el reporte: " + ex.getMessage(), 4000, Notification.Position.MIDDLE)
.addThemeVariants(NotificationVariant.LUMO_ERROR);
ex.printStackTrace();
}
});
// Se dispara el dialogo de confirmacion // Se dispara el dialogo de confirmacion
btnGuardar.addClickListener(e -> confirmDialog.open()); btnGuardar.addClickListener(e -> confirmDialog.open());
@ -313,7 +344,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(true); txtEquipo.setReadOnly(true);
cbTipo.setReadOnly(true); cbTipo.setReadOnly(true);
txtFecha.setReadOnly(true); txtFecha.setReadOnly(true);
txtFechaRealizacion.setReadOnly(true);
cbUsuario.setReadOnly(true); cbUsuario.setReadOnly(true);
cbDepartamento.setReadOnly(true); cbDepartamento.setReadOnly(true);
btnImprimirRepo.setVisible(true); btnImprimirRepo.setVisible(true);
@ -355,7 +385,7 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
// Fechas (corrige el campo) // Fechas (corrige el campo)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate fechaProg = !txtFechaRealizacion.getValue().isEmpty() ? LocalDate.parse(txtFechaRealizacion.getValue(), formatter) : null;
LocalDate fechaProg = !txtFechaProgramada.getValue().isEmpty() ? LocalDate.parse(txtFechaProgramada.getValue(), formatter) : null;
LocalDate fechaRealizado = !txtFecha.getValue().isEmpty() ? LocalDate.parse(txtFecha.getValue(), formatter) : null; LocalDate fechaRealizado = !txtFecha.getValue().isEmpty() ? LocalDate.parse(txtFecha.getValue(), formatter) : null;
@ -377,7 +407,7 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
// ACTUALIZA PLANANUAL (nombre del equipo y fecha programada) // ACTUALIZA PLANANUAL (nombre del equipo y fecha programada)
if (!service.actualizarPlanAnual(planAnualIdActual, txtEquipo.getValue(), fechaProg)) {
if (!service.actualizarPlanAnual(planAnualIdActual, txtEquipo.getValue())) {
exito = false; exito = false;
} }
// ACTUALIZA MANTENIMIENTOS (tipo, departamento, usuario, fecha realizado) // ACTUALIZA MANTENIMIENTOS (tipo, departamento, usuario, fecha realizado)
@ -419,7 +449,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(true); txtEquipo.setReadOnly(true);
cbTipo.setReadOnly(true); cbTipo.setReadOnly(true);
txtFecha.setReadOnly(true); txtFecha.setReadOnly(true);
txtFechaRealizacion.setReadOnly(true);
cbUsuario.setReadOnly(true); cbUsuario.setReadOnly(true);
cbDepartamento.setReadOnly(true); cbDepartamento.setReadOnly(true);
btnImprimirRepo.setVisible(true); btnImprimirRepo.setVisible(true);
@ -508,9 +537,11 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String fechaProg = detalle.getFechaprog() != null ? detalle.getFechaprog().format(formatter) : ""; String fechaProg = detalle.getFechaprog() != null ? detalle.getFechaprog().format(formatter) : "";
String fechaReal = detalle.getFecha() != null ? detalle.getFecha().format(formatter) : ""; String fechaReal = detalle.getFecha() != null ? detalle.getFecha().format(formatter) : "";
String situacion = detalle.getSituacion() != null ? detalle.getSituacion() : "";
txtFechaRealizacion.setValue(fechaProg);
txtFechaProgramada.setValue(fechaProg);
txtFecha.setValue(fechaReal); txtFecha.setValue(fechaReal);
txtSituacion.setValue(situacion);
cbUsuario.setValue( cbUsuario.setValue(
cbUsuario.getListDataView().getItems() cbUsuario.getListDataView().getItems()
.filter(u -> u.getNombre().equals(detalle.getUsuario())) .filter(u -> u.getNombre().equals(detalle.getUsuario()))
@ -554,7 +585,7 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
smtSignLayout.replace(smtSignPad, firmaSmtImg); smtSignLayout.replace(smtSignPad, firmaSmtImg);
} }
Image firmaGcia = new Image("images/firmaGcia.png", "Firma de la Gcia. de T.I");
Image firmaGcia = new Image("images/FirmaGerenteTI.png", "Firma de la Gcia. de T.I");
firmaGcia.setHeight("200px"); firmaGcia.setHeight("200px");
firmaGcia.setWidthFull(); firmaGcia.setWidthFull();


+ 2
- 2
src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java View File

@ -460,10 +460,10 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
smtSignLayout.add(smtSignPad, smtSignSpan, tituloSMT); smtSignLayout.add(smtSignPad, smtSignSpan, tituloSMT);
VerticalLayout gcialSignLayout = new VerticalLayout(); VerticalLayout gcialSignLayout = new VerticalLayout();
Image firmaGcia = new Image("images/firmaGcia.png", "Firma Gerente de Sistemas");
Image firmaGcia = new Image("images/FirmaGerenteTI.png", "Firma Gerente de Sistemas");
firmaGcia.setHeight("200px"); firmaGcia.setHeight("200px");
firmaGcia.setWidthFull(); firmaGcia.setWidthFull();
Span gciatiSignSpan = new Span("Lic. Juan Pablo Torres Alvárez");
Span gciatiSignSpan = new Span("Ing. Javier Patiño Martinez");
Span tituloGerente = new Span("Gerente de T.I"); Span tituloGerente = new Span("Gerente de T.I");
gcialSignLayout.setSizeFull(); gcialSignLayout.setSizeFull();
gcialSignLayout.setSpacing(false); gcialSignLayout.setSpacing(false);


+ 16
- 6
src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java View File

@ -90,8 +90,8 @@ public class PlanAnualView extends VerticalLayout {
planAnualFilter.setExcludeRealizado(true); planAnualFilter.setExcludeRealizado(true);
HeaderRow headerRow = planAnualGrid.appendHeaderRow(); HeaderRow headerRow = planAnualGrid.appendHeaderRow();
headerRow.getCell(planAnualGrid.getColumnByKey("smtColumnKey"))
.setComponent(createFilterHeader("S.M.T", planAnualFilter::setSmt));
/*headerRow.getCell(planAnualGrid.getColumnByKey("smtColumnKey"))
.setComponent(createFilterHeader("S.M.T", planAnualFilter::setSmt));*/
headerRow.getCell(planAnualGrid.getColumnByKey("equipoColumnKey")) headerRow.getCell(planAnualGrid.getColumnByKey("equipoColumnKey"))
.setComponent(createFilterHeader("Equipo", planAnualFilter::setEquipo)); .setComponent(createFilterHeader("Equipo", planAnualFilter::setEquipo));
@ -265,6 +265,12 @@ public class PlanAnualView extends VerticalLayout {
planAnualGrid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); planAnualGrid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT);
planAnualGrid.addThemeVariants(GridVariant.LUMO_ROW_STRIPES); planAnualGrid.addThemeVariants(GridVariant.LUMO_ROW_STRIPES);
planAnualGrid.addColumn(planAnual -> {
String mesPlaneado = planAnual.getMesplaneado();
return mesPlaneado != null ? mesPlaneado.toUpperCase() : "N/A";
}).setHeader("Mes Planeado").setAutoWidth(true);
// Fechas formateadas // Fechas formateadas
planAnualGrid.addColumn(planAnual -> { planAnualGrid.addColumn(planAnual -> {
LocalDate fecha = planAnual.getFechaProgramada(); LocalDate fecha = planAnual.getFechaProgramada();
@ -276,14 +282,18 @@ public class PlanAnualView extends VerticalLayout {
return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : ""; return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "";
}).setHeader("Fecha Realización").setAutoWidth(true).setSortable(true); }).setHeader("Fecha Realización").setAutoWidth(true).setSortable(true);
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getEstado) planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getEstado)
.setHeader("Estado").setAutoWidth(true); .setHeader("Estado").setAutoWidth(true);
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getSmt)
.setHeader("S.M.T").setKey("smtColumnKey");
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getSituacion)
.setHeader("Situación").setAutoWidth(true);
/*planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getSmt)
.setHeader("S.M.T").setKey("smtColumnKey");*/
// Iconos en columnas booleanas // Iconos en columnas booleanas
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMonitor())).setHeader("Monitor");
/*planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMonitor())).setHeader("Monitor");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isTeclado())).setHeader("Teclado"); planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isTeclado())).setHeader("Teclado");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMouse())).setHeader("Mouse"); planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMouse())).setHeader("Mouse");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isRegulador())).setHeader("Regulador"); planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isRegulador())).setHeader("Regulador");
@ -291,7 +301,7 @@ public class PlanAnualView extends VerticalLayout {
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isImpresora())).setHeader("Impresora"); planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isImpresora())).setHeader("Impresora");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMiniPrint())).setHeader("MiniPrint"); planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMiniPrint())).setHeader("MiniPrint");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isLaptop())).setHeader("Laptop"); planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isLaptop())).setHeader("Laptop");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isEscaner())).setHeader("Escáner");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isEscaner())).setHeader("Escáner");*/
// Cargar datos // Cargar datos
planAnualGrid.setItems(databaseService.getPlanAnual()); planAnualGrid.setItems(databaseService.getPlanAnual());


BIN
src/main/resources/META-INF/resources/images/FirmaGerenteTI.png View File

Before After
Width: 400  |  Height: 200  |  Size: 14 KiB

BIN
src/main/resources/META-INF/resources/images/firmaGcia.png View File

Before After
Width: 451  |  Height: 301  |  Size: 7.0 KiB

BIN
src/main/resources/META-INF/resources/reportes/mantenimientoReport.jasper View File


+ 2
- 2
src/main/resources/application-dev.properties View File

@ -1,4 +1,4 @@
#Configuracion de la base de datos #Configuracion de la base de datos
db.url=jdbc:oracle:thin:@//localhost:1521/XEPDB1
db.user=MANTENIMIENTOS_PRB
db.url=jdbc:mysql://localhost:3307/mantenimientosdb
db.user=mantenimientos
db.pass=mantenimientos db.pass=mantenimientos

+ 2
- 2
src/main/resources/application-prod.properties View File

@ -1,5 +1,5 @@
#Configuracion de la base de datos #Configuracion de la base de datos
db.url=jdbc:oracle:thin:@//oracle-xe:1521/XEPDB1
db.url=jdbc:mysql://db:3306/mantenimientosdb
#db.url=jdbc:oracle:thin:@//SVRAPPS:1521/XEPDB1 #db.url=jdbc:oracle:thin:@//SVRAPPS:1521/XEPDB1
db.user=MANTENIMIENTOS
db.user=mantenimientos
db.pass=mantenimientos db.pass=mantenimientos

Loading…
Cancel
Save