diff --git a/README.rst b/README.rst
index 8f9d24e039b651ea7561731c66c9955726492119..ad95403fdd63d47e690c16e6f27146c86a4ff9e6 100644
--- a/README.rst
+++ b/README.rst
@@ -14,7 +14,6 @@ Il ajoute les éléments suivants :
 * menu pour configurer les projets (cf Codes Activité UR) et les vues associées
 * table de configuration des activités CG
 * table de configuration des dispositifs
-* 
 
 
 Credits
diff --git a/__init__.py b/__init__.py
index 31660d6a9650857f10c9dbdcd139145e0897ef6e..d997a09cbd2254168ef48fc13bf9789e2d3242ac 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,3 +1,4 @@
-# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 from . import models
diff --git a/__manifest__.py b/__manifest__.py
index 6f5230c3378b8ad780052e18b3f8ede080e5c8bf..73401132d855cb97fc27cb6ca5a87071277c345f 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -1,8 +1,9 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 {
     "name": "CG SCOP - Feuille de temps",
     "summary": "CG SCOP - Feuille de temps",
-    "version": "12.0.1.2.0",
-    "development_status": "Production/Stable",
+    "version": "14.0.1.0.0",
     "author": "Le Filament",
     "license": "AGPL-3",
     "application": False,
@@ -11,7 +12,7 @@
         "analytic",
         "project",
         "cgscop_partner",
-        'cgscop_fullcalendar',
+        "cgscop_fullcalendar",
     ],
     "data": [
         "security/ir.model.access.csv",
@@ -29,9 +30,9 @@
         "report/report_hr_timesheet.xml",
         "datas/cgscop_timesheet_code_data.xml",
     ],
-    'qweb': [
-        'static/src/xml/*.xml',
+    "qweb": [
+        "static/src/xml/*.xml",
     ],
     "installable": True,
-    'auto_install': False,
+    "auto_install": False,
 }
diff --git a/i18n/fr.po b/i18n/fr.po
deleted file mode 100644
index 2eb3d89270350204b1cb1a06f84a1fd452a0832e..0000000000000000000000000000000000000000
--- a/i18n/fr.po
+++ /dev/null
@@ -1,712 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-#	* cgscop_timesheet
-#	* hr_timesheet
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-18 18:07+0000\n"
-"PO-Revision-Date: 2020-02-18 18:07+0000\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: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "(Un)archiving a project automatically (un)archives its tasks. Do you want to proceed?"
-msgstr "(Dés)archiver un projet (dés)archivera automatiquement ses tâches. Voulez-vous continuer? "
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "- Brouillon"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<span>Code activité UR</span>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<span>Contact</span>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<span>Date</span>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<span>Dispositif</span>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<span>Durée</span>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<strong>Employé</strong>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<strong>Soumis le</strong>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<strong>Total</strong>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "<strong>Validé le</strong>"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.cgscop_hr_timesheet_line_search
-msgid "A soumettre"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_needaction
-msgid "Action Needed"
-msgstr "Nécessite une action"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__activity_ids
-msgid "Activities"
-msgstr "Activités"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__activity_state
-msgid "Activity State"
-msgstr "Status de l'Activité"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.actions.act_window,help:cgscop_timesheet.action_cgscop_timesheet_code_tree
-msgid "Affiche et gère les Codes activité Nationaux"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model,name:cgscop_timesheet.model_account_analytic_line
-msgid "Analytic Line"
-msgstr "Ligne analytique"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_filter
-msgid "Archived"
-msgstr "Archivé"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_attachment_count
-msgid "Attachment Count"
-msgstr "Nombre de pièces jointes"
-
-#. module: cgscop_timesheet
-#: selection:account.analytic.line,state:0
-#: selection:cgscop.timesheet.sheet,state:0
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Brouillon"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__can_edit
-msgid "Can Reset"
-msgstr "Peut éditer"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "Cette feuille de temps a été éditée en brouillon."
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_account_analytic_line__cgscop_timesheet_code_id
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_project_project__cgscop_timesheet_code_id
-msgid "Code Activité National"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_kanban
-msgid "Code activité CG"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model,name:cgscop_timesheet.model_cgscop_timesheet_code
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_filter
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Code activité National"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.cgscop_hr_timesheet_line_search
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_hr_timesheet_line_form
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_hr_timesheet_line_pivot
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_hr_timesheet_line_tree
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_filter
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_kanban
-msgid "Code activité UR"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.actions.act_window,name:cgscop_timesheet.action_cgscop_timesheet_code_tree
-#: model:ir.ui.menu,name:cgscop_timesheet.menu_cgscop_timesheet_code
-msgid "Codes Activité National"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.ui.menu,name:cgscop_timesheet.menu_action_project_lines_tree
-msgid "Codes Activité UR"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.actions.act_window,name:cgscop_timesheet.act_cgscop_project_timesheet
-msgid "Codes activités UR"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__company_id
-msgid "Company"
-msgstr "Société"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Configuration"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.cgscop_hr_timesheet_line_search
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_hr_timesheet_line_form
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_hr_timesheet_line_pivot
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_hr_timesheet_line_tree
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_kanban
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_tree
-msgid "Contact"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_filter
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Contact par défaut"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Contact par défaut auquel est rattaché cette activité. Ce contact sera sélectionné automatiquement dans les feuilles de temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code__create_uid
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__create_uid
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__create_uid
-msgid "Created by"
-msgstr "Créé par"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code__create_date
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__create_date
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__create_date
-msgid "Created on"
-msgstr "Créé le"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__validation_date
-msgid "Date de validation"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_account_analytic_line__name
-msgid "Description"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code__display_name
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__display_name
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__display_name
-msgid "Display Name"
-msgstr "Nom affiché"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_account_analytic_line__ur_financial_system_id
-msgid "Dispositif Financier"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model,name:cgscop_timesheet.model_ur_financial_system
-msgid "Dispositif financier UR"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.actions.act_window,name:cgscop_timesheet.action_ur_financial_system
-#: model:ir.ui.menu,name:cgscop_timesheet.menu_ur_financial_system
-msgid "Dispositifs financiers"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__employee_id
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Employé"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Expenses of Your Team Member"
-msgstr "Dépense des membres de votre équipe"
-
-#. module: cgscop_timesheet
-#: model:ir.actions.report,name:cgscop_timesheet.cgscop_timesheet_sheet_report
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.report_timesheet_document
-msgid "Feuille de Temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_account_analytic_line__sheet_id
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Feuille de temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.ui.menu,name:cgscop_timesheet.timesheet_sheet_menu
-msgid "Feuilles de temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.actions.act_window,name:cgscop_timesheet.action_cgscop_timesheet_sheet_to_approve
-msgid "Feuilles de temps à valider"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Follow this project to automatically track the events associated to tasks and issues of this project."
-msgstr "Permet de suivre automatiquement les événements associés aux tâches et aux problèmes de ce projet."
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_follower_ids
-msgid "Followers"
-msgstr "Abonnés"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_channel_ids
-msgid "Followers (Channels)"
-msgstr "Abonnés (Canaux)"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_partner_ids
-msgid "Followers (Partners)"
-msgstr "Abonnés (Partenaires)"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_filter
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Group By"
-msgstr "Regrouper par"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_project_project__privacy_visibility
-msgid "Holds visibility of the tasks or issues that belong to the current project:\n"
-"- On invitation only: Employees may only see the followed project, tasks or issues\n"
-"- Visible by all employees: Employees may see all project, tasks or issues\n"
-"- Visible by following customers: employees see everything;\n"
-"   if website is activated, portal users may see project, tasks or issues followed by\n"
-"   them or by someone of their company\n"
-""
-msgstr "Détermine la visibilité des tâches ou anomalies qui dépendent du projet courant.\n"
-"- Sur invitation uniquement : les employés ne voient que les projets, tâches et anomalies qu'ils suivent ;\n"
-"- Visible par tous les salariés : les employés peuvent voir tous les projets, tâches et anomalies ;\n"
-"- Visible par les clients suivants : les employés voient tout ; si le site web est activé, les utilisateur du portail peuvent voir les projets, tâches et anomalies qu'eux ou un utilisateur appartenant à leur société, suivent.\n"
-""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code__id
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__id
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__id
-msgid "ID"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__message_unread
-msgid "If checked new messages require your attention."
-msgstr "Si coché, de nouveaux messages demandent votre attention."
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__message_needaction
-msgid "If checked, new messages require your attention."
-msgstr "Si coché, de nouveaux messages demandent votre attention."
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__message_has_error
-msgid "If checked, some messages have a delivery error."
-msgstr "Si actif, certains messages ont une erreur de livraison."
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_form
-msgid "Imprimer"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.actions.server,name:cgscop_timesheet.hr_timesheet_submit_action_server
-msgid "Insérer dans une feuille de temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_is_follower
-msgid "Is Follower"
-msgstr "Est un abonné"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code____last_update
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet____last_update
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system____last_update
-msgid "Last Modified on"
-msgstr "Dernière modification le"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code__write_uid
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__write_uid
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__write_uid
-msgid "Last Updated by"
-msgstr "Dernière mise à jour par"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code__write_date
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__write_date
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__write_date
-msgid "Last Updated on"
-msgstr "Dernière mise à jour le"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__timesheet_line_ids
-msgid "Lignes de temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_main_attachment_id
-msgid "Main Attachment"
-msgstr "Pièce jointe principale"
-
-#. module: cgscop_timesheet
-#: model:ir.actions.act_window,name:cgscop_timesheet.action_cgscop_timesheet_sheet_my_all
-#: model:ir.ui.menu,name:cgscop_timesheet.menu_hr_timesheet_my_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Mes feuilles de temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_has_error
-msgid "Message Delivery error"
-msgstr "Erreur d'envoi du message"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_ids
-msgid "Messages"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Mon équipe"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__activity_date_deadline
-msgid "Next Activity Deadline"
-msgstr "Date limite de l'Activité à Venir"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__activity_summary
-msgid "Next Activity Summary"
-msgstr "Résumé d'activité suivant"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__activity_type_id
-msgid "Next Activity Type"
-msgstr "Type d'Activités à Venir"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_code__name
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__name
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__name
-msgid "Nom"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_needaction_counter
-msgid "Number of Actions"
-msgstr "Nombre d'actions"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_has_error_counter
-msgid "Number of error"
-msgstr "Nombre d'erreurs"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__message_needaction_counter
-msgid "Number of messages which requires an action"
-msgstr "Nombre de messages exigeant une action"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__message_has_error_counter
-msgid "Number of messages with delivery error"
-msgstr "Nombre de messages avec des erreurs d'envoi"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__message_unread_counter
-msgid "Number of unread messages"
-msgstr "Nombre de messages non lus"
-
-#. module: cgscop_timesheet
-#: selection:project.project,privacy_visibility:0
-msgid "On invitation only"
-msgstr "Sur invitation uniquement"
-
-#. module: cgscop_timesheet
-#: selection:cgscop.timesheet.sheet,activity_state:0
-msgid "Overdue"
-msgstr "Passé"
-
-#. module: cgscop_timesheet
-#: model:ir.actions.act_window,name:cgscop_timesheet.timesheet_action_report_by_contact
-#: model:ir.ui.menu,name:cgscop_timesheet.timesheet_menu_report_timesheet_by_contact
-msgid "Par Contact"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: selection:cgscop.timesheet.sheet,activity_state:0
-msgid "Planned"
-msgstr "Planifié"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_project_project__privacy_visibility
-msgid "Privacy"
-msgstr "Confidentialité"
-
-#. module: cgscop_timesheet
-#: model:ir.model,name:cgscop_timesheet.model_project_project
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Project"
-msgstr "Code activité UR"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_kanban
-msgid "Project Manager"
-msgstr "Responsable"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_tree
-msgid "Projects"
-msgstr "Projets"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_hr_timesheet_line_pivot
-msgid "Rapport"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_form
-msgid "Remettre en brouillon"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__activity_user_id
-msgid "Responsible User"
-msgstr "Responsable"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_filter
-msgid "Search Project"
-msgstr "Chercher un projet"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__company_id
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Société"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_form
-msgid "Soumettre"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: selection:account.analytic.line,state:0
-#: selection:cgscop.timesheet.sheet,state:0
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.cgscop_hr_timesheet_line_search
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Soumis"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__submit_date
-msgid "Soumis le"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__activity_state
-msgid "Status based on activities\n"
-"Overdue: Due date is already passed\n"
-"Today: Activity date is today\n"
-"Planned: Future activities."
-msgstr "Statut basé sur les activités\n"
-"En retard : la date d'échéance est déjà dépassée\n"
-"Aujourd'hui : la date d'activité est aujourd'hui\n"
-"Planifiée : activités futures"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_account_analytic_line__state
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__state
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Statut"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model,name:cgscop_timesheet.model_cgscop_timesheet_sheet
-#: model:ir.model,name:cgscop_timesheet.model_hr_timesheet_sheet
-msgid "Timesheet Report"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_tree
-msgid "Timesheet Reports"
-msgstr "Rapport de lignes de temps"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Timesheets"
-msgstr "Lignes de temps"
-
-#. module: cgscop_timesheet
-#: selection:cgscop.timesheet.sheet,activity_state:0
-msgid "Today"
-msgstr "Ajourd'hui"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__total_hour
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_tree
-msgid "Total"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.actions.act_window,name:cgscop_timesheet.action_cgscop_timesheet_sheet_all
-#: model:ir.ui.menu,name:cgscop_timesheet.menu_hr_timesheet_all
-msgid "Toutes les feuilles de temps"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_account_analytic_line__ur_id
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__ur_id
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_project_project__ur_id
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_ur_financial_system__ur_id
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_project_timesheet_form
-msgid "Union Régionale"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_unread
-msgid "Unread Messages"
-msgstr "Messages non lus"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__message_unread_counter
-msgid "Unread Messages Counter"
-msgstr "Compteur de messages non lus"
-
-#. module: cgscop_timesheet
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_form
-msgid "Valider"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: selection:account.analytic.line,state:0
-#: selection:cgscop.timesheet.sheet,state:0
-#: model_terms:ir.ui.view,arch_db:cgscop_timesheet.view_cgscop_timesheet_sheet_filter
-msgid "Validé"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: selection:project.project,privacy_visibility:0
-msgid "Visible by all employees"
-msgstr "Visible par tous les employés"
-
-#. module: cgscop_timesheet
-#: selection:project.project,privacy_visibility:0
-msgid "Visible by following customers"
-msgstr "Visible par les clients suiveurs"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,field_description:cgscop_timesheet.field_cgscop_timesheet_sheet__website_message_ids
-msgid "Website Messages"
-msgstr "Messages du site web"
-
-#. module: cgscop_timesheet
-#: model:ir.model.fields,help:cgscop_timesheet.field_cgscop_timesheet_sheet__website_message_ids
-msgid "Website communication history"
-msgstr "Historique de communication du site web"
-
-#. module: cgscop_timesheet
-#: model:ir.model,name:cgscop_timesheet.model_cgscop_timesheet_print
-msgid "Wizard Timesheet Impression"
-msgstr ""
-
-#. module: cgscop_timesheet
-#: model:ir.ui.menu,name:cgscop_timesheet.menu_hr_timesheet_to_approve
-msgid "À valider"
-msgstr ""
-
-#. module: hr_timesheet
-#: model:ir.actions.act_window,name:hr_timesheet.timesheet_action_all
-#: model:ir.ui.menu,name:hr_timesheet.timesheet_menu_activity_all
-msgid "All Timesheets"
-msgstr "Toutes les lignes de temps"
-
-#. module: hr_timesheet
-#: model:ir.actions.act_window,name:hr_timesheet.act_hr_timesheet_line
-#: model:ir.ui.menu,name:hr_timesheet.timesheet_menu_activity_mine
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.hr_timesheet_line_search
-msgid "My Timesheets"
-msgstr "Mes lignes de temps"
-
-#. module: hr_timesheet
-#: model:ir.actions.act_window,name:hr_timesheet.project_task_action_view_timesheet
-#: model:ir.actions.report,name:hr_timesheet.timesheet_report
-msgid "Timesheet Entries"
-msgstr "Lignes de temps"
-
-#. module: hr_timesheet
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.hr_timesheet_line_search
-msgid "Timesheet by Date"
-msgstr "Lignes de temps par date"
-
-#. module: hr_timesheet
-#: model:ir.actions.act_window,name:hr_timesheet.timesheet_action_from_employee
-#: model:ir.model.fields,field_description:hr_timesheet.field_project_task__timesheet_ids
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.hr_department_view_kanban
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.hr_employee_view_form_inherit_timesheet
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.portal_my_task
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.project_invoice_form
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.res_config_settings_view_form
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.view_task_form2_inherited
-msgid "Timesheets"
-msgstr "Lignes de temps"
-
-#. module: hr_timesheet
-#: model:ir.actions.act_window,name:hr_timesheet.timesheet_action_report_by_project
-#: model:ir.ui.menu,name:hr_timesheet.timesheet_menu_report_timesheet_by_project
-msgid "By Project"
-msgstr "Par Code activité UR"
-
-#. module: hr_timesheet
-#: model:ir.ui.menu,name:hr_timesheet.menu_hr_time_tracking
-#: model:ir.ui.menu,name:hr_timesheet.menu_timesheets_reports_timesheet
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.hr_timesheet_line_search
-#: model_terms:ir.ui.view,arch_db:hr_timesheet.view_hr_timesheet_line_pivot
-msgid "Timesheet"
-msgstr "Lignes de Temps"
diff --git a/migration/14.0.1.0.0/post-migration.py b/migration/14.0.1.0.0/post-migration.py
new file mode 100644
index 0000000000000000000000000000000000000000..0191717b17014a347c4b413a518bba598d75cafa
--- /dev/null
+++ b/migration/14.0.1.0.0/post-migration.py
@@ -0,0 +1,46 @@
+# © 2022 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from openupgradelib import openupgrade  # pylint: disable=W7936
+
+
+def get_years():
+    year_list = []
+    for i in range(2019, 2030):
+        year_list.append((str(i), str(i)))
+    return year_list
+
+
+def ur_month_timesheet_map_values(env):
+    openupgrade.map_values(
+        env.cr,
+        openupgrade.get_legacy_name("month"),
+        "month",
+        [
+            ("1", "Janv"),
+            ("2", "Fév"),
+            ("3", "Mars"),
+            ("4", "Avr"),
+            ("5", "Mai"),
+            ("6", "Juin"),
+            ("7", "Juil"),
+            ("8", "Août"),
+            ("9", "Sept"),
+            ("10", "Oct"),
+            ("11", "Nov"),
+            ("12", "Dec"),
+        ],
+        table="ur_month_timesheet",
+    )
+    openupgrade.map_values(
+        env.cr,
+        openupgrade.get_legacy_name("year"),
+        "year",
+        get_years(),
+        table="ur_month_timesheet",
+    )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+    ur_month_timesheet_map_values(env)
diff --git a/migration/14.0.1.0.0/pre-migration.py b/migration/14.0.1.0.0/pre-migration.py
new file mode 100644
index 0000000000000000000000000000000000000000..754ee3a531f0239fee63890d34828711358dd83f
--- /dev/null
+++ b/migration/14.0.1.0.0/pre-migration.py
@@ -0,0 +1,13 @@
+# © 2022 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from openupgradelib import openupgrade
+
+column_renames = {
+    "ur_month_timesheet": [("month", None), ("year", None)],
+}
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+    openupgrade.rename_columns(env.cr, column_renames)
diff --git a/models/__init__.py b/models/__init__.py
index 92cffcb6e6c253460b413c48e7f75802c9ca0e6d..bbbee8bfda2c2be7af093135c0835b421804d753 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -10,4 +10,3 @@ from . import res_partner
 from . import ur_financial_system
 from . import ur_month_timesheet
 from . import ur_regional_convention
-
diff --git a/models/cgscop_timesheet_code.py b/models/cgscop_timesheet_code.py
index 5a8a5185453567f4cf97452f5ae1c2a2bcfff66f..3d0437cb5b17cccaea6c1a9c21a37ad139177864 100644
--- a/models/cgscop_timesheet_code.py
+++ b/models/cgscop_timesheet_code.py
@@ -7,13 +7,16 @@ from odoo import models, fields
 class ScopTimesheetCode(models.Model):
     _name = "cgscop.timesheet.code"
     _description = "Code activité National"
-    _order = 'name'
+    _order = "name"
 
-    name = fields.Char('Nom')
+    name = fields.Char("Nom")
     domain = fields.Selection(
-        [('A', "Accompagnement"),
-         ('D', "Développement"),
-         ('F', "Formation"),
-         ('R', "Révision"),
-         ('Z', "Autre")],
-        string='Domaine')
+        [
+            ("A", "Accompagnement"),
+            ("D", "Développement"),
+            ("F", "Formation"),
+            ("R", "Révision"),
+            ("Z", "Autre"),
+        ],
+        string="Domaine",
+    )
diff --git a/models/cgscop_timesheet_sheet.py b/models/cgscop_timesheet_sheet.py
index 6844736bafa698448744e695d5e3d2defb4683ab..1415e7b043c5e6eeb91d410d94e91f7b6d3305fc 100644
--- a/models/cgscop_timesheet_sheet.py
+++ b/models/cgscop_timesheet_sheet.py
@@ -7,75 +7,77 @@ from odoo.exceptions import UserError, ValidationError
 
 class ScopHrTimesheetSheet(models.Model):
     _name = "cgscop.timesheet.sheet"
-    _inherit = ['mail.thread', 'mail.activity.mixin']
+    _inherit = ["mail.thread", "mail.activity.mixin"]
     _description = "Timesheet Report"
     _order = "create_date desc, validation_date desc, id desc"
 
     def _default_ur(self):
-        return self.env['res.company']._ur_default_get()
+        return self.env["res.company"]._ur_default_get()
 
-    name = fields.Char('Nom', required=True)
+    name = fields.Char("Nom", required=True)
     timesheet_line_ids = fields.One2many(
-        comodel_name='account.analytic.line',
-        inverse_name='sheet_id',
-        string='Lignes de temps',
-        states={'valid': [('readonly', True)]},
-        copy=False)
-    state = fields.Selection([
-        ('draft', 'Brouillon'),
-        ('submit', 'Soumis'),
-        ('valid', 'Validé')],
-        string='Statut',
+        comodel_name="account.analytic.line",
+        inverse_name="sheet_id",
+        string="Lignes de temps",
+        states={"valid": [("readonly", True)]},
+        copy=False,
+    )
+    state = fields.Selection(
+        [("draft", "Brouillon"), ("submit", "Soumis"), ("valid", "Validé")],
+        string="Statut",
         index=True,
-        track_visibility='onchange',
+        tracking=True,
         copy=False,
-        default='draft',
-        required=True)
+        default="draft",
+        required=True,
+    )
     employee_id = fields.Many2one(
-        comodel_name='hr.employee',
+        comodel_name="hr.employee",
         string="Employé",
         required=True,
         readonly=True,
-        states={'draft': [('readonly', False)]},
-        default=lambda self: self.env['hr.employee'].search(
-            [('user_id', '=', self.env.uid)], limit=1))
+        states={"draft": [("readonly", False)]},
+        default=lambda self: self.env["hr.employee"].search(
+            [("user_id", "=", self.env.uid)], limit=1
+        ),
+    )
     total_hour = fields.Float(
-        string='Total',
-        compute='_compute_hour',
-        store=True)
+        string="Total", compute="_compute_hour", store=True
+    )
     company_id = fields.Many2one(
-        comodel_name='res.company',
-        string='Company',
+        comodel_name="res.company",
+        string="Company",
         readonly=True,
-        states={'draft': [('readonly', False)]},
-        default=lambda self: self.env.user.company_id)
+        states={"draft": [("readonly", False)]},
+        default=lambda self: self.env.user.company_id,
+    )
     validation_date = fields.Date("Date de validation")
     submit_date = fields.Date("Soumis le")
     ur_id = fields.Many2one(
-        'union.regionale',
-        string='Union Régionale',
+        "union.regionale",
+        string="Union Régionale",
         index=True,
-        on_delete='restrict',
-        default=_default_ur)
-    can_edit = fields.Boolean('Can Reset', compute='_compute_can_reset')
+        ondelete="restrict",
+        default=_default_ur,
+    )
+    can_edit = fields.Boolean("Can Reset", compute="_compute_can_reset")
 
     # ------------------------------------------------------
     # Compute Functions
     # ------------------------------------------------------
-    @api.depends(
-        'timesheet_line_ids',
-        'timesheet_line_ids.unit_amount')
+    @api.depends("timesheet_line_ids", "timesheet_line_ids.unit_amount")
     def _compute_hour(self):
         for sheet in self:
             sheet.total_hour = sum(
-                sheet.timesheet_line_ids.mapped('unit_amount'))
+                sheet.timesheet_line_ids.mapped("unit_amount")
+            )
 
-    @api.multi
     def _compute_can_reset(self):
         is_timesheet_user = self.user_has_groups(
-            'hr_timesheet.group_timesheet_manager')
+            "hr_timesheet.group_timesheet_manager"
+        )
         for sheet in self:
-            if sheet.state == 'draft' or is_timesheet_user:
+            if sheet.state == "draft" or is_timesheet_user:
                 sheet.can_edit = True
             else:
                 sheet.can_edit = False
@@ -83,48 +85,45 @@ class ScopHrTimesheetSheet(models.Model):
     # ------------------------------------------------------
     # Constain Functions
     # ------------------------------------------------------
-    @api.constrains('timesheet_line_ids', 'employee_id')
+    @api.constrains("timesheet_line_ids", "employee_id")
     def _check_employee(self):
         for sheet in self:
-            employee_ids = sheet.timesheet_line_ids.mapped('employee_id')
-            if len(employee_ids) > 1 or (len(employee_ids) == 1 and employee_ids != sheet.employee_id):
+            employee_ids = sheet.timesheet_line_ids.mapped("employee_id")
+            if len(employee_ids) > 1 or (
+                len(employee_ids) == 1 and employee_ids != sheet.employee_id
+            ):
                 raise ValidationError(
-                    'Vous ne pouvez pas ajouter les lignes'
-                    ' de temps de plusieurs employés.')
+                    "Vous ne pouvez pas ajouter les lignes"
+                    " de temps de plusieurs employés."
+                )
 
     # ------------------------------------------------------
     # Override ORM
     # ------------------------------------------------------
-    @api.multi
     def unlink(self):
         for timesheet in self:
-            if timesheet.state in ['submit', 'valid']:
-                raise UserError('Vous ne pouvez pas supprimer une '
-                                'feuille de temps soumise ou validée')
+            if timesheet.state in ["submit", "valid"]:
+                raise UserError(
+                    "Vous ne pouvez pas supprimer une "
+                    "feuille de temps soumise ou validée"
+                )
         super(ScopHrTimesheetSheet, self).unlink()
 
     # ------------------------------------------------------
     # Action button
     # ------------------------------------------------------
-    @api.multi
     def action_submit_timesheet(self):
-        self.write({
-            'state': 'submit',
-            'submit_date': fields.Date.today()})
+        self.write({"state": "submit", "submit_date": fields.Date.today()})
 
-    @api.multi
     def approve_timesheet_sheets(self):
-        self.write({
-            'state': 'valid',
-            'validation_date': fields.Date.today()})
+        self.write({"state": "valid", "validation_date": fields.Date.today()})
 
-    @api.multi
     def reset_timesheet_sheets(self):
-        self.write({
-            'state': 'draft',
-            'submit_date': False,
-            'validation_date': False})
+        self.write(
+            {"state": "draft", "submit_date": False, "validation_date": False}
+        )
 
     def print_timesheet(self):
         return self.env.ref(
-            'cgscop_timesheet.cgscop_timesheet_sheet_report').report_action(self)
+            "cgscop_timesheet.cgscop_timesheet_sheet_report"
+        ).report_action(self)
diff --git a/models/hr_timesheet.py b/models/hr_timesheet.py
index c41b24719abe5704f7b2fa608005e4d15b97ae5e..88aa83facb71b5e10c30b172f2d4775cf636d387 100644
--- a/models/hr_timesheet.py
+++ b/models/hr_timesheet.py
@@ -11,83 +11,87 @@ class ScopHrTimesheet(models.Model):
     _inherit = "account.analytic.line"
 
     def _default_ur(self):
-        return self.env['res.company']._ur_default_get()
+        return self.env["res.company"]._ur_default_get()
 
     # Inherited fields
     name = fields.Char(required=False)
     partner_id = fields.Many2one(required=True)
-    
+
     # New fields
     cgscop_timesheet_code_id = fields.Many2one(
-        related='project_id.cgscop_timesheet_code_id',
-        string='Code Activité National',
-        store=True)
+        related="project_id.cgscop_timesheet_code_id",
+        string="Code Activité National",
+        store=True,
+    )
     ur_financial_system_id = fields.Many2one(
-        comodel_name='ur.financial.system',
-        string='Dispositif Financier')
+        comodel_name="ur.financial.system", string="Dispositif Financier"
+    )
     ur_regional_convention_id = fields.Many2one(
-        comodel_name='ur.regional.convention',
-        string='Convention Régionale')
+        comodel_name="ur.regional.convention", string="Convention Régionale"
+    )
     ur_id = fields.Many2one(
-        'union.regionale',
-        string='Union Régionale',
+        "union.regionale",
+        string="Union Régionale",
         index=True,
-        ondelete='restrict',
-        default=_default_ur)
+        ondelete="restrict",
+        default=_default_ur,
+    )
     sheet_id = fields.Many2one(
-        comodel_name='cgscop.timesheet.sheet',
+        comodel_name="cgscop.timesheet.sheet",
         string="Feuille de temps",
         readonly=True,
-        copy=False)
-    state = fields.Selection([
-        ('to_report', 'A rapporter'),
-        ('draft', 'Brouillon'),
-        ('submit', 'Soumis'),
-        ('valid', 'Validé')],
-        compute='_compute_state',
-        string='Statut',
+        copy=False,
+    )
+    state = fields.Selection(
+        [
+            ("to_report", "A rapporter"),
+            ("draft", "Brouillon"),
+            ("submit", "Soumis"),
+            ("valid", "Validé"),
+        ],
+        compute="_compute_state",
+        string="Statut",
         copy=False,
         index=True,
         readonly=True,
-        store=True,)
+        store=True,
+    )
     ur_financial_system_nb = fields.Integer(
-        string="Nb Dispositifs Financiers",
-        compute="_compute_ur_system_nb")
+        string="Nb Dispositifs Financiers", compute="_compute_ur_system_nb"
+    )
     ur_regional_convention_nb = fields.Integer(
-        string="Nb conventions régionales",
-        compute="_compute_ur_system_nb")
+        string="Nb conventions régionales", compute="_compute_ur_system_nb"
+    )
     is_present = fields.Boolean("Présentiel")
-    justificatifs = fields.Char(
-        string="Justificatifs",
-        required=False)
+    justificatifs = fields.Char(string="Justificatifs", required=False)
 
     calendar_l1 = fields.Char(
-        string='Ligne 1 calendrier',
-        compute='_compute_calendar_l1',
-        store=False)
+        string="Ligne 1 calendrier",
+        compute="_compute_calendar_l1",
+    )
     calendar_l2 = fields.Char(
-        string='Ligne 2 calendrier',
-        compute='_compute_calendar_l2',
-        store=False)
+        string="Ligne 2 calendrier",
+        compute="_compute_calendar_l2",
+    )
 
     # ------------------------------------------------------
     # Compute Functions
     # ------------------------------------------------------
-    @api.depends('ur_id')
+    @api.depends("ur_id")
     def _compute_ur_system_nb(self):
         for timesheet in self:
             # Calcul nombre de dispositifs financiers
-            financial_system = timesheet.env['ur.financial.system'].search([
-                ('ur_id', '=', timesheet.ur_id.id)])
-            timesheet.ur_financial_system_nb = len(
-                financial_system)
+            financial_system = timesheet.env["ur.financial.system"].search(
+                [("ur_id", "=", timesheet.ur_id.id)]
+            )
+            timesheet.ur_financial_system_nb = len(financial_system)
             # Calcul nombre de conventions
-            regional_convention = timesheet.env['ur.regional.convention'].search([
-                ('ur_id', '=', timesheet.ur_id.id)])
-            timesheet.ur_regional_convention_nb = len(
-                regional_convention)
+            regional_convention = timesheet.env[
+                "ur.regional.convention"
+            ].search([("ur_id", "=", timesheet.ur_id.id)])
+            timesheet.ur_regional_convention_nb = len(regional_convention)
 
-    @api.depends('sheet_id', 'sheet_id.state')
+    @api.depends("sheet_id", "sheet_id.state")
     def _compute_state(self):
         for timesheet in self:
             if not timesheet.sheet_id:
@@ -95,16 +99,16 @@ class ScopHrTimesheet(models.Model):
             else:
                 timesheet.state = timesheet.sheet_id.state
 
-    @api.depends('project_id', 'partner_id')
+    @api.depends("project_id", "partner_id")
     def _compute_calendar_l1(self):
         for ts in self:
             ts.calendar_l1 = ""
             if ts.project_id:
-                ts.calendar_l1 += ts.project_id.name + ', '
+                ts.calendar_l1 += ts.project_id.name + ", "
             if ts.partner_id:
                 ts.calendar_l1 += ts.partner_id.name
 
-    @api.depends('unit_amount')
+    @api.depends("unit_amount")
     def _compute_calendar_l2(self):
         for ts in self:
             ts.calendar_l2 = "Durée : " + str(ts.unit_amount) + " heure(s)"
@@ -112,8 +116,7 @@ class ScopHrTimesheet(models.Model):
     # ------------------------------------------------------
     # Override le _rec_name
     # ------------------------------------------------------
-    @api.multi
-    @api.depends('project_id', 'partner_id')
+    @api.depends("project_id", "partner_id")
     def name_get(self):
         result = []
         for ts in self:
@@ -124,96 +127,113 @@ class ScopHrTimesheet(models.Model):
     # ------------------------------------------------------
     # OnChange Functions
     # ------------------------------------------------------
-    @api.onchange('project_id')
+    @api.onchange("project_id")
     def onchange_project_id(self):
         self.partner_id = self.project_id.partner_id
 
-    @api.onchange('partner_id')
+    @api.onchange("partner_id")
     def onchange_partner_id(self):
         # affiche le Dispositif Financier par défaut sur la LdT
         # si il n'y a pas de date limite du dispositif
         # ou si la date de la Ldt est inférieure à la date limite du dispositif
-        if not self.partner_id.ur_financial_system_date or \
-           self.date <= self.partner_id.ur_financial_system_date:
+        if (
+            not self.partner_id.ur_financial_system_date
+            or self.date <= self.partner_id.ur_financial_system_date
+        ):
             self.ur_financial_system_id = self.partner_id.ur_financial_system_id
+
         # affiche la Convention par défaut sur la LdT
         # si il n'y a pas de date limite de la convention
         # ou si la date de la LdT est inférieure à la date limite de la convention
-        if not self.partner_id.ur_regional_convention_date or \
-           self.date <= self.partner_id.ur_regional_convention_date:
-            self.ur_regional_convention_id = self.partner_id.\
-                ur_regional_convention_id
+        if (
+            not self.partner_id.ur_regional_convention_date
+            or self.date <= self.partner_id.ur_regional_convention_date
+        ):
+            self.ur_regional_convention_id = self.partner_id.ur_regional_convention_id
 
     # ------------------------------------------------------
     # Contrains
     # ------------------------------------------------------
-    @api.constrains('unit_amount', 'date')
+    @api.constrains("unit_amount", "date")
     def _check_hours(self):
         for record in self:
-            lines = self.search([
-                ('date', '=', record.date),
-                ('employee_id', '=', record.employee_id.id)])
-            total = sum(lines.mapped('unit_amount'))
-            if (not self.env.user.company_id.day_working
-                    and total > self.env.user.company_id.day_duration):
+            lines = self.search(
+                [
+                    ("date", "=", record.date),
+                    ("employee_id", "=", record.employee_id.id),
+                ]
+            )
+            total = sum(lines.mapped("unit_amount"))
+            if (
+                not self.env.user.company_id.day_working
+                and total > self.env.user.company_id.day_duration
+            ):
                 raise ValidationError(
                     "Vous ne pouvez imputer plus de %sh sur la même journée.\n"
-                    "Journée du %s" % (
+                    "Journée du %s"
+                    % (
                         self.env.user.company_id.day_duration,
-                        record.date.strftime("%d/%m/%Y")))
+                        record.date.strftime("%d/%m/%Y"),
+                    )
+                )
 
-    @api.constrains('date')
+    @api.constrains("date")
     def _check_weekday(self):
         for line in self:
             dt = datetime.combine(line.date, time(12, 00))
-            holiday = self.env['resource.calendar.leaves'].search([
-                '|',
-                ('company_id', '=', False),
-                ('company_id', '=', self.env.user.company_id.id),
-                ('date_from', '<=', dt),
-                ('date_to', '>=', dt),
-            ])
+            holiday = self.env["resource.calendar.leaves"].search(
+                [
+                    "|",
+                    ("company_id", "=", False),
+                    ("company_id", "=", self.env.user.company_id.id),
+                    ("date_from", "<=", dt),
+                    ("date_to", ">=", dt),
+                ]
+            )
             if line.date.weekday() in (5, 6) or holiday:
                 raise ValidationError(
                     "Vous ne pouvez imputer du temps sur un weekend "
-                    "ou un jour férié.")
+                    "ou un jour férié."
+                )
 
     # ------------------------------------------------------
     # Override ORM
     # ------------------------------------------------------
-    @api.multi
     def unlink(self):
         for timesheet in self:
-            if timesheet.state in ['submit', 'valid']:
-                raise UserError('Vous ne pouvez pas supprimer une '
-                                'ligne de temps soumise ou validée')
+            if timesheet.state in ["submit", "valid"]:
+                raise UserError(
+                    "Vous ne pouvez pas supprimer une "
+                    "ligne de temps soumise ou validée"
+                )
         super(ScopHrTimesheet, self).unlink()
 
     # ------------------------------------------------------
     # Actions
     # ------------------------------------------------------
-    @api.multi
     def action_submit_timesheet_lines(self):
         """
-            Crée une feuille de temps avec les lignes sélectionnées
+        Crée une feuille de temps avec les lignes sélectionnées
         """
-        if any(time.state != 'to_report' or time.sheet_id for time in self):
+        if any(time.state != "to_report" or time.sheet_id for time in self):
             raise UserError(
-                "Vous ne pouvez pas insérer 2 fois la même ligne !")
-        if len(self.mapped('employee_id')) != 1:
+                "Vous ne pouvez pas insérer 2 fois la même ligne !"
+            )
+        if len(self.mapped("employee_id")) != 1:
             raise UserError(
                 "Il ne peut y avoir plusieurs employés dans une "
-                "même feuille de temps.")
+                "même feuille de temps."
+            )
 
         return {
-            'name': 'New Expense Report',
-            'type': 'ir.actions.act_window',
-            'view_mode': 'form',
-            'res_model': 'cgscop.timesheet.sheet',
-            'target': 'current',
-            'context': {
-                'default_timesheet_line_ids': self.ids,
-                'default_employee_id': self[0].employee_id.id,
-                'default_name': self[0].name if len(self) == 1 else ''
-            }
+            "name": "New Expense Report",
+            "type": "ir.actions.act_window",
+            "view_mode": "form",
+            "res_model": "cgscop.timesheet.sheet",
+            "target": "current",
+            "context": {
+                "default_timesheet_line_ids": self.ids,
+                "default_employee_id": self[0].employee_id.id,
+                "default_name": self[0].name if len(self) == 1 else "",
+            },
         }
diff --git a/models/project.py b/models/project.py
index d3850c72a8319fee6d6e2a634f6bb141d2ba65dc..e42a076543e7ab758e1398c091b758eae6230fcb 100644
--- a/models/project.py
+++ b/models/project.py
@@ -8,23 +8,26 @@ class ScopProjectTimesheet(models.Model):
     _inherit = "project.project"
 
     def _default_ur(self):
-        return self.env['res.company']._ur_default_get()
+        return self.env["res.company"]._ur_default_get()
 
     cgscop_timesheet_code_id = fields.Many2one(
-        comodel_name='cgscop.timesheet.code',
-        string='Code Activité National')
+        comodel_name="cgscop.timesheet.code", string="Code Activité National"
+    )
     privacy_visibility = fields.Selection(default="employees")
     ur_id = fields.Many2one(
-        'union.regionale',
-        string='Union Régionale',
+        "union.regionale",
+        string="Union Régionale",
         index=True,
-        on_delete='restrict',
-        default=_default_ur)
+        ondelete="restrict",
+        default=_default_ur,
+    )
 
-    @api.onchange('name')
+    @api.onchange("name")
     def onchange_name(self):
         analytic = self.analytic_account_id
         if analytic and analytic.ensure_one():
-            self.analytic_account_id.sudo().write({
-                'name': self.name,
-            })
+            self.analytic_account_id.sudo().write(
+                {
+                    "name": self.name,
+                }
+            )
diff --git a/models/res_company.py b/models/res_company.py
index 71519325ece5d6a6745f0c5090a7b346ebd8489b..5bcb365f2be28c1c01532918747e4e0a1984c303 100644
--- a/models/res_company.py
+++ b/models/res_company.py
@@ -8,11 +8,13 @@ class ResCompanyTmesheet(models.Model):
     _inherit = "res.company"
 
     day_duration = fields.Float(
-        string='Nb Heures/Jour',
+        string="Nb Heures/Jour",
         default=8,
-        help="Nombre d'heures max pour imputation")
+        help="Nombre d'heures max pour imputation",
+    )
     day_working = fields.Boolean(
-        string='Forfait Jour',
+        string="Forfait Jour",
         default=False,
-        help='Si cette option est cochée, un employé peut imputer sans limite'
-        ' de temps sur une journée')
+        help="Si cette option est cochée, un employé peut imputer sans limite"
+        " de temps sur une journée",
+    )
diff --git a/models/res_partner.py b/models/res_partner.py
index 848ce9956b2edb580d4fe58c6b6641cc1d4d0afb..1322cb907053ecf7fa5f2393122bb6efdc738455 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -8,23 +8,23 @@ class ScopPartnerTimesheet(models.Model):
     _inherit = "res.partner"
 
     ur_financial_system_id = fields.Many2one(
-        comodel_name='ur.financial.system',
-        string='Dispositif Financier',
-        ondelete='set null')
-    ur_financial_system_date = fields.Date(
-        "Date de fin de dispositif")
+        comodel_name="ur.financial.system",
+        string="Dispositif Financier",
+        ondelete="set null",
+    )
+    ur_financial_system_date = fields.Date("Date de fin de dispositif")
     ur_regional_convention_id = fields.Many2one(
-        comodel_name='ur.regional.convention',
-        string='Convention Régionale',
-        ondelete='set null')
-    ur_regional_convention_date = fields.Date(
-        "Date de fin de convention")
+        comodel_name="ur.regional.convention",
+        string="Convention Régionale",
+        ondelete="set null",
+    )
+    ur_regional_convention_date = fields.Date("Date de fin de convention")
     ur_financial_system_nb = fields.Integer(
-        string="Nb Dispositifs Financiers",
-        compute="_compute_ur_system_nb")
+        string="Nb Dispositifs Financiers", compute="_compute_ur_system_nb"
+    )
     ur_regional_convention_nb = fields.Integer(
-        string="Nb conventions régionales",
-        compute="_compute_ur_system_nb")
+        string="Nb conventions régionales", compute="_compute_ur_system_nb"
+    )
 
     # ------------------------------------------------------
     # Compute Functions
@@ -32,12 +32,12 @@ class ScopPartnerTimesheet(models.Model):
     def _compute_ur_system_nb(self):
         for partner in self:
             # Calcul nombre de dispositifs financiers
-            financial_system = partner.env['ur.financial.system'].search([
-                ('ur_id', '=', self.env.user.ur_id.id)])
-            partner.ur_financial_system_nb = len(
-                financial_system)
+            financial_system = partner.env["ur.financial.system"].search(
+                [("ur_id", "=", self.env.user.ur_id.id)]
+            )
+            partner.ur_financial_system_nb = len(financial_system)
             # Calcul nombre de conventions
-            regional_convention = partner.env['ur.regional.convention'].search([
-                ('ur_id', '=', self.env.user.ur_id.id)])
-            partner.ur_regional_convention_nb = len(
-                regional_convention)
+            regional_convention = partner.env["ur.regional.convention"].search(
+                [("ur_id", "=", self.env.user.ur_id.id)]
+            )
+            partner.ur_regional_convention_nb = len(regional_convention)
diff --git a/models/ur_financial_system.py b/models/ur_financial_system.py
index a608e520916af59fdec01920f501f0b43bf70ef3..f1aa473713f180f08868de222c0e859fc21922bc 100644
--- a/models/ur_financial_system.py
+++ b/models/ur_financial_system.py
@@ -9,16 +9,18 @@ class ScopTimesheetCode(models.Model):
     _description = "Dispositif financier UR"
 
     def _default_ur(self):
-        return self.env['res.company']._ur_default_get()
+        return self.env["res.company"]._ur_default_get()
 
-    name = fields.Char('Nom')
+    name = fields.Char("Nom")
     company_id = fields.Many2one(
-        comodel_name='res.company',
-        string='Société',
-        default=lambda self: self.env.user.company_id)
+        comodel_name="res.company",
+        string="Société",
+        default=lambda self: self.env.user.company_id,
+    )
     ur_id = fields.Many2one(
-        'union.regionale',
-        string='Union Régionale',
+        "union.regionale",
+        string="Union Régionale",
         index=True,
-        on_delete='restrict',
-        default=_default_ur)
+        ondelete="restrict",
+        default=_default_ur,
+    )
diff --git a/models/ur_month_timesheet.py b/models/ur_month_timesheet.py
index 11f9c4df6392a0be2e8b31ddf6227692c67fa306..76753cce697e3af0a4d857b8c433cb8c0816a437 100644
--- a/models/ur_month_timesheet.py
+++ b/models/ur_month_timesheet.py
@@ -7,67 +7,88 @@ from odoo import models, fields, api
 def get_years():
     year_list = []
     for i in range(2019, 2030):
-        year_list.append((i, str(i)))
+        year_list.append((str(i), str(i)))
     return year_list
 
-MONTHS = [(1, 'Janv'), (2, 'Fév'), (3, 'Mars'), (4, 'Avr'),
-          (5, 'Mai'), (6, 'Juin'), (7, 'Juil'), (8, 'Août'),
-          (9, 'Sept'), (10, 'Oct'), (11, 'Nov'), (12, 'Dec')]
+
+MONTHS = [
+    ("1", "Janv"),
+    ("2", "Fév"),
+    ("3", "Mars"),
+    ("4", "Avr"),
+    ("5", "Mai"),
+    ("6", "Juin"),
+    ("7", "Juil"),
+    ("8", "Août"),
+    ("9", "Sept"),
+    ("10", "Oct"),
+    ("11", "Nov"),
+    ("12", "Dec"),
+]
 
 
 class ScopMonthTimesheet(models.Model):
     _name = "ur.month.timesheet"
     _description = "Heures theoriques mensuelles"
-    _order = 'year, month'
+    _order = "year, month"
 
     def _default_ur(self):
-        return self.env['res.company']._ur_default_get()
+        return self.env["res.company"]._ur_default_get()
 
     year = fields.Selection(
-        selection=get_years(),
-        string='Année',
-        default=fields.Date.today().year)
-    month = fields.Selection(
-        selection=MONTHS,
-        string='Année')
+        selection=get_years(), string="Année", default=fields.Date.today().year
+    )
+    month = fields.Selection(selection=MONTHS, string="Mois")
     company_id = fields.Many2one(
-        comodel_name='res.company',
-        string='Société',
-        default=lambda self: self.env.user.company_id)
+        comodel_name="res.company",
+        string="Société",
+        default=lambda self: self.env.user.company_id,
+    )
     ur_id = fields.Many2one(
-        'union.regionale',
-        string='Union Régionale',
+        "union.regionale",
+        string="Union Régionale",
         index=True,
-        on_delete='restrict',
-        default=_default_ur)
-    working_time = fields.Integer('Heures théoriques')
+        ondelete="restrict",
+        default=_default_ur,
+    )
+    working_time = fields.Integer("Heures théoriques")
 
-    _sql_constraints = [(
-        'month_year_uniq',
-        'UNIQUE (year, month, ur_id)',
-        'Cette date a déjà été renseignée.'
-    )]
+    _sql_constraints = [
+        (
+            "month_year_uniq",
+            "UNIQUE (year, month, ur_id)",
+            "Cette date a déjà été renseignée.",
+        )
+    ]
 
     @api.model
     def get_month_values(self):
-        month_values = self.search([
-            '&', '|', '&',
-            ('year', '<', fields.Date.today().year),
-            ('month', '>', fields.Date.today().month),
-            '&',
-            ('year', '<', fields.Date.today().year + 1),
-            ('month', '<=', fields.Date.today().month + 1),
-            ('ur_id', '=', self.env.user.ur_id.id)],
+        month_values = self.search(
+            [
+                "&",
+                "|",
+                "&",
+                ("year", "<", fields.Date.today().year),
+                ("month", ">", fields.Date.today().month),
+                "&",
+                ("year", "<", fields.Date.today().year + 1),
+                ("month", "<=", fields.Date.today().month + 1),
+                ("ur_id", "=", self.env.user.ur_id.id),
+            ],
             limit=12,
-            order='year desc, month desc').sorted(reverse=False)
+            order="year desc, month desc",
+        ).sorted(reverse=False)
         return {
-            'month': month_values.mapped(lambda x: {
-                'year': x.year,
-                'num_month': x.month,
-                'month': self._fields['month'].selection[x.month-1][1]}),
-            'values': month_values.mapped('working_time'),
-            'today': {
-                'year': fields.Date.today().year,
-                'month': fields.Date.today().month
-            }
+            "month": month_values.mapped(
+                lambda x: {
+                    "year": x.year,
+                    "num_month": x.month,
+                    "month": self._fields["month"].selection[x.month - 1][1],
+                }
+            ),
+            "values": month_values.mapped("working_time"),
+            "today": {
+                "year": fields.Date.today().year,
+                "month": fields.Date.today().month,
+            },
         }
diff --git a/models/ur_regional_convention.py b/models/ur_regional_convention.py
index 04a986cc5412335d8a67cf989e764ce2748c1763..6129a1494a40123e19d94914b58573c90b9640f0 100644
--- a/models/ur_regional_convention.py
+++ b/models/ur_regional_convention.py
@@ -9,16 +9,18 @@ class ScopRegionalConvention(models.Model):
     _description = "Convention Régionale UR"
 
     def _default_ur(self):
-        return self.env['res.company']._ur_default_get()
+        return self.env["res.company"]._ur_default_get()
 
-    name = fields.Char('Nom')
+    name = fields.Char("Nom")
     company_id = fields.Many2one(
-        comodel_name='res.company',
-        string='Société',
-        default=lambda self: self.env.user.company_id)
+        comodel_name="res.company",
+        string="Société",
+        default=lambda self: self.env.user.company_id,
+    )
     ur_id = fields.Many2one(
-        'union.regionale',
-        string='Union Régionale',
+        "union.regionale",
+        string="Union Régionale",
         index=True,
-        on_delete='restrict',
-        default=_default_ur)
+        ondelete="restrict",
+        default=_default_ur,
+    )
diff --git a/report/report_hr_timesheet.xml b/report/report_hr_timesheet.xml
index c14423041237071750b8316da24b4730afffbbc9..f6f1b49feafd385d8db23cf999ba33ed734c169b 100644
--- a/report/report_hr_timesheet.xml
+++ b/report/report_hr_timesheet.xml
@@ -107,17 +107,14 @@
         </record>
 
         <!-- QWeb Reports -->
-        <report
-            id="cgscop_timesheet_sheet_report"
-            model="cgscop.timesheet.sheet"
-            string="CG Scop - Feuille de Temps"
-            report_type="qweb-pdf"
-            name="cgscop_timesheet.report_timesheet_sheet"
-            file="cgscop_timesheet.report_timesheet_sheet"
-            paperformat="cgscop_paperformat_a4_landscape"
-            menu="False"
-        />
-
+        <record id="cgscop_timesheet_sheet_report" model="ir.actions.report">
+            <field name="name">CG Scop - Feuille de Temps</field>
+            <field name="model">cgscop.timesheet.sheet</field>
+            <field name="report_type">qweb-pdf</field>
+            <field name="report_name">cgscop_timesheet.report_timesheet_sheet</field>
+            <field name="report_file">cgscop_timesheet.report_timesheet_sheet</field>
+            <field name="paperformat_id" ref="cgscop_paperformat_a4_landscape"/>
+        </record>
 
     </data>
 </odoo>
diff --git a/security/security_rules.xml b/security/security_rules.xml
index 7a6b6382aefdac34edf78143f6ed7a7d0807b58f..c60f6013fe09e7b8dc036039ae489fc1c9eda877 100644
--- a/security/security_rules.xml
+++ b/security/security_rules.xml
@@ -3,7 +3,7 @@
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 
 <odoo>
-    <data noupdate="0">
+    <data>
 
         <record id="ur_financial_system_rule_ur" model="ir.rule">
             <field name="name">ur financial system rule per ur</field>
diff --git a/static/description/icon.png b/static/description/icon.png
index 82ef47760a441cf229b5009f0a18ccf3842fbfa5..499652a2c9c0307f875bafc145b6fbafa133da72 100644
Binary files a/static/description/icon.png and b/static/description/icon.png differ
diff --git a/views/cgscop_timesheet_sheet.xml b/views/cgscop_timesheet_sheet.xml
index 7673990d8b844c2c433fad8e9c80b6377203b091..a6097574d71970e632812cf2f7ecb99c01c82cc5 100644
--- a/views/cgscop_timesheet_sheet.xml
+++ b/views/cgscop_timesheet_sheet.xml
@@ -24,14 +24,17 @@
         <record id="view_cgscop_timesheet_sheet_form" model="ir.ui.view">
             <field name="name">cgscop.timesheet.sheet.form</field>
             <field name="model">cgscop.timesheet.sheet</field>
-            <field eval="25" name="priority"/>
+            <field name="priority" eval="25"/>
             <field name="arch" type="xml">
                 <form>
+                    <field name="company_id" invisible="1"/>
                     <header>
                         <button name="action_submit_timesheet" states="draft" string="Soumettre" type="object" class="oe_highlight"/>
                         <button name="approve_timesheet_sheets" states="submit" string="Valider" type="object" groups="hr_timesheet.group_timesheet_manager" class="oe_highlight"/>
                         <button name="print_timesheet" string="Imprimer" type="object" />
-                        <button name="reset_timesheet_sheets" string="Remettre en brouillon" type="object" attrs="{'invisible': [('state', '=', 'draft')]}" groups="hr_timesheet.group_timesheet_manager"/>
+                        <button name="reset_timesheet_sheets" string="Remettre en brouillon"
+                                type="object" attrs="{'invisible': [('state', '=', 'draft')]}"
+                                groups="hr_timesheet.group_timesheet_manager"/>
                         <field name="state" widget="statusbar" statusbar_visible="draft,submit,valid"/>
                     </header>
                     <sheet>
@@ -54,8 +57,12 @@
                             </group>
                         </group>
                         <field name="can_edit" invisible="1"/>
-                        <field name="timesheet_line_ids" widget="many2many" domain="[('sheet_id', '=', False), ('employee_id', '=', employee_id)]" options="{'reload_on_button': True}" attrs="{'readonly': [('can_edit','=', False), ('state','!=', 'draft')]}" context="{'form_view_ref' : 'hr_timesheet.timesheet_view_form_user'}">
+                        <field name="timesheet_line_ids" widget="many2many"
+                               domain="[('sheet_id', '=', False), ('employee_id', '=', employee_id)]"
+                               options="{'reload_on_button': True}" attrs="{'readonly': [('can_edit','=', False), ('state','!=', 'draft')]}"
+                               context="{'form_view_ref' : 'hr_timesheet.timesheet_view_form_user'}">
                             <tree editable="top">
+                                <field name="company_id" invisible="1"/>
                                 <field name="ur_id" invisible="1"/>
                                 <field name="date"/>
                                 <field name="employee_id" readonly="1"/>
diff --git a/views/hr_timesheet.xml b/views/hr_timesheet.xml
index 1cffd342be4bedf1356a23e1e68b873b2e8c29d3..5f90a196238b9b3a7673c36ff878d1f3145d4a06 100644
--- a/views/hr_timesheet.xml
+++ b/views/hr_timesheet.xml
@@ -3,7 +3,7 @@
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 
 <odoo>
-    <data noupdate="0">
+    <data>
 
         <!--
             Vues
@@ -82,10 +82,10 @@
             <field name="model">account.analytic.line</field>
             <field name="inherit_id" ref="analytic.view_account_analytic_line_form"/> 
             <field name="arch" type="xml">
-                <xpath expr="//form/group" position="attributes">
-                    <attribute name="invisible">1</attribute>
+                <xpath expr="//sheet/group" position="attributes">
+                    <attribute name="groups">base.group_system</attribute>
                 </xpath>
-                <xpath expr="//form/group" position="after">
+                <xpath expr="//sheet/group" position="before">
                     <group string="Activité">
                         <field name="ur_id" options="{'no_open': True, 'no_create': True}" groups="cgscop_partner.group_cg_administrator"/>
                         <field name="employee_id" options="{'no_open': True, 'no_create': True}" required="True" groups="hr_timesheet.group_timesheet_manager"/>                       
@@ -172,7 +172,7 @@
                           date_start="date" mode="month"
                           quick_add="False"
                           color="project_id"
-                          readonly_form_view_id="cgscop_timesheet.view_cgscop_hr_timesheet_line_form">
+                          form_view_id="cgscop_timesheet.view_cgscop_hr_timesheet_line_form">
                     <field name="calendar_l1"/>
                     <field name="calendar_l2"/>
                 </calendar>
@@ -183,11 +183,6 @@
             Actions
         -->
 
-        <!-- Renomme l'action dans hr_timesheet -->
-        <record id="hr_timesheet.menu_hr_time_tracking" model="ir.actions.act_window">
-            <field name="name">Lignes de temps</field>
-        </record>
-
         <!-- Hérite l'action de la fenetre dans hr_timesheet -->
         <record id="hr_timesheet.act_hr_timesheet_line" model="ir.actions.act_window">
             <field name="name">Mes lignes de temps</field>
@@ -258,7 +253,7 @@ if records:
             <field name="groups_id" eval="[(6,0, [ref('hr_timesheet.group_timesheet_manager'), ref('cgscop_partner.group_cg_administrator'), ref('cgscop_partner.group_ur_list_modif')])]"/>
         </record>
 
-        <!-- ajoute des droits pour gestionnaire uniquement sur le menu Toutes les feuilles de temps -->
+        <!-- ajoute des droits pour gestionnaire uniquement sur le menu Toutes les lignes de temps -->
         <record model="ir.ui.menu" id="hr_timesheet.timesheet_menu_activity_all">
             <field name="groups_id" eval="[(6,0, [ref('hr_timesheet.group_timesheet_manager'), ref('cgscop_partner.group_cg_administrator')])]"/>
         </record>
@@ -268,12 +263,19 @@ if records:
             action="timesheet_action_report_by_contact"
             name="Par Contact"
             sequence="25"/>
+    </data>
 
-
-
-
+    <data noupdate="0">
+        <!-- Modifie le nom des menus -->
+        <record id="hr_timesheet.menu_hr_time_tracking" model="ir.ui.menu">
+            <field name="name">Lignes de temps</field>
+        </record>
+        <record id="hr_timesheet.timesheet_menu_activity_mine" model="ir.ui.menu">
+            <field name="name">Mes lignes de temps</field>
+        </record>
     </data>
+
     <data noupdate="1">
-        <delete id="hr_timesheet.timesheet_menu_report_timesheet_by_task"  model="ir.ui.menu"/>
+        <delete id="hr_timesheet.timesheet_menu_report_timesheet_by_task" model="ir.ui.menu"/>
     </data>
 </odoo>
\ No newline at end of file
diff --git a/views/hr_timesheet_cgscop.xml b/views/hr_timesheet_cgscop.xml
index 3a6aa23db8fb3608f0e7796f5d4917f6f9252d61..e2eeceb8996e2f85ca237d47e47ff625d59844f9 100644
--- a/views/hr_timesheet_cgscop.xml
+++ b/views/hr_timesheet_cgscop.xml
@@ -131,7 +131,6 @@
         <record id="act_cgscop_project_timesheet" model="ir.actions.act_window">
             <field name="name">Codes activités UR</field>
             <field name="res_model">project.project</field>
-            <field name="view_type">form</field>
             <field name="domain">[]</field>
             <field name="view_mode">tree,kanban,form</field>
             <field name="view_ids" eval="[(5, 0, 0),