diff --git a/loko/interventions/static/interventions/add/linked_interventions.js b/loko/interventions/static/interventions/add/linked_interventions.js
index 4fd94fa..4620f7c 100644
--- a/loko/interventions/static/interventions/add/linked_interventions.js
+++ b/loko/interventions/static/interventions/add/linked_interventions.js
@@ -378,7 +378,19 @@ function statusFormatter(value, row) {
const entry = icons[value];
if (!entry) return value;
- return `${entry.label}`;
+ const isAssignedToBeProcessed = (value === 'to_be_processed') && Boolean(
+ row && (
+ row.is_assigned ||
+ row.assigned_team_id ||
+ row.assigned_member_id ||
+ (row.team && row.team !== '-') ||
+ (row.member && row.member !== '-')
+ )
+ );
+ const statusClass = isAssignedToBeProcessed ? 'status-to_be_processed_assigned' : `status-${value}`;
+ const badgeStyle = isAssignedToBeProcessed ? 'style="background-color: #d81b60 !important; color: #ffffff !important;"' : '';
+
+ return `${entry.label}`;
}
diff --git a/loko/interventions/static/interventions/calendar/interventions_calendar.js b/loko/interventions/static/interventions/calendar/interventions_calendar.js
index a05dcd2..a284863 100644
--- a/loko/interventions/static/interventions/calendar/interventions_calendar.js
+++ b/loko/interventions/static/interventions/calendar/interventions_calendar.js
@@ -4805,13 +4805,43 @@ document.addEventListener('DOMContentLoaded', function () {
modalInterventionPriority.className = priorityClasses[priorityCode] || 'badge text-bg-light border text-dark';
}
- const status = record.status || record.extendedProps?.status || '';
- const statusCode = record.status_code || record.extendedProps?.status_code || '';
- const isAssigned = Boolean(record.is_assigned || record.extendedProps?.is_assigned || record.member_name || record.extendedProps?.member_name || record.team_name || record.extendedProps?.team_name);
+ const STATUS_LABELS = {
+ 'in_preparation': gettext('En prépa'),
+ 'to_be_approved': gettext('À approuver'),
+ 'to_be_planned': gettext('À planifier'),
+ 'to_be_processed': gettext('À traiter'),
+ 'assigned': gettext('Pris en charge'),
+ 'in_progress': gettext('Démarré'),
+ 'on_pause': gettext('En pause'),
+ 'finished': gettext('Terminé'),
+ 'processed': gettext('Traité'),
+ 'to_be_corrected': gettext('À corriger'),
+ 'corrected': gettext('Corrigé'),
+ 'validated': gettext('Validé'),
+ 'invoiced': gettext('Comptabilisé'),
+ 'closed': gettext('Finalisé'),
+ 'canceled': gettext('Annulé'),
+ };
+
+ const rawStatus = record.status || record.extendedProps?.status || '';
+ const statusCode = record.status_code || record.extendedProps?.status_code || (STATUS_LABELS[rawStatus] ? rawStatus : '') || rawStatus;
+ const statusDisplay = record.status_display || record.extendedProps?.status_display || STATUS_LABELS[statusCode] || STATUS_LABELS[rawStatus] || rawStatus;
+ const isAssigned = Boolean(
+ record.is_assigned ||
+ record.extendedProps?.is_assigned ||
+ record.assigned_team_id ||
+ record.assigned_member_id ||
+ record.extendedProps?.assigned_team_id ||
+ record.extendedProps?.assigned_member_id ||
+ (record.member_name && record.member_name !== gettext('Non assigné')) ||
+ (record.extendedProps?.member_name && record.extendedProps?.member_name !== gettext('Non assigné')) ||
+ (record.team_name && record.team_name !== gettext('Non assignée')) ||
+ (record.extendedProps?.team_name && record.extendedProps?.team_name !== gettext('Non assignée'))
+ );
const color = getInterventionColor(statusCode, isAssigned);
const textColor = idealTextColor(color);
- modalInterventionStatus.textContent = status;
+ modalInterventionStatus.textContent = statusDisplay;
modalInterventionStatus.style.backgroundColor = color;
modalInterventionStatus.style.color = textColor;
diff --git a/loko/interventions/static/interventions/interventions_index.js b/loko/interventions/static/interventions/interventions_index.js
index eed40b7..8f8c25c 100644
--- a/loko/interventions/static/interventions/interventions_index.js
+++ b/loko/interventions/static/interventions/interventions_index.js
@@ -400,6 +400,9 @@ function loadDataIntoInterventionsTable(features) {
contract_provider: feature.properties.contract_provider || '',
origin_type: feature.properties.origin_type || '',
source_category: feature.properties.source_category || '',
+ is_assigned: Boolean(feature.properties.is_assigned),
+ team: feature.properties.team || '',
+ member: feature.properties.member || '',
lon: feature.geometry && feature.geometry.coordinates ? feature.geometry.coordinates[0] : null, // Longitude
lat: feature.geometry && feature.geometry.coordinates ? feature.geometry.coordinates[1] : null // Latitude
};
@@ -488,7 +491,19 @@ function statusFormatter(value, row) {
const entry = icons[value];
if (!entry) return value;
- let html = `${entry.label}`;
+ const isAssignedToBeProcessed = (value === 'to_be_processed') && Boolean(
+ row && (
+ row.is_assigned ||
+ row.assigned_team_id ||
+ row.assigned_member_id ||
+ (row.team && row.team !== '-') ||
+ (row.member && row.member !== '-')
+ )
+ );
+ const statusClass = isAssignedToBeProcessed ? 'status-to_be_processed_assigned' : `status-${value}`;
+ const badgeStyle = isAssignedToBeProcessed ? 'style="background-color: #d81b60 !important; color: #ffffff !important;"' : '';
+
+ let html = `${entry.label}`;
// Add preparation state indicator if present
if (row && row.prep_state && row.prep_state !== 'none' && prepStateIcons[row.prep_state]) {
diff --git a/loko/interventions/static/interventions/status_colors.js b/loko/interventions/static/interventions/status_colors.js
index b558faf..40f5552 100644
--- a/loko/interventions/static/interventions/status_colors.js
+++ b/loko/interventions/static/interventions/status_colors.js
@@ -51,6 +51,8 @@ const INTERVENTION_STATUS_COLOR_EXPR = (() => {
['==', ['get', 'status'], 'to_be_processed'],
[
'any',
+ ['==', ['get', 'is_assigned'], true],
+ ['==', ['get', 'is_assigned'], 1],
['boolean', ['get', 'is_assigned'], false],
['!=', ['coalesce', ['get', 'team'], ''], ''],
['!=', ['coalesce', ['get', 'member'], ''], '']
diff --git a/loko/interventions/templates/interventions/_interventions_list_mobile.html b/loko/interventions/templates/interventions/_interventions_list_mobile.html
index bbc49ac..d0f53ce 100644
--- a/loko/interventions/templates/interventions/_interventions_list_mobile.html
+++ b/loko/interventions/templates/interventions/_interventions_list_mobile.html
@@ -51,7 +51,7 @@
>
{{ intervention.code }} {{ intervention.title }}
- {{ intervention.get_status_display }}
+ {{ intervention.get_status_display }}
{% if intervention.show_contract_blocked_warning %}
{% translate "Marché bloqué" %}
diff --git a/loko/interventions/templates/interventions/interventions_index_mobile.html b/loko/interventions/templates/interventions/interventions_index_mobile.html
index 8d4841a..64a8277 100644
--- a/loko/interventions/templates/interventions/interventions_index_mobile.html
+++ b/loko/interventions/templates/interventions/interventions_index_mobile.html
@@ -589,7 +589,10 @@
const SOURCE_ID = 'interventions-points';
const LAYER_ID = 'interventions-circles';
- function hexColor(status, bsColor) {
+ function hexColor(status, bsColor, isAssigned) {
+ if (status === 'to_be_processed' && isAssigned) {
+ return INTERVENTION_STATUS_COLORS.to_be_processed_assigned || '#d81b60';
+ }
if (status && INTERVENTION_STATUS_COLORS[status]) {
return INTERVENTION_STATUS_COLORS[status];
}
@@ -626,9 +629,10 @@
status_label: m.status_label,
status_color: m.status_color,
status: m.status,
+ is_assigned: m.is_assigned,
maintain_type: m.maintain_type,
url: m.url,
- fill: hexColor(m.status, m.status_color),
+ fill: hexColor(m.status, m.status_color, m.is_assigned),
},
})),
};
@@ -638,7 +642,7 @@
function buildPopupHtml(features) {
return features.map((f, idx) => {
const p = f.properties;
- const fill = hexColor(p.status, p.status_color);
+ const fill = hexColor(p.status, p.status_color, p.is_assigned);
const txtCol = isTextDark(p.status, p.status_color) ? '#000' : '#fff';
const sep = idx > 0 ? '
' : '';
const coords = f.geometry && f.geometry.coordinates ? f.geometry.coordinates : null;
diff --git a/loko/interventions/views/calendar.py b/loko/interventions/views/calendar.py
index 0223ef0..ca62e43 100644
--- a/loko/interventions/views/calendar.py
+++ b/loko/interventions/views/calendar.py
@@ -1491,9 +1491,10 @@ def intervention_planning_data_ajax(request, intervention_id):
'id': intervention.id,
'code': intervention.code,
'title': intervention.title,
- 'status': intervention.status,
+ 'status': intervention.get_status_display(),
'status_code': intervention.status,
'status_display': intervention.get_status_display(),
+ 'is_assigned': intervention.is_assigned,
'prep_state': intervention.get_preparation_orders_status(),
'priority': intervention.get_priority_display(),
'type': intervention.get_type_display(),
diff --git a/loko/interventions/views/mobile.py b/loko/interventions/views/mobile.py
index a69fe35..9c52dad 100644
--- a/loko/interventions/views/mobile.py
+++ b/loko/interventions/views/mobile.py
@@ -389,6 +389,7 @@ def interventions_index_mobile(request):
'status_label': i.get_status_display(),
'status': i.status,
'status_color': i.get_status_color(),
+ 'is_assigned': i.is_assigned,
'maintain_type': i.maintain_type,
'lat': i.lat,
'lon': i.lon,