diff --git a/fusion_plating/fusion_plating/__manifest__.py b/fusion_plating/fusion_plating/__manifest__.py
index 93e9cd03..22b28990 100644
--- a/fusion_plating/fusion_plating/__manifest__.py
+++ b/fusion_plating/fusion_plating/__manifest__.py
@@ -5,7 +5,7 @@
{
'name': 'Fusion Plating',
- 'version': '19.0.18.7.3',
+ 'version': '19.0.18.7.4',
'category': 'Manufacturing/Plating',
'summary': 'Core plating / metal finishing ERP: facilities, processes, tanks, baths, jobs, operators.',
'description': """
diff --git a/fusion_plating/fusion_plating/models/fp_job.py b/fusion_plating/fusion_plating/models/fp_job.py
index 321dadd5..3ca8b7ba 100644
--- a/fusion_plating/fusion_plating/models/fp_job.py
+++ b/fusion_plating/fusion_plating/models/fp_job.py
@@ -52,7 +52,11 @@ class FpJob(models.Model):
return dt.astimezone(tz).strftime(fmt)
_description = 'Plating Job'
_inherit = ['mail.thread', 'mail.activity.mixin']
- _order = 'priority desc, date_deadline asc, id desc'
+ # Sub 12d — state-aware sort. Active work bubbles to the top
+ # (in_progress → confirmed/draft → on_hold → done → cancelled),
+ # then high-priority first within each state, then nearest deadline.
+ # state_priority is a small stored compute below.
+ _order = 'state_priority asc, priority desc, date_deadline asc, id desc'
_rec_name = 'name'
name = fields.Char(
@@ -76,6 +80,29 @@ class FpJob(models.Model):
tracking=True,
index=True,
)
+ # Sub 12d — drives the default sort so active jobs surface above
+ # closed jobs. Lower number = sorted earlier. Stored + indexed so
+ # SQL ORDER BY hits an index and doesn't recompute per row.
+ state_priority = fields.Integer(
+ string='State Priority',
+ compute='_compute_state_priority',
+ store=True,
+ index=True,
+ )
+
+ _STATE_SORT_RANK = {
+ 'in_progress': 0,
+ 'confirmed': 1,
+ 'draft': 2,
+ 'on_hold': 3,
+ 'done': 4,
+ 'cancelled': 5,
+ }
+
+ @api.depends('state')
+ def _compute_state_priority(self):
+ for rec in self:
+ rec.state_priority = self._STATE_SORT_RANK.get(rec.state, 9)
priority = fields.Selection(
[
('low', 'Low'),
diff --git a/fusion_plating/fusion_plating/views/fp_job_views.xml b/fusion_plating/fusion_plating/views/fp_job_views.xml
index 9697bf95..2680fa44 100644
--- a/fusion_plating/fusion_plating/views/fp_job_views.xml
+++ b/fusion_plating/fusion_plating/views/fp_job_views.xml
@@ -100,10 +100,18 @@
+
+
+
+
+
@@ -120,5 +128,8 @@
fp.job
list,form
+
+ {'search_default_open_jobs': 1}