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),