open-synergy/opnsynid-hr

View on GitHub
hr_timesheet_computation/models/hr_timesheet_sheet.py

Summary

Maintainability
A
40 mins
Test Coverage
# -*- coding: utf-8 -*-
# Copyright 2018 OpenSynergy Indonesia
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from openerp import api, fields, models


class HrTimesheetSheet(models.Model):
    _inherit = "hr_timesheet_sheet.sheet"

    computation_ids = fields.One2many(
        string="Computations",
        comodel_name="hr.timesheet_computation",
        inverse_name="sheet_id",
        readonly=True,
        states={
            "draft": [
                ("readonly", False),
            ],
        },
    )

    @api.multi
    def action_compute_timesheet(self):
        for sheet in self:
            sheet._clear_computation()
            sheet._get_computation()
            sheet._compute_timesheet()

    @api.multi
    def _clear_computation(self):
        self.ensure_one()
        self.computation_ids.unlink()

    @api.multi
    def _get_computation(self):
        self.ensure_one()
        items = self.env["hr.timesheet_computation_item"]
        computations = []
        contracts = self.contract_ids
        for contract in contracts:
            if contract.computation_ids:
                items += contract.computation_ids.mapped("item_id")
        items = set(items)
        for item in items:
            data = {
                "item_id": item.id,
                "amount": 0.0,
            }
            computations.append((0, 0, data))
        self.write({"computation_ids": computations})

    @api.multi
    def _compute_timesheet(self):
        self.ensure_one()
        self.computation_ids.action_compute()