40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import fields, models, api
|
||
|
|
||
|
|
||
|
class ProjectUpdate(models.Model):
|
||
|
_inherit = "project.update"
|
||
|
|
||
|
display_timesheet_stats = fields.Boolean(compute="_compute_display_timesheet_stats")
|
||
|
allocated_time = fields.Integer("Allocated Time", readonly=True)
|
||
|
timesheet_time = fields.Integer("Timesheet Time", readonly=True)
|
||
|
timesheet_percentage = fields.Integer(compute="_compute_timesheet_percentage")
|
||
|
uom_id = fields.Many2one("uom.uom", "Unit Of Measure", readonly=True)
|
||
|
|
||
|
def _compute_timesheet_percentage(self):
|
||
|
for update in self:
|
||
|
update.timesheet_percentage = update.allocated_time and round(update.timesheet_time * 100 / update.allocated_time)
|
||
|
|
||
|
def _compute_display_timesheet_stats(self):
|
||
|
for update in self:
|
||
|
update.display_timesheet_stats = update.project_id.allow_timesheets
|
||
|
|
||
|
# ---------------------------------
|
||
|
# ORM Override
|
||
|
# ---------------------------------
|
||
|
@api.model_create_multi
|
||
|
def create(self, vals_list):
|
||
|
updates = super().create(vals_list)
|
||
|
encode_uom = self.env.company.timesheet_encode_uom_id
|
||
|
ratio = self.env.ref("uom.product_uom_hour").ratio / encode_uom.ratio
|
||
|
for update in updates:
|
||
|
project = update.project_id
|
||
|
project.sudo().last_update_id = update
|
||
|
update.write({
|
||
|
"uom_id": encode_uom,
|
||
|
"allocated_time": round(project.allocated_hours / ratio),
|
||
|
"timesheet_time": round(project.total_timesheet_time / ratio),
|
||
|
})
|
||
|
return updates
|