Primer Commit
This commit is contained in:
429
cupones.php
Normal file
429
cupones.php
Normal file
@@ -0,0 +1,429 @@
|
||||
<?php
|
||||
include ("header.php");
|
||||
include (__DIR__."/php/funciones.php");
|
||||
|
||||
$cursos = obtenerCursos();
|
||||
$cupones = obtenerCupones();
|
||||
function obtenerNombreCursoPorId($cursos, $idBuscado) {
|
||||
foreach ($cursos as $curso) {
|
||||
if (isset($curso['id']) && $curso['id'] === $idBuscado) {
|
||||
return $curso['name'] ?? null;
|
||||
}
|
||||
}
|
||||
return null; // Si no se encuentra
|
||||
}
|
||||
?>
|
||||
<main class="app-main">
|
||||
<!--begin::App Content Header-->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="content-area">
|
||||
<h1>Administración de Cupones</h1>
|
||||
|
||||
<?php if (isset($_SESSION['mensaje'])): ?>
|
||||
<p style="color: green;"><?= $_SESSION['mensaje'] ?></p>
|
||||
<?php unset($_SESSION['mensaje']); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<!--modal editar cupon-->
|
||||
<div id="modal-editar" class="modal" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Editar Cupón</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="form-editar" method="POST">
|
||||
<label>Codigo: <input type="text" id="editar-codigo" min="1" max="100" disabled></label><br>
|
||||
<input type="hidden" id="editar-descuento" value="100"><br>
|
||||
<label>Curso:
|
||||
<select id="editar-curso_id">
|
||||
<option value="1">Cupón para cualquier curso</option>
|
||||
<?php foreach ($cursos as $curso): ?>
|
||||
<option value="<?= $curso['id'] ?>"><?= $curso['name'] ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</label><br>
|
||||
<label>Fecha Inicio: <input type="date" id="editar-fecha_inicio" required></label><br>
|
||||
<label>Fecha Fin: <input type="date" id="editar-fecha_fin" required></label><br>
|
||||
<label>Usos Máximos (0 para ilimitados): <input type="number" id="editar-usos_maximos" min="0" value="1"></label><br>
|
||||
<label><input type="checkbox" id="editar-activo"> Activo</label><br>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="editarCupon">Guardar Cambios</button>
|
||||
<button type="button" id="cerrar-modal">Cancelar</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<!--modal editar cupon-->
|
||||
|
||||
<!--modal eliminar-->
|
||||
<div id="modalEliminar" class="modal" tabindex="-1">
|
||||
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Confirmar eliminación</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar" onclick="cerrarModalEliminar()"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
¿Estás seguro de que deseas eliminar este elemento?
|
||||
<input type="hidden" id="eliminarCodigo">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" onclick="cerrarModalEliminar()">Cancelar</button>
|
||||
<button type="button" class="btn btn-danger" id="confirmarEliminar">Eliminar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- modal elimnar-->
|
||||
<!---->
|
||||
<div class="accordion" id="accordionCupones">
|
||||
<!-- Acordeón 1: Crear nuevo cupón -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingCrear">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseCrear" aria-expanded="false" aria-controls="collapseCrear">
|
||||
Crear Nuevo Cupón
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseCrear" class="accordion-collapse collapse" aria-labelledby="headingCrear" data-bs-parent="#accordionCupones">
|
||||
<div class="accordion-body">
|
||||
<form method="POST">
|
||||
<div class="card card-primary">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">Crear Cupón</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<label for="codigo">Código</label>
|
||||
<a href="javascript:void(0);" id="generaCodigo" class="btn btn-link btn-sm" title="Generar Código">
|
||||
click aqui para codigo aleatorio
|
||||
</a>
|
||||
<input type="text" class="form-control" id="codigo" name="codigo" minlength="1" maxlength="100" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
||||
<input type="hidden" class="form-control" id="descuento" name="descuento" value="100">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="curso_id">Curso</label>
|
||||
<select class="form-control" id="curso_id" name="curso_id">
|
||||
<option value="1">Cupón para cualquier curso</option>
|
||||
<?php foreach ($cursos as $curso): ?>
|
||||
<option value="<?= $curso['id'] ?>"><?= $curso['name'] ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="fecha_inicio">Fecha Inicio</label>
|
||||
<input type="date" class="form-control" id="fecha_inicio" name="fecha_inicio" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="fecha_fin">Fecha Fin</label>
|
||||
<input type="date" class="form-control" id="fecha_fin" name="fecha_fin" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="usos_maximos">Usos Máximos (0 para ilimitados)</label>
|
||||
<input type="text" class="form-control" id="usos_maximos" name="usos_maximos" min="0" value="1">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<button type="button" name="crear_cupon" id="crear_cupon" class="btn btn-primary">Crear Cupón</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Acordeón 2: Cupones existentes -->
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingExistentes">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExistentes" aria-expanded="false" aria-controls="collapseExistentes">
|
||||
Cupones Existentes
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseExistentes" class="accordion-collapse collapse" aria-labelledby="headingExistentes" data-bs-parent="#accordionCupones">
|
||||
<div class="accordion-body">
|
||||
<table id="tablaCupon" class="table table-striped display responsive nowrap">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Código</th>
|
||||
<th>Curso</th>
|
||||
<th>Válido Desde</th>
|
||||
<th>Válido Hasta</th>
|
||||
<th>Usos</th>
|
||||
<th>Estado</th>
|
||||
<th class="acciones">Acciones</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<?php foreach ($cupones as $cupon): ?>
|
||||
<?php $nombre = obtenerNombreCursoPorId($cursos, $cupon['curso_id']);?>
|
||||
<tr>
|
||||
<td><?= $cupon['codigo'] ?></td>
|
||||
<td><?= $nombre ?? 'Cualquier curso' ?></td>
|
||||
<td><?= $cupon['fecha_inicio'] ?></td>
|
||||
<td><?= $cupon['fecha_fin'] ?></td>
|
||||
<td><?= $cupon['usos_actuales'] ?>/<?= $cupon['usos_maximos'] == 0 ? '∞' : $cupon['usos_maximos'] ?></td>
|
||||
<td><?= $cupon['activo'] ? 'Activo' : 'Inactivo' ?></td>
|
||||
<td class="acciones">
|
||||
<button class="btn btn-info editar-btn">Editar</button>
|
||||
<button class="btn btn-danger eliminar-btn">Eliminar</button>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!---->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--end::App Content-->
|
||||
<div id="toast" class="toast"></div>
|
||||
</main>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// Evento cuando se hace clic en el mini botón
|
||||
$('#generaCodigo').on('click', function() {
|
||||
// Hacer una solicitud AJAX al archivo PHP
|
||||
$.ajax({
|
||||
url: '/php/funciones.php', // El archivo PHP que procesará la solicitud
|
||||
type: 'GET', // Método GET
|
||||
data: {accion: 'obtener_codigo'}, // Datos enviados al archivo PHP
|
||||
success: function(response) {
|
||||
// Mostrar el resultado (en este caso, lo que regrese el PHP)
|
||||
$('#codigo').val(response); // Colocamos el valor devuelto en el input "codigo"
|
||||
},
|
||||
error: function() {
|
||||
alert('Hubo un error al realizar la solicitud.');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!--end::App Main-->
|
||||
<?php include("footer.php");?>
|
||||
<script>
|
||||
|
||||
document.querySelector('#crear_cupon').addEventListener('click', function() {
|
||||
let codigo = $('#codigo').val();
|
||||
let descuento = $('#descuento').val();
|
||||
let curso_id = $('#curso_id').val();
|
||||
let fecha_inicio = $('#fecha_inicio').val();
|
||||
let fecha_fin = $('#fecha_fin').val();
|
||||
let usos_maximos = $('#usos_maximos').val();
|
||||
let datos = {
|
||||
codigo: codigo,
|
||||
descuento: descuento,
|
||||
curso_id: curso_id,
|
||||
fecha_inicio: fecha_inicio,
|
||||
fecha_fin: fecha_fin,
|
||||
usos_maximos: usos_maximos,
|
||||
accion: 'anadir_codigo'
|
||||
};
|
||||
$.ajax({
|
||||
url: '/php/funciones.php', // El archivo PHP que procesará la solicitud
|
||||
type: 'POST', // Método GET
|
||||
data: datos, // Datos enviados al archivo PHP
|
||||
success: function(response) {
|
||||
// Mostrar el resultado (en este caso, lo que regrese el PHP)
|
||||
console.log(response);
|
||||
response=JSON.parse(response);
|
||||
if(response.success==true)
|
||||
{
|
||||
$('#modal-editar').hide();
|
||||
showToast(response.message+' La pagina se recargara pronto', "success");
|
||||
setTimeout(function() {
|
||||
location.reload();
|
||||
}, 3000); // 3000 milisegundos = 3 segundos
|
||||
}
|
||||
else
|
||||
{
|
||||
showToast(response.message, "error");
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
//alert('Hubo un error al realizar la solicitud.');
|
||||
showToast("¡Hubo un error al realizar la solicitud!", "error");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
function cerrarModalEliminar()
|
||||
{
|
||||
$('#modalEliminar').hide();
|
||||
}
|
||||
function showToast(message, type = 'success') {
|
||||
const toast = document.getElementById("toast");
|
||||
toast.className = `toast show ${type}`;
|
||||
toast.innerText = message;
|
||||
setTimeout(() => {
|
||||
toast.className = toast.className.replace("show", "");
|
||||
}, 3000); // se oculta después de 3 segundos
|
||||
}
|
||||
$(document).ready(function() {
|
||||
// Inicializar el DataTable
|
||||
var table = $('#tablaCupon').DataTable({
|
||||
"paging": true, // Activar paginación
|
||||
"searching": true, // Activar búsqueda
|
||||
"ordering": true, // Activar ordenación
|
||||
"info": true, // Mostrar información sobre la tabla
|
||||
"responsive": true // Activar la responsividad
|
||||
});
|
||||
$('#tablaCupon').on('click', '.editar-btn', function() {
|
||||
var data = table.row($(this).closest('tr')).data();
|
||||
console.log(data); // Imprime los datos de la fila
|
||||
$('#editar-codigo').val(data[0]);
|
||||
$('#editar-curso_id').val(data[1]);
|
||||
$('#editar-fecha_inicio').val(data[2]);
|
||||
$('#editar-fecha_fin').val(data[3]);
|
||||
$('#editar-usos_maximos').val(data[4]);
|
||||
$('#editar-activo').prop('checked', data[5] == "Activo");
|
||||
|
||||
|
||||
// Mostrar modal
|
||||
$('#modal-editar').show();
|
||||
});
|
||||
$('#tablaCupon').on('click', '.eliminar-btn', function() {
|
||||
var data = table.row($(this).closest('tr')).data();
|
||||
console.log(data); // Imprime los datos de la fila
|
||||
$('#eliminarCodigo').val(data[0]);
|
||||
$('#modalEliminar').show();
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Mostrar modal al hacer clic en Editar
|
||||
document.querySelector('#cerrar-modal').addEventListener('click', function() {
|
||||
$('#modal-editar').hide();
|
||||
});
|
||||
|
||||
document.querySelector('#confirmarEliminar').addEventListener('click', function() {
|
||||
let codigo = $('#eliminarCodigo').val();
|
||||
let datos = {
|
||||
codigo: codigo,
|
||||
accion: 'elimnar_codigo'
|
||||
};
|
||||
$.ajax({
|
||||
url: '/php/funciones.php', // El archivo PHP que procesará la solicitud
|
||||
type: 'POST', // Método GET
|
||||
data: datos, // Datos enviados al archivo PHP
|
||||
success: function(response) {
|
||||
// Mostrar el resultado (en este caso, lo que regrese el PHP)
|
||||
console.log(response);
|
||||
response=JSON.parse(response);
|
||||
if(response.success==true)
|
||||
{
|
||||
$('#modal-editar').hide();
|
||||
showToast(response.message+' La pagina se recargara pronto', "success");
|
||||
setTimeout(function() {
|
||||
location.reload();
|
||||
}, 3000); // 3000 milisegundos = 3 segundos
|
||||
}
|
||||
else
|
||||
{
|
||||
showToast(response.message, "error");
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
//alert('Hubo un error al realizar la solicitud.');
|
||||
showToast("¡Hubo un error al realizar la solicitud!", "error");
|
||||
}
|
||||
});
|
||||
});
|
||||
document.querySelector('#editarCupon').addEventListener('click', function()
|
||||
{
|
||||
|
||||
let codigo = $('#editar-codigo').val();
|
||||
let descuento = $('#editar-descuento').val();
|
||||
let curso_id = $('#editar-curso_id').val();
|
||||
let fecha_inicio = $('#editar-fecha_inicio').val();
|
||||
let fecha_fin = $('#editar-fecha_fin').val();
|
||||
let usos_maximos = $('#editar-usos_maximos').val();
|
||||
|
||||
if (!codigo || !descuento || !curso_id || !fecha_inicio || !fecha_fin || !usos_maximos) {
|
||||
alert('Por favor, completa todos los campos obligatorios.');
|
||||
return; // detiene el script
|
||||
}
|
||||
let checkbox = $('#editar-activo');
|
||||
var valor=0;
|
||||
if (checkbox.is(':checked')) {
|
||||
valor = 1;
|
||||
} else {
|
||||
valor = 0;
|
||||
}
|
||||
|
||||
let datos = {
|
||||
codigo: $('#editar-codigo').val(),
|
||||
descuento: $('#editar-descuento').val(),
|
||||
curso_id: $('#editar-curso_id').val(),
|
||||
fecha_inicio: $('#editar-fecha_inicio').val(),
|
||||
fecha_fin: $('#editar-fecha_fin').val(),
|
||||
usos_maximos: $('#editar-usos_maximos').val(),
|
||||
activo: valor,
|
||||
accion: 'editar_codigo'
|
||||
};
|
||||
$.ajax({
|
||||
url: '/php/funciones.php', // El archivo PHP que procesará la solicitud
|
||||
type: 'POST', // Método GET
|
||||
data: datos, // Datos enviados al archivo PHP
|
||||
success: function(response) {
|
||||
// Mostrar el resultado (en este caso, lo que regrese el PHP)
|
||||
console.log(response);
|
||||
response=JSON.parse(response);
|
||||
if(response.success==true)
|
||||
{
|
||||
$('#modal-editar').hide();
|
||||
showToast(response.message+' La pagina se recargara pronto', "success");
|
||||
setTimeout(function() {
|
||||
location.reload();
|
||||
}, 3000); // 3000 milisegundos = 3 segundos
|
||||
}
|
||||
else
|
||||
{
|
||||
showToast(response.message, "error");
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
//alert('Hubo un error al realizar la solicitud.');
|
||||
showToast("¡Hubo un error al realizar la solicitud!", "error");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user