Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][MIG] hr_employee_calendar_planning #1242

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
5449d3a
[ADD] hr_employee_calendar_planning: Employee Calendar Planning
pedrobaeza Mar 12, 2019
851d0da
[MIG] hr_employee_calendar_planning
Mar 15, 2019
cb11210
[12.0][MIG] hr_employee_calendar_planning
May 28, 2019
79be662
[12.0][IMP] hr_employee_calendar_planning
Jun 5, 2019
378f57d
[IMP] hr_employee_calendar_planning: black, isort, prettier
May 6, 2020
3938973
[13.0][MIG] hr_employee_calendar_planning
May 6, 2020
23c6e8a
[13.0][IMP] support for two_week calendar
May 7, 2020
e1aa98d
[FIX] hr_employee_calendar_planning: link leaves
chienandalu Nov 5, 2019
1077358
[UPD] Eficent -> ForgeFlow
MiquelRForgeFlow Sep 30, 2020
ebef7ec
[14.0][MIG] hr_employee_calendar_planning
aphon61bank Nov 12, 2020
865e86a
Added translation using Weblate (French)
Yvesldff May 14, 2021
8e85336
Translated using Weblate (French)
Yvesldff May 14, 2021
1443e7d
[FIX] hr_employee_calendar_planning: Prevent disable resource.calenda…
victoralmau Jul 13, 2021
1d5e229
[FIX] hr_employee_calendar_planning: Add check_company to calendar_id…
victoralmau Jul 27, 2021
c126a04
[FIX] hr_employee_calendar_planning: Force to auto generate calendar …
victoralmau Sep 8, 2021
d50b1aa
[FIX] hr_employee_calendar_planning: Regenerate automatic calendar 2 …
victoralmau Oct 15, 2021
6a813a6
[FIX] hr_employee_calendar_planning: Regenerate the automatic calenda…
victoralmau Oct 18, 2021
208c2c4
Translated using Weblate (Catalan)
Noel000 Mar 21, 2022
aca0bde
[FIX] hr_employee_calendar_planning: Prevent inconsistent company + A…
victoralmau Apr 11, 2022
2a773ac
[UPD] Update hr_employee_calendar_planning.pot
Apr 25, 2022
32e3d0e
[FIX] hr_employee_calendar_planning: Avoid error with parent
luistorresm Oct 26, 2021
0d59abd
Added translation using Weblate (German)
marylla May 11, 2022
bbe2bb5
[IMP] hr_employee_calendar_planning: add global leaves and time zone …
jonasbuchholz Jul 6, 2022
0aec4ed
Added translation using Weblate (Spanish (Argentina))
nimarosa Aug 4, 2022
84dd008
Translated using Weblate (Spanish (Argentina))
nimarosa Aug 4, 2022
59d7ec6
[MIG] hr_employee_calendar_planning: Migration to 15.0
pegonzalezspesol Jul 7, 2022
4753df0
[UPD] Update hr_employee_calendar_planning.pot
Sep 1, 2022
697e914
[UPD] README.rst
OCA-git-bot Sep 1, 2022
e744ea4
[IMP] hr_employee_calendar_planning: Hide resource_calendar_id field …
victoralmau Oct 25, 2022
ff87278
hr_employee_calendar_planning 15.0.1.1.0
OCA-git-bot Oct 26, 2022
0c70745
[FIX] hr_employee_calendar_planning: prevent regenerate_calendar-writ…
jonasbuchholz Nov 30, 2022
47a4c56
hr_employee_calendar_planning 15.0.1.1.1
OCA-git-bot Nov 30, 2022
7e8dd09
[IMP] hr_employee_calendar_planning: Allow duplicate employee
victoralmau Feb 15, 2023
d807cb4
hr_employee_calendar_planning 15.0.1.1.2
OCA-git-bot Feb 17, 2023
8dd889e
[FIX] hr_employee_calendar_planning: no constraint on install mode
yajo Nov 29, 2022
df48879
hr_employee_calendar_planning 15.0.1.1.3
OCA-git-bot Apr 11, 2023
f68713c
[IMP] hr_employee_calendar_planning: set calendar_ids from Create emp…
victoralmau Apr 28, 2023
889b71b
hr_employee_calendar_planning 15.0.1.1.4
OCA-git-bot May 3, 2023
8b503fa
[IMP] hr_employee_calendar_planning: remove date_start from _sync_user
jonasbuchholz May 16, 2023
dae0ebc
hr_employee_calendar_planning 15.0.1.1.5
OCA-git-bot May 17, 2023
0eff048
Added translation using Weblate (Italian)
mymage May 17, 2023
273ee11
Translated using Weblate (Italian)
mymage May 18, 2023
154ea8c
Translated using Weblate (Italian)
francesco-ooops May 24, 2023
3891109
Translated using Weblate (Italian)
mymage May 30, 2023
f10e163
[FIX] hr_employee_calendar_planning: fill calendar if empty
etobella Jun 2, 2023
722a5e6
hr_employee_calendar_planning 15.0.1.1.6
OCA-git-bot Jun 2, 2023
75dda11
[IMP] hr_employee_calendar_planning: pre-commit stuff
Jun 5, 2023
7cb498f
[MIG] hr_employee_calendar_planning: Migration to 16.0
Jun 5, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 137 additions & 0 deletions hr_employee_calendar_planning/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
==========================
Employee Calendar Planning
==========================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |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/15.0/hr_employee_calendar_planning
:alt: OCA/hr
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/hr-15-0/hr-15-0-hr_employee_calendar_planning
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/116/15.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to manage employee working time with profiles by date
intervals.

The profiles are regular working time calendars, but they are treated as
master ones here, allowing you to compose complexes working times by dates.

Under the hook, a unique working time is created for each employee with the
proper composition for not affecting the rest of the functionality linked to
this model.

**Table of contents**

.. contents::
:local:

Installation
============

During the installation of the module, current working times are split by
start/end dates for having consistent data, and the potential new composed
calendar planning is saved instead on the employee.

Configuration
=============

#. Go to *Employees > Employees*.
#. Open or create a new one.
#. On the "Work Information" tab, fill the section "Working Hours" with:

* Starting date (optional).
* Ending date (optional).
* Working time to apply during that date interval.

Known issues / Roadmap
======================


* Add a wizard for generating next year calendar planning based on current one
in batch.
* Add constraint for avoiding planning lines overlapping.
* Avoid the regeneration of whole private calendars each time a change is
detected.

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 smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/hr/issues/new?body=module:%20hr_employee_calendar_planning%0Aversion:%2015.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
~~~~~~~

* Tecnativa

Contributors
~~~~~~~~~~~~

* `Tecnativa <https://www.tecnativa.com>`_:

* Pedro M. Baeza
* Víctor Martínez

* `Creu Blanca <https://www.creu-blanca.es/>`_:

* Jaime Arroyo

* `ForgeFlow <https://www.forgeflow.com/>`_:

* Jordi Ballester Alomar ([email protected])

* Nattapong W. <[email protected]>

* `Pesol <https://www.pesol.es>`__:

* Pedro Evaristo Gonzalez Sanchez <[email protected]>

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-victoralmau| image:: https://github.com/victoralmau.png?size=40px
:target: https://github.com/victoralmau
:alt: victoralmau
.. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
:target: https://github.com/pedrobaeza
:alt: pedrobaeza

Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-victoralmau| |maintainer-pedrobaeza|

This module is part of the `OCA/hr <https://github.com/OCA/hr/tree/15.0/hr_employee_calendar_planning>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
4 changes: 4 additions & 0 deletions hr_employee_calendar_planning/__init__.py
Original file line number Diff line number Diff line change
@@ -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
15 changes: 15 additions & 0 deletions hr_employee_calendar_planning/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Employee Calendar Planning",
"version": "16.0.1.1.6",
"category": "Human Resources",
"website": "https://github.com/OCA/hr",
"author": "Tecnativa,Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"depends": ["hr"],
"data": ["security/ir.model.access.csv", "views/hr_employee_views.xml"],
"post_init_hook": "post_init_hook",
"maintainers": ["victoralmau", "pedrobaeza"],
}
71 changes: 71 additions & 0 deletions hr_employee_calendar_planning/hooks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Copyright 2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from collections import defaultdict

from odoo import SUPERUSER_ID, api


def post_init_hook(cr, registry, employees=None):
"""Split current calendars by date ranges and assign new ones for
having proper initial data.
"""
env = api.Environment(cr, SUPERUSER_ID, {})
if not employees:
employees = env["hr.employee"].search([])
calendars = employees.mapped("resource_calendar_id")
calendar_obj = env["resource.calendar"]
line_obj = env["resource.calendar.attendance"]
groups = line_obj.read_group(
[("calendar_id", "in", calendars.ids)],
["calendar_id", "date_from", "date_to"],
["calendar_id", "date_from:day", "date_to:day"],
lazy=False,
)
calendar_mapping = defaultdict(list)
for group in groups:
calendar = calendar_obj.browse(group["calendar_id"][0])
lines = line_obj.search(group["__domain"])
if len(calendar.attendance_ids) == len(lines):
# Don't alter calendar, as it's the same
new_calendar = calendar
else:
name = calendar.name + " {}-{}".format(
lines[0].date_from,
lines[0].date_to,
)
attendances = []
for line in lines:
data = line.copy_data({"date_from": False, "date_to": False})[0]
data.pop("calendar_id")
attendances.append((0, 0, data))
new_calendar = calendar_obj.create(
{"name": name, "attendance_ids": attendances}
)
calendar_mapping[calendar].append(
(lines[0].date_from, lines[0].date_to, new_calendar),
)
for employee in employees.filtered("resource_calendar_id"):
calendar_lines = []
for data in calendar_mapping[employee.resource_calendar_id]:
calendar_lines.append(
(
0,
0,
{
"date_start": data[0],
"date_end": data[1],
"calendar_id": data[2].id,
},
)
)
# Extract employee's existing leaves so they are passed to the new
# automatic calendar.
leaves = employee.resource_calendar_id.leave_ids.filtered(
lambda x: x.resource_id == employee.resource_id
)
employee.calendar_ids = calendar_lines
employee.resource_calendar_id.active = False
# Now the automatic calendar has been created, so we link the
# leaves to that one so they count correctly.
leaves.write({"calendar_id": employee.resource_calendar_id.id})
147 changes: 147 additions & 0 deletions hr_employee_calendar_planning/i18n/ca.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * hr_employee_calendar_planning
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-03-21 14:17+0000\n"
"Last-Translator: Noel estudillo <[email protected]>\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_calendar_planning
#: code:addons/hr_employee_calendar_planning/models/resource_calendar.py:0
#, python-format
msgid "%s is used in %s employee(s) related to another company."
msgstr "%s s'utilitza en %s empleats relacionats amb una altra empresa."

#. module: hr_employee_calendar_planning
#: code:addons/hr_employee_calendar_planning/models/resource_calendar.py:0
#, python-format
msgid "%s is used in %s employee(s). You should change them first."
msgstr "%s s'utilitza en %s empleat(s). Primer els hauries de canviar."

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_resource_calendar__active
msgid "Active"
msgstr "Actiu"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_resource_calendar__auto_generate
msgid "Auto Generate"
msgstr "Generació automàtica"

#. module: hr_employee_calendar_planning
#: code:addons/hr_employee_calendar_planning/models/hr_employee.py:0
#, python-format
msgid "Auto generated calendar for employee"
msgstr "Horari autogenerat per a l'empleat"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee__calendar_ids
msgid "Calendar planning"
msgstr "Pla d'horari"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__company_id
msgid "Company"
msgstr "Companyia"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__create_uid
msgid "Created by"
msgstr "Creat per"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__create_date
msgid "Created on"
msgstr "Creat el"

#. module: hr_employee_calendar_planning
#: model:ir.model.constraint,message:hr_employee_calendar_planning.constraint_hr_employee_calendar_date_consistency
msgid "Date end should be higher than date start"
msgstr "La data de fi ha de ser més gran que la d'inici"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee__display_name
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__display_name
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_resource_calendar__display_name
msgid "Display Name"
msgstr "Nom a mostrar"

#. module: hr_employee_calendar_planning
#: model:ir.model,name:hr_employee_calendar_planning.model_hr_employee
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__employee_id
msgid "Employee"
msgstr "Empleat"

#. module: hr_employee_calendar_planning
#: model:ir.model,name:hr_employee_calendar_planning.model_hr_employee_calendar
msgid "Employee Calendar"
msgstr "Horari de l'empleat"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__date_end
msgid "End Date"
msgstr "Data de finalització"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee__id
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__id
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_resource_calendar__id
msgid "ID"
msgstr "ID"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,help:hr_employee_calendar_planning.field_resource_calendar__active
msgid ""
"If the active field is set to false, it will allow you to hide the Working "
"Time without removing it."
msgstr ""
"Si el camp actiu està definit com a fals, us permetrà ocultar el temps de "
"treball sense eliminar-lo."

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee____last_update
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar____last_update
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_resource_calendar____last_update
msgid "Last Modified on"
msgstr "Darrera modificació el"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__write_uid
msgid "Last Updated by"
msgstr "Darrera modificació per"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__write_date
msgid "Last Updated on"
msgstr "Darrera modificació el"

#. module: hr_employee_calendar_planning
#: model:ir.model,name:hr_employee_calendar_planning.model_resource_calendar
msgid "Resource Working Time"
msgstr "Temps de treball"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__date_start
msgid "Start Date"
msgstr "Data d'Inici"

#. module: hr_employee_calendar_planning
#: model:ir.model.fields,field_description:hr_employee_calendar_planning.field_hr_employee_calendar__calendar_id
msgid "Working Time"
msgstr "Temps de treball"

#. module: hr_employee_calendar_planning
#: code:addons/hr_employee_calendar_planning/models/hr_employee.py:0
#, python-format
msgid "You can not create employees without any calendar."
msgstr ""
Loading