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

[15.0][MIG] hr_employee_calendar_planning: Migration to 15.0 #1138

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
df07f6f
[ADD] hr_employee_calendar_planning: Employee Calendar Planning
pedrobaeza Mar 12, 2019
00ebf89
[MIG] hr_employee_calendar_planning
Mar 15, 2019
d8e009a
[12.0][MIG] hr_employee_calendar_planning
May 28, 2019
ed876d4
[12.0][IMP] hr_employee_calendar_planning
Jun 5, 2019
8aa69a7
[IMP] hr_employee_calendar_planning: black, isort, prettier
May 6, 2020
62c71b5
[13.0][MIG] hr_employee_calendar_planning
May 6, 2020
c8af418
[13.0][IMP] support for two_week calendar
May 7, 2020
023eff9
[FIX] hr_employee_calendar_planning: link leaves
chienandalu Nov 5, 2019
d45798f
[UPD] Eficent -> ForgeFlow
MiquelRForgeFlow Sep 30, 2020
81d0942
[14.0][MIG] hr_employee_calendar_planning
aphon61bank Nov 12, 2020
21f71d7
Added translation using Weblate (French)
Yvesldff May 14, 2021
b0e9831
Translated using Weblate (French)
Yvesldff May 14, 2021
7803180
[FIX] hr_employee_calendar_planning: Prevent disable resource.calenda…
victoralmau Jul 13, 2021
6ac6679
[FIX] hr_employee_calendar_planning: Add check_company to calendar_id…
victoralmau Jul 27, 2021
056f616
[FIX] hr_employee_calendar_planning: Force to auto generate calendar …
victoralmau Sep 8, 2021
127dd32
[FIX] hr_employee_calendar_planning: Regenerate automatic calendar 2 …
victoralmau Oct 15, 2021
b40123c
[FIX] hr_employee_calendar_planning: Regenerate the automatic calenda…
victoralmau Oct 18, 2021
c6ef731
Translated using Weblate (Catalan)
Noel000 Mar 21, 2022
b217ca5
[FIX] hr_employee_calendar_planning: Prevent inconsistent company + A…
victoralmau Apr 11, 2022
a50f42d
[UPD] Update hr_employee_calendar_planning.pot
Apr 25, 2022
c7ca0fb
[FIX] hr_employee_calendar_planning: Avoid error with parent
luistorresm Oct 26, 2021
674128a
Added translation using Weblate (German)
marylla May 11, 2022
b85b7ff
[IMP] hr_employee_calendar_planning: add global leaves and time zone …
jonasbuchholz Jul 6, 2022
ec34b20
Added translation using Weblate (Spanish (Argentina))
nimarosa Aug 4, 2022
ba13bf5
Translated using Weblate (Spanish (Argentina))
nimarosa Aug 4, 2022
2f22ed5
[IMP] hr_employee_calendar_planning: black, isort, prettier
victoralmau Aug 29, 2022
c62547b
[MIG] hr_employee_calendar_planning: Migration to 15.0
pegonzalezspesol Jul 7, 2022
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": "15.0.1.0.0",
"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