332 lines
11 KiB
PHP
332 lines
11 KiB
PHP
<?php
|
|
|
|
// Validacion de token
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
|
|
if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) { // Recorre todos los caracteres (siempre) y retorna true or false
|
|
$_SESSION['flash_error'] = 'Acción inválida.';
|
|
header('Location: index.php?opt=inicio_operador');
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// Requiere modelo de cliente
|
|
|
|
require_once __DIR__ . '/../models/clienteModel.php';
|
|
$clientemodel = new clienteModel;
|
|
|
|
// Validar sesión
|
|
|
|
if (!isset($_SESSION['user'])) {
|
|
header("Location: index.php?opt=login_operador");
|
|
exit;
|
|
}
|
|
|
|
$opt = $_GET['opt'] ?? null;
|
|
|
|
// Manejo de opciones enviadas por URL
|
|
|
|
switch ($opt) {
|
|
|
|
// LISTAR CLIENTES
|
|
|
|
case 'clientes':
|
|
|
|
// Utilizamos el modelo para obtener la lista de clientes
|
|
|
|
$clientes = $clientemodel->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('<br>', $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('<br>', $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();
|
|
} |