odoo18/addons_extensions/project_dashboards_management/models/project_protofolio.py

45 lines
1.9 KiB
Python

from odoo import models, fields, api, _
class ProjectPortfolio(models.Model):
_inherit = 'project.portfolio'
def get_portfolio_projects(self):
"""Return portfolio projects data for dashboard"""
self.ensure_one()
projects = []
for project in self.project_ids.filtered(lambda p: p.active):
projects.append({
'id': project.id,
'name': project.name,
'estimated_amount': project.estimated_amount,
'project_cost': project.project_cost,
'actual_cost': project.actual_cost,
'profit': project.profit,
'loss': project.loss,
'budget_variance_percent': (
(project.estimated_amount - project.actual_cost) / project.estimated_amount * 100)
if project.estimated_amount else 0,
'active': project.active,
})
return projects
def get_employee_performance(self):
"""Return employee performance data for dashboard"""
self.ensure_one()
performance = []
for perf in self.employee_performance_ids:
performance.append({
'id': perf.id,
'employee_id': perf.employee_id.id,
'employee_name': perf.employee_id.name,
'department_id': perf.department_id.id if perf.department_id else False,
'department_name': perf.department_id.name if perf.department_id else '',
'total_estimated_hours': perf.total_estimated_hours,
'total_actual_hours': perf.total_actual_hours,
'time_variance_percent': perf.time_variance_percent,
'on_time_completion_rate': perf.on_time_completion_rate,
'efficiency_rate': perf.efficiency_rate,
'performance_status': perf.performance_status,
})
return performance