Browse Source

Se añadio una feature que compara las dos fechas tanto la de programacion como la de realizacion y dice si el mantenimiento fue realizado a tiempo o fuera de tiempo, ademas ya no se permite actualizar la fecha de programacion

master
mramirezg 3 weeks ago
parent
commit
b2d8f8852f
5 changed files with 95 additions and 51 deletions
  1. +5
    -1
      src/main/java/mx/gob/jumapacelaya/models/DetalleMantenimientoModel.java
  2. +21
    -1
      src/main/java/mx/gob/jumapacelaya/models/PlanAnual.java
  3. +41
    -25
      src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
  4. +12
    -18
      src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
  5. +16
    -6
      src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java

+ 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 firmaSmt;
private String firmaGcia;
private String situacion;
public DetalleMantenimientoModel(int id, int planAnualId, String tipo, String departamento,
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.planAnualId = planAnualId;
@ -32,6 +33,7 @@ public class DetalleMantenimientoModel {
this.firmaUser = firmaUser;
this.firmaSmt = firmaSmt;
this.firmaGcia = firmaGcia;
this.situacion = situacion;
}
public int getId() { return id; }
@ -46,6 +48,7 @@ public class DetalleMantenimientoModel {
public String getFirmaUser() { return firmaUser; }
public String getFirmaSmt() { return firmaSmt; }
public String getFirmaGcia() { return firmaGcia; }
public String getSituacion() { return situacion; }
public void setId(int id) { this.id = id; }
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 setFirmaSmt(String firmaSmt) { this.firmaSmt = firmaSmt; }
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 LocalDate fechaProgramada;
private LocalDate fechaMantenimiento;
private String mesplaneado;
private String smt;
private String estado;
private String situacion;
// Constructor
public PlanAnual(int numero, String nomEquipo, String departamento, boolean monitor,
boolean teclado, boolean mouse, boolean regulador,
boolean cpu, boolean impresora, boolean miniPrint,
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.nomEquipo = nomEquipo;
@ -41,8 +43,10 @@ public class PlanAnual {
this.escaner = escaner;
this.fechaProgramada = fechaProgramada;
this.fechaMantenimiento = fechaMantenimiento;
this.mesplaneado = mesplaneado;
this.smt = smt;
this.estado = estado;
this.situacion = situacion;
}
// Getters
@ -122,4 +126,20 @@ public class PlanAnual {
public void setFechaProgramada(LocalDate 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;
}
}

+ 41
- 25
src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java View File

@ -162,14 +162,17 @@ public class DatabaseService {
/* ----------------Obtener el Plan Anual de Mantenimiento ---------------- */
public List<PlanAnual> getPlanAnual() {
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();
Statement statement = connection.createStatement();
@ -191,8 +194,10 @@ public class DatabaseService {
resultSet.getBoolean("escaner"),
resultSet.getDate("fechaprog").toLocalDate(), // Cambiado a LocalDate
resultSet.getDate("fechaMantenimiento") != null ? resultSet.getDate("fechaMantenimiento").toLocalDate() : null, // Cambiado a LocalDate
resultSet.getString("mesplaneado"),
resultSet.getString("tecnicosmt"),
resultSet.getString("estado")
resultSet.getString("estado"),
resultSet.getString("SITUACION")
);
planAnualList.add(planAnual);
}
@ -207,17 +212,28 @@ public class DatabaseService {
/* ----------------Obtener detalles del mantenimiento ---------------- */
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();
PreparedStatement statement = connection.prepareStatement(query)) {
@ -238,7 +254,8 @@ public class DatabaseService {
rs.getString("FORMAMANT"),
rs.getString("FIRMAUSUARIO"),
rs.getString("FIRMASMT"),
rs.getString("FIRMAGCIA")
rs.getString("FIRMAGCIA"),
rs.getString("SITUACION")
);
}
}
@ -604,13 +621,12 @@ public class DatabaseService {
/* ----------------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();
PreparedStatement stmt = conn.prepareStatement(sql)) {
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;
} catch (SQLException e) {
e.printStackTrace();


+ 12
- 18
src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java View File

@ -12,16 +12,12 @@ 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.cglib.core.Local;
import org.springframework.security.core.context.SecurityContextHolder;
import org.vaadin.lineawesome.LineAwesomeIcon;
import com.nimbusds.jose.proc.SecurityContext;
import com.vaadin.flow.component.button.Button;
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.dialog.Dialog;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridVariant;
import com.vaadin.flow.component.gridpro.GridPro;
import com.vaadin.flow.component.html.H3;
@ -34,8 +30,6 @@ 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.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.BeforeEnterObserver;
import com.vaadin.flow.router.PageTitle;
@ -51,7 +45,6 @@ import mx.gob.jumapacelaya.models.TiposMantenimiento;
import mx.gob.jumapacelaya.models.Usuario;
import mx.gob.jumapacelaya.services.DatabaseService;
import mx.gob.jumapacelaya.services.SecurityService;
import oracle.net.aso.f;
@PageTitle("Detalles del mantenimiento")
@Route(value = "detalles", layout = MainLayout.class)
@ -70,7 +63,8 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
private TextField txtEquipo;
private ComboBox<TiposMantenimiento> cbTipo;
private TextField txtFecha;
private TextField txtFechaRealizacion;
private TextField txtFechaProgramada;
private TextField txtSituacion;
private ComboBox<Usuario> cbUsuario;
private ComboBox<DepartamentosModel> cbDepartamento;
private GridPro<HardwareDetalle> gridHardware;
@ -144,10 +138,12 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
fechasLayout = new HorizontalLayout();
fechasLayout.setWidthFull();
txtFecha = new TextField("Fecha realización:");
txtFechaRealizacion = new TextField("Fecha programada:");
txtFechaProgramada = new TextField("Fecha programada:");
txtSituacion = new TextField("Situación:");
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.setWidthFull();
@ -225,7 +221,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(false);
cbTipo.setReadOnly(false);
txtFecha.setReadOnly(false);
txtFechaRealizacion.setReadOnly(false);
cbUsuario.setReadOnly(false);
cbDepartamento.setReadOnly(false);
btnImprimirRepo.setVisible(false);
@ -255,7 +250,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(true);
cbTipo.setReadOnly(true);
txtFecha.setReadOnly(true);
txtFechaRealizacion.setReadOnly(true);
cbUsuario.setReadOnly(true);
cbDepartamento.setReadOnly(true);
btnImprimirRepo.setVisible(true);
@ -350,7 +344,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(true);
cbTipo.setReadOnly(true);
txtFecha.setReadOnly(true);
txtFechaRealizacion.setReadOnly(true);
cbUsuario.setReadOnly(true);
cbDepartamento.setReadOnly(true);
btnImprimirRepo.setVisible(true);
@ -392,7 +385,7 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
// Fechas (corrige el campo)
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;
@ -414,7 +407,7 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
// ACTUALIZA PLANANUAL (nombre del equipo y fecha programada)
if (!service.actualizarPlanAnual(planAnualIdActual, txtEquipo.getValue(), fechaProg)) {
if (!service.actualizarPlanAnual(planAnualIdActual, txtEquipo.getValue())) {
exito = false;
}
// ACTUALIZA MANTENIMIENTOS (tipo, departamento, usuario, fecha realizado)
@ -456,7 +449,6 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
txtEquipo.setReadOnly(true);
cbTipo.setReadOnly(true);
txtFecha.setReadOnly(true);
txtFechaRealizacion.setReadOnly(true);
cbUsuario.setReadOnly(true);
cbDepartamento.setReadOnly(true);
btnImprimirRepo.setVisible(true);
@ -545,9 +537,11 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String fechaProg = detalle.getFechaprog() != null ? detalle.getFechaprog().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);
txtSituacion.setValue(situacion);
cbUsuario.setValue(
cbUsuario.getListDataView().getItems()
.filter(u -> u.getNombre().equals(detalle.getUsuario()))


+ 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);
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"))
.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_ROW_STRIPES);
planAnualGrid.addColumn(planAnual -> {
String mesPlaneado = planAnual.getMesplaneado();
return mesPlaneado != null ? mesPlaneado.toUpperCase() : "N/A";
}).setHeader("Mes Planeado").setAutoWidth(true);
// Fechas formateadas
planAnualGrid.addColumn(planAnual -> {
LocalDate fecha = planAnual.getFechaProgramada();
@ -276,14 +282,18 @@ public class PlanAnualView extends VerticalLayout {
return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "";
}).setHeader("Fecha Realización").setAutoWidth(true).setSortable(true);
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getEstado)
.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
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.isMouse())).setHeader("Mouse");
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.isMiniPrint())).setHeader("MiniPrint");
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
planAnualGrid.setItems(databaseService.getPlanAnual());


Loading…
Cancel
Save