fix(captura): llenar ubicacion con codigo canonico y modelo faltante desde inventario
This commit is contained in:
@@ -175,7 +175,7 @@ function parseNumero(v) {
|
||||
}
|
||||
|
||||
function parseTexto(v) {
|
||||
if (v == null) return null
|
||||
if (v == null || v instanceof Date) return null
|
||||
const s = String(v).trim()
|
||||
return s === '' ? null : s.replace(/\s+/g, ' ')
|
||||
}
|
||||
@@ -359,6 +359,45 @@ function leer() {
|
||||
return agregado
|
||||
}
|
||||
|
||||
// ── Complementos ─────────────────────────────────────────────────────
|
||||
|
||||
/** Ubicación/Unidad siempre llena (código canónico) + modelo faltante desde el inventario */
|
||||
async function complementar(agregado) {
|
||||
const clavesUnidad = new Set()
|
||||
for (const key of agregado.keys()) {
|
||||
const [des, uni] = key.split('|')
|
||||
clavesUnidad.add(`${des}|${uni}`)
|
||||
}
|
||||
|
||||
// 1) ubicacion = código canónico de la unidad
|
||||
for (const k of clavesUnidad) {
|
||||
const [des, uni] = k.split('|')
|
||||
const key = `${des}|${uni}|VENTAS|ubicacion`
|
||||
if (!agregado.has(key)) agregado.set(key, { valor: uni, tipo: 'text' })
|
||||
}
|
||||
|
||||
// 2) modelo faltante: exacto desde el cotizador; fallback sin sufijo de letra
|
||||
const unidadesInv = await prisma.unidad.findMany({ select: { codigo: true, modelo: true } })
|
||||
const porCodigo = new Map(unidadesInv.map((u) => [u.codigo, u.modelo]))
|
||||
let llenados = 0
|
||||
const sinModelo = new Set()
|
||||
for (const k of clavesUnidad) {
|
||||
const [des, uni] = k.split('|')
|
||||
if (agregado.has(`${des}|${uni}|VENTAS|modelo`)) continue
|
||||
const modelo = porCodigo.get(uni) ?? porCodigo.get(uni.replace(/[A-Za-z]+$/, ''))
|
||||
if (modelo) {
|
||||
agregado.set(`${des}|${uni}|VENTAS|modelo`, { valor: modelo, tipo: 'text' })
|
||||
llenados++
|
||||
} else {
|
||||
sinModelo.add(uni)
|
||||
}
|
||||
}
|
||||
console.log(`Modelo rellenado desde inventario: ${llenados}`)
|
||||
if (sinModelo.size > 0) {
|
||||
console.log(`Unidades sin modelo en maestro ni inventario (${sinModelo.size}): ${[...sinModelo].slice(0, 15).join(', ')}${sinModelo.size > 15 ? '…' : ''}`)
|
||||
}
|
||||
}
|
||||
|
||||
// ── Escritura y verificación ─────────────────────────────────────────
|
||||
|
||||
async function escribir(agregado) {
|
||||
@@ -401,6 +440,7 @@ async function verificar() {
|
||||
|
||||
async function main() {
|
||||
const agregado = leer()
|
||||
await complementar(agregado)
|
||||
if (DRY) {
|
||||
console.log('\n(dry-run: nada escrito)')
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user