feat(turnero): múltiples consentimientos por tipo de examen
- save_ex_tipo.php: GET devuelve form_ids[], POST acepta form_ids[] y hace DELETE+INSERT por cada uno (la tabla ya soportaba muchos a muchos) - configuracion.php: reemplaza select único por checkboxes en formulario Agregar y modal Editar; JS lee los checks y envía form_ids[] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
b6179574c3
commit
b2bc0f950a
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* modules/turnero/api/save_ex_tipo.php
|
||||
* GET ?id=X → devuelve datos de un tipo de examen (incluyendo formulario_id vinculado)
|
||||
* POST {codigo, nombre, categoria, formulario_id, activo} → crear
|
||||
* POST {id, codigo, nombre, categoria, formulario_id, activo} → actualizar
|
||||
* POST {id, _delete: true} → eliminar
|
||||
* GET ?id=X → devuelve datos de un tipo de examen (incluyendo form_ids[])
|
||||
* POST {codigo, nombre, categoria, form_ids:[], activo} → crear
|
||||
* POST {id, codigo, nombre, categoria, form_ids:[], activo} → actualizar
|
||||
* POST {id, _delete: true} → eliminar
|
||||
*/
|
||||
require_once __DIR__ . '/_helpers.php';
|
||||
|
||||
@@ -15,16 +15,14 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
||||
$id = (int)($_GET['id'] ?? 0);
|
||||
if (!$id) jsonError('ID requerido');
|
||||
|
||||
$stmt = db()->prepare(
|
||||
'SELECT et.*,
|
||||
(SELECT formulario_id FROM exam_tipo_consentimientos
|
||||
WHERE exam_tipo_id = et.id LIMIT 1) AS formulario_id
|
||||
FROM exam_tipos et
|
||||
WHERE et.id = ?'
|
||||
);
|
||||
$stmt = db()->prepare('SELECT * FROM exam_tipos WHERE id = ?');
|
||||
$stmt->execute([$id]);
|
||||
$data = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if (!$data) jsonError('Examen no encontrado', 404);
|
||||
|
||||
$fStmt = db()->prepare('SELECT formulario_id FROM exam_tipo_consentimientos WHERE exam_tipo_id = ?');
|
||||
$fStmt->execute([$id]);
|
||||
$data['form_ids'] = $fStmt->fetchAll(PDO::FETCH_COLUMN);
|
||||
jsonOk(['data' => $data]);
|
||||
}
|
||||
|
||||
@@ -52,11 +50,11 @@ if ($delete) {
|
||||
}
|
||||
|
||||
// ── CREAR / ACTUALIZAR ───────────────────────────────────────
|
||||
$codigo = strtoupper(trim($input['codigo'] ?? ''));
|
||||
$nombre = trim($input['nombre'] ?? '');
|
||||
$categoria = trim($input['categoria'] ?? '');
|
||||
$formId = (int)($input['formulario_id'] ?? 0) ?: null;
|
||||
$activo = (int)($input['activo'] ?? 1);
|
||||
$codigo = strtoupper(trim($input['codigo'] ?? ''));
|
||||
$nombre = trim($input['nombre'] ?? '');
|
||||
$categoria = trim($input['categoria'] ?? '');
|
||||
$formIds = array_values(array_unique(array_filter(array_map('intval', (array)($input['form_ids'] ?? [])))));
|
||||
$activo = (int)($input['activo'] ?? 1);
|
||||
|
||||
if ($codigo === '') jsonError('El código es requerido');
|
||||
if ($nombre === '') jsonError('El nombre es requerido');
|
||||
@@ -80,12 +78,11 @@ try {
|
||||
$examId = (int)$pdo->lastInsertId();
|
||||
}
|
||||
|
||||
// Actualizar relación formulario ↔ examen
|
||||
// Actualizar relaciones formulario ↔ examen (muchos a muchos)
|
||||
$pdo->prepare('DELETE FROM exam_tipo_consentimientos WHERE exam_tipo_id = ?')->execute([$examId]);
|
||||
if ($formId) {
|
||||
$pdo->prepare(
|
||||
'INSERT INTO exam_tipo_consentimientos (exam_tipo_id, formulario_id) VALUES (?, ?)'
|
||||
)->execute([$examId, $formId]);
|
||||
$ins = $pdo->prepare('INSERT INTO exam_tipo_consentimientos (exam_tipo_id, formulario_id) VALUES (?, ?)');
|
||||
foreach ($formIds as $fid) {
|
||||
$ins->execute([$examId, $fid]);
|
||||
}
|
||||
|
||||
$pdo->commit();
|
||||
|
||||
Reference in New Issue
Block a user