diff --git a/project_working_time_task_portal/i18n/fr.po b/project_working_time_task_portal/i18n/fr.po
index ac029cc..9eab4d9 100644
--- a/project_working_time_task_portal/i18n/fr.po
+++ b/project_working_time_task_portal/i18n/fr.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-11-18 14:17+0000\n"
-"PO-Revision-Date: 2025-11-18 14:17+0000\n"
+"POT-Creation-Date: 2025-11-18 16:44+0000\n"
+"PO-Revision-Date: 2025-11-18 16:44+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -67,6 +67,15 @@ msgstr "Jours restants facturables"
msgid "Billable Remaining Hours"
msgstr "Heures restantes facturables"
+#. module: project_working_time_task_portal
+#: model:ir.model.fields,help:project_working_time_task_portal.field_project_task__total_billable_hours_spent
+msgid ""
+"Billable time spent on this task and its sub-tasks (and their own sub-"
+"tasks)."
+msgstr ""
+"Temps facturable passé sur cette tâche et ses sous-tâches (et leurs propres sous-"
+"tâches)."
+
#. module: project_working_time_task_portal
#: model_terms:ir.ui.view,arch_db:project_working_time_task_portal.project_working_time_view_task_form
msgid "Non Billable Effective Days"
@@ -78,6 +87,15 @@ msgstr "Jours passés non facturables"
msgid "Non Billable Effective Hours"
msgstr "Heures passées non facturables"
+#. module: project_working_time_task_portal
+#: model:ir.model.fields,help:project_working_time_task_portal.field_project_task__total_non_billable_hours_spent
+msgid ""
+"Non billable time spent on this task and its sub-tasks (and their own sub-"
+"tasks)."
+msgstr ""
+"Temps non facturable passé sur cette tâche et ses sous-tâches (et leurs propres sous-"
+"tâches)."
+
#. module: project_working_time_task_portal
#: model_terms:ir.ui.view,arch_db:project_working_time_task_portal.portal_my_task_remaining_hours
msgid "Remaining Hours:"
@@ -116,9 +134,32 @@ msgstr "Sous-tâches heures passées non facturables"
msgid "Task"
msgstr "Tâche"
+#. module: project_working_time_task_portal
+#: model_terms:ir.ui.view,arch_db:project_working_time_task_portal.project_working_time_view_task_form
+msgid "Total Billable Days"
+msgstr "Total des jours facturables"
+
+#. module: project_working_time_task_portal
+#: model:ir.model.fields,field_description:project_working_time_task_portal.field_project_task__total_billable_hours_spent
+#: model_terms:ir.ui.view,arch_db:project_working_time_task_portal.project_working_time_view_task_form
+msgid "Total Billable Hours"
+msgstr "Total des heures facturables"
+
#. module: project_working_time_task_portal
#: model:ir.model.fields,help:project_working_time_task_portal.field_project_task__billable_remaining_hours
msgid ""
"Total Billable remaining time (without exclude_from_sale_order timesheet "
"lines), can be re-estimated periodically by the assignee of the task."
msgstr ""
+"Nombre d'heures allouées moins le nombre d'heures passées facturées."
+
+#. module: project_working_time_task_portal
+#: model_terms:ir.ui.view,arch_db:project_working_time_task_portal.project_working_time_view_task_form
+msgid "Total Non Billable Days"
+msgstr "Total des jours non facturables"
+
+#. module: project_working_time_task_portal
+#: model:ir.model.fields,field_description:project_working_time_task_portal.field_project_task__total_non_billable_hours_spent
+#: model_terms:ir.ui.view,arch_db:project_working_time_task_portal.project_working_time_view_task_form
+msgid "Total Non Billable Hours"
+msgstr "Total des heures non facturables"
diff --git a/project_working_time_task_portal/models/billable_time.py b/project_working_time_task_portal/models/billable_time.py
index 6260516..5bec0e5 100644
--- a/project_working_time_task_portal/models/billable_time.py
+++ b/project_working_time_task_portal/models/billable_time.py
@@ -45,6 +45,20 @@ class Task(models.Model):
recursive=True,
)
+ total_billable_hours_spent = fields.Float(
+ "Total Billable Hours",
+ compute="_compute_total_billable_hours_spent",
+ store=True,
+ help="Billable time spent on this task and its sub-tasks (and their own sub-tasks).",
+ )
+
+ total_non_billable_hours_spent = fields.Float(
+ "Total Non Billable Hours",
+ compute="_compute_total_non_billable_hours_spent",
+ store=True,
+ help="Non billable time spent on this task and its sub-tasks (and their own sub-tasks).",
+ )
+
@api.depends('timesheet_ids.unit_amount')
def _compute_billable_effective_hours(self):
if not any(self._ids):
@@ -94,3 +108,17 @@ class Task(models.Model):
task.billable_progress = round(100.0 * task_total_hours / task.planned_hours, 2)
else:
task.billable_progress = 0.0
+
+ @api.depends('billable_effective_hours', 'subtask_billable_effective_hours')
+ def _compute_total_billable_hours_spent(self):
+ for task in self:
+ task.total_billable_hours_spent = (
+ task.billable_effective_hours + task.subtask_billable_effective_hours
+ )
+
+ @api.depends("non_billable_effective_hours", "subtask_non_billable_effective_hours")
+ def _compute_total_non_billable_hours_spent(self):
+ for task in self:
+ task.total_non_billable_hours_spent = (
+ task.non_billable_effective_hours + task.subtask_non_billable_effective_hours
+ )
diff --git a/project_working_time_task_portal/views/hr_timesheet_view_task_form2.xml b/project_working_time_task_portal/views/hr_timesheet_view_task_form2.xml
index b9f382c..3db45ab 100644
--- a/project_working_time_task_portal/views/hr_timesheet_view_task_form2.xml
+++ b/project_working_time_task_portal/views/hr_timesheet_view_task_form2.xml
@@ -31,6 +31,24 @@
+
+
+
+
+
+
+
+
+
+
+
+