let tblusuarios, Temp_inventario, tblClientes, tblCaja,tblProductosActualizar, tblCategoria, tblMedidas, tblProductos, tbl_tipos_precios,  t_h_c, thb, t_arqueo, frmsArqueosCaja ,$tblinventario, contadorClics = 0, productos = [], clientes = [],  fechaGlobal = "";

document.addEventListener("DOMContentLoaded", function () {
  
 
    $('#cliente').select2();
    
  
  
  tblusuarios = $("#tblusuarios").DataTable({
    ajax: {
      url: base_url + "usuarios/listar",
      dataSrc: "",
    },
    columns: [
      { data: "usuario" },
      { data: "nombre" },
      { data: "caja" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE COMPRAS',
          className: 'btn btn-danger'
      }
  ]
  });

  // clientes
  tblClientes = $("#tblClientes").DataTable({
    ajax: {
      url: base_url + "Clientes/listar",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "dni" },
      { data: "nombre" },
      { data: "telefono" },
      { data: "direccion" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'Reporte de usuarios',
          className: 'btn btn-danger'
      }
  ]
  
  });

  // Cajas
  tblCaja = $("#tblCaja").DataTable({
    ajax: {
      url: base_url + "Caja/listar",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "caja" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE COMPRAS',
          className: 'btn btn-danger'
      }
  ]
  });

  //categorias
  tblCategoria = $("#tblCategoria").DataTable({
    ajax: {
      url: base_url + "Categoria/listar",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "nombre" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE COMPRAS',
          className: 'btn btn-danger'
      }
  ]
  });

  tbl_tipos_precios = $("#tbl_tipos_precios").DataTable({
    ajax: {
      url: base_url + "Categoria/forma_de_ventas/",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "tipo" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE COMPRAS',
          className: 'btn btn-danger'
      }
  ]
  });




  // MEDIDAS
  tblMedidas = $("#tblMedidas").DataTable({
    ajax: {
      url: base_url + "Medidas/listar",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "nombre" },
      { data: "nombre_corto" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE COMPRAS',
          className: 'btn btn-danger'
      }
  ]
  });
  // PRODUCTOS
  tblProductos = $("#tblProductos").DataTable({
    ajax: {
        url: base_url + "Productos/listar",
        dataSrc: "",
    },
    columns: [
        { data: "id" },
        { data: "codigo" },
        { data: "imagen" },
        { data: "descripcion" },
        {
            data: "precio_venta",
            render: $.fn.dataTable.render.number(",", ".", 2),
        },
        { data: "cantidad" },
        { data: "estado" },
        { data: "acciones" },
        {
            // Nueva columna para la entrada de productos
            data: "input",
            render: function (data, type, row) {
                return row.input; // Renderizar el contenido HTML de la columna 'input'
            },
        },

    ],
    language: {
        url: "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
    },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE PRODUCTOS',
          className: 'btn btn-danger'
      }
  ]
  
  
  
  });
//tabla historial
  t_h_c = $("#t_historial_compra").DataTable({
    ajax: {
      url: base_url + "Compras/listar_historial",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "total" },
      { data: "fecha" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE COMPRAS',
          className: 'btn btn-danger'
      }
  ]
  
  });

thb = $("#t_historial_v").DataTable({
    ajax: {
      url: base_url + "Compras/listar_historial_venta",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "nombre" },
      { data: "total" },
      { data: "fecha" },
      { data: "estado" },
      { data: "acciones" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'HISTORIAL DE VENTAS',
          className: 'btn btn-danger'
      }
  ]
  
  });


  t_arqueo = $("#t_arqueo").DataTable({
    ajax: {
      url: base_url + "Caja/listar_arqueo",
      dataSrc: "",
    },
    columns: [
      { data: "id" },
      { data: "monto_inicial" },
      { data: "monto_final" },
      { data: "fecha_apertura" },
      { data: "fecha_cierre" },
      { data: "total_ventas" },
      { data: "compras_totales" },
      { data: "monto_total" },
      { data: "estado" },
    ], "language": {
      "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
  dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
    "<'row'<'col-sm-12'tr>>" +
    "<'row'<'col-sm-5'i><'col-sm-7'p>>",
    buttons: [
      {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      {
          extend: 'excelHtml5',
          text: '<i class="fas fa-file-excel"></i> Exel',
          title: 'Export_File',
          className: 'btn btn-success'
      },
      {
          extend: 'csvHtml5',
          text: '<i class="fas fa-file-csv"></i> Csv',
          title: '',
          className: 'btn btn-success'
      },
      {
          extend: 'pdfHtml5',
          text: '<i class="fas fa-file-pdf"></i> pdf',
          title: 'REPORTE DE COMPRAS',
          className: 'btn btn-danger'
      }
  ]




  });

     tblinventario = $("#tblinventario").DataTable({
      ajax: {
      url: base_url + "Administracion/traerinventarios",
      dataSrc: "",
      },
     columns: [
      { data: "producto" },
      { data: "cantidad" },
      { data: "categoria" },
      { data: "medida" },
      { data: "estado" },
      ], "language": {
        "url": "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
    },
    dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
      "<'row'<'col-sm-12'tr>>" +
      "<'row'<'col-sm-5'i><'col-sm-7'p>>",
      buttons: [
        {
          extend: 'copyHtml5',
          text: '<i class="fas fa-copy"></i> Copiar',
          title: '',
          className: 'btn btn-info'
      },
      
        {
            extend: 'excelHtml5',
            text: '<i class="fas fa-file-excel"></i> Exel',
            title: 'Export_File',
            className: 'bg-success'
        },
      
        {
            extend: 'pdfHtml5',
            text: '<i class="fas fa-file-pdf"></i> pdf',
            title: 'INVENTARIO EMVIADO',
            className: 'btn btn-danger'
        }
    ]
  

     });
     
// actualizar productos masivamente  

tblProductosActualizar = $("#tblProductosActualizar").DataTable({
  ajax: {
      url: base_url + "Compras/traerProductos",
      dataSrc: "",
  },
  columns: [
      { data: "id" },
      { data: "codigo" },
      { data: "imagen" },
      { data: "descripcion" },
      {
          data: "precio_venta",
          render: $.fn.dataTable.render.number(",", ".", 2),
      },
      { data: "cantidad" },
      { data: "estado" },
      { data: "acciones" },
      {
          // Nueva columna para la entrada de productos
          data: "input",
          render: function (data, type, row) {
              return row.input; // Renderizar el contenido HTML de la columna 'input'
          },
      },
  ],
  language: {
      url: "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
  },
dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
  "<'row'<'col-sm-12'tr>>" +
  "<'row'<'col-sm-5'i><'col-sm-7'p>>",
  buttons: [
    {
        extend: 'copyHtml5',
        text: '<i class="fas fa-copy"></i> Copiar',
        title: '',
        className: 'btn btn-info'
    },
    {
        extend: 'excelHtml5',
        text: '<i class="fas fa-file-excel"></i> Exel',
        title: 'Export_File',
        className: 'btn btn-success'
    },
    {
        extend: 'csvHtml5',
        text: '<i class="fas fa-file-csv"></i> Csv',
        title: '',
        className: 'btn btn-success'
    },
    {
        extend: 'pdfHtml5',
        text: '<i class="fas fa-file-pdf"></i> pdf',
        title: 'REPORTE DE PRODUCTOS',
        className: 'btn btn-danger'
    }
]



});

















































  if (document.getElementById('roles')) {
    lista_roles();
    usuarios_activos(); 
  }



  if (document.getElementById("tblDetalle")) {
    cargarDetalle();
  }
  
  if (document.getElementById("tblDetalleVenta")) {
    cargarDetalleVenta();
  }

  if (document.getElementById('stockMinimo')) {
    reporteStock();
  reporteVendidos();
  }

  
if (document.getElementById('documentos')) {
  
  mostrarDocumentos();
}


if (document.getElementById('estockbajo')) {
  reportesStockagotado();
}

if (document.getElementById('productosVendedor')) {
  productosVendedor()
}
if (document.getElementById('productosSelVendedor')) {
  activarEstado()
}

if (document.getElementById('medios_pagos_lista')) {
  listar_medios_pagos()
}

if (document.getElementById('listas_productos')) {
  lista_productos()
  categorias_select()
presentacion_select()
}

if (document.getElementById('listas_presentaciones_guardadas')) {
listas_presentaciones()
lista_categorias()
}
if (document.getElementById("lista_islas")) {
  datos_dispensador()
  datos_resultados()
 
}



if (document.getElementById("hora_actual")) {
  fecha_recibir()
}


if (document.getElementById("precio_diesel")) {
  precios_combustibles() 
}


if (document.getElementById("txt_diesel")) {
  graficos_combustibles();
  resume_dasboard();
  resume_ventas_por_isla();
}

if (document.getElementById("medios_de_pago_cuadre")) {
medios_de_pago_lista()
clientes_lista();
combustible_clientes_lista();
clientes_atendidos()
lista_combustible()
modo_pago()
modopago_gasto()

}

if (document.getElementById("detalles_ventas_lista")) {
lista_historial_ventas()

}

if (document.getElementById("reportes_diarios")) {
reportes_detalles()
clientes_activos()
clientes_deudores()
gastos_sencillos()
lista_de_compras()
recibir_gastos_detallados()
}

if (document.getElementById("mostrar_activos")) {
verificar_montos()
verificar_ventas_del_dia()
gastos_del_dia() 
 gastos_compras_combustible()
}

});
// INICION DE FUNCIONES


function datos_dispensador() {
  const url = base_url + "Administracion/consultar_dispensadores/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      const res = JSON.parse(this.responseText);
      console.log(res); // 👈 SIEMPRE para debug

      const agrupado = {};

      res.forEach(item => {
        const isla = item.isla;
        const lado = item.lado;

        if (!agrupado[isla]) {
          agrupado[isla] = { A: [], B: [], estado: 0 };
        }

        agrupado[isla][lado].push(item);

        if (item.estado == 1) {
          agrupado[isla].estado = 1;
        }
      });

      let islas_html = '';

      Object.keys(agrupado).forEach(isla => {
        const ladoA = agrupado[isla].A;
        const ladoB = agrupado[isla].B;
        const mostrarCerrar = agrupado[isla].estado == 1;
        const abierto = agrupado[isla].estado == 0;

        islas_html += `
        <div class="col-md-4">
          <div class="card h-100 shadow-sm">
            <div class="card-body d-flex flex-column">
              <h5 class="text-center fw-bold mb-3">Isla ${isla}</h5>

              <div class="row text-center mb-3">
                <div class="col-6 fw-semibold">Lado A</div>
                <div class="col-6 fw-semibold">Lado B</div>
              </div>
        `;

        const max = Math.max(ladoA.length, ladoB.length);

        for (let i = 0; i < max; i++) {
          islas_html += `
          <div class="row g-2 mb-2">
            <div class="col-6 text-center fw-semibold">
              ${ladoA[i] ? ladoA[i].orden + ' - ' + ladoA[i].combustible : ''}
            </div>
            <div class="col-6 text-center fw-semibold">
              ${ladoB[i] ? ladoB[i].orden + ' - ' + ladoB[i].combustible : ''}
            </div>

            <div class="col-6">
              ${ladoA[i] ? `
              <input class="form-control"
              data-lado="A"
              data-isla="${isla}"
              data-id="${ladoA[i].id}"
              value="${mostrarCerrar ? '' : ladoA[i].numeracion}">
              ` : ''}
            </div>

            <div class="col-6">
              ${ladoB[i] ? `
              <input class="form-control"
              data-lado="B"
              data-isla="${isla}"
              data-id="${ladoB[i].id}"
              value="${mostrarCerrar ? '' : ladoB[i].numeracion}">
              ` : ''}
            </div>
          </div>
          `;
        }

        // 👉 USAMOS EL PRIMER ID DE CADA LADO (SIMPLE Y REAL)
        const idA = ladoA[0]?.id ?? 0;
        const idB = ladoB[0]?.id ?? 0;

        islas_html += `
              <div class="mt-auto pt-3">
                <div class="d-grid gap-2">
                 ${abierto ? ` <button class="btn btn-success w-100"
                    onclick="iniciar_dispensadores(${isla}, ${idA}, ${idB})">
                    Entrada
                  </button>
                   ` : ''}
                 
                  ${mostrarCerrar ? `
                    <button class="btn btn-danger w-100 mt-2" onclick="cerrar_dispensadores(${isla}, ${idA}, ${idB})">
                      Salida
                    </button>
                  ` : ''}

                   ${abierto ? `
                    <button class="btn btn-warning w-100 mt-2"
                    onclick="modificar_dispensador(${isla}, ${idA}, ${idB})">
                    Modificar
                  </button>
                  ` : ''}


              

                  
                </div>
              </div>

            </div>
          </div>
        </div>
        `;
      });

      document.getElementById("lista_islas").innerHTML = islas_html;
    }
  };

  http.open("GET", url, true);
  http.send();
}


function iniciar_dispensadores(isla) {
  const turno = document.getElementById("turno_lista").value;
  if (turno == 0) {
    Swal.fire({
        icon: "warning",
        title: "SELECCION EL TURNO",
        text: "Primero seleccion el turno",
      });
      throw new Error("Campo vacío");
    }
  
  // 🔹 Tomamos TODOS los inputs de esa isla
  const inputs = document.querySelectorAll(
    `input[data-isla="${isla}"]`
  );

  const ladoA = [];
  const ladoB = [];

  inputs.forEach(input => {
    const valor = input.value.trim();
    const id = input.dataset.id;
    const lado = input.dataset.lado;

    if (valor === "") {
      Swal.fire({
        icon: "error",
        title: "Campos incompletos",
        text: "Hay dispensadores sin numeración",
      });
      throw new Error("Campo vacío");
    }

    if (lado === "A") {
      ladoA.push({ id, numeracion: valor });
    } else if (lado === "B") {
      ladoB.push({ id, numeracion: valor });
    }
  });

  console.log("LADO A:", ladoA);
  console.log("LADO B:", ladoB);  
  console.log("turno", turno);

  // 🔹 Envío al backend
  const url = base_url + "Administracion/iniciar_dispensador/" + isla;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  const formData = new FormData();
  formData.append("ladoA", JSON.stringify(ladoA));
  formData.append("ladoB", JSON.stringify(ladoB));
  formData.append("turno", turno);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);

      if (res === "ok") {
        datos_dispensador()
        Swal.fire("Correcto", "Dispensadores iniciados", "success");
      }else if (res === "cerrar") {
        Swal.fire({
          icon: "warning",
          title: "CERRAR LA CAJA",
          text: "Le falta cerrar la caja",
          confirmButtonText: "Ir a cerrar caja"
        }).then((result) => {

          if (result.isConfirmed) {
            window.location.href = base_url + "Administracion/movimientos/";
          }

        });
      }else{
        Swal.fire({
        icon: "warning",
        title: "NO SE PUDO EJECUTAR",
        text: res,
      });
      }
    }
  };
}



function cerrar_dispensadores(isla) {
  const turno = document.getElementById("turno_lista").value;
  if (turno == 0) {
    Swal.fire({
        icon: "warning",
        title: "SELECCION EL TURNO",
        text: "Primero seleccion el turno",
      });
      throw new Error("Campo vacío");
    }
  
  // 🔹 Tomamos TODOS los inputs de esa isla
  const inputs = document.querySelectorAll(
    `input[data-isla="${isla}"]`
  );

  const ladoA = [];
  const ladoB = [];

  inputs.forEach(input => {
    const valor = input.value.trim();
    const id = input.dataset.id;
    const lado = input.dataset.lado;

    if (valor === "") {
      Swal.fire({
        icon: "error",
        title: "Campos incompletos",
        text: "Hay dispensadores sin numeración",
      });
      throw new Error("Campo vacío");
    }

    if (lado === "A") {
      ladoA.push({ id, numeracion: valor });
    } else if (lado === "B") {
      ladoB.push({ id, numeracion: valor });
    }
  });

  console.log("LADO A:", ladoA);
  console.log("LADO B:", ladoB);  
  console.log("turno", turno);

  // 🔹 Envío al backend
  const url = base_url + "Administracion/cerrar_dispensador/" + isla;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  const formData = new FormData();
  formData.append("ladoA", JSON.stringify(ladoA));
  formData.append("ladoB", JSON.stringify(ladoB));
  formData.append("turno", turno);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);

      if (res === "ok") {
        datos_dispensador()
        Swal.fire("Correcto", "Dispensadores iniciados", "success");
      }else{
        Swal.fire({
        icon: "warning",
        title: "NO SE PUDO EJECUTAR",
        text: res,
      });
      }
    }
  };
}




function datos_resultados(isla) {

  const url = base_url + "Administracion/lista_de_resultados/" + isla;
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {

    if (this.readyState === 4 && this.status === 200) {

      const res = JSON.parse(this.responseText);
      console.log(res);

      const agrupado = {};

      // 🔹 Agrupar: Isla → Turno → Lado
      res.forEach(item => {

        if (!agrupado[item.isla]) {
          agrupado[item.isla] = {};
        }

        if (!agrupado[item.isla][item.turno]) {
          agrupado[item.isla][item.turno] = { A: [], B: [] };
        }

        agrupado[item.isla][item.turno][item.lado].push(item);

      });

      let html = '';

      // 🔹 Recorrer Isla
      Object.keys(agrupado).forEach(isla => {

        // 🔹 Recorrer Turnos
        Object.keys(agrupado[isla]).forEach(turno => {

          const ladoA = agrupado[isla][turno].A;
          const ladoB = agrupado[isla][turno].B;

          html += `
          <div class="col-md-12 mb-4">
            <div class="card shadow-sm">
              <div class="card-body">

                <h5 class="text-center mb-3">
                  <span class="badge bg-success fs-6">
                    ISLA ${isla} - TURNO ${turno}
                  </span>
                </h5>

                <div class="table-responsive">
                  <table class="table table-bordered text-center align-middle">
          `;

          // ================= LADO A =================
          html += `
            <thead class="table-info">
              <tr>
                <th colspan="6">LADO A</th>
              </tr>
              <tr>
                <th>COMBUSTIBLE</th>
                <th>ENTRADA</th>
                <th>SALIDA</th>
                <th>GALONES</th>
                <th>P.U</th>
                <th>SOLES</th>
              </tr>
            </thead>
            <tbody>
          `;

          ladoA.forEach(d => {
            html += `
              <tr>
                <td>${d.combustible}</td>
                <td>${d.numeracion_inicio}</td>
                <td>${d.numeracion_salida}</td>
                <td>${d.galones}</td>
                <td>${d.pu}</td>
                <td>${d.total}</td>
              </tr>
            `;
          });

          html += `</tbody>`;

          // ================= LADO B =================
          html += `
            <thead class="table-warning">
              <tr>
                <th colspan="6">LADO B</th>
              </tr>
              <tr>
                <th>COMBUSTIBLE</th>
                <th>ENTRADA</th>
                <th>SALIDA</th>
                <th>GALONES</th>
                <th>P.U</th>
                <th>SOLES</th>
              </tr>
            </thead>
            <tbody>
          `;

          ladoB.forEach(d => {
            html += `
              <tr>
                <td>${d.combustible}</td>
                <td>${d.numeracion_inicio}</td>
                <td>${d.numeracion_salida}</td>
                <td>${d.galones}</td>
                <td>${d.pu}</td>
                <td>${d.total}</td>
              </tr>
            `;
          });

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

        });

      });

      document.getElementById("tabla_resultados").innerHTML = html;

    }

  };

  http.open("GET", url, true);
  http.send();

}


function corregi_diesel(id) {
  const precio_diesel = document.getElementById("precio_diesel").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/cambiar_diesel_precio/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_diesel", precio_diesel);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}
function corregi_regular(id) {
  const precio_regular = document.getElementById("precio_regular").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/cambiar_diesel_regular/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_regular", precio_regular);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}
function corregi_primiun(id) {
  const precio_primiun = document.getElementById("precio_primiun").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/cambiar_diesel_primiun/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_primiun", precio_primiun);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}
function corregi_glp(id) {
  const precio_glp = document.getElementById("precio_glp").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/cambiar_diesel_glp/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_glp", precio_glp);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}



function precios_combustibles() {
  const url = base_url + "Administracion/combustibles_detalles/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);

      res.forEach(item => {
        switch (item.nombre) {
          case "DIESEL":
            document.getElementById("precio_diesel").value = item.precio;
            document.getElementById("stock_diesel").value = item.galones;
            break;

          case "REGULAR":
            document.getElementById("precio_regular").value = item.precio;
            document.getElementById("stock_regular").value = item.galones;
            break;

          case "PRIMIUN":
            document.getElementById("precio_primiun").value = item.precio;
            document.getElementById("stock_primium").value = item.galones;
            break;

          case "GLP":
            document.getElementById("precio_glp").value = item.precio;
            document.getElementById("stock_glp").value = item.galones;
            break;
        }
      });
    }
  };

  http.open("GET", url, true);
  http.send();
}


function cambiar_estock_diesel(id) {
  console.log(id);
  
  const precio_glp = document.getElementById("stock_diesel").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/enviar_nuevo_stock/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_glp", precio_glp);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}




function cambiar_estock_regular(id) {
  const precio_glp = document.getElementById("stock_regular").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/enviar_nuevo_stock/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_glp", precio_glp);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}


function cambiar_estock_primiun(id) {
  const precio_glp = document.getElementById("stock_primium").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/enviar_nuevo_stock/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_glp", precio_glp);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}










function cambiar_estock_glp(id) {
  const precio_glp = document.getElementById("stock_glp").value.trim();
  if (precio_diesel === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/enviar_nuevo_stock/" + id;
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("precio_glp", precio_glp);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res === "ok") {
        Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          "se actualizo",
          "success"
        );
       precios_combustibles()
      }else{
         Swal.fire(
          "COMBUSTIBLE ACTUALIZADO",
          res,
          "warning"
        );
      } 
    }
  
}
}




function actualizarTanque(id, porcentaje) {

  const tanque = document.getElementById(id);

  tanque.style.height = porcentaje + "%";

  tanque.classList.remove("alerta");

  // Colores según nivel
  if (porcentaje >= 70) {
    tanque.style.background = "#28a745"; // Verde
  } 
  else if (porcentaje >= 30) {
    tanque.style.background = "#ffc107"; // Amarillo
  } 
  else {
    tanque.style.background = "#dc3545"; // Rojo
    tanque.classList.add("alerta"); // Parpadea si es crítico
  }

}

function graficos_combustibles() {

  const url = base_url + "Administracion/datos_graficos/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {

    if (this.readyState == 4 && this.status == 200) {

      const res = JSON.parse(this.responseText);

      res.forEach(function(item) {

        let nombre = item.nombre.toUpperCase();
        let porcentaje = parseFloat(item.porcentaje);
        let stock = parseFloat(item.stock).toLocaleString();

        if (nombre === "DIESEL") {
          actualizarTanque("nivel_diesel", porcentaje);
          document.getElementById("txt_diesel").innerHTML =
            porcentaje + "%<br><small>" + stock + " gal</small>";
        }

        if (nombre === "REGULAR") {
          actualizarTanque("nivel_regular", porcentaje);
          document.getElementById("txt_regular").innerHTML =
            porcentaje + "%<br><small>" + stock + " gal</small>";
        }

        if (nombre === "PRIMIUN") {
          actualizarTanque("nivel_premium", porcentaje);
          document.getElementById("txt_premium").innerHTML =
            porcentaje + "%<br><small>" + stock + " gal</small>";
        }

        if (nombre === "GLP") {
          actualizarTanque("nivel_glp", porcentaje);
          document.getElementById("txt_glp").innerHTML =
            porcentaje + "%<br><small>" + stock + " gal</small>";
        }

      });

    }
  };

  http.open("GET", url, true);
  http.send();
}



function resume_dasboard() {
  const url = base_url + "Administracion/resultadas_A_isla_1/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      document.getElementById("isla_1_diesel").textContent = res[0].isla_1_diesel;
      document.getElementById("isla1_regular").textContent = res[0].isla_1_regular;
      document.getElementById("isla2_diesel").textContent = res[0].isla_2_diesel;
      document.getElementById("isla2_regular").textContent = res[0].isla_2_regular;
      document.getElementById("isla2_primiun").textContent = res[0].total_primiun;
      document.getElementById("isla3_glp").textContent = res[0].isla_3_glp;
    }
  };

  http.open("GET", url, true);
  http.send();
}


function resume_ventas_por_isla() {
  const url = base_url + "Administracion/ventas_por_isla/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      document.getElementById("ventas_1").textContent = res[0].isla_1;
      document.getElementById("ventas_2").textContent = res[0].isla_2;
      document.getElementById("ventas_3").textContent = res[0].isla_3;
      document.getElementById("total_ventas").textContent = res[0].total_ventas;
      document.getElementById("total_diesel").textContent = res[0].diesel;
      document.getElementById("total_regular").textContent = res[0].regular;
      document.getElementById("total_primium").textContent = res[0].primium;
      document.getElementById("total_glp").textContent = res[0].glp;
    }
  };

  http.open("GET", url, true);
  http.send();
}



function medios_de_pago_lista() {

    const url = base_url + "Administracion/mostrar_medios_lista/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let tipo_pago = '';

            if (res.length > 0) {

                tipo_pago += `<div class="row">`;

                res.forEach((d) => {

                    tipo_pago += `
                        <div class="col-md-3 mb-3">
                            <div class="form-group">
                                <label>${d.nombre}</label>
                                <input 
                                    type="number" 
                                    class="form-control medio_pago" 
                                    data-id="${d.id}" 
                                    placeholder="monto en ${d.nombre}"
                                    value=""
                                >
                            </div>
                        </div>
                    `;

                });

                tipo_pago += `</div>`;

            }

            document.getElementById("medios_de_pago_cuadre").innerHTML = tipo_pago;

        }

    };

    http.open("GET", url, true);
    http.send();

}


function recopilar_datos() {

  const url = base_url + "Administracion/datos_dinero/";
  const medios = document.querySelectorAll(".medio_pago");

  let hayVacios = false;

  medios.forEach((input) => {
    if (input.value === "" || input.value === null) {
      hayVacios = true;
    }
  });

  // 🔴 SI HAY CAMPOS VACIOS
  if (hayVacios) {

    Swal.fire({
      title: "Hay campos vacíos",
      text: "Hay campos vacíos, ¿estas seguro que deseas cerrar? Te podría descuadrar.",
      icon: "warning",
      showCancelButton: true,
      confirmButtonText: "Sí continuar",
      cancelButtonText: "Cancelar",
      confirmButtonColor: "#d33",
      cancelButtonColor: "#6c757d"
    }).then((result) => {

      if (result.isConfirmed) {
        enviar_datos();
      }

    });

  } 
  // 🟢 SI TODOS TIENEN DATOS
  else {

    Swal.fire({
      title: "¿Estas seguro de cerrar?",
      icon: "question",
      showCancelButton: true,
      confirmButtonText: "Sí cerrar",
      cancelButtonText: "Cancelar",
      confirmButtonColor: "#28a745",
      cancelButtonColor: "#6c757d"
    }).then((result) => {

      if (result.isConfirmed) {
        enviar_datos();
      }

    });

  }

}


function enviar_datos(){

  const url = base_url + "Administracion/datos_dinero/";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  const formData = new FormData();
  const medios = document.querySelectorAll(".medio_pago");

  medios.forEach((input) => {

    const id = input.dataset.id;
    const valor = input.value;

    formData.append("medio_pago[" + id + "]", valor);

  });

  http.send(formData);

  http.onreadystatechange = function () {

    if (this.readyState === 4 && this.status === 200) {

      const res = JSON.parse(this.responseText);
      console.log(res);

      if (res === "ok") {

         Swal.fire({
  title: "REALIZAR ARQUEO",
  text: "DALE CLICK EN EL BOTON DE IMPRIMIR",
  icon: "success",
  confirmButtonText: "🖨️ Imprimir",
  confirmButtonColor: "#28a745"
}).then((result) => {

  if (result.isConfirmed) {

    window.open(base_url + "Administracion/imprimir_pdf/", "_blank");

  }

});

        precios_combustibles();

      } else if (res == "cerrar") {
        Swal.fire({
        icon: "warning",
        title: "NO HAY NADA QUE CERRAR",
        text: "Tiene que iniciar dispensadores del turno",
        confirmButtonText: "⛽ Ir a dispensadores",
        confirmButtonColor: "rgb(204, 221, 51)"
      }).then((result) => {
        if (result.isConfirmed) {
          window.location.href = base_url + "Administracion/dispensadores/";
        }
      });
      }else{

        Swal.fire(
          "ALGO PASO NO SE PUDO CERRAR",
          res,
          "warning"
        );

      }

    }

  }

}


function lista_historial_ventas() {

    const url = base_url + "Administracion/historial_ventas/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let historial = '';

            if (res.length > 0) {

                res.forEach((d) => {

                    let turno = '';

                    if (d.turno == 1) {
                        turno = 'Mañana';
                    } else if (d.turno == 2) {
                        turno = 'Tarde';
                    }

                    historial += `
                        <tr>
                            <td>${d.id}</td>
                            <td>${d.nombre}</td>
                            <td>${turno}</td>
                            <td>${d.total_cierre}</td>
                            <td>${d.total_ventas}</td>
                            <td>${d.fecha}</td>
                            <td>
                                <button class="btn btn-danger btn-sm" onclick="ver_pdf(${d.id})">
                                    📄 PDF
                                </button>
                            </td>
                        </tr>
                    `;

                });

            } else {

                historial = `
                    <tr>
                        <td colspan="7" class="text-center">No hay registros</td>
                    </tr>
                `;

            }

            document.getElementById("detalles_ventas_lista").innerHTML = historial;

            // 🔥 destruir tabla si ya existe
            if ($.fn.DataTable.isDataTable('#tabla_historial')) {
                $('#tabla_historial').DataTable().destroy();
            }

            // 🔥 crear DataTable
            $('#tabla_historial').DataTable({
                pageLength: 10,
                order: [[0, "desc"]],
                language: {
                    url: "//cdn.datatables.net/plug-ins/1.13.7/i18n/es-ES.json"
                }
            });

        }

    };

    http.open("GET", url, true);
    http.send();

}

function ver_pdf(id){
    window.open(base_url + "Administracion/pdf_historial/" + id, "_blank");
}





function imprimir() {

  const ruta = base_url + "Administracion/imprimir_pdf/";

  const nuevaVentana = window.open(ruta, '_blank');

  setTimeout(function () {

    if (nuevaVentana) {
      nuevaVentana.print();
    } else {
      alert("El navegador bloqueó la ventana emergente.");
    }

  }, 1000);

}









function clientes_lista() {

    const url = base_url + "Administracion/cargar_clientes/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            clientes = JSON.parse(this.responseText);

        }

    };

    http.open("GET", url, true);
    http.send();

}


document.getElementById("clientes_disponibles").addEventListener("keyup", function(){

    const texto = this.value.toLowerCase();
    let html = "";

    if(texto.length === 0){
        document.getElementById("lista_clientes").innerHTML = "";
        return;
    }

    const filtrados = clientes.filter(c =>
        c.nombre.toLowerCase().includes(texto) ||
        c.ruc.includes(texto)
    ).slice(0,6); // LIMITE 6

    filtrados.forEach(c => {

        html += `
        <a href="#" class="list-group-item list-group-item-action cliente_item"
        data-id="${c.id}"
        data-nombre="${c.nombre}"
        data-ruc="${c.ruc}">
        
        <strong>${c.nombre}</strong><br>
        <small>${c.ruc}</small>

        </a>
        `;

    });

    document.getElementById("lista_clientes").innerHTML = html;

});


document.addEventListener("click", function(e){

    if(e.target.closest(".cliente_item")){

        const item = e.target.closest(".cliente_item");

        const id = item.dataset.id;          // ⭐ AQUI OBTIENES EL ID
        const nombre = item.dataset.nombre;
        const ruc = item.dataset.ruc;

        document.getElementById("clientes_disponibles").value = nombre + " - " + ruc;

        // ⭐ AQUI CARGAS EL ID AL INPUT HIDDEN
        document.getElementById("cargar_id_clientes").value = id;

        document.getElementById("lista_clientes").innerHTML = "";

    }

});
























function combustible_clientes_lista() {

    const url = base_url + "Administracion/combustible_select/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let html = `<option value="">Seleccione combustible</option>`;

            res.forEach((c) => {

                html += `
                <option value="${c.id}" data-precio="${c.precio}">
                    ${c.nombre} - S/ ${c.precio}
                </option>
                `;

            });

            document.getElementById("tipo_combustible_cliente_").innerHTML = html;

        }

    };

    http.open("GET", url, true);
    http.send();

}


document.addEventListener("DOMContentLoaded", function () {

    console.log("🔥 DOM listo");

    // =========================
    // CARGAR COMBUSTIBLES
    // =========================
    function combustible_clientes_lista() {

        const url = base_url + "Administracion/combustible_select/";
        const http = new XMLHttpRequest();

        http.onreadystatechange = function () {

            if (this.readyState === 4 && this.status === 200) {

                const res = JSON.parse(this.responseText);
                let html = `<option value="">Seleccione combustible</option>`;

                res.forEach((c) => {
                    html += `
                        <option value="${c.id}" data-precio="${c.precio}">
                            ${c.nombre} - S/ ${c.precio}
                        </option>
                    `;
                });

                document.getElementById("tipo_combustible_cliente_").innerHTML = html;
            }
        };

        http.open("GET", url, true);
        http.send();
    }

    combustible_clientes_lista();

    // =========================
    // ELEMENTOS
    // =========================
    const galonesInput = document.getElementById("cantidad_galones_cliente_");
    const selectCombustible = document.getElementById("tipo_combustible_cliente_");
    const descuentoInput = document.getElementById("descuento_cliente_");
    const subtotalInput = document.getElementById("subtotal_cliente_");
    const totalInput = document.getElementById("total_cliente_");


    if (!galonesInput || !selectCombustible || !descuentoInput || !subtotalInput || !totalInput) {
        console.log("❌ ERROR: Faltan elementos en el DOM");
        return;
    }

    // =========================
    // EVENTOS
    // =========================
    galonesInput.addEventListener("keyup", calcular_total);
    selectCombustible.addEventListener("change", calcular_total);
    descuentoInput.addEventListener("keyup", calcular_total);

    // =========================
    // CALCULO
    // =========================
    function calcular_total() {

        console.log("⚡ CALCULANDO...");

        if (selectCombustible.selectedIndex === 0) {
            subtotalInput.value = "";
            totalInput.value = "";
            return;
        }

        const precio = Number(selectCombustible.options[selectCombustible.selectedIndex].dataset.precio) || 0;
        const galones = Number(galonesInput.value) || 0;
        const descuento_por_galon = Number(descuentoInput.value) || 0;

        // VALIDACIONES
        if (galones < 0 || descuento_por_galon < 0) {
            console.log("❌ No se permiten negativos");
            return;
        }

        const subtotal = precio * galones;
        const descuento = descuento_por_galon * galones;
        const total = subtotal - descuento;
        const descuento_total = descuento;
document.getElementById("monto_descontado").value = "S/ " + descuento.toFixed(2);
        console.log("precio:", precio);
        console.log("galones:", galones);
        console.log("subtotal:", subtotal);
        console.log("descuento:", descuento);
        console.log("total:", total);
        console.log("descuento_total", descuento_total);

        subtotalInput.value = "S/ " + subtotal.toFixed(2);
        totalInput.value = "S/ " + total.toFixed(2);
    }









    // =========================
    // BOTON CREDITO / CASH
    // =========================
    const boton = document.getElementById("interruptor_estado");
    const hidden = document.getElementById("estado_valor");

    if (boton && hidden) {

        boton.addEventListener("click", function () {

            if (hidden.value == "0") {

                hidden.value = "1";
                boton.classList.remove("btn-success");
                boton.classList.add("btn-danger");
                boton.innerHTML = `<i class="fas fa-file-invoice-dollar"></i> Crédito`;
                document.getElementById("fecha_de_pago").classList.remove("d-none");

            } else {

                hidden.value = "0";
                boton.classList.remove("btn-danger");
                boton.classList.add("btn-success");
                boton.innerHTML = `<i class="fas fa-cash-register"></i> Cash`;
                document.getElementById("fecha_de_pago").classList.add("d-none");

            }

        });
    }

});












function vender_cliente() {
  const cliente = document.getElementById("clientes_disponibles").value;
  const cliente_id = document.getElementById("cargar_id_clientes").value;
  const combustible = document.getElementById("tipo_combustible_cliente_").value;
  const galones = document.getElementById("cantidad_galones_cliente_").value;
  const descuento = document.getElementById("descuento_cliente_").value;
  
  // 🔹 Tomar valores puros de los inputs ocultos
  const subtotal = document.getElementById("subtotal_cliente_hidden").value;
  const total = document.getElementById("total_cliente_hidden").value;

  const estado_pago = document.getElementById("estado_valor").value;
  const cobranza = document.getElementById("cobranza").value;

  // 🔎 VALIDACIONES
  if(cliente === "" || galones === "" || combustible === ""){
    Swal.fire(
      "Campos vacíos",
      "Seleccione cliente, combustible y galones",
      "warning"
    );
    return;
  }

  if (estado_pago == 1 && (cobranza === "" || cobranza === "0")) {
    Swal.fire(
      "Seleccione fecha de pago",
      "Debe ingresar una fecha de cobranza para ventas a crédito",
      "warning"
    );
    return;
  }

  const url = base_url + "Administracion/guardar_cliente_venta/";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  const formData = new FormData();
  formData.append("cliente", cliente);
  formData.append("cliente_id", cliente_id);
  formData.append("combustible", combustible);
  formData.append("galones", galones);
  formData.append("descuento", descuento);
  formData.append("subtotal", subtotal); // ✅ puro
  formData.append("total", total);       // ✅ puro
  formData.append("cobranza", cobranza);
  formData.append("estado_pago", estado_pago);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);

      if (res === "ok") {
        Swal.fire(
          "Cliente Venta",
          "Se registró correctamente",
          "success"
        ).then((result) => {
          if (result.isConfirmed) {
            precios_combustibles();
            limpiar_formulario_cliente();
            clientes_atendidos();
          }
        });
      } else {
        Swal.fire("Algo pasó", res, "warning");
      }
    }
  }
}


function limpiar_formulario_cliente(){

  document.getElementById("clientes_disponibles").value = "";
  document.getElementById("cargar_id_clientes").value = "";

  document.getElementById("tipo_combustible_cliente_").selectedIndex = 0;

  document.getElementById("cantidad_galones_cliente_").value = "";
  document.getElementById("descuento_cliente_").value = "";

  document.getElementById("subtotal_cliente_").value = "";
  document.getElementById("total_cliente_").value = "";

  document.getElementById("cobranza").value = "0";
  document.getElementById("fecha_de_pago").classList.add("d-none")

  // 🔁 Reiniciar botón Cash / Crédito
  const boton = document.getElementById("interruptor_estado");

  boton.classList.remove("btn-danger");
  boton.classList.add("btn-success");

  boton.innerHTML = `<i class="fas fa-cash-register"></i> Cash`;

  document.getElementById("estado_valor").value = "0";

}


function clientes_atendidos() {

    const url = base_url + "Administracion/cantidad_lista/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let html = "";

            // ⭐ verificar si hay registros
            if(res.total > 0){

                html = `
               <button class="btn btn-primary btn-sm position-absolute btn-lista-ventas" style="right:10px; top:8px;" onclick="modal_lista_clientes()">
                <i class="fas fa-list"></i>
                <span class="badge badge-danger position-absolute" style="top:-5px; right:-5px; font-size:10px;">
                ${res.total}
                </span>
            </button>
                `;

            }

            document.getElementById("cantidad_lista_registrado").innerHTML = html;

        }

    };

    http.open("GET", url, true);
    http.send();

}


function modal_lista_clientes() {
    $('#modalListaVentas').modal('show');
    lista_clientes_venta()
}

function lista_clientes_venta() {

    const url = base_url + "Administracion/consultas_clientes_registrados/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let html = "";

            if(res.length > 0){

                res.forEach(function(item){

                    let tipo = "";

                    if(item.modalida == 1){
                        tipo = `<span class="badge badge-danger">A crédito: ${item.cobranza}</span>`;
                    }else{
                        tipo = `<span class="badge badge-success">Contado</span>`;
                    }

                    html += `
                    <tr>
                        <td>${item.nombre}</td>
                        <td>${item.combustible}</td>
                        <td>${item.galones}</td>
                        <td>${item.descuento}</td>
                        <td>${item.total}</td>
                        <td>${tipo}</td>
                    </tr>
                    `;

                });

            }

            document.getElementById("listaVentasBody").innerHTML = html;

        }

    };

    http.open("GET", url, true);
    http.send();

}

function gastos_lista() {

    const url = base_url + "Administracion/lista_de_gastos/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let html = "";

            // ⭐ verificar si hay registros
            if(res){

                html = `
               <option></option>
                `;

            }

            document.getElementById("cantidad_lista_registrado").innerHTML = html;

        }

    };

    http.open("GET", url, true);
    http.send();

}






function reportes_detalles() {

    const url = base_url + "Administracion/lista_reportes/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let reporte = '';

            if (res.length > 0) {

                // AGRUPAR POR FECHA
                let fechas = {};

                res.forEach(d => {
                    if (!fechas[d.fecha]) {
                        fechas[d.fecha] = {};
                    }
                    fechas[d.fecha][d.turno] = d;
                });

                reporte += `<ul class="lista-agenda">`;

                Object.keys(fechas).forEach(fecha => {

                    let manana = fechas[fecha][1];
                    let tarde = fechas[fecha][2];

                    function estado(cierre, ventas) {

                        cierre = parseFloat(cierre);
                        ventas = parseFloat(ventas);

                        if (cierre < ventas) {

                            let falta = (ventas - cierre).toFixed(2);

                            return `<span class="badge badge-danger">
                                    Faltante S/ ${falta}
                                    </span>`;

                        } else if (cierre == ventas) {

                            return `<span class="badge badge-success">
                                    Cuadrado
                                    </span>`;

                        } else {

                            let sobra = (cierre - ventas).toFixed(2);

                            return `<span class="badge badge-warning">
                                    Sobrante S/ ${sobra}
                                    </span>`;
                        }
                    }

                 reporte += `
<li>

<div class="mb-2">
<span class="titulo-campo">Fecha:</span> ${fecha}
</div>

<div class="row">

<!-- TURNO MAÑANA -->
<div class="col-md-4">

${manana ? `
<div><span class="titulo-campo">Turno:</span> Mañana</div>

<div><span class="titulo-campo">Ventas:</span> S/ ${manana.total_ventas}</div>

<div><span class="titulo-campo">Cierre:</span> S/ ${manana.total_cierre}</div>

<div><span class="titulo-campo">Estado:</span> 
${estado(manana.total_cierre, manana.total_ventas)}
</div>

<button class="btn btn-danger btn-sm mt-2" onclick="ver_pdf(${manana.id})">
<i class="fas fa-file-pdf"></i>
</button>
` : '<small class="text-muted">Sin turno mañana</small>'}

</div>

<!-- TURNO TARDE -->
<div class="col-md-4">

${tarde ? `
<div><span class="titulo-campo">Turno:</span> Tarde</div>

<div><span class="titulo-campo">Ventas:</span> S/ ${tarde.total_ventas}</div>

<div><span class="titulo-campo">Cierre:</span> S/ ${tarde.total_cierre}</div>

<div><span class="titulo-campo">Estado:</span> 
${estado(tarde.total_cierre, tarde.total_ventas)}
</div>

<button class="btn btn-danger btn-sm mt-2" onclick="ver_pdf(${tarde.id})">
<i class="fas fa-file-pdf"></i>
</button>
` : '<small class="text-muted">Sin turno tarde</small>'}

</div>

<!-- 🔥 DETALLE FINAL -->
<div class="col-md-4 d-flex align-items-center justify-content-center">

<button class="btn btn-primary btn-sm"
onclick="ver_pdf_final('${fecha}')">
<i class="fas fa-file-pdf"></i> Detalle Final
</button>

</div>

</div>
    
</li>
`;
                });

                reporte += `</ul>`;
            }

            document.getElementById("reportes_diarios").innerHTML = reporte;
        }
    };

    http.open("GET", url, true);
    http.send();
}
function gastos_combustibles() {
  document.getElementById("gastos_combustible").classList.remove("d-none");
  document.getElementById("gastos_comunes").classList.add("d-none");
  document.getElementById("gastos_detallados").classList.add("d-none");

  lista_combustible()
  modo_pago()
}

function gastos_comunes() {
  document.getElementById("gastos_combustible").classList.add("d-none");
  document.getElementById("gastos_comunes").classList.remove("d-none");
  document.getElementById("gastos_detallados").classList.add("d-none");

  modopago_gasto()
}
function gastos_detallar_() {
  document.getElementById("gastos_combustible").classList.add("d-none");
  document.getElementById("gastos_comunes").classList.add("d-none");
  document.getElementById("gastos_detallados").classList.remove("d-none");
tipos_de_gastos()
modo_pago_detallar()
}


function ver_pdf_final(fecha){
    window.open(base_url + "Administracion/pdf_historial_general/" + fecha, "_blank");
}



function lista_combustible() {

    const url = base_url + "Administracion/combustible_select/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let html = `<option value="">Seleccione combustible</option>`;

            res.forEach((c) => {

                html += `
                <option value="${c.id}">
                    ${c.nombre}
                </option>
                `;

            });

            document.getElementById("compras_combustibles").innerHTML = html;

        }

    };

    http.open("GET", url, true);
    http.send();
}



function fecha_recibir() {

    const url = base_url + "Administracion/fecha_hora/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);

            fechaGlobal = res.fecha;

            // mostrar fecha una sola vez
            document.getElementById("fecha_actual").textContent = res.fecha;

            iniciarReloj(res.hora); // 🔥 arrancar reloj

        }

    };

    http.open("GET", url, true);
    http.send();
}
function iniciarReloj(horaInicial) {

    if (!horaInicial) return;

    let partes = horaInicial.split(':');

    let h = parseInt(partes[0]) || 0;
    let m = parseInt(partes[1]) || 0;
    let s = parseInt(partes[2]) || 0;

    setInterval(() => {

        s++;

        if (s >= 60) {
            s = 0;
            m++;
        }

        if (m >= 60) {
            m = 0;
            h++;
        }

        if (h >= 24) {
            h = 0;
        }

        const horaFormateada =
            (h < 10 ? '0' : '') + h + ':' +
            (m < 10 ? '0' : '') + m + ':' +
            (s < 10 ? '0' : '') + s;

        document.getElementById("hora_actual").textContent = horaFormateada;

    }, 1000);
}

function tipos_de_gastos() {

    const url = base_url + "Administracion/detalla_gastos/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let html = `<option value="">Seleccione Gasto</option>`;

            res.forEach((c) => {

                html += `
                <option value="${c.id}">
                    ${c.nombre}
                </option>
                `;

            });

            document.getElementById("lista_de_gastos").innerHTML = html;

        }

    };

    http.open("GET", url, true);
    http.send();
}




function modo_pago() {
  const url = base_url + "Administracion/lista_medios_pagos";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      let html = `<option value="">Seleccione el pago</option>`;

      res.forEach((c) => {
        html += `<option value="${c.id}">${c.nombre}</option>`;
      });

      document.getElementById('modo_pago_').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}


function modopago_gasto() {
  const url = base_url + "Administracion/lista_medios_pagos";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      let html = `<option value="">Seleccione el pago</option>`;

      res.forEach((c) => {
        html += `<option value="${c.id}">${c.nombre}</option>`;
      });

      document.getElementById('gasto_modo_pago').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}

function modo_pago_detallar() {
  const url = base_url + "Administracion/lista_medios_pagos";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      let html = `<option value="">Seleccione el pago</option>`;

      res.forEach((c) => {
        html += `<option value="${c.id}">${c.nombre}</option>`;
      });

      document.getElementById('modo_pago_detallado').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}



function registrar_compras() {

  const combustible   = document.getElementById("compras_combustibles").value.trim();
  const modo_pago     = document.getElementById("modo_pago_").value.trim();
  let precio_compra   = document.getElementById("precio_compra").value.trim();
  let galones         = document.getElementById("galones").value.trim();
  let precio_venta    = document.getElementById("precio_venta").value.trim();
  const detalles      = document.getElementById("detalles_compras_combustibles").value.trim();

  // 🚨 VALIDAR CAMPOS OBLIGATORIOS
  if (combustible === "") {
    Swal.fire("Error", "Selecciona el combustible", "error");
    return;
  }

  if (modo_pago === "") {
    Swal.fire("Error", "Selecciona el modo de pago", "error");
    return;
  }

  // 🔥 RELLENAR CAMPOS NUMÉRICOS VACÍOS CON 0
  precio_compra = precio_compra === "" ? 0 : precio_compra;
  galones       = galones === "" ? 0 : galones;
  precio_venta  = precio_venta === "" ? 0 : precio_venta;

  // 🚨 VALIDAR QUE NO SEAN 0 (si quieres obligar ingreso real)
  if (parseFloat(precio_compra) <= 0) {
    Swal.fire("Error", "Ingresa un precio de compra válido", "error");
    return;
  }

  if (parseFloat(galones) <= 0) {
    Swal.fire("Error", "Ingresa los galones", "error");
    return;
  }

  if (parseFloat(precio_venta) <= 0) {
    Swal.fire("Error", "Ingresa el precio de venta", "error");
    return;
  }

  // 🚀 ENVÍO
  const url = base_url + "Administracion/enviar_compras_combustible/";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  const formData = new FormData();
  formData.append("combustible", combustible);
  formData.append("modo_pago", modo_pago);
  formData.append("precio_compra", precio_compra);
  formData.append("galones", galones);
  formData.append("precio_venta", precio_venta);
  formData.append("detalles", detalles);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);

      if (res === "ok") {
        Swal.fire("REGISTRADO", "Se añadió combustible correctamente", "success");
        precios_combustibles();
        limpiar_formulario();
      } else {
        Swal.fire("ERROR", res, "warning");
      }
    }
  };
}

function limpiar_formulario() {
  document.getElementById("compras_combustibles").value = "";
  document.getElementById("modo_pago_").value = "";
  document.getElementById("precio_compra").value = "";
  document.getElementById("galones").value = "";
  document.getElementById("precio_venta").value = "";
  document.getElementById("detalles_compras_combustibles").value = "";
  document.getElementById("total").value = "";
}

function calcular_total() {
  const precio = document.getElementById("precio_compra").value;
  const galones = document.getElementById("galones").value;

  // 🔥 convertir a número (evita NaN)
  const p = parseFloat(precio) || 0;
  const g = parseFloat(galones) || 0;

  const total = p * g;

  document.getElementById("total").value = total.toFixed(2);
}



function registrar_gastos() {
  const url = base_url + "Administracion/registrar_gastos/";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  const formData = new FormData();

  // 🔥 CAPTURA
  const modo_pago = document.getElementById("gasto_modo_pago").value;
  const monto     = document.getElementById("gasto_monto").value;
  const detalle   = document.getElementById("gasto_detalle").value;

  // ✅ VALIDACIÓN
  if (!modo_pago || !monto) {
    Swal.fire("Error", "Completa los campos obligatorios", "warning");
    return;
  }

  // 📦 ENVÍO
  formData.append("modo_pago", modo_pago);
  formData.append("monto", monto);
  formData.append("detalle", detalle);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);

      if (res === "ok") {
        Swal.fire("REGISTRADO", "Gasto guardado correctamente", "success");

        // 🔄 LIMPIAR
        document.getElementById("gasto_modo_pago").value = "";
        document.getElementById("gasto_monto").value = "";
        document.getElementById("gasto_detalle").value = "";

      } else {
        Swal.fire("ERROR", res, "warning");
      }
    }
  };
}




function registrar_detalles_gastos() {

  const url = base_url + "Administracion/detallar_gastos_registro/";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  const formData = new FormData();

  // 🔥 CAPTURA NUEVA ESTRUCTURA
  const tipo_gasto = document.getElementById("lista_de_gastos").value.trim();
  const modo_pago  = document.getElementById("modo_pago_detallado").value.trim();
  let monto        = document.getElementById("monto_dinero_detallado").value.trim();
  const detalle    = document.getElementById("otros_detalles").value.trim();

  // 🚨 VALIDACIONES
  if (tipo_gasto === "") {
    Swal.fire("Error", "Selecciona el tipo de gasto", "error");
    return;
  }

  if (modo_pago === "") {
    Swal.fire("Error", "Selecciona el modo de pago", "error");
    return;
  }

  // 🔥 RELLENAR SI VIENE VACÍO
  monto = monto === "" ? 0 : monto;

  // 🚨 VALIDAR MONTO REAL
  if (parseFloat(monto) <= 0) {
    Swal.fire("Error", "Ingresa un monto válido", "error");
    return;
  }

  // 📦 ARMAR ENVÍO
  formData.append("tipo_gasto", tipo_gasto);
  formData.append("modo_pago", modo_pago);
  formData.append("monto", monto);
  formData.append("detalle", detalle);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      let res;
      try {
        res = JSON.parse(this.responseText);
      } catch (e) {
        Swal.fire("ERROR", "Respuesta inválida del servidor", "error");
        return;
      }

      if (res === "ok") {
        Swal.fire("REGISTRADO", "Gasto guardado correctamente", "success");

        // 🔄 LIMPIAR CAMPOS
        document.getElementById("lista_de_gastos").value = "";
        document.getElementById("modo_pago_detallado").value = "";
        document.getElementById("monto_dinero_detallado").value = "";
        document.getElementById("otros_detalles").value = "";

      } else {
        Swal.fire("ERROR", res, "warning");
      }
    }
  };
}

function verificar_montos() {
  const url = base_url + "Administracion/lista_medios_pagos";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      let html = "";

      res.forEach((item) => {

        // 🔥 color dinámico
        let color = "primary";
        let icono = "fas fa-wallet";

        if (item.nombre.toLowerCase().includes("yape")) {
          color = "info";
          icono = "fas fa-mobile-alt";
        } else if (item.nombre.toLowerCase().includes("efectivo")) {
          color = "success";
          icono = "fas fa-money-bill-wave";
        } else if (item.nombre.toLowerCase().includes("visa")) {
          color = "dark";
          icono = "fas fa-credit-card";
        }

        html += `
        <div class="col-md-4 mb-3">
          <div class="card border-0 shadow-sm tarjeta-hover position-relative overflow-hidden">

            <!-- 🔥 barra superior -->
            <div class="barra-top bg-${color}"></div>

            <div class="card-body text-center">

              <div class="icono mb-2 text-${color}">
                <i class="${icono}" style="font-size: 28px;"></i>
              </div>

              <h6 class="text-muted">${item.nombre}</h6>

              <h5 class="font-weight-bold text-${color}">
                S/ ${parseFloat(item.Caja || 0).toFixed(2)}
              </h5>

              <small class="text-muted">Capital actual</small>

            </div>

          </div>
        </div>
        `;

      });

      document.getElementById('mostrar_activos').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}




function verificar_ventas_del_dia() {
  const url = base_url + "Administracion/caja_dinero_actual";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      let html = "";

      res.forEach((item) => {

        // 🔥 color dinámico según método
        let color = "primary";
        let icono = "fas fa-wallet";

        if (item.nombre.toLowerCase().includes("yape")) {
          color = "info";
          icono = "fas fa-mobile-alt";
        } else if (item.nombre.toLowerCase().includes("efectivo")) {
          color = "success";
          icono = "fas fa-money-bill-wave";
        } else if (item.nombre.toLowerCase().includes("visa")) {
          color = "dark";
          icono = "fas fa-credit-card";
        }

        html += `
        <div class="col-md-4 mb-3">
          <div class="card border-0 shadow-sm tarjeta-hover">
            
            <div class="card-body text-center">
              
              <div class="icono mb-2 text-${color}">
                <i class="${icono}" style="font-size: 28px;"></i>
              </div>

              <h6 class="text-muted">${item.nombre}</h6>

              <h5 class="font-weight-bold text-${color}">
                S/ ${parseFloat(item.total || 0).toFixed(2)}
              </h5>

            </div>

          </div>
        </div>
        `;

      });

      document.getElementById('ventas_diarias').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}
function gastos_del_dia() {
  const url = base_url + "Administracion/detallar_lista";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      let html = `<ul class="list-group list-group-flush">`;

      res.forEach((item) => {

        // 🔥 color según tipo de pago
        let color = "primary";

        if (item.nombre.toLowerCase().includes("efectivo")) {
          color = "success";
        } else if (item.nombre.toLowerCase().includes("yape")) {
          color = "info";
        } else if (item.nombre.toLowerCase().includes("visa")) {
          color = "dark";
        }

        html += `
        <li class="list-group-item d-flex justify-content-between align-items-center gasto-item">
          
          <span>🧾 ${item.detalle}</span>
          
          <span class="badge badge-${color}">
            ${item.nombre}
          </span>

          <strong class="text-danger">
            S/ ${parseFloat(item.monto || 0).toFixed(2)}
          </strong>

        </li>
        `;
      });

      html += `</ul>`;

      document.getElementById('gastos_diarios').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}

function gastos_compras_combustible() {
  const url = base_url + "Administracion/detallar_gasto_combustible";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      let html = `<ul class="list-group list-group-flush">`;

      res.forEach((item) => {

        // 🔥 color según tipo de pago
        let color = "warning";

        if (item.nombre.toLowerCase().includes("efectivo")) {
          color = "success";
        } else if (item.nombre.toLowerCase().includes("yape")) {
          color = "info";
        } else if (item.nombre.toLowerCase().includes("visa")) {
          color = "dark";
        }

        html += `
        <li class="list-group-item d-flex justify-content-between align-items-center gasto-item">
          
          <span>🧾 ${item.detalle}</span>
          
          <span class="badge badge-${color}">
            ${item.nombre}
          </span>

          <strong class="text-danger">
            S/ ${parseFloat(item.total || 0).toFixed(2)}
          </strong>

        </li>
        `;
      });

      html += `</ul>`;

      document.getElementById('gastos_combustible').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}





function cerrar_el_dia() {

    Swal.fire({
        title: '¿Cerrar caja?',
        text: "Esta acción no se puede deshacer",
        icon: 'warning',
        showCancelButton: true,
        confirmButtonText: 'Sí, cerrar',
        cancelButtonText: 'Cancelar'
    }).then((result) => {

        if (result.isConfirmed) {

            const url = base_url + "Administracion/actualizar_caja/";
            const http = new XMLHttpRequest();

            http.onreadystatechange = function () {

                if (this.readyState === 4 && this.status === 200) {

                    const res = JSON.parse(this.responseText);

                    if (res === "ok") {

                        Swal.fire({
                            icon: 'success',
                            title: 'Caja cerrada',
                            text: 'Se registró correctamente'
                        }).then(() => {
                            location.reload();
                        });

                    } else {

                        Swal.fire({
                            icon: 'error',
                            title: 'Error',
                            text: 'No se pudo cerrar la caja'
                        });

                    }
                }
            };

            http.open("GET", url, true);
            http.send();
        }
    });
}


function clientes_activos() {
  const url = base_url + "Administracion/clientes_grifo";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      let res;
      try {
        res = JSON.parse(this.responseText);
      } catch (e) {
        console.error("Error al parsear JSON");
        return;
      }

      let html = ""; // 🔥 IMPORTANTE (antes no estaba)

      res.forEach((item) => {

        html += `
          <li class="list-group-item d-flex justify-content-between align-items-center">
              <span>${item.nombre}</span>
              <span class="badge badge-primary badge-pill">
                ${item.cell == 0 ? 'Sin número' : item.cell}
              </span>
          </li>
        `;
      });

      document.getElementById('traer_clientes').innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}
function clientes_deudores() {

  const url = base_url + "Administracion/clientes_deudores";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      const res = JSON.parse(this.responseText);
      let html = "";

      // 🇵🇪 FECHA PERÚ
      const hoy = new Date(
        new Date().toLocaleString("en-US", { timeZone: "America/Lima" })
      );
      hoy.setHours(0,0,0,0);

      // 🔥 FILTRAR SOLO LOS QUE TIENEN DEUDA REAL
      const lista = res.filter(item => parseFloat(item.total) > 0);

      // 🔥 ORDENAR POR MAYOR DEUDA
      lista.sort((a, b) => parseFloat(b.total) - parseFloat(a.total));

      // 🔥 HEADER
      html += `
        <li class="list-group-item d-flex justify-content-between">
          <span>Clientes con deuda</span>
          <strong>${lista.length}</strong>
        </li>
      `;

      // 🔥 MAYOR DEUDA
      if (lista.length > 0) {
        html += `
          <li class="list-group-item d-flex justify-content-between">
            <span>Mayor deuda</span>
            <span class="text-danger font-weight-bold">S/ ${parseFloat(lista[0].total).toFixed(2)}</span>
          </li>
        `;
      }

      // 🔥 LISTA REAL (SIN AGRUPAR)
      lista.forEach(item => {

        const fecha = new Date(item.cobranza);
        fecha.setHours(0,0,0,0);

        const diffDias = Math.ceil((fecha - hoy) / (1000 * 60 * 60 * 24));

        let badge = "";

        if (diffDias < 0) {
          badge = `<span class="badge badge-danger ml-1">Vencido</span>`;
        } 
        else if (diffDias === 0) {
          badge = `<span class="badge badge-warning ml-1">Vence hoy</span>`;
        } 
        else if (diffDias > 0 && diffDias <= 2) {
          badge = `<span class="badge badge-info ml-1">${diffDias} día(s)</span>`;
        }

        html += `
          <li class="list-group-item d-flex justify-content-between align-items-center">
            <span>${item.nombre} ${badge}</span>
            <strong class="text-danger">S/ ${parseFloat(item.total).toFixed(2)}</strong>
          </li>
        `;
      });

      document.getElementById("deudas_clientes").innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}

function gastos_sencillos() {
  const url = base_url + "Administracion/gastos_sencillos";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      const contenedor = document.getElementById("mostrar_todos_gastos_censillos");

      contenedor.innerHTML = "";

      let fecha_actual = "";

      res.forEach(item => {

        // 🔹 SI CAMBIA LA FECHA → AGREGA DIVISOR
        if (fecha_actual !== item.fecha) {
          fecha_actual = item.fecha;

          contenedor.innerHTML += `
            <li class="list-group-item active text-center">
              ${fecha_actual}
            </li>
          `;
        }

        // 🔹 ITEM NORMAL
        contenedor.innerHTML += `
          <li class="list-group-item d-flex justify-content-between align-items-center">
            
            <span>${item.nombre}</span>
            
            <span>S/ ${item.monto}</span>

            <button class="btn btn-sm btn-danger" onclick="generar_pdf(${item.id})">
              PDF
            </button>

          </li>
        `;
      });

    }
  };

  http.open("GET", url, true);
  http.send();
}
























































































































































































function lista_roles() {
  const url = base_url + "Administracion/lista_de_roles/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      const select = document.getElementById("roles");
      select.innerHTML = ""; // limpiar antes

      res.forEach(role => {
        const option = document.createElement("option");
        option.value = role.id; // aquí va la ID
        option.textContent = role.nombre; // aquí el nombre visible
        select.appendChild(option);
      });
    }
  };

  http.open("GET", url, true);
  http.send();
}


function usuarios_activos() {
  const url = base_url + "Administracion/listas_ususarios/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

     
 let tabla = `
        <table class="table table-bordered table-hover table-sm align-middle shadow-sm">
          <thead class="thead-dark text-center">
            <tr>
             <th class="d-none">ID</th>
              <th>Usuario</th>
              <th>Nombre</th>
              <th>Apellidos</th>
              <th>DNI</th>
              <th>Celular</th>
              <th>Rol</th>
              <th>Opciones</th>
            </tr>
          </thead>
          <tbody>
      `;                                    

      res.forEach(u => {
        tabla += `
          <tr id="lista_editar">
             <td class="d-none" id="id_lista_user">${u.id}</td>
            <td>${u.usuario}</td>
            <td>${u.nombre}</td>
            <td>${u.apellidos}</td>
            <td>${u.dni}</td>
            <td>${u.cel}</td>
            <td><span class="badge badge-info">${u.nombre_rol}</span></td>
            <td class="text-center">
             <div id="config_user_${u.id}">
              <button class="btn btn-sm btn-primary" onclick="editarUsuario(${u.id})">
                <i class="fas fa-edit"></i> Editar
              </button>
              <button class="btn btn-sm btn-danger" onclick="eliminarUsuario(${u.id})">
                <i class="fas fa-trash"></i> Eliminar
              </button>
                  <button class="btn btn-sm btn-warning" onclick="informacion_user(${u.id})">
                <i class="fa-solid fa-circle-info"></i>
              </button>
              </div>
                 <button id="cancelado_edicion_${u.id}" class="btn btn-sm btn-danger d-none" onclick="Cancelar_editar(${u.id})">
                <i class="fas fa-trash"></i> Cancelar
              </button>
            </td>
          </tr>
        `;
      });



      tabla += `
          </tbody>
        </table>
      `;

      document.getElementById("lista_usuarios_acti").innerHTML = tabla;
    }
  };

  http.open("GET", url, true);
  http.send();
}

function informacion_user(id_user) {
    const url = base_url + "Administracion/usuario_detalle/" + id_user;
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);

            let html = `
                <div style="text-align:center;">
                    <ul style="
                        list-style:none;
                        padding:0;
                        margin:0;
                        border-top:1px solid #ddd;
                    ">
                        <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>Nombre:</b> ${res.nombre}
                        </li>
                        <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>Apellidos:</b> ${res.apellidos}
                        </li>
                        <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>Usuario:</b> ${res.usuario}
                        </li>
                          <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>Contraseña:</b> ${res.clave

                            }
                        </li>
                        <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>DNI:</b> ${res.dni}
                        </li>
                        <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>Celular:</b> ${res.cel}
                        </li>
                        <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>Rol:</b> ${res.nombre_rol}
                        </li>
                        <li style="padding:8px 0; border-bottom:1px solid #ddd;">
                            <b>Estado:</b> 
                            <span style="color:${res.estado == 1 ? 'green' : 'red'};">
                                ${res.estado == 1 ? 'Activo' : 'Inactivo'}
                            </span>
                        </li>
                        <li style="padding:8px 0;">
                            <b>Creado:</b> ${res.created_at}
                        </li>
                    </ul>
                </div>
            `;

            Swal.fire({
                title: 'Información del Usuario',
                html: html,
                icon: 'info',
                confirmButtonText: 'Cerrar',
                width: 500
            });
        }
    };

    http.open("GET", url, true);
    http.send();
}
function preview(e) {
    const file = e.target.files[0];
    if (!file) return;

    const img = document.getElementById("img-preview");
    const btn = document.getElementById("btn-delete-img");

    img.src = URL.createObjectURL(file);
    img.classList.remove("d-none");
    btn.classList.remove("d-none");
}

function deleteImg() {
    document.getElementById("img-preview").src = "";
    document.getElementById("img-preview").classList.add("d-none");
    document.getElementById("btn-delete-img").classList.add("d-none");
    document.getElementById("imagen").value = "";
}






























function user_desactivados() {
  const url = base_url + "Administracion/usuarios_eliminados_lista/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

     
 let tabla = `
        <table class="table table-bordered table-hover table-sm align-middle shadow-sm">
          <thead class="thead-dark text-center">
            <tr>
             <th class="d-none">ID</th>
              <th>Usuario</th>
              <th>Nombre</th>
              <th>Apellidos</th>
              <th>DNI</th>
              <th>Celular</th>
              <th>Rol</th>
              <th>Opciones</th>
            </tr>
          </thead>
          <tbody>
      `;                                    

      res.forEach(u => {
        tabla += `
          <tr id="lista_editar">
             <td class="d-none" id="id_lista_user">${u.id}</td>
            <td>${u.usuario}</td>
            <td>${u.nombre}</td>
            <td>${u.apellidos}</td>
            <td>${u.dni}</td>
            <td>${u.cel}</td>
            <td><span class="badge badge-info">${u.nombre_rol}</span></td>
            <td class="text-center">
             <div id="config_user_${u.id}">
              <button class="btn btn-sm btn-success" onclick="reingresar_user(${u.id})">
                <i class="fas fa-undo"></i> Reingresar
              </button>
              
            </td>
          </tr>
        `;
      });

      tabla += `
          </tbody>
        </table>
      `;

      document.getElementById("eliminados_user").innerHTML = tabla;
    }
  };

  http.open("GET", url, true);
  http.send();
}


function reingresar_user(id_user) {
    const url = base_url + "Administracion/reingresar_user_activo/" + id_user;
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      if (res == "ok") {
          Swal.fire(
          "USUARIO REINGRESADO",
          "el usario esta activo",
          "success"
        );
              user_desactivados();
      }
      
    }
  };

  http.open("GET", url, true);
  http.send();
}

function eliminarUsuario(id_user) {

    Swal.fire({
        title: "¿Estás seguro?",
        text: "Al eliminar bloquearas el ingreso al sistema",
        icon: "warning",
        showCancelButton: true,
        confirmButtonColor: "#28a745",
        cancelButtonColor: "#d33",
        confirmButtonText: "Sí, confirmar",
        cancelButtonText: "Cancelar"
    }).then((result) => {

        if (result.isConfirmed) {

            const url = base_url + "Administracion/eliminar_user_list/" + id_user;
            const http = new XMLHttpRequest();

            http.onreadystatechange = function () {
                if (this.readyState === 4 && this.status === 200) {

                    const res = JSON.parse(this.responseText);

                    if (res === "ok") {
                        Swal.fire(
                            "USUARIO ELIMINADO",
                            "El usuario ahora está desactivado",
                            "success"
                        );
                        usuarios_activos();
                    } else {
                        Swal.fire(
                            "Error",
                            "No se pudo reingresar el usuario",
                            "error"
                        );
                    }
                }
            };

            http.open("GET", url, true);
            http.send();
        }

    });
}



function configurar_user() {

  const id_editar_user = document.getElementById("id_editar_user").value.trim();
  const nombre = document.getElementById("nombre").value.trim();
  const apellidos = document.getElementById("apellidos").value.trim();
  const dni = document.getElementById("dni").value.trim();
  const celular = document.getElementById("celular").value.trim();
  const rol = document.getElementById("roles").value.trim();
  const usuario = document.getElementById("usuario").value.trim();
  const clave = document.getElementById("clave").value.trim();

  if (usuario === "" || nombre === "" || rol === "" || apellidos === "" || dni === "" || celular === "" || clave === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/Corregir_user";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("id_editar_user", id_editar_user);
  formData.append("nombre", nombre);
  formData.append("apellidos", apellidos);
  formData.append("dni", dni);
  formData.append("celular", celular);
  formData.append("rol", rol);
  formData.append("usuario", usuario);
  formData.append("clave", clave);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      
      if (res === "ok") {
        Swal.fire(
          "USUARIO CORREGIDO",
          "Se ha corregido exitosamente",
          "success"
        );
        document.getElementById("nombre").value = "";
         document.getElementById("apellidos").value = "";
         document.getElementById("dni").value = "";
         document.getElementById("celular").value = "";
         document.getElementById("roles").value = "";
         document.getElementById("usuario").value = "";
         document.getElementById("clave").value = "";
          usuarios_activos();
          Cancelar_editar();
      } 
    }
  
}
}


function Cancelar_editar(id) {
    document.querySelectorAll("[id^='config_user_']").forEach(div => {
    div.classList.remove('d-none'); // mostrar todos los divs de opciones
  });
    document.querySelectorAll("[id^='cancelado_edicion_']").forEach(btn => {
    btn.classList.add('d-none'); // ocultar todos los botones de cancelar
  });
      document.getElementById("nombre").value = "";
         document.getElementById("apellidos").value = "";
         document.getElementById("dni").value = "";
         document.getElementById("celular").value = "";
         document.getElementById("roles").value = "";
         document.getElementById("usuario").value = "";
         document.getElementById("clave").value = "";
         document.getElementById('color_header').classList.remove('editar_usuarios');
         document.getElementById('registros_user').classList.remove('d-none');
         document.getElementById('editar_user').classList.add('d-none');

}



function editarUsuario(id) {
  // 1. Restaurar todos los botones antes de aplicar cambios
  document.querySelectorAll("[id^='config_user_']").forEach(div => {
    div.classList.remove('d-none'); // mostrar todos los divs de opciones
  });

  document.querySelectorAll("[id^='cancelado_edicion_']").forEach(btn => {
    btn.classList.add('d-none'); // ocultar todos los botones de cancelar
  });

  // 2. Consultar usuario
  const url = base_url + "Administracion/consultar_user/" + id;
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      if (res) {
        // 3. Ahora sí, aplicar cambios solo al usuario actual
        document.getElementById('config_user_' + id).classList.add('d-none');
        document.getElementById('cancelado_edicion_' + id).classList.remove('d-none');

        document.getElementById('color_header').classList.add('editar_usuarios');
        document.getElementById('registros_user').classList.add('d-none');
        document.getElementById('editar_user').classList.remove('d-none');

        // Rellenar los inputs
        document.getElementById("id_editar_user").value = res.id;
        document.getElementById("nombre").value = res.nombre;
        document.getElementById("apellidos").value = res.apellidos;
        document.getElementById("dni").value = res.dni;
        document.getElementById("celular").value = res.cel;
       document.getElementById("roles").value = res.id_rol;

        document.getElementById("usuario").value = res.usuario;
        document.getElementById("clave").value = res.clave;
      }
    }
  };
}



function roles_editar() {
  const url = base_url + "Administracion/lista_de_roles/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      const select = document.getElementById("editar_roles");
      select.innerHTML = ""; // limpiar antes

      res.forEach(role => {
        const option = document.createElement("option");
        option.value = role.id; // aquí va la ID
        option.textContent = role.nombre; // aquí el nombre visible
        select.appendChild(option);
      });
    }
  };

  http.open("GET", url, true);
  http.send();
}



function registrarUser(e) {
  e.preventDefault();

  const nombre = document.getElementById("nombre").value.trim();
  const apellidos = document.getElementById("apellidos").value.trim();
  const dni = document.getElementById("dni").value.trim();
  const celular = document.getElementById("celular").value.trim();
  const rol = document.getElementById("roles").value.trim();
  const usuario = document.getElementById("usuario").value.trim();
  const clave = document.getElementById("clave").value.trim();

  if (usuario === "" || nombre === "" || rol === "" || apellidos === "" || dni === "" || celular === "" || clave === "") {
    Swal.fire({
      icon: "error",
      title: "Campos incompletos",
      text: "No has llenado todos los campos",
    });
    return;
  }

  const url = base_url + "Administracion/registrar_user";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);

  // Creamos el FormData manualmente
  const formData = new FormData();
  formData.append("nombre", nombre);
  formData.append("apellidos", apellidos);
  formData.append("dni", dni);
  formData.append("celular", celular);
  formData.append("rol", rol);
  formData.append("usuario", usuario);
  formData.append("clave", clave);

  http.send(formData);

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      
      if (res === "si") {
        Swal.fire(
          "USUARIO REGISTRADO",
          "Se ha registrado un nuevo usuario",
          "success"
        );
        document.getElementById("nombre").value = "";
         document.getElementById("apellidos").value = "";
         document.getElementById("dni").value = "";
         document.getElementById("celular").value = "";
         document.getElementById("roles").value = "";
         document.getElementById("usuario").value = "";
         document.getElementById("clave").value = "";
          usuarios_activos()
      } else if (res === "existe") {
        Swal.fire(
          "USUARIO ACTIVO",
          "El usuario ya ha sido registrado con ese DNI. Ingrese otro nuevo",
          "warning"
        );
             document.getElementById("dni").value = "";
      } else if (res === "inabilitado") {
        Swal.fire(
          "USUARIO DESABILITADO",
          "El usuario esta desabilitado, porfavor vuelva a activar el usuario",
          "warning"
        );
             document.getElementById("dni").value = "";
      }else{
            Swal.fire(
          "ERROR ALGO PASO",
          "No se pudo registrar algo paso",
          "error"
        );
         
      }
    }
  
}
}
 function mostrarInput() {
    const cancelar_rol = document.getElementById("cancelar_rol");
    const adicionar_rol = document.getElementById("adicionar_rol");
    const inputDiv = document.getElementById("nuevoRolContainer");

    if (inputDiv.classList.contains("d-none")) {
      // limpiar restos de animaciones anteriores
      inputDiv.classList.remove("arriba_abajo", "abajo_arrba", "d-none");
      void inputDiv.offsetWidth; // forzar reflow para reiniciar animación

      inputDiv.classList.add("abajo_arrba"); // animación de entrada
      cancelar_rol.classList.remove("d-none");
      adicionar_rol.classList.add("d-none");
    }
  }

  function ocultar_rol() {
    const cancelar_rol = document.getElementById("cancelar_rol");
    const adicionar_rol = document.getElementById("adicionar_rol");
    const inputDiv = document.getElementById("nuevoRolContainer");

    if (!inputDiv.classList.contains("d-none")) {
      inputDiv.classList.remove("abajo_arrba");
      void inputDiv.offsetWidth; // forzar reflow
      inputDiv.classList.add("arriba_abajo"); // animación de salida

      inputDiv.addEventListener("animationend", () => {
        inputDiv.classList.add("d-none");
        // limpiar clases para que la próxima vez empiece "limpio"
        inputDiv.classList.remove("arriba_abajo", "abajo_arrba");

        cancelar_rol.classList.add("d-none");
        adicionar_rol.classList.remove("d-none");
        // opcional: limpiar el input
        // document.getElementById("nuevoRol").value = "";
      }, { once: true });
    }
  }



 function lista_eliminados() {
  const lista = document.getElementById("lista_eliminados").value
  const url = base_url + "Administracion/lista_user_eliminados";
  document.getElementById()
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      if (res = "vacio") {
         Swal.fire(
          "NO HAY USUARIOS ELIMINADOS",
          "No hay registros de usuarios eliminados",
          "warning"
        );
      }else{
        let html_tabla = ""
      }
      
    }
  }
}

function roles_nuevos() {

    Mostrar_los_modulos();

    const tabla = document.getElementById("tabla_user_activos");
    const roles = document.getElementById("roles_configuracion");
    const eliminados = document.getElementById("tabla_user_eliminados");

    // Animar salida
    tabla.classList.add("animacion-abajo");
    eliminados.classList.add("animacion-abajo");

    // Mostrar roles
    roles.classList.remove("d-none");
    roles.offsetHeight;
    roles.classList.add("animacion-desde-arriba");

    // Ocultar los otros
    setTimeout(() => {
        tabla.classList.add("d-none");
        eliminados.classList.add("d-none");
    }, 50);
}

function user_activos() {
       usuarios_activos() 

    const tabla = document.getElementById("tabla_user_activos");
    const roles = document.getElementById("roles_configuracion");
    const eliminados = document.getElementById("tabla_user_eliminados");

    // Animar salida
    roles.classList.add("animacion-abajo");
     eliminados.classList.add("d-none");

    // Mostrar activos
    tabla.classList.remove("d-none");
    tabla.offsetHeight;
    tabla.classList.add("animacion-desde-arriba");

    // Ocultar los otros
    setTimeout(() => {
        roles.classList.add("d-none");
       
    }, 50);
}

function usuario_eliminados() {

    user_desactivados();

    const tabla = document.getElementById("tabla_user_activos");
    const roles = document.getElementById("roles_configuracion");
    const eliminados = document.getElementById("tabla_user_eliminados");

    // Animar salida
    roles.classList.add("animacion-abajo");
        tabla.classList.add("d-none");

    // Mostrar eliminados
    eliminados.classList.remove("d-none");
    eliminados.offsetHeight;
    eliminados.classList.add("animacion-desde-arriba");

    // Ocultar los otros
    setTimeout(() => {
        roles.classList.add("d-none");
    }, 50);
}







function Mostrar_los_modulos() {
    const url = base_url + "Administracion/listar_modulos/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
            let html_modulos = '';

            if (res.length > 0) {

                html_modulos += `<ul class="list-group">`;

                res.forEach((modulo) => {
                    html_modulos += `
                        <li class="list-group-item d-flex align-items-center" style="padding-left: 35px;">
                            <input 
                                class="form-check-input me-3" 
                                type="checkbox" 
                                value="${modulo.id}" 
                                id="modulo_${modulo.id}"
                                style="width: 1.2em; height: 1.2em;"
                            >
                            <label class="form-check-label" for="modulo_${modulo.id}">
                                ${modulo.modulo}
                            </label>
                        </li>
                    `;
                });

                html_modulos += `</ul>`;

            } else {
                html_modulos = `<p class="text-muted">No hay módulos disponibles</p>`;
            }

            document.getElementById('modulos').innerHTML = html_modulos;
        }
    };

    http.open("GET", url, true);
    http.send();
}

function obtenerModulosSeleccionados() {
    let modulos = [];
    const checks = document.querySelectorAll('#modulos input[type="checkbox"]:checked');

    checks.forEach(chk => {
        modulos.push(chk.value);
    });

    return modulos;
}


function Confirmar_rol() {

    // 1. Obtener nombre del rol
    const rol_nuevo = document.getElementById("nombre_rol").value.trim();

    // 2. Obtener módulos seleccionados
    const modulos = obtenerModulosSeleccionados();
     console.log(modulos);
    // 3. Validaciones
    if (rol_nuevo === "") {
        Swal.fire("Error", "Ingrese el nombre del rol", "warning");
        return;
    }

    if (modulos.length === 0) {
        Swal.fire("Error", "Seleccione al menos un módulo", "warning");
        return;
    }

    // 4. Preparar petición
    const url = base_url + "Administracion/cargar_rol/";
    const http = new XMLHttpRequest();
    const formData = new FormData();

    formData.append('rol_nuevo', rol_nuevo);
    formData.append('modulos', JSON.stringify(modulos));

    // 5. Respuesta del servidor
    http.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);
          

            if (res === "ok") {
                Swal.fire("Correcto", "Rol registrado con sus módulos", "success");
                lista_roles();
                // Limpiar input
                document.getElementById("nombre_rol").value = "";

                // Desmarcar checkboxes
                document.querySelectorAll('#modulos input[type="checkbox"]').forEach(cb => {
                    cb.checked = false;
                });

            } else {
                Swal.fire("Error", "No se pudo registrar", "error");
            }
        }
    };

    // 6. Enviar
    http.open("POST", url, true);
    http.send(formData);
}

function listar_medios_pagos() {
  const url = base_url + "Administracion/lista_medios_pagos";
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let htm_medios = "";
      res.forEach(medios => {
        htm_medios += `
        <div class="row mb-2"> <!-- Aquí agregamos la clase mb-2 para añadir un margen inferior -->
          <div class="col-md-8">
            <li class="list-group-item" id="medio_actual${medios.id}">${medios.nombre}</li>
            <input type="text" id="editar_medios${medios.id}" class="form form-control d-none" value="${medios.nombre}">
          </div>
          <div class="col-md-3">
            <button class="btn btn-primary" id="editar_medio${medios.id}" onclick="remover_contenidos(${medios.id})"><i class="fas fa-edit"></i></button>  
            <button class="btn btn-success d-none" id="check_button${medios.id}" onclick="confirmar_medios(${medios.id})"><i class="fas fa-check"></i></button>  
            <button class="btn btn-danger d-none" id="cancel_button${medios.id}" onclick="cancelarbotones(${medios.id})"><i class="fas fa-times"></i></button>  
            <button class="btn btn-danger" id="eliminar_ocult${medios.id}" onclick="eliminar_ocult(${medios.id})"><i class="fas fa-trash-alt"></i></button>
          </div>
        </div>`;
        
      });
      document.getElementById('medios_pagos_lista').innerHTML = htm_medios;
    }
  };

  http.open("GET", url, true);
  http.send();
}
function eliminar_ocult(id) {

  Swal.fire({
    title: '¿Estás seguro?',
    text: 'Este tipo de pago será eliminado',
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#d33',
    cancelButtonColor: '#6c757d',
    confirmButtonText: 'Sí, eliminar',
    cancelButtonText: 'Cancelar'
  }).then((result) => {

    if (result.isConfirmed) {

      const url = base_url + "Administracion/eliminar_medio/" + id;
      const http = new XMLHttpRequest();

      http.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {

          const res = JSON.parse(this.responseText);

          if (res === "ok") {
            Swal.fire(
              'Medio eliminado',
              'El tipo de pago fue desactivado correctamente',
              'success'
            ).then(() => {
              listar_medios_pagos();
            });

          } else {
            Swal.fire(
              'Error',
              'No se pudo eliminar el tipo de pago',
              'error'
            );
          }
        }
      };

      http.open("GET", url, true);
      http.send();
    }

  });
}


function remover_contenidos(id) {
  document.getElementById(`medio_actual${id}`).classList.add('d-none')
  document.getElementById(`editar_medio${id}`).classList.add('d-none')
  document.getElementById(`editar_medios${id}`).classList.remove('d-none')
  document.getElementById(`check_button${id}`).classList.remove('d-none')
  document.getElementById(`cancel_button${id}`).classList.remove('d-none')
  document.getElementById(`eliminar_ocult${id}`).classList.add('d-none')
}




function cancelarbotones(id) {
  document.getElementById(`medio_actual${id}`).classList.remove('d-none')
  document.getElementById(`editar_medio${id}`).classList.remove('d-none')
  document.getElementById(`editar_medios${id}`).classList.add('d-none')
  document.getElementById(`check_button${id}`).classList.add('d-none')
  document.getElementById(`cancel_button${id}`).classList.add('d-none')
  document.getElementById(`eliminar_ocult${id}`).classList.remove('d-none')
}

function confirmar_medios(id) {
  const input_value = document.getElementById(`editar_medios${id}`).value
  console.log(input_value);
  const url = base_url + "Administracion/actualizar_medios_pagos/" + id;
  const http = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('input_value', input_value);

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
     if (res == "ok") {
      Swal.fire(
        'SE HA CORREGIDO',
        'Se corrigio los nuevos medios de pagos',
        'success'
      ).then(() => {
        listar_medios_pagos()
       });
     }else{
      Swal.fire({
        title: "ALGO PASO",
        text: res,
        icon: "question"
      });
     }
    }
  };
  http.open("POST", url, true);
  http.send(formData);
}

function ocultar_medios_pagos() {
  document.getElementById('medios_pagos_lista').classList.add('d-none')
  document.getElementById('nuevo_medio_pago').classList.remove('d-none')
}

function cancelar_registro() {
  document.getElementById('medios_pagos_lista').classList.remove('d-none')
  document.getElementById('nuevo_medio_pago').classList.add('d-none')
}


function ingresar_nuevo_medio_pago() {
  const nuevo_pago = document.getElementById('nuevoMedioPago').value
  const url = base_url + "Administracion/nuevo_medio_pago/";
  const http = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('nuevo_pago', nuevo_pago);

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
     if (res == "ok") {
      Swal.fire(
        'UN NUVO MEDIO PAGOS',
        'Se registro un nuevo medio de pago',
        'success'
      ).then(() => {
        listar_medios_pagos()
        cancelar_registro()
       });
     }else{
      Swal.fire({
        title: "ALGO PASO",
        text: res,
        icon: "question"
      });
     }
    }
  };
  http.open("POST", url, true);
  http.send(formData);
}



function registrar_nuevo_Producto(e) {
  e.preventDefault();

  const frm = document.getElementById("frmProducto");
  const url = base_url + "Administracion/registrar_producto";

  fetch(url, {
    method: "POST",
    body: new FormData(frm),
  })
    .then((res) => res.json())
    .then((res) => {
      if (res.status === "ok") {
     Swal.fire({
      icon: "success",
      title: "Producto registrado",
      timer: 1500,
      showConfirmButton: false,
    });

    frm.reset();
    limpiarImagen();
lista_productos();
      } else {
        Swal.fire({
          icon: "error",
          title: "Error",
          text: res.msg,
        });
      }
    })
    .catch((err) => {
      console.error(err);
      Swal.fire({
        icon: "error",
        title: "Error del servidor",
      });
    });
}


function limpiarImagen() {
  const input = document.getElementById("imagen");
  const preview = document.getElementById("img-preview");
  const btnDelete = document.getElementById("btn-delete-img");

  // limpiar input file
  input.value = "";

  // ocultar preview
  preview.src = "";
  preview.classList.add("d-none");

  // ocultar botón X
  btnDelete.classList.add("d-none");
}




function lista_productos() {
    const url = base_url + "Administracion/productos_lista";

    fetch(url)
        .then(res => res.json())
        .then(data => {
            productos = data;   // 👈 guardamos todo
            render_productos(data);
        })
        .catch(err => {
            console.error(err);
            Swal.fire({
                icon: "error",
                title: "Error",
                text: "No se pudieron cargar los productos"
            });
        });
}
function render_productos(data) {
    const contenedor = document.getElementById("listas_productos");
    contenedor.innerHTML = "";

    data.forEach(p => {

        const img = (p.img_producto && p.img_producto !== "0")
            ? base_url + "assets/img/" + p.img_producto
            : base_url + "assets/img/default.png";

        const categoria = (!p.categoria || p.categoria === "0")
            ? "No asignado"
            : "Cat: " + p.categoria;

        contenedor.innerHTML += `
            <div class="col-md-3 col-sm-6 col-4 btn" onclick="detalles_productos(${p.id})">
                <div class="card shadow-sm product-card">

                    <img src="${img}" class="product-img"
                        onerror="this.src='${base_url}assets/img/default.png'">

                    <div class="card-body p-2">
                        <h6 class="mb-1 text-truncate">${p.producto}</h6>
                        <small class="text-muted">Código: ${p.codigo}</small><br>
                        <small>${categoria}</small>
                        <small>${p.presentacion}</small>

                        <div class="fw-bold mt-1 text-success">
                            S/ ${p.precio_venta}
                        </div>
                    </div>

                </div>
            </div>
        `;
    });
}
function filtrar_productos() {
    const texto = document.getElementById("buscar_producto").value.toLowerCase();

    const filtrados = productos.filter(p =>
        p.producto.toLowerCase().includes(texto) ||
        p.codigo.toLowerCase().includes(texto)
    );

    render_productos(filtrados);
}

function cancelar_detalles_productos() {
   document.getElementById('detalles_productos').innerHTML = "";
  document.getElementById("botones_detalles_productos").classList.add("d-none")

}

function detalles_productos(id_producto) {
    const url = base_url + "Administracion/producto_detalle/" + id_producto;
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {

            const p = JSON.parse(this.responseText);
            categorias_select()
            presentacion_select()
            // validaciones simples
            document.getElementById("botones_detalles_productos").classList.remove("d-none")
            const categoria = (p.categoria === "0" || p.categoria === 0)
                ? "No asignado"
                : p.categoria;

            const vencimiento = p.fecha_vencimiento
                ? p.fecha_vencimiento
                : "No registra";

            const estado = p.estado == 1 ? "Activo" : "Inactivo";
            const img = (p.img_producto && p.img_producto !== "0")
            ? base_url + "assets/img/" + p.img_producto
            : base_url + "assets/img/default.png";


            let html = `
          <div class="row">

    <div class="col-12">

        <!-- Producto -->
            <input type="hidden" class="form-control form-control-sm" id="id_producto_detalle" value="${p.id}">
        <div class="row align-items-center mb-2">
            <div class="col-4">Producto</div>
            <div class="col-8">
                <input type="text" class="form-control form-control-sm" id="producto_detalle" value="${p.producto}">
            </div>
        </div>

        <!-- Código -->
        <div class="row align-items-center mb-2">
            <div class="col-4">Código</div>
            <div class="col-8">
                <input type="text" class="form-control form-control-sm" id="codigo_detalle" value="${p.codigo}">
            </div>
        </div>

        <!-- Cantidad -->
        <div class="row align-items-center mb-2">
            <div class="col-4">Cantidad</div>
            <div class="col-8">
                <input type="number" class="form-control form-control-sm" id="cantidad_detalle" value="${p.cantidad}">
            </div>
        </div>

        <!-- Precio compra -->
        <div class="row align-items-center mb-2">
            <div class="col-4">Precio compra</div>
            <div class="col-8">
                <input type="text" class="form-control form-control-sm" id="precio_compra_detalle" value="${p.precio_compra}">
            </div>
        </div>

        <!-- Precio venta -->
        <div class="row align-items-center mb-2">
            <div class="col-4">Precio venta</div>
            <div class="col-8">
                <input type="text" class="form-control form-control-sm" id="precio_venta_detalle" value="${p.precio_venta}">
            </div>
        </div>

        <!-- Presentación -->
        <div class="row align-items-center mb-2">
            <div class="col-4">Presentación</div>
            <div class="col-8">
            <select class="form-control" id="presentacion_detalle" name="presentacion_detalle">
                           
                        </select>
            </div>
        </div>

        <!-- Categoría -->
        <div class="row align-items-center mb-2">
            <div class="col-4" >Categoría</div>
            <div class="col-8">
              <select class="form-control" id="categoria_detalle" name="categoria_detalle">
                           
              </select>
            </div>
        </div>

        <!-- Vencimiento -->
        <div class="row align-items-center mb-2">
            <div class="col-4">Vencimiento</div>
            <div class="col-8">
                <input type="date" class="form-control form-control-sm" id="vencimiento_detalle" value="${vencimiento}">
            </div>
        </div>

        <!-- Estado -->
        <div class="row align-items-center">
            <div class="col-4">Estado</div>
            <div class="col-8">
                <input type="text" class="form-control form-control-sm" value="${estado}" disabled>
            </div>
        </div>
             <div class="card border-primary shadow-sm text-center mt-3">
                    <div class="card-body p-2">

                        <label for="image_detalles" class="btn btn-primary btn-sm mb-2">
                            <i class="far fa-images"></i> Seleccionar
                        </label>

                    <input
                        id="image_detalles"
                        name="detalles_img"
                        type="file"
                        class="d-none"
                        accept="image/*"
                        onchange="preview_detalles(event)"
                    >


                        <div class="position-relative mx-auto"
                             style="width:90px;height:90px;">

                           <img
                                id="img-preview_detalles"
                                class="img-thumbnail"
                                style="width:100%;height:100%;object-fit:cover;"
                                src="${img}"
                            >

                            <button
                                id="btn-delete-img_detalles"
                                type="button"
                                class="btn btn-danger btn-sm position-absolute top-0 end-0 d-none"
                                style="transform: translate(30%,-30%)"
                                onclick="deleteImg_detalles()"
                            >
                                <i class="fa-solid fa-xmark"></i>
                            </button>

                        </div>

                    </div>
                </div>

    </div>


</div>

             
            `;

document.getElementById('detalles_productos').innerHTML = html;
const imgEl = document.getElementById("img-preview_detalles");
const btnEl = document.getElementById("btn-delete-img_detalles");

if (p.img_producto && p.img_producto !== "0") {
    imgEl.classList.remove("d-none");
    btnEl.classList.remove("d-none");
} else {
    imgEl.classList.add("d-none");
    btnEl.classList.add("d-none");
}

        }
    };

    http.open("GET", url, true);
    http.send();
}
function presentacion_select() {
  const url = base_url + "Administracion/presentaciones";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      let res;
      try {
        res = JSON.parse(this.responseText);
      } catch (e) {
        console.error("JSON inválido");
        return;
      }

      if (!Array.isArray(res)) return;

      const select = document.getElementById("producto_presentacion");
      const select_editar = document.getElementById("presentacion_detalle");

      let options = `<option value="0">Seleccione</option>`;

      res.forEach(p => {
        options += `<option value="${p.id}">${p.nombre}</option>`;
      });

      select.innerHTML = options;
      select_editar.innerHTML = options;
    }
  };

  http.open("GET", url, true);
  http.send();
}


function categorias_select() {
  const url = base_url + "Administracion/categorias";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      let res;
      try {
        res = JSON.parse(this.responseText);
      } catch (e) {
        console.error("JSON inválido");
        return;
      }

      if (!Array.isArray(res)) return;

      const select = document.getElementById("producto_categoria");
      const select_editar = document.getElementById("categoria_detalle");

      let options = `<option value="0">Seleccione</option>`;

      res.forEach(cat => {
        options += `<option value="${cat.id}">${cat.nombre}</option>`;
      });

      select.innerHTML = options;
      select_editar.innerHTML = options;
    }
  };

  http.open("GET", url, true);
  http.send();
}





function actualizar_productos() {
  Swal.fire({
    title: 'ADVERTENCIA: ¿ESTAS SEGURO DE MODIFICAR EL PRODUCTO?',
    text: 'Recuerda que existirá un reporte de este cambio.',
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Confirmar',
  }).then((result) => {

    if (!result.isConfirmed) return;

    // ===============================
    // 📥 OBTENER VALORES
    // ===============================
    const id_producto_detalle   = document.getElementById('id_producto_detalle').value;
    const producto_detalle      = document.getElementById('producto_detalle').value.trim();
    const codigo_detalle        = document.getElementById('codigo_detalle').value.trim();
    const cantidad_detalle      = document.getElementById('cantidad_detalle').value;
    const precio_compra_detalle = document.getElementById('precio_compra_detalle').value;
    const precio_venta_detalle  = document.getElementById('precio_venta_detalle').value;
    const presentacion_detalle  = document.getElementById('presentacion_detalle').value;
    const categoria_detalle     = document.getElementById('categoria_detalle').value;
    const vencimiento_detalle   = document.getElementById('vencimiento_detalle').value;
    const imagenInput           = document.getElementById('image_detalles');
    console.log(presentacion_detalle);
    console.log(categoria_detalle);
    
    // ===============================
    // ❌ VALIDACIÓN BÁSICA
    // ===============================
    if (
      producto_detalle === '' ||
      codigo_detalle === '' ||
      cantidad_detalle === '' ||
      precio_compra_detalle === '' ||
      precio_venta_detalle === ''
    ) {
      Swal.fire({
        icon: 'warning',
        title: 'Datos faltantes',
        text: 'Completa todos los campos obligatorios',
      });
      return;
    }

    // ===============================
    // 📦 FORM DATA (AQUÍ ESTABA TU ERROR ANTES)
    // ===============================
    const data = new FormData();

    data.append('id_producto_detalle', id_producto_detalle);
    data.append('producto_detalle', producto_detalle);
    data.append('codigo_detalle', codigo_detalle);
    data.append('cantidad_detalle', cantidad_detalle);
    data.append('precio_compra_detalle', precio_compra_detalle);
    data.append('precio_venta_detalle', precio_venta_detalle);
    data.append('presentacion_detalle', presentacion_detalle);
    data.append('categoria_detalle', categoria_detalle);
    data.append('vencimiento_detalle', vencimiento_detalle);

    // 🖼️ IMAGEN (SOLO SI SE SELECCIONA)
    if (imagenInput && imagenInput.files.length > 0) {
      data.append('producto_imagen', imagenInput.files[0]);
    }

    // ===============================
    // 🚀 AJAX
    // ===============================
    const xhr = new XMLHttpRequest();
    xhr.open('POST', base_url + 'Administracion/editar_productos', true);

    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {

        if (xhr.status !== 200) {
          Swal.fire('Error', 'Error de servidor', 'error');
          return;
        }

        let res;
        try {
          res = JSON.parse(xhr.responseText);
        } catch (e) {
          console.error(xhr.responseText);
          Swal.fire('Error', 'Respuesta inválida del servidor', 'error');
          return;
        }

        if (res === 'ok') {
          Swal.fire({
            icon: 'success',
            title: 'PRODUCTO MODIFICADO',
            text: 'Se actualizó correctamente',
          }).then(() => location.reload());
        } else {
          Swal.fire('Error', res, 'error');
        }
      }
    };

    xhr.send(data);
  });
}

function eliminar_producto() {
  const id_producto = document.getElementById("id_producto_detalle").value;

  if (!id_producto) {
    Swal.fire("Error", "ID de producto no válido", "error");
    return;
  }

  Swal.fire({
    title: "¿ESTÁS SEGURO DE ELIMINAR ESTE PRODUCTO?",
    text: "Esta acción será registrada por seguridad",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ELIMINAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Administracion/eliminar_productos/" + id_producto;
      const http = new XMLHttpRequest();

      http.onreadystatechange = function () {
        if (this.readyState === 4) {
          if (this.status === 200) {
            const res = JSON.parse(this.responseText);

            if (res === "ok") {
              Swal.fire("ELIMINADO", "El producto fue eliminado correctamente", "success");
              lista_productos()
              cancelar_detalles_productos()
            } else {
              Swal.fire("Error", res.msg || "No se pudo eliminar", "error");
            }
          } else {
            Swal.fire("Error", "Error del servidor", "error");
          }
        }
      };

      http.open("GET", url, true);
      http.send();
    }
  });
}




function preview_detalles(e) {
    const file = e.target.files[0];
    if (!file) return;

    const img = document.getElementById("img-preview_detalles");
    const btn = document.getElementById("btn-delete-img_detalles");

    img.src = URL.createObjectURL(file);
    img.classList.remove("d-none");
    btn.classList.remove("d-none");
}


function deleteImg_detalles() {
    document.getElementById("image_detalles").value = "";
    document.getElementById("img-preview_detalles").classList.add("d-none");
    document.getElementById("btn-delete-img_detalles").classList.add("d-none");
}

function Registrar_presentacion() {
  const presentaciones_nueva = document
    .getElementById("presentaciones_nueva")
    .value
    .trim();

  // 🔴 Validación
  if (presentaciones_nueva === "") {
    Swal.fire(
      "Campo obligatorio",
      "Ingrese un nombre de presentación",
      "warning"
    );
    return; // ⛔ se corta aquí
  }

  const url = base_url + "Administracion/nuevo_presentacion/";
  const http = new XMLHttpRequest();
  const formData = new FormData();

  formData.append("presentaciones_nueva", presentaciones_nueva);

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      if (res == "ok") {
        Swal.fire(
          "NUEVA PRESENTACIÓN",
          "Se agregó una nueva presentación",
          "success"
        ).then(() => {
          listas_presentaciones();
          document.getElementById("presentaciones_nueva").value = "";
        });
      }
    }
  };

  http.open("POST", url, true);
  http.send(formData);
}


function Registrar_categoria() {
  const nueva_categoria = document.getElementById("nueva_categoria").value.trim();

  // 🔴 Validación
  if (nueva_categoria === "") {
    Swal.fire(
      "Campo obligatorio",
      "Ingrese un nombre de categoría",
      "warning"
    );
    return; // ⛔ no continúa
  }

  const url = base_url + "Administracion/recibiendo_categoria/";
  const http = new XMLHttpRequest();
  const formData = new FormData();

  formData.append("nueva_categoria", nueva_categoria);

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      if (res == "ok") {
        Swal.fire(
          "NUEVA CATEGORÍA",
          "Se agregó una nueva categoría",
          "success"
        ).then(() => {
       
          location.reload();
        });
      }
    }
  };

  http.open("POST", url, true);
  http.send(formData);
}


function listas_presentaciones() {
  const url = base_url + "Administracion/lista_presentaciones_controlador";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      const res = JSON.parse(this.responseText);
      let html = "";

      res.forEach(presentacion => {
        html += `
          <tr class="align-middle">

            <!-- PRESENTACIÓN -->
            <td>
              <span id="texto_${presentacion.id}">
                ${presentacion.nombre}
              </span>

              <input
                type="text"
                class="form-control form-control-sm d-none"
                id="presentacion_corregir${presentacion.id}"
                value="${presentacion.nombre}">
            </td>

            <!-- ACCIONES -->
            <td>
              <div class="d-flex justify-content-center gap-1">

                <button
                  class="btn btn-warning btn-sm"
                  id="confirmar_editar${presentacion.id}"
                  onclick="editar_presentacion(${presentacion.id})">
                  <i class="fas fa-edit"></i>
                </button>

                <button
                  class="btn btn-success btn-sm d-none"
                  id="confirmar_presentacion${presentacion.id}" onclick="Corregir_presentacion(${presentacion.id})">
                  <i class="fas fa-check"></i>
                </button>

                <button
                  class="btn btn-danger btn-sm d-none"
                  id="cancelar_presentacion${presentacion.id}"
                  onclick="cancelar_edicion(${presentacion.id})">
                  <i class="fas fa-times"></i>
                </button>

              </div>
            </td>

          </tr>
        `;
      });

      document.getElementById("listas_presentaciones_guardadas").innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}

function cancelar_edicion(id) {
  document.getElementById("presentacion_corregir" + id).classList.add("d-none");
  document.getElementById("confirmar_presentacion" + id).classList.add("d-none");
  document.getElementById("cancelar_presentacion" + id).classList.add("d-none");

  document.getElementById("confirmar_editar" + id).classList.remove("d-none");
  document.getElementById("texto_" + id).classList.remove("d-none");
}


function editar_presentacion(id) {
  document.getElementById("texto_" + id).classList.add("d-none");
  document.getElementById("confirmar_presentacion" + id).classList.remove("d-none");
  document.getElementById("cancelar_presentacion" + id).classList.remove("d-none");
  document.getElementById("presentacion_corregir" + id).classList.remove("d-none");
  document.getElementById("confirmar_editar" + id).classList.add("d-none");
}

function lista_categorias() {
  const url = base_url + "Administracion/lista_categoria_controlador";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {

      const res = JSON.parse(this.responseText);
      let html = "";

      res.forEach(categoria => {
        html += `
          <tr class="align-middle">

            <!-- CATEGORÍA -->
            <td>
              <span id="texto_cat_${categoria.id}">
                ${categoria.nombre}
              </span>

              <input
                type="text"
                class="form-control form-control-sm d-none"
                id="editar_categoria_${categoria.id}"
                value="${categoria.nombre}">
            </td>

            <!-- ACCIONES -->
            <td>
              <div class="d-flex justify-content-center gap-1">

                <button
                  class="btn btn-warning btn-sm"
                  id="editar_boton_cat${categoria.id}"
                  onclick="editar_categoria(${categoria.id})">
                  <i class="fas fa-edit"></i>
                </button>

                <button
                  class="btn btn-success btn-sm d-none"
                  id="categoria_boton${categoria.id}" onclick="Corregir_categoria(${categoria.id})">
                  <i class="fas fa-check"></i>
                </button>

                <button
                  class="btn btn-danger btn-sm d-none"
                  id="boton_cancelar_cat_${categoria.id}"
                  onclick="cancelar_categoria(${categoria.id})">
                  <i class="fas fa-times"></i>
                </button>

              </div>
            </td>

          </tr>
        `;
      });

      document.getElementById("categorias_lista").innerHTML = html;
    }
  };

  http.open("GET", url, true);
  http.send();
}

function editar_categoria(id) {
  document.getElementById("editar_categoria_" + id).classList.remove("d-none");
  document.getElementById("categoria_boton" + id).classList.remove("d-none");
  document.getElementById("boton_cancelar_cat_" + id).classList.remove("d-none");

  document.getElementById("editar_boton_cat" + id).classList.add("d-none");
  document.getElementById("texto_cat_" + id).classList.add("d-none");
}
function cancelar_categoria(id) {
  document.getElementById("editar_categoria_" + id).classList.add("d-none");
  document.getElementById("categoria_boton" + id).classList.add("d-none");
  document.getElementById("boton_cancelar_cat_" + id).classList.add("d-none");

  document.getElementById("editar_boton_cat" + id).classList.remove("d-none");
  document.getElementById("texto_cat_" + id).classList.remove("d-none");
}


function Corregir_presentacion(id_categoria) {
  const presentacion_nueva = document.getElementById("presentacion_corregir" + id_categoria).value.trim();

  // 🔴 Validación
  if (presentacion_nueva === "") {
    Swal.fire(
      "Campo obligatorio",
      "Ingrese un nombre de categoría",
      "warning"
    );
    return; // ⛔ no continúa
  }

  const url = base_url + "Administracion/Cambiando_presentacion/" + id_categoria;
  const http = new XMLHttpRequest();
  const formData = new FormData();

  formData.append("presentacion_nueva", presentacion_nueva);

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      if (res == "ok") {
        Swal.fire(
          "SE MODIFICO LA PRESENTACION",
          "Se realizaron los cambios",
          "success"
        ).then(() => {
       
        listas_presentaciones()
        });
      }
    }
  };

  http.open("POST", url, true);
  http.send(formData);
}


function Corregir_categoria(id_categoria) {
  const nueva_categoria = document.getElementById("editar_categoria_" + id_categoria).value.trim();

  // 🔴 Validación
  if (nueva_categoria === "") {
    Swal.fire(
      "Campo obligatorio",
      "Ingrese un nombre de categoría",
      "warning"
    );
    return; // ⛔ no continúa
  }

  const url = base_url + "Administracion/Cambiando_categoria/" + id_categoria;
  const http = new XMLHttpRequest();
  const formData = new FormData();

  formData.append("nueva_categoria", nueva_categoria);

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);

      if (res == "ok") {
        Swal.fire(
          "SE MODIFICO LA CATEGORIA",
          "Se agregó una nueva categoría",
          "success"
        ).then(() => {
       
          lista_categorias()
        });
      }
    }
  };

  http.open("POST", url, true);
  http.send(formData);
}


function recibir_gastos_detallados() {

    const url = base_url + "Administracion/gastos_detallados/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);

            const contenedor = document.getElementById("gastos_especificados");
            contenedor.innerHTML = "";

            res.forEach(gasto => {

                const li = document.createElement("li");
                li.className = "list-group-item d-flex justify-content-between align-items-center";

                li.innerHTML = `
                    <!-- IZQUIERDA -->
                    <div>
                        <strong>${gasto.nombre}</strong><br>
                        <small class="text-muted">${gasto.detalle || 'Sin detalle'}</small>
                    </div>

                    <!-- DERECHA -->
                    <div class="d-flex align-items-center gap-3">
                        <span class="badge bg-warning rounded-pill">
                            S/ ${parseFloat(gasto.monto).toFixed(2)}
                        </span>

                        <button class="btn btn-sm btn-danger" onclick="generarPDF(${gasto.id})" title="Generar PDF">
                            <i class="fa-solid fa-file-pdf"></i>
                        </button>
                    </div>
                `;

                contenedor.appendChild(li);
            });

        }

    };

    http.open("GET", url, true);
    http.send();
}


function lista_de_compras() {

    const url = base_url + "Administracion/compras_combustibles/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {

        if (this.readyState === 4 && this.status === 200) {

            const res = JSON.parse(this.responseText);

            const contenedor = document.getElementById("detallar_combustibles_compras");
            contenedor.innerHTML = "";

            res.forEach(compra => {

                const li = document.createElement("li");
                li.className = "list-group-item d-flex justify-content-between align-items-center";

                li.innerHTML = `
                    <!-- IZQUIERDA -->
                    <div>
                        <strong>${compra.nombre}</strong><br>
                        <small class="text-muted">
                            ${compra.pago} | ${compra.fecha}
                        </small>
                    </div>

                    <!-- DERECHA -->
                    <div class="d-flex align-items-center gap-3">
                        <span class="badge bg-success rounded-pill">
                            S/ ${parseFloat(compra.total).toFixed(2)}
                        </span>

                        <button class="btn btn-sm btn-danger" onclick="pdf_compra(${compra.id})" title="Generar PDF">
                            <i class="fa-solid fa-file-pdf"></i>
                        </button>
                    </div>
                `;

                contenedor.appendChild(li);
            });

        }

    };

    http.open("GET", url, true);
    http.send();
}


















































































































































































































































































































































function frmCambiarPass(e) {
  e.preventDefault();
  const actual = document.getElementById('clave_actual').value;
  const nueva = document.getElementById('clave_nueva').value;
  const confirmar = document.getElementById('confirmar_clave').value;
  if (actual == '' || nueva == '' || confirmar == '') {
    alertas('HAY CAMPOS VACIOS', 'warning');
  } else {
    const url = base_url + "usuarios/cambiarPass";
    const frm = document.getElementById("frmCambiarPass");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "CONTRASEÑA ACTUALIZADA",
            "Tu contraseña ha sido actualizada exitosamente.",
            "success"
          ).then(() => {
            frm.reset();
            $("#cambiarPass").modal("toggle");
            location.reload();
             });
        } else {
          alertas(res.msg, res.icono);
        }
      }
    };
  }
}

//actualizar





function btnIngresrProductos(id, event) {
  if (event.keyCode === 13) {
      const ingresarProductos = document.getElementById('ingrer_' + id).value;
      console.log(ingresarProductos);
      const url = base_url + "Productos/ReingresarProducs/" + id;
      const http = new XMLHttpRequest();
      http.open("POST", url, true);
      http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http.send("ingrer=" + ingresarProductos);

      http.onreadystatechange = function () {
          if (this.readyState == 4 && this.status == 200) {
              const res = JSON.parse(this.responseText);
              console.log(this.responseText);
              if (res === 'ok') {
                  Swal.fire(
                      'PRODUCTOS AGREGADOS',
                      'El producto fue agregado al stock',
                      'success'
                  ).then(() => {
                    tblProductos.ajax.reload()

                  });
              } else {
                  Swal.fire({
                      icon: 'error',
                      title: 'ALGO PASÓ',
                      text: 'Comuníquese con el desarrollador',
                      footer: '901219565',
                  });
              }
          }
      };
  }
}


// actualizar

function frmUsuario() {
  document.getElementById("claves").style.display = "block";
  document.getElementById("title").innerHTML = "REGISTRAR UN NUEVO USUARIO";

  document.getElementById("btnaccion").innerHTML = "CONFIRMAR";
  document.getElementById("frmUsuario").reset();

  $("#nuevo_usuario").modal("show");
  document.getElementById("id").value = "";
}


function btnEditarUser(id) {
  document.getElementById("title").innerHTML = "EDITAR USUARIO";
  document.getElementById("btnaccion").innerHTML = "MODIFICAR";
  const url = base_url + "usuarios/editar/" + id;

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      res = JSON.parse(this.responseText);
      document.getElementById("id").value = res.id;
      document.getElementById("usuario").value = res.usuario;
      document.getElementById("nombre").value = res.nombre;
      document.getElementById("rol").value = res.id_rol;
      document.getElementById("caja").value = res.id_caj;
      document.getElementById("claves").style.display = "none";

      $("#nuevo_usuario").modal("show");
    }
  };
}
function btnEliminarUser(id) {
  Swal.fire({
    title: "ELIMINAR USUARIO",
    text: "Estas seguro de eliminar al usuaro",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ELIMINAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "usuarios/eliminar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire("ELIMINADO", "El usuario ha sido eliminado", "success");
            tblusuarios.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algunos de los campos no cumplen ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}
function btnReningresarUser(id) {
  Swal.fire({
    title: "ACTIVAR USUARIO",
    text: "Estas seguro de reingresar al usuaro",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ACTIVAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "usuarios/reingresar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire("USUARIO ACTIVADO", "El usuario due activado", "success");
            tblusuarios.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algo fallo ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}

//formulario del cliente

function frmCliente() {
  document.getElementById("title").innerHTML = "NUEVO CLIENTE";
  document.getElementById("btnaccion").innerHTML = "REGISTRAR";
  document.getElementById("frmCliente").reset();
  $("#nuevo_cliente").modal("show");
  document.getElementById("id").value = "";
}

function registrarCli(e) {
  e.preventDefault();
  const dni = document.getElementById("dni");
  const nombre = document.getElementById("nombre");
  const telefono = document.getElementById("telefono");
  const direccion = document.getElementById("direccion");

  if (
    dni.value == "" ||
    nombre.value == "" ||
    telefono.value == "" ||
    direccion.value == ""
  ) {
    Swal.fire("OOPS", "los campos estan vacios", "question");
  } else {
    const url = base_url + "Clientes/registrar";
    const frm = document.getElementById("frmCliente");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "UN CLIENTE NUEVO",
            "has registrado un nuevo cliente",
            "success"
          );
          frm.reset();
          $("#nuevo_cliente").modal("hide");
          tblClientes.ajax.reload();
        } else if (res == "modificado") {
          Swal.fire(
            "CLIENTE ACTUALIZADO",
            "el cliente fue actuaalizado exitosamente",
            "success"
          );
          $("#nuevo_cliente").modal("hide");
          tblClientes.ajax.reload();
        } else {
          Swal.fire({
            icon: "error",
            title: res,
            text: "",
            footer: "",
          });
        }
      }
    };
  }
}
function btnEditarCli(id) {
  document.getElementById("title").innerHTML = "EDITAR CLIENTE";
  document.getElementById("btnaccion").innerHTML = "MODIFICAR";
  const url = base_url + "clientes/editar/" + id;

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      console.log(this.responseText);
      const res = JSON.parse(this.responseText);
      document.getElementById("id").value = res.id;
      document.getElementById("dni").value = res.dni;
      document.getElementById("nombre").value = res.nombre;
      document.getElementById("telefono").value = res.telefono;
      document.getElementById("direccion").value = res.direccion;
      $("#nuevo_cliente").modal("show");
    }
  };
}

function btnEliminarCli(id) {
  Swal.fire({
    title: "ELIMINAR CLIENTE",
    text: "Estas seguro de eliminar al Cliente",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ELIMINAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "clientes/eliminar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire(
              "ELIMINADO",
              "El cliente fue suspendido de su cartera",
              "success"
            );
            tblClientes.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algunos de los campos no cumplen ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}
function btnReningresarCli(id) {
  Swal.fire({
    title: "ACTIVAR CLIENTE",
    text: "Estas seguro de activar al cliente",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ACTIVAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "clientes/reingresar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire("CLIENTE ACTIVADO", "El cliente fue activado", "success");
            tblClientes.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algo fallo ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}

// form cajas

function frmCaja() {
  document.getElementById("title").innerHTML = "NUEVA CAJA";
  document.getElementById("btnaccion").innerHTML = "REGISTRAR";
  document.getElementById("frmCaja").reset();
  $("#nuevo_caja").modal("show");
  document.getElementById("id").value = "";
}

function registrarCaj(e) {
  e.preventDefault();
  const caja = document.getElementById("caja");

  if (caja.value == "") {
    Swal.fire(
      "OOPS CAJA SIN NOMBRE",
      "La caja deve tener un nombre",
      "question"
    );
  } else {
    const url = base_url + "Caja/registrar";
    const frm = document.getElementById("frmCaja");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState === 4 && this.status === 200) {
          console.log(this.responseText);
        const res = JSON.parse(this.responseText);
        if (res === "si") {
          Swal.fire(
            "HAS REGISTRADO UNA CAJA",
            "has registrado una CAJA nueva",
            "success"
          );
          frm.reset();
          $("#nuevo_caja").modal("hide");
          tblCaja.ajax.reload();
        } else if (res == "modificado") {
          Swal.fire(
            "CLIENTE ACTUALIZADO",
            "el cliente fue actuaalizado exitosamente",
            "success"
          );
          $("#nuevo_caja").modal("hide");
          tblCaja.ajax.reload();
        } else {
          Swal.fire({
            icon: "error",
            title: res,
            text: "",
            footer: "",
          });
        }
      }
    };
  }
}
function btnEditarCaja(id) {
  document.getElementById("title").innerHTML = "NOMBRE DE LA CAJA";
  document.getElementById("btnaccion").innerHTML = "MODIFICAR";
  const url = base_url + "Caja/editar/" + id;

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      document.getElementById("id").value = res.id;
      document.getElementById("caja").value = res.caja;

      $("#nuevo_caja").modal("show");
    }
  };
}

function EliminarCaja(id) {
  Swal.fire({
    title: "SUSPENDER CAJA",
    text: "Estas seguro que deseas suspender la caja",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ELIMINAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Caja/eliminar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire(
              "CAJA SUSPENDIDA",
              "La Caja fue suspendida temporalmente",
              "success"
            );
            tblCaja.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algunos de los campos no cumplen ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}

function btnReningresarCaja(id) {
  Swal.fire({
    title: "ACTIVAR CLIENTE",
    text: "Estas seguro de activar al cliente",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ACTIVAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Caja/reingresar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire("CLIENTE ACTIVADO", "El cliente fue activado", "success");
            tblCaja.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algo fallo ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}

//frm categoria

function frmCategoria() {
  document.getElementById("title").innerHTML = "NUEVA CATEGORIA";
  document.getElementById("btnaccion").innerHTML = "REGISTRAR";
  document.getElementById("frmCategoria").reset();
  $("#nuevo_categoria").modal("show");
  document.getElementById("id").value = "";
}

function registrarCategoria(e) {
  e.preventDefault();
  const nombre = document.getElementById("nombre");

  if (nombre.value == "") {
    Swal.fire(
      "OOPS CAJA SIN NOMBRE",
      "La caja deve tener un nombre",
      "question"
    );
  } else {
    const url = base_url + "Categoria/registrar";
    const frm = document.getElementById("frmCategoria");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "NUEVA CATEGORIA",
            "la categoria nueva fue registrada",
            "success"
          );
          frm.reset();
          $("#nuevo_categoria").modal("hide");
          tblCategoria.ajax.reload();
        } else if (res == "modificado") {
          Swal.fire(
            "CATEGORIA ACTUALIZADA",
            "la categoria fue actualizado",
            "success"
          );
          $("#nuevo_categoria").modal("hide");
          tblCategoria.ajax.reload();
        } else {
          Swal.fire({
            icon: "error",
            title: res,
            text: "",
            footer: "",
          });
        }
      }
    };
  }
}



function frm_tipos_ventas() {
  $('#nueva_tipo_venta').modal('show')
}

function registrar_tipos_pagos(e) {
  e.preventDefault();
  const nombre = document.getElementById("nombre_tipo_venta");

  if (nombre.value == "") {
    Swal.fire(
      "OOPS CAJA SIN NOMBRE",
      "La caja deve tener un nombre",
      "question"
    );
  } else {
    const url = base_url + "Categoria/registrar_formas_de_ventas";
    const frm = document.getElementById("frm_tipos_ventas");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "NUEVA FORMA DE VENTA",
            "Has registrado una nueva forma de venta",
            "success"
          );
          frm.reset();
          $("#nueva_tipo_venta").modal("hide");
          tbl_tipos_precios.ajax.reload();
        } else if (res == "modificado") {
          Swal.fire(
            "CATEGORIA ACTUALIZADA",
            "la categoria fue actualizado",
            "success"
          );
          $("#nueva_tipo_venta").modal("hide");
          tbl_tipos_precios.ajax.reload();
        } else {
          Swal.fire({
            icon: "error",
            title: res,
            text: "",
            footer: "",
          });
        }
      }
    };
  }
}



function editar_forma_de_pago(id) {
  document.getElementById("tituloss").innerHTML = "EDITAR TIPO DE VENTA";
  document.getElementById("botons_confir").innerHTML = "MODIFICAR";
  const url = base_url + "Categoria/corregir_tipo_pago/" + id;

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      document.getElementById("id_tipo_pago").value = res.id;
      document.getElementById("nombre_tipo_venta").value = res.tipo;

      $("#nueva_tipo_venta").modal("show");
    }
  };
}

function datos_tipos_compras() {
  const url = base_url + "Productos/traer_tipos_compras/";
  const http = new XMLHttpRequest();
  let html_tipo = ''; 

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      res.forEach(tipo => {
        html_tipo += ` 
        <div class="form group mb-1">
            <button class="btn btn-secondary" type="button" onclick="agregar_tipo_pago(${tipo.id})">${tipo.tipo}</button>
        </div>
        `;
      });

      const traer_tipos_pagos_element = document.getElementById('traer_tipos_pagos');
      if (traer_tipos_pagos_element) {
        traer_tipos_pagos_element.innerHTML = html_tipo;
      } else {
        console.error('El elemento con ID "traer_tipos_pagos" no fue encontrado.');
      }
    }
  };

  http.open("GET", url, true);
  http.send();
}


function consultar_cantidades_asignadas(id_producto) {
  const url = base_url + "Productos/precios_asignados/" + id_producto;
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let html_precios = "";
      res.forEach((precios, index) => {
        html_precios += `
          <div class="talign-items-center card col-md-12 mb-1">
            <label for="">${precios.tipo}</label>
            <div class="row col-md-12">
              <div class="col-md-5">
                <label for="">cantidad</label>
                <input type="hidden" id="id_config_mayorista_${index}" name="id_config_mayorista" value="${precios.id}">
                <input type="hidden" id="id_producs_config" name="id_config_mayorista" value="${precios.id_producto}">
                <input id="cantidad_mayores_${index}" value="${precios.cantidad}" class="form-control" type="text" name="cantidad_mayores" placeholder="Ingrese una cantidad">
              </div>
              <div class="col-md-5">
                <label for="">precio</label>
                <input id="precios_mayores_${index}" value="${precios.precio}" class="form-control" type="text" name="precios_mayores" placeholder="Ingrese un precio">
              </div>
            </div>
          </div>`;
      });
      document.getElementById('lista_precio_configurados').innerHTML = html_precios;
    }
  };

  http.open("GET", url, true);
  http.send();
}



function registrar_configuracion() {
  const url = base_url + "Productos/registrar_configuracion/";
  const http = new XMLHttpRequest();
  const formData = new FormData();
  const cantidad_conjuntos = document.querySelectorAll('[id^="id_config_mayorista_"]').length;
  for (let i = 0; i < cantidad_conjuntos; i++) {
    const id_producto_mayorista = document.getElementById(`id_config_mayorista_${i}`).value;
    const cantidad_mayores = document.getElementById(`cantidad_mayores_${i}`).value;
    const precios_mayores = document.getElementById(`precios_mayores_${i}`).value;
    const id_producs_config = document.getElementById(`id_producs_config`).value;

    formData.append(`id_producto_mayorista_${i}`, id_producto_mayorista);
    formData.append(`cantidad_mayores_${i}`, cantidad_mayores);
    formData.append(`precios_mayores_${i}`, precios_mayores);
    formData.append(`id_producs_config`, id_producs_config);
  }

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
    }
  };

  http.open("POST", url, true);
  http.send(formData);
}








function agregar_tipo_pago(id) {
  const frm = document.getElementById('frmProducto');
  const id_producto = document.getElementById('id').value
  const url = base_url + "Productos/verificar_productos_asignados/" + id;
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      if (res == "ok") {
        Swal.fire({
          icon: "success",
          title: "ASIGNADO",
          text: "se a asignado un nuevo tipo de venta",
      }).then(() => {
        consultar_cantidades_asignadas(id_producto)
      });
      }else{
        Swal.fire({
          icon: "warning",
          title: "LO SENTIMOS",
          text: res,
      }).then(() => {
       
      });
      }
 

    }
  };

  http.open("POST", url, true);
  http.send(new FormData(frm));
}




function btnEditarCategoria(id) {
  document.getElementById("title").innerHTML = "NOMBRE DE LA CATEGORIA";
  document.getElementById("btnaccion").innerHTML = "MODIFICAR";
  const url = base_url + "Categoria/editar/" + id;

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      document.getElementById("id").value = res.id;
      document.getElementById("nombre").value = res.nombre;

      $("#nuevo_categoria").modal("show");
    }
  };
}

function EliminarCategoria(id) {
  Swal.fire({
    title: "SUSPENDER CAJA",
    text: "Estas seguro que deseas suspender la caja",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ELIMINAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Categoria/eliminar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire(
              "CAJA SUSPENDIDA",
              "La Caja fue suspendida temporalmente",
              "success"
            );
            tblCategoria.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algunos de los campos no cumplen ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}

function btnReningresarCategoria(id) {
  Swal.fire({
    title: "ACTIVAR CLIENTE",
    text: "Estas seguro de activar al cliente",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ACTIVAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Categoria/reingresar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire("CLIENTE ACTIVADO", "El cliente fue activado", "success");
            tblCategoria.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algo fallo ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}
//frm clacificaion o tipos de productos

function frmMedidas() {
  document.getElementById("title").innerHTML = "NUEVO CLIENTE";
  document.getElementById("btnaccion").innerHTML = "REGISTRAR";
  document.getElementById("frmMedidas").reset();
  $("#nuevo_Medidas").modal("show");
  document.getElementById("id").value = "";
}

function registrarMedidas(e) {
  e.preventDefault();
  const nombre = document.getElementById("nombre");
  const nombre_corto = document.getElementById("nombre_corto");
  if (nombre.value == "" || nombre_corto.value == "") {
    Swal.fire("OOPS", "los campos estan vacios", "question");
  } else {
    const url = base_url + "Medidas/registrar";
    const frm = document.getElementById("frmMedidas");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        console.log(this.responseText);
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "CLACIFICACION NUEVA",
            "has registrado un nuevo cliente",
            "success"
          );
          frm.reset();
          $("#nuevo_Medidas").modal("hide");
          tblMedidas.ajax.reload();
        } else if (res == "modificado") {
          Swal.fire(
            "CLIENTE ACTUALIZADO",
            "el cliente fue actuaalizado exitosamente",
            "success"
          );
          $("#nuevo_Medidas").modal("hide");
          tblMedidas.ajax.reload();
        } else {
          Swal.fire({
            icon: "error",
            title: res,
            text: "",
            footer: "",
          });
        }
      }
    };
  }
}

function editarmedida(id) {
  document.getElementById("title").innerHTML = "NOMBRE DE LA CLASIFICACION";
  document.getElementById("btnaccion").innerHTML = "MODIFICAR";
  const url = base_url + "Medidas/editar/" + id;
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      document.getElementById("id").value = res.id;
      document.getElementById("nombre").value = res.nombre;
      document.getElementById("nombre_corto").value = res.nombre_corto;
      $("#nuevo_Medidas").modal("show");
    }
  };
}

function btnEliminarMedidas(id) {
  Swal.fire({
    title: "ELIMINAR CLIENTE",
    text: "Estas seguro de eliminar al Cliente",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ELIMINAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Medidas/eliminar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire(
              "ELIMINADO",
              "El cliente fue suspendido de su cartera",
              "success"
            );
            tblMedidas.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algunos de los campos no cumplen ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}
function btnReningresarMedidas(id) {
  Swal.fire({
    title: "ACTIVAR CLIENTE",
    text: "Estas seguro de activar al cliente",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ACTIVAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Medidas/reingresar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire("CLIENTE ACTIVADO", "El cliente fue activado", "success");
            tblMedidas.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algo fallo ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}

//productos

function frmProducto() {
  document.getElementById('quitar_precios').classList.add('d-none')
  document.getElementById('quitar_tipos').classList.add('d-none')
  document.getElementById("title").innerHTML = "REGISTRAR UN NUEVO PRODUCTO";
  document.getElementById("btnaccion").innerHTML = "CONFIRMAR";
  document.getElementById("frmProducto").reset();
  document.getElementById("id").value = "";
  $("#nuevo_producto").modal("show");
  deleteImg();
}

function registrarProducto(e) {
  e.preventDefault();
  const codigo = document.getElementById("codigo");
  const nombre = document.getElementById("nombre");
  const precio_compra = document.getElementById("precio_compra");
  const precio_venta = document.getElementById("precio_venta");
  const id_medida = document.getElementById("medida");
  const id_cat = document.getElementById("categoria");

  if (
    codigo.value == "" ||
    nombre.value == "" ||
    precio_compra.value == "" ||
    precio_venta.value == ""
  ) {
    Swal.fire({
      icon: "error",
      title: "HAY CAMPOS LIBRES",
      text: "No has llenado todos los campos",
      footer: "",
    });
  } else {
    const url = base_url + "Productos/registrar";
    const frm = document.getElementById("frmProducto");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "PRODUCTO REGISTRADO",
            "Se ha registrado un nuevo producto",
            "success"
          );

          frm.reset();
          $("#nuevo_producto").modal("hide");
          tblProductos.ajax.reload();
        } else if (res == "modificado") {
          Swal.fire(
            "PRODUCTO ACTUALIZADO",
            "El producto fue actualizado exitosamente",
            "success"
          );

          $("#nuevo_producto").modal("hide");
          tblProductos.ajax.reload();
        } else {
          Swal.fire({
            icon: "error",
            title: "Error",
            text: res,
            footer: "",
          });
        }
      }
    };
  }
}

function btnEditarPro(id) {
  document.getElementById('quitar_precios').classList.remove('d-none')
  document.getElementById('quitar_tipos').classList.remove('d-none')
  document.getElementById("title").innerHTML = "ACTUALIZAR PRODUCTOS";
  document.getElementById("btnaccion").innerHTML = "MODIFICAR";
  const url = base_url + "Productos/editar/" + id;

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      console.log(this.responseText);
      const res = JSON.parse(this.responseText);
      document.getElementById("id").value = res.id;
      document.getElementById("codigo").value = res.codigo;
      document.getElementById("nombre").value = res.descripcion;
      document.getElementById("precio_compra").value = res.precio_compra;
      document.getElementById("precio_venta").value = res.precio_venta;
      document.getElementById("medida").value = res.id_medida;
      document.getElementById("categoria").value = res.id_categoria;
      document.getElementById("img-preview").src =
        base_url + "assets/img/" + res.foto;
      document.getElementById(
        "icon-cerrar"
      ).innerHTML = `<button class="btn btn-danger" onclick="deleteImg()"><i class="fa-regular fa-circle-xmark"></i></button>`;
      document.getElementById("icon-image").classList.add("d-none");
      document.getElementById("foto_actual").value = res.foto;
      $("#nuevo_producto").modal("show");
      consultar_cantidades_asignadas(id)
    }
  };
}
function btnEliminarPro(id) {
  Swal.fire({
    title: "ELIMINAR EL PRODUCTO",
    text: "Estas seguro de eliminar el producto",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ELIMINAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Productos/eliminar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire(
              " PRODUCTO ELIMINADO",
              "El usuario ha sido eliminado",
              "success"
            );
            tblProductos.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algunos de los campos no cumplen ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}
function btnReningresarPro(id) {
  Swal.fire({
    title: "ACTIVAR PRODUCTO",
    text: "Estas seguro de reingresar el producto",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "ACTIVAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Productos/reingresar/" + id;

      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
          if (res == "ok") {
            Swal.fire("PRODUCTO ACTIVADO", "el producto fue activado", "success");
            tblProductos.ajax.reload();
          } else {
            Swal.fire({
              icon: "error",
              title: "error algo fallo ",
              text: "",
              footer: "",
            });
          }
        }
      };
    }
  });
}


//ventas
function buscarCodigo(e) {
  e.preventDefault();
  if (e.which == 13) {
    const cod = document.getElementById("codigo").value;
    const url = base_url + "Compras/buscarCodigo/" + cod;

    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res) {
          document.getElementById("nombre").value = res.descripcion;
          document.getElementById("precio").value = res.precio_compra;
          document.getElementById("id").value = res.id;
          document.getElementById("cantidad").removeAttribute('disabled')
          document.getElementById("cantidad").focus;
        } else {
          Swal.fire("OOPSS?", "El codigo no existe?", "question");
          document.getElementById("codigo").value = "";
          document.getElementById("codigo").focus();
        }
      }
    };
  }
}


function buscarCodigoVenta(e) {
  e.preventDefault();
  if (e.which == 13) {
    const cod = document.getElementById("codigo").value;
    const url = base_url + "Compras/buscarCodigo/" + cod;

    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res) {
          document.getElementById("nombre").value = res.descripcion;
          document.getElementById("precio").value = res.precio_venta;
          document.getElementById("id").value = res.id;
          document.getElementById("cantidad").removeAttribute('disabled')
          document.getElementById("cantidad").focus;
        } else {
          Swal.fire("OOPSS?", "El codigo no existe?", "question");
          document.getElementById("codigo").value = "";
          document.getElementById("codigo").focus();
        }
      }
    };
  }
}





function calcularPrecio(e) {
  e.preventDefault();
  const cant = parseFloat(document.getElementById("cantidad").value);
  const precio = parseFloat(document.getElementById("precio").value);
  const subTotal = precio * cant;
  document.getElementById("sub_total").value = subTotal.toFixed(2);
  if (e.which == 13) {
    if (cant > 0) {
      const url = base_url + "Compras/ingresar/";
      const http = new XMLHttpRequest();
      const frm = document.getElementById("frmCompra");
      http.open("POST", url, true);
      http.send(new FormData(frm));
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById('cantidad').setAttribute('disabled','disabled');
          const res = JSON.parse(this.responseText);
          console.log(this.responseText);
          if (res == "ok") {
            frm.reset();
            cargarDetalle();
          }else if (res == 'modificado') {
            frm.reset();
            cargarDetalle();
          } else {
            
          }
        }
      }
    }
  }
 }

 function calcularPrecioVenta(e) {
  e.preventDefault();
  const cant = parseFloat(document.getElementById("cantidad").value);
  const precio = parseFloat(document.getElementById("precio").value);
  const subTotal = precio * cant;
  document.getElementById("sub_total").value = subTotal.toFixed(2);
  
  if (e.which == 13 && cant > 0) {
      const url = base_url + "Compras/ingresarVenta/";
      const http = new XMLHttpRequest();
      const frm = document.getElementById("frmVenta");
      http.open("POST", url, true);
      http.send(new FormData(frm));
      
      http.onreadystatechange = function () {
          if (this.readyState == 4 && this.status == 200) {
              const res = JSON.parse(this.responseText);
              console.log(res);
              if (res == "ok") {
                  frm.reset();
                  cargarDetalleVenta();
              } else if (res == 'modificado') {
                  frm.reset();
                  cargarDetalleVenta();
              } else if (res == 'PRODUCTO AGOTADO') {
                Swal.fire({
                  icon: 'warning',
                  title: 'PRODUCTO AGOTADO',
                  text: 'verifique su inventario',
                  footer: '',
                })
              } else if (res == 'STOCK NO DISPONIBLE') {
                Swal.fire({
                  icon: 'warning',
                  title: 'STOCK NO DISPONIBLE',
                  text: 'verifique su inventario',
                  footer: '',
                })
              }
              document.getElementById('cantidad').setAttribute('disabled', 'disabled');
          }
      }
  }
}





 function cargarDetalle() {
  const url = base_url + "Compras/listar/detalle";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let html = '';
      res.detalle.forEach(row => {
        html += `<tr>
          <td>${row['id']}</td>
          <td>${row['descripcion']}</td>
          <td>${row['cantidad']}</td>
          <td>${row['precio']}</td>
          <td>${row['sub_total']}</td>
          <td><button class="btn btn-danger" type="button" onclick="deleteDetalle(${row['id']}, 1)"><i class="fa-regular fa-circle-xmark fa-flip-vertical" style="color: #fafafa;"></i></button></td>
        </tr>`;
      });
      document.getElementById("tblDetalle").innerHTML = html;

      if (res.total_pagar && res.total_pagar.total) {
        document.getElementById("total").value = res.total_pagar.total;
      } else {
      }
      
    }
  }
}



function deleteDetalle(id, accion){
  let url;
  if (accion==1){
  url =base_url+"Compras/delete/"+id;
  }else{
  url =base_url+"Compras/deleteVenta/"+id;

  }
 
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
     if (res=='ok') {
      Swal.fire(
        'PRODUCTO ELIMINADO',
        'el producto fue eliminado',
        'success'
      );
      
  if (accion==1){
      cargarDetalle();
    }else{
      cargarDetalleVenta();
    }
      
      

     }else{
      Swal.fire({
        icon: 'error',
        title: 'ALGO PASO',
        text: 'comuniquese con el desarrollador',
        footer: '901219565',
      })
     }
     
    }
  }
}

//ACTUALIZAR
function cargarDetalleVenta() {
  const url = base_url + "Compras/listar/detalle_temp";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let html = '';
      res.detalle.forEach(row => {
        html += `<tr>
          <td>${row['id']}</td>
          <td>${row['descripcion']}</td>
          <td><input type="number" class="form-control cantidad_input" oninput="validarCantidad(this)" data-id="${row['id']}" value="${row['cantidad']}" onkeyup="Actualizar_cantidad(this)"></td>
          <td>${row['medida_nombre_corto']}</td>
          <td><input type="text" class="form-control" placeholder="descuento" onkeyup="calcularDescuento(event, ${row['id']})"></td>
          <td>${row['descuento']}</td>
          <td>${row['precio']}</td>
          <td>${row['sub_total']}</td>
          <td><button class="btn btn-danger" type="button" onclick="deleteDetalle(${row['id']},2)"><i class="fa-regular fa-circle-xmark fa-flip-vertical" style="color: #fafafa;"></i></button></td>
        </tr>`;
      });
      document.getElementById("tblDetalleVenta").innerHTML = html;

      if (res.total_pagar && res.total_pagar.total) {
        document.getElementById("total").value = res.total_pagar.total;
      } else {
        document.getElementById("total").value = "No disponible";
      }
    }
  }
}

function Actualizar_cantidad(input) {
  const id_producto = input.getAttribute('data-id');
  const cantidad = input.value;
  const url = base_url + "Compras/actualizar_cantidad/" + id_producto;
  const http = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('cantidad', cantidad);
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
     if (res == "ok") {
      cargarDetalleVenta()
     }else{
      Swal.fire({
        title: "ALGO PASO",
        text: res,
        icon: "question"
      });
     }
    }
  };
  http.open("POST", url, true);
  http.send(formData);
}

  
  



function validarCantidad(input) {
  var cantidad = parseFloat(input.value);
  if (cantidad < 0) {
      input.value = 0;
  }
}



let id_compra;

function procesar(accion) {
  let titulo, texto, accionLabel, url;

  if (accion == 1) {
    // Compra
    titulo = "CONFIRMAR COMPRA";
    texto = "¿Deseas confirmar la compra?";
    accionLabel = "COMPRA GENERADA";
    url = base_url + "Compras/registrarCompra/";
  } else {
    // Venta
    titulo = "CONFIRMAR VENTA";
    texto = "¿Deseas confirmar la venta?";
    accionLabel = "VENTA REALIZADA";
    const id_cliente = document.getElementById('cliente').value;
    const id_documentos = document.getElementById('documentos').value;
    const resultadoSunat = document.querySelector('[data-clienteFact-id]');
    const id_cliente_fac = resultadoSunat ? resultadoSunat.getAttribute('data-clienteFact-id') : null;
    const resultadoReniec = document.querySelector('[data-cliente-id]');
    const id_boleta = resultadoReniec ? resultadoReniec.getAttribute('data-cliente-id') : null;
    const monto = document.getElementById('monto').value;

    url = base_url + "Compras/registrarVenta/?id_cliente=" + id_cliente + "&id_documentos=" + id_documentos + "&id_cliente_fac=" + id_cliente_fac + "&id_boleta=" + id_boleta + "&monto=" + monto;
    
  }
  
  Swal.fire({
    title: titulo,
    text: texto,
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "CONFIRMAR",
    cancelButtonText: "CANCELAR",
  }).then((result) => {
    
    if (result.isConfirmed) {
      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4) {
          if (this.status == 200) {
            const res = JSON.parse(this.responseText);
            console.log(res);
            if (res.msg == "ok") {
              generarXml(res.id_venta);
              registrarCompraTotal(res.id_compra, res.total);
// ejecutar el xml
              Swal.fire({
                icon: 'success',
                title: accionLabel,
                text: 'La ' + accionLabel.toLowerCase() + ' se ha registrado exitosamente.',
                footer: '<button class="btn btn-primary" type="button"  onclick="imprimir(' + res.id_compra + ',' + res.id_venta + ')">IMPRIMIR</button>'
              }).then(() => {
                location.reload(); 
              });
            } else {
              Swal.fire({
                icon: "warning",
                title: "APERTURE LA CAJA",
                text: "Hubo un problema al registrar, por favor " + (accion == 1 ? "compra" : "apertura la caja"),
            }).then((result) => {
                if (result.isConfirmed) {   //combiar el url al instalacion 
                  window.location.href = base_url + "VentaRapida";
                }
            });
            
            }
          } else {
            Swal.fire({
              icon: "error",
              title: "Error",
              text: "Hubo un problema al realizar la solicitud al servidor",
            });
          }
        }
      };
    }
  });
}





function mostrarDocumentos() {
  const url = base_url + "Compras/doumentosmostrr";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (http.readyState == 4 && http.status == 200) {
      const res = JSON.parse(http.responseText);

      // Obtén el elemento select
      const documentosSelect = document.getElementById("documentos");

      // Limpia el select
      documentosSelect.innerHTML = "";

      // Recorre los datos y agrega opciones al select
      res.forEach(function (documento) {
        const option = document.createElement("option");
        option.value = documento.id;
        option.text = documento.documento;
        documentosSelect.appendChild(option);
      });
    }
  };
}



function mostrarOcultarCampos() {
  const clienteSelect = document.getElementById('cliente');
  const montoInput = document.getElementById('monto');
  const vueltoLabel = document.getElementById('vueltoLabel');
  const vueltoInput = document.getElementById('vuelto');

  if (clienteSelect.value >= 2) {
      montoInput.style.display = 'none';
      vueltoLabel.style.display = 'none';
      vueltoInput.style.display = 'none';
  } else {
      montoInput.style.display = 'block';
      vueltoLabel.style.display = 'block';
      vueltoInput.style.display = 'block';
  }
}


function registrarCompraTotal(idCompra, total) {
  const http = new XMLHttpRequest();
  const url = base_url + "Compras/registrarCompraTotal/" + idCompra + "/" + total;
  http.open("GET", url, true);
  http.send();
}


function generarXml(id_venta) {
  const http = new XMLHttpRequest();
  const url = base_url + "Compras/CrearXMLFactura/" + id_venta;
  http.open("GET", url, true);
  http.onreadystatechange = function () {
    if (http.readyState == 4 && http.status == 200) {
      
    }
  };
  http.send();
}



function imprimir(id_compra, id_venta) {
  let ruta;
  if (id_compra !== undefined) {
    ruta = base_url + 'Compras/generarPdf/' + id_compra;
  } else if (id_venta !== undefined) {
    ruta = base_url + 'Compras/generarPdfVenta/' + id_venta;
  } else {
    // Manejar caso de error o ID no definida
  }

  if (ruta) {
    const nuevaVentana = window.open(ruta, '_blank');
    setTimeout(function () {
      if (nuevaVentana !== null) {
        nuevaVentana.print();
      } else {
        alert('Error al abrir la ventana de impresión. Asegúrate de que tu navegador permita ventanas emergentes.');
      }
    }, 1000);
  }
}

function calcularDescuento(e, id) {
  e.preventDefault();
  if (e.target=='') {
    alertas('ingrese un monto', 'warning');
  }else{
    if (e.which== 13) {
      const url =base_url+"Compras/calcularDescuento/"+id + "/" + e.target.value;
      const http = new XMLHttpRequest();
      http.open("GET", url, true);
      http.send();
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          const res = JSON.parse(this.responseText);
         
         cargarDetalleVenta()
         
        }
      }
    }
  }
}


function DniSunat() {
  const dniInput = document.getElementById("BoletaDni");
  const nombresApellidosInput = document.getElementById("BolotNombre");
  const dni = dniInput.value;

  if (event.keyCode === 13 && dni.trim() !== "") {
      const url = base_url + "Compras/dniSunat/";
      const http = new XMLHttpRequest();
      http.open("POST", url, true);

      http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http.send("BoletaDni=" + dni);

      http.onreadystatechange = function () {
          if (this.readyState == 4 && this.status == 200) {
              const res = JSON.parse(this.responseText);
              if (res.nombres) {
                  nombresApellidosInput.value = res.nombres + " " + res.apellidoPaterno + " " + res.apellidoMaterno;
              } else {
                  // Muestra un mensaje adecuado al usuario
                  nombresApellidosInput.value = "DNI no encontrado";
                  direccionInput.value = "";
                  telefonoInput.value = "";
              }
          }
      }
  }
}



function RucSunat() {
  const RucInput = document.getElementById("RucCliFa");
  const RucEmpresaInput = document.getElementById("RazonCliFa");
  const direccionInput = document.getElementById("direccionCliFa");
  const telefonoInput = document.getElementById("telefonoCliFa");
  const ruc = RucInput.value;

  if (event.keyCode === 13 && ruc.trim() !== "") {
      const url = base_url + "Compras/RucSunat/";
      const http = new XMLHttpRequest();
      http.open("POST", url, true);

      http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http.send("RucCliFa=" + ruc);

      http.onreadystatechange = function () {
          if (this.readyState == 4 && this.status == 200) {
              try {
                  const res = JSON.parse(this.responseText);
                  if (res.razonSocial) {
                      RucEmpresaInput.value = res.razonSocial;
                      direccionInput.value = res.direccion;
                      telefonoInput.value = res.telefono;
                  } else {
                      // Muestra un mensaje adecuado al usuario
                      RucEmpresaInput.value = "RUC no encontrado";
                      direccionInput.value = "";
                      telefonoInput.value = "";
                  }
              } catch (error) {
                  // Muestra un mensaje de error en caso de respuesta no válida
                  RucEmpresaInput.value = "Respuesta no válida";
                  direccionInput.value = "";
                  telefonoInput.value = "";
              }
          }
      };
  }
}






function modificarEmpresa() {
  const frm = document.getElementById('frmEmpresa');
  const url = base_url + "Administracion/modificar/";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);
  http.send(new FormData(frm));
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res =JSON.parse(this.responseText);
      if (res == "ok") {
        Swal.fire(
          'DATOS MODIFICADO',
          'se a modificado los datos de la empresa',
          'success'
        )
      }else{
        alert("aglo paso");
      }
      }
    }
  };
  function alertas(mensaje, icono, res) {
    Swal.fire({
      icon: icono,
      title: mensaje,
      text: res,
      footer: "",
    });



  }

  function reportesStockagotado() {
    const url = base_url + "Administracion/reporteStock/";
    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        let nombre = [];
        let cantidad = [];
        let medida = []; // Agregado para la medida
        let backgroundColors = [];
  
        for (let i = 0; i < res.length; i++) {
          // Combina la descripción y la medida
          let etiqueta = `${res[i]['descripcion']} (${res[i]['nombre_corto']})`;
          nombre.push(etiqueta);
          
          cantidad.push(res[i]['cantidad']);
          medida.push(res[i]['nombre_corto']);
  
          const backgroundColor = [
            '#007bff', '#dc3545', '#ffc107', '#28a745', '#ff5733',
            '#3e8e3e', '#6610f2', '#fd7e14', '#6f42c1', '#e83e8c',
            '#ff1493', '#ffa500', '#8a2be2', '#ff4500', '#2e8b57',
            '#ff69b4', '#00ced1', '#800080', '#008080', '#483d8b'
          ][i];
          backgroundColors.push(backgroundColor);
        }
  
        var ctx = document.getElementById("estockbajo");
        var myPieChart = new Chart(ctx, {
          type: 'pie',
          data: {
            labels: nombre,
            datasets: [{
              data: cantidad,
              backgroundColor: backgroundColors,
            }],
          },
        });
      }
    }
  }
  
  

  function reporteStock() {
    const url = base_url + "Administracion/reporteStock/";
    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        let nombre = [];
        let cantidad = [];
        let backgroundColors = [];
  
        for (let i = 0; i < res.length; i++) {
          nombre.push(res[i]['descripcion']);
          cantidad.push(res[i]['cantidad']);
          const backgroundColor = [
            '#007bff', '#dc3545', '#ffc107', '#28a745', '#ff5733',
            '#3e8e3e', '#6610f2', '#fd7e14', '#6f42c1', '#e83e8c',
            '#ff1493', '#ffa500', '#8a2be2', '#ff4500', '#2e8b57',
            '#ff69b4', '#00ced1', '#800080', '#008080', '#483d8b'
          ][i];
          backgroundColors.push(backgroundColor);
        }
  
        var ctx = document.getElementById("stockMinimo");
        var myPieChart = new Chart(ctx, {
          type: 'pie',
          data: {
            labels: nombre,
            datasets: [{
              data: cantidad,
              backgroundColor: backgroundColors,
            }],
          },
        });
      }
    }
  }
  


  function reporteVendidos() {
    const url = base_url + "Administracion/productosVendidos/";
    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res =JSON.parse(this.responseText);
        let nombre =[];
        let cantidad =[];
        for (let i = 0; i < res.length; i++) {
          nombre.push(res[i]['descripcion']);
          cantidad.push(res[i]['total']);
        }
          var ctx = document.getElementById("ProductoVendidos");
          var myPieChart = new Chart(ctx, {
            type: 'doughnut',
            data: {
              labels: nombre,
              datasets: [{
                data: cantidad,
                backgroundColor: [
                  '#007bff', '#dc3545', '#ffc107', '#28a745', '#ff5733',
                  '#3e8e3e', '#6610f2', '#fd7e14', '#6f42c1', '#e83e8c',
                  '#ff1493', '#ffa500', '#8a2be2', '#ff4500', '#2e8b57',
                  '#ff69b4', '#00ced1', '#800080', '#008080', '#483d8b'
                ],
                

              }],
            },
          });
            

        }
      }
  }

  function btnAnularC(id) {
    Swal.fire({
      title: 'ANULAR COMPRA',
      text: "estas seguro que deseas anular la venta",
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Anular, Cancelar!'
    }).then((result) => {
      if (result.isConfirmed) {
       const url = base_url + "Compras/anularCompra/"+ id;
       const http = new XMLHttpRequest();
       http.open("GET", url, true);
       http.send();
       http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          console.log(this.responseText);
          const res = JSON.parse(this.responseText);  
          alertas(res.msg, res.icono);
          t_h_c.ajax.reload();

        

          
        } 
        
       }

      
      }
    })
  }

  function btnAnularVenta(id) {
    Swal.fire({
      title: 'ANULAR COMPRA',
      text: "estas seguro que deseas anular la venta",
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Anular, Cancelar!'
    }).then((result) => {
      if (result.isConfirmed) {
       const url = base_url + "Compras/anularVenta/"+ id;
       const http = new XMLHttpRequest();
       http.open("GET", url, true);
       http.send();
       http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          console.log(this.responseText);
          const res = JSON.parse(this.responseText);  
          alertas(res.msg, res.icono);
          thb.ajax.reload();

        

          
        } 
        
       }

      
      }
    })
  }

  function arqueoCaja() {
    
    document.getElementById('ocultar_campos').classList.add('d-none');
    document.getElementById('monto_inicial').value = '';
    document.getElementById('btnaccion').textContent= 'Aperturar Caja';
    document.getElementById('btnaccion').classList.remove('d-none');

    $('#abrir_caja').modal('show');
  }

  function abrirArqueo(e) {
    e.preventDefault();
    const monto_inicial = document.getElementById('monto_inicial').value
    if (monto_inicial == '') {
      alertas('Ingrese un Monto', 'warning',);
      
    }else{
      const frm= document.getElementById('frmAbrirCaja')
      const url = base_url + "Caja/abrirArqueo/";
      const http = new XMLHttpRequest();
      http.open("POST", url, true);
      http.send(new FormData(frm));
      http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
          console.log(this.responseText);
         const res =JSON.parse(this.responseText);
         Swal.fire({
          icon: "success",
          title: "MONTO REGISTRADO",
          text: "Se ha ingresado el monto",
          footer: "",
        }).then(function () {
        
          window.location.reload();
        });
         t_arqueo.ajax.reload();
         $('#abrir_caja').modal('hide');

        
 
  
          }
        }


    }
  }
  function cerrarCaja() {
    const url = base_url + "Caja/getVentas/";
    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            const res = JSON.parse(this.responseText);

            if (res.icono === 'warning') {
                Swal.fire(
                    "LA CAJA ESTA CERRADA",
                    "haga una apertura de caja",
                    "warning"
                ).then(function () {      
                    window.location.reload();
                });
                return;
            }
            console.log(res.compras_totales);

            document.getElementById('compras_totales').value = res.compras_totales.total;
            document.getElementById('monto_final').value = res.monto_total.total;
            document.getElementById('total_ventas').value = res.total_ventas.total;
            document.getElementById('monto_inicial').value = res.inicial.monto_inicial;
            document.getElementById('monto_general').value = res.monto_general;
            document.getElementById('id').value = res.inicial.id;
            document.getElementById('ocultar_campos').classList.remove('d-none');
            document.getElementById('btnaccion').classList.add('d-none');
            document.getElementById('btnaccion').click();
            $('#abrir_caja').modal('show');
        }
    }
}


  function registrarPermisos(e) {
    e.preventDefault();
    const url = base_url + "usuarios/registrarPermisos/";
    const frm = document.getElementById('formulario');
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
       const res =JSON.parse(this.responseText);
       if (res != '') {
        alertas(res.msg, res.icono);
        
       }else{
        alertas('algo poso que no se pudo detectar', 'error');
       }
        }
      }
    
  }

// fin de todo  













function mostrarProductos(productos, contenedorId) {
  const contenedorProductos = document.getElementById(contenedorId);
  productos.forEach(producto => {
    const divProducto = document.createElement("div");
    divProducto.classList.add("producto");

    const imagenProducto = document.createElement("img");
    imagenProducto.src = "assets/img/" + producto.foto;
    imagenProducto.alt = producto.descripcion;

    const descripcionProducto = document.createElement("p");
    descripcionProducto.textContent = producto.descripcion;

    const precioProducto = document.createElement("p");
    precioProducto.textContent = "S/ " + producto.precio_venta; // Formato de precio

    divProducto.appendChild(imagenProducto);
    divProducto.appendChild(descripcionProducto);
    divProducto.appendChild(precioProducto);

    contenedorProductos.appendChild(divProducto);
  });
}

function asignarEventosAClick(productos) {
  const productosDisponibles = document.querySelectorAll("#contenedor-productos .producto");
  productosDisponibles.forEach(producto => {
    producto.addEventListener("click", () => {
      agregarProducto(producto, productos);
    });
  });
}

function agregarProducto(producto, productosDisponibles) {
  const productoSeleccionado = producto.cloneNode(true);
  const productoId = productoSeleccionado.querySelector("img").alt;
  const productoExistente = productosSeleccionados.find(item => item.id === productoId);

  if (productoExistente) {
    // El producto ya está en la lista de seleccionados, aumentar la cantidad
    productoExistente.cantidad++;
    actualizarCantidadEnLista(productoId);
  } else {
    // El producto no está en la lista de seleccionados, agregarlo
    productosSeleccionados.push({
      id: productoId,
      producto: productoSeleccionado,
      cantidad: 1,
    });
    document.getElementById('productos-seleccionados').appendChild(productoSeleccionado);
  }

  // Eliminar el producto original solo si está en la lista de productos disponibles
  if (productosDisponibles.includes(producto)) {
    producto.parentNode.removeChild(producto);
  }
}

function actualizarCantidadEnLista(productoId) {
  const productoSeleccionado = productosSeleccionados.find(item => item.id === productoId);
  const productoSeleccionadoDOM = productoSeleccionado.producto;
  const cantidadDOM = productoSeleccionadoDOM.querySelector(".cantidad");

  if (cantidadDOM) {
    cantidadDOM.textContent = `Cantidad: ${productoSeleccionado.cantidad}`;
  } else {
    const cantidadTexto = document.createElement("p");
    cantidadTexto.classList.add("cantidad");
    cantidadTexto.textContent = `Cantidad: ${productoSeleccionado.cantidad}`;
    productoSeleccionadoDOM.appendChild(cantidadTexto);
  }
}
function eliminarProductoSeleccionado(productoSeleccionado) {
  const productoId = productoSeleccionado.querySelector("img").alt;
  const productoExistenteIndex = productosSeleccionados.findIndex(item => item.id === productoId);

  if (productoExistenteIndex !== -1) {
    const productoExistente = productosSeleccionados[productoExistenteIndex];
    
    // Disminuye la cantidad si es mayor que 1
    if (productoExistente.cantidad > 1) {
      productoExistente.cantidad--;
      actualizarCantidadEnLista(productoExistente.producto, productoExistente.cantidad);
    } else {
      // Si la cantidad es 1, elimina completamente el producto
      productosSeleccionados.splice(productoExistenteIndex, 1);
      productoSeleccionado.parentNode.removeChild(productoSeleccionado);
    }
  }

}











// registrar ingresos de productos


function llamarRes() {
  document.getElementById("titulo").innerHTML = "REGISTRAR UN NUEVO PRODUCTO";
  document.getElementById("btnaccion").innerHTML = "CONFIRMAR";
  document.getElementById("frmingreso").reset();
  document.getElementById("id").value = "";
  $("#nuevo_ingreso").modal("show");
  deleteImg();
}

function registrarIngresosodeproductos(e) {
  e.preventDefault();
  const codigo = document.getElementById("codigo");
  const nombre = document.getElementById("nombre");
  const precio_compra = document.getElementById("precio_compra");
  const precio_venta = document.getElementById("precio_venta");
  const cantidad = document.getElementById("cantidad");
  const id_medida = document.getElementById("medida");
  const id_cat = document.getElementById("categoria");

  if (
    codigo.value == "" ||
    nombre.value == "" ||
    precio_compra.value == "" ||
    precio_venta.value == ""||
    cantidad.value == ""
  ) {
    Swal.fire({
      icon: "error",
      title: "HAY CAMPOS LIBRES",
      text: "No has llenado todos los campos",
      footer: "",
    });
  } else {
    const url = base_url + "Administracion/registrarIngresoPro";
    const frm = document.getElementById("frmingreso");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        console.log(this.responseText);
        if (res == "si") {
         Swal.fire(
            "PRODUCTO REGISTRADO",
           "Se ha registrado un nuevo producto",
            "success"
          );

          frm.reset();
          $("#nuevo_ingreso").modal("hide");
         tblProductos.ajax.reload();
        } else if (res == "modificado") {
          Swal.fire(
            "PRODUCTO ACTUALIZADO",
            "El producto fue actualizado exitosamente",
            "success"
          );

          $("#nuevo_ingreso").modal("hide");
          tblProductos.ajax.reload();
        } else {
          Swal.fire({
            icon: "error",
            title: "Error",
            text: res,
            footer: "",
          });
        }
      }
    };
  }
}


// modulo para aumentar el estock cuando entra un producto 

function entradallamar() {
  document.getElementById('camposoclut').classList.add('d-none');
  document.getElementById("titulando").innerHTML = "REGISTRAR UNA ENTRADA";
  document.getElementById("btnconfirmar").innerHTML = "CONFIRMAR";
  document.getElementById("frmingrcorrige").reset();
  document.getElementById("id").value = "";
  $("#corregir_pro").modal("show");
 
}


function buscarCodigoAcualizado(e) {
  e.preventDefault();
  if (e.which == 13) {
    const cod = document.getElementById("codigoss").value;
    document.getElementById('camposoclut').classList.remove('d-none');
    const url = base_url + "Administracion/buscarCcodeg/" + cod;

    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res) {
          document.getElementById("id_producto").value = res.id;
          document.getElementById("nombress").value = res.descripcion;
          document.getElementById("precio_comprass").value = res.precio_compra;
          document.getElementById("precio_ventass").value = res.precio_venta;
        } else {
          Swal.fire("OOPSS?", "El codigo no existe?", "question");
          document.getElementById("codigoss").value = "";
          document.getElementById("codigoss").focus();
        }
      }
    };
  }
}

function btnEditarProActualiz(event) {
  // Verificar si se presionó la tecla Enter o si se hizo clic en el botón CONFIRMAR
  if (!event || event.key === 'Enter' || event.target.id === 'btnconfirmar') {
    const frm = document.getElementById('frmingrcorrige');

    const url = base_url + "Administracion/modificarproduc/";
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "ok") {
          Swal.fire({
            title: 'PRODUCTO AGREGADO',
            text: 'Se han agregado más entradas al stock. Revise su inventario.',
            icon: 'success',
            confirmButtonText: 'CONFIRMAR'
          }).then((result) => {
            // Recargar la página cuando se hace clic en "OK"
            if (result.isConfirmed) {
              window.location.reload();
            }
          });
        } else {
          alert("Algo pasó");
        }
      }
    };
  }
}





function entradallamaraRCA() {
  document.getElementById("titleSS").innerHTML = "CIERRE DE CAJA";
  document.getElementById("btnaccionss").innerHTML = "CERRAR CAJA";
  document.getElementById("frmAbrirCajaSS").reset();
  document.getElementById("id_USER").value = "";
  $("#abrir_cajaSS").modal("show");
}
function cerrarCajaSSS(e) {
  e.preventDefault();
  const monto = document.getElementById("monto_inicialss");
  if (monto.value === "") {
      Swal.fire({
          icon: "warning",
          title: "INGRESE SU MONTO DE CIERRE",
          text: "No has ingresado el monto",
          footer: "",
      });
  } else {
      const url = base_url + "Caja/RegisArqueo";
      const frm = document.getElementById("frmAbrirCajaSS");
      const http = new XMLHttpRequest();
      http.open("POST", url, true);
      http.send(new FormData(frm));
      http.onreadystatechange = function () {
          if (this.readyState == 4 && this.status == 200) {
              const res = JSON.parse(this.responseText);
              if (res == "si") {
                  Swal.fire({
                      icon: "success",
                      title: "MONTO REGISTRADO",
                      text: "Se ha registrado el monto de cierre",
                      footer: "",
                    }).then(function () {
                     cerrarCaja();
                  })

                  frm.reset();
                  $("#abrir_cajaSS").modal("hide");
              } else {
                  Swal.fire({
                      icon: "error",
                      title: "Error",
                      text: res,
                      footer: "",
                  });
              }
          }
      };
  }
}









//ratificar porducto mal contado
//tercer modulo 
//ratficcion


function btnEditarProActualizac() {
    // SweetAlert2 para confirmar la acción antes de registrarse
    if (!event || event.key === 'Enter' || event.target.id === 'btnconfirmars') {
    Swal.fire({
      title: 'ADVERTECIA ESTAS SEGURO DE MODIFICAR LOS DATOS?',
      text: "asegurate de aver agregado la contidad exata para poder modificar los datos",
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Si estoy seguro, Modificar'
    }).then((result) => {
      if (result.isConfirmed) {
        const frm = document.getElementById('corregiproduc');
        const url = base_url + "Administracion/modificarproducionc/";
        const http = new XMLHttpRequest();
        http.open("POST", url, true);
        http.send(new FormData(frm));
        http.onreadystatechange = function () {
          if (this.readyState == 4 && this.status == 200) {
            const res = JSON.parse(this.responseText);
            console.log(this.responseText);
            if (res == "ok") {
              // SweetAlert2 para confirmar la eliminación exitosa
              Swal.fire(
                'PRODUCTO MODIFICADO',
                'los datos del stock se han corregido',
                'success'
              ).then(() => {
                // Redirigir o realizar alguna otra acción después de la eliminación exitosa
                window.location.reload();
              });
            } else {
              Swal.fire({
                title: 'Error',
                text: 'Algo pasó al corregir el producto',
                icon: 'error',
                confirmButtonText: 'OK'
              });
            }
          }
        };
      }
    })};
  }
  



function entradallamarDrasti() {
  document.getElementById('ocultar_campos').classList.add('d-none');
  document.getElementById("titulando").innerHTML = "REGISTRAR UNA ENTRADA";
  document.getElementById("btnconfirmars").innerHTML = "CONFIRMAR";
  document.getElementById("corregiproduc").reset();
  document.getElementById("id").value = "";
  $("#crrepro").modal("show");
 
}


function buscarproducDrasticos(e) {
  e.preventDefault();
  
  if (e.which == 13) {
    const cod = document.getElementById("codigosso").value;
    document.getElementById('ocultar_campos').classList.remove('d-none');
    const url = base_url + "Administracion/buscarCcodegech/" + cod;

    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res) {
          document.getElementById("id_producion").value = res.id;
          document.getElementById("nombresss").value = res.descripcion;
          document.getElementById("precio_comprasss").value = res.precio_compra;
          document.getElementById("precio_ventasss").value = res.precio_venta;
          document.getElementById("cantidadssee").value = res.cantidad;
        } else {
          Swal.fire("OOPSS?", "El codigo no existe?", "question");
          document.getElementById("codigosso").value = "";
          document.getElementById("codigosso").focus();
          
        }
      }
    };
  }
}



document.addEventListener("DOMContentLoaded", function () {
  if (document.getElementById('graficoLineal')) {
    crearGraficoLineal();
  }
  if (document.getElementById('traerinventario')) {
      graficosVentas()
  }
if (document.getElementById('perdidas')) {
  perdidas()
}
 if (document.getElementById('produc_ventas_vendidos')) {
  productosVentass()
 }
});





function crearGraficoLineal() {
  const url = base_url + "Administracion/reporteStockgeneral/";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let productos = [];
      let cantidades = [];
      for (let i = 0; i < res.length; i++) {
        // Construir la etiqueta combinando producto y medida
        let etiqueta = `${res[i]['descripcion']} (${res[i]['nombre_corto']})`;
        productos.push(etiqueta);

        // Agregar cantidad
        cantidades.push(res[i]['cantidad']);
      }

      var ctx = document.getElementById("graficoLineal").getContext('2d');
      var myBarChart = new Chart(ctx, {
        type: 'bar',
        data: {
          labels: productos,
          datasets: [{
            label: 'Cantidad',
            data: cantidades,
            backgroundColor: 'blue',
          }],
        },
        options: {
          scales: {
            x: {
              title: {
                display: true,
                text: 'Productos',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
            y: {
              beginAtZero: true,
              title: {
                display: true,
                text: 'Cantidad',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
          },
          plugins: {
            legend: {
              display: false,
            },
          },
          layout: {
            padding: {
              left: 50,
              right: 50,
              top: 0,
              bottom: 0,
            },
          },
          scales: {
            x: {
              barThickness: 50, // Ancho predeterminado
              maxBarThickness: 100, // Ancho máximo permitido
            },
            y: {
              beginAtZero: true,
            },
          },
        },
      });
    }
  }
}






function cargarProductosPorCategoria() {
  const categoriaSeleccionada = document.getElementById('producto').value;
  const tipoSeleccionado = document.getElementById('tipo').value; 
  const url = base_url + "Inventario/obtenerProductosPorCategoriaYMedida/"; // Modifica la URL
  const http = new XMLHttpRequest();
  http.open("POST", url, true);
  http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  const params = "categoria=" + categoriaSeleccionada + "&tipo=" + tipoSeleccionado; // Agrega el tipo de venta (medida)
  
  http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
          const productos = JSON.parse(this.responseText);
          let productosHTML = '<table>';
          productos.forEach(function (producto) {
              productosHTML += '<tr>';
              productosHTML += '<td>' + producto.descripcion + '</td>';
              productosHTML += '<td><input type="number" name="cantidad[]" placeholder="Cantidad"></td>';
              productosHTML += '</tr>';
          });
          productosHTML += '</table>';

          // Muestra los productos en el elemento #listaProductos
          document.getElementById('listaProductos').innerHTML = productosHTML;
      }
  };
  http.send(params);
}




      
function registrarInventario() {
  Swal.fire({
    title: 'ASEGURATE QUE LOS DATOS SEAN VERIDICOS',
    text: 'En caso de detectarse pérdidas se le asumirá cargos',
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Sí, estoy seguro'
  }).then((result) => {
    if (result.isConfirmed) {
      const categoriaSeleccionada = document.getElementById('producto').value;
      const cantidadInputs = document.querySelectorAll('input[name="cantidad[]"]');

      // Coloca esta línea aquí
      const tipoSeleccionado = document.getElementById('tipo').value;

      const idCategoria = document.getElementById('id_categorias').value;
      const idMedida = document.getElementById('id_medidas').value;

      const datos = {
        categoria: categoriaSeleccionada,
        id_categoria: idCategoria,
        medida: tipoSeleccionado,
        id_medida: idMedida,
        productos: []
      };

      let camposVacios = false;
      cantidadInputs.forEach(function (input) {
        const cantidad = input.value.trim();
        if (cantidad === '') {
          camposVacios = true;
        } else {
          datos.productos.push({
            producto: input.parentNode.previousElementSibling.textContent.trim(),
            cantidad: cantidad
          });
        }
      });

      if (camposVacios) {
        Swal.fire(
          'Campos Vacíos',
          'Asegúrate de llenar todos los campos con datos verídicos',
          'warning'
        );
        return;
      }

      const jsonData = JSON.stringify(datos);

      const urlEnviar = base_url + "Inventario/registrarInventario";
      const httpEnviar = new XMLHttpRequest();
      httpEnviar.open("POST", urlEnviar, true);
      httpEnviar.setRequestHeader("Content-type", "application/json");

      let timerInterval;
      const timeout = 99999; // Establecer un tiempo límite de 10 segundos

      const loadingAlert = Swal.fire({
        title: "Enviando inventario...",
        html: "Espere por favor.",
        timer: timeout,
        timerProgressBar: true,
        didOpen: () => {
          Swal.showLoading();
          const timer = Swal.getPopup().querySelector("b");
          timerInterval = setInterval(() => {
            timer.textContent = `${Swal.getTimerLeft()}`;
          }, 100);
        },
        willClose: () => {
          clearInterval(timerInterval);
        }
      });

      httpEnviar.onreadystatechange = function () {
        if (this.readyState == 4) {
          loadingAlert.close(); // Cerrar la alerta de carga
          if (this.status == 200) {
            const respuesta = JSON.parse(this.responseText);
            console.log(respuesta);

            if (respuesta.message == "si") {
              Swal.fire(
                'INVENTARIO ENVIADO',
                'El inventario ha sido enviado con éxito',
                'success'
              ).then(() => {
                window.location.reload();
              });
            } else {
              Swal.fire({
                icon: "error",
                title: "Error",
                text: respuesta.message,
                footer: ""
              });
            }
          } else {
            console.error("Error en la solicitud:", this.status);
            console.error("Respuesta del servidor:", this.responseText);
            Swal.fire(
              'Error',
              'Hubo un error al procesar la solicitud. Por favor, inténtalo de nuevo.',
              'error'
            );
          }
        }
      };

      httpEnviar.send(jsonData);
    }
  });
}




  
function cargarIdsCategoriaYMedida() {
  const categoriaSeleccionada = document.getElementById('producto').value;
  const medidaSeleccionada = document.getElementById('tipo').value;

  // Actualiza los campos de entrada con las IDs seleccionadas
  document.getElementById('id_categorias').value = categoriaSeleccionada;
  document.getElementById('id_medidas').value = medidaSeleccionada;
}



// traer datos al panel de control cerrar caja y inventarios
// traer datos al panel de control cerrar caja y inventarios

// traer datos al panel de control cerrar caja y inventarios

// traer datos al panel de control cerrar caja y inventarios
// traer datos al panel de control cerrar caja y inventarios


function INVENTARIO() {
  document.getElementById("inventtitulo").innerHTML = "REPORTES DE INVENTARIOS ";
  document.getElementById("frminventarios").reset();
  $("#inventariomodal").modal("show");
}














function traerDatossss() {
  const url = base_url + "Administracion/traerarqueo/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      console.log(this.responseText);

      if (data.data && data.data.arqueo.length > 0) {
        const arqueoData = data.data.arqueo;

        let datosHTML = `
          <table class="styled-table ">
            <tr>
              <th>Usuario</th>
              <th>Apertura</th>
              <th>F Apertura</th>
              <th>F Cierre</th>
              <th>Efe Ventas</th>
              <th>Compras</th>
              <th>Egresos</th>
              <th>Ingreso</th>
              <th>Total</th>
              <th>M Cierre</th>
              <th>Resultado</th>
              <th>Estado</th>
             
            </tr>`;

        for (let i = 0; i < arqueoData.length; i++) {
          const item = arqueoData[i];
          const resta = item.monto_cierre - item.total;
          const restaRedondeada = resta.toFixed(2);

          let estado = '';
          if (resta < 0) {
            estado = 'falta';
          } else if (resta > 0) {
            estado = 'sobra';
          } else {
            estado = '';
          }

          datosHTML += `
            <tr>
            <td>${item.nombre_usuario}</td> 
              <td>${item.monto_inicial}</td>
              <td>${item.fecha_apertura}</td>
              <td>${item.fecha_cierre}</td>
              <td>${item.total_ventas}</td>
              <td>${item.total_compras}</td>
              <td>${item.egresos}</td>
              <td>${item.ingreso}</td>
              <td>${item.total}</td>
              <td>${item.monto_cierre}</td>
              <td>${estado} S/ ${restaRedondeada}</td>
              <td>${item.estado}</td>
            </tr>`;
        }
        datosHTML += `</table>`;
        const traerinventario = document.getElementById('traerinventario');
        traerinventario.innerHTML = datosHTML;
        traerinventario.classList.add('table-container');
      } else {
        const activoData = data.data.activo;
        let datosHTML = `
          <table class="styled-table">
            <tr>
              <th>Usuario</th>
              <th>Apertura</th>
              <th>F Apertura</th>
              <th>Estado</th>
            </tr>`;

        for (let i = 0; i < activoData.length; i++) {
          const item = activoData[i];
          // Ajuste del estado para que coincida con el estilo en PHP
          datosHTML += `
            <tr>
            <td>${item.nombre_usuario}</td> 
              <td>${item.monto_inicial}</td>
              <td>${item.fecha_apertura}</td>
              <td>${item.estado}</td>
            </tr>`;
        }

        datosHTML += `</table>`;

        const traerinventario = document.getElementById('traerinventario');
        traerinventario.innerHTML = datosHTML;
        traerinventario.classList.add('table-container');
      }
    }
  };

  http.open('GET', url, true);
  http.send();
}









function mostrar_inventareios_tempsss() {

  document.getElementById("analizartitulo").innerHTML = "RESULTADOS DEL CUADRE DE INVENTARIOS";
  document.getElementById("frmanalizar").reset();
  $("#analicesinventario").modal("show");

}




function mostrar_inventareios_tempsss() {
  const url = base_url + "Administracion/mostra_inventarios_temp/";
  const xhr = new XMLHttpRequest();

  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
      const response = JSON.parse(xhr.responseText);
      const inventarios_temp = response;

      if (inventarios_temp.length > 0) {
        $("#analicesinventario").modal("show");
     
        mostra_inventario_temp();
  $("#inventariomodal").modal("hide");

      } else {
        Swal.fire({
          icon: 'warning',
          title: 'NO HAY RESULTADOS',
          text: 'No hay datos analizados para mostrar',
          footer: ''
        }).then(() => {
          location.reload();
        });
      }
    }
  };

  xhr.open('GET', url, true);
  xhr.send();
}

document.addEventListener("DOMContentLoaded", function () {
});

function mostra_inventario_temp() {

  const url = base_url + "Administracion/mostra_inventarios_temp/";
  const xhr = new XMLHttpRequest();

  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
      const response = JSON.parse(xhr.responseText);
      if (response.length > 0) {
        const inventarios_temp = response;

        let datosHTML = `
          <table id="inventariosTempss" class="styled-table">
            <thead class="thead-dark">
              <tr>
                <th>Producto</th>
                <th>Cantidad</th>
                <th>Categoria</th>
                <th>Medida</th>
                <th>Estado</th>
              </tr>
            </thead>
            <tbody>
        `;

        for (let i = 0; i < inventarios_temp.length; i++) {
          const item = inventarios_temp[i];
          if (item.cantidad !== 0) {
            let estado = item.cantidad > 0 ? "Sobrante " + item.cantidad : "Faltante " + item.cantidad;
          
            datosHTML += `
              <tr>
                <td>${item.producto}</td>
                <td>${item.cantidad}</td>
                <td>${item.categoria}</td>
                <td>${item.medida}</td>
                <td>${estado}</td>
              </tr>`;
          }
        }

        datosHTML += `</tbody></table>`;
        const tblcuadre = document.getElementById('tblcuadre');
        tblcuadre.innerHTML = datosHTML;

        $(document).ready(function () {
          $('#tblcuadre').DataTable({
            pageLength: 10,
            lengthChange: false,
            searching: true,
            paging: true,
            info: false,
            language: {
              url: "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
            },
            dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
              "<'row'<'col-sm-12'tr>>" +
              "<'row'<'col-sm-5'i><'col-sm-7'p>>",
            buttons: [
              {
                extend: 'excelHtml5',
                text: '<i class="fas fa-file-excel"></i> Exel',
                title: 'Export_File',
                className: 'bg-success'
              },
              {
                extend: 'csvHtml5',
                text: '<i class="fas fa-file-csv"></i> Csv',
                title: '',
                className: 'bg-success'
              },
              {
                extend: 'pdfHtml5',
                text: '<i class="fas fa-file-pdf"></i> pdf',
                title: 'REPORTE DE PRODUCTOS',
                className: 'btn btn-danger'
              }
            ]
          });
        });
      }
    }
  };

  xhr.open('GET', url, true);
  xhr.send();
}

//rechazar los productos de los inventarios 
function rechazarProductos() {
  const url = base_url + "Administracion/productosRechazados";
  const xhr = new XMLHttpRequest();
  
  xhr.open('GET', url, true);
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        const res = JSON.parse(xhr.responseText);
        if (res === "ok") {
          Swal.fire({
            icon: 'success',
            title: 'RECHAZADO',
            text: 'El inventario se a rechazado',
            footer: ''
          }).then((result) => {
            location.reload();
          });
        }else if (res === "existe") {
          Swal.fire({
            icon: 'warning',
            title: 'YA SE EMVIO',
            text: 'el inventario fue rechazado y ya se emvio los datos',
            footer: ''
          }).then((result) => {
            location.reload();
          });;
        }else{
          Swal.fire({
            icon: 'error',
            title: 'ALGO PASO',
            text: 'se produjo un error y algo paso',
            footer: ''
          });
        }
     
      }
    }
  };

  xhr.send();
}






function actualizarEstado() {
  Swal.fire({
    title: 'DESEAS CONFIRMAR',
    text: 'Asegurate de verificar tu inventarios antes de confirmar',
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Sí, estoy seguro'
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Administracion/actualizarEstado/";

      const xhr = new XMLHttpRequest();
      xhr.open('GET', url, true);

      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            const response = JSON.parse(xhr.responseText);
            console.log(response);
            Swal.fire({
              icon: 'success',
              title: 'CONFIRMADO',
              text: 'El inventario se ha aprobado',
              footer: ''
            }).then((result) => {
              if (result.isConfirmed) {
                location.reload();
              }
            });
          } else {
            console.error('Error al hacer la solicitud.');
          }
        }
      };

      xhr.send();
    }
  });
}







function regisinventario() {
  const url = base_url + "Administracion/regisinventario/";

  const xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);

  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        const response = JSON.parse(xhr.responseText);
        console.log(response);
        Swal.fire({
          icon: 'success',
          title: 'LOS RESULTADOS',
          text: 'Los resultados ya están listos',
          footer: ''
        }).then((result) => {
          if (result.isConfirmed) {
           mostrar_inventareios_tempsss();
       
          }
        });
      } else {
        console.error('Error al hacer la solicitud.');
      }

    }
  };

  xhr.send();
}







function vaciarTablaInventarioTemp() {
  const url = base_url + "Administracion/vaciart/";
  fetch(url, {
    method: 'POST', 
  })
  .then(response => response.json())
  .then(data => {
    if (data === 'ok') { // Compara con 'ok'
      console.log('Tabla Inventario Temp vaciada correctamente.');
    } else {
      console.error('Error al vaciar la tabla Inventario Temp.');
    }
  })
  .catch(error => {
    console.error(error);
  });
}









function mojoradeVentas() {
  const url = base_url + "compras/obtenerProductosRapido";

  fetch(url)
    .then((response) => response.json())
    .then((data) => {
      productos = data; 
      mostrarProductos(productos, "basededart");
    })
    .catch((error) => {
      console.error('Error en la solicitud AJAX: ', error);
    });
}

// Elementos del DOM

document.addEventListener("DOMContentLoaded", function () {
  const inputBuscar = document.getElementById("buscarproducc");
  const container = document.getElementById("basededart");
  if (inputBuscar && container) {

  if (!inputBuscar || !container) {
    console.error("Elementos no encontrados.");
    return;
  }

  inputBuscar.addEventListener("input", () => {
    const valorBusqueda = inputBuscar.value.toLowerCase();
    const productosFiltrados = productos.filter((producto) => {
      return producto.descripcion.toLowerCase().includes(valorBusqueda);
  });
    mostrarProductos(productosFiltrados, "basededart");
  });

  // Llamar a la función para cargar los productos al cargar la página
  
  mojoradeVentas();
}});

function mojoradeVentas() {
  const url = base_url + "Compras/obtenerProductosRapido";

  fetch(url)
    .then((response) => response.json())
    .then((data) => {
      productos = data;
      mostrarProductos(productos, "basededart");
    })
    .catch((error) => {
      console.error('Error en la solicitud AJAX: ', error);
    });
}

function mostrarProductos(productos, containerId) {
  const container = document.getElementById(containerId);
  container.innerHTML = '';

  productos.forEach((producto) => {
    const productElement = document.createElement('div');
    productElement.className = 'producto-list-item';

    const productImage = document.createElement('img');
    productImage.src = base_url + `/assets/img/${producto.foto}`;
    productImage.style.maxWidth = '45px';
    productImage.style.marginRight = '9px';
    productElement.appendChild(productImage);

    const productText = document.createElement('span');
    productText.textContent = `${producto.descripcion} ${producto.medida_nombre_corto} S/${parseFloat(producto.precio_venta).toFixed(2)} `;
    productElement.appendChild(productText);

    productElement.addEventListener('click', () => {
      RegisVentasRapidasss(producto.id);
    });

    container.appendChild(productElement);
  });
}

function RegisVentasRapidasss(id_producto) {
  const url = base_url + `Compras/ingresarDetalletemp/`;
  const data = new FormData();
  data.append('id', id_producto);
  data.append('cantidad', 1);
  fetch(url, {
    method: 'POST',
    body: data,
  })
    .then((response) => {
      if (!response.ok) {
        throw new Error('Error al registrar la venta rápida');
      }
      return response.json();
    })
    .then((data) => {
      if (data === 'ok' || data === 'modificado') {
        cargarDetalleVenta();
      } else {
        Swal.fire({
          icon: 'warning',
          title: 'PRODUCTO AGOTADO',
          text: 'verifique su inventario',
          footer: '',
        })
      }
    });
}

// Aquí puedes agregar la implementación de 'cargarDetalleVenta' si es necesario.



document.addEventListener("DOMContentLoaded", function () {
  fetchEstButtonData();
});



async function fetchEstButtonData() {
  const response = await fetch(`${base_url}VentaRapida/botoncaja`);
  const jsonData = await response.json();

  if (jsonData && jsonData.length > 0) {
    if (jsonData[0].estado == 1) {
      displayCajaButton("CERRAR CAJA", "CIERREDECAJA");
      setButtonWidthTo100Percent("CIERREDECAJA");
    } else {
      displayCajaButton("APERTURAR CAJA", "APERTURADECAJA");
      setButtonWidthTo100Percent("APERTURADECAJA");
    }
  }
}

function setButtonWidthTo100Percent(buttonId) {
  const buttonElement = document.getElementById(buttonId);
  if (buttonElement) {
    buttonElement.style.width = "100%";
  }
}

function displayCajaButton(est_button, buttonId) {
  const container = document.getElementById("arquecajjj");
  if (!container) return;

  // Elimina botones anteriores si existen
  container.innerHTML = '';

  const button = document.createElement("button");
  button.innerHTML = est_button;
  button.setAttribute("data-id", buttonId); // Agrega el atributo 'data-id' con el valor 'buttonId'

  if (est_button === "CERRAR CAJA") {
    button.className = "btn btn-danger"; // Estado "CERRAR CAJA", rojo
  } else {
    button.className = "btn btn-success"; // Estado "ABRIR CAJA", verde
  }

  button.addEventListener("click", function (e) {
    ARQUEOSSS(e, buttonId);
  });

  container.appendChild(button);
}



function ARQUEOSSS(e, buttonId) {
  e.preventDefault();

  // Mostrar la alerta de tiempo
  let timerInterval;
  Swal.fire({
    title: "ESPERE UN MOMENTO PORFAVOR",
    html: "Estamos procesando la solicitud",
    timer: 1000000, // Tiempo en milisegundos (ajústalo según tus necesidades)
    timerProgressBar: true,
    allowOutsideClick: false, // Evitar cerrar haciendo clic fuera del cuadro de diálogo
    allowEscapeKey: false, // Evitar cerrar presionando la tecla Esc
    didOpen: () => {
      Swal.showLoading();
      const timer = Swal.getPopup().querySelector("b");
      timerInterval = setInterval(() => {
        timer.textContent = `${(Swal.getTimerLeft() / 1000).toFixed(0)}`;
      }, 1000);
    },
    willClose: () => {
      clearInterval(timerInterval);
    },
  });

  setTimeout(() => {
    const monto_inicial = document.getElementById('aperurarrr').value;
    const id = e.target.getAttribute('data-id');

    const data = new FormData();
    data.append('aperurarrr', monto_inicial);
    data.append('data-id', id);

    // Realizar la petición al servidor
    const url = base_url + 'VentaRapida/abrirArqueo';
    const http = new XMLHttpRequest();
    http.open('POST', url, true);
    http.send(data);

    // Manejar la respuesta del servidor
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        console.log(this.responseText);
        const res = JSON.parse(this.responseText);

        // Cerrar la alerta de tiempo
        Swal.close();
        if (res.show_button) {
          enviarCorreo();
        }
        // Mostrar la alerta según la respuesta del servidor
        Swal.fire({
          icon: res.icono,
          title: res.msg,
          text: res.msg,
          footer: res.show_button
          
            ?  '<a href="' + base_url + 'VentaRapida/imprimirArqueos" target="_blank" class="btn btn-success"><i class="fa-solid fa-print" style="color: #003ac2;"></i> arqueo</a>'
            : '',
            
        }).then(() => {
          window.location.reload();
          
        });
      }
    };
  }, 5000); // Espera de 5 segundos (ajústalo según tus necesidades)
}


function enviarCorreo() {
  const url = base_url + 'VentaRapida/enviarCorreo';
  const xhr = new XMLHttpRequest();
  
  xhr.open('GET', url, true);
  xhr.setRequestHeader('Content-Type', 'application/json');

  xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
          if (xhr.status === 200) {
              const res = JSON.parse(xhr.responseText);
              console.log(res);
          } else {
              console.error('Error en la solicitud:', xhr.status);
          }
      }
  };

  xhr.send();
}


  




  //egresoso e ingresos de dineros 


  function enviarDatos() {
    Swal.fire({
      title: 'ADVERTENCIA: ¿ESTÁS SEGURO DE REGISTRAR UN INGRESO A CAJA',
      text: 'asegurate de el monto por inresar sea veridico',
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Confirmar',
    }).then((result) => {
      if (result.isConfirmed) {
        const ingresos = document.getElementById('dinerioIngreso').value;
        const tipoMovimiento = document.getElementById('tipoMovimiento').value;
        const opciones = document.getElementById('opciones').value;
        const comentarios = document.getElementById('comentarios').value;
  
        if (ingresos === '' || tipoMovimiento === '' || opciones === '') {
          Swal.fire({
            icon: 'warning',
            title: 'Datos faltantes',
            text: 'Por favor, completa todos los campos.',
            footer: '',
          }).then((result) => {
            if (result.isConfirmed) {
              location.reload();
            }
          });
        } else {
          const data = new FormData();
          data.append('dinerioIngreso', ingresos);
          data.append('tipoMovimiento', tipoMovimiento);
          data.append('opciones', opciones);
          data.append('comentarios', comentarios);
  
          const url = base_url + 'VentaRapida/ingresos_de_dinero';
          const xhr = new XMLHttpRequest();
  
          xhr.open('POST', url, true);
          xhr.send(data);
  
          xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
              const res = JSON.parse(xhr.responseText);
              if (res === 'ok') {
                Swal.fire({
                  icon: 'success',
                  title: 'INGRESO A CAJA',
                  text: 'Has ingresado un monto a caja.',
                  footer: '',
                }).then((result) => {
                  if (result.isConfirmed) {
                    location.reload();
                  }
                });
              } else {
                Swal.fire({
                  icon: 'error',
                  title: 'Error',
                  text: 'Ha ocurrido un error al registrar el ingreso.',
                  footer: '',
                });
              }
            }
          };
        }
      }
    });
  }
  
  
  




  
  function registrarEgresosodinero() {
    Swal.fire({
      title: 'ADVERTENCIA: ¿ESTAS RETIRANDO DINERO DE CAJA?',
      text: '¿el monto del retiro es correcto?',
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Confirmar',
    }).then((result) => {
      if (result.isConfirmed) {
        const ingresos = document.getElementById('dinerioIngreso').value;
        const tipoMovimiento = document.getElementById('tipoMovimiento').value;
        const opciones = document.getElementById('opciones2').value;
        const comentarios = document.getElementById('comentarios2').value;
  
        if (ingresos === '' || tipoMovimiento === '' || opciones === '') {
          Swal.fire({
            icon: 'warning',
            title: 'Datos faltantes',
            text: 'Por favor, completa todos los campos.',
            footer: '',
          }).then((result) => {
            if (result.isConfirmed) {
              location.reload();
            }
          });
        } else {
          const data = new FormData();
          data.append('dinerioIngreso', ingresos);
          data.append('tipoMovimiento', tipoMovimiento);
          data.append('opciones2', opciones);
          data.append('comentarios2', comentarios);
  
          const url = base_url + 'VentaRapida/egresos_de_dinero';
          const xhr = new XMLHttpRequest();
  
          xhr.open('POST', url, true);
          xhr.send(data);
  
          xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
              const res = JSON.parse(xhr.responseText);
              if (res === 'ok') {
                Swal.fire({
                  icon: 'success',
                  title: 'RETIRO REALIZADO',
                  text: 'Se ha hecho un retiro de caja.',
                  footer: '',
                }).then((result) => {
                  if (result.isConfirmed) {
                    location.reload();
                  }
                });
              } else {
                Swal.fire({
                  icon: 'error',
                  title: 'Error',
                  text: 'Ha ocurrido un error al registrar el egreso.',
                  footer: '',
                });
              }
            }
          };
        }
      }
    });
  }
  
  
  

  function pagodelpersonal() {
    Swal.fire({
      title: 'ESTAS A POR REGISTRAR UN ADELANTO',
      text: '¿asegurese que el monto del adelanto sea correcto?',
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Si estoy seguro',
    }).then((result) => {
      if (result.isConfirmed) {
        const ingresos = document.getElementById('dinerioIngreso').value;
        const tipoMovimiento = document.getElementById('tipoMovimiento').value;
        const opciones = document.getElementById('opciones2').value;
        const usuario = document.getElementById('usuario').value;
  
        if (ingresos === '' || tipoMovimiento === '' || opciones === '') {
          Swal.fire({
            icon: 'warning',
            title: 'Datos faltantes',
            text: 'Por favor, complete todos los campos.',
            footer: '',
          }).then((result) => {
            if (result.isConfirmed) {
              location.reload();
            }
          });
        } else {
          const data = new FormData();
          data.append('dinerioIngreso', ingresos);
          data.append('tipoMovimiento', tipoMovimiento);
          data.append('opciones', opciones);
          data.append('usuario', usuario);
  
          const url = base_url + 'VentaRapida/pagodelpersonal';
          const xhr = new XMLHttpRequest();
  
          xhr.open('POST', url, true);
          xhr.send(data);
  
          xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
              const res = JSON.parse(xhr.responseText);
              if (res === 'ok') {
                Swal.fire({
                  icon: 'success',
                  title: 'RETIRO REALIZADO',
                  text: 'Se ha hecho un retiro de caja.',
                  footer: '',
                }).then((result) => {
                  if (result.isConfirmed) {
                    location.reload();
                  }
                });
              } else {
                Swal.fire({
                  icon: 'error',
                  title: 'Error',
                  text: 'Ha ocurrido un error al registrar el retiro.',
                  footer: '',
                });
              }
            }
          };
        }
      }
    });
  }
  
  

  function imprimirArqueo(id_usuario) {
    let ruta;
    if (id_usuario !== undefined) {
        ruta = base_url + 'Arqueo/imprimirArqueo/' + id_usuario;

        if (ruta) {
            const nuevaVentana = window.open(ruta, '_blank');
            setTimeout(function () {
                if (nuevaVentana !== null) {
                    nuevaVentana.print();
                } else {
                    alert('Error al abrir la ventana de impresión. Asegúrate de que tu navegador permita ventanas emergentes.');
                }
            }, 1000);
        }
    }
}



function mostrarAdelantos() {
  const url = base_url + "Administracion/adelantados/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      const traerinventario = document.getElementById('traerinventario');

      if (data && data.length > 0) {
        let datosHTML = `
          <table class="styled-table">
            <tr>
              <th>Cajero</th>
              <th>Monto</th>
              <th>Personal</th>
              <th>Fecha</th>
              <th>Estado</th>
            </tr>`;

        for (let i = 0; i < data.length; i++) {
          const item = data[i];
          datosHTML += `
            <tr>
              <td>${item.cajero}</td>
              <td>${item.monto}</td>
              <td>${item.personal}</td>
              <td>${item.fecha}</td>
              <td>${item.estado}</td>
            </tr>`;
        }
        datosHTML += `</table>`;
        traerinventario.innerHTML = datosHTML;
        traerinventario.classList.add('table-container');
      } else {
        traerinventario.innerHTML = `
        <table class="styled-table">
          <tr>
            <th>NO HAY ADELANTOS REGISTRADOS </th>
          </tr>`;
        traerinventario.classList.remove('table-container');
      }
    }
  };

  http.open('GET', url, true);
  http.send();
}




function MOSTRARarqueos() {
  const url = base_url + "Administracion/arqueosHist/";
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      console.log(this.responseText);
      const traerinventario = document.getElementById('traerinventario');
      
      if (data && data.length > 0) {
        let datosHTML = `
        <table id="traerArqueos" class="styled-table">
        <thead>
          <tr>
            <th>Usuario</th>
            <th>Apertura</th>
            <th>F Apertura</th>
            <th>F Cierre</th>
            <th>Ventas</th>
            <th>Compras</th>
            <th>Egresos</th>
            <th>Ingreso</th>
            <th>Total</th>
            <th>M Cierre</th>
            <th>resultado</th>
          </tr>
        </thead>
        <tbody>`;

        for (let i = 0; i < data.length; i++) {
          const item = data[i];
          const resultado = item.monto_cierre - item.total;
          const resultadoRedondeado = resultado.toFixed(2);
          let estado = ''; 
        
          if (resultado < 0) {
            estado = `faltante S/${resultadoRedondeado}`;
          } else if (resultado > 0) {
            estado = `sobrante S/${resultadoRedondeado}`;
          } else {
            estado = 'cuadrado';
          }
          datosHTML += `
          <tr>
            <td>${item.nombre_usuario}</td> 
            <td>${item.monto_inicial}</td>
            <td>${item.fecha_apertura}</td>
            <td>${item.fecha_cierre}</td>
            <td>${item.total_ventas}</td>
            <td>${item.total_compras}</td>
            <td>${item.egresos}</td>
            <td>${item.ingreso}</td>
            <td>${item.total}</td>
            <td>${item.monto_cierre}</td>
            <td>${estado}</td>
          </tr>`;
        }

        datosHTML += `</tbody></table>`;
        traerinventario.innerHTML = datosHTML;
        traerinventario.classList.add('table-container');

         $('#traerArqueos').DataTable({
          order: [[2, 'asc']], // Ordena por la columna "F Apertura" de manera ascendente
          pageLength: 10, // Muestra 10 filas por página
          lengthChange: false, // Oculta el selector de cantidad de filas por página
          searching: true, // Habilita la función de búsqueda
          paging: true, // Habilita la paginación
          info: false, // Oculta la información de la tabla
          language: {
            url: "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json"
          },
          dom: "<'row'<'col-sm-4'<'l'1>><'col-sm-4 text-center'B><'col-sm-4'f>>" +
            "<'row'<'col-sm-12'tr>>" +
            "<'row'<'col-sm-5'i><'col-sm-7'p>>",
          buttons: [
            {
              extend: 'excelHtml5',
              text: '<i class="fas fa-file-excel"></i> Exel',
              title: 'Export_File',
              className: 'btn btn-success'
            },
            {
              extend: 'csvHtml5',
              text: '<i class="fas fa-file-csv"></i> Csv',
              title: '',
              className: 'btn btn-success'
            },
            {
              extend: 'pdfHtml5',
              text: '<i class="fas fa-file-pdf"></i> pdf',
              title: 'ARQUEOS',
              className: 'btn btn-success'
            }
          ]
        });
      } else {
        // Si no hay datos, muestra un mensaje
        traerinventario.innerHTML = `
        <table id="traerArqueos" class="styled-table">
        <thead>
          <tr>
            <th>NO HAY ARQUEOS DISPONIBLES </th>
           
          </tr>
        </thead>
        <tbody>`;
        traerinventario.classList.remove('table-container');
      }
    }
  };

  http.open('GET', url, true);
  http.send();
}



function obtenerIngreso() {
  const url = base_url + "Administracion/obtenertabla_ingresos/";
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      console.log(this.responseText);
      const traerinventario = document.getElementById('traerinventario');
      
      if (data && data.length > 0) {
        let datosHTML = `
        <table id="regargartaba" class="styled-table">
        <thead>
          <tr>
            <th>Usuario</th>
            <th>Monto</th>
            <th>Tipo</th>
            <th>Detalle</th>
            <th>Fecha/Hora</th>
            <th>Movimiento</th>
          </tr>
        </thead>
        <tbody>`;

        for (let i = 0; i < data.length; i++) {
          const item = data[i];
          datosHTML += `
          <tr>
            <td>${item.nombre_usuario}</td> 
            <td>${item.monto}</td>
            <td>${item.opciones}</td>
            <td>${item.detalle}</td>
            <td>${item.fecha}</td>
            <td>${item.estado}</td>
          </tr>`;
        }

        datosHTML += `</tbody></table>`;
        traerinventario.innerHTML = datosHTML;
        traerinventario.classList.add('table-container');
      } else {
        // Si no hay datos, muestra un mensaje
        traerinventario.innerHTML = `
        <table id="regargartaba" class="styled-table">
        <thead>
          <tr>
            <th>NO HAY MAS INGRESOS PARA CONFIRMAR</th>
          </tr>
        </thead>
        <tbody>`;
        traerinventario.classList.remove('table-container');
      }
    }
  };

  http.open('GET', url, true);
  http.send();
}



function updateEstado(idIngreso) {
  const url = base_url + "Administracion/updateIngreso/" + idIngreso;
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      console.log(this.responseText);
      Swal.fire({
        icon: 'success',
        title: 'Movimiento Confirmado',
        text: 'Se ha confirmado el ingreso del dinero',
        footer: '',
      }).then((result) => {
        if (result.isConfirmed) {
          obtenerIngreso();
        }
      });
    }
  };
  http.open('GET', url, true);
  http.send();
}



function ObtenerEgresos() {
  const url = base_url + "Administracion/obtener_egresos/";
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      console.log(this.responseText);
      const traerinventario = document.getElementById('traerinventario');
      
      if (data && data.length > 0) {
        let datosHTML = `
        <table id="regargartaba" class="styled-table">
        <thead>
          <tr>
            <th>Usuario</th>
            <th>Monto</th>
            <th>Tipo</th>
            <th>Detalle</th>
            <th>Fecha/Hora</th>
            <th>Movimiento</th>
          </tr>
        </thead>
        <tbody>`;

        for (let i = 0; i < data.length; i++) {
          const item = data[i];
          datosHTML += `
          <tr>
            <td>${item.nombre_usuario}</td> 
            <td>${item.monto}</td>
            <td>${item.opciones}</td>
            <td>${item.detalle}</td>
            <td>${item.fecha}</td>
            <td>${item.estado}</td>
          </tr>`;
        }

        datosHTML += `</tbody></table>`;
        traerinventario.innerHTML = datosHTML;
        traerinventario.classList.add('table-container');
      } else {
        // Si no hay datos, muestra un mensaje
        traerinventario.innerHTML = `
        <table class="styled-table">
        <thead>
          <tr>
            <th>NO HAY MAS SALIDAS DE ACTIVO PARA CONFIRMAR</th>
          </tr>
        </thead>
        <tbody>`;
        traerinventario.classList.remove('table-container');
      }
    }
  };

  http.open('GET', url, true);
  http.send();
}


function ubdates_Egreso(idegresos) {
  const url = base_url + "Administracion/ubdatesegresoss/" + idegresos;
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      console.log(this.responseText);
      Swal.fire({
        icon: 'success',
        title: 'Movimiento Confirmado',
        text: 'Se ha confirmado el ingreso del dinero',
        footer: '',
      }).then((result) => {
        if (result.isConfirmed) {
          ObtenerEgresos();
        }
      });
    }
  };
  http.open('GET', url, true);
  http.send();
}



function OBTENENERganancias() {
  const url = base_url + "Administracion/mostrarGanann/";
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const data = JSON.parse(this.responseText);
      console.log(this.responseText);
      const traerinventario = document.getElementById('traerinventario');
      
      if (data && data.length > 0) {
        let datosHTML = `
        <table id="regargartaba" class="styled-table">
        <thead>
          <tr>
            <th>Usuario</th>
            <th>fecha</th>
            <th>ganancia</th>
          </tr>
        </thead>
        <tbody>`;

        for (let i = 0; i < data.length; i++) {
          const item = data[i];
          datosHTML += `
          <tr>
            <td>${item.nombre_usuario}</td> 
            <td>${item.fecha}</td>
            <td> S/${item.ganancia_total}</td>
          </tr>`;
        }

        datosHTML += `</tbody></table>`;
        traerinventario.innerHTML = datosHTML;
        traerinventario.classList.add('table-container');
      } else {
        // Si no hay datos, muestra un mensaje
        traerinventario.innerHTML = `
        <table id="regargartaba" class="styled-table">
        <thead>
          <tr>
            <th>NO HAY REGISTROS DE GANANCIA POR AHORA</th>
          </tr>
        </thead>
        <tbody>`;
        traerinventario.classList.remove('table-container');
      }
    }
  };

  http.open('GET', url, true);
  http.send();
}



function frmlmodalCF() {
  document.getElementById("clientesF").innerHTML = "NUEVO CLIENTE";
  document.getElementById("RegisClieFA").innerHTML = "REGISTRAR";
  document.getElementById("frmCleientesF");
  $("#nuevosclientesF").modal("show");
  document.getElementById("id").value = "";
}

function registrarEmpreFA() {
  const ruc = document.getElementById("RucCliFa");
  const razonSocial = document.getElementById("RazonCliFa");
  const DireccionF = document.getElementById("direccionCliFa");
  const telefono = document.getElementById("telefonoCliFa");

  if (ruc.value == "" || razonSocial.value == "" || DireccionF.value == "" || telefono.value == "") {
    Swal.fire({
      icon: "warning",
      title: "Campos Vacias",
      text: "No has llenado todos los campos",
      footer: "",
    });
  } else {
    const url = base_url + "Compras/RegustrarEmpresa";
    const frm = document.getElementById("frmCleientesF");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "Empresa Registrada",
            "se a registrado un nuevo cliente , verifique para emitir la factura",
            "success"
          );
          frm.reset();
          $("#nuevosclientesF").modal("hide");
        }else {
          Swal.fire({
            icon: "error",
            title: res,
            text: "",
            footer: "",
          });
        }
      }
    };
    ;
  }
}


function BUSCARclienteFact(e) {
  if (e.which == 13) {
    const ruc = document.getElementById("FacturaElectronica").value;
    const url = base_url + "Compras/buscarRuc/" + ruc;

    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        console.log(res);
        if (res.length > 0) {
          const id_factura = res[0].id;
          const tablaHTML = `
            <div class="card btn btn-warning" onclick="mostrarAlerta(this)" data-clienteFact-id="${id_factura}">
              <table>
                <tr>
                  <td>RUC:</td>
                  <td>${res[0].ruc}</td>
                </tr>
                <tr>
                  <td>Razón Social:</td>
                  <td>${res[0].razon_social}</td>
                </tr>
                <tr>
                  <td>Dirección:</td>
                  <td>${res[0].direccion}</td>
                </tr>
                <tr>
                  <td>Teléfono:</td>
                  <td>${res[0].telefono}</td>
                </tr>
              </table>
            </div>
          `;
          document.getElementById('resultadoSunat').innerHTML = tablaHTML;
        } else {
          Swal.fire(
            "Registre al cliente",
            "No existe el RUC",
            "warning"
          );
        }
      }
    };
  }
}

function mostrarAlerta(tabla) {
  // Obtiene los datos de la tabla
  const datosTabla = tabla.innerHTML;

  // Muestra una alerta con los datos de la tabla
  Swal.fire({
    title: 'Datos del Cliente',
    html: datosTabla,
    imageUrl: '', // Puedes cambiar la imagen
    imageHeight: 1500,
    imageAlt: 'A tall image',
  });
}

function FrmDni() {
  document.getElementById("clentesBoletasss").innerHTML = "NUEVO CLIENTE";
  document.getElementById("clientesBoleta");
  document.getElementById("FrmClentDni");
  $("#clienteDni").modal("show");
}


function RegistrarBoleta() {
  const Dni = document.getElementById("BoletaDni");
  const nombre = document.getElementById("BolotNombre");
  const dirrecion = document.getElementById("dirrecionBoleta");
  const telefono = document.getElementById("boletaTelefono");

  if (Dni.value == "" || nombre.value == "" || dirrecion.value == "" || telefono.value == "") {
    Swal.fire({
      icon: "warning",
      title: "Campos Vacias",
      text: "No has llenado todos los campos",
      footer: "",
    });
  } else {
    const url = base_url + "Compras/RegistrarBoletaCliente";
    const frm = document.getElementById("FrmClentDni");
    const http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.send(new FormData(frm));
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res == "si") {
          Swal.fire(
            "Cliente Registrado",
            "se ha registrado un nuevo cliente , ahora puede generar la boleta",
            "success"
          );
          frm.reset();
          $("#clienteDni").modal("hide");
            
        }else {
          Swal.fire({
            icon: "error",
            title: res,
            text: "",
            footer: "",
          });
        }
      }
    };
    ;
  }
}


function clienteDni(e) {
  if (e.which == 13) {
    const dni = document.getElementById("boletaElectronica").value;
    const url = base_url + "Compras/buscarDni/" + dni;

    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        console.log(res);
        if (res.length > 0) {
          const idBoleta = res[0].id;
          const tablaHTML = `
          <div class="card btn btn-warning" onclick="MostrarBoletas(this)" data-cliente-id="${idBoleta}">
              <table>
                <tr>
                  <td>Dni:</td>
                  <td>${res[0].dni}</td>
                </tr>
                <tr>
                  <td>Nombre:</td>
                  <td>${res[0].nombre}</td>
                </tr>
                <tr>
                  <td>Dirección:</td>
                  <td>${res[0].direccion}</td>
                </tr>
                <tr>
                  <td>Teléfono:</td>
                  <td>${res[0].telefono}</td>
                </tr>
              </table>
            </div>
          `;
          document.getElementById('resultadoReniec').innerHTML = tablaHTML;
        } else {
          Swal.fire(
            "Registre al cliente",
            "No existe el DNI",
            "warning"
          );
        }
      }
    };
  }
}



function MostrarBoletas(tabla) {
  // Obtiene los datos de la tabla
  const datosTabla = tabla.innerHTML;

  // Muestra una alerta con los datos de la tabla
  Swal.fire({
    title: 'Datos del Cliente',
    html: datosTabla,
    imageUrl: '', // Puedes cambiar la imagen
    imageHeight: 1500,
    imageAlt: 'A tall image',
  });
}


document.addEventListener("DOMContentLoaded", function(){
  mostrarususarioS()
})

function mostrarususarioS() {
  const url = base_url + "usuarios/FunctionName/";
  const http = new XMLHttpRequest();
  
  http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
          const data = JSON.parse(this.responseText);
          
          if (data && data.length > 0 && data[0].nombre) {
              const nombreUsuario = data[0].nombre;
              const elementoMostrarUsuario = document.getElementById('mosrtrar_el_usuario');
              // Asignar el nombre del usuario al contenido del elemento HTML
              if (elementoMostrarUsuario) {
                  elementoMostrarUsuario.innerText = nombreUsuario;
              }
          }
      }
  };

  http.open('GET', url, true);
  http.send();
}

document.addEventListener("DOMContentLoaded", function () {
  const contenedorRechazados = document.getElementById('productosRechazados');
  if (contenedorRechazados) {
    obtener_inventarioRechazado();
  } else {
    // Oculta el contenedor si no hay datos
    ocultarContenedorRechazados();
  }
});

function obtener_inventarioRechazado() {
  const url = base_url + "Inventario/obtenerDatosRechazados/";

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
      if (res.length > 0) {
        let tablaHTML = '<table class="table">';  // Abre la etiqueta de la tabla
        tablaHTML += `
          <thead>
            <tr>
              <th>Producto</th>
              <th>Cantidad</th>
              <th>Categoría</th>
              <th>Medida</th>
              <th>Registre Los datos</th>
              <th>Actualizar</th>
            </tr>
          </thead>
          <tbody>
        `;

        // Itera sobre los elementos del array res
        res.forEach(item => {
          tablaHTML += `
            <tr>
              <td class="itemPtoductos">${item.producto}</td>
              <td class="itemcantidad">${item.cantidad}</td>
              <td class="itemcategoria">${item.categoria}</td>
              <td class="itemmedida">${item.medida}</td>
              <td>
              <input type="number" id="actualDatosss_${item.id_inventario}" class="actualDatosss" required>

              </td>
              <td>
              <button class="btn btn-primary" onclick="ActualizarDatos('${item.id_inventario}')">
              Actualizar
            </button>
            
              </td>
            </tr>
          `;
        });

        tablaHTML += '</tbody></table>';
        const contenedorRechazados = document.getElementById('productosRechazados');
        contenedorRechazados.innerHTML = tablaHTML;
      } else {
        // Oculta el contenedor si no hay datos
        ocultarContenedorRechazados();
      }
    }
  };
}

// Agrega esta función para ocultar el contenedor cuando no hay datos
function ocultarContenedorRechazados() {
  const contenedorRechazados = document.getElementById('ocultarsinohaydatos');
  if (contenedorRechazados) {
    contenedorRechazados.style.display = 'none';
  }
}




function ActualizarDatos(id_inventario) {
  const nuevoValor = document.querySelector(`#actualDatosss_${id_inventario}`).value;

  if (nuevoValor === '') {
    Swal.fire(
      "EL CAMPO ESTA VACIO",
      "No has ingresado ningún dato",
      "warning"
    ).then(() => {
      location.reload();
    });

    return; // Detener la ejecución si el campo está vacío
  }

  const datos = {
    idInventario: id_inventario,
    nuevoValor: nuevoValor
  };

  const url = base_url + "Inventario/recibirDatosActualizados/";

  let timerInterval;
  const timeout = 10000; // Establecer un tiempo límite de 10 segundos

  const loadingAlert = Swal.fire({
    title: "Cargando...",
    html: "Espere por favor.",
    timer: timeout,
    timerProgressBar: true,
    didOpen: () => {
      Swal.showLoading();
      const timer = Swal.getPopup().querySelector("b");
      timerInterval = setInterval(() => {
        timer.textContent = `${Swal.getTimerLeft()}`;
      }, 100);
    },
    willClose: () => {
      clearInterval(timerInterval);
    }
  });

  fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams(datos).toString()
  })
  .then(response => {
    loadingAlert.close(); // Cerrar la alerta de carga
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }
    return response.json();
  })
  .then(res => {
    if (res.status === "ok") {
      Swal.fire(
        "Actualizado",
        "El inventario se ha actualizado",
        "success"
      ).then(() => {
        location.reload();
      });
    }
  })
  .catch(error => {
    console.error("Error en la solicitud:", error);
    Swal.fire(
      "Error",
      "Hubo un error al procesar la solicitud. Por favor, inténtalo de nuevo.",
      "error"
    );
  });
}



function graficosVentas() {
  const url = base_url + "Administracion/graficosVentas/";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let Ventas = [];
      let fecha = [];
      for (let i = 0; i < res.length; i++) {
        Ventas.push(res[i]['totalVentas']);
        fecha.push(res[i]['fecha']);
      }

      var ctx = document.getElementById("graficosVentas").getContext('2d');

      // Obtener colores en forma de gradiente
      var gradient = ctx.createLinearGradient(0, 0, 0, 400);
      gradient.addColorStop(1, 'rgba(255, 0, 0, 0.8)'); // Rojo
      gradient.addColorStop(0.75, 'rgba(255, 165, 0, 0.8)'); // Naranja
      gradient.addColorStop(0.5, 'rgba(255, 255, 0, 0.8)'); // Amarillo
      gradient.addColorStop(0.25, 'rgba(0, 128, 0, 0.8)'); // Verde
      gradient.addColorStop(0, 'rgba(0, 0, 255, 0.8)'); // Azul

      var myBarChart = new Chart(ctx, {
        type: 'bar',
        data: {
          labels: fecha,
          datasets: [{
            label: 'VENTAS',
            data: Ventas,
            backgroundColor: gradient,
            borderWidth: 2,
          }],
        },
        options: {
          scales: {
            x: {
              title: {
                display: true,
                text: 'FECHA',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
            y: {
              beginAtZero: true,
              title: {
                display: true,
                text: 'VENTAS',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
          },
        },
      });
    }
  }
}



function perdidas() {
  const url = base_url + "Administracion/perdidas/";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let cantidad = [];
      let producto = [];
      for (let i = 0; i < res.length; i++) {
        cantidad.push(res[i]['cantidad']);
        producto.push(res[i]['producto']);
      }

      var ctx = document.getElementById("perdidas").getContext('2d');
      var myBarChart = new Chart(ctx, {
        type: 'line',  // Cambiado a gráfico de líneas
        data: {
          labels: producto,
          datasets: [{
            label: 'PERDIDAS',
            data: cantidad,
            backgroundColor: 'rgba(255, 99, 132, 0.2)', // Color de fondo
            borderColor: 'rgba(255, 99, 132, 1)', // Color del borde
            borderWidth: 2,
          }],
        },
        options: {
          scales: {
            x: {
              title: {
                display: true,
                text: 'producto',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
            y: {
              beginAtZero: true,
              title: {
                display: true,
                text: 'cantidad',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
          },
        },
      });
    }
  }
}



function productosVentass() {
  const url = base_url + "Administracion/prdocutosVentas/";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      let total_cantidad = [];
      let descripcion = [];
      for (let i = 0; i < res.length; i++) {
        total_cantidad.push(res[i]['total_cantidad']);
        descripcion.push(res[i]['descripcion']);
      }

      var ctx = document.getElementById("produc_ventas_vendidos").getContext('2d');
      
      // Definir colores de forma dinámica según los valores
      var colorArray = total_cantidad.map(value => {
        if (value > 50) {
          return 'green';  // Mayor a 50, color verde
        } else if (value > 20) {
          return 'yellow'; // Entre 20 y 50, color amarillo
        } else {
          return 'red';    // Menor o igual a 20, color rojo
        }
      });

      var myBarChart = new Chart(ctx, {
        type: 'bar',  // Cambiado a gráfico de barras
        data: {
          labels: descripcion,
          datasets: [{
            label: 'Vendidos',
            data: total_cantidad,
            backgroundColor: colorArray, // Usar los colores definidos
            borderColor: 'rgba(255, 99, 132, 1)',
            borderWidth: 2,
          }],
        },
        options: {
          scales: {
            x: {
              title: {
                display: true,
                text: 'Producto',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
            y: {
              beginAtZero: true,
              title: {
                display: true,
                text: 'Cantidad',
                font: {
                  size: 16,
                  weight: 'bold',
                },
                color: 'black',
              },
              ticks: {
                color: 'black',
                font: {
                  size: 12,
                },
              },
            },
          },
        },
      });
    }
  }
}












// vendedor
// vendedor
// vendedor
// vendedor
// vendedor
// vendedor
// vendedor

// Obtener referencia al campo de búsqueda
const filtrarProductosInput = document.getElementById('filtrarProductos');

// Obtener referencia al contenedor de productos
const productosVendedorContainer = document.getElementById('productosVendedor');

// Obtener todos los productos al inicio
let todosLosProductos = [];

function productosVendedor() {
  const url = base_url + "vendedor/productosVendedor/";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();

  http.onreadystatechange = function() {
    if (http.readyState == 4 && http.status == 200) {
      todosLosProductos = JSON.parse(http.responseText);
      mostPorductosss(todosLosProductos);
    }
  };
}

// Función para mostrar los productos en el contenedor
function mostPorductosss(productos) {
  // Verificar si el contenedor existe
  if (!productosVendedorContainer) {
    console.error("El contenedor de productos no existe.");
    return;
  }

  // Limpiar el contenedor antes de agregar nuevos productos
  productosVendedorContainer.innerHTML = '';

  // Crear elementos de productos y agregarlos al contenedor
  const row = document.createElement('div');
  row.classList.add('row', 'mt-2');

  for (let i = 0; i < productos.length; i++) {
    const col = document.createElement('div');
    col.classList.add('col-md-3', 'mb-2');

    const productoCard = document.createElement('form');
    productoCard.classList.add('card', 'm-2', 'p-3', 'btn');

    const imagenUrl = base_url + 'assets/img/' + productos[i].foto;
    productoCard.innerHTML = `<button type="submit" class="btn" onclick=""><img src="${imagenUrl}" alt="${productos[i].descripcion}" style="max-width: 50px;"> 
                                     ${productos[i].nombre_corto}<br>
                                     ${productos[i].descripcion}<br>
                                     ${productos[i].precio_venta}<br>
                                     </button>`;
    
    // Agregar evento de clic a cada formulario
    productoCard.addEventListener('submit', function(e) {
      e.preventDefault();
        totalVendedor();
       
       Toastify({
    text: "Producto agregado",
    duration: 2000,
    gravity: "bottom",
    close: true,
    progressBar: true,  // Habilitar la barra de progreso
}).showToast();
       
      console.log("ID del producto:", productos[i].id);
      enviarClientePorVender(productos[i].id);
    });

    col.appendChild(productoCard);
    row.appendChild(col);
  }

  productosVendedorContainer.appendChild(row);
}

// Agregar evento de escucha al campo de búsqueda
if (filtrarProductosInput) {
  filtrarProductosInput.addEventListener('input', function() {
    const filtro = filtrarProductosInput.value.toLowerCase();

    // Filtrar productos basados en el valor del campo de búsqueda
    const productosFiltrados = todosLosProductos.filter(producto =>
      producto.nombre_corto.toLowerCase().includes(filtro) ||
      producto.descripcion.toLowerCase().includes(filtro)
    );

    // Mostrar los productos filtrados
    mostPorductosss(productosFiltrados);
  });
}





function enviarClientePorVender(productoId) {
  const elemento = document.getElementById('divdondese');
  const url = base_url + "vendedor/agregarVentss/";
  const http = new XMLHttpRequest();
  http.open("POST", url, true);
  http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

  const params = "producto_id=" + encodeURIComponent(productoId);

  http.onreadystatechange = function() {
    if (http.readyState == 4 && http.status == 200) {
      console.log(http.responseText);
    productosagrgaos();
     totalVendedor();
      
    }
  }

  http.send(params);
}









function clientePedido() {
  const elemento = document.getElementById('productosSelVendedor');
  const clientePedidoInput = document.getElementById('clientePedidos');
  const clientePedidoValue = clientePedidoInput.value;

  if (clientePedidoValue === "") {
    Swal.fire(
      "REGISTRE UN CLIENTE",
      "Es obligatorio Registrar un cliente",
      "warning"
    );
  } else {
    const url = base_url + "vendedor/obteniendoClienteP/";
    const http = new XMLHttpRequest();

    http.onreadystatechange = function () {
      if (this.readyState == 4) {
        if (this.status == 200) {
          const res = JSON.parse(this.responseText);
          console.log(this.responseText);
          if (res === "si") {
            elemento.style.display = 'block';
            Swal.fire(
              "CLIENTE PENDIENTE",
              "Se ha agregado al cliente para atender",
              "success"
            ).then(() => {
              location.reload();
            });
          } else {
            Swal.fire(
              res,
              "Primero atiende el cliente pendiente",
              "warning"
            ).then(() => {
              location.reload();
            });
          }
        } else {
          console.error("Error en la solicitud HTTP: " + this.status);
        }
      }
    };

    const datos = "clientePedidos=" + encodeURIComponent(clientePedidoValue);
    http.open('POST', url, true);
    http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    http.send(datos);
  }
}



function activarEstado() {
  const elemento = document.getElementById('productosSelVendedor');
  const url = base_url + "vendedor/activarEstado/";
  const http = new XMLHttpRequest();
  http.open('GET', url, true);
  http.onreadystatechange = function () {
    if (this.readyState == 4) {
      if (this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res[0].estado == 1) {
          elemento.style.display = 'block';
        }
      }
    }
  }
  http.send();
}


document.addEventListener("DOMContentLoaded", function () {
  if (document.getElementById('mostrarCliente')) {
    traerClientePendiente();
  }
});

function traerClientePendiente() {
  const elemento = document.getElementById('mostrarCliente');
  const url = base_url + "vendedor/clientesporAtender/";
  const http = new XMLHttpRequest();
  http.open('GET', url, true);
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      console.log(this.responseText);
      let tablaHTML = "<table class='table'>";

      for (const cliente of res) {
        tablaHTML += `<tr>
          <td>
            <input type="text" value="${cliente.cliente}" class="form-control d-inline" readonly required>
          </td>
          <td><button class="btn btn-danger" onclick="cancelarpedidoss('${cliente.id}', '${cliente.id_usuario}')"><i class="fa-regular fa-circle-xmark"></i></button>

          </td>
          </tr>
        <tr>
          <td colspan="2">
            <input type="hidden" value="${cliente.id}" required>
            <input type="hidden" value="${cliente.id_usuario}" required>
            <input type="hidden" value="${cliente.estado}" required>
          </td>
        </tr>`;
      }

      // Cerrar la tabla HTML
      tablaHTML += "</table>";

      // Asignar la tabla como contenido HTML del elemento
      elemento.innerHTML = tablaHTML;
    }
  }
  http.send();
}

document.addEventListener("DOMContentLoaded", function () {
  if (document.getElementById('mostrarCliente')) {
    traerClientePendiente();
    productosagrgaos() 
  }
});

// Función JavaScript
function cancelarpedidoss(id, id_usuario) {
  const url = base_url + "vendedor/cancelarPedido/?id=" + id + "&id_usuario=" + id_usuario;
  console.log("URL: " + url);

  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      console.log(this.responseText);
      if (res === 'ok') {
        Swal.fire(
          "PEDIDO CANCELADO",
          "Se ha cancelado el pedido",
          "success"
        ).then(() => {
         location.reload();
        });
        productosagrgaos();
         totalVendedor();
      } else {
        Swal.fire({
          icon: 'error',
          title: 'ALGO PASO',
          text: 'comuniquese con el desarrollador',
          footer: '901219565',
        });
      }
    }
  };
}





function productosagrgaos() {
  const grupoHtml = document.getElementById('icualtarsinohaydatos');
  grupoHtml.classList.remove('d-none')
  const tablaElemento = document.getElementById('listaVendedor');

  // Verificar si los elementos existen antes de continuar
  if (!grupoHtml || !tablaElemento) {
    console.error('No se encontraron elementos HTML');
    return;
  }

  const url = base_url + "vendedor/mostrarProducList/";
  const http = new XMLHttpRequest();
  http.open('GET', url, true);
  http.onreadystatechange = function () {
    if (this.readyState == 4) {
      if (this.status == 200) {
        const res = JSON.parse(this.responseText);
        totalVendedor();

        // Verificar si hay datos antes de construir la tabla
        if (res.length > 0) {
          // Limpiamos la tabla antes de agregar los nuevos datos
          tablaElemento.innerHTML = `
            <thead class="thead-dark">
              <tr>
                <th>Producto</th>
                <th>Precio</th>
                <th>Medida</th>
                <th>Cantidad</th>
                <th>Subtotal</th>
                <th></th>
              </tr>
            </thead>
            <tbody>
              ${res.map(item => `
                <tr>
                  <td>${item.descripcion}</td>
                  <td>S/${item.precio}</td>
                  <td>${item.nombre_corto}</td>
                  <td>${item.cantidad}</td>
                  <td>${item.subtotal}</td>
                  <td><button class="btn btn-danger" onclick="AnularPedido(${item.id})"><i class="fa-regular fa-circle-xmark"></i></button></td>
                </tr>
              `).join('')}
            </tbody>
          `;
          // Mostrar la tabla
          grupoHtml.style.display = 'block';
          tablaElemento.style.display = 'block';
        } else {
          // No hay datos, ocultar el bloque HTML
          grupoHtml.style.display = 'none';
          tablaElemento.style.display = 'none';
        }
      }
    }
  };
  http.send();
}

function AnularPedido(id){
  
  const url = base_url+"vendedor/deleteitem/"+id;
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
     if (res==='ok') {
      Swal.fire(
        'PRODUCTO ELIMINADO',
        'el producto fue eliminado',
        'success'
      );
      productosagrgaos()
     }else{
      Swal.fire({
        icon: 'error',
        title: 'ALGO PASO',
        text: 'comuniquese con el desarrollador',
        footer: '901219565',
      })
     }
     
    }
  }
}



function EmviarPedidos() {
  const url = base_url+"vendedor/EmviarPedidosCaja/";
  const http = new XMLHttpRequest();
  http.open("GET", url, true);
  http.send();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      console.log(res);
     if (res==='ok') {

      Swal.fire(
        'PRODUCTOS EN CAJA',
        'el producto fue enviado a caja',
        'success'
      ).then(() => {
        location.reload();
       });
      productosagrgaos()
     }else{
      Swal.fire({
        icon: 'error',
        title: 'ALGO PASO',
        text: 'comuniquese con el desarrollador',
        footer: '901219565',
      })
     }
     
    }
  }
}

// Llama a la función cuando se carga la página
document.addEventListener("DOMContentLoaded", function () {
  if (document.getElementById('notificacionContainer')) {
    notificarVentas();
    listarProductosCaja();
  }
 
});

// Función para crear y devolver un nuevo elemento de audio
function crearAudioElement() {
  return new Audio(base_url + "assets/sound/notificacion.mp3");
}

function notificarVentas() {
  // Obtén un nuevo elemento de audio
  const audioElement = crearAudioElement();

  function realizarPeticion() {
    const url = base_url + "Compras/notificarVentas/";
    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();

    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
            if (res == "no") {
              document.getElementById('notificacionContainer').classList.add('d-none')
        } else {
          document.getElementById('notificacionContainer').classList.remove('d-none')
          document.getElementById('notificacion').innerHTML = res
          audioElement.play();
        }
      }
    };
  }

  // Realizar la primera petición y luego establecer el intervalo
  realizarPeticion();
  setInterval(realizarPeticion, 5000); // Realizar la petición cada 5 segundos (ajusta según tus necesidades)
}



function Frmnotificacion() {
 
  document.getElementById("clienteVendedor").innerHTML = "VENTAS POR COBRAR";
  document.getElementById("frmVendedor");
  $("#respuestaDelVendedor").modal("show");
  document.getElementById("id").value = "";
}



function RegresarModal(e) {
  e.preventDefault();
  $("#Detalles_del_cendedor").modal("hide");
  document.getElementById("clienteVendedor").innerHTML = "VENTAS POR COBRAR";
  document.getElementById("frmVendedor");
  $("#respuestaDelVendedor").modal("show");
  document.getElementById("id").value = "";
}


setInterval(listarProductosCaja, 5000);

function listarProductosCaja() {
  
  const url = base_url + "Compras/datos_encaja/";
  const http = new XMLHttpRequest();
  http.open('GET', url, true);
  http.onreadystatechange = function () {
    if (this.readyState == 4) {
      if (this.status == 200) {
        const res = JSON.parse(this.responseText);
        if (res.length > 0) {
          const totalLista = document.getElementById("totalLista");
          totalLista.innerHTML = "";
          // Crear la estructura de la tabla
          const tabla = document.createElement("table");
          tabla.className = "table";
          const thead = document.createElement("thead");
          thead.className = "thead-dark";
          thead.innerHTML = `
            <tr>
              <th>Vendedor</th>
              <th>Cliente</th>
              <th>Total</th>
              <th></th>
              <th></th>
              <th></th>
            </tr>
          `;
          tabla.appendChild(thead);
          const tbody = document.createElement("tbody");
          tbody.innerHTML = res.map(item => `
            <tr>
              <td>${item.vendedor}</td>
              <td>${item.cliente}</td>
              <td>S/${item.total}</td>
              <td><button class="btn btn-warning" onclick="cobrarPedidos(event,${item.id_cliente})">Detalles</button></td>
             <td><button class="btn btn-success" onclick="cobrarVendedores(event,${item.id_cliente})">AGREGAR AL POST</button></td>
             <td><button class="btn btn-success" onclick="CancelarPedidosVendedor(event,${item.id_cliente})">CANCELAR PEDIDOS</button></td>
              </td>
            </tr>
          `).join('');
          tabla.appendChild(tbody);

          // Agregar la tabla al contenedor
          totalLista.appendChild(tabla);
        }
      }
    }
  }
  http.send();
}

function CancelarPedidosVendedor(e, id_cliente) {
  e.preventDefault();
  
  Swal.fire({
    title: "ESTAS SEGURO DE CANCELAR LA LISTA?",
    text: "Advertencia ,se eliminara toda la lista!",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "Si, Cancelar!"
  }).then((result) => {
    if (result.isConfirmed) {
      const url = base_url + "Compras/AnularLista/" + id_cliente;
      const http = new XMLHttpRequest();
  
      http.open('GET', url, true);
  
      http.onreadystatechange = function () {
        if (this.readyState == 4) {
          if (this.status == 200) {
            const res = JSON.parse(this.responseText);
            console.log(this.responseText);
            if (res === 'ok') {
              Swal.fire({
                title: "Deleted!",
                text: "Your file has been deleted.",
                icon: "success"
              }).then((result) => {
                if (result.isConfirmed) {
                  // Recargar la página
                  window.location.reload();
                }
              });
              
            }
          }
        }
      };
  
      http.send();
    }
  });
}



document.addEventListener("DOMContentLoaded", function () {
  if (document.getElementById('Detallecobrar')) {
    paginaCobrar();
  }

 
});


function paginaCobrar(e, id_cliente) {
  e.preventDefault();
  const url = base_url + "Compras/datos_detalleVentas/" + id_cliente;
  const http = new XMLHttpRequest();
  http.open('GET', url, true);
  http.onreadystatechange = function () {
    if (this.readyState == 4) {
      if (this.status == 200) {
        const res = JSON.parse(this.responseText);

        if (res.length > 0) {
          const totalLista = document.getElementById("Detallecobrar");
          totalLista.innerHTML = "";
          const tabla = document.createElement("table");
          tabla.className = "table";
          const thead = document.createElement("thead");
          thead.className = "thead-dark";
          thead.innerHTML = `
            <tr>
              <th>Productos</th>
              <th>Tipo</th>
              <th>Cantidad</th>
              <th>Sub total</th>
              <th></th>
            </tr>
          `;
          tabla.appendChild(thead);
          const tbody = document.createElement("tbody");
          tbody.innerHTML = res.map(item => `
            <tr>
              <td>${item.productos}</td>
              <td>${item.nombre}</td>
              <td>S/${item.cantidad}</td>
              <td>S/${item.sub_total}</td>
              <td><button class="btn btn-danger" onclick="borrarPedido(${item.id})"><i class="fa-regular fa-circle-xmark"></i></button></td>
            </tr>
          `).join('');
          tabla.appendChild(tbody);

          totalLista.appendChild(tabla);
        }
      }
    }
  };
  http.send();
}





function cobrarPedidos(e, id_cliente) {

  e.preventDefault();
  $("#respuestaDelVendedor").modal("hide");
  document.getElementById("detallesDeVentas").innerHTML = "DETALLES DE LAS VENTAS";
  document.getElementById("CONFIRMARdETALLES").innerHTML = "Regresar";
  document.getElementById("frmDetallesVendedor");
  $("#Detalles_del_cendedor").modal("show");
  document.getElementById("id").value = "";

  const url = base_url + "Compras/datos_detalleVentas/" + id_cliente;
  const http = new XMLHttpRequest();
  http.open('GET', url, true);
  http.onreadystatechange = function () {
    if (this.readyState == 4) {
      if (this.status == 200) {
        const res = JSON.parse(this.responseText);
        
        if (res.length > 0) {
          const totalLista = document.getElementById("DetallesVendedores");
          totalLista.innerHTML = "";
          const tabla = document.createElement("table");
          tabla.className = "table";
          const thead = document.createElement("thead");
          thead.className = "thead-dark";
          thead.innerHTML = `
            <tr>
              <th>Productos</th>
              <th>Tipo</th>
              <th>Cantidad</th>
              <th>Sub total</th>
              <th></th>
            </tr>
          `;
          tabla.appendChild(thead);
          const tbody = document.createElement("tbody");
          tbody.innerHTML = res.map(item => `
          
            <tr>
              <td>${item.productos}</td>
              <td>${item.nombre}</td>
              <td>S/${item.cantidad}</td>
              <td>S/${item.sub_total}</td>
              <td><button class="btn btn-danger" onclick="borrarPedido(${item.id})"><i class="fa-regular fa-circle-xmark"></i></button></td>
            </tr>
          `).join('');
          tabla.appendChild(tbody);

          totalLista.appendChild(tabla);
        }
      }
    }
  }
  http.send();
}









function cobrarVendedores(e, id_cliente) {
  e.preventDefault();
    const url = base_url+"Compras/agregarDetalleTemp/" + id_cliente;
    const http = new XMLHttpRequest();
    http.open("GET", url, true);
    http.send();
    http.onreadystatechange = function () {
      if (this.readyState == 4 && this.status == 200) {
        const res = JSON.parse(this.responseText);
        console.log(res);
       if (res==='ok') {
  
        Swal.fire(
          'PORDUCTOS INGRESADOS',
          'Los productos fueron Ingresados',
          'success'
        ).then(() => {
          location.reload();
         });
        productosagrgaos()
       }else{
        Swal.fire({
          icon: 'error',
          title: 'ALGO PASO',
          text: 'comuniquese con el desarrollador',
          footer: '901219565',
        })
       }
       
      }
    }
  }



  document.addEventListener("DOMContentLoaded", function () {
    if (document.getElementById('mosTrarObservaciones')) {
    mostrarObservaciones() 
    }
    
 })

  function mostrarObservaciones() {
    const observaciones = document.getElementById('mosTrarObservaciones');
    const url = base_url + "Administracion/contarObservaciones/";
    const http = new XMLHttpRequest();
    
    http.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            const res = JSON.parse(this.responseText);
            observaciones.innerHTML = res.Datsopor_observar;
        }
    };
    
    http.open("GET", url, true);
    http.send();
}

  
  document.addEventListener("DOMContentLoaded", function () {
  if (document.getElementById('totalVendedor')) {
  totalVendedor();
  setInterval(totalVendedor, 2000);
  }
  
})



function totalVendedor() {
  const totalVendedorInput = document.getElementById('totalVendedor');
  const url = base_url + "vendedor/sumarTotalVendedor/";
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      totalVendedorInput.value = res.total;
    }
  };

  http.open("GET", url, true);
  http.send();
}


































































function traer_detalles_para_editar(id_venta) {
  const url = base_url + "Compras/lista_detalles/" + id_venta;
  const http = new XMLHttpRequest();

  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      calcular_vuelto(id_venta)
      let html_productos_listado = ""; // declarar la variable html_productos_listado fuera del bucle forEach

      res.forEach(detalle => {
        // Concatenar al contenido existente en lugar de reemplazarlo en cada iteración
        html_productos_listado += `
          <div class="row mb-2">
            <div class="col-md-3">
            <label for="cantidad_editar">PRODUCTO</label>
              <li class="list-group-item">${detalle.descripcion}</li> <!-- Corregido: usar el nombre de la variable 'detalle' -->
              <input type="text" class="form form-control d-none" value="${detalle.nombre}"> <!-- Corregido: usar el nombre de la variable 'detalle' -->
            </div>
            <div class="col-md-2">
            <label for="cantidad_editar">PRECIO</label>
            <li class="list-group-item">${detalle.precio}</li> <!-- Corregido: usar el nombre de la variable 'detalle' -->
            <input type="text" class="form form-control d-none" value="${detalle.nombre}"> <!-- Corregido: usar el nombre de la variable 'detalle' -->
          </div>
          <div class="col-md-2">
          <label for="cantidad_editar">CANTIDAD</label>
          <li class="list-group-item">${detalle.cantidad}</li> <!-- Corregido: usar el nombre de la variable 'detalle' -->
          <input type="text" class="form form-control d-none" value="${detalle.nombre}"> <!-- Corregido: usar el nombre de la variable 'detalle' -->
        </div>
        <div class="col-md-4 row">
        <div class="col-md-8">
        <label for="cantidad_editar">SUBTOTAL</label>
        <li class="list-group-item">${detalle.sub_total}</li> <!-- Corregido: usar el nombre de la variable 'detalle' -->
        <input type="text" class="form form-control d-none" value="${detalle.nombre}"> <!-- Corregido: usar el nombre de la variable 'detalle' -->
        </div>
          <div class="col-md-4 mt-4">
          <button type="button" class="btn btn-primary mt-2"  onclick="editar_producto_lista(${detalle.id})"><i class="fas fa-edit"></i></button>
          <button type="button" class="btn btn-danger mt-2"><i class="fas fa-trash-alt"></i></button>
       
      </div>
    
      
      </div>
            <!-- Agregar aquí el resto del contenido si es necesario -->
          </div>`;
      });
      document.getElementById('detalles_ventas').innerHTML = html_productos_listado; // Corregido: asignar el contenido completo después del bucle
    }
  };

  http.open("GET", url, true);
  http.send();
}








function productos_para_editar(id_detalle_venta) {
  const url = base_url + "Compras/listar_productos/";
  const http = new XMLHttpRequest();
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
      const productosSinFiltrar = res; // Mantener una copia de los productos sin filtrar
      // Variable para almacenar el HTML generado
      let cargar_productos = '<div class="container"><div class="row" id="fila_productos">'; // Iniciar el contenedor principal
      res.forEach((producto, index) => {
        url_img = base_url + "assets/img/" + producto.foto; // Definir la URL de la imagen
        cargar_productos += `
          <div class="col-md-3" id="producto_${index}" > <!-- Agregar un ID único a cada tarjeta de producto -->
            <div class="card btn" onclick="editar_con_clik(${id_detalle_venta},${producto.id} )">
              <img src="${url_img}" class="card-img-top" alt="">
              <div class="card-body">
                <h5 class="card-title">${producto.descripcion}</h5>
                <p class="card-text">Precio: ${producto.precio_venta}</p>
                <p class="card-text">Código: ${producto.codigo}</p>
              </div>
            </div>
          </div>
        `;
      });

      cargar_productos += '</div></div>'; // Cerrar el contenedor principal
      // Agregar el HTML generado al documento
      document.getElementById('productos_editar').innerHTML = cargar_productos;

      // Agregar el evento de entrada para el campo de filtrado
      document.getElementById('filtrar_productos').addEventListener('input', function() {
        const filtro = this.value.toLowerCase(); // Obtener el valor del campo de filtrado en minúsculas

        productosSinFiltrar.forEach((producto, index) => {
          const textoProducto = producto.descripcion.toLowerCase(); // Obtener el texto del producto en minúsculas
          const cardTitle = document.getElementById(`producto_${index}`).getElementsByClassName('card-title')[0]; // Obtener el título de la tarjeta de producto

          // Mostrar u ocultar la tarjeta según si coincide con el filtro
          if (textoProducto.includes(filtro)) {
            cardTitle.parentNode.parentNode.parentNode.style.display = ''; // Mostrar la tarjeta
          } else {
            cardTitle.parentNode.parentNode.parentNode.style.display = 'none'; // Ocultar la tarjeta
          }
        });
      });
    }
  };
  http.open("GET", url, true);
  http.send();
}





function editar_con_clik(id_detalle_venta, id_producto) {
  const url = base_url + "Compras/editar_venta/" + id_detalle_venta;
  const http = new XMLHttpRequest();
  const formData = new FormData();
  formData.append('id_producto', id_producto);
  http.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      const res = JSON.parse(this.responseText);
     if (res == "ok") {
        editar_producto_lista(id_detalle_venta);
     }else{
      Swal.fire({
        title: "ALGO PASO",
        text: res,
        icon: "question"
      });
     }
    }
  };
  http.open("POST", url, true);
  http.send(formData);
}







