Before this commit, since we don't have the uom in the session, the timesheet_uom widgets does not work in project sharing feature. Because those widgets need the uom stored in the session. This commit adds the uoms needed in the session used for project sharing feature. task-2633229 closes #77156 X-original-commit: a8f27ac776e8f381cb467be3a0256b197d6e688f
53 lines
2.4 KiB
Python
53 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from collections import defaultdict
|
|
from odoo.http import request
|
|
from odoo.osv import expression
|
|
|
|
from odoo.addons.project.controllers.portal import CustomerPortal
|
|
|
|
|
|
class ProjectCustomerPortal(CustomerPortal):
|
|
|
|
def _prepare_project_sharing_session_info(self, project):
|
|
session_info = super()._prepare_project_sharing_session_info(project)
|
|
|
|
company = project.company_id
|
|
timesheet_encode_uom = company.timesheet_encode_uom_id
|
|
project_time_mode_uom = company.project_time_mode_id
|
|
session_info['user_companies']['allowed_companies'][company.id].update(
|
|
timesheet_uom_id=timesheet_encode_uom.id,
|
|
timesheet_uom_factor=project_time_mode_uom._compute_quantity(
|
|
1.0,
|
|
timesheet_encode_uom,
|
|
round=False
|
|
),
|
|
)
|
|
session_info['uom_ids'] = {
|
|
uom.id:
|
|
{
|
|
'id': uom.id,
|
|
'name': uom.name,
|
|
'rounding': uom.rounding,
|
|
'timesheet_widget': uom.timesheet_widget,
|
|
} for uom in [timesheet_encode_uom, project_time_mode_uom]
|
|
}
|
|
return session_info
|
|
|
|
def _task_get_page_view_values(self, task, access_token, **kwargs):
|
|
values = super(ProjectCustomerPortal, self)._task_get_page_view_values(task, access_token, **kwargs)
|
|
domain = request.env['account.analytic.line']._timesheet_get_portal_domain()
|
|
task_domain = expression.AND([domain, [('task_id', '=', task.id)]])
|
|
subtask_domain = expression.AND([domain, [('task_id', 'in', task.child_ids.ids)]])
|
|
timesheets = request.env['account.analytic.line'].sudo().search(task_domain)
|
|
subtasks_timesheets = request.env['account.analytic.line'].sudo().search(subtask_domain)
|
|
timesheets_by_subtask = defaultdict(lambda: request.env['account.analytic.line'].sudo())
|
|
for timesheet in subtasks_timesheets:
|
|
timesheets_by_subtask[timesheet.task_id] |= timesheet
|
|
values['allow_timesheets'] = task.allow_timesheets
|
|
values['timesheets'] = timesheets
|
|
values['timesheets_by_subtask'] = timesheets_by_subtask
|
|
values['is_uom_day'] = request.env['account.analytic.line']._is_timesheet_encode_uom_day()
|
|
return values
|