Skip to content

feat: enhance search functionality and add sede validation in services - #33

Merged
iJosueeh merged 1 commit into
devfrom
feature/search-catalog-improvements
Jun 3, 2026
Merged

feat: enhance search functionality and add sede validation in services#33
iJosueeh merged 1 commit into
devfrom
feature/search-catalog-improvements

Conversation

@iJosueeh

@iJosueeh iJosueeh commented Jun 3, 2026

Copy link
Copy Markdown
Owner

No description provided.

Copilot AI review requested due to automatic review settings June 3, 2026 23:45
@iJosueeh
iJosueeh merged commit 90a9e01 into dev Jun 3, 2026
2 checks passed
@iJosueeh
iJosueeh deleted the feature/search-catalog-improvements branch June 3, 2026 23:47

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR enhances multi-term search behavior across the app (global search + list filtering), adds navigation “handoff” of initial search terms between modules, and introduces validation to prevent inventory/attention operations when a Sede is inactive. It also expands product/inventory UIs (price + stock display/filtering) and adjusts role/permission handling and seed data.

Changes:

  • Implement multi-word (order-independent) search in DAOs and UI controllers, plus integration test coverage for multi-word global search.
  • Add initial-search navigation parameters (Topbar → Productos / Inventario) and batch filtering UI + controller support.
  • Add Sede active-state validation for inventory movements and attentions; extend product model/DAO/UI for precio_unitario and per-sede stock display.

Reviewed changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/test/java/com/utp/meditrackapp/features/search/dao/GlobalSearchDaoIntegrationTest.java Adds integration test for multi-word global search queries.
src/main/resources/com/utp/meditrackapp/sidebar.fxml Removes “Movimientos / Mermas” button from sidebar UI.
src/main/resources/com/utp/meditrackapp/productos-view.fxml Hides product ID column; adds price/stock columns and price input field.
src/main/resources/com/utp/meditrackapp/inventory-view.fxml Adds batch-monitor search bar (text field + button) wired to controller.
src/main/java/com/utp/meditrackapp/features/users/ui/UsuarioController.java Improves user search; replaces delete with activate/deactivate toggle in actions column.
src/main/java/com/utp/meditrackapp/features/sedes/dao/SedeDAO.java Adds buscarPorId returning Optional<Sede> for Sede validation use-cases.
src/main/java/com/utp/meditrackapp/features/search/dao/GlobalSearchDAO.java Implements dynamic multi-term SQL for patients/products; keeps batch search simple.
src/main/java/com/utp/meditrackapp/features/products/ui/ProductoController.java Adds stock-per-sede display, price field, multi-term filtering, and initial-search handling.
src/main/java/com/utp/meditrackapp/features/patients/repository/PacienteRepositoryImpl.java Implements multi-term SQL search for pacientes; falls back to findAll() on empty query.
src/main/java/com/utp/meditrackapp/features/inventory/ui/InventoryController.java Adds initial-search handling and in-memory batch list filtering + handler method.
src/main/java/com/utp/meditrackapp/features/inventory/service/InventarioService.java Blocks movement registration when the associated Sede is inactive.
src/main/java/com/utp/meditrackapp/features/auth/Dao/UsuarioDao.java Replaces “delete/deactivate” with toggleEstado(id, nuevoEstado) update.
src/main/java/com/utp/meditrackapp/features/attentions/service/AtencionService.java Validates Sede active state before registering an attention, returning user-facing messages.
src/main/java/com/utp/meditrackapp/core/ui/TopbarController.java Routes PRODUCT results to Productos (with initial search) and BATCH to Inventario (with initial search).
src/main/java/com/utp/meditrackapp/core/ui/SidebarController.java Removes Movements navigation and adjusts role-based visibility logic.
src/main/java/com/utp/meditrackapp/core/models/entity/Producto.java Adds precioUnitario field + getter/setter.
src/main/java/com/utp/meditrackapp/core/dao/RolDAO.java Prevents role deletion when users are assigned to the role.
src/main/java/com/utp/meditrackapp/core/dao/ProductoDAO.java Adds optional precio_unitario column support (schema detection + CRUD/select mapping).
src/main/java/com/utp/meditrackapp/core/dao/LoteDAO.java Adds obtenerStockTotalPorSede to fetch per-product stock totals for a sede.
src/main/java/com/utp/meditrackapp/core/dao/CategoriaDAO.java Prevents category deletion when products are assigned to the category.
src/main/java/com/utp/meditrackapp/core/config/SessionManager.java Changes role checks to substring-based matching (but currently has an accent/diacritics bug).
src/main/java/com/utp/meditrackapp/core/config/NavigationService.java Adds initial-search parameters for Inventario/Productos navigation and clears after read.
database/nuevoscriptSQLsemifinal.txt Updates roles and seed users (adds Químico + Técnico roles/users).
database/init.sql Updates roles seed and inserts multiple default users.

Comment on lines 35 to 38
public boolean isTecnico() {
return isLoggedIn() && "Técnico de Farmacia".equalsIgnoreCase(currentUser.getRolNombre());
return isLoggedIn() && currentUser.getRolNombre() != null &&
currentUser.getRolNombre().toLowerCase().contains("tecnic");
}
Comment on lines 40 to 44
public boolean isQuimico() {
return isLoggedIn() && "Químico Farmacéutico".equalsIgnoreCase(currentUser.getRolNombre());
return isLoggedIn() && currentUser.getRolNombre() != null &&
(currentUser.getRolNombre().toLowerCase().contains("farmac") ||
currentUser.getRolNombre().toLowerCase().contains("quimic"));
}
Comment on lines +188 to 193
btnEdit.setTooltip(new Tooltip("Editar usuario"));
btnEdit.setOnAction(e -> showEditForm(getTableView().getItems().get(getIndex())));

btnDelete.setGraphic(new FontIcon("fas-user-minus"));
btnDelete.getStyleClass().addAll("button", "flat", "danger");
btnDelete.setOnAction(e -> handleDelete(getTableView().getItems().get(getIndex())));
btnToggle.getStyleClass().addAll("button", "flat");
btnToggle.setOnAction(e -> handleToggleStatus(getTableView().getItems().get(getIndex())));
}
Comment on lines +200 to +214
} else {
Usuario u = getTableView().getItems().get(getIndex());
if (u.getIsActivo() == 1) {
btnToggle.setGraphic(new FontIcon("fas-user-minus"));
btnToggle.getStyleClass().removeAll("success");
btnToggle.getStyleClass().add("danger");
btnToggle.setTooltip(new Tooltip("Desactivar usuario"));
} else {
btnToggle.setGraphic(new FontIcon("fas-user-check"));
btnToggle.getStyleClass().removeAll("danger");
btnToggle.getStyleClass().add("success");
btnToggle.setTooltip(new Tooltip("Activar usuario"));
}
setGraphic(box);
}
Comment on lines +91 to +105
@Override protected void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
} else {
setText(item.toString());
Producto p = getTableRow().getItem();
if (p != null && p.getStockMinimo() != null && item < p.getStockMinimo()) {
getStyleClass().add("text-danger");
setStyle("-fx-font-weight: bold;");
} else {
getStyleClass().remove("text-danger");
setStyle("");
}

@Test
public void testMultiWordSearch() throws SQLException {
// 'Paracetamol 500mg' exist in seeds.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants