fbaf318832c29774a848421cc90f04437a715afb
Demo seeder (scripts/fp_demo_seed.py): - Idempotent Python script run via odoo shell; populates ~60 records across 6 customer stories covering every workflow state for live demo - Customers: Amphenol (net-terms, deep history), Magellan (progress billing, active), Cyclone (deposit, in-production), Honeywell (net-terms, just confirmed), Westin (COD, direct-order path), Delinquent Industries (account hold — Confirm raises UserError) - Coating configs with realistic AMS specs (2404, 2700 Rev G, 2406) and bake-relief flags set on applicable processes - Part catalog with revision chains (Rev 1 / Rev 2 / Rev 3 for hot parts) - Customer price lists with volume tiers - Per-customer invoice strategy defaults - Bath chemistry logs (15 readings, last 2 OOS → pending replenishment suggestion visible in menu) - Racks: 4 active + 1 needing strip (MTO 3.2 / 3.0) for kanban demo - Bake windows: 1 awaiting (ticking down), 1 baked, 1 missed (alert) - Quote configurator sessions: 3 draft, 3 confirmed/won, 3 lost (with reasons), 1 expired — populates the win/loss analysis - Historical closed orders: 8 jobs backdated across 4 months with SO → MO → Delivery → Invoice → Payment run through each hook so portal-job progression, certificates with thickness readings, and invoice AR aging all look real - Active orders at every workflow stage for the live demo cycle Polish: - report_fp_invoice PAID stamp now also triggers on payment_state == 'in_payment' (in addition to 'paid'). Odoo leaves payments in 'in_payment' until the bank reconciliation job matches them against a statement line, so historical demo invoices would otherwise never show as stamped even though the payment is posted and the customer owes nothing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
Odoo 19 custom modules
Languages
Python
55.9%
HTML
26.1%
JavaScript
14.9%
SCSS
1.8%
CSS
0.8%
Other
0.4%