← back to Filemaker Mcp

scripts/ensure-wallpaper-for-order.mjs

42 lines

// Ensure a complete FileMaker WALLPAPER master record for every SKU on an invoice
// (so the invoice's width/name/vid/supplier/mfr lookups resolve), then direct-write
// the copy-lookup fields (VID + Detail 1 Mfr Number) onto each line. Uses
// lib/wallpaper.js ensureWallpaper(). See memory filemaker-wallpaper-record-for-invoice.
//
//   node scripts/ensure-wallpaper-for-order.mjs <CustPO>
import { readFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, join } from 'node:path';
const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
for (const l of readFileSync(join(ROOT, '.env'), 'utf8').split('\n')) {
  const m = l.match(/^([A-Z0-9_]+)=(.*)$/); if (m && !process.env[m[1]]) process.env[m[1]] = m[2].replace(/^['"]|['"]$/g, '');
}
const fm = await import('../src/fm-client.js');
const { ensureWallpaper } = await import('../lib/wallpaper.js');
const PO = process.argv[2];
if (!PO) { console.error('usage: ensure-wallpaper-for-order.mjs <CustPO>'); process.exit(1); }
const ISHIP = 'Order Detail - Main - Shipping';

const { records } = await fm.findRecords('invoice', ISHIP, { 'Cust PO': '==' + PO }, { limit: 30, sort: [{ fieldName: 'Invoice', sortOrder: 'ascend' }] });
const combos = [...new Set(records.map((r) => (r.fieldData['WC Pattern Number AKA DW SKU(1)'] || r.fieldData['WC Pattern Number AKA DW SKU'] || '').trim()).filter(Boolean))];
console.log(`invoice #${PO}: ${combos.length} unique SKU(s): ${combos.join(', ')}`);

const flagged = [];
for (const combo of combos) {
  const wp = await ensureWallpaper(combo);
  if (!wp.ok) { flagged.push(`${combo} (${wp.reason})`); console.log(`  ${combo}: FLAGGED — ${wp.reason}`); continue; }
  // vid + mfr# are copy-lookups on the invoice line — write them onto every line of THIS sku
  for (const rec of records) {
    const rf = rec.fieldData; if ((rf['WC Pattern Number AKA DW SKU(1)'] || rf['WC Pattern Number AKA DW SKU'] || '').trim() !== combo) continue;
    try { await fm.updateRecord('invoice', ISHIP, rec.recordId, { 'VID': wp.vid, 'Detail 1 Mfr Number': wp.mfr }, { dryRun: false }); } catch (e) { console.log(`  ${combo} invoice line err ${e.fmCode}`); }
  }
  console.log(`  ${combo}: OK  mfr=${wp.mfr}  supplier=${wp.supplier}  name="${wp.name}"  color="${wp.color}"  width=${wp.width}  vid=${wp.vid}  [${wp.src}]`);
}

console.log(`\n=== VERIFY invoice #${PO} ===`);
const v = await fm.findRecords('invoice', ISHIP, { 'Cust PO': '==' + PO }, { limit: 30, sort: [{ fieldName: 'Invoice', sortOrder: 'ascend' }] });
for (const rec of v.records) { const f = rec.fieldData; const g = (b) => f[b + '(1)'] ?? f[b] ?? '';
  console.log(`  #${f['Invoice']} sku="${g('WC Pattern Number AKA DW SKU')}" width="${f['detail1 dash width'] || ''}" supplier="${g('wc supplier lookup')}" name="${f['wallpaper 2::JPG Name'] || ''}" vid="${g('VID')}" mfr="${g('Detail 1 Mfr Number')}"`);
}
if (flagged.length) console.log(`\nFLAGGED: ${flagged.join(' | ')}`);