diff --git a/project_working_time_task_portal/__manifest__.py b/project_working_time_task_portal/__manifest__.py index a03a72b..989d126 100644 --- a/project_working_time_task_portal/__manifest__.py +++ b/project_working_time_task_portal/__manifest__.py @@ -25,7 +25,8 @@ "data": [ "views/hr_timesheet_portal.xml", "views/hr_timesheet_view_task_form2.xml", - "views/portal_tasks_list.xml" + "views/portal_tasks_list.xml", + "views/project_views.xml" ], "assets": { "web.assets_frontend": [ diff --git a/project_working_time_task_portal/models/billable_time.py b/project_working_time_task_portal/models/billable_time.py index b0c5dfd..f526984 100644 --- a/project_working_time_task_portal/models/billable_time.py +++ b/project_working_time_task_portal/models/billable_time.py @@ -1,4 +1,4 @@ -from odoo import models, fields, api, _ +from odoo import models, fields, api from odoo.tools.float_utils import float_compare @@ -84,4 +84,20 @@ class Task(models.Model): else: task.billable_progress = round(100.0 * task_total_hours / task.planned_hours, 2) else: - task.billable_progress = 0.0 \ No newline at end of file + task.billable_progress = 0.0 + + +class Project(models.Model): + _inherit = "project.project" + + billable_remaining_hours = fields.Float( + compute="_compute_project_billable_remaining_hours", + string="Billable Remaining Hours", + store=True, + help="Total Billable remaining time (without exclude_from_sale_order timesheet lines)." + ) + + @api.depends("task_ids.billable_remaining_hours") + def _compute_project_billable_remaining_hours(self): + for project in self: + project.billable_remaining_hours = sum(task.billable_remaining_hours for task in project.task_ids) diff --git a/project_working_time_task_portal/views/project_views.xml b/project_working_time_task_portal/views/project_views.xml new file mode 100644 index 0000000..d101ce2 --- /dev/null +++ b/project_working_time_task_portal/views/project_views.xml @@ -0,0 +1,19 @@ + + + + project.working.time.view.project.kanban + project.project + + + + + + +
+ +
+
+
+
+