chore(fusion_plating): add story-driven demo seeder + polish invoice PAID stamp
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>
This commit is contained in:
@@ -173,7 +173,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Paid stamp -->
|
||||
<t t-if="doc.payment_state == 'paid'">
|
||||
<t t-if="doc.payment_state in ('paid', 'in_payment')">
|
||||
<div style="margin-top: 15px; text-align: center;">
|
||||
<span class="paid-stamp">PAID</span>
|
||||
</div>
|
||||
@@ -364,7 +364,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Paid stamp -->
|
||||
<t t-if="doc.payment_state == 'paid'">
|
||||
<t t-if="doc.payment_state in ('paid', 'in_payment')">
|
||||
<div style="margin-top: 15px; text-align: center;">
|
||||
<span class="paid-stamp">PAID</span>
|
||||
</div>
|
||||
@@ -378,7 +378,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="3" style="background-color: #28a745; color: white;">
|
||||
<t t-if="doc.payment_state == 'paid'">✓ PAYMENT DETAILS — PAID IN FULL</t>
|
||||
<t t-if="doc.payment_state in ('paid', 'in_payment')">✓ PAYMENT DETAILS — PAID IN FULL</t>
|
||||
<t t-elif="doc.payment_state == 'partial'">PAYMENT DETAILS — PARTIALLY PAID</t>
|
||||
<t t-else="">PAYMENT DETAILS</t>
|
||||
</th>
|
||||
|
||||
Reference in New Issue
Block a user