File "index.php"

Full Path: C:/wamp64/www/Identifica_Piku/Personal/index.php
File size: 27.1 KB
MIME-type: text/x-php
Charset: utf-8

<?php
// Conexion db
include("../connection.php");
?>
<!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Control De Ingresos Personal</title>
    <link rel="icon" type="image/png" href="../img/icono.png">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs5/jq-3.6.0/dt-1.12.1/datatables.min.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" integrity="sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A==" crossorigin="anonymous" referrerpolicy="no-referrer" />
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <style>
        .pagination {
            display: none;
        }
        
        .select2-container--bootstrap-5 .select2-dropdown {
            z-index: 2000;
        }
        
        .table-responsive {
            overflow-x: auto;
            -webkit-overflow-scrolling: touch;
        }
        
        @media (max-width: 768px) {
            header h1 {
                font-size: 0.9rem !important;
            }
            
            .btn-group-mobile {
                display: flex;
                flex-direction: column;
                gap: 0.5rem;
            }
            
            .btn-group-mobile .btn {
                width: 100%;
                margin: 0 !important;
            }
            
            #tbl_Personal {
                font-size: 0.85rem;
            }
            
            #tbl_Personal th,
            #tbl_Personal td {
                padding: 0.5rem;
                white-space: nowrap;
            }
            
            #tbl_Personal .btn {
                padding: 0.25rem 0.5rem;
                font-size: 0.75rem;
            }
        }
        
        @media (max-width: 576px) {
            header h1 {
                font-size: 0.75rem !important;
            }
            
            #tbl_Personal thead th:nth-child(1),
            #tbl_Personal tbody td:nth-child(1),
            #tbl_Personal thead th:nth-child(7),
            #tbl_Personal tbody td:nth-child(7) {
                display: none;
            }
        }
    </style>
</head>

<body class="vh-100" style="background: #FFFFFF;">
    
    <header style="background: #FF9800;" class="navbar navbar-expand navbar-dark flex-column flex-md-row bd-navbar">
        <div class="container-fluid d-flex justify-content-between align-items-center">
            <h1 class="p-3 m-0 text-light fs-4">CONTROL DE ENTRADA Y SALIDA DE PERSONAL <strong>AVICAMPO</strong></h1>
            <a href="../logout.php" class="btn btn-sm text-light" style="background-color:#E65100;">
                <i class="fas fa-sign-out-alt"></i> <span class="d-none d-md-inline">Cerrar Sesión</span>
            </a>
        </div>
    </header>

    <div class="container-fluid">

        <div class="row">
            <div class="col-12 col-md-10 offset-md-1">
                <div class="btn-group-mobile d-flex flex-column flex-md-row gap-2 my-3">
                    <button type="button" class="btn btn-lg text-light" data-bs-toggle="modal" style="background-color:#FF9800;" data-bs-target="#addUserModal">
                        <i class="fas fa-user-plus"></i> <span class="d-none d-sm-inline">Agregar Usuario</span>
                    </button>
                    
                    <a href="../Carnet/index.html" class="btn btn-lg text-light" style="background-color:#f57c00;">
                        <i class="fas fa-id-card"></i> Crear Carnet
                    </a>
					<a href="Ccostos/index.php" class="btn btn-lg text-light" style="background-color:#FACB07;">
                        <i class="fa-solid fa-building-user">‌</i></i> Centro Costos
                    </a>
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-12 col-md-10 offset-md-1">
                <div class="table-responsive">
                    <table id="tbl_Personal" class="table table-bordered" style="background: #FF98000A;">
                        <thead style="background: #FF9800;" class="text-light">
                            <tr>
                                <th>Id</th>
                                <th>Cedula</th>
                                <th>Nombre</th>
								<th>Apellido</th>
								<th>Rh</th>
                                <th>Centro Costo</th>
                                <th>Descripcion</th>
                                <th>Cargo</th>
                                <th>Rango</th>
                                <th>Opciones</th>
                            </tr>
                        </thead>
                        <tbody class="table-group-divider">
                        </tbody>
                    </table>
                </div>
            </div>
        </div>

    </div>

    <!-- Modal Agregar Usuario -->
    <div class="modal fade" id="addUserModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered modal-lg">
            <div class="modal-content">
                <div class="modal-header text-light" style="background: #FF9800;">
                    <h1 class="modal-title fs-5" id="exampleModalLabel">Creacion Nuevo Usuario</h1>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <form id="saveUserForm" action="javascript:void();" method="post">
                    <div class="modal-body">
                        <div class="mb-3">
                            <label for="inputCedula" class="form-label">Cedula</label>
                            <input type="text" name="inputCedula" class="form-control" id="inputCedula" value="">
                        </div>
                        <div class="mb-3">
                            <label for="inputNombre" class="form-label">Nombre</label>
                            <input type="text" name="inputNombre" class="form-control" id="inputNombre" value="" style="text-transform:uppercase;">
                        </div>
						<div class="mb-3">
                            <label for="inputApellido" class="form-label">Apellido</label>
                            <input type="text" name="inputApellido" class="form-control" id="inputApellido" value="" style="text-transform:uppercase;">
                        </div>
						<div class="mb-3">
							<label for="inputRh" class="form-label">RH</label>
							<select name="inputRh" class="form-select" id="inputRh">
							  <option disabled selected></option>
							  <option>O -</option>
							  <option>O +</option>
							  <option>A -</option>
							  <option>A +</option>
							  <option>B -</option>
							  <option>B +</option>
							  <option>AB -</option>
							  <option>AB +</option>
							</select>
						</div>
                        <div class="mb-3">
                            <label for="inputCCosto" class="form-label">Centro de Costo</label>
                            <select name="inputCCosto" class="form-control select2-ccosto" id="inputCCosto" style="width: 100%;">
                                <option value="">Buscar Centro de Costo</option>
                            </select>
                        </div>
                        <div class="mb-3">
                            <label for="inputDescripcion" class="form-label">Descripcion</label>
                            <select name="inputDescripcion" class="form-control select2-descripcion" id="inputDescripcion" style="width: 100%;" disabled>
                                <option value="">Seleccione Descripción</option>
                            </select>
                        </div>
                        <div class="mb-3">
                            <label for="inputCargo" class="form-label">Cargo</label>
                            <select name="inputCargo" class="form-control select2-cargo" id="inputCargo" style="width: 100%;" disabled>
                                <option value="">Seleccione Cargo</option>
                            </select>
                        </div>
                        <div class="mb-3">
                            <label for="inputRango" class="form-label">Rango</label>
                            <input type="number" step="0.01" name="inputRango" class="form-control" id="inputRango" value="">
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
                        <button type="submit" class="btn btn-primary">Guardar</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
    
    <!-- Modal Editar Usuario -->
    <div class="modal fade" id="editUserModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered modal-lg">
            <div class="modal-content">
                <div class="modal-header text-light" style="background: #FF9800;">
                    <h1 class="modal-title fs-5" id="exampleModalLabel">Actualizar Usuario</h1>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <form id="updateUserForm" action="javascript:void();" method="post">
                    <div class="modal-body">
                        <input type="hidden" name="id" id="id" value="">
                        <input type="hidden" name="trid" id="trid" value="">
                        <div class="mb-3">
                            <label for="_inputCedula" class="form-label">Cedula</label>
                            <input type="text" name="_inputCedula" class="form-control" id="_inputCedula" value="">
                        </div>
                        <div class="mb-3">
                            <label for="_inputNombre" class="form-label">Nombre</label>
                            <input type="text" name="_inputNombre" class="form-control" id="_inputNombre" value="" style="text-transform:uppercase;">
                        </div>
						<div class="mb-3">
                            <label for="_inputApellido" class="form-label">Apellido</label>
                            <input type="text" name="_inputApellido" class="form-control" id="_inputApellido" value="" style="text-transform:uppercase;">
                        </div>
						<div class="mb-3">
                            <label for="_inputRh" class="form-label">RH</label>
                            <input type="text" name="_inputRh" class="form-control" id="_inputRh" value="" style="text-transform:uppercase;">
                        </div>
                        <div class="mb-3">
                            <label for="_inputCCosto" class="form-label">Centro de Costo</label>
                            <input type="text" name="_inputCCosto" class="form-control" id="_inputCCosto" value="" style="text-transform:uppercase;">
                        </div>
                        <div class="mb-3">
                            <label for="_inputDescripcion" class="form-label">Descripcion</label>
                            <input type="text" name="_inputDescripcion" class="form-control" id="_inputDescripcion" value="" style="text-transform:uppercase;">
                        </div>
                        <div class="mb-3">
                            <label for="_inputCargo" class="form-label">Cargo</label>
                            <input type="text" name="_inputCargo" class="form-control" id="_inputCargo" value="" style="text-transform:uppercase;">
                        </div>
                        <div class="mb-3">
                            <label for="_inputRango" class="form-label">Rango</label>
                            <input type="number" step="0.01" name="_inputRango" class="form-control" id="_inputRango" value="">
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
                        <button type="submit" class="btn btn-primary">Guardar Cambios</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
    
    <script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
    <script type="text/javascript" src="https://cdn.datatables.net/v/bs5/jq-3.6.0/dt-1.12.1/datatables.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
    <script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            
            // DataTable con traducción en español (sin CORS)
            $('#tbl_Personal').DataTable({
                'serverSide': true,
                'processing': true,
                'paging': true,
                'order': [],
                'ajax': {
                    'url': 'fetch_data.php',
                    'type': 'post',
                    'dataSrc': 'data',
                    'error': function(xhr, error, code) {
                        console.error('Error en DataTable:', error);
                        console.error('Respuesta del servidor:', xhr.responseText);
                        Swal.fire('Error', 'No se pudieron cargar los datos. Revisa la consola.', 'error');
                    }
                },
                'fnCreatedRow': function(nRow, aData, iDataIndex) {
                    $(nRow).attr('id', aData[0]);
                },
                'columnDefs': [{
                    'targets': [0, 9],
                    'orderable': false,
                }],
                'responsive': true,
                'scrollX': true,
                'autoWidth': false,
                'language': {
                    'lengthMenu': 'Mostrar _MENU_ registros por página',
                    'zeroRecords': 'No se encontraron resultados',
                    'info': 'Mostrando página _PAGE_ de _PAGES_',
                    'infoEmpty': 'No hay registros disponibles',
                    'infoFiltered': '(filtrado de _MAX_ registros totales)',
                    'search': 'Buscar:',
                    'loadingRecords': 'Cargando...',
                    'processing': 'Procesando...',
                    'paginate': {
                        'first': 'Primero',
                        'last': 'Último',
                        'next': 'Siguiente',
                        'previous': 'Anterior'
                    }
                }
            });

            // Guardar Nuevo Usuario
            $(document).on('submit', '#saveUserForm', function(event) {
                event.preventDefault();
                var cedula = $('#inputCedula').val();
                var nombre = $('#inputNombre').val();
				var apellido = $('#inputApellido').val();
				var rh = $('#inputRh').val();
                var ccosto = $('#inputCCosto').val();
                var descripcion = $('#inputDescripcion').val();
                var cargo = $('#inputCargo').val();
                var rango = $('#inputRango').val();
                
                if (cedula && nombre && apellido && rh && ccosto && descripcion && cargo && rango) {
                    $.ajax({
                        url: "add_user.php",
                        data: {
                            cedula: cedula,
                            nombre: nombre,
							apellido: apellido,
							rh: rh,
                            ccosto: ccosto,
                            descripcion: descripcion,
                            cargo: cargo,
                            rango: rango
                        },
                        type: 'post',
                        success: function(data) {
                            var json = JSON.parse(data);
                            if (json.status == 'success') {
                                var table = $('#tbl_Personal').DataTable();
                                table.draw();
                                Swal.fire('Éxito!', 'Usuario agregado correctamente', 'success');
                                
                                $("#saveUserForm")[0].reset();
                                $('#inputCCosto').val(null).trigger('change');
                                $('#inputDescripcion').val(null).trigger('change').prop('disabled', true);
                                $('#inputCargo').val(null).trigger('change').prop('disabled', true);
                                $("#addUserModal").modal("hide");
                            }
                        },
                        error: function(xhr, status, error) {
                            console.error('Error:', error);
                            Swal.fire('Error', 'No se pudo guardar el usuario', 'error');
                        }
                    });
                } else {
                    Swal.fire('Advertencia', 'Por favor complete todos los campos requeridos', 'warning');
                }
            });

            // Cargar datos para Edición
            $(document).on('click', '.editBtn', function(event) {
                var id = $(this).data('id');
                var trid = $(this).closest('tr').attr('id');
                $.ajax({
                    url: "get_single_user.php",
                    data: {
                        id: id
                    },
                    type: "post",
                    success: function(data) {
                        var json = JSON.parse(data);
                        $('#id').val(json.id);
                        $('#trid').val(trid);
                        $('#_inputCedula').val(json.cedula);
                        $('#_inputNombre').val(json.nombre);
						$('#_inputApellido').val(json.apellido);
						$('#_inputRh').val(json.rh);
                        $('#_inputCCosto').val(json.ccosto);
                        $('#_inputDescripcion').val(json.descripcion);
                        $('#_inputCargo').val(json.cargo);
                        $('#_inputRango').val(json.rango);
                        $('#editUserModal').modal('show');
                    }
                });
            });

            // Actualizar Usuario
            $(document).on('submit', '#updateUserForm', function(event) {
                event.preventDefault();
                var id = $('#id').val();
                var trid = $('#trid').val();
                var cedula = $('#_inputCedula').val();
                var nombre = $('#_inputNombre').val();
				var apellido = $('#_inputApellido').val();
				var rh = $('#_inputRh').val();
                var ccosto = $('#_inputCCosto').val();
                var descripcion = $('#_inputDescripcion').val();
                var cargo = $('#_inputCargo').val();
                var rango = $('#_inputRango').val();
                
                $.ajax({
                    url: "update_user.php",
                    data: {
                        id: id,
                        cedula: cedula,
                        nombre: nombre,
						apellido: apellido,
						rh: rh,
                        ccosto: ccosto,
                        descripcion: descripcion,
                        cargo: cargo,
                        rango: rango
                    },
                    type: 'post',
                    success: function(data) {
                        var json = JSON.parse(data);
                        if (json.status == 'success') {
                            var table = $('#tbl_Personal').DataTable();
                            var button = '<a href="javascript:void(0);" class="btn btn-sm btn-info p-2 m-1 editBtn" data-id="' + id + '">Editar</a> <a href="javascript:void(0);" class="btn btn-sm btn-danger p-2 m-1 btnDelete" data-id="' + id + '">Eliminar</a>';
                            
                            table.row("[id='" + trid + "']").data([id, cedula, nombre, apellido, rh, ccosto, descripcion, cargo, rango, button]);
                            
                            Swal.fire('Éxito!', 'Usuario actualizado correctamente', 'success');
                            $('#editUserModal').modal('hide');
                        } else {
                            Swal.fire('Error', 'Error al actualizar', 'error');
                        }
                    }
                });
            });

            // Eliminar Usuario
            $(document).on('click', '.btnDelete', function(event) {
                var id = $(this).data('id');
                Swal.fire({
                    title: '¿Estás Seguro?',
                    text: "Esta acción no se puede deshacer",
                    icon: 'warning',
                    showCancelButton: true,
                    confirmButtonColor: '#3085d6',
                    cancelButtonColor: '#d33',
                    confirmButtonText: 'Sí, Eliminar!',
                    cancelButtonText: 'Cancelar'
                }).then((result) => {
                    if (result.isConfirmed) {
                        $.ajax({
                            url: "delete_user.php",
                            data: {
                                id: id
                            },
                            type: "post",
                            success: function(data) {
                                var json = JSON.parse(data);
                                if (json.status == 'success') {
                                    $('#' + id).closest('tr').remove();
                                    Swal.fire('Eliminado!', 'Usuario eliminado con éxito', 'success');
                                } else {
                                    Swal.fire('Error', 'Error al eliminar', 'error');
                                }
                            }
                        });
                    }
                });
            });

            // Select2 Configuración
            $('#inputDescripcion').select2({
                dropdownParent: $('#addUserModal'),
                placeholder: "Seleccione Descripción",
                allowClear: true,
            }).prop('disabled', true);
            
            $('#inputCargo').select2({
                dropdownParent: $('#addUserModal'),
                placeholder: "Seleccione Cargo",
                allowClear: true,
            }).prop('disabled', true);

            $('#inputCCosto').select2({
                dropdownParent: $('#addUserModal'),
                placeholder: "Buscar Centro de Costo",
                allowClear: true,
                ajax: {
                    url: 'fetch_ccosto.php',
                    dataType: 'json',
                    delay: 250,
                    data: function(params) {
                        return {
                            q: params.term
                        };
                    },
                    processResults: function(data) {
                        return data;
                    },
                    cache: true
                }
            });

            $('#inputCCosto').on('change', function() {
                var ccosto = $(this).val();
                $('#inputDescripcion').val(null).trigger('change').prop('disabled', true);
                $('#inputCargo').val(null).trigger('change').prop('disabled', true);

                if (ccosto) {
                    $('#inputDescripcion').prop('disabled', false).select2({
                        dropdownParent: $('#addUserModal'),
                        placeholder: "Buscar Descripción",
                        allowClear: true,
                        ajax: {
                            url: 'fetch_dependents.php',
                            dataType: 'json',
                            delay: 250,
                            data: function(params) {
                                return {
                                    ccosto: ccosto,
                                    q: params.term,
                                    field: 'descripcion'
                                };
                            },
                            processResults: function(data) {
                                return data;
                            },
                            cache: true
                        }
                    });
                }
            });

            $('#inputDescripcion').on('change', function() {
                var ccosto = $('#inputCCosto').val();
                var descripcion = $(this).val();
                $('#inputCargo').val(null).trigger('change').prop('disabled', true);

                if (ccosto && descripcion) {
                    $('#inputCargo').prop('disabled', false).select2({
                        dropdownParent: $('#addUserModal'),
                        placeholder: "Buscar Cargo",
                        allowClear: true,
                        ajax: {
                            url: 'fetch_dependents.php',
                            dataType: 'json',
                            delay: 250,
                            data: function(params) {
                                return {
                                    ccosto: ccosto,
                                    descripcion: descripcion,
                                    q: params.term,
                                    field: 'cargo'
                                };
                            },
                            processResults: function(data) {
                                return data;
                            },
                            cache: true
                        }
                    });
                }
            });
            
            $('#addUserModal').on('hidden.bs.modal', function () {
                $('#inputCCosto').val(null).trigger('change');
                $('#inputDescripcion').val(null).trigger('change').prop('disabled', true);
                $('#inputCargo').val(null).trigger('change').prop('disabled', true);
                $("#saveUserForm")[0].reset();
            });
        });
    </script>
</body>
</html>