mirror of
https://github.com/bringout/oca-hr.git
synced 2026-04-26 05:52:01 +02:00
Move all OCA HR modules from oca-technical to dedicated oca-hr submodule
Reorganized 67 HR-related modules for better structure: - Moved all odoo-bringout-oca-hr-* packages from packages/oca-technical/ - Now organized in dedicated packages/oca-hr/ submodule - Includes attendance, expense, holiday, employee, and contract modules - Maintains all module functionality while improving project organization This creates a cleaner separation between general technical modules and HR-specific functionality. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f672249949
commit
dfcda4100c
2456 changed files with 120722 additions and 0 deletions
|
|
@ -0,0 +1,3 @@
|
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import hr_employee
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
# Copyright (C) 2018-2019 Brainbean Apps (https://brainbeanapps.com)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from datetime import timedelta
|
||||
from math import fabs
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class HrEmployee(models.Model):
|
||||
_inherit = "hr.employee"
|
||||
|
||||
service_hire_date = fields.Date(
|
||||
string="Hire Date",
|
||||
groups="hr.group_hr_user",
|
||||
tracking=True,
|
||||
help=(
|
||||
"Hire date is normally the date an employee completes new hire paperwork"
|
||||
),
|
||||
)
|
||||
service_start_date = fields.Date(
|
||||
string="Start Date",
|
||||
groups="hr.group_hr_user",
|
||||
tracking=True,
|
||||
help=(
|
||||
"Start date is the first day the employee actually works and"
|
||||
" this date is used for accrual leave allocations calculation"
|
||||
),
|
||||
)
|
||||
service_termination_date = fields.Date(
|
||||
string="Termination Date",
|
||||
related="departure_date",
|
||||
help=(
|
||||
"Termination date is the last day the employee actually works and"
|
||||
" this date is used for accrual leave allocations calculation"
|
||||
),
|
||||
)
|
||||
service_duration = fields.Integer(
|
||||
groups="hr.group_hr_user",
|
||||
readonly=True,
|
||||
compute="_compute_service_duration",
|
||||
help="Service duration in days",
|
||||
)
|
||||
service_duration_years = fields.Integer(
|
||||
string="Service Duration (years)",
|
||||
groups="hr.group_hr_user",
|
||||
readonly=True,
|
||||
compute="_compute_service_duration_display",
|
||||
)
|
||||
service_duration_months = fields.Integer(
|
||||
string="Service Duration (months)",
|
||||
groups="hr.group_hr_user",
|
||||
readonly=True,
|
||||
compute="_compute_service_duration_display",
|
||||
)
|
||||
service_duration_days = fields.Integer(
|
||||
string="Service Duration (days)",
|
||||
groups="hr.group_hr_user",
|
||||
readonly=True,
|
||||
compute="_compute_service_duration_display",
|
||||
)
|
||||
|
||||
@api.depends("service_start_date", "service_termination_date")
|
||||
def _compute_service_duration(self):
|
||||
for record in self:
|
||||
service_until = record.service_termination_date or fields.Date.today()
|
||||
if record.service_start_date and service_until > record.service_start_date:
|
||||
service_since = record.service_start_date
|
||||
service_duration = fabs(
|
||||
(service_until - service_since) / timedelta(days=1)
|
||||
)
|
||||
record.service_duration = int(service_duration)
|
||||
else:
|
||||
record.service_duration = 0
|
||||
|
||||
@api.depends("service_start_date", "service_termination_date")
|
||||
def _compute_service_duration_display(self):
|
||||
for record in self:
|
||||
service_until = record.service_termination_date or fields.Date.today()
|
||||
if record.service_start_date and service_until > record.service_start_date:
|
||||
service_duration = relativedelta(
|
||||
service_until, record.service_start_date
|
||||
)
|
||||
record.service_duration_years = service_duration.years
|
||||
record.service_duration_months = service_duration.months
|
||||
record.service_duration_days = service_duration.days
|
||||
else:
|
||||
record.service_duration_years = 0
|
||||
record.service_duration_months = 0
|
||||
record.service_duration_days = 0
|
||||
|
||||
@api.onchange("service_hire_date")
|
||||
def _onchange_service_hire_date(self):
|
||||
if not self.service_start_date:
|
||||
self.service_start_date = self.service_hire_date
|
||||
|
||||
def get_service_duration_from_date(self, date=None):
|
||||
"""
|
||||
Returns the employee service duration for the given date.
|
||||
This function is used in OCA/payroll modules as a helper function
|
||||
to calculate employee service duration calculated for the given date.
|
||||
"""
|
||||
self.ensure_one()
|
||||
if not date or not self.service_start_date:
|
||||
return {"years": 0, "months": 0, "days": 0}
|
||||
if date > self.service_start_date:
|
||||
service_duration = relativedelta(date, self.service_start_date)
|
||||
return {
|
||||
"years": service_duration.years,
|
||||
"months": service_duration.months,
|
||||
"days": service_duration.days,
|
||||
}
|
||||
return {"years": 0, "months": 0, "days": 0}
|
||||
Loading…
Add table
Add a link
Reference in a new issue