var clienteSeleccionado = "";
var complementoAerolinea = "";
var complementoINE = "";
var opcionFactura = 0;
var boton;
var contenidoConceptos = ""; //Conceptos dinamicos contenedor
var contenidoPagos = ""; //Contenedor pagos parciales
var opcionFacturaGlobal = "1";
$(document).ready(function () {
let productosArray = [];
obtenerClientes();
obtenerMateriales();
obtenerFolio();
obtenerUsoCfdi();
obtenerMetodoPago();
obtenerViaPago();
var opciones = document.getElementById('opcionesFacturacion');
opciones.addEventListener("change", function (event) {
var opcionSeleccionada = event.target.value;
switch (opcionSeleccionada) {
case "1":
console.log(opcionSeleccionada)
opcionFactura = 1;
document.getElementById('tablaConceptos').innerHTML = contenidoConceptos;
//contenidoPagos = document.getElementById('contenedorPagos').innerHTML;
//document.getElementById('contenedorPagos').innerHTML = '';
document.getElementById('contenedorPagos').style.display = 'none';
obtenerFolio();
$('#agregarFila').on('click', agregarFilaHandler);
document.getElementById('iconoCliente').style.display = '';
document.getElementById('cliente').style.display = ''
opcionFacturaGlobal = "1";
var razonSocial = document.getElementById('inputRazonSocial');
var cpReceptor = document.getElementById('inputCPCliente');
var rfcReceptor = document.getElementById('inputRFC');
var regimenReceptor = document.getElementById('inputRegimenFiscal');
cpReceptor.style.display = 'none';
cpReceptor.value = '';
regimenReceptor.style.display = 'none';
regimenReceptor.value = '';
rfcReceptor.style.display = 'none';
rfcReceptor.value = '';
razonSocial.style.display = 'none';
razonSocial.value = '';
break;
case "2":
opcionFacturaGlobal = "2";
var montoPago = document.getElementById('montoPagado')
montoPago.addEventListener('input', function () {
var montoDeuda = document.getElementById('debe');
var montoPago = document.getElementById('montoPagado')
var deuda = parseFloat(montoDeuda.value);
var pago = parseFloat(montoPago.value);
var saldoInsoluto = deuda - pago;
$('#impSaldoInsoluto').val(saldoInsoluto.toFixed(2));
var mensajeError = document.getElementById('mensajeError');
if (pago > deuda) {
mensajeError.textContent = 'El monto pagado no puede ser mayor que la deuda.';
} else {
mensajeError.textContent = '';
}
});
document.getElementById('contenedorPagos').style.display = '';
contenidoConceptos = document.getElementById('tablaConceptos').innerHTML;
document.getElementById('tablaConceptos').innerHTML = '';
console.log(opcionSeleccionada)
break;
}
});
document.addEventListener("DOMContentLoaded", function () {
});
$('#tablaDatos').on('click', '.btnEliminarFila', function () {
$(this).closest('tr').remove();
nuevaFila.remove();
calcularTotales();
actualizarNombresConcepto();
});
});
function complementoIne(val1) {
var ineContenedor = document.getElementById('ineContenedor');
var grupoEntidad = document.getElementById('grupoEntidad');
// Contenido para 'Ordinario'
var contenidoOrdinario = '
' +
'
' +
'' +
'' +
'
' +
'
' +
'
' +
'
' +
'' +
'' +
'
' +
'
' +
'';
// Contenido para 'No Ordinario'
var contenidoNoOrdinario = '
' +
'
' +
'' +
'' +
'
' +
'
' +
'
' +
'
' +
'' +
'' +
'
' +
'
' +
'';
var tipoComiteDiv = document.getElementById('tipoComiteDiv');
var contabilidadDiv = document.getElementById('contabilidadDiv');
// Agregar el contenido correspondiente según la opción seleccionada
if (val1 === 'Ordinario') {
console.log("Valorasd", val1)
contabilidadDiv.style.display = 'block';
tipoComiteDiv.style.display = 'block';
//ineContenedor.innerHTML = contenidoOrdinario;
} else if (val1 == 'Campaña' || val1 == 'Precampaña') {
contabilidadDiv.style.display = 'none';
tipoComiteDiv.style.display = 'none';
console.log("Valor", val1)
//grupoEntidad.innerHTML = contenidoNoOrdinario;
}
}
function obtenerFolio() {
var timestamp = new Date().getTime();
var timestampString = timestamp.toString().slice(-6); // Utilizar solo los últimos 6 dígitos
// Generar un número aleatorio único de 4 dígitos
var uniqueSuffix = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
var folioInput = document.getElementById('folioP');
folioInput.addEventListener('input', function () {
if (folioInput.value.length > 10) {
folioInput.value = folioInput.value.slice(0, 10);
}
});
// Concatenar la marca de tiempo y el sufijo único
document.getElementById('folioP').value = timestampString + uniqueSuffix;
}
// Función para obtener el token CSRF de la cookie
function getCSRFToken() {
const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const [name, value] = cookie.split('=');
if (name === 'csrf_token') {
return value;
}
}
return null;
}
function obtenerMateriales() {
const csrfToken = getCSRFToken();
if (!csrfToken) {
console.error('Token CSRF no encontrado');
return;
}
fetch('php/items/productos.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken // Envía el token CSRF en un encabezado personalizado
},
body: JSON.stringify({ csrf_token: csrfToken }) // Incluye el token CSRF en los datos de la solicitud
})
.then(response => response.json())
.then(data => {
if (data.error) {
console.error('Error al obtener datos de clientes:', data.error);
} else {
productosArray = [];
console.log('PRODUCTOS', data)
data.forEach(producto => {
productosArray.push(producto);
});
}
})
}
function obtenerClientes() {
fetch('php/items/clientes.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
})
.then(response => response.json())
.then(data => {
if (data.error) {
console.error('Error al obtener datos de clientes:', data.error);
} else {
let clienteSelect = document.getElementById('cliente');
data.forEach(cliente => {
//se recorren todos los clientes
let option = document.createElement('option');
option.value = JSON.stringify(cliente);
if (cliente.Frgrp == '999') {
option.text = 'CLIENTE DE CONTADO';
} else {
option.text = cliente.Name1;
}
clienteSelect.add(option);
});
// Agregar un evento de cambio al select
clienteSelect.addEventListener('change', function () {
let selectedValue = JSON.parse(clienteSelect.value);
clienteSeleccionado = selectedValue.Kunnr;
if (selectedValue.Frgrp == '999') {
console.log('CONTADO');
document.getElementById('inputRazonSocial').value = '';
document.getElementById('inputRazonSocial').style = '';
document.getElementById('inputRFC').value = '';
document.getElementById('inputRFC').style = '';
document.getElementById('inputRegimenFiscal').value = '';
document.getElementById('inputRegimenFiscal').style = '';
document.getElementById('inputCPCliente').value = '';
document.getElementById('inputCPCliente').style = '';
document.getElementById('RFC').textContent = '';
document.getElementById('razonSocial').textContent = '';
document.getElementById('regimenFiscal').textContent = '';
document.getElementById('cpCliente').textContent = '';
return;
}
document.getElementById('inputRazonSocial').value = '';
document.getElementById('inputRazonSocial').style.display = 'none';
document.getElementById('inputRFC').value = '';
document.getElementById('inputRFC').style.display = 'none';
document.getElementById('inputRegimenFiscal').value = '';
document.getElementById('inputRegimenFiscal').style.display = 'none';
document.getElementById('inputCPCliente').value = '';
document.getElementById('inputCPCliente').style.display = 'none';
document.getElementById('RFC').textContent = selectedValue.Stcd1;
var razonSocial = selectedValue.Name1.toString();
document.getElementById('razonSocial').textContent = selectedValue.Name1;
document.getElementById('regimenFiscal').textContent = selectedValue.Frgrp;
document.getElementById('cpCliente').textContent = selectedValue.Pstlz;
//inputs ocultos
document.getElementById('inputRazonSocial').value = razonSocial;
var rfcR = selectedValue.Stcd1.toString();
document.getElementById('inputRFC').value = rfcR;
var regimenR = selectedValue.Frgrp.toString();
document.getElementById('inputRegimenFiscal').value = regimenR;
var cpCliente = selectedValue.Pstlz.toString();
document.getElementById('inputCPCliente').value = cpCliente;
});
}
})
.catch(error => console.error('Error al realizar la solicitud AJAX:', error));
}
// Cambiar valores de otras columnas al seleccionar código
$('#tablaDatos').on('change', '.codigo', function () {
var codigoSeleccionado = $(this).val();
var fila = $(this).closest('tr');
// Llamar a la función para calcular el importe
calcularImporte(fila);
calcularTotales();
actualizarNombresConcepto();
});
function obtenerUsoCfdi() { //03/03/2024 Michael Cabreras
$.ajax({
url: '../php/items/UsoCFDI.php',
type: 'GET',
dataType: 'json',
success: function (data) {
console.log(data)
// Una vez que se recibe el JSON, construir el select
$.each(data, function (index, objeto) {
$('#usoFactura').append($('
');
// Obtener los últimos 10 caracteres y establecer la dirección del texto
var codigoProducto = producto.Matnr;
var displayText = producto.Matnr.slice(-10);
option.val(JSON.stringify(producto));
option.text(producto.Maktx);
// Aplicar la dirección del texto y la alineación
option.css({
"direction": "rtl",
"text-align": "left",
"border-bottom": "2px solid #ccc" // Agregar borde inferior
});
selectCodigo.append(option);
});
selectCodigo.on("focus", function () {
$(this).attr("size", 10);
});
selectCodigo.on("blur", function () {
$(this).attr("size", 1);
});
selectCodigo.on('change', function () {
var selectedValue = JSON.parse($(this).val());
console.log(selectedValue);
var fila = $(this).closest('tr');
fila.find('.claveSat').val(selectedValue.Csatmat || '');
fila.find('.unidadMedida').val(selectedValue.Csatum || '');
fila.find("#descripcionConcepto").val(selectedValue.Maktx || '');
var codigoProducto = selectedValue.Matnr;
fila.find('.form-control[name^="concepto"][name$="[1]"]').val(codigoProducto);
var codigoUnidadSat = selectedValue.Csatum;
fila.find('.form-control[name^="concepto"][name$="[12]"]').val(codigoUnidadSat);
// Después de seleccionar, volvemos a reducir el tamaño a 1
$(this).attr("size", 1);
});
} catch (error) {
alert("No se pudo obtener la lista de materiales");
}
// Agrega la nueva fila a la tabla
$('#tablaDatos tbody').append(nuevaFila);
// Evento para eliminar la fila al hacer clic en el botón "Eliminar"
nuevaFila.find('.btnEliminarFila').on('click', function () {
nuevaFila.remove();
calcularTotales();
actualizarNombresConcepto();
});
// Evento para calcular el importe al llenar cantidad o precio unitario en la nueva fila
nuevaFila.find('.cantidad, .precioUnitario').on('input', function () {
calcularImporte(nuevaFila);
calcularTotales();
});
// Evento para cambiar valores al seleccionar el código en la nueva fila
nuevaFila.find('.codigo').on('change', function () {
calcularImporte(nuevaFila);
calcularTotales();
actualizarNombresConcepto();
});
}
function consultarFolio() {
$.ajax({
url: 'php/consulta/facturas.php',
type: 'GET',
dataType: 'json',
success: function (data) {
if (data.length == 0) {
// alert('No se encontraron facturas.');
}
},
error: function (error) {
console.error('Error en la solicitud AJAX:', error);
}
});
}
//Funcion para regrear la tabla a su estado normal
function limpiarTablaHandler() {
// Elimina todas las filas de la tabla
$('#tablaDatos tbody').empty();
// Crea una nueva tabla limpia y la agrega al contenedor
var nuevaTabla = $(
'
' +
'' +
'
' +
'
Código
' +
'
Clave SAT
' +
'
Descripción
' +
'
Unidad de Medida
' +
'
Cantidad
' +
'
Precio Unitario
' +
'
Importe
' +
'
' +
'' +
'' +
'' +
'' +
'
');
$('#tablaDinamica').empty().append(nuevaTabla);
}
if (boton) {
}
function limpiarFormulario() {
obtenerFolio();
$('#modalExito').modal('show');
var emailValue = $('#email').val();
$('#modalExito .modal-body p').html('La factura se ha enviado al correo: ' + emailValue);
var inputEmail = document.getElementById('email');
inputEmail.value = '';
var inputTelefono = document.getElementById('telefono');
inputTelefono.value = '';
document.getElementById("subtotalInput").value = '';
document.getElementById("ivaInput").value = '';
document.getElementById("totalInput").value = '';
var elementoIva = document.getElementById("iva");
var subtotal = document.getElementById("subtotal");
var total = document.getElementById("total");
elementoIva.textContent = "0.00";
subtotal.textContent = "0.00";
total.textContent = "0.00";
}
function toggleLoader() {
console.log('ENTRA')
var loaderWrapper = document.getElementById("loaderWrapper");
if (loaderWrapper.classList.contains("hidden")) {
loaderWrapper.classList.remove("hidden");
$('#overlay').removeClass('hidden');
} else {
loaderWrapper.classList.add("hidden");
$('#overlay').addClass('hidden');
}
}
function toggleLoader2() {
console.log('ENTRA')
var loaderWrapper = document.getElementById("loaderWrapper2");
if (loaderWrapper.classList.contains("hidden")) {
loaderWrapper.classList.remove("hidden");
$('#overlay').removeClass('hidden');
} else {
loaderWrapper.classList.add("hidden");
$('#overlay').addClass('hidden');
}
}
function facturaNormal(formData, user, cecoString, centroC, userName, folioP) {
toggleLoader();
$.ajax({
type: 'POST',
url: 'php/Timbrado/timbrar.php',
data: formData,
processData: false,
contentType: false,
dataType: 'json',
success: function (response) {
console.log(response)
var code = response.code;
var mensaje = response.message;
var uuid = response.uuid;
console.log('Prueba json', response.uuid)
// var folio = data.folio;
var datosTabla = obtenerDatosTabla();
//ID_VTA, ID_CLIENTE, ID_STATUS, CENTRO, ORG_VENTAS, TOTAL_VNTA
var totalVenta = document.getElementById('totalInput').value;
if (response.code == "200") {
//limpiarFormulario();
toggleLoader();
cabeceraFatura(folioP, clienteSeleccionado, cecoString, totalVenta, uuid);
guardarFactura(uuid, folioP.value);
limpiarFormulario();
} else {
console.log('re', response);
$('#mensajeError').text(response.message);
$('#modalError').modal('show');
toggleLoader();
}
},
error: function (xhr, status, error) {
console.log(xhr, status, error)
toggleLoader();
var mensaje = "Error de servidor";
$('#mensajeErrores').text(mensaje);
$('#modalErrores').modal('show');
}
});
}
function insertarFactura(folioP, uuid, vta_id) {
var usoFactura = $('#usoFactura option:selected').data('value');
var tipoPago = $('#tipoPago option:selected').data('value');
var formaPago = $('#formaPago option:selected').val();
var datos = {
'opcion': '2',
'ID_VTACABE': vta_id,
'UUID': uuid,
'FOLIO': folioP.value,
'ID_STATUS_CFDI': '6',
'ID_CFDI': usoFactura,
'ID_VIAPAGO': formaPago,
'ID_METODOPAGO': tipoPago,
};
$.ajax({
type: 'POST',
url: 'php/RegistroFacturas/ManipulacionFacturas.php',
data: datos,
success: function (response) {
console.log(response);
},
error: function (error) {
console.error('Error en la segunda llamada AJAX', error);
}
});
}
function cabeceraFatura(folioP, clienteSeleccionado, cecoString, totalVenta, uuid) {
var datos = {
'opcion': '1',
'ID_VTA': folioP.value,
'ID_CLIENTE': clienteSeleccionado,
'ID_STATUS': '6',
'CENTRO': '1901',
'ORG_VENTAS': cecoString,
'TOTAL_VNTA': totalVenta
};
$.ajax({
type: 'POST',
url: 'php/RegistroFacturas/ManipulacionFacturas.php',
data: datos,
success: function (response) {
console.log(response);
vta_cabecera = response[0].id;
insertarFactura(folioP, uuid, vta_cabecera);
console.log('CABECERA',vta_cabecera);
detalleFactura(vta_cabecera);
},
error: function (error) {
console.error('Error en la segunda llamada AJAX', error);
}
});
}
function detalleFactura(id_cab) {
datosTabla = obtenerDatosTabla();
var acum = 0;
for (var i = 0; i < datosTabla.length; i++) {
acum = acum + 10;
var cantidad = "";
var idProducto = "";
var precioUnitario = "";
console.log(datosTabla.length)
console.log(acum)
for (var columna in datosTabla[i]) {
if (columna === "codigo") {
try {
var codigoObj = JSON.parse(datosTabla[i][columna]);
if (codigoObj.Matnr) {
idProducto = codigoObj.Matnr;
}
} catch (error) {
console.error("Error al parsear el código como JSON:", error);
}
}
if (columna === "cantidad") {
cantidad = datosTabla[i][columna];
}
if (columna === "precioUnitario") {
precioUnitario = datosTabla[i][columna];
}
}
var charAc = acum.toString();
$.ajax({
type: 'POST',
url: 'php/RegistroFacturas/ManipulacionFacturas.php',
data: {
opcion: '3',
ID_VTACABE: id_cab,
ID_PRODUCTO: idProducto,
CANTIDAD: cantidad,
PRECIO_UNIT: precioUnitario,
POSICION: charAc
},
success: function (response) {
console.log('DETALLE', response);
},
error: function (error) {
console.error('Error en la segunda llamada AJAX', error);
}
});
}
limpiarTablaHandler();
}
function complementoPago(formData) {
console.log(formData);
toggleLoader();
$.ajax({
type: 'POST',
url: 'php/Timbrado/complementoPago.php',
data: formData,
success: function (response) {
const data = JSON.parse(response);
console.log(data)
if (data.estatus == "ok") {
obtenerFolio();
toggleLoader();
$('#modalExito').modal('show');
var emailValue = $('#email').val();
$('#modalExito .modal-body p').html('La factura se ha enviado al correo: ' + emailValue);
} else {
toggleLoader();
$('#modalExito').modal('show');
var emailValue = $('#email').val();
$('#modalExito .modal-body p').html(data.estatus);
}
},
});
}
function guardarFactura(uuidF, folioF) {
console.log(uuidF)
console.log(folioF)
$.ajax({
type: 'POST',
url: 'php/RegistroFacturas/ManipulacionFacturas.php',
data: {
opcion: '4',
uuid: uuidF,
folio: folioF
},
success: function (response) {
console.log(response);
},
error: function (error) {
console.error('Error en la segunda llamada AJAX', error);
}
});
}
function sincronizarClientes() {
toggleLoader2();
$.ajax({
url: 'Carga-Clientes/index.php',
type: 'POST',
success: function (data) {
console.log(data)
toggleLoader2();
Swal.fire("Clientes sincronizados!", "Continuar...", "success")
.then((result) => {
if (result.isConfirmed) {
}
});
},
error: function (error) {
console.error('Error en la llamada AJAX', error);
}
});
}