213 lines
10 KiB
PHP

<?php
/**
* editar.php — Formulario de edición de oficio
*/
require_once __DIR__ . '/../../config/config.php';
require_once __DIR__ . '/../../controllers/AuthController.php';
require_once __DIR__ . '/../../models/Oficio.php';
require_once __DIR__ . '/../../models/Usuario.php';
AuthController::requerirAuth();
$id = (int)($_GET['id'] ?? 0);
if (!$id) redirect(APP_URL . '/views/oficios/lista.php');
$model = new OficioModel();
$oficio = $model->buscarPorId($id);
if (!$oficio) redirect(APP_URL . '/views/oficios/lista.php?error='.urlencode('Oficio no encontrado.'));
$usuario = new UsuarioModel();
$etiquetas = $model->etiquetas();
$usuarios = $usuario->usuariosParaSelector();
$selEtiq = array_column($model->etiquetasDeOficio($id), 'id');
$errores = $_SESSION['errores_form'] ?? [];
$datos = $_SESSION['datos_form'] ?? $oficio;
unset($_SESSION['errores_form'], $_SESSION['datos_form']);
$pageTitle = 'Editar Oficio: '.$oficio['numero_oficio'];
$activeNav = 'lista';
include __DIR__ . '/../../views/layout/header.php';
include __DIR__ . '/../../views/layout/sidebar.php';
include __DIR__ . '/../../views/layout/topbar.php';
?>
<div class="page-content">
<div class="breadcrumb">
<a href="<?= APP_URL ?>/dashboard.php"><i class="fa-solid fa-house"></i></a>
<i class="fa-solid fa-chevron-right sep"></i>
<a href="<?= APP_URL ?>/views/oficios/lista.php">Oficios</a>
<i class="fa-solid fa-chevron-right sep"></i>
<a href="<?= APP_URL ?>/views/oficios/detalle.php?id=<?= $id ?>"><?= htmlspecialchars($oficio['numero_oficio']) ?></a>
<i class="fa-solid fa-chevron-right sep"></i>
<span>Editar</span>
</div>
<div class="page-header">
<div class="page-header-content">
<h1>Editar Oficio</h1>
<p><?= htmlspecialchars($oficio['numero_oficio']) ?> · <?= htmlspecialchars(mb_strimwidth($oficio['asunto'], 0, 80, '…')) ?></p>
</div>
</div>
<?php if (!empty($errores)): ?>
<div class="alert alert-danger">
<i class="fa-solid fa-circle-exclamation"></i>
<ul style="margin:.3rem 0 0 1rem">
<?php foreach ($errores as $e): ?><li><?= htmlspecialchars($e) ?></li><?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form method="POST" action="<?= APP_URL ?>/controllers/OficioController.php?action=actualizar" enctype="multipart/form-data" novalidate>
<?= csrfField() ?>
<input type="hidden" name="id" value="<?= $id ?>">
<div class="grid-2" style="gap:1.5rem;align-items:start">
<div>
<div class="card mb-4">
<div class="card-header">
<i class="fa-solid fa-pen text-warning"></i>
<span class="card-title">Datos del Oficio</span>
</div>
<div class="card-body">
<div class="form-row" style="grid-template-columns:1fr 1fr">
<div class="form-group">
<label class="form-label">Número de Oficio <span class="required">*</span></label>
<input type="text" class="form-control" name="numero_oficio"
value="<?= htmlspecialchars($datos['numero_oficio'] ?? '') ?>" required>
</div>
<div class="form-group">
<label class="form-label">Tipo <span class="required">*</span></label>
<select class="form-control" name="tipo" required>
<option value="recibido" <?= ($datos['tipo']??'')==='recibido'?'selected':'' ?>>📥 Recibido</option>
<option value="enviado" <?= ($datos['tipo']??'')==='enviado'?'selected':'' ?>>📤 Enviado</option>
</select>
</div>
</div>
<div class="form-group">
<label class="form-label">Remitente <span class="required">*</span></label>
<input type="text" class="form-control" name="remitente" value="<?= htmlspecialchars($datos['remitente'] ?? '') ?>" required>
</div>
<div class="form-group">
<label class="form-label">Destinatario <span class="required">*</span></label>
<input type="text" class="form-control" name="destinatario" value="<?= htmlspecialchars($datos['destinatario'] ?? '') ?>" required>
</div>
<div class="form-group">
<label class="form-label">Asunto <span class="required">*</span></label>
<textarea class="form-control" name="asunto" rows="3" data-maxlen="500" required><?= htmlspecialchars($datos['asunto'] ?? '') ?></textarea>
</div>
<div class="form-group">
<label class="form-label">Descripción</label>
<textarea class="form-control" name="descripcion" rows="4" data-maxlen="2000"><?= htmlspecialchars($datos['descripcion'] ?? '') ?></textarea>
</div>
</div>
</div>
<div class="card mb-4">
<div class="card-header"><i class="fa-solid fa-paperclip text-primary"></i><span class="card-title">Agregar Adjuntos</span></div>
<div class="card-body">
<div class="dropzone">
<i class="fa-solid fa-cloud-arrow-up" style="font-size:1.5rem;margin-bottom:.5rem;opacity:.5;display:block"></i>
<p class="dropzone-label" style="font-weight:600;">Arrastra archivos o haz clic</p>
<p style="font-size:.78rem">PDF, Word, Excel, imágenes · Máximo 10 MB</p>
<input type="file" name="adjuntos[]" style="display:none" multiple accept=".pdf,.doc,.docx,.jpg,.jpeg,.png,.gif,.xls,.xlsx">
</div>
</div>
</div>
</div>
<div>
<div class="card mb-4">
<div class="card-header"><i class="fa-solid fa-sliders text-primary"></i><span class="card-title">Control y Seguimiento</span></div>
<div class="card-body">
<div class="form-row" style="grid-template-columns:1fr 1fr">
<div class="form-group">
<label class="form-label">Fecha Recepción <span class="required">*</span></label>
<input type="date" class="form-control" name="fecha_recepcion" value="<?= $datos['fecha_recepcion']??'' ?>" required>
</div>
<div class="form-group">
<label class="form-label">Fecha Vencimiento</label>
<input type="date" class="form-control" name="fecha_vencimiento" value="<?= $datos['fecha_vencimiento']??'' ?>">
</div>
</div>
<div class="form-row" style="grid-template-columns:1fr 1fr">
<div class="form-group">
<label class="form-label">Prioridad</label>
<select class="form-control" name="prioridad">
<option value="alta" <?= ($datos['prioridad']??'')==='alta' ?'selected':'' ?>>🔴 Alta</option>
<option value="media" <?= ($datos['prioridad']??'')==='media' ?'selected':'' ?>>🟡 Media</option>
<option value="baja" <?= ($datos['prioridad']??'')==='baja' ?'selected':'' ?>>🟢 Baja</option>
</select>
</div>
<div class="form-group">
<label class="form-label">Estado</label>
<select class="form-control" name="estado">
<option value="recibido" <?= ($datos['estado']??'')==='recibido' ?'selected':'' ?>>Recibido</option>
<option value="en_proceso" <?= ($datos['estado']??'')==='en_proceso' ?'selected':'' ?>>En Proceso</option>
<option value="respondido" <?= ($datos['estado']??'')==='respondido' ?'selected':'' ?>>Respondido</option>
<option value="vencido" <?= ($datos['estado']??'')==='vencido' ?'selected':'' ?>>Vencido</option>
<option value="archivado" <?= ($datos['estado']??'')==='archivado' ?'selected':'' ?>>Archivado</option>
</select>
</div>
</div>
<div class="form-group">
<label class="form-label">Responsable</label>
<select class="form-control" name="responsable_id">
<option value="">— Sin asignar —</option>
<?php foreach ($usuarios as $u): ?>
<option value="<?= $u['id'] ?>" <?= ($datos['responsable_id']??'')==$u['id']?'selected':'' ?>>
<?= htmlspecialchars($u['nombre_completo']) ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group">
<label class="form-label">Etiquetas</label>
<div style="display:flex;flex-wrap:wrap;gap:.45rem;padding:.5rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm)">
<?php foreach ($etiquetas as $et): ?>
<label style="display:flex;align-items:center;gap:.3rem;cursor:pointer;font-size:.8rem">
<input type="checkbox" name="etiquetas[]" value="<?= $et['id'] ?>"
<?= in_array($et['id'], $selEtiq)?'checked':'' ?>>
<span class="badge" style="background:<?= $et['color'] ?>30;color:<?= $et['color'] ?>">
<?= htmlspecialchars($et['nombre']) ?>
</span>
</label>
<?php endforeach; ?>
</div>
</div>
<div class="form-group">
<label style="display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.85rem;font-weight:500">
<input type="checkbox" name="es_confidencial" value="1" <?= !empty($datos['es_confidencial'])?'checked':'' ?>>
<i class="fa-solid fa-lock text-warning"></i> Confidencial
</label>
</div>
</div>
</div>
<div style="display:flex;gap:.75rem;flex-direction:column">
<button type="submit" class="btn btn-warning btn-lg w-100">
<i class="fa-solid fa-floppy-disk"></i> Guardar Cambios
</button>
<a href="<?= APP_URL ?>/views/oficios/detalle.php?id=<?= $id ?>" class="btn btn-secondary btn-lg w-100">
<i class="fa-solid fa-xmark"></i> Cancelar
</a>
</div>
</div>
</div>
</form>
</div>
<?php include __DIR__ . '/../../views/layout/footer.php'; ?>