new-site/scripts/create_agent_jaykordic.cjs
justin 53857574d3 Add referral/discount code to FCC carrier page + REF-JAYK05 agent
Frontend (order/fcc-carrier-registration):
- Add a referral/discount code box on the review step that validates
  against /api/v1/discount/:code and shows the discount line + adjusted
  total. Discount applies to service fee + add-ons, never state filing fees.
- Prefill + auto-apply from ?code= / ?ref= query param (referral links).

Backend (fcc-carrier-registration route):
- Accept discount_code, validate it, store discount_code/discount_cents,
  and subtract from the total. Checkout already reads discount_cents to
  apply the Stripe coupon.
- Create a pending commission when the code belongs to an active sales agent.

Commission fix (agents.createCommission):
- Percent-type agents now earn commission_pct on ALL order types. Previously
  canada_crtc/formation/bundle used flat defaults and ignored percent agents.

Agent: created sales agent Jay Kordic (The Horizon Group) with custom code
REF-JAYK05 -> client gets 5% off discountable services, agent earns 15%.
Idempotent setup script in scripts/create_agent_jaykordic.cjs.
2026-06-02 14:31:22 -05:00

105 lines
4.1 KiB
JavaScript

#!/usr/bin/env node
/**
* Create sales agent "Jay Kordic" with custom referral code JAYK05.
* - Client discount: 5% off all discountable service fees (discount_type='percent', value=5)
* - Agent commission: 15% (commission_type='percent', commission_pct=15)
*
* Idempotent: re-running updates the existing rows instead of duplicating.
*
* Usage (from api/ so it loads api/.env):
* cd api && node ../scripts/create_agent_jaykordic.cjs
*/
const fs = require("fs");
const path = require("path");
const { Client } = require("pg");
// Load DATABASE_URL from api/.env if not already in env
function loadEnv() {
if (process.env.DATABASE_URL) return;
const envPath = path.resolve(__dirname, "../api/.env");
if (!fs.existsSync(envPath)) return;
for (const line of fs.readFileSync(envPath, "utf8").split("\n")) {
const m = line.match(/^DATABASE_URL=(.*)$/);
if (m) { process.env.DATABASE_URL = m[1].trim(); break; }
}
}
const CODE = "REF-JAYK05";
const AGENT_NAME = "Jay Kordic";
const AGENT_COMPANY = "The Horizon Group";
const AGENT_EMAIL = "jay.kordic@performancewest.net"; // placeholder; update with real payout email
const CLIENT_DISCOUNT_PCT = 5;
const COMMISSION_PCT = 15;
(async () => {
loadEnv();
if (!process.env.DATABASE_URL) {
console.error("DATABASE_URL not found. Run from api/ or export DATABASE_URL.");
process.exit(1);
}
const c = new Client({ connectionString: process.env.DATABASE_URL });
await c.connect();
try {
await c.query("BEGIN");
// 1) Upsert the discount code (5% off, partner attribution to Jay Kordic)
const dc = await c.query(
`INSERT INTO discount_codes (code, description, discount_type, discount_value, referral_partner, referral_email, referral_pct, active)
VALUES ($1, $2, 'percent', $3, $4, $5, $6, TRUE)
ON CONFLICT (code) DO UPDATE SET
description = EXCLUDED.description,
discount_type = EXCLUDED.discount_type,
discount_value = EXCLUDED.discount_value,
referral_partner = EXCLUDED.referral_partner,
referral_email = EXCLUDED.referral_email,
referral_pct = EXCLUDED.referral_pct,
active = TRUE,
updated_at = now()
RETURNING id`,
[CODE, `Sales agent: ${AGENT_NAME} (${AGENT_COMPANY})`, CLIENT_DISCOUNT_PCT, AGENT_NAME, AGENT_EMAIL, COMMISSION_PCT],
);
const discountCodeId = dc.rows[0].id;
// 2) Upsert the sales agent (commission paid as percent of order)
const existing = await c.query("SELECT id FROM sales_agents WHERE email = $1 OR agent_code = $2", [AGENT_EMAIL, CODE]);
if (existing.rows.length > 0) {
await c.query(
`UPDATE sales_agents SET
agent_code = $1, discount_code_id = $2, name = $3, company = $4,
commission_type = 'percent', commission_pct = $5,
active = TRUE, updated_at = now()
WHERE id = $6`,
[CODE, discountCodeId, AGENT_NAME, AGENT_COMPANY, COMMISSION_PCT, existing.rows[0].id],
);
console.log(`Updated existing agent id=${existing.rows[0].id}`);
} else {
const ag = await c.query(
`INSERT INTO sales_agents (agent_code, discount_code_id, name, email, company, commission_type, commission_pct, active, onboarded_at)
VALUES ($1, $2, $3, $4, $5, 'percent', $6, TRUE, now())
RETURNING id`,
[CODE, discountCodeId, AGENT_NAME, AGENT_EMAIL, AGENT_COMPANY, COMMISSION_PCT],
);
console.log(`Created agent id=${ag.rows[0].id}`);
}
await c.query("COMMIT");
// Verify
const v = await c.query(
`SELECT d.code, d.discount_type, d.discount_value, d.referral_partner, d.referral_email, d.referral_pct, d.active AS code_active,
s.agent_code, s.name, s.commission_type, s.commission_pct, s.active AS agent_active
FROM discount_codes d
LEFT JOIN sales_agents s ON s.discount_code_id = d.id
WHERE d.code = $1`,
[CODE],
);
console.log("\nResult:");
console.dir(v.rows[0], { depth: null });
} catch (e) {
await c.query("ROLLBACK").catch(() => {});
console.error("ERROR:", e.message);
process.exitCode = 1;
} finally {
await c.end();
}
})();