← back to Sample Followup Sweep
scripts/make-drafts.js
47 lines
'use strict';
// Consolidate READY vendors by sample_email into one letter per recipient,
// so a vendor with multiple vids (O&L dgd+osb, Thibaut thi+thib, etc.) gets ONE email.
const fs = require('fs');
const path = require('path');
const { compose } = require('../lib/compose');
const { createGmailDraftArtifact } = require('../lib/george-transport');
const SHIP_TO = { name: 'Designer Wallcoverings', line1: '15442 Ventura Blvd. #102', city_state_zip: 'Sherman Oaks, CA 91403', phone: '1-888-373-4564' };
const root = path.join(__dirname, '..');
const fleet = JSON.parse(fs.readFileSync(path.join(root, 'data', 'fleet.json'), 'utf8')).vendors;
const contacts = JSON.parse(fs.readFileSync(path.join(root, 'data', 'contacts.json'), 'utf8'));
const groups = {};
for (const v of fleet) {
const c = contacts[v.slug];
if (!c || !c.sample_email || !c.account_number) continue; // READY only
const key = c.sample_email.toLowerCase();
groups[key] = groups[key] || { to: c.sample_email, account: c.account_number, name: c.name, slugs: [], items: [] };
groups[key].slugs.push(v.slug);
for (const it of v.items) groups[key].items.push(it);
}
const drafts = [];
for (const key of Object.keys(groups)) {
const g = groups[key];
// Clean: drop blank Mfr# rows, dedupe identical lines (keep vendor letter tidy).
const seen = new Set();
const rows = [];
for (const it of g.items) {
const m = (it.mfr || '').trim();
if (!m || seen.has(m)) continue;
seen.add(m); rows.push({ mfr: m });
}
if (!rows.length) continue; // nothing real to chase
const vendor = { name: g.name, account_number: g.account, sample_email: g.to, ship_to: SHIP_TO };
const d = compose(vendor, rows);
const payload = createGmailDraftArtifact({ account: 'info', to: d.to, subject: d.subject, body: d.html });
drafts.push({ ...payload, slugs: g.slugs, name: g.name, items: rows.length });
}
drafts.sort((a, b) => b.items - a.items);
fs.mkdirSync(path.join(root, 'out'), { recursive: true });
fs.writeFileSync(path.join(root, 'out', 'all-drafts.json'), JSON.stringify(drafts, null, 2));
console.log(`consolidated letters: ${drafts.length} (from ${Object.values(groups).reduce((s, g) => s + g.slugs.length, 0)} ready vids)`);
drafts.forEach((d, i) => console.log(` ${String(i + 1).padStart(2)}. ${String(d.items).padStart(2)} items -> ${d.to} [${d.slugs.join('+')}] ${d.name}`));