feat(herramientas): impresion de etiquetas QR y manifiesto HTML responsive para escaneo de cajas de herramientas

This commit is contained in:
2026-11-01 09:13:39 -05:00
parent 83cbfcefa8
commit e71e531b51
15 changed files with 1252 additions and 22 deletions
+56
View File
@@ -0,0 +1,56 @@
const HerramientaSet = require('../models/HerramientaSet');
const HerramientaAsignacion = require('../models/HerramientaAsignacion');
const QRCode = require('qrcode');
async function testQrFlow() {
console.log('=== TEST DE FLUJO DE CÓDIGOS QR Y MANIFIESTO HTML ===');
const companyId = 1;
// 1. Obtener Sets existentes
console.log('1. Consultando sets de herramientas de Telcotronics...');
const sets = await HerramientaSet.findAll(companyId);
if (sets.length === 0) {
throw new Error('No hay sets en Telcotronics para probar');
}
const testSet = sets[0];
console.log(` ✓ Set encontrado: "${testSet.nombre}" (ID: ${testSet.id}, Código: ${testSet.codigo})`);
console.log(` ✓ Token QR: ${testSet.qr_token}`);
if (!testSet.qr_token) {
throw new Error('El set no tiene qr_token');
}
// 2. Probar findByToken
console.log('2. Buscando set mediante findByToken(qr_token)...');
const setByToken = await HerramientaSet.findByToken(testSet.qr_token);
if (!setByToken) {
throw new Error('findByToken retornó null');
}
console.log(` ✓ Set recuperado: ${setByToken.nombre} | Empresa: ${setByToken.company_name} | Herramientas: ${setByToken.herramientas.length}`);
console.log(` ✓ Estado custodia actual: ${setByToken.custodia ? 'EN CUSTODIA de ' + setByToken.custodia.tecnico_nombre : 'DISPONIBLE EN BODEGA'}`);
// 3. Generar código QR con la librería qrcode
console.log('3. Generando código QR en formato Data URL...');
const scanUrl = `https://soporte.sigmac.app/qr/set/${testSet.qr_token}`;
const qrDataUrl = await QRCode.toDataURL(scanUrl, {
width: 260,
margin: 1,
color: { dark: '#000000', light: '#ffffff' }
});
if (!qrDataUrl.startsWith('data:image/png;base64,')) {
throw new Error('El QR generado no es un Data URL de PNG válido');
}
console.log(` ✓ Código QR generado correctamente (longitud base64: ${qrDataUrl.length} bytes)`);
console.log(` ✓ URL destino del QR: ${scanUrl}`);
console.log('=== TEST DE QR Y MANIFIESTO FINALIZADO EXITOSAMENTE ===');
process.exit(0);
}
testQrFlow().catch(err => {
console.error('ERROR EN TEST:', err);
process.exit(1);
});