feat(portal): per-stage timestamps on fp.portal.job
Adds received_at, in_progress_started_at, qc_started_at, ready_to_ship_at, shipped_at - snapshotted on state change via write() override using super().write() to avoid recursion. Required for the vertical-timeline rendering on the job detail page (Phase 3). Idempotent: re-transitioning to a state already-stamped does not overwrite the original timestamp. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -57,3 +57,20 @@ class TestPortalDashboard(TransactionCase):
|
||||
self.assertEqual(active, 2)
|
||||
self.assertEqual(awaiting_review, 1)
|
||||
self.assertEqual(ready_to_ship, 1)
|
||||
|
||||
def test_state_change_snapshots_timestamp(self):
|
||||
"""write({'state': 'in_progress'}) sets in_progress_started_at."""
|
||||
from odoo import fields as odoo_fields
|
||||
Job = self.env['fusion.plating.portal.job']
|
||||
job = Job.create({
|
||||
'name': 'WO-TS-001',
|
||||
'partner_id': self.partner.id,
|
||||
'state': 'received',
|
||||
})
|
||||
self.assertTrue(job.received_at, 'received_at set on create')
|
||||
before = odoo_fields.Datetime.now()
|
||||
job.state = 'in_progress'
|
||||
self.assertTrue(job.in_progress_started_at, 'in_progress_started_at set')
|
||||
self.assertGreaterEqual(job.in_progress_started_at, before)
|
||||
# received_at must not be overwritten when state advances
|
||||
self.assertTrue(job.received_at)
|
||||
|
||||
Reference in New Issue
Block a user