[IMP] hr_timesheet: hide the "Timesheet Timer" feature in the project form if encoding unit is not Hours [IMP] hr_timesheet: clean display of Days for timesheets A computed field has to be added to retrieve the encoding uom of the current company and be used in the views. FieldTimesheetFactor field has to be registered to "float_factor" widget for the "planned_hours" field to work correctly with Days (for the conversion from hours to days to be computed and to be able to set a greater value than 1 day) If encoding unit for timesheets is set to Days: - Display Days instead of Hours in Portal > Timesheets - Display Days instead of Hours in Portal > Tasks - Display Days instead of Hours in Portal > Invoices & Bills - Display Days instead of Hours in Portal > Tickets [IMP] hr_timesheet: display clean duration in Timesheet Entries Display Days instead of Hours in Timesheet Entries (print action) if encoding unit for timesheets is set to Days [IMP] hr_timesheet: correctly display timesheets in Days if configured to - correctly display remaining days in project.task kanban and list view - hide timer start button if timesheet is configured in Days - update several column names [IMP] hr_timesheet: clean code [IMP] hr_timesheet: small improvements when displaying timesheets in days - Rename some labels - Fixes style - Prevent fields displayed with widget "timesheet_uom" to change when timer is on - Display correctly "Initially Planned Days" field in task creation form
27 lines
1.3 KiB
Python
27 lines
1.3 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 _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['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
|