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:
Ernad Husremovic 2025-08-30 17:11:28 +02:00
parent f672249949
commit dfcda4100c
2456 changed files with 120722 additions and 0 deletions

View file

@ -0,0 +1,44 @@
# HR Employee First Name, Last Name
Odoo addon: hr_employee_firstname
## Installation
```bash
pip install odoo-bringout-oca-hr-hr_employee_firstname
```
## Dependencies
This addon depends on:
- hr
## Manifest Information
- **Name**: HR Employee First Name, Last Name
- **Version**: 16.0.1.0.3
- **Category**: Human Resources
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/hr](https://github.com/OCA/hr) branch 16.0, addon `hr_employee_firstname`.
## 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_firstname Module - hr_employee_firstname
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_firstname. 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](https://github.com/bringout/oca-ocb-hr/tree/dc1405e12dbe76ffb119a0feb323b56ae2c58522/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_firstname or install in UI.

View file

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

View file

@ -0,0 +1,14 @@
# Models
Detected core models and extensions in hr_employee_firstname.
```mermaid
classDiagram
class hr_employee
class hr_employee_base
class res_config_settings
```
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_firstname. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon hr_employee_firstname
- 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_firstname
```

View file

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

View file

@ -0,0 +1,102 @@
=================================
HR Employee First Name, Last Name
=================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3e43f6f6ed53b5d32d827fc1ad2fa817a7290e76c0c6f2200df2312c8d4c69a4
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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_firstname
: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_firstname
: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|
This module allows you to add firstname and lastname in employee form,
and concatenate both in name field.
**Table of contents**
.. contents::
:local:
Usage
=====
On the employee form view you will have 2 separate fields, one for Firstname,
second for Lastname. At least one of them is required.
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_firstname%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
~~~~~~~
* Savoir-faire Linux
* Fekete Mihai (Forest and Biomass Services Romania)
* Onestein
Contributors
~~~~~~~~~~~~
* El Hadji Dem <elhadji.dem@savoirfairelinux.com>
* Sandy Carter <sandy.carter@savoirfairelinux.com>
* Fekete Mihai <feketemihai@gmail.com>
* David Dufresne <david.dufresne@savoirfairelinux.com>
* Adrien Peiffer (ACSONE) <adrien.peiffer@acsone.eu>
* Antonio Esposito (ONESTEIN BV) <a.esposito@onestein.nl>
* Andrea Stirpe <a.stirpe@onestein.nl>
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.
.. |maintainer-Savoir-faire Linux| image:: https://github.com/Savoir-faire Linux.png?size=40px
:target: https://github.com/Savoir-faire Linux
:alt: Savoir-faire Linux
.. |maintainer-luisg123v| image:: https://github.com/luisg123v.png?size=40px
:target: https://github.com/luisg123v
:alt: luisg123v
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-Savoir-faire Linux| |maintainer-luisg123v|
This module is part of the `OCA/hr <https://github.com/OCA/hr/tree/16.0/hr_employee_firstname>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

@ -0,0 +1,20 @@
# Copyright 2010-2014 Savoir-faire Linux (<http://www.savoirfairelinux.com>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "HR Employee First Name, Last Name",
"version": "16.0.1.0.3",
"author": "Savoir-faire Linux, "
"Fekete Mihai (Forest and Biomass Services Romania), "
"Onestein, "
"Odoo Community Association (OCA)",
"maintainers": ["Savoir-faire Linux", "luisg123v"],
"website": "https://github.com/OCA/hr",
"license": "AGPL-3",
"category": "Human Resources",
"summary": "Adds First Name to Employee",
"depends": ["hr"],
"data": ["views/hr_view.xml", "views/base_config_view.xml"],
"post_init_hook": "post_init_hook",
"installable": True,
}

View file

@ -0,0 +1,10 @@
# Copyright 2016-2019 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID
from odoo.api import Environment
def post_init_hook(cr, _):
env = Environment(cr, SUPERUSER_ID, {})
env["hr.employee"]._install_employee_firstname()

View file

@ -0,0 +1,74 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# abdullah alsabi <alsabi.abdullah@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-10 04:30+0000\n"
"PO-Revision-Date: 2017-06-10 04:30+0000\n"
"Last-Translator: abdullah alsabi <alsabi.abdullah@gmail.com>, 2017\n"
"Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "الموظف"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""
#~ msgid "Firstname"
#~ msgstr "الإسم الأول"
#~ msgid "Lastname"
#~ msgstr "إسم العائلة"

View file

@ -0,0 +1,62 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
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_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr "Obični zaposlenik"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr "Postavke"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Djelatnik"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr "Redoslijed imena zaposlenika"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr "Ime"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr "Prezime"
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "Ime nije postavljeno."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr "Redoslijed za sastavljanje punog imena zaposlenika"

View file

@ -0,0 +1,67 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-05-11 13:47+0000\n"
"Last-Translator: Haftec <hmahamud@tecnihand.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_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Empleat"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr "Ordre dels noms d'empleats"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr "Nom"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr "Cognoms"
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "No s'ha definit cap nom."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""
#~ msgid "Last Modified on"
#~ msgstr "Darrera modificació el"

View file

@ -0,0 +1,68 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-07 02:58+0000\n"
"PO-Revision-Date: 2018-06-07 02:58+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2018\n"
"Language-Team: Czech (Czech Republic) (https://www.transifex.com/oca/"
"teams/23907/cs_CZ/)\n"
"Language: cs_CZ\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Zaměstnanec"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""

View file

@ -0,0 +1,82 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2021-07-09 14:48+0000\n"
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\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 4.3.2\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr "Normaler Mitarbeiter"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigurationseinstellungen"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Mitarbeiter"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr "Reihenfolge der Namen"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr "Vorname"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr "Nachname"
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "Es wurde kein Name eingetragen."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr "Reihenfolge für die Zusammensetzung des vollen Namens"
#~ msgid "Firstname"
#~ msgstr "Vorname"
#~ msgid "Lastname"
#~ msgstr "Nachname"
#~ msgid "Display Name"
#~ msgstr "Anzeigename"
#~ msgid "ID"
#~ msgstr "ID"
#~ msgid "Last Modified on"
#~ msgstr "Zuletzt geändert am"

View file

@ -0,0 +1,73 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2023-08-03 21:10+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\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 4.17\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr "Empleado básico"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr "Ajustes de Configuración"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Empleado"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr "Orden de los Nombres de Empleados"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr "Nombre de pila"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr "Apellido"
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "Sin nombre establecido."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr "Orden para componer el nombre completo del empleado"
#~ msgid "Firstname"
#~ msgstr "Nombre propio"
#~ msgid "Lastname"
#~ msgstr "Apellidos"

View file

@ -0,0 +1,73 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# Mehdi Zarrinkolah <mehdi1811@gmail.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-07 02:58+0000\n"
"PO-Revision-Date: 2018-07-22 10:30+0000\n"
"Last-Translator: derKonig <fshahy@gmail.com>\n"
"Language-Team: Persian (https://www.transifex.com/oca/teams/23907/fa/)\n"
"Language: fa\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.0.1\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "کارمند"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""
#~ msgid "Firstname"
#~ msgstr "نام"
#~ msgid "Lastname"
#~ msgstr "نام خانوادگی"

View file

@ -0,0 +1,66 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: hr (10.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-04-14 04:15+0000\n"
"PO-Revision-Date: 2016-04-04 11:07+0000\n"
"Last-Translator: Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/oca/OCA-hr-8-0/language/"
"fi/)\n"
"Language: fi\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"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Työntekijä"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""

View file

@ -0,0 +1,73 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2024-02-23 10:46+0000\n"
"Last-Translator: Vincent Hatakeyama <vincent+github@hatakeyama.fr>\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\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 4.17\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr "Employé de base"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr "Paramètres de configuration"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Employé"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr "Ordre des noms demployé"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr "Prénom"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr "Nom"
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "Aucun nom défini."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr "Règle de composition des noms complets des employés"
#~ msgid "Firstname"
#~ msgstr "Prénom"
#~ msgid "Lastname"
#~ msgstr "Nom"

View file

@ -0,0 +1,74 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-04 06:52+0000\n"
"PO-Revision-Date: 2019-11-13 16:34+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Djelatnik"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "Ime nije postavljeno."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""
#~ msgid "Firstname"
#~ msgstr "Ime"
#~ msgid "Lastname"
#~ msgstr "Prezime"

View file

@ -0,0 +1,68 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2017-01-28 02:12+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/"
"hr_HR/)\n"
"Language: hr_HR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Djelatnik"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""

View file

@ -0,0 +1,73 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2023-06-26 08:09+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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 4.17\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr "Dipendente base"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr "Impostazioni configurazione"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Dipendente"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr "Ordine nomi dipendente"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr "Nome"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr "Cognome"
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "Nome non impostato."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr "Ordinamento per comporre il nome completo del dipendente"
#~ msgid "Firstname"
#~ msgstr "Nome"
#~ msgid "Lastname"
#~ msgstr "Cognome"

View file

@ -0,0 +1,68 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-06-07 02:58+0000\n"
"PO-Revision-Date: 2018-06-07 02:58+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2018\n"
"Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? "
"1 : n % 1 != 0 ? 2: 3);\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Darbuotojas"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""

View file

@ -0,0 +1,73 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2017-01-28 02:12+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\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"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Werknemer"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""
#~ msgid "Firstname"
#~ msgstr "Voornaam"
#~ msgid "Lastname"
#~ msgstr "Achternaam"

View file

@ -0,0 +1,78 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2024-05-21 06:16+0000\n"
"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
"translation.odoo-community.org>\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/"
"23907/pt_BR/)\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.17\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr "Funcionário Básico"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr "Configurações"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Funcionário"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr "Ordem de Nome dos Funcionários"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr "Nome"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr "Sobrenome"
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr "Nenhum nome definido."
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr "Ordem para compor o nome completo do funcionário"
#~ msgid "Firstname"
#~ msgstr "Primeiro nome"
#~ msgid "Lastname"
#~ msgstr "Último nome"
#~ msgid "Display Name"
#~ msgstr "Nome de Exibição"

View file

@ -0,0 +1,73 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2017-01-28 02:12+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
"2:1));\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Angajat"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""
#~ msgid "Firstname"
#~ msgstr "Prenume"
#~ msgid "Lastname"
#~ msgstr "Nume"

View file

@ -0,0 +1,73 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_firstname
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-28 02:12+0000\n"
"PO-Revision-Date: 2017-01-28 02:12+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee_base
msgid "Basic Employee"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model,name:hr_employee_firstname.model_hr_employee
msgid "Employee"
msgstr "Kader"
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_res_config_settings__employee_names_order
#: model_terms:ir.ui.view,arch_db:hr_employee_firstname.res_config_settings_view_form
msgid "Employee Names Order"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__firstname
msgid "First name"
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_base__lastname
#: model:ir.model.fields,field_description:hr_employee_firstname.field_hr_employee_public__lastname
msgid "Last name"
msgstr ""
#. module: hr_employee_firstname
#. odoo-python
#: code:addons/hr_employee_firstname/models/hr_employee.py:0
#, python-format
msgid "No name set."
msgstr ""
#. module: hr_employee_firstname
#: model:ir.model.fields,help:hr_employee_firstname.field_res_config_settings__employee_names_order
msgid "Order to compose employee fullname"
msgstr ""
#~ msgid "Firstname"
#~ msgstr "Ime"
#~ msgid "Lastname"
#~ msgstr "Priimek"

View file

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

View file

@ -0,0 +1,30 @@
# Copyright 2015 Antiun Ingenieria S.L. - Antonio Espinosa
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
from odoo import fields, models
_logger = logging.getLogger(__name__)
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
employee_names_order = fields.Selection(
selection="_employee_names_order_selection",
help="Order to compose employee fullname",
config_parameter="employee_names_order",
default=lambda a: a._employee_names_order_default(),
required=True,
)
def _employee_names_order_selection(self):
return [
("last_first", "Lastname Firstname"),
("last_first_comma", "Lastname, Firstname"),
("first_last", "Firstname Lastname"),
]
def _employee_names_order_default(self):
return self.env["hr.employee"]._names_order_default()

View file

@ -0,0 +1,181 @@
# Copyright 2010-2014 Savoir-faire Linux (<http://www.savoirfairelinux.com>)
# Copyright 2016-2019 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging
from odoo import _, api, models
from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__)
UPDATE_PARTNER_FIELDS = ["firstname", "lastname", "user_id", "address_home_id"]
class HrEmployee(models.Model):
_inherit = "hr.employee"
@api.model
def _names_order_default(self):
return "first_last"
@api.model
def _get_names_order(self):
"""Get names order configuration from system parameters.
You can override this method to read configuration from language,
country, company or other"""
return (
self.env["ir.config_parameter"]
.sudo()
.get_param("employee_names_order", self._names_order_default())
)
@api.model
def _get_name(self, lastname, firstname):
order = self._get_names_order()
if order == "last_first_comma":
return ", ".join(p for p in (lastname, firstname) if p)
elif order == "first_last":
return " ".join(p for p in (firstname, lastname) if p)
else:
return " ".join(p for p in (lastname, firstname) if p)
@api.onchange("firstname", "lastname")
def _onchange_firstname_lastname(self):
if self.firstname or self.lastname:
self.name = self._get_name(self.lastname, self.firstname)
@api.model
def _is_partner_firstname_installed(self):
return bool(
self.env["ir.module.module"]
.sudo()
.search([("name", "=", "partner_firstname"), ("state", "=", "installed")])
)
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
self._prepare_vals_on_create_firstname_lastname(vals)
res = super().create(vals_list)
if self._is_partner_firstname_installed():
for employee in res:
employee._update_partner_firstname()
return res
def write(self, vals):
self._prepare_vals_on_write_firstname_lastname(vals)
res = super().write(vals)
if self._is_partner_firstname_installed() and set(vals).intersection(
UPDATE_PARTNER_FIELDS
):
self._update_partner_firstname()
return res
def _prepare_vals_on_create_firstname_lastname(self, vals):
if vals.get("firstname") or vals.get("lastname"):
vals["name"] = self._get_name(vals.get("lastname"), vals.get("firstname"))
elif vals.get("name"):
vals["lastname"] = self.split_name(vals["name"])["lastname"]
vals["firstname"] = self.split_name(vals["name"])["firstname"]
else:
raise ValidationError(_("No name set."))
def _prepare_vals_on_write_firstname_lastname(self, vals):
if "firstname" in vals or "lastname" in vals:
if "lastname" in vals:
lastname = vals.get("lastname")
else:
lastname = self.lastname
if "firstname" in vals:
firstname = vals.get("firstname")
else:
firstname = self.firstname
vals["name"] = self._get_name(lastname, firstname)
elif vals.get("name"):
vals["lastname"] = self.split_name(vals["name"])["lastname"]
vals["firstname"] = self.split_name(vals["name"])["firstname"]
@api.model
def _get_whitespace_cleaned_name(self, name, comma=False):
"""Remove redundant whitespace from :param:`name`.
Removes leading, trailing and duplicated whitespace.
"""
try:
name = " ".join(name.split()) if name else name
except UnicodeDecodeError:
name = " ".join(name.decode("utf-8").split()) if name else name
if comma:
name = name.replace(" ,", ",").replace(", ", ",")
return name
@api.model
def _get_inverse_name(self, name):
"""Compute the inverted name.
This method can be easily overriden by other submodules.
You can also override this method to change the order of name's
attributes
When this method is called, :attr:`~.name` already has unified and
trimmed whitespace.
"""
order = self._get_names_order()
# Remove redundant spaces
name = self._get_whitespace_cleaned_name(
name, comma=(order == "last_first_comma")
)
parts = name.split("," if order == "last_first_comma" else " ", 1)
if len(parts) > 1:
if order == "first_last":
parts = [" ".join(parts[1:]), parts[0]]
else:
parts = [parts[0], " ".join(parts[1:])]
else:
while len(parts) < 2:
parts.append(False)
return {"lastname": parts[0], "firstname": parts[1]}
@api.model
def split_name(self, name):
clean_name = " ".join(name.split(None)) if name else name
return self._get_inverse_name(clean_name)
def _inverse_name(self):
"""Try to revert the effect of :meth:`._compute_name`."""
for record in self:
parts = self._get_inverse_name(record.name)
record.lastname = parts["lastname"]
record.firstname = parts["firstname"]
@api.model
def _install_employee_firstname(self):
"""Save names correctly in the database.
Before installing the module, field ``name`` contains all full names.
When installing it, this method parses those names and saves them
correctly into the database. This can be called later too if needed.
"""
# Find records with empty firstname and lastname
records = self.search([("firstname", "=", False), ("lastname", "=", False)])
# Force calculations there
records._inverse_name()
_logger.info("%d employees updated installing module.", len(records))
def _update_partner_firstname(self):
for employee in self:
partners = employee.mapped("user_id.partner_id")
partners |= employee.mapped("address_home_id")
partners.write(
{"firstname": employee.firstname, "lastname": employee.lastname}
)
@api.constrains("firstname", "lastname")
def _check_name(self):
"""Ensure at least one name is set."""
for record in self:
if not (record.firstname or record.lastname):
raise ValidationError(_("No name set."))

View file

@ -0,0 +1,8 @@
from odoo import fields, models
class HrEmployeeBase(models.AbstractModel):
_inherit = "hr.employee.base"
firstname = fields.Char()
lastname = fields.Char()

View file

@ -0,0 +1,7 @@
* El Hadji Dem <elhadji.dem@savoirfairelinux.com>
* Sandy Carter <sandy.carter@savoirfairelinux.com>
* Fekete Mihai <feketemihai@gmail.com>
* David Dufresne <david.dufresne@savoirfairelinux.com>
* Adrien Peiffer (ACSONE) <adrien.peiffer@acsone.eu>
* Antonio Esposito (ONESTEIN BV) <a.esposito@onestein.nl>
* Andrea Stirpe <a.stirpe@onestein.nl>

View file

@ -0,0 +1,2 @@
This module allows you to add firstname and lastname in employee form,
and concatenate both in name field.

View file

@ -0,0 +1,2 @@
On the employee form view you will have 2 separate fields, one for Firstname,
second for Lastname. At least one of them is required.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -0,0 +1,440 @@
<!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 First Name, Last Name</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
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: gray; } /* 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, pre.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-first-name-last-name">
<h1 class="title">HR Employee First Name, Last Name</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:3e43f6f6ed53b5d32d827fc1ad2fa817a7290e76c0c6f2200df2312c8d4c69a4
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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_firstname"><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_firstname"><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>This module allows you to add firstname and lastname in employee form,
and concatenate both in name field.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>On the employee form view you will have 2 separate fields, one for Firstname,
second for Lastname. At least one of them is required.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">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_firstname%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-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Savoir-faire Linux</li>
<li>Fekete Mihai (Forest and Biomass Services Romania)</li>
<li>Onestein</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>El Hadji Dem &lt;<a class="reference external" href="mailto:elhadji.dem&#64;savoirfairelinux.com">elhadji.dem&#64;savoirfairelinux.com</a>&gt;</li>
<li>Sandy Carter &lt;<a class="reference external" href="mailto:sandy.carter&#64;savoirfairelinux.com">sandy.carter&#64;savoirfairelinux.com</a>&gt;</li>
<li>Fekete Mihai &lt;<a class="reference external" href="mailto:feketemihai&#64;gmail.com">feketemihai&#64;gmail.com</a>&gt;</li>
<li>David Dufresne &lt;<a class="reference external" href="mailto:david.dufresne&#64;savoirfairelinux.com">david.dufresne&#64;savoirfairelinux.com</a>&gt;</li>
<li>Adrien Peiffer (ACSONE) &lt;<a class="reference external" href="mailto:adrien.peiffer&#64;acsone.eu">adrien.peiffer&#64;acsone.eu</a>&gt;</li>
<li>Antonio Esposito (ONESTEIN BV) &lt;<a class="reference external" href="mailto:a.esposito&#64;onestein.nl">a.esposito&#64;onestein.nl</a>&gt;</li>
<li>Andrea Stirpe &lt;<a class="reference external" href="mailto:a.stirpe&#64;onestein.nl">a.stirpe&#64;onestein.nl</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">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>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/Savoir-faireLinux"><img alt="Savoir-faire Linux" src="https://github.com/Savoir-faireLinux.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/luisg123v"><img alt="luisg123v" src="https://github.com/luisg123v.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/hr/tree/16.0/hr_employee_firstname">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).
from . import test_hr_employee_firstname

View file

@ -0,0 +1,173 @@
# Copyright (C) 2014 Savoir-faire Linux. All Rights Reserved.
# Copyright 2016-2019 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import odoo
from odoo.exceptions import ValidationError
from odoo.tests.common import TransactionCase
class TestEmployeeFirstname(TransactionCase):
def setUp(self):
super().setUp()
# Create 3 employees to concatenate the firstname and lastname
# in name_related
self.employee1_id = self.env["hr.employee"].create(
{"firstname": "Jan", "lastname": "Van-Eyck"}
)
self.employee2_id = self.env["hr.employee"].create(
{"firstname": "Jean-Pierre", "lastname": "Carnaud"}
)
self.employee3_id = self.env["hr.employee"].create(
{"firstname": "Famke", "lastname": "Jenssens"}
)
# Create 3 employees for split the name_related to
# firstname and lastname
self.employee10_id = self.env["hr.employee"].create({"name": " Jan Van-Eyck"})
self.employee20_id = self.env["hr.employee"].create(
{"name": "Jean-Pierre Carnaud"}
)
self.employee30_id = self.env["hr.employee"].create({"name": "JenssensFamke"})
def test_get_name(self):
"""
Validate the _get_name method is concatenating
the firstname and lastname
"""
# Check for employee1
self.assertEqual(self.employee1_id.name, "Jan Van-Eyck")
# Check for employee2
self.assertEqual(self.employee2_id.name, "Jean-Pierre Carnaud")
# Check for employee3
self.assertEqual(self.employee3_id.name, "Famke Jenssens")
def test_onchange(self):
"""
Validate the get_name method is not failing
"""
field_onchange = self.env["hr.employee"].new({})._onchange_spec()
self.assertEqual(field_onchange.get("firstname"), "1")
self.assertEqual(field_onchange.get("lastname"), "1")
values = {
"firstname": "Antonio",
"lastname": "Esposito",
"name": "test employee",
}
for field in self.env["hr.employee"]._fields:
if field not in values:
values[field] = False
# we work on a temporary record
new_record = self.env["hr.employee"].new(values)
updates = new_record.onchange(values, ["firstname", "lastname"], field_onchange)
values.update(updates.get("value", {}))
self.assertEqual(values["name"], "Antonio Esposito")
def test_auto_init_name(self):
"""
Validate the create method if the name is split
in firstname and lastname
"""
# Check for employee10
self.assertEqual(self.employee10_id.firstname, "Jan")
self.assertEqual(self.employee10_id.lastname, "Van-Eyck")
# Check for employee20
self.assertEqual(self.employee20_id.firstname, "Jean-Pierre")
self.assertEqual(self.employee20_id.lastname, "Carnaud")
# Check for employee30
self.assertEqual(self.employee30_id.firstname, False)
self.assertEqual(self.employee30_id.lastname, "JenssensFamke")
def test_change_name(self):
self.employee1_id.write({"name": "Jean-Pierre Carnaud-Eyck"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.firstname, "Jean-Pierre")
self.assertEqual(self.employee1_id.lastname, "Carnaud-Eyck")
def test_change_name_with_space(self):
self.employee1_id.write({"name": " Jean-Pierre Carnaud-Eyck"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.firstname, "Jean-Pierre")
self.assertEqual(self.employee1_id.lastname, "Carnaud-Eyck")
def test_change_firstname(self):
self.employee1_id.write({"firstname": "Jean-Pierre"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.name, "Jean-Pierre Van-Eyck")
def test_change_lastname(self):
self.employee1_id.write({"lastname": "Carnaud"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.name, "Jan Carnaud")
def test_change_firstname_and_lastname(self):
self.employee1_id.write({"firstname": "Jean-Pierre", "lastname": "Carnaud"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.name, "Jean-Pierre Carnaud")
def test_lastname_firstname(self):
self.env["ir.config_parameter"].sudo().set_param(
"employee_names_order", "last_first"
)
self.employee1_id.write({"name": "Carnaud-Eyck Jean-Pierre"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.firstname, "Jean-Pierre")
self.assertEqual(self.employee1_id.lastname, "Carnaud-Eyck")
self.employee1_id.write({"name": " Carnaud-Eyck Jean-Pierre"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.firstname, "Jean-Pierre")
self.assertEqual(self.employee1_id.lastname, "Carnaud-Eyck")
self.employee1_id.write({"firstname": "Jean-Pierre", "lastname": "Carnaud"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.name, "Carnaud Jean-Pierre")
@odoo.tests.tagged("-at_install", "post_install")
def test_update_name_post_install(self):
empl_demo = self.env.ref("hr.employee_admin")
self.assertEqual(empl_demo.firstname, "Mitchell")
self.assertEqual(empl_demo.lastname, "Admin")
def test_no_name(self):
self.env["hr.employee"].create({"firstname": "test"})
self.env["hr.employee"].create({"lastname": "test"})
self.env["hr.employee"].create({"name": "test"})
with self.assertRaises(ValidationError):
self.env["hr.employee"].create({})
def test_no_firstname_and_lastname(self):
with self.assertRaises(ValidationError):
self.employee1_id.write({"firstname": "", "lastname": ""})
def test_change_firstname_and_lastname_with_set_last_first_comma(self):
self.env["ir.config_parameter"].sudo().set_param(
"employee_names_order", "last_first_comma"
)
self.employee1_id.write({"firstname": "Jean-Pierre", "lastname": "Carnaud"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.name, "Carnaud, Jean-Pierre")
def test_change_name_with_space_with_set_last_first_comma(self):
self.env["ir.config_parameter"].sudo().set_param(
"employee_names_order", "last_first_comma"
)
self.employee1_id.write({"name": " Carnaud-Eyck, Jean-Pierre"})
self.employee1_id.invalidate_recordset()
self.assertEqual(self.employee1_id.firstname, "Jean-Pierre")
self.assertEqual(self.employee1_id.lastname, "Carnaud-Eyck")

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">Add employee_names_order config parameter</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base_setup.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[@id='companies']" position='after'>
<h2>Employee Names Order</h2>
<div class="row mt16 o_settings_container" name="employee_names_order">
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<field name="employee_names_order" />
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_employee_form" model="ir.ui.view">
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="attributes">
<attribute name="readonly">1</attribute>
<attribute name="no_label">1</attribute>
<attribute name="required">0</attribute>
</xpath>
<xpath expr="//h1//field[@name='name']/.." position="after">
<group>
<field
name="lastname"
attrs="{'required': [('firstname', '=', False)]}"
/>
<field
name="firstname"
attrs="{'required': [('lastname', '=', False)]}"
/>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-hr-hr_employee_firstname"
version = "16.0.0"
description = "HR Employee First Name, Last Name - Adds First Name to Employee"
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_firstname"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]