Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,44 @@
# HR Employee Service
Odoo addon: hr_employee_service
## Installation
```bash
pip install odoo-bringout-oca-hr-hr_employee_service
```
## Dependencies
This addon depends on:
- hr
## Manifest Information
- **Name**: HR Employee Service
- **Version**: 16.0.1.0.0
- **Category**: Human Resources
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/hr](https://github.com/OCA/hr) branch 16.0, addon `hr_employee_service`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Hr_employee_service Module - hr_employee_service
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for hr_employee_service. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [hr](../../odoo-bringout-oca-ocb-hr)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon hr_employee_service or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-hr-hr_employee_service"
# or
uv pip install odoo-bringout-oca-hr-hr_employee_service"
```

View file

@ -0,0 +1,12 @@
# Models
Detected core models and extensions in hr_employee_service.
```mermaid
classDiagram
class hr_employee
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: hr_employee_service. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon hr_employee_service
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon hr_employee_service
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,96 @@
===================
HR Employee Service
===================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f1299ef48a5ba05fa49f347194fe1d08b21870f2da3db96eaa9e5cd93ce68078
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr-lightgray.png?logo=github
:target: https://github.com/OCA/hr/tree/16.0/hr_employee_service
:alt: OCA/hr
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/hr-16-0/hr-16-0-hr_employee_service
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/hr&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
With this module installed, HR Officer can keep records on employee hire,
start, and termination dates. This information is also used to automatically
calculate length of employee's service for the company.
*Hire Date* typically is the date when employee has accepted or signed the offer.
*Start Date* typically is the date of the first official work day since which employee is
entitled to receiving benefits and various accrual allocations.
*Termination Date* typically is the date of the last official work day since until which employee
is entitled to receiving benefits and various accrual allocations.
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/hr/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/hr/issues/new?body=module:%20hr_employee_service%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* CorporateHub
Contributors
~~~~~~~~~~~~
* `CorporateHub <https://corporatehub.eu/>`__
* Alexey Pelykh <alexey.pelykh@corphub.eu>
* Saran Lim. <saranl@ecosoft.co.th>
* Nattapong W. <aphon61bank@gmail.com>
* `Pesol <https://www.pesol.es>`__:
* Jonathan Oscategui Taza <info@pesol.es>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/hr <https://github.com/OCA/hr/tree/16.0/hr_employee_service>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import models

View file

@ -0,0 +1,18 @@
# Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com)
# Copyright 2020 CorporateHub (https://corporatehub.eu)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "HR Employee Service",
"version": "16.0.1.0.0",
"category": "Human Resources",
"website": "https://github.com/OCA/hr",
"author": "CorporateHub, Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"application": False,
"summary": "Employee service information & duration",
"depends": ["hr"],
"external_dependencies": {"python": ["dateutil"]},
"data": ["views/hr_employee.xml"],
}

View file

@ -0,0 +1,100 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>day(s)</span>"
msgstr "<span>dan(a)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>month(s)</span>"
msgstr "<span>mjesec(i)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>year(s)</span>"
msgstr "<span>godina(e)</span>"
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr "Zaposleni"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr "Datum zapošljavanja"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid ""
"Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr "Trajanje službe"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr "Trajanje službe (dani)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr "Trajanje službe (mjeseci)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr "Trajanje službe (godine)"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr "Informacije o službi"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr "Trajanje službe u danima"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr "Početni datum"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid ""
"Start date is the first day the employee actually works and this date is "
"used for accrual leave allocations calculation"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr "Datum otkaza"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid ""
"Termination date is the last day the employee actually works and this date "
"is used for accrual leave allocations calculation"
msgstr ""

View file

@ -0,0 +1,125 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-03-21 14:17+0000\n"
"Last-Translator: Noel estudillo <noelestudilloviera@gmail.com>\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">month(s)</span>"
msgstr "<span class=\"ml8 mr8\">mes(os)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">year(s)</span>"
msgstr "<span class=\"ml8 mr8\">any(s)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8\">day(s)</span>"
msgstr "<span class=\"ml8\">dia(es)</span>"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__display_name
msgid "Display Name"
msgstr "Nom de visualització"
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr "Empleat"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr "Data de contractació"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid ""
"Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
"La data de contractació és normalment la data en la qual l'empleat completa "
"la paperassa de contractació"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__id
msgid "ID"
msgstr "ID"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee____last_update
msgid "Last Modified on"
msgstr "Darrera modificació el"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr "Antiguitat"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr "Antiguitat (dies)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr "Antiguitat (mesos)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr "Antiguitat (anys)"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr "Informació de l'antiguitat"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr "Antiguitat en dies"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr "Data d'inici"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid ""
"Start date is the first day the employee actually works and this date is "
"used for accrual leave allocations calculation"
msgstr ""
"La data d'inici és el primer dia que l'empleat realment treballa i aquesta "
"data s'utilitza per al càlcul de les assignacions de vacances reportades"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr "Data de finalització"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid ""
"Termination date is the last day the employee actually works and this date "
"is used for accrual leave allocations calculation"
msgstr ""
"La data de finalització és l'últim dia que l'empleat realment treballa i "
"aquesta data s'utilitza per al càlcul de les assignacions de vacances "
"reportades"

View file

@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-11-25 13:58+0000\n"
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.8\n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">month(s)</span>"
msgstr "<span class=\"ml8 mr8\">Monat(e)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">year(s)</span>"
msgstr "<span class=\"ml8 mr8\">Jahr(e)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8\">day(s)</span>"
msgstr "<span class=\"ml8\">Tag(e)</span>"
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr "Mitarbeiter"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr "Datum der Anstellung"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
"Das Datum der Anstellung ist das Datum, an dem der Mitarbeiter die "
"Anstellungsformulare ausfüllt."
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr "Anstellungsdauer"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr "Anstellungsdauer (Tage)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr "Anstellungsdauer (Monate)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr "Anstellungsdauer (Jahre)"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr "Anstellung"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr "Dies ist die Anstellungsdauer in Tagen."
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr "Startdatum"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid "Start date is the first day the employee actually works and this date is used for accrual leave allocations calculation"
msgstr ""
"Das Startdatum ist der Tag, an dem der Mitarbeiter das erste Mal tatsächlich "
"arbeitet. Das Datum wird auch für die Berechnung des angehäuften "
"Urlaubsanspruchs verwendet."
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr "Enddatum"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination date is the last day the employee actually works and this date is used for accrual leave allocations calculation"
msgstr ""
"Das Enddatum ist der Tag, an dem der Mitarbeiter das letzte Mal tatsächlich "
"arbeitet. Das Datum wird auch für die Berechnung des angehäuften "
"Urlaubsanspruchs verwendet."

View file

@ -0,0 +1,109 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-06-26 18:42+0000\n"
"Last-Translator: Jaime Arroyo <jaime.arroyo@creublanca.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.6.1\n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">month(s)</span>"
msgstr "<span class=\"ml8 mr8\">mes(es)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">year(s)</span>"
msgstr "<span class=\"ml8 mr8\">año(s)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8\">day(s)</span>"
msgstr "<span class=\"ml8\">día(s)</span>"
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr "Empleado"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr "Fecha de Contratación"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
"La fecha de contratación es normalmente la fecha en la que el empleado "
"completa el papeleo de contratación"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr "Antigüedad"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr "Antigüedad (días)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr "Antigüedad (meses)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr "Antigüedad (años)"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr "Información de la Antigüedad"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr "Antigüedad en días"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr "Fecha de Inicio"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid ""
"Start date is the first day the employee actually works and this date is "
"used for accrual leave allocations calculation"
msgstr ""
"La fecha de inicio es el primer día que el empleado realmente trabaja y esta "
"fecha se utiliza para el cálculo de las asignaciones de vacaciones devengadas"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr "Fecha de finalización"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid ""
"Termination date is the last day the employee actually works and this date "
"is used for accrual leave allocations calculation"
msgstr ""
"La fecha de finalización es el último día que el empleado realmente trabaja "
"y esta fecha se utiliza para el cálculo de las asignaciones de vacaciones "
"devengadas"

View file

@ -0,0 +1,109 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-05-23 20:19+0000\n"
"Last-Translator: Kévin Allard <kallard@efficom-lille.com>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.6.1\n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">month(s)</span>"
msgstr "<span class=\"ml8 mr8\">mois</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">year(s)</span>"
msgstr "<span class=\"ml8 mr8\">année(s)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8\">day(s)</span>"
msgstr "<span class=\"ml8\">jour(s)</span>"
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr "Employé(e)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr "Date d'embauche"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
"La date d'embauche est normalement la date à laquelle l'employé complète les "
"nouveaux documents d'embauche"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr "Durée du service"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr "Durée du service (jours)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr "Durée du service (mois)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr "Durée du service (années)"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr "Durée du service en jours"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr "Date de début"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid ""
"Start date is the first day the employee actually works and this date is "
"used for accrual leave allocations calculation"
msgstr ""
"La date de début est le premier jour où l'employé(e) travaille réellement et "
"cette date est utilisée pour le calcul des allocations de congés selon la "
"comptabilité d'exercice"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr "Date de fin"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid ""
"Termination date is the last day the employee actually works and this date "
"is used for accrual leave allocations calculation"
msgstr ""
"La date de fin est le dernier jour où l'employé(e) travaille réellement et "
"cette date est utilisée pour le calcul des allocations de congés accumulés"

View file

@ -0,0 +1,100 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>day(s)</span>"
msgstr ""
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>month(s)</span>"
msgstr ""
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>year(s)</span>"
msgstr ""
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid ""
"Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr ""
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid ""
"Start date is the first day the employee actually works and this date is "
"used for accrual leave allocations calculation"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr ""
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid ""
"Termination date is the last day the employee actually works and this date "
"is used for accrual leave allocations calculation"
msgstr ""

View file

@ -0,0 +1,109 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-05-03 12:24+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.4\n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>day(s)</span>"
msgstr "<span>giorno(i)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>month(s)</span>"
msgstr "<span>mese(i)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span>year(s)</span>"
msgstr "<span>anno(i)</span>"
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr "Dipendente"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr "Data assunzione"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid ""
"Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
"La data assunzione è normalmente la data in cui il dipendete completa il "
"modulo per la nuova assunzione"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr "Durata servizio"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr "Durata servizio (giorni)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr "Durata servizio (mesi)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr "Durata servizio (anni)"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr "Informazione servizio"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr "Durata servizio in giorni"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr "Data inizio"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid ""
"Start date is the first day the employee actually works and this date is "
"used for accrual leave allocations calculation"
msgstr ""
"La data inizio è il primo giorno in cui il dipendente ha effettivamente "
"lavorato e questa data è utilizzata per il calcolo preciso delle assenze"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr "Data termine"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid ""
"Termination date is the last day the employee actually works and this date "
"is used for accrual leave allocations calculation"
msgstr ""
"La data risoluzione è l'ultimo giorno in cui il dipendente ha effettivamente "
"lavorato e questa data è utilizzata per il calcolo preciso delle ferie"

View file

@ -0,0 +1,125 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_service
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-03-13 03:46+0000\n"
"Last-Translator: Eder Brito <britoederr@gmail.com>\n"
"Language-Team: none\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">month(s)</span>"
msgstr "<span class=\"ml8 mr8\">mês(s)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8 mr8\">year(s)</span>"
msgstr "<span class=\"ml8 mr8\">ano(s)</span>"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "<span class=\"ml8\">day(s)</span>"
msgstr "<span class=\"ml8\">dia(s)</span>"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__display_name
msgid "Display Name"
msgstr "Nome de Exibição"
#. module: hr_employee_service
#: model:ir.model,name:hr_employee_service.model_hr_employee
msgid "Employee"
msgstr "Funcionário"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_hire_date
msgid "Hire Date"
msgstr "Data de Contratação"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_hire_date
msgid ""
"Hire date is normally the date an employee completes new hire paperwork"
msgstr ""
"A data de contratação é normalmente a data em que um funcionário preenche a "
"nova papelada de contratação"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__id
msgid "ID"
msgstr "ID"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Duration"
msgstr "Duração do Serviço"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_days
msgid "Service Duration (days)"
msgstr "Duração do Serviço (dias)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_months
msgid "Service Duration (months)"
msgstr "Duração do Serviço (meses)"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_duration_years
msgid "Service Duration (years)"
msgstr "Duração do Serviço (anos)"
#. module: hr_employee_service
#: model_terms:ir.ui.view,arch_db:hr_employee_service.view_employee_form_inherit_extension
msgid "Service Information"
msgstr "Informação do Serviço"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_duration
msgid "Service duration in days"
msgstr "Duração do serviço em dias"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_start_date
msgid "Start Date"
msgstr "Data Inicial"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_start_date
msgid ""
"Start date is the first day the employee actually works and this date is "
"used for accrual leave allocations calculation"
msgstr ""
"A data inicial é o primeiro dia em que o funcionário realmente trabalha e "
"esta data é usada para o cálculo de alocações de férias por acumulação"
#. module: hr_employee_service
#: model:ir.model.fields,field_description:hr_employee_service.field_hr_employee__service_termination_date
msgid "Termination Date"
msgstr "Data de Desligamento"
#. module: hr_employee_service
#: model:ir.model.fields,help:hr_employee_service.field_hr_employee__service_termination_date
msgid ""
"Termination date is the last day the employee actually works and this date "
"is used for accrual leave allocations calculation"
msgstr ""
"A data de desligamento é o último dia em que o funcionário realmente "
"trabalha e esta data é usada para o cálculo de alocações de férias por "
"acumulação"

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import hr_employee

View file

@ -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}

View file

@ -0,0 +1,11 @@
* `CorporateHub <https://corporatehub.eu/>`__
* Alexey Pelykh <alexey.pelykh@corphub.eu>
* Saran Lim. <saranl@ecosoft.co.th>
* Nattapong W. <aphon61bank@gmail.com>
* `Pesol <https://www.pesol.es>`__:
* Jonathan Oscategui Taza <info@pesol.es>

View file

@ -0,0 +1,11 @@
With this module installed, HR Officer can keep records on employee hire,
start, and termination dates. This information is also used to automatically
calculate length of employee's service for the company.
*Hire Date* typically is the date when employee has accepted or signed the offer.
*Start Date* typically is the date of the first official work day since which employee is
entitled to receiving benefits and various accrual allocations.
*Termination Date* typically is the date of the last official work day since until which employee
is entitled to receiving benefits and various accrual allocations.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,437 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>HR Employee Service</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="hr-employee-service">
<h1 class="title">HR Employee Service</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f1299ef48a5ba05fa49f347194fe1d08b21870f2da3db96eaa9e5cd93ce68078
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/hr/tree/16.0/hr_employee_service"><img alt="OCA/hr" src="https://img.shields.io/badge/github-OCA%2Fhr-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/hr-16-0/hr-16-0-hr_employee_service"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/hr&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>With this module installed, HR Officer can keep records on employee hire,
start, and termination dates. This information is also used to automatically
calculate length of employees service for the company.</p>
<p><em>Hire Date</em> typically is the date when employee has accepted or signed the offer.</p>
<p><em>Start Date</em> typically is the date of the first official work day since which employee is
entitled to receiving benefits and various accrual allocations.</p>
<p><em>Termination Date</em> typically is the date of the last official work day since until which employee
is entitled to receiving benefits and various accrual allocations.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/hr/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/hr/issues/new?body=module:%20hr_employee_service%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<ul class="simple">
<li>CorporateHub</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://corporatehub.eu/">CorporateHub</a><ul>
<li>Alexey Pelykh &lt;<a class="reference external" href="mailto:alexey.pelykh&#64;corphub.eu">alexey.pelykh&#64;corphub.eu</a>&gt;</li>
</ul>
</li>
<li>Saran Lim. &lt;<a class="reference external" href="mailto:saranl&#64;ecosoft.co.th">saranl&#64;ecosoft.co.th</a>&gt;</li>
<li>Nattapong W. &lt;<a class="reference external" href="mailto:aphon61bank&#64;gmail.com">aphon61bank&#64;gmail.com</a>&gt;</li>
<li><a class="reference external" href="https://www.pesol.es">Pesol</a>:<ul>
<li>Jonathan Oscategui Taza &lt;<a class="reference external" href="mailto:info&#64;pesol.es">info&#64;pesol.es</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/hr/tree/16.0/hr_employee_service">OCA/hr</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import test_hr_employee_service

View file

@ -0,0 +1,142 @@
# Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from datetime import date
from unittest.mock import patch
from dateutil.relativedelta import relativedelta
from odoo import fields
from odoo.tests import common
class TestHrEmployeeService(common.TransactionCase):
def setUp(self):
super().setUp()
self.today = fields.Date.today()
self.now = fields.Datetime.now()
self.Employee = self.env["hr.employee"]
self.SudoEmployee = self.Employee.sudo()
def test_1(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #1",
"service_hire_date": (self.today - relativedelta(years=3)),
"service_start_date": (self.today - relativedelta(years=3)),
"departure_date": (self.today - relativedelta(years=1)),
}
)
self.assertEqual(employee.service_duration_years, 2)
self.assertEqual(employee.service_duration_months, 0)
self.assertEqual(employee.service_duration_days, 0)
def test_2(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #2",
"service_hire_date": (self.today - relativedelta(years=3)),
"service_start_date": (self.today - relativedelta(years=3)),
}
)
self.assertEqual(employee.service_duration_years, 3)
self.assertEqual(employee.service_duration_months, 0)
self.assertEqual(employee.service_duration_days, 0)
def test_3(self):
mocked_today = date(2019, 8, 27)
employee = self.SudoEmployee.create(
{
"name": "Employee #3",
"service_hire_date": (mocked_today - relativedelta(months=6)),
"service_start_date": (mocked_today - relativedelta(months=6)),
}
)
with patch("odoo.fields.Date.today") as today:
today.return_value = mocked_today
self.assertEqual(employee.service_duration_years, 0)
self.assertEqual(employee.service_duration_months, 6)
self.assertEqual(employee.service_duration_days, 0)
def test_4(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #4",
"service_hire_date": (self.today - relativedelta(months=6)),
}
)
self.assertEqual(employee.service_duration_years, 0)
self.assertEqual(employee.service_duration_months, 0)
self.assertEqual(employee.service_duration_days, 0)
def test_5(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #5",
"service_hire_date": (self.today - relativedelta(days=1)),
"service_start_date": (self.today - relativedelta(days=1)),
}
)
self.assertEqual(employee.service_duration, 1)
self.assertEqual(employee.service_duration_days, 1)
def test_6(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #6",
"service_hire_date": self.today,
"service_start_date": self.today,
}
)
employee.service_hire_date = None
employee.service_start_date = None
self.assertEqual(employee.service_duration_years, 0)
self.assertEqual(employee.service_duration_months, 0)
self.assertEqual(employee.service_duration_days, 0)
def test_7(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #7",
"service_hire_date": (self.today - relativedelta(days=1)),
}
)
employee._onchange_service_hire_date()
self.assertEqual(employee.service_duration_years, 0)
self.assertEqual(employee.service_duration_months, 0)
self.assertEqual(employee.service_duration_days, 1)
def test_8(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #8",
"service_hire_date": (self.today - relativedelta(days=1)),
"service_start_date": (self.today - relativedelta(days=1)),
"departure_date": (self.today - relativedelta(years=1)),
}
)
self.assertEqual(employee.service_duration, 0)
def test_get_service_duration_from_date(self):
employee = self.SudoEmployee.create(
{
"name": "Employee #9",
"service_hire_date": (self.today - relativedelta(years=1)),
"service_start_date": (self.today - relativedelta(years=1)),
}
)
search_date = self.today - relativedelta(months=10)
result = employee.get_service_duration_from_date(search_date)
self.assertEqual(result["years"], 0)
self.assertEqual(result["months"], 2)

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!--
Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<record id="view_employee_form_inherit_extension" model="ir.ui.view">
<field name="name">view.employee.form.inherit.extension</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form" />
<field name="arch" type="xml">
<xpath expr="//page[@name='hr_settings']/group" position="inside">
<group
name="service_information"
groups="hr.group_hr_user"
string="Service Information"
>
<field name="service_hire_date" />
<field name="service_start_date" />
<field
name="service_termination_date"
attrs="{'invisible': [('active', '=', True)]}"
/>
<field name="service_duration" invisible="1" />
<label for="service_duration" string="Service Duration" />
<div class="o_row" name="div_service_duration">
<field name="service_duration_years" nolabel="1" />
<span>year(s)</span>
<field name="service_duration_months" nolabel="1" />
<span>month(s)</span>
<field name="service_duration_days" nolabel="1" />
<span>day(s)</span>
</div>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-hr-hr_employee_service"
version = "16.0.0"
description = "HR Employee Service - Employee service information & duration"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-hr>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["hr_employee_service"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]