open-synergy/opnsynid-hr

View on GitHub
hr_employee_join_termination_date/models/hr_employee.py

Summary

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

import logging

from openerp import api, fields, models

_logger = logging.getLogger(__name__)

try:
    import numpy as np
    import pandas as pd
except (ImportError, IOError) as err:
    _logger.debug(err)


class HrEmployee(models.Model):
    _inherit = "hr.employee"

    date_join = fields.Date(
        string="Join Date",
    )
    date_termination = fields.Date(
        string="Termination Date",
    )
    year_work_longetivity = fields.Integer(
        string="Year Work Longetivity",
        compute="_compute_work_longetivity",
        store=True,
    )
    month_work_longetivity = fields.Integer(
        string="Month Work Longetivity",
        compute="_compute_work_longetivity",
        store=True,
    )

    @api.multi
    @api.depends(
        "date_join",
        "date_termination",
    )
    def _compute_work_longetivity(self):
        for document in self:
            year_work = month_work = 0
            if document.date_join:
                if not document.date_termination:
                    dt_termination = pd.to_datetime(fields.Date.today())
                else:
                    dt_termination = pd.to_datetime(document.date_termination)
                dt_join = pd.to_datetime(document.date_join)

                dt_year_work = dt_termination - dt_join
                year_work = int(dt_year_work / np.timedelta64(1, "Y"))
                dt_temp_year = dt_join + pd.DateOffset(years=year_work)

                dt_month_work = dt_termination - dt_temp_year
                month_work = int(dt_month_work / np.timedelta64(1, "M"))

            document.year_work_longetivity = year_work
            document.month_work_longetivity = month_work

    @api.model
    def cron_update_longetivity(self):
        employee_ids = self.search([])
        for employee in employee_ids:
            employee._compute_work_longetivity()