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) {
|
function parseTexto(v) {
|
||||||
if (v == null) return null
|
if (v == null || v instanceof Date) return null
|
||||||
const s = String(v).trim()
|
const s = String(v).trim()
|
||||||
return s === '' ? null : s.replace(/\s+/g, ' ')
|
return s === '' ? null : s.replace(/\s+/g, ' ')
|
||||||
}
|
}
|
||||||
@@ -359,6 +359,45 @@ function leer() {
|
|||||||
return agregado
|
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 ─────────────────────────────────────────
|
// ── Escritura y verificación ─────────────────────────────────────────
|
||||||
|
|
||||||
async function escribir(agregado) {
|
async function escribir(agregado) {
|
||||||
@@ -401,6 +440,7 @@ async function verificar() {
|
|||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const agregado = leer()
|
const agregado = leer()
|
||||||
|
await complementar(agregado)
|
||||||
if (DRY) {
|
if (DRY) {
|
||||||
console.log('\n(dry-run: nada escrito)')
|
console.log('\n(dry-run: nada escrito)')
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user