listarClientes(); ob_start(); require __DIR__ . '/../views/clientes/listaClientesView.php'; return ob_get_clean(); // CREAR CLIENTE NUEVO case 'crear_cliente': // Se requiere la view del form if ($_SERVER['REQUEST_METHOD'] === 'GET') { $_SESSION['return_opt'] = $_GET['from'] ?? 'clientes'; ob_start(); require __DIR__ . '/../views/clientes/crearClienteView.php'; return ob_get_clean(); } // Datos recibidos del POST del formulario if ($_SERVER['REQUEST_METHOD'] === 'POST') { $nombre = trim($_POST['nombre'] ?? ''); $apellido = trim($_POST['apellido'] ?? ''); $telefono = trim($_POST['telefono'] ?? ''); $email = trim($_POST['email'] ?? ''); $condIVA = trim($_POST['cond_iva'] ?? 'consumidor_final'); $cuit1 = trim($_POST['cuit_1'] ?? ''); $cuit2 = trim($_POST['cuit_2'] ?? ''); $cuit3 = trim($_POST['cuit_3'] ?? ''); $cuit = $cuit1 . $cuit2 . $cuit3; $errores = []; // Validaciones if ($nombre === '') $errores[] = "El nombre no puede estar vacío."; else if (!preg_match("/^[A-ZÁÉÍÓÚÑ][a-záéíóúñ]+(?: [A-ZÁÉÍÓÚÑ][a-záéíóúñ]+)*$/", $nombre)) { $errores[] = "El nombre debe comenzar con mayúscula y solo contener letras y espacios."; } else if (strlen($nombre) < 2) { $errores[] = "El nombre debe tener al menos 2 caracteres."; } else if (strlen($nombre) > 50) { $errores[] = "El nombre no puede superar los 50 caracteres."; } if ($apellido === '') $errores[] = "El apellido no puede estar vacío."; else if (!preg_match("/^[A-ZÁÉÍÓÚÑ][a-záéíóúñ]+(?: [A-ZÁÉÍÓÚÑ][a-záéíóúñ]+)*$/", $apellido)) { $errores[] = "El apellido debe comenzar con mayúscula y solo contener letras y espacios."; } else if (strlen($apellido) < 2) { $errores[] = "El apellido debe tener al menos 2 caracteres."; } else if (strlen($apellido) > 50) { $errores[] = "El apellido no puede superar los 50 caracteres."; } if ($telefono === '') { $errores[] = "El teléfono no puede estar vacío."; } else if (!preg_match('/^[0-9]{10}$/', $telefono)) { $errores[] = "El teléfono debe tener 10 dígitos."; } if ($email === '') { $errores[] = "El email no puede estar vacío."; } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errores[] = "Formato de email inválido."; } else if (strlen($email) > 100) { $errores[] = "El email no puede superar los 100 caracteres."; } $condicionesPermitidas = [ 'consumidor_final', 'monotributo', 'responsable_inscripto' ]; if (!in_array($condIVA, $condicionesPermitidas, true)) { $errores[] = 'Condición de IVA inválida.'; } if ($cuit !== '') { if (!preg_match('/^\d{11}$/', $cuit)) { $errores[] = 'El CUIT debe contener 11 dígitos.'; } } else { $cuit = null; } if (!empty($errores)) { $_SESSION['flash_error'] = implode('
', $errores); // Se guarda en $_SESSION el error header("Location: index.php?opt=crear_cliente"); exit; } // Verificación de existencia de cliente if ($clientemodel->verificarExistencia([ 'nombre' => $nombre, 'apellido' => $apellido, 'email' => $email, 'cuit' => $cuit ])) { $_SESSION['flash_error'] = "El cliente ya existe o el email ya está registrado."; header("Location: index.php?opt=crear_cliente"); exit; } // Se llama a la función para crear el cliente if ($clientemodel->crearCliente([ 'nombre' => $nombre, 'apellido' => $apellido, 'telefono' => $telefono, 'email' => $email, 'cuit' => $cuit, 'cond_iva' => $condIVA ])) { $_SESSION['flash_success'] = 'Cliente creado correctamente.'; } else { $_SESSION['flash_error'] = 'Ocurrió un error al crear el cliente.'; } $opt = $_SESSION['return_opt']; header("Location: index.php?opt=$opt"); exit; } // EDITAR DATOS DE CLIENTE case 'editar_cliente': $idEditar = (int) ($_GET['id'] ?? 0); if ($idEditar <= 0) { header("Location: index.php?opt=clientes"); exit; } // Busca el cliente en la base de datos mediante el id $cliente = $clientemodel->obtenerPorId($idEditar); if (!$cliente) { $_SESSION['flash_error'] = 'No se encontró el cliente.'; header("Location: index.php?opt=clientes"); exit; } // Mostrar datos de cliente if ($_SERVER['REQUEST_METHOD'] === 'GET') { ob_start(); require __DIR__ . '/../views/clientes/editarClienteView.php'; return ob_get_clean(); } // En caso de modificar datos del cliente if ($_SERVER['REQUEST_METHOD'] === 'POST') { $nombre = trim($_POST['nombre'] ?? ''); $apellido = trim($_POST['apellido'] ?? ''); $telefono = trim($_POST['telefono'] ?? ''); $email = trim($_POST['email'] ?? ''); $condIVA = trim($_POST['cond_iva'] ?? 'consumidor_final'); $cuit1 = trim($_POST['cuit_1'] ?? ''); $cuit2 = trim($_POST['cuit_2'] ?? ''); $cuit3 = trim($_POST['cuit_3'] ?? ''); $cuit = $cuit1 . $cuit2 . $cuit3; $errores = []; // Validaciones if ($nombre === '') { $errores[] = "El nombre no puede estar vacío."; } elseif (!preg_match("/^[A-ZÁÉÍÓÚÑ][a-záéíóúñ]+(?: [A-ZÁÉÍÓÚÑ][a-záéíóúñ]+)*$/", $nombre)) { $errores[] = "El nombre debe comenzar con mayúscula y solo contener letras y espacios."; } elseif (strlen($nombre) < 2) { $errores[] = "El nombre debe tener al menos 2 caracteres."; } elseif (strlen($nombre) > 50) { $errores[] = "El nombre no puede superar los 50 caracteres."; } if ($apellido === '') { $errores[] = "El apellido no puede estar vacío."; } elseif (!preg_match("/^[A-ZÁÉÍÓÚÑ][a-záéíóúñ]+(?: [A-ZÁÉÍÓÚÑ][a-záéíóúñ]+)*$/", $apellido)) { $errores[] = "El apellido debe comenzar con mayúscula y solo contener letras y espacios."; } elseif (strlen($apellido) < 2) { $errores[] = "El apellido debe tener al menos 2 caracteres."; } elseif (strlen($apellido) > 50) { $errores[] = "El apellido no puede superar los 50 caracteres."; } if ($telefono === '') { $errores[] = "El teléfono no puede estar vacío."; } else if (!preg_match('/^[0-9]{10}$/', $telefono)) { $errores[] = "El teléfono debe tener 10 dígitos."; } if ($email === '') { $errores[] = "El email no puede estar vacío."; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errores[] = "Formato de email inválido."; } elseif (strlen($email) > 100) { $errores[] = "El email no puede superar los 100 caracteres."; } $condicionesPermitidas = [ 'consumidor_final', 'monotributo', 'responsable_inscripto' ]; if (!in_array($condIVA, $condicionesPermitidas, true)) { $errores[] = 'Condición de IVA inválida.'; } if (($condIVA !== 'consumidor_final') && ($cuit === '')) { $errores[] = 'Debe ingresar el CUIT'; } if ($cuit !== '') { if (!preg_match('/^\d{11}$/', $cuit)) { $errores[] = 'El CUIT debe contener 11 dígitos.'; } } else { $cuit = null; } if (!empty($errores)) { $_SESSION['flash_error'] = implode('
', $errores); // Se guarda en $_SESSION el error header("Location: index.php?opt=editar_cliente&id=$idEditar"); exit; } // Verificación de existencia de cliente if ($clientemodel->verificarExistencia([ 'nombre' => $nombre, 'apellido' => $apellido, 'email' => $email, 'cuit' => $cuit ], $idEditar)) { $_SESSION['flash_error'] = "El cliente ya existe o el email ya está registrado."; header("Location: index.php?opt=editar_cliente&id=$idEditar"); exit; } $guardarData = [ 'nombre' => $nombre, 'apellido' => $apellido, 'telefono' => $telefono, 'email' => $email, 'cuit' => $cuit, 'cond_iva' => $condIVA ]; // Actualizar los datos del cliente if ($clientemodel->actualizarCliente($cliente['id'], $guardarData)) { $_SESSION['flash_success'] = 'Datos actualizados correctamente'; // Se guarda en $_SESSION el succes } else { $_SESSION['flash_error'] = 'No se pudo actualizar los datos.'; } header("Location: index.php?opt=clientes"); exit; } // DEFAULT (404) default: ob_start(); require __DIR__ . '/../views/404View.php'; return ob_get_clean(); }