File "FOR-S-CCI-38.js"

Full Path: C:/wamp64/www/CALIDADWEB/CALIDADWEB/FRONTED/CONTROLTABLAS.JS/FOR-S-CCI-38.js
File size: 8.2 KB
MIME-type: text/plain
Charset: utf-8

$(document).ready(function () {
    $(".btnDefectosCanal").click(function (e) {
        e.preventDefault();

        swal.fire({
            title: "Cargando datos...",
            allowOutsideClick: false,
            didOpen: () => { swal.showLoading(); }
        });

        if ($.fn.DataTable.isDataTable('#tblDefectosCanal')) {
            $('#tblDefectosCanal').DataTable().destroy();
        }

        let tablalimpieza = $("#tblDefectosCanal").DataTable({
            "ajax": {
                "url": "../../BACKEND/controltablas/FOR-S-CCI-38.php",
                "type": "POST",
                "data": { opcion: 41 },
                dataSrc: function (data) {
                    let newData = [];
                    data.forEach(function (item) {
                        try {
                            let defectos = Object.entries(JSON.parse(item.defectos_granjas));
                            let deficiencias = Object.entries(JSON.parse(item.deficiencia_proceso));

                            let maxLength = Math.max(defectos.length, deficiencias.length);

                            for (let i = 0; i < maxLength; i++) {
                                newData.push({
                                    ...item,
                                    defecto: defectos[i] ? defectos[i][0] : "",
                                    cantidad_defecto: defectos[i] ? defectos[i][1] : "",
                                    deficiencia: deficiencias[i] ? deficiencias[i][0] : "",
                                    cantidad_deficiencia: deficiencias[i] ? deficiencias[i][1] : "",
                                });
                            }
                        } catch (e) {
                            console.error("Error al procesar los datos:", e);
                            newData.push({
                                ...item,
                                defecto: "",
                                cantidad_defecto: "",
                                deficiencia: "",
                                cantidad_deficiencia: "",
                            });
                        }
                    });
                    return newData;
                },
            },
            "columns": [
                { data: "ID" }, // Unificado
                { data: "fecha" },
                { data: "granjas" },
                { data: "viaje" },
                { data: "tipo_ave" },
                { data: "defecto", title: "Defecto Granja" },
                { data: "cantidad_defecto", title: "Cantidad" },
                { data: "porcentaje_granja" },
                { data: "deficiencia", title: "Deficiencia Proceso" },
                { data: "cantidad_deficiencia", title: "Cantidad" },
                { data: "porcentaje_proceso" },
                { data: "porcentaje_global" },
                { data: "verificado" },
                { data: "aprobo" },
                {
                    "data": null,
                    "orderable": false,
                    "width": "80px",
                    "className": "text-center",
                    "render": function () {
                        return "<button class='btn btn-danger btn-sm btnBorrar'><i class='fas fa-trash-alt'></i></button>";
                    }
                },
                {
                    "data": null,
                    "orderable": false,
                    "width": "80px",
                    "className": "text-center",
                    "render": function (data, type, row) {
                        // Cambiado data-id a row.ID
                        return "<button class='btn btn-primary btn-sm btnEditar' data-id='" + row.ID + "'><i class='fas fa-edit'></i></button>";
                    }
                }
            ],
            "language": {
                "url": "//cdn.datatables.net/plug-ins/1.10.20/i18n/Spanish.json"
            },
            "scrollX": true,
            "scrollCollapse": true,
            "autoWidth": false,
            "dom": "Bfrtip",
            "buttons": [
                {
                    extend: "pageLength",
                    className: "btn btn-warning"
                },
                {
                    extend: "excelHtml5",
                    autoFilter: true,
                    sheetName: "CONTROL DEFECTOS CANAL SALIDA CHILLER",
                    title: "CONTROL DEFECTOS CANAL SALIDA CHILLER",
                    text: '<i class="fa-lg fa-solid fa-file-excel"></i> GENERAR EXCEL',
                    className: "btn btn-success",
                    exportOptions: {
                        columns: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
                    }
                }
            ],
            "initComplete": function () {
                swal.close();
            }
        });

        // --- ELIMINAR ---
        $('#tblDefectosCanal tbody').off('click', '.btnBorrar').on('click', '.btnBorrar', function (e) {
            e.preventDefault();
            let data = tablalimpieza.row($(this).parents('tr')).data();

            swal.fire({
                title: "¿Eliminar registro?",
                text: "ID: " + data.ID, // Unificado
                icon: "warning",
                showCancelButton: true,
                confirmButtonColor: "#d33",
                confirmButtonText: "Sí, borrar"
            }).then((result) => {
                if (result.isConfirmed) {
                    $.ajax({
                        url: "../../BACKEND/controltablas/FOR-S-CCI-38.php",
                        type: "POST",
                        data: { opcion: 42, id: data.ID }, // Enviamos data.ID
                        success: function () {
                            tablalimpieza.ajax.reload(null, false);
                            swal.fire("¡Éxito!", "Registro eliminado", "success");
                        }
                    });
                }
            });
        });

        // --- EDITAR ---
        $('#tblDefectosCanal tbody').off('click', '.btnEditar').on('click', '.btnEditar', function (e) {
            e.preventDefault();
            let $row = $(this).closest('tr');
            
            $row.find('td').each(function (index) {
                // Editamos columnas de la 1 a la 13 (evitando ID y botones)
                if (index > 0 && index < 14) {
                    let valorActual = $(this).text();
                    let nombreColumna = tablalimpieza.settings().init().columns[index].data;
                    $(this).html(`<input type="text" class="form-control form-control-sm" value="${valorActual}" data-campo="${nombreColumna}">`);
                }
            });

            $(this).removeClass('btn-primary btnEditar').addClass('btn-success btnGuardar').html('<i class="fas fa-save"></i>');
            $row.find('.btnBorrar').removeClass('btn-danger btnBorrar').addClass('btn-secondary btnCancelar').html('<i class="fas fa-times"></i>');
        });

        // --- GUARDAR ---
        $('#tblDefectosCanal tbody').off('click', '.btnGuardar').on('click', '.btnGuardar', function (e) {
            e.preventDefault();
            let $row = $(this).closest('tr');
            let dataRow = tablalimpieza.row($row).data();
            let datosActualizados = { opcion: 43, id: dataRow.ID }; // Unificado a ID

            $row.find('input').each(function () {
                let campo = $(this).data('campo');
                let valor = $(this).val();
                if (campo) datosActualizados[campo] = valor;
            });

            $.ajax({
                url: "../../BACKEND/controltablas/FOR-S-CCI-38.php",
                type: "POST",
                data: datosActualizados,
                success: function () {
                    tablalimpieza.ajax.reload(null, false);
                    swal.fire("¡Éxito!", "Registro actualizado", "success");
                }
            });
        });

        // --- CANCELAR ---
        $('#tblDefectosCanal tbody').off('click', '.btnCancelar').on('click', '.btnCancelar', function (e) {
            e.preventDefault();
            tablalimpieza.ajax.reload(null, false);
        });
    });
});