var tabla;
var tablaventa;
function validarTipoDocumento(preloading = false) {
  const tipoDocumento = $('#idtipo_documento').val(); // Obtiene el ID del tipo de documento seleccionado
  const numDocumentoInput = $('#num_documento');
  const numDocumentoHelp = $('#num_documento_help');

  if (!preloading) {
      numDocumentoInput.val(''); // Reinicia el campo de número de documento
  }
  numDocumentoHelp.text(''); // Limpia el texto de ayuda

  // Aplica validaciones según el tipo de documento
  if (tipoDocumento === '1') { // Asume que '1' es DNI
      numDocumentoInput.attr('data-maxlength', 8); // Valor personalizado para validación
      numDocumentoHelp.text('El número de documento debe tener exactamente 8 dígitos (DNI).');
  } else if (tipoDocumento === '2') { // Asume que '2' es RUC
      numDocumentoInput.attr('data-maxlength', 11); // Valor personalizado para validación
      numDocumentoHelp.text('El número de documento debe tener exactamente 11 dígitos (RUC).');
  } else {
      numDocumentoInput.removeAttr('data-maxlength'); // Quita cualquier restricción si no aplica
      numDocumentoHelp.text('Seleccione un tipo de documento válido.');
  }
}
function init(){
    listar_venta();
    listar_venta_vendedor();
    listar_stock();
    //listar_dia();
    listar_dia_vendedor();
    //evaluar();
    //$("#fecha_inicio").change(listar_dia);
    //$("#fecha_fin").change(listar_dia);
   
    $("#frmForm").on("submit", function(e) {
        guardaryeditar(e);
    });

    $("#clienteForm").on("submit", function(e) {
      guardarCliente(e);
  });

    $.post("../../ajax/cliente.php?op=selectTipoDocumento", function(r){
      if ($.fn.select2 && $('#idtipo_documento').data('select2')) {
        $('#idtipo_documento').select2('destroy');
      }
      // Actualizar el contenido del select
      $("#idtipo_documento").html(r);
    
      // Inicializar Select2 nuevamente
      $('#idtipo_documento').select2({
        theme: 'bootstrap4',
        placeholder: 'Seleccione Tipo Documento',
        allowClear: true,
      });
      // Ejecuta la validación inicial después de cargar el select
      validarTipoDocumento();
    });

    $.post("../../ajax/cliente.php?op=selectDepartamentos", function (r) {
      if ($.fn.select2 && $('#iddepartamento').data('select2')) {
        $('#iddepartamento').select2('destroy');
      }
      $("#iddepartamento").html('<option value="">Seleccione Departamento </option>');
      $("#iddepartamento").append(r);
      $("#iddepartamento").select2({
          theme: "bootstrap4",
          placeholder: "Seleccione Departamento",
          allowClear: true,
      });
  });
  
        $.post("../../ajax/venta.php?op=selectTitular", function(r) {
            if ($.fn.select2 && $('#idtitular').data('select2')) {
              $('#idtitular').select2('destroy');
            }
                // Limpiar las opciones antes de agregar las nuevas
            $("#idtitular").html('<option value="">Seleccione Titular </option>'); 
            // Actualizar el contenido del select con las opciones de producto
            $("#idtitular").append(r);
            // Inicializar Select2 nuevamente
            $('#idtitular').select2({
              theme: 'bootstrap4',
              placeholder: 'Seleccione un titular ',
              allowClear: true,
            });
          });

    $.post("../../ajax/cliente.php?op=selectCliente", function(r) {
        if ($.fn.select2 && $('#idpersona').data('select2')) {
          $('#idpersona').select2('destroy');
        }
            // Limpiar las opciones antes de agregar las nuevas
        $("#idpersona").html('<option value="">Seleccione Cliente </option>'); 
        // Actualizar el contenido del select con las opciones de producto
        $("#idpersona").append(r);
        // Inicializar Select2 nuevamente
        $('#idpersona').select2({
          theme: 'bootstrap4',
          placeholder: 'Seleccione un cliente ',
          allowClear: true,
        });
      });
      
      $.post("../../ajax/usuario.php?op=selectUsuario", function(r) {
        if ($.fn.select2 && $('#idusuario').data('select2')) {
          $('#idusuario').select2('destroy');
        }
            // Limpiar las opciones antes de agregar las nuevas
        $("#idusuario").html('<option value="">Seleccione Cliente </option>'); 
        // Actualizar el contenido del select con las opciones de producto
        $("#idusuario").append(r);
        // Inicializar Select2 nuevamente
        $('#idusuario').select2({
          theme: 'bootstrap4',
          placeholder: 'Seleccione un usuario ',
          allowClear: true,
        });
      });

      $.post("../../ajax/venta.php?op=selectbanco", function(r){
        if ($.fn.select2 && $('#idbanco').data('select2')) {
          $('#idbanco').select2('destroy');
        }
           // Limpiar las opciones antes de agregar las nuevas
           $("#idbanco").html('<option value="">Seleccione Banco</option>'); 
           // Actualizar el contenido del select con las opciones de producto
           $("#idbanco").append(r);
      
        // Inicializar Select2 nuevamente
        $('#idbanco').select2({
          theme: 'bootstrap4',
          placeholder: 'Seleccione un banco',
          allowClear: true,
        });
      });
    }

    $(document).ready(function () {
      // Ocultar campos al inicio
      $("#tipo-pago-th, #tipopago, #deposito-fields, #titular-fields").closest("th").hide();
  
      // Detectar cambios en el select de Tipo Venta
      $("#tipoventa").on("change", function () {
          let tipoVenta = $(this).val();
  
          if (tipoVenta == "1") { // Si es "Contado"
              $("#tipo-pago-th, #tipopago").closest("th").show();
          } else { // Si es "Acuenta"
              $("#tipo-pago-th, #tipopago, #deposito-fields, #titular-fields").closest("th").hide();
          }
      });
    });

    document.addEventListener("DOMContentLoaded", function () {
      const tipoPagoElement = document.getElementById("tipopago");
    
      if (tipoPagoElement) {
        tipoPagoElement.addEventListener("change", function () {
          const tipoPago = this.value;
    
          if (tipoPago === "1") { // Depósito
            document.getElementById("deposito-fields").style.display = "none";
            document.getElementById("titular-fields").style.display = "none";
          } else if (tipoPago === "2") { // Efectivo
            document.getElementById("deposito-fields").style.display = "block";
            document.getElementById("titular-fields").style.display = "block";
          } else {
            document.getElementById("deposito-fields").style.display = "none";
            document.getElementById("titular-fields").style.display = "none";
            
          }
        });
      }
    });

        // Evento change para actualizar la validación cuando se cambia el tipo de documento
        $('#idtipo_documento').on('change', validarTipoDocumento);

        // Validación en tiempo real para restringir la longitud del número
        $('#num_documento').on('input', function () {
            const maxLength = $(this).attr('data-maxlength'); // Obtiene el valor máximo permitido
            const value = $(this).val();
    
            if (maxLength && value.length > maxLength) {
                $(this).val(value.slice(0, maxLength)); // Trunca el valor a la longitud máxima
            }
        });


        $.post("../../ajax/producto.php?op=selectProducto", function(r){
          if ($.fn.select2 && $('#idproducto').data('select2')) {
            $('#idproducto').select2('destroy');
          }
          // Limpiar las opciones antes de agregar las nuevas
          $("#idproducto").html('<option value="">Seleccione Producto</option>'); 
  
          // Actualizar el contenido del select con las opciones de producto
          $("#idproducto").append(r);
        
          // Inicializar Select2 nuevamente
          $('#idproducto').select2({
            theme: 'bootstrap4',
            placeholder: 'Seleccione un producto',
            allowClear: true,
          });
        });

        $(document).on("change", "#idproducto", function() {
          var idproducto =  $(this).val(); // Obtener el ID del cliente seleccionado

          if (!idproducto) {
            $("#idcolor, #idcombinacion, #idtalla").html('<option value="">Seleccione</option>').trigger("change");
            $("#cantidad, #idalmacen_central").val("");
            return;
        }
        
          // Establecer el ID del cliente seleccionado directamente en el select de dirección
          $("#idcolor").html('<option value="">Seleccione Color</option>');
        
          // Hacer la solicitud AJAX para cargar las direcciones del cliente
          $.post("../../ajax/color.php?op=selectColorProducto&idproducto=" + idproducto, function(r) {
            if ($.fn.select2 && $('#idcolor').data('select2')) {
              $('#idcolor').select2('destroy'); // Destruir Select2 si ya está inicializado
            }
            // Actualizar las opciones con la respuesta de AJAX
            $("#idcolor").html('<option value="">Seleccione una Color</option>'); 
            $("#idcolor").append(r);
            // Inicializar nuevamente Select2 para el select de direcciones
            $('#idcolor').select2({
              theme: 'bootstrap4',
              placeholder: 'Seleccione Color',
              allowClear: true,
            });
           
          });
        });

        $("#idcolor").on("change", function() {
          var idcolor = $("#idcolor").val();
          var idproducto = $("#idproducto").val(); // Obtener el ID del cliente seleccionado

          if (!idcolor) {
            $("#idcombinacion, #idtalla").html('<option value="">Seleccione</option>').trigger("change");
            $("#cantidad, #idalmacen_central").val("");
            return;
        }
        
          // Establecer el ID del cliente seleccionado directamente en el select de dirección
          $("#idcombinacion").html('<option value="">Seleccione Color</option>');
        
          // Hacer la solicitud AJAX para cargar las direcciones del cliente
          $.post("../../ajax/color.php?op=selectCombinacionProducto&idcolor=" + idcolor + "&idproducto=" + idproducto, function(r) {
            if ($.fn.select2 && $('#idcombinacion').data('select2')) {
              $('#idcombinacion').select2('destroy'); // Destruir Select2 si ya está inicializado
            }
            // Actualizar las opciones con la respuesta de AJAX
            $("#idcombinacion").append(r);
            // Inicializar nuevamente Select2 para el select de direcciones
            $('#idcombinacion').select2({
              theme: 'bootstrap4',
              placeholder: 'Seleccione Color',
              allowClear: true,
            });
           
          });
        });

        $("#idcombinacion").on("change", function() {
          var idcombinacion = $("#idcombinacion").val();
          var idproducto = $("#idproducto").val(); // Obtener el ID del cliente 
          
          var tipo_salida = $("#tipo_salida").val();
          if (!tipo_salida) tipo_salida = "1";
        
          // Establecer el ID del cliente seleccionado directamente en el select de dirección
          $("#idtalla").html('<option value="">Seleccione Color</option>');
        
          // Hacer la solicitud AJAX para cargar las direcciones del cliente
           $.post("../../ajax/venta.php?op=selectTallas", {
                                              idcombinacion_color: idcombinacion,
                                              idproducto: idproducto,
                                              tipo_salida: tipo_salida
                                            }, function(r) {
            if ($.fn.select2 && $('#idtalla').data('select2')) {
              $('#idtalla').select2('destroy'); // Destruir Select2 si ya está inicializado
            }
            // Actualizar las opciones con la respuesta de AJAX
            $("#idtalla").append(r);
            // Inicializar nuevamente Select2 para el select de direcciones
            $('#idtalla').select2({
              theme: 'bootstrap4',
              placeholder: 'Seleccione Color',
              allowClear: true,
            });
           
          });
        });

        $("#idtalla").on("change", function() {
          var cantidad = $("#idtalla option:selected").data("cantidad"); // Obtener cantidad
          var idalmacen_central = $("#idtalla option:selected").data("idalmacen_central"); // Obtener idalmacen_central
      
          $("#cantidad").val(cantidad || ""); // Si no hay cantidad, colocar 0
          $("#idalmacen_central").val(idalmacen_central || ""); // Si no hay idalmacen, colocar vacío
      });

      $("#idproducto").on("change", function() {
        var precio_venta = $("#idproducto option:selected").data("precio"); // Obtener cantidad
        $("#precio_venta").val(precio_venta || ""); // Si no hay cantidad, colocar 0
    });



//Función limpiar
function limpiar()
{
	$("#idventa").val("");
  $("#fecha_hora").val("");
	$("#nroguia").val("");
  $("#nrocorrelativo").val("");
    
}
// Función para listar datos

function listar_dia() {
          var fecha_inicio = $("#fecha_inicio").val();
          var fecha_fin = $("#fecha_fin").val();
          var idusuario = $("#idusuario").val();
          var idtitular = $("#idtitular").val();

          // Validar que las fechas no estén vacías
          if (!fecha_inicio || !fecha_fin) {
            Swal.fire({
              title: "Datos requeridos",
              text: "Por favor, seleccione los datos.",
              icon: "warning",
              confirmButtonText: "Aceptar"
            });
            return;
          }
          $.post(
            "../../ajax/venta.php?op=listar_dia",
            { fecha_inicio: fecha_inicio, fecha_fin: fecha_fin, idusuario: idusuario, idtitular: idtitular },
            function (data, status) {
              if (status === "success") {
                const response = JSON.parse(data);
                const ventas = response.ventas;
                $("#contenedor_movimientos").empty();
                $("#contenedor_resumen").empty();

                if (ventas.length === 0) {
                  Swal.fire({
                    title: "No hay datos",
                    text: "No hay ventas en este rango de fechas.",
                    icon: "warning",
                    confirmButtonText: "Aceptar"
                  });
                 
                  return;
                }

                let html = `
                  <div class="mb-5 border p-3 rounded bg-white shadow-sm">
                    <h5 class="mt-4">Movimientos de Ventas</h5>
                    <table class="table table-bordered">
                      <thead class="thead-light">
                        <tr>
                          <th>#</th>
                          <th>Fecha</th>
                          <th>Responsable</th>
                          <th>Nombre Cliente</th>
                          <th>Nro Guia Tienda</th>
                          <th>Total Venta</th>
                          <th>Tipo Pago</th>
                          <th>Banco</th>
                          <th>Titular</th>
                          <th>Tipo Venta</th>
                        </tr>
                      </thead>
                      <tbody>`;
                // Calcular resumen efectivo y transferencia
                let totalEfectivo = 0;
                let totalTransferencia = 0;

                let depositosAgrupados = {};
                ventas.forEach((venta, index) => {
                     const tipo_pago = venta.tipo_pago;
                     const banco = venta.banco;
                     const titular = venta.titular;
                     const tipoventa = venta.tipoventa;
                     const monto = parseFloat(venta.monto_pagado);
                     let tipo_venta = "";
                     let tipopago = "";
                     let banco_nombre = "";
                     let titular_nombre = "";

                     if(tipoventa == 1){
                      tipo_venta= "Contado";
                     }else if(tipoventa == 2){
                      tipo_venta= "Acuenta";
                     }

                     if(tipo_pago == 1){
                      tipopago= "Efectivo";
                      banco_nombre="S/N";
                      titular_nombre="S/N";
                      totalEfectivo += monto;
                     }else if(tipo_pago == 2){
                        totalTransferencia += monto;
                        if (!depositosAgrupados[titular]) {
                          depositosAgrupados[titular] = {};
                        }
                        if (!depositosAgrupados[titular][banco]) {
                          depositosAgrupados[titular][banco] = 0;
                        }
                        depositosAgrupados[titular][banco] += monto;
                      
                      tipopago= "Transferencia";
                      banco_nombre= banco;
                      titular_nombre=titular;
                     }

                  html += `
                    <tr>
                      <td>${index + 1}</td>
                      <td>${venta.fecha_pago}</td>
                      <td>${venta.usuario}</td>
                      <td>${venta.cliente}</td>
                      <td>${venta.nroguia}</td>
                      <td>${venta.monto_pagado}</td>
                      <td>${tipopago}</td>
                      <td>${banco_nombre}</td>
                      <td>${titular_nombre}</td>
                      <td>${tipo_venta}</td>
                    </tr>`;
                });

                html += `
                      </tbody>
                    </table>
                  </div>`;

                $("#contenedor_movimientos").append(html);

                let resumenHTML = `
                        <div class="mb-5 border p-4 rounded bg-light">
                          <h4>Resumen de Caja</h4>

                          <h5 class="mt-4">Resumen Efectivo</h5>
                          <table class="table table-striped table-bordered">
                            <thead class="thead-light">
                              <tr><th>Efectivo</th><th>Monto Total</th></tr>
                            </thead>
                            <tbody>
                              <tr><td>Efectivo Total </td><td><strong>S/${totalEfectivo.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</strong></td></tr>
                            </tbody>
                          </table>
                          
                          <h5 class="mt-4">Resumen Deposito</h5>
                          <table class="table table-striped table-bordered">
                            <thead class="thead-light">
                              <tr><th>Nombre Titular</th><th>Banco</th><th>Monto</th></tr>
                            </thead>
                            <tbody>`;

                            let index = 1;
                            for (const titular in depositosAgrupados) {
                              for (const banco in depositosAgrupados[titular]) {
                                const monto = depositosAgrupados[titular][banco];
                                resumenHTML += `
                                  <tr>
                                    <td>${titular}</td>
                                    <td>${banco}</td>
                                    <td>S/ ${monto.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</td>
                                  </tr>`;
                              }
                            }

                            // Total general
                            const totalGeneral = totalEfectivo + totalTransferencia;

                      resumenHTML += `
                             <tr class="font-weight-bold">
                             <td></td>   
                             <td>Total Transferencias </td>
                                <td><strong>S/ ${totalTransferencia.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</strong></td>
                              </tr>
                            </tbody>
                          </table>

                          <h5 class="mt-4">Total General</h5>
                          <table class="table table-striped table-bordered">
                           <thead class="thead-light">
                              <tr>
                              <th>Resumen General</th>
                              <th>Monto Totales</th>
                              </tr>
                            </thead>
                            <tbody>
                              <tr class="font-weight-bold">
                              <td>Efectivo</td>
                              <td><strong>S/ ${totalEfectivo.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</strong></td>
                              </tr>
                              <tr class="font-weight-bold">
                              <td>Transferencia</td>
                              <td><strong>S/ ${totalTransferencia.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</strong></td>
                              </tr>
                              <tr class="font-weight-bold">
                              <td>SALDO TOTAL</td>
                              <td><strong>S/ ${totalGeneral.toLocaleString("es-PE", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}</strong></td>
                              </tr>
                            </tbody>
                          </table>
                        </div>`;

                      $("#contenedor_resumen").append(resumenHTML);
              } else {
                console.error("Error en la solicitud AJAX.");
              }
            }
          );
}

async function generarPDF() {
  const { jsPDF } = window.jspdf;
  const doc = new jsPDF('p', 'mm', 'a4');
  let y = 10;

  doc.setFontSize(14);
  doc.text("Reporte Detallado de Ventas", 105, y, { align: "center" });
  y += 10;

  // === 1. Movimientos de Ventas ===
  document.querySelectorAll("#contenedor_movimientos > div").forEach(section => {
    const clone = section.cloneNode(true);

    const h5 = clone.querySelector("h5");
    if (h5) {
      doc.setFontSize(12);
      doc.text(h5.textContent.trim(), 10, y);
      y += 7;
    }

    const table = clone.querySelector("table");
    if (table) {
      doc.autoTable({
        html: table,
        startY: y,
        theme: 'grid',
        styles: { fontSize: 8 },
        headStyles: { fillColor: [0, 122, 204] }
      });

      y = doc.lastAutoTable.finalY + 10;

      if (y >= 270) {
        doc.addPage();
        y = 10;
      }
    }
  });

  // === 2. Resumen de Caja ===
  const resumen = document.querySelector("#contenedor_resumen > div");
  if (resumen) {
    const clone = resumen.cloneNode(true);
    const h4 = clone.querySelector("h4");
    if (h4) {
      doc.setFontSize(12);
      doc.text(h4.textContent.trim(), 10, y);
      y += 7;
    }

    clone.querySelectorAll("h5").forEach((h5, index) => {
      const table = h5.nextElementSibling;
      if (table && table.tagName.toLowerCase() === 'table') {
        doc.setFontSize(11);
        doc.text(h5.textContent.trim(), 10, y);
        y += 5;

        doc.autoTable({
          html: table,
          startY: y,
          theme: 'grid',
          styles: { fontSize: 8 },
          headStyles: { fillColor: [0, 122, 204] }
        });

        y = doc.lastAutoTable.finalY + 10;

        if (y >= 270) {
          doc.addPage();
          y = 10;
        }
      }
    });
  }

  // === 3. Fecha y hora de impresión (hora peruana - UTC-5) ===
  const fechaHora = new Date();
  fechaHora.setHours(fechaHora.getHours() - 5);
  const fechaFormateada = fechaHora.toLocaleString('es-PE', {
    timeZone: 'America/Lima',
    hour12: false,
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit'
  });

  doc.setFontSize(10);
  doc.text(`Fecha de impresión: ${fechaFormateada}`, 10, 290);

  // === 4. Guardar PDF ===
  doc.save("reporte_ventas_dia.pdf");
}

async function generarExcel() {
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet("Listado del Día");

  let rowIndex = 1;

  document.querySelectorAll("#contenedor_movimientos > div").forEach(section => {
    const h4 = section.querySelector("h4")?.textContent.trim() || "";
    const p = section.querySelector("p")?.textContent.trim() || "";

    // Título
    worksheet.mergeCells(`A${rowIndex}:I${rowIndex}`);
    worksheet.getCell(`A${rowIndex}`).value = h4;
    worksheet.getCell(`A${rowIndex}`).font = { bold: true, size: 13 };
    rowIndex++;

    worksheet.mergeCells(`A${rowIndex}:I${rowIndex}`);
    worksheet.getCell(`A${rowIndex}`).value = p;
    rowIndex += 2;

    // Tablas
    section.querySelectorAll("table").forEach(table => {
      const thead = table.querySelector("thead");
      if (thead) {
        const headerCells = thead.querySelectorAll("th");

        const columnWidths = [25, 15, 30, 40, 15, 15, 15, 15, 10];
        headerCells.forEach((_, index) => {
          worksheet.getColumn(index + 1).width = columnWidths[index] || 20;
        });

        const headerRow = worksheet.getRow(rowIndex);
        headerCells.forEach((th, index) => {
          const cell = headerRow.getCell(index + 1);
          cell.value = th.textContent.trim();
          cell.font = { bold: true, color: { argb: "FFFFFFFF" } };
          cell.fill = {
            type: "pattern",
            pattern: "solid",
            fgColor: { argb: "FFFFC000" }, // Verde fuerte
          };
          cell.alignment = { vertical: "middle", horizontal: "center" };
        });

        rowIndex++;
      }

      const tbody = table.querySelector("tbody");
      if (tbody) {
        tbody.querySelectorAll("tr").forEach(tr => {
          const row = worksheet.getRow(rowIndex);
          tr.querySelectorAll("td").forEach((td, index) => {
            let val = td.textContent.trim();
            if (!isNaN(val) && val !== '') val = parseFloat(val);
            row.getCell(index + 1).value = val;
          });
          rowIndex++;
        });
      }

      const tfoot = table.querySelector("tfoot");
      if (tfoot) {
        tfoot.querySelectorAll("tr").forEach(tr => {
          const row = worksheet.getRow(rowIndex);
          tr.querySelectorAll("td").forEach((td, index) => {
            row.getCell(index + 1).value = td.textContent.trim();
            row.getCell(index + 1).font = { bold: true };
          });
          rowIndex++;
        });
      }

      rowIndex += 2;
    });
  });

   // === 2. Sección de resumen ===
  const resumen = document.querySelector("#contenedor_resumen > div");
  if (resumen) {
    const h4 = resumen.querySelector("h4")?.textContent.trim() || "";
    if (h4) {
      worksheet.mergeCells(`A${rowIndex}:I${rowIndex}`);
      worksheet.getCell(`A${rowIndex}`).value = h4;
      worksheet.getCell(`A${rowIndex}`).font = { bold: true, size: 13 };
      rowIndex += 2;
    }

    resumen.querySelectorAll("h5").forEach(h5 => {
      const titulo = h5.textContent.trim();
      const table = h5.nextElementSibling;

      if (table && table.tagName.toLowerCase() === "table") {
        worksheet.mergeCells(`A${rowIndex}:I${rowIndex}`);
        worksheet.getCell(`A${rowIndex}`).value = titulo;
        worksheet.getCell(`A${rowIndex}`).font = { bold: true, size: 12 };
        rowIndex++;

        const thead = table.querySelector("thead");
        if (thead) {
          const headerCells = thead.querySelectorAll("th");
          const columnWidths = [40, 30, 30, 40, 30, 30, 15, 15, 10];
          headerCells.forEach((_, index) => {
            worksheet.getColumn(index + 1).width = columnWidths[index] || 20;
          });

          const headerRow = worksheet.getRow(rowIndex);
          headerCells.forEach((th, index) => {
            const cell = headerRow.getCell(index + 1);
            cell.value = th.textContent.trim();
            cell.font = { bold: true, color: { argb: "FFFFFFFF" } };
            cell.fill = {
              type: "pattern",
              pattern: "solid",
              fgColor: { argb: "FFFFC000" }, // Naranja
            };
            cell.alignment = { vertical: "middle", horizontal: "center" };
          });
          rowIndex++;
        }

        const tbody = table.querySelector("tbody");
        if (tbody) {
          tbody.querySelectorAll("tr").forEach(tr => {
            const row = worksheet.getRow(rowIndex);
            tr.querySelectorAll("td").forEach((td, index) => {
              let val = td.textContent.trim();
              if (!isNaN(val) && val !== '') val = parseFloat(val);
              row.getCell(index + 1).value = val;
            });
            rowIndex++;
          });
        }

        const tfoot = table.querySelector("tfoot");
        if (tfoot) {
          tfoot.querySelectorAll("tr").forEach(tr => {
            const row = worksheet.getRow(rowIndex);
            tr.querySelectorAll("td").forEach((td, index) => {
              row.getCell(index + 1).value = td.textContent.trim();
              row.getCell(index + 1).font = { bold: true };
            });
            rowIndex++;
          });
        }

        rowIndex += 2;
      }
    });
  }

  // === 3. Exportar archivo ===
  const buffer = await workbook.xlsx.writeBuffer();
  const blob = new Blob([buffer], {
    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  });
  const link = document.createElement("a");
  link.href = URL.createObjectURL(blob);
  link.download = `listado_dia_${new Date().toISOString().slice(0, 10)}.xlsx`;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

function listar_dia_vendedor() {
  tabla=$("#listar_dia_vendedor").DataTable({
      "responsive": true,
      "autoWidth": false,
      "ajax": {
          url: '../../ajax/venta.php?op=listar_dia_vendedor',
          type: "GET",
          dataType: "json",
          error: function(e) {
              console.error("Error en la solicitud AJAX:", e.responseText);
              alert("No se pudo cargar la tabla. Verifique la consola.");
          }
      },
      "language": {
          "sProcessing": "Procesando...",
          "sLengthMenu": "Mostrar _MENU_ registros",
          "sZeroRecords": "No se encontraron resultados",
          "sEmptyTable": "Ningún dato disponible en esta tabla",
          "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
          "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
          "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
          "sSearch": "Buscar:",
          "oPaginate": {
              "sFirst": "Primero",
              "sLast": "Último",
              "sNext": "Siguiente",
              "sPrevious": "Anterior"
          }
        },
        "bDestroy": true,
        "order": [[ 0, "desc" ]]//Ordenar (columna,orden)
  });
  $.post("../../ajax/venta.php?op=cantidadTotalesusuario",function(data,status){
    data=JSON.parse(data);
      const total_efectivo = parseFloat(data.total_efectivo) || 0; // Si no es un número, se convierte a 0
    const total_transferencia = parseFloat(data.total_transferencia) || 0; // Lo mismo para la transferencia

    // Sumar los totales
    const totalito = total_efectivo + total_transferencia;

    // Mostrar los valores en los elementos correspondientes
    $("#sumaefectivo").text(total_efectivo.toFixed(2)); // Mostrar 2 decimales
    $("#sumatransferencia").text(total_transferencia.toFixed(2));
    $("#sumatotal").text(totalito.toFixed(2)); // Mostrar 2 decimales
});
}

function listar_venta() {
    tabla=$("#venta_listar").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/venta.php?op=listar_venta',
            type: "GET",
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                alert("No se pudo cargar la tabla. Verifique la consola.");
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true,
          "order": [[ 0, "desc" ]]//Ordenar (columna,orden)
    });
}

function listar_venta_vendedor() {
  tabla=$("#venta_listar_vendedor").DataTable({
      "responsive": true,
      "autoWidth": false,
      "ajax": {
          url: '../../ajax/venta.php?op=listar_venta_vendedor',
          type: "GET",
          dataType: "json",
          error: function(e) {
              console.error("Error en la solicitud AJAX:", e.responseText);
              alert("No se pudo cargar la tabla. Verifique la consola.");
          }
      },
      "language": {
          "sProcessing": "Procesando...",
          "sLengthMenu": "Mostrar _MENU_ registros",
          "sZeroRecords": "No se encontraron resultados",
          "sEmptyTable": "Ningún dato disponible en esta tabla",
          "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
          "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
          "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
          "sSearch": "Buscar:",
          "oPaginate": {
              "sFirst": "Primero",
              "sLast": "Último",
              "sNext": "Siguiente",
              "sPrevious": "Anterior"
          }
        },
        "bDestroy": true,
        "order": [[ 0, "desc" ]]//Ordenar (columna,orden)
  });
}

function listar_stock() {

  //console.log(idproducto);
    tabla=$("#modalproducto").DataTable({
        "responsive": true,
        "autoWidth": false,
        "ajax": {
            url: '../../ajax/venta.php?op=listar_stock',
            type: "GET",
            dataType: "json",
            error: function(e) {
                console.error("Error en la solicitud AJAX:", e.responseText);
                Swal.fire({
                  icon: 'error',
                  title: 'Producto sin Combinaciones',
                  text: `El producto no tiene Combinaciones.`,
                  confirmButtonText: 'Aceptar',
                  timer: 3000
                }).then(() => {
                  // Recargar la página después de cerrar la alerta
                  location.reload();
              });
            }
        },
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sSearch": "Buscar:",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            }
          },
          "bDestroy": true
    });

}




var cont = 0;
var detalles = 0;

$(document).ready(function() {

  $('#adicionar').click(function() {
    $("#btnGuardar").show();

    var id_producto = $("#idproducto").val();
    var tipo_salida = $("#tipo_salida").val();
    if (!tipo_salida) {
      tipo_salida = "1"; // valor por defecto si está vacío o no seleccionado
      var stock = $("#cantidad").val();
       botonTipoSalida = '<button class="btn btn-success btn-xs btn-flat">V</button>'; // Verde para 1
    }else if(tipo_salida == 1 ){
       var stock = $("#cantidad").val();
        botonTipoSalida = '<button class="btn btn-success btn-xs btn-flat">V</button>'; // Verde para 1
    }else{
      var stock = '100';
      botonTipoSalida = '<button class="btn btn-danger btn-xs btn-flat">M</button>'; // Rojo para cualquier otro valor
    }
    var nombre_producto = $("#idproducto option:selected").text();
    var id_color = $("#idcolor").val();
    var color = $("#idcolor option:selected").text(); 
    var comb1 = $("#idcombinacion").val();
    var comb1_text = $("#idcombinacion option:selected").text();
    var id_talla = $("#idtalla").val(); 
    var talla = $("#idtalla option:selected").text(); 
    var idalmacen_central = $("#idalmacen_central").val();
    var precio_venta = $("#precio_venta").val(); 
    

    
    let cantidad = 1;
    
     if (codigoYaExiste(idalmacen_central)) {
      Swal.fire({
          icon: 'warning',
          title: 'Elemento duplicado',
          text: 'El producto,color,talla ya ha sido agregado.',
          confirmButtonText: 'Aceptar',
          timer: 3000
      });
      return; // Detiene la ejecución si ya existe
     }
     
    if (id_producto != "" && id_color != "" && comb1 != "" && idalmacen_central!= "" && stock>0) {
      var subtotal = cantidad * precio_venta;

      var fila = `
                  <tr class="filas" id="fila${cont}">
                      <td>
                          <button type="button" class="btn btn-danger btn-flat btn-xs" onclick="eliminarDetalle(${cont})"><i class="fa fa-trash"></i></button>
                          
                      </td>
                      <td>
                          <input type="hidden" name="idproducto_venta[]" value="${id_producto}">
                          <input type="hidden" name="idalmacen_central_venta[]" value="${idalmacen_central}">
                          <input type="hidden" name="tipo_salida[]" value="${tipo_salida}">
                          ${nombre_producto}
                      </td>
                      <td>
                        <input type="text" class="form-control" value="${color}" readonly>
                      </td>
                      <td>
                        <input type="text" class="form-control" value="${comb1_text}" readonly>
                      </td>
                      <td class="text-center align-middle">
                        ${talla}
                      </td>
                      <td>
                        <input type="number" class="form-control" name="cantidad_venta[]" id="cantidad${cont}" value="${cantidad}" min="1" max="${stock}" data-stock="${stock}">
                      </td>
                      <td>
                          <input type="number" step="0.01" name="precio_ventav[]" id="precio_venta${cont}" value="${precio_venta}" class="form-control">
                      </td>
                       <td class="text-center align-middle">
                        ${botonTipoSalida}
                      </td>
                      <td>
                            <span name="subtotal" id="subtotal${cont}">${subtotal.toFixed(2)}</span>
                      </td>
                  </tr>
              `;

              // Agregar la fila a la tabla "detalles"
              detalles++;
              $('#detalles tbody').append(fila);

              $(`#cantidad${cont}`).on('keyup change', function () {
                validarStock(this);
                modificarSubtotales();
                });

              $(`#cantidad${cont}, #precio_venta${cont}`).on('keyup change', modificarSubtotales);

              cont++;
              modificarSubtotales();
              $('#idproducto').val('').trigger('change');
              $('#idcolor').val('').trigger('change');
              $('#idcombinacion').val('').trigger('change');
              $('#idtalla').val('').trigger('change');
              $('#cantidad').val('');
              $('#precio_venta').val('');
              $('#idalmacen_central').val('');
             // $(filaBoton).closest('tr').remove();  // Esto elimina la fila en el modal
          }else {
            // Si faltan campos, mostrar alerta
            Swal.fire({
                icon: 'error',
                title: 'Datos Vacíos',
                text: `Seleccione todos los campos obligatorios.`,
                confirmButtonText: 'Aceptar',
                timer: 3000
            });
           }
        });
      });
      
      function codigoYaExiste(idalmacen_central_venta) {
    let existe = false;
    const cleanedId = String(idalmacen_central_venta).trim();  // Limpiar y asegurarse de que sea un string
    $("input[name='idalmacen_central_venta[]']").each(function() {
        const currentVal = String($(this).val()).trim();
        if (currentVal === cleanedId) {
            existe = true;
            return false; // Detiene la iteración si encuentra coincidencia
        }
    });
    return existe;
  }


function validarStock(elemento) {
  const stock = parseFloat($(elemento).data('stock'));
  const cantidad = parseFloat($(elemento).val());

  if (cantidad > stock) {
        Swal.fire({
          icon: 'error',
          title: 'Cantidad excedida',
          text: `La cantidad no puede exceder el stock disponible (${stock}).`,
          confirmButtonText: 'Aceptar',
          timer: 3000
      });
      $(elemento).val(stock); // Ajustar al valor máximo permitido
  }
}

function modificarSubtotales() {
  const cantidades = document.getElementsByName("cantidad_venta[]");
  const precios = document.getElementsByName("precio_ventav[]");
  const subtotales = document.getElementsByName("subtotal");

  let totalSubtotal = 0;
  let igv = 0;
  let gravado = 0;
  let total = 0.0;

  for (let i = 0; i < cantidades.length; i++) {
    const cantidad = parseFloat(cantidades[i].value) || 0;
    const precio = parseFloat(precios[i].value) || 0;
    const subtotal = cantidad * precio;

    subtotales[i].value = subtotal.toFixed(2);
    subtotales[i].innerHTML = subtotal.toFixed(2); // por si lo usas como span o td
    totalSubtotal += subtotal;
  }

  const envio = parseFloat(document.getElementById("total_envio").value) || 0;
  const servicio = parseFloat(document.getElementById("total_servicio").value) || 0;

  total = totalSubtotal + servicio + envio;
  gravado = total / 1.18;
  igv = gravado * 0.18;

  document.getElementById("subtotal_total").value = gravado.toFixed(2);
  document.getElementById("total_igv").value = igv.toFixed(2);
  document.getElementById("total_venta").value = total.toFixed(2);
}


function evaluar() {
    if (detalles > 0) {
        $("#btnGuardar").show();
    } else {
        $("#btnGuardar").hide();
        cont = 0;
    }
}

// Función para eliminar una fila
function eliminarDetalle(index) {
  $("#fila" + index).remove();
  cont--;
  detalles = detalles - 1;
  modificarSubtotales(); // Recalcular los totales después de agregar una fila
  evaluar();  // Llamar a la función para ocultar el botón si no hay detalles
}

// Configuración de SweetAlert2 con botones personalizados
const swalWithBootstrapButtons = Swal.mixin({
    customClass: {
      confirmButton: "btn btn-success mx-2", // Añadimos margen (Bootstrap `me-2`) para separar los botones
      cancelButton: "btn btn-danger mx-2"
    },
    buttonsStyling: false
  });
// Función para guardar o editar
function guardaryeditar(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnGuardar").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#frmForm")[0]);

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¿Deseas guardar los cambios realizados?",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, guardar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Si el usuario confirma, realizar la solicitud AJAX
      $.ajax({
        url: "../../ajax/venta.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
          // Mostrar mensaje de éxito o error según la respuesta del backend
          swalWithBootstrapButtons.fire({
            title: 'Resultado',
            text: datos, // Mostrar el mensaje devuelto por el backend
            icon: datos.includes("Venta Registrado") || datos.includes("Venta Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Venta Registrado") || datos.includes("Venta Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "list.php";
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "create.php";
            }
          });
        },
        error: function (err) {
          // Manejar errores en la solicitud AJAX
          swalWithBootstrapButtons.fire({
            title: 'Error',
            text: 'Hubo un problema con la solicitud. Intente nuevamente.',
            icon: 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón tras un error
          });
        }
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      // Si el usuario cancela, mostrar un mensaje de cancelación
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "No se realizaron cambios.",
        icon: "error",
        confirmButtonText: "Aceptar"
      }).then(() => {
        $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnGuardar").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

function guardarCliente(e) {
  e.preventDefault(); // Evitar acción predeterminada
  $("#btnCliente").prop("disabled", true); // Deshabilitar el botón para evitar múltiples envíos
  var formData = new FormData($("#clienteForm")[0]);

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¿Deseas guardar los cambios realizados?",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, guardar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Si el usuario confirma, realizar la solicitud AJAX
      $.ajax({
        url: "../../ajax/cliente.php?op=guardarCliente",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function (datos) {
          // Mostrar mensaje de éxito o error según la respuesta del backend
          swalWithBootstrapButtons.fire({
            title: 'Resultado',
            text: datos, // Mostrar el mensaje devuelto por el backend
            icon: datos.includes("Cliente Registrado") || datos.includes("Cliente Actualizada") ? 'success' : 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            if (datos.includes("Cliente Registrado") || datos.includes("Cliente Actualizada")) {
              // Redirigir al listado si la operación fue exitosa
              window.location.href = "create.php";
              limpiar();
            } else {
              // Si hubo un error, redirigir al formulario de creación
              window.location.href = "create.php";
            }
          });
        },
        error: function (err) {
          // Manejar errores en la solicitud AJAX
          swalWithBootstrapButtons.fire({
            title: 'Error',
            text: 'Hubo un problema con la solicitud. Intente nuevamente.',
            icon: 'error',
            confirmButtonText: 'Aceptar'
          }).then(() => {
            $("#btnCliente").prop("disabled", false); // Rehabilitar el botón tras un error
          });
        }
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      // Si el usuario cancela, mostrar un mensaje de cancelación
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "No se realizaron cambios.",
        icon: "error",
        confirmButtonText: "Aceptar"
      }).then(() => {
        $("#btnGuardar").prop("disabled", false); // Rehabilitar el botón si se cancela
      });
    }
  }).finally(() => {
    $("#btnCliente").prop("disabled", false); // Asegurar que el botón se habilite al final
  });
}

function eliminar(idventa) {
  const swalWithBootstrapButtons = Swal.mixin({
    customClass: {
      confirmButton: "btn btn-success mx-2",
      cancelButton: "btn btn-danger mx-2"
    },
    buttonsStyling: false
  });

  swalWithBootstrapButtons.fire({
    title: "¿Estás seguro?",
    text: "¡No podrás revertir esto!",
    icon: "warning",
    showCancelButton: true,
    confirmButtonText: "Sí, eliminar",
    cancelButtonText: "No, cancelar",
    reverseButtons: true
  }).then((result) => {
    if (result.isConfirmed) {
      // Realizar la eliminación vía AJAX
      $.post("../../ajax/venta.php?op=eliminar", { idventa: idventa }, function (e) {
        swalWithBootstrapButtons.fire({
          title: "Eliminado",
          text: "La venta ha sido eliminada exitosamente.",
          icon: "success"
        });

        // Recargar la tabla después de eliminar
        //tablaventa.ajax.reload();
        window.location.href = "list.php";
      });
    } else if (result.dismiss === Swal.DismissReason.cancel) {
      swalWithBootstrapButtons.fire({
        title: "Cancelado",
        text: "La venta está segura :)",
        icon: "error"
      });
    }
  });
}

$(document).ready(function () {
  // Obtener el parámetro idcorte de la URL
  const urlParams = new URLSearchParams(window.location.search);
  const idventa = urlParams.get('idventa');

  if (idventa) {
      // Llamar a la función mostrar del backend
      $.post("../../ajax/venta.php?op=mostrar_venta", { idventa: idventa }, function (data, status) {
        if (status === "success") {
          const response = JSON.parse(data); // Parsear datos recibidos
          console.log(response);
          if (response.ventas && response.ventas.length > 0) {
              const venta = response.ventas[0]; // Primer corte
              let tipoPago = venta.tipo_pago;
              let estadoVenta = venta.estado_venta;
              $("#idventa").val(venta.idventa);
              $("#nroguia").val(venta.nroguia);
              $("strong#nrocorrelativo_texto").text(venta.nrocorrelativo);
              $("#fecha_hora").val(venta.fecha_hora);
              $("#total_envio").val(parseFloat(venta.total_envio).toFixed(2));
              $("#total_servicio").val(parseFloat(venta.total_servicio).toFixed(2));
              $("#tipo_servicio").val(venta.tipo_servicio).trigger('change');
              

              setTimeout(function () {
                  $("#idpersona").val(venta.idpersona).trigger('change');
                  $("#tipo_comprobante").val(venta.codigotipo_comprobante).trigger('change');
                  $("#tipopago").val(venta.tipo_pago).trigger('change');
                  $("#tipoventa").val(venta.tipoventa).trigger('change');
                  $("#idtitular").val(venta.idtitular).trigger('change');
              }, 300);

              if (tipoPago === "1") { // Depósito
                document.getElementById("deposito-fields").style.display = "none";
                document.getElementById("titular-fields").style.display = "none";
              } else if (tipoPago === "2") { // Efectivo
                document.getElementById("deposito-fields").style.display = "block";
                document.getElementById("titular-fields").style.display = "block";
                setTimeout(function () {
                  $("#idbanco").val(venta.idbanco).trigger('change');
                }, 300);
              } else {
                document.getElementById("deposito-fields").style.display = "none";
                document.getElementById("titular-fields").style.display = "none";
              }
              //$("#btnGuardar").hide();
              //  if(estadoVenta == 1){
              //   $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
              //   $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar Venta');
              //  }else{
              //   $("#btnGuardar").hide();
              //  }

               $("#btnGuardar").html('<i class="fas fa-save"></i> Actualizar registro');
               $("#idtitle").html('<i class="fas fa-plus"></i> Actualizar Venta');

              
          } else {
              console.error("No se encontraron datos para la venta.");
          }
            // Procesar los detalles y construir las filas
            let subtotal = 0;
            let stock = 0;
            for (var i = 0; i < response.detalles.length; i++) {
                const detalle = response.detalles[i];
                const tipo_sal = detalle.tipo_salida;
                if(tipo_sal == 1){
                  botonTipoSalida = '<button class="btn btn-success btn-xs btn-flat">V</button>'; // Verde para 1
                  } else {
                  botonTipoSalida = '<button class="btn btn-danger btn-xs btn-flat">M</button>'; // Rojo para cualquier otro valor
                  }
                subtotal = parseFloat(detalle.precio * detalle.cantidad);
                stock = parseFloat(detalle.stock);
                var fila = '<tr class="filas" id="fila' + cont + '">' +
                    '<td><button type="button" class="btn btn-danger btn-flat btn-xs" onclick="eliminarDetalle(' + cont + ')"><i class="fa fa-trash"></i></button></td>' +
                    '<td> <input type="hidden" name="idalmacen_central_venta[]" value="' + detalle.idalmacen_central + '">'  +
                    '<input type="hidden"  name="idproducto_venta[]" value="'+ detalle.idproducto +'" >' + detalle.producto + '</td>' +
                    '<td><input type="text" name="idcolor[]" class="form-control" readonly value="' + detalle.idcolor + '"></td>' +
                    '<td><input type="text" name="comb1[]" class="form-control" readonly value="' + detalle.color1 + '"></td>' +
                    '<td class="text-center align-middle" >'+ detalle.talla + '</td>' +
                    '<td><input type="number" class="form-control" name="cantidad_venta[]" id="cantidad' +cont+'"  value="' + detalle.cantidad + '"  data-stock="'+ stock +'" data-cantidad-inicial="' + detalle.cantidad + '"></td>' +
                    '<td><input type="number" class="form-control" name="precio_ventav[]" id="precio_venta' +cont+'" value="' + detalle.precio + '">'+
                    '<td class="text-center align-middle">' +
                    '<input type="hidden" name="tipo_salida[]" id="tipo_salida' + cont + '" value="' + detalle.tipo_salida + '">' +
                    botonTipoSalida +
                    '</td>'+
                    '<td> <span name="subtotal" id="subtotal' +cont+'" ></span></td>' ;
                   
                fila += '</tr>'; // Cerrar la fila
                $('#detalles tbody').append(fila);
            
                $(`#cantidad${cont}`).on('keyup change', function () {
                  validarStock1(this);
                 // modificarSubtotales();
                  });
        
                $(`#cantidad${cont}, #precio_venta${cont}`).on('keyup change', modificarSubtotales);

                cont++;
                modificarSubtotales();
            }
       
        } else {
          console.error("Error al cargar los datos del corte.");
      }
      });
  }
  function validarStock1(elemento) {
    const stockActual = parseFloat($(elemento).data('stock')); // Stock actual del response
    const cantidadRegistrada = parseFloat($(elemento).val()); // Cantidad actual ingresada en el input
    const cantidadInicial = parseFloat($(elemento).attr('data-cantidad-inicial')) || 0; // Cantidad ya registrada (traída del response)
    
    // Sumar la cantidad inicial registrada al stock actual
    const stockTotal = stockActual + cantidadInicial;

    if (cantidadRegistrada > stockTotal) {
        Swal.fire({
            icon: 'error',
            title: 'Cantidad excedida',
            text: `La cantidad no puede exceder el stock disponible (${stockTotal}).`,
            confirmButtonText: 'Aceptar',
            timer: 3000
        });
        $(elemento).val(stockTotal); // Ajustar al valor máximo permitido
    }
}
});


init();